如何在 SMT-lib 中使用元组?
How to use tuples in SMT-lib?
我很确定应该可以使用 SMT-lib 语法来描述元组,尤其是对于 Z3 求解器。但是,我真的找不到这样做的方法。我唯一找到的是 this documentation page,但我不知道如何在 z3 -in
中使用它。
到目前为止我的奋斗:
(declare-const t (Prod Int Bool))
(error "line 1 column 19: unknown sort 'Prod'")
(declare-const t (Tuple Int Bool))
(error "line 2 column 18: unknown sort 'Tuple'")
(declare-const t (Pair Int Bool))
(error "line 3 column 18: unknown sort 'Pair'")
您的 link 指向 OCAML API,即这与 SMT 无关。元组是数据类型的一种特殊情况,在 Z3 Guide.
中有一个部分
除了 Christoph 所说的,SMTLib 文档中还有一个示例:http://smtlib.cs.uiowa.edu/papers/smt-lib-reference-v2.6-r2021-05-12.pdf
在第 4.2.3 节中,您可以找到:
(declare-datatype Pair (par (X Y) ((pair (first X) (second Y)))))
如果你只想IntxBool
,那么你可以简化:
(declare-datatype PairIntBool (par () ((pair (first Int) (second Bool)))))
一般来说,您应该通读第 4.2.3 节以了解如何声明和使用新的数据类型。
我很确定应该可以使用 SMT-lib 语法来描述元组,尤其是对于 Z3 求解器。但是,我真的找不到这样做的方法。我唯一找到的是 this documentation page,但我不知道如何在 z3 -in
中使用它。
到目前为止我的奋斗:
(declare-const t (Prod Int Bool))
(error "line 1 column 19: unknown sort 'Prod'")
(declare-const t (Tuple Int Bool))
(error "line 2 column 18: unknown sort 'Tuple'")
(declare-const t (Pair Int Bool))
(error "line 3 column 18: unknown sort 'Pair'")
您的 link 指向 OCAML API,即这与 SMT 无关。元组是数据类型的一种特殊情况,在 Z3 Guide.
中有一个部分除了 Christoph 所说的,SMTLib 文档中还有一个示例:http://smtlib.cs.uiowa.edu/papers/smt-lib-reference-v2.6-r2021-05-12.pdf
在第 4.2.3 节中,您可以找到:
(declare-datatype Pair (par (X Y) ((pair (first X) (second Y)))))
如果你只想IntxBool
,那么你可以简化:
(declare-datatype PairIntBool (par () ((pair (first Int) (second Bool)))))
一般来说,您应该通读第 4.2.3 节以了解如何声明和使用新的数据类型。