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

标签 java z3 smt

我的上下文仅包含以下数据类型声明:

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

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

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

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

最佳答案

您只能从Solver(或Optimize)对象转换为smtlib。将上下文视为某种“管理器”,它独立于 smt-lib 或任何特定的表示形式。你是对的,你必须断言这个对象的一些东西,这是相当烦人的。

话虽如此,您的 signal 值在内部将存储为 Sort 对象:https://z3prover.github.io/api/html/classz3_1_1sort.html 。 (在你的例子中,无论这个类的 Java 等价物是什么。)理论上,人们可以仔细检查这个对象以找出它是一种数据类型,获取构造函数等,以手动进行翻译;但这将非常依赖于表示,并且从长远来看可能容易出错。

关于java - Z3 Java API toString() 不打印未使用的声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56515223/

相关文章:

java - Java中字符串的字节数

java - 使用 Jdom/XPath 和 "检索元素

types - 将 Z3 Real 类型转换成浮点

z3 - 目标没有战术支持

java - 使用默认服务帐户的 Bigquery 插入作业

java - libGDX、Box2D、碰撞和禁止空中跳跃

z3 - 将 IR 转换为 Z3 公式?

haskell - 浮点 SMT 逻辑比实际逻辑慢吗?

c++ - 使用 C++ 在 Z3 中使用 Z3_parse_smtlib2_string 获取 Unsat Core

z3 - (get-unsat-core)在Z3中返回空