Dafny:断言子集检查失败

时间:2020-05-23 11:15:40

标签: dafny

当前,我正在尝试在Dafny中实现AVL树。 每个子节点和节点本身都是节点Repr:set的一部分。 在树中每次更改后,都会调用一个update方法来更新Repr集。

  1. 第一个断言表明new_node不属于Repr集的一部分 左节点。
  2. 第二个断言表明此条件在之后仍然正确 我将左侧子网的Repr集分配给该节点。
  3. 将节点添加到Repr集中后,第三个断言失败

我不明白为什么最后一个断言失败了,因为被检查的集合没有被更改。

if(new_node.left != null && new_node.right == null) {
    assert new_node !in new_node.left.Repr;
    new_node.Repr := new_node.left.Repr;
    assert new_node !in new_node.left.Repr;
    new_node.Repr := new_node.Repr + {new_node};
    assert new_node !in new_node.left.Repr;            
    new_node.Contents := {new_node.data} + new_node.left.Contents; 
} 

1 个答案:

答案 0 :(得分:0)

如果new_node == new_node.left,则第三断言不成立。您是否排除了这种可能性?