自然数について、アホなりに考えてみた
執筆日時:
- 自然数 0 が存在する。
- 任意の自然数 a にはその後者 (successor)、suc(a) が存在する(suc(a) は a + 1 の "意味")。
- 0 はいかなる自然数の後者でもない(0 より前の自然数は存在しない)。
- 異なる自然数は異なる後者を持つ:a ≠ b のとき suc(a) ≠ suc(b) となる。
- 0 がある性質を満たし、a がある性質を満たせばその後者 suc(a) もその性質を満たすとき、すべての自然数はその性質を満たす。
5番目の公理は、数学的帰納法の原理である。 また、後述するとおり集合論における標準的な構成では、0 を空集合として定義する。
論理的に考えるって、ホント難しいんだなぁ……。
でも、個人的に納得いっていない部分がある。たとえば、suc() というのは“自然数”という概念に従属すべきなんじゃないかなぁ、って思う。“自然数”から離れた、宙ぶらりんなものとしてある suc() って、あんまり想像がつかない。これって整数でも有理数でも無理数でも使える“動詞”(手続き)なのかなぁ? まぁ、“動詞”と捉えているのがおかしいのだろうけれど。
簡単に言うと、
suc(suc(suc(suc(suc(0))))) = 5
って書くよりも、
N.root = 0N.suc() => (n) => { n + 1 }
0.suc().suc().suc().suc().suc() = 5
って書く方が好き。N (自然数)という概念(クラス)と、そのインスタンス(0, 1, 2, …)は分けて考えるべきだし、逆に言えば、そういった性質をもつインスタンスを N という概念でまとめているだけだと思う。
でも、1 を出したのは少し先走り過ぎ。これまで、N という概念に
- N.root(= 0)
- N.suc()
- 1
を前提としていたけれど、実は 1 なんか前提としなくてよくて、
と定義できる(x > 0)。だから、大事なのは
- N.root(= 0)
- N.suc()(単位 1)
だけ。「自然数とは、.root(0 のこと) から始まって、.suc() する(1 足していく)ことで表せるもの」で、僕らが「値」と呼んでいるのは「0 からそれに達するまでに .suc() する回数」ということだね。すごくシンプルになった。これを広げていけば、幅 p の .suc(p) をもつシステム P なんかも考えられるのかもしれない。
あー、でも、集合論との接続ができないのか。