在 Dafny 上, alemma
被实现为 a ghost method
,因此,它仅对规范有用。
但是,您不能从 a 调用引理ghost field
,如下所示:
class A {
var i: int;
lemma sum_is_commutative(i: int, j: int)
ensures i + j == j + i
{}
}
class B {
ghost var a: A;
lemma a_sum_is_commutative(i: int, j: int)
ensures i + j == j + i
{ a.sum_is_commutative(i, j); }
method test() {
// a.sum_is_commutative(3, 2); // <- Cannot use directly this
a_sum_is_commutative(3, 2);
}
}
这种行为的理由是什么?如何解决?在内部类中重复引理并利用(通常是调用)其他类的最佳选择是lemma
什么?