Functional programming 有可能在Ocaml中实现Russell悖论吗?

Functional programming 有可能在Ocaml中实现Russell悖论吗?,functional-programming,ocaml,set-theory,Functional Programming,Ocaml,Set Theory,我最近了解了朴素集合论中的罗素悖论,当考虑到所有集合的集合都不是自身的成员时,集合似乎是自身的一员,如果它不是自身的一员,这就产生了悖论。 我想知道,如果一个函数询问一个集合是否是它自己的一个成员,那么这个函数是否可以用一种函数语言(比如Ocaml)来实现,因为Russell的悖论本身没有明确的答案,如果是的话,我想知道关于如何解决这个问题的任何提示。此外,我对学习这些数学悖论中的任何一个是否可以普遍实现感兴趣。我既不是逻辑学家,也不是类型或集合理论家。但如果启用-rectypes,则可以编写一

我最近了解了朴素集合论中的罗素悖论,当考虑到所有集合的集合都不是自身的成员时,集合似乎是自身的一员,如果它不是自身的一员,这就产生了悖论。
我想知道,如果一个函数询问一个集合是否是它自己的一个成员,那么这个函数是否可以用一种函数语言(比如Ocaml)来实现,因为Russell的悖论本身没有明确的答案,如果是的话,我想知道关于如何解决这个问题的任何提示。此外,我对学习这些数学悖论中的任何一个是否可以普遍实现感兴趣。

我既不是逻辑学家,也不是类型或集合理论家。但如果启用-rectypes,则可以编写一个函数来测试列表是否是其自身的成员:

$ ocaml -rectypes
        OCaml version 4.10.0

let f x = List.mem x x;;
val f : ('a list as 'a) -> bool = <fun>
# let rec mylist = [mylist];;
val mylist : 'a list as 'a = [<cycle>]
# f mylist;;
- : bool = true
空集不包含任何内容,包括其本身

# just_self empty;;
- : bool = false
集合just_self只包含自身,而不是空集合

# just_self just_self;;
- : bool = true
那么Russell集合就是包含不包含自身的集合的集合:

# let russell s = not (s s);;
val russell : ('a -> bool as 'a) -> bool = <fun>
Russell集合不仅仅包含_self,因为该集合包含自身:

# let rec just_self x = x == just_self;;
val just_self : 'a -> bool as 'a = <fun>
# russell just_self;;
- : bool = false
现在是大回报。罗素集合包含自己吗

# russell russell;;
Stack overflow during evaluation (looping recursion?).

这是你应该期待的。也就是说,计算会产生分歧。这也是一个非常适合这个网站的结果。

我既不是逻辑学家,也不是类型或集合理论家。但如果启用-rectypes,则可以编写一个函数来测试列表是否是其自身的成员:

$ ocaml -rectypes
        OCaml version 4.10.0

let f x = List.mem x x;;
val f : ('a list as 'a) -> bool = <fun>
# let rec mylist = [mylist];;
val mylist : 'a list as 'a = [<cycle>]
# f mylist;;
- : bool = true
空集不包含任何内容,包括其本身

# just_self empty;;
- : bool = false
集合just_self只包含自身,而不是空集合

# just_self just_self;;
- : bool = true
那么Russell集合就是包含不包含自身的集合的集合:

# let russell s = not (s s);;
val russell : ('a -> bool as 'a) -> bool = <fun>
Russell集合不仅仅包含_self,因为该集合包含自身:

# let rec just_self x = x == just_self;;
val just_self : 'a -> bool as 'a = <fun>
# russell just_self;;
- : bool = false
现在是大回报。罗素集合包含自己吗

# russell russell;;
Stack overflow during evaluation (looping recursion?).

这是你应该期待的。也就是说,计算会产生分歧。这也是一个非常适合本网站的结果。

这是一个悖论,这意味着它根本不可实现。编程语言应该不重要。选择一个适合你的问题的集合表示法,答案就会呈现出来。事实上,这是一个悖论,意味着它根本不可实现。编程语言不应该真正重要。选择一套适合你的问题的表达方式,答案就会呈现出来。