コンテンツにスキップ

「アッカーマン関数」の版間の差分

出典: フリー百科事典『ウィキペディア(Wikipedia)』
削除された内容 追加された内容
m *{{仮リンク|グッドスタイン関数|en|Goodstein function|label=グッドスタイン関数}}* 二重再帰法 {{lang-de-short|Ackermannfunktion}}(原産国へ敬意)
m whileループforループ &20 March 2017英版を元に少々加筆。出典貼付。
11行目: 11行目:
与える数が大きくなると爆発的に計算量が大きくなるという特徴があり、性能測定などに用いられることもある。
与える数が大きくなると爆発的に計算量が大きくなるという特徴があり、性能測定などに用いられることもある。


また、数学的な意味として、[[原始再帰関数]]でない[[μ再帰関数]]の実例として有名である。これを([[再帰]]のない手続き型の)[[プログラミング言語]]の言葉で言えば、whileループを使えばアッカーマン関数をプログラミングできるが、whileを使わずにforループだけでは実現不能だということである。
また、数学的な意味として、[[原始再帰関数]]でない[[μ再帰関数]]の実例として有名である。これを([[再帰]]のない手続き型の)[[プログラミング言語]]の言葉で言えば、[[whileループ]]を使えばアッカーマン関数をプログラミングできるが、whileを使わずに[[forループ]]だけでは実現不能だということである。


