답변:
짧은 대답 : 예! 증거를 얻기 위해 많은 기계가 필요하지 않습니다.
하나의 미묘함 : 제외 된 중간을 사용하는 것처럼 보입니다. 하나는 세트 와 숫자 를 만들고 또는 중 하나를 모순으로 나타냅니다. . 그러나 거기에 보조 정리입니다 사실 , 직관 논리의 상태가 :
이것은 일반적인 증거와 함께 충분합니다. 일반적으로 "surjection"은 건설적 / 직관적 인 논리 (선택 사항없이)에 약간의 미묘한 차이가있을 수 있으므로 대신 "올바른 가역적"을 사용해야합니다.
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.
물론,이 증거를 통과하기위한 최소한의 요구 사항으로 볼 수있는 이러한 교인들에 대해 생각할 수있는 "올바른"틀 은 모든 직교 폐쇄 범주에서 정리가 보유하고있는 Lawvere의 고정 소수점 정리 입니다. 특히 합리적인 유형 이론에서).
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
여전히 오른쪽 정리를 증명할 수?