巨大数論 - Gyafun!

巨大数論
2 版β
2016 年 6 月 21 日
3
=
∧
3 3 =
3
27
3∧ 3∧ 3
≈
10∧ 12.88
3∧ 3∧ 3∧ 3
≈
10∧ 10∧ 12.56
3∧ 3∧ 3∧ 3∧ 3
≈
10∧ 10∧ 10∧ 12.56
3∧ 3∧ 3∧ 3∧ 3∧ 3
≈
10∧ 10∧ 10∧ 10∧ 12.56
3∧ 3∧ 3∧ 3∧ 3∧ 3∧ 3
≈
10∧ 10∧ 10∧ 10∧ 10∧ 12.56
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
3∧ 3∧ 3∧ 3∧ 3∧ 3∧ 3∧ 3∧ 3∧ 3∧ 3
≈ 10∧ 10∧ 10∧ 10∧ 10∧ 10∧ 12.56
≈ 10∧ 10∧ 10∧ 10∧ 10∧ 10∧ 10∧ 12.56
≈ 10∧ 10∧ 10∧ 10∧ 10∧ 10∧ 10∧ 10∧ 12.56
≈ 10∧ 10∧ 10∧ 10∧ 10∧ 10∧ 10∧ 10∧ 10∧ 12.56
3∧ 3∧ 3∧ 3∧ 3∧ 3∧ 3∧ 3∧ 3∧ 3∧ 3∧ 3
≈
10∧ 10∧ 10∧ 10∧ 10∧ 10∧ 10∧ 10∧ 10∧ 10∧ 12.56
3∧ 3∧ 3∧ 3∧ 3∧ 3∧ 3∧ 3∧ 3∧ 3∧ 3∧ 3∧ 3
≈
10∧ 10∧ 10∧ 10∧ 10∧ 10∧ 10∧ 10∧ 10∧ 10∧ 10∧ 12.56
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∧ 3∧ 3
≈ 10∧ 10∧ 10∧ 10∧ 10∧ 10∧ 10∧ 10∧ 10∧ 10∧ 10∧ 10∧ 12.56
≈ 10∧ 10∧ 10∧ 10∧ 10∧ 10∧ 10∧ 10∧ 10∧ 10∧ 10∧ 10∧ 10∧ 12.56
3∧ 3∧ 3∧ 3∧ 3∧ 3∧ 3∧ 3∧ 3∧ 3∧ 3∧ 3∧ 3∧ 3∧ 3∧ 3 ≈
ふぃっしゅっしゅ
10∧ 10∧ 10∧ 10∧ 10∧ 10∧ 10∧ 10∧ 10∧ 10∧ 10∧ 10∧ 10∧ 10∧ 12.56
3
目次
第 1 章 はじめに
5
第 2 章 原始帰納関数
7
クラス 2 の巨大数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7
2.1.1
数のクラス分け . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7
2.1.2
無量大数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8
2.1.3
2.1.4
グーゴル . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
数の比較 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
10
13
2.2
クラス 3 の巨大数 - 不可説不可説転とグーゴルプレックス . . . . . . . . . . . . . . . . . .
14
2.3
クラス 4 の巨大数 - 第 2 スキューズ数
. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
16
2.4
クラス 5 以上の巨大数 - ベントレー数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
18
2.5
矢印表記とハイパー演算子 - トリトリ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
20
2.6
グッドスタイン数列
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
28
2.7
原始帰納関数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
30
2.1
第 3 章 2 重帰納関数
33
3.1
アッカーマン関数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
33
3.2
2 重帰納関数
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
34
3.3
モーザー数
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
36
3.4
グラハム数
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
37
3.5
コンウェイのチェーン表記 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
38
第 4 章 多重帰納関数
42
4.1
多重帰納 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
42
4.2
多変数アッカーマン関数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
42
4.3
多重帰納に見えてそうでない関数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
43
4.4
拡張チェーン表記 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
44
4.5
ふぃっしゅ数バージョン 1 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
46
4.6
ふぃっしゅ数バージョン 2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
54
4.7
バード数から配列表記へ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
56
4.8
ふぃっしゅ数バージョン 3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
61
第 5 章 順序数と急増加関数
64
5.1
5.2
多重帰納を超えて . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
順序数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
64
64
5.3
カントールの標準形
69
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4
5.4
ハーディー階層 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
70
5.5
急増加関数
73
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
第 6 章 カントール標準形レベルの帰納関数
78
6.1
カントール標準形レベルの帰納関数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
78
6.2
ドル関数の角括弧表記 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
79
6.3
ふぃっしゅ数バージョン 5 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
81
6.4
ヒドラゲーム . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
84
6.5
6.6
原始数列数
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
多重リストアッカーマン関数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
87
92
6.7
バードのネスト配列表記 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
94
6.8
BEAF のテトレーション配列 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
94
6.9
巨大数生成プログラム . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
97
第 7 章 帰納関数
99
7.1
ζ0 以下の順序数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.2
ふぃっしゅ数バージョン 6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
7.3
ヴェブレン関数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
7.4
バッハマン・ホワード順序数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
7.5
さらに大きな順序数
7.6
タラノフスキーの順序数記法 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
7.7
多変数 C0 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
7.8
バード数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
7.9
サブキュービックグラフ数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
99
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
7.10 R 関数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
7.11 ブーフホルツのヒドラ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
7.12 バシク行列システム . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
7.13 ミーミーミーロッカプーワ・ウンパ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
7.14 ローダー数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108
第 8 章 計算不可能な関数
109
8.1
ビジービーバー関数
8.2
ふぃっしゅ数バージョン 4 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110
8.3
ビジービーバーのハーディー的拡張 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
8.4
クサイ関数
8.5
ラヨ数 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
8.6
ふぃっしゅ数バージョン 7 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
8.7
ビッグフット . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
付 録 A 巨大数年表
114
付 録 B 索引
116
5
第 1 章 はじめに
私たちが日常生活で使う大きな数は、たとえば世界の人口が 70 億人を突破したとか、国家予算が 200 兆
円であるといったように、100 兆=10 の 14 乗程度までです。その上の単位である京(けい)を知っていて
も、さらにその上の垓(がい)といった単位を使うことはめったにありません。日本語の数の単位は、一、
十、百、千、万、億、兆、京、垓…と 10 の 68 乗の無量大数まで続きます。
科学の世界では、たとえば 1 モルに含まれる要素粒子の数を表すアボガドロ数という数は、約 6023 垓に
なります。物理的に意味のある非常に大きな定数としては、エディントン数という数があります。これは全
宇宙にこの数の陽子があるとしたもので、2 の 256 乗の 136 倍で、10 の 79 乗のオーダーになり、無量大数
までの数の単位の体系では命名できなくなります。「天文学的数字」という表現がありますが、天文学の世
界でも、エディントン数よりも大きい数を扱うことはまずありません。
ところが、それよりもさらに大きな数が仏教の経典には書かれているとのことです。経典に書かれてい
る不可説不可説転という数の大きさを計算すると、10 の 37218383881977644441306597687849648128 乗と
いうとてつもない大きな数になります1 。「不可説不可説転メートル」がどれくらい長い距離なのか、ある
いは「不可説不可説転秒」がどれくらい長い時間なのか、想像をすることすら不可能です。さらに、古代ギ
リシャでは、アルキメデスが「宇宙を砂粒を埋め尽くすためには何粒の砂粒が必要か」という計算をするた
めに、10 の 80000000000000000(8 京) 乗までの数の単位を考えました。ただし、計算に実際に使われたの
は 10 の 63 乗まででしたので、とにかく大きな数まで名付けておきたかったのでしょう。そのような太古
の昔からそれだけ大きな数が考えられていた、ということからも分かるように、人々は古くから大きな数に
魅了されてきました。
20 世紀に入ると、数学者が著書に書いたグーゴルやグーゴルプレックスという大きな数が紹介され、や
がてプロの数学者が書いた書物を読んだ数学愛好家の中に、巨大数の魅力にとりつかれて独自に拡張した
巨大数を考える人たちが出てきました。巨大数には、プロの数学者が数学の専門的な問題を解く時に副産
物として出てきたいわゆる「正統派巨大数」(グラハム数やスキューズ数)と、単純に大きな数を目指した
「お遊び系巨大数」があります。お遊び系の巨大数は、プロの数学者が趣味で開発したもの(コンウェイの
チェーン表記やスタインハウス・モーザー表記など)もありますが、多くはアマチュアの数学愛好家が定義
したものです。
このような巨大数を考えるアマチュアの数学愛好家は、当初はそれぞれが孤立して独自の考え方で巨大数
を定義していました。やがて、インターネットでロバート・ムナフォ氏の Large Numbers
2
というサイト
を発端に、巨大数に関する情報が整理・集約されてきました。巨大数の議論はインターネット上で白熱し、
特に 21 世紀に入ってから、様々なアマチュアの数学愛好家たちが「どれだけ大きな数を考えることができ
るか?」という議論をしてきました。中でも、「現代巨大数論の父」と言われるジョナサン・バウアーズ氏
は、難解な BEAF という巨大数を生み出すシステムを開発しただけではなく、その BEAF によって定義さ
1 無量大数の彼方へ
2 Large
http://www.sf.airnet.ne.jp/˜ts/language/largenumber.html
Numbers (Robert Munafo) http://www.mrob.com/pub/math/largenum.html
第1章
6
はじめに
れる巨大数に、たくさんの面白い名前をつけました。巨大数愛好家の中には、BEAF の定義はよく分からな
いけど、そういった面白い名前の巨大数を眺めて楽しむ、といったような人たちもたくさん出てきました。
日本では、2002 年からインターネットの「巨大数探索スレッド」3 で、巨大数探索が繰り広げられてき
ました。その中では新しい数学の概念を少しずつ取り入れながら議論が発展し、多変数アッカーマン関数、
ふぃっしゅ数、バシク行列などが生まれました。本書の著者は、ここに「ふぃっしゅ数」というお遊び系巨
大数を書き込んで、巨大数に関する議論が活発になるきっかけを作った者です。
2013 年には、日本の巨大数コミュニティーでいろいろな出来事がありました。1 月には、ニコニコ動画で
巨大数動画シリーズを作成している Aeton さんが巨大数資料 Wiki を開設しました。9 月には、小林銅蟲さ
んによる「寿司 虚空編」という巨大数漫画が連載を開始しました4 5 。小林さんは「巨大数探索スレッド」
で 2002 年からずっと熱心に「695」「旧 695」「もやしっ子」という名前で書き込みをされてきた方で、巨
大数探索スレッドの議論をまとめた巨大数研究室のサイト6 を管理されています。本書の著者は「寿司 虚
空編」のキャラクターとしても登場します。本書とともに「寿司 虚空編」を読んでいただくと、より巨大
数の理解が深まることと思います。 10 月には本書「巨大数論」の初版を公開しました。そして、12 月には
Googology Wiki という巨大数の情報を集めた百科事典サイト
7
の日本語版「巨大数研究 Wiki」
8
が立ち
上がり、日本語での巨大数情報整理が始められました。
本書では、章が進むにつれてより大きな巨大数が出て、それとともにより高度な数学的概念を使うよう
な構成となっています。特に、第 5 章からは現代巨大数論の必須ツールである順序数という概念を取り入れ
るため、数学を専門としている人でなければ難しく感じると思います。順序数が分からなくても読めるよう
に、第 4 章までは順序数の概念を使わずに記述しましたが、やっていることは段々複雑になるので、何が書
いているのか分からなくなってくることもあると思います。しかし、すぐに全部分からないからといって悲
しがる必要はありません。巨大数論は基本的に「何の役にも立たない」ことを旨としていますので、分かっ
てもお金は儲かりませんし、分からなくても学校の成績や健康や仕事の成果には悪い影響は何もないから
です。最初は軽く読み飛ばしながらでも、何か少しでもなるほどと思ってもらえるところがあれば良いと思
います。笑いはありませんので「寿司 虚空編」で補給してください。
本書は、ホームページ9 から最新バージョンの PDF ファイルをダウンロードできます。本書の初版発行
時からは、いくつか著者の理解が深まったところがありますので、そのような内容を若干加筆して、2 版を
発行することとしました。まずは、β版を発行して少しずつ内容を更新していきます。β版は更新日で版を
区別します。β版では、初版からの更新箇所を青字で記して(細かい修正は除く)、β版ではない 2 版の正
式版を出すときに、青字をすべて黒字に戻します。本書に対するご意見ご感想、数学的な誤り、計算間違
いや誤植等の指摘は、著者のツイッターアカウント @kyodaisuu
Wiki の著者のメッセージウォール
3 巨大数研究
11
10
へのメンション、あるいは巨大数研究
宛にお願いします。
Wiki - 巨大数探索スレッド http://ja.googology.wikia.com/wiki/巨大数探索スレッド
コミック「寿司 虚空編」 http://comic.pixiv.net/works/1505
5 巨大数研究 Wiki - 寿司 虚空編 http://ja.googology.wikia.com/wiki/寿司 虚空編
6 巨大数研究室 http://www.geocities.co.jp/Technopolis/9946/
7 Googology Wiki http://googology.wikia.com/
8 巨大数研究 Wiki http://ja.googology.wikia.com/
9 巨大数論(本書)のホームページ http://gyafun.jp/ln/
10 著者のツイッターアカウント https://twitter.com/kyodaisuu
11 巨大数研究 Wiki @kyodaisuu メッセージウォール http://ja.googology.wikia.com/wiki/Message Wall:Kyodaisuu
4 pixiv
7
第 2 章 原始帰納関数
2.1
2.1.1
クラス 2 の巨大数
数のクラス分け
本章では、原始帰納関数で表現できる数を取り上げます。原始帰納関数の説明に入る前に、具体的に大
きな数について考えます。ロバート・ムナフォ (Robert Munafo) は、Large Numbers
1
のページで、様々
な巨大数について紹介し、考察しています。その説明に従って、段階的に大きな数について記します。ムナ
フォ氏は、数の大きさをクラス分けして、クラス 0 の数、クラス 1 の数、クラス 2 の数、クラス 3 の数…
と分類しました。日常生活で使う数は、クラス 2 の数までです。さらに、無量大数やグーゴルといった有名
な巨大数も、クラス 2 になります。そこで、本節ではクラス 2 の数までについて見てみます。
クラス 0 の数 (0-6) : クラス 0 は、カウフマンが提唱した subitizing という概念で2 、即座に認識出来る
数です。たとえば、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 万としました。
6
クラス 2 の数 (106 − 1010 ) : クラス 2 は、10 進数で記録できる数です。クラス 0 の 6 からクラス 1 の
6
106 = 1000000 へと増やしたように、分かりやすくクラス 2 は 1010 = 101000000 までとされました。ここ
で、指数を 2 つ以上重ねた時には、右上から順番に計算する、ということに気をつける必要があります。つ
6
まり、1010 = 10(10
6
)
です。左から順番に計算すると、(1010 )6 = 1010×6 = 1060 となって、指数が掛け算
になってしまいますから、右から計算した場合と比べてとても小さい数になります。クラス 2 は、100 万桁
までの数字で記録出来る数ということです。クラス分けの境界は、全体として大ざっぱなものです。子供
1 再掲:
Large Numbers (Robert Munafo) http://www.mrob.com/pub/math/largenum.html
et al. (1949). ”The discrimination of visual number”. American Journal of Psychology 62 (4): 498-525.
http://dx.doi.org/10.2307/1418556
2 Kaufman
第 2 章 原始帰納関数
8
に「できるだけ大きな数を書いてごらん」と言って紙を渡せば、多くは「999999…」と書き続けるでしょう
(111111…と書く方が楽ですが)。根性のある子供でも 100 万桁はなかなか書き続けられないと思います。
何桁記録出来るのかは、どこにどのように記録するのかにもよります。パソコンにデータを保存するのは
簡単なので、100 万桁よりもずっと大きな桁数を保存出来ます。ここでは、紙と鉛筆でものすごく頑張れば
10 進数表記で書ける数、と解釈すると、100 万桁という上限がちょうどいい感覚になりそうです。
2.1.2
無量大数
まずは、日本での大きな数の数え方について記します。それから、その由来となった中国とインドにさか
のぼって調べたところを記します。
私達が日常生活で扱う数は、クラス 2 の数までです。したがって、日常生活で使う数字に関する言葉も、
だいたいこの範囲の言葉になります。そこでまずは、日本語での数の数え方から見ていきます。それから、
その源泉をたどって中国、インドの数について見ます。数の位は、一、十、百、千、万と 10 倍ずつになり、
その先は 1 万倍ずつ、億 = 108 、兆 = 1012 、京(けい)= 1016 、垓(がい)= 1020 、杼(じょ、この漢字は、
正しくは禾偏)= 1024 、穣(じょう)= 1028 、溝(こう)= 1032 、澗(かん)= 1036 、正(せい)= 1040 、
載(さい)= 1044 、極(ごく)= 1048 、恒河沙(ごうがしゃ)= 1052 、阿僧祇(あそうぎ)= 1056 、那由
他(なゆた)= 1060 、不可思議(ふかしぎ)= 1064 、 無量大数(むりょうたいすう)= 1068
3
となります。
垓以上の単位を日常生活で使うことはめったになく、特に意識しなければ知らない人も多いでしょう。著者
は、子供の頃から数字が好きだったので、父に教えてもらって無量大数までの桁を覚えて喜んでいました。
当時は無量大数は 1088 であると覚えていて、これは恒河沙から上は 108 ずつ増える万万進という方式に基
づいていたためですが、現在は万進に統一されていますので、正しくは 1068 になります。すなわち、1627
年に初版が出た吉田光由の『塵劫記』では、寛永 8 年版 (1631) で無量大数が 1068 または 1088 として紹介
され、寛永 11 年版 (1634) では 1068 のみに統一されているため、現在では 1068 に統一されていると考える
ことができます。
【定義】無量大数
無量大数 = 1068
さて、高杉親知氏の作成した「無量大数の彼方へ」4 というサイトによれば、昔の中国では、後漢の時代
に載までの単位が記されていて、億以上の単位については、
「下数」「中数」「上数」の3つの体系があり、
さらに「中数」には「万進」「万万進」という体系があって、合計4つの体系それぞれで、同じ言葉でも表
す数字が違っていました。下数では、次の単位では 10 倍になるため、万=104 、億=105 、兆=106 と、少し
ずつ上がり、載=1014 になります。中数では、万進では 1 万倍ずつ、万万進では 1 億倍ずつ上がります。し
たがって、万進の兆は現在の日本と同じ 1012 になるのに対して、万万進では「万億」が 1012 になります。
そして、万万進の兆は 1016 で、万進の京と同じになります。載は、万進では 1044 、万万進では 1080 になり
ます。中国では、万進と万万進が統一されずに近代化が進んだので混乱が生じましたが、日本では、万進の
表記に統一されたので混乱がありません。
下数よりも中数よりも、飛躍的に数の増加が大きいのが 上数 です。上数では、単位を 2 乗すると次の単位
3
4
になります。したがって、億=108 = 102 、万億=1012 、千万億=1015 、兆=102 = 1016 、万兆=1020 、億兆
3 巨大数研究
4 再掲:
Wiki - 無量大数 http://ja.googology.wikia.com/wiki/無量大数
無量大数の彼方へ http://www.sf.airnet.ne.jp/˜ts/language/largenumber.html
2.1. クラス 2 の巨大数
9
5
=1024 、万億兆=1028 、千万億兆=1031 、京=102 = 1032 、億京=1040 、兆京=1048 、億兆京=1056 、万億兆京
6
7
8
9
=1060 、垓=102 = 1064 、千万億兆京垓=10127 、杼 = 102 = 10128 、穣=102 = 10256 、溝=102 = 10512 、
澗=102
10
= 101024 、正=102
11
= 102048 、 載=102
12
= 104096 、千万億兆京垓杼穣溝澗正載=108191 と、現
在の定義である無量大数とは比べ物にならないほどの大きな数になります。それでも、指数の部分が 100 万
に達していないので、まだクラス 2 です。
載よりも上の単位、極から上は、元の朱世傑による『算学啓蒙』において登場しました。ここで、極以
外の単位はすべて仏教から取られたものです。 恒河沙は「ガンジス川の砂」の意味 で、それだけ大きな数
ということです。阿僧祇は「数えることができない」、那由他は「極めて大きな数量」、不可思議「思い測っ
たり言葉で言い表したりすることができない」無量大数は、
『算学啓蒙』では「無量数」として登場し、
「量
ることのできない数」ということです。
この中で、恒河沙以外は「数え切れないほどの大きな数」と理解すれば良いのですが、恒河沙について
は、ガンジス川の砂の数という具体的な数になっているので、どの程度の大きさなのか見積もってみます。
今は、恒河沙と言えば日本では 1052 という意味になり、中国でも下数、中数、上数によって数は変わりま
す。仏教の中ではそういう数字を意味するものではなく、ガンジス川の砂の数という意味ですから、今の日
本で恒河沙を意味する 1052 と比較することは無意味です。
まずは、ガンジス川の大きさと砂粒の大きさを考える必要があります。Wikipedia によれば、全長は 2525km
とされています。川幅は数 km なので 4km 程度と考えて、面積を 10000km2 とします。深さをどこまで取
るのかは分かりませんが、仮に 1m の深さまで考えると、体積は 10km3 になります。問題は、砂の大きさで
す。砂は粒子の直径が 0.05-2mm のもので、それよりも小さい直径のものはシルトあるいは粘土と言われま
す。当時のインドにはそのような概念はなかったのでしょうから、全部ひっくるめて砂と呼ばれていたこと
でしょう。そうすると、現在では非常に小さくて粘土と呼ばれていたような粒子のものも、砂に含めて考え
るのかどうか、これによって値はだいぶ変わってきます。ここでは、暫定的に直径が 0.1mm であると考え
ます。次に、充填率を考える必要がありますが、充填率が低くて 50%であったとしても、充填率が 100%で
あると仮定して計算したときの 2 倍程度の誤差なので、これは許容誤差であると考えて充填率 100%でざっ
くりと計算すると、10km3 = 1010 m3 の中に 0.001mm3 = 10−12 m3 の粒子を隙間無く埋めた時の粒子の個
数なので、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 年
という計算結果を出しました。磐石劫でも芥子劫でも同じ杼の単位になるのは面白いところです。宇宙の年
5 生活の中の仏教用語「劫」
(木村宣彰)
http://www.otani.ac.jp/yomu page/b yougo/nab3mq0000000r5r.html
http://d.hatena.ne.jp/inyoko/20111015/How long is kalpa2
7 けし粒はいつなくなる http://d.hatena.ne.jp/inyoko/20111008/How long is kalpa
6 天女が岩をなでたなら
第 2 章 原始帰納関数
10
齢は 138 億年程度であるとされていますので8 、それと比べて 100 兆倍ほどの気の遠くなるほど長い時間で
す。恒河沙という数と劫という時間の単位を組み合わせれば、恒河沙劫というとても長い時間が表現出来ま
すので、そういう表現があるか検索してみたところ、『首楞厳経』という経典に恒河沙劫という表現が出て
来て、親鸞が『尊号真像銘文』で引用していることが分かりました9 。恒河沙劫は、1022 × 1024 = 1046 年
=100 載年のオーダーになります。
2.1.3
グーゴル
次に、インド、中国由来の数以外の巨大数について見ます。
大きな数を表す言葉として、上記の億、兆…といった単位の他には、キロ (k, kilo-, 103 )、メガ (M, Mega-,
106 )、ギガ (G, Giga-109 )、テラ (T, Tera-1012 ) といった単位の頭につける接頭辞もあります。単位の頭に
これらの接頭辞をつけることで、キロメートル、キログラム、メガバイト、Mbps(メガビットパーセカン
ド)、メガピクセル、ギガバイト、テラバイトなどという単位ができます。なお、ハードディスク等の記憶
容量を表す時には、1 キロが 1000 ではなく 210 = 1024 を意味することがあるので、注意が必要です。こ
れは、コンピュータは 2 進数を基本としているので、1000 よりも 1024 の方が切りの良い数だからです。
1000 と 1024 は 2.4%の差なので誤差として考えられたためですが、近年は記憶容量が増加してテラバイ
ト (TB) というような大きさも使われていますので、10 進数との差は大きくなります。10 進数でテラは
1012 = 1, 000, 000, 000, 000 ですが、2 進数のテラは 240 = 1, 099, 511, 627, 776 なので、誤差は 10%ほどに
なります。その分容量が多いので得をしているわけですが、あえて 10 進数表記をすることで、容量を大き
く見せることもできます。さて、テラの上の接頭辞は、国際単位系の SI で、ペタ (P, Peta-1015 )、エクサ
(E, Exa-1018 )、ゼッタ (Z, Zetta-1021 )、 ヨッタ (Y, Yotta-1024 ) と定められています。現実に使う大きさ
としては、杼=1024 程度が上限であると考えられているということでしょう。
現実世界の現象をあらわす数字としては、どの程度の数字が最大となるのでしょうか。
「天文学的数字」と
いう表現があるように、天文学では広大な宇宙のことを取り扱うため、非常に大きな数字が使われます。
「ガ
ンジス川の砂の数」と言った時には、とても広いガンジス川にある、とても小さい砂粒の数なので、非常に
大きな数になりました。広い方の限界として宇宙の大きさ、小さい方の限界としては、素粒子の大きさを考
えることになるでしょう。その両方の限界を取ると、宇宙に存在する素粒子の数はいくつか?という疑問に
なります。エディントンは、1938 年にケンブリッジ大学のトリニティ・カレッジでの講義 (Tarner Lecture)
で、宇宙に存在する全陽子の数が正確に 136 × 2256 個あり、全電子数も同じ数だけある、としました。こ
れが、 エディントン数 (Eddington number)
10 11
と呼ばれています。10 進数に直すと、1.574... × 1079 程
度です。現在では、陽子の数はもっと多いとされています。陽子よりも小さい素粒子の単位で考えると、そ
の数は 1080 − 1085 程度であるとされています。現実には、10 進数で書いた時に 100 桁以上の数を扱うこと
はなさそうです。
英語では、million, billion のように、
「∼リオン」という接尾語が使われています。このように、ヨーロッ
パ系の言語で「∼リオン」という接尾語で数の名称を体系的かつ非常に大きな桁まで名付けた最初の論文
は、フランスの数学者ニコラ・シュケ (Nicolas Chuquet) が書いた Triparty en la science des nombres と
8 Universe
as an Infant: Fatter Than Expected and Kind of Lumpy (New York Times) http://nyti.ms/YrtRRV
ノート:首楞厳経 http://bit.ly/1b4Myz9 (labo.wikidharma.org)
10 巨大数研究 Wiki - エディントン数 http://ja.googology.wikia.com/wiki/エディントン数
11 MathWorld - Eddington Number http://mathworld.wolfram.com/EddingtonNumber.html
9 WikiArc:
2.1. クラス 2 の巨大数
11
いう古いフランス語で書かれた論文であるとされています12
13
。この論文は Chuquet の生きている間に
は出版されず、1520 年に Estienne de La Roche が l’Arismetique という教科書で出典を記さずにコピーし
ました。1870 年に、Aristide Marre が Chuquet の原稿を発見して、1880 年に刊行しました。その原稿に
は、Roche の手書きメモがあったようです。その論文は大きな数字を 6 桁ずつに区切って、そのグループ
を million, byllion, tryllion, quadrillion, quyillion, sixlion, septyllion, ottyllion, nonyllion のように好きな
だけ名付けることができる、としています。この数え方だと、nonyllion が 1054 になります。
現代の英語の大きな数の表記は、この Chuquet システムが元となっていますが、million よりも上の数
について、オリジナルの 6 桁ごとに名前をつけるシステムだけではなく、3 桁ごとに名前がつけられるシス
テムがあります。つまり、million は 100 万を意味しますが、その上の billion は 10 億をあらわす場合と 1
兆をあらわす場合があります。現在は、billion が 10 億をあらわすショートスケールが主流になっています。
Billion が 1 兆をあらわすロングスケールは、かつてイギリスで使われていましたが、現在はイギリスでも
ショートスケールが基本です。ただし、ヨーロッパ大陸や南米の英語以外の言語圏では、ロングスケールが
使われているところもあります。たとえば、Chuquet の母語であるフランス語では今でも billion が 1 兆で
trillion が百京のロングスケールのままです。ショートスケールとロングスケールの関係は、ちょうど万進
と万万進の関係のようなもので、ショートスケールが千進、ロングスケールが千千進と言えば分かりやす
いと思います。つまり、million から先、billion, trillion, quadrillion, … と進んで行くごとに、ショートス
ケールでは千倍、ロングスケールでは千千倍、つまり 100 万倍になります。
数の一覧は Wikipedia にまとめられていますが14 、vigintillion=1063 (ロングスケールでは 10120 ) までは
千倍ずつ一通りの単位が書かれていて、次にいきなり センティリオン (centillion) = 10303 (ロングスケー
ルでは 10600 )15 になっています。また、それとは別に グーゴル googol=10100
16
と googolplex=1010
100
が
書かれています。Googolplex はクラス 2 ではないので、クラス 2 の中では最大は centillion です。
【定義】グーゴル
グーゴル = 10100
グーゴルとグーゴルプレックスの語源は数学者エドワード・カスナー (Edward Kasner) 17 らの Mathematics
and the Imagination
18 19
。という本に、次のように書かれています。カスナーの甥であるミルトン・シ
ロッタ (Milton Sirotta) が 9 歳の時に考えた数字で、ミルトンは 1911 年生まれなので 1920 年にグーゴル
が生まれたことになります。
知恵の言葉は科学者よりむしろ子供たちから発せられる。
「グーゴル」という名前は子供(カス
ナー博士の 9 歳の甥)によって発明された。彼は、とても大きい数、つまり 1 の後に 0 が 100
個続く数の名前を考えて欲しいと頼まれた。彼は、この数字が無限ではないことをはっきりと
分かっていたので、名前がなければなければならないことも分かっていた。
「グーゴル」という
名前を提案すると同時に、さらに大きい数である「グーゴルプレックス」を名付けた。
Google の名前は、googol から来ているようです。
12 Wikipedia
- Nicolas Chuquet https://en.wikipedia.org/wiki/Nicolas Chuquet
- Triparty en la science des nombres https://fr.wikipedia.org/wiki/Triparty en la science des nombres
14 Wikipedia: Names of large numbers https://en.wikipedia.org/wiki/Names of large numbers
15 巨大数研究 Wiki - センティリオン http://ja.googology.wikia.com/wiki/センティリオン
16 巨大数研究 Wiki - グーゴル http://ja.googology.wikia.com/wiki/グーゴル
17 Wikipedia - エドワード・カスナー http://ja.wikipedia.org/wiki/エドワード・カスナー
18 Wikipedia - Mathematics and the Imagination https://en.wikipedia.org/wiki/Mathematics and the Imagination
19 Kasner, E. and Newman, J. R. (1940) ”Mathematics and the Imagination” Simon & Schuster, New York.
13 Wikipedia
第 2 章 原始帰納関数
12
Large Numbers のムナフォ氏は、6 才の時には知っていた最大の数が million(100 万) で、7 才の時に母
親にその上の単位を聞いて、billion(10 億) と trillion(兆) の単位を知り、さらに 8 才の時に学校の図書館で
読んだ本でビギンティリオン (vigintillion = 1063 )20 という数を覚えて嬉しくなり、校庭の砂に
1,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000,000
と書いて、いじめられたという過去があるようです。
また、ビギンティリオンの先を、規則的に 1000 倍ずつ名前を定義する方法が提案されていて、その表で
は、最大は ミリニリオン (millinillion) = 103003 あるいはミリリオン21 となっています。
日常生活で使うのは、クラス 2 の中でも非常に小さい数までですので、数に名前がつけられるのも、た
いていはここまでです。
それでは、数学の世界ではどうでしょうか。数学の世界では、現実の世界と関連づけずに数字の性質を考
えますので、日常生活で取り扱う範囲の数を超えた大きな数を取り扱うことがあります。たとえば、素数は
1 とそれ自身以外に約数を持たない数で、2,3,5,7,11,…と続きますが、無限にどこまでも続きます。素数が
無限である事を証明するのは簡単で、もし素数が有限だったと仮定すると、その素数全てをかけて 1 を足
した数は、どの数でも割り切れなくて素数になってしまいますから、そのようなことはありえません。し
たがって、素数は無限にあります。このように、「最大の素数」は存在しないので、巨大数候補から外れま
す。2016 年 1 月 7 日に、その時点で最大の素数であると判明した数字 274207281 − 1 が見つかりました。こ
れはメルセンヌ素数です。クラス 3 の数になります。
2011 年 12 月に、その時点で最大の双子素数 3756801695685 × 2666669 ± 1 ≈ 8.73 × 10200699 が見つかり
ました。これは、クラス 2 の巨大数です。双子素数とは、(3,5), (5,7), (11,13) のように、差が 2 である 2 つ
の素数の組です。双子素数が無限に存在するかどうかはまだ分かっていないので「最大の双子素数」が巨大
数となるかどうかは分かりません。
それではここで、表 2.1 にクラス 2 の巨大数を、小さいものから大きいものへと順番にまとめます。
名称
表 2.1: クラス 2 の巨大数(下の数ほど大きい)
値
無量大数
1046
1068
エディントン数 (Eddington number)
136 × 2256 ≈ 1.57 × 1079
グーゴル (googol)
10100
センティリオン (centillion)
10303
ミリニリオン (millinillion)
103003
上数の載
104096
クラス 2 の数の上限
101000000 = 1010
恒河沙劫の年数の見積もり
20 巨大数研究
21 巨大数研究
6
Wiki - ビギンティリオン http://ja.googology.wikia.com/wiki/ビギンティリオン
Wiki - ミリリオン http://ja.googology.wikia.com/wiki/ミリリオン
2.1. クラス 2 の巨大数
2.1.4
13
数の比較
それでは次に、このような巨大数の大きさをどのように比較するのかを考えましょう。
クラス 2 までの数は、数の大小比較が簡単にできます。10 進数で書かれていれば、まずは桁数を比較し
て、桁数が同じであれば一番上の桁から順番に大きさを比較すれば良いのです。数が 3.23 × 1021 のような
指数表記で書かれていれば、桁数を数える必要もないので楽です。ただし、10 進数表記あるいは 10 進数
の指数表記同士で書かれていない数を比較する時には、計算をする必要が出てきます。計算は、手計算で
もできますが、電卓を使えばできます。電卓には、スマホのアプリやパソコンのソフト等、色々あります。
Google の検索窓に計算式を打ち込めば、計算が出来ます。性能によって、表示出来る最大の数(指数表示
の時の最大の指数)、表示される桁数、内部で計算されている桁数、等が変わります。
カシオが運営している高精度計算サイト22 は、強力です。「生活の計算」「数学・物理」「専門的な計算」
それぞれ様々な実用的な計算をすることができて、実用的にも便利ですし、なんといっても「フリー計算」
の機能が高いので、本書のような趣味の計算をするときにも便利に使えます。様々な関数が扱え、桁数は
50 桁までの精度が得られ、さらに精度保証の機能がついています。コンピュータで計算をする時には、計
算機の内部で保持している変数の桁数に限界があるため、限界以上の桁は丸めて計算をするため、計算結
果に誤差が出ます。そこで、計算結果を丸める時に、必ず「最小の値」と「最大の値」を同時に計算するこ
とで(ざっくりと言えば、ということです。しっかりと勉強したい方は大石進一氏のサイト23 を参照して
下さい。)、最大でどの程度の誤差が生じるかを見積もることができます。この高精度計算サイトでエディ
ントン数を 50 桁まで計算すると、1.5747724136275002577605653961181555468044717914527 × 1079 と計
算できます。しかし、エディントン数は 80 桁あるので、最後の 30 桁が計算できていません。そこで、桁
数に制限のない任意精度計算機 (Arbitrary Precision Calculator)
24 25
を使えば、エディントン数を正確に
計算できます。計算結果は、
15747724136275002577605653961181555468044717914527116709366231425076185631031296
となります。このような計算機を使えば、クラス 2 の数はだいたい大小比較ができます。
手元の電卓ではエラーが出てしまうような大きな数を計算する時には、対数 (log) を使うと、大きさを知
る事ができます。対数には、底を 10 とする常用対数と、底を e とする自然対数があるので、常用対数で計
算した時にはその数 a に対する 10a を、自然対数で計算した時には exp(a) = ea を計算することになりま
す。ここでは、常用対数を使います。双子素数 3756801695685 × 2666669 ± 1 の常用対数の大きさを
log(3756801695685 × 2666669 ± 1) ≈ log(3756801695685) + 666669 × log(2)
≈ 200699.94099758
とまず計算してから、双子素数のおおよその大きさを
10200699.94099758
=
100.94099758+200699
=
100.94099758 × 10200699
≈ 8.729665 × 10200699
22 高精度計算サイト
(CASIO) http://keisan.casio.jp/
http://www.oishi.info.waseda.ac.jp/˜oishi/FAQ/FAQ.html
24 Arbitrary Precision Calculator http://apfloat.appspot.com/
25 Big Integer Calculator http://www.javascripter.net/math/calculators/100digitbigintcalculator.htm
23 精度保証付き数値計算
第 2 章 原始帰納関数
14
と計算すれば良いのです。指数が 100 万までのクラス 2 の数であれば、対数を取れば 100 万までの数にな
りますので、どんな電卓でも簡単に計算出来ます。ただし、対数が計算出来ない電卓の場合には、しかたあ
りません。
クラス 3 の巨大数 - 不可説不可説転とグーゴルプレックス
2.2
6
クラス 3 の数 (1010 − 1010
106
) : クラス 2 を超えると、10 進数で数字を書いて大きさを比較するのが無
6
理になります。ここでも、クラス 2 までと同様、クラス 2 の上限である 1010 を 10 の指数に持ってきて、
106
1010
をクラス 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) 以下の自然数である。
古代ギリシャの数学者、科学者であるアルキメデス (Archimedes; Αρχιμδη, 紀元前 287 年? - 紀
元前 212 年) の著作である 『砂粒を数えるもの』(The Sand Reckoner; Ψαμμτη)
26
では、当時の宇
宙に関する知識から、宇宙を埋め尽くすのに必要な砂粒の数を概算しました。
そのために、まずは大きな数をあらわすための数の体系を作りました。当時のギリシャでは、1 万をあら
わす myriad (μυρι) という単語があり、この単語を使って 108 までの数を名付けることができました。
アルキメデスは、108 までの数を「第 1 級の数」として、108 を「第 2 級の数の単位」としました。そし
て、第 2 級の数の単位を使って、108 単位までの数を数えることにより、1016 までの数を 108 ごとに数える
ことができます。同様に、第 1 級の数の単位を使って 108 とあらわされる数、すなわち 1016 を第 2 級の数
の単位とします。
このようにして、第 108 級の数の単位を使って 108 まで数えることで、(108 )(10
8
)
8
= 108·10 まで数える
ことができます。ここまでの数を「第 1 期の数」として、次に第 2 期の数を考えます。第 1 期の最後の数
8
108·10 を「第 2 期第 1 級の数の単位」として、また 108 まで数えた時の最後の数を「第 2 期第 2 級の数の
単位」とします。そして「第 2 期第 108 級の数」を使って 108 まで数えて、それを第 3 期第 1 級の数の単
8
2
8
位とします。(108·10 ) = 1016·10 になります。
このようにして、第 108 期第 108 級の数の単位で 108 まで数えると、
(
(108 )(10
8
)
)(108 )
= 108×10
16
まで数えることができます。これは、クラス 3 の巨大数です。
26 巨大数研究
Wiki - 砂粒を数えるもの http://ja.googology.wikia.com/wiki/砂粒を数えるもの
2.2. クラス 3 の巨大数 - 不可説不可説転とグーゴルプレックス
15
次に、宇宙を埋め尽くすのに必要な砂の数を次のように見積もりました。
1. ケシの実の直径は 40 分の 1 インチ(インチという単位は当時なかったが、直訳すると「指」)よりも
小さくはないので、直径 1 インチの球に入るケシの実の数は 64000 個よりは少ない。
2. ケシの実 1 粒の体積が砂 1 万粒よりは小さいので、直径 1 インチの球に入る砂の数は、64000 の 1 万
倍、つまり第 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 よりも大きい、という仮定をして
いることに相当する。ちなみに、前節でガンジス川の砂の数を見積もった時には、砂の直径を暫定的
に 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)
27
が考えた星が存在する「宇宙」の大きさ
を見積もる。ここで、地球の直径と世界の直径の比が、世界の直径と宇宙の直径の比に等しいという
仮定を使う。すると、宇宙の直径は世界の直径の 1 万倍よりは小さいこととなる。これは 2 光年より
も小さいという仮定であり、現代の天文学からすると小さすぎる仮定となる。この宇宙に入る砂の数
は、第 8 級の数で 1000 万、すなわち 1063 個以下である。
Harrison (2000)
28
は、1063 個の砂に含まれる核子の数はおよそ 1080 個であり、エディントン数と一致
するのは驚くべき偶然だとしています。
ここでまた、仏教で使われている数の大きさについての話になります。インドの数の単位では、本来は下
数の単位が使われていましたが、後の仏典では上数として使われることがあり、華厳経第 45 巻、阿僧祇品
第三十には、「100 洛叉(らくしゃ=10 万)を 1 倶胝(くてい)とする。倶胝倶胝を 1 阿ゆ多(あゆた)と
27 Wikipedia
28 Harrison,
- アリスタルコス http://ja.wikipedia.org/wiki/アリスタルコス
E. R. (2000) ”Cosmology - The Science of the Universe” Cambridge University Press. pp. 481-482.
第 2 章 原始帰納関数
16
する。阿ゆ多阿ゆ多を 1 那由他(なゆた)とする。那由他那由他を 1 頻波羅(びんばら) とする。(中略)
不可説転不可説転を 1 不可説不可説とする。このまた不可説不可説(倍)を 1 不可説不可説転(ふかせつ
ふかせつてん)とする。」と書かれています。「倶胝倶胝を 1 阿ゆ多とす」とは、倶胝×倶胝=阿ゆ多とい
うことなので、107 を意味する倶胝以上は、中国の上数と同じように 2 乗すると次の単位になっています。
したがって、倶胝(くてい)=107 、阿ゆ多(あゆた)=107×2 = 1028 、那由他(なゆた)=107
頻波羅(びんばら)=10
7× 2 3
= 10
112
× 2
2
= 1056 、
と、2 乗することで指数が 2 倍になり、指数の中の 2 の指数が 1 増え
ます。つまり、倶胝の n 個上の単位は 107
× n
2
となります。 不可説不可説転(ふかせつふかせつてん)
29
122
は、倶胝の 122 個上の単位なので、107×2 になります。
【定義】不可説不可説転
不可説不可説転 = 107×2
122
グーゴルプレックス (googolplex)
30
は数の単位で、10 のグーゴル乗 (10googol )、つまり 1010
100
です。
【定義】グーゴルプレックス
グーゴルプレックス = 1010
100
グーゴルの説明で引用したように、グーゴルプレックスはカスナーの甥のミルトン・シロッタが 9 歳の
時に名付けましたが、それは 1 の後に 0 を疲れるまで書いた数、という定義でした。カスナーは、人が疲
れる時間には違いがあるので、それでは正確な定義にはならないとして、より正確な定義として 1 の後に
グーゴル個の 0 を書いた数としました。
クラス 3 の数字は、通常の計算で比較するのが無理です。不可説不可説転まで大きくなると、指数表記を
した時に指数の部分が 7 × 2122 という大きな数になりますので、通常の電卓では計算範囲を超えます。た
とえば、前節で紹介した高精度計算サイトを使って計算しても、計算結果は∞と表示されるだけで、計算の
上限を超えてしまっています。
このような大きさの数を比較する時には、対数を使うよりありません。不可説不可説転とグーゴルプレッ
クスの比較であれば、すでに両者とも 10x の形になっているので、簡単に比較できます。両者の対数を取っ
た、7 × 2122 と 10100 を比較すれば良いのです。
7 × 2122 = 37218383881977644441306597687849648128 ≈ 3.72 × 1037
と計算されるので、これよりも 10100 の方が大きく、グーゴルプレックスは不可説不可説転よりも大きいこ
とが分かります。
2.3
クラス 4 の巨大数 - 第 2 スキューズ数
クラス 4 の数 (1010
106
− 1010
6
1010
) : クラスの定義より、クラス 4 の上限は 1010
6
1010
です。このクラス
になると、指数表記で書く事は無理で、大小を比較するには、対数を 2∼3 回取る必要があります。
29 巨大数研究
30 巨大数研究
Wiki - 不可説不可説転 http://ja.googology.wikia.com/wiki/不可説不可説転
Wiki - グーゴルプレックス http://ja.googology.wikia.com/wiki/グーゴルプレックス
2.3. クラス 4 の巨大数 - 第 2 スキューズ数
17
それでは、次の巨大数の話をするために、少し準備をします。素数計数関数 (Prime counting function)
π(x)31 は、x 以下の素数の個数を返す関数です。対数積分 li(x)
∫ x
dt
li(x) =
ln(t)
0
32
は、全ての正の実数 x ̸= 1 において、
で定義される関数です。素数定理によれば π(x) は漸近的に li(x) に等しくなりますが、計算がなされてい
る範囲では、常に π(x) < li(x) となっていて、今でも π(x) > li(x) となるような具体的な x は見つかって
いません。ところが、π(x) と li(x) は無限回大小関係が逆転することが証明されているため、いつはじめて
π(x) > li(x) となる x が出てくるのかが研究されてきました。
スキューズ数 (Skewes Number)
想が正しいとした時に、Sk1 = ee
33 34
e79
には 2 つあります。スキューズは、1933 年の論文で、リーマン予
以下の数に π(x) > li(x) となる数が存在することを証明しました35 。
この Sk1 が 第 1 スキューズ数 と呼ばれます。さらにスキューズは、1995 年に、リーマン予想を仮定する
ことなしに、 第 2 スキューズ数 Sk2 = ee
7.705
ee
以下の数で π(x) > li(x) となる x が存在することを証明
しました36 。この上限は、Bays and Hudson (2000)
37
によって約 1.3983 × 10316 にまで下げられています。
スキューズ数はいずれもクラス 4 の数です。Sk1 は 1010
10
かりやすく 10
3
1010
1034
程度です。Sk2 は 1010
10963
程度ですが、分
とされることもあります。
【定義】第 2 スキューズ数
第 2 スキューズ数 = ee
7.705
ee
≈ 1010
3
1010
ムナフォ氏は、通常の計算プログラムでは大きすぎて計算できない(オーバーフローしてしまう)よう
な巨大数を計算するためのプログラム ハイパーカルク (Hypercalc)
38
を作成しました。Hypercalc を使
うと、第 2 スキューズ数は
入力: e^e^e^e^7.705
結果: 10 ^ [ 10 ^ ( 3.299943221955 x 10 ^ 963 ) ]
と、計算ができます。第 2 スキューズ数をこのように直接計算できるプログラムは、他にはなかなかないだ
ろうと思います。
このクラスの巨大数になると、指数がたくさん重なるので読みにくくなってきます。そこで、スビス・サ
イビアン (Sbiis Saibian)
31 MathWorld
39
が考案した ハイパー E 表記 (Hyper-E Notation)
40
を使うと便利です。
- Prime Counting Function http://mathworld.wolfram.com/PrimeCountingFunction.html
- Logarithmic Integral http://mathworld.wolfram.com/LogarithmicIntegral.html
33 巨大数研究 Wiki - スキューズ数 http://ja.googology.wikia.com/wiki/スキューズ数
34 MathWorld - Skewes Number http://mathworld.wolfram.com/SkewesNumber.html
35 Skewes, S. (1933) ”On the Difference pi(x)-li(x).” J. London Math. Soc. s1-8(4): 277-283. doi:10.1112/jlms/s1-8.4.277
36 Skewes, S. (1955) ”On the Difference pi(x)-li(x). II.” Proc. London Math. Soc. s3-5 (1): 48-70. doi:10.1112/plms/s35.1.48
37 Bays and Hudson (2000), ”A new bound for the smallest x with π(x) > li(x) ”, Mathematics of Computation 69 (231):
1285-1296. http://bit.ly/16EtsQx (www.ams.org)
38 Hypercalc - The Calculator That Doesn’t Overflow http://www.mrob.com/pub/perl/hypercalc.html
39 巨大数研究 Wiki - Sbiis Saibian http://ja.googology.wikia.com/wiki/Sbiis Saibian
40 巨大数研究 Wiki - ハイパー E 表記 http://ja.googology.wikia.com/wiki/ハイパー E 表記
32 MathWorld
第 2 章 原始帰納関数
18
【定義】ハイパー E 表記
ハイパー E 表記は、1 つ以上の正の整数の数列 an の引数をハイペリオン記号 # で区切ったものであ
る。これを E(b)a1 #a2 #...#an と表記し、b を基数と呼ぶ。基数が省略されたときは 10 がデフォルト
で、よく省略される。
E(b)x
E(b)a1 #a2 · · · #an #1
E(b)a1 #a2 · · · #an
= bx
=
E(b)a1 #a2 · · · #an
= E(b)a1 #a2 · · · #an−2 #(E(b)a1 #a2 · · · #an − 1)
具体的に計算すると、このようになります。
Ea
= Ea#1 = 10a
E100 = E100#1 = 10100 = グーゴル
E100#2 =
E100#3 =
E963#3 =
E(E100) = EE100 = E10100 = 1010
E(E100#2) = 1010
1010
10963
≈ ee
7.705
ee
10100
100
= グーゴルプレックス
= グーゴルプレックスプレックス
= E(e)7.705#4 = 第 2 スキューズ数
ハイパー E 表記は、さらに E100#100#100#100 のように重ねることで大きくなり、そこから拡張ハイ
パー E 表記、連鎖 E 表記、拡張連鎖 E 表記といったようにさらに大きな数を表記するシステムへと発展し
ます。その詳細については本書では踏み込みませんが、Sbiis Saibian の巨大数論に関する Web 書籍 One
to Infinity: A Guide to the Finite
2.4
41
に、詳しく解説されています。
クラス 5 以上の巨大数 - ベントレー数
宇宙論で使われた最大の巨大数(であると思われる数)に、クラス5の巨大数である
宇宙論で使われた最大の数
10^10^10^10^10^1.1
42 43
という数字があります
。ハイパー E 表記では E1.1#5 と書けます。これは、Page (1994)
44
が「リン
デの確率過程的インフレーションという説で生まれるかもしれないあらゆる多重宇宙の全質量を 1 個のブ
ラックホールに潰して適当な箱の中に入れた」と仮定したときにブラックホールの蒸発後にまたブラック
ホールができるまで45 のポアンカレ再帰時間46 を計算したものです。この数字は現在の状態の宇宙に対す
るポアンカレ再帰時間ではないので、
「宇宙の全ての物質が元に戻る」47 という説明は不正確です。意味の
ある数字というよりは、どちらかというと、巨大数を作ることを目的に計算された数字、ということのよう
41 One
to Infinity: A Guide to the Finite https://sites.google.com/site/largenumbers/home
Wiki - 宇宙論の巨大数 http://ja.googology.wikia.com/wiki/宇宙論の巨大数
43 Longest Possible Time - Numberphile http://www.numberphile.com/videos/longest time.html
44 Page (1994) ”Information loss in black holes and/or conscious beings?” http://arxiv.org/pdf/hep-th/9411193
45 宇宙物理たん bot による説明 https://twitter.com/astrophys tan/status/391928927012134912
46 Wikipedia - Poincaré recurrence theorem http://en.wikipedia.org/wiki/Poincaré recurrence theorem
47 ニコニコ動画: 時間の比較 http://www.nicovideo.jp/watch/nm16202721
42 巨大数研究
2.4. クラス 5 以上の巨大数 - ベントレー数
19
です。単位はプランク時間 (5.391 × 10−44 秒) でも 1000 年でもなんでもいい、と Page (1994) に書かれて
いるように、クラス 5 の数字になると、クラス 4 までの数字をかけても割っても右肩の数字(この場合だ
と 1.1)にほとんど影響を与えなくなってしまうため、時間の単位を気にする必要すらなくなってしまいま
す。このことは、次節以降で色々と計算をしていきます。
「現代巨大数論の父」と言われるジョナサン・バウアーズ (Jonathan Bowers) が書いた「永遠の努力」48
(Forever Endeavor) という短編小説は、このレベルの数字の大きさの果てしなさについて想像をかきたて
ます。ここに、巨大数研究 Wiki に掲載した概略のストーリーを記します。英語の原文49 は、もっと詳細に
描写されていて面白いです。
この物語は、10 個のカウンターを作れば 100 万ドルを提供すると宣伝する、奇妙なカード
が通りを舞っているのに気が付いた、欲張りなベントレー氏から始まります。彼はカウンター
とは何なのかも知らないままこれを引き受け、1 枚の壁に窓のある窮屈な部屋に通されました。
彼が 10 個のカウンターを作るのを手伝う、コンパドリーという名前のアシスタントを除き、彼
はその部屋にひとりでいなければなりません。一度カウンターを作り始めてしまうとその部屋
から逃げることは許されません。
部屋には金属のディスクでいっぱいになった大きな段ボール箱が、またその箱の横には 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 年以上もカウンターに取り組んでいるらしいのです。
48 巨大数研究
49 Forever
Wiki - 永遠の努力 http://ja.googology.wikia.com/wiki/永遠の努力
Endeavor http://www.polytope.net/hedrondude/foreverendeavor.htm
第 2 章 原始帰納関数
20
550 年以上かかって、100 億枚のディスクを取り付け、3 個目のカウンターが完成しました。
棒の長さは、10 万キロになります。そして、コンパドリーはその 3 個目のカウンターを受け取
り、|000 .{z
. . 000} にセットしました。ベントレーは別の棒を取って、4 個目のカウンター作りを始
100 億個
め、コンパドリーはその 3 つ目のカウンターを数え始めました。4 個目のカウンターは、ディ
スクを 10 の 100 億乗個取り付けることで完成します。それは、グーゴルのグーゴル倍の、その
またグーゴル倍の…と、1 億回繰り返したほどの、気の遠くなるほど大きな数です。とても、そ
の作業が終わる日が来るようには思えません。そして、4 個目のカウンターが完成すれば、こん
どはそのカウンターを使って、5 個目のカウンター作りを始めることになります。つまり、今度
は 1010
10000000000
個のディスクを取り付けることになります。
果たして、10 個目のカウンターが完成するときはやってくるのでしょうか?とてもやって来
るとは思えません。この「永遠の努力」を終わらせる方法は、知られていません。
ベントレー氏が 10 個のカウンターを完成させるまでに、とりつけなければならないディスクの数は、ク
ラス 9 の数である ベントレー数
50
になります。ここで、↑は次に紹介するクヌースの矢印表記です。
【定義】ベントレー数
9
∑
10 ↑↑ i = 1 + 10 + 1010 + 1010
10
+ 1010
1010
+ ... + 1010
1010
1010
1010
10
i=0
2.5
矢印表記とハイパー演算子 - トリトリ
ここまでは、クラスが上がると気の遠くなるような大きさの数字となることを見てきましたが、ここか
らは、クラスという概念を使っても間に合わないほどの大きな数を表記する方法について見て行きます。
ドナルド・クヌース (Donald Knuth)
51
が考案した クヌースの矢印表記 (arrow notation)
52 53 54
は、
以下で定義されます。
50 巨大数研究
Wiki - ベントレー数 http://ja.googology.wikia.com/wiki/ベントレー数
- ドナルド・クヌース http://ja.wikipedia.org/wiki/ドナルド・クヌース
52 巨大数研究 Wiki - 矢印表記 http://ja.googology.wikia.com/wiki/矢印表記
53 Wolfram MathWorld - Arrow Notation http://mathworld.wolfram.com/ArrowNotation.html
54 Knuth, D. E. (1976) ”Mathematics and Computer Science: Coping with Finiteness.” Science 194, 1235-1242.
doi:10.1126/science.194.4271.1235
51 Wikipedia
2.5. 矢印表記とハイパー演算子 - トリトリ
21
【定義】クヌースの矢印表記
x↑y
= xy
x ↑↑ 2 =
x ↑↑↑ 2 =
x ↑↑↑↑ 2 =
x ↑ x, x ↑↑ y = x ↑ (x ↑↑ (y − 1))
x ↑↑ x, x ↑↑↑ y = x ↑↑ (x ↑↑↑ (y − 1))
x ↑↑↑ x, x ↑↑↑↑ y = x ↑↑↑ (x ↑↑↑↑ (y − 1))
x ↑n y
= x(n 個の↑)y
b
指数を表記する a という方法は、b を上付き文字で書く必要がありますが、プログラミングをするとき
やテキストでメールを送信する時など、上付き文字を使えない環境があります。そういう時に、a ↑ b とい
う書き方がされていました。↑の文字が使えない時には、かわりに ˆ の記号が使われていました。ab とい
う表記は一般化がしにくいため、クヌースは a ↑ b の表記を一般化して矢印表記を考案したものと考えら
れます。同様に、ASCII 文字を使いたい時には↑のかわりに ˆ を使って、a ↑↑ b を a ˆ ˆ b のように書く
こともできます。
具体的に計算をしてみましょう。まずは、↑が 1 つの場合です。これは、指数と同じです。↑を連結させ
ると、指数と同じように右から順番に計算します。Hypercalc
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
3↑3↑3↑3↑3↑3↑3↑3
55
を使うと、次の様に計算されます。
= 33 = 27
3
= 33 = 327 = 7625597484987
= 33
33
= 1.35 × 10 ↑ 3638334640024
= 10 ↑ (6.46 × 10 ↑ 3638334640023)
= 10 ↑ 10 ↑ (6.46 × 10 ↑ 3638334640023)
= 10 ↑ 10 ↑ 10 ↑ (6.46 × 10 ↑ 3638334640023)
=
10 ↑ 10 ↑ 10 ↑ 10 ↑ (6.46 × 10 ↑ 3638334640023)
ここで、Hypercalc では、10 ↑ 10 ↑ 10 ↑ 10 ↑ (6.46 × 10 ↑ 3638334640023) という計算結果は、
「4 PT
( 6.46 × 10 ˆ 3638334640023 )」と表示されます。最初の 10 ↑を 4 回繰り返す部分を 4 PT と表示するこ
とで、オーバーフローしないようにしています。
さて、ここで右辺を見ると、最後のかっこの中が、途中からずっと同じ数 6.46 × 10 ↑ 3638334640023 =
10 ↑ 10 ↑ 12.56 になっています。つまり、3 ↑を 1 つつけることと、10 ↑をつけることが、途中からまっ
たく変わらなくなってしまっています。本当は変わるのですが、有効桁数内では変わらない、ということで
す。ここで、上のピラミッドを見やすく書き直します。
3↑3 =
3↑3↑3 =
27
10 ↑ 12.88
3 ↑ 3 ↑ 3 ↑ 3 = 10 ↑ 10 ↑ 12.56
3 ↑ 3 ↑ 3 ↑ 3 ↑ 3 = 10 ↑ 10 ↑ 10 ↑ 12.56
3↑3↑3↑3↑3↑3 =
3↑3↑3↑3↑3↑3↑3 =
55 再掲:
10 ↑ 10 ↑ 10 ↑ 10 ↑ 12.56
10 ↑ 10 ↑ 10 ↑ 10 ↑ 10 ↑ 12.56
Hypercalc - The Calculator That Doesn’t Overflow http://www.mrob.com/pub/perl/hypercalc.html
第 2 章 原始帰納関数
22
3↑3↑3↑3↑3↑3↑3↑3
= 10 ↑ 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 スキューズ数を超えます。
なぜ、ベースを 3 にしても 10 にしても、増え方が変わらないのでしょうか。ある数 x に対して、3x と
10x でどれだけの違いがあるかを考えると、
10x = (3log3 (10) )x = 3xlog3 (10) ≈ 32.1x
x
x
なので、x が 2.1 倍程度増える効果になります。次に、1010 と 33 でどの程度の違いになるかというと、
x
log3 (1010 ) ≈ 2.1 × 10x ≈ 2.1 × 32.1x
1010
x
≈ 32.1×3
2.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 と考えて良いことになります。ここで、≈ の記号は、数字の大き
さそのものは非常に差が大きいけれど、対数を 4 回取って比較すると差が計算出来ない程に小さくなるの
で、同じ程度の数だと考えて良い、という意味です。つまり、
log(log(log(log(2x )))) ≈ log(log(log(log(xx )))) ≈ 10
ということを、2x ≈ xx と書きました。巨大数は正確な計算ができないので、このような近似の取り扱いが
必要になります。
次は、↑が 2 つ並んだ場合です。これを特別に パワータワー (power tower)
56
とも言います。
x ↑↑ y = x ↑ (x ↑↑ (y − 1)) = x ↑ (x ↑ (x ↑↑ (y − 2))) = … = x ↑ x ↑…↑ x(x が y 個)
となり、指数(パワー)がタワーのように連なるのでパワータワーと言います。
56 Wolfram
MathWorld - Power Tower http://mathworld.wolfram.com/PowerTower.html
2.5. 矢印表記とハイパー演算子 - トリトリ
また、これを テトレーション (tetration)
ンは、グッドスタイン
58
23
57
あるいは 超冪(ちょうべき) とも言います。テトレーショ
がギリシャ語の接頭辞で 4 を意味する tetra-から作った言葉です。繰り返しで得
られる 4 番目の演算子なので、 ハイパー 4 演算子(hyper-4) とも言います。 ハイパー n 演算子 Hn (a, b)
は、以下で定義されます59 。
矢印表記のことを「タワー表記」と記されることもありますが、パワータワーはテトレーションの意味で
使われるため、ペンテーション以上を含む場合には「矢印表記」という用語に統一しておく方が良いかと思
います。
【定義】ハイパー n 演算子 Hn (a, b)


b+1





 a
Hn (a, b) =
(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 個
ということで、この時点でクラス 7625597484986 の巨大な数になります。Hypercalc で計算しようにも、
「3ˆ」を 7 兆個以上打ち込まないとなりませんので、無理です。仮に打ち込んだとしたら、
「7625597484983
PT ( 6.46 × 10 ˆ 3638334640023 )」という結果が表示されることでしょう。
3 ↑↑ 3 ↑↑ 3 ↑↑ 3 = 3 ↑ 3 ↑…↑ 3 (3 が 3 ↑↑ 3 ↑↑ 3 個)
となると、クラス 3 ↑↑ 3 ↑↑ 3 程度の巨大数です。Hypercalc では計算できません。まず、3 を 3 ↑↑ 3 ↑
↑ 3 回入力することが不可能ですし、仮に入力できて、計算の時間とメモリの制約を無視しても、Hypercalc
の計算できる最大値は 10 ↑↑ (1010 ) であるとされていて、10 ↑↑ (3 ↑↑ 3 ↑↑ 3) 程度のこの数はオー
バーフローです。Hypercalc ですらオーバーフローしてしまう巨大数となりました。
そこで、クラスの概念を拡張して ハイパークラス を定義します。これは、本書独自の定義です。
57 巨大数研究
Wiki - テトレーション http://ja.googology.wikia.com/wiki/テトレーション
L. Goodstein (1947). ”Transfinite Ordinals in Recursive Number Theory”. Journal of Symbolic Logic 12(4): 123-129.
http://dx.doi.org/10.2307/2266486
59 巨大数研究 Wiki - ハイパー演算子 http://ja.googology.wikia.com/wiki/ハイパー演算子
58 R.
第 2 章 原始帰納関数
24
【定義】自然数のハイパークラス
数列 hc(n) を hc(0) = 6, hc(n + 1) = c(hc(n)) で定義する。ここで、c(n) についてはクラスの定義
(p.14 の第 2.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 までの数です。したがって、前節で示したクラス 4 までの巨大数は、す
べてハイパークラス 1 になります。ハイパークラス 2 は、N をハイパークラス 1 の上限であるとしたとき
に、クラス N までの数です。同様に、ハイパークラス 3 は、クラス(ハイパークラス 2 の数)で表される
自然数です。
このように定義すると、3 ↑↑ 3 はハイパークラス 1、3 ↑↑ 3 ↑↑ 3 はハイパークラス 2、3 ↑↑ 3 ↑↑
3 ↑↑ 3 はハイパークラス 3、というように、テトレーションを繰り返すごとにハイパークラスが 1 つ増加
します。ハイパークラス 3 以上の数は、Hypercalc を使っても計算出来ません。
タワーが 3 つ並ぶと、超冪を繰り返す ハイパー 5 演算子 で、 ペンテーション (pentation)
外の巨大数マニア、 グーゴロジスト
61
60
達は、3 に 3 をペンテーションした数を トリトリ (tritri)
です。海
62
と名付
けています。これからも出て来る数で、原始帰納でできる巨大数の例としては面白いので、定義を書いてお
きます。
【定義】トリトリ
トリトリ = 3 ↑↑↑ 3 = 3 ↑↑ 3 ↑↑ 3
トリトリは、クラス 7625597484986、ハイパークラス 2 の巨大数である。
63
また、10 ↑↑↑ 100 はギャゴルと呼びます 。これは、ハイパークラス 100 の巨大数です。
タワーが 4 つ並ぶと、ハイパー 5 を繰り返す ハイパー 6 演算子 で、 ヘキセーション (hexation)
64
にな
ります。
3 ↑↑↑↑ 3 = 3 ↑↑↑ 3 ↑↑↑ 3 = 3 ↑↑↑トリトリ = 3 ↑↑ 3 ↑↑…↑↑ 3(3 がトリトリ個)
となります。テトレーションの計算をトリトリ回繰り替えした数が 3 ↑↑↑↑ 3 なので、ハイパークラ
ストリトリほどの大きさの数ということになります。なんだか分からないけどとにかく大きな数、というよ
り他にないような大きな数です。これが、後のグラハム数の定義で出て来る f (4) で、グラハム数はこの数
がスタートになっています。
60 巨大数研究
Wiki
Wiki
62 巨大数研究 Wiki
63 巨大数研究 Wiki
64 巨大数研究 Wiki
61 巨大数研究
-
ペンテーション http://ja.googology.wikia.com/wiki/ペンテーション
巨大数研究者 http://ja.googology.wikia.com/wiki/巨大数研究者
トリトリ http://ja.googology.wikia.com/wiki/トリトリ
ギャゴル http://ja.googology.wikia.com/wiki/ギャゴル
ヘキセーション http://ja.googology.wikia.com/wiki/ヘキセーション
2.5. 矢印表記とハイパー演算子 - トリトリ
25
このように、↑という記号を導入したことで、四則演算やべき乗などの記号だけでは、とても書ききれ
ない、Hypercalc をもってしても太刀打ちできないほどの想像を絶する大きな数を表現することができまし
た。スキューズ数などのこれまで見たような巨大数は、トリトリから見ると、小さすぎて話にならない数、
と言うことができます。
さて、このような巨大数の大きさは、どのように評価すれば良いのでしょうか。そもそも正確な計算が
現実的な時間ではできない数なので、やみくもに計算を繰り返しても何も分かりません。大切なことは、ど
のような計算をしているか、という構造を見ること、関数の性質をよく知ることです。矢印表記の性質と
して、
1. 同じ形の表記であれば、左の数字を大きくするよりも、右の数字を大きくする効果の方が大きい。
2. 数字を大きくする効果よりも、繰り返し数を増やす効果の方が大きい。
3. 繰り返し数を増やす効果よりも、↑の数を増やす効果の方が大きい。
たとえば、以下のような関係は分かります。
100 ↑↑↑ 100
100000 ↑↑↑ 100000 ↑↑↑ 100000
100
3↑
100
3↑
100
3↑
100
3↑
< 3 ↑↑↑ 101
< 3 ↑↑↑ 3 ↑↑↑ 3 ↑↑↑ 3
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 表記で結果を書きます。
3!
3!2 = (3!)!
3
3! = ((3!)!)!
6 (クラス 0)
= 720 (クラス 1)
=
E3.242147497#2 (クラス 2)
3!4
= E3.242952972#3 (クラス 3)
5
= E3.242952972#4 (クラス 4)
3!6
= E3.242952972#5 (クラス 5)
100
= E3.242952972#99 (クラス 99)
3!
3!
=
第 2 章 原始帰納関数
26
階乗は掛け算の繰り返しなので、冪乗程度の増加率です。それを繰り返すことで、クラスが 1 つずつ上が
り、3.242952972 の部分は動かなくなります。クラス n の巨大数に階乗をすると、クラス n + 1 の巨大数に
なる、ということになりそうです。
ここで、テトレーションを連続関数化することを考えます。色々な方法が考えられますが、a ↑↑ x を、実
数 x に対して次のように定義する方法が簡明です。



log (a ↑↑ (x + 1)) x ≤ −1

 a
a ↑↑ x = 1 + x
−1 < x ≤ 0



a ↑ (a ↑↑ (x − 1)) 0 < x
すなわち、x > 0 の時は
a ↑↑ x = a ↑ a ↑ … ↑ a ↑ (x − f loor(x))
|
{z
}
f loor(x)+1 個の a
となります。ここで、floor は床関数で、floor(x) は x 以下の最大の整数です。この関数は、a = e の時に
微分可能で導関数が連続な滑らな関数になります。
巨大数の大きさを比較する時には、a を同じ値にそろえればいいのですが、関数の滑らさを重視するので
あれば a = e にそろえるのが良く、実用的には a = 10 にそろえるのが便利だと思います。たとえば、この
ように計算されます。
10100
1010
100
=
10 ↑ 10 ↑ 2 = 10 ↑ 10 ↑ 10 ↑ log10 (2)
≈
10 ↑ 10 ↑ 10 ↑ 0.301 = 10 ↑↑ 2.301
=
10 ↑ 10 ↑ 10 ↑ 2 ≈ 10 ↑ 10 ↑ 10 ↑ 10 ↑ 0.301 = 10 ↑↑ 3.301
テトレーションをこのように連続関数化すると、テトレーションの逆関数である超対数 (super-logarithm)
をこのように定義できます。



slogb (bx ) − 1


slogb (x) = −1 + x



slog (log (x)) + 1
b
b
同じ方針でペンテーションを連続関数化すると



sloga (a ↑3 (x + 1))


a ↑3 x = 1 + x



a ↑↑ (a ↑3 (x − 1))
となります。このように計算されます。
x≤0
0<x≤1
1<x
x ≤ −1
−1 < x ≤ 0
0<x
2.5. 矢印表記とハイパー演算子 - トリトリ
3 ↑↑↑ 2.5
27
=
3 ↑↑ 3 ↑↑ 3 ↑↑ 0.5 = 3 ↑↑ 3 ↑↑ 3 ↑ 0.5
≈
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
同様に計算すると、こうなります65 。
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 で、このようになります。


sslogb (b ↑↑ x) − 1
x≤0


sslogb (x) = −1 + x
0<x≤1



sslog (slog (x)) + 1 1 < x
b
b
以下同様に自然数 n に対して a ↑n x を

n

ss...s

| {z } loga (a ↑ (x + 1))


n−2 個の s
a ↑n x =

1+x



 n−1
a↑
(a ↑n (x − 1))
x ≤ −1
−1 < x ≤ 0
0<x
のように連続関数化できます。x を正の実数として、定義域を x > 0, n ≥ 1, n ∈ N とすると、

ax
0 < x ≤ 1 or n = 1
a ↑n x =
a ↑n−1 (a ↑n (x − 1)) 1 < x and 1 < n
とすることができます。この方法で、e ↑n x あるいは 10 ↑n x の形で統一して表記すれば、大きさの比較
が楽になります。
65 http://ja.googology.wikia.com/wiki/ユーザーブログ:Kyodaisuu/テトレーションの連続関数化
第 2 章 原始帰納関数
28
2.6
グッドスタイン数列
グッドスタイン数列 (Goodstein Sequence)
66 67 68
は、面白い性質を持った数列です。グッドスタイン
数列を定義するためには、まず n を底とした遺伝的記法 (Hereditary base-n notation) について定義する
必要があります。
自然数の n 進数表記は、
k
∑
ai ni = ak nk + ak−1 nk−1 + · · · + a0 n0
i=0
と書く事ができます。たとえば、1234 の 10 進数表記は
1234 = 1 × 103 + 2 × 102 + 3 × 101 + 4
です。ここで、ak nk は nk + nk + · · · + nk なので、nk の和で書くこともできます。たとえば、
1234 = 103 + 102 + 102 + 101 + 101 + 101 + 100 + 100 + 100 + 100
です。日本語版 Wikipedia では、この記法を取っていますが、Mathworld と英語版 Wikipedia では、この
記法を取らず ak nk を採用しているので、ak nk のまま話を進めます。さて、ak nk の和で表した時に、指数
の部分をさらに n 進数に分解します。そこでまた出て来た指数の部分を、さらに n 進数に分解します。こ
のようにすると、出て来る数が全て n 以下の数となるように、記述出来ます。これが遺伝的記法です。
1234 で 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
3
= 22
2+1
+2
+ 22
+2
2
+2+1
+ 22
2
+ 22
+2+1
2
+2
+ 22
2
2
+ 22 + 2
+2
2
+ 22 + 2
これが、遺伝的記法です。続いて、グッドスタイン数列の定義を記します。
【定義】グッドスタイン数列
自然数 n の b を底とする遺伝的記法を書き、b を b+1 に書き換えることで得られる数字を B[b](n) と
する。
このとき、G0 (n) = n からはじまるグッドスタイン数列を Gk (n) = B[k + 1](Gk−1 (n)) − 1 で定義
する。結果が 0 となったときに数列は終了する。
66 巨大数研究
Wiki - グッドスタイン数列 http://ja.googology.wikia.com/wiki/グッドスタイン数列
67 Wolfram MathWorld - Goodstein Sequence http://mathworld.wolfram.com/GoodsteinSequence.html
68 田中一之, 角田法也, 鹿島亮, 菊池誠 (1997) 『数学基礎論講義―不完全性定理とその発展』日本評論社
2.6. グッドスタイン数列
29
3 から始まるグッドスタイン数列69 の計算をすると、
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[5](G4 (3)) − 1 = B[6](1) − 1 = 1 − 1 = 0
と計算出来ます。まず、最初に 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 以上からスタートす
るとなかなか終わらず、数列の値が急激に上昇します。Wikipedia には、19 から始まるグッドスタイン数
列の例が記されています。そこでは、G7 (19) = 4.3 × 10369693099 となっています。なぜ、G(3) の時のよう
にすぐに終わらないのでしょうか。
2
G0 (19) =
19 = 22 + 2 + 1
G1 (19) =
33 + 3 + 1 − 1 = 33 + 3 = 7625597484990
G2 (19) =
4 4 + 4 − 1 = 44 + 3
G3 (19) =
55 + 2
G4 (19) =
66 + 1
G5 (19) =
77
3
4
3
4
5
6
7
ここまでは、数字は増えますが表記は大人しく下がっています。この次の段階で、表記が爆発します。G6 (19)
7
8
8
は、77 の 7 を 8 に書き換えて 88 にしてから、1 を引きます。88 − 1 を 8 を底とする遺伝的表記をする
と、とても書き切れない数になります。8 を 10 に変えて 1010
10
れは 9 が 10
個続く 10
10
10
− 1 を 10 進数表記することを考えると、こ
桁の数になります。そしてさらに、一番上の桁は指数部分が 9999999999 となっ
8
て、これもまた 10 桁の数なので、さらに 10 進数で分解する必要があります。88 − 1 の場合は、88 桁の非
常に長い数列ができます。
G6 (19) の末尾は、· · · 7 × 82 + 7 × 8 + 7 となっています。ここから先は、底が 8, 9, 10, … と増えて行
き、同時に 1 を引かれることで、一番最後の 7 が 6, 5, 4, … と 1 ずつ引かれていって、G13 (19) に達したと
69 The
Goodstein sequence G(3) https://oeis.org/A215409
第 2 章 原始帰納関数
30
ころで、· · · 7 × 152 + 7 × 15 と定数項が落ちます。次に、16 を底として書き換えて · · · 7 × 162 + 7 × 16 か
ら 1 を引く時に、7 × 16 − 1 = 111 を 16 進数で書いて 6 × 16 + 15 となり、今度は 15 が 0 になるまで続け
ますが、そうこうしているうちに底がどんどん大きくなり、どんどん急激に値が増加して行きます。
さて、このように急速に増加するグッドスタイン数列ですが、必ずいつかは 0 となって終了する事が
証明されています。そこが、面白い所です。したがって、この数列が終了するまでのステップ数を関数と
考えることができます。n から始まるグッドスタイン数列が終わるまでのステップ数を G(n) とします。
数列は必ず終了するので、このように定義出来ます。この関数は、とても増加率の高い関数になります。
G(4) = 3 × 2402653211 − 3 と計算されていますが、G(5) の先は、正確な値が計算されていません。最小と
最大の見積もりが Googology Wiki に記されています。最小の見積もりを見ると、
G(5)
> (10 ↑↑ (10 ↑↑ (10 ↑↑ (10 ↑ 10 ↑ 10 ↑ 20)))
G(6)
> (10 ↑↑↑↑)5 (10 ↑↑↑)5 (10 ↑↑)5 )(10 ↑ 10 ↑ 10 ↑ 10 ↑ 10 ↑ 117)
となり、G(5) ですでにトリトリを超えています。トリトリ回以上の繰り返しということになると、まとも
に計算しても終わるはずがありません。G(6) でヘキセーションのレベルに到達し、G(7) では↑を7つ重ね
る計算になり、G(8) では原始帰納では書けないような大きな数になって、そこから先は、さらに急速に増
加して行きます。
この関数の面白いところは、数列の定義はおとなしい原始帰納の定義なのに、定義された関数は原始帰
納よりもずっと増加率の高い関数になるところです。それでは、どの程度増加率の高い関数になるのでしょ
うか。この関数は原始帰納関数ではないので、後の章で検証をします。
2.7
原始帰納関数
四則演算しか知らない人が、巨大数を作るとしたら、たとえば「99999 × 99999」とか「999999 × 999999
× 99999」などと書くでしょう。ところが、このようにしてたくさん 9 を並べて、×をいっぱい使って数を
書いたところで、
「1010
1000
」にはかないません。
「1010
1000
」ほどの数を作るためには、101000 桁ほどの数字
やかけ算記号を書く必要があるからです。これは、四則演算によって作られる関数よりも、べき乗関数の
方が増加率が飛躍的に高いためです。さらに、クヌースの矢印表記という新しい関数を取り入れることで、
べき乗などの表現をいくら使っても書き表せないほどの大きな数を作ることができました。
このように、より増加率の高い関数を定義することで、より巨大な数を作ることができるため、巨大数
を作ることは巨大関数を作る事と同じことになります。今後は、いかにして巨大関数を作るか、という議論
が中心になります。それはそのまま、巨大数を作る、ということになります。したがって、本書のタイトル
も「巨大関数論」とする方が内容に即していますが、巨大数への想いを込めて、あえて「巨大数論」としま
した。
さて、巨大関数を作っても、作った巨大関数がどの程度の大きさなのかを評価できないと、どれだけ巨大
な関数を作ったのかが分かりません。そこで、関数の性質を調べるためには、数学的な知識が必要となり
ます。
2.7. 原始帰納関数
31
本章でこれまでに紹介した関数は、グッドスタイン関数を除けば、すべて 原始帰納関数 (あるいは
原始再帰的関数 ; Primitive recursive function)70 になります。
【定義】原始帰納関数
原始帰納関数とは、以下のように定義される。
1. ゼロ関数: Z() = 0 (0 変数の関数、つまり定数 0)は原始帰納関数である。
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 番目の素数を返す関数
9. 以上を繰り返した関数
70 田中一之,
角田法也, 鹿島亮, 菊池誠 (1997) 『数学基礎論講義―不完全性定理とその発展』日本評論社
第 2 章 原始帰納関数
32
定数関数は、ゼロ関数に後者関数を繰り返し適用することで生成出来ます。加算 plus は、後者 S と plus
の原始帰納を繰り返すことで、plus(x, 0) = 0, 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 の超冪を計算できます。このように、原始帰納を繰り返すことで、ハイ
パー演算子が計算できます。つまり、クヌースの矢印表記は原始帰納で計算できます。
33
第 3 章 2 重帰納関数
3.1
アッカーマン関数
本章では 2 重帰納関数について議論しますが、2 重帰納関数の説明に入る前に、具体例として関数の値が
爆発的に大きくなることで有名な アッカーマン関数 (Ackermann Function)
1 2 3
を紹介します。
【定義】アッカーマン関数
非負整数 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 = 2 + y
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, 1) =
A(2, A(3, 0)) = A(2, 5) = 13 = 24 − 3
A(3, 2) =
A(2, A(3, 1)) = A(2, 13) = 29 = 25 − 3
A(3, 3) =
A(2, 29) = 61 = 26 − 3
A(3, y) =
2y+3 − 3(帰納法で証明)
A(4, 1) =
A(3, A(3, 1)) = A(3, 13) = 216 − 3 = 65533
A(4, 2) =
A(3, 65533) = 265536 − 3 ≈ 2 × 1019728
A(4, 3) ≈ A(3, 2 × 1019728 ≈ 106×10
19727
1 巨大数研究
Wiki - アッカーマン関数 http://ja.googology.wikia.com/wiki/アッカーマン関数
MathWorld - Ackermann Function http://mathworld.wolfram.com/AckermannFunction.html
3 Ackermann, W. (1928) ”Zum Hilbertschen Aufbau der reellen Zahlen” Mathematische Annalen 99:
doi:10.1007/BF01459088
2 Wolfram
118-133.
第 3 章 2 重帰納関数
34
「寿司 虚空編」の第 8 話では、以下のように x > 2 の時のアッカーマン関数が矢印表記を使ってあらわ
されることが解説されています。
A(x, y) = 2 ↑x−2 (y + 3) − 3
この式は数学的帰納法で証明できます。
• A(3, 0) = 23 − 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(x, y) が成立すると仮定すると、A(x + 1, y) で成立することを 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 − 3
=
A(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
|
{z
}
y+2 個の 2
=
x−1
2↑
(y + 3) − 3
すなわち、アッカーマン関数 A(x, y) は、x = 2 の時は乗算、x = 3 の時は冪乗、x = 4 の時はテトレー
ション、x = 5 の時はペンテーション、とハイパー x 演算子に相当する増加速度の関数となっています。
3.2
2 重帰納関数
アッカーマン関数はどんな原始帰納関数よりも増加速度が大きい数です。つまり、任意の原始帰納関数
f (x) に対して、
f (x) < A(c, x)
となる c が存在します。それは、アッカーマン関数が 2 重帰納関数であるためです。そのことを、これから
示します。なお、ここでは 1 変数関数について議論を進めますが、f (x) が多変数関数であっても同様の議
論ができます。
前章の原始帰納の定義式において n = 1, B(y) = f (x1 , y), C(n) = h(x1 , y, n) とすると、
B(0) =
B(y + 1)
=
g(x1 )
C(B(y))
3.2. 2 重帰納関数
35
となるため、B(y) = C y (g(x1 )) と書けます。つまり、B(y) は関数 g(x1 ) に対して C(n) の合成を y 回繰り
返した関数です。合成の回数を変数とする関数を作ることが、原始帰納の操作となっています。このことを
「操作を数え上げる」と表記することとします。すなわち、原始帰納の操作は合成操作を数え上げます。し
たがって、関数 f (x) から、合成操作を有限回 (n 回) 繰り返して得られるいかなる関数 g(x) よりも、初期
関数から原始帰納の操作によって得られる関数 f (x) の方が大きくなります。たとえば、f (x) に f (f (x)) の
合成操作を n 回繰り返して得られる関数を gn (x) として、
g1 (x) = f 2 (x) : g1 (1) = f 2 (1), g1 (2) = f 2 (2), ..., g1 (n) = f 2 (n)
g2 (x) = f 3 (x) : g2 (1) = f 3 (1), g2 (2) = f 3 (2), ..., g2 (n) = f 3 (n)
…
gn (x) = f
n+1
(x) : gn (1) = f
n+1
(1), gn (2) = f
n+1
(2), ..., gn (n) = f
n+1
(n)
といった表を作ります。このとき、関数 f (x) に合成操作を x 回繰り返して得られる関数 gx (x) = f x+1 (x)
は、
gx (x) = f x+1 (x) : gx (1) = f 2 (1), gx (2) = f 3 (2), ..., gx (n) = f n+1 (n)
と書く事ができて、これは上の表において右辺を左上から右下へ対角線上に拾い上げています。
このように、操作の回数を数え上げることは対角線上に拾い上げて関数を作成する操作であることから、
「操作の対角化」という言葉が巨大数探索スレッドの中で使われています。これは、いわゆるカントールの
対角線論法と言われる論法です。
さて、アッカーマン関数の漸化式 (3.3) において、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 回繰り返した関数であり、原始帰納の操作を数え上げ
ています。このように、合成作用素を数え上げるような原始帰納を数え上げる 2 重帰納
4
を、以下で定義
します。
4 ハイパー演算子(2
変数版)が原始帰納的であることの証明 http://d.hatena.ne.jp/mathsociety/20090927/1254079255
第 3 章 2 重帰納関数
36
【定義】2 重帰納
合成作用素を数え上げるような原始帰納操作を数え上げる操作を 2 重帰納作用素(操作)とする。
2 重帰納関数 (double recursive function) とは、定義域と値域が非負整数である非負整数個の引数をと
る関数で、引数に対し、ゼロ、後者、射影、合成、原始帰納、2 重帰納の作用素(操作)を有限回適用
した関数である。ただし、その中で 2 重帰納操作を少なくとも 1 回含むものとする。
射影、合成、原始帰納の操作を n 回繰り返して作られた原始帰納関数 f (x) について、その中で最も関数の
増加度が大きい原始帰納の操作を n 回繰り返して作られた関数 A(n, y) は大きくなります。すなわち、x > n
において f (x) > A(x, y) ですから、A(x, y) は f (x) と比べて本質的に大きい、ということになります。
3.3
モーザー数
モーザーは、 スタインハウスの多角形表記 を元として、 モーザーの多角形表記 を作りました5 6 。
MathWorld によれば、スタインハウスが多角形表記を定義したのは 1983 年だとされていて、これはス
タインハウスが出版した ”Mathematical Snapshots” という本の 1983 年版7 に書かれているためですが、
Mathematical Snapshots の 1950 年版にはすでに多角形表記はあったようなので、初出がいつなのかははっ
きりしません。そして、モーザーがどこで多角形表記を公表したのかもはっきりしませんが、MathWorld と
Wikipedia には Moser の出典はなしにそのように記録されていて、そういうことになっているようです。
多角形の中に数字を入れる書き方をして、多角形を重ねることと、多角形の辺の数を増やすことで、大
きな数を作ります。まず、3 角形の中に x を書くことで、xx を表記します。ここでは、x 角形の中の y を
m(x, y) と書きます。
m(3, x) = xx = x ↑ x
次に、4 角形の中の x は、x 重の 3 角形の中に x が入っている数です。すなわち、
m(4, x) = m(3, m(3, …m(3, x)…))(m が x 個)
となります。そして、5 角形の中の x は、x 重の 4 角形の中の x です。スタインハウスは、5 角形の代わり
に円を使ってここで終わりましたが、モーザーはそれを n 角形に拡張しました。この時、5 角形の中の 2 を
メガ (mega) として、メガ角形の中の 2 を モーザー数 (moser)
8
としました。
【定義】モーザー数
モーザーの多角形表記で、5 角形の中の 2 をメガとする。メガ角形の中の 2 をモーザー数とする。
モーザー数 = m(m(5, 2), 2)
メガの大きさは、
5 巨大数研究
m(3, 2) =
22 = 4
m(4, 2) =
m(3, m(3, 2)) = m(3, 4) = 44 = 256
m(5, 2) =
m(4, m(4, 2)) = m(4, 256)
Wiki - スタインハウス・モーザー表記 http://ja.googology.wikia.com/wiki/スタインハウス・モーザー表記
- Steinhaus-Moser Notation http://mathworld.wolfram.com/Steinhaus-MoserNotation.html
7 Steinhaus, H. (1983) ”Mathematical Snapshots” (Galaxy Books) Oxford University Press.
8 巨大数研究 Wiki - モーザー数 http://ja.googology.wikia.com/wiki/モーザー数
6 MathWorld
3.4. グラハム数
37
となります。ここで、m(4, x) の計算は、冪乗の計算を x 回繰り返すので、テトレーションと同じ程度の
増加になります。テトレーションの場合には、xy の y の部分だけが大きくなるところ、m(4, x) では x と
y が同時に大きくなるので、厳密には m(4, x) の方が増加は速いのですが、x の部分を大きくすることは、
y を増加させることと比べるとたいして増加には寄与しないので、結局は同程度、ということになります。
Hypercalc で確認してみます。
x1 = m(3, 256) = 256256
= 3.231700607153 × 10616 (クラス 2)
x2 = m(3, x1 ) = xx1 1
= 10 ↑ (1.992373902865 × 10619 ) (クラス 3)
x3 = m(3, x2 ) = xx2 2
= 10 ↑ 10 ↑ (1.992373902865 × 10619 ) (クラス 4)
x4 = m(3, x3 ) = xx3 3
= 10 ↑ 10 ↑ 10 ↑ (1.992373902865 × 10619 ) (クラス 5)
x5 = m(3, x4 ) = xx4 4
= 10 ↑ 10 ↑ 10 ↑ 10 ↑ (1.992373902865 × 10619 ) (クラス 6)
x6 = m(3, x5 ) = xx5 5
= 10 ↑ 10 ↑ 10 ↑ 10 ↑ 10 ↑ (1.992373902865 × 10619 ) (クラス 7)
3 ↑の繰り返しも、階乗の繰り返しも、xx の繰り返しも、すべてある段階以上は 10 ↑の繰り返しと同じ
で、右肩の数字はびくともしなくなります。この計算から、
m(4, 256) = x256 = 255 P T (1.992373902865 × 10619 ) (クラス 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
グラハム数
1971 年に、グラハム (Ronald Graham) とロートシルト (Bruce Lee Rothschild)9 は「n 次元の超立方体
の合計 2n 個の頂点を総て結び、それを赤と青の二色の何れかに塗る。 このとき n が充分大きいならば, ど
のような塗り方をしても, 必ず同一平面上にある四点でそれらを結ぶ線が総て同一の色であるものが存在す
る」という定理(グラハムの定理)を発表しました。この定理の中の「十分大きい 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)
9 Graham, R. L. and Rothschild, B. L. (1971) ”Ramsey’s Theorem for n-Parameter Sets.” Trans. Amer. Math. Soc.
159: 257-292. doi:10.1090/S0002-9947-1971-0284352-8
第 3 章 2 重帰納関数
38
これは非常に大きい数字ですが、その後、マーティン・ガードナー (Martin Gardner)
10
が 1977 年にサイ
エンティフィック・アメリカンにさらに大きな数を上限として発表しました11 。この記事で発表された数字
が グラハム数 (Graham’s number)
12 13 14 15
として有名になり、1980 年のギネスブック16 に
The highest number ever used in a mathematical proof is a bounding value published in 1977
and known as Graham’s number. It concerns bichromatic hypercubes and is inexpressible
without the special ”arrow” notation, devised by Knuth in 1976, extended to 64 layers.
と記録されました。
【定義】グラハム数
f (x) = 3 ↑...(x 個)...↑ 3 としたときの f 64 (4) を、グラハム数とする。
これは、グラハムが 1971 年に論文で発表した数字よりもさらに大きいもので、グラハムが未公表の論文
に書いていたことがあるようです。グラハムが論文で発表した数字は、このグラハム数と区別して小グラハ
ム数と呼ばれます。
グラハム数の定義において、f (x) は↑の個数を数え上げる 2 重帰納で、f 64 (4) の計算は関数 f (x) に対す
る原始帰納です。したがって、グラハム数は 2 重帰納に原始帰納を重ねた数で、2 重帰納です。グラハム数
の大きさは、次に紹介するコンウェイのチェーン表記を使うと評価出来ます。
3.5
コンウェイのチェーン表記
矢印表記を一般化したコンウェイ (John Horton Conway) の チェーン表記 (Chained arrow notation)
18 19 20 21
17
の定義を、以下に記します。
【定義】コンウェイのチェーン表記
a, b, c を正の整数、X を 1 つ以上の正の整数のチェーン a → b →...→ c とする。
ルール 1: a → b → c = a ↑c b = a ↑ . . . ↑ b
| {z }
ルール 2: X → 1 = X
c
ルール 3: X → 1 → a = X
ルール 4: X → (a + 1) → (b + 1) = X → (X → a → (b + 1)) → b
ここで、ルール 1 は次のルール 1’ に変えても同じである。
ルール 1’: a → b = ab
10 Wikipedia
- マーティン・ガードナー http://ja.wikipedia.org/wiki/マーティン・ガードナー
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
12 巨大数研究 Wiki - グラハム数 http://ja.googology.wikia.com/wiki/グラハム数
13 裏サンデー「寿司 虚空編」第 1 話 http://comic.pixiv.net/viewer/stories/6994
14 巨大数資料 wiki - グラハム数 http://www51.atwiki.jp/largenumbers/pages/5.html
15 Wolfram MathWorld - Graham’s Number http://mathworld.wolfram.com/GrahamsNumber.html
16 Norris McWhirter et al. (1980) Guiness Book of World Records 1980. p. 193.
17 巨大数研究 Wiki - チェーン表記 http://ja.googology.wikia.com/wiki/チェーン表記
18 巨大数資料 wiki - チェーン表記 http://www51.atwiki.jp/largenumbers/pages/9.html
19 Conway, J. H. and Guy, R. K. (1996) ”The book of Numbers” p. 61-62
20 Big numbers (Susan Stepney) http://www-users.cs.york.ac.uk/ susan/cyc/b/big.htm
21 Large Numbers p.4 (Robert Munafo) http://www.mrob.com/pub/math/largenum-4.html
11 Gardner,
3.5. コンウェイのチェーン表記
39
クヌースの矢印表記を自然に拡張するとチェーン表記になります。ルール 1 に矢印表記がすでに使われて
いるため、そのことは一見して分かりにくいのですが、実はルール 1 をルール 1’ に変えても同じです。そ
のことは、次のように証明できます。
【証明】ルール 1’,2,3,4 が成り立つ時に、ルール 1 が成り立つ事を、c に関する帰納法で示す。
(1) c = 1 の時
a→b→1 =
a → b (ルール 2)
= ab (ルール 1’)
= a↑b↑1
よって、ルール 1 が成り立つ。
(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] (矢印表記の定義)
|
{z
}
b−1
=
a ↑c a ↑c . . . ↑c a
|
{z
}
=
a ↑c+1 b (矢印表記の定義)
b
以上で、ルール 1 が成り立つ事が示された。(証明終)
このチェーンは、とても増加率の高い関数です。まず、3 つの変数の場合は、
10 → 3 → 2 =
10 ↑↑ 3 = 10 ↑ 10 ↑ 10 は、グーゴルより大きく不可説不可説転よりも小さい数
10 → 5 → 2 =
10 ↑↑ 5 = 10 ↑ 10 ↑ 10 ↑ 10 ↑ 10 は、第 2 スキューズ数よりも大きな数
3→3→3 =
3 ↑↑↑ 3 = トリトリ
となります。クヌースの矢印表記で書くことのできる原始帰納程度の数は、3 変数チェーンで表記できる程
度の大きさとなります。
第 3 章 2 重帰納関数
40
グラハム数は、f (x) = 3 ↑↑↑...(x 個)...↑ 3 = 3 → 3 → x としたときの f 64 (4) です。
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
となります。
次に、モーザー数と比較します。メガ m(x, 2) は↑が x − 2 個連なる効果と同じなので、3 → 3 → x − 2
程度の大きさになります。この見積もりだと、メガは 3 → 3 → 3、つまりトリトリ程度となって、若干大き
過ぎる気もしますが、その程度のおおざっぱな見積もりです。f (3) = 3 → 3 → 3 = トリトリなので、メガ
よりも f (3) の方が大きい数です。モーザー数の大きさを評価すると、このように計算出来ます。
3 → 3 → 2 → 2 = 3 → 3 → 27
< 3 → 3 → m(5, 2) ≈ モーザー数
< 3 → 3 → f (3)
< 3 → 3 → f (27)
= 3→3→3→2
つまり、↑を 27 個並べる程度の 3 → 3 → 2 → 2 は原始帰納の範囲に入りますが、↑を f(27) 個並べる 3 →
3 → 3 → 2 は、モーザー数を越える 2 重帰納になっています。以上をまとめます。
3.5. コンウェイのチェーン表記
41
チェーン表記による巨大数の比較
無量大数
< 10 → 3 → 2 = 1010
10
< 不可説不可説転 < 10 → 4 → 2 = 1010
1010
< 第 2 スキューズ数 < 10 → 5 → 2 (ここまでハイパークラス 1)
< トリトリ = 3 → 3 → 3 (ハイパークラス 2)
< 3 → 3 → 2 → 2 = 3 → 3 → 27 (ここまで原始帰納)
<
モーザー数 (ここから 2 重帰納)
<
3 → 3 → 3 → 2 = f 3 (1)
<
3 → 3 → 64 → 2 = f 64 (1)
<
グラハム数 < 3 → 3 → 65 → 2
<
3→3→3→3
このように、チェーンの最後の数を増やすこと、そしてチェーンそのものを伸ばすことにより、増加度が
加速度的に増す関数がチェーン表記です。
チェーン表記は、2 重帰納関数です。アッカーマン関数の式
A(x + 1, y + 1) = A(x, A(x + 1, y))
について、x = b, y = 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 回行われます。
42
第 4 章 多重帰納関数
4.1
多重帰納
前章までの内容は、一般的に知られている知識がほとんどです。本章の内容は、主として巨大数探索ス
レッドで議論されて来た内容です。
原始帰納、2 重帰納の定義を拡張して、 n 重の多重帰納関数 (multiply recursive function)
に定義します。
1
をこのよう
【定義】多重帰納
n − 1 重帰納操作を数え上げる操作を n 重帰納作用素(操作)とする。
n 重の多重帰納関数 (multiply recursive function) とは、定義域と値域が非負整数である非負整数個の
引数をとる関数で、引数に対し、ゼロ、後者、射影、合成、原始帰納、2 重帰納、3 重帰納、...、n 重帰
納の作用素(操作)を有限回適用した関数である。ただし、その中で n 重帰納操作を少なくとも 1 回
含むものとする。
4.2
多変数アッカーマン関数
巨大数探索スレッド 7 で、たろう氏によって、アッカーマン関数の拡張 多変数アッカーマン関数
以下のように定義されました。
【定義】多変数アッカーマン関数
2 3
が
n 個の非負整数を引数として以下のように定義される関数 A を n 変数アッカーマン関数とする。
A(□, a) =
A(X, b + 1, 0, □, a)
=
A(X, b + 1, 0) =
A(X, b + 1, a + 1)
=
a+1
A(X, b, a, □, a)
A(X, b, 1)
A(X, b, A(X, b + 1, a))
ただし、a, b : 0 以上の整数, □ : 0 個以上の 0, X : 0 個以上の 0 以上の整数
最後の 2 式により、右から 2 個目の変数は原始帰納、その数え上げが 2 重帰納となります。2 式目が、多
重帰納を定義する肝となります。□に含まれる 0 の数を n とすると、b の項は右から n + 3 番目となります。
1 巨大数研究
Wiki - 多重帰納関数 http://ja.googology.wikia.com/wiki/多重帰納関数
Wiki - 多変数アッカーマン関数 http://ja.googology.wikia.com/wiki/多変数アッカーマン関数
3 巨大数探索スレッド 7-571 でアップされた文書 (たろう, 2007 年 10 月 17 日) http://gyafun.jp/ln/archive/7-571.txt
2 巨大数研究
4.3. 多重帰納に見えてそうでない関数
43
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 変数アッカーマン関数を以下の様に書くことができ
ます。
【定義】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, y, z) = Ax (y, z) は、関数 A(0, 0, z) = z + 1 に対して 2 重帰納操作を x 回繰り返した
関数であり、これは 2 重帰納操作を数え上げる 3 重帰納関数です。
4.3
多重帰納に見えてそうでない関数
2 重帰納も多重帰納の一種ですが、この節に限って 3 重帰納以上を多重帰納とします。チェーンの定義は、
一見すると多重帰納に見えますが、2 重帰納の章で示した様に、2 重帰納操作を繰り返した 2 重帰納関数で
す。一方、前節で示した様に、適切に n 変数アッカーマン関数を定義する事で、n 重帰納関数を作ることが
できます。ここで、n 重帰納関数はいかなる n − 1 重帰納関数よりも大きい、という明確な強弱関係を持ち
ます。
第 4 章 多重帰納関数
44
アッカーマン関数のアッカーマンによるオリジナルの定義は
A(x, y, 0) =
x+y
A(x, 0, 1) =
0
A(x, 0, 2) =
1
A(x, 0, z) =
x
A(x, y, z) =
A(x, A(x, y − 1, z), z − 1)
というもので、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 重帰納どまりです。一方、3 変数アッカーマン関数では、最初に y を
減らして、y が 0 に到達してはじめて x を減らすことができます。そのために、x を 1 減らす計算が y を
減らす計算を数え上げることができます。この計算順序の違いが、2 重帰納か 3 重帰納かの差を生んでいま
す。このことが、多重帰納関数の計算を理解する上では重要です。
4.4
拡張チェーン表記
(a + 1) →…(a + 1) → (z + 1) → (y + 1) と a + 1 が x 個続くチェーンを fa (x, y, z) とします。
4.4. 拡張チェーン表記
45
チェーンの定義から
fa (0, 0, z) =
az
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) は 3 重帰納です。
前章において、n 変数チェーン表記は、n-2 回の 2 重帰納操作を含む 2 重帰納関数である事が示されまし
た。そのことと、上記の計算から、A(x,y,z) は 2 重帰納操作を x 回施した x+2 変数チェーン表記に相当す
る大きさの関数となります。したがって、A(3,3,3) という数は、2 重帰納を 3 回繰り返した 5 変数チェーン
表記に相当する大きさとなり、4 変数表記の 3 → 3 → 3 → 3 よりも大きくなります。
Peter Hurford は、チェーン表記に
a →c b = a →c−1 a →c−1 . . . →c−1 a →c−1 a
{z
}
|
b→′c−1 s
というルールを加えた 拡張チェーン表記
4
を考案しました。ここで、チェーンの規則はルール 1’ を使うの
で、まとめるとこのようになります。
【定義】拡張チェーン表記
a, b, c を正の整数、X を 1 つ以上の正の整数の →c チェーン a1 →c a2 →c ... →c an とする。拡張
チェーン表記は、以下の 5 つの計算規則によって計算する。ここで、→の下につく数字は 1 通りでな
ければならない。
a →1 b = ab
a →c b = a →c−1 a →c−1 . . . →c−1 a →c−1 a
{z
}
|
(c > 1)
b 個の→c−1
X →c 1 =
X →c 1 →c a
X →c (a + 1) →c (b + 1)
X
= X
=
X →c (X →c a →c (b + 1)) →c b
すなわち、3 変数以上の時には、必ず同じ種類の→なのでそのままチェーン表記の規則で計算をして、2
変数になったときに、上の規則によって→の下の数が 1 つ減ります。この拡張チェーン表記を使うと、
4 巨大数研究
3 →2 3
= 3→3→3
3 →2 4
=
3→3→3→3
3 →2 5
=
3→3→3→3→3
Wiki - チェーン表記 http://ja.googology.wikia.com/wiki/チェーン表記
第 4 章 多重帰納関数
46
のように、3 →2 x が x 変数のチェーン表記に相当する関数となります。したがって、3 →2 x は 3 重帰納
です。
→2 のチェーンを伸ばすと、今度は 2 重帰納操作をすることになり、3 重帰納 1 回+2 重帰納たくさん、と
いう関数になります。3 →3 x は、x 変数の 3 →2 x チェーンなので、3 重帰納 2 回分です。3 →n x は、3
重帰納を n − 1 回繰り返した 3 重帰納関数で、x →x x は 4 重帰納関数となります。
4.5
ふぃっしゅ数バージョン 1
ここから、著者が考案した ふぃっしゅ数
5
の説明に入ります。
ふぃっしゅ数とは何か?それは、単純に「大きな数を作ろう」として作られた数です。グラハム数は、数
学の証明で用いられた数なので、実用的な目的がありました。ふぃっしゅ数には、実用的な目的は何もあり
ません。使い方としては「とにかく大きな数」を表すときに使える、というだけです。
「とにかく大きな数」
を言いたいのであれば、それが無量大数であっても不可説不可説転であっても、グラハム数であっても良
く、新たに「ふぃっしゅ数」などというものを作る必要はありません。それでは、なぜそんな数を考案した
のでしょうか。
そもそものきっかけは、大きな数を作ろう!ということでした。2ch 掲示板の巨大数探索スレッド6 では、
たとえば、グラハム数を使って以下の様な数が定義されました。
161 名前:132人目の素数さん :02/06/20 22:25
>> 156 じゃあグラハム数でいってみよう
グラハム数の定義はご存知だと思うが 3 ↑↑↑↑ 3(これがどれだけ超巨大かはグラハム数ス
レ参照)の数だけ 3 と 3 の間に↑が挟まった数を 1 段階として、2 段階は 1 段階の数だけ 3 と 3
の間に↑がある数と繰り返した 63 段階目の数がグラハム数と定義されてる。
この前段階の数だけ↑が挟まる数が次の段階という 63 回の変換の 1 回をG変換と名付ける。
N01 グラハム数回だけG変換した数回変換した数回変換した∼この繰り返しを
N02 グラハム数回だけG変換した数回変換した数回変換した∼この繰り返しを
N03 グラハム数回だけG変換した数回変換した数回変換した∼この繰り返しを
N04 グラハム数回だけG変換した数回変換した数回変換した∼この繰り返しを
とやっていって、Noがグラハム数回まで到達したら終り
‥‥だけだと面白くないので このNoの繰り返しをグラハム数回のG変換した数回変換した数回変換した
∼この繰り返しをグラハム数回のG変換した数回変換した数回変換した
上と同じく 1 行目がN 01、2 行目がN 02 としてN 0 グラハム数までいって終了 5 巨大数研究
6 巨大数研究
Wiki - ふぃっしゅ数 http://ja.googology.wikia.com/wiki/ふぃっしゅ数
Wiki - 巨大数探索スレッド http://ja.googology.wikia.com/wiki/巨大数探索スレッド
4.5. ふぃっしゅ数バージョン 1
47
‥‥だけだと面白くないので このN 0 の繰り返しをグラハム数回のG変換した数回変換した数回変換した
∼この繰り返しをグラハム数回のG変換した数回変換した数回変換した
上と同じく 1 行目がNO 1、2 行目がNO 2 としてNOグラハム数までいって終了
以上のように延々繰り返してNOの種類がグラハム数種類に到達した時の数 これに対して、このように大きな数を定義するプロセスを追う事で、グラハム数を定義の中で用いずに、
さらにグラハム数よりも大きな数、上記の数よりも大きな数を定義しよう、という目的で、以下の様な考察
がされました (2ch 過去ログ7 の 317-319 の発言)。
これまでの書き込みで「いかにして大きな数を作るか」というプロセスを一般化すると、大き
な数と増加の程度が大きい関数を生み出していくプロセスだと表現できる。
たとえば、
「m という数に f (x) という変換を n 回繰り返す」という表現をするときに、m, f (x), n
に使えるのは今までに定義された数と関数のみ。そこで、数と関数を双方ともに帰納的に定義
していくプロセスを追っていくことにする。
そこで、自然数 m と関数 f (x) のペアから、自然数 n と関数 g(x) のペアを生み出す変換(写
像)を
S : [m, f (x)] → [n, g(x)]
と表記することにすると、たとえば3↑↑↑↑3は、自然数4と、f (x) = 3(↑が x 個)3か
ら f (4) とあらわされる。3↑↑↑↑3個だけ↑がはさまった数、は 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 変換の方がより関数を増加させる。
そこで、これから先は「いかにしてより大きな数、関数を生み出す S 変換を作り出すか(こ
れを「より大きいS変換」と呼ぶ」といった考察をする。
その第1段階として、Ackermann 関数にならい、
B(0, n)
= f (n)
B(m + 1, 0) =
B(m + 1, n + 1)
g(x)
7 2ch 過去ログ
=
B(m, 1)
B(m, B(m + 1, n))
= B(x, x)
- 一番でかい数だした奴が優勝 (ふぃっしゅ数の提起) http://www.geocities.co.jp/Technopolis/9946/log/ln023.html
第 4 章 多重帰納関数
48
としたときに、
S : [m, f (x)] → [g(m), g(x)]
とする。少なくとも、これ以上に大きいS変換はこれまでにあらわれていない。したがって、た
とえば [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 変換を大変な数繰り返した変換が得られるため、2回くりかえしただけで、すで
にこのスレッドに登場したいかなる有限の数よりも大きな数が得られる。
この発言の直後に、ふぃっしゅ数が定義されています。このように、数と関数から数と関数を生成する「S
変換」という概念を導入する事で、巨大数を生み出そうとしたのがふぃっしゅ数です。これがふぃっしゅ数
の定義です8 。
【定義】ふぃっしゅ数バージョン 1
[1] 自然数と関数のペアから、自然数と関数のペアへの写像 S(S 変換)を以下で定義する。
S(m, f (x)) = (g(m), g(x))
ただし g(x) は以下で与えられる。
B(0, n) =
f (n)
B(m + 1, 0)
=
B(m, 1)
B(m + 1, n + 1)
=
B(m, B(m + 1, n))
g(x) =
B(x, x)
関数のみに着目して Sf (x) = g(x) と書くこともできる。
[2] 自然数、関数、変換の組から同様の組を生み出す写像 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 成分をふぃっしゅ数バージョン 1、第 2 成分をふぃっしゅ関数バージョン 1 と定義する。
8 巨大数研究
Wiki - ふぃっしゅ数バージョン 1 http://ja.googology.wikia.com/wiki/ふぃっしゅ数バージョン 1
4.5. ふぃっしゅ数バージョン 1
49
ここから先、色々なバージョンのふぃっしゅ数が登場することになるため、このふぃっしゅ数を「ふぃっ
しゅ数バージョン 1」と名付けました。また、ふぃっしゅ数バージョン 1 を F1 、ふぃっしゅ関数バージョン
1 を F1 (x) とします。一般に、ふぃっしゅ数バージョン N を FN 、ふぃっしゅ関数バージョン N を FN (x) と
表記します。
また、当初は
S : [m, f (x)] →
[g(m), g(x)]
SS : [m, f (x), S] →
[n, g(x), S2]
S2
=
S2 : [m, f (x)] →
S f (m)
[n, g(x)]
のように表記していましたが、ミカヅキモさんが表記を分かりやすく整理しました9 。どちらの表記でも、
同じ定義です。
その後、ふぃっしゅ数の大きさが計算されました。同スレッドの 329,331,377-379 の計算内容を転記します。
[3, f (x) = x + 1] にS変換を 1 回すると、
B(0, n) = n + 1
B(m + 1, 0) =
B(m + 1, n + 1)
g(x)
=
B(m, 1)
B(m, B(m + 1, n))
= B(x, x)
となるので、B(m, n) はアッカーマン関数と一致し、g(x) = A(x, x) となるため、
S : [3, x + 1] → [A(3, 3), A(x, x)]
となる。
A(3, 3) = 61 なので10 、S変換 1 回ではまだたいした大きさにはならない。
S変換の 2 回目。今度は、
B(0, n) = A(n, n)
B(m + 1, 0) =
B(m + 1, n + 1)
g(x)
=
B(m, 1)
B(m, B(m + 1, n))
= B(x, x)
9 巨大数研究 Wiki - ユーザーブログ:Mikadukim/SS 変換の明示的な表記について http://ja.googology.wikia.com/wiki/ユー
ザーブログ:Mikadukim/SS 変換の明示的な表記について
10 裏サンデー「寿司 虚空編」第 2 話 http://comic.pixiv.net/viewer/stories/6995
第 4 章 多重帰納関数
50
となるが、この 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) ですでにグラハム数を超えているように思う。
g(2) ですでグラハム数を超えてしまい、さらに g(x) は x が増えるにつれてものすごい勢いで増
えるので、g(61) の大きさは想像を絶する。S変換 2 回目にして、g(61) というとんでもない数
が得られることになる。
S変換の3回目は
B(0, n)
= g(n)
B(m + 1, 0) =
B(m + 1, n + 1)
=
gg(x) =
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)
gg(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, g(61))
B(1, 1)
=
g(61)
B(1, 2)
=
g(g(61))
B(1, 3)
=
g(g(g(61)))
つまり、gg(2) は 61 を g(x) に代入して…と g(61) 回繰り返した数。この調子で gg(3), gg(4)...
と増えていき、gg(g(61)) が S 変換を3回繰り返した数。
4.5. ふぃっしゅ数バージョン 1
51
SS 変換2回目は、SS 変換1回によって得られた m, f (x), S に対して S f (m) とする、すなわ
ち S 変換(つまり最初の S 変換を4回繰り返す変換)を f (m) 回繰り返す。ここで、f (m) 回
とは SS 変換1回、つまり S 変換4回によって得られる大きな数 m を、これまた S 変換4回に
よって得られる増加率の大きな関数 f (x) に代入した数なので、とてつもなく大きな数。その数
だけ、新 S 変換を繰り返す、ということ。
つまり、大きな数と関数から大きな数と関数を生み出し、その生み出された大きな数と関数
から大きな S 変換を生み出し、大きな S 変換がさらにとてつもなく大きな数と関数を生み出す、
とお互いがお互いを増幅させていく。
この計算に対して、巨大数探索スレッドでは以下の様な反応となりました。
380 名前:132人目の素数さん :02/07/02 19:47
うぎゃーーーーーーーーーーーーーっ!
!
!
でっ、でけえ!
!
!
フィッシュ数は文句なし世界一、宇宙一の数だ!
!
!
!
!
!
グラハム数とフィッシュ数を比べると、グラハム数は限りなく0に近い
お疲れ様でした、
386 名前:132人目の素数さん :02/07/02 20:25
ていうか
現実にあるものを文字にするだけの数字とかより
フィッシュ数のこと考えろ!
もうすごいから。すごいしヤバイから。
388 名前:132人目の素数さん :02/07/02 20:32
小・中学生の頃、講談社のブルーバックスの宇宙や物理の本で
全宇宙のニュートリノの数とか光子の数が 10^88 とかいう数字を見て
ぶったまげてたのが、なんかカワイク思えるよ
単に「とても大きな数を定義した」という以上の何者でもないのですが、これがこのように感銘を呼ぶと
ころが巨大数の不思議な魅力です。
巨大数探索スレッドでは、このふぃっしゅ数を具体的に計算しようとして、それがいかに巨大な数になる
か、といったことで盛り上がりを見せます11 。それが、巨大数探求の道へのスタートでした。
Code Ass (@aycabta) 氏12 が、ふぃっしゅ数バージョン 1 の Ruby による計算プログラム13 を作成しま
した。ふぃっしゅ数は大きすぎるので、メモリや時間の制限で実際には計算できませんが、プログラムを読
むことで計算の手順を確認することができます。Code Ass 氏は、他にもアッカーマン関数14 と矢印表記15
とチェーン表記16 の計算プログラムを作成しました。
11 2ch
過去ログ - 695 氏の計算 http://www.geocities.co.jp/Technopolis/9946/log/ln024.html
@aycabta https://twitter.com/aycabta
13 GitHub - aycabta/fish-number https://github.com/aycabta/fish-number
14 GitHub - aycabta/ackermannr https://github.com/aycabta/ackermann
15 GitHub - aycabta/arrow-notation https://github.com/aycabta/arrow-notation
16 GitHub - aycabta/chained-arrow-notation https://github.com/aycabta/chained-arrow-notation
12 Twitter
第 4 章 多重帰納関数
52
ふぃっしゅ数 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 変換の式は
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))
= A(1, 0, 0, 3) = A(3, 0, 3) = A(2, 3, 3)
4.5. ふぃっしゅ数バージョン 1
53
よって、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, 1, n + 1)
=
A(1, 0, 0, A(1, 0, 1, 2))
=
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)))
=
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))
第 4 章 多重帰納関数
54
これは、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 つ延長する効果を持つことが、比較的早い段階で検証さ
れていました17 。
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)
C(x, y) ≈
3 → 3 → (y + 1∼2) → (x + 1)
D(x, y) ≈
3 → 3 → 3 → (y + 1∼2) → (x + 1)
まで計算できました。どうやらS変換 1 回で 3 → がひとつ延長されるようです。こ
れでいよいよふぃっしゅ数が (近似的に) 求められるのか?
Aeton 氏の計算によれば18
19
、SS 変換は S 変換で得られた巨大数の回数 S 変換を繰り返すことなので、
チェーンを段重ねする構造となり、そのことからふぃっしゅ数バージョン 1 は拡張チェーン表記でこのよう
に近似できるようです。
5(→ 2)64(→ 2)2 < F1 < 6(→ 2)64(→ 2)2
4.6
ふぃっしゅ数バージョン 2
ふぃっしゅ数バージョン 2
17 巨大数探索スレッド
20
は以下の様に定義されます。
3 の過去ログ http://www.geocities.co.jp/Technopolis/9946/log/ln032.html
ふぃっしゅ数の計算 http://togetter.com/li/568230
19 Twitter @aetonal (2015 年 9 月 14 日) https://twitter.com/aetonal/status/643407430471282688
20 巨大数研究 Wiki - ふぃっしゅ数バージョン 2 http://ja.googology.wikia.com/wiki/ふぃっしゅ数バージョン 2
18 Togetter:
4.6. ふぃっしゅ数バージョン 2
55
【定義】ふぃっしゅ数バージョン 2
[1] 自然数と関数のペアから、自然数と関数のペアへの写像 S(S 変換)を以下で定義する。
S(m, f (x)) = (g(m), g(x))
ただし g(x) は以下で与えられる。
B(0, n) =
f (n)
B(m + 1, 0)
=
B(m, 1)
B(m + 1, n + 1)
=
B(m, B(m + 1, n))
g(x) =
B(x, x)
関数のみに着目して Sf (x) = g(x) と書くこともできる。
[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 (x) に 2 を代入した S 2 (2)
(S ∗ f )(3) は f (x) に S 変換を 3 回施して得られる S 3 (x) に 3 を代入した S 3 (3)
(S ∗ f )(n) は f (x) に S 変換を n 回施して得られる S n (x) に n を代入した S n (n)
というような関数です。この関数 (S ∗ f )(x) は、関数 f (x) に S 変換を有限回 (N 回) 施したいかなる関数よ
りも、x > N において大きくなります。これが、つまり 2 重帰納である S 変換の操作を数え上げることに
よって、いかなる 2 重帰納よりも強い 3 重帰納の操作とした SS 変換を定義した、ということです。F2 (x)
は、3 重帰納操作を 63 回施した 3 重帰納関数です。
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)
第 4 章 多重帰納関数
56
が成り立っています。そして、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+1 (0, n)
Ba,b (m, B(m + 1, 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)
と等しいため、帰納的に 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.7
バード数から配列表記へ
バード氏
21
がホームページ uglypc.ggh.org.uk 上で公開していたバードの矢印回転表記とバード数につ
いて、巨大数探索スレッドでは 2002 年から色々と議論がされてきました。
21 巨大数研究
Wiki - Chris Bird http://ja.googology.wikia.com/wiki/Chris Bird
4.7. バード数から配列表記へ
57
まず、矢印回転表記については、拡張チェーン表記のように矢印に添え字をつけることを、矢印を回転す
ることで表記し、矢印を n 回転する↑ n という記号を導入しています。したがって、拡張チェーン表記と同
様に、矢印を伸ばす操作は 2 重帰納操作で、矢印を回転させることが 2 重帰納操作を数え上げる 3 重帰納
操作となります。そして、拡張チェーン表記で x →x x が 4 重帰納関数となることと同様に、矢印を回転さ
せる回数を数える矢印回転関数が 4 重帰納関数となります。拡張チェーン表記とバードの矢印回転表記は、
細かい定義の違いはあってもほぼ同じ関数であり同等の増加速度です。
バード数は、この 4 重帰納の矢印回転関数に 2 重帰納、原始帰納、合成を組み合わせた 4 重帰納関数で、
多変数アッカーマン関数で A(1, 0, 1, 2, 2) よりは小さい数です。
巨大数探索スレッドでは、ふぃっしゅ数に対してバード数が見つけられて、魚と鳥の対決だと盛り上がっ
ていましたが、バード氏は日本の掲示板でそんなことで盛り上がっているとはまったく知らなかった事で
しょう。そのバード氏のバード数のページはなくなり、巨大数の探求は終わっていたかに見えました。とこ
ろが、バード氏は、海外のグーゴロジスト達といっしょにさらに巨大数の探求を進めていました。
バード氏は、ロバート・ムナフォ氏のサーバーの上に、巨大数のページ22 を開設し、古いバード数より
も大きな巨大数を作っていました。バード氏のホームページには、いくつかの段階を持って巨大数が定義さ
れています。まず最初に、バードの線形表記 (Bird’s linear notation) を考えています。
アメリカのグーゴロジスト、ジョナサン・バウアーズ (Jonathan Bowers)
23 24
は、
「現代巨大数論の父」
(the father of modern googology) と呼ばれています。彼は、バード氏や John Spencer 氏 の助けを借りて、
巨大数を表記する BEAF
25
という手法を考えました。Googology Wiki では、様々な関数が BEAF 表記
によって大小比較されています。彼は、非常に多くの巨大数の名前をつけました。その中の 1 つが、本書で
紹介したトリトリです。
BEAF では、まず 配列表記 (Array notation)
26
を考えます。この BEAF の配列表記とバードの線形表
記は、BEAF の構築にはバードも関わっていることもあり、まったく同じです。 これが、その定義です。
22 Chris
Bird’s Super Huge Numbers http://mrob.com/users/chrisb/
Wiki - Jonathan Bowers http://ja.googology.wikia.com/wiki/Jonathan Bowers
24 Hedrondude’s Home Page http://www.polytope.net/hedrondude/home.htm
25 巨大数研究 Wiki - BEAF http://ja.googology.wikia.com/wiki/BEAF
26 巨大数研究 Wiki - 配列表記 http://ja.googology.wikia.com/wiki/配列表記
23 Googology
第 4 章 多重帰納関数
58
【定義】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} = {a, a, a, . . . , {a, b − 1, 1, . . . , 1, c, d, . . . , n}, c − 1, d, . . . , n}
• その次の 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}
= {3, 3{3,2,2} , 2}
= {3, 3{3,{3,1,2},1} , 2}
= {3, 3{3,3} , 2} = {3, 33 , 2}
3
= {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
{a, b, c} = a → b → c = a ↑c b
4.7. バード数から配列表記へ
59
c = 1 の時は {a, b} = a ↑ b となり、c > 1 の時は
{a, b, c}
=
{a, {a, b − 1, c}, c − 1}
=
a ↑c−1 {a, b − 1, c}
=
a ↑c−1 a ↑c−1 {a, b − 2, c}
=
... = a ↑c b
となります。次に、4 変数の場合です。
{3, 65, 1, 2}
= {3, 3, {3, 64, 1, 2}, 1} = {3, 3, {3, 64, 1, 2}}
= {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(1, 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 章 多重帰納関数
60
f (m) = {n + 1, m, a0 , X}(X は 0 個以上の要素) とすると
{n + 1, 2, a0 + 1, X}
= {n + 1, {n + 1, 1, a0 + 1, X}, a0 , X}
= {n + 1, n + 1, a0 , X} = f (n + 1)
{n + 1, 3, a0 + 1, X}
= {n + 1, {n + 1, 2, a0 + 1, X}, a0 , X}
= {n + 1, f (n + 1), a0 , X}
= f 2 (n + 1)
{n + 1, 4, a0 + 1, X}
= {n + 1, {n + 1, 3, a0 + 1, X}, a0 , X}
= f 3 (n + 1)
{n + 1, m + 1, a0 + 1, X}
= f m (n + 1)
となって、2 番目の要素 m + 1 が合成を繰り返す回数 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 重帰納です。以下、3 番目と 4 番目の要素が 1 になると 2 重帰納で
ある 4 番目の要素を数え上げる 3 重帰納となり、というように多変数アッカーマン関数と左右の方向が逆の
関係になります。多変数アッカーマンでは原始帰納が右から 2 番目の要素でしたが、配列表記では左から 2
番目は合成で、3 番目が原始帰納となります。
以上の関係をふまえて、配列表記と多変数アッカーマン関数の大きさを比較すると、n > 1 に対してこの
ようになります。
{n + 1, n + 1, n + 1, n + 1} = {n + 1, 2, 1, 1, 2}
≈
A(1, 0, 0, n)
{n + 1, n + 1, n + 1, n + 1, n + 1} = {n + 1, 2, 1, 1, 1, 2}
≈
A(1, 0, 0, 0, n)
{n + 1, 2, a0 + 1, a1 + 1, a2 + 1, ..., ak + 1}
≈
A(ak , ..., a2 , a1 , a0 , n)
{n + 1, m + 1, a0 + 1, a1 + 1, a2 + 1, ..., ak + 1}
≈
f m (n), f (n) = A(ak , ..., a2 , a1 , a0 , n)
ここで、配列表記では
{1, a0 , a1 , ..., ak }
= 1
{2, a0 , a1 , ..., ak }
= 4 (k > 1, a0 > 1, ak > 1 のとき)
となります。つまり、4 変数以上の配列表記で一番左の要素が 2 だと 4 になってしまいます。したがって、
配列表記で巨大数を表記する時には、一番左の要素は 3 以上とします。
4.8. ふぃっしゅ数バージョン 3
61
例えば 4 変数の場合には、このように計算されます。b > 1, c > 0, d > 1 として、
{2, b, c, d}
= {2, {2, b − 1, c, d}, c − 1, d}
= {2, X1 , c − 1, d} (ここで X0 = b, Xn = {2, Xn−1 − 1, c, d})
= {2, X2 , c − 2, d} = ... = {2, Xc−1 , 1, d} (c = 1 のときは、最初からこの式になる)
= {2, 2, Y, d − 1} (ここで Y = {2, Xc−1 − 1, 1, d})
= {2, {2, 1, Y, d − 1}, Y − 1, d − 1} = {2, 2, Y − 1, d − 1}
= {2, 2, Y − 2, d − 1} = ... = {2, 2, 1, d − 1}
= {2, 2, {2, 1, 1, d − 1}, d − 2} = {2, 2, 2, d − 2} = {2, 2, 1, d − 2}
= {2, 2, 1, d − 3} = {2, 2, 1, d − 4} = ... = {2, 2, 1, 1}
= {2, 2} = 4
ちなみに、第 1 回国際巨大数オリンピック27
28
では
チェーン表記と配列表記に関する次の不等式を満たすような 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 変数以上になるとチェー
ン表記を超えます。このことをバードが証明したものが バードの証明
29 30
です。日本の巨大数論では、
チェーン表記が 2 重帰納(3 変数アッカーマン)のレベルであることが分かったことで巨大数の理解が大き
く進みましたが、海外の巨大数論では、このバードの証明によってチェーン表記が 4 変数配列表記(=4 変
数のバードの線形表記)のレベルであることが分かったことが重要で、バード氏はチェーンの拡張である矢
印回転表記を捨てて、バードの線形表記を基本として、さらに発展をさせることとなったようです。
4.8
ふぃっしゅ数バージョン 3
ふぃっしゅ数バージョン 3 (F3 )
27 第
31
は、以下のように定義されます。
1 回国際巨大数オリンピック http://ja.googology.wikia.com/wiki/スレッド:1793
http://googology.wikia.com/wiki/User blog:Wythagoras/Results of the First International Googological Olympiad
29 巨大数研究 Wiki - バードの証明 http://ja.googology.wikia.com/wiki/バードの証明
30 5 変数以上のバードの線形表記がチェーン表記よりも強い証明 http://www.mrob.com/users/chrisb/Proof.pdf
31 巨大数研究 Wiki - ふぃっしゅ数バージョン 3 http://ja.googology.wikia.com/wiki/ふぃっしゅ数バージョン 3
28
第 4 章 多重帰納関数
62
【定義】ふぃっしゅ数バージョン 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) とする。
この定義は、F1 や F2 と比べると異なった表現が用いられていますが、内容は F2 の拡張です。また、
「巨
大数探索スレッド」で定義された F3 (旧 F3 ) の定義とも、異なっています。旧 F3 の定義の中で、最も本質
的な部分を記述したものが新 F3 です。旧 F3 の定義については、煩雑になるためここには記しません。
そこで、F1 ,F2 , 旧 F3 , 新 F3 の定義の変遷について表 4.1 にまとめます。
表 4.1: F1 から F3 までの定義の変遷
バージョン
定義
F1
2 重帰納操作である S 変換 (数と関数のペアから数と関数のペアへの写像)
S 変換を多数回繰り返す操作 (SS 変換)
F2
S 変換 (2 重帰納) の回数を数え上げる SS 変換 (3 重帰納)
(SS 変換は数、関数、変換から数、関数、変換への写像)
旧 F3
F2 の S 変換,SS 変換,SSS... 変換の定義に相当する s(n) 変換 (多重帰納)
帰納回数を数え上げる ss(1) 変換
新 F3
F3 の s(n) 変換の定義を、関数から関数への写像(汎関数)へと簡略化
s(1) 変換の定義 (F1 ,F2 の S 変換に相当) を、2 重帰納から原始帰納へと簡略化
つまり、F1 から旧 F3 まで、定義を拡張することでより高い帰納程度を持つ関数、そして巨大数を作って
きましたが、その結果、旧 F3 の定義は非常に複雑なものになりました。新 F3 では、旧 F3 の定義の中か
ら、高い帰納程度を持つ関数を作るために必要な定義のみを残して簡略化しました。旧 F3 と新 F3 の大き
さは厳密には異なりますが、関数の帰納程度が同程度になります。
ここで、新 F3 の定義の 2 つの簡略化について説明します。まずは、1 つ目の簡略化についてです。SS 変
換は「数と関数と S 変換」から「数と関数と S 変換」への写像であり、S 変換の回数を数え上げることで、
大きな関数を作っています。S 変換そのものは、S 変換の回数を増やすことで大きくしていますが、そのこ
4.8. ふぃっしゅ数バージョン 3
63
と自体は関数の大きさを大きくする事に本質的に役立っていません。したがって、SS 変換の定義の中で、
S 変換を大きくするしくみは「無駄なしくみ」ということになります。また、数を関数に代入する定義につ
いても、関数さえ定義されれば最終的にできた関数に数を代入すればいいのですから、「無駄な定義」とい
うことになります。このように、SS 変換の定義は「関数から関数への写像」つまり汎関数の定義の部分が
本質的ということになります。そこで、s(n) 変換は汎関数を定義としました。
次に、新 F3 の 2 つ目の簡略化について説明します。これまで、S 変換はアッカーマンを元にした 2 重帰
納操作で定義されていました。そして、2 重帰納操作を数え上げることで 3 重帰納操作を、それをまた数え
上げることで 4 重帰納操作を、という定義を重ねる事で、多重帰納操作が定義されました。ここで、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) とすれば、s(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 重帰納を定義しています。ここから先の大きさ
の評価は、多変数アッカーマン関数や配列表記では間に合わないので、次の章で「急増加関数」を使ってし
ます。
64
第 5 章 順序数と急増加関数
5.1
多重帰納を超えて
前章で示したように、F3 (x) はいかなる多重帰納関数よりも大きな関数です。ここから先は、F3 (x) より
も大きな関数、そして巨大数を探求する事になります。では、そのように大きな関数を、どうやって比較す
るのでしょうか。
本書に登場する大きな関数は、計算によって値を求めることで大きさを比較することは現実的に不可能
です。グラハム数ですら実際に計算することは無理ですから、それよりも大きな巨大数については関数の性
質を調べて大きさを比較するよりありません。
多重帰納の範囲にある関数であれば、たとえば、3 重帰納関数の F2 (x) よりも、4 重帰納関数の 5 変数
アッカーマン関数の方が大きい、というように、それが何重帰納であるかを調べる事で、関数の大きさを比
較できます。
では、多重帰納よりも大きな関数を定義したときに、その大きさをどのように比較するのでしょうか。
そのための有効な手段が、本章で解説するハーディー関数です。ハーディー関数を理解するためには、ま
ず「順序数」の理解が必要です。ハーディー関数は、関数の大きさを順序数によって階層づけることができ
ます。多重帰納以上の関数についても、その大きさを相当するハーディー関数によって対応づけられる順序
数の大きさによって比較する事が可能となります。
そこで、本章ではまず順序数とハーディー関数について解説し、これまでに出てきた関数の大きさをハー
ディー関数を用いて評価します。次章以降では、様々な関数の大きさを主としてハーディー関数またはその
別表記である急増加関数を用いて評価します。
5.2
順序数
順序数 (ordinal number)
1 2 3
とは、ゲオルク・カントール (Georg Cantor)
4
による自然数を拡張した
5
概念であり、このように定義されます 。
【定義】順序数
順序数とは、整列集合の順序型である。
そこで、まずは整列集合と順序型について簡単に書いておきます。
1 数学
Wiki - 順序数 http://ja.math.wikia.com/wiki/順序数
- 順序数 http://ja.wikipedia.org/wiki/順序数
3 MathWorld - Ordinal Number http://mathworld.wolfram.com/OrdinalNumber.html
4 Wikipedia - ゲオルク・カントール http://ja.wikipedia.org/wiki/ゲオルク・カントール
5 他の定義方法もあるが、本書では Principia Mathematica や MathWorld で採用されていて、簡明なこの定義を使って説明す
る。ZF 公理系では順序同型の集合全体を集合として取り扱うことができないという問題はあるものの、型理論や Quine の新基礎集
合論ではこの定義も有効であると英語版 Wikipedia には記述されている。
2 Wikipedia
5.2. 順序数
まずは、 順序集合 (ordered set)
65
6
についてです。順序集合とは「順序」の概念が定義された集合です。
順序が定義されると、集合の 2 つの要素を比較して、どっちが先でどっちが後かという順序を考えること
ができます。ここで、順序が決まるかもしれないし、決まらないかもしれません。そして、必ず順序が決ま
る集合は 全順序集合 (totally ordered set) になります。全順序集合に対して、順序が決まらないかもしれ
ない一般の順序集合は 半順序集合 (partially ordered set) とも言います。全順序集合は半順序集合の一種
です。たとえば、自然数全体の集合、有理数全体の集合、実数全体の集合は、通常の大小関係によって全順
序集合となります。たとえば、実数全体の集合から 2 つの要素である数字 a, b を取り出せば、その大小関係
(順序)が必ず決まるからです。
このことを、もっときっちりと書きます。集合 X に対して、次の条件をみたす順序関係 ≤ が定められ
るとき、順序関係 ≤ は集合 X 上の全順序であると言います。そして、このような集合と順序関係をセッ
トにして全順序集合と言います。ここで、全順序律以外の 3 つの条件をみたす時には、半順序集合、すなわ
ち順序集合となります。
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 のいずれか(両方でもよい)が必ず成り立つ。(全
順序律)
このように、順序集合は集合と順序関係がセットで定義されますので、(X, ≤) のように両者をまとめて
書くことがあります。
整列順序 (well-order) を備えている集合を 整列集合 (well-ordered set)
7 8
と言います。ここで、集合
X 上の整列順序関係とは、整礎な全順序関係のことであり、二項関係 ≤ が 整礎 (well-founded) であると
は、以下のように定義されます。
【定義】整礎な二項関係
二項関係 ≤ が整礎であるとは、集合 X の任意の空でない部分集合 A に対し、A の最小元 a0 が存在
する(つまり、任意の A の元 a に対して、a0 ≤ a が成り立つ)ことを言う。
選択公理を仮定すれば、このことは X の要素による無限降下列を持たないことと同値である。
9 10
ここで、選択公理 (axiom of choice)
とは、公理的集合論における公理のひとつで、どれも空でない
ような集合を元とする集合(すなわち、集合の集合)があったときに、それぞれの集合から一つずつ元を選
び出して新しい集合を作ることができるというものです。カントールは、選択公理を自明なものとみなして
いました。本書でも、選択公理を仮定します。
6 Wikipedia
- 順序集合 http://ja.wikipedia.org/wiki/順序集合
Wiki - 整列集合 http://ja.math.wikia.com/wiki/整列集合
8 Wikipedia - 整列集合 http://ja.wikipedia.org/wiki/整列集合
9 Wikipedia - 選択公理 http://ja.wikipedia.org/wiki/選択公理
10 選択公理 http://alg-d.com/math/ac/
7 数学
第5章
66
順序数と急増加関数
整数全体の集合に通常の大小関係を入れると、最小元がないので整列集合ではありませんが、0 以上の整
数全体の集合に通常の大小関係を入れると整列集合になります。
0 以上の有理数全体の集合に通常の大小関係を入れると、整列集合にはなりません。部分集合として「正
の有理数」を取った時に、最小元が存在しない(どんなに小さい数 a を取っても、さらに小さい数 a/2 が
集合の要素となる)ためです。また、数列 an = 1/n は無限降下列になります。
次に、 順序型 (order type)
11 12 13
の定義をします。順序型とは全順序集合を分類する方法の一つで、
すべての全順序集合 (A, ≤) は、順序型に関係付けられます。
2 つの集合 A と B が同じ順序型であるとは、 順序同型 (order isomorphic) であることです。
【定義】順序同型
全順序集合 (A, ≤) と (B, ≤) が順序同型であるとは、すべての A の要素 a1 , a2 に対して、
a1 ≤ a2 ⇐⇒ f (a1 ) ≤ f (a2 )
となるような A から B への全単射 f が存在することである。
ここで、全単射 (bijective)
14
とは、写像 f : A → B に対し、2 つの条件
1. 全射性: f (A) = B
2. 単射性: 任意の A の元 a1 , a2 について、f (a1 ) = f (a2 ) ならば a1 = a2
がともに成り立つことを言います。「一対一対応」と言うこともあります。
さて、これで整列集合と順序型の定義ができましたので、順序数の定義ができたことになります。この定
義を元に、まずは有限な全順序集合の順序数、すなわち 有限順序数 を考えます。有限な全順序集合は、要
素の無限降下列を作ることができないので整礎です。全順序集合 A と B がそれぞれ k 個の要素を持つとき
(k は非負整数)、順序同型なので同じ順序型を持ちます。その順序型が順序数で、0, 1, 2, 3, ... のように要
素の個数 k と等しい自然数(非負整数)で表記します。このように、有限順序数が自然数で表記されるた
め、順序数は自然数を拡張した概念であるとされます。
有限でない順序数を 無限順序数 (超限順序数) と言います。超限順序数は、通常ギリシャ文字の小文字で
表記されます。最小の超限順序数は、ω と表記され、自然数全体の集合 N = {0, 1, 2, 3, . . .} の順序型です。
これは、カントールが定義した超限数 (transfinite number) の中で最小です。
数列 0, 1, 2, 3, … は ω に収束します。このとき、0, 1, 2, 3, … を、ω に収束する 基本列 (fundamental sequence)
あるいは 収束列 と呼びます。ω に対する収束列は、1 種類とは限りません。たとえば、数列 0, 2, 4, 6, ... も
ω への収束列となります。
最小の無限順序数 ω に対して、ω + 1, ω, ... といった順序数を定義することができます。なお、順序数で
は交換法則が成り立ちません。1 + ω は 1 + 1, 1 + 2, 1 + 3, ... と計算したときの極限なので、1 + ω = ω と
なります。
11 数学
Wiki - 順序型 http://ja.math.wikia.com/wiki/順序型
- 順序型 http://ja.wikipedia.org/wiki/順序型
13 MathWorld - Order Type http://mathworld.wolfram.com/OrderType.html
14 Wikipedia - 全単射 http://ja.wikipedia.org/wiki/全単射
12 Wikipedia
5.2. 順序数
67
全順序集合 (A, ≤) の順序数が α であれば、α よりも小さい(< α)すべての順序数と順序同型になり
ます。そのことから、順序数を自分自身よりも小さいすべての順序数の集合であると定義することができま
す。ジョン・フォン・ノイマン (John von Neumann)
15
は、順序数をそのように定義しました。これは標
準的な順序数の表記法で、その表記法によればこのようになります。
0 =
{}
1 =
{0}
2 =
{0, 1}
3 =
{0, 1, 2}
4 =
{0, 1, 2, 3}
ω
= {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 )
を満たしていません(a1 = 0, a2 = 1 のときに不成立)。この式を満たすような全単射 f は存在しないので
(もし存在すれば、f (k) = ω となる自然数 k が存在するが、順序同型の条件によって f (k + 1) は ω よりも
大きくなければならず、そのような B の要素は存在しないため)、ω と ω + 1 は濃度は等しいのですが順序
同型ではないのです。
集合 A の濃度をあらわす 基数 (cardinal number) は、A との間に全単射が存在する順序数の中で最小
のものであると定義されます。ω は可算濃度の順序数の中で最小なので、可算無限集合の基数は ω となり、
これを ω0 またはアレフ 0(ℵ0 とも書きます。ω + 1 の基数は ω です。
α が順序数のとき、ある順序数 β が存在して α = β+1 となるならば、α は 後続順序数 (successor ordinal) で
あると言います。0 でも後続順序数でない順序数は 極限順序数 (limit ordinal) と呼びます。ω は極限順序
数で、ω + a(a = 1, 2, 3, ...) は後続順序数です。すべての順序数は、0 または後続順序数または極限順序数
です。極限順序数は、基本列によって定義できるものと、基本列が存在しないものがあります。
極限順序数は、次のように定義することもできます。
15 Wikipedia
- ジョン・フォン・ノイマン http://ja.wikipedia.org/wiki/ジョン・フォン・ノイマン
第5章
68
順序数と急増加関数
α よりも小さいすべての順序数 ζ に対して、ζ < ξ < α となる順序数ξが存在するとき、α は極限順序
数である。
たとえば、0, 1, 2, …, ω, ω + 1 という数列を考えると、α = ω + 1 に対しては ζ = ω とすると ω < ξ < ω + 1
となる ξ が存在しないので、ω + 1 は極限順序数の定義には合致しませんが、α = ω に対しては、α より
も小さい順序数 ζ (つまり自然数)を取ると、ξ = ζ + 1 が必ず存在するため、極限順序数の定義に合致し
ます。
ω + 1, ω + 2, … という基本列を考えると、この数列は ω + ω に収束します。したがって、ω + ω は極限
順序数です。この時に、ω + ω のことを ω × 2 と書きます。ここでも、順序数に関しては通常の交換法則が
成り立たず、2 ×ω = ω となりますので(2 + 2 + … と計算していった時の極限は、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 + ω × (a − 1) + 2, ...)
ω2 × 2 =
ω 2 + ω 2 = lim(ω 2 , ω 2 + ω, ω 2 + ω × 2, ...)
ω3
= ω 2 × ω = lim(0, ω 2 , ω 2 × 2, ω 2 × 3, ...)
ωω
= lim(ω 0 , ω 1 , ω 2 , ω 3 , ω 4 , ...)
ωω × 2 =
ω ω + ω ω = lim(ω ω , ω ω + ω 2 , ω ω + ω 3 , ...)
ω ω+1
= ω ω × ω = lim(0, ω ω , ω ω × 2, ω ω × 3, ...)
ω ω+2
= ω ω+1 × ω = lim(0, ω ω+1 , ω ω+1 × 2, ω ω+1 × 3, ...)
ω ω×2
= ω ω+ω = lim(ω ω , ω ω+1 , ω ω+2 , ...)
5.3. カントールの標準形
ωω
ωω
2
ω
ω
ωω + ω
ω
ωω + ω × 2
69
=
ω ω×ω = lim(ω 0 , ω ω , ω ω×2 , ω ω×3 , ...)
=
lim(ω ω , ω ω , ω ω , ω ω , ...)
0
1
ω
ω
2
3
ω
= lim(ω ω , ω ω + 1, ω ω + 2, ...)
ω
ω
ω
= lim(ω ω + ω, ω ω + ω + 1, ω ω + ω + 2, ...)
ω
また、それぞれの極限順序数に自然数を加えた順序数、たとえば ω ω + 3 は、後続順序数になります。
ここまでで、ω 、ω ω 、ω ω を定義することができました。ここで、ω ∧∧ a := ω ∧ ω ∧ ω ∧ ...ω (a 個の ω) と表
ω
記することにすると、同様の定義を繰り返せば、
ω, ω ω , ω ∧∧ 3, ω ∧∧ 4, ω ∧∧ 5, ...
を、順次定義出来ます。そこで、これを基本列として、極限順序数 ε0 (エプシロン・ノート)16 を
ε0 = lim(1, ω, ω ω , ω ∧∧ 3, ω ∧∧ 4, ω ∧∧ 5, ...)
と定義します。ε0 は可算濃度の順序数なので、基数は ω です。つまり、ε0 よりも小さい順序数と自然数
の間に全単射が存在します。
5.3
カントールの標準形
全ての順序数は、 カントールの標準形 (Cantor normal form)
に書く事ができます。
17 18
(しばしば CNF と略される) で一意
【定義】カントールの標準形
順序数 α を、正の整数 c1 , c2 , c3 , · · · , ck と順序数 β1 > β2 > · · · > βk ≥ 0 によって、
α
=
k
∑
ωβi ci
i=1
β1
= ω
c1 + ω β2 c2 + · · · + ω βk ck
の形で書く時、これをカントールの標準形と言う。
ε0 をカントール標準形で書くと ε0 = ω
ε0
となります。これは自分自身を参照しているので、定義式と
して使うにはふさわしくありません。このように、カントール標準形は順序数を表記するための万能の手
法ではありませんが、ε0 よりも小さい順序数を表記するときには便利です。
さて、1891 年にジュゼッペ・ペアノ (Giuseppe Peano) が自然数全体を公理化した ペアノの公理 (Peano axioms)
という公理体系を作りました。その公理系は自然数を集合論で記述しています。この公理体系によって、加
算、乗算、冪乗のような演算が定義できて、これを ペアノ算術 (Peano arithmetic) と言います。このペア
16 Wikipedia
18 Wikipedia 19 Wikipedia -
17 ProofWiki
エプシロン・ノート http://bit.ly/16Is9QQ (ja.wikipedia.org)
Cantor Normal Form http://www.proofwiki.org/wiki/Definition:Cantor Normal Form
Ordinal arithmetic https://en.wikipedia.org/wiki/Ordinal arithmetic
Peano axioms https://en.wikipedia.org/wiki/Peano arithmetic
19
第5章
70
順序数と急増加関数
ノ算術で、先ほどの計算のように、ω から有限回の加算・乗算・冪状で到達できるような ε0 よりも小さい
順序数が定義出来ます。
冪乗の冪乗の…という極限から、先ほどのように ε0 を定義できますが、これはペアノ算術から導かれる
計算とは異なり、超限帰納 (transfinite induction) と呼ばれます。ε0 は、ω から有限回の加算・乗算・冪
状では到達できない最小の順序数です。
5.4
ハーディー階層
1904 年にハーディー (Godfrey Harold Hardy) が定義した ハーディー階層 (Hardy function)
20 21
は、
順序数 α に対して自然数から自然数への関数 Hα : N → N を定める順序数による関数の階層で、以下の様
に定義されます。
【定義】ハーディー階層
H[0](n)
H[α + 1](n)
H[α](n)
= n
= H[α](n + 1)
= H[αx ](n)(αが極限順序数の時)
順序数の定義の中で、後続順序数の定義 (順序数に+1 する) と、基本列の極限による極限順序数の定義
を、それぞれ関数に x + 1 を代入する操作と、対角化の操作に対応させることにより、関数の階層性を順序
数の階層性と対応づけています。
ここで、定義の中に基本列が用いられていますが、基本列の取り方は一様ではないため、α の定義にあら
われるすべての基本列の取り方を厳密に定めて、はじめて H[α] が定義されたことになります。ただし、基
本列のとり方による増大度の違いよりは、順序数の大きさによる増大度の方がはるかに大きいため、基本
列の取り方いかんに関わらず、α > β であれば H[α] > H[β] が成り立つため、H[順序数] と記述して大体
の大きさを表します。
また、基本列の中でなんらかの方法で 1 つの 正規な基本列 (canonical fundamental sequence) を与え、
H[αx ] の正規な基本列であるとすることで、H[α] の定義は一意に定まります。そのような方法の 1 つとし
て、巨大数論では α ≤ ϵ0 に対して、次のような ワイナー階層 (Wainer hierarchy) が使われます。
【定義】ワイナー階層
α ≤ ϵ0 に対して、基本列 α = lim(α[0], α[1], α[2], ...) をこのように定める。
ω[n] =
ω
α+1
[n] =
ω α [n] =
(ω α1 + ω α2 + · · · + ω αk )[n]
=
ϵ0 [0] =
n
ωα n
ω α[n] (αが極限順序数の時かつその時に限り)
ω α1 + ω α2 + · · · + ω αk [n](α1 ≥ α2 ≥ · · · ≥ αk の場合)
1, ϵ0 [n + 1] = ω ϵ0 [n]
ここで、ϵ0 [0] = 0 とされることもあります。本書でも、ϵ0 以下の順序数に対してはワイナー階層を用いま
20 巨大数研究
21 Hardy,
Wiki - ハーディー階層 http://ja.googology.wikia.com/wiki/ハーディー階層
G.H. (1904) ”A theorem concerning the infinite cardinal numbers” Quarterly Journal of Mathematics 35: 87-94.
5.4. ハーディー階層
71
す。例えば ω[n] = n は
ω[n] = lim(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[ω × 2 + 1](n + 1) = H[ω × 2](n + 2) = 4(n + 2)
H[ω × 3](n) =
H[ω × 2 + ω](n) = 4(n + n) = 8n = 23 n
H[ω × k](n) =
2k n
H[ω 2 ](n) =
H[ω × n](n) = 2n n
H[ω 2 + 3](n) =
H[ω 2 ](n + 3) = 2n+3 (n + 3)
H[ω 2 + ω](n) =
H[ω 2 + n](n) = 2n+n (n + n) = 22n (2n)
H[ω 2 + ω + k](n) =
H[ω 2 + ω](n + k) = 22(n+k) 2(n + k)
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)
3
= 28n (8n) = 22 n (23 n)
H[ω 2 + ω × k](n) =
H[ω 2 × 2](n) =
k
22 n (2k n)
H[ω 2 + ω × n](n) = 22
n
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)
第5章
72
順序数と急増加関数
一方、
H[α](n)
=
H[β](n) =
H[ω 2 ](n) = 2n n
H[ω + 3](n) = n + 3
H[α](H[β](n)) = 22(n+3) 2(n + 3)
となるため、たしかに成立しています。
関数の合成を繰り返すと、
H[α × 2](n)
=
H[α + α](n) = H[α](H[α](n)) = H[α]2 (n)
H[α × 3](n)
=
H[α × 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) =
H[ω 2 ](n) =
2n
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
H[ω 2 × 3](n) =
f 3 (n) = 22
n
n
(2n 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 × 3](n) > f 3 (n) = 2 ↑ 2 ↑ 2 ↑ n > 2 ↑↑ 3
H[ω 2 × 4](n) > f 4 (n) = 2 ↑ 2 ↑ 2 ↑ 2 ↑ n > 2 ↑↑ 4
のようにテトレーションで近似できて、
H[ω 3 ](n) >
2 ↑↑ n
となります。H[ω 2 ](n) > 2n (べき乗)の原始帰納から H[ω 3 ](n) > 2 ↑↑ n(テトレーション)ができた
ように、テトレーションの原始帰納から H[ω 4 ](n) > 2 ↑↑↑ n(ペンテーション)ができて、一般に
H[ω m ](n) > 2 ↑m−1 n
5.5. 急増加関数
73
となります。m でこの式が成立するとすれば、m + 1 でも
H[ω m ](n) >
2 ↑m−1 n
H[ω m × 2](n) >
2 ↑m−1 2 ↑m−1 n > 2 ↑m 2
H[ω m × 3](n) >
f 3 (n) = 2 ↑m−1 2 ↑m−1 2 ↑m−1 n > 2 ↑m 3
H[ω m+1 ](n)
=
H[ω m × ω](n) > 2 ↑m n
となって成立するため、帰納的に証明されます。
5.5
急増加関数
巨大数論では、ハーディー階層と似ている 急増加関数 (FGH; Fast-growing hierarchy)
よく使われます。
22 23
F [α](n) が
【定義】急増加関数 (FGH)
F [0](n) =
F [α + 1](n) =
F [α](n) =
n+1
F [α]n (n)
F [αn ](n)(αが極限順序数の時)
巨大数研究 Wiki では fα (n) という表記が使われていますが、重要な順序数を下付き文字にしてしまうと
読みにくくなるので本書では F [α](n) の表記を使います。すなわち、
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[ω ω
ωω
](3)
≈ H[ϵ0 ](4)
22 巨大数研究
23 田中一之,
Wiki - 急増加関数 http://ja.googology.wikia.com/wiki/急増加関数
角田法也, 鹿島亮, 菊池誠 (1997) 『数学基礎論講義―不完全性定理とその発展』日本評論社
第5章
74
順序数と急増加関数
となり、F [ϵ0 ](n) ≈ H[ϵ0 ](n + 1) = H[ϵ0 + 1](n) の近似が成り立ちます。もっと大雑把に近似すれば
F [ϵ0 ](n) ≈ H[ϵ0 ](n) が近似として成立しています。
ハーディー階層と急増加関数を比較すると、急増加関数は順序数が+1 されるだけで f n (n) へととても関
数が大きく変わりますので、非常に大まかな近似をする時に適していますが、ハーディー階層は、より細や
かな近似をする時に適しています。
ここで、急増加関数やワイナー階層によって計算可能関数の複雑性を評価する研究は、20 世紀後半に多
く見られるようですが、ハーディー階層は 1904 年にすでに発表されていたということは驚きました。コン
ピュータの発展とともに計算理論が発展して、ハーディー階層が再評価されて急増加関数が使われるように
なった、といったところなのでしょうか。
さて、ハーディー階層の計算で 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)
3 → 3 → 3 → n ≈ F [ω + ω](n) = F [ω × 2](n)
3 → 3 → 3 → 3 → n ≈ F [ω × 2 + ω](n) = F [ω × 3](n)
となり、チェーンの数を変数化する拡張チェーン表記ではこのようになります。
拡張チェーン表記の急増加関数による近似
3 →2 n ≈ F [ω × ω](n) = F [ω 2 ](n)
これが 3 重帰納です。すなわち、前章までで n 重帰納として定義していたものの正体は、急増加関数で
5.5. 急増加関数
75
F [ω n−1 ](n) だった、ということです。この急増加関数による近似の概念が分かれば、n 重帰納の概念はむ
しろ捨ててしまって急増加関数だけで考える方が分かりやすいと思います。それでは、拡張チェーンの計算
を続けてみます。
3 →2 3 →2 n
≈ F [ω 2 + ω](n)
3 →2 3 →2 3 →2 n
≈ F [ω 2 + ω × 2](n)
3 →2 3 →2 3 →2 3 →2 n
≈ F [ω 2 + ω × 3](n)
3 →3 n
≈ F [ω 2 + ω × ω](n) = F [ω 2 × 2](n)
3 →4 n
≈ F [ω 2 × 3](n)
3 →n n
≈ F [ω 2 × ω](n) = F [ω 3 ](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))
=
f (A(X, b + 1, n − 1))
=
f 2 (A(X, b + 1, n − 2))
= … = f n (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) ≈ s(1)f (n) = f n (n) = F [1](n) = 2n
A(3, n) ≈ s(1)2 f (n) = F [2](n) = 2n n
A(4, n) ≈ s(1)3 f (n) = F [3](n) ≈ 2 ↑2 n
A(m + 1, n) ≈ s(1)m f (n) = F [m](n) ≈ 2 ↑m−1 n
A(n, n) ≈ s(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)
第5章
76
順序数と急増加関数
となります。このように、3 変数アッカーマン関数、s(2) 変換、ω が対応します。ここに、fb+1 (n) ≈ fbn (n),
s(1) 変換, F [α + 1](n) = F [α]n (n) をすることで
A(1, 1, n) ≈
s(1)s(2)f (n) = fω+1 (n)
A(1, 2, n) ≈
s(1)2 s(2)f (n) = fω+2 (n)
A(1, 3, n) ≈
s(1)3 s(2)f (n) = fω+3 (n)
A(1, n, 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) ≈ s(2)3 f (n) = F [ω × 3](n)
A(4, 0, n) ≈ s(2)4 f (n) = F [ω × 4](n)
A(n, 0, n) ≈ s(2)n f (n) = F [ω × n](n) = F [ω 2 ](n)
A(1, 0, 0, n) ≈ s(3)f (n) = F [ω 2 ](n)
A(2, 0, 0, n) ≈ s(3)2 f (n) = F [ω 2 × 2](n)
A(n, 0, 0, n) ≈ s(3)n f (n) = F [ω 2 × n](n) = F [ω 3 ](n)
A(1, 0, 0, 0, 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) ≈ s(1)a0 s(2)a1 ...s(k + 1)k f (n)
= F [ω k × ak + ... + ω 2 × a2 + ω × a1 + a0 ](n)
A(1, 1, ..., 1) ≈ s(n)f (n) ≈ F [ω ω ](n)
| {z }
n
ω
すなわち、多変数アッカーマン関数と s(n) 変換の上限は、F [ω ](n) です。さらに、F3 の ss(n) 変換につい
5.5. 急増加関数
77
ては、
ss(1)f (n)
=
ss(1)2 f (x) ≈
s(n)f (n) ≈ F [ω ω ](n)
F [ω ω + ω ω ](n) = F [ω ω × 2](n)
ss(2)f (n)
=
ss(1)n f (n) ≈ F [ω ω × ω](x) = F [ω ω+1 ](x)
ss(3)f (n)
=
ss(2)n f (n) ≈ F [ω ω+2 ](n)
ss(4)f (n)
=
ss(3)n f (n) ≈ F [ω ω+3 ](n)
ss(n)f (n) ≈
F [ω ω×2 ](n)
となり、ふぃっしゅ関数とふぃっしゅ数はこのように近似されます。
F3 (n)
=
ss(2)63 f (n) ≈ F [ω ω+1 × 63](n)
F3
=
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} ≈
F [ω k × ak + ... + ω 2 × a2 + ω × a1 + a0 ]m (n)
= H[ω ω
{3, 3, ..., 3} ≈
| {z }
k
×ak +...+ω 2 ×a2 +ω×a1 +a0
× m](n)
ω
F [ω ](n)
n
これを使うと、ふぃっしゅ数バージョン 1 と 2 を近似できます。F3 までの近似をまとめます。
ふぃっしゅ数バージョン 3 までの近似
F1
≈ A(1, 0, 1, 63) ≈ {4, 64, 1, 1, 2} ≈ F [ω 2 + 1](63)
F2
≈ A(63, 0, 0, 63) ≈ {4, 2, 1, 1, 64} ≈ F [ω 3 ](63)
F3
≈ F [ω ω+1 × 63 + 1](63)
78
第 6 章 カントール標準形レベルの帰納関数
6.1
カントール標準形レベルの帰納関数
本章では F [ϵ0 ] 以下の大きさの帰納関数について扱います。「ϵ0 よりも小さい順序数、すなわちカントー
ルの標準形で自分自身を参照せずに定義できる順序数に対応する急増加関数で近似できるような帰納関数」
ということです。章のタイトルとしては長すぎるので、「カントール標準形レベルの帰納関数」と、若干正
確性を犠牲にして省略しました。
前章では、ω から有限回の加算、乗算、冪乗で到達出来ない順序数が ϵ0 であること、そして順序数が一
意にカントールの標準形で書けることを紹介しました。あらゆる順序数がカントール標準形で書けるとは
言うものの、ϵ0 をカントール標準形で書くと ϵ0 = ω ϵ0 のように自己再帰的に書く必要がありますが、ϵ0 よ
りも小さい順序数は、ω から有限回の加算、乗算、冪乗という形で、自然にカントール標準形で書くことが
できます。そして、本章で見ていくように、F [ϵ0 ] レベルの関数を作ろうとすると、ハーディー階層や急増
加関数によって、カントール標準形を構築するような定義が必要となることから、このレベルの関数を「カ
ントール標準形レベルの関数」としました。
まずは、ワイナー階層で 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)
= H[1](1) = 2
F [ϵ0 ](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)))
= F [ω + 1](F [ω](F [2](2)))
= F [ω + 1](F [ω](8))
= F [ω + 1](F [8](8))
≈ F [ω + 1](2 ↑7 8)
≈ A(1, 1, 2 ↑7 8)
F [ϵ0 ](3) =
ω
3
F [ω ω ](3) = F [ω ω ](3)
2
2
= F [ω ω ω ](3) = F [ω ω 3 ](3)
= F [ω ω
2
2+ωω
](3)
6.2. ドル関数の角括弧表記
79
= F [ω ω
2
2+ω2+3
](3)
= F [ω ω
2
2+ω2+2
ω](3)
ω 2+ω2+2
3](3)
= F [ω
2
= F [ω ω
= F [ω
ω 2+ω2+2
2+ω2+2
ω 2+ω2+2
2
2+ω2+2
2
ω 2+ω2+2
= F [ω ω
= F [ω
2
2
= F [ω ω
= F [ω
2+ω2+2
2
= F [ω ω
= F [ω
2
2
2+ω2+2
2
ω 2+ω2+2
= F [ω ω
2
+ω
2+ω2+2
2+ω
2+ω
2
+ω2+2
2
ω +ω+1
2
2+ω2+1
2
ω 2+ω2+1
2
2+ω2+1
2
ω 2+ω2+1
2+ω
2
2+ω2+1
2
ω 2+ω
2 + ωω
2+ω
2+ω2+1
ω 2+ω2+1
2 + ωω
ω 2+ω+1
2
2
2 + ωω
2+ω
2+ω2+2
ω 2+ω2+1
2 + ωω
2+ω
2
2
2 + ωω
2
+ω ω
+ω
2 + ωω
2
ω +ω
3](3)
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 + ωω
2+ω
+ω2+1
2
](3)
2
ω +2
2
3](3)
2 + ωω
2+ω
2+ω
2
2+ω+3
ω 2+ω+2
2
2
ω 2+1
ω +1
](3)
2
2 + ωω
2
2+ω2
ω 2+ω+ω
2 + ωω
2+ω
2
2
2 + ωω
2+ω
+ω2
](3)
2
2+ω+2
2+ω
+ω+2
2+ω
ω2
](3)
](3)
3](3)
2
ω2 2
2
2
2
+ω ω2+2 2 + ω ω2+1 2 + ω ω2 2 + ω ω+2 2 + ω ω+1 2 + ω ω 2
+ω 2 2 + ω2 + 3](3)
= F [ω ω
2
+ω
+ω
2+ω2+2
2 + ωω
ω 2 2+ω+1
ω 2 +ω2+2
+ω ω
2
+ω+1
2+ω
2+ω
2
2+ω2+1
ω 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+1
2+ω
2 + ωω
2
2
+1
2+ω+2
2+ω
ω 2 +ω+2
2
ω2 2
2
2
2
2 + ωω 2
+ω ω2+2 2 + ω ω2+1 2 + ω ω2 2 + ω ω+2 2 + ω ω+1 2 + ω ω 2
+ω 2 2 + ω2 + 2]3 (3)
このように、F [ϵ0 ](3) の時点で絶望的に計算に終わりが見えないことが分かります。
6.2
ドル関数の角括弧表記
Googology Wiki ユーザーの Wythagoras が 2013 年に開発した ドル関数 (Dollar function)
1
は、最も
基本的な表記である 角括弧表記 (Bracket notation) が比較的分かりやすい定義で F [ϵ0 ] の強さを持ってい
ます。
1 巨大数研究
Wiki - ドル関数 http://ja.googology.wikia.com/wiki/ドル関数
第 6 章 カントール標準形レベルの帰納関数
80
【定義】ドル関数の角括弧表記
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$[0][0]...[0](a 個) = 2a a = F [2](a)
a$[2]
=
a$[1][1]...[1](a 個) = F [3](a)
a$[b]
=
F [b + 1](a)
a$ [[0]]
=
a$[a] > F [ω](a)
a$[[0]1] =
a$[[0]][[0]]...(a 個)...[[0]] > F [ω + 1](a)
a$[[0]2] =
a$[[0]1][[0]1]...(a 個)...[[0]1] > F [ω + 2](a)
a$[[0][0]]
a$ [[1]]
= a$[[0]a] > F [ω × 2](a)
=
a$[[1]1] =
a$[[1][0]]
a$[[1]][[1]]...(a 個)...[[1]] > F [ω 2 + 1](a)
= a$[[1]a] > F [ω 2 + ω](a)
a$[[1][0][0]3] >
a$[[1][1]] >
a$ [[2]]
a$ [[0][0]..(a 個)..[0]] > F [ω 2 ](a)
=
F [ω 2 + ω × 2 + 3](a)
F [ω 2 × 2](a)
a$ [[1][1]..(a 個)..[1]] > F [ω 3 ](a)
a$[[b]c] > F [ω b+1 + c](a) > F [ω b + c](a)
a$[[[0]]]
= a$[[a]] > F [ω ω ](a)
a$[[[b]c]d] > F [ω ω
a$ [[[[0]]]]
a$ [[[[[0]]]]]
> F [ω
ω
> F [ω ω
b+1
ω
+c
+ d](a) > F [ω ω
b
+c
+ d](a)
](a)
ωω
](a)
といったように、角括弧の入れ子を 1 つ増やすと ω の指数タワーが 1 つ増えるので、これは F [ϵ0 ] の強さ
6.3. ふぃっしゅ数バージョン 5
81
を持つ関数となります。さらに、拡張角括弧表記では各括弧に下付き文字のレベルをつけて、たとえば
a$[[0]2 ] = a$ [[...[[0]]...]] (a + 1 重の角括弧)
のようになります(レベルの展開方法の定義は若干複雑です)。この定義を使うと、
a$[[0]2 ] ≈ F [ε0 ](a)
と F [ϵ0 ] の強さを持つ関数を簡潔に書くことができます。
このように、ドル関数は拡張角括弧表記、線形配列表記とさらに大きな関数が定義されていますが、本書
で取り上げるのは角括弧表記までとします。
6.3
ふぃっしゅ数バージョン 5
バージョン 3 の次は、バージョン 4 ではなくバージョン 5 の説明をします。巨大数探索スレッドでは、
バージョン 4 が先に登場するのですが、この文章では、章を進めるにしたがってより大きな数、関数が登
場するように記述するため、バージョン 5 よりも大きいバージョン 4 の説明は後回しにします。
「関数から関数への写像を考える」という考えをさらにすすめると、「関数から関数への写像」から「関
数から関数への写像」への写像を考えることができます。では、このような写像に対して写像を適用する回
数の数え上げを定義する事はできないでしょうか。このような考察を進めた結果、以下の様なふぃっしゅ数
バージョン 5 が定義されました2 。
2 巨大数研究
Wiki - ふぃっしゅ数バージョン 5 http://ja.googology.wikia.com/wiki/ふぃっしゅ数バージョン 5
第 6 章 カントール標準形レベルの帰納関数
82
【定義】ふぃっしゅ数バージョン 5
[1] 集合 Mn (n = 0, 1, 2, ...) を以下のように定める。
M0 =自然数の集合
Mn+1 =写像 Mn → Mn 全体の集合
Mn の元を Mn 変換と呼ぶ
[2] Mn 変換 m(n)(n ≥ 1) を以下のように定める。
fn ∈ M(n) に対して、m(n + 1)(fn ) = gn を以下で定める。
fn−1 ∈ M (n − 1) に対して、gn (fn−1 ) = gn−1 を以下で定める。
fn−2 ∈ M (n − 2) に対して、gn−1 (fn−2 ) = gn−2 を以下で定める。
……
f0 ∈ M (0) に対して、g1 (f0 ) = g0 を以下で定める。
g0 =(..((fnf0 fn−1 )fn−2 )...f1 )f0
すなわち
m(1)(f0 )
=
f0 f0
(m(2)f1 )f0
=
(f1 f0 )(f0 )
(..((m(n + 1)fn )fn−1 )...f1 )f0
:= (..(fn f0 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)
6.3. ふぃっしゅ数バージョン 5
83
すなわち、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) =
m(4)m(3)m(2) =
s(n + 1)
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) = ss(a + 1) = F [+ω ω+a ]
[
]2
m(4)m(3) m(2) = ss(n) = F [+ω ω× 2 ]
ここまでが、F3 の定義で記述できるところです。さらに、
[
]2
m(4)m(3) m(2)
[
]3
m(4)m(3) m(2)
[
]a
m(4)m(3) m(2)
[
]
m(4)2 m(3) m(2)
[
]
m(3) m(4)2 m(3) m(2)
[
][
]
m(4)m(3) m(4)2 m(3) m(2)
[
]2 [
]
m(4)m(3) m(4)2 m(3) m(2)
[
]3 [
]
m(4)m(3) m(4)2 m(3) m(2)
[
]2
m(4)2 m(3) m(2)
[
]3
m(4)2 m(3) m(2)
=
=
=
=
=
=
=
=
=
=
[
]
F +ω ω× 2
[
]
F +ω ω× 3
[
]
F +ω ω× a
[
2]
F +ω ω
[
]
2
F +ω ω +1
[
]
2
F +ω ω +ω
]
[
2
F +ω ω +ω×2
[
]
2
F +ω ω +ω×3
[
]
2
F +ω ω ×2 (x)
[
]
2
F +ω ω ×3 (x)
第 6 章 カントール標準形レベルの帰納関数
84
[
3]
F +ω ω
[
4]
F +ω ω
[
ω]
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) =
m(4)m(3)m(2) =
m(5)m(4)m(3)m(2) =
F [+ω]
F [+ω ω ]
ω
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.6 節、p.28) が、ずっと放置されてきました。ようやく、続きを話すことがで
きます。n で始まるグッドスタイン数列が終了するまでのステップ数を返す グッドスタイン関数 G(n) の
大きさは、なんと H[ϵ0 ] のレベルなのです。数列の定義は原始帰納なのに、関数はこんなに大きくなる、実
に面白い関数です。
グッドスタイン数列は急激に増加しますが、やがて減少に転じ、必ず 0 となって数列が終わる事が証明
されています。これを グッドスタインの定理 (Goodstein’s theorem) と言います3 。なぜ、必ず 0 になるの
でしょうか。それは、このように証明します。
グッドスタイン数列の遺伝的記法で、数字の底のところを順序数 ω で書き換えます。この時、nk の和で
書かれていればそのまま ωk に書き換えるだけですが、ak nk の和で書かれている場合は、ωk × ak と書き
換えます。
3 Goodstein, R. L. (1944).
doi:10.2307/2266486
”On the restricted ordinal theorem”.
Journal of Symbolic Logic 9 (2):
33-41.
6.4. ヒドラゲーム
85
19 ではじまるグッドスタイン数列を、そのように書き換えてみます。
ω
2
G0 (19) =
2 2 + 2 + 1 → ωω + ω + 1
G1 (19) =
3 3 + 3 → ωω + ω
G2 (19) =
4 4 + 3 → ωω + 3
G3 (19) =
5 5 + 2 → ωω + 2
G4 (19) =
6 6 + 1 → ωω + 1
G5 (19) =
7 7 → ωω
3
ω
4
ω
5
ω
6
ω
7
ω
対応する順序数を見ると、どんどん小さくなっています。これは、グッドスタイン数列での 2 つの演算のう
ち、底を変換する演算は底を ω にしてしまったため変わらず、1 を引く演算によって、より小さい順序数と
なるためです。G6 (19) については、非常に長い順序数の式が並ぶことになりますが、Σω Σ(ω
k
Σω a
に書けます。もともとの数列を n の和の形で書いていれば、Σω
の形になり、ω
ωω
a
×b)
× c の形
よりも小さくなっ
ています。
順序数の重要な性質として、下降数列(どんどん小さくなる数列)を取ると、必ず有限回数で 0 になる、
ということがあります。したがって、必ずグッドスタイン数列は有限ステップで値が 0 になって終了します。
さて、このようにしてグッドスタインの定理が証明されましたが、一方で、Kirby and Paris (1982)
4
は、
ペアノ算術の演算をもってしては、グッドスタインの定理は証明出来ない、ということを証明しました。す
でに証明されていることが証明出来ないとはおかしな話ですが、上の証明ではペアノ算術から外れたロジッ
クを使ったために、証明できたということです。
Kirby らは、論文でこの証明をする時に、 ヒドラゲーム (Hydra battle) を考えました。ヒドラゲームと
は、ギリシア神話に登場するヘラクレス (Hercules) とヒドラ (Hydra) の戦いにヒントを得たもので、ヒド
ラは巨大な胴体とたくさんの首を持ち、1本の首を切り落としても、すぐにそこから新しい 2 本の首が生
えてきます。
そこで、このようなヒドラを考えます。ヒドラは、図 6.1 のように有限の樹の構造を持っていて、複数の
ノード (node) がセグメント (segment) で結ばれています。樹の根元はルート (root) と呼び、すべてのノー
ドは下に1つずつセグメントを降りて行くと、必ずルートに到達します。そして、一番上のノードをトップ
ノード (top node) と呼び、トップノードにつながれているセグメントを首 (head) と呼びます。
ヒドラゲームはこのようなルールです。ヘラクレスは、ヒドラの首 (head) を 1 回につき 1 つ切り落とし
ます。n 回目に切り落とした時に、ヒドラは n 個の頭が生えます。その生え方は、今、切り落とした首から
セグメントを 1 つ下に降ります。そのセグメントから上に伸びている樹の形と同じ形の樹の構造が、今度は
そこからさらに 1 つノードをセグメントを下に降りたノードから n 個コピーされます。ここで、それ以上
ノードが下がれないときには、首が生えません。
ヒドラゲームは図 6.2 のように進行します。図では、切り落とす首が矢印で示されています。左上の図が
最初のヒドラの構造で、首を切り落とすと、after stage 1 の形になります。これは、切り落とした首の 1
つ下のノードから上を見たときの V 字構造が 1 つ、さらに 1 つ下のノードからコピーされました。次に、
4 Kirby, L. and Paris, J. (1982) ”Accessible independence results for Peano arithmetic” Bull. London Math. Soc. 14(4):
285-293. doi:10.1112/blms/14.4.285
zero when k = 3 x 2 - - "-3, which is of the order of io - - .)
Before proving Theorem 1 we state our second result.
A hydra is a finite tree, which may be considered as a finite collection of straight
line segments, each joining two nodes, such that every node is connected by a unique
path of segments to a fixed node called the root. For example:
top node
第 6 章 カントール標準形レベルの帰納関数
86
root
A top node of a hydra is one which is a node of only one segment, and is not the
root. A head of the hydra is a top node together with its attached segment.
A battle between Hercules and a given hydra proceeds as follows: at stage n
(n ^ 1), Hercules chops off one head from the hydra. The hydra then grows n "new
heads" in the following manner:
From the node that used to be attached to the head which was just chopped off,
traverse one segment towards the root until the next node is reached. From this node
図n6.1:
ヒドラの構造。
Kirby
and
Paris
(1982) から引用。
sprout
replicas
of that part of the
hydra
(after
decapitation)
which is "above" the
segment just traversed, i.e., those nodes and segments from which, in order to reach
the root, this segment would have to be traversed. If the head just chopped off had
stage 2 では切り落とした首の
2 つ下のルートノードから、今度は
2 つコピーされます。次は 3 つ、次は 4
the root as one
of its nodes, no new head is grown.
Thus the battle might for instance commence like this, assuming that at each
つとコピーされる数が増えるので、ヒドラはどんどん増殖します。
stage Hercules decides to chop off the head marked with an arrow:
after stage 2
after stage 3
図 6.2: ヒドラゲームの進行。Kirby and Paris (1982) から引用。
ヘラクレスは、有限の回数首を切ることで、ルート以外のすべてを切り落とす事ができればこのゲームに
勝ちます。どのような順番で首を切れば、勝つ事ができるでしょうか。実は、どの順番で切っても勝つこと
が分かります。どうしてでしょうか。
ヒドラの構造で、各ノードを順序数に割り当てます。トップノードには 0 を、他のノードには、その上の
ノードに割り当てられる順序数 α1 ≥ · · · ≥ αn に対して、ω α1 + · · · ω αn を割り当てます。先ほどのヒドラ
の構造図 (図 6.1) で、一番左上のノードから下に降りると、0 → 3 → ω ω + ω 3 →ω ω
ω
+ω 3
+ ωω
2
+1
のように
割り当てられます。この時、ルートに割り当てられた順序数が、ヒドラに対応づけられる順序数です。
ヘラクレスがどのような順番で首を切っても、必ずヒドラの順序数は小さくなります。グッドスタイン数
列の時には、順序数が小さくなる道順が一つに決まりましたが、ヒドラゲームでは自由に順路を選ぶ事が
できます。グッドスタイン数列もヒドラゲームもともに、最初は爆発的に増加するけれど最後はなくなって
しまうこと、順序数と対応付けると順序数が小さくなること、といった意味で共通しています。
Kirby and Paris (1982) は、ヒドラゲームと対応付けながら、G(n) が H[ϵ0 ] と同じだけの増加速度を持
つこと、もっと正確には、α < ϵ0 以下の全ての順序数 α に対して、G(n) が H[α] よりも増加速度が速いこ
6.5. 原始数列数
87
とを証明しました。Dershowitz and Moser (2007)
5
は、ヒドラゲームでヘラクレスが何回首を切れば勝て
るか、という関数は、ヒドラの順序数に対するハーディー関数に対応する事を示しました。つまり、カン
トールの標準形で書く事のできるどんな順序数αを持って来ても、それよりも大きな順序数のヒドラがあ
ると説明しました。
ヒドラゲームのプログラム6 もあります。
本章では、色々な ε0 レベルの関数を見てきました。カントールの標準形をヒドラのようなツリー構造
で書くと、たろう氏やバード氏が考えついたように多重リスト構造に行き着きます。多変数関数では、ヒド
ラのルートから 1 つ上に変数をたくさん書くまでしかできませんが、それぞれの変数からさらに上に多変
数関数の変数を延ばして行くネスト構造を作ったわけです。
それに対して、ふぃっしゅ数バージョン5は、m(2) → m(3) → m(4) と、操作の対角化を繰り返すことで
ヒドラのセグメントを上に上がって行きます。下から数えて n 番目のトップノードが、m(n) に対応します。
[m(4)m(3)]3 [m(4)2 m(3)]m(2) = s(2, 4, 1) = F [+ωω
2
+ω×3
]
の計算を見ると、[m(4)m(3)]3 の部分は ω × 3 に対応し、m(4)2 は 2 に、m(4)2 m(3) は ω2 に対応しま
す。ヒドラの構造図 (図 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)
となります。
巨大数研究室の「ゼミの成果」7 には、「ppt で目で見るヒドラゲーム」として、巨大数勉強会(2007 年
11 月 3 日、文京区シビックセンター)でポチさんが発表されたスライドがアップされています (ppt ファイ
ルを zip で圧縮)。その中に、ハーディー関数とヒドラゲームの関係、ヒドラゲームの様子、ふぃっしゅ数
バージョン 5 の計算過程のハーディー関数やヒドラゲームとの対応、次章で出てくる Veblen 関数による拡
張ヒドラゲーム等が、図解されています。そのファイルをダウンロードしてスライドを見ながら、このヒド
ラゲームの節を読み返すと、より分かりやすいと思います。
6.5
原始数列数
原始数列数
8
は、バシク9 が考案した巨大数で、巨大数探索スレッド 10 に投稿された BASIC のプロ
グラムによって計算される fϵ0 +1 (10) 程度 n の大きさの数です。原始数列数を生み出すアルゴリズムを
原始数列システム と言い、 ベクレミシェフの虫
10 11
とよく似ていて、fϵ0 (n) の強さです。ここでは、原
始数列システムの定義をベクレミシェフの虫と同じように説明します。
5 Dershowitz and Moser ”The Hydra Battle Revisited”, Rewriting, Computation and Proof.
Lecture Notes
in Computer Science Volume 4600, 2007, pp 1-27 http://dx.doi.org/10.1007/978-3-540-73147-4 1 free download:
http://www.cs.tau.ac.il/ nachum/papers/LNCS/Hydra.pdf
6 The hydra game (Andrej Bauer) http://math.andrej.com/2008/02/02/the-hydra-game/
7 巨大数研究室 - ゼミの成果 http://www.geocities.co.jp/Technopolis/9946/result.html
8 巨大数研究 Wiki - 原始数列数 http://ja.googology.wikia.com/wiki/原始数列数
9 巨大数研究 Wiki - BashicuHyudora http://ja.googology.wikia.com/wiki/ユーザー:BashicuHyudora
10 巨大数研究 Wiki - ベクレミシェフの虫 http://ja.googology.wikia.com/wiki/ベクレミシェフの虫
11 Beklemishev, L. D. ”The worm principle”, Logic Colloquium 2002 (Munster, 2002), 7595, Lect. Notes Log., 27, Assoc.
Symbol. Logic, La Jolla, CA., 2006.
第 6 章 カントール標準形レベルの帰納関数
88
【定義】原始数列システム
非負整数のリスト 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 = () とする。
– i が存在するときは k = max{i; i < n, Si < Sn } とおき、g = (S0 , . . . , Sk−1 ), b =
(Sk , . . . , Sn−1 ) とする。ここで、ベクレミシェフの虫とは分割する位置が 1 ずれて、Sn
がなくなっている。
そして、 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) である。
2
ここで計算方法の理解のために計算例を示します。f (n) = n とすると大変なので 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 + · · · + b + b)[n] (n 個の b)とすると、
原始数列はハーディー階層と完全に一致します。どのように対応するか、まずはその様子を示します。ここ
で、原始数列の計算とハーディー階層の計算で、それぞれ上から下へ計算が進んでいきます。
(0, 1, 2)[3] =
H[ω ω ](3)
(0, 1, 1, 1)[3] =
H[ω 3 ](3)
(0, 1, 1, 0, 1, 1, 0, 1, 1)[3] =
(0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 0, 1)[3] =
H[ω 2 3](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)
6.5. 原始数列数
89
(0, 1, 1, 0, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0)[6] =
(0, 1, 1, 0, 1, 1, 0, 1)[12]
(0, 1, 1, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)[12]
(0, 1, 1, 0, 1, 1)[24]
H[ω 2 2 + ω + 6](6)
= H[ω 2 2 + ω](12)
= H[ω 2 2 + 12](12)
= H[ω 2 ](24)
なぜ、このように対応するのでしょうか。まず、数列 (0) は順序数 1 で、数列 (0,0) は順序数 2 です。後
続順序数のときに 1 を足すことを、f (n) = n + 1 としました。最後が 0 以外のときは極限順序数で、基本
列を展開します。数列の「悪い部分」とは、この基本列の展開をする部分になります。(0,1) という数列を
考えると、「良い部分」はなしで、「悪い部分」は 0 となります。そして、悪い部分を f (n) + 1 = n + 1 個
つなげることから、
(0, 1)[1]
= (0)[1] = 1
(0, 1)[2]
= (0, 0)[2] = 2
(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)
| {z }
n
のようになります。
原始数列の定義はハーディー階層とは異なりますが、ハーディー階層の繰り返しの回数を増やした構造な
ので、巨大数論的なスケールでは、ハーディー階層で近似できると考えることができます。そして、ハー
ディー階層で近似した時の順序数を α としたとき、原始数列そのものが順序数 α をあらわすものとしま
す。このように考えると、原始数列は ϵ0 よりも小さい順序数 α をもれなく対応づけることができます。
原始数列は、バシク氏が順序数 ϵ0 、ヒドラゲーム、ふぃっしゅ数バージョン 5 などを参考にして BASIC
のプログラムを作成したものです。原始数列は、次のようにヒドラツリーと対応づけることができます。
1. 順序数 α のヒドラツリーを書く。
2. ルートノード (root) からスタートする。
3. ルートノードから上に 1 つノードを上がる時には、数列の最後に新しい要素 0 を加える。
4. ノードを 1 つ上に上がる時には、数列の最後に「最後尾の要素の値 + 1」の値の要素を加える。
5. ノードの端点まで来たので n 個下の枝分かれのノードまで下がり、別の枝 (segment) に進む時は、数
列の最後に「最後尾の要素の値 - n + 1」の値の要素を加える。
6. すなわち各項の数字は対応するノードのルートノードを起点とした高さから 1 を引いた値となる。
ω
たとえば、図 6.1 のヒドラツリーでは、 ω ω の部分は (0, 1, 2, 3) というように表されます。 その後ノー
ドを 3 本降りて、次の枝 (segment) へ移って (1, 2, 2, 2) を得て、列に追加されます。その後、同様にして
第 6 章 カントール標準形レベルの帰納関数
90
図 6.3: (図 6.1 再掲) ヒドラの構造。Kirby and Paris (1982) から引用。
(0, 1, 2, 2, 1) が追加されます。したがって、図 6.1 のヒドラツリーは数列 (0, 1, 2, 3, 1, 2, 2, 2, 0, 1, 2, 2, 1) と
対応します。すなわち、ω ω
ω
+ω 3
+ ωω
2
+1
= (0, 1, 2, 3, 1, 2, 2, 2, 0, 1, 2, 2, 1) です。
このようにして、次のように原始数列が順序数と対応付けられます。
1 =
(0)
2 =
(0, 0)
3 =
(0, 0, 0)
ω
ω+2
= (0, 1)
= (0, 1, 0, 0)
ω · 2 = (0, 1, 0, 1)
ω2
2
ω +ω
ω3
ω
ω
ωω
ω
ω
ωω
ωω
ωω
= (0, 1, 1, 0, 1)
= (0, 1, 1, 1)
= (0, 1, 2)
=
(0, 1, 2, 3)
ω
(ω ω +1)
ωω
= (0, 1, 1)
= (0, 1, 2, 3, 4)
= (0, 1, 2, 3, 4, 2)
ω
= (0, 1, 2, 3, 4, 5)
したがって、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 を添え字に持つ急増加関数 F [S](n) を、順序数の知識を全く使わずに定義しまし
た。以下に、ミカヅキモ氏の定義をそのまま書きます。
6.5. 原始数列数
91
【定義】原始数列の改良版
以下、+は数列の結合を意味する。
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) = 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: 極限原始数列)
第 6 章 カントール標準形レベルの帰納関数
92
たとえば, (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) と計算できます。
【定義】改良版原始数列による急増加関数の定義
原始数列 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重リストに拡張して、2 重リストアッカーマン関数を定義しま
した12 。多変数アッカーマンの 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 が同じとなるリストは Ak() 内
に複数含まないとする。
Ak(Y1 , [X, 0], Y2 )
Ak(Y1 , [□, X], Y2 )
= Ak(Y1 , Y2 )
=
Ak([a]) =
Ak(Y1 , [X], Y2 )
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, [X, c + 1, b + 1], [a]) = Ak(Y, [X, c + 1, b], [X, c, a], [a])...X ̸= □ orc ̸= 0
Ak(Y, [X, c + 1, 0, □, b + 1], [a]) = Ak(Y, [X, c + 1, 0, □, b], [X, c, a, □, a], [a])
12 巨大数研究
Wiki - 2 重リストアッカーマン関数 http://ja.googology.wikia.com/wiki/2 重リストアッカーマン関数
6.6. 多重リストアッカーマン関数
93
以下のように計算されています。
Ak([n, 1], [n])
≈ F [ω ω ](n)
Ak([1, 0, 1], [n])
≈ F [ω ω ](n)
Ak([a, 0, 1], [n])
≈ F [ω (ω・a) ](n)
Ak([n, 0, 1], [n])
≈ F [ω ω ](n)
Ak([1, 0, 0, 1], [n])
≈ F [ω ω ](n)
Ak([a, 0, 0, 1], [n])
≈ F [ω ω ・a ](n)
Ak([n, 0, 0, 1], [n])
≈ F [ω ω ](n)
Ak([1, 0, 0, 0, 1], [n])
≈ F [ω ω ](n)
2
2
2
3
3
4
Ak([1, 0, 0, 0, 0, 1], [n]) ≈
F [ω ω ](n)
Ak([1, 0, 0, 0, 0, 0, 1], [n]) ≈
F [ω ω ](n)
Ak(..., [3, a3 ], [2, a2 ], [1, a1 ], [0, a0 ]) ≈
Ak([..., b3 , b2 , b1 , b0 , a], [n]) ≈
Ak([n 個の 1], [n]) ≈
5
Ak(a3 , a2 , a1 , a0)
F [ω ...+ω
3
·b3 +ω 2 ·b2 +ω·b1 +b0
· a](n)
ω
F [ω ω ](n)
さらに、同様の拡張を繰り返すことで多重リストアッカーマン関数を定義できるとしました13 。具体的な
定義は与えられていませんが、その大きさは以下のように計算されています。
3 重リスト
ω
Ak([[1, 0, 1], [1]], [[n]]) ≈ F [ω ω ](n)
ω2
Ak([[1, 0, 0, 1], [1]], [[n]]) ≈ F [ω ω ](n)
ω3
Ak([[1, 0, 0, 0, 1], [1]], [[n]]) ≈ F [ω ω ](n)
Ak([..., [3, a3 ], [2, a2 ], [1, a1 ], [0, a0 ]], [[n]]) =
Ak([..., a3 , a2 , a1 , a0 ], [n])
Ak([[n 個の 1], [1]], [[n]]) ≈ F [ω ω
ωω
](n)
4 重リスト
Ak([[[1, 0, 1], [1]], [[1]]], [[[n]]])
Ak([[[1, 0, 0, 1], [1]], [[1]]], [[[n]]])
Ak([[[1, 0, 0, 0, 1], [1]], [[1]]], [[[n]]])
Ak([[..., [3, a3 ], [2, a2 ], [1, a1 ], [0, a0 ]]], [[[n]]])
Ak([[[n 個の 1], [1]], [[1]]], [[[n]]])
≈ F [ω ∧∧ 4](n)
≈ F [ω ω
≈ F [ω ω
=
ωω
2
3
ωω
](n)
](n)
Ak([[..., a3 , a2 , a1 , a0 ]], [[n]])
≈ F [ω ∧∧ 5](n)
n 重リストとすることで F [ϵ0 ](n) に到達
13 巨大数研究
Wiki - 多重リストアッカーマン関数 http://ja.googology.wikia.com/wiki/多重リストアッカーマン関数
第 6 章 カントール標準形レベルの帰納関数
94
6.7
バードのネスト配列表記
ω
バード氏は、バードの線形表記 (p.57) の次に、F [ω ω ] に相当するバードの多次元配列表記 (Bird’s multi-
dimensional array notation) と、F [ω ω
ωω
] に相当するバードの超次元配列表記 (Bird’s hyper-dimensional
array notation) を定義しました。次に、超次元をネストするバードのネスト配列表記 (Bird’s nested array
notation) を考えて、これが F [ϵ0 ] に到達しました。本書では詳細な計算ルールは省きますが、次元セパレー
タ [ ] をネストさせます。バードの計算では
ω
[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.57) は、数字を横一列に並べる一次元の配列でした。バウアーズは、これをさらに
高次元の配列へと拡張しました。BEAF 入門14 では、どのようにその拡張を考えていけば良いのかを、順
序立てて解説されています。そして、このような定義となりました15 。まずは、言葉の定義です。
1. 「基数」 (b) は、配列の 1 番目の要素である。
2. 「プライム」 (p) は、配列の 2 番目の要素である。
3. 「パイロット」は、プライムの次の最初の 1 ではない要素である。パイロットは 3 番目以降の要素と
なる。
4. 「副操縦士」は、パイロットの 1 つ前の要素である。パイロットが行の中で 1 番目の要素であれば、
副操縦士は存在しない。
5. 「構造」は配列の一部で、配列よりも低次元なグループによって構成されるものである。構造は、要
素 (X 0 と書く)、行 (X 1 と書く)、平面 (X 2 )、3 次元の領域 (X 3 )、4 次元のフルーン (X 4 )、さらに
高次元の構造 (X 5 , X 6 等)、そして X ↑↑ 3 のようなテトレーション構造、といった可能性がある。
さらに、そこから先はペンテーション構造、ヘキセーション構造, ... と続く。
6. 「前の要素」は、パイロットと同じ行にあり、パイロットよりも前にある要素である。「前の行」は、
パイロットと同じ平面にあり、パイロットよりも前にある行である。
「前の平面」は、パイロットと同
じ領域にあり、パイロットよりも前にある平面である。同様に、定義を続けることができる。これら
は「前の構造」と呼ばれる。
14 巨大数研究
15 巨大数研究
Wiki - BEAF 入門 http://ja.googology.wikia.com/wiki/BEAF 入門
Wiki - BEAF http://ja.googology.wikia.com/wiki/BEAF
6.8. BEAF のテトレーション配列
95
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 減らしたものに置き換える。
(c) すべての乗客を b にする。
(d) 配列のそれ以外の要素は変化しない。
配列表記のルールは、このルールと一致することを確認してみてください。ここで、BEAF では有限長の
配列は、その後に 1 が無限に続いている配列と同じと考えるため、{a} = {a, 1} = {a, 1, 1, ...} です。した
がって、{a} のプライムは 1 であると考えます。
さて、このように定義すると、配列を高次元に拡張することができます。逆に言えば、高次元の配列が定
義されなければ「構造」の定義は意味をなしません。まずは、2 次元の配列について、急増加関数による近
似計算の結果を示します。
{
{
{
{
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
5 5
5
5 5
5 5


 5 5
5 5


5 5
}
≈
F [ω ω × 2](5)
≈
F [ω ω × ω](5) = F [ω ω+1 ](5)
≈
F [ω ω+1 × ω](5) = F [ω ω+2 ](5)
≈
F [ω ω+ω ](5) = F [ω ω×2 ](5)
}
}
}

