Я пишу точку фиксации, которая требует увеличения целого числа «к нулю» на каждой итерации. Это слишком сложно для Coq, чтобы автоматически распознавать его как убывающий аргумент, и я пытаюсь доказать, что моя точка фиксации прекратит работу.
Я копировал (как я полагаю) пример доказательства обоснованности пошаговой функции на Z из стандартной библиотеки. (Здесь)
Require Import ZArith.Zwf.
Section wf_proof_wf_inc.
Variable c : Z.
Let Z_increment (z:Z) := (z + ((Z.sgn c) * (-1)))%Z.
Lemma Zwf_wf_inc : well_founded (Zwf c).
Proof.
unfold well_founded.
intros a.
Qed.
End wf_proof_wf_inc.
, который создает следующий контекст:
c : Z
wf_inc := fun z : Z => (z + Z.sgn c * -1)%Z : Z -> Z
a : Z
============================
Acc (Zwf c) a
Мой вопрос: что на самом деле означает эта цель?
Я думал, что цель, которую я должен доказать для этого, будет, по крайней мере, включать в себя функцию шага, которую я хочу показать, имеет "обоснованное" свойство "Z_increment".
Самое полезное объяснение, на которое я смотрел, это this , но я никогда не работал с типом списка, который он использует, и он не объясняет, что подразумевается под такими терминами, как "доступные".