ハイパー演算子は一般的な二項演算子である加算、乗算、冪乗を拡張したものである。
乗算は加算を繰り返し、冪乗は乗算を繰り返し、その更に先へと自然に拡張する — 例えば、冪乗の繰り返しはテトレーションと呼ばれる。
自然数に使われた場合、各ハイパー演算子は1つ前のものより非常に速く増加する。生成された数がとても大きくなるので、ハイパー演算子は巨大数的であると見なされる。
基本[]
"\(a \times b\)"の時、「aをそれ自身にb回加算する」
\[a \times b = \underbrace{a + a + \cdots + a + a}_b\]
例えば、\(4 \times 3 = 4 + 4 + 4\)。
"\(a^b\)"の時、「aをそれ自身にb回乗算する」
\[a^b = \underbrace{a \times a \times \cdots \times a \times a}_b\]
例えば、\(4^3 = 4 \times 4 \times 4\)。これは一般的な数学的表記の限界である。
しかし、ここから更にもう1段階繰り返すことができる。新しい関数を定義でき、"\(^ab\)"(「aによる冪乗の塔をb項の高さ」で書き表す)は「aのテトレートb」を意味する。
\[^ba = \underbrace{a^{a^{a^{.^{.^.}}}}}_b\]
b個のaがある時、上から順に計算する(より大きな数を生成する)。これは「テトレーション」と呼ばれる。この関数は数学における殆どの領域で使われていないため、これを表記する一般的な方法は存在しない。
次の自然な段階はペンテーションであり、これはテトレーションを繰り返す、ヘキセーションはペンテーションを繰り返す、ヘプテーションはヘキセーションを繰り返す、などと続く。セクセーション、セプテーションなどが同様に使われているが、一般的ではないと考えられており、ギリシャ語ではなくラテン語の接頭語になっている。
記法[]
テトレーションに共通する表記は \(^ba\) である(aにbを掛ける)。 これは Rudy Rucker が広めた記法であるが、主としてテトレーションのみでより大きなハイパー演算子が使われていない場合に限定される。
様々なハイパー演算子の中で最も有名な表記はドナルド・クヌースの矢印表記である。
\[a + b,\, a \cdot b,\, a \uparrow b,\, a \uparrow\uparrow b,\, a \uparrow\uparrow\uparrow b,\, \ldots\]
これはチェーン表記の基礎を形づくり、後の爆発配列関数やそれに関連するものとなった。
グラハム数の定義に登場するため、最も良く知られているだろう。
ASCII設定では、矢印をしばしばキャレット記号 ^
で置き換える。
Mark CutlerはRuckerの表記の拡張を以下で示した。
\[a + b,\, a \cdot b,\, a^b,\, {}^ab,\, \overline{a}^b,\, {}^b\overline{a},\, \overline{\overline{a}}^b,\, {}^b\overline{\overline{a}},\, \ldots\]
Sbiis Saibianは反時計周り表記でCutlerの上線表記を改良した。
\[a + b,\, a \cdot b,\, a^b,\, {}^ab,\, {}_{a\leftarrow}b,\, b_{\rightarrow a},\, {}_{a\Leftarrow}b,\, b_{\Rightarrow a},\, \ldots\]
Robert Munafoは上付き丸数字を使った。
\[a^① b,\, a^② b,\, a^③b,\, a^④b,\, \ldots\]
そしてJonathan Bowersは山括弧を使った。
\[a + b,\, a \cdot b,\, a\ \langle 1\rangle\ b,\, a\ \langle 2\rangle\ b,\, a\ \langle 3\rangle\ b,\, \ldots\]
この表記は、最終的に爆発配列関数となるそれ自身の拡張性(例えば \(a\ \langle\langle 1\rangle\rangle\ b\))のため、特別な重要性を持つ。
他の表記では+記号を重複させる。
\[a + b,\, a ++ b,\, a +++ b,\, \ldots\]
The Big Psi Projectでは重複したアスタリスクを使い、これは共通の乗算記号を表す。
\[a + b,\, a*b,\, a**b,\, a***b,\, \ldots\]
2重アスタリスク記号 \(**\) は時に冪乗で用いられる。これはコンピュータ言語でよく見られ、^
が通常はビット単位のXOR演算子を意味するためである。
紛らわしいが、Sunir Shahはペンテーションから星印の始まる実質的に全く同じ表記を代わりに提案した。
\[a + b,\, a \cdot b,\, a^b,\, {}^ba,\, a*b,\, a**b,\, a***b,\, \ldots\]
疑似コード[]
// Upper hyper operators function hyper(a, b, n): if n = 1: return a + b result := a repeat b - 1 times: result := hyper(a, result, n - 1) return result // Lower hyper operators function hyper_lower(a, b, n): if n = 1: return a + b result := a repeat b - 1 times: result := hyper_lower(result, a, n - 1) return result