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

时间:2019-06-09 14:01:00

标签: java z3 smt

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

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

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

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

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

1 个答案:

答案 0 :(得分:1)

您只能从Solver(或Optimize)对象转换为smtlib。将上下文视为某种“管理器”,它独立于smt-lib或任何特定表示形式。而且您是正确的,您必须对此对象声明一些内容,这很烦人。

话虽如此,您的signal值将在内部存储为Sort对象:https://z3prover.github.io/api/html/classz3_1_1sort.html。 (在您的情况下,无论该类的Java等效什么。)从理论上讲,然后可以仔细检查该对象以找出它是数据类型,获取构造函数等,以手动进行翻译;但这将非常依赖于表示形式,并且从长远来看很容易出错。