z3中的DPLL(T)型SMT求解是否记录了线性实数运算?

z3中的DPLL(T)型SMT求解是否记录了线性实数运算?,z3,smt,formal-verification,dpll,Z3,Smt,Formal Verification,Dpll,我正试图设计一些方法来改善z3在我的问题上的性能。我知道CAV'06和。z3 v4.3.1的相关部分是否与这些文件中描述的内容不同,如果不同,在哪些方面不同?此外,在z3中,默认情况下,决定何时检查线性实数运算的一致性的策略是什么?对应于已确定(和传播)的命题文字的理论原子的一致性?线性运算在src/smt/theory\u arith*的文件中实现。 看 关于您指出的文件,在实施过程中使用了这些想法。然而,实际的代码包含了对线性整数、非线性算法和证明生成的许多扩展。如果你只关心线性实数算术,你

我正试图设计一些方法来改善z3在我的问题上的性能。我知道CAV'06和。z3 v4.3.1的相关部分是否与这些文件中描述的内容不同,如果不同,在哪些方面不同?此外,在z3中,默认情况下,决定何时检查线性实数运算的一致性的策略是什么?对应于已确定(和传播)的命题文字的理论原子的一致性?

线性运算在
src/smt/theory\u arith*
的文件中实现。 看


关于您指出的文件,在实施过程中使用了这些想法。然而,实际的代码包含了对线性整数、非线性算法和证明生成的许多扩展。如果你只关心线性实数算术,你应该只关注
理论算术.h
理论算术.h
。文件
theory\u arith\u aux.h
也包含有用的功能。

底层方法是相同的。Z3中的实现包含许多在实验和基准测试期间添加的扩展。例如,它与非线性约束集成,具有单元传播模式,在某些情况下,它使用局部优化作为解决整数问题的一部分,并在可能的情况下生成接口变量具有不同值的模型。最后一个特性在SMT 2007研讨会论文《基于模型的理论组合》中进行了描述。其他功能未在别处介绍,但源代码可在z3.codeplex.com上获得,谢谢。我的SMT LRA问题具有任意命题结构(包括.smt2输入文件中的“=>”、“或”等)。所以,我对LRA以及你指出的LRA理论函数和SAT解算器之间的相互作用感兴趣。特别是,我试图找出从SAT层到theory_arith*函数的大量调用是否是瓶颈(在这种情况下,我想修改这个策略),或者是对theory_arith*的单个调用相对来说消耗了大量时间(我相信类似update_和\u pivot()的函数是很好的分析对象).任何关于如何进行这项工作的见解都将非常有用。谢谢