鉴于自然数列表类型的明显定义,以及采用最后一个元素或返回默认值的函数last
,我试图证明以下引理:
Lemma last_ignores_first : forall l : natlist, forall def n : nat,
length l > 0 ->
last def (n :: l) = last def l.
现在,我想通过注意,因为l
不为空,所以必须能够以h::t
的形式为某些h
和{{1}写出来因此,证据将遵循t
的定义。但是我如何在Coq中使用这些知识呢?如果我在last
上induction
或destruct
,我将需要考虑l
是l
的情况,这个假设会阻止这种情况。如何告诉[]
必须遵循某种形式?
答案 0 :(得分:3)
您必须对您的假设使用反转,该假设表明length l > 0
:
intros [|x l] def n H.
- (* Case l = [], contradiction *)
simpl in H. inversion H.
- (* Continue normally *)