Утверждения об индуктивных типах данных в 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 не должны быть равны, их значения должны быть разными, верно? То же самое в случае с четким утверждением. CVC4 рассматривает x и y как два разных "объекта" и, следовательно, дает вывод, который он дает?
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))
Надеюсь, это поможет, Энди