Это связано с тем, как Дафни обрабатывает экзистенциальные квантификаторы. Это (почти) никогда не "угадать" значение для вас. Вместо этого Dafny использует синтаксическую эвристику (называемую «триггерами»), чтобы опробовать определенные значения из контекста.
По вашему утверждению, триггер имеет значение b[k]
, что означает, что Dafny будет использовать только значения k
, так что выражение b[k]
будет упомянуто явно.
Таким образом, один из способов исправить утверждение - явно указать правильное значение для k
, добавив утверждение
assert b[0] == 1;
или даже
assert b[0] == 1 || b[0] == -1
Это в некоторой степени связано с этим вопросом .
Подробнее о триггерах см. этот ответ .