即使对于最简单的SMT算术问题,也需要存在量词来声明符号变量。通过反转约束,∀
量词可以变成∃
。因此,我可以在QF_*
逻辑中同时使用它们,并且可以使用。
我认为,“无量化器”对于这种SMT逻辑来说还有其他含义,但是究竟是什么呢?
答案 0 :(得分:3)
声称是
通过反转约束,可以将
∀
量词转换为∃
AFAIK ,以下两个关系成立:
∀x.φ(x) <=> ¬∃x.¬φ(x)
¬∀x.φ(x) <=> ∃x.¬φ(x)
由于无量词的SMT公式φ(x)
与其存在的闭包∃x.φ(x)
相当,因此我们可以使用SMT理论的无量词片段来表示< em>(简单)否定了普遍量化的发生,而 [AFAIK] 也是(简单)对平凡公式的普遍量化的肯定发生< / em> (例如,如果[∃x.]φ(x)
是unsat
,则∀x.¬φ(x)
¹)。
¹:假设φ(x)
是无量词的;正如@Levent Erkok在他的回答中指出的那样,当φ(x)
和¬φ(x)
都令人满意时,这种方法尚无定论
但是,例如,我们无法使用SMT的无量词片段为以下量化公式找到模型:
[∃y.]((∀x.y <= f(x)) and (∃z.y = f(z)))
对于记录,这是OMT问题min(y), y=f(x)
的编码,作为量化的SMT公式。 [related paper]
术语
t
在语法上不包含任何量词,而t
在语法上不包含量词。无量词的公式φ
与其存在的闭包相当。(∃x1. (∃x2 . . .(∃xn.φ ). . .))
其中
x1, x2, . . . , xn
是free(φ)
的任何枚举,φ
中的自由变量。
术语
t
,free(t)
的自由变量的集合归纳为:
free(x) = {x}
(如果x
是变量,free((f t1 t2 . . . tk)) = \cup_{i∈[1,k]} free(ti)
用于功能应用程序,free(∀x.φ) = free(φ) \ {x}
和free(∃x.φ) = free(φ) \ {x}
。
答案 1 :(得分:3)
Patrick给出了一个很好的答案,但是这里还有一些想法。 (我会把它作为评论,但是StackOverflow认为这太久了!)
请注意,您不能总是玩“求反”复选框。这之所以起作用,是因为如果对某个属性的求反不能令人满意,则该属性对于所有输入都必须为true。但这并没有反过来:一个属性可以满足,对它的求反也可以满足。简单示例:x < 10
。这显然是可以满足的,其否定x >= 10
也是可以满足的。因此,您不能总是通过玩这个技巧来摆脱量词。它仅在您想证明某件事时才有效:然后您可以对其进行否定,看看这种否定是否令人满意。如果您担心要寻找公式的模型,则该方法不适用。
您始终可以对公式进行简化,并通过将其替换为未解释的函数来消除所有存在的量词。然后,您最终得到的是一个具有所有前缀通用性的可满足公式。显然,这不是 量词的免费方法,但这是大多数工具自动为您完成的非常常见的技巧。
所有这些令人讨厌的地方是交替量词。无论如何进行简化,如果您有交替的量词,那么您的问题就已经很难解决。 Wikipedia页面上关于量词消除的内容很简洁,但是它提供了一个很好的介绍:https://en.wikipedia.org/wiki/Quantifier_elimination底线:并非所有理论都承认量词消除,甚至那些确实需要指数算法来消除量词的理论也是如此。导致性能问题。