クヌースの矢印表記

クヌースの矢印表記（クヌースのやじるしひょうき、英: Knuth's up-arrow notation）とは、1976年にドナルド・クヌースが巨大数を表現するために発明した表記法である。これは、乗算が加算の反復であり、冪乗が乗算の反復であるのと同様の考え方に基づくもので、冪乗の反復（テトレーション）を表す演算の表記法である。例えば宇宙論で使われた最大の数は、クヌースの矢印表記で表すとおよそ 10 ↑↑ 5 {\displaystyle 10\uparrow \uparrow 5} である。このように、クヌースの矢印表記は現実世界の事物で例えるにはあまりにも大きすぎるような巨大数を簡単に表現できる表記法の一つである。 クヌースの矢印表記を指す用語として、日本ではタワー表記という呼称も用いられる。一方英語では、テトレーションを指数で表記した時の、まるで塔のように高く積みあがる様子を指した「Power tower」という語はあるが、タワー表記に相当する用語は見受けられない。 クヌースの矢印表記のさらに拡張となる表記法には、コンウェイのチェーン表記などがある。 乗算は、加算の反復によって定義できる。 a × b = a + a + ⋯ + a ⏟ b  copies of  a {\displaystyle a\times b=\underbrace {a+a+\dots +a} _{b{\text{ copies of }}a}} 冪乗は、乗算の反復によって定義できる。 a b = a × a × ⋯ × a ⏟ b  copies of  a {\displaystyle a^{b}=\underbrace {a\times a\times \dots \times a} _{b{\text{ copies of }}a}} なお、一部の初期のコンピュータでは、上向き矢印を冪乗演算子に使ったので、それを使うと a ↑ b = a × a × ⋯ × a ⏟ b   c o p i e s   o f   a = a b {\displaystyle a\uparrow b=\underbrace {a\times a\times \dots \times a} _{b\mathrm {\ copies\ of\ } a}=a^{b}} 。 例として、グーゴルプレックス 10 10 100 {\displaystyle 10^{10^{100}}} は、10↑10↑100 と書ける。 ここでクヌースは、二重矢印をテトレーション（指数計算の反復）を表す演算子として定義した。 a ↑↑ b = a ↑ a ↑ ⋯ ↑ a ⏟ b  copies of  a = a a . . . a ⏟ b  copies of  a {\displaystyle a\uparrow \uparrow b=\underbrace {a\uparrow a\uparrow \cdots \uparrow a} _{b{\text{ copies of }}a}=\underbrace {a^{a^{{}^{.\,^{.\,^{.\,^{a}}}}}}} _{b{\text{ copies of }}a}} これを用いると、 2 ↑↑ 2 = 2 2 = 4 2 ↑↑ 3 = 2 2 2 = 2 4 = 16 2 ↑↑ 4 = 2 2 2 2 = 2 2 4 = 2 16 = 65536 2 ↑↑ 5 = 2 2 2 2 2 = 2 2 16 = 2 65536 ≈ 2.003 × 10 19728 {\displaystyle {\begin{aligned}2\uparrow \uparrow 2&=2^{2}=4\,\\2\uparrow \uparrow 3&=2^{2^{2}}=2^{4}=16\,\\2\uparrow \uparrow 4&=2^{2^{2^{2}}}=2^{2^{4}}=2^{16}=65536\,\\2\uparrow \uparrow 5&=2^{2^{2^{2^{2}}}}=2^{2^{16}}=2^{65536}\approx 2.003\times 10^{19728}\end{aligned}}} 3 ↑↑ 2 = 3 3 = 27 {\displaystyle 3\uparrow \uparrow 2=3^{3}=27} 3 ↑↑ 3 = 3 3 3 = 3 27 = 7625597484987 {\displaystyle 3\uparrow \uparrow 3=3^{3^{3}}=3^{27}=7625597484987} 3 ↑↑ 4 = 3 3 3 3 = 3 3 27 = 3 7625597484987 ≈ 1.258 × 10 3638334640024 {\displaystyle 3\uparrow \uparrow 4=3^{3^{3^{3}}}=3^{3^{27}}=3^{7625597484987}\approx 1.258\times 10^{3638334640024}} 10 ↑↑ 3 = 10 10 10 = 10 10000000000 {\displaystyle 10\uparrow \uparrow 3=10^{10^{10}}=10^{10000000000}} (10の100億乗) 10 ↑↑ 4 = 10 10 10 10 = 10 10 10000000000 {\displaystyle 10\uparrow \uparrow 4=10^{10^{10^{10}}}=10^{10^{10000000000}}} などと書ける。 さらにクヌースは、三重以上の矢印演算子を定義した。三重矢印は二重矢印による演算を反復する演算子であり、ペンテーションを表す。 a ↑↑↑ b = a ↑↑ a ↑↑ ⋯ ↑↑ a ⏟ b  copies of  a {\displaystyle a\uparrow \uparrow \uparrow b=\underbrace {a\uparrow \uparrow a\uparrow \uparrow \cdots \uparrow \uparrow a} _{b{\text{ copies of }}a}} 同様に、四重矢印演算子も定義できる。これはヘキセーションを表す。 a ↑↑↑↑ b = a ↑↑↑ a ↑↑↑ ⋯ ↑↑↑ a ⏟ b   c o p i e s   o f   a {\displaystyle a\uparrow \uparrow \uparrow \uparrow b=\underbrace {a\uparrow \uparrow \uparrow a\uparrow \uparrow \uparrow \dots \uparrow \uparrow \uparrow a} _{b\mathrm {\ copies\ of\ } a}} これを一般的に述べると、n 重の矢印演算子は、(n -1) 重の矢印演算子の反復として表すことができる。 a ↑↑ ⋯ ⋯ ⋯ ↑ ⏟ n  pieces of the arrow b = a ↑↑ ⋯ ⋯ ⋯ ⋯ ↑ ⏟ ( n − 1 )  pieces of the arrow a ↑↑ ⋯ ⋯ ⋯ ⋯ ↑ ⏟ ( n − 1 )  pieces of the arrow ⋯ a ↑↑ ⋯ ⋯ ⋯ ⋯ ↑ ⏟ ( n − 1 )  pieces of the arrow a ⏟ b  copies of  a {\displaystyle a\underbrace {\uparrow \uparrow \cdots \cdots \cdots \uparrow } _{n{\text{ pieces of the arrow}}}b=\underbrace {a\underbrace {\uparrow \uparrow \cdots \cdots \cdots \cdots \uparrow } _{(n-1){\text{ pieces of the arrow}}}a\underbrace {\uparrow \uparrow \cdots \cdots \cdots \cdots \uparrow } _{(n-1){\text{ pieces of the arrow}}}\cdots a\underbrace {\uparrow \uparrow \cdots \cdots \cdots \cdots \uparrow } _{(n-1){\text{ pieces of the arrow}}}a} _{b{\text{ copies of }}a}} 具体例を挙げると、14↑↑↑↑4 は 14↑↑↑14↑↑↑14↑↑↑14 である。 なお、矢印を使った指数の記法 a ↑ b = a b {\displaystyle a\uparrow b=a^{b}} も、クヌースの矢印記号の特殊例（一重矢印）として再解釈される。 n 重の矢印演算子を ↑ n {\displaystyle \uparrow ^{n}} と略記することにする。このとき、クヌースの矢印表記は、次のように定義される。 a ↑ n b = { 1 , if  b = 0 a b , if  n = 1 a ↑ n − 1 ( a ↑ n ( b − 1 ) ) , otherwise  ∀ a , b ∈ Z , ∀ n ∈ N {\displaystyle a\uparrow ^{n}b={\begin{cases}1,&{\mbox{if }}b=0\\a^{b},&{\mbox{if }}n=1\\a\uparrow ^{n-1}\left(a\uparrow ^{n}\left(b-1\right)\right),&{\text{otherwise }}\forall a,b\in \mathbb {Z} ,\forall n\in \mathbb {N} \end{cases}}} ただし、b ≥ 0である。なおa0 = 1なので、最初の2式の優先順位はどちらでもよい。 クヌースの矢印（通常の指数計算である a↑b も含む）は右結合である。つまり、 a ↑ b ↑ c {\displaystyle a\uparrow b\uparrow c} と書かれたときこれは a ↑ ( b ↑ c ) {\displaystyle a\uparrow \left(b\uparrow c\right)} を表し、 ( a ↑ b ) ↑ c {\displaystyle \left(a\uparrow b\right)\uparrow c} ではない。 具体例を挙げると、 3 ↑ 2 ↑ 3 {\displaystyle 3\uparrow 2\uparrow 3} は 3 ↑ ( 2 ↑ 3 ) = 3 ↑ 8 = 3 8 = 6561 {\displaystyle 3\uparrow \left(2\uparrow 3\right)=3\uparrow 8=3^{8}=6561} だが、 ( 3 ↑ 2 ) ↑ 3 = 9 ↑ 3 = 9 3 = 3 ↑ ( 2 × 3 ) = 3 ↑ 6 = 3 6 = 729 {\displaystyle {\begin{aligned}\left(3\uparrow 2\right)\uparrow 3=&9\uparrow 3=9^{3}\\=&3\uparrow \left(2\times 3\right)=3\uparrow 6=3^{6}\\=&729\end{aligned}}} ではない。 既に述べた通り、1重のクヌースの矢印は冪乗を表す。また、2重のクヌースの矢印はテトレーションを表す。 a ↑ b = a b {\displaystyle a\uparrow b=a^{b}} a ↑↑ b = b a {\displaystyle a\uparrow \uparrow b={}^{b}a} また、 ↑ n {\displaystyle \uparrow ^{n}} を用いてアッカーマン関数の一般解を表すことができる。 Ack ⁡ ( n , b ) = { 2 ↑ n − 2 ( b + 3 ) } − 3 if  n ≥ 3 {\displaystyle \operatorname {Ack} \left(n,b\right)=\left\{2\uparrow ^{n-2}\left(b+3\right)\right\}-3\quad {\mbox{if }}n\geq 3} ハイパー演算子は、積・和・後者関数も表せる以外は、 ↑ n {\displaystyle \uparrow ^{n}} を使ったクヌースの記法と等価である。 hyper ⁡ ( a , n , b ) = a ↑ n − 2 b if  n ≥ 3 {\displaystyle \operatorname {hyper} \left(a,n,b\right)=a\uparrow ^{n-2}b\quad {\mbox{if }}n\geq 3} コンウェイのチェーン表記は、3連では ↑ n {\displaystyle \uparrow ^{n}} を使ったクヌースの矢印表記と等価だが、さらに長く続けることで、クヌースの矢印表記では簡潔に表せない、あるいは現実的に表せない大きな数、たとえばグラハム数の範囲などを表すことができる。 a → b → n = a ↑ n b {\displaystyle a\to b\to n=a\uparrow ^{n}b} 配列表記も3変数ではクヌースの矢印表記と等価だが、この配列表記をさらに長く続けた場合は、コンウェイのチェーン表記よりもはるかに効率的に数が爆発する。具体的には、4変数の配列表記でコンウェイのチェーン表記レベル、5変数でその拡張表記レベルとなり、6変数以上となるとそのレベルを超える。 { a , b , n } = a ↑ n b {\displaystyle \{a,b,n\}=a\uparrow ^{n}b} また、多角形表記も巨大数のレベルとしてはクヌースの矢印表記レベルの巨大数を作ることができ、ハイパーE表記も拡張表記でない段階ではクヌースの矢印表記と同程度の増加速度である。 コンピュータ上でのテキストとして表記する場合、フォントによっては↑のような記号が無い場合もあるため、a^^bのようにサーカムフレックスを並べる表記を行う場合がある。クヌース自身も、これを代替的あるいは簡便な記法として認めている。 指数表記 ab のかわりに a^b と書くのも、これと同じである。