Nó không thể được chứng minh. Hãy xem xét trường hợp đặc biệt sau đây của định lý, khi chúng ta đặt X := bool
:
foo true = foo false -> true = false
Cho rằng true
và false
là khác nhau, nếu định lý là có thể chứng minh được, thì có thể chỉ ra điều đó foo true
và foo false
khác nhau. Vấn đề là hai loại này là đẳng cấu :
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.
Theo lý thuyết của Coq, không thể chỉ ra rằng hai loại đẳng cấu là khác nhau mà không giả sử các tiên đề phụ. Đây là lý do tại sao một phần mở rộng của lý thuyết Coq như lý thuyết loại đồng luân là âm thanh. Trong HoTT, các loại đẳng cấu có thể được hiển thị bằng nhau và nếu có thể chứng minh định lý của bạn, HoTT sẽ không nhất quán.