Dafny:子集检查断言失败

Dafny: Assertion fails on subset checks

目前,我正在尝试在 Dafny 中实现 AVL-Tree。 每个子节点和节点本身都是节点的一部分 Repr:set。 在树中每次更改后,都会调用更新方法来更新 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; 
} 

如果new_node == new_node.left,第三个断言不成立。你排除了这种可能性吗?