5 

≈
5


5
F [ω ω×3 ](5)
第 6 章 カントール標準形レベルの帰納関数
96



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 次元の区切りなので次の行に数字がうつることを示し、(2) は 2 次元の区切
りなので次の平面に数字がうつることを示します。たとえば
{
}
5 5 5 5 5
{5, 5, 5, 5, 5(1)2} =
≈ F [ω ω × 2](5)
2
ということです。{5, 5(2)2} を BEAF の計算ルールに従って計算すると、5 行 5 列の 5 となります。また、
BEAF では 配列次元演算子 (”array of” operator)
16
という表記も使います。これは、たとえば 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
5
5
5
5
5
5
5



5 



5
2
= 52 &5 ≈ F [ω ω ](5)
となります。ここで、配列次元演算子は次元の構造をあらわしているので、そのまま計算してはいけないこ
とに注意してください。つまり、52 &5 は 25&5 のように計算できません。
2
n
2 次元配列が F [ω ω ] の強さとなるように、n 次元配列は F [ω ω ] の強さとなります。100 次元配列の例と
して ゴンギュラス (Gongulus) を示します。
【定義】ゴンギュラス
ゴンギュラスは、BEAF で {10, 10(100)2} = 10100 &10 と等しい数である。10100 &10 は 1 辺が 10 の
100 次元超立方体に 10 が充填されている状態で、全部で 10 がグーゴル = 10100 個ある。急増加関数で
F [ω ω
100
](10) と近似される。
ここから先の テトレーション空間 の話、すなわち テトレーション配列 は、難しくなってきます。バウ
アーズ本人による BEAF の説明17 では、テトレーション空間をこのように説明しています。多次元空間
を X n と表記すると、X が直線、X 2 が平面、X 100 が 100 次元空間です。超次元 (super dimension) は
n
X X で、トリメンション (trimension) は X X
デュラトリ (Dulatri)
18
Xn
、quadramensions は X X
XX
n
のように続きます。そして
が図解されています。デュラトリは 3 を使った X 2X の構造の超次元配列で、「一
辺の長さ 3 の 3 次元立方体配列中に 3 が充填されている」ものを 1 つの「立方体要素」と考えて(つまり、
1 つの立方体要素に 33 = 27 個の 3 がある)、一辺の長さ 3 の 3 次元立方体配列中に「立方体要素」が充填
16 巨大数研究
Wiki - 配列次元演算子 http://ja.googology.wikia.com/wiki/配列次元演算子
Array Function http://www.polytope.net/hedrondude/array.htm
18 巨大数研究 Wiki - デュラトリ http://ja.googology.wikia.com/wiki/デュラトリ
17 Exploding
6.9. 巨大数生成プログラム
97
されているものがデュラトリです。したがって、そこには (33 )3 = 32×3 = 729 個の 3 が充填されているこ
とになります。このような構造を配列次元演算子で書くときには、構造を分かりやすくするために X をそ
のまま使います。また、次元の区切りは (0, 2) と表記されます。
【定義】デュラトリ
デュラトリは BEAF で {3, 3(0, 2)2} = X 2X &3 と書かれる数で、X = 3 と評価される。急増加関数で
ω2
は F [ω ω ](3) と近似される。
XX
XX
X
次元を X ↑↑ 5 次元であると表記して、a ↑↑ b& c を a ↑↑ b 次元の c といったように考えること
ができます。バウアーズ自身は、このようなテトレーション配列以上の BEAF の計算方法について、あま
り具体的な計算方法の説明をしていません。ちなみに、テトレーション配列の次はペンテーション配列にな
りますが、その説明には Trying to understand how these work might give someone a migrane. すなわち
「その仕組みを理解しようとすれば偏頭痛になるかもしれない」としています。しかし、とにかくこのよう
にテトレーションやペンテーションを考えたのと同じように、次元の構造にもテトレーション次元やペン
テーション次元を考えることができるのだ、としています。その定義に急増加関数と対応付けて説明を与え
たのは、主に Googology Wiki の人たちです。バウアーズは、計算方法を事細かに示すことよりも、大ま
かな概念を「配列次元演算子」という記号に落とし込んで定義したというところまでです。それに対して、
計算方法を緻密に定めた巨大数を作ろうとしている人たちは、バードや Sbiis Sabian などです。
さて、テトレーション配列は F [ϵ0 ] の強さを持ちます。例として ゴッパトス (Goppatoth)
な数です。
19
はこのよう
【定義】ゴッパトス
ゴッパトスは、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 ] の増加速度を持つ
関数を記述する、という競技を開催しました20 。
このようなルールです。
19 巨大数研究
20
Wiki - ゴッパトス http://ja.googology.wikia.com/wiki/ゴッパトス
Googology Wiki - User blog:Deedlit11/Bignum Bakeoff appetizer
第 6 章 カントール標準形レベルの帰納関数
98
1. F [ω ω
ωω
](4) よりも大きな数字を出力するプログラムを作成する(この数字には特別な意味はない。
F [ϵ0 ] レベルの関数がなければ作れない数で、それほど大きくない数字を選んだ)。
2. 記憶容量の制限はなく、任意の整数を扱うことができるものとする。したがって、MAXINT のよう
な参照はできない。
3. あるプログラム言語における優勝は、ホワイトスペースを除いた文字数が最小のプログラムである。
この競技で、Deedlit11 氏自身によるグッドスタイン数列を使った 101 文字の C 言語プログラム、そしてそ
れを元にした Sai2000 氏による 83 文字の Python 3 プログラムが作成されました。Python プログラムを掲
載します。
i = 9 ** 9 ** 9
b = 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 *= b
print ( b )
9
これは、グッドスタイン関数 G(99 ) を計算するプログラムです。
99
第 7 章 帰納関数
7.1
ζ0 以下の順序数
前章までで、F [ϵ0 ] までの巨大関数を作成することができました。F [ϵ0 ] よりも大きな帰納関数について
扱います。ここから、さらに大きな順序数をどのように定義するかを見ながら、対応する巨大関数の作成に
挑みます。ここから先は、さらに順序数の定義が複雑になり、また対応する関数の定義も複雑になります。
急増加関数では極限順序数に対応する関数の定義に、順序数の基本列の定義を使っています。順序数の中
には、基本列が定義できないものや、基本列の定義の中に基本列で定義できない順序数を使っているものが
あります。帰納的に定義された関数であれば、帰納的に定義出来る順序数の急増加関数として表現出来るは
ずです。
それでは、ϵ0 以上の順序数について見ていきます。ϵ0 は、α = ω α が成り立つ最小の順序数です。ϵ0 より
も大きく α = ω α が成り立つ最小の順序数は ϵ1 と書かれ、ϵ0 + 1, ω ϵ0 +1 , ω ω
数です。ここで、この収束列を a0 ,a1 ,a2 ,... として計算します。an+1 = ω
a0
= ϵ0 + 1
a1
= ω ϵ0 +1 = ω ϵ0 ×ω = ϵ0 ×ω
a2
= ω ϵ0 ×ω = (ω ϵ0 )ω = ϵ0 ω
a3
= ω ϵ0 = ω ϵ0
a4
= ω ϵ0
ω
ϵ0 ω
1+ω
= ω ϵ0
ω
= ω ϵ0 ×ϵ0 = ϵ0 ϵ0
1+ϵ0 ω
= ϵ0 ϵ 0
an
ϵ0 +1
... を収束列に持つ極限順序
です。
ω
ϵ0 ω
この基本列と、bi = ϵ0 ∧∧ i、つまり b0 = 1, b1 = ϵ0 , b2 = ϵ0 ∧∧ 2 = ϵ0 ϵ0 , b3 = ϵ0 ∧∧ 3, … の基本列を比較す
ると、i > 1 で bi−1 < ai < bi となるため収束先は一致し、aω = bω となります。したがって、
ϵ1 = aω = bω = ϵ0 ∧∧ ω
となります。このように、基本列の取り方は一通りではありません。そして、ω ϵ1 = ϵ1 が成り立ちます。
α = ω α が成り立つ順序数は、順番に ϵ0 , ϵ1 , ϵ2 ... と定義されます。つまり、
ϵi+1
=
=
lim(ϵi + 1, ω ϵi +1 , ω ω
ϵi
∧∧
ϵi +1
, …)
ω
となります。次に、lim(ϵ0 , ϵ1 , ϵ2 , …) の収束列を取ると、極限順序数 ϵω が定義され、これは α = ω α が成
り立つ ω 番目の順序数です。
さらに、基本列の定義を繰り返し、ϵω ,ϵωω ,ϵωωω ,... という基本列に到達したところで、α = ω α が成り立
つ ϵ0 番目の順序数 ϵϵ0 が定義されます。
そして、ϵ0 、ϵϵ0 、ϵϵϵ0 、ϵϵϵϵ 、といった基本列を取ると、極限順序数 ζ0 が定義されます(ζ:ゼータ(ツェー
0
タ))。ζ0 は、α = ϵα が成り立つ最小の順序数です。ここで、この順序数は Googology Wiki では ζ0 とさ
れていますが、η0 と書かれることもあります。ϵ0 よりも大きい順序数の記号はあまり統一されていないよ
うなので、混乱しないためには注意が必要です。
第7章
100
7.2
帰納関数
ふぃっしゅ数バージョン 6
ふぃっしゅ数バージョン 6 (F6 ) と同時に定義されるふぃっしゅ関数バージョン 6 は、F [ζ0 ] 程度の大きさ
を持ちます。
【定義】ふぃっしゅ数バージョン 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] の元は、その要素の要素の…要素である M [0, 1] の元と同じ関数の働き
を持つ。
M [m, n + 1]=写像 M [m, n] → M [m, n] 全体の集合 (n = 1, 2, . . .)
[2] M [m, n] の元 m(m, n) を以下のように定める。ただし、ai , bi , fi は m(m, i) の元とし、厳密な定義
の構造は F5 と同じである。
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, . . . and 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) とする。
F6 の大きさは、以下の様に計算できます。
=
[m1 , m2 , m3 , …](mi = m(0, i))
=
x+1
m(1, 2)m(1, 1)
=
[a1 , a2 , a3 , …] とすると
a1 (x)
=
mx mx−1 ...m1 (x) より、F5 と同様の計算で
a1
≈
H[ϵ0 ]
すなわち m(1, 2)m(1, 1)
≈
H[ϵ0 ]
a2 f1 (x)
=
my my−1 …m2 f1 (x)(y = max(x, 2)) より
m2
=
H[×ω](H[a] → H[a ×ω] の変換)
m(1, 1)
7.2. ふぃっしゅ数バージョン 6
101
m3 m2
=
H[×ω ω ]
m3 m3 m2
=
H[×ω ω ]
m4 m3 m2
=
H[×ω ω ]
m5 m4 m3 m2
=
H[×ω ω
2
ω
ωω
]
…
a2
H[×ϵ0 ]
=
となります。そして、
a3 f2 f1 (x)
=
my my−1 ...m3 f2 f1 (x)(y = max(x, 3)) より、
f2
=
H[× a] とすると
m3 f2
=
H[× aω ]
m3 m3 m2
=
H[× aω ]
m4 m3 f2
=
H[× aω ]
m5 m4 m3 f2
=
H[× aω
2
ω
ωω
]
…
a3 f2
=
H[× aϵ0 ]
となるため、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 ]
m 4 f3 f2
=
H[× ab ]
m5 m4 f3 f2
=
H[× ab
ω
ωω
]
…
a4 f3 f2
:
ϵ0
H[× ab ]
ϵ0
となるため、a4 は [H[× a] → H[× ab ]]→ [H[× a] → H[× ab ]] の変換です。このことから、
a4 a3
a4 a3 a2
ϵ0
: H[× a] → H[× aϵ0 ] の変換
ϵ0
: H[× ϵ0 ϵ0 ]
c
と計算され、以下同様に a5 は [H[× a] → H[× ab ]]→ [H[× a] → H[× ab ]] → [H[× a] → H[× ab ]]→ [H[
× a]→ H[× ab
cϵ0
]] の変換となって、
a5 a4 a3 a2
: H[× ϵ0 ϵ0
ϵ0 ϵ0
a6 a5 a4 a3 a2
: H[× ϵ0 ∧∧ 5]
an+1 an ...a2
: H[× ϵ0 ∧∧ n]
] = H[× ϵ0 ∧∧ 4]
第7章
102
帰納関数
と計算され、
m(1, 2)2 m(1, 1) ≈ H[ϵ0 ∧∧ ω] = H[ϵ1 ]
となります (ϵ1 = ϵ0 ∧∧ ω の計算は前節)。
m(1, 2)3 m(1, 1) = [b1 , b2 , b3 , ...]
とすると、bi は上記 ai の ϵ0 を ϵ1 に変えた式となります。したがって、
m(1, 2)3 m(1, 1) ≈ H[ϵ1 ∧∧ ω] = H[ϵ2 ]
m(1, 2)4 m(1, 1) ≈ 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)
f2
:
H[ϵ×ϵ0 ](H[ϵa ] → H[ϵa ×ϵ0 ] の変換)
f3
:
H[ϵ× a ] → H[ϵ× aϵ0 ] の変換
f4 f3 f2
:
H[ϵ×ϵ0 ϵ0 ϵ0 ]
となることから、
m(2, 2)2 m(2, 1)
≈ H[ϵϵ1 ]
3
m(2, 2) m(2, 1)
≈ H[ϵϵ2 ]
m(2, 2)4 m(2, 1)
≈ H[ϵϵ3 ]
と計算されます。このように、m(2,2) が H[ϵϵa ] の a に 1 を足す効果を持つので、
m(3, 2)m(3, 1)
≈ 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 ]
となります。
以上の計算を繰り返すと、
7.3. ヴェブレン関数
103
となり、
F6 (x) = m(x, 2)m(x, 1)(x) ≈ H[ζ0 ]
と計算されます。
7.3
ヴェブレン関数
本書の中でも、ここから先の議論は難しくなってきますので、著者の記述の正確性はかなり怪しくなって
きます。現時点での理解を書いておきます。
ヴェブレン関数 (Veblen function) ϕα (β) は以下の様に定義されます (Wikipedia の説明1 , Oswald Veblen
の原著論文2 )。
【定義】ヴェブレン関数
ϕ0 (β) = ω β
ϕα+1 (β) =「ϕα (γ) = γ となる γ 」 のうち β 番目のもの
ϕα (β) = 「すべての α′ < α に対し ϕα′ (γ) = γ となる γ 」 のうち β 番目のもの (α は極限順序数)
ϕα (β) < ϕγ (δ) となるのは、「α = γ かつ β < δ 」であるか、または「α < γ かつ β < ϕγ (δ)」であるか
または「α > γ かつ ϕα (β) < δ 」の時だけである。
ϕα (0) = α を満たす最小の順序数はフェファーマン・シュッテの順序数 (Feferman-Schütte ordinal) と
呼ばれ、Γ0 と書かれる。
Veblen 関数の定義 ϕα+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 ということになります。
1 Wikipedia
- Veblen function https://en.wikipedia.org/wiki/Veblen function
Oswald (1908), ”Continuous Increasing Functions of Finite and Transfinite Ordinals”, Transactions of the
American Mathematical Society 9 (3): 280-292 http://dx.doi.org/10.1090/S0002-9947-1908-1500814-9
2 Veblen,
第7章
104
帰納関数
α = 3 のときは、ϕ0 (3) は 3 番目の数であるため 2 番目の数である ω 2 よりは大きな数となります。自然
数や ω や ω 2 をいくら足し合わせても到達できないような最小の数を考えると、それは ω 2 × n の収束先で
ある ω 3 ということになります。
同様に、ϕ0 (4) = ω 4 , ϕ0 (5) = ω 5 , …, ϕ0 (n) = ω n となり、さらに
ϕ0 (ϕ0 (1)) = ϕ0 (ω) = ω ω
ϕ0 (ϕ0 (ϕ0 (1)))= ϕ0 (ω ω ) = ω ω
ω
のように、ヴェブレン関数によって順序数が定義されます。
(2) ϕ1 (α) の計算
次に、ϕ1 (0) を考えます。これは、
「ϕ0 (α) = α となる α のうち最初のもの」つまり「ω α = α となる最初
の α」です。これが、ϵ0 の定義でした。また、ϵ0 より小さい数に+や ϕ0 を何回適用しても ϵ0 より小さいと
いうことになります。0 に+や ϕ0 を何回適用しても到達できないような数のうち、最小のものを ϕ1 (0) = ϵ0
と定義していると言うこともできます。これはつまり、カントール標準形では書くことができない最小の順
序数、ということです。
ϕ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 と定義しています。
ヴェブレンは、2 変数関数の定義を多変数 ϕ(αn , αn − 1 , …, α0 ) に拡張しています。定義は、先ほど引用
した Wikipedia または Veblen の原著論文を参照して下さい。多変数ヴェブレン関数に対して、
ϕ(1, 0, 0)
となります。
=
γ0
ϕ(1, 0, γ) =
γγ
ϕ(1, 0, 0, 0)
=
アッカーマン順序数 (Ackermann ordinal)
ϕ(1, 0, …, 0)(ω 個の 0)
=
小ヴェブレン順序数(Small V eblen ordinal)
7.4. バッハマン・ホワード順序数
105
ヴェブレンはさらに、変数の数を超限的にたくさん増やしたとき (transfinitely many variables) にも、
ヴェブレン関数を定義できるとしています。この定義の限界が大ヴェブレン順序数 (Large Veblen ordinal)
とされています。
バッハマン・ホワード順序数
7.4
バッハマン・ホワード順序数 (Bachmann-Howard ordinal) は、フェファーマン・シュッテの順序数より
も大きい帰納的な順序数です。この順序数を定義するための順序数崩壊関数 (ordinal collapsing function)
ψ は、Wikipedia
3
に記されています。ここでは、その概略を記します。
Bachmann-Howard 順序数を定義するためには、順序数崩壊関数 ψ を使います。ここでのポイントは、ψ
関数の引数として帰納的に定義できない順序数 ω を使うことです。通常は、ω として濃度が不可算となる
最初の順序数 ω1 が用いられますが、帰納的に定義できない最初の順序数 ω1CK を使っても構わないようで
す。ψ 関数は帰納的でない順序数を計算に用いていますが、その結果計算される順序数は帰納的な順序数に
なります。ここが、非常にトリッキーなところです。ω を用いないと ϕ2 (0) = η0 よりも大きな順序数 ϕ2 (1)
を ψ 関数でうまく定義できない(ψ 関数の値が η0 よりも大きくならない)ところを、ω 導入することで
その壁を突破するために使われているようです。η0 よりも大きい順序数を扱う時には注意が必要となりそ
うです。
Wikipedia によれば、ψ 関数は以下のような順序数に対応します。
ψ(ΩΩ ) = Γ0 フェファーマン・シュッテの順序数
2
ψ(ΩΩ ) アッカーマン順序数
ω
ψ(ΩΩ ) 小ヴェブレン順序数
Ω
ψ(ΩΩ ) 大ヴェブレン順序数
ψ(εΩ+1 ) Bachmann-Howard 順序数
7.5
さらに大きな順序数
Wikipedia の記述4 にしたがって、さらに大きな順序数について記述します。
Bachmann-Howard 順序数は、Kripte-Platek の集合論における証明理論の強さを示すものだとされてい
ます。そして、それよりも強い集合理論を用いて、その限界を示す順序数が定義されるようです。たとえ
ば、second-order arithmetic や Zermelo-Fraenkel がそれに当たります。このような、弱い理論では再帰的
に計算出来ないような大きさの、大きな帰納的順序数が存在するとされています。
そして、そのような弱い理論では再帰できないような帰納的順序数をさらに越えると、いかようにしても
帰納的に定義できない最初の順序数 チャーチ・クリーネ順序数 (Church-Kleene ordinal)
5 6
ω1CK が定義
されます。これは、最初の帰納的でない順序数です。それでも、ω1CK 以下の順序数は可算無限(アレフ 0)
であり、最初の不可算順序数(濃度がアレフ 0 よりも大きい順序数)である ω1 には到達していません。つ
まり、ω1CK < ω1 ですが、実際には多くの場合に ω1CK は ω1 と同じように振る舞うとされています。
3 Ordinal
collapsing function https://en.wikipedia.org/wiki/Ordinal collapsing function
- Large countable ordinal https://en.wikipedia.org/wiki/Large countable ordinal
5 巨大数研究 Wiki - チャーチ・クリーネ順序数 http://ja.googology.wikia.com/wiki/チャーチ・クリーネ順序数
6 Wikipedia - Church-Kleene ordinal https://en.wikipedia.org/wiki/Church-Kleene ordinal
4 Wikipedia
第7章
106
不可算順序数については、 巨大基数 (large cardinal)
7
帰納関数
の理論で研究がされています。この理論が巨大な
自然数を追求する巨大数論にどのように寄与するかは不明なので、本書で取り扱う範囲は可算順序数の範
囲です。ただし、Bachmann-Howard 順序数の定義で示したように、帰納的順序数を定義する目的で、不可
算順序数が用いられることはあります。
7.6
タラノフスキーの順序数記法
タラノフスキー (Dmyto Taranovsky) が、大きな順序数の記法を定義8 しています。この文章によれば、
順序数記法を以下の様に定義できます。
1. A General Notation
2. An Ordinal Notation
3. A Stronger Ordinal Notation
4. Second Order Arithmetic
5. Beyond Second Order Arithmetic
最初の An Ordinal Notation の段階で、Veblen 関数、Bachmann-Howard ordinal、proof-theoretical
ordinal、Transfinite Recursion、Monotonic Induction の段階まで記述でき、さらにその先まで記述できる
ようになります。
Taranovsky の順序数記法は、定義を読んでも集合論をしっかりと学んでいない著者には難しくて理解出来
ないので、本書では深入りしません。巨大数探索スレッドの 9 では、この順序数記法の An Ordinal Notation
9
、A Stronger Ordinal Notation
10
、A Step towards Second Order Arithmetic
11
で表される順序数の
収束列と、収束列を求めるために必要な性質がまとめられています。
7.7
多変数 C0
Taranovsky の順序数記法を元に、たろう氏が作成した順序数から順序数への多変数関数 C0 を作成しま
した12 。
「0 とこの関数だけで、ψ(ω ω ) 未満のすべての順序数を作ることが出来る」とのことです。さらに、
2重リスト C0 、多変数 C1 などが定義されています。
7 Wikipedia
- Large cardinal https://en.wikipedia.org/wiki/Large cardinal
Notation (Dmytro Taranovsky) http://web.mit.edu/dmytro/www/other/OrdinalNotation.htm
9 巨大数探索スレッド 9 の 94 にアップされた文書 (2010 年 12 月 15 日) http://gyafun.jp/ln/archive/9-94.txt
10 巨大数探索スレッド 9 の 97 にアップされた文書 (2010 年 12 月 17 日) http://gyafun.jp/ln/archive/9-97.txt
11 巨大数探索スレッド 9 の 102 にアップされた文書 (2010 年 12 月 17 日) http://gyafun.jp/ln/archive/9-102.txt
12 巨大数探索スレッド 7 の 571 でアップされた文書 (たろう, 2007 年 10 月 17 日) http://gyafun.jp/ln/archive/7-571.txt
8 Ordinal
7.8. バード数
107
【定義】多変数 C0
□ : 0 個以上の 0
X : 0 個以上の 0 以上の順序数
a, b : 順序数
B : 極限順序数(Bn : 収束列)
として、
C0 (□, a) = a + 1
C0 (X, b + 1, a) = lim 初項 a / 2項目以降 C0 (X, b, 1個前の項)
C0 (X, b + 1, 0, □, a) = lim 初項 0 / 2項目以降 C0 (X, b, 1個前の項, □, a)
C0 (X, B, □, a) = limC0 (X, Bn , □, a)
大きさは、以下の様に計算されています。
C0 (a, 0) = ω a
C0 (1, 0, 0) = ϵ0
C0 (2, 0, 0) = η0
C0 (a, 0, 0) = ϕa (0)
C0 (1, 0, 0, 0) = γ0 = ψ(0)
C0 (1, 0, a, 0) = γωa
C0 (1, 1, 0, 0) = γγ...γ0 = ψ(ω)
C0 (1, a, 0, 0) = ψ(ω・a)
C0 (2, 0, 0, 0) = ψ(ω 2 )
C0 (2, 1, 0, 0) = ψ(ω 2 + ω)
C0 (2, 2, 0, 0) = ψ(ω 2 + ω・2)
C0 (2, 3, 0, 0) = ψ(ω 2 + ω・3)
C0 (2, a, 0, 0) = ψ(ω 2 + ω・a)
C0 (3, 0, 0, 0) = ψ(ω 2・2)
C0 (4, 0, 0, 0) = ψ(ω 2・3)
C0 (ω, 0, 0, 0) = ψ(ω 2・ω)
C0 (1, 0, 0, 0, 0) = ψ(ω 3 )
C0 (1, 0, 0, 0, 0, 0) = ψ(ω 4 )
C0 (1, 0, 0, 0, 0, 0, 0) = ψ(ω 5 )
limC0 (1 が n 個) = ψ(ω ω )
7.8
バード数
バード氏は、ϵ0 に相当する多重リスト表記を作成した後に、さらにそれよりも大きい関数を作成し、順
序数で評価しています13 。すなわち、H(n) 関数、S(n) 関数、U (n) 関数、と強化して、F [θ(Ωω )](n) レベ
ルに到達しています。その計算は、バード氏自身が丹念に説明をしていますが、著者が γ0 を超える順序数
の理解がおぼつかないため、ここではそのような評価がされているということを記すに止めておきます。こ
の限界が、新しい バード数
13 再掲:
14
になります。たろう氏の多変数 C0 でも、ψ(ω ω ) という順序数が限界になっ
Chris Bird’s Super Huge Numbers http://mrob.com/users/chrisb/
Wiki - バード数 http://ja.googology.wikia.com/wiki/バード数
14 巨大数研究
第7章
108
帰納関数
ていて、バード氏の限界と同じ程度になっているので、おそらくここまでが基本列で定義された順序数と対
応する関数のこれまでの限界ではないかと思います。いずれまた、著者が検証能力を持ったときに、検証を
したいところです。
なお、バード氏の順序数の解析15 によれば、ヴェブレン階層は ϕ(α, β) = ω ↑1+α (ω(1 + β)) となるよう
です。α と β が無限順序数であれば 1 + α = α, 1 + β = β となるので、ここでは α と β は自然数だと思い
ます。このヴェブレン階層の計算がまだ理解できていません。
7.9
サブキュービックグラフ数
サブキュービックグラフ数16
7.10
R 関数
R 関数17
7.11
ブーフホルツのヒドラ
ブーフホルツのヒドラ18
7.12
バシク行列システム
ペア数列システム19
バシク行列システム20
7.13
ミーミーミーロッカプーワ・ウンパ
BEAF の説明
21
BEAF によって名付けられた最大の数は ミーミーミーロッカプーワ・ウンパ
7.14
loader.c
22
です。
ローダー数
23
ローダー数
15 Beyond
Nested Arrays I http://mrob.com/users/chrisb/Beyond Nested Arrays I.pdf
Wiki - サブキュービックグラフ数 http://ja.googology.wikia.com/wiki/サブキュービックグラフ数
17 巨大数研究 Wiki - R 関数シリーズ http://ja.googology.wikia.com/wiki/R 関数シリーズ
18 巨大数研究 Wiki - ブーフホルツのヒドラ http://ja.googology.wikia.com/wiki/ブーフホルツのヒドラ
19 巨大数研究 Wiki - ペア数列数 http://ja.googology.wikia.com/wiki/ペア数列数
20 巨大数研究 Wiki - バシク行列システム http://ja.googology.wikia.com/wiki/バシク行列システム
21 巨大数研究 Wiki - BEAF http://ja.googology.wikia.com/wiki/BEAF
22 巨大数研究 Wiki - ミーミーミーロッカプーワ・ウンパ http://ja.googology.wikia.com/wiki/ミーミーミーロッカプーワ・ウン
パ
23 巨大数研究 Wiki - loader.c http://ja.googology.wikia.com/wiki/loader.c
16 巨大数研究
109
第 8 章 計算不可能な関数
8.1
ビジービーバー関数
本章では、計算不可能な関数について扱います。計算不可能な関数によって作られる数は、計算ができ
ません。 ビジービーバー関数 (Busy beaver function) (ラドのシグマ関数)1
2
は、計算不可能関数の有
名な例です。1962 年に Tibor Rado が論文で n 個の動作状態を持つチューリングマシン (n-state Turing
machine) のビジービーバーゲームを考えて発表しました3 。
次のような チューリングマシン (Turing machine)
4
を考えます。
• マシンは n 個の動作状態と、停止状態を持つ。ここで、n は正の整数で、その中の 1 つが初期状態で
ある。
• マシンは 1 つの 2 方向の無限に長いテープを使う。
• テープには 2 種類の記号 (0 または 1) が書かれている。
• マシンには遷移関数があり、入力は (1) マシンの現在の状態と、(2) 現在の位置のテープの状態の 2 つ
である。
• 遷移関数は、3 つの出力を持つ。(1) テープの現在の位置から読み出された記号を上書きする記号 (2)
テープ上を動く方向(左または右)(3) 遷移先の状態(停止する場合もある)
チューリングマシンは、プログラムを入力 2 つと出力 3 つの 5 つ組の情報、つまり(現状態、現記号、次
に書く記号、移動方向、次の状態)を有限個並べた表として書けるようなマシンです。
ビジービーバーゲームは、すべて 0 のテープの初期状態から開始して、遷移関数を停止状態になるまで
繰り返します。もし、マシンが最終的に停止したときには、その時のテープ上の 1 の数がマシンのスコアと
なります。n 個の動作状態を持つすべてのチューリングマシンでビジービーバーゲームをしたときに、最大
の値を返すものが n 個の動作状態におけるビジービーバー (n-state busy beaver) であるとされ、最大かど
うかは分からないけれど、現在のところは最大となっているものが優勝マシンとされます。問題は、現在優
勝マシンとされているものがビジービーバーなのかどうかを、確かめる方法がないことです。それを決定す
るためには、あらゆる n 個の動作状態のチューリングマシンを停止しないことが確定するまで走らせる必
要がありますが、どこまで走らせても停止しないことが確定しない(永遠に停止しないのか、いつかは停止
するのかが、いつまでも分からない)、という 停止性問題 (halting problem) が生じるためです。
ビジービーバー関数 Σ(n) は、n 個の動作状態と 2 つの記号 (0 と 1) を持つあらゆるチューリングマシンの
中で、最大の 1 を書いて停止するものが書く 1 の個数です。これは、明確に定義されますが (well-defined)、
1 巨大数研究
Wiki - ビジービーバー関数 http://ja.googology.wikia.com/wiki/ビジービーバー関数
- Busy Beaver http://mathworld.wolfram.com/BusyBeaver.html
3 Rado, T. (1962) ”On Non-Computable Functions.” Bell System Technical J. 41: 877-884.
doi:10.1002/j.15387305.1962.tb00480.x
4 BeneDict 地球歴史館 - チューリングマシンの原理 http://www.benedict.co.jp/Smalltalk/talk-73.htm
2 Mathworld
第8章
110
計算不可能な関数
計算可能ではありません。十分に小さい n、すなわち Σ(0) = 0, Σ(1) = 1, Σ(2) = 4, Σ(3) = 6, Σ(4) = 13
までは値が分かっていますが、n > 4 に対しては、正確な値が計算されていません。n = 5 の時は、4098 を
返すチューリングマシンが見つかりましたが、まだ停止するかどうか分からないチューリングマシンが残っ
ているので、確定していません。n=6 の時は、3.5 × 1018267 という下限が計算されていますが、これもこ
の値が Σ(6) であるかどうかは分かっていません。
「○文字以内で書ける最大の数」あるいは「○文字以内で書けない最小の数」といった時には、この停止
性問題と同じ問題が発生し、計算不可能関数になります。ただし、その時には「どのような表記法が許され
るか」が明確にされていなければなりません。それが明確になされていないと、
「15 文字以内で書けない最
小の数」が 15 文字で書けてしまう、というような問題も発生します。巨大数探索スレッドでは、与えられ
たプログラミング言語である文字数で書ける最大の数、という関数を考えて、具体的にその最大値を求め
よう、というような話題も出ていました。
さて、チューリングマシンは、具体的に計算ができる計算機ですが、これに計算ができないブラックボッ
クスを追加した 神託機械 (oracle machine)
5
を考えることができます。これは、特定の問題を 1 ステップ
で決定して値を返す機能がついたもので、その特定の問題は計算不可能なものであっても構いません。この
神託機械を使って、ふぃしゅ数バージョン 4 を以下のように定義しました。
8.2
ふぃっしゅ数バージョン 4
ふぃっしゅ数バージョン 4
6
の定義を記します。
【定義】ふぃっしゅ数バージョン 4
[1] 関数 f から関数 g への写像 s′ (1) を以下で定める。
関数 f を神託 (oracle) として持つチューリングの神託機械 (oracle machine) を考え、この
マシンによるビジービーバー関数を g とする。すなわち「チューリングマシン+関数 f 」の
マシン n ステートでセット可能な1の数の最大を g(n) とする。
[2] s′ (n)(n > 1) および ss′ (n)(n > 0) を、F3 と同様に定める。すなわち、
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 から、その関数を神託と
して持つような神託機械を想定して、その神託機械によるビジービーバー関数を返すような汎関数です。
5 Wikipedia
6 巨大数研究
- Oracle machine https://en.wikipedia.org/wiki/Oracle machine
Wiki - ふぃっしゅ数バージョン 4 http://ja.googology.wikia.com/wiki/ふぃっしゅ数バージョン 4
8.3. ビジービーバーのハーディー的拡張
111
ここで、F4 (x) は「ビジービーバー関数を元にして帰納的定義を繰り返す」という関数ではありません。
まず、初期の関数である f (x) = x + 1 に対して、s’(1) を施すと、これは神託がないビジービーバー関数そ
のものなので、s′ (1)f (x) がビジービーバー関数に相当します。次に、この s′ (1)f (x) に対して再度 s′ (1) を
施した s′ (1)2 f (x) は、
「ビジービーバー関数を神託として持つ神託機械」によって計算できない関数なので、
ビジービーバー関数から帰納的に定義できるどんな関数よりも大きな関数になります。そのような定義をひ
たすら対角化した結果得られる関数が F4 (x) です。
ふぃっしゅ数バージョン 4 を作ったときには、バージョン 3 が最新だったためこれを元としましたが、バー
ジョン 5,6 を元としても同じように定義ができ、その方が大きくなります。この拡張は、帰納関数で議論し
たことを、そのまま計算不可能関数に拡張可能であることを示しています。そのことが、次でより明確にな
ります。
8.3
ビジービーバーのハーディー的拡張
たろう氏により、ビジービーバーのハーディー関数的拡張が以下で定義されました。
【定義】ビジービーバーのハーディー関数的拡張
B[0](n) =
B[a + 1](n) =
B[A](n) =
n
s′ (1)(B[a])(n)
B[An ](n)
ここで、s′ (1) はふぃっしゅ数バージョン 4 の定義と同じ。
ω+1
この時、F3 (n) ≒ F [ω
× 63](n) であることから、F4 (n) ≒ B[ω
ω+1
× 63](n) となります。
すなわち、大きな順序数からハーディー関数を使って大きな計算可能関数を作ったのと同様の手続きで、
大きな帰納的順序数から B[A] を用いて大きな計算不可能関数を作ることができます。前章までの議論をそ
のまま当てはめ、B[Γ0 ] といったような大きな関数を作ることができます。この関数は、計算不可能ではあ
りますが定義が可能な関数です。
8.4
クサイ関数
Googology Wiki には、 クサイ関数 (Xi function)7 が定義されています。まず、次のような SKI 表現を
定義します。
• I(x)=x
• K(x,y)=x
• S(x,y,z)=x(z,y(z))
たとえば、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 = I, y = S を代入すると K(I, S) = I となるため、K(K(I, S), S(K(I, S))) =
K(I, S) となります。さらに、K(I, S) = I となります。このように、S(K, S, K(I, S)) という SKI 表現は
7 巨大数研究
Wiki - クサイ関数 http://ja.googology.wikia.com/wiki/クサイ関数
第8章
112
計算不可能な関数
最終的に I になりましたが、無限に記述が増加するようなものもあれば、計算が終わるものもあります。n
個の文字から始める SKI 表現の中で、最大の有限の文字を返すものが返した文字数をクサイ関数 Ξ(n) とし
ます。SKI 表現はチューリングマシンと同じ強度で、Ξ(n) 関数は計算不可能になります。SKI 計算そのも
のはチューリングマシンと同じ程度の強さですが、神託記号 (oracle combinator) Ω(x, y, z) を導入するこ
とで、強くなります。Ω(x, y, z) は、x の計算結果が I になるときには y を、そうでなければ z を返します。
8.5
ラヨ数
Googology Wiki には、 ラヨ数 (Rayo’s number)
哲学者 Agustin Rayo
9
8
が定義されています。2007 年 1 月 26 日に、MIT の
とプリンストン大学の哲学者 Adam Elga
10
の間で巨大数対決が行われました11 。
そこでラヨ氏が提起したものが、この数です。ラヨ氏の言葉では、このように定義されました。
【定義】ラヨ数
First order の集合論の言葉でグーゴル個以内の記号で表現できるいかなる有限の正の整数よりも大き
な最小の正の整数
「グーゴル」のところを正の整数 n とすれば、急速に増加する ラヨ関数 (Rayo function) Rayo(n) を定
義できます。この計算は、チューリングマシンでも、神託機械でも、n 次のチューリングマシンでも計算で
きない、とされています。集合論による正確な定義は、Googology wiki に書かれています。ここでは、だ
いたいの雰囲気を説明します。
無限に連続するオブジェクト (object) の並びを定義することを変数設定 (variable assignment) とします。
たとえば、(3, 2, 6, 1/2, 4, π, Canada, ω, 65, …) のようなもので、Canada が入っているように、オブジェク
トは数字である必要はありません。なんでも入ります。次に、変数設定に対して適用する式 (formula) を考
えます。この式は、
• ”a ∈ b” a 番目のオブジェクトは b 番目のオブジェクトの要素である
• ”a=b” a 番目のオブジェクトは b 番目のオブジェクトと等しい
• ”(¬ e)” 式 e の否定
• ”(e ∧ f)” 式 e と式 f の論理積 (and)
• ”∃ a(e)” 式 e が真となるように a 番目のオブジェクトを変えることができる
以上 5 つにより構成されます。さて、ある数 m がある式 ϕ によって命名可能であるとは、式 ϕ を満たす
すべての変数設定に対して、最初のオブジェクトが必ず 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 文字も使っ
8 巨大数研究
Wiki - ラヨ数 http://ja.googology.wikia.com/wiki/ラヨ数
Rayo http://web.mit.edu/arayo/www/
10 Adam Elga http://www.princeton.edu/˜adame/
11 Big Number Duel http://web.mit.edu/arayo/www/bignums.html
9 Agustin
8.6. ふぃっしゅ数バージョン 7
113
てしまいました。もし、38 文字以内で 1 よりも大きな数字を定義する方法がなければ、Rayo(38)=2 という
ことになります。これまでの急速増加関数と比べると、あまりにも増加率が低いように見えます。しかし、
文字数が増えれば、帰納的に大きな数を表現できるようになり、爆発的に増加するとされています。
当初は、ラヨ数は F [ωωCK ] 程度の増加だと思われていましたが、それは誤りだということになりました。
n 文字の First-order arithmetic で表現できる数であれば、F [ωωCK ] 程度の増加になるようなのですが、そ
れよりも Second-order arithmetic
12
の方が強く、さらに First order set theory は強いから、ということ
です。
ラヨ関数が急速に増加することについて、具体的な計算が無いのでなかなかそのすごさは実感できませ
んが、ラヨ数は Googology Wiki における最大の自然数で、これまでに本書で登場したどのような巨大数よ
りも大きくなるはずなので、得体の知れない大きな自然数です。一見弱そうだけれど実は最強、ということ
です。
8.6
ふぃっしゅ数バージョン 7
チューリングマシンに神託を組み込んでも、ラヨ関数にはかなわないとなれば、ラヨ関数をさらに強め
るためには、ラヨ関数そのものに神託を組み入れるしかありません。そこで、組み入れてみます。
【定義】ラヨ関数のハーディー関数的拡張
関数 f に対して「f (a) = b; a 番目のオブジェクトと b 番目のオブジェクトに対して f (a) = b が成り立
つ」という神託式 (oracle formula) を使用可能な式に加えた時のラヨ関数 g を考え、f を g に変換す
る汎関数を RR とする。順序数 α に対するラヨ階層をこのように定義する。
R[0](n) =
R[a + 1](n) =
R[A](n)
n
RR(R[a])(n)
= R[An ](n)
もしこの定義が矛盾なく可能であれば、この時の R[α] の α に大きな基本列を定義出来る帰納的順序数
を入れれば、非常に大きなラヨラヨ関数、そしてラヨラヨ数ができることでしょう。そこで、ふぃっしゅ数
バージョン 6 の定義で m(0, 2) = RR として R[η0 ] の大きさにした関数を F7 (x) とします。
この時、 ふぃっしゅ数バージョン 7 を F7 := F763 (10100 ) とします。これは大きいと思います。13
8.7
ビッグフット
ビッグフット14
12 Wikipedia
- Second-order arithmetic https://en.wikipedia.org/wiki/Second-order arithmetic
Wiki - ふぃっしゅ数バージョン 7 http://ja.googology.wikia.com/wiki/ふぃっしゅ数バージョン 7
14 巨大数研究 Wiki - ビッグフット http://ja.googology.wikia.com/wiki/ビッグフット
13 巨大数研究
114
付 録A
日付
巨大数年表
出来事
ページ
8·1016
までの数を定義した。
287 -212 BC 頃
アルキメデスが『砂粒を数えるもの』で 10
1∼7 世紀
華厳経で不可説不可説転が書かれた。
p.16
1484 年
フランスの数学者 Nicolas Chuquet が Triparty en la science des nombres
p.10
p.14
という論文を書いた。ヨーロッパ系言語で million, billion のように「∼
リオン」という接尾語の数の名称を体系的かつ非常に大きな桁まで名付
けた最初の論文である。
1631 年
吉田光由の『塵劫記』寛永 8 年版で、無量大数までの数の体系ができた。 p.8
1904 年
ハーディー階層が定義された。
p.70
1920 年
グーゴルが名付けられた。
p.11
1928 年
アッカーマン関数が発表された。
p.33
1933 年
第 1 スキューズ数が論文で使われた。
p.17
1944 年
グッドスタイン数列が定義され、グッドスタインの定理が証明された。
p.84
1947 年
グッドスタインがテトレーション、ペンテーション、ヘキセーションを
p.23
名付けた。
1955 年
1962 年
第 2 スキューズ数が論文で使われた。
p.17
ビジービーバー関数が定義された。
p.109
1971 年
グラハムが、今では小グラハム数と呼ばれる数字を数学の論文で使った。 p.38
1976 年
クヌースが矢印表記を考案した。
p.57
1977 年
ガードナーがサイエンティフィック・アメリカンで、現在グラハム数とし
p.38
て知られる数を紹介した。
1980 年
グラハム数がギネス世界記録で数学の証明で使われた最大の数として掲
p.38
載された。
1982 年
ヒドラゲームが公表された。
p.85
1983 年
スタインハウスの多角形表記が発表された(初出はもっと前の可能性あ
p.36
り)。
1987 年
1994 年 11 月 25 日
ブーフホルツのヒドラが考案された。
リンデの確率過程的インフレーション宇宙のポアンカレ時間が 1010
p.108
101.1
1010
p.18
年であると計算された。
1995 年
コンウェイが The book of numbers でチェーン表記を発表し、3 → 3 →
1996 年
ロバート・ムナフォが巨大数のホームページを作成した。
p.38
3 → 3 がグラハム数よりも大きいことを示した。
p.7
115
日付
出来事
ページ
2001 年 12 月
Bignum Bakeoff コンテストで loader.c が開発された。
p.108
2002 年
配列表記と拡張配列表記が考案された。
p.57
2002 年 6 月 29 日
ふぃっしゅ数バージョン 1 が考案された。2002 年にバージョン 4 まで考
p.46
案された。
2003 年 3 月 10 日
2003 年 3 月 13 日
ベクレミシェフの虫が考案された。
巨大数研究室が開設された。
p.87
p.6
2003 年 4 月 5 日
ふぃっしゅ数バージョン 5 が定義された。
p.81
2006 年
バードの配列表記が考案された。4 変数の配列表記はチェーン表記と同程
p.61
度で、5 変数になるとチェーン表記を超えることを証明した。
2007 年
バウアーズが配列表記を発展させて BEAF を開発した。
p.94
2007 年 1 月 26 日
Big Number Duel でラヨ数が定義された。
p.112
2007 年 9 月 24 日
本書『巨大数論』の執筆が開始され「まだ書きかけ」版が公開された。
2007 年 10 月 17 日
多変数アッカーマン関数が考案された。
p.42
2007 年 10 月 27 日
ふぃっしゅ数バージョン 6 が考案された。
p.100
2007 年 11 月 3 日
巨大数勉強会(文京区シビックセンター)で、ハーディー関数とヒドラ
p.87
ゲーム、ふぃっしゅ数バージョン 5 の関係が解説された。
2008 年 3 月
ミーミーミーロッカプーワ・ウンパが定義された。
p.108
2008 年 12 月 5 日
Googology Wiki が設立された。
p.6
2008 年 12 月 9 日
Sbiis Saibian が巨大数論の Web 書籍 One to Infinity を公開した。
p.18
2012 年 3 月 16 日
Dmytro Taranovsky が second order arithmetic のレベルまでの順序数
p.106
の記法を定義した。
2012 年 11 月 25 日
Aeton がニコニコ動画の巨大数動画シリーズの制作を始めた。
p.6
2013 年 1 月 6 日
Adam P. Goucher がクサイ関数を定義した。
p.111
2013 年 1 月 21 日
巨大数資料 Wiki が開設された。
p.6
2013 年 6 月 5 日
Wythagoras がドル関数の最初のバージョンを定義した。
p.79
2013 年 9 月 11 日
裏サンデーの U-2 リーグで小林銅蟲による巨大数漫画『寿司 虚空編』の
p.6
連載が開始された。2014 年末の U-2 リーグの終了にともない、2014 年 8
月 21 日に公開された第 6 話で連載が一旦終了となった。
2013 年 10 月 19 日
本書『巨大数論』の初版が公開され、ふぃっしゅ数バージョン 7 が考案さ
p.113
れた。
2013 年 11 月 10 日
Hyp cos が R 関数シリーズを定義した。
p.108
2013 年 12 月 05 日
Googology Wiki の日本語版巨大数研究 Wiki が開設された。英語版は
p.6
ちょうど開設 5 周年。
2014 年 8 月 14 日
バシク行列システムの元となる原始数列システムとペア数列数プログラ
p.108
ムの最初のバージョンが発表された。
2014 年 10 月 30 日
ビッグフットが定義された。
2015 年 4 月 13 日
『寿司 虚空編』の連載が pixiv コミックで第 7 話から再開し、復活した。 p.6
p.113
付 録B
索引
A
Moser, Leo . . . . . . . . . . . . . . . 36
い
Archimedes . . . . . . . . . . . . . . 14
Munafo, Robert . . . . . . . 7, 57
遺伝的記法 . . . . . . . . . . . . . . . 28
B
P
う
BEAF . . . . . . . . . . . 57, 94, 108
Peano, Giuseppe . . . . . . . . . 69
ヴェブレン関数 . . . . . . . . . 103
テトレーション配列 . 96
配列表記 . . . . . . . . . . . . 57
宇宙論 . . . . . . . . . . . . . . . . . . . 18
R
Bird, Chris . . . . . . . . . . . 56, 57
Rado, Tibor . . . . . . . . . . . . 109
え
Bowers, Jonathan . . . . 19, 57
Rayo, Agustin . . . . . . . . . . 112
永遠の努力 . . . . . . . . . . . . . . . 19
Roche, Estienne de La . . . 11
エクサ . . . . . . . . . . . . . . . . . . . 10
C
Rothschild, Bruce Lee . . . . 37
エディントン数 . . . . 5, 10, 13
Cantor, Georg . . . . . . . . . . . 64
R 関数 . . . . . . . . . . . . . . . . . . 108
エドワード・カスナー . . . . 11
エプシロン・ノート . . . . . . 69
Chuquet, Nicolas . . . . . . . . . 10
Conway, John Horton . . . . 38
S
Saibian, Sbiis . . . . . . . . . . . . 17
か
E
SKI 表現 . . . . . . . . . . . . . . . . 111
拡張チェーン表記 . . . . . . . . 44
Elga, Adam . . . . . . . . . . . . . 112
Spencer, John . . . . . . . . . . . . 57
下数 . . . . . . . . . . . . . . . . . . . . . . 8
SS 変換 . . . . . . . . . . . . . . . 48, 54
ガンジス川の砂 . . . . . . . . . . . 9
Steinhaus, Hugo . . . . . . . . . 36
カントールの標準形 . . 69, 78
G
Gardner, Martin . . . . . . . . . 38
Goodstein, Rauben . . . . . . 23
S 変換 . . . . . . . . . . . . . . . . 48, 54
き
Googology Wiki . . . . . . . . . . . 6
V
基数 . . . . . . . . . . . . . . . . . . . . . 67
Graham, Ronald . . . . . . . . . 37
Veblen, Oswald . . . . . . . . . 103
基本列 . . . . . . . . . . . . . . . . . . . 67
H
von Neumann, John . . . . . . 67
正規な基本列 . . . . . . . . 70
ギャゴル . . . . . . . . . . . . . . . . . 24
Hardy, G. H. . . . . . . . . . . . . . 70
W
急増加関数 . . . . . . . . . . . . . . . 73
Hypercalc . . . . . . . . . . . . . . . . 17
Wythagoras . . . . . . . . . . . . . . 79
極限順序数 . . . . . . . . . . . . . . . 67
K
あ
Kasner, Edward . . . . . . . . . . 11
阿僧祇 . . . . . . . . . . . . . . . . . . . . 9
Knuth, Donald . . . . . . . . . . . 20
アッカーマン関数 . . . . . . . . 33
L
loader.c . . . . . . . . . . . . . . . . . 108
多重リスト . . . . . . . . . . 92
多変数への拡張 . . . . . . 42
巨大基数 . . . . . . . . . . . . . . . . 106
巨大数研究 Wiki . . . . . . . . . . . 6
巨大数探索スレッド . . . 6, 46
巨大数論 . . . . . . . . . . . . . . . . . . 6
く
アッカーマン順序数 . . . . . 105
グーゴル . . . . . . . . . . . . . . . . . 11
M
アボガドロ数 . . . . . . . . . . . . . . 5
グーゴルプレックス . . 11, 16
Marre, Aristide . . . . . . . . . . 11
アルキメデス . . . . . . . . . . 5, 14
クサイ関数 . . . . . . . . . . . . . . 111
Milton Sirotta . . . . . . . . . . . 11
アレフ 0 . . . . . . . . . . . . . . . . . 67
グッドスタイン . . . . . . . . . . 23
116
索引
117
ラドのシグマ関数 . → ビジー
グッドスタイン数列 . . 28, 84
順序集合 . . . . . . . . . . . . . . . . . 65
プログラム . . . . . . . . . . 97
順序数 . . . . . . . . . . . . . . . . . . . 64
グッドスタインの定理 . . . . 84
順序同型 . . . . . . . . . . . . . . . . . 66
多変数アッカーマン関数 . . 42
クヌースの矢印表記 . → 矢印
小ヴェブレン順序数 . . . . . 105
急増加関数による近似 75
上数 . . . . . . . . . . . . . . . . . . . 8, 15
タラノフスキーの順序数記法 .
表記
クラス . . . . . . . . . . . . . . . . . 7, 14
ショートスケール . . . . . . . . 11
グラハム数 . . . . . . . . . . . 37, 59
ジョナサン・バウアーズ . 19,
急増加関数による近似 74
ビーバー関数
106
タワー表記 . . . . . . . . . . . . . . . 23
57
小グラハム数 . . . . . . . . 38
ジョン・フォン・ノイマン 67
ち
グラハムの定理 . . . . . . . . . . 37
塵劫記 . . . . . . . . . . . . . . . . . . . . 8
チェーン表記 . . . . . . . . . . . . . 38
神託機械 . . . . . . . . . . . . . . . . 110
拡張版 . . . . . . . . . . . . . . . 44
け
ゲオルグ・カントール . . . . 64
神託記号 . . . . . . . . . . . . . . . . 112
急増加関数による近似 74
チャーチ・クリーネ順序数 . . .
華厳経 . . . . . . . . . . . . . . . . . . . 15
す
芥子劫 . . . . . . . . . . . . . . . . . . . . 9
スキューズ数 . . . . . . . . . . . . . 17
中数 . . . . . . . . . . . . . . . . . . . . . . 8
原始帰納関数 . . . . . . . . . . . . . 31
寿司 虚空編 . . . . . . . . . . . . . . . 6
チューリングマシン . . . . . 109
原始帰納作用素 . . . . . . . . . . 31
スタインハウスの多角形表記 .
超限順序数 . . . . . . . . . . . . . . . 66
原始再帰関数 . . . → 原始帰納
→ 多角形表記
スタインハウス・モーザー表記
関数
原始数列 . . . . . . . . . . . . . . . . . 87
→ 多角形表記
原始数列システム . . . . . . . . 87
砂粒を数えるもの . . . . . . . . 14
原始数列数 . . . . . . . . . . . . . . . 87
スビス・サイビアン . . . . . . 17
105
超限数 . . . . . . . . . . . . . . . . . . . 66
超対数 . . . . . . . . . . . . . . . . . . . 26
超々対数 . . . . . . . . . . . . . . . . . 27
超冪 . . . . . . . . . . . . . . . . . . . . . 23
て
原始数列の改良版 . . . . . . . . 90
せ
停止性問題 . . . . . . . . . . . . . . 109
こ
整礎 . . . . . . . . . . . . . . . . . . . . . 65
テトレーション . . . . . . . . . . 23
劫 ......................... 9
整列順序関係 . . . . . . . . . . . . . 65
逆関数 . . . . . . . . . . . . . . . 26
恒河沙 . . . . . . . . . . . . . . . . . . . . 9
ゼッタ . . . . . . . . . . . . . . . . . . . 10
連続関数化 . . . . . . . . . . 26
恒河沙劫 . . . . . . . . . . . . . . . . . 10
全順序集合 . . . . . . . . . . . . . . . 65
テトレーション空間 . . . . . . 96
合成作用素 . . . . . . . . . . . . . . . 31
選択公理 . . . . . . . . . . . . . . . . . 65
テトレーション配列 . . . . . . 96
後続順序数 . . . . . . . . . . . . . . . 67
センティリオン . . . . . . . . . . 11
デュラトリ . . . . . . . . . . . . . . . 96
ゴッパトス . . . . . . . . . . . . . . . 97
小林銅蟲 . . . . . . . . . . . . . . . . . . 6
コンウェイのチェーン表記 →
チェーン表記
ゴンギュラス . . . . . . . . . . . . . 96
そ
と
操作の対角化 . . . . . . . . . . . . . 35
ローダー数 . . . . . . . . . . . . . . 108
素数 . . . . . . . . . . . . . . . . . . . . . 12
ドナルド・クヌース . . . . . . 20
素数計数関数 . . . . . . . . . . . . . 17
トリトリ . . . . . . . . . . . . . . . . . 24
た
さ
サブキュービックグラフ数 . . .
108
し
次元セパレータ . . . . . . . . . . 94
大ヴェブレン順序数 . . . . . 105
ドル関数 . . . . . . . . . . . . . . . . . 79
各括弧表記 . . . . . . . . . . 79
多角形表記 . . . . . . . . . . . . . . . 36
な
多重帰納関数 . . . . . . . . . . . . . 42
那由他 . . . . . . . . . . . . . . . . . . . . 9
多重リストアッカーマン関数 .
92
に
順序型 . . . . . . . . . . . . . . . . . . . 66
2 重リスト . . . . . . . . . . . 92
ニコラ・シュケ . . . . . . . . . . 10
順序関係 . . . . . . . . . . . . . . . . . 65
3 重リスト . . . . . . . . . . . 93
2 重帰納関数 . . . . . . . . . . . . . 35
索引
118
の
バージョン 4 . . . . . . . 110
ミリリオン . → ミリニリオン
濃度 . . . . . . . . . . . . . . . . . . . . . 67
バージョン 5 . . . . . . . . 81
ミルトン・シロッタ . . . . . . 11
は
ハーディー階層 . . . . . . . . . . 70
バード数 . . . . . . . . . . . . . . . . . 56
バードの線形表記 . . . . . . . . 57
バードの多次元配列表記 . . 94
バードの超次元配列表記 . . 94
バードのネスト配列表記 . . 94
バードの矢印回転表記 . → 矢
バージョン 6 . . . . . . . 100
バージョン 7 . . . . . . . 113
ブーフホルツのヒドラ . . . 108
む
無限降下列 . . . . . . . . . . . . . . . 65
フェファーマン・シュッテの順
無限順序数 . . . . . . . . . . . . . . . 66
序数 . . . . . . . . . . . 105
無量大数 . . . . . . . . . . . . . . . . . . 8
不可算順序数 . . . . . . . . . . . 106
不可思議 . . . . . . . . . . . . . . . . . . 9
不可説不可説転 . . . . . . . . 5, 16
め
メガ . . . . . . . . . . . . . . . . . . . . . 36
も
印回転表記
へ
ハイパー演算子 . . . . . . . . . . 23
ペア数列システム . . . . . . . 108
ハイパー E 表記 . . . . . . . . . . 17
ペアノ算術 . . . . . . . . . . . 69, 85
ハイパーカルク . . . . . . . . . . 17
ペアノの公理 . . . . . . . . . . . . . 69
ハイパークラス . . . . . . . . . . 23
ヘキセーション . . . . . . . . . . 24
や
配列次元演算子 . . . . . . . . . . 96
ベクレミシェフの虫 . . . . . . 87
矢印回転表記 . . . . . . . . . . . . . 56
配列表記 . . . . . . . . . . . . . . . . . 57
ペタ . . . . . . . . . . . . . . . . . . . . . 10
矢印表記 . . . . . . . . . . . . . . . . . 20
バシク . . . . . . . . . . . . . . . . . . . 87
ヘラクレス . . . . . . . . . . . . . . . 85
バシク行列システム . . . . . 108
ペンテーション . . . . . . . . . . 24
バッハマン・ホワード順序数 .
逆関数 . . . . . . . . . . . . . . . 27
105
連続関数化 . . . . . . . . . . 26
パワータワー . . . . . . . . . . . . . 22
ペンテーション配列 . . . . . . 97
磐石劫 . . . . . . . . . . . . . . . . . . . . 9
ベントレー数 . . . . . . . . . . . . . 20
半順序集合 . . . . . . . . . . . . . . . 65
ほ
ひ
ポアンカレ再帰時間 . . . . . . 18
ビギンティリオン . . . . . . . . 12
ビジービーバー関数 . . . . . 109
ま
ビッグフット . . . . . . . . . . . 113
マーティン・ガードナー . . 38
ヒドラゲーム . . . . . . . . . . . . . 85
万進 . . . . . . . . . . . . . . . . . . . . . . 8
万万進 . . . . . . . . . . . . . . . . . . . . 8
ふ
ふぃっしゅ数 . . . . . . . . . . . . . 46
バージョン 1 . . . . . . . . 48
み
モーザー数 . . . . . . . . . . . . . . . 36
モーザーの多角形表記 . → 多
角形表記
ゆ
有限順序数 . . . . . . . . . . . . . . . 66
よ
ヨッタ . . . . . . . . . . . . . . . . . . . 10
ら
ラヨ関数 . . . . . . . . . . . . . . . . 112
ラヨ数 . . . . . . . . . . . . . . . . . . 112
り
∼リオン . . . . . . . . . . . . . . . . . 10
ろ
ロバート・ムナフォ . . . . . . . 7
ロングスケール . . . . . . . . . . 11
ミーミーミーロッカプーワ・ウ
バージョン 2 . . . . . . . . 54
ンパ . . . . . . . . . . . 108
バージョン 3 . . . . . . . . 61
ミリニリオン . . . . . . . . . . . . . 12
わ
ワイナー階層 . . . . . . . . . . . . . 70