Це неможливо довести. Розглянемо наступний особливий випадок теореми, коли ми встановлюємо X := bool
:
foo true = foo false -> true = false
З огляду на те, що true
і false
різні, якби теорема була доказовою, слід було б показати, що foo true
і foo 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.
У теорії Кока неможливо показати, що два ізоморфні типи різні, не допускаючи додаткових аксіом. Ось чому розширення такої теорії Кока, як теорія типу гомотопії, є надійною. У HoTT ізоморфні типи можуть бути показані рівними, і якби можна було довести свою теорему, HoTT був би невідповідним.