在此代码中
https://rise4fun.com/Dafny/DmBh
在multisetOfTree中声明forall x :: x(t.right)==> t.root< = x;
未在第36行证明,但它是不变量的一部分。 实际上,您可以取消注释第31行中的不变量并对第36行和第36行进行注释 它有效。
答案 0 :(得分:1)
问题是您在isABB
的定义中缺少括号。
应该是:
predicate isABB (t:Tree<int>)
{
match t
case Empty => true
case Node(l,d,r) => isABB(l) && isABB(r)
&& (forall x :: x in multisetOfTree(l) ==> x <= t.root)
&& (forall x :: x in multisetOfTree(r) ==> t.root <= x)
}