一个不变的但不能被证明的forall

时间:2017-11-23 18:43:19

标签: dafny

在此代码中

https://rise4fun.com/Dafny/DmBh

在multisetOfTree中声明forall x :: x(t.right)==> t.root< = x;

未在第36行证明,但它是不变量的一部分。 实际上,您可以取消注释第31行中的不变量并对第36行和第36行进行注释 它有效。

1 个答案:

答案 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)
}