Я пытаюсь немного поэкспериментировать с 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 как два разных «объекта» и, следовательно, дает результат, который он дает?