Risposta breve: si! Non hai bisogno di tanti macchinari per ottenere la prova.
Una sottigliezza: sembra in effetti che vi sia un uso del centro escluso: si costruisce un insieme e un numero d , e mostra che o d ∈ D o d leads D che porta a una contraddizione. Ma esiste un lemma, vero nella logica intuizionista, che afferma:Ddd∈Dd∉D
for all statements P,(P⟺¬P)⇒⊥
Questo è sufficiente, insieme alla solita prova. Si noti che in generale la "surjection" può avere una leggera sfumatura nella logica costruttiva / intuizionista (senza scelta), quindi è necessario fare il dovuto con "giusta invertibile".
Una prova molto standard in Coq (che per qualche motivo non sono riuscito a trovare online) potrebbe essere la seguente:
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.
Naturalmente, il quadro "giusto" in cui pensare a questi maters, che possono essere visti come i requisiti minimi per questa prova, è il teorema del punto fisso di Lawvere che afferma che il teorema è valido in ogni categoria chiusa cartesiana (quindi in particolare, in qualsiasi teoria del tipo ragionevole).
Andrej Bauer scrive magnificamente di questo teorema nel documento Su teoremi a virgola fissa nella calcolabilità sintetica , e sospetto che potrebbero avere alcune cose interessanti da aggiungere a questa risposta.
cantor
,nat
gioca il ruolo di "qualsiasi set A" enat -> Prop
gioca il ruolo di "l'insieme di tutti i sottoinsiemi di A". Quali sarebbero le implicazioni della sostituzionenat -> Prop
connat -> bool
? Immagino che l'usoProp
sia più appropriato nella logica costruttiva, ma la logica classica e la teoria degli insiemi assumono spesso il mezzo escluso, quindi dovremmo essere in grado di sostituireProp
conbool
ed essere ancora in grado di dimostrare il teorema, giusto?