Coq индукционный старт на определенном нат
Я пытаюсь изучить coq, поэтому, пожалуйста, предположите, что я ничего не знаю об этом.
Если у меня есть лемма в coq, которая начинается
forall n m:nat, n>=1 -> m>=1 ...
И я хочу продолжить по индукции по n. Как начать индукцию с 1? В настоящее время, когда я использую "индукции н." тактика начинается с нуля, и это делает базовое утверждение ложным, что затрудняет продолжение.
Есть намеки?
1 ответ
Следующее является доказательством того, что каждое предложение P
это правда n>=1
, если P
верно для 1
и если P
индуктивно верно.
Require Import Omega.
Parameter P : nat -> Prop.
Parameter p1 : P 1.
Parameter pS : forall n, P n -> P (S n).
Goal forall n, n>=1 -> P n.
Мы начнем доказательство по индукции.
induction n; intro.
Ложный базовый случай не проблема, если у вас есть ложная гипотеза. В этом случае 0>=1
,
- exfalso. omega.
Индуктивный случай сложен, потому что получить доступ к доказательству P n
Сначала мы должны доказать, что n>=1
, Хитрость заключается в том, чтобы сделать анализ случая на n
, Если n=0
, тогда мы можем тривиально доказать цель P 1
, Если n>=1
мы можем получить доступ P n
, а затем доказать все остальное.
- destruct n.
+ apply p1.
+ assert (S n >= 1) by omega.
intuition.
apply pS.
trivial.
Qed.