Z3 使用现有的SMT解算器可以得到QF_UF公式的等可满足布尔公式吗?

Z3 使用现有的SMT解算器可以得到QF_UF公式的等可满足布尔公式吗?,z3,smt,satisfiability,Z3,Smt,Satisfiability,在渴望SMT解算器中,SMT公式被编码为可等满足的布尔公式,该布尔公式被馈送给SAT解算器。通常,对于QF_-UF公式,未解释的函数通过Ackermann约化或Bryant约化进行约化,然后通过等式图方法构造一个等式可满足的布尔公式 因此,我想知道,在给定QF_UF公式的情况下,是否可以调用现有SMT解算器来获得可等式满足的布尔公式,而无需破解解算器的低级实现。例如,Z3有一些转换输入问题的策略(例如tseitin cnf和elim term ite),并且有这样的转换策略吗?在Z3中,您可以使

在渴望SMT解算器中,SMT公式被编码为可等满足的布尔公式,该布尔公式被馈送给SAT解算器。通常,对于QF_-UF公式,未解释的函数通过Ackermann约化或Bryant约化进行约化,然后通过等式图方法构造一个等式可满足的布尔公式


因此,我想知道,在给定QF_UF公式的情况下,是否可以调用现有SMT解算器来获得可等式满足的布尔公式,而无需破解解算器的低级实现。例如,Z3有一些转换输入问题的策略(例如
tseitin cnf
elim term ite
),并且有这样的转换策略吗?

在Z3中,您可以使用类似于


您还可以使用位爆炸策略获得SAT公式,它将覆盖布尔Z3变量。我认为不能保证是CNF或NNF或任何形式。

我稍后会尝试第一种解决方案。对于第二个问题,当我尝试将
bit blast
策略应用于QF_-UF问题()时,输出仍然是一个QF_-UF问题。我做错什么了吗?或者是
bit blast
策略只支持BV问题?啊,是的。你需要先去掉UF符号。现在有了阿克曼化的策略。我的名字是ackermannize_bv IIRC。非常感谢。现在UF符号减少了。但我发现,
bit blast
仍然无法将QF_UF问题转换为SAT公式()。那么,是否有任何工作策略可以将一个没有非零算术函数的QF_UF公式转换为SAT公式?非常感谢。你说的SAT公式是什么意思?如果你想要DIMACS,你需要使用我提供的补丁;我不认为这个功能是公开的。如果你想要CNF或NNF,也有一些策略。