我如何证明以下微不足道的引理:
Require Import Vector.
Lemma t0_nil: forall A (x:t A 0), x = nil A.
Proof.
Qed.
常见问题解答建议采用decide equality
和discriminate
策略,但我无法找到应用其中任何一种的方法。作为参考,这里是归纳定义:
Inductive t A : nat -> Type :=
|nil : t A 0
|cons : forall (h:A) (n:nat), t A n -> t A (S n).
答案 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.