回答:
短い答え:はい!証明を通過するためにそれほど多くの機械は必要ありません。
一つ微妙:除外され、中央の使用があることは、それの顔に思える:1セットのビルドと数dはどちらかということ、そしてショーD ∈ DまたはD ∉ D矛盾につながります。しかし、直観主義的な論理に当てはまる、次のような補題があります。
通常の証明とともに、これで十分です。一般に、「サージェクション」は、建設的/直観的なロジック(選択なし)に微妙なニュアンスをもたらす可能性があるため、代わりに「正しい反転可能」を使用する必要があることに注意してください。
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.
もちろん、この証明を通過するための最小要件と見なすことができる、これらの問題について考える「正しい」フレームワークは、定理がすべてのデカルト閉じたカテゴリーで保持されていることを示すローヴェルの不動点定理です(特に、合理的な型理論では)。
Andrej Bauerがこの定理について論文「合成計算能力の固定小数点定理について」で美しく書いています。この答えに興味深いことがあると思います。
bool
代わりにProp
し、nat
かつdiag := fun b => negb (f b b)
、または単に交換するProp
とnat
して使用してdiag := fun n => (f b b) + 1
。
cantor
、nat
「任意のセットA」nat -> Prop
の役割を果たし、「Aのすべてのサブセットのセット」の役割を果たします。交換の意味は何でしょうnat -> Prop
にnat -> bool
?Prop
構成的論理では使用する方が適切だと思いますが、古典的論理と集合論はしばしば除外された中間を想定しているので、定理に置き換えProp
てbool
、定理を証明できるはずですよね?