在进行理论一致性检查之前,z3的SAT求解器是否获得了对SMT问题的命题(部分)部分的完整赋值?特别是,我很想知道以下每种背景理论/组合默认做了什么(如果这是理论依赖的):线性实数算术(LRA),线性整数实数算术(LIRA),非线性整数真算术(NIRA)?另外,在实际代码中(codeplex stable z3 v4.3.1)是由SAT求解器决定的命题文字(启发式)吗?
答案 0 :(得分:1)
不,Z3在进行理论一致性检查之前没有获得完整的作业。
但是,它推迟了“昂贵”的检查。 “昂贵”检查在称为final_check
的步骤中执行,该步骤仅在产生(完整的)推荐分配时执行。这里“昂贵”这个词是相对的。由于大数算术计算,线性实数一致性检查可能非常昂贵,但在Z3中它们被认为是“便宜的”。
线性实际算术检查是急切的。非线性和线性整数算术检查在final_check
步骤完成。
请注意,Z3包含多个解算器。上面的行为适用于目录smt
中实现的行为。非线性实数算术求解器(nlsat
目录)以完全不同的方式工作,并且它不使用上述final_check
方法。