Itu tidak bisa dibuktikan. Pertimbangkan kasus teorema khusus berikut ini, ketika kita atur X := bool
:
foo true = foo false -> true = false
Mengingat true
dan false
berbeda, jika teorema dapat dibuktikan, harus dimungkinkan untuk menunjukkan itu foo true
dan foo false
berbeda. Masalahnya adalah kedua tipe ini isomorfik :
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.
Dalam teori Coq, tidak mungkin untuk menunjukkan bahwa dua tipe isomorfik berbeda tanpa mengasumsikan aksioma ekstra. Inilah sebabnya mengapa perluasan teori Coq seperti teori tipe homotopy adalah suara. Dalam HoTT, tipe isomorfik dapat ditunjukkan sama, dan jika dimungkinkan untuk membuktikan teorema Anda, HoTT akan menjadi tidak konsisten.