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.
Другие вопросы по тегам