即使对于最简单的算术SMT问题,也需要存在量词来声明符号变量。并且∀
量词可以通过反转约束变成∃
。所以,我可以在QF_*
逻辑中使用它们,它的工作原理。
我认为,“量词免费”对于这种SMT逻辑意味着什么,但到底是什么?
声称就是这样
∀
量词可以通过反转约束变成∃
AFAIK,以下两个关系成立:
∀x.φ(x) <=> ¬∃x.¬φ(x)
¬∀x.φ(x) <=> ∃x.¬φ(x)
由于无定量SMT公式φ(x)
与其存在闭包∃x.φ(x)
相当,我们可以使用SMT理论的无量词片段来表示普遍量化的(简单)否定发生,而[AFAIK]也表示(简单)正面对普通公式的普遍量化的发生(例如,如果[∃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}
。
帕特里克给出了一个很好的答案,但这里还有一些想法。 (我已将此作为评论,但StackOverflow认为它太长了!)
x < 10
。这显然是令人满意的,它的否定x >= 10
也是如此。所以,你不能总是通过玩这个技巧摆脱量词。它只有在你想要证明某些东西时才有效:然后你可以否定它,看看这种否定是否是不可满足的。如果您担心找到公式的模型,则该方法不适用。