Z3 中定义变量和常量的宏

macros in Z3 that define variables and constants

我希望在 Z3 中有可以定义变量和常量的宏。我不知道如何使用该语言执行此操作,所以我使用 cpp(c 预处理器)来执行此操作。

比如我有:

#define CONST(NAME,VALUE) (declare-const NAME Int) (assert (= NAME VALUE))

然后我可以定义常量,比如:

CONST(MIN_AGE, 10)
CONST(MAX_AGE, 140)

有没有办法在语言中做到这一点?

在 SMTLib 中编写这些的规范方法是:

(define-fun MIN_AGE () Int  10)
(define-fun MAX_AGE () Int 140)

请注意使用 define-fun 构造而不是 declare-const,它声明名称并将其与常量值关联。

参见 http://smtlib.cs.uiowa.edu/ for detailed information on the language. In particular, this document 标准化求解器的语法和语义。 define-fun 命令在第 62 页描述。

请注意,SMTLib 并不是真正打算 "hand" 编写的。更适合机器生成。大多数 SMT 用户将使用更高级别的 API,它将在后台使用 SMT-Lib(或不同的机制)与求解器进行通信。所有主要语言都有选择,包括 C/C++/Java/Python/Haskell/O'Caml 和其他语言,它们具有不同的成熟度和支持的功能。我的建议是选择其中一种语言并使用它们的 API,而不是直接在 SMTLib 中编码。