3

はじめに私たちが日常生活で使う大きな数は、たとえば世界の人口が 75 億人であるとか、日本の GDP が 500 兆円以上であるといったように、100 兆=10 の

14 乗程度までです。その上の単位である京（けい）を知っていても、さらにその上の垓（がい）といった単位を使うことはめったにありません。日
本語の数の単位は、一、十、百、千、万、億、兆、京、垓、𥝱（じょ）、穣（じょう）、溝（こう）、澗（かん）…と 10 の 68 乗の無量大数まで続きます。
科学の世界では、たとえば 1 モルに含まれる要素粒子の数を表すアボガ
ドロ数という数は、約 6023 垓になります。物理的に意味のある非常に大きな定数としては、エディントン数という数があります。これは全宇宙にこの数の陽子があるとしたもので、2 の 256 乗の 136 倍で、10 の 79 乗のオーダーになり、無量大数までの数の単位の体系では命名できなくなります。
「天文学的数」という表現がありますが、天文学の世界でも、エディントン数よりも大きい数を扱うことはまずありません。
ところが、それよりもさらに大きな数が仏教の経典には書かれているとのことです。経典に書かれている不可説不可説転という数の大きさを計算すると、10 の 37 澗（かん）乗程度というとてつもない大きな数になります。「不可説不可説転メートル」がどれくらい長い距離なのか、あるいは「不可説不可説転秒」がどれくらい長い時間なのか、想像をすることすら不可能です。さらに、古代ギリシャでは、アルキメデスが「宇宙を砂粒で埋め尽くすためには何粒の砂粒が必要か」という計算をするために、10 の80000000000000000(8 京) 乗までの数の単位を考えました。ただし、計算に実際に使われたのは 10 の 63 乗まででしたので、とにかく大きな数まで名付けておきたかったのでしょう。そのような太古の昔からそれだけ大きな

4
数が考えられていた、ということからも分かるように、人々は古くから大きな数に魅了されてきました。

20 世紀に入ると、数学者が著書に書いたグーゴルやグーゴルプレックスという大きな数が紹介され、やがてプロの数学者が書いた書物を読んだ数
学愛好家の中に、巨大数の魅力にとりつかれて独自に拡張した巨大数を考える人たちが出てきました。巨大数には、プロの数学者が数学の専門的な問題を解くときに副産物として出てきたいわゆる「正統派巨大数」（グラハ
ム数やスキューズ数）と、単純に大きな数を目指した「お遊び系巨大数」があります。お遊び系の巨大数は、プロの数学者が趣味で開発したもの（コンウェイのチェーン表記やスタインハウス・モーザー表記など）もありま
すが、多くはアマチュアの数学愛好家が定義したものです。
このような巨大数を考えるアマチュアの数学愛好家は、当初はそれぞれが孤立して独自の考え方で巨大数を定義していました。やがて、インター
ネットでロバート・ムナフォの Large Numbers というサイトを発端に、巨大数に関する情報が整理・集約されてきました。巨大数の議論はインター
ネット上で白熱し、特に 21 世紀に入ってから、様々なアマチュアの数学愛
好家たちが「どれだけ大きな数を考えることができるか？」という議論をしてきました。中でも、「現代巨大数論の父」と言われるジョナサン・バウ
アーズは、BEAF という巨大数を生み出す難解なシステムを開発しただけ
ではなく、その BEAF によって定義される巨大数に、たくさんの面白い名
前をつけました。巨大数愛好家の中には、BEAF の定義はよく分からない
けど、そういった面白い名前の巨大数を眺めて楽しむ、といったような人たちもたくさん出てきました。そのようなカジュアルな楽しみ方から、より効率よく巨大数を生み出すためにはどうすれば良いかという理論的な探求をする人まで、いろいろな人たちが巨大数を楽しむコミュニティが形成されています。
日本では、2002 年からインターネットの掲示板「巨大数探索スレッド」
で、巨大数探索が繰り広げられてきました。その中では数学の新しい概念を少しずつ取り入れながら議論が発展し、多変数アッカーマン関数、ふぃっ
しゅ数、バシク行列などが生まれました。本書の著者は、ここに「ふぃっ

はじめに

5

しゅ数」という「お遊び系巨大数」を書き込んで、巨大数に関する議論が活発になるきっかけを作った者です。

2013 年には巨大数をテーマにした漫画『寿司 虚空編』の連載が開始され、2016 年には岩波書店から『巨大数』という書籍が刊行され、数学のイ
ベント「ロマンティック数学ナイト」における『寿司虚空編』作者による巨大数解説の様子が日本テレビの番組で紹介されるなど、近年特に巨大数への注目が集まっています。そのきっかけとなったのが、2007 年にネットで公開しながら執筆を開始して、2013 年に初版を公開した本書『巨大数論』です。ホームページから PDF ファイルをダウンロードして読むことができる手軽さから、巨大数に興味を持つ人たちに広く読まれてきました。
そしてこのたび初版から大幅に加筆・更新したこの第 2 版を発行することとしました。著者名は「ふぃっしゅっしゅ」から「フィッシュ」に変えました。紙の本で読みたいという声も寄せられているため、単行本（ペーパーバック）と PDF 版の同時公開とします。
本書では、章が進むにつれて次第に大きな巨大数を取り扱います。章が1 つ進むごとに、前の章で取り扱っていた数は「無視できるほど小さな数」となってしまうほど飛躍的かつ巨大数の構成方法に関する本質的な変化がそこにはあります。
第 1 章の「巨大数入門」では、いわゆる指数表記を重ねていくことで、その大きさの程度を表記できるような大きさの数を取り扱います。無量大数や不可説不可説転、グーゴル、グーゴルプレックス、スキューズ数といったような有名な巨大数は、ほとんどがこの章に入ります。第 2 章では指数表記を重ねる回数を数える「テトレーション」という演算をはじめとするハ
イパー演算を表記するためのクヌースの矢印表記を導入します。第 3 章では、有名なグラハム数やコンウェイのチェーン表記を紹介します。第 3 章まではすでに一般によく知られている内容ですが、第 4 章からは、巨大数論独自の混沌とした世界に入っていきます。そして、巨大数を作り、その解釈をするために数学基礎論、数理論理学、証明論、計算機科学のような数学の分野から、再帰理論、順序数、逆数学、述語論理、計算可能性理論のような理論を導入します。これらの理論は、そもそもは巨大数とは無関係に発展してきたものですが、多くの巨大数愛好家たちが巨大数を作って6
評価するという目的で議論を重ねて、色々な数学の成果を取り入れてきたものを、巨大数論という体系として取りまとめたものが本書です。巨大数論の立場からは、それらの理論がまるで巨大数を作るために発展してきたかのように利用することになります。
このように数学の幅広い分野の専門的な内容を含むため、本書の内容は次第にハードになっていきます。より多くの人にスマホや電子書籍リーダー
1
で気軽に読んでいただけるように、第 1 章を独立させて『巨大数入門』という Kindle 版の電子書籍として出版しています。
本書『巨大数論』第 2 版は、紙の単行本を Amazon で販売し、単行本と同じ内容の電子書籍（PDF 版）をホームページ2 で無料公開しています。
また、クリエイティブ・コモンズ 表示 - 継承 4.0 国際3 の条件で自由に印刷・複製や再配布をしていただくことができます。紙の本でも電子書籍でもプリントアウトでも、皆様が読みやすい方法でお読みください。
本書には著者が巨大数の探求をはじめてから 15 年間の多くの人たちとの議論が凝縮されています。そして、ネットに公開した PDF 版に多くのご指摘をいただいたことで改良を重ねてきました。特に、Limit of Empty さん（巨大数研究 Wiki 設立者）
、ミカヅキモさん（数学者）、MUPI さん、noan
さんには、丁寧に読んでいただき多くのご指摘をいただきました。ここに記して感謝の意を表します。

2017 年 6 月 29 日
本書は多くの方にご愛読いただいたおかげで、インプレスグループ創設

25 周年企画 POD 個人出版アワードで審査員特別賞（窓の杜賞）を受賞しました4 。読者の皆様に感謝します。いくつかの誤記を修正した 2 版 2 刷を発行します。修正点はホームページをご参照ください。

2018 年 10 月 13 日
フィッシュ
1 巨大数入門 Kindle 版 https://www.amazon.co.jp/dp/B01N4KCIJQ
2 巨大数論（本書）のホームページ http://gyafun.jp/ln/

3 CC BY-SA 4.0 https://creativecommons.org/licenses/by-sa/4.0/deed.ja

4「POD 個人出版アワード」
受賞作品決定！ http://www.impressrd.jp/news/180320/NP

7

目次

はじめに

3

第 1 章 巨大数入門

クラス 2 の巨大数 . . . . . . . . . . . . . . . . . . . . . . .

11
11

1.1.1

数のクラス分け . . . . . . . . . . . . . . . . . . . .

11

1.1.2

無量大数 . . . . . . . . . . . . . . . . . . . . . . . .

13

1.1.3

グーゴル . . . . . . . . . . . . . . . . . . . . . . . .

17

1.1.4

シャノン数 . . . . . . . . . . . . . . . . . . . . . .

21

1.1.5

1.1

1.2

1.3

1.4

1.5

数の比較 . . . . . . . . . . . . . . . . . . . . . . . .

25

クラス 3 の巨大数 . . . . . . . . . . . . . . . . . . . . . . .

27

1.2.1

アルキメデスが考えた数の単位 . . . . . . . . . . .

28

1.2.2

不可説不可説転 . . . . . . . . . . . . . . . . . . . .

31

1.2.3

グーゴルプレックス . . . . . . . . . . . . . . . . .

32

1.2.4

ハイパー E 表記 . . . . . . . . . . . . . . . . . . . .

33

1.2.5

プロマキシマ . . . . . . . . . . . . . . . . . . . . .

34

1.2.6

超過剰数 . . . . . . . . . . . . . . . . . . . . . . . .

36

クラス 4 の巨大数 . . . . . . . . . . . . . . . . . . . . . . .

37

1.3.1

グーゴルデュプレックス . . . . . . . . . . . . . . .

38

1.3.2

スキューズ数 . . . . . . . . . . . . . . . . . . . . .

39

クラス 5 以上の巨大数 . . . . . . . . . . . . . . . . . . . .

40

1.4.1

宇宙論で使われた最大の数 . . . . . . . . . . . . . .

40

1.4.2

ベントレー数 . . . . . . . . . . . . . . . . . . . . .

41

巨大数に関する参考資料 . . . . . . . . . . . . . . . . . . .

44

目次

8
第 2 章 原始再帰関数

2.1

45

クヌースの矢印表記. . . . . . . . . . . . . . . . . . . . .

45

2.1.1

矢印表記 . . . . . . . . . . . . . . . . . . . . . . . .

45

2.1.2

指数 . . . . . . . . . . . . . . . . . . . . . . . . . .

46

2.1.3

テトレーション . . . . . . . . . . . . . . . . . . . .

49

2.1.4
2.1.5

ハイパー演算子 . . . . . . . . . . . . . . . . . . . .

4954

連続関数化 . . . . . . . . . . . . . . . . . . . . . .

2.2

グッドスタイン数列. . . . . . . . . . . . . . . . . . . . .

57

2.3

原始再帰関数 . . . . . . . . . . . . . . . . . . . . . . . . .

61

第 3 章 2 重再帰関数

65

3.1

アッカーマン関数 . . . . . . . . . . . . . . . . . . . . . . .

65

3.2

2 重再帰関数. . . . . . . . . . . . . . . . . . . . . . . . .

68

3.3

モーザー数

. . . . . . . . . . . . . . . . . . . . . . . . . .

72

3.4

グラハム数

. . . . . . . . . . . . . . . . . . . . . . . . . .

75

3.5

コンウェイのチェーン表記 . . . . . . . . . . . . . . . . . .

76

第 4 章 多重再帰関数

81

4.1

多変数アッカーマン関数 . . . . . . . . . . . . . . . . . . .

81

4.2

多重再帰に見えてそうでない関数 . . . . . . . . . . . . . .

84

4.3

拡張チェーン表記 . . . . . . . . . . . . . . . . . . . . . . .

86

4.4

ふぃっしゅ数 . . . . . . . . . . . . . . . . . . . . . . . . .

87

4.4.1

ふぃっしゅ数バージョン 1 . . . . . . . . . . . . . .

88

4.4.2

ふぃっしゅ数バージョン 2 . . . . . . . . . . . . . .

100

4.4.3

ふぃっしゅ数バージョン 3 . . . . . . . . . . . . . .

103

バード数から配列表記へ . . . . . . . . . . . . . . . . . . .

106

4.5

第 5 章 順序数

5.1

115

順序数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

116

5.1.1

整列集合と順序型 . . . . . . . . . . . . . . . . . . .

116

5.1.2

超限順序数とフォン・ノイマンの順序数表記 . . . .

120

5.1.3

極限順序数の基本列 . . . . . . . . . . . . . . . . .

122

5.1.4

カントールの標準形 . . . . . . . . . . . . . . . . .

124

目次

5.2

5.3

9
順序数階層

. . . . . . . . . . . . . . . . . . . . . . . . . .

125

5.2.1

ハーディ階層 . . . . . . . . . . . . . . . . . . . . .

126

5.2.2

急増加関数 . . . . . . . . . . . . . . . . . . . . . .

130

5.2.3

緩増加関数 . . . . . . . . . . . . . . . . . . . . . .

138

順序数解析

. . . . . . . . . . . . . . . . . . . . . . . . . .

139

5.3.1
5.3.2

形式体系 . . . . . . . . . . . . . . . . . . . . . . . .
一階述語論理 . . . . . . . . . . . . . . . . . . . . .

140
140

5.3.3

算術の理論体系 . . . . . . . . . . . . . . . . . . . .

143

5.3.4

順序数解析 . . . . . . . . . . . . . . . . . . . . . .

145

第 6 章 ペアノ算術の限界

6.1

F [ϵ0 ](n) の計算 . . . . . . . . . . . . . . . . . . . . . . . .

147
147

6.2

ドル関数の角括弧表記 . . . . . . . . . . . . . . . . . . . .

149

6.3

ふぃっしゅ数バージョン 5 . . . . . . . . . . . . . . . . . .

151

6.4

ヒドラゲーム . . . . . . . . . . . . . . . . . . . . . . . . .

154

6.5

原始数列数

. . . . . . . . . . . . . . . . . . . . . . . . . .

160

6.6

多重リストアッカーマン関数 . . . . . . . . . . . . . . . . .

167

6.7

バードのネスト配列表記 . . . . . . . . . . . . . . . . . . .

169

6.8

BEAF のテトレーション配列 . . . . . . . . . . . . . . . .

170

6.9

巨大数生成プログラム . . . . . . . . . . . . . . . . . . . .

175

第 7 章 再帰関数

177

7.1

ヴェブレン関数 . . . . . . . . . . . . . . . . . . . . . . . .

177

7.2

順序数崩壊関数 . . . . . . . . . . . . . . . . . . . . . . . .

181

7.2.1

非可算順序数と共終数 . . . . . . . . . . . . . . . .

181

7.2.2

フェファーマンの θ 関数 . . . . . . . . . . . . . . .

183

7.2.3

ブーフホルツの ψ 関数 . . . . . . . . . . . . . . . .

187

7.2.4

マドールの ψ 関数 . . . . . . . . . . . . . . . . . .

187

7.2.5

ワイヤーマンの ϑ 関数 . . . . . . . . . . . . . . . .

192

7.2.6
7.3

順序数崩壊関数の拡張 . . . . . . . . . . . . . . . .

193

2 階算術 . . . . . . . . . . . . . . . . . . . . . . . . . . . .

194

7.3.1

逆数学 . . . . . . . . . . . . . . . . . . . . . . . . .

194

7.3.2

2 階算術 . . . . . . . . . . . . . . . . . . . . . . . .

194

目次

10

7.4

7.3.3

論理式の階層 . . . . . . . . . . . . . . . . . . . . .

196

7.3.4

2 階算術の部分体系と証明論的順序数 . . . . . . . .

197

7.3.5

タラノフスキーの C 表記 . . . . . . . . . . . . . . .

200

様々な巨大数と関数. . . . . . . . . . . . . . . . . . . . .

200

7.4.1

ふぃっしゅ数バージョン 6 . . . . . . . . . . . . . .

201

7.4.2
7.4.3

ペア数列数 . . . . . . . . . . . . . . . . . . . . . .
サブキュービックグラフ数 . . . . . . . . . . . . . .

205
215

7.4.4

ブーフホルツのヒドラ . . . . . . . . . . . . . . . .

216

7.4.5

BAN . . . . . . . . . . . . . . . . . . . . . . . . . .

219

7.4.6

BEAF . . . . . . . . . . . . . . . . . . . . . . . . .

220

7.4.7

バシク行列システム . . . . . . . . . . . . . . . . .

222

7.4.8

強配列表記 . . . . . . . . . . . . . . . . . . . . . .

224

7.4.9

ローダー数 . . . . . . . . . . . . . . . . . . . . . .

226

7.4.10 超越整数と巨大基数による拡張 . . . . . . . . . . .

229

7.4.11 有限約束ゲーム . . . . . . . . . . . . . . . . . . . .

232

7.4.12 欲張りクリーク列 . . . . . . . . . . . . . . . . . . .

234

第 8 章 計算不可能な関数

239

8.1

ビジービーバー関数. . . . . . . . . . . . . . . . . . . . .

239

8.2

神託機械 . . . . . . . . . . . . . . . . . . . . . . . . . . . .

243

8.3

クサイ関数

. . . . . . . . . . . . . . . . . . . . . . . . . .

244

8.4

ふぃっしゅ数バージョン 4 . . . . . . . . . . . . . . . . . .

245

8.5

ラヨ数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . .

248

8.6
8.7

ふぃっしゅ数バージョン 7 . . . . . . . . . . . . . . . . . .
ビッグフット . . . . . . . . . . . . . . . . . . . . . . . . .

251
255

8.8

サスクワッチ . . . . . . . . . . . . . . . . . . . . . . . . .

257

おわりに

259

巨大数年表

263

11

第

1章
巨大数入門

本章では、数の大きさをクラス分けすることによって、段階的に巨大数を見ていきます。本章で解説をする巨大数が、本書の著者を含めて普通の人間がその大きさについて想像をめぐらせて「これは大きな数だなぁ」と気が遠くなって驚くような巨大数の限界だと思います。ところが、それは巨大数論では入門レベルということになります。

1.1

クラス 2 の巨大数

1.1.1数のクラス分けロバート・ムナフォ (Robert Munafo) は、1996 年に開設したホームペー
ジ で、様々な巨大数について紹介し、理論的に考察しています。その説1

明に従って、段階的に大きな数について記します。ムナフォは、数の大きさをクラス分けして、クラス 0 の数、クラス 1 の数、クラス 2 の数、クラス 3 の数…と分類しました。日常生活で使う数は、クラス 2 の数までです。
さらに無量大数やグーゴルといった有名な巨大数も、クラス 2 になります。
そこで本節ではクラス 2 の数までについて見てみます。
クラス 0 の数 (0–6): クラス 0 は、カウフマンが提唱した subitizing という概念で2 、即座に認識できる数です（図 1.1）。たとえば、１本の鉛筆
1 Large Numbers http://www.mrob.com/pub/math/largenum.html

2 Kaufman, E. L. et al. (1949). The discrimination of visual number. American
Journal of Psychology 62 (4): 498–525. doi:10.2307/1418556

第1章

12

巨大数入門

図 1.1: 一瞬で認識できる数。
があれば、それは１本であると一瞬で認識できます。2 本であっても、一瞬で認識できます。5 本の鉛筆はどうでしょうか。目をつぶって、目を一瞬あけてすぐに閉じたときに、見た鉛筆の本数を目を閉じた状態で言えるかとなれば、5 本くらいであれば誰でも言えるでしょう。このように、いちい
ち数えなくても即座に認識可能な数は、最大 5 から 9 程度であると言われていますが、ムナフォは低めに見積もって 6 であるとして、0 から 6 までの数をクラス 0 としました。
クラス 1 の数 (6–106 ): クラス 1 は、人間の目でおおまかな数が認識できる数です。この上限を、ムナフォは 100 万であるとしました。たとえば、大きな紙に 100 万個の点を印刷して、その 1 つ 1 つの点を見分けながら、残りのすべての点が視野に入るようにします。ムナフォの実験で本人はそれができましたが、人によってはもっと大きな数でも認識できるかもしれません。クラス 1 の数であれば、正確な数は分からなくても、大体の大きさが認識できます。たとえば、部屋の中に 85 人の人がいれば、70〜100 人
程度かな、と分かります。もっとたくさんの人がいるときには、何千人とか何万人といった表現をします。このように、正確な数は分からなくても、だいたいの数を認識できる限界をクラス 1 として、ムナフォはその上限を100 万としました。
クラス 2 の数 (106 –1010 ): クラス 2 は 10 進数で記録できる数です。ク6

ラス 0 の 6 からクラス 1 の 106 = 1000000 へと増やしたように、分かりやすくクラス 2 は 1010 = 101000000 までとされました。ここで指数を 2 つ6

1.1. クラス 2 の巨大数13以上重ねたときには、右上から順番に計算する、ということに気をつける必要があります。つまり 1010 = 10(10 ) です。左から順番に計算すると、
66(1010 )6 = 1010×6 = 1060 となって、指数が掛け算になってしまいますから、右から計算した場合と比べてとても小さい数になります。クラス 2 は、100万桁までの数で記録できる数ということです。クラス分けの境界は、全体として大ざっぱなものです。子供に「できるだけ大きな数を書いてごらん」と言って紙を渡せば、多くは「999999…」と書き続けるでしょう（111111…
と書く方が楽ですが）。根性のある子供でも 100 万桁はなかなか書き続けられないと思います。何桁記録できるのかは、どこにどのように記録するのかにもよります。パソコンにデータを保存するのは簡単なので、100 万桁よりもずっと大きな桁数を保存できます。ここでは紙と鉛筆でものすごく頑張れば 10 進数表記で書ける数、と解釈すると、100 万桁という上限がちょうどいい感覚になりそうです。

1.1.2

無量大数

まずは日本での大きな数の数え方について記します。それからその由来となった中国とインドにさかのぼって調べたところを記します。
私達が日常生活で扱う数は、クラス 2 の数までです。したがって日常生
活で使う数に関する言葉も、だいたいこの範囲の言葉になります。そこでまずは、日本語での数の数え方から見ていきます。それからその源泉をたどって中国、インドの数について見ます。
数の位は、一、十、百、千、万と 10 倍ずつになり、その先は 1 万倍ずつ、
億 = 108 、兆 = 1012 、京（けい）= 1016 、垓（がい）= 1020 、𥝱（じょ）= 1024 、穣（じょう）= 1028 、溝（こう）= 1032 、澗（かん）= 1036 、正（せい）= 1040 、載（さい）= 1044 、極（ごく）= 1048 、恒河沙（ごうがしゃ）= 1052 、阿僧祇（あそうぎ）= 1056 、那由他（なゆた）= 1060 、不可思議（ふかしぎ）= 1064 、無量大数3 （むりょうたいすう）= 1068 となります。
垓以上の単位を日常生活で使うことはめったになく、特に意識しなければ知らない人も多いでしょう。著者は子供の頃から数が好きだったので、父
3 巨大数研究 Wiki - 無量大数 http://ja.googology.wikia.com/wiki/無量大数

第1章

14

巨大数入門

に教えてもらって無量大数までの桁を覚えて喜んでいました。当時は無量
大数は 1088 であると覚えていて、これは恒河沙から上は 108 ずつ増える万万進という方式に基づいていたためですが、現在は万進に統一されていますので、正しくは 1068 になります。その根拠として、1627 年に初版が出た吉田光由の『塵劫記』では、寛永 8 年版 (1631) で無量大数が 1068 または1088 として紹介され、寛永 11 年版 (1634) では 1068 のみに統一されているため、現在では 1068 に統一されていると考えることができます。
✓✏【定義】無量大数
無量大数 = 1068✒✑

4
さて、高杉親知の「無量大数の彼方へ」というサイトによれば、昔の中国では、後漢の時代に載までの単位が記されていて、億以上の単位について
は、「下数」「中数」「上数」の３つの体系があり、さらに「中数」には「万進」「万万進」という体系があって、合計４つの体系それぞれで、同じ言葉でも表す数が違っていました。下数では、次の単位では 10 倍になるため、
万=104 、億=105 、兆=106 と少しずつ上がり、載=1014 になります。中数では、万進では 1 万倍ずつ、万万進では 1 億倍ずつ上がります。したがって万進の兆は現在の日本と同じ 1012 になるのに対して、万万進では「万億」が 1012 になります。そして万万進の兆は 1016 で、万進の京と同じになります。載は万進では 1044 、万万進では 1080 になります。中国では、万進と万万進が統一されずに近代化が進んだので混乱が生じましたが、日本では、
万進の表記に統一されたので混乱が生じないようになりました。
下数よりも中数よりも、飛躍的に数の増加が大きいのが上数です。上数
では単位を 2 乗すると次の単位になります。したがって、億=108 = 102 、
3

万億=1012 、千万億=1015 、兆=102 = 1016 、万兆=1020 、億兆=1024 、万億
4兆=1028 、千万億兆=1031 、京=102 = 1032 、億京=1040 、兆京=1048 、億兆5京=1056 、万億兆京=1060 、垓=102 = 1064 、千万億兆京垓=10127 、𥝱 =6102 = 10128 、穣=102 = 10256 、溝=102 = 10512 、澗=102
7

=10

8

211

= 10

2048

、載=10

9

212

= 10

4096

10

= 101024 、正、千万億兆京垓𥝱穣溝澗正載=108191と、現在の定義である無量大数とは比べ物にならないほどの大きな数にな
4 無量大数の彼方へ http://www.sf.airnet.ne.jp/˜ts/language/largenumber.html

1.1. クラス 2 の巨大数

15ります。それでも指数の部分が 100 万に達していないので、まだクラス 2です。
載よりも上の単位である極から上は、元の朱世傑（しゅせいけつ、生没年不詳）による『算学啓蒙』(1299 年) において登場しました。ここで極以外の単位はすべて仏教から取られたものです。恒河沙は「ガンジス川の砂」の意味で、それだけ大きな数ということです。阿僧祇は「数えることができない」、那由他は「極めて大きな数量」、不可思議「思い測ったり言葉で言い表したりすることができない」無量大数は、『算学啓蒙』では「無量数」
として登場し、「量ることのできない数」ということです。
この中で恒河沙以外は「数え切れないほどの大きな数」と理解すれば良いのですが、恒河沙については、ガンジス川の砂の数という具体的な数になっているので、どの程度の大きさなのか見積もってみます。今は恒河沙と言えば日本では 1052 という意味になり、中国でも下数、中数、上数によって数は変わります。仏教の中ではそういう数を意味するものではなく、ガンジス川の砂の数という意味ですから、今の日本で恒河沙を意味する 1052と比較することは無意味です。
まずはガンジス川の大きさと砂粒の大きさを考える必要があります。ガ
ンジス川の全長は 2500 km あまりです。川幅は数 km なので 4 km 程度と考えて、面積を 10000 km2 とします。深さをどこまで取るのかは分かりませんが、仮に 1 m の深さまで考えると、体積は 10 km3 になります。問題は、砂の大きさです。砂は粒子の直径が 0.05–2 mm のもので、それよりも小さ
い直径のものはシルトあるいは粘土と言われます。当時のインドにはそのような概念はなかったのでしょうから、全部ひっくるめて砂と呼ばれていたことでしょう。そうすると、現在では非常に小さくて粘土と呼ばれているような粒子のものも、砂に含めて考えるのかどうか、これによって値はだいぶ変わってきます。ここでは暫定的に直径が 0.1 mm であると考えます。次に充填率を考える必要がありますが、充填率が低くて 50 % であったとしても、充填率が 100 % であると仮定して計算したときの 2 倍程度の誤差なので、これは許容誤差であると考えて充填率 100 % でざっくりと計算
すると、10 km3 = 1010 m3 の中に 0.001 mm3 = 10−12 m3 の粒子を隙間無

第1章

16

巨大数入門

く埋めた時の粒子の個数なので、1022 となります。今の日本の数え方だと、

100 垓程度であると見積もられます。
仏教では、とても長い時間を表すときに劫（こう）という時間の単位が使われます。
「未来永劫」「億劫」「五劫のすり切れ」などの言葉は、ここから来ています。大谷大学の木村宣彰教授によれば5 、この「劫」には 2 通りの意味があり、1 つ目は「磐石劫」で、四十里四方の大石を、いわゆる天人の羽衣で百年に一度払い、その大きな石が摩滅して無くなってもなお「一劫」の時間は終わらないと譬えています。2 つ目は「芥子劫」で、方四十里の城に小さな芥子粒を満たして百年に一度、一粒ずつ取り去り、その芥子がす
べて無くなってもなお尽きないほどの長い時間が一劫であるとのことです。
この時間がどの程度のものなのか「カガクの時間」というサイトでは、
次のように計算しています。「磐石劫」では6 、「1 里=500m」「原子=1 辺

0.2nm の立方体」「1 回なでると、1 平方メートルの範囲の原子が 1 層はがれる」という仮定の下、4 𥝱 = 4 × 1024 年という計算結果を出しました。2

つ目の「芥子劫」については7 、「1 里=500m」、「けし粒=1 辺 0.5mm の立方体」、という仮定の下、6 𥝱 4000 垓 = 6.4 × 1024 年という計算結果を出しました。磐石劫でも芥子劫でも同じ𥝱の単位になるのは面白いところです。
宇宙の年齢は 138 億年程度であるとされていますので8 、それと比べて 100
兆倍ほどの気の遠くなるほど長い時間です。恒河沙という数と劫という時間の単位を組み合わせれば、恒河沙劫というとても長い時間が表現できま
すので、そういう表現があるか検索してみたところ、『首楞厳経』という経典に恒河沙劫という表現が出てきて、親鸞が『尊号真像銘文』で引用していることが分かりました9 。恒河沙劫は、1022 × 1024 = 1046 年=100 載年のオーダーになります。

5 http://www.otani.ac.jp/yomu page/b yougo/nab3mq0000000r5r.html

6 天女が岩をなでたなら http://d.hatena.ne.jp/inyoko/20111015/How long is kalpa2
7 けし粒はいつなくなる http://d.hatena.ne.jp/inyoko/20111008/How long is kalpa

8 Universe as an Infant: Fatter Than Expected and Kind of Lumpy (New YorkTimes) https://nyti.ms/YrtRRV
9 WikiArc: ノート:首楞厳経 https://bit.ly/1b4Myz9 (labo.wikidharma.org)

1.1. クラス 2 の巨大数

1.1.3

17

グーゴル

ここまで、主にインド、中国由来の日本の数の数え方について見てきました。次に英語を中心としたヨーロッパの言語の話に移ります。
大きな数を表す言葉として、上記の億、兆…といった単位の他には、キロ (k, kilo-, 103 )、メガ (M, Mega-, 106 )、ギガ (G, Giga-109 )、テラ (T,Tera-1012 ) といった単位の頭につける接頭辞もあります。単位の頭にこれらの接頭辞をつけることで、キロメートル、キログラム、メガバイト、Mbps（メガビットパーセカンド）、メガピクセル、ギガバイト、テラバイトなどという単位ができます。
なお、ハードディスク等の記憶容量を表すときには、1 キロが 1000 では
なく 210 = 1024 を意味することがあります。これはコンピュータは 2 進数を基本としているので、1000 よりも 1024 の方が切りの良い数だからです。
国際電気標準会議 (IEC) は、2 進数に基づいた単位につける 2 進接頭辞を定めています。たとえば 210 はキロバイナリー (kilobinary) を略してキビ(kibi) となって Ki と書き、1000 バイトを意味する KB と区別します。同様に 220 はメビ (Mi)、230 はギビ (Gi)、240 はテビ (Ti) となって、テラは1012 = 1, 000, 000, 000, 000 ですが、テビは 240 = 1, 099, 511, 627, 776 なので、その差は 10 % ほどになります。このように 2 進と 10 進の接頭辞で差異があって混乱するために、両者を明確に区別するために定められた 2 進
接頭辞ですが、まだ十分に普及していません。
さてテラの上の接頭辞は、国際単位系の SI で、ペタ (P, Peta-1015 )、エクサ (E, Exa-1018 )、ゼッタ (Z, Zetta-1021 )、ヨッタ (Y, Yotta-1024 ) と定められています。現実に使う大きさとしては、𥝱=1024 程度が上限であると考えられているということでしょう。
現実世界の現象をあらわす数としては、どの程度の数が最大となるのでしょうか。「天文学的数」という表現があるように、天文学では広大な宇宙のことを取り扱うため、非常に大きな数が使われます。「ガンジス川の砂の数」と言ったときには、とても広いガンジス川にある、とても小さい砂粒の数なので、非常に大きな数になりました。広い方の限界として宇宙の大きさ、小さい方の限界としては、素粒子の大きさを考えることになるでしょ

18

第1章

巨大数入門

う。その両方の限界を取ると、宇宙に存在する素粒子の数はいくつか？ という疑問になります。
イギリスの天文学者アーサー・スタンレー・エディントン (Sir Arthur

Stanley Eddington, 1882–1944) は、1938 年にケンブリッジ大学のトリニ
ティ・カレッジでの講義 (Tarner lecture) で、宇宙に存在する全陽子の数が正確に 136 × 2256 個あり、全電子数も同じ数だけある、としました。これ
が、エディントン数10 (Eddington number) と呼ばれています。10 進数に直すと、1.574 × 1079 程度です。現在では、陽子の数はもっと多いとされています。陽子よりも小さい素粒子の単位で考えると、その数は 1080 –1085程度であるとされています。実際、現実には 10 進数で 100 桁以上の数を扱うことはなさそうです。
英語では、million (100 万) や billion (10 億) のように、「〜リオン」という接尾語が使われています。このように、ヨーロッパ系の言語で「〜リオン」という接尾語で数の名称を体系的かつ非常に大きな桁まで名付けた最初の著
作は、フランスの数学者ニコラ・シュケ (Nicolas Chuquet, 1450 年頃–1500
年頃) が書いた算術の 3 つの分野（有理数、無理数、方程式）に関する『数の学の三部』 (Le triparty en la science des nombres) という中世フランス語で書かれた本です。この本はシュケの生きている間には出版されず、1520
年にエスティエンヌ・ド・ラ・ロシュ (Estienne de La Roche, 1470–1530)
が『算術』 (l’Arismetique) という本でシュケの出典を記さずにコピーしました。1870 年に、アリスティード・マール (Aristide Marre, 1823–1918) がシュケの著作の原稿を発見して、1880 年に刊行しました。その原稿には、ロシュの手書きメモがあったようです。シュケの本では大きな数を 6 桁ずつに区切って、そのグループを million, byllion, tryllion, quadrillion, quyillion,

sixlion, septyllion, ottyllion, nonyllion のように好きなだけ名付けることができる、としています。この数え方だと、nonyllion が 1054 になります。
現代の英語の大きな数の表記は、このシュケのシステムが元となっていますが、million よりも上の数について、シュケが考えた 6 桁ごとに名前をつけるシステムだけではなく、3 桁ごとに名前がつけられるシステムがあります。つまり million は 100 万を意味しますが、その上の billion は 10 億
10 http://ja.googology.wikia.com/wiki/エディントン数

1.1. クラス 2 の巨大数19をあらわす場合と 1 兆をあらわす場合があります。現在は、billion が 10 億をあらわすショートスケールが主流になっています。かつてイギリスでは

billion が 1 兆をあらわすロングスケールが使われていましたが、現在はイギリスでもショートスケールが基本です。ただし、ヨーロッパ大陸や南米の英語以外の言語圏では、ロングスケールが使われているところもあります。たとえば、シュケの母語であるフランス語では今でも billion が 1 兆でtrillion が百京のロングスケールのままです。ショートスケールとロングス
ケールの関係は、ちょうど万進と万万進の関係のようなもので、ショート
スケールが千進、ロングスケールが千千進と言えば分かりやすいと思います。つまり million から先、billion, trillion, quadrillion, … と進んで行くごとに、ショートスケールでは千倍、ロングスケールでは千千倍、すなわち100 万倍になります。
標準的な英語の辞書に定義されている大きな数は、ショートスケール
では million = 106 , billion = 109 , trillion = 1012 , quadrillion = 1015 ,quintillion = 1018 , sextillion = 1021 , septillion = 1024 , octillion = 1027 ,nonillion = 1030 , decillion = 1033 , undecillion = 1036 , duodecillion =1039 , tredecillion = 1042 , quattuordecillion = 1045 , quindecillion = 1048 ,sexdecillion (sedecillion) = 1051 , septendecillion = 1054 , octodecillion =1057 , novemdecillion (novendecillion) = 1060 , そして、ビギンティリオン11(vigintillion) = 1063 (ロングスケールでは 10120 ) までが連続的に定義されていて、次はセンティリオン12 (centillion) = 10303 (ロングスケールでは10600 ) まで飛ぶのが一般的です。
また、それとは別にグーゴル13 (googol) = 10100 とグーゴルプレックス(googolplex) = 1010✓

100

も英語の辞書に載っている標準的な数です。
【定義】グーゴル

グーゴル = 10100✒

グーゴルとグーゴルプレックスの語源は数学者エドワード・カスナー(Edward Kasner, 1878–1955) らの『数学と想像力』 (Mathematics and the
11 http://ja.googology.wikia.com/wiki/ビギンティリオン
12 http://ja.googology.wikia.com/wiki/センティリオン
13 http://ja.googology.wikia.com/wiki/グーゴル

✏
✑

第1章

20

巨大数入門

Imagination) 14 という本に、次のように書かれています。
知恵の言葉は科学者よりむしろ子供たちから発せられる。「グーゴル」という名前は子供（カスナー博士の 9 歳の甥）によって発明された。彼は、とても大きい数、つまり 1 の後に 0 が 100
個続く数の名前を考えて欲しいと頼まれた。彼は、この数が無限ではないことをはっきりと分かっていたので、名前がなければなければならないことも分かっていた。「グーゴル」という名前を提案すると同時に、さらに大きい数である「グーゴルプ
レックス」を名付けた。
カスナーの甥であるミルトン・シロッタ (Milton Sirotta) が 9 歳の時に考えた数で、ミルトンは 1911 年生まれなので 1920 年にグーゴルが生まれたことになります。
なお、グーゴルプレックスはクラス 3 の数で改めて説明します。
検索エンジンの名前、そして IT 企業の名前である Google は、googol に由来しています。Google が生まれたのはスタンフォード大学で、当初 Googleの共同創業者であるラリー・ページ (Lawrence Edward “Larry” Page) とセルゲイ・ブリン (Sergey Mikhailovich Brin) は BackRub と呼んでいました。1997 年 9 月に、ラリーがスタンフォード大学の研究室で当時大学院生だったショーン・アンダーソン (Sean Anderson) と検索エンジンの新しい名前について話をしていたときの様子が、次のように記録されています。
これは、2004 年にスタンフォード大学の大学院生だったデイビッド・コラー(David Koller) がショーンから聞いた話です15 。
ショーンとラリーは、研究室でホワイトボードを使いながら良い
名前について考えていました。非常に膨大なデータをインデックスする、ということに関係のある名前がいいと考えていました。ショーンが非常に大きな数である「グーゴルプレックス」はどうかと口頭で提案したところ、ラリーは「グーゴル」がいい
14 Kasner, E. and Newman, J. R. (1940) Mathematics and the Imagination. Simon& Schuster, New York.
15 http://graphics.stanford.edu/˜dk/google name origin.html

1.1. クラス 2 の巨大数21と答えました。ショーンはコンピュータの端末に座っていたので、インターネットのドメイン名登録データベースを検索して、その名前が登録可能かどうか調べました。そのときに、ショー
ンは googol の綴りを正確に覚えていなかったので google.comという名前を探すというミスをしてしまいました。ラリーはその名前が気に入って、直後に google.com を登録する手続きをしました。
つまり、googol のスペルミスから google.com が登録されたというのがGoogle の由来となっているのです。

1.1.4

シャノン数

シャノン数16 (Shannon number) は、10120 です。これは、1950 年に情報理論の父として知られるアメリカの数学者、電気工学者のクロード・シャ

ノン (Claude Elwood Shannon, 1916–2001) が書いた論文17 に出てくる数です。この論文は、チェスの指し手を読むコンピュータを開発することの意義について考察したものです。
当時は、1949 年に EDSAC という最初のノイマン型コンピュータが作られた頃でした。シャノンは、コンピュータにチェスをさせることは「おそらくまったく実用的な重要性はないが、理論的な関心であり、この問題に対する満足な回答が得られれば、同じような他の同様の性質を持つ問題を解決する役に立つだろう」としています。
この論文では、まずチェスというゲームについて記述してから、チェスというゲームを完全に解析して完全ゲームをさせることができるだろうか、と疑問を発して、それは原理的には可能であるが現実的には無理だろうとしています。その理由を説明するために、完全解析をするには何手読む必要があるかを見積もっています。
まず通常のチェスの局面では可能な駒の動かし方は 30 通り程度であり、多くのマスター（とてもチェスが強い人）のゲームを解析すると、ゲームの16 巨大数研究 Wiki - シャノン数 http://ja.googology.wikia.com/wiki/シャノン数

17 Shannon, C. (1950) Programming a computer for playing chess. Philosophical
Magazine 41 (314)

第1章

22

巨大数入門

最初から終わりまで、あまりこの数が変化しないという結果を示して、チェスの 1 手、つまり先手の白が 1 つ駒を動かして、後手の黒が 1 つ駒を動かすセット（将棋では 2 手と数えられる）は、およそ 103 通りの可能性があるとしました。そして、通常のゲームは投了するまでに 40 手ほどであると見積もりました。コンピュータは投了までではなくチェックメイトまで読むので、本当はもっと手数が長くなることを考えると、控えめの見積もりだとしています。
このような控えめな見積もりでも、初期配置から 10120 通りの変化を読む必要があり、1 つの変化を 1 マイクロ秒で読めるコンピュータができたとしても、初手を読むためには 1090 年以上かかってしまいます。チェスには 10120 通りの変化があるというこの計算から、10120 をシャノン数と言います。
✓【定義】シャノン数

シャノン数 = 10120✒

シャノンはまた、チェスのあらゆる可能な局面を記憶する「辞書」を作

✏
✑

64!
る方法についても考察し、チェスの全局面は 32!(8!)
2 (2!)6 通り（64 のます目に、白と黒で合計 32 個の駒を並べる順列、ただしそのうち 8 つ同じ種類の駒があるものが 2 種類（ポーンの白と黒）、2 つ同じ種類の駒があるものが6 種類（ルーク、ビショップ、ナイトそれぞれ白と黒）がある）あり、概算で 1043 通りの局面があるため、それもまた非現実的だとしています。このように、チェスの完全解析をコンピュータにさせることは非現実的であるとして、コンピュータにチェスをさせるための戦略についてシャノンは論文で考察しています。
なお、シャノン数はシャノン自身が「控えめな見積もり」としていますが、相当に控えめな見積もりです。実際にチェスを完全解析するために「手当たり次第に」読ませたとすれば、コンピュータは人間のように「試合を終わらせようとする手」だけではなく、「お互いにまったく攻めようとせずに自陣で駒を動かし続けるような試合」も数多く出て、そのような手順をすべて読むことが「完全解析」なので、手数は 40 手どころではなく果てしなく続きます。イギリスの数学者ゴッドフレイ・ハーディ (Godfrey Harold1.1. クラス 2 の巨大数

23

Hardy, 1877–1947) は「宇宙の陽子の数は 1080 である。チェスのゲームの可能な数は、それよりもはるかに大きく、おそらく 1010
います

18

50

である」として。これはおそらく「同一局面が 3 回で引き分け」のルールを採用した場合で、1043 通りの局面が 3 回繰り返さないところまで読むと考えると (103 )1043

×2= 106×1043程度となるだろうと思います。

ロバート・ムナフォは、チェスの 50 手ルールと 75 手ルールを採用し、白黒双方が協力して 75 手ルールで強制的に引き分けとなるまで引き分けを宣言しないとしたときに、最長手数は 8848 手となると計算して、チェスのゲームの可能な数はおよそ 268848 ≈ 1012500 通りになるとしています。

なお、完全解析の難しさを考えるときには、このような「可能なゲームの数」を考えるよりも「可能な局面の数」である 1043 を使う方が適切だろうと思います。もちろん可能な局面の数を保存しておくメモリを仮定する
ことは非現実的ではありますが、すでに非現実的な時間を想定しているわけですから、メモリについて非現実的な仮定に躊躇をする理由がありません。読み終わった全ての局面を保存しておくことが可能であるとして完全解析の難しさを評価するのが妥当でしょう。
その後コンピュータは発展し、1997 年 5 月には、IBM が開発したチェス
専用のスーパーコンピュータ「ディープ・ブルー」が、当時のチェス世界
チャンピオン、ガルリ・カスパロフに 6 戦中 2 勝 1 敗 3 引き分けで勝利しました。一方、1997 年の時点では、将棋のプログラムはまだ弱く、とてもプ
ロ棋士の相手にはなりませんでした。将棋はチェスよりも複雑なので、そう簡単にチェスのようには強くならないと思われていました。
将棋の実現可能局面数はチェスよりもはるかに多く、1062 –1070 程度とされています19 。また、将棋の世界でもシャノン数と同じ計算方法、つまり一局の平均手数が約 115 手、各局面での可能な指し手の数が約 80 通りであるという計算から、80115 ≈ 10220 通りのパターンがある、というような説
明がよくされています（これは、チェスと同じ理由であまり適切ではない
18 Hardy, G. H. (1940) Ramanujan: twelve lectures on subjects suggested by his life
and work. Cambridge University Press.
19 篠田正人 (2008) 将棋における実現可能局面数について, IPSJ Symposium Series
2008(11) 116–119.

第1章

24

巨大数入門

と思いますが、シャノン数と比較するという目的にはかなっています）。この数が、後に「不可説不可説転」で説明をする予定の、仏教の経典である華厳経に出てくる阿伽羅20（あから）という数の見積もりである 10224 に近いことから、情報処理学会では「あから」というコンピュータ将棋が開発されました。なお、情報処理学会のホームページには「阿伽羅（あから）は10 の 224 乗という数を表し、将棋の局面の数がこの数に近いことに因んで21命名されました。
」と説明されていますが (2016 年 6 月 25 日現在)、「将棋の局面の数」という表現であれば、1070 以下という見積もりになるだろうと思います。
さてこのように、将棋はチェスよりもずっと複雑だから当面はコンピュー
タが人間に勝つことはない、と 20 世紀末には多くの人が考えていたものの、その後コンピュータはみるみる強くなり、2010 年には「あから」が女流棋士の清水市代を敗り、2012 年からはプロ棋士とコンピュータソフトが戦う「電王戦」が開始され、2013 年にはプロ棋士 5 人とコンピュータソフ
ト 5 種類の団体戦で、プロ棋士が 1 勝 3 敗 1 分となり、現役のプロ棋士が敗れました。
将棋よりもさらに局面が広くて複雑であるとされる囲碁についても、2016
年 3 月に、グーグルが開発した囲碁プログラム「アルファ碁」(AlphaGo) がイ・セドル九段に 4 勝 1 敗で勝ちました。囲碁の全局面数は、シャノン数と同じ考え方で 10360 程度とされていることが多いですが、それは適切ではありません。盤面の状態は 319 ≈ 1.74 × 10172 通りありますが、その中2で実現可能な局面の数は 2016 年 1 月 20 日に正確な値が計算されました22 。
その値はおよそ 2.081681994 × 10170 であり、この近似値は 2006 年にすでに知られていました。

シャノン数をきっかけとして、チェス、将棋、囲碁のプログラムについて話しましたが、これらのプログラムは最強の人間を負かすほどに強くなったとはいえ、「完全解析」ができる時は来ないでしょう。それは「全局面数」
が桁違いに大きいためですが、巨大数論の世界では「高々クラス 2 程度の20 巨大数研究 Wiki - 阿伽羅 http://ja.googology.wikia.com/wiki/阿伽羅

21 コンピュータ将棋「あから」 https://www.ipsj.or.jp/event/shogi.html

22 Number of legal Go positions https://tromp.github.io/go/legal.html

1.1. クラス 2 の巨大数

25

数」です。
ロバート・ムナフォは、6 才の時には知っていた最大の数が million (100万) で、7 才の時に母親にその上の単位を聞いて、billion (10 億) と trillion(兆) の単位を知り、さらに 8 才の時に学校の図書館で読んだ本でビギンティ
リオン (1063 ) という数を覚えて嬉しくなり、校庭の砂に1 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000 000
000 000 000 000と書いて、いじめられたという過去があるようです。
23
コンウェイとガイの『数の本』では、ビギンティリオンの先を、ショー

トスケールでは 103003 まで、ロングスケールでは 106000 まで、つまりミリニリオン (millinillion) = 103003 あるいはミリリオン24 までラテン語を元に名付ける体系が提案されています。

日常生活で使うのは、クラス 2 の中でも非常に小さい数までですので、数に名前がつけられるのも、たいていはここまでです。

1.1.5

数の比較

それではここで、表 1.1 にクラス 2 の巨大数を、小さいものから大きい
ものへと順番にまとめます。そして、このような巨大数の大きさをどのように比較するのかを考えます。
クラス 2 までの数は、数の大小比較が簡単にできます。10 進数で書かれていれば、まずは桁数を比較して、桁数が同じであれば一番上の桁から順番に大きさを比較すれば良いのです。数が 3.23 × 1021 のような指数表記で書かれていれば、桁数を数える必要もないので楽です。ただし、10 進数表記

あるいは 10 進数の指数表記同士で書かれていない数を比較するときには、計算をする必要が出てきます。計算は手計算でもできますが、電卓を使えば簡単です。電卓には、スマホのアプリやパソコンのソフト等、色々あり
23 Conway, J. H. and Guy, R. K. (1996) The book of numbers. Copernicus. 訳書『数の本』丸善出版.
24 http://ja.googology.wikia.com/wiki/ミリリオン

第1章

26

巨大数入門

表 1.1: クラス 2 の巨大数（下の数ほど大きい）
名称
値
恒河沙劫の年数の見積もり

1046

無量大数

1068

エディントン数≈ 1.57 × 1079

グーゴル
シャノン数

10100

センティリオン

10120
10303

ミリニリオン

103003

上数の載104096

クラス 2 の数の上限

101000000 = 1010

6

ます。性能によって、表示できる最大の数（指数表示の時の最大の指数）、表示される桁数、内部で計算されている桁数、等が変わります。
カシオが運営している高精度計算サイト25 は、強力です。
「生活の計算」「数学・物理」「専門的な計算」それぞれ様々な実用的な計算をすることができて、実用的にも便利ですし、なんといっても「フリー計算」の機能が良いので、本書のような趣味の計算をするときにも便利に使えます。様々な関数が扱え、桁数は 50 桁までの精度が得られ、さらに精度保証の機能がついています。コンピュータで計算をするときには、計算機の内部で保持している変数の桁数に限界があるので、限界以上の桁は丸めて計算をする
ため、計算結果に誤差が出ます。そこで、計算結果を丸めるときに、必ず「最小の値」と「最大の値」を同時に計算することで、最大でどの程度の誤差が生じるかを正確に知る手法が、精度保証つき計算です。
この高精度計算サイトでエディントン数を 50 桁まで計算すると、

1.5747724136275002577605653961181555468044717914527 × 1079と計算できます。しかしエディントン数は 80 桁あるので、最後の 30 桁が25 高精度計算サイト (CASIO) http://keisan.casio.jp/

1.2. クラス 3 の巨大数27計算できていません。そこで桁数に制限のない任意精度計算機26 27 を使え
ば、エディントン数を正確に計算できます。計算結果は、1574772413 6275002577 6056539611 8155546804 4717914527 1167093662
3142507618 5631031296となります。このような計算機を使えば、クラス 2 の数はだいたい大小比
較ができます。
手元の電卓ではエラーが出てしまうような大きな数を計算するときには、
対数 (log) を使うと、大きさを知ることができます。対数には、底を 10 とする常用対数と、底を e ≈ 2.71828 （ネイピア数）とする自然対数がある
ので、常用対数で計算したときにはその数 a に対する 10a を、自然対数で計算したときには exp(a) = ea を計算することになります。ここでは、常用対数を使います。エディントン数 136 × 2256 の常用対数の大きさをlog(136 × 2256 )≈log(136) + 256 log(2)≈79.197217798とまず計算してから、エディントン数のおおよその大きさを1079.197217798=

100.197217798+79=

100.197217798 × 1079≈

1.57477241 × 1079と計算すれば良いのです。指数が 100 万までのクラス 2 の数であれば、対数を取れば 100 万までの数になりますので、対数が計算できる関数電卓であれば計算できます。

1.2

クラス 3 の巨大数

クラス 3 の数 (1010 –1010
6106): クラス 2 を超えると、10 進数で数を書いて大きさを比較するのが無理になります。ここでもクラス 2 までと同様、
26 Arbitrary Precision Calculator http://apfloat.appspot.com/
27 http://www.javascripter.net/math/calculators/100digitbigintcalculator.htm

第1章

28

クラス 2 の上限である 1010 を 10 の指数に持ってきて、1010
6

106

巨大数入門
をクラス 3の上限とします。ここでクラスの定義をフォーマルな形で記しておきます。
✓✏【定義】自然数のクラス
数列 c(n) を c(0) = 6, c(n + 1) = 10c(n) で定義する。
クラス n の自然数とは、(i) n = 0 の時は、c(0) 以下の自然数である。
(ii) n > 0 の時は、c(n − 1) よりも大きく、c(n) 以下の自然数である。
✒✑

アルキメデスが考えた数の単位

1.2.1

古代ギリシャの数学者、科学者であるアルキメデス (Archimedes; 紀元
前 287 年? – 紀元前 212 年) の著作である『砂粒を数えるもの』(The Sand

Reckoner; Ψαμμ´ι τη ς) 28 では、当時の宇宙に関する知識から、宇宙を埋め尽くすのに必要な砂粒の数を概算しました。
そのために、まずは大きな数をあらわすための数の体系を作りました。当時のギリシャでは、1 万をあらわす myriad (μυρι´ας) という単語があり、この単語を使って 108 までの数を名付けることができました。
アルキメデスは、108 までの数を「第 1 級の数」として、108 を「第 2 級の数の単位」としました。そして、第 2 級の数の単位を使って、108 単位までの数を数えることにより、1016 までの数を 108 ごとに数えることができます。第 2 級の数の単位を使って 108 とあらわされる数、すなわち 1016 を
第 3 級の数の単位とします。
このようにして、第 108 級の数の単位を使って 108 まで数えることで、(108 )(10 ) = 108·10 まで数えることができます。ここまでの数を「第 1 期の8数」として、次に第 2 期の数を考えます。第 1 期の最後の数 108·10 を「第 288

期第 1 級の数の単位」として、また 108 まで数えたときの最後の数を「第 2期第 2 級の数の単位」とします。そして「第 2 期第 108 級の数」を使って 108
28 http://ja.googology.wikia.com/wiki/砂粒を数えるもの

1.2. クラス 3 の巨大数

292まで数えて、それを第 3 期第 1 級の数の単位とします。(108·10 ) = 1016·1088になります。
このようにして、第 108 期第 108 級の数の単位で 108 まで数えると、!

8(108 )(10 )"(108 )= 108×1016まで数えることができます。これは、クラス 3 の巨大数です。紀元前にこのような実用からは程遠い大きさの数が考えられて、その記録が残っているというのは驚くべきことで「最古の巨大数」と言って良いと思います。
アルキメデスは、続いて宇宙を埋め尽くすのに必要な砂の数を次のように見積もりました。

1. ケシの実の直径は 40 分の 1 寸（直訳すると「指」なので、インチと同様に親指の幅をあらわす「寸」で訳しておく）よりも小さくはない
ので、直径 1 寸の球に入るケシの実の数は 403 = 64000 個よりは少ない。

2. ケシの実 1 粒の体積が砂 1 万粒よりは小さいので、直径 1 寸の球に入る砂の数は、64000 の 1 万倍よりは少ない。これは現在の数え方では

6 億 4000 万であるが、アルキメデスの単位で「第 2 級の数で 6 単位と第 1 級の数で 4000 万個」よりは小さいと計算した。そしてこれは、
第 2 級の数で 10 単位 (109 ) より少ない。

3. 直径 100 寸の球に入る砂の数は、第 2 級の数で 107 、つまり 1015 個よりも少ない。

4. 1 スタディオンは 1 万寸よりも短い。スタディオンは古代ギリシアおよびローマで使われていた長さの単位で、複数形はスタディア。時代や地域によって差があるようだが、およそ 180 m 程度。

5. ここまでの仮定を整理すると、ケシの実の直径は 180 m の 1 万分の
1 の 40 分の 1、すなわち 0.45 mm よりも大きく、砂の直径はその100001/3 分の 1、つまり 0.02 mm よりも大きい、という仮定をしてい

第1章

30

巨大数入門

ることに相当する。ちなみに、前節でガンジス川の砂の数を見積もったときには、砂の直径を暫定的に 0.1 mm としたが、0.02 mm とすれば砂の数は 53 = 125 倍、すなわち 2 桁ほど大きく見積もられることとなる。

6. 直径 1 スタディオンの球に入る砂の数は、直径 100 寸の球に入る砂の数（第 2 級の数で 107 よりも少ない）の 100 万倍になる。これを計算すると第 3 級の数で 10 万個、つまり 1021 個よりも少ないこととなる。

7. 太陽から地球までの距離を半径とする球を「世界」として、世界の直径を見積もる。地球の周囲は 300 万スタディアよりも小さく、直径は100 万スタディアよりも小さい。そして、太陽の大きさの見積もりと太陽の直径が地球から見える視角から、世界の直径は地球の直径の 1万倍よりも小さく、したがって 1010 スタディア（18 億 km）よりも小さいと見積もられる。現代の科学では、太陽から地球までの距離の2 倍は約 3 億 km であることが知られているので、これは正しい。
8. 直径 1010 スタディアの球である「世界」に入る砂の数は、第 7 級の数で 1000 単位、つまり 1051 個以下である。
9. 次に、古代ギリシャの天文学者で数学者のアリスタルコス (Aristarchus,
紀元前 310 年–紀元前 230 年頃) が考えた星が存在する「宇宙」の大きさを見積もる。ここで、地球の直径と世界の直径の比が、世界の直径と宇宙の直径の比に等しいという仮定を使う。すると宇宙の直径は世界の直径の 1 万倍よりは小さいこととなる。これは 2 光年よりも小さいという仮定であり、現代の天文学からすると小さすぎる仮定となる。この宇宙に入る砂の数は、第 8 級の数で 1000 万、すなわち 1063
個以下である。

Harrison (2000) 29 は、1063 個の砂に含まれる核子の数はおよそ 1080 個であり、エディントン数と一致するのは驚くべき偶然だとしています。

29 Harrison, E. R. (2000) Cosmology - The Science of the Universe. Cambridge
University Press. pp. 481–482.

1.2. クラス 3 の巨大数

1.2.2

31

不可説不可説転ここでまた、仏教で使われている数の大きさについての話になります。イ
ンドの数の単位では、本来は下数の単位が使われていましたが、後の仏典では上数として使われることがあり、華厳経第 45 巻、阿僧祇品第三十には、100 洛叉（らくしゃ=10 万）を 1 倶胝（くてい）とする。倶胝倶
胝を 1 阿庾多（あゆた）とする。阿庾多阿庾多を 1 那由他（なゆた）とする。那由他那由他を 1 頻波羅（びんばら） とする。
（中略）不可説転不可説転を 1 不可説不可説とする。このまた不可説不可説（倍）を 1 不可説不可説転（ふかせつふかせつてん）とする。
と書かれています。「倶胝倶胝を 1 阿庾多とす」とは、倶胝×倶胝=阿庾多ということなので、107 を意味する倶胝以上は、中国の上数と同じように 2乗すると次の単位になっています。したがって、倶胝（くてい）=107 、阿庾多（あゆた）=107×2 = 1014 、那由他（なゆた）=107 2 = 1028 、頻波羅× 2

（びんばら）=107 2 = 1056 と、2 乗することで指数が 2 倍になり、指数の× 3

中の 2 の指数が 1 増えます。つまり、倶胝の n 個上の単位は 107 2 となり× nます。不可説不可説転30 （ふかせつふかせつてん）は、倶胝の 122 個上の単位なので、107×2✓

122になります。

✏【定義】不可説不可説転不可説不可説転 = 107×2
✒

122

✑

数学史家の鈴木真治によると 、華厳経の漢訳完本としては、全 60 巻の31

旧訳（普経）と、全 80 巻の新訳（唐経）があり、上記の定義は旧訳を元にしていて、華厳経の旧訳と新訳で数が微妙に異なっているとしています。数学者の末綱は、新訳を元に「不可説転転 = 105×2

120」と計算しています32 。

トーマス・クリアリー (Thomas Cleary) が華厳経の新訳を英語に訳し33 、
30 http://ja.googology.wikia.com/wiki/不可説不可説転31 鈴木真治 (2016)『巨大数』岩波書店

32 末綱恕一 (1957) 『華厳経の世界』春秋社

33 Cleary, T. (1993) The flower ornament scripture: a translation of the Avatamsaka
Sutra. Shambhala, Colorado, USA.

第1章

32
その訳では unspeakable = 1010×2

120, square untold = 1010×2

巨大数入門
123

となりま

す 。
34

1.2.3

グーゴルプレックス

グーゴルプレックス35 (googolplex) は数の単位で、10 のグーゴル乗 (10googol )、つまり 1010
✓

100

です。

【定義】グーゴルプレックス

グーゴルプレックス = 1010✒

100

グーゴルの説明で引用したように、グーゴルプレックスはカスナーの甥✏✑のミルトン・シロッタが 9 歳の時に名付けましたが、それは 1 の後に 0 を
疲れるまで書いた数、という定義でした。カスナーは、人が疲れる時間には違いがあるので、それでは正確な定義にはならないとして、より正確な定義として 1 の後に 1 グーゴル個の 0 を書いた数としました。1 グーゴル

個の 0 を書くためには、宇宙の全物質をインクに変えてもまだ足りません。
観測可能な宇宙に存在する素粒子の数は 1080 から 1085 程度なので、素粒
子 1 つが「0」を表すものとして、全宇宙の素粒子を集めてもまだグーゴル
プレックスを 10 進数で表記することはできないからです。巨大数のたとえとして「全宇宙の物質全てをインクに変えても 10 進数で表記できないほど大きい」というたとえがよく使われますが、このたとえはグーゴルプレッ
クスのようなクラス 3 の数をたとえるときには良いのですが、クラス 4 以
上の数をたとえるときには、たとえが小さすぎて不適切であると言えます。
クラス 3 の数は、通常の計算で比較するのが困難です。不可説不可説転まで大きくなると、指数表記をしたときに指数の部分が 7 × 2122 という大きな数になりますので、通常の電卓では計算範囲を超えます。たとえば、前節で紹介した高精度計算サイトを使って計算しても、計算結果は∞と表示されるだけで、計算の上限を超えてしまっています。

34 http://iteror.org/big/book/ch1/ch1 7.html

35 http://ja.googology.wikia.com/wiki/グーゴルプレックス

1.2. クラス 3 の巨大数33

このような大きさの数を比較するためには、対数を使うことができます。
不可説不可説転とグーゴルプレックスの比較であれば、すでに両者とも 10xの形になっているので、簡単に比較できます。両者の常用対数を取った、

7 × 2122 と 10100 を比較すれば良いのです。
7 × 2122 = 37218383881977644441306597687849648128 ≈ 3.72 × 1037と計算されるので、これよりも 10100 の方が大きく、グーゴルプレックス
は不可説不可説転よりも大きいことが分かります。

1.2.4

ハイパー E 表記

指数が重なると読みにくくなってくるので、アメリカのアマチュア数学者・哲学者であるスビス・サイビアン (Sbiis Saibian) 36 が考案したハイパー E 表記37 (hyper-E notation) を使うと便利です。

ハイパー E 表記は、1 つ以上の正の整数から成る数列 an の引数をハイ

ペリオン記号 # で区切ったものです。これを E(b)a1 #a2 #...#an と表記

し、b を基数と呼びます。基数が省略されたときは 10 がデフォルトで、よく省略されます。次のような定義です。
✓【定義】ハイパー E 表記

E(b)x

=

bx

E(b)a1 #a2 · · · #an #1=

E(b)a1 #a2 · · · #an=

E(b)a1 · · · #an−2 #(E(b)a1 · · · #an − 1)✒

E(b)a1 #a2 · · · #an

1. 1 番目の式は、ハイペリオン記号がまったくない場合には bx となる✏✑ということです。

2. 2 番目の式は、最後のハイペリオン記号の後の数が 1 であれば、そのハイペリオン記号と数を取り除くことができるということです。
36 http://ja.googology.wikia.com/wiki/Sbiis Saibian

37 http://ja.googology.wikia.com/wiki/ハイパー E 表記

第1章

34

巨大数入門

3. 3 番目の式は、それ以外の場合です。まず、元の式の最後の数を 1 減らしたものを z とします。次に、元の式から最後の 2 つの数とその間のハイペリオン記号を消して、かわりに (z) を追加します。
具体的に計算すると、次のようになります。

Ea=

Ea#1 = 10aE100 =

E100#1 = 10100 = グーゴル

E100#2 =E(E100) = E10100 = 1010

E100#3 =E(E100#2) = 10

1010

100

= グーゴルプレックス

100

つまり、Ea#b は 10 の指数を b 個重ねたものに、さらに a を重ねたものになります。
ハイパー E 表記は、さらに E100#100#100#100 のように重ねることで大きくなり、そこから拡張ハイパー E 表記、連鎖 E 表記、拡張連鎖 E 表記
といったさらに大きな数を表記するシステムへと発展します。その詳細については本書では踏み込みませんが、サイビアンの巨大数論に関する Web
書籍 「1 から無限大まで – 有限数ガイド」 (One to Infinity: A Guide to

the Finite) 38 に、詳しく解説されています。

1.2.5

プロマキシマサイビアンの紹介をしたところで、サイビアンがプロマキシマ39 (pro-maxima) と名づけた巨大数を紹介します。これはネット上で次のような投稿がされたところから、考えられた数です。
宇宙のすべての空間が原子や素粒子のようなもので完全に充填されていたとします。その粒子の数はとても大きいでしょう。
さらに、これらの粒子が充填される順列を数え上げるといくつになるでしょうか。N 個の粒子があるとすれば、N の階乗、すなわち N ! 通りになるでしょう。これはどのくらい大きな数になるでしょうか。
38 One to Infinity https://sites.google.com/site/largenumbers/
39 http://ja.googology.wikia.com/wiki/宇宙論の巨大数

1.2. クラス 3 の巨大数35

これに対して、サイビアンは観測可能な宇宙が宇宙で最も小さい物質である「宇宙ひも」で満たされたと考えました。宇宙ひもの長さをプランク長
すなわち約 10−35 m として、観測可能な宇宙の直径を 1026 m としました。
すなわち、宇宙ひもで観測可能な宇宙を充填すると (1026 /10−35 )3 = 10183
個の宇宙ひもで充填されることになります。これを N とします。この宇
宙ひもの配列は N ! = 10183 ! 通りであり、スターリングの近似を使うと約

1010

185

= E185#2 通りとなります。

サイビアンは、この計算にさらに時間の概念を加えました。すなわち、時間の最小単位はプランク時間すなわち約 10−43 秒なので、1 プランク時間
における組み合わせが N ! 通りであると考えて、t プランク時間における組
み合わせを (N !)t 通りとしました。宇宙が 5 × 1017 年続くと考えてそれをプランク時間に直して t に入れることで、(N !)t = 1010

245

= E245#2 通りとなります。これをサイビアンはプロマキシマと名づけました。プロマキ
シマは「確率の最大 (probability maximum)」から名づけたもので、宇宙の歴史として考えられる組み合わせの上限値であり、サイビアンは現実的な数の上限であるとしました。
ここで、サイビアンはプロマキシマは科学的な数であり、1010

245

はその

上限を計算したものであって、物理法則に反する単純化した仮定を使って計算したものであり、実際にはプロマキシマは 1010

245

よりもずっと小さくなるはずであるとしました。たとえば、物質の移動速度は光速を超えないことから、プランク時間で移動できる距離はプランク長を超えません。そのことから、ある時間の次の時間における宇宙ひもの位置は制限されます。
また宇宙は宇宙ひもでみたされているわけではありません。しかし、サイビアンはこの数は現実的な数の上限としての意味を持っているとしています。
サイビアンはその後、陽子の半減期が約 1035 年であり、宇宙には約 1081個の陽子が存在することから、宇宙の寿命は 1035 年はあるとして、さらに宇宙の膨張速度を計算に入れた上で、106.5446×10な平行宇宙の数であるとしました。

343という数を導き、可能

第1章

36

1.2.6

巨大数入門

超過剰数

過剰数40 (abundant number) は、正の約数の総和が元の数の 2 倍よりも大きい数です。すなわちその数を除く正の約数の総和が元の数よりも大きい数です。たとえば、36 は約数である 1, 2, 3, 4, 6, 9, 12, 18 の和が 55 となり、36 よりも大きいため過剰数です。その逆にその数を除く約数の和が元の数よりも小さい数を不足数と言い、両者が一致する数を完全数と言います。最初の過剰数は 12, 18, 20, 24, 30, 36, 40, 42, 48, ... で、ほとんどの過剰数は偶数となるように見えます。最小の奇数の過剰数は 945 です。

2 と 3 で割れない最小の過剰数は5391411025 = 52 × 7 × 11 × 13 × 17 × 19 × 23 × 29

で、11 以下の数で割れない最小の過剰数は132 × 172 × 19 × 23 × 29 × 31 × 37 × 41 × 43 × 47 × 53 × 59 × 61 ×
67 × 71 × 73 × 79 × 83 × 89 × 97 × 101 × 103 × 107 × 109 × 113 ×
127 × 131 × 137 × 139 × 149 × 151 × 157 × 163 × 167 × 173 × 179 ×
181 × 191 × 193 × 197 × 199 × 211 × 223 × 227 ≈ 7.970466327 × 1087です。

ここまではクラス 2 の数ですが、ここからクラス 3 の数に入っていきます。
そのために「とても過剰な数」について考えてみます。n の正の約数の総和を σ(n) とすると、過剰数は σ(n) > 2n となる数です。では σ(n) > 1000nとなる「1000 倍以上過剰な数」は存在するかどうかを考えてみましょう。

N = ceil(e1000 )! は、そのような数となります。ここで、ceil は天井関数で、
ceil(x) は x 以上の最小の整数です。そして、! は階乗です。N は ceil(e1000 )以下のすべての正の整数で割り切れるため、N は 1 ≤ k ≤ ceil(e1000 ) のす
べての k に対して、 N
k で割り切れます。したがって、
ceil(e1000 )σ(N ) > N

#

k=1

1
> N log(ceil(e1000 )) > N log(e1000 ) = 1000Nkとなり (log は自然対数)、N は 1000 倍以上過剰な数です。N < 1010

E446.94#2 です。
40 巨大数研究 Wiki - 過剰数 http://ja.googology.wikia.com/wiki/過剰数

446.94=

1.3. クラス 4 の巨大数

37

次に、σ(n) > 1000n を満たすような最小の数はどの程度の大きさでしょうか。1984 年に、Guy Robin はリーマン予想が正しいとしたときに、n > 5040に対してσ(n) < eγ n log log nが成り立つことを示しました41 。ここで、γ はオイラーの定数で、およそ

0.5772156649 です。このことを使うと、σ(n) > 1000n であれば1000n <
1000
<
eγ
n >

σ(n) < eγ n log log n
log log nee1000/eγ> 1010243.47= E243.47#2となります。これで、σ(n) > 1000n を満たす最小の数の上限と下限がE243.47#2 < n < E446.94#2と、グーゴルプレックスよりは大きいクラス 3 の数であることが分かりました。
σ(n)m < n であるすべての自然数 m に対して σ(m)m < n を満たす自然数

n を超過剰数 (superabundant number) と言います。σ(n) > 1000n を満たす最小の n は超過剰数です。超過剰数は無限にあり、1, 2, 4, 6, 12, 24,

36, 48, 60, 120, 180, 240, 360, 720, 840, 1260, 1680, 2520, 5040, 10080,
15120, 25200, 27720, 55440, 110880, 166320, 277200, 332640, 554400,
665280, 720720, 1441440, 2162160, 3603600, 4324320, 7207200, 8648640,
10810800, 21621600, ... と続きます42 。

1.3

クラス 4 の巨大数

クラス 4 の数 (E6#3–E6#4): クラスの定義より、クラス 4 の上限は
1010

6

E6#4 = 1010です。このクラスになると、大小を比較するには、対数を 2〜3 回取る必要があります。また、前節で「全宇宙の物質全てをインク
41 Robin, G. (1984) Grandes valeurs de la fonction somme des diviseurs et hypothèsede Riemann. Journal de Mathématiques Pures et Appliquées 63, 187–213.
42 https://oeis.org/A004394

第1章

38

巨大数入門

に変えても 10 進数で表記できないほど大きい」というようなたとえはこの
クラスの数をたとえるには小さすぎて不適切である、という話を書きました。実際には、一般の人が理解できるたとえとしては、「全宇宙の物質全てをインクに変えても 10 進数で表記できないほど大きい」あたりが限界だろうと思います。したがってここから先はまさに「たとえようもないほど大きな数」を扱うことになります。

1.3.1

グーゴルデュプレックス

10 の 100 乗がグーゴルで、10 のグーゴル乗はグーゴルプレックスです。それでは、10 のグーゴルプレックス乗はなんというのでしょうか。これには、いろいろな名前がついています。最も単純な名前のつけ方は、10 の N 乗が N

プレックスであると考えて、グーゴルプレックスプレックス (googolplexplex)とする方法です。他にも、同じ数をあらわす言葉としてグーゴルプラスプ
レックス (googolplusplex)、ガーグーゴルプレックス (gargoogolplex)、グー
ゴルプレクシアン (googolplexian) 等があります。
サイビアンは、グーゴルプレックスプレックスのかわりにグーゴルデュプ

レックス (googolduplex) と名づけました。つまり、プレックスの前に 2 をあらわす du の接頭辞を加えました。そして、10 のグーゴルデュプレックス乗は 3 をあらわす接頭辞 tri を使ってグーゴルトリプレックス (googoltriplex)となり、さらに以下のように続きます。

E100

=

E100#2 =10100 = グーゴル (googol)
1010

100

1010

= グーゴルプレックス (googolplex)100= グーゴルデュプレックス (googolduplex)

E100#3 =10

E100#4 =グーゴルトリプレックス (googoltriplex)

E100#5 =グーゴルクアドリプレックス (googolquadriplex)

E100#6 =グーゴルクインプレックス (googolquinplex)

E100#7 =グーゴルセクスティプレックス (googolsextiplex)

E100#8 =グーゴルセプティプレックス (googolseptiplex)

E100#9 =グーゴルオクティプレックス (googoloctiplex)

1.3. クラス 4 の巨大数
E100#10=

グーゴルノニプレックス (googolnoniplex)

E100#11=

グーゴルデシプレックス (googoldeciplex)

39

グーゴルトリプレックス以降はクラス 5 以上の巨大数となりますが、ここでまとめて紹介しておきました。

1.3.2

スキューズ数

それでは次の巨大数の話をするために、少し準備をします。素数計数関数 (prime counting function) π(x) は、x 以下の素数の個数を返す関数です。対数積分 li(x) は、全ての正の実数 x ̸= 1 において、$ xdtli(x) =
0 log(t)で定義される関数です（log は自然対数）。素数定理によれば π(x) は漸近的にli(x) に等しくなりますが、計算がなされている範囲では、常に π(x) < li(x)となっていて、今でも π(x) > li(x) となるような具体的な x は見つかっていません。ところが、π(x) と li(x) は無限回大小関係が逆転することが証明されているため、いつはじめて π(x) > li(x) となる x が出てくるのかが研究されてきました。

スキューズ数43 44 (Skewes number) には 2 つあります。スキューズは、

1933 年の論文で、リーマン予想が正しいとしたときに、Sk1 = eee79=

E(e)79#3 以下の数に π(x) > li(x) となる数が存在することを証明しました45 。この Sk1 が第 1 スキューズ数と呼ばれます。さらにスキューズ
は、1995 年に、リーマン予想を仮定することなしに、第 2 スキューズ数

Sk2 = ee

7.705
ee

= E(e)7.705#4 以下の数で π(x) > li(x) となる x が存在することを証明しました46 。この上限は、Bays and Hudson (2000) 47 によっ
43 巨大数研究 Wiki - スキューズ数 http://ja.googology.wikia.com/wiki/スキューズ数

44 MathWorld - Skewes Number http://mathworld.wolfram.com/SkewesNumber.html
45 Skewes, S. (1933) On the diﬀerence pi(x)-li(x). Journal of the London Mathemetical Society s1-8(4): 277–283. doi:10.1112/jlms/s1-8.4.277
46 Skewes, S. (1955) On the diﬀerence pi(x)-li(x). II. Proceedings of the London
Mathematical Society s3-5 (1): 48–70. doi:10.1112/plms/s3-5.1.48
47 Bays, C. and Hudson, R. H. (2000), A new bound for the smallest x with π(x) >li(x). Mathematics of Computation 69 (231): 1285–1296. doi:10.1090/S0025-5718-9901104-7

第1章

40
て約 1.3983 × 10316 にまで下げられています。

巨大数入門

スキューズ数はいずれもクラス 4 の数です。Sk1 は E34#3 = 1010

度です。Sk2 は E963#3 = 10
1010

10
✓

103

1010

963

1034

程

程度ですが、分かりやすく E3#4 =とされることもあります。
【定義】第 2 スキューズ数

第 2 スキューズ数 = ee
✒

7.705
ee

≈ 10101010

3= E3#4

ムナフォは、通常の計算プログラムでは大きすぎて計算できないような✏✑巨大数を計算するためのプログラム、ハイパーカルク 48 (Hypercalc) を作成しました。Hypercalc を使うと、第 2 スキューズ数は
入力: e^e^e^e^7.705
結果: 10 ^ [ 10 ^ ( 3.299943221955 x 10 ^ 963 ) ]と、計算ができます。第 2 スキューズ数をこのように直接計算できるプロ
グラムは、他にはなかなかないだろうと思います。

1.4

クラス 5 以上の巨大数

1.4.1

宇宙論で使われた最大の数

宇宙論で使われた最大の巨大数（であると思われる数）に、クラス５の巨大数である✓

宇宙論で使われた最大の数✏

10^10^10^10^10^1.1 = E1.1#5
✒
✑
49 50
という数があります。これは、理論物理学者のドン・ページ (Don Nelson
Page) が51 「リンデの確率過程的インフレーションという説で生まれるか
48 Hypercalc http://www.mrob.com/pub/perl/hypercalc.html
49 http://ja.googology.wikia.com/wiki/宇宙論の巨大数

50 Longest Possible Time http://www.numberphile.com/videos/longest time.html
51 Page, D. N. (1994) Information loss in black holes and/or conscious beings?
http://arxiv.org/pdf/hep-th/9411193

1.4. クラス 5 以上の巨大数

41もしれないあらゆる多重宇宙の全質量を 1 個のブラックホールに潰して適当な箱の中に入れた」と仮定したときにブラックホールの蒸発後にまたブラックホールができるまで52 のポアンカレ再帰時間（力学系のある状態を出発点としたときに、初期状態にとても近い状態に戻るまでの時間）を計算したものです。この数は現在の状態の宇宙に対するポアンカレ再帰時間ではないので、「宇宙の全ての物質が元に戻る」という説明は不正確です。意
味のある数というよりは、どちらかというと、巨大数を作ることを目的に計算された数、ということのようです。単位はプランク時間 (5.391 × 10−44秒) でも 1000 年でもなんでもいい、と Page (1994) に書かれているように、
クラス 5 の数になると、クラス 4 までの数をかけても割っても右肩の数（この場合だと 1.1）にほとんど影響を与えなくなってしまうため、時間の単位を気にする必要すらなくなってしまいます。このことは、次章以降で色々と計算をしていきます。

1.4.2

ベントレー数「現代巨大数論の父」と言われるジョナサン・バウアーズ (Jonathan Bow-ers) が書いた「永遠の努力」53 (Forever endeavor) という短編小説は、このレベルの数の大きさの果てしなさについて想像をかきたてます。ここに巨大数研究 Wiki に掲載した概略のストーリーを記します。英語の原文54 は、
もっと詳細に描写されていて面白いです。
この物語は、10 個のカウンターを作れば 100 万ドルを提供すると宣伝する、奇妙なカードが通りを舞っているのに気が付いた、欲張りなベントレーから始まります。彼はカウンターとは何なのかも知らないままこれを引き受け、1 枚の壁に窓のある窮屈な部屋に通されました。彼が 10 個のカウンターを作るのを手伝う、コンパドリーという名前のアシスタントを除き、彼はその部屋にひとりでいなければなりません。一度カウンターを作り始めてしまうとその部屋から逃げることは許されません。
52 https://twitter.com/astrophys tan/status/391928927012134912

53 巨大数研究 Wiki - 永遠の努力 http://ja.googology.wikia.com/wiki/永遠の努力
54 http://www.polytope.net/hedrondude/foreverendeavor.htm

第1章

42

巨大数入門

部屋には金属のディスクでいっぱいになった大きな段ボール箱が、またその箱の横には 10 本の金属の棒がありました。コンパドリーは棒を取りそれにディスクを取り付けました。そのディスクは 10 の節に分割され、それぞれ 0〜9 の番号が付けられていました。それがカウンターでした。
すでに棒に 1 つのディスクが取り付けられている 1 つ目のカウンターは完成して、コンパドリーがそれを持っていました。

2 つ目のカウンター作りから始めることになりました。ベント
レーは、棒を手に取ってディスクを取り付け、そしてそれに続いて、コンパドリーは 1 を示すようにディスクを V 字の刻み
目 1 つ分回転させます。ベントレーはその作業を繰り返し、コンパドリーは 0 になるまでその数を 1 つずつ増やすのです。ベントレーが 10 枚のディスクを取り付け終わった所で、コンパ
ドリーのカウンターが 0 となって、2 つ目のカウンターが完成しました。
それからコンパドリーは、ベントレーの 2 個目のカウンターを受け取り、それぞれのディスクを分割された桁として使って、カウンターを 0000000000 にセットします。そして、ベントレー
は別の棒を取り、3 個目のカウンター作成を開始します。棒にディスクを 1 つ取り付けるごとに、コンパドリーはカウンターを 0000000001, 0000000002, 0000000003, ... と、1 ずつ増やします。箱の中のディスクは、いくら使っても減ることはなく常にいっぱいで、棒は窓の外に向かっていくらでも延びます。
ベントレーとコンパドリーは、睡眠と食事、トイレ以外は休まずに、休日もなく 1 日 18 時間ひたすらこの作業を続けます。食事はいつも、投下口から送られてくるボローニャサンド
ウィッチと堅く乾燥したパンケーキで、メニューは変わりません。コンパドリーは一言も口を利かず、完全に感情も無く、ベントレーが何を言ってもほとんどなんの関心も示しませんでした。奇妙なことに、ベントレーもコンパドリーも、老いていく
ようには見えませんでした。しかしながら、ベントレーは 500
年以上もカウンターに取り組んでいるらしいのです。

1.4. クラス 5 以上の巨大数

43

550 年以上かかって、100 億枚のディスクを取り付け、3 個目のカウンターが完成しました。棒の長さは 10 万キロになります。そしてコンパドリーはその 3 個目のカウンターを受け取り、000. . 000( にセットしました。ベントレーは別の棒を取っ% .&'100 億個て、4 個目のカウンター作りを始め、コンパドリーはその 3 つ目のカウンターを数え始めました。4 個目のカウンターは、ディ

スクを 10 の 100 億乗個取り付けることで完成します。それは、グーゴルのグーゴル倍の、そのまたグーゴル倍の…と、1 億回繰り返したほどの、気の遠くなるほど大きな数です。とてもその作業が終わる日が来るようには思えません。そして 4 個目のカウンターが完成すれば、今度はそのカウンターを使って、5個目のカウンター作りを始めることになります。つまり今度は

1010

10000000000

個のディスクを取り付けることになります。

果たして 10 個目のカウンターが完成する時はやってくるのでしょうか？ とてもやって来るとは思えません。この「永遠の努力」を終わらせる方法は知られていません。
ベントレーが 10 個のカウンターを完成させるまでに、とりつけなければならないディスクの数をベントレー数55 (Bentley’s Number) と言います。
✓✏【定義】ベントレー数

1 + 10 +✒8#

E10#i = 1 + 10 + 10

10

+ 10

1010

+ ... + 10

1010

1010

1010

1010

i=1

✑

ベントレー数はクラス 9 の巨大数です。私たちの想像力をもってすれば、これはもうほとんど「無限」と思える数です。

55 巨大数研究 Wiki - ベントレー数 http://ja.googology.wikia.com/wiki/ベントレー数

第1章

44

1.5

巨大数入門

巨大数に関する参考資料

本書では、個別の話題に関する参考資料を脚注に記していますが、本節で巨大数論全般に関する参考資料をいくつか紹介します。
小林銅蟲による『寿司 虚空編』56 という巨大数漫画は、多くの人が巨大数を知るきっかけとなりました。 小林銅蟲は「巨大数探索スレッド」57 の58
議論をまとめた「巨大数研究室」を管理しています。また、巨大数に関する発表をしたときのスライド59 がいくつか公開されています。『寿司 虚空編』は、当初小学館の「裏サンデー」に掲載されて話題となりましたが、その後 pixiv コミックで無料のウェブコミックとして継続され、2017 年 8 月

10 日に三才ブックスから単行本が発売されました。
60
数学史家の鈴木真治による『巨大数』という書籍は、20 世紀までの巨大数に関する数学史を一般向けに分かりやすくまとめたものです。
英語のサイトでは、すでに紹介したムナフォとサイビアンのサイトが有名です。 そして、巨大数に関する情報を集めている Googology Wiki 61 というサイトでは、世界の巨大数ファンが日夜巨大数の情報を収集整理し、議論しています。ここは巨大数コミュニティの本拠地と言って良いでしょう。
この Googology Wiki の日本語版「巨大数研究 Wiki」62 では、日本語で巨大数の情報が整理されています。本書では、脚注に巨大数研究 Wiki の該
当項目を参照しているところが多くあります。Googology Wiki は、英語と日本語の他にもオランダ語、ドイツ語、フランス語、中国語、ロシア語版、チェコ語版、マレー語版があり、それぞれの言語間で項目ごとにリンクされています。

56 pixiv コミック『寿司 虚空編』 http://comic.pixiv.net/works/1505
57 http://ja.googology.wikia.com/wiki/巨大数探索スレッド

58 巨大数研究室 http://www.geocities.co.jp/Technopolis/9946/
59 http://www.slideshare.net/DoomKobayashi/presentations
60 鈴木真治 (2016) 『巨大数』岩波書店

61 Googology Wiki http://googology.wikia.com/

62 巨大数研究 Wiki http://ja.googology.wikia.com/

45

第

2章
原始再帰関数

前章ではクラスが上がると気の遠くなるような大きさの数となることを見てきましたが、ここからは、クラスという概念を使っても間に合わないほ
どの大きな数を表記するときに便利な矢印表記について見ていきます。矢印表記で書ける程度の大きさの巨大数は、原始再帰関数で定義されている巨大数だ、ということもできます。つまり本章では原始再帰関数レベルの巨大数を取り扱うことになります。まずは矢印表記についての説明から入って、最後に原始再帰とは何か、という話をします。

2.1

クヌースの矢印表記

2.1.1

矢印表記

アメリカの数学者、計算機科学者で、コンピュータによる組版システム

TEX の開発者としても有名なドナルド・クヌース (Donald Knuth) が考案したクヌースの矢印表記1 2 3 (arrow notation) について説明します。ちな
みに本書は TEX の上に構築された文書処理システム LATEX で作成しています。

矢印表記は以下で定義されます。
1 巨大数研究 Wiki - 矢印表記 http://ja.googology.wikia.com/wiki/矢印表記

2 MathWorld - Arrow Notation http://mathworld.wolfram.com/ArrowNotation.html
3 Knuth, D. E. (1976) Mathematics and Computer Science: Coping with Finiteness.
Science 194, 1235–1242. doi:10.1126/science.194.4271.1235

第 2 章 原始再帰関数

46✓【定義】クヌースの矢印表記

x↑y

xy

=

x ↑↑ 2 =x ↑ x, x ↑↑ y = x ↑ (x ↑↑ (y − 1))x ↑↑↑ 2 =
x↑ y
n

✒

✏

x ↑↑ x, x ↑↑↑ y = x ↑↑ (x ↑↑↑ (y − 1))x(n 個の↑)y = x ↑n−1 (x ↑n (y − 1))=✑

指数を表記する ab という方法は、b を上付き文字で書く必要があります

が、プログラミングをするときやテキストでメールを送信するときなど、上付き文字を使えない環境があります。そういうときに a ↑ b という書き方がされていました。↑の文字が使えないときには、かわりに ˆ の記号が使われていました。ab という表記は拡張しにくいため、クヌースは a ↑ b の表記を拡張して矢印表記を考案したものと考えられます。同様に↑の文字が使えないときには、かわりに ˆ を使って、a ↑↑ b を a ˆ ˆ b のように書くことができます。

2.1.2

指数

具体的に計算をしてみましょう。まずは↑が 1 つの場合です。これは指数と同じです。↑を連結させると、指数と同じように右から順番に計算します。Hypercalc を使うと、次のように計算されます。

3↑3 =3↑3↑3 =
3↑3↑3↑3 =3↑3↑3↑3↑3 =3↑3↑3↑3↑3↑3 =33 = 273

33 = 327 = 7625597484987
33

33= 1.35 × 10 ↑ 3638334640024

10 ↑ (6.46 × 10 ↑ 3638334640023)

10 ↑ 10 ↑ (6.46 × 10 ↑ 3638334640023)

ここで Hypercalc では、10 ↑ 10 ↑ 10 ↑ 10 ↑ (6.46 × 10 ↑ 3638334640023)という計算結果は、「4 PT ( 6.46 × 10 ˆ 3638334640023 )」と表示されま2.1. クヌースの矢印表記

47

す。最初の 10 ↑を 4 回繰り返す部分を 4 PT と表示することで、オーバー
フローしないようにしています。
さてここで右辺を見ると、最後のかっこの中が、途中からずっと同じ数

6.46 × 10 ↑ 3638334640023 = 10 ↑ 10 ↑ 12.56 になっています。つまり 3↑を 1 つつけることと、10 ↑をつけることが、途中からまったく変わらな
くなってしまっています。本当は変わるのですが、表記されている桁数内では変わらない、ということです。ここで上のピラミッドを見やすく書き
直します。

3↑3 =
3↑3↑3 =
3↑3↑3↑3 =3↑3↑3↑3↑3 =3↑3↑3↑3↑3↑3 =3↑3↑3↑3↑3↑3↑3 =27
10 ↑ 12.88
10 ↑ 10 ↑ 12.56
10 ↑ 10 ↑ 10 ↑ 12.56
10 ↑ 10 ↑ 10 ↑ 10 ↑ 12.56
10 ↑ 10 ↑ 10 ↑ 10 ↑ 10 ↑ 12.56

左では 3 ↑を増やして、右では 10 ↑を増やしています。一番右の数は

27,12.88,12.56 と小さくなり、それ以上は小さくなりません。一番右の数を少しだけ増やす効果は、このピラミッドで下に行けばいくほど爆発的に大きくなります。それに対して 3 ↑を 10 ↑に変える効果というのはたいした効果がないので、ほとんど無視できてしまいます。
したがって指数を重ねることによって巨大数を作るためには、使う数は10 ではなくて 3 で十分だ、ということになります。この段階では 2 でもいいのですが、2 にしてしまうと、この先の計算で 2 ↑↑↑↑ 2 = 2 ↑↑↑ 2 = 2 ↑↑ 2 = 2 ↑ 2 = 4 となって面白くないので、3 を使っています。
そのようなわけで 3 ↑ 3 ↑ 3 はクラス 2 の数ですが、3 ↑ 3 ↑ 3 ↑ 3 はクラス 3、3 ↑ 3 ↑ 3 ↑ 3 ↑ 3 はクラス 4、と 1 つ↑が増えるごとにクラスが

1 つ上がります。3 ↑ 3 ↑ 3 ↑ 3 ↑ 3 ↑ 3 はクラス 5 なので、第 2 スキュー
ズ数を超えます。

第 2 章 原始再帰関数

48

なぜベースを 3 にしても 10 にしても、増え方が変わらないのでしょうか。ある数 x に対して、3x と 10x でどれだけの違いがあるかを考えると、

10x = (3log3 (10) )x = 3x log3 (10) ≈ 32.1x
なので、x が 2.1 倍程度増える効果になります。次に 1010 と 33 でどの程xx

度の違いになるかというと、
xlog3 (1010 )
1010

x

≈
≈

2.1 × 10x ≈ 2.1 × 32.1x
32.1×32.1x= 33

2.1x+log3 (2.1)≈ 33

2.1x+0.68となり、x を 2.1 倍して 0.68 を足す効果になります。一番下の数を 3 から10 に増やす効果は、1 段階目の指数箇所を 2.1 倍する程度の効果、2 段階目の指数箇所に 0.68 を足す効果となり、3 段階目の指数箇所に至っては極めて小さな効果になります。たとえば、

3 ↑ 3 ↑ 3 ↑ 3 ↑ 3 ↑ 3 = 10 ↑ 10 ↑ 10 ↑ 10 ↑ 12.56という式において、x = 12.56 とすれば 2.1x + 0.68 = 27.056 で、ほぼ

3 ↑ 3 = 27 と等しくなっているので、2.1x + 0.68 程度の効果がある、という見積もりが正しいことが分かります。

Hypercalc で、x = 10 ↑ 10 ↑ 10 ↑ 10 としたときの 2x と xx を計算したところ、同じ 10 ↑ 10 ↑ 10 ↑ 10 ↑ 10 になりました。つまり、2x ≈ xxと考えて良いことになります。ここで ≈ の記号は、「その大きさの数の比

較ではほぼ等しいとみなせる」という意味での近似の記号です。「ほぼ等しい」の意味は、「値の差が 0 に近い」という意味に限定されません。巨大数は正確な計算ができないので、このような近似の取り扱いが必要になり、今後もこのような意味で近似の記号 ≈ を使っていきます。2x と xx の比較について考えると、このレベルの巨大数は「対数を 4 回取る」ことで比較ができるため、対数を 4 回取って比較すると、その差は計算できない程に小さくなります。つまり、log(log(log(log(2x )))) ≈ log(log(log(log(xx )))) ≈ 10ということを、2x ≈ xx と書きました。

2.1. クヌースの矢印表記

2.1.3

49

テトレーション

次は↑が 2 つ並んだ場合です。これを特別にパワータワー4 (power tower)
とも言います。

x ↑↑ y====x ↑ (x ↑↑ (y − 1))x ↑ (x ↑ (x ↑↑ (y − 2)))x ↑ (x ↑ (x ↑ (x ↑↑ (y − 3))))x ↑ x ↑…↑ x%&'(
y 個の xとなり、指数がタワーのように連なるので指数タワーとも言います。矢印
表記のことを「タワー表記」と記されることもありますが、指数タワーはテトレーションの意味で使われるため、ペンテーション以上を含む場合には「矢印表記」という用語に統一しておく方が良いと思います。
また、これをテトレーション5 (tetration) あるいは超冪（ちょうべき）とも言います。テトレーションは、グッドスタイン 6 がギリシャ語の接頭辞で 4 を意味する tetra-から作った言葉です。テトレーションを使うと、前章最後のベントレー数は

9
#
i=0

と書くことができます。

2.1.4

10 ↑↑ i

ハイパー演算子

テトレーションは、繰り返しで得られる 4 番目の演算子なので、ハイパー

4 演算子 (hyper-4) とも言います。一般にハイパー n 演算子 Hn (a, b) は、以下で定義されます7 。

4 MathWorld - Power Tower http://mathworld.wolfram.com/PowerTower.html
5 http://ja.googology.wikia.com/wiki/テトレーション

6 Goodstein, R. L. (1947). Transfinite Ordinals in Recursive Number Theory. Journal of Symbolic Logic 12(4): 123–129. doi:10.2307/2266486
7 http://ja.googology.wikia.com/wiki/ハイパー演算子

第 2 章 原始再帰関数

50【定義】ハイパー n 演算子 Hn (a, b)

Hn (a, b) =

⎧
⎪
⎪ b+1
⎪
⎪
⎪
⎪ a
⎨

(n = 0)(n = 1, b = 0)0(n = 2, b = 0)⎪⎪⎪1(n ≥ 3, b = 0)⎪⎪⎪⎩
Hn−1 (a, Hn (a, b − 1)) (それ以外)

H0 (a, b) = b + 1 は、後者

H1 (a, b) = a + b は、加算（後者の繰り返し）
H2 (a, b) = a × b は、乗算（加算の繰り返し）

H3 (a, b) = ab は、冪乗（「べきじょう」と読む。乗算の繰り返し）

H4 (a, b) = a ↑↑ b は、超冪（冪乗の繰り返し）またはテトレーション
H5 (a, b) = a ↑↑↑ b は、ペンテーション（テトレーションの繰り返し）

H6 (a, b) = a ↑4 b は、ヘキセーション（ペンテーションの繰り返し）
Hn (a, b) = a ↑n−2 b(n ≥ 3)

それではテトレーション↑↑を連ねていきます。

3 ↑↑ 3 =3 ↑↑ 3 ↑↑ 3 ==3 ↑ 3 ↑ 3 = 7625597484987
3 ↑↑ 7625597484987
3 ↑ 3 ↑…↑ 3 ↑ 3%&'(7625597484987 個の 3ということで、この時点でクラス 7625597484986 の巨大な数になります。

Hypercalc で計算しようにも、「3ˆ」を 7 兆個以上打ち込まないとなりませんので無理です。仮に打ち込んだとしたら、「7625597484983 PT ( 6.46 ×

10 ˆ 3638334640023 )」という結果が表示されることでしょう。
3 ↑↑ 3 ↑↑ 3 ↑↑ 3 = 3 ↑ 3 ↑…↑ 3 ↑ 3%&'(
3 ↑↑ 3 ↑↑ 3 個の 3となると、クラス 3 ↑↑ 3 ↑↑ 3 程度の巨大数です。Hypercalc では計算できません。まず 3 を 3 ↑↑ 3 ↑↑ 3 回入力することが不可能ですし、仮に2.1. クヌースの矢印表記

51

入力できて、計算の時間とメモリの制約を無視しても、Hypercalc の計算できる最大値は 10 ↑↑ (1010 ) であるとされていて、10 ↑↑ (3 ↑↑ 3 ↑↑ 3)程度のこの数はオーバーフローです。Hypercalc ですらオーバーフローしてしまう巨大数となりました。
そこでクラスの概念を拡張してハイパークラスを定義します。これは本書独自の定義です。
✓【定義】自然数のハイパークラス

数列 hc(n) を hc(0) = 6, hc(n + 1) = c(hc(n)) で定義する。ここで✏c(n) についてはクラスの定義 (p.27 の第 1.2 節) 参照。
ハイパークラス n の自然数とは、(i) n = 0 の時は、hc(0) 以下の自然数である。

(ii) n > 0 の時は、hc(n − 1) よりも大きく、hc(n) 以下の自然数である。
✒✑
この定義はクラスの定義とほとんど同じで、変わっているところは、hc(n+1) = c(hc(n)) の箇所です。クラスの定義では、c(n + 1) = 10c(n) となっていました。クラスを上げるための演算は 10 ↑ x ですが、ハイパークラスを上げるための演算は c(x) を使っています。
ハイパークラス 1 はクラス 6 までの数です。ハイパークラス 2 は、N を
ハイパークラス 1 の上限であるとしたときに、クラス N までの数です。同様にハイパークラス 3 は、クラス（ハイパークラス 2 の数）で表される自然数です。
このように定義すると、3 ↑↑ 3 はハイパークラス 1、3 ↑↑ 3 ↑↑ 3 はハイパークラス 2、3 ↑↑ 3 ↑↑ 3 ↑↑ 3 はハイパークラス 3、というよ
うに、テトレーションを繰り返すごとにハイパークラスが 1 つ増加します。
ハイパークラス 3 以上の数は、Hypercalc を使っても計算できません。
矢印が 3 つ並ぶと、テトレーションを繰り返すハイパー 5 演算子となります。これをペンテーション8 (pentation) と言います。ジョナサン・バウ
8 http://ja.googology.wikia.com/wiki/ペンテーション

第 2 章 原始再帰関数

52

アーズは、3 に 3 をペンテーションした数をトリトリ9 (tritri) と名付けています。これからも出てくる数で、原始再帰でできる巨大数の例としては
面白いので、定義を書いておきます。
✓【定義】トリトリ
トリトリ = 3 ↑↑↑ 3 = 3 ↑↑ 3 ↑↑ 3✏

トリトリは、クラス 7625597484986、ハイパークラス 2 の巨大数である。
✒✑
また、10 ↑↑↑ 100 はギャゴルと呼びます10 。これは、ハイパークラス

100 の巨大数です。

矢印が 4 つ並ぶと、ペンテーションを繰り返すハイパー 6 演算子で、これをヘキセーション11 (hexation) と言います。

3 ↑↑↑↑ 3 =3 ↑↑↑ 3 ↑↑↑ 3= 3 ↑↑↑トリトリ= 3 ↑↑ 3 ↑↑…↑↑ 3%&'(
トリトリ個の 3となります。テトレーションの計算をトリトリ回繰り返した数が 3 ↑↑↑↑ 3 なので、ハイパークラストリトリほどの大きさの数ということになります。なんだか分からないけどとにかく大きな数、というより他にないよ
うな大きな数です。これが、後のグラハム数の定義で出てくる f (4) で、グ
ラハム数はこの数がスタートになっています。
このように、↑という記号を導入したことで、四則演算やべき乗などの記号だけでは、とても書ききれない、Hypercalc をもってしても太刀打ちできないほどの想像を絶する大きな数を表現することができました。スキュー
ズ数やベントレー数などの第 1 章で見たような巨大数は、トリトリから見ると、小さすぎて話にならない数と言うことができます。

9 http://ja.googology.wikia.com/wiki/トリトリ

10 http://ja.googology.wikia.com/wiki/ギャゴル

11 http://ja.googology.wikia.com/wiki/ヘキセーション

2.1. クヌースの矢印表記

53

さて、このような巨大数の大きさは、どのように評価すれば良いのでしょうか。そもそも正確な計算が現実的な時間ではできない数なので、やみくもに計算を繰り返しても「計算できませんでした」となるだけで何も分かりません。大切なことは、どのような計算をしているか、という構造を見ること、関数の性質をよく知ることです。矢印表記の性質として、

1. 同じ形の表記であれば、左の数を大きくするよりも、右の数を大きくする効果の方が大きい。

2. 数を大きくする効果よりも、繰り返し数を増やす効果の方が大きい。
3. 繰り返し数を増やす効果よりも、↑の数を増やす効果の方が大きい。
といったことがあるため、たとえば、以下のような関係は分かります。

100 ↑↑↑ 100<

3 ↑↑↑ 101

100000 ↑↑↑ 100000 ↑↑↑ 100000<

3 ↑↑↑ 3 ↑↑↑ 3 ↑↑↑ 3

3↑

100

3↑

100

3↑

100

3↑

100

3 =

3 ↑101 5 < 3 ↑102 3

つまり、巨大数を作るという観点からは、使われる数を大きくしても、繰り返しの数を増やしても、↑の数を増やす効果にはかないません。↑の数を増やすことが最も効率的である、ということになります。色々な数と↑が入り乱れている矢印表記の数があったときには、一番↑の数が大きい場
所の↑の本数を x として、3 ↑x+2 3 という数を作れば、その数の方が大きい、ということになります。
さて、ここから先は Hypercalc で計算できないような大きな数の話になりますが、もう少し Hypercalc で遊んでみます。Hypercalc で計算できる
演算は、四則演算、冪乗、階乗です。そこで階乗を繰り返したらどうなるかを計算してみましょう。ここで階乗記号を繰り返した!!!という記号は、通常は 10!!! = 10 × 7 × 4 × 1 のように定義されていますが、Hypercalc では 10!!! = ((10!)!)! として計算します。したがって、!を連続して打ち込め
ば、階乗の繰り返しを簡単に計算できます。ここでは、3!n = (…(((3!)!)!)…) と、!を n 回繰り返す演算を !n と表記します。ハイパー E 表記で結果を第 2 章 原始再帰関数

54
書きます。

3!

=

6 (クラス 0)

3! = (3!)!

=

720 (クラス 1)

3!3 = ((3!)!)!

=

E3.242147497#2 (クラス 2)

4=

E3.242952972#3 (クラス 3)

3!5=

E3.242952972#4 (クラス 4)

6=

E3.242952972#5 (クラス 5)

3!100

=

E3.242952972#99 (クラス 99)

2

3!

3!

階乗は掛け算の繰り返しなので、冪乗程度の増加率です。それを繰り返すことで、クラスが 1 つずつ上がり、3.242952972 の部分は動かなくなります。
クラス n の巨大数に階乗をすると、クラス n+1 の巨大数になる、ということになります。実際に、スターリングの近似式 log n! ≈ n log n − n (log は自然対
数) について、両辺の対数を取って log(log n!) ≈ log(n)+log(log n) ≈ log(n)とすれば、n が大きいときに階乗は指数関数と同じ程度の増加率になるということが理解できます。

2.1.5

連続関数化

「乗算の繰り返し」で定義される冪乗 ax は、繰り返し回数である x の定
義を自然数から実数へと拡張して連続関数とされているように、「冪乗の繰り返し」で定義されるテトレーションについても、繰り返し回数の実数への拡張がされています。その方法にはいくつかありますが、a ↑↑ x を、実数 x に対して次のように定義する方法が簡明です。

⎧⎪⎪
log (a ↑↑ (x + 1))⎪⎨ aa ↑↑ x = 1 + x⎪⎪⎪⎩a ↑ (a ↑↑ (x − 1))x ≤ −1−1 < x ≤ 00<x2.1. クヌースの矢印表記

55

すなわち x > 0 の時は

a ↑↑ x = a ↑ a ↑ … ↑ a ↑ (x − floor(x))%&'(
floor(x)+1 個の aとなります。ここで floor は床関数で、floor(x) は x 以下の最大の整数です。拡張されたテトレーションは、a = e のときに微分可能で導関数が連続な滑らな関数になります。
巨大数の大きさを比較するときには、a を同じ値にそろえればいいのですが、関数の滑らさを重視するのであれば a = e にそろえるのが良く、実用的には a = 10 にそろえるのが便利だと思います。たとえば以下のように計算されます。
グーゴル
グーゴルプレックス= 10100 = 10 ↑ 10 ↑ 2 = 10 ↑ 10 ↑ 10 ↑ log10 (2)≈10 ↑ 10 ↑ 10 ↑ 0.301 = 10 ↑↑ 2.301= 1010≈100= 10 ↑ 10 ↑ 10 ↑ 2

10 ↑ 10 ↑ 10 ↑ 10 ↑ 0.301 = 10 ↑↑ 3.301

テトレーションをこのように連続関数化すると、テトレーションの逆関数である超対数 (super-logarithm) を次のように定義できます。
⎧⎪⎪sloga (ax ) − 1x≤0⎪⎨sloga (x) = −1 + x
0<x≤1
⎪
⎪
⎪
⎩slog (log (x)) + 1 1 < xaa

同じ方針でペンテーションを連続関数化すると⎧⎪⎪sloga (a ↑3 (x + 1)) x ≤ −1⎪⎨
a ↑3 x = 1 + x−1 < x ≤ 0⎪⎪⎪⎩a ↑↑ (a ↑3 (x − 1)) 0 < xとなります。計算の要領を示すために、3 ↑↑↑ 2.5 を 10 ↑↑ x の形に書き直してみます。

3 ↑↑↑ 2.5 =3 ↑↑ 3 ↑↑ 3 ↑↑ 0.5 = 3 ↑↑ 3 ↑↑ 3 ↑ 0.5

第 2 章 原始再帰関数

56≈

3 ↑↑ 3 ↑↑ 1.73205 = 3 ↑↑ 3 ↑ 3 ↑ 0.73205≈

3 ↑↑ 3 ↑ 2.235 ≈ 3 ↑↑ 11.651=

3 ↑ 3 ↑ 3 ↑ 3 ↑ 3 ↑ 3 ↑ 3 ↑ 3 ↑ 3 ↑ 3 ↑ 3 ↑ 3 ↑ 0.651≈

10 ↑ 10 ↑ 10 ↑ 10 ↑ 10 ↑ 10 ↑ 10 ↑ 10 ↑ (3.5045 · 1015427 )≈10 ↑ 10 ↑ 10 ↑ 10 ↑ 10 ↑ 10 ↑ 10 ↑ 10 ↑ 10 ↑ 15427.5446≈

10 ↑ 10 ↑ 10 ↑ 10 ↑ 10 ↑ 10 ↑ 10 ↑ 10 ↑ 10 ↑ 10 ↑ 4.1883≈

10 ↑ 10 ↑ 10 ↑ 10 ↑ 10 ↑ 10 ↑ 10 ↑ 10 ↑ 10 ↑ 10 ↑ 10 ↑ 0.622=

10 ↑↑ 10.622

同様に計算すると、次のようになります12 。

3 ↑↑↑ 2.6≈

10 ↑↑ 20.346

3 ↑↑↑ 2.7≈

10 ↑↑ 56.804

3 ↑↑↑ 2.8≈

10 ↑↑ 461.864

3 ↑↑↑ 2.9≈

10 ↑↑ 88824.2

3 ↑↑↑ 3≈10 ↑↑ 7625597484986.041≈

10 ↑↑↑ 2.31076

ペンテーションの逆関数は超々対数 sslog で、次のようになります。
⎧⎪⎪ssloga (a ↑↑ x) − 1x≤0⎪⎨ssloga (x) = −1 + x
0<x≤1
⎪
⎪
⎪
⎩sslog (slog (x)) + 1 1 < xaa

ここまでの考え方を一般化すると、自然数 n ≥ 2 に対して a ↑n x を⎧
n⎪ss...s⎪% &' ( loga (a ↑ (x + 1)) x ≤ −1
⎪
⎪
⎨ n−2
a ↑n x =1+x−1 < x ≤ 0
⎪
⎪
⎪
⎪
⎩ n−1
a↑
(a ↑n (x − 1))0<x

12 http://ja.googology.wikia.com/wiki/ユーザーブログ:Kyodaisuu/テトレーションの連続関数化

2.2. グッドスタイン数列57のように連続関数化できます。このことから、定義域を x > 0, n ≥ 1, n ∈ Nとすると、a ↑n x =⎧⎨ ax⎩a ↑n−1 (a ↑n (x − 1))

0 < x ≤ 1 or n = 1
1 < x and n > 1とすることができます。この方法で、e ↑n x あるいは 10 ↑n x の形で統一して表記すれば、大きさを比較しやすくなります。

2.2

グッドスタイン数列

グッドスタイン数列13 14 15 (Goodstein Sequence) は、面白い性質を持った数列です。まずは n を底とした遺伝的記法 (hereditary base-n notation)を定義します。

自然数の n 進数表記は、
k#i=0

ai ni = ak nk + ak−1 nk−1 + · · · + a0 n0と書く事ができます。たとえば 1234 の 10 進数表記は1234 = 1 × 103 + 2 × 102 + 3 × 101 + 4です。ここで ai ni は ni + ni + · · · + ni なので、ni の和で書くこともできます。たとえば

1234 = 103 + 102 + 102 + 101 + 101 + 101 + 100 + 100 + 100 + 100です。ここでは ak nk の形で話を進めます。自然数を ak nk の和で表したときに、指数の部分をさらに n 進数に分解します。そこでまた出て来た指数の部分を、さらに n 進数に分解します。このようにすると、出てくる数が全て n 以下の数となるように、記述できます。これが遺伝的記法です。
13 http://ja.googology.wikia.com/wiki/グッドスタイン数列

14 http://mathworld.wolfram.com/GoodsteinSequence.html

15 田中一之, 角田法也, 鹿島亮, 菊池誠 (1997) 『数学基礎論講義―不完全性定理とその発展』日本評論社

第 2 章 原始再帰関数

581234 で 10 進数の場合は、すでに出てくる数がすべて 9 以下となっているので、上記のままで遺伝的記法になります。これを 3 を底にする遺伝的記法に直します。

1234

36 + 2 × 35 + 2 × 32 + 1=

32×3 + 2 × 33+2 + 2 × 32 + 1=

このように出てくる数がすべて 3 以下になります。続いて 2 を底にする遺伝的記法にします。

1234=

210 + 27 + 26 + 24 + 2=

22 +2 + 22 +2+1 + 22 +2 + 22 + 2

=

22

3

2+1

2

+2

2

2

2

2

2

+ 22 +2+1 + 22 +2 + 22 + 2

これが遺伝的記法です。続いてグッドスタイン数列の定義を記します。

✓【定義】グッドスタイン数列

自然数 n の b を底とする遺伝的記法を書き、b を b + 1 に書き換えるこ✏とで得られる数を B[b](n) とする。
このとき G0 (n) = n からはじまるグッドスタイン数列を Gk (n) =B[k + 1](Gk−1 (n)) − 1 で定義する。結果が 0 となったときに数列は終了する。
✒

3 から始まるグッドスタイン数列16 の計算をすると、
G0 (3)=

3=2+1

G1 (3)=

B[2](G0 (3)) − 1 = B[2](3) − 1 = 3 + 1 − 1 = 3

G2 (3)=

B[3](G1 (3)) − 1 = B[3](3) − 1 = 4 − 1 = 3

G3 (3)=

B[4](G2 (3)) − 1 = B[4](3) − 1 = 3 − 1 = 2

G4 (3)=

B[5](G3 (3)) − 1 = B[5](2) − 1 = 2 − 1 = 1

G5 (3)=

B[6](G4 (3)) − 1 = B[6](1) − 1 = 1 − 1 = 0

16 The Goodstein sequence G(3) https://oeis.org/A215409✑

2.2. グッドスタイン数列59と計算できます。まず、最初に G0 (3) を 2 を底とする遺伝的記法で「2+1」と書きます。次に、G1 (3) の計算では、G0 (3) = 3 に対して、B[2] の操作、
つまり 2 を底とする遺伝的記法で、2 を 3 に書き換える操作をします。つまり「2+1」の 2 の部分を 3 に書き換えて、「3+1」とします。そこから 1を引いて「3+1-1」と計算して、結果が 3 となります。これを 3 進数表記す
ると、そのまま「3」です。

G2 (3) の計算も同様ですが、今度は 3 の底を 4 の底に書き換えるので、「3」の部分がそのまま「4」になって、そこから 1 を引きます。G3 (3) の計算では、4 の底を 5 に書き換えますが、4 という数はないのでそのまま「3」となり、1 を引いて 2 になります。
以下同様に繰り返して、G5 (3) で 0 に達して数列が終了します。
グッドスタイン数列は、0, 1, 2, 3 から始まるときにはすぐに終わってしまいますが、4 以上からスタートするとなかなか終わらず、数列の値が急激に上昇します。たとえば 19 から始まるグッドスタイン数列を計算すると、
以下のようになります。
2

G0 (19) =19 = 22 + 2 + 1

G1 (19) =33 + 3 + 1 − 1 = 33 + 3 = 7625597484990

G2 (19) =

3

3

4

4

4 4 + 4 − 1 = 44 + 3
5G3 (19) =55 + 2G4 (19) =66 + 1G5 (19) =

77

6

7

ここまでは数は増えますが表記は簡潔になります。この次の段階で、表記が爆発します。G6 (19) は、77 の 7 を 8 に書き換えて 88 にしてから、1 を78引きます。88 − 1 を 8 を底とする遺伝的表記をすると、とても書き切れな
8

い数になります。8 を 10 に変えて 1010

10

− 1 を 10 進数表記することを考えると、これは 9 が 1010 個続く 1010 桁の数になります。そしてさらに、一番上の桁は指数部分が 9999999999 となって、これもまた 10 桁の数なので、さらに 10 進数で分解する必要があります。88 − 1 の場合は、88 桁の非常8に長い数列ができます。

60

第 2 章 原始再帰関数

G6 (19) の末尾は、· · · 7 × 82 + 7 × 8 + 7 となっています。ここから先は、底が 8, 9, 10, … と増えて行き、同時に 1 を引かれることで、一番最後の 7 が 6, 5, 4, … と 1 ずつ引かれていって、G13 (19) に達したところで、· · · 7 × 152 + 7 × 15 と定数項が落ちます。次に、16 を底として書き換えて· · · 7 × 162 + 7 × 16 から 1 を引くときに、7 × 16 − 1 = 111 を 16 進数で書いて 6 × 16 + 15 となり、今度は 15 が 0 になるまで続けますが、そうこうしているうちに底がどんどん大きくなり、どんどん急激に値が増加していきます。
さて、このように急速に増加するグッドスタイン数列ですが、必ずいつかは 0 となって終了することが証明されています。そこが面白いところです。したがって、この数列が終了するまでのステップ数を関数と考えることができます。n から始まるグッドスタイン数列がはじめて 0 になるまでのステップ数をグッドスタイン関数 G(n) とします。たとえば n = 3 のときは G0 (3) からはじまって 6 ステップ目で G5 (3) = 0 となるので、G(3) = 6となります。すなわち Gk (n) = 0 となる最小の k に対して、G(n) = k + 1です。グッドスタイン数列は必ず終了するのでこのような定義で G(n) の値は必ず定まり、G(n) は n がすべての自然数に対して値を持つ全域関数となります。
グッドスタイン関数はとても増加速度が大きい関数になります。たとえば G(4) = 3 × 2402653211 − 2 となり、G(5) はトリトリ (3 ↑↑↑ 3) を超えます。トリトリ回以上の繰り返しということになると、まともに計算しても終わるはずがありません。もちろん計算するためのメモリも足りません。
囲碁の完全解析を計算するよりもはるかに困難な、終わりの見えない計算になります。G(6) でヘキセーションのレベルに到達し、G(7) では↑を７つ重ねる計算になり、G(8) では矢印表記では書けないような大きな数になって、G(12) では次章で紹介するグラハム数を超えて、そこから先はさらに急速に増加していきます。
グッドスタイン関数の面白いところは、数列の定義はおとなしいのに、とてつもなく増加速度が大きい関数が定義されるところです。それでは、どの程度増加速度が大きい関数になるのでしょうか。この関数は原始再帰関2.3. 原始再帰関数

61

数ではないので、後の章で検証をします。

原始再帰関数

2.3

四則演算しか知らない人が巨大数を作るとしたら、たとえば「99999 ×

99999」とか「999999 × 999999 × 99999」などと書くでしょう。ところが
このようにしてたくさん 9 を並べて、×をいっぱい使って数を書いたとこ
ろで、
「1010
1000

10

1000

」にはかないません。
「1010

1000

」ほどの数を作るためには、桁ほどの数字やかけ算記号を書く必要があるからです。これは四則演算によって作られる関数よりも、べき乗関数の方が増加速度が飛躍的に大きいためです。さらにクヌースの矢印表記という新しい関数を取り入れることで、べき乗などの表現をいくら使っても書き表せないほどの大きな数を作ることができました。
このようにより増加速度が大きい関数を定義することで、より巨大な数を作ることができるため、巨大数を作ることは巨大関数を作る事と同じことになります。今後はいかにして巨大関数を作るか、という議論が中心になります。それはそのまま、巨大数を作るということになります。したがって、本書のタイトルも「巨大関数論」とする方が内容に即していますが、巨大数への想いを込めて、あえて「巨大数論」としました。
さて、巨大関数を作ったとして、その巨大関数がどの程度の大きさなのかを評価する必要があります。そのために再帰理論を導入します。
本章でこれまでに紹介した関数は、グッドスタイン関数を除けば、すべて原始再帰関数 (primitive recursive function）17 になります。
【定義】原始再帰関数
原始再帰関数は、以下のように定義される。

1. ゼロ関数: Z() = 0 （0 変数の関数、つまり定数 0）は原始再帰
17 田中一之, 角田法也, 鹿島亮, 菊池誠 (1997) 『数学基礎論講義―不完全性定理とその発展』日本評論社

第 2 章 原始再帰関数

62関数である。

2. 後者関数: S(x) = x + 1 は原始再帰関数である。
3. 射影関数: Pin (x1 , x2 , …, xn ) = xi (1 ≤ i ≤ n) は原始再帰関数である。

4. 関数合成: gi : Nn → N, h : Nm → N(1 ≤ i ≤ m) が原始再帰関数のとき、

f (x1 , ..., xn ) = h(g1 (x1 , ..., xn ), ..., gm (x1 , ..., xn ))で定義される合成関数 f = h(g1 , ..., gm ) : Nn → N は原始再帰関数である。

5. 原始再帰: g : Nn → N, h : Nn+2 → N が原始再帰関数のとき、
f (x1 , ..., xn , 0) =f (x1 , ..., xn , y + 1)=

g(x1 , ..., xn )h(x1 , ..., xn , y, f (x1 , ..., xn , y))で定義される関数 f : Nn+1 → N は原始再帰関数である。
ここで、関数合成と原始再帰を、それぞれ合成作用素、原始再帰作用素とも呼びます。以下は、原始再帰関数の例です。

1. 定数関数 f (x) = n
2. 加算 x + y
3. 乗算 xy
4. 冪乗 xy
5. 階乗 x!
6. 大小関係 x < y や同値関係 x = y を判定する関数
7. 素数を判定する関数
8. n 番目の素数を返す関数

2.3. 原始再帰関数

63

9. 以上を繰り返した関数
定数関数は、ゼロ関数に後者関数を繰り返し適用することで生成できます。加算 plus は、後者 S と plus の原始再帰を繰り返すことで、plus(x, 0) =x, plus(x, y+1) = S(plus(x, y)) と計算できます。つまり、後者関数 (+1) を y
回繰り返す、という関係を原始再帰で計算できます。同様に、乗算 times は加算を繰り返すので、加算の原始再帰 times(x, y +1) = plus(x, (x, times(x, y))で計算できます。べき乗は乗算の繰り返しなので同様に計算できます。階
乗も乗算の繰り返しなので、繰り返し方を工夫すれば原始再帰で計算できます。
さらに原始再帰で大小関係の比較や同値関係の判定もできるため、x は

y の約数であるかどうかという判定ロジックも原始再帰となり、約数が存在するかどうかを調べる素数判定も原始再帰になります。したがって素数かどうかを順番に調べることで、n 番目の素数も原始再帰で計算できます。
このように、原始再帰の範囲は非常に広く、色々な計算ができます。ふだん扱っている算術的関数のほとんどは原始再帰関数となるようです。
後者の原始再帰で加算を、加算の原始再帰で乗算を、乗算の原始再帰で冪乗を計算することができました。これは、ハイパー演算子で言えば、ハイ
パー 0 の原始再帰からハイパー 1 を、ハイパー 1 の原始再帰からハイパー 2
を、ハイパー 2 の原始再帰からハイパー 3 を計算したことになります。したがって、ハイパー 3 の原始再帰からハイパー 4 の超冪を計算できます。
このように、原始再帰を繰り返すことで、ハイパー演算子が計算できます。
つまり、クヌースの矢印表記は原始再帰で計算できます。
なお、原始再帰関数は原始帰納関数と書かれることもあり、本書でも当初はそのように表記していましたが、英語の recursive を再帰と訳し、induction
を帰納と訳すことに統一する方が意味が分かりやすくすっきりとするため、本書全体を 2 版からその方針で書き改めることとしました。

第 2 章 原始再帰関数

64【コラム】アンドレ・ジョイスとグーゴロジー

アンドレ・ジョイス (André Joyce) は、巨大数論を意味するグーゴロ
ジー (googology) という言葉を考案した人です。彼は、原始再帰レベ
ルの関数と、その関数によって定義される多くの巨大数の名前を考えました。そして、グーゴロジーだけではなく、巨大数の名前を意味するグーゴロジズム (googologism)、巨大数研究者を意味するグーゴロ
ジスト (googologist) というような言葉も考えました。このジョイス
は、どんな人だったのでしょうか。

ジョイスに関する情報は長らく謎につつまれたままで、ネット上のAndré Joyce Fan Club というファンクラブのサイトに情報があるだけでした。そのサイトでは、ジョイスはフランス系のアメリカ人で作家であるとして紹介されています。
実は、アンドレ・ジョイスはファンクラブのサイトを開いたマイケ
ル・ジョセフ・ハルム (Michael Joseph Halm) という人が考えた実在しない人物でした。André Joyce という名前は聖書によく出てくる andrejoice という言葉をもじった言葉遊びだったようです。つまり、ハルムのペンネームがジョイスだったとする解釈も可能ですが、ファンク
ラブのサイトはあたかも別人のごとく紹介していたので、ハルムが架空の人物に関する伝記をもっともらしく作成して遊んでいた、と解釈するのが妥当だと思います。

65

第

3章
2 重再帰関数

本章では 2 重再帰関数と、2 重再帰関数によって定義される巨大数について解説します。2 重再帰関数は原始再帰関数よりも「強い」関数なので、本章で紹介する巨大数は前章までで紹介した巨大数とは比べものにならないほど大きな巨大数となります。では、関数が「強い」とはどういうことでしょうか。
本書の目的は「巨大数を作る」ことで、そのためには「強い関数を作る」
必要があります。そこで、本章で原始再帰と 2 重再帰の比較をすることで、強い関数を作るための手法の 1 つである「対角化」について解説します。対角化をすることでなぜ関数が強くなるのかを理解することが、本書を読み進める上で重要なポイントとなります。

3.1

アッカーマン関数

2 重再帰関数を定義する前に、その具体例としてドイツの数学者ヴィル
ヘルム・アッカーマン (Wilhelm Friedrich Ackermann, 1869–1962) が考案したアッカーマン関数1 2 (Ackermann function) を紹介します。これは値が爆発的に大きくなる関数です。

1 http://ja.googology.wikia.com/wiki/アッカーマン関数

2 Ackermann, W. (1928) Zum Hilbertschen Aufbau der reellen Zahlen. Mathematische Annalen 99: 118–133. doi:10.1007/BF01459088

第3章

66

✓

2 重再帰関数【定義】アッカーマン関数

非負整数 x, y に対し、以下のように定義される関数 A(x, y) をアッカー✏マン関数とする。

A(0, y) =

✒

y+1

(3.1)

A(x + 1, 0)=

A(x, 1)(3.2)

A(x + 1, y + 1)=

A(x, A(x + 1, y))(3.3)

A(x, y) を、具体的に計算してみましょう。
A(1, 1) =A(0, A(1, 0)) = A(0, A(0, 1)) = A(0, 2) = 3

A(1, 2) =A(0, A(1, 1)) = A(0, 3) = 4

A(1, 3) =A(0, A(1, 2)) = A(0, 4) = 5

A(1, y) =A(0, A(1, y − 1)) = A(1, y − 1) + 1 = y + 2

A(2, 0) =A(1, 1) = 3

A(2, 1) =A(1, A(2, 0)) = A(1, 3) = 5

A(2, 2) =A(1, A(2, 1)) = A(1, 5) = 7

A(2, 3) =A(1, A(2, 2)) = A(1, 7) = 9

A(2, y) =A(1, A(2, y − 1)) = A(2, y − 1) + 2 = 2y + 3

A(3, 0) =A(2, 1) = 5

A(3, 1) =A(2, A(3, 0)) = A(2, 5) = 13 = 24 − 3A(3, 2) =A(3, 3) =A(3, y)=A(2, A(3, 1)) = A(2, 13) = 29 = 25 − 3A(2, 29) = 61 = 26 − 3

2y+3 − 3（帰納法で証明）

A(4, 0) =A(3, 1) = 13

A(4, 1) =A(3, A(3, 1)) = A(3, 13) = 216 − 3 = 65533

A(4, 2) =A(4, 3)≈A(3, 65533) = 265536 − 3 ≈ 2 × 1019728
A(3, 2 × 1019728 ) ≈ 106×10

19727

✑

3.1. アッカーマン関数

67『寿司 虚空編』の第 8 話では、以下のように x > 2 の時のアッカーマン
関数が矢印表記を使ってあらわされることが解説されています。

A(x, y)=2 ↑x−2 (y + 3) − 3

この式は数学的帰納法で証明できます。
【証明】• A(3, 0) = 2 ↑ 3 − 3 = 5 は成立• A(3, y) で成立すると仮定すると、次のように A(3, y + 1) でも成立

A(3, y + 1)==

A(2, A(3, y)) = A(2, 2y+3 − 3)2(2y+4 − 3) = 2y+4 − 3

よって、A(3, y) で成立• ある x > 2 に対して A(x, y) が成立すると仮定すると、A(x+1, y)がすべての y ≥ 0 で成立することを y の帰納法で以下のように証明できる

A(x + 1, 0) ==A(x + 1, y)===A(x, 1) = 2 ↑x−2 4 − 3

2 ↑x−2 (2 ↑x−2 2) − 3 = 2 ↑x−1 3 − 3A(x, A(x + 1, y − 1)) = A(x, 2 ↑x−1 (y + 2) − 3)2 ↑x−2 (2 ↑x−1 (y + 2)) − 3

2 ↑x−2 (2 ↑x−2 2 ↑x−2 . . . ↑x−2 2) − 3%&'(
y+2 個の 2

=

2↑

x−1

(y + 3) − 3✷
すなわちアッカーマン関数 A(x, y) は、x = 0 の時は後者、x = 1 の時は加算、x = 2 の時は乗算、x = 3 の時は冪乗、x = 4 の時はテトレーショ

第3章

68

2 重再帰関数

ン、x = 5 の時はペンテーション、とハイパー x 演算子に相当する増加速度の関数となっています。

3.2

2 重再帰関数

アッカーマン関数はどんな原始再帰関数よりも増加速度が大きい数です。
つまり任意の原始再帰関数 f (x) に対して、

f (x) < A(c, x)となる c が存在します。それはアッカーマン関数が 2 重再帰関数であるためです。そのことをこれから示します。なお、ここでは 1 変数関数について議論を進めますが、f (x) が多変数関数であっても同様の議論ができます。
前章の原始再帰の定義式 (p.62) において

n = 1, B(y) = f (x1 , y), C(n) = h(x1 , y, n)とすると、

B(0) =
B(y + 1)=g(x1 )C(B(y))となるため、

B(y) = C y (g(x1 ))と書けます。つまり B(y) は関数 g(x1 ) に対して C(n) の合成を y 回繰り返した関数です。合成の回数を変数とする関数を作ることが、原始再帰の操作となっています。このことを「操作を数え上げる」と表記することとしま
す。すなわち原始再帰の操作は合成操作を数え上げます。したがって、関
数 f (x) から、合成操作を有限回 (n 回) 繰り返して得られるいかなる関数

g(x) よりも、初期関数から原始再帰の操作によって得られる関数 f (x) の方が大きくなります。
たとえば g0 (x) に f (x) の合成操作を n 回繰り返して得られる関数 gn (x) =f (n) について、
n

g1 (x) = f (x) :g1 (1) = f (1), g1 (2) = f (2), ..., g1 (n) = f (n)3.2. 2 重再帰関数

69

g2 (x) = f 2 (x) :..
.

g2 (1) = f 2 (1), g2 (2) = f 2 (2), ..., g2 (n) = f 2 (n)gn (x) = f n (x) :gn (1) = f n (1), gn (2) = f n (2), ..., gn (n) = f n (n)といった表を作ります。このとき関数 f (x) に合成操作を x − 1 回繰り返して得られる関数 gx (x) = f x (x) は、

gx (x) = f x (x) : gx (1) = f (1), gx (2) = f 2 (2), ..., gx (n) = f n (n)と書くことができて、これは上の表において右辺を左上から右下へ対角線
上に拾い上げています。
このように操作の回数を数え上げることは対角線上に拾い上げて関数を作成する操作と対応することから、操作の対角化 (diagonize) であるとしま
す。対角線を拾い上げるところは、カントールの対角線論法と似ています。
さて、アッカーマン関数の漸化式 (3.3) (p.66) において、
f (y) = A(x, y), g(y) =A(x + 1, y) とすると、g(y + 1) = f (g(y)) となり、したがって
g(y) = f y (g(0)) = f y (f (1)) = f y+1 (1)と書けます。すなわち g(y) は関数 f (y) に対して合成を y 回繰り返して 1を代入した関数です。これは対角線ではありませんが関数の合成回数を数え上げています。関数 f n (y) と f y+1 (1) を比べると、y > 10n において

f y+1 (1) = f n [f y−n+1 (1)] > f n [f 0.9y+1 (1)] > f n (y)となるため、合成を有限回繰り返したいかなる関数よりも合成回数を数え上げる関数の方が大きくなります。つまり合成回数を数え上げることで、関数の対角列を取る「対角化」と等しい効果が得られます。
このように f (y) から g(y) を生成する操作は、合成を数え上げる原始再帰操作となるため、A(x, y) に立ち戻って考えると、A(x + 1, y) は A(x, y)に対して原始再帰の操作を 1 回操作した関数です。このことから A(x, y) はA(0, y) に対して原始再帰の操作を x 回繰り返した関数であり、原始再帰の

第3章

70

2 重再帰関数

操作を数え上げています。このように合成作用素を数え上げるような原始再帰を数え上げる 2 重再帰 (double recursion) を、以下で定義します。
✓【定義】2 重再帰

合成作用素を数え上げるような原始再帰操作を数え上げる操作を 2 重✏再帰作用素（操作）とする。

2 重再帰関数 (double recursive function) とは、定義域と値域が非負整数である非負整数個の引数をとる関数で、引数に対し、ゼロ、後者、
射影、合成、原始再帰、2 重再帰の作用素（操作）を有限回適用した関数である。ただしその中で 2 重再帰操作を少なくとも 1 回含むものとする。
✒

射影、合成、原始再帰の操作を n 回繰り返して作られた原始再帰関数 f (x)について、その中で最も関数を増加させる効果が大きい原始再帰の操作を✑

n 回繰り返して作られた関数 A(n, y) は f (x) よりも大きくなります。すな
わち x > n において f (x) < A(x, y) ですから、A(x, y) は f (x) と比べて本質的に大きい、ということになります。
関数 f, g に対して、ある n があって、x > n であれば f (x) > g(x) が成り立つ時、f は g を支配する (dominate) と言います。アッカーマン関数
は、あらゆる原始再帰関数を支配する関数です。また本書では関数 f が関
数 g を支配するときに、関数 f は関数 g よりも「強い」という表現も使います。巨大数を作るためにより強い関数を作る、と表現すると感覚的に分かりやすいためです。
ここで、原始再帰関数から 2 重再帰へという流れは、ハンガリーの数学者ローザ・ペータ (Rózsa Péter, 1905–1977) の再帰関数理論が元となっています。ペータが 1932 年にチューリッヒの国際数学者会議で発表した「再帰関数」(Rekursive Funktionen; ドイツ語) と、1936 年にオスロの国
際数学者会議で発表した「2 段階目の再帰関数について」 (Über rekursive

Funktionen der zweite Stufe) は、現代の再帰関数理論の基礎となっているとされます。そして 1951 年には『再帰関数』(Rekursive Funktionen) という本を発行し、生涯再帰関数に関する論文を発表し続けたことから、ペー
タは再帰関数理論の創始者と言われます。

3.2. 2 重再帰関数

71

Wikipedia の英語版では、double recursion の項にロビンソン3 がペータの定義を元に定義した次のような 2 重再帰関数の定義が書かれています。
関数 G(n, x) が与えられた関数に対して 2 重再帰であるとは、このような再帰的定義がされていることを言います。

1. G(0, x) は与えられている x の関数
2. G(n + 1, 0) は z の関数である G(n, z) と与えられた関数からの代入によって得られる

3. G(n + 1, x + 1) は G(n + 1, x) と G(n, z) と与えられた関数からの代入によって得られる
この 2 重再帰の定義は、先ほど示した 2 重再帰の定義とおおまかに同じですが厳密には一致しません（たとえば、必ずしも原始再帰を数え上げることを要していない）。しかし具体例としてアッカーマン関数と同じ 2 重再帰関数を示して、それがすべての原始再帰関数を支配することを、ロビンソンは示しています。本書における多重再帰の定義はペータの定義と厳密には一致しないかもしれませんが、再帰の段階を重ねることでより複雑な多重再帰関数を作るという本質は失われていないと思います。
数理論理学や計算機科学においては、「原始再帰関数」の次に多重再帰ではなくて再帰関数 (recursive function) すなわち計算可能関数 (computablefunction) を考えることが多いようです。再帰関数の一つの定義は、原始再帰関数で定義されたゼロ関数、後者関数、射影関数、関数合成、原始再帰に、最小化 (minimisation) を加えたものです。
すべての引数について定義されている全域的な再帰関数を全域再帰関数(total recursive function)、全域性の条件を除去したものを部分再帰関数(partial recursive function) と言います。ここでは、参考までに部分再帰関数における最小化の定義を示します。

g : Nn+1 → N を部分再帰関数とします。

g(x1 , . . . , xn , c) = 0 で、かつ各 z < c に対し g(x1 , . . . , xn , z)が定義され 0 以外の値を取る

3 Robinson, R. M. (1948) Recursion and double recursion. Bulletin of the American

Mathematical Society 54: 987–993. doi:10.1090/S0002-9904-1948-09121-2

第3章

72

2 重再帰関数ならば µy(g(x1 . . . xn , y) = 0) = c とし、そのような c が存在しないときµy(g(x1 . . . xn , y) = 0) は定義されないとします。ここで、µ は µ 作用素(minimisation operator) です。このとき、

f (x1 , . . . , xn ) ∼ µy(g(x1 . . . xn , y) = 0)となる関数 f : Nn → N は部分再帰関数になります。ここで、等号 ∼ は、fと g が同じ定義域をもち、その上で両関数の値が一致するときに f ∼ g とします。

通常、アッカーマン関数は「原始再帰関数ではないが再帰関数である」よ
うな関数の例として登場します。そして再帰関数の範囲はとても広く、この本では第 7 章までは再帰関数によって定義される巨大数について取り扱
い、再帰関数の中で関数をどんどん強くしていきます。2 重再帰関数は原始再帰関数よりも強い関数の第 1 歩で、ここからさらに強くしていこうというのが、これからの本書の道筋になります。通常はアッカーマン関数の次に第 8 章の再帰関数を支配するビジービーバー関数あたりまで一気に議論が進んでしまうところを、より丁寧に関数のレベルを高める構造を追いかけるところが、巨大数論ならではということです。

3.3

モーザー数

スタインハウス・モーザー表記4 5 (Steinhaus-Moser notation) として知られる表記があります。MathWorld によれば、スタインハウスの多角形

表記 (Steinhaus’s polygon notation) が定義されたのは 1983 年だとされています。これはスタインハウスが出版した Mathematical Snapshots という本の 1983 年版6 に書かれているためですが、Mathematical Snapshots の1950 年版にはすでに多角形表記はあったようなので、初出がいつなのかははっきりしません。そして、モーザーがどこで多角形表記を公表したのか
4 http://ja.googology.wikia.com/wiki/スタインハウス・モーザー表記

5 MathWorld - Steinhaus-Moser Notation http://mathworld.wolfram.com/SteinhausMoserNotation.html
6 Steinhaus, H. (1983) Mathematical Snapshots. (Galaxy Books) Oxford University
Press.

3.3. モーザー数73

もはっきりしませんが、MathWorld と Wikipedia には Moser の出典はな
しにそのように記録されています。
多角形表記では多角形の中に数を入れる書き方をして、多角形を重ねる
ことと、多角形の辺の数を増やすことで、大きな数を作ります。まず 3 角形の中に x を書くことで、xx を表記します。ここでは x 角形の中の y を

m(x, y) と書きます。
x = m(3, x) = xx = x ↑ x△

次に、4 角形の中の x は、x 重の 3 角形の中に x が入っている数です。すなわち

x = m(4, x) = m(3, m(3, …m(3, x)…))%&'(x 個の mとなります。そして 5 角形の中の x は、x 重の 4 角形の中の x です。
スタインハウスは、5 角形の代わりに円を使ってここで終わりましたが、モーザーはそれを n 角形に拡張しました。これがモーザーの多角形表記です。このとき 5 角形の中の 2 をメガ (mega) として、メガ角形の中の 2 を
モーザー数7 (Moser) としました。
✓【定義】モーザー数

モーザーの多角形表記で、5 角形の中の 2 をメガとする。メガ角形の✏中の 2 をモーザー数とする。
モーザー数 = m(m(5, 2), 2)✒
メガ = m(5, 2) の大きさはm(3, 2) =22 = 4m(4, 2) =m(3, m(3, 2)) = m(3, 4) = 44 = 256m(5, 2) =m(4, m(4, 2)) = m(4, 256)

7 巨大数研究 Wiki - モーザー数 http://ja.googology.wikia.com/wiki/モーザー数

✑

第3章

74

2 重再帰関数となります。ここで m(4, x) の計算は、冪乗の計算を x 回繰り返すので、テトレーションと同じ程度の増加になります。テトレーションの場合には、xyの y の部分だけが大きくなるところ、m(4, x) では x と y が同時に大きくなるので、厳密には m(4, x) の方が増加は速いのですが、x の部分を大きくすることは、y を増加させることと比べるとたいして増加には寄与しない
ので、結局は同程度ということになります。Hypercalc で確認してみます。

x1 = m(3, 256)=x2 = m(3, x1 ) = xx1 1≈

x3 = m(3, x2 ) = xx2 2
x4 = m(3, x3 ) = xx3 3
x5

≈
≈
≈

256256 ≈ 3.231700607153 × 10616 (クラス 2)

10 ↑ (1.992373902865 × 10619 ) (クラス 3)
10 ↑ 10 ↑ 619.29937

10 ↑ 10 ↑ 10 ↑ 619.29937 (クラス 4)
10 ↑ 10 ↑ 10 ↑ 10 ↑ 619.29937 (クラス 5)=

E619.29937#4 (ハイパー E 表記)≈

E619.29937#5 (ハイパー E 表記)

3 ↑の繰り返しも、階乗の繰り返しも、xx の繰り返しも、すべてある段
階以上は 10 ↑の繰り返しと同じで、10 のタワーの右肩の数はびくともし
なくなります。この計算から、

m(4, 256) = x256 ≈ E619.29937#256 (クラス 257)と、メガの大きさが分かります。

m(x, y) は、A(x, y) と同様に増加する 2 重再帰関数です。m(4, x) は↑↑つまりテトレーションに相当するのと同様に、m(5, x) はペンテーションに相当し、m(x, y) は、ハイパー x 演算子、つまり ↑x−2 に相当します。ここで、x を 1 つ増やす効果が原始再帰で、その回数を数え上げることが 2 重再帰なので、たとえば x = 5 と固定したときには原始再帰ですが、x を変数とすると 2 重再帰になります。したがって、メガは原始再帰関数で定義できる数ですが、m(x, y) の x にとても大きな数を代入したモーザー数は、

2 重再帰関数によって定義される数です。

3.4. グラハム数

3.4

75

グラハム数

1971 年に、アメリカの数学者ロナルド・グラハム (Ronald Graham) とブルース・ロートシルト (Bruce Lee Rothschild)8 は「n 次元の超立方体の合計 2n 個の頂点をすべて結び、それを赤と青の二色のいずれかに塗る。
このとき n が充分大きいならば、どのような塗り方をしても、必ず同一平面上にある 4 点でそれらを結ぶ線がすべて同一の色であるものが存在する」という定理（グラハムの定理）を発表しました。この定理の中の「十分大きい n」の 1 つがグラハム数です。 グラハムは論文で、そのような数の例
として、以下のような数を示しました。

F (1, n) =F (m, n) =N≤

2n , F (m, 2) = 4, m ≥ 1, n ≥ 2,

F (m―1, F (m, n―1)), m ≥ 2, n ≥ 3.
F (F (F (F (F (F (F (12, 3), 3), 3), 3), 3), 3), 3)

クヌースが矢印表記を考案したのは 1976 年であり、この論文が執筆された時
点では矢印表記がまだ使えなかったのですが、矢印表記を使うと F (m, n) =2 ↑m x であり f (x) = 2 ↑m 3 としたとき N ≤ f 7 (12) と書くことができます。これは非常に大きい数ですが、その後、アメリカの数学者マーティ
ン・ガードナー (Martin Gardner, 1914-2010) が 1977 年にサイエンティ
フィック・アメリカンにさらに大きな数を上限として発表しました9 。この記事で発表された数がグラハム数10 11 (Graham’s number) として有名になり、1980 年のギネスブック12 に

The highest number ever used in a mathematical proof is abounding value published in 1977 and known as Graham’s
number. It concerns bichromatic hypercubes and is inexpress8 Graham, R. L. and Rothschild, B. L. (1971) Ramsey’s theorem for nparameter sets. Transactions of the American Mathematical Society 159: 257–292.
doi:10.1090/S0002-9947-1971-0284352-8
9 Gardner, M. (1977) Mathematical games:
In which joining sets of points
leads into diverse (and diverting) paths.
Scientific American 237(5), 18–28.
doi:10.1038/scientificamerican1177-18
10 巨大数研究 Wiki - グラハム数 http://ja.googology.wikia.com/wiki/グラハム数
11 『寿司 虚空編』第 1 話 http://comic.pixiv.net/viewer/stories/6994
12 Norris McWhirter et al. (1980) Guiness Book of World Records 1980. p. 193.

第3章

76

2 重再帰関数ible without the special “arrow” notation, devised by Knuthin 1976, extended to 64 layers.
つまり「数学の証明で使われたことのある最大の数」として記録されました。
✓✏【定義】グラハム数

f (x) = 3 ↑x 3 = 3 ↑...↑ 3% &' (
x 個の↑としたときの f 64 (4) を、グラハム数とする。すなわち✒⎫
3 ↑ ............. ↑ 3 ⎪
%
&'
( ⎪
⎪
⎪
3 ↑ .......... ↑ 3 ⎪⎪⎬% &' (..
グラハム数 =
64 段
. (
⎪
% &'
⎪
⎪
⎪
3 ↑ ..... ↑ 3⎪⎪% &' (⎭
3 ↑↑↑↑ 3

これはグラハムが 1971 年に論文で発表した数よりもさらに大きいもの

で、グラハムが未公表の論文に書いていたことがあるようです。グラハム✑が論文で発表した数は、このグラハム数と区別して小グラハム数と呼ばれます。
グラハム数の定義において、f (x) は↑の個数を数え上げる 2 重再帰で、

f 64 (4) の計算は関数 f (x) に対する原始再帰です。したがってグラハム数は
2 重再帰に原始再帰を重ねた数で、2 重再帰です。グラハム数の大きさは、次に紹介するコンウェイのチェーン表記を使うと評価できます。

3.5

コンウェイのチェーン表記

イギリスの数学者ジョン・コンウェイ (John Horton Conway) が『数の13本』に書いたチェーン表記14 (chained arrow notation) の定義を、以下に13 Conway, J. H. and Guy, R. K. (1996) The book of Numbers. Copernicus. 訳書『数の本』丸善出版.
14 巨大数研究 Wiki - チェーン表記 http://ja.googology.wikia.com/wiki/チェーン表記

3.5. コンウェイのチェーン表記
記します。
✓

77

【定義】コンウェイのチェーン表記a, b, c を正の整数、X を 1 つ以上の正の整数のチェーン a → b →...→ c✏とする。
ルール 1: a → b → c = a ↑c b = a ↑ . . . ↑ b% &' (cルール 2: X → 1 = X

ルール 3: X → 1 → a = X

ルール 4: X → (a + 1) → (b + 1) = X → (X → a → (b + 1)) → b
ここで、ルール 1 は次のルール 1’ に変えても同じである。
ルール 1’: a → b = ab✒コンウェイの『数の本』では、大きな数についての話の中でグラハム数✑を紹介した上で、チェーン表記を定義して、チェーン表記で「3 → 3 → 3 →3」はグラハム数よりも大きいと書いています。Aeton の巨大数動画シリー
ズで15 、チェーン表記が詳しく解説されています。
クヌースの矢印表記を自然に拡張するとチェーン表記になります。ルー
ル 1 に矢印表記がすでに使われているため、そのことは一見して分かりにくいのですが、実はルール 1 をルール 1’ に変えても同じです。そのことは次のように証明できます。
【証明】
ルール 1’,2,3,4 が成り立つときに、ルール 1 が成り立つ事を、c に関する帰納法で示す。

(1) c = 1 のとき
a→b→1 =

a → b (ルール 2)=

ab (ルール 1’)

=

a↑b↑1

よって、ルール 1 が成り立つ。
15 ニコニコ動画 - 巨大数動画シリーズ http://www.nicovideo.jp/mylist/35451262

第3章

78

2 重再帰関数(2) c においてルール 1 が成り立つと仮定して、c + 1 でルール 1 が成立することを示す。

a → b → (c + 1)==

a → [a → (b − 1) → (c + 1)] → c (ルール 4)a ↑c [a → (b − 1) → (c + 1)] (ルール 1)

ここで、今度は c + 1 を固定して b に関する帰納法が必要となる。今、計算しているのは a → b → (c + 1) なので、a → (b − 1) → (c + 1) についてはルール 1 が成立しているとする。なお、b = 1 の時は、ルール 1 の両辺が a となるので、成り立っている。

a → b → (c + 1)==a ↑c [a ↑c+1 (b − 1)] (上式の続き、ルール 1)a ↑c [a ↑c a ↑c . . . ↑c a] (矢印表記の定義)
%
&'
(
b−1

=

a ↑c a ↑c . . . ↑c a
%
&'
(
b

=

a ↑c+1 b (矢印表記の定義)

以上で、ルール 1 が成り立つことが示された。

✷

このチェーンは、とても増加率の高い関数です。まず 3 つの変数の場合は、10 → 3 → 2=

10 ↑↑ 3 = 10 ↑ 10 ↑ 10 > グーゴル

10 → 5 → 2=

10 ↑↑ 5 = 10 ↑ 10 ↑ 10 ↑ 10 ↑ 10

3→3→3 =

3 ↑↑↑ 3 = トリトリとなります。クヌースの矢印表記で書くことのできる原始再帰程度の数は、

3 変数チェーンで表記できる程度の大きさとなります。
モーザー数をチェーン表記で近似します。メガ m(x, 2) は↑が x − 2 個連なる効果と同じなので、3 → 3 → x − 2 程度の大きさになります。この見積
もりだと、メガは 3 → 3 → 3、つまりトリトリ程度となって、若干大き過ぎる気もしますが、その程度のおおざっぱな見積もりです。f (x) = 3 → 3 → xとすると f (3) = 3 → 3 → 3 = トリトリなので、メガよりも f (3) の方が大き3.5. コンウェイのチェーン表記

79

い数です。モーザー数の大きさを評価すると、以下のように近似できます。

3→3→2→2 =<3 → 3 → 27
3 → 3 → m(5, 2) ≈ モーザー数<

3 → 3 → f (3)<3 → 3 → f (27)

= 3 → 3 → 3 → 2 (以下の計算を参照)
グラハム数は、f (x) = 3 ↑...↑ 3 = 3 → 3 → x としたときの f 64 (4) です。
% &' (
x 個の↑

3→3→1→2 =3 → 3 → 1 = f (1) = 27

3→3→2→2 =3 → 3 → (3 → 3 → 1) = f 2 (1) = f (27)

3→3→3→2 =3 → 3 → (3 → 3 → 2 → 2) = f 3 (1) = f 2 (27)3→3→n→2 =f n (1) = f n−1 (27)

3 → 3 → 64 → 2 =f 64 (1) < f 64 (4) = グラハム数

3 → 3 → 65 → 2 =f 64 (27) > f 64 (4) = グラハム数

したがって

3 → 3 → 64 → 2 < グラハム数 < 3 → 3 → 65 → 2となります。また

3 → 3 → 3 → 3 = 3 → 3 → (3 → 3 → 2 → 3) → 2 > 3 → 3 → 65 → 2となります。コンウェイは『数の本』でチェーン表記の定義をしてから、3 → 3 → 3 → 3 がグラハム数よりも大きいと詳細な計算手順を示さずに書いています。したがって、チェーン表記は「グラハム数を超えるために作られた表記」とも言えるでしょう。
チェーン表記は 2 重再帰関数です。アッカーマン関数の式

A(x + 1, y + 1) = A(x, A(x + 1, y))

第3章

80

2 重再帰関数について、x = b, y = a として変数の順番を交換し、A(a + 1, b + 1) = A(A(a, b + 1), b)
さらに定数項 X を加えるとA(X, a + 1, b + 1) = A(X, A(a, b + 1), b)となってチェーンのルール 4

X → (a + 1) → (b + 1) = X → (X → a → (b + 1)) → bと一致することから、チェーンの漸化式はアッカーマンと同じ 2 重再帰の式です。すなわち X → a → b の右端を 1 加える X → a → b + 1 が原始再帰で、それを数え上げることが 2 重再帰となっています。したがってチェー
ン表記は 2 重再帰をたくさん繰り返す 2 重再帰関数である、ということになります。チェーンでは、矢印を 1 つ伸ばすこと、すなわち変数を 1 つ増
やすことで、基本 2 重再帰操作を 1 回することになります。変数が n 個のチェーンでは、基本 2 重再帰操作が n − 2 回行われます。

81

第

4章
多重再帰関数

原始再帰関数よりも強い 2 重再帰関数を定義できたように、2 重再帰関数よりも強い 3 重再帰関数、さらに強い 4 重再帰関数を作れば、もっと強い関数を定義することができるでしょう。本章では、多重再帰関数によって、関数をどんどん強めていきます。
まずは、原始再帰、2 重再帰の定義を拡張して、n 重の多重再帰関数を次のように定義します。
✓【定義】多重再帰n − 1 重再帰操作を数え上げる操作を n 重再帰作用素（操作）とする。

✏

n 重の多重再帰関数とは、定義域と値域が非負整数である非負整数個の引数をとる関数で、引数に対し、ゼロ、後者、射影、合成、原始再帰、2 重再帰、3 重再帰、...、n 重再帰の作用素（操作）を有限回適用した関数である。ただし、その中で n 重再帰操作を少なくとも 1 回含
むものとする。
✒

4.1

多変数アッカーマン関数

巨大数探索スレッド1 その 7 で、たろうによって、アッカーマン関数の拡張である多変数アッカーマン関数 2 が以下のように定義されました。
1 http://ja.googology.wikia.com/wiki/巨大数探索スレッド

2 http://ja.googology.wikia.com/wiki/多変数アッカーマン関数✑

第 4 章 多重再帰関数

82✓【定義】多変数アッカーマン関数

n 個の非負整数を引数として以下のように定義される関数 A を n 変数
アッカーマン関数とする。

A(□, a)=a+1

A(Ｘ, b + 1, 0, □, a)=A(Ｘ, b, a, □, a)A(Ｘ, b + 1, 0)=

A(Ｘ, b, 1)

A(Ｘ, b + 1, a + 1)=

A(Ｘ, b, A(Ｘ, b + 1, a))✏

ただし、a, b : 0 以上の整数, □ : 0 個以上の 0, Ｘ : 0 個以上の 0 以上
の整数
✒

✑

最後の 2 式により、右から 2 個目の変数は原始再帰、その数え上げが 2

重再帰となります。2 式目が多重再帰を定義する肝となります。□に含まれる 0 の数を n とすると、b の項は右から n + 3 番目となります。n = 0 の時は、 次に示す 3 変数アッカーマンの式と一致します。つまり右から 3 変
数目の b を 1 つ増やす操作が、右から 2 変数目に変数 a を用いた 2 重再帰の操作となり、右から 3 変数目が 2 重再帰を数え上げる 3 重再帰となります。このようにして、右から n + 2 番目の項が n + 1 重再帰であり、右から

n + 3 番目の b の項は、右から n + 2 番目の n + 1 重再帰を数え上げる (変数 a 回の操作をする) ことで n + 2 重再帰の操作となります。したがって n
変数アッカーマン関数の 1 番左の項は、n − 1 重再帰となり、それを変数に持つ n 変数アッカーマン関数は n 重再帰関数となります。

多変数アッカーマン関数の例として、3 重再帰の 3 変数アッカーマン関数を以下のように書くことができます。

4.1. 多変数アッカーマン関数✓

83【定義】3 変数アッカーマン関数

非負整数 x, y, z に対し、以下のように定義される関数 A(x, y, z) を 3 変✏

数アッカーマン関数とする。

A(0, 0, z) =z+1

A(x + 1, 0, z) =A(x, z, z)

A(x, y + 1, 0)=

A(x, y, 1)

A(x, y + 1, z + 1)=

A(x, y, A(x, y + 1, z))

ただし後述するように、これはアッカーマンオリジナルの 3 変数アッカーマン関数とは異なる。
✒

この 3 変数アッカーマン関数が、2 重再帰を数え上げる 3 重再帰操作を含み、したがってどんな 2 重再帰関数よりも大きい 3 重再帰関数であるこ✑とを示します。

2 変数アッカーマンの定義と見比べることにより、A(0, y, z) = A(y, z)
が成り立ちます。また、Ax (y, z) = A(x, y, z) とすると、

Ax (0, z)=Ax (y + 1, 0) =Ax (y + 1, z + 1)=

Ax−1 (z, z)
Ax (y, 1)
Ax (y, Ax (y + 1, z))となり、Ax−1 (z, z) から Ax (z, z) を生成する操作は、2 重再帰操作となります。

したがって、A(x, 0, z) = Ax (0, z) = Ax−1 (z, z) は、関数 A(0, 0, z) = z +1

に対して 2 重再帰操作を x 回繰り返した関数であり、これは 2 重再帰操作を数え上げる 3 重再帰関数です。

A(x, y, z) において、x を 1 つ増やすことは、2 重再帰操作をすることなので、チェーン表記においてチェーンを 1 つ伸ばすことに相当します。そのことを確かめるために、(a + 1) →…(a + 1) → (z + 1) → (y + 1) と a + 1
が x 個続くチェーン fa (x, y, z) について考えます。

第 4 章 多重再帰関数

84
チェーンの定義から

fa (0, y, z) =(z + 1)y+1

fa (x + 1, 0, z) =fa (x, z, a)fa (x + 1, y, 0)=fa (x, 0, a)fa (x, y + 1, z + 1)=

fa (x, y, fa (x, y + 1, z))となります。fa (x, y, z) と A(x, y, z) を比べると、若干異なるものの、同程度の増加度の関数となることが分かります。したがってチェーンを 1 個伸ばす (変数の数を増やす) ことは、A(x, y, z) において x を 1 つ増やすことに相当します。そしてチェーン長が変数化された fa (x, y, z) は A(x, y, z) と同様に 3 重再帰です。

より正確には、x = 1, y > 1 または x > 1, y + z > 0 のとき、A(x, y, z) < (x + 1 個の 3 のチェーン) → (z + 2) → (y + 1) < A(x, y, z + 1)が成立することが帰納法で証明されています3 。たとえば x = 3, y = 2, z = 1とすると 3 → 3 → 3 → 3 → 3 → 3 は A(3, 2, 1) よりも大きく A(3, 2, 2) よりも小さいということになります。

4.2

多重再帰に見えてそうでない関数

2 重再帰も多重再帰の一種ですが、この節に限って 3 重再帰以上を多重
再帰とします。チェーンの定義は一見すると多重再帰に見えますが、2 重再帰の章で示したように、2 重再帰操作を繰り返した 2 重再帰関数です。一方、前節で示したように、適切に n 変数アッカーマン関数を定義することで、n 重再帰関数を作ることができます。ここで n 重再帰関数はいかなるn − 1 重再帰関数よりも大きい、という明確な強弱関係を持ちます。
アッカーマン関数のアッカーマンによるオリジナルの定義は

A(x, y, 0) =x+y

A(x, 0, 1) =0

3 アッカーマンチェーン定理 http://gyafun.jp/ln/ackchain.html

4.2. 多重再帰に見えてそうでない関数
A(x, 0, 2)=

1

A(x, 0, z) =x

A(x, y, z) =A(x, A(x, y − 1, z), z − 1)85というもので、3 変数でした。これに対して、様々な 2 変数バージョンが考えられて、その中で Peter and Robinson が前章で紹介した形の 2 変数アッカーマン関数を作成しました。アッカーマンが考えたオリジナルの 3 変数
アッカーマン関数は、前章の 2 変数アッカーマン関数と同じ程度の増加率を持つ 2 重再帰関数です。通常、3 変数のアッカーマン関数と言えばこのアッカーマンのオリジナルの定義を意味しますが、本書ではたろうが定義した多変数アッカーマン関数の定義にしたがった、3 重再帰のアッカーマン関数を 3 変数アッカーマン関数とします。
チェーン表記のように、一見、多重再帰のように見えてそうでない関数には、他にはたとえばこのような関数があります。

A(0, 0, z) =z+1

A(0, y + 1, 0)=

A(0, y, 1)

A(0, y + 1, z + 1)=

A(0, y, A(x, y + 1, z))A(x + 1, y + 1, z + 1)=

A(x, A(x + 1, y, z + 1), A(x + 1, y, z + 1))

この式は、次のように計算されます。

A(x + 1, y + 1, z + 1)=

A(x, A(x + 1, y, z + 1), A(x + 1, y, z + 1))=

A(x − 1, A(x, A(x + 1, y, z + 1) − 1, A(x + 1, y, z + 1)),A(x, A(x + 1, y, z + 1) − 1, A(x + 1, y, z + 1)))

=

...

=

A(0, A2, A2) (A2 は x, y, z の 2 重再帰関数)=

A(A2, A2)

このように、A(x, y, z) の計算は 2 重再帰です。3 項漸化式において、このように最初に x を減らして、次に y を減らすという計算方法では、2 重再第 4 章 多重再帰関数

86

帰どまりです。一方、3 変数アッカーマン関数では、最初に y を減らして、

y が 0 に到達してはじめて x を減らすことができます。そのために、x を 1減らす計算が y を減らす計算を数え上げることができます。この計算順序の違いが、2 重再帰か 3 重再帰かの差を生んでいます。このことが多重再帰関数の強さを理解する上では重要です。

4.3

拡張チェーン表記

アメリカの IT 技術者ピーター・ハーフォード4 (Peter Hurford) は、チェー
ン表記の矢印に下付き文字をつけて

a →c b = a →c−1 a →c−1 . . . →c−1 a →c−1 a%&'(b 個の→c−1というルールを加えた拡張チェーン表記5 (Peter Hurford’s extensions ofchained arrow notation) を考案して、2011 年にブログで公開しました。そのブログ記事は消えていますが、次のような定義でした。
【定義】拡張チェーン表記a, b, c を正の整数、X を 1 つ以上の正の整数の →c チェーン a1 →c
a2 →c ... →c an とする。拡張チェーン表記は、以下の 5 つの規則によって計算する。ここで→の下につく数はチェーンの種類をあらわし、

1 通りでなければならない。

a →1 b=aba →c b=a →c−1 a →c−1 . . . →c−1 a (c > 1)%&'(

X →c 1 =4 http://peterhurford.com/

X

b 個の→c−15 巨大数研究 Wiki - チェーン表記 http://ja.googology.wikia.com/wiki/チェーン表記

4.4. ふぃっしゅ数

87

X →c 1 →c a=

X

X →c (a + 1) →c (b + 1)=

X →c (X →c a →c (b + 1)) →c bすなわち 3 変数以上のときには、必ず同じ種類の→なのでそのままチェーン表記の規則で計算をして、2 変数になったときに、2 番目の規則によって→の下の数が 1 つ減ります。この拡張チェーン表記を使うと、3 →2 3 =3→3→3→3

3 →2 4 =3→3→3→3→3

3 →2 5 =3→3→3→3→3→3のように、3 →2 x が x + 1 変数のチェーン表記に相当する関数となります。したがって 3 →2 x は 3 重再帰です。

→2 のチェーンを伸ばすことは、チェーンを伸ばすという 2 重再帰操作に相当するため、→2 の多変数チェーンは 3 重再帰 1 回+2 重再帰たくさん、という関数になります。3 →3 x は、x + 1 変数の →2 チェーンなので、3

重再帰 2 回分です。3 →n x は、3 重再帰を n − 1 回繰り返した 3 重再帰関数で、3 →x x は 4 重再帰関数となります。

4.4

ふぃっしゅ数ここから著者が考案したふぃっしゅ数6 (Fish number) の説明に入ります。はじめにことわっておきますが、ふぃっしゅ数の定義はかなりややこ
しくて、多くの人が「定義が理解できない」と悩んでいます。著者のオリジナリティはここにあるので本書では詳しく解説しますが、ふぃっしゅ数
以外にも巨大数論の面白さはいろいろとありますので、ふぃっしゅ数の話を飛ばして次の章に進んでいただいてもいっこうに構いません。

6 http://ja.googology.wikia.com/wiki/ふぃっしゅ数

第 4 章 多重再帰関数

88

4.4.1

ふぃっしゅ数バージョン 1

まずはふぃっしゅ数を考案した経緯から説明します。そもそものきっか
けは、2ch 掲示板の巨大数探索スレッド7 というスレッドでの、どれだけ大きな数を考えることができるか、というお遊びでした。グラハム数がとにかく巨大な数であるということから、グラハム数を使って以下の様な数が定義されました。

161 名前：１３２人目の素数さん ：02/06/20 22:25>> 156

じゃあグラハム数でいってみよう

グラハム数の定義はご存知だと思うが 3 ↑↑↑↑ 3（これがどれだけ超巨大かはグラハム数スレ参照）の数だけ 3 と 3 の間に↑が挟まった数を 1 段階として、2 段階は 1 段階の数だけ 3 と3 の間に↑がある数と繰り返した 63 段階目の数がグラハム数と定義されてる。
この前段階の数だけ↑が挟まる数が次の段階という 63 回の変換の 1 回をＧ変換と名付ける。
Ｎ０１

グラハム数回だけＧ変換した数回変換した

数回変換した〜この繰り返しを
Ｎ０２

グラハム数回だけＧ変換した数回変換した

数回変換した〜この繰り返しを
Ｎ０３

グラハム数回だけＧ変換した数回変換した

数回変換した〜この繰り返しを
Ｎ０４

グラハム数回だけＧ変換した数回変換した

数回変換した〜この繰り返しをとやっていって、Ｎｏがグラハム数回まで到達したら終り‥‥だけだと面白くないので（中略）

以上のように延々繰り返してＮＯの種類がグラハ

ム数種類に到達した時の数
7 http://ja.googology.wikia.com/wiki/巨大数探索スレッド

4.4. ふぃっしゅ数89

これに対して、このように大きな数を定義するプロセスを追うことで、グ
ラハム数を定義の中で用いずに、さらにグラハム数よりも大きな数、上記の数よりも大きな数を定義しよう、という目的で、以下のような考察をしました (2ch 過去ログ8 の 317-319 の発言)。
これまでの書き込みで「いかにして大きな数を作るか」というプロセスを一般化すると、大きな数と増加の程度が大きい関数を生み出していくプロセスだと表現できる。
たとえば、「m という数に f (x) という変換を n 回繰り返す」という表現をするときに、m, f (x), n に使えるのは今までに定義された数と関数のみ。そこで、数と関数を双方ともに帰納的に定義していくプロセスを追っていくことにする。
そこで、自然数 m と関数 f (x) のペアから、自然数 n と関数

g(x) のペアを生み出す変換（写像）をS : [m, f (x)] → [n, g(x)]と表記することにすると、たとえば３↑↑↑↑３は、自然数４と、f (x) = ３（↑が x 個）３から f (4) とあらわされる。３↑↑↑↑３個だけ↑がはさまった数、は f (f (4)) である。したがって、これを 64 回繰り返した数は f 64 (4) となり、この操作
は g(x) = f 64 (x) という関数を自然数 64 と関数 f (x) から生み出す操作にほかならないため、

S : [m, f (x)] → [f m (m), f m (x)]と書くと、m = 64, f (x) からグラハム数よりも大きい f 64 (64)という数が生み出される。
これまでのスレッドにかかれた数は、いろいろなタイプの S
変換を数回、>> 161 でもせいぜい 10 回程度行っているにすぎない。S 変換については、上記の S 変換よりも、Ackermann タ
イプの S 変換の方がより関数を増加させる。
8 2ch 過去ログ http://www.geocities.co.jp/Technopolis/9946/log/ln023.html

第 4 章 多重再帰関数

90

そこで、これから先は「いかにしてより大きな数、関数を生み出す S 変換を作り出すか（これを「より大きいＳ変換」と呼ぶ」といった考察をする。
その第１段階として、Ackermann 関数にならい、

B(0, n)=B(m + 1, 0) =f (n)B(m, 1)B(m + 1, n + 1)=

B(m, B(m + 1, n))

g(x)

=

B(x, x)としたときに、S : [m, f (x)] → [g(m), g(x)]とする。少なくとも、これ以上に大きいＳ変換はこれまでにあらわれていない。したがって、たとえば [3, f (x) = x + 1] にこの S 変換を 10 回ほど繰り返せば、ゆうに >> 161 を越える。
では、この S 変換をさらに大きくするにはどうすれば良いか。
それには、S 変換を f (m) 回繰り返した変換を S2 変換とすれば良い。すなわち、m, f (x), S からさらに大きな S2 変換を生み出すことができる。このプロセスを、

SS : [m, f (x), S] → [n, g(x), S2]
ただし g(x) = S2[m, f (x)], n = g(m)という SS 変換で記述することにする。

[3, x + 1, S] に SS 変換を 1 回かけると、S 変換を 4 回くりかえす変換が得られ、さらにもう 1 回かけると、S 変換を大変な数繰り返した変換が得られるため、２回くりかえしただけで、すでにこのスレッドに登場したいかなる有限の数よりも大きな数が得られる。

4.4. ふぃっしゅ数

91

この発言の直後に、ふぃっしゅ数が定義されています。このように、数と関数から数と関数を生成する「S 変換」という概念を導入する事で、巨大数を生み出そうとしたのがふぃっしゅ数です。これがふぃっしゅ数の定義
です9 。
【定義】ふぃっしゅ数バージョン 1

1. 自然数と関数のペアから、自然数と関数のペアへの写像 S（S 変換）を以下で定義する。

S(m, f (x)) = (g(m), g(x))
ただし g(x) は以下で与えられる。

B(0, n)=B(m + 1, 0) =f (n)B(m, 1)B(m + 1, n + 1)=

B(m, B(m + 1, n))

g(x)

=

B(x, x)

2. 自然数、関数、変換の組から同様の組を生み出す写像 SS（SS 変換）を以下で定義する。

SS(m, f, S) = (S f (m) (m, f ), S f (m) )ここで右辺は ((自然数, 関数), 変換) の形をしているが、これを(自然数, 関数, 変換) の 3 つ組と同一視する。
3. 3 つ組 (m0 , f0 , S0 ) を m0 = 3, f0 (x) = x + 1, S0 は S 変換とす
るとき、

SS 63 (m0 , f0 , S0 )の第 1 成分をふぃっしゅ数バージョン 1、第 2 成分をふぃっしゅ
関数バージョン 1 と定義する。

9 http://ja.googology.wikia.com/wiki/ふぃっしゅ数バージョン 1

第 4 章 多重再帰関数

92

ここから先、色々なバージョンのふぃっしゅ数が登場することになるた
め、このふぃっしゅ数を「ふぃっしゅ数バージョン 1」と名付けました。またふぃっしゅ数バージョン 1 を F1 、ふぃっしゅ関数バージョン 1 を F1 (x)とします。一般にふぃっしゅ数バージョン N を FN 、ふぃっしゅ関数バー

ジョン N を FN (x) と表記します。ここで、なぜ 63 という数が使われているかとよく聞かれますが、グラハム数は 3 ↑↑↑↑ 3 を 0 段階目として「63段階目」という説明がされていたことから、グラハム数をまねて 63 という数を使いました。
また当初は

S : [m, f (x)]→[g(m), g(x)]SS : [m, f (x), S]→[n, g(x), S2]

S2=

S f (m)S2 : [m, f (x)]→[n, g(x)]のように表記していましたが、ミカヅキモが表記を分かりやすく整理しま
した10 。『寿司 虚空編』では、こちらの表記が使われています。どちらの表
記でも同じ定義です。
その後ふぃっしゅ数の大きさが計算されました。同スレッドの 329,331,377-

379 の計算内容を転記します。
[3, f (x) = x + 1] にＳ変換を 1 回すると、
B(0, n)=B(m + 1, 0) =n+1
B(m, 1)B(m + 1, n + 1)=

B(m, B(m + 1, n))

g(x)

=

B(x, x)となるので、B(m, n) はアッカーマン関数と一致し、g(x) =A(x, x) となるため、
S : [3, x + 1] → [A(3, 3), A(x, x)]
10 http://ja.googology.wikia.com/wiki/ユーザーブログ:Mikadukim/SS 変換の明示的な表記について4.4. ふぃっしゅ数

93

となる。

A(3, 3) = 61 なので11 、Ｓ変換 1 回ではまだたいした大きさにはならない。
Ｓ変換の 2 回目。今度は、

B(0, n)=A(n, n)B(m + 1, 0) =B(m, 1)B(m + 1, n + 1)=

B(m, B(m + 1, n))

g(x)

=

B(x, x)となるが、この g(x) 関数はとてつもない関数になる。

g(1) =

B(1, 1) = B(0, B(1, 0))=

B(0, B(0, 1)) = B(0, A(1, 1))=

B(0, 3) = A(3, 3) = 61

g(2) =

B(2, 2) = B(1, B(2, 1))=

B(1, B(1, B(2, 0))) = B(1, B(1, B(1, 1)))=

B(1, B(1, 61))=

B(1, B(0, B(1, 60)))

このあたりで、すでに書き下すことが困難になってくる。

B(1, 1) =61

B(1, 2) =A(61, 61)

B(1, 3) =A(A(61, 61), A(61, 61))という調子で関数が増えていくので、B(1, 61) はとんでもない数。g(2) = B(1, B(1, 61)) なので、g(2) ですでにグラハム数を超えているように思う。
11 『寿司

虚空編』第 2 話 http://comic.pixiv.net/viewer/stories/6995

第 4 章 多重再帰関数

94g(2) ですでにグラハム数を超えてしまい、さらに g(x) は x が増えるにつれてものすごい勢いで増えるので、g(61) の大きさ
は想像を絶する。Ｓ変換 2 回目にして、g(61) というとんでもない数が得られることになる。
Ｓ変換の３回目はB(0, n)=B(m + 1, 0) =B(m + 1, n + 1)=

gg(x) =

g(n)B(m, 1)B(m, B(m + 1, n))B(x, x)としたときの gg(x) となるので、

gg(1)

=

B(1, 1) = B(0, B(1, 0))=

B(0, B(0, 1)) = B(0, g(1))=

B(0, 61) = g(61)=B(2, 2) = B(1, B(2, 1))=

B(1, B(1, B(2, 0))) = B(1, B(1, B(1, 1)))=

B(1, g(61))

B(1, 1)=g(61)B(1, 2)=g(g(61))

B(1, 3)=g(g(g(61)))gg(2)つまり、gg(2) は 61 を g(x) に代入して…と g(61) 回繰り返した数。この調子で gg(3), gg(4)... と増えていき、gg(g(61)) が S 変
換を３回繰り返した数。

SS 変換２回目は、SS 変換１回によって得られた m, f (x), S
に対して S f (m) とする、すなわち S 変換（つまり最初の S 変換
を４回繰り返す変換）を f (m) 回繰り返す。ここで、f (m) 回と4.4. ふぃっしゅ数

95

は SS 変換１回、つまり S 変換４回によって得られる大きな数

m を、これまた S 変換４回によって得られる増加率の大きな関
数 f (x) に代入した数なので、とてつもなく大きな数。その数だ
け、新 S 変換を繰り返す、ということ。
つまり、大きな数と関数から大きな数と関数を生み出し、その生み出された大きな数と関数から大きな S 変換を生み出し、
大きな S 変換がさらにとてつもなく大きな数と関数を生み出す、とお互いがお互いを増幅させていく。
この計算に対して、巨大数探索スレッドでは以下の様な反応となりました。

380 名前：１３２人目の素数さん ：02/07/02 19:47
うぎゃーーーーーーーーーーーーーっ！！！
でっ、でけえ！！！
フィッシュ数は文句なし世界一、
宇宙一の数だ！！！！！！
グラハム数とフィッシュ数を比べると、グラハム数は
限りなく０に近いお疲れ様でした、

386 名前：１３２人目の素数さん ：02/07/02 20:25
ていうか
現実にあるものを文字にするだけの数字とかよりフィッシュ数のこと考えろ！
もうすごいから。すごいしヤバイから。

388 名前：１３２人目の素数さん ：02/07/02 20:32
小・中学生の頃、講談社のブルーバックスの宇宙や物理の本で全宇宙のニュートリノの数とか光子の数が 10 ＾ 88
とかいう数字を見てぶったまげてたのが、なんかカワイク思えるよ96

第 4 章 多重再帰関数

単に「とても大きな数を定義した」という以上の何者でもないのですが、これがこのように感銘を呼ぶところが巨大数の不思議な魅力です。
巨大数探索スレッドでは、このふぃっしゅ数を具体的に計算しようとして、それがいかに巨大な数になるか、といったことで盛り上がりを見せました12 。それが巨大数探求の道へのスタートでした。

Code Ass (@aycabta) 13 が、ふぃっしゅ数バージョン 1 の Ruby による計算プログラム14 を作成しました。ふぃっしゅ数は大きすぎるので、メモ
リや時間の制限で実際には計算できませんが、プログラムを読むことで計算の手順を確認することができます。Code Ass は、他にもアッカーマン関
数15 と矢印表記16 とチェーン表記17 の計算プログラムを作成しました。
ふぃっしゅ数 F1 の S 変換は、関数 f (x) に 2 重再帰の操作をして関数g(x) を生成する操作です。F1 は関数に 2 重再帰の操作を数多く繰り返す

ことによって、より大きな関数を生成するしくみである、と表現できます。
したがって 2 重再帰を 2 回施した時点で、2 重再帰を 1 回に原始再帰を繰り返したグラハム数と比べて比較にならないほど大きな関数が生成されることとなります。ただしこの議論は厳密ではありません。なぜならば 2 重
再帰の操作は何度繰り返しても 2 重再帰のままなので、2 重再帰の回数では生成される関数の大小を比較できないからです。ここではグラハム数生成に使われている操作も F1 の S 変換も同等のアッカーマン的な 2 重再帰操作であるため、このような比較が可能となっています。

F1 の定義において、f (x) から g(x) を生成する S 変換の漸化式は、f (z) =Ax (z, z)、g(z) = Ax (z, z) とすると、3 変数アッカーマンの式と一致します。
このことから、3 変数アッカーマンにおける 2 重再帰操作と F1 の定義における 2 重再帰操作は、同じであることが分かります。F1 の定義において、[3, x + 1] に S 変換を i 回繰り返して得られた関数を Si (x) とすると、S 変
12 2ch 過去ログ http://www.geocities.co.jp/Technopolis/9946/log/ln024.html
13 Twitter @aycabta https://twitter.com/aycabta
14 https://github.com/aycabta/fish-number
15 https://github.com/aycabta/ackermann
16 https://github.com/aycabta/arrow-notation
17 https://github.com/aycabta/chained-arrow-notation

4.4. ふぃっしゅ数

97

換の式は

Si+1 (0, n)=

Si (n, n)

Si (m + 1, 0)=

Si (m, 1)

Si (m + 1, n + 1)=

Si (m, Si (m + 1, n))と書くことができ、3 変数アッカーマンの式と完全に一致します。したがって、F1 の S 変換 i 回後の計算において、B(m, n) = A(i, m.n) となります。S 変換を 1 回繰り返した後の g(2) がグラハム数を超えるという計算
は、A(1, 2, 2) がグラハム数よりも大きいことを計算したことになります。
実際にA(1, 1, 0)=

A(1, 0, 1) = A(1, 1) = 3

A(1, 1, 1)=

A(1, 0, 3) = A(3, 3) = 61

A(1, 1, 2)=

A(1, 0, 61) = A(61, 61) > 3 → 3 → 2 → 2 + 2

A(1, 1, 3)>

A(1, 0, f 2 (1) + 2) > 3 → 3 → 3 → 2 + 2

A(1, 1, x)>

3→3→x→2

A(1, 1, 65)>

3 → 3 → 65 → 2 > グラハム数と、A(1, 1, 65) でグラハム数を超えます。

A(1, 2, 0)=

A(1, 1, 1) = 61

A(1, 2, 1)=

A(1, 1, 61) > 3 → 3 → 61 → 2

A(1, 2, 2)> A(1, 1, 3 → 3 → 61 → 2)>

3 → 3 → (3 → 3 → 61 → 2) → 2となるため、A(1, 2, 2) はグラハム数よりもはるかに大きな数です。
次に F1 を 4 変数アッカーマン関数と比較します。まずは 4 変数アッカー

マンを小さい方から順番に計算してみます。

A(1, 0, 1, 0)=

A(1, 0, 0, 1) = A(1, 0, 1) = A(1, 1) = 3

A(1, 0, 1, 1)=

A(1, 0, 0, (A(1, 0, 1, 0))

第 4 章 多重再帰関数

98=

A(1, 0, 0, 3) = A(3, 0, 3) = A(2, 3, 3)

よって、A(1, 0, 1, 1) は 2 重再帰です。

A(1, 0, 1, 2)=

A(1, 0, 0, A(1, 0, 1, 1))=

A(1, 0, 0, A(2, 3, 3))=(A(2, 3, 3), 0, (2, 3, 3))

A(1, 0, 1, 3) =A(1, 0, 0, A(1, 0, 1, 2))

A(1, 0, 1, n + 1)=

A(A(1, 0, 1, 2), 0, A(1, 0, 1, 2))=

A(1, 0, 0, A(1, 0, 1, n))=A(A(1, 0, 1, n), 0, A(1, 0, 1, n))A(1, 0, 1, 2) は、2 重再帰を A(2, 3, 3) 回繰り返した数です。F1 の定義では、
SS 変換が S 変換で生じた 2 重再帰の数の回数だけ 2 重再帰を繰り返しているので、これに相当します。モーザー数では、原始再帰を原始再帰の回数(メガ回）繰り返すことで 2 重再帰の数ができました。それと同じことで、
2 重再帰を 2 重再帰の回数繰り返しているので、ここから 3 重再帰に入ると考えます。

SS 変換の回数を重ねるごとに、その回数だけ S 変換を繰り返すので、SS
変換は A(1, 0, 1, n) の n を 1 増やすことに相当します。実際には、SS 変換の指数部が m ではなくて f (m) になっているので、もっと複雑に見えますが、m から f (m) へと増やすことは原始再帰なので、2 重再帰から見ると無視できてしまいます。

SS 変換の 1 回目は S 変換 4 回なので、2 重再帰を 2 回繰り返しているA(1, 0, 1, 1) よりは大きく、その回数以上 S 変換を繰り返した SS 変換の 2
回目は、A(1, 0, 1, 2) よりは大きく、…といったことで、SS 変換を 63 回繰
り返した F1 は、A(1, 0, 1, 63) よりは大きいと分かります。
さらに計算を続けます。

A(1, 0, 2, 0)=

A(1, 0, 1, 1) = A(2, 3, 3)

A(1, 0, 2, 1)=

A(1, 0, 1, (A(1, 0, 2, 0)))

4.4. ふぃっしゅ数

99=

A(1, 0, 1, (A(2, 3, 3)))A(1, 0, 2, 1) は、S 変換を繰り返す SS 変換を A(2, 3, 3) 繰り返した数です。
これは、F1 を超えています。SSS 変換を定義すれば A(1, 0, 2, 1) になり、SSSS 変換は A(1, 0, 3, 1) になり…といった感じになることでしょう。
さらに大きい A(1, 1, 1, 1) を計算してみます。

A(1, 1, 1, 1)=

A(1, 1, 0, A(1, 1, 1, 0))=

A(1, 1, 0, A(1, 1, 0, 1))=

A(1, 1, 0, A(1, 0, 1, 1))=

A(1, 1, 0, A(2, 3, 3))=

A(1, 0, A(2, 3, 3), A(2, 3, 3))

これは、SSSS…と、S の文字数を A(2, 3, 3) 回繰り返した変換によって作られる数なので、F1 の定義をいくら拡張しても追いつかない数です。
以上の計算から、

A(1, 0, 1, 63) < F1 < A(1, 0, 2, 1) < A(1, 1, 1, 1)
が F1 の大きさになります。

巨大数探索スレッドでは、S 変換がチェーンを 1 つ延長する効果を持つ

ことが、比較的早い段階で検証されていました18 。

87 名前：名無しのような物体 ◆ W7plq.175s ：02/10/05 15:41
さて、前スレにも書きましたが、3 → a − 2 → b <2 → a → b < 3 → a − 1 → b であることが確認できました。一応帰納法で証明しましたが読みたいですか？
さらに、これを用いてB(x, y)=≈(2 → (y + 3) → (x − 2)) − 3

3 → (y + 1〜2) → (x − 2)

18 巨大数探索スレッド 3 の過去ログ http://www.geocities.co.jp/Technopolis/9946/
log/ln032.html

第 4 章 多重再帰関数

100
C(x, y)≈D(x, y)≈3 → 3 → (y + 1〜2) → (x + 1)
3 → 3 → 3 → (y + 1〜2) → (x + 1)まで計算できました。どうやらＳ変換 1 回で 3 → がひとつ延長されるようです。これでいよいよふぃっ
しゅ数が (近似的に) 求められるのか？

Aeton は、ふぃっしゅ数バージョン 1 を拡張チェーン表記でこのように近似しました19 20 。

5(→ 2)64(→ 2)2 < F1 < 6(→ 2)64(→ 2)2

4.4.2

ふぃっしゅ数バージョン 2

ふぃっしゅ数バージョン 2 21 は以下のように定義されます22 。
【定義】ふぃっしゅ数バージョン 2

1. 自然数と関数のペアから、自然数と関数のペアへの写像 S（S 変換）を以下で定義する。

S(m, f (x)) = (g(m), g(x))
ただし g(x) は以下で与えられる。

B(0, n)=B(m + 1, 0) =f (n)B(m, 1)B(m + 1, n + 1)=

B(m, B(m + 1, n))

g(x)

=

B(x, x)関数のみに着目して Sf (x) = g(x) と書くこともできる。
19 Togetter: ふぃっしゅ数の計算 http://togetter.com/li/568230

20 Twitter @aetonal (2015 年 9 月 14 日) https://twitter.com/aetonal/status/
643407430471282688
21 http://ja.googology.wikia.com/wiki/ふぃっしゅ数バージョン 2
22 当 初 の 定 義 と 微 妙 に 異 な る
https://twitter.com/mikadukim_math/status/
887305561212993537

4.4. ふぃっしゅ数

101

2. 変換 S に対して、新たな変換 S ∗ を次で定義する。
(S ∗ f )(x) = (S x f )(x)自然数、関数、変換の組から同様の組を生み出す写像 SS（SS 変換）を以下で定義する。

SS(m, f, S) = ((S f (m) f )(m), (S f (m) )∗ f, S f (m) )3. 3 つ組 (m0 , f0 , S0 ) を m0 = 3, f0 (x) = x + 1, S0 は S 変換とす
るとき、

SS 63 (m0 , f0 , S0 )の第 1 成分をふぃっしゅ数バージョン 2 (F2 )、第 2 成分をふぃっ
しゅ関数バージョン 2 (F2 (x)) と定義する。

F2 の定義はややこしく、F3 の定義の方がすっきりしているので、F3 で理解する方が良いと思います。F2 は、F3 が生み出される前のあまり洗練されていない定義です。

F2 の定義は F1 と似ていますが、SS 変換の定義で変換 S ∗ を用いて S 変

換を数え上げています。すなわち、(S ∗ f )(x) = (S x f )(x)によって生成される関数 (S ∗ f )(x) は、(S ∗ f )(1) は f (x) に S 変換を 1 回の Sf (x) に 1 を代入した Sf (1)(S ∗ f )(2) は f (x) に S 変換を 2 回の S 2 f (x) に 2 を代入した S 2 f (2)(S ∗ f )(3) は f (x) に S 変換を 3 回の S 3 f (x) に 3 を代入した S 3 f (3)(S ∗ f )(n) は f (x) に S 変換を n 回の S n f (x) に n を代入した S n f (n)というような関数です。この関数 (S ∗ f )(x) は、関数 f (x) に S 変換を有限回 (N 回) 施したいかなる関数よりも、x > N において大きくなります。これが、つまり 2 重再帰である S 変換の操作を数え上げることによって、いかなる 2 重再帰よりも強い 3 重再帰の操作とした SS 変換を定義した、ということです。F2 (x) は、3 重再帰操作を 63 回施した 3 重再帰関数です。

第 4 章 多重再帰関数

102

SS 変換を a 回、S 変換を b 回したときにできる関数 ga,b (n) = Ba,b (0, n) は、A(a, b, 0, n) のオーダーになることを、帰納的に示します。まず a = 0, b = 0のときは B0,0 (0, n) = n + 1 = A(0, 0, 0, n) が成り立っています。そして

Ba,b (m, n) = A(a, b, 0, n) が成り立っているとして、そこに S 変換を 1 回す
ることで、関数 A(a, b + 1, 0, n) に変換されることを示します。このときのS 変換の式は、
Ba,b (0, n)=

A(a, b, 0, n)

Ba,b (m + 1, 0) =Ba,b (m, 1)

Ba,b (m + 1, n + 1)=

Ba,b (m, B(m + 1, n))Ba,b+1 (0, n) =Ba,b (n, n)となり、Ba,b (m, n) = A(a, b, m, n) と書き換えると、最初の式はA(a, b, 0, n)=

A(a, b, 0, n)の恒等式となり、残りの式はA(a, b, m + 1, 0)=

A(a, b, m, 1)

A(a, b, m + 1, n + 1)=

A(a, b, m, A(a, b, m + 1, n))A(a, b + 1, 0, n) =A(a, b, n, n)となって、この漸化式は多変数アッカーマン関数の定義と一致します。よって、S 変換によって A(a, b, 0, n) が A(a, b + 1, 0, n) に変換されることが示されました。
次に SS 変換については、SS 変換を a 回した Ba,0 (0, n) という関数に対して、SS 変換をもう 1 回する Ba+1,0 (0, n) は、S 変換を n 回する Ba,n (0, n)と等しいため（実際には f (m) 回繰り返す操作が入っているためもう少し大きいのですが、ここでは大体の大きさ（オーダー）を計算するため、n 回とします）、

Ba+1,0 (0, n)=

Ba,n (0, n)となり、これはアッカーマン関数の式

A(a + 1, 0, 0, n) =A(a, n, 0, n)

4.4. ふぃっしゅ数

103と等しいため、帰納的に ga,b (n) = Ba,b (0, n) ≈ A(a, b, 0, n) が示されました。

SS 変換を 63 回繰り返すことで、A(63, 0, 0, n) が得られます。よって、得られる数は A(1, 0, 0, 0, 63) = A(63, 0, 0, 63) のオーダーとなります。

4.4.3

ふぃっしゅ数バージョン 3

ふぃっしゅ数バージョン 3(F3 ) 23 24 は、以下のように定義されます。
【定義】ふぃっしゅ数バージョン 3

1. 関数 f (x) から g(x) への写像 s(n) (n > 0) を以下のように定
める。

s(1)f

:=

g; g(x) = f x (x)[原始再帰]

s(n)f

:=

g; g(x) = [s(n − 1)x ]f (x)(n > 1)[n 重再帰]

2. 関数 f (x) から g(x) への写像 ss(n) (n > 0) を以下のように定める。

ss(1)f:=g; g(x) = s(x)f (x)[再帰回数の数え上げ]

ss(n)f:=g; g(x) = [ss(n − 1)x ]f (x)(n > 1)[さらに数え上げ]

3. ふぃっしゅ関数 F3 (x) を以下のように定める。
F3 (x) := ss(2)63 f ; f (x) = x + 1
4. ふぃっしゅ数 F3 := F363 (3) とする。
ミカヅキモは、この F3 の定義を次のように書き換えました25 。定義は変わらないので、理解しやすい方で理解するのが良いと思います。
23 http://ja.googology.wikia.com/wiki/ふぃっしゅ数バージョン 3

24 巨 大 数 研 究
ユ ー ザ ー:Kyodaisuu/F3
の 展 開
Wiki
http://ja.googology.wikia.com/wiki/ユーザー:Kyodaisuu/F3 の展開
25 http://ja.googology.wikia.com/wiki/ユーザーブログ:Mikadukim/ふぃっしゅ数バー
ジョン 3 の書き換え

第 4 章 多重再帰関数

104

自然数全体から自然数全体への写像を関数と呼ぶ。関数全体から関数全体への写像を変換と呼ぶ。関数 f に対して、関数 f ∗ を

f ∗ (x) = f x (x)で定義し、変換 T に対して、変換 T ∗ を(T ∗ f )(x) = (T x f )(x)で定義する。s(n), ss(n), F3 を、次のように定義する。

s(1)f

=

f∗

s(n)

=

s(n − 1)∗(ss(1)f )(x)=(s(x)f )(x)

ss(n)

=

ss(n − 1)∗

F3

=

63

(n ≥ 2)(n ≥ 2)63(ss(2) f0 ) (3),f0 (x) = x + 1

この定義は、F1 や F2 と比べると異なった表現が用いられていますが、内容は F2 の拡張です。また、「巨大数探索スレッド」で定義された F3 (旧 F3 )の定義とも、異なっています。旧 F3 の定義の中で、最も本質的な部分を記述したものが新 F3 です。旧 F3 の定義については、煩雑になるためここには記しません。

そこで、F1 ,F2 , 旧 F3 , 新 F3 の定義の変遷について表 4.1 にまとめます。
つまり、F1 から旧 F3 まで、定義を拡張することでより高い再帰程度を持

つ関数、そして巨大数を作ってきましたが、その結果、旧 F3 の定義は非常に複雑なものになりました。新 F3 では、旧 F3 の定義の中から、高い再帰程度を持つ関数を作るために必要な定義のみを残して簡略化しました。旧F3 と新 F3 の大きさは厳密には異なりますが、関数の再帰程度が同程度になります。

ここで、新 F3 の定義の 2 つの簡略化について説明します。まずは、1 つ目の簡略化についてです。SS 変換は「数と関数と S 変換」から「数と関数と S 変換」への写像であり、S 変換の回数を数え上げることで、大きな関数を作っています。S 変換そのものは、S 変換の回数を増やすことで大きくし4.4. ふぃっしゅ数

105

表 4.1: F1 から F3 までの定義の変遷
バージョン

定義

F1

2 重再帰操作である S 変換

F2

S 変換 (2 重再帰) の回数を数え上げる SS 変換 (3 重再帰)

旧 F3

F2 の S 変換,SS 変換,... に相当する s(n) 変換 (多重再帰)

新 F3

F3 の s(n) 変換の定義を関数から関数への写像へと簡略化

S 変換を多数回繰り返す操作 (SS 変換)(SS 変換は数、関数、変換から数、関数、変換への写像)
再帰回数を数え上げる ss(1) 変換s(1) 変換の定義を 2 重再帰から原始再帰へと簡略化ていますが、そのこと自体は関数を強くすることに本質的に役立っていません。したがって SS 変換の定義の中で、S 変換を大きくするしくみは「無駄なしくみ」ということになります。また、数を関数に代入する定義についても、関数さえ定義されれば最終的にできた関数に数を代入すればいいのですから、「無駄な定義」ということになります。このように、SS 変換の定義は「関数から関数への写像」の定義の部分が本質的ということになります。そこで、s(n) 変換は「関数から関数への写像」を定義としました。
次に、新 F3 の 2 つ目の簡略化について説明します。これまで、S 変換はアッカーマン関数を元にした 2 重再帰操作で定義されていました。しかし、

2 重再帰は原始再帰操作の数え上げで定義できますから、原始再帰からス
タートすれば十分ということになります。そうすれば、原始再帰の数え上
げから 2 重再帰、その数え上げから 3 重再帰と、多重再帰を定義できます。
そこで新 F3 の s(1) は原始再帰を定義としました。新 F3 の s(2)、すなわち

s(1)f

:=

g; g(x) = f x (x)

s(2)f

:=

g; g(x) = [s(1)x ]f (x)から計算される s(2) は、F1 や F2 の S 変換とは異なりますが、同じ程度の大きさの 2 重再帰操作となります。s(1)f := g; g(x) = f x+1 (1) とすれば、

第 4 章 多重再帰関数

106s(2) は F1 や F2 の S 変換と一致します。

F3 の s(n) と多変数アッカーマン関数の大きさは、以下のように比較できます。

f (x) = x + 1 とすると
[s(1)a1 ][s(2)a2 ]...[s(n)an ]f (x) ≈ A(an , ..., a2 , a1 , x)
ここで s(1) の定義として s(1)f := g; g(x) = f x+1 (1) を採用すると両辺がイコールになります。このことは F3 の s(n) と多変数アッカーマン関数の漸化式を比較すると両者が一致することで示すことができます。

つまり、多重再帰の計算手順を定義したものが多変数アッカーマン関数、
多重再帰における「操作の数え上げ」を「関数から関数への写像」で表現したものが F3 の s(n) であり、両者は等価である、ということになります。

ss(1) は、g(x) = s(x)f (x) によって関数 f (x) に対する x 重再帰を定義しています。ここから先の大きさの評価は、多変数アッカーマン関数や配列
表記では間に合わないので、次の章で「急増加関数」を使って評価します。

4.5

バード数から配列表記へ

数学の修士号を持っているイギリス人のクリス・バード (Chris Bird) 26
がホームページ uglypc.ggh.org.uk 上で公開していたバードの矢印回転表
記とバード数について、巨大数探索スレッドでは 2002 年から色々と議論がされてきました。
まず矢印回転表記については、拡張チェーン表記のように矢印に添え字をつけることを、矢印を回転することで表記し、矢印を n 回転する ↑ n という記号を導入しています。したがって拡張チェーン表記と同様に、矢印を伸ばす操作は 2 重再帰操作で、矢印を回転させることが 2 重再帰操作を数え上げる 3 重再帰操作となります。そして拡張チェーン表記で x →x x

が 4 重再帰関数となることと同様に、矢印を回転させる回数を数える矢印
26 巨大数研究 Wiki - Chris Bird http://ja.googology.wikia.com/wiki/Chris Bird

4.5. バード数から配列表記へ

107

回転関数が 4 重再帰関数となります。拡張チェーン表記とバードの矢印回
転表記は、細かい定義の違いはあってもほぼ同じ関数であり同等の増加速度です。
バード数は、この 4 重再帰の矢印回転関数に 2 重再帰、原始再帰、合成を組み合わせた 4 重再帰関数で、多変数アッカーマン関数で A(1, 0, 1, 2, 2)
よりは小さい数です。
巨大数探索スレッドでは、ふぃっしゅ数に対してバード数が見つけられて、魚と鳥の対決だと盛り上がっていましたが、バードは日本の掲示板でそんなことで盛り上がっているとはまったく知らなかったことでしょう。そのバードのバード数のページはなくなり、巨大数の探求は終わっていたかに見えました。ところがバードは、海外のグーゴロジスト達といっしょにさらに巨大数の探求を進めていました。
バードはロバート・ムナフォのサーバーの上に、巨大数のページ27 を開設し、古いバード数よりも大きな巨大数を作っていました。バードのホー
ムページには、いくつかの段階を持って巨大数が定義されています。まず最初に、バードの線形表記 (Bird’s linear notation) を考えています。この発想は、次に説明する BEAF にもつながります。
数学修士号を持つアメリカのアマチュア数学者、ジョナサン・バウアー
ズ (Jonathan Bowers) 28 29 は、スビス・サイビアンに「現代巨大数論の父」と評価されています。バウアーズは、巨大数以外ではポリトープ、すなわち高次元に拡張された多面体に関する研究でも知られています。バウ
アーズは 2002 年に最初のバージョンの配列表記をホームページに公開しました。それがきっかけとなって、少しずつアマチュアの数学愛好家の中に巨大数に対する関心が強くなり、やがてバウアーズはバードやジョン・スペンサー (John Spencer) の助けを借りて、巨大数を表記する BEAF 30(Bowers Exploding Array Function) という手法を考えて、2007 年に公開しました。これは非常に大きな巨大数を生み出すシステムで、高次元の多27 Chris Bird’s Super Huge Numbers http://mrob.com/users/chrisb/
28 http://ja.googology.wikia.com/wiki/Jonathan Bowers
29 Hedrondude’s Home Page http://www.polytope.net/hedrondude/home.htm
30 巨大数研究 Wiki - BEAF http://ja.googology.wikia.com/wiki/BEAF

108

第 4 章 多重再帰関数

面体を研究しているバウアーズならではの突飛な発想があり、想像力を刺激させられるものです。このように、インターネットでアマチュアの数学家たちが巨大数の表記法やその強さを評価をするための理論について議論をするきっかけとなったのがバウアーズであるとして、サイビアンはバウ
アーズを「現代巨大数論の父」と評価しています。英語圏ではバウアーズの配列表記がきっかけとなり、日本語圏では巨大数探索スレッドがきっかけとなり、いずれも 2002 年頃からインターネットでアマチュア数学愛好家たちの巨大数探求が始まったことになります。いずれもグラハム数とチェー
ン表記を越えようとするところがとっかかりとなっているあたりも共通しています。
バウアーズはまた、非常に多くの面白い巨大数の名前をつけました。その中の 1 つが、本書で紹介したトリトリです。バウアーズが巨大数に様々な面白い名前をつけたことも、多くの人が巨大数に興味を持つきっかけとなりました。2016 年 2 月現在で、バウアーズが考えた巨大数の名前は 352個あるとされています。そして巨大数を生み出す表記法をたくさん考えると同時に、多くの巨大数の名前をつけるという流儀は、他の人たちも真似をしました。たとえば、スビス・サイビアンは 2008 年末に公開が開始された Web 書籍でハイパー E 表記を出発とする拡張 E 表記システムを開発し、2015 年 3 月時点で 15610 個の巨大数の名前をつけたとされています。超階乗表記を考案したローレンス・ホロム (Lawrence Hollom) も、同様にその表記に対応した巨大数の命名規則を考案しています。アレックス・チャオ
クヒァオ (Aarex Tiaokhiao) は、いくつかの既存の巨大数表記法の簡単な拡張と、それに対する多くの巨大数の命名をしています。強配列表記を考案した Hyp cos も、同様に強配列表記に対応して多くの巨大数の名前をつけています。このように巨大数表記の体系を作って、同時に多くの巨大数の名前をつけるという人たちが多く出てきたことは、バウアーズの影響力の大きさを示しています。

BEAF ではまず配列表記31 (array notation) を考えます。BEAF の構築にはバードも関わっていたこともあり、この BEAF の配列表記とバードの線形表記はまったく同じです。以下がその定義です。
31 巨大数研究 Wiki - 配列表記 http://ja.googology.wikia.com/wiki/配列表記

4.5. バード数から配列表記へ

109【定義】BEAF の配列表記
配列は正の整数の有限の数列 A = (a1 , a2 , . . . , an ) により定義される。配列表記はこの数列から 1 つの正の整数への写像、すなわち関数

v(A) = {a1 , a2 , . . . , an } であり、次のような規則によって計算される。
1. {a} = a, {a, b} = ab

2. {a, b, c, . . . , n, 1} = {a, b, c, . . . , n}
3. {a, 1, b, c, . . . , n} = a
4. 3 番目の要素が 1 の時
{a, b, 1, . . . , 1, c, d, . . . , n}
% &' (
x 個の 1={a, a, . . . , a, {a, b − 1, 1, . . . , 1, c, d, . . . , n}, c − 1, d, . . . , n}
% &' (% &' (
x+1 個の ax 個の 1• その次の 1 でない要素の前にある全ての要素は最初の要素に置き換わり、• 上記のうち最後のものは、元々の配列の 2 番目の要素が 1
差し引かれたものに置き換わり、• 先述の 1 でない要素は 1 差し引かれる。
5. 規則 1〜4 のいずれの場合にも当てはまらない場合{a, b, c, d, . . . , n} = {a, {a, b − 1, c, d, . . . , n}, c − 1, d, . . . , n}
ためしに計算をしてみます。まずは 3 変数の場合です。

{3, 3, 3}={3, {3, 2, 3}, 2}={3, {3, {3, 1, 3}, 2}, 2}={3, {3, 3, 2}, 2} = {3, {3, {3, 2, 2}, 1}, 2}={3, {3, {3, 2, 2}}, 2}

第 4 章 多重再帰関数

110
=
=
=
=

{3, 3{3,2,2} , 2}

{3, 3{3,{3,1,2},1} , 2}

3

{3, 3{3,3} , 2} = {3, 33 , 2}

{3, 3 ↑↑ 3, 2} = {3, {3, 3 ↑↑ 3 − 1, 2}}= 3 ↑ {3, 3 ↑↑ 3 − 1, 2}= 3 ↑ 3 ↑ {3, 3 ↑↑ 3 − 2, 2}= 3 ↑ 3 ↑ 3 ↑ {3, 3 ↑↑ 3 − 3, 2}=... = 3 ↑↑ 3 ↑↑ 3

= 3 ↑↑↑ 3
つまり {3, 3, 3} はトリトリになります。というよりも、トリトリの定義が{3, 3, 3} で、それは 3 ↑↑↑ 3 と等しいので、3 ↑↑↑ 3 がトリトリであるという説明をしていました。一般に、3 変数の BEAF に対しては、{a, b, c} = a → b → c = a ↑c b
が成立します。
【証明】

c に関する帰納法で証明する。c = 1 の時は {a, b} = a ↑ b となるため成立する。c − 1 で成立するときに、c では{a, b, c}===={a, {a, b − 1, c}, c − 1}a ↑c−1 {a, b − 1, c} = a ↑c−1 {a, {a, b − 2, c}, c − 1}a ↑c−1 a ↑c−1 {a, b − 2, c}... = a ↑c−1 a ↑c−1 ...↑c−1 a = a ↑c b%&'(
b 個の aとなり、成立する。

次に 4 変数の場合です。

{3, 65, 1, 2}={3, 3, {3, 64, 1, 2}, 1} = {3, 3, {3, 64, 1, 2}}✷

4.5. バード数から配列表記へ

111={3, 3, {3, 3, {3, 63, 1, 2}}}={3, 3, {3, 3, {3, 3, {3, 62, 1, 2}}}}

これはおよそグラハム数になります{65, 2, 2, 2} = {65, {65, 1, 2, 2}, 1, 2} = {65, 65, 1, 2}
も、だいたいグラハム数です。
配列表記と多変数アッカーマン関数を比較すると、両者には

1. 配列表記では 1 が最小の数だが、多変数アッカーマンでは 0 が最小の数となっている。

2. 数を並べる順番が左右逆になっている。配列表記では右の数の方が数を大きくする効果が大きく、多変数アッカーマンではその逆である。

3. 配列表記は {a, b} = ab の 2 変数関数が基本となり、多変数アッカー

マンは A(a) = a + 1 の 1 変数関数（後者関数）が基本となっている。

4. 配列表記では {a, b, 1, . . . , 1, c, d, . . . , n} ={a, a, a, . . . , {a, b − 1, 1, . . . , 1, c, d, . . . , n}, c − 1, d, . . . , n}と、前の数が全部 a に変わる。多変数アッカーマンでは A(X, b+1, 0, □, a) = A(X, b, a, □, a) と、1 つ右の数だけ変わる。
といったような違いがありますが、再帰を重ねる構造は似ています。4 番
目の点がだいぶ違うように見えますが、多変数アッカーマン関数でもA(2, 0, 0, 0, 0, 5)=

A(1, 5, 0, 0, 0, 5)=

A(1, 4, 5, 0, 0, 5)=

A(1, 4, 4, 5, 0, 5)=

A(1, 4, 4, 4, 5, 5)のように、結局は 1 つずつ数が変わっていくので、本質的にはそれほど変わりません。

第 4 章 多重再帰関数

112

ここで、配列表記の要素がそれぞれどのような役割を持っているかを説明します。f (m) = {n + 1, m, a0 , X}(X は 0 個以上の要素) とすると

{n + 1, 2, a0 + 1, X}{n + 1, 3, a0 + 1, X}{n + 1, 4, a0 + 1, X}{n + 1, m + 1, a0 + 1, X}={n + 1, {n + 1, 1, a0 + 1, X}, a0 , X}=

{n + 1, n + 1, a0 , X} = f (n + 1)=

{n + 1, {n + 1, 2, a0 + 1, X}, a0 , X}=

{n + 1, f (n + 1), a0 , X}=

f 2 (n + 1)=

{n + 1, {n + 1, 3, a0 + 1, X}, a0 , X}=

f 3 (n + 1)=

f m (n + 1)となって、2 番目の要素 m + 1 が関数 f の合成を繰り返す回数 m をあらわしています。そして{n + 1, 2, a0 + 2, X}=={n + 1, n + 1, a0 + 1, X}
f n (n + 1)となり、{n+1, 2, a0 +1, X} = f (n+1) から {n+1, 2, a0 +2, X} = f n (n+1)

へと、3 番目の要素を 1 増やすことで、合成を数え上げる原始再帰 f n (n) の効果があります。したがって、3 番目の要素は原始再帰の回数となります。
さらに{n + 1, m + 1, 1, a1 + 1, X}={n + 1, n + 1, {n + 1, m, 1, a1 + 1, X}, a1 , X}という式では、4 番目の要素を 1 減らすために、原始再帰を {n + 1, m, 1, a1 +1, X} 回の数え上げをしています。これが原始再帰を数え上げる 2 重再帰です。つまり 4 番目の要素は 2 重再帰の回数です。3 番目と 4 番目の要素
が 1 になると、5 番目の要素が 1 減ることで 2 重再帰を数え上げる 3 重再帰となります。同様に考えていくと、n + 2 番目の要素が n 重再帰の回数をあらわします。このように多変数アッカーマン関数と左右の方向が逆の関係になります。

4.5. バード数から配列表記へ

113

以上の関係をふまえて、配列表記と多変数アッカーマン関数の大きさを比較すると、n > 1 に対して次のようになります。

{n + 1, n + 1, n + 1, n + 1} = {n + 1, 2, 1, 1, 2} ≈{n + 1, ..., n + 1} = {n + 1, 2, 1, 1, 1, 2} ≈%&'(A(1, 0, 0, n)
A(1, 0, 0, 0, n)

5個{n + 1, 2, a0 + 1, a1 + 1, ..., ak + 1} ≈A(ak , ..., a1 , a0 , n)f (n) = A(ak , ..., a2 , a1 , a0 , n) として{n + 1, m + 1, a0 + 1, a1 + 1, a2 + 1, ..., ak + 1} ≈ f m (n)ここで、配列表記では{1, a0 , a1 , ..., ak }{2, a0 , a1 , ..., ak }= 1
= 4 (k > 1, a0 > 1, ak > 1 のとき)となります。つまり、4 変数以上の配列表記で一番左の要素が 2 のときは 4になってしまいます。以下のように計算されます。

{2, a0 , a1 , ..., ak }=={2, {2, a0 − 1, a1 , ..., ak }, a1 − 1, ..., ak }... = {2, X, 1, ..., ak }(ここで X はある数)={2, 2, Y, ..., ak }(ここで Y = {2, X − 1, 1, ..., ak })={2, {2, 1, Y, ..., ak }, Y − 1, ..., ak }={2, 2, Y − 1, a2 , ..., ak }={2, 2, Y − 2, a2 , ..., ak }={2, 2, 1, a2 , ..., ak }={2, 2, 1, 1, a3 , ..., ak }={2, 2, 1, 1, ..., 1}={2, 2} = 4

つまり、3 番目の要素が 1 まで落ちた直後に配列表記の 4 番目のルールによって 2 番目の要素が 2 になってしまい、そうすると 3 番目の要素が減っ

第 4 章 多重再帰関数

114ても値が変わらないため 3 番目の要素が 1 にまで落ちます。さらに 4 番目、5 番目の要素と 1 まで落ちていき、最終的には 4 となります。
したがって配列表記で巨大数を表記するときには、一番左の要素は 3 以上とします。
ちなみに Googology Wiki で開催された第 1 回国際巨大数オリンピック32
33

では
チェーン表記と配列表記に関する次の不等式を満たすような 4
つの整数 (a, b, c, d) の組をすべて求めなさい。

a → b → c → d > {a, b, c, d}という問題が出題されました。詳しく検討すると a = 2, b > 2, c > 0, d > 1
がその答えとなります。
このように、n 変数の配列表記は n − 1 変数アッカーマン関数と増加速度が対応し、n − 2 重再帰関数となります。4 変数の配列表記は 2 重再帰関数でチェーン表記と対応し、5 変数の配列表記は 3 重再帰で拡張チェーン

表記に対応します。つまり配列表記（バードの線形表記と同じ）では 5 変数以上になるとチェーン表記を超えます。このことをバードが証明したものがバードの証明34 35 (Bird’s proof) です。日本の巨大数論では、チェーン表記が 2 重再帰（3 変数アッカーマン）のレベルであることが分かったことで巨大数の理解が大きく進みましたが、海外の巨大数論では、このバードの証明によってチェーン表記が 4 変数配列表記（=4 変数のバードの線形表記）のレベルであることが分かったことが重要で、バードはチェーンの拡張である矢印回転表記を捨てて、バードの線形表記を基本として、さらに発展をさせて、バードの配列表記、そして新しいバード数 (p. 219) を定義しました。

32 第 1 回国際巨大数オリンピック http://ja.googology.wikia.com/wiki/スレッド:179333
http://googology.wikia.com/wiki/User blog:Wythagoras/Results of the FirstInternational Googological Olympiad
34 巨大数研究 Wiki - バードの証明 http://ja.googology.wikia.com/wiki/バードの証明
35 5
変 数 以 上 の バ ー ド の 線 形 表 記 が チ ェ ー ン 表 記 よ り も 強 い 証 明
http://www.mrob.com/users/chrisb/Proof.pdf

115

第

5章
順序数

ここから先は、前章で紹介したような多重再帰関数よりも大きな関数、そして巨大数を探求する事になります。それでは、そのように大きな関数を、どうやって比較するのでしょうか。
たとえば原始再帰関数であれば矢印表記、2 重再帰関数であればチェー
ン表記、多重再帰関数であれば多変数アッカーマン関数によって比較、近似ができます。ここから先、多変数アッカーマン関数よりも強い関数を評価するためには、さらに強い関数を物差しに使えば良いのですが、そこで本章で導入する順序数がとても良い物差しになります。
巨大数論において、順序数を物差しとして関数の強さを評価する方法は、
主に 2 つあります。

• 順序数階層を使う方法では、順序数から関数への写像を使って、関数を近似します。関数を強めていくときの階層的な構造が、順序数階層で表現されます。

• 順序数解析を使う方法では、関数の強さをその関数を定義する理論体

系の強さと関連付けて評価します。理論体系の強さを順序数で表すた
めに順序数解析を使います。

そして、順序数階層と順序数解析はお互いに関連もしています。
そこで、本章ではまず順序数、順序数階層、順序数解析について順次解説し、これまでに出てきた巨大数と関数の大きさを、順序数階層によって評価します。本章で順序数によって関数の強さを評価するための準備を整

第 5 章 順序数

116

えてから、次の章へと進みます。本書に書いた順序数に関する説明を、よりかみくだいて説明した「順序数講座」1 も、ご参照ください。

5.1

順序数

集合論の創始者であるドイツの数学者、ゲオルク・カントール (Georg

Cantor, 1845–1918) は、自然数を拡張した順序数 (ordinal number) という概念を考えました。順番に並べられたものに対して、順序数で「番号」を振ることができます。ここで、その「順番に並べられたもの」が有限であれば「番号」は自然数で足りますが、無限にあるときにも番号を振ることができるようにしたものが順序数です。
カントールは、自然数の集合と実数の集合では、お互いの要素の間に一対一の対応づけをすることができない、つまり実数の集合は自然数の集合よりも本質的に「大きい」集合であることを示したことで有名です。そのことから、無限集合にも色々な「大きさ」があるということになり、無限集合の大きさをあらわす数をカントールは超限数 (transfinite number) と名付けました。これは現代数学では基数に相当します。基数と順序数は違います。感覚的な表現では、基数が集合の「大きさ」を示すもので、順序
数は「順序」を数えるものです。自然数では両者が一致しますが、無限集合では一致しないために明確に区別する必要があります。順序数と基数の違いについては、順序数を定義した後に改めて説明します。

5.1.1

整列集合と順序型

順序数は、次のように定義されます2 3 。
✓【定義】順序数
順序数とは、整列集合の順序型である。
✒

1 http://ja.googology.wikia.com/wiki/ユーザーブログ:Kyodaisuu/順序数講座✏✑

2 MathWorld - Ordinal Number http://mathworld.wolfram.com/OrdinalNumber.html

3 他の定義方法もあるが、本書では MathWorld で採用されていて、簡明なこの定義を使って説明する。ZF 公理系では順序同型の集合全体を集合として取り扱うことができないという問題はあるものの、型理論や Quine の新基礎集合論ではこの定義も有効であると英語版
Wikipedia には記述されている。

5.1. 順序数

117

そこで、まずは整列集合と順序型について定義します。
まずは順序集合4 (ordered set) についてです。順序集合とは「順序」の概念が定義された集合です。順序が定義されると、集合の 2 つの要素を比較して、どっちが先でどっちが後かという順序を考えることができます。こ
こで、順序が決まるかもしれないし、決まらないかもしれません。そして必ず順序が決まる集合は全順序集合 (totally ordered set) と呼ばれます。全順序集合に対して、順序が決まらないかもしれない一般の順序集合は半順

序集合 (partially ordered set) とも呼ばれます。全順序集合は半順序集合の一種です。

たとえば、自然数全体の集合、有理数全体の集合、実数全体の集合は、通常の大小関係によって全順序集合となります。実数全体の集合から 2 つの要素である実数 a, b を取り出せば、その大小関係（順序）が必ず決まるからです。
一方、集合 X の部分集合全体の集合は、包含関係 ⊂ によって半順序集

合になります。X の 2 つの部分集合は、片方がもう片方を包含することもあれば、お互いにお互いを包含していないこともあるからです。
このことを、もっときっちりと書きます。集合 X に対して、次の条件をみたす二項関係 ≤ が定められるとき、二項関係 ≤ は集合 X 上の全順序であると言います。そして、このような集合と全順序の組 (X, ≤) を全順序集合と言います。また、二項関係 ≤ が全順序律以外の 3 つの条件をみたすとき、≤ を半順序、組 (X, ≤) を半順序集合（または順序集合）と言います。

1. X の任意の元 a に対して、a ≤ a（反射律）2. x ≤ y かつ y ≤ z ならば x ≤ z （推移律）
3. x ≤ y かつ y ≤ x ならば x = y （反対称律）
4. X の任意の元 x, y に対して、x ≤ y または y ≤ x のいずれか（両方でもよい）が必ず成り立つ。（全順序律）

4 Wikipedia - 順序集合 http://ja.wikipedia.org/wiki/順序集合

118

第 5 章 順序数

整列順序 (well-order) を備えている集合を整列集合5 6 (well-ordered set)と言います。ここで、集合 X 上の整列順序関係とは、整礎な全順序関係のことであり、半順序 ≤ が整礎 (well-founded) であるとは、以下のように定義されます。ここで a < b とは a ≤ b かつ a ̸= b のことです。
✓【定義】整礎集合 X 上の半順序 ≤（あるいは狭義半順序 <）が整礎であるとは、✏X の要素による無限降下列が存在しない（つまり、X の要素による列a0 > a1 > a2 > . . . の長さは必ず有限になる）ということである。
✒✑

また、集合 X 上の整列順序関係を、全順序関係でありかつ「X の任意の空でない部分集合 A に対し、A の最小元 a0 が存在する（つまり、任意のA の元 a に対して、a0 ≤ a が成り立つ）」と定義することもできます。後述の選択公理（あるいはそれよりも弱い従属選択公理）を仮定すると、これは無限降下列が存在しないことと同値になるためです。
整数全体の集合に通常の大小関係を入れると、最小元がないので整列集
合ではありませんが、0 以上の整数全体の集合に通常の大小関係を入れると整列集合になります。

0 以上の有理数全体の集合に通常の大小関係を入れると、整列集合にはなりません。部分集合として「正の有理数」を取ったときに、最小元が存在しない（どんなに小さい数 a を取っても、さらに小さい数 a/2 が集合の要素となる）ためです。また、数列 an = 1/n は無限降下列になります。
ここで選択公理 (axiom of choice)7 8 とは、公理的集合論 (axiomatic set

theory) における公理のひとつで、どれも空でないような集合を元とする集合（すなわち、集合の集合）があったときに、それぞれの集合から一つずつ元を選び出して新しい集合を作ることができるというものです。カントー
ルは、選択公理を自明なものとみなしていました。本書でも選択公理を仮定します。
選択公理について、公理的集合論における位置付けを少し説明します。カ
5 数学 Wiki - 整列集合 http://ja.math.wikia.com/wiki/整列集合
6 Wikipedia - 整列集合 http://ja.wikipedia.org/wiki/整列集合
7 Wikipedia - 選択公理 http://ja.wikipedia.org/wiki/選択公理
8 選択公理 http://alg-d.com/math/ac/

5.1. 順序数

119

ントールが提唱した初期の集合論は、集合は「ものの集まり」であると素朴に定義する素朴集合論 (naive set theory) と呼ばれます。ところが、素朴集合論では「自分自身を要素として含まない集合全体の集合」を考えるとラッセルのパラドックスという矛盾が生じ、他にも「どんな集合でも自由に定義できる」ことによるパラドックスがいろいろと生じます。そこで、集合とはどういうものであるかを公理によって定めることで、「おかしな集合」が定義されることによる矛盾が生じないように理論体系を組み立てようとする公理的集合論が発展しました。
その中で現在一般的に使われている集合の公理系は、ドイツの論理学者・数学者であるエルンスト・ツェルメロ (Ernst Friedrich Ferdinand Zermelo,

1871–1953) と、ドイツ出身でイスラエルに移住した数学者アドルフ・フレ
ンケル (Abraham Halevi Adolf Fraenkel, 1891–1965) らが構築したツェル

メロ・フレンケルの集合論 (Zermelo-Fraenkel set theory) における ZFC

公理系です。ZFC 公理系から選択公理を除いた公理系を ZF 公理系と言います。つまり、ZF は Zermelo と Fraenkel の頭文字で、それに選択公理の選択 (choice) の C を加えたものが ZFC です。
次に、順序型9 10 11 (order type) の定義をします。順序型とは全順序集
合を分類する方法の一つで、すべての全順序集合 (A, ≤) は、順序型に関係付けられます。

2 つの集合 A と B が同じ順序型であるとは、順序同型 (order isomorphic)

であることです。
✓【定義】順序同型

全順序集合 (A, ≤) と (B, ≤) が順序同型であるとは、すべての A の要✏

素 a1 , a2 に対して、

a1 ≤ a2 ⇐⇒ f (a1 ) ≤ f (a2 )となるような A から B への全単射 f が存在することである。
✒
9 数学 Wiki - 順序型 http://ja.math.wikia.com/wiki/順序型

10 Wikipedia - 順序型 http://ja.wikipedia.org/wiki/順序型

11 MathWorld - Order Type http://mathworld.wolfram.com/OrderType.html✑

第 5 章 順序数120

ここで全単射 (bijective) 12 とは、写像 f : A → B に対し、2 つの条件

1. 全射性: f (A) = B
2. 単射性: 任意の A の元 a1 , a2 について、f (a1 ) = f (a2 ) ならば a1 = a2がともに成り立つことを言います。「一対一対応」と言うこともあります。
以上で整列集合と順序型の定義ができましたので、順序数の定義ができたことになります。

5.1.2

超限順序数とフォン・ノイマンの順序数表記

順序数の定義ができたので、まずは有限な全順序集合の順序数、すなわ
ち有限順序数 (finite ordinal) を考えます。有限な全順序集合は、要素の無限降下列を作ることができないので整礎です。全順序集合 A と B がそれぞれ k 個の要素を持つとき（k は非負整数）、順序同型なので同じ順序型を持ちます。その順序型が順序数で、0, 1, 2, 3, ... のように要素の個数 k と等しい自然数（非負整数）で表記します。このように有限順序数が自然数で表記されるため、順序数は自然数を拡張した概念であるとされます。
有限でない順序数を無限順序数 (超限順序数) (inifinite ordinal) と言います。超限順序数は、通常ギリシャ文字の小文字で表記されます。最小の超限順序数は ω と表記され、自然数全体の集合 N = {0, 1, 2, 3, . . .} の順序型です。これはカントールが定義した超限数 (transfinite number) の中で最小です。
数列 0, 1, 2, 3, … は ω に収束します。このとき 0, 1, 2, 3, … を、ω に収束する基本列 (fundamental sequence) あるいは収束列と呼びます。ω に対する基本列は 1 種類とは限りません。たとえば、数列 0, 2, 4, 6, ... も ω への基本列となります。
最小の無限順序数 ω に対して、ω + 1, ω + 2, ... といった順序数を定義することができます。なお、順序数では交換法則が成り立ちません。1 + ω は12 Wikipedia - 全単射 http://ja.wikipedia.org/wiki/全単射

5.1. 順序数121

1 + 1, 1 + 2, 1 + 3, ... と計算したときの極限であると考えて、1 + ω = ω となります。
全順序集合 (A, ≤) の順序数が α であれば、α よりも小さい順序数全体の集合と順序同型になります。そのことから、順序数を自分自身よりも小さいすべての順序数の集合であると定義することができます。ハンガリー出身のアメリカの数学者で、多くの学問分野で重要な貢献をしたジョン・フォ
ン・ノイマン (John von Neumann, 1903 - 1957) は、順序数をそのように定義しました。これは標準的な順序数の表記法で、その表記法によれば以下のようになります。

{} (空集合 = 0 個の要素を持つ集合)

0

=

1

=

2

=

{0, 1} = {{}, {{}}} (2 個の要素を持つ集合)

3={0, 1, 2}

4={0, 1, 2, 3}

ω={0} = {{}} (1 個の要素を持つ集合){0, 1, 2, ...} (全ての自然数の集合)

ω+1 ={0, 1, 2, ..., ω}

ω+2 ={0, 1, 2, ..., ω, ω + 1}

ω+3 ={0, 1, 2, ..., ω, ω + 1, ω + 2}

ω+ω{0, 1, 2, ..., ω, ω + 1, ω + 2, ...}=

ここで、順序型は集合の濃度 (cardinality) とは異なるので注意が必要です。
集合 A から B への全単射が存在するとき、A と B は濃度が等しいと言いますが、この全単射は順序関係を保つ必要がありませんので、順序同型の定義とは異なります。
たとえば、順序数 ω の集合 A = {0, 1, 2, ...} と順序数 ω + 1 の集合 B ={0, 1, 2, ..., ω} について、A から B への全単射 f が存在するかどうかを考えます。f (0) = ω, f (k) = k − 1(k > 0) とすれば、全単射ができるので A とB は濃度が等しくなります。ところがこの全単射はa1 ≤ a2 ⇐⇒ f (a1 ) ≤ f (a2 )第 5 章 順序数122を満たしていません（a1 = 0, a2 = 1 のときに不成立）。この式を満たすような全単射 f は存在しないので（もし存在すれば、f (k) = ω となる自然数

k が存在するが、順序同型の条件によって f (k + 1) は ω よりも大きくなければならず、そのような B の要素は存在しないため）、ω と ω + 1 は濃度は等しいのですが順序同型ではないということが分かります。
集合 A の濃度をあらわす基数 (cardinal number) は、A との間に全単射が存在する順序数の中で最小のものであると定義されます。ω は可算濃度の順序数の中で最小なので、可算無限集合の基数は ω となり、これを ω0 ま
たはアレフ 0（ℵ0 ) とも書きます。ω + 1 の基数は ω です。

5.1.3

極限順序数の基本列

α が順序数のとき、ある順序数 β が存在して α = β + 1 となるならば、
α は後続順序数 (successor ordinal) であると言います。0 でも後続順序数
でない順序数は極限順序数 (limit ordinal) と呼びます。ω は極限順序数で、

ω + a(a = 1, 2, 3, ...) は後続順序数です。すべての順序数は、0 または後続
順序数または極限順序数です。極限順序数は、基本列によって定義できる
ものと、基本列が存在しないものがあります。

極限順序数は、次のように定義することもできます。
✓✏

ξ が存在するとき、α は極限順序数である。
✒✑

α よりも小さいすべての順序数 ζ に対して、ζ < ξ < α となる順序数

たとえば 0, 1, 2, …, ω, ω + 1 という数列を考えると、α = ω + 1 に対しては

ζ = ω とすると ω < ξ < ω + 1 となる ξ が存在しないので、ω + 1 は極限順
序数の定義には合致しませんが、α = ω に対しては、α よりも小さい順序

数 ζ （つまり自然数）を取ると、ξ = ζ + 1 が必ず存在するため、極限順序数の定義に合致します。

ω + 1, ω + 2, … という基本列を考えると、この数列は ω + ω に収束します。したがって ω + ω は極限順序数です。このときに ω + ω のことをω × 2 と書きます。ここでも順序数に関しては通常の交換法則が成り立たず、2 × ω = ω となりますので（2 + 2 + … と計算していったときの極限

5.1. 順序数

123

は、1 + 1 + … と計算することの極限と同じ)、2ω ではなく ω × 2 と表記する必要があります。

極限順序数 ω × 2 に対して、後続順序数 ω × 2 + a(a = 1, 2, 3, ...) を定義できます。そして ω × 3 は ω × 2 + 1, ω × 2 + 2, ... を基本列とする極限順序数です。このように後続順序数の定義 (+1) と極限順序数の定義を繰り返す事で、順序数が定義されます。基本列 a1 , a2 , a3 , … の極限順序数 α を

α = lim(a1 , a2 , a3 , ...) と表記することにすると、以下のように順序数が定義されます。

ω×3 =lim(ω × 2, ω × 2 + 1, ω × 2 + 2, ...)

ω×4 =lim(ω × 3, ω × 3 + 1, ω × 3 + 2, ...)

ω×a

= lim(ω × (a − 1), ω × (a − 1) + 1, ω × (a − 1) + 2, ...)

このように、極限順序数 ω × a は、ω × (a − 1) から後続順序数を順番に計算する基本列を作れば定義できます。続いて、このように定義された ω × a
を使って、

ω2

:=

ω × ω = lim(0, ω, ω × 2, ω × 3, ...)といった基本列を作ることにより、ω 2 という順序数を定義できます。これよりも大きな順序数については、これまでと同じような基本列の作り方で、以下のように極限順序数の定義を続けることができます。

ω2 + ω
ω2 + ω × a= lim(ω 2 , ω 2 + 1, ω 2 + 2, ...)= lim(ω 2 + ω × (a − 1), ω 2 + ω × (a − 1) + 1, ...)

ω2 × 2 =ω 2 + ω 2 = lim(ω 2 , ω 2 + ω, ω 2 + ω × 2, ...)

ω3

=

ωω

= lim(ω 0 , ω 1 , ω 2 , ω 3 , ω 4 , ...)

ωω × 2 =
ω ω+1

=

ω ω+2

=

ω ω×2

=

ω 2 × ω = lim(0, ω 2 , ω 2 × 2, ω 2 × 3, ...)ω ω + ω ω = lim(ω ω + ω 0 , ω ω + ω 1 , ω ω + ω 2 , ...)ω ω × ω = lim(0, ω ω , ω ω × 2, ω ω × 3, ...)

ω ω+1 × ω = lim(0, ω ω+1 , ω ω+1 × 2, ω ω+1 × 3, ...)
ω ω+ω = lim(ω ω , ω ω+1 , ω ω+2 , ...)

第 5 章 順序数

124
ωω

2

=

ω ω×ω = lim(ω 0 , ω ω , ω ω×2 , ω ω×3 , ...)=lim(ω ω , ω ω , ω ω , ω ω , ...)

ωω + ω

=lim(ω ω , ω ω + 1, ω ω + 2, ...)

ωω + ω × 2=

lim(ω ω + ω, ω ω + ω + 1, ω ω + ω + 2, ...)

ωω

ω

ω

ω

0

1

ω

ω

ω

2

3

ω

ω

ω

また、それぞれの極限順序数に自然数を加えた順序数、たとえば ω ω + 3
ω

は、後続順序数になります。
ここまでで、ω 、ω ω 、ω ω を定義することができました。ここで ω ∧∧ aω:= ω ∧ ω ∧ ω ∧ ...ω (a 個の ω) と表記することにすると、同様の定義を繰り返せば、

ω, ω ω , ω ∧∧ 3, ω ∧∧ 4, ω ∧∧ 5, ...
を、順次定義できます。そこでこれを基本列として、極限順序数 ϵ0 （エプシロン・ノート）を✓【定義】エプシロン・ノート✒

ϵ0 = lim(1, ω, ω ω , ω ∧∧ 3, ω ∧∧ 4, ω ∧∧ 5, ...)と定義します。ϵ0 は、ω から有限回の加算・乗算・冪乗では到達できない
最小の順序数です。

5.1.4

カントールの標準形

全ての順序数は、カントールの標準形13 (Cantor normal form) (しばしば CNF と略される) で一意に書くことができます。

13 http://www.proofwiki.org/wiki/Definition:Cantor Normal Form✏✑

5.2. 順序数階層

125✓【定義】カントールの標準形

順序数 α を、正の整数 c1 , c2 , c3 , · · · , ck と順序数 β1 > β2 > · · · >✏βk ≥ 0 によって、
α

=
=

k
#

ω βi c i

i=1β1

ω c 1 + ω β2 c 2 + · · · + ω βk c kの形で書くとき、これをカントールの標準形と言う。
✒✑

ϵ0 をカントール標準形で書くと ϵ0 = ω ϵ0 となります。これは自分自身を参照しているので、定義式として使うにはふさわしくありません。このよ
うに、カントール標準形は順序数を表記するための万能の手法ではありま
せんが、ϵ0 よりも小さい順序数を表記するときには便利です。

ϵ0 は可算濃度の順序数なので、基数は ω です。つまり ϵ0 よりも小さい順

序数と自然数の間に全単射が存在します。たとえば、ϵ0 よりも小さい順序
数 α をカントール標準形で書いた時の文字数を f (α) として、f (α) が小さ
い順序数から、それぞれ小さい順に並べていけば良いのです。

• f (α) = 1 : 0, 1, 2, ..., 9, ω
• f (α) = 2 : 10, 11, 12, ...., 99, ω2, ω3, ..., ω9, ω 2 , ω 3 , ..., ω 9 , ω ωのように並べることができます。

5.2

順序数階層

本書では、順序数 α から、自然数から自然数への関数 N → N への写像

によって、関数の階層を定める手法を順序数階層 (ordinal hierarchy) と呼ぶこととします。具体的にはハーディ階層、急増加関数等があり、これから説明します。

第 5 章 順序数

126

5.2.1

ハーディ階層1904 年にイギリスの数学者ゴッドフレイ・ハーディ (Godfrey Harold
Hardy, 1877–1947) が定義したハーディ階層14 15 (Hardy function) は、順
序数 α に対して自然数から自然数への関数 H[α] : N → N を定める順序数による関数の階層で、以下のように定義されます。
✓【定義】ハーディ階層

H[0](n) =H[α + 1](n) =✒H[α](n) =✏nH[α](n + 1)
H[α[n]](n)(極限順序数αの基本列がα[n] である時)

順序数の定義の中で、後続順序数の定義 (順序数に+1 する) と、基本列✑の極限による極限順序数の定義を、それぞれ関数に x + 1 を代入する操作と、対角化の操作に対応させることにより、関数の階層性を順序数の階層性と対応づけています。
ここで定義の中に基本列が用いられていますが、基本列の取り方は一様ではないため、α の定義にあらわれるすべての基本列の取り方を厳密に定めて、はじめて H[α] が定義されたことになります。ただし、基本列のとり方による増大度の違いよりは、順序数の大きさによる増大度の違いの方がはるかに大きいため、基本列の取り方いかんに関わらず、α > β であれば

H[α] > H[β] がおおよそ成り立つと考えて、H[順序数] と記述して大体の大きさを表します。
また、基本列の中でなんらかの方法で 1 つの正規な基本列 (canonicalfundamental sequence) α[0], α[1], α[2], ... を与えることで、H[α] の定義は一意に定まります。
そのような方法の 1 つとして、巨大数論では α ≤ ϵ0 に対して、次のようなワイナー階層 (Wainer hierarchy) がよく使われます。
14 http://ja.googology.wikia.com/wiki/ハーディ階層

15 Hardy, G.H. (1904) A theorem concerning the infinite cardinal numbers. Quarterly
Journal of Mathematics 35: 87–94.

5.2. 順序数階層✓

127【定義】ワイナー階層

α ≤ ϵ0 に対して、α の基本列 α[0], α[1], α[2], ... を次のように定める。
ω[n]

=

n

[n]

=

ωα n

ω α [n]=ω α[n] (αは極限順序数）(ω α1 + ω α2 + · · · + ω αk )[n]=ω α1 + ω α2 + · · · + ω αk [n]ϵ0 [0]

=

ω

α+1

✒

✏

(α1 ≥ α2 ≥ · · · ≥ αk の場合）

1, ϵ0 [n + 1] = ω ϵ0 [n]✑ここで、ϵ0 [0] = 0 とされることもあります。本書でも、ϵ0 以下の順序数に対してはワイナー階層を用います。たとえば ω[n] = n は、ω の基本列が0, 1, 2, 3, ... となることを意味します。ここまでの順序数の基本列は、すべてこのワイナー階層を用いて書きました。
それでは、ワイナー階層を使ってハーディ階層を計算してみます。

H[3](n) =H[2](n + 1) = H[1](n + 2) = H[0](n + 3) = n + 3

H[m](n) =n+m

H[ω](n) =H[n](n) = n + n = 2n

H[ω + 2](n) =H[ω + 1](n + 1) = H[ω](n + 2) = 2(n + 2)

H[ω + k](n) =2(n + k)H[ω × 2](n) =H[ω + n](n) = 2(n + n) = 4n

H[ω × 2 + 2](n) =H[ω × 3](n) =H[ω × 2 + 1](n + 1) = H[ω × 2](n + 2) = 4(n + 2)
H[ω × 2 + ω](n) = 4(n + n) = 8n = 23 n

H[ω × k](n) =2k n

H[ω 2 + 3](n) =H[ω 2 ](n + 3) = 2n+3 (n + 3)

H[ω 2 ](n) =H[ω 2 + ω](n) =H[ω 2 + ω + k](n) =H[ω × n](n) = 2n n

H[ω 2 + n](n) = 2n+n (n + n) = 22n (2n)H[ω 2 + ω](n + k) = 22(n+k) 2(n + k)

第 5 章 順序数

128
H[ω 2 + ω × 2](n) =H[ω 2 + ω + n](n) = 22(n+n) 2(n + n) = 24n (4n)H[ω 2 + ω × 3](n) =H[ω 2 + ω × 2 + n](n) = 24(n+n) 4(n + n)

H[ω 2 + ω × k](n) =22 n (2k n)

3= 28n (8n) = 22 n (23 n)kn

H[ω 2 × 2](n) =H[ω 2 + ω × n](n) = 22 n (2n n)

ここで、ハーディ階層には次のような性質があります。
✓
ハーディ階層による関数の合成✏

H[α + β](n) = H[α](H[β](n))
ただし、α + β = γ + β, α > γ を満たす γ が存在する場合を除く。
✒✑

つまり、関数 H[α + β](n) は関数 H[α](n) と H[β](n) の合成関数です。

ただし書きは、α = ω 2 + 2, β = ω のときには

α + β = ω2 + 2 + ω = ω2 + ωのように計算されて +2 が消えてしまうので、そのような場合を除くということです。

α = ω 2 , β = ω + 3 のときに H[α + β](n) = H[α](H[β](n)) が成立していることを確認します。

H[α + β](n) = H[ω 2 + ω + 3](n) = 22(n+3) 2(n + 3)
一方、

H[α](n)=H[ω 2 ](n) = 2n nH[β](n)=H[ω + 3](n) = 2(n + 3)

H[α](H[β](n)) =22(n+3) 2(n + 3)となるため、たしかに成立しています。
関数の合成を繰り返すと、

H[α × 2](n)=H[α + α](n) = H[α](H[α](n)) = H[α]2 (n)5.2. 順序数階層
H[α × 3](n)129H[α × 2 + α](n) = H[α × 2](H[α](n))==

H[α]2 (H[α](n)) = H[α]3 (n)H[α × 4](n)=H[α]4 (n)H[α × k](n)=H[α]k (n)H[α × ω](n)=H[α]n (n)となります。関数 H[α × ω](n) は関数 H[α](n) の合成を n 回繰り返した関数、つまり合成を数え上げる原始再帰の操作をした関数です。このことを使うと、

H[ω](n) =2n

H[ω 2 ](n) =H[ω × ω](n) = H[ω]n (n) = 2n nとなり、H[ω 3 ](n)=H[ω 2 × ω](n) = H[ω 2 ]n (n)を計算するために、f (n) = 2n n として

H[ω 2 ](n)=f (n) = 2n n

H[ω 2 × 2](n)=f 2 (n) = 22 n (2n n)=

f 3 (n) = 22

H[ω 2 × 3](n)

n

2n n

(2n n) 2n n

2(2n n)のように計算されていきます。ここでざっくりと f (n) = 2n とすればH[ω 2 ](n)> f (n) = 2n

H[ω 2 × 2](n)> f 2 (n) = 2 ↑ 2 ↑ n > 2 ↑↑ 2

H[ω 2 × 4](n)> f 4 (n) = 2 ↑ 2 ↑ 2 ↑ 2 ↑ n > 2 ↑↑ 4

H[ω 2 × 3](n)> f 3 (n) = 2 ↑ 2 ↑ 2 ↑ n > 2 ↑↑ 3のようにテトレーションで近似できて、

H[ω 3 ](n)>2 ↑↑ nとなります。H[ω 2 ](n) > 2n （べき乗）の原始再帰から H[ω 3 ](n) > 2 ↑↑ n（テトレーション）ができたように、テトレーションの原始再帰から

第 5 章 順序数

130

H[ω 4 ](n) > 2 ↑↑↑ n（ペンテーション）ができて、一般に m > 1 のときにH[ω m ](n)>2 ↑m−1 nとなります。
【証明】
帰納法で証明する。m = 2 では成立する。m = k で成立するとすれば、m = k + 1 の時

H[ω k ](n)>H[ω k × 2](n) =H[ω k × 3](n) =H[ω k+1 ](n) =2 ↑k−1 n
H[ω k ]2 (n) > 2 ↑k−1 2 ↑k−1 n > 2 ↑k 2
H[ω k ]3 (n) > 2 ↑k−1 2 ↑k−1 2 ↑k−1 n > 2 ↑k 3
H[ω k × ω](n) > 2 ↑k nとなり、成立している。

5.2.2

✷

急増加関数

巨大数論では、ハーディ階層と似ている急増加関数16 (FGH; Fast-growing

hierarchy) 17 F [α](n) がよく使われます。
✓【定義】急増加関数 (FGH)✒

F [0](n)=n+1F [α + 1](n)=F [α]n (n)F [α](n)=F [αn ](n)(αが極限順序数の時)

巨大数研究 Wiki では fα (n) という表記が使われていますが、重要な順✏✑

序数を下付き文字にしてしまうと読みにくくなるので本書では F [α](n) の16 巨大数研究 Wiki - 急増加関数 http://ja.googology.wikia.com/wiki/急増加関数

17 田中一之, 角田法也, 鹿島亮, 菊池誠 (1997) 『数学基礎論講義―不完全性定理とその発展』日本評論社

5.2. 順序数階層

131

表記を使います。すなわち、

F [α](n) = fα (n)です。α < ϵ0 の時、ハーディ階層と急増加関数の間にはF [α](n) = H[ω α ](n)という関係があります。急増加関数の 1 番目の定義式については

F [0](n) = n + 1 = H[1](n) = H[ω 0 ](n)と一致し、2 番目の定義式については F [α](n) = H[ω α ](n) が成立すれば

F [α + 1](n)=F [α]n (n) = H[ω α ]n (n)=H[ω α × ω](n)=H[ω α+1 ](n)となって、F [α + 1](n) についても成立するためです。α = ϵ0 のときには、F [α](n) = H[ω α ](n) は厳密には成立しませんがF [ϵ0 ](3)ω=F [ω ω ](3)

=

H[ω ω

≈

H[ϵ0 ](4)

ωω

](3)

となり、F [ϵ0 ](n) ≈ H[ϵ0 ](n + 1) = H[ϵ0 + 1](n) の近似が成り立ちます。
もっと大雑把に F [ϵ0 ](n) ≈ H[ϵ0 ](n) と近似しても良いでしょう。

ハーディ階層と急増加関数を比較すると、急増加関数は順序数が+1 されるだけで f n (n) へととても関数が大きく変わりますので、非常に大まかな近似をするときに適していますが、ハーディ階層は、より細やかな近似をするときに適しています。

1953 年にポーランドの数学者アンジェイ・グジェゴルチク (Andrzej Grzegorczyk, 1922–2014) が発表したグジェゴルチク階層 (Grzegorczyk hierarchy) 18 は、急増加関数の元になったとされています。厳密な定義は省略し
18 Grzegorczyk, A. (1953) Some classes of recursive functions, Rozprawy Matematyczne 4: 1–45.

第 5 章 順序数

132

ますが、グジェゴルチク階層の n 番目の階層 E n に属する関数は、次のような関数になります。

• E 0 は x + 1, x + 2, ... を含む• E 1 は加法関数 x + y, 3x, ... を含む• E 2 は乗法関数 xy, x3 , ... を含む• E 3 はべき乗関数 xy , 22

2xを含む（初等再帰関数, elementary recursivefunction）• E 4 はテトレーション関数を含む
ハイパー n 演算子は E n に含まれますが、E n−1 に含まれません。グジェ

ゴルチク階層に含まれる関数はすべて原始再帰関数で、原始再帰関数はグジェゴルチク階層のどこかに含まれます。グジェゴルチク階層のレベルを
超限順序数に拡張することで急増加関数とすることができることから、急増加関数を拡張グジェゴルチク階層 (extended Grzegorczyk hierarchy) と呼ぶこともあります。
数学史家の鈴木真治によると19 、ハーディ階層が定義された 1904 年の論
文は、カントールの定理を精密化しようとしたものであり、証明論へ応用されることは想像もしていなかっただろうとのことです。もちろん急激に増加する関数を作ろうという意図はなかったことでしょう。そして、急増加関数の歴史的初出はグジェゴルチク階層がよく挙げられるものの、そのオリジナルの定義は現行の急増加関数とはかなり違うので、これを初出とするのは疑問だとしています。1953 年に出版されたイギリスの数学者ジョン・エデンサー・リトルウッド (John Edensor Littlewood, 1885–1977) の20
著作を集めた『数学雑談』に収録されている「大きな数」というエッセイに書かれている関数の定義は、現行の急増加関数の定義に近く、急激に大きくなる関数を見つけようとする意図を持って定義されたものであるため、これが急増加関数の歴史的初出であろうとしています。鈴木真治の本では、
19 鈴木真治 (2016)『巨大数』岩波書店

20 Littlewood, J. E. (1953) A mathematician’s miscellany. Methuen5.2. 順序数階層

133

リトルウッドによる急増加関数の定義を『数学雑談』の和訳本21 から引用
しています。
さて、ハーディ階層の計算で H[ω m ](n) > 2 ↑m−1 n を示しましたので、

F [m](n) = H[ω m ](n) > 2 ↑m−1 nとなります。この近似計算については、『寿司 虚空編』第 6 話で m = 3 について計算がされています。関数 F [α](n) を合成する操作を数え上げる原始再帰関数が F [α + 1](n) となることから、原始再帰操作を m 回使ってできる関数は、F [m](n) 程度の大きさになります。変数 n の回数だけ原始再帰操作を数え上げる関数 F [n](n) は、どのような原始再帰関数よりも大きい 2 重再帰関数です。

F [ω](n) = F [n](n)となることから、F [ω](n) は 2 重再帰関数となります。そして、矢印表記やアッカーマン関数を使ってF [ω](n) > 2 ↑n−1 n = A(n + 1, n − 3) + 3 > A(n, n)のように近似できます。
グラハム数は f (n) = 3 ↑n 3 としたときの f 64 (4) であり、f (n) ≈ F [ω](n)なので、F [ω + 1](n) =F [ω + 1](64)=F [ω]n (n) ≈ f n (n)f 64 (64) ≈ グラハム数となります。巨大数論の近似に慣れると、f (n) = 3 ↑n 3 は ω で f n (n) は+1だから、ω + 1 のレベルの関数になると分かるようになります。
チェーン表記は、チェーンの右端の数を 1 つ増やすことが原始再帰なので順序数に 1 を足すことに相当し、チェーンを 1 つ伸ばすことは順序数にω を足す 2 重再帰に相当します。したがって、
3→3→n

≈

F [ω](n)21 ボロバシュ (編) 金光 滋 (訳) (1990) 『リトルウッドの数学スクランブル』近代科学社

第 5 章 順序数

134
3→3→3→n3→3→3→3→n≈

F [ω + ω](n) = F [ω × 2](n)≈F [ω × 2 + ω](n) = F [ω × 3](n)となり、拡張チェーン表記では次のようになります。
✓
拡張チェーン表記の急増加関数による近似

3 →2 n3 →2 3 →2 n
3 →2 3 →2 3 →2 n
3 →2 3 →2 3 →2 3 →2 n
3 →3 n3 →4 n✒

3 →n n

≈
≈
≈
≈
≈
≈
≈

✏

F [ω × ω](n) = F [ω 2 ](n)F [ω 2 + ω](n)F [ω 2 + ω × 2](n)F [ω 2 + ω × 3](n)F [ω 2 + ω × ω](n) = F [ω 2 × 2](n)F [ω 2 × 3](n)F [ω 2 × ω](n) = F [ω 3 ](n)✑このように、急増加関数の順序数に 1 を足すことは原始再帰で、ω を足すことは 2 重再帰、ω 2 を足すことは 3 重再帰となり、一般に n 重再帰について• n 重再帰作用素は急増加関数の順序数に ω n−1 を足す効果を持つ• n 重再帰関数は F [ω n−1 an−1 + ω n−2 an−2 + ... + a0 ](n) と近似できる
ような再帰の構造を持った関数となります。このことが理解できれば、n 重再帰という考え方よりも急増加関数で再帰の構造を考える方が分かりやすいと思います。
次に、多変数アッカーマン関数とふぃっしゅ数バージョン 3、すなわちF3 の s(n) 変換について、急増加関数を使って近似します。

fb (n) = A(X, b, n) (X は 0 個以上の 0 以上の整数) とすると、
fb+1 (n)=A(X, b + 1, n)=A(X, b, A(X, b + 1, n − 1))=

fb (A(X, b + 1, n − 1))=

fb2 (A(X, b + 1, n − 2))5.2. 順序数階層

135=… = fbn (A(X, b + 1, 0))≈fbn (n)となります。このことと s(1) 変換の定義式 s(1)f (x) = f x (x) から、以下の3 つが同じ計算をしていることが分かります。
1. 多変数アッカーマンで fb (n) = A(X, b, n) として fb+1 (n) ≈ fbn (n)2. s(1) 変換の s(1)f (n) = f n (n)3. 急増加関数の F [α + 1](n) = F [α]n (n)つまり、多変数アッカーマン関数で右から 2 番目の項に 1 を加えることと、

s(1) 変換をすることは、いずれも急増加関数で順序数に 1 を足すことと同じです。

f (n) = n + 1 とすると、
A(2, n)≈A(3, n)≈A(4, n)≈A(m + 1, n)≈

A(n, n)≈s(1)f (n) = f n (n) = F [1](n) = 2ns(1)2 f (n) = F [2](n) = 2n ns(1)3 f (n) = F [3](n) ≈ 2 ↑2 ns(1)m f (n) = F [m](n) ≈ 2 ↑m−1 ns(1)n f (n) = F [n](n)のように、s(1) 変換と急増加関数は完全に一致し、アッカーマン関数は両者に近似されます。そして A(1, 0, n) = A(n, n), s(2)f (n) = s(1)n f (n),F [ω](n) = F [n](n) より、上式の最後はA(1, 0, n)≈s(2)f (n) = F [ω](n)と書き換えることができます。3 変数アッカーマン関数、s(2) 変換、ω がこのように対応します。ここに fb+1 (n) ≈ fbn (n), s(1) 変換, F [α + 1](n) =F [α]n (n) を重ねることでA(1, 1, n)≈

A(1, 2, n)≈s(1)s(2)f (n) = F [ω + 1](n)s(1)2 s(2)f (n) = F [ω + 2](n)第 5 章 順序数

136
A(1, 3, n)≈

A(1, n, n)≈s(1)3 s(2)f (n) = F [ω + 3](n)s(1)n s(2)f (n) = F [ω + ω](n)ここで、最後の式は次の式と同じになります。

A(2, 0, n)≈s(2)2 f (n) = F [ω × 2](n)A(1, 0, n)≈s(2)f (n) = F [ω](n)A(2, 0, n)≈

このように、

s(2)2 f (n) = F [ω × 2](n)となることから、以下同様に計算を続けるとA(3, 0, n)≈

A(4, 0, n)≈

A(n, 0, n)≈

A(1, 0, 0, n)≈

A(2, 0, 0, n)≈

A(n, 0, 0, n)≈

A(1, 0, 0, 0, n)≈s(2)3 f (n) = F [ω × 3](n)s(2)4 f (n) = F [ω × 4](n)s(2)n f (n) = F [ω × n](n) = F [ω 2 ](n)s(3)f (n) = F [ω 2 ](n)s(3)2 f (n) = F [ω 2 × 2](n)s(3)n f (n) = F [ω 2 × n](n) = F [ω 3 ](n)s(4)f (n) = F [ω 3 ](n)のように計算されます。同様に計算を続けると、たとえばA(3, 2, 1, 0, n)≈s(2)s(3)2 s(4)3 f (n) = F [ω 3 × 3 + ω 2 × 2 + ω](n)のようになり、一般に次のようになります。
✓ 多変数アッカーマン関数と s(n) 変換の急増加関数による近似

A(ak , ..., a2 , a1 , a0 , n)≈=✒A(1, 1, ..., 1)% &' (≈✏

s(1)a0 s(2)a1 ...s(k + 1)ak f (n)F [ω k × ak + ... + ω 2 × a2 + ω × a1 + a0 ](n)s(n)f (n) ≈ F [ω ω ](n)n✑すなわち、多変数アッカーマン関数と s(n) 変換の上限は、F [ω ](n) です。
ω5.2. 順序数階層

137

さらに、F3 の ss(n) 変換については、

ss(1)f (n)=ss(1)2 f (x)≈ss(2)f (n)=ss(3)f (n)=ss(4)f (n)=ss(n)f (n)≈s(n)f (n) ≈ F [ω ω ](n)F [ω ω + ω ω ](n) = F [ω ω × 2](n)ss(1)n f (n) ≈ F [ω ω × ω](x) = F [ω ω+1 ](x)ss(2)n f (n) ≈ F [ω ω+2 ](n)ss(3)n f (n) ≈ F [ω ω+3 ](n)F [ω ω×2 ](n)となり、ふぃっしゅ関数とふぃっしゅ数は次のように近似されます。

F3 (n)=

F3=

ss(2)63 f (n) ≈ F [ω ω+1 × 63](n)F363 (3) ≈ F [ω ω+1 × 63 + 1](63)BEAF の配列表記については、多変数アッカーマン関数との間に{n + 1, m + 1, a0 + 1, a1 + 1, a2 + 1, ..., ak + 1} ≈f m (n),f (n) = A(ak , ..., a2 , a1 , a0 , n)という関係があることを示しました (n > 1)。したがって急増加関数によって次のように近似できます。
✓
配列表記の急増加関数による近似

n > 1 として✏{n + 1, m + 1, a0 + 1, a1 + 1, a2 + 1, ..., ak + 1}≈=✒

{3, 3, ..., 3} ≈% &' (

F [ω k × ak + ... + ω 2 × a2 + ω × a1 + a0 ]m (n)k2H[ω ω ×ak +...+ω ×a2 +ω×a1 +a0 × m](n)F [ω ω ](n)n

ふぃっしゅ数バージョン 1 と 2 はすでに多変数アッカーマン関数で近似✑されているので、以上の関係から急増加関数や配列表記でも近似できます。

F3 までの近似をまとめます。

第 5 章 順序数

138

✓

✒

5.2.3

ふぃっしゅ数バージョン 3 までの近似

F1

≈

F2

≈

F3

≈

✏

A(1, 0, 1, 63) ≈ {4, 64, 1, 1, 2} ≈ F [ω 2 + 1](63)A(63, 0, 0, 63) ≈ {4, 2, 1, 1, 64} ≈ F [ω 3 ](63)F [ω ω+1 × 63 + 1](63)

✑

緩増加関数

順序数階層として、もう 1 つ緩増加関数22 (slow-growing hierarchy) を紹介しておきます。
✓✒【定義】緩増加関数 (SGH)

G[0](n)=0G[α + 1](n)=G[α](n) + 1

G[α](n)=G[αn ](n)(αが極限順序数の時)

これはハーディ階層よりも遅く成長します。ワイナー階層を使うと

G[0](n) =0G[1](n) =1

G[2](n) =2

G[m](n) =m

G[ω](n) =nG[ω2](n) =2n2G[ω ](n) =n2G[ω ω ](n) =nnG[ω ω + ω](n) =nn + n

22 巨大数研究 Wiki - 緩増加関数 http://ja.googology.wikia.com/wiki/緩増加関数✏✑

5.3. 順序数解析

139ω

G[ω ω ](n) =nnnのように、順序数の ω を変数 n に置換した関数になるのが面白いところです。したがって、

G[ϵ0 ](n) = n ↑↑ nとなります。順序数階層の中ではとても遅く成長するため、巨大数論であまり使われることはありませんが、テトレーションレベルの関数を順序数で階層化するのには適しています。
ここまで紹介した 3 つの順序数階層の成長速度は、緩増加関数 < ハーディ階層 < 急増加関数となることが分かりました。そしてハーディ階層
は順序数 ϵ0 で急増加関数に追いつきます。それでは、緩増加関数は急増加
関数にどこかで追いつくのでしょうか？ 実は、「自然な」基本列を使うと

ψ0 (Ωω ) という順序数で追いつきます。このことはいずれまた出てきます。
緩増加関数がどの順序数で急増加関数に追いつくかは基本列の選び方によります。基本列の選び方によっては、ϵ0 で追いつくこともあります。

5.3

順序数解析

順序数解析 (ordinal analysis) では、数学の理論体系の証明力を順序数によって評価します。理論体系の証明力を順序数で評価するとはどういう意
味か、という話をするためには、まずは理論体系を形式化するための形式体系とは何か、ということから話を始める必要があります。

順序数による関数の評価をするにあたり、当面は順序数階層だけを理解していれば大丈夫（なので、とりあえず順序数解析の話は飛ばして次の章に進んでも良い）ですが、やがて順序数解析を使う関数や巨大数が出てきますので、ここで説明をしておきます。

形式体系についてしっかりと理解するためには、数理論理学 (mathematical

logic) や数学基礎論 (foundations of mathematics) の分野の本を読み込む必要がありますが、ここでは簡潔に記してそのとっかかりとします。

第 5 章 順序数

140

5.3.1

形式体系

形式体系 (formal system) とは、広い意味では数学のモデルにおける明確に定義された (well-defined) 抽象的思考体系で、以下の要素から構築されます。

1. 式を構築するために使う有限個の記号 (symbol)。
2. 記号から論理式を構築するための文法 (grammer)。通常は、ある式が正しい式であるかどうかを判定するための手続きが必要とされる。

3. 論理式によって記述される公理 (axiom) あるいは型変数が入る公理

型 (axiom schema)。型変数に代入可能な論理式や項の個数が可算無限であれば、公理型は可算無限の公理を表すことになる。

4. 論理式から他の論理式を導く推論規則 (rule of inference)。
ここで、形式体系では集合や自然数などといった、議論する対象である議論領域 (domain of discourse) が想定されていますが、形式体系は「記号、文法、公理、推論規則」のみの体系であって、議論領域は形式体系とは独立していると考えるようです。形式体系で使われている記号が「本当は何を意味するか」は形式体系は関知しないということです。そのようにする
ことで、1 つの形式体系が異なる議論領域を兼ねることができて便利な場合もあるためです。厳密な議論をするのでなければ、議論領域を形式体系に含めて、まとめて 1 つの形式体系と考えても支障はないでしょうから、本書ではそのあたりは適宜緩やかに考えます。
公理とすでに証明された定理から、推論規則によって導かれた論理式は定理となります。ある論理式を証明することは、その論理式が定理である
ことを導くこととも言えます。

5.3.2

一階述語論理現代の数学で標準的な形式体系は述語論理 (predicate logic) です。述語論理の特徴は、論理式に含まれる変数を量化 (quantification) できるところにあります。量化とは、「全ての」とか「いくつかの」といったような量に

5.3. 順序数解析

141

関する表現です。たとえば、「2 は自然数である」「3 は自然数である」という文章を主語と述語に分解すると、それぞれ「自然数である」が述語になります。このような述語を持っている文は「n は自然数である」と主語を変数 (variable) で書き換えることができて、それは n に関する条件文（真偽を判定できる文）になります。すると、その条件文が真となるような nの量について言及する量化した表現が生まれます。たとえば「全ての自然
数 n に対して」とか「ある自然数 n に対して」といった文です。それが述語論理の特徴ということです。
量化は量化子 (quantifier) という記号を使って表現されます。量化子には「全ての〜に対して (for all)」を意味する全称記号 (universal quantifier)∀ と「〜が存在する (exists)」を意味する存在記号 (existential quantifier)∃があります。

数学基礎論では、主に一階述語論理 (first-order predicate logic) をベースとして数学の理論体系を形式化します。一階述語論理は、変数の量化のみを許す述語論理で、変数の量化に加えて述語や関数の量化を許す述語論
理は二階述語論理 (second-order predicate logic) です。それでは一階述語論理について説明します。

1. 記号は、論理記号と非論理記号に分かれます。論理記号 (logical symbol) は、• 量化子 ∀ と ∃• 論理演算 ∧（論理積）、 ∨（論理和）、¬（否定）、→（論理包含）、↔（同値）• 括弧 ( )• 無限個の変数 x, y, z, ...

• 等号 = （含まない場合もある）
です。ここで、これらすべての記号が必要ではなく、たとえば ¬, →, ∀だけを定義すれば他の量化子と論理演算はすべてその記号のみで書き換え可能なため、必要な記号だけで代表させる場合もあります。等号の取り扱いにはいくつかの流儀があり、論理記号に等号を含む場合は

第 5 章 順序数

142「等号付き一階述語論理」です。等号を含まない場合は「等号無し一階述語論理」で、その場合は非論理記号として等号を導入します。
非論理記号 (non-logical symbol) は、解釈によって意味が変わる述語
記号と関数記号です。定数記号は 0 変数関数なので関数記号に含まれます。そして、非論理記号に何を使うかで一階述語論理の言語が決まります。たとえば集合を議論領域とするときには、非論理記号として
述語記号 ∈ を使います。非論理記号をシグネチャ (signature) としてまとめて表記することがあります。

2. 記号から論理式を構成するための構成規則 (formation rule) すなわち
文法は、このようなものです。
まずは項 (term) を次のように帰納的に定義します。(1) 変数は項です。(2)n 変数関数 f と項 t1 , ..., tn に対して、f t1 ...tn は項です。定数
記号は 0 変数関数なので項となります。

次に、n 変数の述語記号 P と n 個の項 t1 , ..., tn に対して、P t1 ...tn は原子論理式 (atomic formula) であると定義します。

そして、論理式 (formula) は次のように帰納的に定義されます。(1)原子論理式は論理式です。(2) ψ と φ を論理式、x を変数記号として、¬ψ, ψ ∧ φ, ψ ∨ φ, ψ → φ, ψ ↔ φ, ∀xψ, ∃xψは論理式です。

3. 公理には論理公理と非論理公理があります。
論理公理 (logical axiom) の選び方にはいろいろな流儀があるようですが、その一例を示します。

(a) トートロジー (tautology) すなわち恒真命題（真である、という論理式）(b) 命題論理の公理として、以下のウカシェビッチ公理系 ("Lukasievicz’s
axiom system) （φ, ψ, θ には任意の論理式が入るため、無限の公理を含む公理型となる）• φ → (ψ → φ)

5.3. 順序数解析

143• (φ → (ψ → θ)) → ((φ → ψ) → (φ → θ))• (¬φ → ¬ψ) → (ψ → φ)(c) 一階述語論理の公理• 等式の公理 (axiom of equality): 変数 x について x = x• 普遍例化の公理型 (axiom scheme for universal instanti-

ation): φxt を φ の変数 x に項を代入した論理式として、∀xφ → φxt

• 存在一般化の公理型 (axiom scheme for existential generalization): φxt → ∃x φ

非論理公理 (non-logical axiom) は、議論領域に関する公理です。たとえば集合を議論領域とするときには、 公理的集合論における ZF

公理系か、それに選択公理を加えた ZFC 公理系が使われます。自然数を議論領域とするときに、次に説明するロビンソン算術やペアノ算術、後に説明する 2 階算術のような理論体系が選ばれると、それに応じた公理系が設定されます。

4. 推論規則にはいろいろなものがありますが、よく使われる方法はモーダス・ポーネンス (modus ponens) と全称化 (generalization) の 2 つを推論規則とします。モーダス・ポーネンスは、ψ と ψ → φ から φを導出するという規則です。全称化は、x が変数のとき ψ から ∀xψ
を導出するという規則です。

5.3.3

算術の理論体系

自然数と演算を議論領域とした一階述語論理として、いくつかの算術の理論体系があります。その中でも基本的なものとして、ロビンソン算術(Robinson arithmetic) Q とペアノ算術 (Peano arithmetic) P A について説明します。

1891 年にイタリアの数学者ジュゼッペ・ペアノ (Giuseppe Peano, 1858–

1932) が自然数を公理化した ペアノの公理23 (Peano axioms) を作りまし23 http://mathworld.wolfram.com/PeanosAxioms.html

第 5 章 順序数

144

た。自然数と演算（加算と乗算）を議論領域とした一階述語論理に、非論理的公理としてペアノの公理を入れたものがペアノ算術 P A で、ペアノ算術
から帰納法を除いたものがロビンソン算術 Q です。Q と P A で使う非論理
記号は、定数記号 0、関数記号 S（後者関数）と+（加算）と・（乗算）です。
論理記号には等号 = を含めます。Q の非論理公理は、以下の 7 つです。

1. ∀x¬(S(x) = 0) （0 は他の数の後者ではない。）
2. ∀x∀y(S(x) = S(y) → x = y) （x と y の後者が等しければ、x と yは等しい。）

3. ∀x(¬(x = 0) → ∃y(x = S(y))) （任意の数は 0 であるか別の数の後者である。）

4. ∀x(x + 0 = x)
5. ∀x∀y(x + S(y) = S(x + y)) （4 と 5 で加算を帰納的に定義）
6. ∀x(x · 0 = 0)
7. ∀x∀y(x · S(y) = (x · y) + x) （6 と 7 で乗算を帰納的に定義）
そして、P A の非論理公理は、Q の公理に次の帰納法の公理を加えたものです（ただし、Q の 3 番目の公理は、帰納法の公理から証明できるので不要）。
帰納法の公理: ∀⃗y [φ(0, ⃗y ) ∧ ∀x(φ(x, ⃗y ) → φ(S(x), ⃗y ))) → ∀xφ(x, ⃗y )]ここで、φ(x, ⃗y ) は P A の任意の論理式で、⃗y = y1 , y2 , , ..., yk (k ≥ 0) です。この公理は、いわゆる数学的帰納法を意味しています。論理式 φ(x, ⃗y)の取り方は任意なので、P A は Q に無限に多くの公理を加えた体系になります。つまり、一階述語論理では φ を量化して ∀φ のような表記ができな

いので、個々の論理式がすべて公理となっている、と考えています。また、ペアノの公理には加算と乗算の定義はなく、後者から帰納法によって定義しますが、それには二階述語論理を使うため、一階述語論理の上に構築されている P A には、Q と同様に加算と乗算の公理が入っています。

Q では 3 · 2 + 1 = 7 のような数値に関する命題は証明できますが（ここで、自然数は 0, S(0), S(S(0)), ... を略記したものと考える）、変数が入った
命題については証明できないものが多く、P A では ∀x(0 + x = x) のよう5.3. 順序数解析

145

な、Q では証明ができない変数の入った多くの命題が証明できます。ただし不完全性定理があるため、自然数のすべての性質が P A で証明できるわけではありません。
このように Q よりも P A の方が多くの命題を証明できますので、Q よりも P A の方が証明論的に強い理論体系、つまり証明力が強い理論体系ということになります。

5.3.4

順序数解析

Q よりも P A の方が証明力が強い、ということを説明しました。それでは、証明力の強さを比較するための物差しはあるでしょうか。実は、順序数が良い物差しになります。そして、ある理論体系の証明力の強さを順序数と関連づける方法が順序数解析です。
理論体系 T の証明論的順序数 (proof theoretic ordinal) は、その理論では整礎であることが証明できないような最小の順序数です。たとえば、P Aの証明論的順序数は ϵ0 です。したがって、P A では ϵ0 よりも小さい順序数

α が整礎であること、つまり α からの無限降下列を作ることができないことを証明できますが、ϵ0 からの無限降下列を作ることができないことの証
明はできません。

P A では帰納法が使えましたが、それを順序数のような整礎集合に拡張したものが、超限帰納法 (transfinite induction) です。順序数 α に対して
命題 P (α) を考えます。
「すべての β < α に対して P (β) が真であれば、P (α) は真である」ことが示されれば、P はすべての順序数で真になるとするのが超限帰納法です。
超限帰納法が使えれば、ϵ0 以下のすべての順序数が整礎であることから、超限帰納法によって ϵ0 が整礎であると証明できます。しかし P A には超限帰納法がないため、その証明ができません。P A よりも強い理論体系であればその証明ができるものがあり、その理論体系にはやはりまた証明論的
順序数 α が存在します。

146

第 5 章 順序数

順序数解析の研究がどのように進められてきたか、新井 (2005) 24 は以下のように解説しています。P A の証明論的順序数が ϵ0 であることの証明を与えたのは、ドイツの論理学者・数学者のゲルハルト・ゲンツェン (Gerhard

Gentzen, 1909–1945) です。まずは P A における証明から、推論規則の流れを図示した証明図を書きます。その証明図には帰納法の公理が含まれていますが、帰納法の公理は実際には無限の公理が含まれている公理型です。
それを有限の公理に書き換える操作と、カット除去という操作を繰り返す
ことで、論理的な証明図になります。ゲンツェンは、P A の証明を論理的な証明図にするためには、ϵ0 までの帰納法が必要であることを示しました。
その後、竹内外史は ϵ0 よりも大きな順序構造を証明図において見出して、証明論における順序数図形 (ordinal diagram) を作りました。その証明図の限界が、後の章で紹介する「竹内・フェファーマン・ブーフホルツ順序数」(p.186) と名付けられる順序数です。
このように、ϵ0 よりも大きい順序数は、ある理論体系における証明論的

順序数を解析するために研究をされてきた面もあるようです。

24 新井敏康 (2005) 「Hilbert の第 2 問題に関する証明論の展開」数学 57(2): 113-126.
doi:10.11429/sugaku1947.57.113

147

第

6章
ペアノ算術の限界

本章では F [ϵ0 ] 以下の大きさの再帰関数について扱います。ペアノ算術の証明論的順序数は ϵ0 であり、F [ϵ0 ] はペアノ算術で全域性（定義域がすべての自然数になること、つまりすべての自然数 n に対して f (n) が計算されること）を証明可能ないかなる関数も支配することが証明されています。
そして、F [ϵ0 ] の全域性はペアノ算術では証明できません。つまり、F [ϵ0 ]はペアノ算術で定義できる関数の増加速度の限界です。本章では、その限界に到達した関数を紹介します。

6.1

F [ϵ0 ](n) の計算

まずは、ワイナー階層で F [ϵ0 ](n) を計算してみます。

F [ϵ0 ](0) =F [1](0) = H[ω](0) = H[0](0) = 0

F [ϵ0 ](1) =F [ω](1) = F [1](1) = H[ω](1)=F [ϵ0 ](2) =H[1](1) = 2
F [ω ω ](2) = F [ω 2 ](2) = F [ωω](2)=F [ω2](2) = F [ω + ω](2)=F [ω + 2](2)(≈ A(1, 2, 2))=

F [ω + 1]2 (2) = F [ω + 1](F [ω + 1](2))=

F [ω + 1](F [ω](F [ω](2)))

第6章

148
=

F [ω + 1](F [ω](F [2](2)))=

F [ω + 1](F [ω](8))=

F [ω + 1](F [8](8))≈

F [ω + 1](2 ↑7 8)≈
F [ϵ0 ](3)A(1, 1, 2 ↑7 8)
ω

ペアノ算術の限界

3=

F [ω ω ](3) = F [ω ω ](3)=F [ω ω ω ](3) = F [ω ω 3 ](3)=F [ω ω 2+ωω ](3)=F [ω ω 2+ω2+3 ](3)=F [ω ω 2+ω2+2 ω](3)=F [ω ω 2+ω2+2 3](3)=F [ω ω 2+ω2+2 2 + ω ω 2+ω2+2 ](3)=F [ω ω 2+ω2+2 2 + ω ω 2+ω2+1 3](3)=F [ω ω 2+ω2+2 2 + ω ω 2+ω2+1 2 + ω ω 2+ω2+1 ](3)=F [ω ω 2+ω2+2 2 + ω ω 2+ω2+1 2 + ω ω 2+ω2 3](3)=F [ω ω 2+ω2+2 2 + ω ω 2+ω2+1 2 + ω ω 2+ω2 2 + ω ω 2+ω2 ](3)=F [ω ω 2+ω2+2 2 + ω ω 2+ω2+1 2 + ω ω 2+ω2 2 + ω ω 2+ω+ω ](3)=F [ω ω 2+ω2+2 2 + ω ω 2+ω2+1 2 + ω ω 2+ω2 2 + ω ω 2+ω+3 ](3)=F [ω ω 2+ω2+2 2 + ω ω 2+ω2+1 2 + ω ω 2+ω2 2 + ω ω 2+ω+2 3](3)=F [ω ω 2+ω2+2 2 + ω ω 2+ω2+1 2 + ω ω 2+ω2 2 + ω ω 2+ω+2 2

2

2

2

2

2

2

2

2

2

2

2

2

2

2

2

2

2

2

2

2

2

2

2

2

2

2

2

2

2

2

2

2

2

2

2

2

2

2

2

2

2

2

2

+ ω ω 2+ω+1 2 + ω ω 2+ω 2 + ω ω 2+2 2 + ω ω 2+1 2 + ω ω 2 222+ ω ω +ω2+2 2 + ω ω +ω2+1 2 + ω ω +ω2 2 + ω ω +ω+2 2
2

2

2

2

2

+ ω ω +ω+1 2 + ω ω +ω 2 + ω ω +2 2 + ω ω +1 2 + ω ω 2+ ω ω2+2 2 + ω ω2+1 2 + ω ω2 2 + ω ω+2 2 + ω ω+1 2 + ω ω 2+ ω 2 2 + ω2 + 3](3)
このように、F [ϵ0 ](3) の時点で絶望的に計算に終わりが見えないことが分かります。

6.2. ドル関数の角括弧表記

6.2

149

ドル関数の角括弧表記

Googology Wiki ユーザーの Wythagoras が 2013 年に開発したドル関数1(dollar function) は、最も基本的な表記である角括弧表記 (bracket notation)が比較的分かりやすい定義で F [ϵ0 ] の強さを持っています。
✓【定義】ドル関数の角括弧表記

X は何でも良い。

✏

a は$の前の数である。
1. a$ = a ($の後に何もないとき)
2. a$Xb = (a + b)$X
3. [Xb] = [Xb − 1][Xb − 1]...[Xb − 1][Xb − 1] (a 個の X)
4. X0 = X (X が空でないとき)
5. [0] = a
右から左へ向かって数を探して、最初に見つかった数をアクティブな数とし、その数の右にある角括弧をアクティブな角括弧とする。ルール 3 以降についてはアクティブな数と角括弧に対して計算を実行する。
✑✒
この計算ルールにしたがって計算をすると、

a$[0]

=

a$a = 2a$ = 2a = F [1](a)

a$[1]

=

a$[2]

=

a$ [0][0]...[0] = 2a a = F [2](a)% &' (aa$ [1][1]...[1] = F [3](a)% &' (
aa$[b] =

F [b + 1](a)a$ [[0]]=a$[a] > F [a](a) = F [ω](a)a$[[0]1]=a$ [[0]][[0]]...[[0]] > F [ω + 1](a)
%
&'
(
a

1 巨大数研究 Wiki - ドル関数 http://ja.googology.wikia.com/wiki/ドル関数

第6章

150
a$[[0]2]=

ペアノ算術の限界

a$ [[0]1][[0]1]...[[0]1] > F [ω + 2](a)
%
&'
(
a

a$[[0][0]] =a$ [[1]]=

a$[[1]1]=

a$[[0]a] > F [ω × 2](a)a$[[0][0]...[0]] > F [ω 2 ](a)% &' (
aa$ [[1]][[1]]...[[1]] > F [ω 2 + 1](a)
%
&'
(
a

a$[[1][0]]a$[[1][0][0]3]
a$[[1][1]]a$ [[2]]=

a$[[1]a] > F [ω 2 + ω](a)> F [ω 2 + ω × 2 + 3](a)> F [ω 2 × 2](a)=a$[[1][1]...[1]] > F [ω 3 ](a)% &' (aa$[[b]c]> F [ω

a$[[[0]]] =b+1+ c](a) > F [ω b + c](a)a$[[a]] > F [ω ω ](a)b+1a$[[[b]c]d]> F [ω ω+ca$ [[[[0]]]]> F [ω ω ](a)a$ [[[[[0]]]]]> F [ω ωb+ d](a) > F [ω ω +c + d](a)

ω

ωω

](a)

といったように、角括弧の入れ子を 1 つ増やすと ω の指数タワーが 1 つ増えるので、これは F [ϵ0 ] の強さを持つ関数となります。さらに、拡張角括弧表記では各括弧に下付き文字のレベルをつけて、たとえば

a$[[0]2 ] = a$ [[...[[0]]...]] (a + 1 重の角括弧)のようになります（レベルの展開方法の定義は省略します）。このことを使うと、

a$[[0]2 ]≈F [ε0 ](a)と F [ϵ0 ] の強さを持つ関数を簡潔に書くことができます。

このように、ドル関数は拡張角括弧表記、線形配列表記とさらに大きな関数が定義されていますが、本書で取り上げるのは角括弧表記までとします。

6.3. ふぃっしゅ数バージョン 5

6.3

151

ふぃっしゅ数バージョン 5

バージョン 3 の次は、バージョン 4 ではなくバージョン 5 の説明をします。巨大数探索スレッドでは、バージョン 4 が先に登場するのですが、本書では章を進めるにしたがってより大きな数が登場するように記述しているため、バージョン 5 よりも大きいバージョン 4 の説明は後回しにします。
「関数から関数への写像を考える」という考えをさらにすすめると、「関数から関数への写像」から「関数から関数への写像」への写像を考えることができます。では、このような写像に対して写像を適用する回数の数え上げを定義することはできないでしょうか。このような考察を進めた結果、
以下の様なふぃっしゅ数バージョン 5 が定義されました2 。
【定義】ふぃっしゅ数バージョン 5

1. 集合 Mn (n = 0, 1, 2, ...) を以下のように定める。
M0 =自然数の集合
Mn+1 =写像 Mn → Mn 全体の集合
Mn の元を Mn 変換と呼ぶ
2. Mn 変換 m(n)(n ≥ 1) を以下のように定める。
fn ∈ Mn に対して、m(n + 1)(fn ) = gn を以下で定める。
fn−1 ∈ Mn−1 に対して、gn (fn−1 ) = gn−1 を以下で定める。

fn−2 ∈ Mn−2 に対して、gn−1 (fn−2 ) =gn−2 を以下で定める。
..
.

f0 ∈ M0 に対して、g1 (f0 ) = g0を以下で定める。

g0 =(..((fnf0 fn−1 )fn−2 )...f1 )f0
2 http://ja.googology.wikia.com/wiki/ふぃっしゅ数バージョン 5

第6章

152

ペアノ算術の限界

すなわちm(1)(f0 )=f 0 f0(m(2)f1 )f0=(f1 f0 )(f0 ):= (..(fn f0 fn−1 )...f1 )f0(..((m(n + 1)fn )fn−1 )...f1 )f0

3. ふぃっしゅ関数 F5 (x) を以下のように定める。
F5 (x) := ((..((m(x)m(x − 1))m(x − 2))...m(2))m(1))(x)4. ふぃっしゅ数 F5 := F563 (3) とする。
定義 2 より、m(1)(x) = xx です。また、(m(2)f )(x) = (f x )(x)となりますから、m(2) は F3 における s(1) の定義と一致し、

m(2) = s(1)となります。さらに、((m(3)m(2))f )(x) =(m(2)x f )(x)= (s(1)x f )(x)= (s(2)f )(x)すなわち、m(3)m(2) = s(2)((m(3)2 m(2))f )(x)=((m(3)(m(3)m(2)))f )(x)=((m(3)m(2))x f )(x)=(s(2)x f )(x)=(s(3)f )(x)すなわち、m(3)2 m(2) = s(3)m(3)n m(2) =s(n + 1)

6.3. ふぃっしゅ数バージョン 5

153

m(4)m(3)m(2) =ss(1)といったように、計算ができます。すなわち、m(3) は操作の対角化で、m(2) =s(1) の原始再帰に対して、m(3) を繰り返し適用することで m(3)n m(2) =s(n + 1) の多重再帰が生成されます。それを数え上げるのが m(4) ということです。
急増加関数との対応を考えると、m(2) の定義から f (x) ≈ F [α](x) の時、

m(2)f (x) ≈ F [α + 1](x) となりますが、これを m(2) = F [+1] と便宜的に表記することとします。すると、

m(3)m(2)=s(2) = F [+ω]m(3)m(3)m(2)=s(3) = F [+ω 2 ]m(3)a m(2)=s(a) = F [+ω a ]m(4)m(3)m(2)=ss(1) = s(x) = F [+ω ω ]となります。さらに、

m(3)[m(4)m(3)]m(2) =ss(2) = F [+ω ω+1 ]

m(3)2 [m(4)m(3)]m(2) =ss(3) = F [+ω ω+2 ]m(3)a [m(4)m(3)]m(2) =012m(4)m(3) m(2) =ss(a + 1) = F [+ω ω+a ]ss(n) = F [+ω ω×2 ]ここまでが、F3 の定義で記述できるところです。さらに、

012m(4)m(3) m(2)013m(4)m(3) m(2)01am(4)m(3) m(2)01
m(4)2 m(3) m(2)01
m(3) m(4)2 m(3) m(2)0101m(4)m(3) m(4)2 m(3) m(2)012 01
m(4)m(3) m(4)2 m(3) m(2)013 01
m(4)m(3) m(4)2 m(3) m(2)

=
=
=
=
=
=
=
=

0
1
F +ω ω×2
0
1
F +ω ω×3
0
1
F +ω ω×a0
21
F +ω ω
0
1
2
F +ω ω +1
0
1
2
F +ω ω +ω0
1
2
F +ω ω +ω×2
0
1
2
F +ω ω +ω×3

第6章

154
0

12
m(4)2 m(3) m(2) =0
13m(4)2 m(3) m(2) =ペアノ算術の限界

0
1
2
F +ω ω ×2 (x)012
F +ω ω ×3 (x)031
F +ω ω
041
F +ω ω
0
ω1
F +ω ω

m(4)3 m(3)m(2) =m(4)4 m(3)m(2) =m(5)m(4)m(3)m(2) =このように計算されます。
これまでの計算から、

m(3)m(2) =F [+ω]

m(4)m(3)m(2) =F [+ω ω ]m(5)m(4)m(3)m(2) =F [+ω ω ]m(6)m(5)m(4)m(3)m(2)=F [+ω ∧∧ 4]

m(7)m(6)m(5)m(4)m(3)m(2)=..
.

F [+ω ∧∧ 5]ω

となり、同様にとなることが期待されます。このとき、

F5 (x) ≈ F [ϵ0 ]となります。したがって、F5 ≈ F [ϵ0 + 1](63)となります。

6.4

ヒドラゲーム

本節ではヒドラゲームについて記します。その前に、グッドスタイン数列の話の続きをします。グッドスタイン数列の話 (2.2 節、p.57) が、ずっ

6.4. ヒドラゲーム

155と放置されてきました。ようやく続きを話すことができます。n で始まる
グッドスタイン数列が終了するまでのステップ数を返すグッドスタイン関

数 G(n) の大きさは、なんと H[ϵ0 ] のレベルなのです。数列の定義は原始再帰なのに、関数はこんなに大きくなる、実に面白い関数です。

グッドスタイン数列は急激に増加しますが、やがて減少に転じ必ず 0 となって数列が終わることが証明されています。これをグッドスタインの定理 (Goodstein’s theorem) と言います3 。なぜ、必ず 0 になるのでしょうか。
それは次のように証明します。

グッドスタイン数列の遺伝的記法で、数の底のところを順序数 ω で書き換えます。このとき、nk の和で書かれていればそのまま ω k に書き換えるだけですが、ak nk の和で書かれている場合は、ω k × ak と書き換えます。

19 ではじまるグッドスタイン数列を、そのように書き換えてみます。
G0 (19)=22 + 2 + 1 → ω ω + ω + 1

G1 (19)=33 + 3 → ω ω + ω

G2 (19)=44 + 3 → ω ω + 3

G3 (19)=55 + 2 → ω ω + 2

G4 (19)=66 + 1 → ω ω + 1

G5 (19)=77 → ω ω

2

ω

3

ω

4

ω

5

ω

6

7

ω

ω

対応する順序数を見ると、どんどん小さくなっています。これは、グッド
スタイン数列における 2 つの演算のうち、底を変換する演算は底を ω にしてしまったため変わらず、1 を引く演算によって、より小さい順序数となるためです。G6 (19) については、非常に長い順序数の式が並ぶことになりま

すが、Σ(ω Σ(ω ×b) × c) の形に書けます。もともとの数列を nk の和の形でa書いていれば、Σω Σω の形になり、ω ω よりも小さくなっています。
aω

順序数は整礎なので、無限降下列をとることができません。つまり、順序数の降下列は、必ず有限ステップで 0 になります。したがって、必ずグッドスタイン数列は有限ステップで値が 0 になって終了します。
3 Goodstein, R. L. (1944). On the restricted ordinal theorem. Journal of Symbolic
Logic 9 (2): 33-41. doi:10.2307/2266486

第6章

156

ペアノ算術の限界

図 6.1: ヒドラの構造。Kirby and Paris (1982) から引用。
さて、このようにしてグッドスタインの定理が証明されましたが、一方でカービーとパリスは、ペアノ算術をもってしてはグッドスタインの定理は証明できない、ということを証明しました4 。ある特定のグッドスタイ
ン数列が必ず 0 になる、ということは証明できますが、すべてのグッドス
タイン数列が必ず 0 になる、ということを言うためには超限再帰が必要となり、ペアノ算術の理論体系だけでは証明ができないのです。
カービーらは論文でこの証明をするときに、ヒドラゲーム (Hydra battle)を考えました。ヒドラゲームとは、ギリシア神話に登場するヘラクレス(Hercules) とヒドラ (Hydra) の戦いにヒントを得たもので、ヒドラ（ヒュドラーとも書く）は巨大な胴体とたくさんの首を持ち、１本の首を切り落としても、すぐにそこから新しい 2 本の首が生えてきます。
そこで次のようなヒドラを考えます。ヒドラは図 6.1 のように有限の樹の構造を持っていて、複数のノード (node) がセグメント (segment) で結ばれています。樹の根元はルート (root) と呼び、すべてのノードは下に 1つずつセグメントを降りて行くと、必ずルートに到達します。そして一番上のノードをトップノード (top node) と呼び、トップノードにつながれているセグメントを首 (head) と呼びます。

4 Kirby, L. and Paris, J. (1982) Accessible independence results for Peano arithmetic.
Bulletin London Mathematical Society 14(4): 285–293. doi:10.1112/blms/14.4.285

traverse one segment towards the root until the next node is reached. From this nodesprout n replicas of that part of the hydra (after decapitation) which is "above" thesegment just traversed, i.e., those nodes and segments from which, in order to reachthe root, this segment would have to be traversed. If the head just chopped off had
the root as one of its nodes, no new head is grown.
6.4. ヒドラゲーム
157
Thus the battle might for instance commence like this, assuming that at eachstage Hercules decides to chop off the head marked with an arrow:after stage 2

after stage 3

図 6.2: ヒドラゲームの進行。Kirby and Paris (1982) から引用。
ヒドラゲームはこのようなルールです。ヘラクレスは、ヒドラの首を 1
回につき 1 つ切り落とします。n 回目に切り落としたときに、ヒドラは n
個の頭が生えます。その生え方は、今、切り落とした首からセグメントを 1
つ下に降ります。そのセグメントから上に伸びている木の形と同じ形の木の構造が、今度はそこからさらに 1 つセグメントを下に降りたノードから

n 個コピーされます。ここで、それ以上ノードが下がれないときには、首が生えません。
ヒドラゲームは図 6.2 のように進行します。図では切り落とす首が矢印で示されています。左上の図が最初のヒドラの構造で、首を切り落とすと、

after stage 1 の形になります。これは切り落とした首の 1 つ下のノードから上を見たときの V 字構造が 1 つ、さらに 1 つ下のノードからコピーされました。次に、stage 2 では切り落とした首の 2 つ下のルートから、今度は

2 つコピーされます。次は 3 つ、次は 4 つとコピーされる数が増えるので、ヒドラはどんどん増殖します。
ヘラクレスは有限の回数首を切ることで、ルート以外のすべてを切り落とすことができればこのゲームに勝ちます。どのような順番で首を切れば、勝つことができるでしょうか。実はどの順番で切っても勝つことが分かり

第6章

158

ペアノ算術の限界

ます。どうしてでしょうか。
ヒドラの構造で、各ノードを順序数に割り当てます。トップノードには 0を、他のノードには、その上のノードに割り当てられる順序数 α1 ≥ · · · ≥ αnに対して、ω α1 + · · · ω αn を割り当てます。図 6.1 のヒドラの構造図で、一番左上のノードから下に降りると、0 → 3 → ω ω + ω 3 →ω ω +ω + ω ω +1 のω

32

ように割り当てられます（カントールの標準形に準じて大きい順序数から順に足すこととします）。このとき、ルートに割り当てられた順序数が、ヒドラに対応づけられる順序数です。
ヘラクレスがどのような順番で首を切っても、必ずヒドラの順序数は小さくなります。グッドスタイン数列のときには、順序数が小さくなる道順が一つに決まりましたが、ヒドラゲームでは自由に順路を選ぶことができます。グッドスタイン数列もヒドラゲームもともに、最初は爆発的に増加するけれど最後はなくなってしまうこと、順序数と対応付けると順序数が小さくなること、といった意味で共通しています。
カービーとパリスは、ヒドラゲームと対応づけながら、G(n) が H[ϵ0 ] と同じだけの増加速度を持つこと、もっと正確には、ϵ0 よりも小さい全ての順序数 α に対して、グッドスタイン関数 G(n) が H[α] よりも増加速度が速いことを証明しました。
グッドスタイン関数については、Caicedo (2007) 5 が、

n = 2m1 + 2m2 + · · · + 2mk (m1 > m2 > · · · > mk )に対してG(n) = F [R2ω (m1 )](F [R2ω (m2 )](· · · (F [R2ω (mk )](3)) · · · )) − 2となることを示しました。ここで、R2ω (n) は n を 2 を底とした遺伝的記法で書いて、2 を ω に変えたものです。したがって、たとえば n = 13 = 23 +22 +20に対してG(13) ==

F [R2ω (3)](F [R2ω (2)](F [R2ω (0)](3))) − 2
F [ω + 1](F [ω](F [0](3))) − 2

5 Caicedo, A. (2007) Goodstein’s function. Revista Colombiana de Matemáticas 41(2): 381–391. http://ref.scielo.org/2c53my6.4. ヒドラゲーム

159=

F [ω + 1](F [ω](4)) − 2=

F [ω + 1](F [4](4)) − 2

n = 2 ↑↑ 5 = 265536 に対してはG(265536 )

=
=
=

22

F [R2ω (22 )](3) − 2
F [ω ωωωω3](3) − 2F [ω ω ](3) − 2のように計算されます。
ふぃっしゅ数バージョン 5 の m(n) 変換の構造は、ヒドラゲームと対応する順序数の関係に対応します。m(2) → m(3) → m(4) と操作の対角化を繰り返すことは、ヒドラのセグメントを上に上がって行くことに相当しま
す。下から数えて n 番目のノードが、m(n) に対応します。F5 と急増加関数の対応（p. 153）で示した

2[m(4)m(3)]3 [m(4)2 m(3)]m(2) ≈ F [+ω ω +ω×3 ]の計算において、[m(4)m(3)]3 の部分は ω × 3 に対応し、m(4)2 は 2 に、

m(4)2 m(3) は ω 2 に対応しています。そしてハーディ階層によって[m(4)m(3)]3 [m(4)2 m(3)]m(2)m(1) ≈ H[ω ωω 2 +ω×3]と近似できます。F5 の定義では m(1)(x) = xx ですが、m(1)(x) = x + 1としても再帰の階層は変わらず、m(1)(x) = x + 1 とした m(n) 変換はハーディ階層とほとんど一致します。
図 6.1 のヒドラツリーでは、一番左上のトップノードはルートから上に3 個上がったところなので m(3) です。その下のノードは、上に m(3) が 3
つついていて自身が m(2) なので、m(3)3 m(2) になります。その 1 つ下のノードは、m(3)3 m(2) と m(4)m(3)m(2) がついている m(1) ノードなので[m(3)3 m(2)][m(4)m(3)m(2)]m(1) です。そして一番下のルートノードは[m(2)[m(3)2 m(2)]m(1)] [[m(3)3 m(2)][m(4)m(3)m(2)]m(1)] (x)となります。この関数は対応する順序数のハーディ階層
ω32H[ω ω +ω + ω ω +1 ](x)

第6章

160

ペアノ算術の限界で近似できます。

6.5

原始数列数

原始数列数6 (primitive sequence number) は、バシク7 が考案した巨大数で、巨大数探索スレッド 10 に投稿された BASIC のプログラムによって計算される F [ϵ0 + 1](10) 程度の大きさの数です。バシクは、原始数列数のプログラムに続いてペア数列数 (p.205) のプログラムを投稿しました。原
始数列数を生み出すアルゴリズムを原始数列システム (primitive sequencesystem) と言い、 ベクレミシェフの虫8 (Beklemishev’s worms) 9 とよく似ていて、F [ϵ0 ](n) の強さです。
【定義】原始数列システム
非負整数のリスト S = (S0 , S1 , . . . , Sn ) が原始数列である。非負整数n から非負整数 S[n] への関数 S[n] を次のように定める。 f (n) = n2
とおく。

• ()[n] = n• Sn = 0 のとき、 S[n] = (S0 , S1 , . . . , Sn−1 )[f (n)]• Sn > 0 のとき、数列の良い部分 g と悪い部分 b を次のように決める。ここで、Sn は良い部分にも悪い部分にも属さない。

i < n, Si < Sn をみたす非負整数 i が存在するかどうかを考える。

– i が存在しないときは g = (S0 , . . . , Sn−1 ), b = () とする。

6 http://ja.googology.wikia.com/wiki/原始数列数

7 http://ja.googology.wikia.com/wiki/ユーザー:BashicuHyudora
8 http://ja.googology.wikia.com/wiki/ベクレミシェフの虫

9 Beklemishev, L. D. The worm principle. Logic Colloquium 2002 (Münster, 2002),
75–95, Lecture Notes in Logic, 27, Association for Symbolic Logic, La Jolla, CA., USA,2006.

6.5. 原始数列数161– i が存在するときは k = max{i; i < n, Si < Sn } とおき、
g = (S0 , . . . , Sk−1 ), b = (Sk , . . . , Sn−1 ) とする。

そして、S[n] = (g+b + b + · · · + b + b)[f (n)] とする。ここで、+%&'(
f (n)+1 個の bは数列の連結であり、たとえば (0, 3, 2)+(1, 4, 5) = (0, 3, 2, 1, 4, 5)である。

ここで計算方法の理解のために計算例を示します。f (n) = n2 とすると大変なので f (n) = n とします。また、数列の「悪い部分」に下線を引きます。「良い部分」はその左です。

(0, 1, 2, 3)[2]=(0, 1, 2, 2, 2)[2]=(0, 1, 2, 2, 1, 2, 2, 1, 2, 2)[2]=(0, 1, 2, 2, 1, 2, 2, 1, 2, 1, 2, 1, 2)[2]=(0, 1, 2, 2, 1, 2, 2, 1, 2, 1, 2, 1, 1, 1)[2]=(0, 1, 2, 2, 1, 2, 2, 1, 2, 1, 2, 1, 1, 0, 1, 2, 2, 1, 2, 2, 1, 2, 1, 2, 1, 1,
0, 1, 2, 2, 1, 2, 2, 1, 2, 1, 2, 1, 1)[2]数列の最後が 0 のときは f (n) = n+1、それ以外は S[n] = (g+b + · · · + b)[n]% &' (
n 個の bと定義を変えると、原始数列はハーディ階層と完全に一致します。まず、数列 (0) は (0)[n] = n + 1 となるためハーディ階層では H[1](n) に対応し、順
序数 1 に対応します。そして数列 (0,0) は順序数 2 に対応します。数列の最後が 0 のときは f (n) = n + 1 としたため、数列の最後の 0 が消えて n + 1が計算されることが、ハーディ階層の H[α + 1](n) = H[α](n + 1) と対応しています。
最後が 0 以外のときは極限順序数と対応しています。たとえば (0,1) という数列を考えると、「良い部分」はなく、「悪い部分」は 0 となります。そして、悪い部分を n 個つなげることから、(0, 1)[1]=(0)[1] = 1(0, 1)[2]=(0, 0)[2] = 2

第6章

162
(0, 1)[3]=(0, 0, 0)[3] = 3(0, 1)[4]=(0, 0, 0, 0)[4] = 4

ペアノ算術の限界のように計算され、1, 2, 3, 4, 5, ... のような列ができ、これが ω の基本列と一致します。ハーディ階層の H[ω](n) = H[n](n) に対応させて書くと

H[ω](n) = (0, 1)[n] = (0, 0, . . . , 0)[n] = H[n](n)% &' (nのようになります。このように、数列の「悪い部分」が増えていく様子が、
基本列を列記する形と一致します。同様に考えると、原始数列の計算がハーディ階層の計算と一致します。たとえば、(0, 1, 2)[3] = (0, 1, 1, 1)[3] という式の展開は H[ω ω ](3) = H[ω 3 ](3) という式の展開と一致し、それぞれが対応します。(0, 1, 2)[3] と H[ω ω ](3) の計算をそれぞれ進めていく過程を、原始数列とハーディ階層を対応づけながら示します。以下の式において、左辺と右辺がそれぞれ上から下へ計算が進められます。

(0, 1, 2)[3] =H[ω ω ](3)(0, 1, 1, 1)[3] =H[ω 3 ](3)(0, 1, 1, 0, 1, 1, 0, 1, 1)[3] =H[ω 2 3](3)(0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1)[3]=H[ω 2 2 + ω3](3)(0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0)[3]=H[ω 2 2 + ω2 + 3](3)(0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 0)[4]=H[ω 2 2 + ω2 + 2](4)(0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0)[5]=H[ω 2 2 + ω2 + 1](5)(0, 1, 1, 0, 1, 1, 0, 1, 0, 1)[6]=H[ω 2 2 + ω2](6)(0, 1, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0)[6]=H[ω 2 2 + ω + 6](6)(0, 1, 1, 0, 1, 1, 0, 1)[12] =H[ω 2 2 + ω](12)(0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)[12] =H[ω 2 2 + 12](12)(0, 1, 1, 0, 1, 1)[24] =H[ω 2 2](24)原始数列の定義はハーディ階層とは異なりますが、ハーディ階層の繰り返しの回数を増やした構造なので、巨大数論的なスケールでは、ハーディ

6.5. 原始数列数163

図 6.3: (図 6.1 再掲) ヒドラの構造。Kirby and Paris (1982) から引用。
階層で近似できると考えることができます。そしてハーディ階層で近似したときの順序数を α としたとき、原始数列そのものが順序数 α をあらわすものとします。このように考えると、原始数列は ϵ0 よりも小さい順序数

α をもれなく対応づけることができます。

原始数列は、バシクがカントールの標準形、ヒドラゲーム、ふぃっしゅ
数バージョン 5 などを参考にして作成したものなので、次のようにヒドラ
ツリーの順序数と対応づけることができます。

1. 順序数 α のヒドラツリーを書く。
2. ルートノード (root) からスタートする。
3. ルートノードから上に 1 つノードを上がるときには、数列の最後に新しい要素 0 を加える。

4. ノードを 1 つ上に上がるときには、数列の最後に「最後尾の要素の値+ 1」の値の要素を加える。
5. ノードの端点まで来たので n 個下の枝分かれのノードまで下がり、別の枝 (segment) に進むときは、数列の最後に「最後尾の要素の値−n + 1」の値の要素を加える。
6. すなわち各項の数は対応するノードのルートノードを起点とした高さから 1 を引いた値となる。

第6章

164

ペアノ算術の限界

たとえば図 6.1 のヒドラツリーでは、 ω ω の部分は (0, 1, 2, 3) というよ
ω

うに表されます。 その後ノードを 3 本降りて、次の枝 (segment) へ移って

(1, 2, 2, 2) を得て、列に追加されます。その後、同様にして (0, 1, 2, 2, 1) が追加されます。
したがって図 6.1 のヒドラツリーは数列 (0, 1, 2, 3, 1, 2, 2, 2, 0, 1, 2, 2, 1)と対応します。すなわち ω ω +ω + ω ω +1 = (0, 1, 2, 3, 1, 2, 2, 2, 0, 1, 2, 2, 1)
ω

3

2

です。
このようにすると、次のように原始数列が順序数と対応付けられます。

1 =

(0)

2 =

(0, 0)

3 =(0, 0, 0)

ω

ω+2 =

(0, 1, 0, 0)

ω·2 =(0, 1, 0, 1)ω2

ω2 + ω

ω

(0, 1, 1, 1)

ωω=(0, 1, 2)

ωω=(0, 1, 2, 3)=(0, 1, 2, 3, 4)=(0, 1, 2, 3, 4, 2)=(0, 1, 2, 3, 4, 5)

ωω

ω

ω +1)

ωω

= (0, 1, 1, 0, 1)
=

ω
ω (ω

= (0, 1, 1)

3

ω

ω

= (0, 1)ωω

ω

したがって f (n) = (0, 1, 2, ...n)[n] とすれば f (n) ≈ H[ϵ0 ](n) ≈ F [ϵ0 ](n) となり、f 10 (n)(10) ≈ F [ϵ0 + 1](10) 程度の大きさの数をプログラムによって定義したものが原始数列数です。

この原始数列の定義を元に、巨大数研究 Wiki でミカヅキモが原始数列の定義の改良版を考えて、その定義の下で、原始数列 S を添え字に持つ急6.5. 原始数列数165

増加関数 F [S](n) を、順序数の知識を全く使わずに定義しました。以下に
ミカヅキモの定義をそのまま書きます。
✓【定義】原始数列の改良版✏

以下、+は数列の結合を意味する。

1. 空の列 () は原始数列である。
2. S を高々 1 個の 0 を含む原始数列とするとき、w(S) = (0) + S ′も原始数列である。ただし、S は S の各成分に 1 を加えてできる数列を意味するものとする。（S = () のときは、() = () とする。）

3. S1 , S2 , …, Sn が原始数列であり、辞書式順序のもとで S1 ≥
S2

≥

…

≥

Sn で あ る と き（ た と え ば 、(0, 1, 2, 3)≥(0, 1, 2, 2, 2, 0, 1, 2, 3, 4) ≥ (0, 1, 2)）、S1 + S2 + … + Sn も原始数列である。

4. 1〜3 によって原始数列であるとされるもののみが原始数列で
✒

ある。

✑

w は順序数で言うと α を ω α に移す写像（1 項演算）に対応しており、ヒ

ドラツリーで言うと根に接続されている辺に点を 1 つ加える操作に対応しています。+ は順序数で言うと順序数における +、ヒドラツリーで言うとn 個のヒドラツリーを横に並べる n 項演算に対応しています。
たとえば

(0) =
(0, 1)=(0, 1, 2, …, n) =w(())
w((0)) = w(w(()))
w(w(…(w(()))…))（w が n − 1 個）

(0, 0)=(0) + (0)(0, 1, 1)=w((0, 0))(0, 1, 2, 2)=w((0, 1, 1))(0, 1, 2, 3, 1, 2, 2, 0, 0)=(0, 1, 2, 3, 1, 2, 2) + (0, 0)

第6章

166

ペアノ算術の限界=

w((0, 1, 2, 0, 1, 1)) + (0, 0)=w((0, 1, 2) + (0, 1, 1)) + (0, 0)などは原始数列です。

✓【定義】極限原始数列

原始数列 S の末尾の数が 0 でないとき、S は極限原始数列であると

いう。
✒

【補題】

S が極限原始数列のとき、有限個の原始数列 S1 , …, Sk が存在して、S =✏✑w(S1 ) + … + w(Sk ) と表せる。しかもこの表し方は一意。

たとえば、
S = (0, 1, 2, 3, 1, 2, 2, 2, 0, 1, 2, 2, 1) は S = w((0, 1, 2, 0, 1, 1, 1))+w((0, 1, 1, 0)) と表せます。
✓【定義】極限原始数列の基本列

極限原始数列 S と非負整数 n が与えられたとき、原始数列 S[n] を以✏下で帰納的に定める。S[0], S[1], S[2], … を S の基本列と呼ぶ。

1. (w(S1 ) + … + w(Sk ))[n] = w(S1 ) + … + w(Sk−1 ) + w(Sk )[n]2. w(S + (0))[n] = w(S)n = w(S) + … + w(S)(n 個の w(S))
3. w(S)[n] = w(S[n]) （S: 極限原始数列）✒
たとえば、(0, 1, 2, 2)[3] = (0, 1, 2, 1, 2, 1, 2) です。実際、(0, 1, 2, 2)[3] =w((0, 1, 1))[3] = w((0, 1, 1)[3]) = w(w((0, 0))[3])=w(w((0) + (0))[3]) = w(w((0))3) = w((0, 1)3)=w((0, 1) + (0, 1) + (0, 1)) = w((0, 1, 0, 1, 0, 1))= (0, 1, 2, 1, 2, 1, 2)と計算できます。

✑

6.6. 多重リストアッカーマン関数✓

167【定義】改良版原始数列による急増加関数の定義

原始数列 S が与えられたとき、急増加関数 F [S](n) を以下で定める。

✏

1. F [()](n) = n + 1
2. F [S + (0)] = F [S]n (n)3. F [S](n) = F [S[n]](n) （S: 極限原始数列）✒✑
これは ϵ0 未満の順序数 α に対する急増加関数 F [α](n) と全く同じもの
です。

6.6

多重リストアッカーマン関数

たろうは、多変数アッカーマン関数を２重リストに拡張して、2 重リスト
アッカーマン関数を定義しました10 。多変数アッカーマンの n 個目の引数が a であることを [n, a] と表記して、[ ] の中を多変数化することで拡張しました。これは F [ω ω ](n) 程度の増大度の関数となります。
ω【定義】2 重リストアッカーマン関数• □ : 0 個以上の 0• X : 0 個以上の 0 以上の整数• Y, Y1 , Y2 : 0 個以上の 0 以上の整数リスト• a, b, c : 0 以上の整数

十分大きな整数 N に対し、index[..., b3 , b2 , b1 , b0 , a0 ] = ... + N 3 · b3 + N 2 · b2 + N · b1 + b0とし、Ak() の中のリストは index の大きい順に表記する。また、index

10 http://ja.googology.wikia.com/wiki/2 重リストアッカーマン関数

第6章

168

ペアノ算術の限界が同じとなるリストは Ak() 内に複数含まないとする。

Ak(Y1 , [X, 0], Y2 ) =Ak(Y1 , Y2 )Ak(Y1 , [□, X], Y2 ) =Ak(Y1 , [X], Y2 )Ak([a])=a+1

Ak(Y, [1, b + 1])=

Ak(Y, [1, b], [1])Ak(Y, [1, b + 1], [a + 1])=

Ak(Y, [1, b], [Ak(Y, [1, b + 1], [a])])Ak(Y, [Ｘ, c + 1, b + 1], [a])=Ak(Y, [X, c + 1, b], [X, c, a], [a])Ak(Y, [Ｘ, c + 1, 0, □, b + 1], [a])ここで X ̸= □ or c ̸= 0=

Ak(Y, [X, c + 1, 0, □, b],[X, c, a, □, a], [a])以下のように計算されています。

F [ω ω ](n)Ak([n, 1], [n])≈Ak([1, 0, 1], [n])≈Ak([a, 0, 1], [n])≈Ak([n, 0, 1], [n])≈Ak([1, 0, 0, 1], [n])≈Ak([a, 0, 0, 1], [n])≈Ak([n, 0, 0, 1], [n])≈Ak([1, 0, 0, 0, 1], [n])≈Ak([1, 0, 0, 0, 0, 1], [n])≈Ak([1, 0, 0, 0, 0, 0, 1], [n])≈F [ω ω ](n)Ak(..., [3, a3 ], [2, a2 ], [1, a1 ], [0, a0 ])≈Ak(a3 , a2 , a1 , a0)

Ak([..., b3 , b2 , b1 , b0 , a], [n])≈Ak([n 個の 1], [n])≈F [ω ω ](n)F [ω (ω・ a) ](n)2F [ω ω ](n)2F [ω ω ](n)F [ω ω ・ a ](n)23F [ω ω ](n)3F [ω ω ](n)4F [ω ω ](n)532F [ω ...+ω ·b3 +ω ·b2 +ω·b1 +b0 · a](n)ωF [ω ω ](n)さらに、同様の拡張を繰り返すことで多重リストアッカーマン関数を定6.7. バードのネスト配列表記

169

義できるとしました11 。具体的な定義は与えられていませんが、その大きさは以下のように計算されています。

3 重リストAk([[1, 0, 1], [1]], [[n]])≈Ak([[1, 0, 0, 1], [1]], [[n]])≈Ak([[1, 0, 0, 0, 1], [1]], [[n]])≈Ak([..., [3, a3 ], [2, a2 ], [1, a1 ], [0, a0 ]], [[n]]) =Ak([[n 個の 1], [1]], [[n]])≈ωF [ω ω ](n)ω2F [ω ω ](n)ω3F [ω ω ](n)Ak([..., a3 , a2 , a1 , a0 ], [n])F [ω ω

ωω](n)

4 重リストAk([[[1, 0, 1], [1]], [[1]]], [[[n]]])≈F [ω ∧∧ 4](n)Ak([[[1, 0, 0, 1], [1]], [[1]]], [[[n]]])≈F [ω ω

Ak([[[1, 0, 0, 0, 1], [1]], [[1]]], [[[n]]])≈F [ω ω

Ak([[..., [2, a2 ], [1, a1 ], [0, a0 ]]], [[[n]]])=Ak([[..., a2 , a1 , a0 ]], [[n]])Ak([[[n 個の 1], [1]], [[1]]], [[[n]]])≈F [ω ∧∧ 5](n)

ωω

2

3
ωω

](n)
](n)

n 重リストとすることで F [ϵ0 ](n) に到達

6.7

バードのネスト配列表記

バードは、バードの線形表記 (p.107) の次に、F [ω ω ] に相当するバードの多ω次元配列表記 (Bird’s multi-dimensional array notation) と、F [ω ω

ωω

] に相

当するバードの超次元配列表記 (Bird’s hyper-dimensional array notation)を定義しました。次に、超次元をネストするバードのネスト配列表記 (Bird’s

nested array notation) を考えて、これが F [ϵ0 ] に到達しました。本書では詳

11 http://ja.googology.wikia.com/wiki/多重リストアッカーマン関数

第6章

170

ペアノ算術の限界

細な計算ルールは省きますが、次元セパレータ [ ] をネストさせます。バードの計算ではω[1 [2] 2]=

ωω[1 [3] 2]=ωω[1 [n + 1] 2]=

ωω[1 [1, 2] 2]=

ωω[1 [1 [2] 2] 2]=

ω ∧∧ 5ω2ωnωω

= ω ∧∧ 4といったように、入れ子（ネスト）のレベルが上がると ω ∧∧ n の n が上がって、入れ子レベルを対角化すると ϵ0 になります。次元セパレータをネストさせる様子は、ちょうど多重リストアッカーマン関数のような構造となっ
ています。

6.8

BEAF のテトレーション配列

BEAF の配列表記 (p.108) は、数を横一列に並べる一次元の配列でした。
バウアーズは、これをさらに高次元の配列へと拡張しました。BEAF 入門12では、どのようにその拡張を考えていけば良いのかが、順序立てて解説されています。以下に BEAF の定義13 を記します。まずは用語の定義です。

1. 「基数」 (b) は配列の 1 番目の要素である。
2. 「プライム」 (p) は配列の 2 番目の要素である。
3. 「パイロット」はプライムの次の最初の 1 ではない要素である。パイ
ロットは 3 番目以降の要素となる。

4. 「副操縦士」はパイロットの 1 つ前の要素である。パイロットが行の中で 1 番目の要素であれば、副操縦士は存在しない。

5. 「構造」は配列の一部で、配列よりも低次元なグループによって構成されるものである。構造は、要素 (X 0 と書く)、行 (X 1 と書く)、平12 巨大数研究 Wiki - BEAF 入門 http://ja.googology.wikia.com/wiki/BEAF 入門
13 巨大数研究 Wiki - BEAF http://ja.googology.wikia.com/wiki/BEAF6.8. BEAF のテトレーション配列

171

面 (X 2 )、3 次元の領域 (X 3 )、4 次元のフルーン (X 4 )、さらに高次元の構造 (X 5 , X 6 等)、そして X ↑↑ 3 のようなテトレーション構造、といった可能性がある。さらに、そこから先はペンテーション構造、
ヘキセーション構造、... と続く。

6. 「前の要素」は、パイロットと同じ行にあり、パイロットよりも前にある要素である。「前の行」は、パイロットと同じ平面にあり、パイロットよりも前にある行である。「前の平面」は、パイロットと同じ領域にあり、パイロットよりも前にある平面である。同様に定義を続けることができる。これらは「前の構造」と呼ばれる。

7. 構造 S の「プライムブロック」は、構造を表記する記号の X をすべて p に置き換えたものである。たとえば、もし S = X 3 であれば、プライムブロックは p3 、すなわち一片の長さが p の立方体となる。

X X 構造のプライムブロックは pp 、すなわち一片が p の p 次元超立方体となる。

8. 「飛行機」は、パイロットと、すべての前の要素と、すべての前の構
造のプライムブロックを含んだものである。

9. 「乗客」は飛行機の中のパイロットと副操縦士以外の要素である。
10. 配列 A の値は v(A) と表記する。
そして、次のように計算ルールが定められます。

BEAF の計算ルール
1. プライムルール: もし p = 1 であれば、 v(A) = b とする。
2. 初期ルール: もしパイロットがなければ、 v(A) = bp とする。
3. 破滅ルール: 1 も 2 もあてはまらない場合には、次のようにする。
(a) パイロットの値を 1 減らす。
(b) 副操縦士の値を元の配列のプライムを 1 減らしたものに置
き換える。

第6章

172

ペアノ算術の限界(c) すべての乗客を b にする。
(d) 配列のそれ以外の要素は変化しない。
配列表記のルールは、このルールと一致することを確認してみてください。
ここで、BEAF では有限長の配列は、その後に 1 が無限に続いている配列と同じと考えるため、{a} = {a, 1} = {a, 1, 1, ...} です。したがって、{a}のプライムは 1 であると考えます。

さて、このように定義すると、配列を高次元に拡張することができます。
逆に言えば、高次元の配列が定義されなければ「構造」の定義は意味をなしません。まずは 2 次元の配列について、急増加関数による近似計算の結果を示します。計算の詳細については省略します。
2
3
5 5 5 5 5
≈ F [ω ω × 2](5)22
3
5 5 5 5 5
≈ F [ω ω × ω](5) = F [ω ω+1 ](5)52
3
5 5 5 5 5
≈ F [ω ω+1 × ω](5) = F [ω ω+2 ](5)5 5
2
3
5 5 5 5 5
≈ F [ω ω+ω ](5) = F [ω ω×2 ](5)5 5 5 5 5⎧⎫⎪
⎨ 5 5 5 5 5 ⎪⎬≈ F [ω ω×3 ](5)5 5 5 5 5⎪⎪⎩⎭
5 5 5 5 5⎧⎫⎪
5 5 5 5 5 ⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
5
5
5
5
5
⎪
⎨
⎬

5
⎪
⎪
⎪
⎪
5
⎪
⎪
⎩
5

5
5
5

5 5 5

⎪
⎪
5 5 5 ⎪
⎪
⎪
⎪
⎭
5 5 5

≈

2

F [ω ω×ω ](5) = F [ω ω ](5)次に、このように高次元の配列を一列で表記するために、(m) という表記を導入します。ここで m は次元の数をあらわし、(1) は 1 次元の区切り

6.8. BEAF のテトレーション配列

173なので次の行に数がうつることを示し、(2) は 2 次元の区切りなので次の平面に数がうつることを示します。たとえば
2
5 5 5 5{5, 5, 5, 5, 5(1)2} =2

53≈ F [ω ω × 2](5)ということです。{5, 5(2)2} を BEAF の計算ルールにしたがって計算すると、2 がパイロットとなり、副操縦士はなく、プライムブロックは p2 、すな
わち一片の長さが p = 5 の平面 (5 行 5 列の平面) となり、その要素が乗客となっていっせいに 5 に変わるため、5 行 5 列の 5 となります。また、BEAF
では配列次元演算子14 (“array of” operator) という表記も使います。これは、たとえば an &b を「一辺の長さ a の n 次元超立方体配列中に b が充填されている」と解釈します。これらの表記を使うと、⎧⎫⎪⎪ 5 5 5 5 5 ⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪ 5 5 5 5 5 ⎪⎨⎬{5, 5(2)2} =

5 5
⎪
⎪
⎪
5 5
⎪
⎪
⎪
⎩
5 5

2

= 52 &5 ≈ F [ω ω ](5)
5 5 5
⎪
⎪
5 5 5 ⎪
⎪
⎪
⎪
⎭
5 5 5

となります。ここで、配列次元演算子は次元の構造をあらわしているので、そのまま計算してはいけないことに注意してください。つまり、52 &5 は25&5 のように計算できません。
2 次元配列が F [ω ω ] の強さとなるように、n 次元配列は F [ω ω ] の強さと2nなります。100 次元配列の例としてゴンギュラス (gongulus) を示します。
✓✏【定義】ゴンギュラス
ゴンギュラスは、BEAF で {10, 10(100)2} = 10100 &10 と等しい数
である。10100 &10 は 1 辺が 10 の 100 次元超立方体に 10 が充填されている状態で、全部で 10 がグーゴル = 10100 個ある。急増加関数でF [ω ω
✒100](10) と近似される。

14 http://ja.googology.wikia.com/wiki/配列次元演算子

✑

第6章

174

ペアノ算術の限界

ここから先のテトレーション空間 (tetration space) の話、すなわちテトレーション配列 (tetration array) は、難しくなってきます。バウアー

ズ本人による BEAF の説明15 では、テトレーション空間を次のように説明しています。多次元空間を X n と表記すると、X が直線、X 2 が平面、

X 100 が 100 次元空間です。超次元 (super dimension) は X X で、トリメnンション (trimension) は X X

XX

XX

n

Xn

、クアドラメンション (quadramension) はのように続きます。そしてデュラトリ16 (dulatri) が図解されています。デュラトリは 3 を使った X 2X の構造の超次元配列で、「一辺の長さ3 の 3 次元立方体配列中に 3 が充填されている」ものを 1 つの「立方体要素」と考えて（つまり、1 つの立方体要素に 33 = 27 個の 3 がある）
、一辺の長さ 3 の 3 次元立方体配列中に「立方体要素」が充填されているものがデュラトリです。したがって、そこには (33 )3 = 32×3 = 729 個の 3 が充填されていることになります。このような構造を配列次元演算子で書くときには、構造を分かりやすくするために X をそのまま使います。また、次元の区切りは (0, 2) と表記されます。
✓【定義】デュラトリ

✏と評価される。急増加関数では F [ω ω ](3) と近似される。
✒✑

デュラトリは BEAF で {3, 3(0, 2)2} = X 2X &3 と書かれる数で、X = 3
ω2

XX

XX

X

次元を X ↑↑ 5 次元であると表記して、a ↑↑ b& c を a ↑↑ b 次元の c といったように考えることができます。バウアーズ自身は、このようなテトレーション配列以上の BEAF の計算方法について、あまり具体的な計算方法の説明をしていません。ちなみに、テトレーション配列の次はペンテーション配列になりますが、その説明は「その仕組みを理解しようとする人は偏頭痛になるかもしれない」としています。とにかく、テトレー
ションやペンテーションを考えることができるのと同じように、次元の構
造にもテトレーション次元やペンテーション次元を考えることができるのだ、としています。その定義に急増加関数と対応づけて説明を与えたのは、

Googology Wiki の人たちです。
15 Exploding Array Function http://www.polytope.net/hedrondude/array.htm

16 巨大数研究 Wiki - デュラトリ http://ja.googology.wikia.com/wiki/デュラトリ

6.9. 巨大数生成プログラム

175

テトレーション配列は F [ϵ0 ] の強さを持ちます。例としてゴッパトス17(goppatoth) はこのような数です。
✓【定義】ゴッパトス

ゴッパトスは、BEAF で 10 ↑↑ 100& 10 と書かれる数である。10 ↑↑ 100✏

個の 10 が、100 次元のテトレーションハイパー立方体に埋められている。急増加関数では F [ε0 ](100) と近似される。
✒

このように、テトレーション配列の具体的な計算方法は非常に複雑で、F [ε0 ]レベルの関数で比較すれば、計算のアルゴリズムはふぃっしゅ数バージョ✑ン 5 やドル関数の方がずっと簡単です。BEAF の優れているところは「配列次元演算子」のような抽象化力にあります。つまり、テトレーション次元をテトレーション記号と配列次元演算子を使って表記してしまうことで、
あまり具体的な計算方法に気を煩わせることなく F [ε0 ] レベルの数を簡潔に表現できて、さらに具体的に想像することはできないようなペンテーショ

ン次元等の「高次の概念」へと拡張していきます。つまり、ここから先の拡張が BEAF の本領発揮となりますが、その話については次章で続けます。

6.9

巨大数生成プログラム

本章の最後に、グッドスタイン数列を使った巨大数を生み出すプログラ
ムを紹介します。Googology Wiki で、Deedlit11 が C 言語あるいはその他の言語によってなるべく短い文字数で F [ϵ0 ] の増加速度を持つ関数を記述する、という競技を開催しました18 。

巨大数ベイクオフ大会 (p.226) に準じて、プログラム言語には制限を設けない次のようなルールです。

1. F [ω ωωω](4) よりも大きな数を出力するプログラムを作成する。この数には特別な意味はない。F [ϵ0 ] レベルの関数がなければ作れない数
で、それほど大きくない数を選んだ。

17 巨大数研究 Wiki - ゴッパトス http://ja.googology.wikia.com/wiki/ゴッパトス
18 Googology Wiki - User blog:Deedlit11/Bignum Bakeoﬀ appetizer

第6章

176

ペアノ算術の限界

2. 記憶容量の制限はなく、任意の整数を扱うことができるものとする。
したがって、MAXINT のような参照はできない。

3. あるプログラム言語における優勝は、ホワイトスペースを除いた文字数が最小のプログラムである。
この競技で、Deedlit11 自身によるグッドスタイン数列を使った 101 文字のC 言語プログラム、そしてそれを元にした Sai2000 による 83 文字の Python
3 プログラムが作成されました。Python プログラムを掲載します。

i = 9 ** 9 ** 9b = 2
B = lambda y , x =0: y and y % b *( b * b )** B ( x )+ B ( y /b , x +1)
while i :i = B ( i ) -1
b *= bprint ( b )これは、グッドスタイン関数 G(99 ) を計算するプログラムです。G(265536 )9で F [ω ωωωえます。

] のレベルに到達するので (p.159)、G(99 ) は F [ω ω9ωω](4) を超

177

第

7章
再帰関数

本章では F [ϵ0 ] よりも大きな関数と巨大数を扱います。そのために、まず ϵ0 よりも大きな順序数を表記するための、ヴェブレン関数と順序数崩壊
関数について説明をします。また、2 階算術およびその部分体系と、その証明論的順序数について説明をします。それから具体的な巨大数を生み出すシステムとその強さについて、解析ができている範囲で紹介します。

7.1

ヴェブレン関数

ϵ0 は、α = ω α が成り立つ最小の順序数です。ϵ0 よりも大きく α = ω α が成り立つ最小の順序数は ϵ1 と書かれ、a[0] = ϵ0 + 1, a[n + 1] = ω a[n] を基本列に持つ極限順序数です。その基本列は次のように計算されます。

a[0]

=

ϵ0 + 1a[1]=ω ϵ0 +1 = ω ϵ0 ω = ϵ0 ω

a[2]

=

ω ϵ0 ω = (ω ϵ0 )ω = ϵ0 ω

a[3]

=

ω ϵ0 = ω ϵ0

a[4]

=

ω ϵ0

ω

ϵ0 ω

1+ω

= ω ϵ0ωω= ω ϵ0 ϵ0 = (ω ϵ0 )ϵ0 = ϵ0 ϵ0

1+ϵ0 ω

= ω ϵ0 ϵ0ϵ0 ω= ϵ 0 ϵ0ω

ϵ0 ω

この基本列と b[i] = ϵ0 ∧∧ i、つまり b[0] = 1, b[1] = ϵ0 , b[2] = ϵ0 ∧∧ 2 = ϵ0 ϵ0 ,b[3] = ϵ0 ∧∧ 3, … の基本列を比較すると、i > 1 で b[i − 1] < a[i] < b[i] となるため収束先は一致し、a[ω] = b[ω] となります。したがって、

第7章

178

再帰関数

ϵ1 = a[ω] = b[ω] = ϵ0 ∧∧ ωとなります。このように、基本列の取り方は一通りではありません。そして ω ϵ1 = ϵ1 が成り立ちます。α = ω α が成り立つ順序数は、順番に ϵ0 , ϵ1 ,ϵ2 , ... と定義されます。つまり、
ϵi+1= lim(ϵi + 1, ω ϵi +1 , ω ω
=

ϵi

∧∧

ϵi +1

, …)

ω

となります。次に、ϵ0 , ϵ1 , ϵ2 , … の基本列を取ると、極限順序数 ϵω が定義され、これは α = ω α が成り立つ ω 番目の順序数です。

さらに基本列の定義を繰り返し、ϵω ,ϵωω ,ϵωωω ,... という基本列を考えると、α = ω α が成り立つ ϵ0 番目の順序数 ϵϵ0 が定義されます。

そして ϵ0 , ϵϵ0 , ϵϵϵ0 , ϵϵϵϵ , ... といった基本列を取ると、極限順序数 ζ0（ζ ：0ゼータ; ツェータ）が定義されます。ζ0 は、α = ϵα が成り立つ最小の順序数です。ここで、この順序数は Googology Wiki では ζ0 とされていますが、η0 と書かれることもあります。ϵ0 よりも大きい順序数の記号はあまり統一されていないようなので、混乱しないためには注意が必要です。

アメリカの数学者オズワルド・ヴェブレン (Oswald Veblen, 1880–1960)は 1908 年の論文で、以下のヴェブレン関数1 (Veblen function) φα (β) を定義しました。
✓【定義】ヴェブレン関数

φ0 (β) = ω β✏φα+1 (β) =「φα (γ) = γ となる γ 」 のうち β 番目のもの

φα (β) = 「すべての α′ < α に対し φα′ (γ) = γ となる γ 」 のうち β番目のもの (α は極限順序数)

φα (β) < φγ (δ) となるのは、「α = γ かつ β < δ 」であるか、または「α < γ かつ β < φγ (δ)」であるか、または「α > γ かつ φα (β) < δ 」のときだけである。
✒✑

1 Veblen, O. (1908), Continuous increasing functions of finite and transfinite ordinals.
Transactions of the American Mathematical Society 9 (3): 280–292 doi:10.1090/S00029947-1908-1500814-9

7.1. ヴェブレン関数

179

ヴェブレン関数の定義 φα+1 (β) =「φα (γ) = γ となる β 番目の数」は、「ある順序数 γ より小さい数に +, φ0 , φ1 , …, φα を何回適用してもやはり γより小さい」という条件を満たす γ のうち β 番目のものとしても同じことです。「 」の条件は、「γ より小さい数は +, φ0 , φ1 , …, φα という演算について閉じている」と言い換えることもできます。

(1) φ0 (α) の計算
まずは、φ0 (α) = ω α について考えます。

α = 0 のときは ω 0 = 1 より小さい数は 0 しか存在せず、0 をいくら足し合わせても 1 よりは小さいことから、1 が「その数より小さい数は+について閉じている」ような 0 番目の (最初の) 数ということになります。

α = 1 のときは、ω 1 = ω より小さい数 (つまり自然数) をいくら足し合わ
せても ω よりは小さいということになります。逆に考えると、自然数をいくら足し合わせても到達できないような最小の数を φ0 (1) = ω として定義していることになります。

α = 2 のときは、φ0 (2) は 2 番目の数であるため 1 番目の数である ω よりは大きな数となります。なので、自然数や ω をいくら足し合わせても到達できないような最小の数を考えると、それは ω × n の収束先である ω 2 ということになります。

同様に、φ0 (3) = ω 3 , φ0 (4) = ω 4 , …, φ0 (n) = ω n となり、さらに=

φ0 (ω) = ω ω

φ0 (φ0 (φ0 (1))) =φ0 (ω ω ) = ω ω

φ0 (φ0 (1))ω

のように、ヴェブレン関数によって順序数が定義されます。

(2) φ1 (α) の計算
次に φ1 (0) を考えます。これは、「φ0 (α) = α となる α のうち最初のもの」つまり「ω α = α となる最初の α」です。これが ϵ0 の定義でした。また、ϵ0 より小さい数に+や φ0 を何回適用しても ϵ0 より小さいということになります。0 に+や φ0 を何回適用しても到達できないような数のうち、最小のものを φ1 (0) = ϵ0 と定義していると言うこともできます。

第7章

180

再帰関数

φ1 (1) = ϵ1 は、ϵ0 以下の数 (ϵ0 も含む) に+や φ0 を何回適用しても到達できない最小の数ということになります。ϵ1 = ϵ0 ∧∧ ω ですから、ϵ0 に冪乗を繰り返しても到達できない数です。

以下、φ1 (2) = ϵ2 , φ1 (3) = ϵ3 , …, φ1 (α) = ϵα と定義され、さらに

φ1 (φ1 (0))=φ1 (ϵ0 ) = ϵϵ0

φ1 (φ1 (φ1 (0)))=φ1 (ϵϵ0 ) = ϵϵϵ0と計算することができます。

(3) φ2 (α) の計算
φ2 (0) は、「φ1 (γ) = γ となる γ のうち最初のもの」つまり、「ϵγ = γ となる最初の γ 」となります。0 に+と φ0 と φ1 を何回適用しても到達できな
い最小の数です。そのような順序数は、ζ0 になります。

そして、ϵγ = γ となる α 番目の順序数が、 φ2 (α) = ζα で定義されます。
このように、+だけでは到達できない数を φ0 で定義し、+と φ0 だけでは到達できない数を φ1 で定義し、+と φ0 と φ1 だけでは到達できない数を φ2 で定義し、…と続けていきます。この定義を続けると、ヴェブレン関数を何回使っても到達できない最小の順序数、すなわち φα (0) = α を満たす最小の順序数が定義されます。これを Γ0 と書いて、ソロモン・フェファーマン (Solomon Feferman, 1928–2016) とクルト・シュッテ (Kurt

Schütte, 1909–1998) の名前を取ってフェファーマン・シュッテの順序数(Feferman–Schütte ordinal) と呼ばれます。ここで、シュッテは Γ0 が可述的 (predicative) な順序数の限界だとしました。

ヴェブレンは 2 変数関数の定義を多変数 φ(αn , αn−1 , …, α0 ) に拡張しています。多変数ヴェブレン関数に対して、

φ(1, 0, 0) =Γ0φ(1, 0, γ) =Γγ

φ(1, 0, 0, 0) =アッカーマン順序数 (Ackermann ordinal)

7.2. 順序数崩壊関数
φ(1, 0, …, 0)% &' (=

181
小ヴェブレン順序数 (small Veblen ordinal)ω 個の 0となります。

ヴェブレンはさらに、変数の数を超限的にたくさん増やしたとき (trans-

finitely many variables) にも、ヴェブレン関数を定義できるとしています。
この定義の限界が大ヴェブレン順序数 (large Veblen ordinal) です。

7.2

順序数崩壊関数

2 変数ヴェブレン関数の限界であるフェファーマン・シュッテの順序数よ
りも大きな順序数を表記するときには、順序数崩壊関数 (ordinal collapsing

function) がよく使われます。順序数崩壊関数には様々なバージョンがあり、通常は ψ（プサイ）あるいは θ（シータ）が記号として使われます。同
じ記号であっても様々な定義があるので、どの定義によるものなのかを確認する必要があります。

7.2.1

非可算順序数と共終数

順序数崩壊関数は、非可算順序数（基数）を使って大きな可算順序数を定義する関数です。急増加関数 F [α] で、α が非可算な順序数になることはありませんが、大きな可算順序数 α を作るために非可算順序数を使います。
有限の自然数を得るために無限の順序数を導入し、さらに大きな可算の順序数を得るために非可算の順序数を導入する、というところは面白いだろうと思います。有限の話をしているはずなのに、なぜかどんどん大きな無限の話が出てきます。図 7.1 に、順序数崩壊関数によって非可算順序数から大きな自然数である巨大数を定義するまでの流れをまとめました。
まずは順序数崩壊関数で使う非可算順序数について簡単にまとめておき
ます。

第7章

182

再帰関数

非可算順序数
順序数崩壊関数
大きな可算順序数
急増加関数
大きな自然数

図 7.1: 非可算順序数による巨大数の定義
集合 A の基数とは、A との間に全単射が存在する順序数の中で最小のもので、可算無限集合の基数は ω となり、アレフ 0（ℵ0 ) とも書く、ということはすでに説明しました。詳細は省きますが、連続体仮説によれば ℵ0 と連続体濃度 2ℵ0 の間には基数が存在しないので、ℵ0 の次の基数である ℵ1 は

2ℵ0 となります。ℵ1 = ω1 は最小の非可算順序数で、すべての可算順序数の集合です。同様に、ω2 = ℵ2 = 2ℵ1 と定義をすることができます。連続体

仮説を使わずに書けば、ωα+1 は濃度が ωα よりも大きい最小の基数です。
さらに極限順序数 α に対して ωα をすべての β < α に対する ωβ の上限であるとすれば、一般に ωα が定義できます。ωω , ωωω , ωωωω , ... と定義を続けることができて、そのような基本列を持つ順序数は α = ωα となる最小の順序数でオメガ収束点2 (omega fixed point) となります。Googology Wiki

ではオメガ収束点を ψI (0) と表記しています。これは、オメガ収束点よりもさらに大きい最小の到達不能基数 (inaccessible cardinal) I を崩壊させてオメガ収束点を作っています。このように、非可算基数から非可算基数への崩壊をさせることもあります。
順序数崩壊関数では、ω を大文字で Ω と表記することがよくあります。
すなわち、Ωα = ωα です。ただし、Ω は ω ではなくて ω1 です。
2 http://ja.googology.wikia.com/wiki/オメガ収束点

7.2. 順序数崩壊関数

183

ここで、Ω が最小の再帰的ではない順序数であるチャーチ・クリーネ順序

数3 (Church-Kleene ordinal) ω1CK を意味することもあります。再帰的順序
数 (recursive ordinal) は、再帰的な整列集合の順序型です。ω1CK は再帰的順序数の上限、すなわち最小の再帰的ではない順序数です。再帰的な関係は可算なので、再帰的順序数も可算です。したがって ω1CK は可算です。ω1CK
CK
は多くの場合に ω1 と似たような挙動を示すため、Ω = ω1CK , Ωα = ωαと定義をしてもうまくいきます。ただし、そのように説明をしてしまうと「非可算」という概念を使って説明をできなくなってしまいます。Ω は非可算順序数であるとされることが多いので、本書でもそのようにします。
次に、共終数 (cofinality) という概念についても説明をしておきます。半
順序集合 A の共終数 cf(A) とは、A と共終な部分集合の基数の中で最小のものです。ここで A の部分集合 B が A と共終であるとは、「A の任意の要素 a に対して、a ≤ b となるような B の要素 b が存在する」という意味です。順序数 α の共終数は、α と共終な部分集合の順序型である順序
数 δ の中で最小のものです。極限順序数 α に対して、δ までの順序数でインデックスされた順序数の単調増加列で、α に収束するものが存在します。たとえば α = ω 3 の共終数は ω です。なぜならば、自然数 n に対して

α[n] = ω 2 · n という数列を与えれば、α = ω 3 に収束するためです。

順序数の基本列を定めるとは、ω までの順序数でインデックスすることにほかなりませんから、共終数が ω である順序数は基本列を定めることができますが、共終数が非可算の順序数に対しては基本列を定めることができません。0 の共終数は 0 で、後続順序数の共終数は 1 です。可算な極限順
序数の共終数は ω です。非可算な極限順序数の共終数は、ω となる時と非可算になる時があります。たとえば ω1 + ω は非可算ですが、α[n] = ω1 + nという数列でインデックスできるので、共終数は ω になります。

7.2.2

フェファーマンの θ 関数

フェファーマンの θ 関数 (Feferman’s θ-function) は、順序数から順序数への関数 θα (β) です。2 変数関数 θα (β) とみなされて、θ(α, β) や θαβ とも
3 http://ja.googology.wikia.com/wiki/チャーチ・クリーネ順序数

第7章

184

再帰関数

書かれます。次のような定義です。
✓【定義】フェファーマンの θ 関数

C0 (α, β) =Cn+1 (α, β) =C(α, β) =✏β ∪ {0, ω1 , ω2 , . . . , ωω }{γ + δ, θξ (η) | γ, δ, ξ, η ∈ Cn (α, β); ξ < α}4Cn (α, β)n<ωθα (β) =✒min{γ | γ ̸∈ C(α, γ) ∧ ∀δ < β : θα (δ) < γ}

この定義はこういう意味です。C(α, β) は、順序数 0, ω1 , ω2 , . . . , ωω と β✑

よりも小さい順序数から、有限回の「加算」「すでに定義されている θ 関数、
すなわち ξ < α に対する θξ 関数」を適用した順序数すべての集合です。そして θα (β) は C(α, β) に含まれない β 番目の順序数です。

ここで ω1 , ω2 , . . . , ωω を無視してこの定義を読むと、ヴェブレン関数と同じで、その限界はフェファーマン・シュッテの順序数 Γ0 です。そして、

α ≤ Γ0 であれば、フェファーマンのθ関数は 2 変数ヴェブレン関数と一致して θα (β) = φα (β) となります。なぜならば φα (β) や Γ0 のような可算順序数を作るためには、ω1 , ω2 , . . . , ωω といった非可算順序数は大きすぎて材料としては役に立たないからです。Γ0 よりも大きい ω1 , ω1 + 1 などはC(α, β) に属しますが、θα (β) は C(α, β) に属さない β 番目の順序数という定義なので、Γ0 よりも大きい順序数が C(α, β) に属していても Γ0 が含まれていなければ θα (0) = Γ0 となるわけです。

ここで、ヴェブレン関数と違うのは 2 番目の式で θξ 関数の適用をするときに、ξ ∈ Cn (α, β) の条件が入っていることです。そのために、α > Γ0 であっても θΓ0 関数の適用ができません。すなわち θΓ0 (0) = φΓ0 (0) = Γ0 となりますが、θΓ0 +1 (0) の値はこれよりも大きくなりません。よって Γ0 ≤ α ≤ Ωにおいて θα (0) = Γ0 です。つまり θΩ (0) = Γ0 です。さらに順序数講座4で詳しく解説しているように、θΩ (0) は α = θα (0) を満たす最小の順序数となり、θΩ (β) は α = θα (0) を満たす β 番目の順序数となります。
4 http://ja.googology.wikia.com/wiki/ユーザーブログ:Kyodaisuu/順序数講座

7.2. 順序数崩壊関数

185

それでは θΩ+1 (0) はどうなるでしょうか。C(α, β) の定義に Ω = ω1 を入れておいたため、C(Ω + 1) の定義で θΩ (β) = Γβ を使うことができます。
つまり C(Ω + 1, 0) は、0, ω1 , ω2 , . . . , ωω から、加算、θα (α ≤ Ω) 関数で構成できるすべての順序数が含まれ、その関数の中には Γβ が含まれます。そして θΩ+1 (0) は、そのように構成できない最小の順序数なので α = Γα を満たす最小の順序数 φ(1, 1, β)（多変数ヴェブレン関数）となります。

ここで θΩ (0) = Γ0 の定義のように、ある順序数の定義に自分自身よりも大きな順序数を使うときに、その定義は非可述的 (impredicative) であると言います。通常は非可述的な定義とは自分自身を定義に含む定義ですが、実際には θΩ (0) = Γ0 を定義することは θΓ0 (0) = Γ0 を定義することと同じなので、自分自身を定義に含めることと同じになります。順序数崩壊関数の「崩壊」の意味は、このように非可算順序数から、可算順序数へと崩しているという意味なので、非可述的な定義が順序数崩壊関数の本質となります。
このような計算を続けてみます。

θΩ (β)=

Γβ = φ(1, 0, β) (α = φα (0) を満たす β 番目の順序数)θΩ+1 (β)=φ(1, 1, β) (α = φ(1, 0, α) を満たす β 番目の順序数)θΩ+2 (β)=φ(1, 2, β)θΩ+ω (β)=φ(1, ω, β)θΩ2 (β)=θΩ+Ω (β) = φ(2, 0, β) (α = φ(1, α, β)θΩω (β)=φ(ω, 0, β)θΩ2 (0) =θΩΩ (0) = φ(1, 0, 0, 0) (アッカーマン順序数)θΩ2 +1 (β)=φ(1, 0, 1, β)θΩ2 +Ω (β)=φ(1, 1, 0, β)θΩ2 2 (β)=θΩ2 +ΩΩ (0) = φ(2, 0, 0, β)θΩ2 3 (β)=φ(3, 0, 0, β)θΩ3 (β)=θΩ2 Ω (0) = φ(1, 0, 0, 0, β)θΩ3 +1 (β)=φ(1, 0, 0, 1, β)θΩ3 +Ω (β)=φ(1, 0, 1, 0, β)θΩ3 +Ω2 (β)=φ(1, 1, 0, 0, β)

第7章

186
θΩ3 2 (β)=φ(2, 0, 0, 0, β)θΩ3 ω (β)=φ(ω, 0, 0, 0, β)θΩ4 (β)=φ(1, 0, 0, 0, 0, β)

再帰関数

θΩω (0) =小ヴェブレン順序数 (多変数ヴェブレン関数の限界)θΩΩ (0) =大ヴェブレン順序数 (超限変数ヴェブレン関数の限界)

ここで、たとえば Ω2 という非可算順序数は θ0 (Ω2) = ω ω = (ω Ω )2 = Ω22のように、ω1 = Ω と θ0 関数から作ることができます。つまり上の計算はθθ0 (Ω2) (0) = θΩ2 (0) = φ(1, 0, 0, 0) のような計算過程を省略したものです。

さらに θ02 (Ω2) = ΩΩ , θ03 (Ω2) = ΩΩ , ... のような基本列を持つ非可算順Ω

序数 ϵΩ+1 を考えると、θ1 (Ω + 1) = ϵΩ+1 となります。そして θϵΩ+1 (0) をバッハマン・ハワード順序数 (Bachmann-Howard ordinal) と言います。これは θΩ (0), θΩΩ (0), θΩΩΩ (0), ... が基本列です。そしてθθ1 (Ω+1) (0)=θϵΩ+1 (0) (バッハマン・ハワード順序数)θθ2 (Ω+1) (0)=θζΩ+1 (0)のようにさらに大きな順序数が定義できますが、やがて Ω だけでは作ることができないような限界の順序数にぶち当たり、ω2 = Ω2 を使った θΩ2 (0)は、そのような限界の順序数となります。さらに、ω3 , ω4 , ... と順序数を導入します。

このように、新しい非可算順序数を導入することで、それまでの非可算順序数だけでは作ることができないような大きな可算順序数を作ることができるようになります。そして Ωω を使った θθ1 (Ωω +1) (0) = θϵΩω +1 (0) が、
竹内外史の順序数図形 (ordinal diagram) 5 6 や、次のブーフホルツの ψ関数の限界と等しくなり、 竹内・フェファーマン・ブーフホルツ順序数7(Takeuti-Feferman-Buchholz ordinal) と呼ばれます。フェファーマンの θ関数の限界は、これよりももう少し大きいところにあります。
5 Takeuti, G. (1960) Ordinal diagrams II. Journal of the Mathematical Society ofJapan 12: 385–391. doi:10.2969/jmsj/01240385
6 八 杉 満 利 子 (1974) 「Ordinal Diagram に つ い て 」数 学 26(2):
121–136.
doi:10.11429/sugaku1947.26.121
7 http://ja.googology.wikia.com/wiki/竹内・フェファーマン・ブーフホルツ順序数

7.2. 順序数崩壊関数

7.2.3

187

ブーフホルツの ψ 関数

ドイツの数理論理学者ヴィルフリート・ブーフホルツ (Wilfried Buchholz)が定義した順序数崩壊関数を、ブーフホルツの ψ 関数8 (Buchholz’s ψfunction) と言います。ブーフホルツの ψ 関数は、ν ≤ ω と順序数 α に対して ψν (α) によって順序数を定義する関数で、非可算順序数 Ων = ων を定義に用いています。定義は省略しますので、脚注の原著論文を参照してください。
ブーフホルツは 1 ≤ ν ≤ ω のときに ψ0 (ϵΩν +1 ) = θϵΩν +1 (0) が成り立つ

ことを証明しました。つまり、ブーフホルツの ψ 関数はフェファーマンの

θ 関数と同等の強さを持ち、竹内・フェファーマン・ブーフホルツ順序数までを表記できます。

7.2.4

マドールの ψ 関数

ブーフホルツの ψ 関数は数学的には美しいが素人には分かりにくいとして、フランスの数学者ダヴィド・マドール (David Madore; Wikipedia ユー
ザー名 Gro-Tsen) が順序数崩壊関数を説明するために定義して 2013 年 2月 13 日に Wikipedia の記事 “Ordinal collapsing function” に書いた次のような関数を、マドールの ψ 関数 (Madore’s ψ function) と言います。
✓【定義】マドールの ψ 関数

すべての β < α に対して ψ(β) が定義されているときに、 ψ(α) を以✏下によって定義する。Ω = ω1 （最小の非可算順序数）である。

C0 (α)=

Cn+1 (α)

=

C(α)

=

{0, 1, ω, Ω}{β1 + β2 , β1 β2 , β1β2 , ψ(β) | β1 , β2 , β ∈ Cn (α); β < α}4Cn (α)
n<ω

✒

ψ(α)

=

min{β ∈ Ω | β ∈/ C(α)}

8 Buchholz, W. (1986) A new system of proof-theoretic ordinal functions. Annals ofPure and Applied Logic 32, 195–207. doi:10.1016/0168-0072(86)90052-7

✑

188

第7章

再帰関数

まず、C(α) を 0, 1, ω, Ω から加算、乗算、冪乗と β < α に対する ψ(β)
のみを有限回使って定義できるすべての順序数の集合とします。ψ(α) はC(α) に属さない最小の順序数です。つまりもっと大雑把に言えば、ψ(α)
は 0, 1, ω, Ω から加算、乗算、冪乗と、α よりも小さいすでに定義された順
序数に対する ψ 関数で表記できない最小の順序数です。

Wikipedia に分かりやすく解説が書かれていることから、多くの人がマ
ドールの ψ 関数を使うようになり、メジャーになってきています。
まず C(0) について考えます。これは 0, 1, ω, Ω から、加算、乗算、冪乗で定義できない最小の順序数ということです。ϵ0 よりも小さい順序数は、すべて 0, 1, ω から加算、乗算、冪乗で定義できます。ϵ0 は定義できません。Ω

は大きすぎて ϵ0 作りには役立ちません。したがって ψ(0) = ϵ0 となります。
次に C(1) について考えると、これは 0, 1, ω, Ω, ϵ0 から加算、乗算、冪乗で定義できない最小の順序数となります。C(1) は ϵ1 よりも小さいすべての順
序数を含み、ϵ1 を含まないため、ψ(1) = ϵ1 となります。同様に ψ(α) = ϵαであることを帰納的に証明できますが、その証明が有効なのは α < ϵα が成立している間だけです。α = ϵα となる最小の順序数は ζ0 = φ2 (0) なので、α < ζ0 に対して ψ(α) = ϵα となります。そして、ψ(ζ0 ) = ζ0 となりま

すが、ψ(ζ0 + 1) は ζ0 よりも大きくなりません。ζ0 は φ1 (α) = ϵα 関数の有限回の繰り返しでは定義できないためです。α ≤ Ω において、ζ0 は C(α)

の要素にならないため、ζ0 ≤ α ≤ Ω に対して ψ(α) = ζ0 となります。

ψ(Ω + 1) の定義では、C(α) の定義に Ω が入っているため、ψ(Ω) = ζ0 を使うことができます。すなわち C(Ω + 1) は、0, 1, ω, Ω, ζ0 から加算、乗算、
冪乗、φ1 (α) = ϵα 関数で構成できるすべての順序数が含まれます。ψ(Ω + 1)

は、そのように構成できない最小の順序数なので ϵζ0 +1 となります。このように、マドールの順序数崩壊関数では ζ0 が最小の非可述的な順序数になります。フェファーマンの順序数崩壊関数から、シュッテは Γ0 から非可述的な順序数になると説明をしましたが、どの順序数から非可述的となるか
は順序数崩壊関数の定義にもよるということです。

7.2. 順序数崩壊関数

189

同様に、次のように計算が進みます。

ψ(Ω + 2)=ϵζ0 +2ψ(Ω + ω)=ϵζ0 +ω

ψ(Ω + ζ0 )=ϵζ0 +ζ0 = ϵζ0 2

ψ(Ω2)

=

ψ(Ω + Ω) = ζ1 = φ2 (1)

ψ(Ω3)

=

ζ2 = φ2 (2)

ψ(Ωω)

=

ζω = φ2 (ω)ψ(Ω2 )=

ψ(ΩΩ) = φ3 (0)

3

ψ(Ω )

=

φ4 (0)

ψ(Ωω )=φω (0)

Ω

ψ(Ω )

=

Γ0 = θΩ (0)ψ(ΩΩ + Ω)=φΓ0 +1 (0)2ψ(Ω + Ω )=φΓ0 +2 (0)ψ(ΩΩ + Ωω )=φΓ0 +ω (0)ΩΩψ(Ω 2) =ψ(ΩΩ + ΩΩ ) = Γ1 = θΩ (1)ψ(ΩΩ 3) =Γ2 = φ(1, 0, 2) = θΩ (2)Ωψ(Ω ω)=

Γω = φ(1, 0, ω) = θΩ (ω)ψ(ΩΩ+1 )=ψ(ΩΩ Ω) = φ(1, 1, 0) = θΩ+1 (0)ψ(ΩΩ+2 )=φ(1, 2, 0) = θΩ+2 (0)ψ(ΩΩ+ω )=φ(1, ω, 0) = θΩ+ω (0)Ω2=ψ(ΩΩ+Ω ) = φ(2, 0, 0) = θΩ2 (0)ψ(Ω)ψ(ΩΩ3 ) =φ(3, 0, 0) = θΩ3 (0)

Ω4

) =

φ(4, 0, 0) = θΩ4 (0)ψ(ΩΩω ) =φ(ω, 0, 0) = θΩω (0)Ω2φ(1, 0, 0, 0) = θΩ2 (0)

ψ(Ω

ψ(Ω

) =

3

ψ(ΩΩ ) =ωψ(ΩΩ ) =φ(1, 0, 0, 0, 0) = θΩ3 (0)θΩω (0) (小ヴェブレン順序数)

第7章

190

再帰関数

=

θΩΩ (0) (大ヴェブレン順序数))=θΩΩΩ (0)ψ(ϵΩ+1 )=θϵΩ+1 (0) (バッハマン・ハワード順序数)Ωψ(ΩΩ )
ψ(ΩΩΩΩ

この定義では、バッハマン・ハワード順序数より大きくはなりません。
ここで、ψ 関数の「正則な」定義を考えます。たとえば 1 + ω という順
序数は定義できますが、これはカントール標準形ではないため「正則」ではないと考えます。α + β の表記で α < β であれば正則ではありません。
そして正則な ψ 関数では、ψ 関数の内側に入っている引数は常に外側の関数よりも小さくなります。たとえば ψ(ψ(Ω) + 1) はこの条件を満たさない
ため、正則な表記ではありません。
バッハマン・ハワード順序数よりも小さい順序数 α の基本列を取る方法
について考えます。まずは α を ψ 関数で

α = δ1β1 γ1 + · · · + δkβk γkの形で正則に表記します。ここで δk は ω か ψ(α) です。γk が極限順序数であればその基本列を取り、後続順序数であれば δkβk γk = δkβk (γk − 1) + δkβk とすれば、δkβk の基本列を定めることに帰着します。そして βk が極限順序数であればその基本列を取り、後続順序数であれば δkβk = δkβk −1 δk とすることで、

δk の基本列を定める問題に帰着します。δk = ω であれば基本列 0, 1, 2, ...
を取り、δk = ψ(0) であれば基本列 1, ω, ω ω , ... を取り、δk = ψ(α + 1) であれば基本列ψ(α), ψ(α)ψ(α) , ψ(α)ψ(α)

ψ(α)

, ...

を取ります。
残りは δk = ψ(α) で α が極限順序数のときです。α の共終数が ω であれば、α の基本列を取ればいいので簡単です。問題は α の共終数が非可算のときにどのように基本列を決めるか、というところです。

α の共終数が非可算のときは、α への基本列を取ることができません。そこで ρ < α かつ ψ(ρ) = ψ(α) となる最小の可算順序数 ρ を見つけます。そのために、まずは α の基本列を取ろうとしたときに、Ω への基本列を取る

7.2. 順序数崩壊関数

191

必要が出てきて基本列が取れなくなる箇所を見つけて、その Ω を γ と書き換えて他の Ω と区別して、h(γ) という関数を考えます。たとえば α = Ω2に対しては、Ω + Ω の 2 番目の Ω の基本列を取ろうとして取れないことから、2 番目の Ω を γ に変えて h(γ) = Ω + γ とします。そして h(γ) に

γ = ψ(ξ) を入れた h(ψ(ξ)) を考えると、ξ = h(ψ(ξ)) となる最小の順序数が ρ となります。このとき ρ の基本列は、

ρ[0]

=

0

ρ[n + 1]=h(ψ(ρ[n]))すなわち、0, h(ψ(0)), h(ψ(h(ψ(0)))), ... となります。ψ(α) = ψ(ρ) の正則な基本列は、この基本列に ψ 関数をかぶせて

ψ(α)[0] =ψ(α)[n + 1]=ψ(0)ψ(h(ψ(α)[n]))すなわちψ(0), ψ(h(ψ(0))), ψ(h(ψ(h(ψ(0))))), ...
となります。
たとえば α = Ω2 であれば、h(γ) = Ω + γ なので、ψ(Ω2) の基本列は

ψ(0), ψ(Ω + ψ(0)), ψ(Ω + ψ(Ω + ψ(0))), ...
です。また α = ΩΩ +Ω 4 のときは、h(γ) = ΩΩ +Ω 3+Ωγ なので、ψ(α) の
3

2

3

2

基本列は

ψ(α)[0]=ψ(0)ψ(α)[1]=ψ(h(ψ(α)[0])) = ψ(ΩΩ +Ω 3+Ωψ(0) )ψ(α)[2] =ψ(h(ψ(α)[1])) = ψ(ΩΩ +Ω 3+Ωψ(Ωとなります。

32

32Ω3 +Ω2 3+Ωψ(0)

)

)

第7章

192

再帰関数

さて、ここまでの定義ではバッハマン・ハワード順序数よりも大きな順序
数を表記することはできません。ψ(ϵΩ+1 + 1) としても、ϵΩ+1 を含む C(α)

が存在しないため、ψ(ϵΩ+1 ) よりも大きくはならないのです。そこで、さらに大きな順序数を表記するために、2 つ目の非可算順序数 Ω2 = ω2 を導入

して、さらに新しく ψ1 という関数を定義することで（定義の詳細は省略します）、ψ1 (0) = ϵΩ+1 となって ψ(ψ1 (0)) がバッハマン・ハワード順序数となり、さらに ψ(ψ1 (ϵΩ2 +1 )) までの可算順序数を作ることができるシステムができます。さらに、定義を修正することで ψ(ψ1 (Ω2 )) と書かずに ψ(Ω2 )と書けば可算順序数が得られるようにすることができます。

同様に Ωω までの非可算順序数を導入して、ψ を ψ0 とすることで、ブーフホルツの ψ 関数と本質的に同等な定義が得られます。その限界は竹内・
フェファーマン・ブーフホルツ順序数 ψ0 (ϵΩω +1 ) = θϵΩω +1 (0) となります。
この順序数の名前は、マドールが書いた Wikipedia の記事で名づけられた
ものです。

7.2.5

ワイヤーマンの ϑ 関数

ワイヤーマンの ϑ 関数 9 (Weiermann’s ϑ function) は、次のように定義

されます。
✓

【定義】ワイヤーマンの ϑ 関数

C0 (α, β) =Cn+1 (α, β) =C(α, β) =✏β ∪ {0, Ω}{γ + δ, ω γ , ϑ(η) | γ, δ, η ∈ Cn (α, β); η < α}4Cn (α, β)n<ωϑ(α) =✒

min{β < Ω | C(α, β) ∩ Ω ⊆ β ∧ α ∈ C(α, β)}

これは、定義は少し複雑ですが 1 変数で簡潔に表記できます。Googology✑

9 Rathjen, M. and Weiermann, A. (1993) Proof theoretic investigations of Kruskal’s
theorem. Annals of Pure and Applied Logic 60(1), 49–88. doi:10.1016/01680072(93)90192-G

7.2. 順序数崩壊関数

193

Wiki では、フェファーマンの θ 関数と区別するために、ギリシャ文字 θ のフォントに ϑ を使っているので、本書でもそのようにします。
この定義ですべての α < ϵΩ+1 に対して ϑ(α) が定義されます。ここでC(α, β) は「0」「β よりも小さい順序数」「Ω」 から、有限回の「加算」「ω γ」「ϑ(η)（すでに ϑ(η) が定義されている場合に限る）」を適用した順序数す
べての集合です。そして ϑ(α) は α ∈ C(α, β) であり、かつ C(α, β) に属するいかなる可算順序数よりも大きい順序数 β の中で最小のものです。
この定義を使うと、たとえば次のようになります。
2

ϑ(Ω3 )=

θΩ3 (0) = ψ(ΩΩ ) = φ(1, 0, 0, 0)ϑ(Ωω )=

θΩω (0) = ψ(ΩΩ ) (小ヴェブレン順序数)

ϑ(ΩΩ )=

θΩΩ (0) = ψ(ΩΩ ) (大ヴェブレン順序数)ϑ(ϵΩ+1 )=θϵΩ+1 (0) = ψ(ϵΩ+1 ) (バッハマン・ハワード順序数)ωΩ

ワイヤーマンの ϑ 関数では、バッハマン・ハワード順序数よりも大きな順
序数を表記することはできません。ただし Googology Wiki では次に紹介する順序数崩壊関数の拡張による表記もされているようです。

7.2.6

順序数崩壊関数の拡張

Googology Wiki ユーザーの Deedlit11 は、フェファーマンの θα (β) 関数、ワイヤーマンの ϑ(α) 関数、ブーフホルツの ψ0 (α) 関数を、それぞれ

α = ψI (0)（オメガ収束点）まで拡張できることを Googology Wiki のブロ

グで解説しています。まずは、ワイヤーマンの ϑ 関数には Ων (ν ≤ ω) を導入して他の 2 つと同等の強さにしてから、C の定義に Ωα を入れて、θΩΩ (β)

が α = θΩα (0) となる β 番目の順序数、ϑ(ΩΩ ) が α = ϑ(Ωα ) となる最小の順序数、ψ0 (ΩΩ ) が α = ψ0 (Ωα ) となる最小の順序数となるように定義します。すると、それぞれの順序数崩壊関数によって、オメガ収束点までの順序数を崩壊させた可算順序数を定義できます。Deedlit11 は、さらにオメ
ガ収束点の先の弱到達不能基数や弱マーロ基数のような基数を崩壊する方法について書いています。

第7章

194

7.3

2 階算術

7.3.1

逆数学

再帰関数

公理から定理を証明するのが通常の数学の手順ですが、それを逆に考えて、ある定理を証明するためにどのような公理が必要か、と考える逆数学(reverse mathemetics) を、アメリカの数理論理学者のハーヴェイ・フリード
マン (Harvey Friedman) が提唱し、スティーブ・シンプソン (Steve Simpson)が確立しました10 。
順序数解析の節 (p.139) では、ある理論体系である定理が証明できるかどうかを調べるということは、ある形式体系に定められている言語で、公理をスタートとして推論規則を繰り返し適用して定理を示すことができるかどうかを調べることであると説明しました。理論体系 A では証明できない定理が理論体系 B では証明できるときに、理論体系 B は理論体系 A よりも証明力が強いと言います。それでは、ある定理を証明するために「最低限必要な強さを持った理論体系」は何であろうか？ と考えるのが逆数学
です。

7.3.2

2 階算術

逆数学では通常 2 階算術 (second-order arithmetic) Z2 の部分体系を研究対象とします。逆数学で ZFC のような集合論の公理をベースとしない理由は、集合論は表現力が高すぎて、逆数学で必要な「弱い理論体系」を作りにくいためです。2 階算術は、数学におけるかなりの定理を証明できる
強力な理論体系です。そこで 2 階算術の部分体系である RCA0 という理論体系を基本の理論体系として、RCA0 に公理を加えることで色々な強さの理論体系を作ります。

自然数を議論領域とするペアノ算術は 1 階算術 (first-order arithmetic)と言われますが、2 階算術は議論領域が数と数の集合へと広がります。そのために、変数には数変数と集合変数の 2 種類があり、次のような記号を使います。
10 Simpson, S. G. (2009) Subsystems of second order arithmetic, Perspectives in
Logic (2nd ed.). Cambridge University Press, England.

7.3. 2 階算術

195

1. 定数記号ゼロ 0
2. 等号、不等号、集合の要素と呼ばれる 3 つの二項関係の記号 =, <, ∈。
最初の 2 つは数の間の関係、最後の 1 つは数と集合の間の関係

3. 数から数へ写す、後者と呼ばれる単項の関数記号 S
4. 2 組の数を 1 つの数へ写す、それぞれ加法、乗法と呼ばれる 2 つの二項関数記号 +(a, b), ·(a, b) 。 それらは a + b, a · b とも表示される。

2 階算術の公理は、ロビンソン算術に以下の公理を加えたものです。
1. 2 階帰納公理 (second-order induction axiom): ∀X((0 ∈ X ∧ ∀x(x ∈X → Sx ∈ X)) → ∀x(x ∈ X)) すなわち、集合 X が 0 を要素に持ち、X のすべての要素の後者が X の要素であるときに、すべての自然数
は X の要素である。

2. 内包の公理型 (axiom schema of comprehension): X が自由変数でないすべての論理式 φ ごとに ∃X∀x(x ∈ X ↔ φ(x)) 。すべての自然

数に関する述語ごとに自然数の部分集合（すなわち φ を満たすこれ
らの自然数からなる集合) が定義されることを意味する。
内包の公理型の「内包」とは何でしょうか。集合論において「内包」は「外延」に対する語で、たとえば集合の要素を列記することで集合を記すことは「外延」で、条件 P (x) があったときに {x | P (x)} のように、ある条件を満たすかどうかで集合を表記する方法が「内包」です。つまり述語 φ によって「φ を満たすすべての自然数」という集合を定義できる、ということが「内包」という意味です。

ZF 公理系では、内包の公理型は制限付き内包の公理型 (axiom schema of
restricted comprehension) あるいは分出の公理型 (axiom schema of specification) として登場します。置換の公理型 (axiom schema of replacement)から分出の公理型を証明できるため、現代では ZF 公理系から分出公理が省かれることも多いのですが、ゲーデルは分出公理が集合論における最も重要な公理であると考えていたようです。次のような公理です。

∀X∃A∀x(x ∈ A ↔ (x ∈ X ∧ φ(x)))

第7章

196

再帰関数

「制限付き」内包の公理型としているのは、ここで述語 φ を適用する範囲をX ∧ φ(x) のように集合 X の部分集合に制限していることを意味します。これは、φ(x) = ¬(x ∈ x) とするようなラッセルのパラドックスを回避するためです。2 階算術における内包の公理型では、述語を適用する範囲を自然数に制限しているので、パラドックスは回避されています。ここで内包公理
は「すべての φ」に対する公理ですが、∀φ という二階述語論理の表現は一階述語論理ではできないので、すべての φ に対する公理型となっています。

7.3.3

論理式の階層次に 2 階算術の部分体系について説明したいのですが、そのためには論理式の階層について説明をしておく必要があります。まず、ペアノ算術には算術的階層 (arithmetical hierarchy) があります。
一階述語論理におけるすべての論理式は、冠頭標準形 (prenex normalform) という量化子が論理式の先頭に集められた形に書き直すことができます。たとえば∀x((∃yφ) ∨ ((∀zψ) → ρ))という論理式は冠頭標準形ではありませんが、これと等価な冠頭標準形の論理式∀x∃y∃z(φ ∨ (ψ → ρ))に書き換えることができます。ある論理式の算術的階層は、この冠頭標準形の論理式に書き直してから考えます。
算術的階層は Σ0n あるいは Π0n と書かれます。ここで n は自然数です。

論理式が量化子を含まないときは Σ00 であり、また Π00 です。ここで有界

量化子 ∀n < t と ∃n < t は量化子として数えません。そして Σ0n と Π0n は
以下のように帰納的に定義されます。

1. ψ が Π0n であるとき、∃n1 · · · ∃nk ψ と論理的に等価な式 φ は、階層
Σ0n+1 に相当する。
2. ψ が Σ0n であるとき、∀nl · · · ∀nk ψ と論理的に等価な式 φ は、階層
Π0n+1 に相当する。

7.3. 2 階算術

197

たとえば ψ が量化子を含まないとき、∃w∀x∀y∃zψ について考えると、ψ は

Π00 、∃zψ は Σ01 、∀x∀y∃zψ は Π02 、そして ∃w∀x∀y∃zψ は Σ03 となります。
2 階算術では、同様に解析的階層 (analytical hierarchy) で集合量化子の階層を考えます。集合の量化子を含まない式は Σ10 = Π10 = ∆10 です。算術的階層と同様に、集合量化子に関する階層 Σ1n と Π1n を帰納的に定義します。ここで Σ1n あるいは Π1n に属する式は、n よりも大きい m に対して、

Σ1m と Π1m に属します。自然数の集合が Σ1n 式で定義できれば Σ1n に属し、
Π1n 式で定義できれば Π1n に属し、Σ1n と Π1n の両方に属すときに ∆1n に属
します。

7.3.4

2 階算術の部分体系と証明論的順序数

2 階算術の部分体系には、ビッグ 5 といわれる代表的なものがあります。
以下に、ビッグ 5 の理論体系を次第に強くなるように簡単に紹介し、それぞれの証明論的順序数を書きます。ここでは、おおまかな概念を書くにとどめます。正確かつ詳細な解説は本書の著者には無理なので、先に引用したスティーブ・シンプソンの本を参照してください。ここでそれぞれの名
前に下付き文字の 0 がついている理由は、完全な 2 階帰納公理を使うことができずに、帰納法の公理が制限されていることを示しています。

1. 逆数学の基本体系 RCA0 の証明論的順序数は ω ω です。RCA は再帰的内包公理 (recursive comprehension axiom) を意味します。「ロビンソン算術の公理」＋「Σ01 論理式に対する帰納法の公理」＋「∆01

論理式に対する内包公理」です。ここで、∆01 は Σ01 または Π01 のいずれかです。RCA0 は弱い理論体系に見えますが、多くの数学的な定理を証明できます。自然数、整数、有理数に関する様々な性質や、実数に関する基本的な性質、実数の連続関数における中間値の定理を証明できます。これが逆数学の基本体系なので、逆数学の理論体系はすべて RCA0 に公理を加えることでできます。

2. WKL0 の証明論的順序数は ω ω です。RCA0 に弱いケーニッヒの補

題 (weak form of König’s lemma) を加えたものです（WKL の名前の由来）。証明論的順序数は RCA0 と同じですが、RCA0 では証明できない多くの数学の定理を証明できます。

第7章

198

再帰関数

3. ACA0 の証明論的順序数は ϵ0 です。これは、RCA0 にすべての 1
階算術の式（Σ0n の式）に対する内包公理、すなわち算術的内包公理 (arithmetical comprehension axiom) を加えたものです。つまり、

ACA0 は任意の算術的な式を満たす自然数の集合を作ることができるということです。ペアノ算術と同じ強さになります。ACA0 は可述的な理論だと考えることができますが、可述的に証明可能な定理の中にも、ACA0 で証明できないものがあります。ACA0 では自然数の基本的な性質のほとんどと、様々な数学の定理を証明できます。たとえば「有界な実数列は収束部分列を持つ」というボルツァーノ・ワ
イエルシュトラスの定理 (Bolzano-Weierstrass theorem) を証明できます。

4. ATR0 の証明論的順序数はフェファーマン・シュッテの順序数 Γ0 です。これは 2 変数ヴェブレン関数の限界であり、可述的な理論体系の限界です。ATR0 は ACA0 に算術的超限再帰 (arithmetical transfinite

recursion) の公理型を加えたものです。公理の内容を直感的に表現
すると、ある自然数の集合に対して、算術的な汎関数 (arithmetical

functional) を適用して新しい自然数の集合とする、ということを、ある可算の整列集合に順番に対応させながら（たとえば ϵ0 回）繰り返すことができる、ということです。

5. Π11 -CA0 の証明論的順序数は ψ0 (Ωω ) です。これは RCA0 に Π11 式の内包公理型を加えたものです。これはいわゆる非可述的な体系 (im-predicative system) です。Π11 式、つまり冠頭標準形で ∀ のみを使った式を使って集合 X を定義するということは、その Π11 式の量化子の変数に自分自身 (X) を代入してもその式が成り立つということを意味しています。自分自身を定義に使うということは、非可述的な定義ということになります。つまり非可述的な定義を許す公理が Π11 式の内包公理型です。なお、Π11 -CA0 で ACA0 や ATR0 の公理を証明できます。

ビッグ 5 以外にも、色々な 2 階算術の部分体系が解析されています。その中のいくつかを以下に紹介します。ここで、すべて n は 0 か 1 です。

7.3. 2 階算術

199• RCA や WKL のように下付き文字の 0 がないときには、2 階帰納公理が使えます。

• Σnm -IND と Πnm -IND と ∆nm -IND は、Σnm と Πnm と ∆nm それぞれの論理式に制限した 1 階の帰納法 (induction) です。Π1∞ -IND はこれらすべての公理型を足したものです。

• Σnm -TI と Πnm -TI と ∆nm -TI は、それぞれのクラスの論理式に制限した超限帰納法 (transfinite induction) の公理型です。つまり、それぞれの階層の複雑性を持った ψ(n) 論理式と、自然数に関する整列順序が入っている集合 X について、∀n : ψ(n) を整列順序によって証明可能ということです。上と同様に、Π1∞ -TI が定義できます。

• Σnm -CA と Πnm -CA と ∆nm -CA は、それぞれのクラスの論理式に制限した内包公理 (comprehension axiom) です。すべてを入れた Π1∞ -CA
は、2 階算術 Z2 と等価です。

• BI は、バー帰納法 (bar induction) の公理型です。ごく簡単に直感的な表現をすると、算術的な論理式であらわされる整礎な二項関係と、任意の論理式に対して、超限帰納による証明が可能であることを意味します。

• Σnm -AC と Πnm -AC と ∆nm -AC は、ZFC の選択公理 (axiom of choice)を 2 階算術に「取り入れた」公理型です。この公理は、すべての n に対して、それぞれの階層の論理式に対応する ψ(n, X) が成立するような集合 X が存在するのであれば、 ψ(n, Xn ) が成立するような集
合の列 Xn を作ることができる、というものです。

• Σnm -DC と Πnm -DC と ∆nm -DC は、従属選択公理 (axiom of dependent
choice) という名前の、弱い形の選択公理を 2 階算術に取り入れたものです。すべての n と X に対して、ψ(n, X, Y ) が成立するような Yが存在するのであれば、 ψ(n, Xn , Xn+1 ) が成立するような集合の列

Xn を作ることができる、という公理です（ややおおざっぱな書き方をしています）。

第7章

200

再帰関数

• Σnm -TR と Πnm -TR と ∆nm -TR は、それぞれのクラスの論理式に対す
る超限再帰 (transfinite recursion) です。つまり算術的超限再帰を拡張したものです。直感的な表現をすれば、ある操作を超限的に繰り返すことです。Googology Wiki の Deedlit11 によれば、Π11 -TR0 の証

明論的順序数は、順序数崩壊関数をオメガ収束点にまで拡張したものに相当するようです。

7.3.5

タラノフスキーの C 表記

タラノフスキーの C 表記 (Taranovsky’s C notation) は、1983 年にウクライナのキエフに生まれて 1996 年にアメリカに移住し、MIT で数学を専攻したドミトロ・タラノフスキー (Dmytro Taranovsky) が MIT のサーバーに公開した大きな順序数の表記法です11 。まずは一般的な整列集合、そして順序数に対する崩壊関数 C(a, b) を定義しています。典型的な C 関数の定義では、a が b よりも非常に大きいときに C(a, b) < a となって、C は b
よりも大きい a を崩壊させる働きを持っていることから、崩壊関数と呼ばれるとしています。この一般の C 表記に 0 と Ω を導入すれば、バッハマ
ン・ハワード順序数が定義されます。そして、再帰到達不能度 (degree ofrecursive inaccessibility) やリフレクション度 (degree of reflection) を定義して、それぞれの degree を崩壊する順序数崩壊関数を定義しました。さらに Π1n -CA の強さ、すなわち 2 階算術の強さを持つ C 関数を定義しました。

7.4

様々な巨大数と関数

このレベルの巨大数を生み出す関数・システムや巨大数を表記する記法
は、いずれも複雑なものばかりです。その強さは、ここまでに示したような順序数に対する順序数階層や順序数解析によって評価されますが、あまりにも強力な理論になってくると、対応する順序数を決めることも難しくなってきます。この章でこれから紹介する巨大数の前半は、対応する順序数が分かっていますが、途中からはまだ対応する順序数もよく分からず、お互いにどちらの方が強いのかはっきりしなくなってきます。よってこの章
11 Ordinal Notation http://web.mit.edu/dmytro/www/other/OrdinalNotation.htm

7.4. 様々な巨大数と関数201で示す巨大数や関数は、必ずしも強さの順番となっているかどうかははっ
きりしていません。ローダー数以降は、理論体系の強さによって関数の強さが直接評価され、さらにはその理論体系の強さが巨大基数の強さによって評価されるような巨大数も出現します。

7.4.1

ふぃっしゅ数バージョン 6

本書『巨大数論』を書き始めて「まだ書きかけ」版の PDF ファイルを公開した 2007 年 10 月 27 日に、その PDF ファイルの中でふぃっしゅ数バー
ジョン 6 を定義しました。その時期は、巨大数探索スレッドの議論でふぃっ
しゅ数バージョン 5 が F [ϵ0 ] のレベルに達することが解析されて、そのことを本書の著者が理解できたころです。そこで、バージョン 5 までの考え方をさらに進めて「より抽象度の高い変換」を定義することで、どの程度の大
きさの巨大数が作れるかと考えて作ったものです。その大きさは F [ζ0 ] のレベルです。それは大きな数ではありますが、F [Γ0 ] に相当するような巨大数をこの定義の拡張で作るのはかなり無理そうで、作ったとしても難解な定義になるだろうと思います。
著者としては「ふぃっしゅ数」の計算可能な定義の拡張は、これ以上はあまり面白くないと考えてこのバージョン 6 で止めました。
【定義】ふぃっしゅ数バージョン 6

1. 集合 M [m, n](m = 0, 1, . . . ; n = 1, 2, . . .) を以下のように定める。
M [0, 1]=自然数から自然数への関数全体の集合
M [m + 1, 1] = M (m, n)(n = 1, 2, . . .) の元 1 個ずつを要素に持つ集合、すなわち M [m + 1, 1] = M [m, 1] ×

M [m, 2] × M [m, 3] × ...

M [m, 1] の元は、その要素の要素の…要素である M [0, 1] の元と同じ関数の働きを持つ。

M [m, n+1]=写像 M [m, n] → M [m, n] 全体の集合 (n =1, 2, . . .)

第7章

202

再帰関数

2. M [m, n] の元 m(m, n) を以下のように定めるa 。
m(0, 1)(x) :=m(m, n + 1)fn fn−1 ...f1 (x) :=x+1
fn x fn−1 . . . f1 (x)(m = 0; n = 1, 2, . . .
or m = 1, 2, . . . ; n = 2, 3, . . .)m(m + 1, 1):=

m(m + 1, 2)[a1 , a2 , ...] :=bn fn−1 . . . f1 (x) :=[m(m, 1), m(m, 2), m(m, 3), ...]
[b1 , b2 , ...] の bn を以下で定める。
ay ay−1 ...an fn−1 . . . f1 (x)(y = max(x, n))

3. ふぃっしゅ関数 F6 (x) を以下のように定める。
F6 (x) := m(x, 2)m(x, 1)(x)
4. ふぃっしゅ数 F6 := F663 (3) とする。
a ただし、a , b , f は m(m, i) の元とし、厳密な定義の構造は F と同じである。
5i i im(m, n+1)fn fn−1 ...f1 ∈ M (m, 1) = M (0, 1)×Π0≤k<m,1<l M (k, l) を、M (0, 1)−
成分は与えられた式の通りに、その他の成分は f1 ∈ M (m, 1) を参照して定義する。
m(m + 1, 2) の式についても同様に定義する。

F6 の大きさは、次のように計算できます。
m(1, 1)m(1, 2)m(1, 1)=[m1 , m2 , m3 , …](mi = m(0, i))

=

x+1

=

[a1 , a2 , a3 , …] とすると

a1 (x) =a1すなわち m(1, 2)m(1, 1)≈H[ϵ0 ]≈

H[ϵ0 ]

a2 f1 (x) =m2

mx mx−1 ...m1 (x) より、F5 と同様の計算で=

my my−1 …m2 f1 (x)(y = max(x, 2)) より
H[×ω](H[a] → H[a × ω] の変換)

7.4. 様々な巨大数と関数

203

m3 m2

=

H[×ω ω ]m3 m3 m2=

H[×ω ω ]m4 m3 m2=..
.

H[×ω ω ]a2=

H[×ϵ0 ]

2

ωとなります。そして

a3 f2 f1 (x) =my my−1 ...m3 f2 f1 (x)(y = max(x, 3)) より、

f2=

H[×a] とすると

m3 f 2=H[×aω ]

m3 m3 m2=

H[×aω ]

m4 m3 f2=..
.

H[×aω ]a3 f2=

H[×aϵ0 ]2ωとなるため、a3 は H[×a] → H[×aϵ0 ] の変換です。

a4 f3 f2 f1 (x)=my my−1 ...m4 f3 f2 f1 (x)(y = max(x, 4)) より、

f2=

H[×a]、f3 = H[×a] → H[×ab ] の変換とすると

f2

=

H[×a]

f3 f2

=

H[×ab ]

m4 f3 f2=

H[×ab ]

m5 m4 f3 f2

=
..
.

H[×ab

a4 f3 f2:

H[×ab ]

ω

ωω

]

ϵ0

となるため、a4 は [H[×a] → H[×ab ]]→ [H[×a] → H[×ab ]] の変換です。
ϵ0

このことから、

a4 a3:

H[×a] → H[×aϵ0 ] の変換
ϵ0

第7章

204
a4 a3 a2

再帰関数

ϵ0

H[×ϵ0 ϵ0 ]:と計算され、以下同様に a5 は [H[×a] → H[×ab ]]→ [H[×a] → H[×ab ]]c→ [H[×a] → H[×ab ]]→ [H[×a]→ H[×abcϵ0]] の変換となって、ϵ0 ϵ 0a5 a4 a3 a2:

H[×ϵ0 ϵ0a6 a5 a4 a3 a2:

H[×ϵ0 ∧∧ 5]

an+1 an ...a2:H[×ϵ0 ∧∧ n]] = H[×ϵ0 ∧∧ 4]と計算され、

m(1, 2)2 m(1, 1)≈H[ϵ0 ∧∧ ω] = H[ϵ1 ]となります。そしてm(1, 2)3 m(1, 1) = [b1 , b2 , b3 , ...]とすると、bi は上記 ai の ϵ0 を ϵ1 に変えた式となります。したがって、

m(1, 2)3 m(1, 1)m(1, 2)4 m(1, 1)≈≈H[ϵ1 ∧∧ ω] = H[ϵ2 ]H[ϵ2 ∧∧ ω] = H[ϵ3 ]といったように、m(1, 2) は H[ϵa ] の a に 1 を足す効果を持ちます。このことから F5 の計算と同様の構造でm(1, 3)m(1, 2)m(1, 1)(x)≈H[ϵω ]m(1, 4)m(1, 3)m(1, 2)m(1, 1)(x)≈H[ϵωω ]m(1, 5)m(1, 4)m(1, 3)m(1, 2)m(1, 1)(x)≈H[ϵωωω ]m(1, x)m(1, x − 1)...m(1, 2)m(1, 1)(x)≈H[ϵϵ0 ]m(2, 2)m(2, 1)≈H[ϵϵ0 ]となります。そして、m(2, 2)m(2, 1) = [f1 , f2 , f3 , …] とすると (fi は M [1, i]
の元)

f1

=

H[ϵϵ0 ] 程度の関数を元に持つ M (1, 1)

7.4. 様々な巨大数と関数

205

H[ϵ×ϵ0 ](H[ϵa ] → H[ϵa×ϵ0 ] の変換)

f2

:

f3

:

H[ϵ×a ] → H[ϵ×aϵ0 ] の変換

f4 f3 f2:H[ϵ×ϵ0 ϵ0 ϵ0 ]となることからm(2, 2)2 m(2, 1)≈

H[ϵϵ1 ]≈

H[ϵϵ2 ]≈

H[ϵϵ3 ]≈

H[ϵϵϵ0 ]m(1, 2)m(1, 1)≈H[ϵ0 ]m(2, 2)m(2, 1)≈H[ϵϵ0 ]m(3, 2)m(3, 1)≈

H[ϵϵϵ0 ]m(4, 2)m(4, 1)≈H[ϵϵϵϵ0 ]m(2, 2)3 m(2, 1)
4m(2, 2) m(2, 1)と計算されます。このように、m(2, 2) が H[ϵϵa ] の a に 1 を足す効果を持
つのでm(3, 2)m(3, 1)となります。
以上の計算を繰り返すと、となりF6 (x) = m(x, 2)m(x, 1)(x)と計算されます。よって

H[ζ0 ] ≈ F [ζ0 ]F6 ≈ F [ζ0 + 1](63)

です。

7.4.2

≈

ペア数列数

ペア数列数 (pair sequence number) は、バシクが 2014 年に巨大数探索ス

レッドに投稿した BASIC プログラム12 によって表示される数です。2014

12 巨大数探索スレッド 10 https://wc2014.5ch.net/test/read.cgi/math/1384444271/167

第7章

206

再帰関数

年に投稿したプログラムは計算が終了しない（有限の数が表示されない）ことが示されたため、バシクが 2017 年 10 月 2 日に更新をしたバージョンを示します。なお、読みやすくするためのちょっとした書き換え（endif を追加する等）をしました。

dim A ( Infinity ): dim B ( Infinity ): C =9
for D =0 to 9
for E =0 to C
A ( E )= E : B ( E )= E
next
for F = C to 0 step -1
C=C*C
for G =0 to F
if A ( F )=0 or A (F - G ) < A ( F ) - H thenif B ( F )=0 then
I=G:G=Felse
H = A ( F ) - A (F - G )if B (F - G ) < B ( F ) then I = G : G = F endif
endif
endif
next
for J =1 to C * I
A ( F )= A (F - I )+ H : B ( F )= B (F - I ): F = F +1
next
H =0
next
next
print C
ペア数列数は F [ψ0 (Ωω ) + 1](10) 程度の大きさです。なお、このプログ

ラムは計算アルゴリズムを示すためのもので、無限配列を宣言するといっ7.4. 様々な巨大数と関数207たコードが入っていて、実際に動かせるものではありません。このアルゴ
リズムをペア数列システム13 (pair sequence system) と言います。このプ
ログラムは、バシクによる原始数列数 (p.160) のプログラムを拡張したものです。そしてバシク行列 (p.222) へと発展します。なお、バシク行列で紹介する予定のバシク行列計算機のホームページから、ペア数列の計算過程を検証できます。バシク行列計算機にはバシク行列の複数のバージョンがありますが、バシクが 2014 年に発表したプログラムはバージョン 1 に対応し、ここに記載したプログラムはバージョン 2 に対応します。
ペア数列 (pair sequence) は、(0,0)(1,1)(2,2)(3,3)(3,2) のような非負整数

ペアの有限長数列です。ペア数列 P は、自然数 n から自然数 P [n] への関数として働き、 (0,0)(1,1)(2,2)(3,3)(3,2)[n] のように書きます。関数 P [n]をハーディ階層によって増加速度を近似したときの順序数を α としたとき、ペア数列 P そのものが順序数 α をあらわすものとします。たとえば(0, 0)(1, 1)(2, 2)(3, 3)(3, 2) = ψ(ψ1 (Ω2 )) のように表記します。
それでは、ペア数列数のプログラムを追いながら計算アルゴリズムを説明します。このプログラムではペアの 1 つ目を A、2 つ目を B として(A(0), B(0))(A(1), B(0))(A(2), B(2))...(A(F ), B(F ))のようにペア数列を変数に格納しています。

for D=0 to 9 から next のループ（変数 D のループ）内で関数 Pair(C) =(0, 0)(1, 1) . . . (C, C)[C] を計算して、この計算を 10 回繰り返して、最後に print C で結果を表示しています。変数 D のループの中には、変数 Eと変数 F の 2 つのループがあります。最初の E のループは、ペア数列(0, 0)(1, 1)...(C, C) を作成しています。次の F のループで、 F = C として、
関数 Pair(F ) = (0, 0)(1, 1) . . . (F, F )[F ] を計算しています。

F ループの中では、まず最初に C = C ∗ C として、C の値を増やしています。原始数列では f (n) = n2 という関数を定義していたところに相当します。そして、G のループでは原始数列でいうところの「悪い部分」を探して、次の J のループでその「悪い部分」をコピーします。まずは G の
13 巨大数研究 Wiki - ペア数列数 http://ja.googology.wikia.com/wiki/ペア数列数

第7章

208

再帰関数

ループについて見ると、for ループの中に if が 3 重に入っているので複雑です。パラメータの意味について確認すると、F は「一番右のペア」を示すイ
ンデックスで A(F) は「一番右のペアの 1 つ目の数」で B(F) は「一番右のペアの 2 つ目の数」です。if 文が多重になっていて大変なので、if B(F)=0

then に着目して、B(F)=0 が成立するかどうか、つまり「一番右のペアの
2 つ目の数」が 0 であるかどうかによって場合分けをして考えます。
まずは一番右のペアの 2 つ目の数が 0 のときです。これをアルゴリズム

A とします。このときは、G のループはfor G =0 to F
if A ( F )=0 or A (F - G ) < A ( F ) then
I=G:G=F
endif
nextと等価になります。ここで BASIC では H=0 で初期化されるため、A(F)-Hと書いてあったところを A(F) と書き直しました。このときはペアの 1 つ
目の数に関する原始数列のアルゴリズムと同じになります。右端のペアの

1 つ目の数 A(F ) よりも、ペアの 1 つ目の数 A(F − I) が小さいようなペアの中で、一番右側にあるペアを探しています（G で検索していますが、見つかった段階で I = G としているので A(F − I) としました）。A(F − I) から A(F − 1) までが、原始数列の定義で言うところの「悪い部分」に相当するペアで、I 個のペアがあります。ただし、A(F ) = 0 のときには I = 0 として、「悪い部分」はなくします。続いて、J のループでは一番右端を取り除き、悪い部分を C 個コピーします。変数 F はコピーされた後の数列の右端の位置となります。つまりアルゴリズム A は原始数列と同じで、以下のように順序数と対応します。

(0, 0)=

1(0, 0)(0, 0)=

2(0, 0)(0, 0)(0, 0)=

3(0, 0)(1, 0)=ω7.4. 様々な巨大数と関数

209(0, 0)(1, 0)(0, 0)(0, 0)=

ω+2(0, 0)(1, 0)(0, 0)(1, 0)=

ω·2(0, 0)(1, 0)(1, 0)=

ω2(0, 0)(1, 0)(1, 0)(0, 0)(1, 0)=

ω2 + ω

(0, 0)(1, 0)(2, 0)=ωω(0, 0)(1, 0)(2, 0)(3, 0)

=

ωω

ω

続いてアルゴリズム B、つまり一番右端のペアの 2 つ目の数が 0 ではない場合を見ます。G のループはfor G =0 to F
if A ( F )=0 or A (F - G ) < A ( F ) - H thenH = A ( F ) - A (F - G )if B (F - G ) < B ( F ) then I = G : G = F endif
endif
next
と等価になります。この場合も G のループで「悪い部分」を探しますが、今度は A(F − I) < A(F ) − H と B(F − I) < B(F ) の両方が成り立つペア、つまりペアの 1 つ目の数がそれよりも右のいかなるペアの 1 つ目の数よりも小さく、かつペアの 2 つ目の数が右端のペアの 2 つ目の数よりも小
さいようなペアの中で、一番右端のものを検索します（ここで、バージョン 1 ではペアの 1 つ目の数も 2 つ目の数もともに右端のペアよりも小さいようなペアを探します。ここだけが、バージョン 1 と異なるところです）。
そして H = A(F ) − A(F − I) として、1 番目の数の差を変数 H に格納します。

そして J のループで「悪い部分」をコピーしますが、そのときに A(F ) =A(F − I) + H と H を足すことで、1 つコピーが作られるごとにペアの 1 つ目の数が H ずつ大きくなります。

バージョン 1 とバージョン 2 の違いについて、簡単に説明しておきます。
次の数列の「悪い部分」を考えます。

(0, 0)(1, 1)(2, 2)(3, 0)(2, 1)(3, 1)(4, 1)

第7章

210

再帰関数

一番右のペアの 2 つ目が 0 ではないので、アルゴリズム B です。バージョン 1 では、一番右の (4, 1) よりも、1 つ目の数も 2 つ目の数もともに小さい
ような一番右のペアである (3, 0) から先の (3, 0)(2, 1)(3, 1) が「悪い部分」となります。このパターンではバージョン 1 の計算が終了しないということを、2018 年 3 月 25 日に Bubby3 が Googology Wiki のブログで指摘したことを受けて、バシクがペア数列のプログラムを書き換えたものが本章で紹介したバージョン 2 のプログラムです。与えられた条件を満たすペアは(0, 0) であり、(0, 0)(1, 1)(2, 2)(3, 0)(2, 1)(3, 1) が「悪い部分」となります。
この計算アルゴリズムの仕組みを見るためには、ペア数列 P に対して

P [1], P [2], P [3], ... を順番に計算したときの挙動を見るのが分かりやすいです。そこで、まずは P = (0, 0)(1, 1) についてその計算をしてみます。

f (n) = n2 では強すぎて分かりにくいので、f (n) = n としておきます。右端のペアの 2 つ目の数は 1 なので、アルゴリズム B です。(0, 0)(1, 1)[n] は(0, 0) のみが「悪い部分」で、n 個コピーされます。L = 1 なので、コピーされるときに 1 ずつ 1 つ目の数が足されていきます。したがって次のようになります。

(0, 0)(1, 1)[1] =(0, 0)(1, 0)[1](0, 0)(1, 1)[2] =(0, 0)(1, 0)(2, 0)[2](0, 0)(1, 1)[3] =(0, 0)(1, 0)(2, 0)(3, 0)[3]ここで、右辺のペアに対応する順序数を列記すると {ω, ω ω , ω ω , . . .} となω

り、ϵ0 の基本列ができています。そのことから(0, 0)(1, 1)=

ϵ0となります。
次に (0, 0)(1, 1)(1, 0) について考えます。アルゴリズム A なので、1 番目の数だけに着目し、1 よりも小さい数の中で右端は (0, 0) となり、悪い部分(0, 0)(1, 1) がそのままコピーされます。したがって(0, 0)(1, 1)(1, 0)[1] =(0, 0)(1, 1)[1](ϵ0 )7.4. 様々な巨大数と関数

211(0, 0)(1, 1)(1, 0)[2] =(0, 0)(1, 1)(0, 0)(1, 1)[2](ϵ0 · 2)(0, 0)(1, 1)(1, 0)[3] =(0, 0)(1, 1)(0, 0)(1, 1)(0, 0)(1, 1)[3](ϵ0 · 3)となります。右端のカッコ内は対応する順序数です。これは ϵ0 · ω の基本
列なので(0, 0)(1, 1)(1, 0) = ϵ0 · ωとなります。次に、(0, 0)(1, 1)(1, 0)(1, 0)[n] について n = 1, 2, 3 を計算す
ると(0, 0)(1, 1)(1, 0) =(0, 0)(1, 1)(1, 0)(0, 0)(1, 1)(1, 0) =(0, 0)(1, 1)(1, 0)(0, 0)(1, 1)(1, 0)(0, 0)(1, 1)(1, 0)=

ϵ0 · ω
ϵ0 · ω · 2
ϵ0 · ω · 3

したがって (0, 0)(1, 1)(1, 0)(1, 0) = ϵ0 · ω 2 となります。このように数列の末尾に (1, 0) を加える事で、順序数は ω 倍されます。

数列の末尾に (1, 0)(2, 0) を加えると、悪い部分の (1, 0) が 1 つずつ追加される基本列ができるため、これは順序数を ω ω 倍することに相当します。
したがって(0, 0)(1, 1)(1, 0)(2, 0) = ϵ0 · ω ωとなります。数列の末尾に (1, 0)(2, 0)(3, 0) を加えると、順序数を ω ω 倍
ωすることになり、(1, 0)(2, 0)(3, 0)(4, 0) を加えると順序数を ω ω

ωω

倍する

ことになり、(1, 0)(2, 1) を加えると順序数を ϵ0 倍することになります。
したがって (0, 0)(1, 1)(1, 0)(2, 1) = ϵ20 です。ここに (2, 0) をくっつけて(0, 0)(1, 1)(1, 0)(2, 1)(2, 0) とすると、今度は (1, 0)(2, 1) が「悪い部分」となってコピーされて ϵ0 倍を繰り返すことで、(0, 0)(1, 1)(1, 0)(2, 1)(2, 0) = ϵω0となります。

(0, 0)(1, 1)(1, 0)(2, 1)(2, 0) の右端にさらにペアを追加することを考えます。(1, 0)(2, 1) の追加は ϵ0 倍で、(1, 0)(2, 1)(2, 0) の追加は ϵω
0 倍、(2, 0) を追加すると (1, 0)(2, 1)(2, 0) が「悪い部分」としてコピーされて ϵω
0 倍が繰り返され、ϵω 倍となります。(3, 0) を加えると、今度は (2, 0) がコピーさ
2

第7章

212

再帰関数

れますが、(2, 0) がコピーされるごとに「悪い部分」も伸びていくことから、(3, 0) は ϵω 倍に相当します。すなわち
ω(0, 0)(1, 1)(1, 0)(2, 1)(2, 0)(3, 0) = ϵω0ωです。ここから先は詳細に記述していくときりがありませんが、(0, 0)(1, 1)(1, 0)(2, 1)(2, 0)(3, 0)(4, 0) = ϵω0ωωのように ω の指数が増えていきます。(4, 0) の段階の複雑性に到達するまでに、(1, 0) の複雑性、(2, 0) の複雑性、(3, 0) の複雑性といったこれまでの複雑性がすべて内包されているためです。そして(0, 0)(1, 1)(1, 0)(2, 1)(2, 0)(3, 1) = ϵϵ00となります。
そして (0, 0)(1, 1)(1, 1)[n] を n = 1, 2, 3, 4 について計算すると(0, 0)(1, 1)=

ϵ0(0, 0)(1, 1)(1, 0)(2, 1)=

ϵ20(0, 0)(1, 1)(1, 0)(2, 1)(2, 0)(3, 1)

=

ϵϵ00

(0, 0)(1, 1)(1, 0)(2, 1)(2, 0)(3, 1)(3, 0)(4, 1)

=

ϵ00

ϵ

ϵ 0

となり、このことから (0, 0)(1, 1)(1, 1) = ϵ1 = ψ(1) となります。
バシクは同様に計算を進めて、以下のような結果を示しました。ここでマドールの ψ 関数を使っています。

(0, 0)(1, 1)(2, 0) =ϵω = ψ(ω)(0, 0)(1, 1)(2, 0)(2, 0) =ϵω2 = ψ(ω 2 )(0, 0)(1, 1)(2, 0)(3, 0) =ϵωω = ψ(ω ω )(0, 0)(1, 1)(2, 0)(3, 1) =ϵϵ0 = ψ(ψ(0))(0, 0)(1, 1)(2, 0)(3, 1)(4, 0)(5, 1) =ϵϵϵ0 = ψ(ψ(ψ(0)))

7.4. 様々な巨大数と関数

213(0, 0)(1, 1)(2, 1) =

ζ0 = φ(2, 0) = ψ(Ω)
Γ0 = φ(1, 0, 0) = ψ(ΩΩ )(0, 0)(1, 1)(2, 1)(3, 1) =フェファーマン・シュッテの順序数に到達しました。続けます。
ω(0, 0)(1, 1)(2, 1)(3, 1)(4, 0)=

ψ(ΩΩ )(0, 0)(1, 1)(2, 1)(3, 1)(4, 1)=

ψ(ΩΩ )(0, 0)(1, 1)(2, 1)(3, 1)(4, 1)(4, 0)

=

ψ(ΩΩ

Ω

Ωω

)

Ω2

(0, 0)(1, 1)(2, 1)(3, 1)(4, 1)(4, 1)=

ψ(ΩΩ )(0, 0)(1, 1)(2, 1)(3, 1)(4, 1)(5, 0)

=

ψ(ΩΩ

Ωω
ΩΩ

)

(0, 0)(1, 1)(2, 1)(3, 1)(4, 1)(5, 1)

=

ψ(ΩΩ

(0, 0)(1, 1)(2, 2)=ψ(ϵΩ+1 ) = ψ(ψ1 (0)))(0, 0)(1, 1)(2, 2) で、バッハマン・ハワード順序数になりました。
ここで、(0, 0)(1, 1)(2, 2)[1] を f (n) = n として計算したときのペア数列と対応する順序数の変化について、バシクによる計算を示します。式がどんどん横に長くなるので、途中からペア数列を行列表記にします。行列表
記では、ペア数列を(a11 , a21 )(a12 , a22 )...(a1k , a2k ) =

5

a11

a12

... a1ka21

a22... a2kのように書き換えます。

(0, 0)(1, 1)(2, 2) =ψ(ψ1 (0))(0, 0)(1, 1)(2, 1) =ψ(Ω)(0, 0)(1, 1)(2, 0)(3, 1) =ψ(ψ(0))(0, 0)(1, 1)(2, 0)(3, 0) =ψ(ω ω )

(0, 0)(1, 1)(2, 0)(2, 0) =ψ(ω 2 )

(0, 0)(1, 1)(2, 0)(1, 1)(2, 0) =ψ(ω · 2)(0, 0)(1, 1)(2, 0)(1, 1)(1, 1) =ψ(ω + 2)

6

第7章

214

5

5

0

1

2 1 1

2

3 2

0

1

0 1 0

1

0 1

0

1 2

1

1 2 3

2

3 4

0

1 0

1

0 1 0

0

1 0

6
6

再帰関数

=

ψ(ω + 1) · ψ(ω + 1)=

ψ(ω + 1) · ψ(ω) · ψ(ω)(0, 0)(1, 1)(2, 2) の右に (3, 3) を加えるとどうなるでしょうか。右に加えるペアを段階的に増やすと(0, 0)(1, 1)(2, 2)(0, 0) =ψ(ψ1 (0)) + 1(0, 0)(1, 1)(2, 2)(1, 0) =ψ(ψ1 (0))ω

(0, 0)(1, 1)(2, 2)(2, 0) =ψ(ψ1 (0)ω)(0, 0)(1, 1)(2, 2)(3, 0) =ψ(ψ1 (ω))(0, 0)(1, 1)(2, 2)(3, 0)(4, 0) =ψ(ψ1 (ω ω ))(0, 0)(1, 1)(2, 2)(3, 0)(4, 1) =ψ(ψ1 (ψ(0))) = ψ(ψ1 (ϵ0 ))(0, 0)(1, 1)(2, 2)(3, 1) =ψ(ψ1 (Ω))(0, 0)(1, 1)(2, 2)(3, 2)=

ψ(ψ1 (Ω2 ))(0, 0)(1, 1)(2, 2)(3, 3)=

ψ(ψ1 (ψ2 (0)))のように順次複雑性が上がり、ψ2 関数を使うことになります。さらに (4, 4)を加えると(0, 0)(1, 1)(2, 2)(3, 3)(4, 4) = ψ(ψ1 (ψ2 (ψ3 (0))))と ψ3 が使われ、同様に(0, 0)(1, 1)(2, 2)(3, 3)...(9, 9) = ψ(ψ1 (ψ2 (ψ3 (ψ4 (ψ5 (ψ6 (ψ7 (ψ8 (0)))))))))のようになります。したがって Pair(n) = (0, 0)(1, 1) . . . (n, n)[n] とするとPair(n) ≈ F [ψ0 (Ωω )](n)となります。このことから、ペア数列数は F [ψ0 (Ωω ) + 1](10) 程度の大きさとなります。

7.4. 様々な巨大数と関数

7.4.3

215

サブキュービックグラフ数

サブキュービックグラフ数14 (subcubic graph number) は、逆数学の提唱者であるフリードマン (Harvey Friedman) が考案した、グラフ理論を使った巨大数です。

グラフ理論 (graph theory) は、頂点（ノード）と辺（エッジ）で構成されたグラフに関する数学の理論です。グラフ理論では、頂点と辺がどのよ
うにつながっているかだけが問題とされ、頂点の位置（空間座標）や辺の長さといった情報は関知しません。グラフがもつ様々な性質を探求するのがグラフ理論です。グラフ理論で扱うグラフには様々な種類がありますが、ここで考えるサブキュービックグラフとは、各頂点が最大 3 個の辺につながっているグラフです。ここでマルチグラフ（両端の頂点が等しい 2 つ以上の辺を持つグラフ）や、接続されていない部分があるグラフ、辺の両端が同じ頂点となる「ループ」を含むグラフもサブキュービックグラフであるとします。
整数 k に対して、サブキュービックグラフの列 G1 , G2 , .., Gn を次の条件を満たすように定めます。

1. 全てのグラフ Gi が i + k 個以下の頂点を持つ。
2. すべての i < j に対して、Gi は Gj に位相同型的埋め込み可能 (home-

omorphically embeddable) ではない（Gi は Gj のグラフマイナーではない）。すなわち、Gj から辺を取り除く、孤立した点を取り除く、辺を縮める（辺を取り除くと同時に、辺の両端にある頂点をくっつけて 1 つの頂点とする）、という操作を繰り返すことで Gi とすることができない。

ロバートソン・シーモアの定理15 (Robertson-Seymour therem) またの名をグラフマイナー定理 (graph minor theorem) によれば、サブキュー

ビックグラフは位相同型的埋め込み可能性において整列擬順序 (well-quasi-

ordering) です。 無限に降下する列 (Gi+1 が常に Gi のグラフマイナー) を
14 http://ja.googology.wikia.com/wiki/サブキュービックグラフ数

15 http://mathworld.wolfram.com/Robertson-SeymourTheorem.html

第7章

216

再帰関数

作ることも、無限に比較不可能な列 (antichain) を作ることも、できないということです。そのことから、上記の条件を満たす無限長の G1 , G2 , ... の列を作ることはできないということが分かります（もしできたとすれば、Giと Gi+1 が比較不可能なときに Gi+1 を除く操作を有限回繰り返すことで無限降下列ができてしまう）。したがって、いかなる非負整数 k に対しても、
上記の条件を満たす最長の列が存在します。その最長の列の長さを SCG(k)とします。また、有限のサブキュービックグラフが整列擬順序であることは Π11 -CA0 では証明不可能であることが示されています。
フリードマンは、「あるチューリングマシン (p.239) が停止するということが、Π11 -CA0 理論で 22000 個以内の記号で証明可能であれば、そのようないかなるチューリングマシンの停止するまでのステップ数よりも、SCG(13)は大きい」ことを証明しました。この SCG(13) がサブキュービックグラフ
数です。SCG(k) は Π11 -CA0 で定義されるいかなる再帰関数よりも急増加
し、Π11 -CA+BI で証明可能なことから、

F [ψ0 (Ωω )](k) ≤ SCG(k) < F [ψ0 (εΩω +1 )](k)です。
ここで、ψ0 (Ωω ) は緩増加関数が急増加関数に（自然な基本列を選んだ場

合に）追いつく順序数です。

7.4.4

ブーフホルツのヒドラ

ブーフホルツのヒドラ16 17 (Buchholz hydra) は、ブーフホルツ (p.187)

がカービーとパリスのヒドラゲーム (p.156) を発展させたものです。ここでは、カービーとパリスのヒドラは「カービーのヒドラ」として、ブーフ
ホルツのヒドラを「ヒドラ」とします。ヒドラは次のような性質を持つ ω
までのラベルの付いた木（ツリー）A です。

1. ルート（木の根）には + というラベルがついている。
16 http://ja.googology.wikia.com/wiki/ブーフホルツのヒドラ

17 Buchholz, W. (1987) An independence result for (Π1 -CA)+BI. Annals of Pure
1and Applied Logic 33 131-155. doi:10.1016/0168-0072(87)90078-9

7.4. 様々な巨大数と関数

217

2. ルート以外のノードには、すべて順序数 υ ≤ ω のラベルがついている。

3. ルートの 1 つ上のノードには、すべて 0 のラベルがついている。
カービーのヒドラにおけるヘラクレスとヒドラの戦いになぞらえて、同じ用語を使います。ヘラクレスが、あるヒドラ A の首（すなわちトップノード）δ を切り落とすと、ヒドラは任意の自然数 n を選んで、自分自身を新しい形のヒドラ A(δ, n) に変形します。ここで τ を A における δ からセグ
メントを 1 つ降りたノードとして、A− を δ が切り落とされたときに A に残る部分であるとします。A(δ, n) は、δ のラベルによって次の 3 パターンに分かれます。

1. δ のラベルが 0 のとき。カービーのヒドラと同じようにする。すなわ
ち τ がルートであれば、A(δ, n) = A− とする。そうでなければ、図7.2 のように A− における τ から上に伸びている部分木の構造を A−τとしたときに、A− において τ からセグメントを 1 つ降りたノードに、n 個の A−τ をコピーして増やしたものが A(δ, n) である。

2. δ のラベルが u + 1 のとき。δ の下で、υ ≤ u のラベルを持つ δ から最も近いノードを ϵ とする。ルートの 1 つ上のノードはすべてラベルが 0 なので、ϵ は必ず存在する。図 7.3 のように、ϵ から上の部分木

Aϵ について、ϵ のラベルを u に変えて、δ のラベルを 0 に変えたものを B として、A の δ を B で取り換えたものを A(δ, n) とする。ここで A(δ, n) は n に依存しない。

3. δ のラベルが ω のとき。単純に δ を n + 1 でラベルし直す。
ブーフホルツは以下の 3 つの定理を証明しました。
定理 1 ヘラクレスは常に一番右の頭を切り落とすことで、有限回数でヒドラに勝つことができる。すなわち、いかなるヒドラ A と自然数の列 n0 , n1 , ...

+ となるような k が存在する。こに対しても、必ず A(n0 )(n1 )...(nk ) = ⃝+ はルートのみのヒドラである。
こで ⃝of A@, n) depends on the label of o:Case 1: label (a) =O. I f z is the root of A, we set A(a, n):=A-.
Otherwise
A(a, n) results from A- by sprouting n replicas of A; from the node immediately
第 7by
章 r.再帰関数
below 218
r. Here A, denotes the subtree of A- determined

+

. . .

A(o,n)

Case 2: label (a) = u + 1. Let E be the first node below 0 with label u s u. Let
図 7.2:
0 の時のヒドラの変形。
(1987) から引用。
B be thattreeδ のラベルがwhich resultsfrom the subtree Buchholz
A, by changing
the label of E to u
and the label of u to 0 . A(u, n) is obtained from A by replacing u by B. In thiscase A(u,does notdepend on n. そのヒドラと任意の自然数列 n0 , n1 , ...
定理 n)
2 ヒドラ
A の形を定めたときに、+ となるようなに対して A(n⃝k が存在するということは、
1 )...(nk ) =Science
01684072/87/$3.50
0 0 )(n1987,
Elsevier
Publishers B.V.
(North Holland)Π11 -CA+BI で証明可能である。

定理 3 図 7.4 のように、+, 0, ω, ω, ..., ω とラベルされた 1 つの枝を持って% &' (n 個のω+といるヒドラを An とする。すべての n に対して、An (1)(2)(3)...(k) = ⃝なる k が必ず存在するということは、Π11 -CA+BI では証明不可能である。
それでは、このヒドラを使ってブーフホルツのヒドラ関数 (Buchholz hydra

function) BH(n) を定義します。An を定理 3 と同様に定義します。BH(n)+ となる最小の k とします。このときに以下が同を An (1)(2)(3)...(k) = ⃝時に成立します。

1. すべての自然数 n に対して、n の値を固定すれば An の形が定まる
ため、定理 1 と定理 2 により k が存在する。すなわち関数 BH(n) は自然数から自然数への全域関数である。

2. 定理 3 により、関数 BH(n) が自然数から自然数への全域関数である
ことは Π11 -CA+BI では証明不可能である。
この関数の増加率は F [ψ0 (εΩω +1 )](n) に匹敵します。つまり Π11 -CA+BI の強さをあらわす竹内・フェファーマン・ブーフホルツ順序数の強さとなります。

7.4. 様々な巨大数と関数
132

219

W. Buchholz

A1a.n)

Example (u = 3, v = 1):

Case 3: label (a) = o. A(a, n) is obtained from A simply by changing the la図of7.3:
Buchholz (1987) から引用。
CI:δoのラベルがis replacedu+1
byの時のヒドラの変形。
n + 1.

1
Notation.
If CTis the rightmost head of A (as inΠthepictures above) we write A
また、ω ラベルを除いたときにはペア数列と同じ
1 -CA0 の強さ、すな
insteadn). In the following we2consider
only the operation A -A(n).
わちF [ψ0of(ΩωA(a,](n) になります。原始数列につ目の自然数を付与したペア$ we denote the hydra which consists only of one node, namely its root.
数列と、自然数のラベルがついたヒドラは、厳密な計算規則は一致しませんが、各ノードに自然数をラベルすることで証明論的には同等の強め方を

The main results of the present paper are:

していると解釈することができそうです。

Theorem I. By always chopping of the rightmost head, Hercules is able toevery hydra
7.4.5
BANin a finite number of steps, i.e., for each hydra A and any sequen(ni)ieN of natural numbers there exists k E II4such that A(nO)(nI) . * (nk) = 09.
バードは線形表記 (p.108) から多次元配列表記、超次元配列表記、ネスl

ト配列表記
Theorem (p.169)
II. Forへと発展させて、
every
fixedϵ0 のレベルに到達しました。それか
hydra
A
the
statement
らさらにそれよりも大きい関数へと発展させて、順序数で評価しています。
A(n,-,)(nI) - - - (nk) = Cf3is provable in (lI$CA) + BI.
一連の表記はバードの配列表記 (BAN) です。バッハマン・ハワード順序
Theorem III. LetF [ψ(ϵΩ+1 )](n) の大きさの H 関数から、さらに強い S
数レベル、すなわち

0.
.
.

n nodes with label w

V(ni)i,N

A(n,-,)(nI) - - - (nk) = Cf3is provable in (lI$CA)
220 Theorem III.

Let

第7章

+ BI.

再帰関数

0.
A”

:=

.
.

n nodes with label w

Then 図thelI$sentence Vn 3kA”(I)(2) - . - (k) = CII is not
7.4: ヒドラ An 。Buchholz (1987) から引用。

BI.

関数、そしてもっと強い U 関数へと強化しました。U 関数は、ブーフホルツの ψ 関数で F [ψ0 (Ωω )](n) レベルです。U 関数で定義される数が新しい

バード数18 (Bird’s number) です。さらに、S 関数は 2014 年に強化され、F [ψ0 ΩΩ ](n) のレベルに到達したようです。

7.4.6

BEAF

ジョナサン・バウアーズが開発した BEAF については、これまでに配列
表記 (p.108) について解説し、さらに BEAF の基本的な計算ルールと、配列次元演算子を使ったテトレーション配列までの巨大数について解説しま
した (p.170)。BEAF の特徴は、配列次元演算子で「テトレーション配列」「ペンテーション配列」のような次元そのものを配列にしてしまった、とい
うところにあります。たとえば、バウアーズが名付けたペンテーション配列を使う最小の巨大数トリアクルス (triakulus) は {3, 3, 3}&3 と表記されますが、ここで次元をあらわす {3, 3, 3} を配列次元演算子を使って 3&3 と書くことで、配列次元演算子を重ねて 3&3&3 と書くこともできます。

次に、配列表記の定義をレギオン配列 (legion array) によってさらに抽象化します。n + 1 番目のレギオン配列はレギオン記号 (legion mark) / に
よって {a, b, c, · · · /n + 1} と書かれ、これを展開すると n 番目のレギオン

配列では、配列の区切りが配列次元演算子として展開されます。たとえば、
18 巨大数研究 Wiki - バード数 http://ja.googology.wikia.com/wiki/バード数

7.4. 様々な巨大数と関数

221{3, 3/2} = 3&3&3 のように展開されます。これによって、配列次元演算子を使うことによる強さが、レギオンの段階が高まるごとに入っていきます。
ここから先は、詳しくは BEAF の説明 19 を参照していただくこととして簡単に書きます。レギオン空間 (legion space) に対する配列次元演算子であるレギオン配列次元演算子 (“legion array of” symbol) && を定義する
ことで、2 重レギオン配列、3 重レギオン配列とします。これをさらに拡張するために、レギオン記号へのレギオン記号とも言えるレギオン記号配列(legiattic array) を定義し、そこからさらにレギオン記号配列次元演算子 @を定義します。
次にルギオン空間 (lugion space) を定義して、ルギオン記号、ルギオン
記号配列、ルギオン記号配列次元演算子、とレギオンと同じように定義をします。同様にラギオン空間、リギオン空間と高めていきます。ここでレギオン空間を L1、ルギオン空間を L2、ラギオン空間を L3、リギオン空間
を L4 のように書き、同様に LX 空間を定義できます。さらに L そのもの
が配列構造を取ります。
レギオン記号配列を使ったビッグホス (big hoss) という数は、急増加関数で ψ(ψI (0))（オメガ収束点を Deedlit11 の順序数崩壊関数で崩壊させた順序数）のレベルであるという近似が Googology Wiki に以前は掲載されていましたが、その近似は 2015 年 9 月に消されました。この後に紹介する強配列表記を考案した Googology Wiki ユーザーの Hyp cos による解析によれば20 、BEAF はテトレーション配列よりも上の定義がうまくできていないようです。順序数で ω ↑↑ (ω + 1) = ϵ0 よりも ω ↑↑ ω + 1 = ϵ0 + 1 の方が強いように、Xˆˆ(X+1) よりも XˆˆX+1 の方が強くなるため、Xˆ(Xˆˆn)という構造は XˆX+1 という「あまり強くない構造」に還元されてしまうためだ、としています。

BEAF によって名付けられた最大の数は、BEAF で{{L100, 10}10,10 &L, 10}10,10
19 巨大数研究 Wiki - BEAF http://ja.googology.wikia.com/wiki/BEAF
20 http://googology.wikia.com/wiki/User blog:Hyp cos/Idea for legion

第7章

222

再帰関数

と書かれる数でミーミーミーロッカプーワ・ウンパ21 (meameamealokka-

poowa oompa) という名前です。

7.4.7

バシク行列システム

バシクは原始数列 (p.160) とペア数列 (p.205) を発展させて、トリオ数
列、そしてバシク行列システム22 (Bashicu matrix system) の BASIC プロ
グラムを作成しました。バシク行列は、たとえば
56a11 a12 a13

a21

a22

a23

のような非負整数を要素に持つ行列で、これを (a11 , a21 )(a12 , a22 )(a13 , a23 )のように列ベクトルの転置行列を並べて表記したものが、バシク行列の数
列表記です。バシク行列 BM は、自然数 n から自然数 BM[n] への関数として働き、(0, 0)(1, 1)(2, 2)(3, 3)(3, 2)[n] のように書きます。
関数 BM[n] が順序数を α のハーディ階層で近似できるとき、バシク行
列 BM が順序数 α をあらわしているものとします。つまり次のように表記できます。
5
0 1 2

0 1

3

3

2 3

2

6

= (0, 0)(1, 1)(2, 2)(3, 3)(3, 2) = ψ(ψ1 (Ω2 ))バシクが作成したプログラムは実行を目的としたものではなかったので、計算過程を表示するためのプログラムを本書の著者が作成して、バシク行
列計算機23 を公開しました。そのプログラムはバシクによって動作が検証されました。したがって、バシク行列の定義はバシク行列計算機のソース
コード24 に書かれていることとなります。
バシク行列計算機には Web インターフェイスがあります。プログラムには 4 つの n increment の設定があります。バシク行列のオリジナルの定義
は「n = n ∗ n」のオプションで、その他のオプションはバリエーションで
21 http://ja.googology.wikia.com/wiki/ミーミーミーロッカプーワ・ウンパ
22 http://ja.googology.wikia.com/wiki/バシク行列システム
23 バシク行列計算機 http://gyafun.jp/ln/basmat.cgi

24 バシク行列計算機のダウンロード版 https://kyodaisuu.github.io/basmat/

7.4. 様々な巨大数と関数

223

す。Simulate Hardy function のオプションを使って計算すると、その計算は ϵ0 未満の順序数についてワイナー階層のハーディ関数と完全に一致します。

Googology Wiki のトークページで 2016 年 4 月 28 日に、Hyp cos が計算が終了しない 3 行行列の例があると指摘しました。そこで、バシクは巨
大数研究 Wiki の「BASIC 言語による巨大数のまとめ」というブログ記事を更新して、バシク行列バージョン 1 (BM1) からバシク行列バージョン 2(BM2) へとアップデートしました。BM1 は 2 行行列でも計算が終了しない場合があることがわかりました。2018 年に入ると、多くの人がバシク行列の解析をして、いくつかの別のバージョンが作成されました25 。

Bubby3 がバージョン 2 の計算が停止しないような 4 行行列を発見して、その指摘を元に 2018 年 9 月 1 日にバシクがバシク行列バージョン 4 (BM4)を定義しました（バージョン 3 はその前にすでに停止しない例が見つけられています）。バシク行列計算機で BM4 の計算ができます。ここで、BM4は 2018 年 6 月に koteitan が定義した BM2.3 と同じアルゴリズムである
ことがわかり、koteitan は「上行枝無視方式」と名付けています26 。本書で紹介したペア数列のプログラムは BM2 を元に作られましたが BM4 でもペア数列のアルゴリズムは同じになります。
バシク行列はあまりにも強力で、解析が困難です。問題は、システムが強力すぎてバシク行列の計算が終了する条件がはっきりとしていないこと
⎛
⎞
0 1
⎜
⎟
⎜0 1 ⎟⎜です。BM4 では n 行行列 ⎜ . . ⎟⎟ の計算が終了するものと期待されてい⎝ .. .. ⎠0 1
ますが、まだその証明がされていません。そしてその証明が与えられたときに、バシク行列の定義が完成したということになります。計算が終了するのであれば、その増加速度はとても大きいと考えられます。

25 http://ja.googology.wikia.com/wiki/ユーザー:Kyodaisuu/バシク行列のバージョン

26 http://ja.googology.wikia.com/wiki/ユーザーブログ:Koteitan/バシク行列の亜種ルー
ルの分類

第7章

224

7.4.8

再帰関数

強配列表記

Googology Wiki ユーザーの Hyp cos は、2013 年に R 関数27 (R function)を考案し、改良を続けていましたが、2015 年に R 関数は複雑になりすぎて拡張が難しくなったとして、新しく強配列表記2829 (strong array notation)
を発表しました。

1. 線形配列表記 (LAN; linear array notation) は、s(a, b, c, …, z) のよ
うな表記です。「強配列」であることを示すために s をつけます。多変数アッカーマン関数と似ていますが冪乗を基本としていて、急増加関数の近似は f (n) = s(n, n, …, n, n) の増加率が ω ω レベル、すなわ%&'(
ち f (n) ≈ F [ω ω ](n) です。

n2. 拡張配列表記 (exAN; extended array notation) は、セパレーター {}を導入します。BEAF のテトレーション配列や BAN のネスト配列表
記と似ていて、f (n) = s(n, n{1{1…{1{1, 2}2}…2}2}2) が ϵ0 レベルの増加率です。

3. 膨張配列表記 (EAN; expanding array notation) は、ドット . をセパ
レーターとします。{1. }（右側のセパレーターの左上に上付き文字でドットがついている）は、それ全体がセパレーターと解釈され、それをドットと略記しているものとします。このようなセパレーターの種類そのものが、exAN ルールによって膨張して、f (n) = {n, n{1.n }2}が ϵω レベルとなります。

次にグレイヴ・アクセント ‘ (ASCII の文字コードは 96) を導入して、{1‘1} がコンマ、{1‘2} がドット、というようにセパレーターの格が上がることを表記できて、さらに ‘の記号は {1‘ } を略記したものであると考えます。 s(a, b{1{1‘1‘3‘ }3}2) といった表記は、{1‘1‘3‘ } というセパレーターが入った {1{1‘1‘3‘ }3} という表記そのものがセパレーターになっていることになります。計算の順番に関するルールを緻密に定めます。
27 http://ja.googology.wikia.com/wiki/R 関数シリーズ
28 http://ja.googology.wikia.com/wiki/強配列表記

29 Steps Toward Infinity! https://stepstowardinfinity.wordpress.com/array/

7.4. 様々な巨大数と関数

225

f (n) = s(n, n{1{1{1…{1{1, 2‘}2‘}…2‘}2‘}2}2) がバッハマン・ハワー
ド順序数 ψ0 (ϵΩ+1 ) レベルになります。

4. 多重膨張配列表記 (mEAN; multiple expanding array notation) は、
グレイヴ・アクセントを連続して並べて書いて n 重グレイヴ・アク
セントにします。Hyp cos の定義と計算によれば、n 重グレイヴ・ア
クセントで f (n) = s(n, n{1 “…‘ 2}2) という関数は、Π11 -CA0 理論の%&'(ψ0 (Ωω ) レベルになります。

n重

5. 第 1 配列落下表記 (pDAN; primary dropping array notation) は、グ
レイヴ・アクセントがなくなりすべてコンマ , と 2 重コンマ ,, に置
き換わります。セパレーターの「レベル」という概念を導入して、レベルを比較しながら計算ルールを定めます。

m − 1 重グレイヴ・アクセントを 持つ {A“…‘} を {A, , m} と書くこと
で、mEAN の限界である ψ0 (Ωω ) の再帰レベルは {1{1, , 1, 2}2} と書くことができてしまいます。{1, , 2, 2} で竹内・フェファーマン・ブー
フホルツ順序数の再帰レベルになり、{1, , 1{1, , 1, , 2}2} で Π11 -TR0

理論のレベル、そこから先はタラノフスキーの C 表記で解析をしています。

BEAF や BAN を超えていますが、バシク行列は比較不能です。さらにそこから、2 重コンマは {1,, } の略記（右側のセパレータの左上にコンマが 2 つついている）で、{2,, } は exAN と同様に計算される、といったように高めていきます。

6. 第 2 配列落下表記 (sDAN; secondary dropping array notation) は、
グレイヴ・アクセントと 2 重コンマを組み合わせた ‘,, という記号は、

2 重コンマ括弧 {,,} の中で、下のレベルにおける ‘ と同じように働く、といったような感じで高めていきす。そして、3 重コンマ ,,, を導入します。

7. 配列落下表記 (DAN; dropping array notation) は、pDAN, sDAN の定義を拡張して m 重コンマを導入します。これが R 関数と同程度
です。

第7章

226

再帰関数

強配列表記のホームページでは、R 関数よりもさらに強い表記とするために、当初はここから先にさらに NDAN, WDEN, mWDEN, WDmEN,

pDDN という 5 つの表記が定義されていました。ところが、NDAN 以降
はうまくいかなかったとして 2017 年末に Hyp cos によって取り下げられ、DAN までの 7 つの表記となりました。

7.4.9

ローダー数

ネットニュースの数学グループ (sci.math) と C 言語グループ (comp.lang.c)
で、David Meows が 2001 年に巨大数ベイクオフ大会30 (Bignum Bakeoﬀ

contest) を開催しました。この大会は 512 文字以内の大会ルールに定められた方法による C 言語のプログラムで、最大の数を出力するプログラムを作った人が優勝する、というものです。おおまかには以下のようなルール
です。

1. main() が返す数が、そのプログラムが出力する数である。有限時間
内に main() が終了することが証明できなければ負けである。最大の数を返すプログラムが優勝で、大小の判定できない複数の優勝候補プ
ログラムがある場合にはすべてが優勝となる。

2. ホワイトスペース（空白、タブ文字、復帰、改行、改ページ）は、文字数にカウントしない。

3. C90 すなわち ANSI/ISO 9899-1990 を使う。ただし、メモリは無限にあり、スタックサイズの制限はなく、無限長整数 int を使え、sizeof(int)== 1 である。char, singed char, unsigned char, short int, unsigned
short int, unsigned int, long int, unsigned long int も同様で、他の型は使えない。

4. argc, argv, 環境変数を参照できない。
5. ((int)b) < 0 のときに、/ b や % b の演算はできない。

30 http://djm.cc/dmoews.html

7.4. 様々な巨大数と関数

227

6. 標準ライブラリは、size t, ptrdiﬀ t, NULL, oﬀsetof(), jmp buf, setjmp(),
longjmp(), div t, ldiv t, calloc(), free(), malloc(), realloc(), bsearch(),qsort(), abs(), div(), labs(), ldiv(), memcpy(), memmove(), strcpy(),strncpy(), strcat(), strncat(), memcmp(), strcmp(), strncmp(), memchr(), strchr(), strcspn(), strpbrk(), strrchr(), strspn(), strstr(), strtok(), memset(), strlen() のみを使える。
この巨大数ベイクオフ大会で優勝したプログラムが、ラルフ・ローダー(Ralph Loader) が作成した loader.c というプログラムで、このプログラム
によって出力される数がローダー数31 (Loader’s number) です。ローダー
は、オックスフォード大学で数学の Ph.D. を取得してから、数年間計算科学の研究者としてラムダ計算等の研究をしていました。2000 年以降はソフ
トウェアエンジニアとして働いています32 。
ローダーのプログラムは、フランスのコンピュータ科学者で、現在はス
ウェーデンのヨーテボリ大学教授のシェリー・コカン (Thierry Coquand) が開発した CoC (calculus of constructions) という型付きラムダ計算 (typed

lambda calculus) を対角化します。ここでラムダ計算 (lambda calculus)とは、無名関数の抽象表現にラムダ (λ) という記号を用いる形式体系です。
たとえば、ある数に 3 を加える関数 f は、通常は f (x) = x + 3 と書きます
が、ラムダ計算では λx.x + 3 という式で表現され、関数の名前である f に相当するものがなくなるので無名関数と言います。ラムダ計算では関数の引数は常に 1 つで、2 つ以上の引数を持つ関数はカリー化 (currying) という操作によって必ず 1 つの引数を持つ関数に書き換えることができることが知られています。
ラムダ計算に型を導入した型付きラムダ計算では、すべての項 (term) が型 (type) を持っています。型付きラムダ計算で実行できる通常の関数は、項から項への変換規則なので、「項に依存する項」であると考えます。これに「型に依存する項」「型に依存する型」「項に依存する型」を加えたものがCoC です。型付きラムダ理論を、「型に依存する項」「型に依存する型」「項に依存する型」それぞれの有無によって 8 通りに分類して立方体の頂点に31 巨大数研究 Wiki - ローダー数 http://ja.googology.wikia.com/wiki/ローダー数
32 https://www.linkedin.com/in/ralph-loader-55934025

228

第7章

再帰関数

配したラムダ・キューブ (λ-cube) が描かれることがありますが、CoC は
そのすべてを持っているため、ラムダ・キューブに配される型付きラムダ理論の中で、最も表現力が豊かな言語です。

CoC はとても表現力が豊かな言語ですが、どのように書き換えても必ず正規形にたどりついて計算が終了する、つまり強正規化 (strong normalization)
するという性質があります。
ちなみに CoC を元にコカンらが作成した証明支援システム Coq は、長い間数学者が証明しようとしてできなかった四色定理 (four color theorem)（証明される前は「四色問題」と言われていた）を証明するために使われた33ことで有名になりました。
ローダーのプログラムでは、CoC の文を 2 進数を使って自然数に対応させる規則を作っています。そして D(n) という関数では、n 以下のすべての自然数を CoC の文として解釈して、CoC による推論と正規化をすることにより得られる数を計算し、得られた結果をすべて足します。つまり、CoCの文法を自然数に変換したときに、n 以下となるようなすべての正規化された CoC 式によって得られた数を合計したものが D(n) です。CoC は強正規化するため、この D(n) が計算可能です。
ローダー数は D5 (99) です。D(99) は 2 ↑↑ 30419 よりも大きいことから、D2 (99) 以降の計算で D(n) の n に入る数がとても大きくなり、ロー
ダー数の強さは本質的に CoC の証明論的強さに依存することとなります。

loader.c は文字数を短くするための処理がされているために読みにくいプ
ログラムですが、ローダーのホームページ34 には、その元となる読みやすい
プログラムがコメント付きで公開されています。そこに書かれているローダーの解説によれば、高階の論理は CoC に翻訳できる（その逆も可能）ので、CoC はすべての「普通の」数学（基本的な解析学、組み合わせ論、等）を形式化するために十分だとしています。そしておおざっぱに考えると、閉じた Σ01 算術の文 ∃(x)φ(x) を N 文字以内の高階算術の文で証明できると33 Gonthier,G.
(2008)
Formalproof
The
NoticesoftheAmericanMathematicalSociety
http://www.ams.org/notices/200811/tx081101382p.pdf
34 http://homepages.ihug.co.nz/˜suckfish/

four-color
theorem.
55(11):1382–1393.

7.4. 様々な巨大数と関数

229

すると、D(2N ) 関数は φ(x) が成立する最小の x よりも大きい数を返す（証明の CoC への翻訳によって長さ N が変わるので、あくまでもおおざっぱな近似）、とローダーは解説しています。

7.4.10超越整数と巨大基数による拡張

逆数学の提唱者であるフリードマンは、ある理論体系の証明論的強さに依拠する関数と巨大数を色々と作りました。たとえば、グラフ理論を使った TREE 数列は、ACA0 +Π12 -BI 理論のいかなる関数も支配して、少なく
とも F [ϑ(Ωω ω)](n) 以上です。そしてそれよりも強いサブキュービックグ

ラフ数については、すでに説明しました。ここから先は、フリードマンが考えた関数の中で、特に強力なものをいくつか紹介します。まずは超越整
数35 36 (transcendental integer) を紹介します。
✓【定義】超越整数

超越整数 n は、次の条件を満たすような整数すべてである。

✏

チューリングマシン (p.239) M が停止するということを、ZFC で 21000
個以内の記号で証明できるのであれば、必ず M は n ステップ以内で停止する。
✒

この定義から明らかなように、最小の超越整数が存在します。この定義はZFC が無矛盾であるときに限り意味があり、それを仮定しています。

✑

ローダー数を計算するチューリングマシンが停止するという証明を ZFC
で 21000 個以内の記号で書くことができれば、超越整数はローダー数よりも大きいことになります。したがって具体的なチューリングマシンと ZFC の証明を書くのは難しいですが、おそらく超越整数はローダー数よりも大きいと考えられます。また ZFC の証明論的順序数は知られていません。2 階
算術 Z2 の証明論的順序数も知られていません。この強さの理論になると、
証明論的順序数で比較することは難しく、理論体系の強さそのものを直接比較することになります。
35 http://ja.googology.wikia.com/wiki/超越整数
3623kmig3.pdf

https://u.osu.edu/friedman.8/files/2014/01/EnormousInt.12pt.6 1 00-

230

第7章

再帰関数

ここで、超越整数を厳密に定義するためには、ZFC の公理を適用する述語論理の形式体系と、何をもってチューリングマシンの停止性を証明できたとするのかを正確に判定できるような定義を与えることが必要になるだ
ろうと思いますが、そこは省略されています。つまり超越整数は概念を示したものであり、面倒な実装を省略していると考えることができそうです。
フリードマンは超越整数に基づいた関数を定義していないものの、次のように TR(T, n) を定義することで、理論体系 T の強さに匹敵する計算可能関数ができます。
✓【定義】超越整数の拡張関数 TR

理論体系 T と整数 n に対し、次の条件を満たす最小の整数を N とす✏るときに、TR(T, n) = N とする。
チューリングマシン M が停止するということを、T で n 個以内の記号で証明できるのであれば、必ず M は N ステップ以内で停止する。
✒✑
最小の超越整数は TR(ZFC, 21000 ) です。そして T に ZFC よりも強い公理系を使う理論体系を入れれば、さらに強い関数ができます。理論体系 T の強さを直接的に利用して強い計算可能関数を作るお手軽な方法を示したという点で、超越整数の定義は画期的だと思います。

それでは ZFC よりも強い公理系とは、どのような公理系でしょうか。

ZFC に、ある巨大基数 α が存在するという公理を加えた理論体系は、ZFCよりも強くなります。ここで巨大基数 (large cardinal) のおおまかな定義（その基数が巨大基数であるための必要条件）は、その基数の存在が ZFCと矛盾することが知られておらず、ZFC が無矛盾であると仮定したときに、その基数の存在を ZFC の下では証明できない、つまり「そのような基数は存在しない」という主張が無矛盾であることが証明されている基数です。これまでに紹介した基数の中では、オメガ収束点はまだ巨大基数の仲間入りをしていません。到達不能基数とマーロ基数は巨大基数です。

7.4. 様々な巨大数と関数✓

231【定義】理論体系 Z(α)

ZFC に「巨大基数 α が存在する」という公理を加えた理論体系を Z(α)

とする。
✒

✏
✑

ZFC では α の存在を示すことができないため、Z(α) は、ZFC よりも強くなります。そして巨大基数は無矛盾性の強さ (consistency strength) について、厳密な線形順序に従うという経験則があります。このことから、

Z(α) の強さは α の無矛盾性の強さによって比較できます。
したがって超越整数の巨大基数による拡張 TR(Z(α), n) は、巨大基数 αの強さがそのまま関数の強さとしてあらわれるような計算可能関数となります。本章の最後で紹介する「欲張りクリーク列」による一番強い関数は、TR(Z(α), n) の α に膨大基数を入れた強さに相当するので、α に膨大基
数よりも強い巨大基数を入れれば、「欲張りクリーク列」よりも強い計算可能関数ができます。そこで、α に膨大基数よりも強い階層内階層基数37(rank-into-rank cardinal) の I0 基数 ρ を入れた I0 関数 (I0 function) を
I0(n) = TR(Z(ρ), n) と定義しておきます。

ここまでに出てきた理論体系の強さを、次第に強くなるように並べます。

CoC の強さをどこに入れるかは不確定です。
RCA0 < ACA0 ≈ PA < ATR0 < Π11 -CA0 < Π11 -CA-BI < Π11 -TR0 <ZFC < Z(α)

そして、ここから先は Z(α) の世界に入っていきます。
なお、2 階算術 Z2 の強さと ZFC を直接比べることはできません。体系が異なるため、Z2 で証明できて ZFC で証明できないこともあれば、ZFC で証明できて Z2 で証明できないこともあるためです。ところが、Wikipedia
英語版 “Second-order arithmetic” の記載（タラノフスキーの C 表記を考案したドミトロ・タラノフスキーによる 2012 年 3 月 26 日の編集）によれ
ば、Z2 に射影集合の決定性公理 (axiom of projective deteminacy) を加えた Z2 +PD と、ZFC + 「n 個のウディン基数 (Woodin cardinal) が存在する (n は非負整数)」は同じ証明力の強さとなるようです。

37 http://ja.googology.wikia.com/wiki/階層内階層基数

第7章

232

再帰関数

有限約束ゲーム

7.4.11

有限約束ゲーム38 39 (finite promise games) は、フリードマンが 2009

年に考案した 4 つの関連した 2 人ゲームです。4 つのゲームは、それぞれ「有限区分線形約束ゲーム (FPLCI ゲーム)」「有限多項式約束ゲーム (FPCI
ゲーム)」「有限順序不変約束ゲーム (FOICI ゲーム)」「有限線形結合約束
ゲーム (FLCI ゲーム)」ですが、ここでは有限区分線形約束ゲーム (finite

piecewise linear copy/invert game, 略して FPLCI ゲーム) にしぼって説明します。
関数 T : Nk → N が区分線形 (piecewise linear) であるとは、整数係数の不等式によって条件分けされた、有限個の整数係数の一次関数によって表記できることを意味するものとします。区分線形関数 T に対して、ベクトル y ∈ Nk が x に対する T の逆変換であるとは、T (y) = x を満たすことを意味するものとします。

区分線形関数 T : Nk → N と、2 つの正の整数 n と s が与えられたときに、有限区分線形約束ゲーム G(T, n, s) を、次のように定義します。
【定義】有限区分線形約束ゲーム

有限区分線形約束ゲーム G(T, n, s) は、マシモとうるかの間の 2 人ゲー
ムである。n ラウンドで終了し、マシモが先手である。
マシモの手番では、w! または y + z となるような x を、0 ≤ x ≤ sの範囲で選ぶ。ここで y と z はうるかがそれまでに選んだ数でなければならない。x がマシモの提案である。うるかはその提案を受け入れるか拒否するかを選ばなくてはならない。

• 提案を受け入れたときには、うるかは x を選んで、うるかが選んだ数の中からいくつかの数を並べたベクトルは、決して x のT による逆変換と一致することはないと約束する。
• 提案を拒否したときには、x の T による逆変換の中から好きな
38 http://ja.googology.wikia.com/wiki/有限約束ゲーム

39 http://cs.nyu.edu/pipermail/fom/2009-September/014007.html

7.4. 様々な巨大数と関数233数を選んで、決して x を選ばないと約束する。
うるかが約束を破るとうるかの負けとなる。うるかが n ラウンドすべて約束を破らなければ、うるかの勝ちとなる。ここで、約束はうるかの過去、現在、未来のすべての手番に適用される。
うるかはあらゆる有限区分線形ゲームに対して勝つ戦略があります。そのことは、2 階算術の部分体系である RCA0 で証明可能です。

さらにこのゲームのルールにおいて、次のルールを追加したゲームを

Gm (T, n, s) とします。
うるかは m よりも大きい階乗数の提案を必ず受け入れなければならない。
このとき次の定理が成り立ちます。
うるかはすべての T と n に対して、十分に大きい m と s を設定すれば Gm (T, n, s) に勝つ戦略がある。
このことは SMAH+ で証明可能ですが、SMAH と同じ強さの部分体系では証明不可能です。ここで SMAH と SMAH+ は、次のような理論体系です。

• SMAH は ZFC に、すべての正の整数 k に対して「強い k-マーロ基数が存在する」という公理を加えたものである。すべての k に対して加えるので、無限の公理を加えることとなる。

• SMAH+ は、ZFC に、「すべての正の整数 k に対して強い k-マーロ
基数が存在する」という公理を加えたものである。

SMAH と SMAH+ は一見同じように見えますが、SMAH の証明では有限の公理しか使えないため、SMAH+ の文を証明するために「すべての k について」という論理を使うことができないという違いがあります。
ここでマーロ基数 (Mahlo cardinal) は巨大基数です。巨大基数の理論について本書では深く踏み込みませんが、基数 κ が強いマーロ基数であるとは、κ が到達不能で、 集合 U = {λ < κ : λは到達不能 } が κ 内で定常集合であることを言います（到達不能と定常の定義は省略します）。さらに、順

序数 α に対して α-マーロ基数が定義されますが、その定義は省略します。

第7章

234

再帰関数

FPLCI(a) を、うるかが GN (T, n, N ) に勝つことができる最小の N とします。ただし、以下のすべてが a よりも小さいものとします。

• n• k (T の定義域は Nk )• T の区分数• T の不等式における係数の絶対値• T の一次関数における係数の絶対値

すると、関数 FPLCI(a) は SMAH の部分体系で証明可能ないかなる再帰関数よりも強い関数となり、より強い SMAH+ で証明可能となります。

ZFC よりも強い SMAH を支配する関数なので、FPLCI(a) は小さな a において超越整数を追い越します。また、GN (T, n, N ) の引数である T, n, N の組合せは有限で、それぞれのパターンに対して、うるかの勝敗を計算可能であることから、FPLCI(a) は計算可能関数となり、次章のビジービーバー関数よりは弱い関数となります。
なお、フリードマンが定義した他の 3 つのゲームの中で、2 つのゲームで同様の強さの関数 FPCI(a) と FLCI(a) が定義されます。ゲームの基本構
造はそれぞれ同じで、使われる関数の種類が異なり、証明論的な強さは同じで、SMAH を支配して SMAH+ で証明可能な関数となります。

7.4.12

欲張りクリーク列

欲張りクリーク列40 41 (greedy clique sequence) は、フリードマンが 2010年に定義したグラフ理論を使った 3 つの急増加関数 USGCS と USGDCSと USGDCS2 を定義する列です。その定義の前に、関数の強さについて書
きます。これらの関数の強さは、次の 4 つの理論で説明されます。

1. SRP 理論は、ZFC に、すべての n に対して「n-stationary Ramsey
property を持つラムゼイ基数 (Ramsey cardinal) が存在する」という公理を加えたものである。
40 http://ja.googology.wikia.com/wiki/欲張りクリーク列

41 http://www.cs.nyu.edu/pipermail/fom/2010-January/014285.html

7.4. 様々な巨大数と関数

235

2. SRP+ 理論は、ZFC に、「すべての n に対して n-stationary Ramsey
property を持つラムゼイ基数が存在する」という公理を加えたものである。

3. HUGE 理論は、ZFC に、すべての n に対して「n-膨大基数 (n-huge
cardinal) が存在する」という公理を加えたものである。
4. HUGE+ 理論は、ZFC に、「すべての n に対して n-膨大基数が存在する」という公理を加えたものである。
ここでラムゼイ基数 (Ramsey cardinal) も膨大基数 (huge cardinal) も巨大基数です。これまでに本書で登場した巨大基数の無矛盾性の強さは到達不能 < マーロ < ラムゼイ < ウディン < 膨大 < 階層内階層となっています42（最後の「基数」は省略）。したがって理論の強さを有限
約束ゲームでも含めて比較すると

ZFC < SMAH < SMAH+ < SRP < SRP+ < HUGE < HUGE+となります。

USGCS と USGDCS は、SRP によって証明可能な再帰関数をすべて支配
し、SRP+ によって証明可能な再帰関数です。そして USGDCS2 は HUGE

によって証明可能な再帰関数をすべて支配し、HUGE+ によって証明可能な再帰関数です。したがって関数の強さは

FPLCI < USGCS, USGDCS < USGDCS2となります。
それでは欲張りクリーク列の定義を説明します。かなり難解です。まずは用語と記法を定義します。クリーネスター (Kleene star) あるいはクリー
ネ閉包 (Kleene closure) の記号を使って、Q∗ はすべての有理数のタプル、つまり Q 組 (Q-tuple) の集合を意味するものとします。つまり、Q∗ は、(4, 13, 23 , −1) のような有理数の組をすべて集めた集合です。タプルに 1 か
42 Cantor’s Attic http://cantorsattic.info

236

第7章

再帰関数

らインデックスをつけて下付き文字で記します。たとえば、タプル x は(x1 , x2 , ..., xn ) です。

タプルの連結を角括弧であらわします。たとえば ⟨(0, 1), (2, 3)⟩ = (0, 1, 2, 3)です。

a ∈ Q∗ に対して、a の上シフト (upper shift) を us(a) と表記し、a のすべての負ではない要素に 1 を加えたものであると定義します43 。

a, b ∈ Q∗ に対して、2 項演算 ≼ と ≺ を a ≼ b ⇔ max(a) ≤ max(b) および a ≺ b ⇔ max(a) < max(b) によって、それぞれ定義します。a, b ∈ Q∗
が順序等価 (order equivalent) であるとは、a と b が同じ長さであり、かつすべての i と j に対して ai < aj ⇔ bi < bj であることと定義します。

集合 E ⊆ Q∗ が順序不変 (order invariant) であるとは、すべての順序等

価な x と y に対して x ∈ E ⇔ y ∈ E であることと定義します。H を Q∗の要素を頂点に持つグラフとします。集合 E を、すべての H の辺 (x, y)に対して、その連結 ⟨x, y⟩ が E の要素であるような集合と定義します。このときに、E が順序不変であれば、H は順序不変であると言います。H が順序不変のとき、H は無限の辺を持ちます。
無向グラフ G の部分グラフ A が G のクリーク (clique) であるとは、Aが完全グラフである、すなわち、A の任意の 2 頂点間を結ぶ辺が存在するという意味です。有向グラフ G の部分グラフ A が G の下降クリーク (downclique) であるとは、すべての x ≻ y を満たす x, y ∈ A に対して、(x, y) がG の辺であるという意味です（有向グラフなので (x, y) ペアの順番が意味を持ちます）。
上シフト欲張りクリーク列 (USGCS; upper shift greedy clique sequence)

を、次のように定義します。

【定義】上シフト欲張りクリーク列k ∈ N と S ⊆ Q∗ が与えられているときに、S の要素を頂点に持つ単純グラフ G と、タプル xi ∈ S を要素に持つ空ではないタプル（タプルのタプル） x = (x1 , x2 , . . . , xn ) を考える。x が G の上シフト欲張りクリーク列であるとは、以下のすべての条件が成立することである。
43 http://www.cs.nyu.edu/pipermail/fom/2009-December/014276.html

7.4. 様々な巨大数と関数

237

1. x1 は 0 のみである。
2. m を 2 ≤ 2m ≤ n − 1 を満たす正の整数であるとする。Y を⟨x1 , x2 , . . . , x2m−1 ⟩ の連結とし、y = (Ym , Ym+1 , . . . , Ym+k−1 )とすると、(a) x2m ≼ y かつ (y, 2m) は G の辺ではない。
(b) x2m+1 = us(x2m )3. {x2 , x3 , . . . , xn } は G のクリークである。

上シフト欲張り下降クリーク列 (USGCDS; upper shift greedy clique

down sequence) は、上シフト欲張りクリーク列の定義で、次の箇所を変えたものです。

1. G は有向グラフである。
2. 条件 2(a) は「x2m = y 」あるいは「x2m ≺ y かつ (y, 2m) は G の辺ではない」

3. 条件 3 は {x2 , x3 , . . . , xn } が G の下降クリークである。

x = (x1 , x2 , . . . , xn ) に対するスレッド (thread) は、(1, 2, . . . , n) の部分

列 (u1 , u2 , . . . , ur ) で、以下のように帰納的に定義されます。

1. u1 = 1
2. ui が定義されているときに、ui+1 を次のように決める。ui , ui+1 , . . . , 2uiの中から、xj ≺ xui が成立するような j を選ぶ（そのような j が存在しなければ ui+1 は定義されない）。そのような j が複数あるときには、その中で max(xj ) が最大の j を選ぶ。さらにそのような j が複数あるときには、その中で最大の j を選ぶ。そして ui+1 = j とする。
スレッド u について 2ur ≤ n のときに、そのスレッドは開いたスレッド(open thread あるいは terminal thread) であるとします。

G の上シフト欲張りクリーク列 x が、開いたスレッド u を持つときに、
x は G の開放上シフト欲張りクリーク列であるとします。そして G の上シフト欲張り下降クリーク列 x が、開いたスレッド u を持つときに、x はG の開放上シフト欲張りクリーク下降列であるとします。

第7章

238

再帰関数

いよいよ準備が整い、急増加する関数を定義できます。
【定義】欲張りクリーク関数

1. USGCS(k) は、S = Qk としたときに「S の要素を頂点に持つすべての順序不変な単純グラフ G が、最大でも N の長さの開放上シフト欲張りクリーク列を持っている」と言える最小の整数

N である。
2. USGDCS(k) は、S = Qk としたときに「S の要素を頂点に持つすべての順序不変な有向グラフ G が、最大でも N の長さの開放上シフト欲張りクリーク下降列を持っている」と言える最小の整数 N である。

3. USGDCS2 (k) は、USGDCS(k) の定義において S = Qk ∪ Qk+1としたものである。

USGDCS2 関数は、本書でこれまでに紹介した再帰関数の中で、最も強い関数であると考えられます（超越整数の巨大基数による拡張で示した階層内階層基数の強さを持つ I0 関数を除く）。ただし、バシク行列・強配列表
記・ローダー数の D 関数の強さは評価が難しく、これらの中で USGDCS2関数よりも強い関数がある可能性はあります。

239

第

8章
計算不可能な関数

本章では、いかなる計算可能な関数も支配する計算不可能な関数について扱います。計算や証明をすっぱりとあきらめて、ひたすら大きな数を定義する、という巨大数論の中でも特に不思議な世界に入っていきます。

8.1

ビジービーバー関数

ビジービーバー関数1 2 (busy beaver function) あるいはラドのシグマ関

数 (Rado’s sigma function) は、チューリングマシンから定義される計算不可能関数です。まずはチューリングマシン (Turing machine) について説明します。チューリングマシンは、1936 年にイギリスの数学者、論理学
者、コンピュータ科学者のアラン・チューリング (Alan Mathison Turing,

1912–1954) の論文で発表された仮想機械です。無限に長いテープと、その中に格納された情報を読み書きするヘッド、機械の内部状態を記憶するメ
モリで構成されて、内部状態とヘッドから読み出した情報の組み合わせに応じて、「ヘッド位置のテープに情報を書き込む」「機械の内部状態を変える」「ヘッドを右か左に一つ移動する」のいずれかの動作を、内部状態が停止状態になるまで反復して実行し続けるような機械です。
自然数から自然数への関数 f があって、任意の自然数 n を入力したときに f (n) を出力して停止するチューリングマシンが存在するとき、その関数を計算可能関数 (computable function) と呼び、再帰関数 (recursive
1 http://ja.googology.wikia.com/wiki/ビジービーバー関数

2 MathWorld - Busy Beaver http://mathworld.wolfram.com/BusyBeaver.html

第8章

240

計算不可能な関数

function) (p. 71) と同じになります。コンピュータのプログラムで計算できる数は、すべてチューリングマシンで計算できることが知られています。

n 状態 m 記号のチューリングマシンは、次のような機械です。
• マシンは n 個の動作状態と、停止状態を持つ。ここで n は正の整数
で、その中の 1 つが初期状態である。

• マシンは 1 つの 2 方向の無限に長いテープを使う。
• テープには m 種類の記号が書かれている。
• マシンには遷移関数があり、入力は (1) マシンの現在の状態と、(2)
現在の位置のテープの状態の 2 つである。

• 遷移関数は、3 つの出力を持つ。(1) テープの現在の位置から読み出された記号を上書きする記号 (2) テープ上を動く方向（左または右）(3) 遷移先の状態（停止する場合もある）
プログラムは入力 2 つと出力 3 つの 5 つ組の情報、つまり（現状態、現記号、次に書く記号、移動方向、次の状態）を有限個並べた表として書くことができます。詳しくは『グッド・マス』3 という本に、チューリングマ
シン（チューリング機械）によるプログラムの実例とともに分かりやすく解説されています。
ハンガリーの数学者ティボール・ラド (Tibor Radó, 1895–1965) が、1962
年に n 状態 2 記号のチューリングマシン (n-state, 2-color Turing machine)のビジービーバーゲームを考えて論文で発表しました4 。

ビジービーバーゲーム (busy beaver game) は、すべて 0 のテープの初期状態から開始して、遷移関数を停止状態になるまで繰り返します。マシンが最終的に停止した場合には、その時のテープ上の 1 の数がマシンが返した数となります。n 状態 2 記号のすべてのチューリングマシンでビジー
ビーバーゲームをしたときに、最大の数を返すものが n 状態のビジービー
3 Chu-Carroll, M. C. 著 cocoatomo 訳 (2016) 『グッド・マス : ギークのための数・論
理・計算機科学』オーム社
4 Rado, T. (1962) On non-computable functions. Bell System Technical Journal 41:
877–884. doi:10.1002/j.1538-7305.1962.tb00480.x

8.1. ビジービーバー関数241

バー (n-state busy beaver) であるとされ、最大かどうかは分からないけれ
ど、現在のところは最大となっているものが優勝マシンとされます。問題は、現在優勝マシンとされているものがビジービーバーなのかどうかを、確かめる方法がないことです。それを決定するためには、あらゆる n 状態のチューリングマシンを停止しないことが確定するまで走らせる必要があり
ますが、どこまで走らせても停止しないことが確定しない（永遠に停止しな
いのか、いつかは停止するのかが、いつまでも分からない）、という停止性問題 (halting problem) が生じるためです。停止しないということが証明できれば良いのですが、問題はあらゆるチューリングマシンに対して、そのマシンが停止するかどうかを判定するようなアルゴリズムが存在しない、というところにあります。
ビジービーバー関数 Σ(n) は、n 状態 2 記号のあらゆるチューリングマ
シンの中で、最多の 1 を書いて停止するものが書く 1 の個数です。これは、定義はされますが計算不可能で、いかなる再帰的理論でもビジービーバー
関数の全域性を証明することができません。前章では「理論体系の証明力の強さ」によって関数の強さを比較しましたが、ビジービーバー関数はあらゆる再帰的な理論体系の証明力の強さを超えてしまいました。
十分に小さい n、すなわち Σ(0) = 0, Σ(1) = 1, Σ(2) = 4, Σ(3) = 6,

Σ(4) = 13 までは値が分かっていますが、n > 4 に対しては、正確な値が計算されていません。n = 5 の時は、4098 を返すチューリングマシン（現在の優勝マシン）が見つかりましたが、まだ停止していないチューリングマシ
ンの中で、永遠に停止しないことが証明されていないものが残っているので、それがビジービーバーであるということが確定していません。つまり

Σ(5) ≥ 4098 です。n = 6 の時は、3.514 × 1018267 という下限が計算されていますが、これもこの値が Σ(6) であるかどうかは分かっていません。グラ
ハム数 G との比較については、Googology Wiki ユーザーの Wythagorasが Σ(18) > G という結果を示しています。
与えられたプログラミング言語で一定の文字数で書ける最大の数、という関数は、そのプログラミング言語をチューリングマシンに必ず翻訳できることから、本質的にビジービーバー関数と同じです。前章までに定義したすべての計算可能関数によって定義される巨大数は、それを計算するプログラ

242

第8章

計算不可能な関数

ムを書くことができて、チューリングマシンに翻訳可能です。バシク行列のプログラムは BASIC 言語で、ローダー数のプログラムは C 言語で書かれているので、チューリングマシンに翻訳することが可能です。Yedidia andAeronson (2016) 5 は、フリードマンの欲張りクリーク列を計算する 7910
状態 2 記号のチューリングマシンを構成しました。すなわち ZFC+SRP 理論ではそのチューリングマシンが停止することが証明できないことになります。このことから、Σ(10000) は前章までに登場したいかなる巨大数よりも大きいであろうと予想されます。
「n 文字以内で書ける最大の数」あるいは「n 文字以内で書けない最小の数」といったときには、この停止性問題と同じ問題が発生し、計算不可能
関数になります。ただし、そのときには「どのような表記法が許されるか」が明確にされていなければなりません。それが明確になされていないと、「15 文字以内で書けない最小の数」が 15 文字で書けてしまう、というような矛盾が生じます。Σ(10000) + 1 を計算するチューリングマシンを 10000
状態以下で作ることができるとすれば、そのチューリングマシンによってΣ(10000) よりも大きい数が計算されてしまうことになってしまうので、そのようなチューリングマシンを作ることはできません。そのように考えても、やはりビジービーバー関数が計算できないということが分かります。

Googology Wiki では、ビジービーバー関数を F [ω1CK ](n) と急増加関数を使って近似できるとしています。ここで ω1CK はチャーチ・クリーネ順序数です。たとえば、すべてのチューリングマシンを辞書式順序で並べることで部分再帰関数を f0 , f1 , f2 , ... のように順番に並べることが可能であることを利用すると、チャーチ・クリーネ順序数の基本列を取ることができるためだとしています。本書ではこの考え方を採用して、ビジービーバー
関数は F [ω1CK ](n) と近似できるものとします。

5 Yedidia, A. and Aeronson, S. (2016) A relatively small Turing machine
whose behavior is independent of set theory. Complex Systems 25(4): 297–327.
doi:10.25088/ComplexSystems.25.4.297

8.2. 神託機械

8.2

243

神託機械

形式体系 T で m 文字以内の論理式で存在を証明できるすべての整数を計算して、最大の値を返すチューリングマシンを n 個の動作状態で作ることができるとします。そのようなチューリングマシンを実際に作るのは大変ですが、比較的小さな n で大きな m に対して計算ができると期待されます。つまり、形式体系 T で m 文字以内で「存在を証明」できるような数は、計算可能関数の範疇となります。
「計算不可能」な関数は、その関数の全域性をいかなる再帰的な理論によっても「証明不可能」ということを意味します。
「計算も全域性の証明もできない全域関数は定義できない」と考えるのであれば、ビジービーバー関数は「定義されていない関数」ということになります。その場合には、本書は前章までしか意味を持たないことになります。本章は、「計算も全域性の証明もできないビジービーバー関数のような全域関数が定義される」ということを信じた人のみ意味を持ちます。これは、どちらが正しいかという問題ではなく、どちらの考え方を採用する
か（どちらを信じるか）という問題だろうと思います。
さて、もしあなたがビジービーバー関数が定義できると信じたのであれ
ば、その数が「計算」や「証明」によってではなく神託 (oracle) によってポンと出てくる、と信じたことと同等です。そのような神託を組み込んだ機械が神託機械 (oracle machine) です。神託機械は、計算ができない問題を決定して値を返す「神託」を持っている機械です。
そこで、神託機械を持つ 2 次チューリングマシン (second order Turingmachine) を考えます。これは、通常のチューリングマシンがいつ停止するかを決めることができるようなブラックボックス（神託）を持つ神託機械です。そのような神託を持つ n 状態 2 記号の 2 次チューリングマシンが出力できる最大の数を Σ2 (n) として、これが 2 次ビジービーバー関数 (second

order busy beaver function) です。
2 次チューリングマシンは通常のチューリングマシン（1 次のチューリン
グマシン）の停止性問題を解くことができますが、自分自身がいつ停止す
るか、という停止性問題を解くことができません。よって、2 次ビジービー

第8章

244

計算不可能な関数

バー関数 Σ2 (n) は神託機械に対しても計算不可能な関数となります。

このようにして、一般に x 次のビジービーバー関数 Σx (n) は x + 1 次のチューリングマシンによって計算できますが、x 次以下のチューリングマ
シンでは計算不可能です。

ビジービーバー関数を急増加関数で F [ω1CK ](n) と近似したように、2 次

ビジービーバー関数を F [ω2CK ](n) で近似できると考えます。ここで ω2CK は

ω1CK から再帰的に定義できない最小の順序数です。同様に x 次のチューリ
ングマシンを F [ωxCK ](n) で近似できると考えます。実際の計算手順を考えて近似したというよりは、そのように考えると便利だからそのような近似の仕方を採用する、ということです。
再帰理論と計算可能性理論では基本的なチューリング次数 (Turing degree)という概念がありますが、その解説は本書の著者には荷が重すぎます。「次数 0′ くらいのほとんど全ての次数を支配する関数」6 といったような面白そうな関数もあります。

8.3

クサイ関数

2011 年国際数学オリンピックの銅メダリストであるアダム・ガウチャー(Adam P. Goucher) が、2013 年にケンブリッジ大学トリニティ・カレッジの学生をしていたときに定義したクサイ関数 (Xi function)7 について説明します。
まず、次のような SKI 表現を定義します。

• I(x) = x• K(x, y) = x• S(x, y, z) = x(z, y(z))

6 Dobrinen, N. L. and Simpson, S. G. (2004) Almost everywhere domination. Journal of Symbolic Logic 69: 914–922.
7 巨大数研究 Wiki - クサイ関数 http://ja.googology.wikia.com/wiki/クサイ関数

8.4. ふぃっしゅ数バージョン 4245

たとえば S(K, S, K(I, S)) を計算してみます。S 式で x = K, y = S, z =K(I, S) を代入すると、K(K(I, S), S(K(I, S))) となります。次に K 式で
x = K(I, S), y = S(K(I, S)) を代入するとK(K(I, S), S(K(I, S))) = K(I, S)となります。さらに、K(I, S) = I となります。このように

S(K, S, K(I, S))という SKI 表現は最終的に I になりましたが、無限に記述が増加するようなものもあれば、計算が終わるものもあります。n 個の文字から始める SKI 表
現の中で、最大の有限の文字を返すものが返した文字数をクサイ関数 Ξ(n)とします。SKI 表現はチューリングマシンと同じ強度で、Ξ(n) 関数は計算不可能になります。SKI 計算そのものはチューリングマシンと同じ程度の強さですが、神託記号 (oracle combinator) Ω(x, y, z) を導入することで強くなります。Ω(x, y, z) は、x の計算結果が I になるときには y を、そうでなければ z を返します。

ふぃっしゅ数バージョン 4

8.4

神託機械を使って、2002 年にふぃっしゅ数バージョン 4 8 を定義しました。
【定義】ふぃっしゅ数バージョン 4

1. 関数 f から関数 g への写像 s′ (1) を以下で定める。
関数 f を神託として持つチューリングの神託機械を考え、このマシンによるビジービーバー関数を g とする。
すなわち「チューリングマシン＋関数 f 」のマシン n
ステートでセット可能な 1 の数の最大を g(n) とする。

2. s′ (n)(n > 1) および ss′ (n)(n > 0) を、F3 と同様に定める。すな
8 http://ja.googology.wikia.com/wiki/ふぃっしゅ数バージョン 4

第8章

246

計算不可能な関数

わち、s′ (n)f := g; g(x) = [s′ (n − 1)x ]f (x)(n > 1)
ss′ (1)f := g; g(x) = s′ (x)f (x)ss′ (n)f := g; g(x) = [ss′ (n − 1)x ]f (x)(n > 1)
3. ふぃっしゅ関数 F4 (x) を以下のように定める。
F4 (x) := ss′ (2)63 f ; f (x) = x + 1
4. ふぃっしゅ数 F4 := F463 (3) とする。
ふぃっしゅ数バージョン 3 の定義では、s(1) はある関数から原始再帰で他の関数へと変換するような写像でした。それに対してふぃっしゅ数バー
ジョン 4 の s′ (1) は、ある関数 f からその関数を神託として持つような神
託機械を想定して、その神託機械によるビジービーバー関数へと変換する
ような写像です。
ここで F4 (x) は「ビジービーバー関数を元にして再帰的定義を繰り返す」という関数ではありません。まず初期の関数である f (x) = x + 1 に対して s′ (1) を施すと、これは神託がないビジービーバー関数そのものなので、

s′ (1)f (x) がビジービーバー関数に相当します。そしてこの s′ (1)f (x) に対して再度 s′ (1) を施した s′ (1)2 f (x) は、「ビジービーバー関数を神託として持つ神託機械」すなわち 2 次チューリングマシンによって計算できない 2
次ビジービーバー関数 Σ2 (x) となります。同様に s′ (1) 変換を続けると、次のようになります。

s′ (1)f (x)=s′ (1)2 f (x)=s′ (1)3 f (x)=s′ (1)n f (x)=s′ (1)x f (x)=Σ1 (x) ≈ F [ω1CK ](x)
Σ2 (x) ≈ F [ω2CK ](x)
Σ3 (x) ≈ F [ω3CK ](x)Σn (x) ≈ F [ωnCK ](x)Σx (x) ≈ F [ωωCK ](x)s′ (n) 変換は、s(n) 変換と同じように s′ (n − 1) 変換を対角化する操作なの8.4. ふぃっしゅ数バージョン 4247

で、次のようになります。

s′ (2)f (x) =s′ (1)s′ (2)f (x)≈s′ (2)2 f (x)≈s′ (3)f (x)≈s′ (4)f (x)≈s′ (n)f (x)≈s′ (x)f (x)≈s′ (1)x f (x) ≈ F [ωωCK ](x)CKF [ωω+1](x)CKF [ωω×2](x)

F [ωωCK2 ](x)F [ωωCK3 ](x)F [ωωCKn−1 ](x)F [ωωCKω ](x)

ここから先は、ふぃっしゅ数バージョン 3 と同じような構造で

F4 (x)

≈

F4

≈

CK
F [ω(ω
ω+1 )63 ](x)CKF [ω(ω
ω+1 )63 + 1](63)となります。
このように、ふぃっしゅ数バージョン 4 はチューリングマシンに神託を組み込むことで強化する、という操作を「関数から関数への変換」として強い関数を定義する手法です。
「関数を強める」という再帰的な定義をするのではなく「関数を強める変換」を定義するというふぃっしゅ数の考え方から、このような定義が自然とでてきました。
この定義をしたときにはまだふぃっしゅ数バージョン 5 以降ができていなかったのでバージョン 3 を元にした定義となりましたが、ふぃっしゅ数
バージョン 5 の m(2) とバージョン 6 の m(0, 2) をそれぞれ s′ (1) に置き換えることで、それぞれ F [ωϵCK+ 1](63) と F [ωζCK+ 1](63) 相当の巨大数とな00
ります。ふぃっしゅ数バージョン 4 でここまで大きな数を作ったのですから、バージョン 5 以降もそのように大きくしていくのが自然であると考えられますが、なぜまた計算可能関数に戻してしまったのでしょうか。それは当時の巨大数探索スレッドでは「計算不可能関数を使って巨大数を作るのは邪道」という意見が支配的だったためです。結果として、ふぃっしゅ
数バージョン 5 を分かりやすい形で定義できたのは良かったと思います。

第8章

248

8.5

計算不可能な関数

ラヨ数

2007 年 1 月 26 日に、MIT（マサチューセッツ工科大学）で巨大数決闘(big number duel) 9 というイベントが開催されました。これは MIT の哲学者アグスティン・ラヨ (Agustin Rayo) 10 とプリンストン大学の哲学者アダム・エルガ (Adam Elga) 11 の間で、どちらがより大きな有限の数を定義するか、という勝負で、学生に計算理論、順序数、高階言語のような数学と哲学の境界領域に興味を持たせようとして開催されたものです。この勝負はラヨが勝利しました。 この巨大数決闘で勝利したラヨが定義した巨大数がラヨ数12 (Rayo’s number) で、以下のように定義されます。
【定義】ラヨ数（簡単な定義）一階集合論の言葉でグーゴル個以内の記号で表現でき
るいかなる有限の数よりも大きな最小の非負整数をラヨ数とする。
（正確な定義）[φ] と [ψ] を ゲーデル数化された論理式として、s とt を変数設定 (variable assignment) とする。Sat([φ], s) を二階述語論
理で次のように定義する。

∀R{{∀[ψ], t : R([ψ], t) ↔
(([ψ] = ”xi ∈ xj ” ∧ t(x1 ) ∈ t(xj ))∨([ψ] = ”xi = xj ” ∧ t(x1 ) = t(xj ))∨([ψ] = ”(¬θ)” ∧ ¬R([θ], t))∨([ψ] = ”([θ] ∧ ξ)” ∧ R([θ], t) ∧ R([ξ], t))∨([ψ] = ”∃xi (θ)” ∧ ∃t′ : R([θ], t′))

（ここで t′ は t の xi を変化させたもの）

9 Big Number Duel http://web.mit.edu/arayo/www/bignums.html
10 Agustin Rayo http://web.mit.edu/arayo/www/
11 Adam Elga http://www.princeton.edu/˜adame/

12 ラヨ数 http://ja.googology.wikia.com/wiki/ラヨ数

8.5. ラヨ数249)} ⇒ R([φ], s)}n 個以下の記号を持ち、自由変数が 1 つ x1 だけであり、そして次のすべての性質を満たすような式 φ(x1 ) が存在するときに、自然数 m
を「n 個の記号でラヨ命名可能である」とする。

(1) Sat([φ(x1 )], s) を満たす変数設定 s で x1 = m が成り立つものが存在する。

(2) Sat([φ(x1 )], t) を満たす全ての変数設定 t に対して、x1 = m が成立する。

Rayo(n) は n 個の記号でラヨ命名可能ないかなる有限の数よりも大きい最小の非負整数である。Rayo(10100 ) をラヨ数とする。
「グーゴル」のところを正の整数 n とすれば、急速に増加するラヨ関数(Rayo function) Rayo(n) を定義できます。
ラヨ数の正確な定義は二階述語論理 (p.141) の式を使っていて難しいので、説明を書きます。無限に連続するオブジェクト (object) の並びを定義することを変数設定とします。たとえば (3, 2, 6, 1/2, 4, π, Canada, ω, 65, …

) のようなもので、Canada が入っているように、オブジェクトは数である
必要はありません。なんでも入ります。次に変数設定に対して適用する論
理式を考えます。この論理式は

1. “a ∈ b” a 番目のオブジェクトは b 番目のオブジェクトの要素である
2. “a = b” a 番目のオブジェクトは b 番目のオブジェクトと等しい
3. “(¬e)” 式 e の否定
4. “(e ∧ f )” 式 e と式 f の論理積 (and)5. “∃a(e)” 式 e が真となるように a 番目のオブジェクトを変えることができる
以上 5 つにより構成されます。この論理式を記述する言語を、ラヨは一階集合論 (first order set theory) の言語と呼んでいるため、略して FOST と呼びます。さて、ある数 m がある式 φ によって命名可能であるとは、式 φ

第8章

250

計算不可能な関数

を満たすすべての変数設定に対して、最初のオブジェクトが必ず m となる
こと、そしてそのような変数設定が少なくとも 1 つは可能であることを言います。ラヨ関数 Rayo(n) は、n 文字以内の式で命名可能ないかなる有限の正の整数よりも大きな最小の非負整数です。
集合論では、自然数を 0 = {}（空集合）、1 = {{}}、のように考えます。そこで、0 を定義するには (¬∃2(2 ∈ 1)) と定義します。これは「2つ目の変数が 1 つ目の変数の要素であるように、2 つ目の変数を設定することはできない」ことを意味するので「1 つ目の変数には要素はない」となり、1 つ目の変数は空集合=0 となります。この方法で 1 を定義すると(((¬∃3(3 ∈ 2)) ∧ 2 ∈ 1) ∧ (¬∃3((3 ∈ 1 ∧ (¬3 = 2))))) となります。1 を定義するために 38 文字も使ってしまいました。もし、38 文字以内で 1 よりも大きな数を定義する方法がなければ、Rayo(38) = 2 ということになります。これまでの急速増加関数と比べると、あまりにも増加速度が小さいよ
うに見えます。しかし文字数が増えれば、再帰的に大きな数を表現できるようになり、爆発的に増加します。
ラヨ数は哲学の教授が考案したものであることから定義には問題がない
ものと多くの人が考えて、Wikipedia には英語版、日本語版だけでなく 8 ヶ国語版のページができています。榎宮祐「ノーゲーム・ノーライフ」9 巻ではラヨ関数が使われています。しかし、数学者の間では、ラヨ数の定義は不十分なのではないかという意見があります。たとえば p 進大好き bot は
以下のような問題点を指摘しています13 。

1. ラヨ数の定義には「二階述語論理に使われる公理系」と、ラヨ数の定義において式 φ(x1 ) がある性質を「満たすような」自然数の集合を定義するために必要な「一階集合論の公理系」が指定されていない。

2. 1 については、いずれも一階述語論理の ZFC であると解釈可能かもしれない。しかし、一階述語論理の ZFC を使って再定式化したとしても、なお以下の点から定義が不十分である。

3. ラヨ数の定義では、式 φ(x1 ) がある性質を「満たすような」自然数の集合を定めている。ところがこれがどのような「モデル」で満たすと13 Googology Wiki: User blog:P 進大好き bot - https://bit.ly/2Q0QhZt

8.6. ふぃっしゅ数バージョン 7

251

いう意味なのかが定められていないので、定義文になっていない。

4. 3 のモデルがなんらかの集合論のモデルであるとすると、「自然数を構成するための理論の公理系」と「モデルに課される公理系」がいず
れも ZFC であるとすれば、不完全性定理からモデルを明示する方法がなくなってしまう。

5. 3 のモデルが定義可能クラスであれば定義可能であるが、その場合は証明可能性でしか真偽が定義できないので、ビジービーバー関数よりもはるかに強いような関数が定義されるわけではない。

6. プラトニズム宇宙 (Platonist universe) を導入したからといって、3から 5 の問題が即座に解決されるわけではない。

7. 4 の 2 つの公理系において、後者に前者よりも「強い公理」を明示的に採用することで、ラヨ数改良版のような巨大数を定義することは可能である。
本書のここから先はラヨ数を拡張あるいは発展させることでより大きな
巨大数を定義しようというものであり、ラヨ数の定義ができていないのであればここから先の巨大数の定義もあやしくなります。特にふぃっしゅ数
バージョン 7 の定義はラヨ数の定義に依存しています。

8.6

ふぃっしゅ数バージョン 7

チューリングマシンに神託を組み込んでもラヨ関数にはかなわないとな
れば、ラヨ関数をさらに強めるために FOST に神託を組み入れたらどうなるのでしょうか。チューリングマシンに神託を組み込んでビジービーバー関
数よりも強いふぃっしゅ数バージョン 4 を作ることができたように、FOSTに神託を組み込めばラヨ関数よりも強くなるのではないでしょうか。そのような発想から、2013 年 10 月 19 日に本書『巨大数論』初版の PDF ファ
イルを公開したときに、FOST に神託を組み入れたふぃっしゅ数バージョン 7 14 を以下のように定義しました。

14 http://ja.googology.wikia.com/wiki/ふぃっしゅ数バージョン 7

第8章

252

計算不可能な関数【定義】ふぃっしゅ数バージョン 7
関数 f に対して「f (a) = b; a 番目のオブジェクトと b 番目のオブジェ
クトに対して f (a) = b が成り立つ」という神託式 (oracle formula) をFOST の使用可能な式に加えた神託入り FOST (OFOST) のラヨ関数
g を考え、f から g へ変換する写像を RR とする。
ふぃっしゅ数バージョン 6 の定義で m(0, 2) = RR とした関数を

F7 (x) とする。ふぃっしゅ数バージョン 7、すなわち F7 を次のように定義する。

F7 := F763 (10100 )つまり、OFOST は

1. “a ∈ b” a 番目のオブジェクトは b 番目のオブジェクトの要素である
2. “a = b” a 番目のオブジェクトは b 番目のオブジェクトと等しい
3. “(¬e)” 式 e の否定
4. “(e ∧ f )” 式 e と式 f の論理積 (and)5. “∃a(e)” 式 e が真となるように a 番目のオブジェクトを変えることができる

6. “f (a) = b” a 番目のオブジェクトと b 番目のオブジェクトに対して
f (a) = b が成り立つという式によって構成されます。ここで次のようなラヨ階層を考えます。
✓✏【定義】ラヨ関数のハーディ関数的拡張
順序数 α に対するラヨ階層を次のように定義する。

R[0](n)=nR[α + 1](n)=RR(R[α])(n)=R[α[n]](n)(α[n] は極限順序数 α の基本列の n 番目)✒

R[α](n)✑

まずは R[1](n) について考えます。FOST に R[0](n) = n という関数 f を8.6. ふぃっしゅ数バージョン 7

253

加えたもので、これは神託を必要とせずに決定できる式です。FOST の強さには影響を与えないため、そのラヨ関数 g は通常のラヨ関数と同じ強さになり、R[1](n) はラヨ関数と等しくなります。
次に R[2](n) は R[1](n) という関数 f を神託式として持つ強化版 FOSTのラヨ関数です。この強化版 FOST では、f (a) = b という式で Rayo(a) を評価できてしまいます。したがって、ラヨ関数およびラヨ関数よりも増加
速度が小さい関数（計算可能関数、ビジービーバー関数、クサイ関数）を使って定義されるいかなる関数よりも増加速度が大きいということになります。さらに、RayoRayo(n) (n) といったようなラヨ関数を使って再帰的に定義できるような関数も、ラヨ関数が組み入れられた強化版 FOST で式を構成することができるため、その強化版 FOST におけるラヨ関数に相当す
る R[2](n) は、ラヨ関数を使って再帰的に定義できるいかなる関数も支配する関数となります。
そして R[3](n) はこの R[2](n) を神託式として組み込んだ「強化版をさらに強化した FOST」のラヨ関数で、 R[2](n) から再帰的に定義できるい
かなる関数も支配する関数となります。
このように、n 次チューリングマシンを考えることができたのと同じような構造で、n 次 FOST と n 次ラヨ関数を考えることができます。
ふぃっしゅ数バージョン 7 はふぃっしゅ数バージョン 6 の定義で m(0, 2) =RR としたものなので、
m(0, 2)m(0, 1)(x)=m(0, 2)2 m(0, 1)(x)RR[m(0, 1)](x) ≈ R[1](x)≈RR[R[1]](x) = R[2](x)m(0, 2) m(0, 1)(x)≈RR[R[2]](x) = R[3](x)m(0, 3)m(0, 2)m(0, 1)(x)≈R[ω](x)3のようになります。まず m(0, 2)m(0, 1)(x) は m(0, 1) という再帰関数を写像

RR によってラヨ関数程度の大きさに変えます。これが R[1](x) に相当します。そこから先は、ラヨ階層の 2 番目の定義式から RR[R[1]](x) = R[2](x) のように n 次ラヨ関数の n が 1 ずつ増えていきます。さらに m(0, 3)m(0, 2)m(0, 1)(x)はその操作を対角化することで、R[ω](x) の強さとなります。
このように、ふぃっしゅ数バージョン 6 における急増加関数の順序数と、ふぃっしゅ数バージョン 7 におけるラヨ階層の順序数が対応します。ふぃっ

254

第8章

計算不可能な関数

しゅ数バージョン 6 では、順序数 ζ0 = φ(2, 0) にまで到達したので、ふぃっ
しゅ数バージョン 7 の大きさは R[ζ0 ]63 (10100 ) 程度となります。

ふぃっしゅ数バージョン 7 を Googology Wiki に紹介したところ、当初はこの定義はうまくいかないとされました15 。その理由は「神託式を組み込むことで FOST を強めることはできない、なぜならば神託式として組み込む f (a) = g という関数は FOST で書けるので、字数の短縮にしかなっていない」というものです。それに対して著者は次のように反論しました。
「FOST でラヨ関数そのものを記述することはできない。もし記述することができたら、ラヨ数そのものをグーゴル以下の文字数で記述できてしまい、矛盾する」。この議論から、そもそも FOST の定義そのものが矛盾なのではないか、という議論も出ましたが、ラヨ数の定義では 1 つの数を指定しない式は除外されるので矛盾が生じるような式は除外される、という解釈をしました。いずれにしても、FOST 自身のラヨ関数を有効に FOST の中に組み込むことはできない、ということになります。

Googology Wiki では、FOST を強くする方法として神託式 f (a) = b を使うというのはあまりスマートではないので、もっと良い方法もあるのではないか、というような話が進行しました。たとえばある式が真であるという判定をする真理述語 (truth predicate) を入れれば、ラヨ関数を FOSTで記述してその式がある値になる、という式の真偽を判定することができるだろう、というような話になります。ただしタルスキの定理 (Tarski’s

undefinability theorem) によって真偽を判定するような式を定義することはできない、という問題が生じます。実際に、後に出てくるリトルビッゲ
ドンという巨大数は、真理述語を使っています。
いずれにしても、このふぃっしゅ数バージョン 7 を提起したことで、それまでは「ラヨ数よりも本質的に大きな巨大数を考えるのは無理である」という Googology Wiki における雰囲気が崩れて、ラヨ数を超える巨大数を作ろう、という挑戦がされることとなりました。ふぃっしゅ数バージョン 7
は、ビッグフットから先の巨大数が生まれるきっかけとなったと言えます。

15 http://googology.wikia.com/wiki/User blog:Kyodaisuu/English description ofFish numbers

8.7. ビッグフット

8.7

255

ビッグフットGoogology Wiki ユーザーの LittlePeng9 またの名を Wojowu （プロフィールによると居住地はポーランド）が、2014 年に考案したビッグフット (BIG FOOT) 16 17 という巨大数について説明します。
✓【定義】ビッグフット

ウードル理論 FOOT によって n 文字以内で一意に定義される最大の✏自然数を FOOT(n) とする。ビッグフットは FOOT10 (10100 ) である。
✒✑
このビッグフットは、ふぃっしゅ数バージョン 7 よりも大きい数です。ビッグフットの定義を見ると、ラヨ数の定義とよく似ていますが、ラヨ数ではFOST を使っていたところが、Wojowu が考案したウードル理論 (oodle
theory) に変わっています。ウードル理論は、first-order oodle theory とも呼んで、FOOT と略します。一次でもなんでもないのですが、FOOT という略語を作りたかっただけとのことです。
ここで BIG FOOT という名前はサイビアンが提案したものが採用されました。ビッグフット (bigfoot) はアメリカとカナダのロッキー山脈一帯で目撃される未確認動物です。サイビアンが考案した巨大数の名前には、神(god)、怪物 (monster)、巨人 (giant)、古代エジプトの神トート (Thoth) 、宇宙生物クトゥルフ (Cthulhu) などが多く使われています。FOOT から
ビッグフットを連想するのは、サイビアンならではです。
それでは、FOOT について Wojowu のオリジナルの説明と同じように説明をします。FOST の議論領域であるフォン・ノイマン宇宙 V の集まりをクラスとして、クラスに対する変数を導入することで二階集合論 (SOST; second

order set theory) を作ることができます。そしてクラスの上にさらに「スーパークラス」を加えることでさらに高次の理論を作り、というように高めていくことはできるでしょうか。そのような発想で Wojowu が考えたのがFOOT です。FOOT の言語は可算無限の変数とウードル結合子（非論理記号）∈ と =、そしていくつかの標準的な論理記号、たとえば ∃, ∧, ¬ を持っていま
16 http://ja.googology.wikia.com/wiki/ビッグフット

17 First-order oodle theory http://snappizz.com/foot

第8章

256

計算不可能な関数

す。そして、ある変数設定における論理式 x ∈ y, x = y, φ ∧ ψ, ¬φ, ∃x : φ(x)の定義を、標準的な方法で定めています。

ウードルを整礎とするために、ウードルの階数 (rank) を次のように定義します。

• A が空のウードルであれば、A の階数は自分自身である。
• A が階数 B の要素を含み、A のすべての要素の階数が B であるか Bの要素であるときに、A の階数は B ∪ {B} である。

• A が上記のような要素を持たないときには、A の階数はすべての要素の階数の和集合である。

A ∈ B のときに階数 A が階数 B よりも「小さい」とします。そしてウードルの階数をウードル順序数 (oodinal) とします。α ∪ {α} = α + 1 と表記し、そのようなウードル順序数を後続ウードル順序数、後続でないウー
ドル順序数を極限ウードル順序数とします。すべてのウードルは必ず階数を持ちます。「階数が α よりも小さいすべてのウードル」を Vα とすると、ウードル階層 (oodle hierarchy) を次のように定義できます。

• V∅ = ∅• Vα+1 = P(Vα )• Vα =V ===β<α VβVα をウードル宇宙 (oodleverse) とします。ウードル宇宙はすべてのウードルを含みますが、ウードル宇宙自身はウードルではありません。
ここで、FOOT 言語から定義できないほど大きなウードル順序数 Ord をある方法によって定義します（定義は省略します）。そして Ord よりも階数が小さいウードルが「集合」で、Ord の要素が「順序数」であると定義します。この Ord そのものは、FOOT 言語から定義することはできません。そこで、FOOT に Ord という定数記号を加えることで FOOT を拡張します。すると、Ord 記号がない FOOT 言語で扱われている集合は Ord
よりも階数が小さいウードル、すなわち VOrd 内の集合となります。そして

8.8. サスクワッチ

257

そのような集合の集まりは VOrd+1 内のウードルであることから、集合論における真理述語を使うことができます。そのことから FOST におけるラヨ関数を定義できて、二階集合論 (SOST) と同じようなことを記述できます（このことは、後述するように 2016 年末に否定されます）。同様の拡張
CKを Ord + ω, Ord2 = Ord + Ord, Ord2 , OrdOrd , ΓOrd + 1, ωOrd+1, ... と続けることができます。

次に、Ord という記号が入った FOOT で定義可能ないかなる順序数よりも大きな最小のウードル順序数を Ord2 とします。同様に Ord3 , Ord4 , ...
と記号を追加します。次に角かっこ [ ] を導入して、変数 x がウードル αの値をとるときに、[x] はウードル順序数 Ordα を意味するものとします。
そして Ordα を「β < α を満たす β に対して定数記号 Ordβ を使うことができるような、Ordα よりも階数が低いパラメータを含む FOOT 言語で定義できるいかなる順序数よりも大きい最小のウードル順序数」であると定義します。これが FOOT です。そして、この FOOT からビッグフットが定義されます。

FOOT の強さについては、2016 年末に再評価がされました。まず、12月 25 日に Googology Wiki ユーザーの Emlightened が「ビッグフットはふぃっしゅ数バージョン 7 よりも小さい」というブログを書きました。それを受けて、同日にビッグフット考案者の Wojowu が「FOOT は私が考えていたほど大きくなかった」というブログを書きました。そのブログによれば、FOOT は FOST に真理述語を加えた言語と同程度の強さであり、SOST ほどの強さはない（すなわち、上記の説明の中で SOST との比較については誤りであった）、とのことです。一方で FOOT でふぃっしゅ数バー
ジョン 7 の RR を記述できるため、ビッグフットはふぃっしゅ数バージョン 7 よりは大きい、としています。

8.8

サスクワッチ

ビッグフットが「それほどの大きさではない」ことを指摘した Emlightenedが、2017 年 1 月 5 日に Googology Wiki のブログでビッグフットよりも大

258

第8章

計算不可能な関数

きいリトルビッゲドン18 (Little Bigeddon) という巨大数を定義しました。

Emlightened は ϵmli という名前で署名しているので、ここではエミリと呼びます。プロフィールによれば、エミリは女性です。まず集合論の言語に階数変数と真理述語 T を導入した言語 L = {∈, T } を定義しました。その定義は本書では割愛するので、脚注の出典を参照してください。ここで真理述語は階数変数によって階層化されています。そして、リトルビッゲド
ンを次のように定義しました。
✓【定義】リトルビッゲドン

リトルビッゲドンは、以下の条件を満たす最大の k である。

✏

言語 L = {∈, T } で ∃!a(ϕ(a)) ∧ ϕ(k) すなわち「ϕ(a) が真であるような a がただ 1 つ存在し、ϕ(k) が真である」が真となるような、階数が12 ↑↑ 12 以下の 1 変数式 ϕ が存在する。
✒✑

ここで ϕ の文字数を制限しなくても、階数が 12 ↑↑ 12 以下で自由変数が 1個の式は、等価な式を 1 つと数えると有限個となるように、階数が定義されています。
エミリはさらに、2017 年 3 月 27 日にサスクワッチ19 (Sasquatch) またの名をビッグビッゲドン (Big Bigeddon) を定義しました。サスクワッチは¯ , <)
未確認動物ビッグフットの別名です。等号が定義されている言語 (∈, ∈¯ , < と、単項関数 F と R を定義して（定義は出典を参照）、の 2 項述語 ∈, ∈ビッグフットのように「宇宙を拡張する」ような能力を持たせました。そして、サスクワッチを以下のように定義しました。
✓【定義】サスクワッチ¯ , Q} (ここで Q(a, b) ↔ R(a) = b) で ∃!a(φ(a)) ∧ φ(k) を満た
言語 {∈す、階数が 12 ↑↑ 12 以下の 1 変数式 φ が存在するような最大の k を

サスクワッチ（ビッグビッゲドン）とする。
✒
これが現在最強の巨大数と言えるでしょう。

18 http://ja.googology.wikia.com/wiki/リトルビッゲドン
19 http://ja.googology.wikia.com/wiki/サスクワッチ

✏
✑

259

おわりに

ここでは、本書の著者、つまり「私」と巨大数の関わりについて記します。
本書を読んでいる途中の息抜きトピックをここにまとめておくという趣旨です。
私は子供の頃から大きな数に対する関心を持っていて、本文中にも記したように、小学生の時には無量大数までの数の単位を覚えて喜んでいました。とはいえ、無量大数よりも大きな数については、グーゴルについて知っていた程度でした。大学では数学を専門的に学んだわけではないので、本書に書いたような再帰理論や順序数、数学基礎論、数理論理学などについては、何も知識がない状態でした。
その私が、巨大数について探求しようとしたきっかけは、2 ちゃんねる掲
示板というインターネットの掲示板でのことです。2 ちゃんねる掲示板では、話題のジャンルごとに掲示板群「板」が設定され、板の中で話題ごとに立てられる「スレッド」において、会話がなされます。数学の話題を扱う「数学板」の中で、2002 年 6 月 17 日に「一番でかい数出した奴が優勝」というスレッドが立ちました。このスレッドでグラハム数について言及されていたことで、グラハム数の存在を知って、その大きさを想像して驚きました。そこで、グラハム数を超える数をグラハム数とは別の仕組みで定義して、そのスレッドに書き込みました。掲示板の一時的なお遊びだと考えていたので、「ふぃっしゅっしゅ」というふざけた名前で、その数の名前を「ふぃっしゅ数」としました。当時は、巨大数を生み出す関数としては矢印表記とアッカーマン関数だけしか知識がなかったので、その知識を元に作成したのがふぃっしゅ数バージョン 1 です。とにかく複雑にして大きな数を作ろうと考えたので、今から振り返ると無駄に難解な定義となって
います。

おわりに

260

当初はとても軽いノリで考えていましたが、その後「ふぃっしゅ数はどうやって計算するのか」といったことで、スレッドが盛り上がりました。難解だったことが、むしろそういった盛り上がりを誘発した可能性があります。特に、695 さん（のちに巨大数漫画『寿司虚空編』を描くことになる小林銅蟲さん）が計算過程を丁寧に検証し、さらにスレッドにはチェーン表記が紹介され、ふぃっしゅ数とチェーン表記を比較するとどうなるか、といったようなことで、スレッドが盛り上がりました。また、チェーン表
記を回転させるバード数（旧バード数）のサイトが見つけられ、ふぃっしゅ
数とバード数ではどちらが大きいか、というようなことでさらにスレッドが盛り上がりました。そして、この「巨大数探索スレッド」で議論を重ねながら、ふぃっしゅ数の新しいバージョンを考えていきました。2003 年に考案した「ふぃっしゅ数バージョン 5」は自信作となりました。巨大数探索
スレッドでは、順序数やハーディ階層、再帰理論など様々な理論が議論されましたが、当時の私にはまだ十分に理解できていないものがほとんどでした。なお、巨大数探索スレッドは本書を執筆中の今も継続中で、2017 年

1 月 20 日には「巨大数探索スレッド 12」が開始しています。
私の巨大数に関する関心が 2003 年以降で再度高まったのは、2007 年です。巨大数探索スレッドでは、たろうさんが多変数アッカーマン関数の定
義、急増加関数による評価、ふぃっしゅ数バージョン 5 の急増加関数による評価、その他もろもろを書き込みました。すぐには理解できませんでし
たが、掲示板でたろうさんに色々と聞きながら、ようやく理解ができました。そして、11 月 3 日に、東京都の文京区シビックセンターで小林銅蟲さん主催による巨大数勉強会が開かれました（小林銅蟲さんは「もやしっ子」の名前で書き込みをされていましたが、このときに漫画「ねぎ姉さん」の作者であると明かされました）。その勉強会には私も参加し、たろうさんによる順序数の解説や、ポチさんによるヒドラとふぃっしゅ数バージョン 5 の解説があり、私の中で理解が一気に進みました。ちなみに、ポチさんはそのときに「ブーフホルツのヒドラというものもある」と紹介をされましたが、その意味を私が理解するのは何年も後になります。
巨大数探索スレッドでは、このように面白い議論がされていましたが、はじめて巨大数に興味を持った人がスレッドを読んで理解をするのは大変な

おわりに

261

ので、その内容をまとめておきたいと思い、2007 年 9 月 24 日に『巨大数論（まだ書きかけ）』という PDF ファイルを作成してアップしました。2007
年 10 月 27 日には、ふぃっしゅ数バージョン 6 の定義と計算を PDF ファイ
ルに加えました。当時の書きかけ巨大数論では、グラハム数とふぃっしゅ
数バージョン 1 から話が始まり、巨大数探索スレッドで議論がされていた話題を中心にまとめていました。なお、本書のホームページに過去の版がアーカイブされています。その書きかけバージョンは、2009 年 3 月 2 日に一度微修正されたまま、放置されていました。
数年間放置していた巨大数論の執筆を再開しようと思ったきっかけは、

2013 年に小林銅蟲さんの巨大数漫画『寿司 虚空編』が描かれているのを知ったときです。そうです、たしかに 2007 年の巨大数勉強会では「ぜひ、巨大数の漫画を描いてください」と言ったような気はしますが、まさか本
当に連載が開始して話題になるとはびっくりです。話の内容も、第 1 話がグラハム数で第 2 話がふぃっしゅ数と、当時の書きかけバージョン『巨大数論』と同じです。これは、巨大数論をきちんと書かなければ、と思い、10
月 19 日に初版を発行しました。まずは、いきなりグラハム数の話をしても普通は大きさがぴんと来ないので、グラハム数に到達するまでの話を詳し
く記述しました。そして、グッドスタイン数列やヒドラゲームの説明をしました。
その執筆をしているときに、巨大数に関する情報をネットで見てまわっていたところ、Googology Wiki が設立されていることを知り、そこに書かれているクサイ関数やラヨ数についてとりあえずわかった範囲で書きました。そのときに、ラヨ数に神託を組み込むことを考えて、ふぃっしゅ数
バージョン 7 を定義しました。

Googology Wiki ではアカウント Kyodaisuu を取得し、英語で簡単にふぃっしゅ数の説明をしました。すると、海外のグーゴロジストたちの関
心はふぃっしゅ数バージョン 7 がラヨ数を超えるしくみに集まりました。
その議論がきっかけとなり、やがてビッグフットという巨大数が考案され、さらにリトルビッゲドンヘと発展するときにもふぃっしゅ数バージョン 7との比較が良い議論のきっかけとなりました。2013 年末には、Googology

Wiki の日本語版「巨大数研究 Wiki」が開設され、そこで情報を整理しな

262

おわりに

がら、少しずつ海外における巨大数論の発展の様子を理解してきました。
時々、小林銅蟲さん主催の巨大数勉強会に参加しています。
そして、『寿司 虚空編』がきっかけとなって、2014 年以降、関西すうがく徒のつどい、ニコニコ超会議、サイエンス・アゴラ、ロマンティック数
学ナイトなど、巨大数論に関して発表される機会が増えて、巨大数論に対する関心が高まりました。詳しくは、巨大数研究 Wiki の Googol ニュースを参照してください。
巨大数論の第 2 版を発行しようと思ったのは、初版では主に日本の巨大数論、すなわち巨大数探索スレッドで議論されてきた内容が中心であったのに対して、海外における巨大数論の体系が見えてきたことで、それを形にしておきたいと思ったためです。また、巨大数探索スレッドに書き込まれた原始数列やペア数列をはじめとするバシク行列システムについても、記述しておきたいと思いました。このようにして本書は、英語圏における巨
大数論の流れだけではなく、日本における巨大数論の流れ、その中でも特殊かつ複雑な私が考案した「ふぃっしゅ数」の話が組み込まれているため、まとまりがないものとなっています。内容が理解できてくれば、それぞれの関連性が見えてきます。
このように、私がふぃっしゅ数を考案して巨大数を考え始めてから 15 年
かけて少しずつ理解してきた内容や考えてきたことを、その都度書きたい
ように書きためてきたものなので、いきなり本書の内容をすべて理解するのは難しいかもしれません。特に、後半の内容は専門的に高度な内容が含まれていて、私自身にとっても難しいです。すぐに読んでわからないとこ
ろは、またしばらくして読み直すと、わかるときがあるかもしれません。式を目で追うだけでなく、紙と鉛筆を使って自分の手でいろいろと計算をしてみることで、わかったという人も多いです。
なにか新しいことが「わかる」ということは、とても楽しいものです。私自身が、巨大数論と関わる中で何度も「なるほど」と思うときがあったよ
うに、本書を読んだみなさまが、何か 1 つでも「なるほど」とか「これは面白い」と感じていただけることがあれば、本書を世に出した甲斐があったと考えます。

263

巨大数年表

日付

出来事

287 - 212 BC 頃

アルキメデスが『砂粒を数えるもの』で108·10

16

ページ

p.28

まで定義

1〜7 世紀華厳経に不可説不可説転の記載

p.31

1299 年

朱世傑『算学啓蒙』で極以上の命数法が初

p.15

めて登場

1484 年

シュケがヨーロッパ系言語ではじめて「〜p.18

リオン」という接尾語で数の名称を体系的かつ非常に大きな桁まで命名

1631 年

吉田光由の『塵劫記』で無量大数までの数

p.13の体系ができる

1904 年

ハーディ階層の定義

p.126

1908 年

ヴェブレン関数の定義

p.178

1920 年

グーゴルの命名

p.19

1928 年

アッカーマン関数の発表

p.65

1933 年

第 1 スキューズ数が論文に登場

p.39

1938 年

エディントンが宇宙に存在する全陽子の数

p.18

1944 年1947 年が 136 × 2256 個であると議論
グッドスタイン数列の定義

p.154

グッドスタインがテトレーション、ペンテー

p.49

ション、ヘキセーションの命名

1950 年

シャノン数の計算

p.21

巨大数年表

264

日付

事項

ページ

1950 年

スタインハウスの多角形表記の発表（初出

p.72

不明）

1953 年

グジェゴルチクとリトルウッドが、それぞp.131

れ急増加関数の元となる関数を定義

1955 年

第 2 スキューズ数が論文に登場

p.39

1957 年

竹内外史の順序数図形

p.186

1962 年

ラドのビジービーバー関数

p.239

1971 年

グラハムが、今では小グラハム数と呼ばれp. 75

る数を論文で使用

1975 年

フリードマンが逆数学を提唱

p.194

1976 年

クヌースが矢印表記を考案

p.108

1977 年

ガードナーが現在グラハム数として知られ

p. 75

る数を紹介

1980 年

グラハム数がギネス世界記録で「数学の証p.75

明で使われた最大の数」として掲載

1982 年

カービーらのヒドラゲーム

p.156

1987 年

ブーフホルツのヒドラゲーム

p.216

1994 年

リンデの確率過程的インフレーション宇宙

p.40のポアンカレ時間が 1010

1010

101.1

年である

と計算

1995 年

コンウェイのチェーン表記

p.76

1996 年

ムナフォが巨大数のホームページを作成

p.11

2000 年 6 月 1 日

フリードマンの超越整数

p.229

2001 年 12 月

巨大数ベイクオフ大会でローダー数のプロ

p.226

グラムが優勝

2002 年

バウアーズの配列表記と拡張配列表記

p.108

巨大数年表

265

日付

出来事

ページ

2002 年 6 月 29 日

ふぃっしゅ数バージョン 1 の定義（2002p.87

年にバージョン 4 まで）

2003 年 3 月 10 日

ベクレミシェフの虫

p.160

2003 年 3 月 13 日

小林銅蟲が巨大数研究室を開設

p.44

2003 年 4 月 5 日

ふぃっしゅ数バージョン 5 の定義

p.151

2006 年

バードが配列表記を考案し、5 変数配列

p.114

表記がチェーン表記を超えると証明

2006 年 4 月 8 日

フリードマンがサブキュービックグラフ

p.215

数を定義

2007 年

バウアーズが BEAF を開発

p.170

2007 年 1 月 26 日

ラヨ数の定義p.248

2007 年 9 月 24 日

『巨大数論』の書きかけバージョン

p.260

2007 年 10 月 17 日

多変数アッカーマン関数の定義

p.81

2007 年 10 月 27 日

ふぃっしゅ数バージョン 6 の定義

p.201

2008 年 3 月

バウアーズがミーミーミーロッカプーワ・ p.221
ウンパを定義2008 年 12 月 5 日
2008 年 12 月 9 日

Googology Wiki の開設
サイビアンが巨大数の Web 書籍を公開

p.44
p.34

2009 年 9 月 2 日

フリードマンが有限約束ゲームを定義

p.232

2010 年 1 月 1 日

フリードマンが欲張りクリーク列を定義

p.234

2011 年 5 月 9 日

拡張チェーン表記の定義

p.86

2012 年 3 月 16 日

タラノフスキーの C 表記

p.200

2012 年 11 月 25 日

Aeton が巨大数動画の制作開始

p.77

2013 年 1 月 6 日

ガウチャーがクサイ関数を定義

p.244

2013 年 6 月 5 日

Wythagoras がドル関数を定義

p.149

巨大数年表

266

日付

出来事

ページ

2013 年 9 月 11 日

小林銅蟲『寿司 虚空編』が裏サンデーの

p.44

U-2 リーグで連載開始
2013 年 10 月 19 日 『巨大数論』初版でふぃっしゅ数バージョ

p.251

ン 7 の定義2013 年 11 月 10 日

Hyp cos の R 関数シリーズ

p.224

2013 年 12 月 5 日

巨大数研究 Wiki の開設

p.44

2014 年 8 月 14 日

バシク行列の元となる原始数列とペア数

p.222

列のプログラムの発表

2014 年 10 月 30 日

Wojowu がビッグフットを定義

p.255

2015 年 4 月 13 日

『寿司 虚空編』の連載が pixiv コミック

p.44

で再開

2015 年 4 月 26 日

ニコニコ超会議で巨大数の発表

p.262

2015 年 7 月 9 日

Hyp cos が強配列表記を定義

p.224

2016 年 9 月 6 日

鈴木真治『巨大数』の出版

p.44

2017 年 1 月 4 日

フィッシュ『巨大数入門』の出版

p.6

2017 年 1 月 5 日
2017 年 3 月 27 日

Emlightened がリトルビッゲドンを定義
Emlightened がサスクワッチ（ビッグビッ

p.257
p.258

ゲドン）を定義2017 年 6 月 29 日

フィッシュ『巨大数論』2 版（本書）出版

2017 年 8 月 10 日

小林銅蟲『寿司 虚空編』単行本出版

2018 年 3 月 15 日

第 2 回東方巨大数開催

2018 年 3 月 20 日

POD 個人出版アワードで本書が審査員特別賞（窓の杜賞）を受賞

p.44
p.6

http://gyafun.jp/ln/
PDF

07

2

8
http://gyafun.jp/ln/
9
R&D
POD
https://open.nextpublishing.jp/author/
ISBN 978-4802093194© 2017-2018.

8

9 8
4.0
9
2
3 1
6
https://creativecommons.org/licenses/by-sa/4.0/deed.ja-