如何结合SMT-LIB使用Z3和CVC4证明二面体群D3的定理

如何结合SMT-LIB使用Z3和CVC4证明二面体群D3的定理,z3,smt,cvc4,mathsat,Z3,Smt,Cvc4,Mathsat,在前一个定理中,证明了使用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) (de

在前一个定理中,证明了使用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联机运行此代码

问题是:

  • 在Z3的情况下,消息
    不受支持;:生成增量
    。这个消息似乎不会改变结果,为什么

  • 在CVC4的情况下,生成消息
    未知
    ,而Z3生成
    sat
    。同样,这个信息似乎没有改变结果,为什么

  • 如何使用Mathsat执行SMT-LIB代码


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

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


    据我所知,MathSat5还不支持量词。但是,这在将来应该会改变。

    Mathsat似乎产生了正确的结果,但它产生了以下信息:


    非常感谢,您的回答非常有用。对于Mathsat,请看下面。请注意,第13行包含所有的
    ,并且(据我所知)Mathsat不支持量词。您是对的,在Mathsat中,有必要用相应的资产集合替换所有
    。非常感谢。