ハイパー演算子

出典: フリー百科事典『ウィキペディア(Wikipedia)』
移動: 案内検索

ハイパー演算子 (hyper operator) は、加算乗算冪乗を一般化した演算のための演算子である。

表記[編集]

加算演算子を上付き(1) (a + b = a (1)b)、乗算演算子を上付き(2) (ab = a (2)b)、冪乗演算子を上付き(3) (ab = a (3)b)で表し、それらを一般の非負整数nに一般化した上付き(n) (a (n) b) がハイパー演算子である。

それらを関数形式で表す hypernnを変数とした3変数関数 hyper も定義される。hyper1は加算、hyper2は乗算、hyper3は冪乗であり、さらにhyper4はテトレーション (tetration)、hyper5はペンテーション (pentation)、hyper6はヘキセーション (hexation)・・・と呼ばれる。

n = 0~4 の例は次のとおり。

\operatorname{hyper0} (a, b) = \operatorname{hyper}(a, 0, b) = a ^ {(0)} b = b+1
\operatorname{hyper1} (a, b) = \operatorname{hyper}(a, 1, b) = a ^ {(1)} b = a+b
\operatorname{hyper2} (a, b) = \operatorname{hyper}(a, 2, b) = a ^ {(2)} b = ab
\operatorname{hyper3} (a, b) = \operatorname{hyper}(a, 3, b) = a ^ {(3)} b = a^b = a \uparrow b
\operatorname{hyper4} (a, b) = \operatorname{hyper}(a, 4, b) = a ^ {(4)} b = \,^b a = a \uparrow
\uparrow b = \underbrace{ a^{a^{\cdot^{\cdot^{a}}}} }_b

hyper0は、第2オペランド b後者関数(第1オペランド a は無視される)とする。ただし、他の定義を使うこともある。

n > 4 の場合は次のように定める。これは n > 1 の場合全てに成り立つが、n = 1 では成り立たない。

\operatorname{hyper}n (a, b) = \operatorname{hyper}(a, n, b) = a ^ {(n)} b = \underbrace{ a ^{(n-1)} a ^{(n-1)} \cdots ^{(n-1)} a }_b

他の表記法との関係[編集]

n ≥ 3 に対しては、クヌースの矢印表記コンウェイのチェーン表記との間に次の関係が成り立つ。

\operatorname{hyper}(a, n, b) = a ^ {(n)} b = a \uparrow^{n-2} b = a \rightarrow b \rightarrow (n -2) \quad \mbox{ when } n \ge 3

また、n ≥ 1 に対しては、Bowerの拡張演算子 (Jonathan Bowers' Extended Operator) との間に次の関係が成り立つ。

\operatorname{hyper}(a, n, b) = a ^ {(n)} b = a \langle n \rangle b \quad \mbox{ when } n \ge 1

再帰的定義[編集]

次のように再帰的に定義できる。b = 0のときの例外処理がnによって違うことに注意。


  \operatorname{hyper}(a, n, b) = a ^ {(n)} b=
   \begin{cases}
    b+1, & \mbox{if }n=0 \\
    a, & \mbox{if }n=1,b=0 \\
    0, & \mbox{if }n=2,b=0 \\
    1, & \mbox{if }n\ge 3,b=0 \\
    a ^ {(n-1)} ( a ^ {(n)} (b - 1)) & \mbox{otherwise}
   \end{cases}

実数への拡張[編集]

冪乗を指数関数に拡張したような、bn の実数への自然な拡張はなされていない。

下付きハイパー演算子[編集]

n > 3(冪乗) 以上では結合律が成り立たないので、右からの優先順位が定められていて、

\operatorname{hyper}(n+1) (a, b) = a ^ {(n+1)} b = \underbrace{ a ^{(n)} a ^{(n)} \cdots ^{(n)} a ^{(n)} a}_b  = \underbrace{ a ^{(n)} (a ^{(n)} \cdots ^{(n)} (a ^{(n)} a)\cdots) }_b

である。

それに対し、ハイパー演算子を下付きにすることで、優先順位を左からとする演算を表せる。つまり、

\operatorname{hyper}_{n+1} (a, b) = a _ {(n+1)} b = \underbrace{ (\cdots( a ^{(n)} a) ^{(n)} \cdots ^{(n)} a) ^{(n)} a}_b

である。

ただし、下付きハイパーn+1演算子はハイパーn演算子を使って簡単に表せる、たとえば

a _{(4)} b = a _{(3)} a _{(3)} (b-1) = a ^ {a ^ {(b-1)}}

(冪乗法則より)なので、本質的に新しい演算ではなく、下付きハイパー演算子の用途はあまりない。

外部リンク[編集]