Answers:
SMT求解器是SAT求解器+决策程序
SAT求解器是决策问题的求解器:SAT问题是决策问题。此外,此决策问题是“可简化的”:
SAT问题是可自约的,也就是说,可以使用正确回答SAT实例是否正确的每种算法来找到满意的分配
—(维基百科)
这意味着SAT解算器除了可以确定问题外,还可以给出令人满意的分配。
TL; DR SMT求解器根据理论允许的类型/约束来解决SAT问题的泛化问题。此外,它们还允许比SAT编码所允许的更高级别的类型关系进行编码。
尽管QF_BV SMT求解器比SAT求解器具有这一优势,但我认为这并不是复杂性的优势:它们本质上是等效的,并且花费指数时间来解决最坏的问题。但是实际上,由于有了这些额外的知识,QF_BV SMT求解器可能会快得多。请参阅我对SMT求解器的限制的答案,以获取“当前” QF_BV SMT求解器和SAT求解器都会被“硬”的示例。
还有一些SMT求解器试图解决比布尔可满足性更棘手的问题(例如,允许实数的类型和约束,或者允许使用量词)。显然,这些理论上至少与SAT解算器一样慢。这些SMT求解器是对SAT问题的概括。代替使用二进制变量,每个“理论”都允许在不同域(例如实数)或量化(所有)约束上的关系/约束。
定理证明者
但是,与解决NP完全问题的有效方法引起的数学革命相比,这种变化在意义上可能显得微不足道。根据Stephen Cook的说法,[19]
...这将允许计算机找到具有合理长度证明的任何定理的形式证明,从而对数学进行转换,因为形式证明可以在多项式时间内轻松识别。示例问题很可能包括所有CMI奖金问题。
—(维基百科)
[19]:库克,斯蒂芬(2000年4月)。P与NP问题。粘土数学研究所(PDF)。
但是就目前而言,自动定理大多证明是使用启发式或指数时间算法(但仍然很有用)。
约束求解器
这些通常是将SAT / SMT求解器重新编写为其他语言的形式。如果您曾经使用任何SAT / SMT求解器来解决问题,那么您真的可以爱上求解器的不确定性。也就是说,您无需告诉计算机如何做,而是告诉计算机您想要什么。您希望输出具有什么属性,以及SAT / SMT求解器将以不确定性“填充”它,而不会打扰您实现的细节。这种编程范例非常有吸引力,称为约束编程,要运行,它必须使用约束求解器(取决于后端允许使用的类型和约束,它可能在后端使用SAT / SMT求解器) 。
但是我看到有人称Z3为定理证明者。因此,我不知道该如何区分这些术语。
AFAIK Z3是许多工具的套件,包括SMT求解器,几种定理证明/模型检查语言等。
对所有这些人来说,最通用的术语是什么?
我认为可满足性问题的一般化是可满足性模理论,因此“ SMT求解器”将是所有这些中最通用的。但是,并非所有实际的SMT求解器实现都能解决所有理论,因此这并不意味着所有SMT求解器都具有同等的通用性。