[英]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.