Kurze Antwort: ja! Sie brauchen nicht so viele Maschinen, um den Beweis zu erhalten.
Eine Subtilität: Es scheint auf den ersten Blick, dass die ausgeschlossene Mitte verwendet wird: Man baut eine Menge und eine Zahl d auf und zeigt, dass entweder d ∈ D oder d ∉ D, was zu einem Widerspruch führt. Aber es gibt ein Lemma, das in der intuitionistischen Logik wahr ist und besagt:D.dd∈ D.d∉ D.
für alle Aussagen P., ( P.⟺¬ P.) ⇒ ⊥
Dies reicht zusammen mit dem üblichen Beweis aus. Beachten Sie, dass "Surjektion" im Allgemeinen eine subtile Nuance in der konstruktiven / intuitionistischen Logik haben kann (ohne Auswahl), so dass Sie stattdessen mit "rechts invertierbar" rechnen müssen.
Ein sehr normaler Beweis in Coq (den ich aus irgendeinem Grund online nicht finden konnte) könnte wie folgt lauten:
Inductive right_invertible {A B:Type}(f : A->B):Prop :=
| inverse: forall g, (forall b:B, f (g b) = b) -> right_invertible f.
Lemma case_to_false : forall P : Prop, (P <-> ~P) -> False.
Proof.
intros P H; apply H.
- apply <- H.
intro p.
apply H; exact p.
- apply <- H; intro p; apply H; exact p.
Qed.
Theorem cantor : forall f : nat -> (nat -> Prop), ~right_invertible f.
Proof.
intros f inv.
destruct inv.
pose (diag := fun n => ~ (f n n)).
apply case_to_false with (diag (g diag)).
split.
- intro I; unfold diag in I.
rewrite H in I. auto.
- intro nI.
unfold diag. rewrite H. auto.
Qed.
Natürlich ist der "richtige" Rahmen, in dem über diese Angelegenheiten nachgedacht werden kann, der als Mindestanforderung für diesen Beweis angesehen werden kann, Lawveres Fixpunktsatz, der besagt, dass der Satz in jeder kartesischen geschlossenen Kategorie gilt (so in insbesondere in jeder vernünftigen Typentheorie).
Andrej Bauer schreibt wunderbar über diesen Satz in der Arbeit über Festkomma-Sätze in der synthetischen Berechenbarkeit , und ich vermute, dass er dieser Antwort einige interessante Dinge hinzufügen könnte.
cantor
,nat
spielt die Rolle des „jede Menge A“ undnat -> Prop
spielt die Rolle der „die Menge aller Teilmengen von A“. Was würde das Ersetzennat -> Prop
durch bedeutennat -> bool
? Ich denke , mitProp
geeigneteren in konstruktiver Logik, sondern die klassische Logik und Mengenlehre oft Mitte ausgeschlossen annehmen, so sollten wir in der Lage sein , zu ersetzenProp
mitbool
und noch in der Lage sein , den Satz zu beweisen, nicht wahr?bool
stattProp
undnat
unddiag := fun b => negb (f b b)
, oder einfach nur zu ersetzenProp
mitnat
und verwendendiag := fun n => (f b b) + 1
.