在Coq中消除具有命题的案例

时间:2014-11-24 16:22:28

标签: coq

鉴于自然数列表类型的明显定义,以及采用最后一个元素或返回默认值的函数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中使用这些知识呢?如果我在lastinductiondestruct,我将需要考虑ll的情况,这个假设会阻止这种情况。如何告诉[]必须遵循某种形式?

1 个答案:

答案 0 :(得分:3)

您必须对您的假设使用反转,该假设表明length l > 0

intros [|x l] def n H.
- (* Case l = [], contradiction *)
  simpl in H. inversion H.
- (* Continue normally *)