コンテンツにスキップ

英文维基 | 中文维基 | 日文维基 | 草榴社区

利用者:Flightbridge/sandbox/クヌースの矢印表記

クヌースの矢印表記(クヌースのやじるしひょうき、: Knuth's up-arrow notation)とは、1976年にドナルド・クヌース巨大数を表記するために導入した表記法であり、アッカーマン関数およびハイパー演算子と密接な関係をもつ。この表記の考え方は、乗法加法の反復であって冪乗が乗法の反復であることに基づいたものであり、続けて得られる冪の反復(テトレーション)および残りのハイパー演算列は通常クヌースの矢印表記を用いて記述される。

導入

[編集]

通常の算術演算(加法乗法)は、以下のようにしてハイパー演算の列へと自然に拡張することができる。

自然数による乗法は、加法の反復によって定義できる。

自然数 b を指数とするは、乗法の反復によって定義できる。これはクヌースの矢印表記では一本の上向き矢印で表記される。

例として、グーゴルプレックス 1010100 は矢印演算子を用いて 10 ↑ 10 ↑ 100 と表記できる。

以上の一連の演算を冪より先へ拡張するべく、クヌースは「二重矢印」演算子を冪の反復(テトレーション)の表記として定義した。

これらの値の評価は右から左へと行われるため、クヌースの矢印演算子は(冪と同様に)右結合なものとして定義される。

この定義による計算例は次のようになる。

etc.

この時点で導かれる数は既にかなり巨大なものとなっている。だがクヌースはこれに飽き足らず、さらに「三重矢印」演算子をテトレーションの反復(ペンテーション)の表記として定義した。

続けて、「四重矢印」演算子をペンテーションの反復(ヘキセーション)の表記として定義した。

以下同様に続く。

一般に、n 重矢印演算子は n−1 重矢印演算子の反復(ただし右結合)へと展開できる。

具体例を挙げると、14 ↑↑↑↑ 4 = 14 ↑↑↑ 14 ↑↑↑ 14 ↑↑↑ 14 である。

n 重矢印演算 a ↑↑…↑ b の表記には、an b という表記がよく用いられる。この n 重矢印演算 an b はハイパー演算 a [n+2] b に等しい。ここで注意点として、39 ↑↑ 14 はあくまで 39 [4] 14 に等しく 39 [2] 14 (= 39 × 14 = 546) ではない。同様に、77 ↑77 7777 [79] 77 に等しく 77 [77] 77 ではない。

表記

[編集]

一般化

[編集]

表す数の大きさによっては矢印を何個も書くのが大変になることがある。その場合は n 重矢印演算子 n (この表記は矢印の数を変数にすることができる)、またはハイパー演算子を用いると便利である。

また、場合によってはこれらの表記ですら大変になることがある。その場合はコンウェイのチェーン表記を用いると便利である。長さが3のチェーンは先の表記と同値だが、さらにチェーンを伸ばすことでより強力になる。

定義

[編集]

クヌースの矢印表記は、形式的には次のように定義される。

ただし a および b ≥ 0, n ≥ 0 は任意の整数である。

この定義では乗法が基本演算 (a0 b = ab) となっており、ここから乗法の反復として冪乗 (a1 b = ab = ab) が得られ、冪乗の反復としてテトレーション (a2 b = a ↑↑ b) が得られるというように続く。これは後続数関数英語版加法が無いことを除けば、ハイパー演算列と同値である。この定義に後続数関数と加法を含める場合、新たに初期値を追加する必要があるためやや複雑になる。

全ての矢印演算子(通常の冪乗 ab を含む)は右結合である。そのため、b ≥ 1, n ≥ 1 について次のようになる。

ここで各 a はそれぞれ矢印演算子の左側に表れる(矢印演算子は非可換であるためこれは重要である)、また関数 f(x) = am xb反復合成(am)b と表した。すると (am)0 n = n が成り立つことから、これを用いて矢印表記の定義をより簡潔にすることができる。

ただし a および b ≥ 0, n ≥ 0 は任意の整数である。

値の表

[編集]

2 ↑m n の計算

[編集]

2 ↑m n の計算は無限表を用いて行うことができる。まず 2n を表の最初の行に並べ、次に最初の列を 2 で埋める。その他の (m, n) には、左隣の値を p として直前の行の p 列目の値を入れていく。

2 ↑m n の値の表
1 2 3 4 5 6 n
1 2 4 8 16 32 64 2n
2 2 4 16 65536 265 536 ≈ 2.0 × 1019 728 22 ↑2 (n−1)
3 2 4 65536 65 5362 2 ↑2 2 ↑3 (n−1)
m 2 4 2 ↑m−1 4 2 ↑m−1 2 ↑m 3 2 ↑m−1 2 ↑m 4 2 ↑m−1 2 ↑m 5 2 ↑m−1 2 ↑m (n−1)

この表は、m, n の値を適当にずらしたのち全ての値から 3 を引くとアッカーマン関数の値の表になる。

3 ↑m n の計算

[編集]

まず 3n を表の最初の行に並べ、次に最初の列を 3 で埋める。その他の部分には、左隣の値を p として直前の行の p 列目の値を入れていく。

3 ↑m n の値の表
1 2 3 4 5 n
1 3 9 27 81 243 3n
2 3 27 7 625 597 484 987 37 625 597 484 987 33 ↑2 (n−1)
3 3 7 625 597 484 987 7 625 597 484 9873 3 ↑2 3 ↑3 (n−1)
m 3 3 ↑m−1 3 3 ↑m−1 3 ↑m 2 3 ↑m−1 3 ↑m 3 3 ↑m−1 3 ↑m 4 3 ↑m−1 3 ↑m (n−1)

10 ↑m n の計算

[編集]

まず 10n を表の最初の行に並べ、次に最初の列を 10 で埋める。その他の部分には、左隣の値を p として直前の行の p 列目の値を入れていく。

10 ↑m n の値の表
1 2 3 4 n
1 10 100 1 000 10 000 10n
2 10 10 000 000 000 1010 000 000 000 1010 ↑2 (n−1)
3 10 1010 10 ↑2 10 ↑3 (n−1)
m 10 10 ↑m−1 10 10 ↑m−1 10 ↑m 2 10 ↑m−1 10 ↑m 3 10 ↑m−1 10 ↑m (n−1)

ここで、2 ≤ n ≤ 9 における 10 ↑m n の大小は m を最上位とする辞書式順序となっているため、これら8列については単純に左上から右下へと値が大きくなっていく。

ハイパー演算列に基づいた数の表記体系

[編集]

グッドスタイン英語版ハイパー演算子列を使用した非負整数の表記体系を作った。ただし彼がハイパー演算子に用いた表記はクヌースの矢印表記ではなく、ハイパー演算子 +, ×, ↑, ↑↑, … をそれぞれ角括弧を用いて [1], [2], [3], [4], … とする表記を用いた。

ここで整数 n に対し底を b とする k完全遺伝表現とは、最初の k 個のハイパー演算子と 0 から b−1 までの「数字」のみを用いて、以下のように表されるものである。

  • 0 ≤ nb−1 のとき、単純に n は対応する「数字」によって表現される。
  • n > b−1 のとき、n の表現は再帰的に求められる。まず、n の表現を次のようにおく。