Я не могу прокомментировать обоснование такого поведения (и я обновлю выбранный ответ, если он академический, а не просто ошибка или отсутствие реализации).
Для обхода этой проблемыСемантически то же самое, чтобы определить
class A {
lemma sum_commutative(i: int, j: int) {}
}
как что-то вроде
class A {
static lemma sum_commutative(a: A, i: int, j: int) {}
}
Так что, даже если вам нужен доступ к экземпляру this
, вы можете передать его какпараметр вместо того, чтобы полагаться на него неявным образом.
Затем вы можете вызывать из любого другого класса свою лемму как A.sum_commutative(a, i, j)
, не сталкиваясь с проблемой вызова метода-призрака для переменной-призрака из не-призрачный метод.