Haskellで下記のデータ型を定義した時にBinat -> Nat
型の単射な関数が思いつかず、タイトルの仮説が浮かんだ次第。
.hs
data Nat = Zero | Succ Nat
data Binat = Bizero | LSucc Binat | RSucc Binat
なんでそう思ったかの概略
証明する気はないが、なんで実数(とBinat
型のすべての値の集合の濃度が同じ)と思ったか、概略を述べておく。
まず、LSucc
とRSucc
をBizero
に有限回適用して得られる値の集合$B_0$は可算無限集合。
次に、RSucc
は有限回、LSucc
は可算無限回Bizero
に適用して得られる値の集合$B_1$も可算無限集合。
最後に、LSucc
とRSucc
をBizero
に可算無限回適用して得られる値の集合を$B_2$として、差集合$B_2 \setminus B_1$を考える。LSucc
を0、RSucc
を1と読み替えれば、半開区間$(0, 1]$の各実数を二進数の無限小数で一意1に表したものと一対一に対応するので、$B_2 \setminus B_1$の濃度は連続体濃度。
以上より、Binat
型のすべての値の集合は連続体濃度2。