Coq 归纳类型上的等式
如何证明以下平凡引理:Coq 归纳类型上的等式,coq,induction,Coq,Induction,如何证明以下平凡引理: Require Import Vector. Lemma t0_nil: forall A (x:t A 0), x = nil A. Proof. Qed. 常见问题解答推荐了决定平等和区别策略,但我找不到一种方法来应用这两种策略。以下是归纳定义供参考: Inductive t A : nat -> Type := |nil : t A 0 |cons : forall (h:A) (n:nat), t A n -> t A (S n). 您要
Require Import Vector.
Lemma t0_nil: forall A (x:t A 0), x = nil A.
Proof.
Qed.
常见问题解答推荐了决定平等
和区别
策略,但我找不到一种方法来应用这两种策略。以下是归纳定义供参考:
Inductive t A : nat -> Type :=
|nil : t A 0
|cons : forall (h:A) (n:nat), t A n -> t A (S n).
您要做的是在
x
上反转。不幸的是,事实证明,依赖类型假设的一般反转是不可判定的,见Adam Chlipala的CPDT。您可以手动在结构上进行模式匹配,例如:
Lemma t0_nil: forall A (x:t A 0), x = nil A.
intros.
refine (match x with
| nil => _
| cons _ _ _ => _
end).
- reflexivity.
- exact @id.
Qed.
在许多情况下,您也可以使用。在这种情况下,您的证明变成:
Require Import CpdtTactics.
Lemma t0_nil: forall A (x:t A 0), x = nil A.
intros.
dep_destruct x.
reflexivity.
Qed.
Pierre Boutillier的一个优雅的解决方案,取自以下内容:
定义t0\u nil A(x:t A 0):x=nil A:=将x与nil匹配
eq\u refl end.