Коротка відповідь: так! Вам не потрібно стільки техніки, щоб отримати доказ, щоб пройти.
Одна тонкість: на обличчі здається, що існує використання виключеної середини: одна будує набір D і число d, і показує, що або d∈D або d∉Dщо призводить до суперечності. Але є лема, справжня в інтуїтивістській логіці, яка говорить:
for all statements P,(P⟺¬P)⇒⊥
Цього достатньо, поряд із звичайним доказом. Зауважте, що загалом "викид" може мати певний нюанс у конструктивній / інтуїтивістській логіці (без вибору), тому вам доведеться замість цього "правильно перевернутий".
Дуже стандартний доказ у Coq (який я чомусь не зміг знайти в Інтернеті) може бути наступним:
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.
Звичайно, "правильна" рамка, в якій слід думати про ці питання, які можна розглядати як мінімальні вимоги до цього доказу, - це теорема фіксованої точки Ловевера, яка стверджує, що ця теорема міститься у кожній декартовій закритій категорії (наприклад, у зокрема, в будь-якій теорії розумного типу).
Андрей Бауер прекрасно пише про цю теорему в статті Про теореми з фіксованою точкою синтетичної обчислюваності , і я підозрюю, що до цієї відповіді можуть бути ще деякі цікаві речі.
cantor
,nat
грає роль «будь-якого безлічі А» іnat -> Prop
грає роль «безлічі всіх підмножин А». Які будуть наслідки заміниnat -> Prop
зnat -> bool
? Я думаю , використовуючиProp
більш доречно в конструктивній логіці, але класична логіка і теорія множин часто припускають виключеного третього, так що ми повинні бути в змозі замінитиProp
зbool
і все ще бути в змозі довести теорему, вірно?