Teorema di Cantor nella teoria dei tipi


9

Il teorema di Cantor afferma che

Per ogni set A, l'insieme di tutti i sottoinsiemi di A ha una cardinalità strettamente maggiore di A stesso.

È possibile codificare qualcosa del genere usando solo tipi / proposizioni senza fare riferimento ai set ZFC? Si apprezzerebbe il codice o lo pseudocodice per codificare questa proposizione in un linguaggio tipicamente dipendente.

Risposte:


9

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:DddDdD

 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.


Se ho capito bene, nella tua definizione di cantor, natgioca il ruolo di "qualsiasi set A" e nat -> Propgioca il ruolo di "l'insieme di tutti i sottoinsiemi di A". Quali sarebbero le implicazioni della sostituzione nat -> Propcon nat -> bool? Immagino che l'uso Propsia 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 sostituire Propcon booled essere ancora in grado di dimostrare il teorema, giusto?
Paula Vega,

1
Sì, la sostituzione di Prop con bool funziona bene usando la mappa di negazione. Il teorema del punto fisso di Lawvere mostra che puoi farlo con qualsiasi tipo A che abbia una mappa A -> A senza punti fissi, quindi funziona anche un tipo con 3 elementi o un tipo di tutti i numeri naturali
Max New

@PaulaVega Max dice praticamente tutto, ma ti consiglio di giocare con l'esempio, ad esempio usando al boolposto di Prope nate diag := fun b => negb (f b b), o semplicemente sostituendolo Propcon nate usando diag := fun n => (f b b) + 1.
codice
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.