归纳类型的平等

时间:2014-10-07 22:38:07

标签: coq induction

我如何证明以下微不足道的引理:

Require Import Vector.

Lemma t0_nil: forall A (x:t A 0), x = nil A.
Proof.
Qed.

常见问题解答建议采用decide equalitydiscriminate策略,但我无法找到应用其中任何一种的方法。作为参考,这里是归纳定义:

Inductive t A : nat -> Type :=
  |nil : t A 0
  |cons : forall (h:A) (n:nat), t A n -> t A (S n).

1 个答案:

答案 0 :(得分:3)

您要做的是在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.

在许多情况下,您还可以使用the tactic dep_destruct provided by CPDT。在这种情况下,你的证据就变成了:

Require Import CpdtTactics.

Lemma t0_nil: forall A (x:t A 0), x = nil A.
  intros.
  dep_destruct x.
  reflexivity.
Qed.