Dafny:子集检查断言失败
Dafny: Assertion fails on subset checks
目前,我正在尝试在 Dafny 中实现 AVL-Tree。
每个子节点和节点本身都是节点的一部分 Repr:set。
在树中每次更改后,都会调用更新方法来更新 Repr 集。
- 第一个断言表明 new_node 不是 Repr 集的一部分
左节点。
- 第二个断言表明这个条件在之后仍然正确
我将左侧子网的 Repr 集分配给节点。
- 我将节点添加到 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
,第三个断言不成立。你排除了这种可能性吗?
目前,我正在尝试在 Dafny 中实现 AVL-Tree。 每个子节点和节点本身都是节点的一部分 Repr:set。 在树中每次更改后,都会调用更新方法来更新 Repr 集。
- 第一个断言表明 new_node 不是 Repr 集的一部分 左节点。
- 第二个断言表明这个条件在之后仍然正确 我将左侧子网的 Repr 集分配给节点。
- 我将节点添加到 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
,第三个断言不成立。你排除了这种可能性吗?