簡體   English   中英

是否可以在 Ocaml 中實現羅素悖論?

[英]Is it possible to implement Russell's Paradox in Ocaml?

我最近在朴素集合論中了解了羅素悖論,當考慮所有不是自身成員的集合的集合時,如果它不是自身的成員,則該集合似乎是自身的成員,這就產生了悖論。 我想知道一個 function 是否可以用諸如 Ocaml 之類的函數式語言來實現,因為羅素悖論本身沒有明確的答案,如果是這樣,想知道如何解決這個問題的任何提示問題。 此外,我有興趣了解這些數學悖論中的任何一個是否可以普遍實現。

我既不是邏輯學家,也不是類型論者或集合論者。 但是如果你打開-rectypes你可以寫一個 function 來測試一個列表是否是它自己的成員:

$ 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

不幸的是,我懷疑這與羅素悖論只有微弱的關系。

更新

假設您將一個集合定義為 function,它對集合中的元素返回 true,對不在集合中的元素返回 false。 然后你可以在相當合理的程度上創造羅素悖論。

空集是一個總是返回 false 的集合:

$ rlwrap ocaml -rectypes
        OCaml version 4.10.0

# let empty x = false;;
val empty : 'a -> bool = <fun>

這是一個包含自身的 singleton 集:

# let rec just_self x = x == just_self;;
val just_self : 'a -> bool as 'a = <fun>

您可以嘗試對這些值進行各種測試並獲得合理的答案:

# empty empty;;
- : bool = false

空集不包含任何東西,包括它自己。

# just_self empty;;
- : bool = false

集合just_self只包含它自己,而不是空集合。

# just_self just_self;;
- : bool = true

因此,羅素集是包含不包含自身的集合的集合:

# let russell s = not (s s);;
val russell : ('a -> bool as 'a) -> bool = <fun>

Russell 集包含空集(因為它不包含自身):

# russell empty;;
- : bool = true

Russell 集不包含just_self ,因為該集包含自身:

# russell just_self;;
- : bool = false

現在是大回報。 羅素集是否包含自身?

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

這是你應該期待的。 即,計算發散。 (對於這個網站也是一個非常合適的結果。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM