对于像自然数nat
这样的简单归纳类型,很容易证明两个构造函数(零和后继)给出了所有可能的自然数,
Lemma nat_destruct (n : nat) : n = O \/ exists m : nat, n = S m.
Proof.
destruct n. left. reflexivity. right. exists n. reflexivity.
Qed.
但是,我听说对于等式证明并不是那么简单。只有一个相等的构造函数eq_refl
,但是Coq无法证明
eq_destruct : forall (A : Type) (x : A) (prEq : x = x), prEq = eq_refl
究竟是什么阻碍了这一证明?可能的第一个问题是,平等不仅是类型,而且是类型族eq : forall A : Type, A -> A -> Prop
。是否有一个更简单的类型家族,其中不可能提供这样的证明?用1或2个参数而不是3个参数?