【发布时间】:2022-01-12 20:30:52
【问题描述】:
我正在摆弄CVC4 SMT solver online version(使用 lang = cvc4)。
我没有使用标准的SMT-LIB format,而是the native language implemented by CVC4,因为它要简单得多。但是,我无法证明非常直接和明显的陈述。例如,第一个 CHECKSAT 给我 sat(可满足),这是正确的,但第二个 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 检查是不可判定的,因此,没有程序可以证明所有正确的陈述。但是,这似乎是一个非常简单的案例,所以我认为我误解了一些东西。
【问题讨论】:
标签: math logic smt formal-verification cvc4