CVC4 中归纳数据类型的断言

assertions on inductive data types in CVC4

我正在尝试使用 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 不应该相等,那么它们的值一定不同,对吗? distinct 断言也是如此。 CVC4 是否将 x 和 y 视为两个不同的 "objects" 并因此给出它给出的输出?

我没有看到相同的结果。这是我使用最新开发版本的 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))

在此输入上,带有选项“--incremental”(启用多个查询)的 cvc4 给出此响应:

sat
((x Red) (y Black))
sat
((x Red) (y Black))

希望这对您有所帮助, 安迪