我的上下文只有以下数据类型声明:
EnumSort signal = ctx.mkEnumSort("signal", "red", "yellow", "green");
我想要获得上述声明的等效SMTLIB表示形式,如下所示:
(declare-datatypes () ((signal red yellow green)))
我该如何转换?我尝试为此上下文创建一个求解器,然后执行solver.toString()
,但除非我在断言中使用此声明,否则它不会打印任何内容。
答案 0 :(得分:1)
您只能从Solver
(或Optimize
)对象转换为smtlib。将上下文视为某种“管理器”,它独立于smt-lib或任何特定表示形式。而且您是正确的,您必须对此对象声明一些内容,这很烦人。
话虽如此,您的signal
值将在内部存储为Sort
对象:https://z3prover.github.io/api/html/classz3_1_1sort.html。 (在您的情况下,无论该类的Java等效什么。)从理论上讲,然后可以仔细检查该对象以找出它是数据类型,获取构造函数等,以手动进行翻译;但这将非常依赖于表示形式,并且从长远来看很容易出错。