我正在与 Boogie 合作,我遇到了一些我不理解的行为。
我一直在用assert(false)
它来检查前面的assume
陈述是否荒谬。
例如在以下情况下,程序被验证没有错误......
type T;
const t1, t2: T;
procedure test()
{
assume (t1 == t2);
assume (t1 != t2);
assert(false);
}
......这t1 == t2 && t1 != t2
是一个荒谬的说法。
另一方面,如果我有类似的东西
type T;
var map: [T]bool;
const t1, t2: T;
procedure test()
{
assume(forall a1: T, a2: T :: !map[a1] && map[a2]);
//assert(!map[t1]);
assert(false);
}
唯一在assert(false)
注释行未注释时失败。为什么评论断言改变了结果assert(false)
?