0

我很确定应该可以使用 SMT-lib 语法来描述元组,尤其是对于 Z3 求解器。但是,我真的找不到这样做的方法。我唯一找到的是这个文档页面,但我不知道如何在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'")
4

2 回答 2

2

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

于 2021-05-21T16:13:49.547 回答
1

您的链接指向 OCAML API,即这与 SMT 无关。元组是数据类型的一种特殊情况, Z3 指南中有一节。

于 2021-05-21T12:08:02.703 回答