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 中编码。
我希望在 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 中编码。