ハイパーE表記 (Hyper-E Notation) は、E#とも省略され、 Sbiis Saibian が考案した巨大数を表記する方法である[1]。彼のウェブ書籍 "One to Infinity: A Finite Journey" で2011年の11月にはじめて紹介され、拡張ハイパーE表記(xE#)へとさらに一般化された。ハイパーE表記は Sbiis Saibian が子供の時に開発した Poly-cell 表記の改良版である。
E# と xE# は、さらに大きい表記法である拡張型Eシステムの一部で、連鎖E表記へと発展する。
元の定義
元々の(拡張されていない)ハイパーE表記は、1つ以上の正の整数の数列 an の引数をハイペリオン記号 # で区切ったものである。これを E(b)a1#a2#...#an と表記し. b を基数と呼ぶ。基数が省略されたときは10がデフォルトであり、よく省略される。
以下の3つの規則がある。
- Rule 1. ハイペリオンがないとき
- \(E(b)x = b^x\).
- Rule 2. 最後の数字が1の時
- \(E(b){a_1}\#{a_2}\#{a_3}\cdots\#{a_n}\#1 = E(b){a_1}\#{a_2}\#{a_3}\cdots\#{a_n}\).
- Rule 3. それ以外
- \(E(b){a_1}\#{a_2}\#{a_3}\cdots\#{a_{n-2}}\#{a_{n-1}}\#{a_n} =\)
- \(= E(b){a_1}\#{a_2}\#{a_3}\cdots\#{a_{n-2}}\#(E(b){a_1}\#{a_2}\#{a_3}\cdots\#{a_{n-2}}\#{a_{n-1}}\#{a_n-1})\)
言葉で説明すると:
- もし引数が xのみなら, その値は bxとなる。
- もし最後のエントリが1ならば, それは削除できる。.
- Otherwise...
- 最後のエントリから1を引いた数を保存する。 その値を zとする。
- 最後の2つのエントリを削除する。
- z をエントリの最後に追加する。
ハイパーE表記の例
- Ea = Ea#1 = 10a
- E100 = E100#1 = 10100 = グーゴル (a = 100 on above equation)
- Ea#b = EEE...Ea w/b E's = 1010...10a (b個の10)
- E(3)a#b = 33...3a (b個の3's)
- E(m)a#b = mm...ma b個のm's
- E100#100 = グランゴル
- Ea#b#c = Ea#(Ea#(Ea#(Ea#(...(Ea#b)...)) (c個のEa)
- E100#100#100 = グレーゴル
- Ea#b#c#d = Ea#b#(Ea#b#(Ea#b#(Ea#b#(...(Ea#b#c)...)) (d個のEa)
拡張された定義
拡張ハイパーE表記 | |
---|---|
基本関数 | ハイペリオン記号 |
急増加関数 | \(f_{\omega^{\omega}}(n)\) |
拡張ハイパーE表記 (Extended Hyper-E Notation) は、ハイパーE表記の拡張で、数字と数字の間に複数のハイペリオン記号を書くことができる。an の後に続くハイペリオンの数を h(n) と書く。つまり、 #n は n の連続するハイぺリオンを簡単に表したものである。 その正式な表記は E(b)a1#h(1)a2#h(2)...#h(n - 1)an#h(n) である。Bowersが#で列の残りを指示したように、Saibianは@を用いた。
オリジナルと拡張された表記の違いは、拡張ハイパーE表記は2個以上の連続した#が許されるという事である。
- Rule 1. もしハイぺリオンがなければ:
- \(E(b)x = b^x\)
- Rule 2. もし最後のエントリが1ならば:
- \(E(b) @ \#^{h(n-1)}{a_n}\#^{h(n)}1 = E(b) @ \#^{h(n-1)}{a_n}\).
- Rule 3. もし\(h(n-1)>1\)ならば:
- \(E(b) @ \#^{h(n-2)}{a_{n-1}}\#^{h(n-1)}{a_n} = E(b) @ \#^{h(n-2)}{a_{n-1}}\#^{h(n-1)-1}{a_{n-1}}\#^{h(n-1)}{a_n-1}\)
- Rule 4. それ以外ならば:
- \(E(b) @ \#^{h(n-2)}{a_{n-1}}\#{a_n} = E(b) @ \#^{h(n-2)}(E(b) @ \#^{h(n-2)}{a_{n-1}}\#{a_n-1})\) (note \(\#^1\) = \(\#\))
これらは配列表記の規則と似ている。 言葉で表すと:
- もし引数がxのみならば, その値はbxである。
- もし最後のエントリが1なら、それは削除できる。
- h を最後のハイぺリオンの長さとする。 もし h > 1なら:
- 最後のエントリを消したものをrとする。
- もう1度最後のエントリを消し、それをzとする。
- zをr回h - 1個のハイペリオンで繰り返す。 これを式の最後に加える。
- そうでなければ、普通の表記の3.を実行する。
拡張ハイパーE表記の例
- a##b = a#a#a#...a#a (b個のa#)
- a###b = a##a##...a##a##a (b個のa##)
- a####b = a###a###...a###a###a (b個のa###)
- etc.
- a#bc = a###...##c (b個の#)
例
- E(10)6 = E6 = E6#1 = 106
- E(10)100 = E100 = E100#1 = 10100 = グーゴル
- これはRule 1の例である。基数のデフォルトは10であるため、このようになる。
- E100#2 = E(E100#1) = E10100 = 1010100 = グーゴルプレックス
- E100#3 = E(E100#2) = E1010100 = 101010100 = グーゴルプレックスプレックス
- これはRule 3,4の例。2つ目の例ではこのように省くこともできる: E(E100#1) = EE100#1.
- E303#1 = E303 = eceton = センティリオン = 10303
- E303#2 = ecetonplex = EE303 = 1010303
- E303#3 = EEE303 = 101010303 = エセトンデュプレックス
- E1#100 = EEE...EEE1 (100 E's) = ギゴル
- ルール3を繰り返し適用する: E1#100 = EE1#99 = EEE1#98 = ...
- E100#100 = EEE...EEE100 (100 E's) = グランゴル
- これは E1#100 と同じだが、最初の数が違う。
- E100#101 = EEE...EEE100 (101 E's) = グランゴルプレックス
- E100#101 = EE100#100 = 10:grangol となるために、この名前となる。
- E100#100#2 = E100#(E100#100) = EEE...EEE100 (グランゴル個のE) = グランゴルデックス
- ついに三変数まで達する。
- E100#100#3 = E100#(E100#100#2) = E100#(E100#(E100#100)) = EEE...EEE100 (グランゴルデックス個のE) = グランゴルデュデックス
- 3番目の変数を大きくすればするほど、ネスト数は深くなっていく。
- E100#100#100#100 = E100#100#(E100#100#100#99) = E100#100#(E100#100#(E100#100#100#98)) = ... ギガンゴル
- 変数が4つでもほとんど同じである。 &mdash同様にネストの数は深くなっていく。 これはE100##4とも書き、次のレベルの表記法の始まりである。
- E100##100 = E100#100#100#...#100#100#100 (100個の100) = ギュゴルド
- ついに拡張ハイパーE表記に到達した。二つの記号の連続は、一つ下の記号の繰り返しを表す。
- E100##100#100 = グラータゴルド
- 個の表記はルール4を繰り返し用いることによりEa##bの形で表すことが出来る。
- E100##100##100 = E100##100#100#...#100#100 (100個の100) = ギュゴルスラ
- 二つ目の##が展開されきって100のみになるまで、一つ目は無視する。
- E100###100 = E100##100##...##100##100 (100個の100)= スルーゴル
- 三つのハイペリオンは二つの物の繰り返しを表す。ハイペリオンは右から左は計算される。
- E100####100 = E100###100###...###100###100 (100個の100) = テトルーゴル
- 四つは三つに展開される。
- ゴドガグラ = E100#####...#####100 (100個の#)=E100#100100
- E100#(100100)ではない。
疑似コード
function Eb(a1, a2, ..., an - 1, an): if n = 1: return ba1 if an = 1: return Eb(a1, a2, ..., an - 1) z := Eb(a1, a2, ..., an - 1, an - 1) return Eb(a1, a2, ..., an - 2, z) function xEb(a1, a2, ..., an - 1, an; h1, h2, ..., hn - 2, hn - 1): if n = 1: return ba1 if an = 1: return xEb(a1, a2, ..., an - 1; h1, h2, ..., hn - 2) if hn - 1 > 1: r := an z := an - 1 zseq := z, z, ..., z, z (r times) h := ah - 1 hseq := h, h, ..., h, h (r - 1 times) return xEb(a1, a2, ..., an - 2, zseq; h1, h2, ..., hn - 2, hseq) z := xEb(a1, a2, ..., an - 1; h1, h2, ..., hn - 2, hn - 1) return xEb(a1, a2, ..., an - 2, z; h1, h2, ..., hn - 2)