Z3 什么是;“无量词逻辑”;在SMT上下文中是什么意思?

Z3 什么是;“无量词逻辑”;在SMT上下文中是什么意思?,z3,smt,sbv,Z3,Smt,Sbv,即使对于最简单的算术SMT问题,也需要存在量词来声明符号变量。和∀量词可以变成∃。因此,我可以在QF.*逻辑中使用这两种方法,并且它可以工作 我认为,“无量词”对于这样的SMT逻辑意味着其他东西,但具体是什么呢 ∀量词可以变成∃ 好吧,以下两种关系成立: ∀x.φ(x) <=> ¬∃x.¬φ(x) ¬∀x.φ(x) <=> ∃x.¬φ(x) 对于记录,这是将OMT问题min(y),y=f(x)编码为一个量化的SMT公式。[] 术语t在语法上不包含量词。无量词公式φ

即使对于最简单的算术SMT问题,也需要存在量词来声明符号变量。和
量词可以变成
。因此,我可以在
QF.*
逻辑中使用这两种方法,并且它可以工作

我认为,“无量词”对于这样的SMT逻辑意味着其他东西,但具体是什么呢

量词可以变成

好吧,以下两种关系成立:

 ∀x.φ(x) <=> ¬∃x.¬φ(x)
¬∀x.φ(x) <=>  ∃x.¬φ(x)
对于记录,这是将OMT问题
min(y),y=f(x)
编码为一个量化的SMT公式。[]


术语
t
在语法上不包含量词。无量词公式
φ
与其存在闭包相等可满足

(∃x1. (∃x2 . . .(∃xn.φ ). . .))
其中
x1,x2,xn
自由(φ)
的任何枚举,即
φ
中的自由变量


术语
t
free(t)
的自由变量集归纳定义为:

  • free(x)={x}
    如果
    x
    是一个变量
  • free((f t1 t2…tk))=\cup{i∈[1,k]}free(ti)
    用于函数应用程序
  • 免费(∀x、 φ)=自由(φ)\{x}
    ,和
  • 免费(∃x、 φ)=自由(φ)\{x}


帕特里克给出了一个很好的回答,但这里还有一些想法。(我本想将此作为评论,但StackOverflow认为它太长了!)

  • 请注意,您不能总是玩“否定并检查相反项”的把戏。这只是因为如果属性的求反不可满足,那么该属性对于所有输入都必须为真。但它并没有反过来:一个属性可以满足,它的否定也可以满足。简单示例:
    x<10
    。这显然是可以满足的,它的否定
    x>=10
    也是可以满足的。所以,你不能总是通过玩这个把戏来摆脱量词。只有当你想证明某事时,它才起作用:然后你可以否定它,看看否定是否是不可满足的。如果您关心的是找到公式的模型,则该方法不适用

  • 您可以通过使用未解释的函数替换所有存在量词来简化公式并消除它们。最后得到的是一个具有所有前缀通式的等式。显然,这不是无量词的,但这是大多数工具自动为您完成的一个非常常见的技巧

  • 所有这些伤害的地方是交替使用量词。不管怎样,如果你有交替的量词,你的问题已经很难处理了。维基百科关于量词消除的页面相当简洁,但它提供了一个非常好的介绍:底线:并非所有理论都承认量词消除,甚至那些承认的理论也可能需要指数算法来消除它们;导致性能问题


指出反转某个属性仅在未统计结果的情况下有用,而在sat结果的情况下不提供任何证据,这一点做得很好。您说
如果您关心的是找到公式的模型,则该方法不适用
。如果我正在寻找一个模型,我不应该有任何
在我的问题公式中,不是吗?我想不出一个使用
证据之外。@arrowd在我的回答中的“优化”用例不是这样的例子吗?@PatrickTrentin-Aha,你说得对。后续问题-我们能否将您的示例问题重新表述为
[∃y、 z.]((∀x、 我上次读这本书是很久以前的事了,但是自从
(∀x、 你说φ(x)
∃x、 φ(x)
,但它不是等价的,对吗?我仍然不知道它们之间的语义区别是什么。我似乎理解
∃x、 φ(x)
的意思是“存在这样一个x,使得φ(x)是真的
,但是
φ(x)`没有量词前缀意味着什么?@arrowd equisatifiability肯定比等价更容易处理。在不列出许多限制条件的情况下提出这样的主张,例如
x
必须属于
自由(φ(x))
,听起来有点像是滥用符号和术语。因为我对这一点不够自信,我想避免提出任何明确的主张,除了对
x
wrt进行存在量化。
φ(x)
隐含在可满足性问题本身的定义中。
(∃x1. (∃x2 . . .(∃xn.φ ). . .))