我正在尝试使用CVC4。
(set-option :produce-models true)
(set-option :produce-assignments true)
(set-logic QF_UFDT)
(declare-datatypes ()
(Color (Red) (Black))
)
(declare-const x C)
(declare-const y C)
(assert (not (= x y)))
(check-sat)
(get-value (x y))
(assert (distinct x y))
(check-sat)
(get-value (x y))
当我使用CVC4运行时,我得到以下输出
sat
((x R) (y R))
sat
((x R) (y R))
我对此输出的这种行为感到困惑。 如果我断言x和y不应该相等,它们的值必须不同吗? 具有不同断言的情况也是如此。 CVC4是将x和y视为两个不同的“对象”,从而给出它给出的输出吗?
答案 0 :(得分:1)
我没有看到相同的结果。这是我使用CVC4的最新开发版本(http://cvc4.cs.stanford.edu/downloads/)得到的消息:
(error "Parse Error: stack.smt2:5.8: Sequence terminated early by token: 'Color'.
(Color (Red) (Black))
^
")
您的示例中存在一些语法错误,此处是更正后的版本:
(set-option :produce-models true)
(set-option :produce-assignments true)
(set-logic QF_UFDT)
(declare-datatypes () (
(Color (Red) (Black))
))
(declare-const x Color)
(declare-const y Color)
(assert (not (= x y)))
(check-sat)
(get-value (x y))
(assert (distinct x y))
(check-sat)
(get-value (x y))
在此输入上,cvc4带有选项“--incremental”(启用多个查询),会给出此响应:
sat
((x Red) (y Black))
sat
((x Red) (y Black))
希望这有帮助, 安迪