Z3:将Z3py表达式从解算器对象转换为SMT-LIB2

Z3:将Z3py表达式从解算器对象转换为SMT-LIB2,z3,Z3,这个问题非常类似于: 是否可以从解算器对象生成SMT-LIB2输出?解算器类具有名为assertions()的方法。它将所有断言的公式返回到给定的解算器中。在提取断言之后,我们可以使用前面问题中使用的相同方法。下面是对 def toSMT2Benchmark(f,status=“unknown”,name=“benchmark”,logic=”“): v=(Ast*0)() 如果isinstance(f,解算器): a=f.断言() 如果len(a)==0: f=布尔瓦尔(真) 其他: f=和(

这个问题非常类似于:


是否可以从解算器对象生成SMT-LIB2输出?

解算器类具有名为
assertions()
的方法。它将所有断言的公式返回到给定的解算器中。在提取断言之后,我们可以使用前面问题中使用的相同方法。下面是对

def toSMT2Benchmark(f,status=“unknown”,name=“benchmark”,logic=”“):
v=(Ast*0)()
如果isinstance(f,解算器):
a=f.断言()
如果len(a)==0:
f=布尔瓦尔(真)
其他:
f=和(*a)
将Z3_benchmark_返回到_smtlib_字符串(f.ctx_ref(),名称,逻辑,状态,“”,0,v,f.as_ast())
下面是一个例子()

s=Solver()
打印到MT2benchmark(s,logic=“QF_LIA”)
a、 b=整数('AB')
s、 添加(a>1)
s、 添加(或(a<1,b<2))
打印到MT2benchmark(s,logic=“QF_LIA”)
编辑我们可以使用以下脚本以SMTLIB 1.x格式显示输出(也可在线获得)。请注意,SMTLIB 1.x非常有限,并且不支持一些功能。 我们还强烈鼓励所有用户使用SMTLIB 2.x

def-tosmtbanchmark(f,status=“unknown”,name=“benchmark”,logic=”“):
v=(Ast*0)()
如果isinstance(f,解算器):
a=f.断言()
如果len(a)==0:
f=布尔瓦尔(真)
其他:
f=和(*a)
Z3_set_ast_print_mode(f.ctx_ref(),Z3_print_SMTLIB_COMPLIANT)#set SMTLIB 1.x pretty print mode
r=Z3_benchmark_to_smtlib_string(f.ctx_ref(),名称,逻辑,状态,“”,0,v,f.as_ast())
Z3_设置_ast_打印_模式(f.ctx_ref(),Z3_打印_SMTLIB2_兼容)#恢复SMTLIB 2.x打印模式
返回r
s=解算器()
打印到MTBenchmark(s,logic=“QF_LIA”)
a、 b=整数('AB')
s、 添加(a>1)
s、 添加(或(a<1,b<2))
打印到MTBenchmark(s,logic=“QF_LIA”)

结束编辑

是否可以强制z3返回SMT-LIB 1.2兼容编码?