当前,我试图在Dafny Repo中编写现有Binary-Tree的平衡版本(AVL-Tree)。 我可以验证此平衡树仍然是有效的二叉树。
为验证它也满足AVL-Tree的需求,我创建了两个附加谓词。 这些谓词可以验证子树的高度有效,并且节点及其子树是平衡的。
由于高度有效性检查需要有效的二叉树,而由于余额检查需要有效的高度计算,因此谓词彼此依赖:
predicate Heigth_Valid()
reads this, Repr
{
Valid() &&
(..)
}
predicate Balanced()
reads this, Repr
{
Valid() &&
Heigth_Valid() &&
(..)
}
predicate Valid()
reads this, Repr
{
(..)
}
因此,可以将验证分为不同的方法,因为某些方法只能提供有效的二叉树,而另一些方法可以重新计算高度或平衡树。
成功验证树是否平衡, 但是当我尝试通过反例检查验证并更改代码以生成不平衡的树时,Dafny在IDE中未显示任何错误。 达夫妮有可能会忽略某些谓词吗?