【问题标题】:How to use Z3 and CVC4 with SMT -LIB to prove theorems for the dihedral group D3如何使用 Z3 和 CVC4 与 SMT -LIB 来证明二面体群 D3 的定理
【发布时间】:2013-12-08 01:56:05
【问题描述】:

在之前的post 中,证明了使用 Z3 SMT-LIB 的二面体群 D3 的一个定理。在这篇文章中,我们尝试使用以下 SMT-LIB 代码同时使用 Z3 和 CVC4 来证明这样的定理:

(set-logic AUFNIRA)
(set-option :produce-models true)
(set-option :incremental true)
(declare-sort S 0)
(declare-fun f (S S) S)
(declare-fun g (S) S)
(declare-fun E () S)
(declare-fun R1 () S)
(declare-fun R2 () S)
(declare-fun R3 () S)
(declare-fun R4 () S)
(declare-fun R5 () S)
(assert (forall ((x S))
            (= (f x E) x)))
(assert (forall ((x S))
            (= (f E x) x)))               
(assert (= (f R1 R1) R2))
(assert (= (f R1 R2) E))
(assert (= (f R1 R3) R4))
(assert (= (f R1 R4) R5))
(assert (= (f R1 R5) R3))
(assert (= (f R2 R1) E))
(assert (= (f R2 R2) R1))
(assert (= (f R2 R3) R5))
(assert (= (f R2 R4) R3))
(assert (= (f R2 R5) R4))
(assert (= (f R3 R1) R5))
(assert (= (f R3 R2) R4))
(assert (= (f R3 R3) E))
(assert (= (f R3 R4) R2))
(assert (= (f R3 R5) R1))
(assert (= (f R4 R1) R3))
(assert (= (f R4 R2) R5))
(assert (= (f R4 R3) R1))
(assert (= (f R4 R4) E))
(assert (= (f R4 R5) R2))
(assert (= (f R5 R1) R4))
(assert (= (f R5 R2) R3))
(assert (= (f R5 R3) R2))
(assert (= (f R5 R4) R1))
(assert (= (f R5 R5) E))
(assert (= (g E) E))
(assert (= (g R1) R2))
(assert (= (g R2) R1))
(assert (= (g R3) R3))
(assert (= (g R4) R4))
(assert (= (g R5) R5))
(check-sat)
(get-model)
(get-value ((f (f R3 R1) (g R3))))
(get-value (R2))
(assert (not (= (f (f R3 R1) (g R3)) R2))) 
(check-sat) 

当使用 Z3 或 CVC4 执行此代码时,将获得正确的结果。用Z3在线运行这段代码here

问题是:

  1. 在 Z3 的情况下,会生成一条消息 unsupported ; :incremental。此消息似乎不会改变结果,为什么?

  2. 在 CVC4 的情况下,生成消息 unknown,而 Z3 生成 sat。同样,这条消息似乎并没有改变结果,为什么?

  3. 如何使用 Mathsat 执行 SMT-LIB 代码。

【问题讨论】:

    标签: z3 smt cvc4 mathsat


    【解决方案1】:

    关于问题 1,选项 :incremental 不是 SMT-LIB 2.0 标准的一部分。该标准定义/建议了所有求解器都应支持的一小组选项,:incremental 不是其中之一。这可能是 CVC4 特定的选项。 Z3 只是忽略了这个命令。而且Z3不需要用户开启增量求解。

    关于问题 2,SMT-LIB 2.0 标准规定 check-sat 有 3 种可能的输出:unsatsatunknown。当求解器无法确定断言集是否可满足时,将使用unknown 结果。一些求解器即使在生成unknown 时也会生成“候选模型”。

    据我所知,MathSAT 5 还不支持量词。但是,这种情况将来应该会改变。

    【讨论】:

    • 非常感谢,您的回答非常有用。如果是 Mathsat,请看下面。
    • 请注意,第 13 行是包含 forall 的行,并且(据我所知)MathSAT 不支持量词。
    • 你是对的,在 Mathsat 中,有必要将 forall 替换为相应的断言集合。非常感谢。
    【解决方案2】:

    Mathsat 似乎产生了正确的结果,但它会生成消息:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-08-11
      • 1970-01-01
      • 1970-01-01
      • 2011-12-31
      • 2012-01-08
      • 1970-01-01
      • 2014-11-09
      • 2019-12-15
      相关资源
      最近更新 更多