(=> (f g))
总是与
相同(or (not f) g))
这两个表达式在我的模型中表现不同。使用 => 给我 UNSAT 时,使用其他变体不会产生任何结果( timeout )。我会满足于只列出运算符及其含义。我知道SMTLIB标准,但文档没有明确谈论运营商的含义。具体来说,' => '似乎加倍作为' ite '(if_then_else)运算符的别名,如果在三元表达式中使用,我对此非常困惑。
我设置 AUFLIA 逻辑,如果那是相关的。
我首先要找一个简单的是或否答案。关于SMT2(可能是一本书)的第二个适当的文档。
我有this相当大的模型来自丹尼尔杰克逊的标记符合模型,用于那些愿意为自己看的合金4。
答案 0 :(得分:2)
您的表情不正确/不合格。
=>
的确意味着'暗示'。换句话说,(=> f g)
相当于(or (not f) g)
。
如果有疑问,您可以使用Z3证明它。 The below query是unsat
:
(declare-const p Bool)
(declare-const q Bool)
(define-fun conjecture () Bool
(= (=> p q)
(or (not p) q)))
(assert (not conjecture))
(check-sat)