z3';s SAT解算器在进行理论一致性检查之前是否获得完整的作业?

z3';s SAT解算器在进行理论一致性检查之前是否获得完整的作业?,z3,smt,Z3,Smt,z3的SAT解算器在进行理论一致性检查之前是否获得了SMT问题命题部分的完整赋值?特别是,我很想知道以下每种背景理论/组合(如果这与理论有关):线性实数算术(LRA)、线性整数实数算术(LIRA)、非线性整数实数算术(NIRA)的默认设置是什么?此外,在实际代码(codeplex stable z3 v4.3.1)中,如果是SAT解算器确定的命题文字(启发式)?否,z3在进行理论一致性检查之前不会获得完整的赋值。 然而,它延迟了“昂贵”的支票。“昂贵”检查是在称为“最终检查”的步骤中执行的,该步

z3的SAT解算器在进行理论一致性检查之前是否获得了SMT问题命题部分的完整赋值?特别是,我很想知道以下每种背景理论/组合(如果这与理论有关):线性实数算术(LRA)、线性整数实数算术(LIRA)、非线性整数实数算术(NIRA)的默认设置是什么?此外,在实际代码(codeplex stable z3 v4.3.1)中,如果是SAT解算器确定的命题文字(启发式)?

否,z3在进行理论一致性检查之前不会获得完整的赋值。 然而,它延迟了“昂贵”的支票。“昂贵”检查是在称为“最终检查”的步骤中执行的,该步骤仅在生成(完整)分配时执行。这里“昂贵”一词是相对的。由于大量的算术计算,线性实数算术一致性检查可能非常昂贵,但在Z3中它们被认为是“便宜的”

线性实数算术检查是迫切需要完成的。非线性和线性整数算术检查在
最终检查
步骤中完成


请注意,Z3包含多个解算器。上述行为适用于目录
smt
中实现的行为。非线性实数运算器(
nlsat
目录)的工作方式完全不同,它不使用上述的
final\u check
方法。

需要澄清的是:对于线性实数运算,您的意思是在/*每一个*/命题决策之后(我相信这会导致一个assert\u upper()或者断言_lower())?谢谢。是的,这是正确的。在SAT引擎执行新决策之前,将调用方法
void theory\u arith::propagate()