如何在 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 节以了解如何声明和使用新的数据类型。