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.