Z3 Java API toString() 不打印未使用的声明

Z3 Java API toString() Doesn't Print Unused Declarations

我有一个只有以下数据类型声明的上下文:

EnumSort signal = ctx.mkEnumSort("signal", "red", "yellow", "green");

我想要的是获得上述声明的等效 SMTLIB 表示,如下所示:

(declare-datatypes () ((signal red yellow green)))

如何转换?我尝试为此上下文创建一个求解器,然后执行 solver.toString() 但它不会打印任何内容,除非我在断言中使用此声明。

您只能从 Solver(或 Optimize)对象转换为 smtlib。将上下文视为某种 "manager",独立于 smt-lib 或任何特定表示。你是对的,你必须断言关于这个对象的一些东西,这很烦人。

话虽如此,在内部您的 signal 值将存储为 Sort 对象:https://z3prover.github.io/api/html/classz3_1_1sort.html。 (在您的情况下,无论 class 的 Java 等价物是什么。)理论上,然后可以仔细检查该对象以确定它是一种数据类型,获取构造函数等,以通过以下方式进行翻译手;但这将非常依赖于表示并且很可能是 error-prone 在长 运行.