康托定理指出
对于任何集合A,A的所有子集的集合都具有比A本身更大的基数。
是否可以仅使用类型/命题而不引用ZFC集来对类似内容进行编码?应当理解用于以依存类型的语言对该命题进行编码的代码或伪代码。
康托定理指出
对于任何集合A,A的所有子集的集合都具有比A本身更大的基数。
是否可以仅使用类型/命题而不引用ZFC集来对类似内容进行编码?应当理解用于以依存类型的语言对该命题进行编码的代码或伪代码。
Answers:
简短的回答:是的!您不需要那么多的设备就能获得证明。
一个微妙之处:表面上似乎使用了排除的中间物:一个人建立了一套 还有一个数字 ,并表明 要么 这导致了矛盾。但是在直觉逻辑中确实存在一个引理,指出:
这足以满足通常的证明。请注意,一般而言,“排斥”在构造/直觉逻辑上可能有一些细微的差别(没有选择),因此您必须使用“正确的可逆”。
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
and nat
和diag := fun b => negb (f b b)
,或者仅替换Prop
为nat
using diag := fun n => (f b b) + 1
。
cantor
,nat
将扮演“任何集合A”nat -> Prop
的角色,并扮演“所有A子集的集合”的角色。什么是替代的影响nat -> Prop
有nat -> bool
?我猜想Prop
在构造逻辑中使用更合适,但是古典逻辑和集合论经常假定排除了中间变量,因此我们应该能够替换Prop
为bool
并且仍然能够证明定理,对吗?