Ackermann関数
原始帰納的関数でない帰納的関数の例としてよく知られているAckermann関数について,高橋正子著『計算論』近代科学社 のP.22の練習問題を解いてみた.
ちょっと調べてみると1900年代の初期には計算可能な関数(今でいう帰納的関数)は全て原始帰納的関数であると信じられていたそうである.英語版Wikipediaによると,原始帰納的関数でない帰納的関数の具体的な例は,Ackermannのものが最初ではなく,1927年のGabriel SudanによるSudan関数が最初のものであったらしい(Ackermannのは1928年).蛇足ながら,二人ともあのHirbertの弟子であったそうだ.Sudan関数も(オリジナルの)Ackermann関数も3変数の関数である.今,Ackermann関数と呼ばれる2変数の関数はRózsa PéterとRaphael Robinsonによるもの(1948年)で,Ackermann関数がSudan関数より有名なのは,恐らくこの2変数バージョンのおかげであろう.
ちなみにオリジナル3変数バージョンの定義は
...らしい.
よく知られている2変数バージョンの定義はこうである.
一見なんの変哲もない再帰的な定義である.しかし,問題を順に解いていくと,これがどんな原始帰納的関数よりも急速に増加することがわかってしまうという大変おいしい演習なのである.
(Q1) がうまく定義されている(なる関数である)ことを確かめよ.
(A1) を固定して考える.で,が既知の関数であるとする.の時は定義の一行目で成立している.のとき,2行目,3行目は既知の関数を使っての再帰的定義を与えているだけであるため,は定義されている.よって全てのについて,は定義されている.□
(Q2) , を示せ.また , をの関数として具体的に表せ.
(A1) すべてに関する帰納法で示せる.
と より.
と より.
.
.
(Q3)
(A3) に関する帰納法.の時, より成立している.まで成立を仮定して,ならで成立. ならとなり,さらにに関する帰納法を適用すれば,を仮定するので,であるから,二重の帰納法が完了する.□
(Q4)
(A4) を示す.
に関する帰納法.の時, より成立している.まで成立を仮定して, (∵ 最後にQ3を使った.) より,の時も成立する.
を示す.
の時, より成立している.の時,Q3の結果より が成立するが,これと前半の結果(がに関する単調増加関数であること)より,が成立する.この式の左辺は,であるから証明は完了した.□
(Q5) 任意のに対して を満たすが存在する.
(A5) ならば (∵ Q4と定義を使った). よってとすればよい.
またすなわちのとき,(∵ Q4)であるから,再びQ4より,. よってとすればよい.いずれの場合でもでよい. □
(Q6) 任意の原始帰納関数に対して,が存在して,
を満たす.
(A6) 原始帰納関数は,零関数,後者関数,射影関数か,それらの合成,原始帰納法の繰り返しによって生成された関数である.
結論を原始帰納関数の複雑さ(生成までに必要な合成および原始帰納法の適用の最小回数)に関する帰納法によって示す.
零関数,後者関数,射影関数に対しては,結論の成立は明らかである.
合成について,とし,およびに対して帰納法の仮定が満たされているとする.
(∵ Q5を使った). よって,合成に関して結論は成立している.
原始帰納法についての結論の成立を示すために,次の2つの補題を先に証明する.
<補題1>
<証明>
に関する帰納法.の時は,は成立する.まで成立すると仮定して,
.
よっての時も成立する.□
<補題2>
<証明>
に関する帰納法.の時は,で成立する.まで成立すると仮定して,であったから,
.
よっての時も成立する.□
原始帰納法について,定義が次のように与えられているとして,
およびについて帰納法の仮定が満たされているとする.
またとして,とする.
このとき,yに関する帰納法で
が示せる.さらに補題1より,
(右辺) .
さらに に注意すれば,補題2より,
が得られ,原始帰納法についても,題意が成立していることが証明できた.□
以上の準備でAckermann関数が,原始帰納的関数でないことを証明することができる.
もし,Ackermann関数が原始帰納的関数であったとすると,上のQ6の結果より,なるが存在することになるが,としてみれば,と直ちに矛盾が導ける.よって,Ackermann関数は原始帰納的関数ではない.列挙して対角線要素を見るという対角線論法的な雰囲気が漂う面白い証明である.