Может ли каждое свойство, доказанное с помощью теоремы в Coq индукцией по одной из посылок, быть реорганизовано в доказательство с использованием Fixpoint, где мы деструктируем на той же посылке? Какой смысл иметь отдельные ...

1
NJay 2 Мар 2021 в 00:52

1 ответ

Лучший ответ

Да. Когда вы вызываете тактику induction, это эквивалентно apply лемме о принципе индукции (называемой чем-то вроде nat_ind или DatatypeName_ind), и этот принцип индукции был автоматически доказан Coq с помощью фиксированной точки и спички. Итак, если вы "встроите" доказательство принципа индукции, вы получите доказательство, которое можно было бы построить с помощью Fixpoint и destruct.

Однако написание доказательств вручную с использованием Fixpoint подвержено ошибкам, потому что оно всегда добавляет гипотезу в контекст, который соответствует рекурсивным вызовам, и доказательство действительно только в том случае, если вы вызываете использовать его для аргумента, полученного из а destruct. Это условие проверяется только во время финального Qed. Поэтому, если вы напишете доказательство с помощью Fixpoint, а затем вызовете тактику вроде eauto, тактика может «случайно» использовать рекурсивный аргумент необоснованным образом. Если вы используете induction, вы получите только индуктивные гипотезы для прямых подтермов, поэтому доказательства, построенные с помощью тактики, всегда действительны.

3
Vilhelm Sjöberg 1 Мар 2021 в 22:39