自然数について、アホなりに考えてみた

執筆日時:

  1. 自然数 0 が存在する。
  2. 任意の自然数 a にはその後者 (successor)、suc(a) が存在する(suc(a) は a + 1 の "意味")。
  3. 0 はいかなる自然数の後者でもない(0 より前の自然数は存在しない)。
  4. 異なる自然数は異なる後者を持つ:a ≠ b のとき suc(a) ≠ suc(b) となる。
  5. 0 がある性質を満たし、a がある性質を満たせばその後者 suc(a) もその性質を満たすとき、すべての自然数はその性質を満たす。

5番目の公理は、数学的帰納法の原理である。 また、後述するとおり集合論における標準的な構成では、0 を空集合として定義する。

ペアノの公理 - Wikipedia

論理的に考えるって、ホント難しいんだなぁ……。

でも、個人的に納得いっていない部分がある。たとえば、suc() というのは“自然数”という概念に従属すべきなんじゃないかなぁ、って思う。“自然数”から離れた、宙ぶらりんなものとしてある suc() って、あんまり想像がつかない。これって整数でも有理数でも無理数でも使える“動詞”(手続き)なのかなぁ? まぁ、“動詞”と捉えているのがおかしいのだろうけれど。

簡単に言うと、

suc(suc(suc(suc(suc(0))))) = 5

って書くよりも、

N.root = 0

N.suc() => (n) => { n + 1 }

0.suc().suc().suc().suc().suc() = 5

って書く方が好き。N (自然数)という概念(クラス)と、そのインスタンス(0, 1, 2, …)は分けて考えるべきだし、逆に言えば、そういった性質をもつインスタンスを N という概念でまとめているだけだと思う。

でも、1 を出したのは少し先走り過ぎ。これまで、N という概念に

を前提としていたけれど、実は 1 なんか前提としなくてよくて、

\forall x ( x.suc() - x = 1 )

と定義できる(x > 0)。だから、大事なのは

だけ。「自然数とは、.root(0 のこと) から始まって、.suc() する(1 足していく)ことで表せるもの」で、僕らが「値」と呼んでいるのは「0 からそれに達するまでに .suc() する回数」ということだね。すごくシンプルになった。これを広げていけば、幅 p の .suc(p) をもつシステム P なんかも考えられるのかもしれない。

あー、でも、集合論との接続ができないのか。