根据Homotopy Type Theory(第49页),这是平等的完全归纳原理:
Definition path_induction (A : Type) (C : forall x y : A, (x = y) -> Type)
(c : forall x : A, C x x eq_refl) (x y : A) (prEq : x = y)
: C x y prEq :=
match prEq with
| eq_refl => c x
end.
我对HoTT不太了解,但是我确实看到路径感应比eq_rect
强:
Lemma path_ind_stronger : forall (A : Type) (x y : A) (P : A -> Type)
(prX : P x) (prEq : x = y),
eq_rect x P prX y prEq =
path_induction A (fun x y pr => P x -> P y) (fun x pr => pr) x y prEq prX.
Proof.
intros. destruct prEq. reflexivity.
Qed.
相反,我无法从path_induction
构造eq_rect
。可能吗 ?如果不是,那么平等的正确归纳原理是什么?我认为这些原理是机械地从Inductive
类型定义中得出的。
编辑
由于下面的答案,关于等式的完整归纳原理可以通过以下方式产生
Scheme eq_rect_full := Induction for eq Sort Prop.
然后我们得出相反的结论,
Lemma eq_rect_full_works : forall (A : Type) (C : forall x y : A, (x = y) -> Prop)
(c : forall x : A, C x x eq_refl) (x y : A)
(prEq : x = y),
path_induction A C c x y prEq
= eq_rect_full A x (fun y => C x y) (c x) y prEq.
Proof.
intros. destruct prEq. reflexivity.
Qed.
答案 0 :(得分:2)
我认为您是指path_induction
的结果类型提到了被销毁的路径,而eq_rect
的结果类型却没有提及的事实。这是归纳命题的默认设置(与Type
相对),因为额外的参数通常不用于与证明无关的开发。不过,您可以使用Scheme
命令https://coq.inria.fr/distrib/current/refman/user-extensions/proof-schemes.html?highlight=minimality指示Coq生成更完整的归纳原理。 (Minimality
变体是默认情况下用于命题的变体。)