我正在摆弄CVC4 SMT 求解器在线版本(使用 lang = cvc4)。
我使用的不是标准的SMT-LIB 格式,而是CVC4 实现的本机语言,因为它要简单得多。但是,我无法证明非常直接和明显的陈述。例如,第一个 CHECKSAT 给我sat (satisfiable),这是正确的,但第二个 CHECKSAT 给我unknow。
OPTION "incremental";
ASSERT FORALL (k : INT): ((k > 5 AND k < 7) => (k = 6));
CHECKSAT; % this returns sat, okay!
arr: ARRAY INT OF REAL;
ASSERT arr[6] = 123;
ASSERT FORALL (k : INT): ((k > 5 AND k < 7) => (arr[k] = 123));
CHECKSAT; % this returns unknown, why?
为什么 CVC4 不能证明这么简单的谓词逻辑表达式?据我了解,SMT 检查是不可判定的,因此,没有程序可以证明所有正确的陈述。但是,这似乎是一个非常简单的案例,所以我想我误解了一些东西。