索引相等的归纳类型意味着索引相等


9

让我们有一个归纳类型为的foo索引x : X

Parameter X : Type.

Inductive foo : X -> Type :=
| constr : forall (x : X), foo x.

如果foo x = foo y暗示的话,我很好奇x = y。我不知道如何证明这一点。

Lemma type_equality_implies_index_equality : forall (x y : X), foo x = foo y -> x = y.

如果无法证明,为什么?

Answers:


8

无法证明。设置时,请考虑以下定理的特殊情况X := bool

foo true = foo false -> true = false

鉴于truefalse是不同的,如果定理是可证明的,则应该有可能证明foo truefoo false是不同的。问题在于这两种类型是同构的

Inductive foo : bool -> Type :=
| constr : forall (x : bool), foo x.

(* An isomorphism between foo true and foo false *)
Definition foo_t_f (x : foo true) : foo false := constr false.
Definition foo_f_t (x : foo false) : foo true := constr true.

(* Proofs that the functions are inverses of each other *)
Lemma foo_t_fK x : foo_f_t (foo_t_f x) = x.
Proof. unfold foo_f_t, foo_t_f. now destruct x. Qed.

Lemma foo_f_tK x : foo_t_f (foo_f_t x) = x.
Proof. unfold foo_f_t, foo_t_f. now destruct x. Qed.

在Coq的理论中,如果不假设额外的公理就不可能证明两个同构类型是不同的。这就是为什么对Coq理论(例如同伦类型理论)进行扩展的原因。在HoTT中,同构类型可以显示为相等,并且如果可以证明您的定理,则HoTT将不一致。


我的头很痛,但我想我明白了。您是否可以参考“在Coq的理论中,如果不假设额外的公理就不可能证明两个同构类型是不同的”。?
汤姆(Tom),

并且有可能显示(x <> y) -> (foo x <> foo y)吗?没有排除中间原则,我对这个世界真的感到困惑。
汤姆(Tom),

我知道的最好的参考文献(虽然可能不是最容易获得的)是霍夫曼和斯特雷彻的论文“类型理论的类群解释”。正如霍夫曼所说(ncatlab.org/homotopytypetheory/files/HofmannDMV.pdf),我们可以很好地扩展同构类型相等的Martin-Löf类型理论。这一结果也适用于Coq的理论。
阿瑟·阿兹维多·德阿莫林

不,这是不可能显示出对立的。我给出的对与错的反例也会与该陈述相抵触。
阿瑟·阿兹维多·德阿莫林
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.