なお、アッカーマン関数のグラフは原始再帰的である。
なお、アッカーマン関数のグラフは原始再帰的である。
20行目: 20行目:
スーダンとアッカーマンの双方が[[部分写像#全域写像|全域]][[計算可能関数]](いくつかの参考文献では単純に "再帰的"と呼ばれる)でありながら[[原始再帰関数|原始再帰的でない関数]]の発見に功績が有ったと信じられている<ref>{{cite journal | author=Cristian Calude, [[Solomon Marcus]] and Ionel Tevy | journal = Historia Math. | title=The first example of a recursive function which is not primitive recursive | date=November 1979 | pages=380?84 | volume=6 | issue=4 | doi=10.1016/0315-0860(79)90024-7}}</ref>。
スーダンとアッカーマンの双方が[[部分写像#全域写像|全域]][[計算可能関数]](いくつかの参考文献では単純に "再帰的"と呼ばれる)でありながら[[原始再帰関数|原始再帰的でない関数]]の発見に功績が有ったと信じられている<ref>{{cite journal | author=Cristian Calude, [[Solomon Marcus]] and Ionel Tevy | journal = Historia Math. | title=The first example of a recursive function which is not primitive recursive | date=November 1979 | pages=380?84 | volume=6 | issue=4 | doi=10.1016/0315-0860(79)90024-7}}</ref>。


スーダンがあまり知られていない[[スーダン関数]]を公表し独立した後、1928年アッカーマンは自分の生み出した関数 <math>\varphi\,\!</math>(ギリシャ文字の[[Φ|ファイ]])を公表する。その関数は3つの引数を必要とし <math>\varphi(m, n, p)\,\!</math> の様に表記された。
スーダンがあまり知られていない[[スーダン関数]]を公表し独立した後、1928年アッカーマンは自分の生み出した関数 <math>\varphi\,\!</math>(ギリシャ文字の[[Φ|ファイ]])を公表する。その関数は3つの引数を必要とし <math>\varphi(m, n, p)\,\!</math> の様に表記された。<ref name="Ack">{{cite journal | author=Wilhelm Ackermann | journal=[[Mathematische Annalen]] | title=Zum Hilbertschen Aufbau der reellen Zahlen | year=1928 | volume=99 | pages=118?133 | url=http://gdz.sub.uni-goettingen.de/en/dms/loader/img/?PPN=PPN235181684_0099&DMDID=DMDLOG_0009 | doi=10.1007/BF01459088}}</ref>

ダフィット・ヒルベルトはアッカーマン関数が原始再帰的では無いと仮定したが、この仮説は彼の個人秘書となっていたアッカーマンによって実際に証明され、ヒルベルトの執筆した実数の論文上に掲載された。<ref name="Ack"/><ref>von Heijenoort. [http://mathgate.info/cebrown/notes/vonHeijenoort.php From Frege To Godel] {{webarchive |url=https://web.archive.org/web/20080504224223/http://mathgate.info/cebrown/notes/vonHeijenoort.php |date=May 4, 2008 }}, 1967.</ref>


多くの数学者に愛用される事になった2変数形式のアッカーマン関数は、{{ill2|ラファエル・M・ロビンソン|en|Rozsa Peter}}と{{ill2|ロザ・ペーター|en|Raphael Robinson}}に開発された<ref>{{cite journal | author=Raphael M. Robinson | title=Recursion and Double Recursion | journal=[[Bulletin of the American Mathematical Society]] | year=1948 | volume=54 | pages=987?93 | url=http://projecteuclid.org/DPubS?verb=Display&version=1.0&service=UI&handle=euclid.bams/1183512393&page=record | doi=10.1090/S0002-9904-1948-09121-2 | issue=10}}</ref>。
多くの数学者に愛用される事になった2変数形式のアッカーマン関数は、{{ill2|ラファエル・M・ロビンソン|en|Rozsa Peter}}と{{ill2|ロザ・ペーター|en|Raphael Robinson}}に開発された<ref>{{cite journal | author=Raphael M. Robinson | title=Recursion and Double Recursion | journal=[[Bulletin of the American Mathematical Society]] | year=1948 | volume=54 | pages=987?93 | url=http://projecteuclid.org/DPubS?verb=Display&version=1.0&service=UI&handle=euclid.bams/1183512393&page=record | doi=10.1090/S0002-9904-1948-09121-2 | issue=10}}</ref>。

2017年9月5日 (火) 11:46時点における版

アッカーマン関数(アッカーマンかんすう、: Ackermann function: Ackermannfunktion)とは、非負整数 mn に対し、

によって定義される関数のことである。

与える数が大きくなると爆発的に計算量が大きくなるという特徴があり、性能測定などに用いられることもある。

また、数学的な意味として、原始再帰関数でないμ再帰関数の実例として有名である。これを(再帰のない手続き型の)プログラミング言語の言葉で言えば、whileループを使えばアッカーマン関数をプログラミングできるが、whileを使わずにforループだけでは実現不能だということである。

なお、アッカーマン関数のグラフは原始再帰的である。

歴史

1920年代後半、数学者ダフィット・ヒルベルトの教導を受けていた学生だったガブリエル・スーダン英語版ヴィルヘルム・アッカーマンは、計算の基礎を研究していた。

スーダンとアッカーマンの双方が全域計算可能関数(いくつかの参考文献では単純に "再帰的"と呼ばれる)でありながら原始再帰的でない関数の発見に功績が有ったと信じられている[1]

スーダンがあまり知られていないスーダン関数を公表し独立した後、1928年アッカーマンは自分の生み出した関数 (ギリシャ文字のファイ)を公表する。その関数は3つの引数を必要とし の様に表記された。[2]

ダフィット・ヒルベルトはアッカーマン関数が原始再帰的では無いと仮定したが、この仮説は彼の個人秘書となっていたアッカーマンによって実際に証明され、ヒルベルトの執筆した実数の論文上に掲載された。[2][3]

多くの数学者に愛用される事になった2変数形式のアッカーマン関数は、ラファエル・M・ロビンソン英語版ロザ・ペーター英語版に開発された[4]

概念

というを想定すると、その全ての項は b 個の a で演算を b − 1 回繰り返すことで、次項に変換される。(例えば第一項 で行われた加算b 個の ab − 1 個間全てで行うと、第二項 と等価になる。)

: 上記の列に を代入すると、6, 8, 16, 65536, (65536階立の指数タワー) , ... という数列となる。第5項目の数はすでに、宇宙のすべての原子の推定数よりもはるかに大きい。

アッカーマン関数の背後には、この考え方があると思うべきである。オリジナルのアッカーマン関数 は、以下のリストを満たす関数である:

第4行目からは、一般的な演算子では書き表せなくなり、ハイパー演算子など高度で専門的な表記法を必要とする。

アッカーマン関数の値の表

アッカーマン関数の計算は、無限の表を使った手順に言い換えることができる。まず、一番上の列に自然数を順番に並べる。表の値を決めるためは、すぐ左の値を見て、一つ上の列でその順番の値を取る。もし左に数値がない場合は、単に一つ上の列のカラム 1 (n = 1) の数値を取る。表の左上の部分は以下のようになる。

A(mn) の値
m\n 0 1 2 3 4 n
0 1 2 3 4 5
1 2 3 4 5 6
2 3 5 7 9 11
3 5 13 29 61 125
4 13 65533 265536 − 3 A(3, A(4, 3)) = 22265536 − 3
5 65533

A(4, A(5, 1)) A(4, A(5, 2)) A(4, A(5, 3))
6 A(5, 1) A(5, A(6, 0)) A(5, A(6, 1)) A(5, A(6, 2)) A(5, A(6, 3))

再帰的な参照で表示している値は非常に大きいが、クヌースの矢印表記コンウェイのチェーン表記ハイパー演算子等を使えば

と簡潔に表す事が出来る。

以下は、上記のテーブルと同じものであるが、パターンを分かりやすくするため、値を関数定義の表現に置き換えている。

A(mn) の値
m\n 0 1 2 3 4 n
0 0+1 1+1 2+1 3+1 4+1
1 A(0,1) A(0,A(1,0)) A(0,A(1,1)) A(0,A(1,2)) A(0,A(1,3))
2 A(1,1) A(1,A(2,0)) A(1,A(2,1)) A(1,A(2,2)) A(1,A(2,3))
3 A(2,1) A(2,A(3,0)) A(2,A(3,1)) A(2,A(3,2)) A(2,A(3,3))
4 A(3,1) A(3,A(4,0)) A(3,A(4,1)) A(3,A(4,2)) A(3,A(4,3))

5 A(4,1) A(4,A(5,0)) A(4,A(5,1)) A(4,A(5,2)) A(4,A(5,3))

6 A(5,1) A(5,A(6,0)) A(5,A(6,1)) A(5,A(6,2)) A(5,A(6,3))

関連項目

脚注

参考文献

  • Y. Sundblad: The Ackermann Function. A theoretical, computational, and formulamanipulative study. BIT 11, 107–119 (1971)
  • 竹内外史『数学基礎論の世界 ロジックの雑記帳から』日本評論社、1972年、ISBN 4-535-78126-5
  • マイケル・シプサー著、『計算理論の基礎』太田和夫・田中圭介 監訳, 共立出版。原著: "Introduction to the Theory of Computation" (Michael Sipser, Thomson Course Technology)

外部リンク