'双箭头'=>真的意味着“暗示”?

时间:2012-07-25 10:48:33

标签: z3 smt

(=> (f g))

总是与

相同
(or (not f) g))

这两个表达式在我的模型中表现不同。使用 => 给我 UNSAT 时,使用其他变体不会产生任何结果( timeout )。我会满足于只列出运算符及其含义。我知道SMTLIB标准,但文档没有明确谈论运营商的含义。具体来说,' => '似乎加倍作为' ite '(if_then_else)运算符的别名,如果在三元表达式中使用,我对此非常困惑。

我设置 AUFLIA 逻辑,如果那是相关的。

我首先要找一个简单的是或否答案。关于SMT2(可能是一本书)的第二个适当的文档。

我有this相当大的模型来自丹尼尔杰克逊的标记符合模型,用于那些愿意为自己看的合金4。

1 个答案:

答案 0 :(得分:2)

您的表情不正确/不合格。

=>的确意味着'暗示'。换句话说,(=> f g)相当于(or (not f) g)

如果有疑问,您可以使用Z3证明它。 The below queryunsat

(declare-const p Bool)
(declare-const q Bool)

(define-fun conjecture () Bool
    (= (=> p q) 
       (or (not p) q)))

(assert (not conjecture))
(check-sat)