Es kann nicht bewiesen werden. Betrachten Sie den folgenden Sonderfall des Satzes, wenn wir setzen X := bool
:
foo true = foo false -> true = false
Angesichts dessen true
und false
anders, wenn der Satz beweisbar wäre, sollte es möglich sein, dies zu zeigen foo true
und foo false
anders zu sein. Das Problem ist, dass diese beiden Typen isomorph sind :
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.
In Coqs Theorie ist es nicht möglich zu zeigen, dass zwei isomorphe Typen unterschiedlich sind, ohne zusätzliche Axiome anzunehmen. Aus diesem Grund ist eine Erweiterung der Coq-Theorie wie die Homotopietypentheorie sinnvoll. In HoTT kann gezeigt werden, dass isomorphe Typen gleich sind, und wenn es möglich wäre, Ihren Satz zu beweisen, wäre HoTT inkonsistent.
Arthur Azevedo De Amorim
quelle
(x <> y) -> (foo x <> foo y)
? Ich bin wirklich verwirrt in dieser Welt ohne das Prinzip der ausgeschlossenen Mitte.