Если вы посмотрите на свою теорему, вы заметите, что nth зависит от «n» и «lng», однако, когда вы делаете индукцию только в «n», вы застрянете, как только lng будет зафиксирован, поэтому никогда не сможет быть уничтоженным / оцененным. Вы можете исправить это, просто обобщив «lng», поэтому, когда вы делаете индукцию по n, вы можете сказать, что теорема верна для всех «lng»:
Theorem item_nth_is_1' : forall lng n:nat, lng > n -> (nth n (pattern_1 lng) 1) = 1.
Proof.
intros.
generalize dependent lng.
induction n as [| n' IH_n'].
- intros.
destruct lng.
+ trivial.
+ trivial.
- intros.
destruct lng.
trivial.
exact (IH_n' lng (le_S_n _ _ H)).
Qed.
Конечно, вам, вероятно, понадобится больше деструктурирование / переписывание, чтобы решить цель. К счастью, у coq есть случайная схема для решения нат двойных индукций.
Theorem item_nth_is_1 : forall lng n:nat, lng > n -> (nth n (pattern_1 lng) 1) = 1.
Proof.
intros.
elim/@nat_double_ind : n/lng H.
intros; by destruct n.
intros; inversion H.
intros; apply : (H (le_S_n _ _ H0)).
Qed.