( を含む)とし、関数 を、すべての について次の式で定める。
の値を求めよ。
アッカーマン関数の値
二重帰納法で定義された について、, , のような各段の閉じた式を下の段から順に導き、初期値を変えた変種も含めて のような値を求められる
前提
- 原始再帰的定義と関数の値 (大学院数学 計算理論・ラムダ計算)
この技能までの道筋(15 技能)
読み込み中…
右端(太枠)がこの技能です。左へドラッグすると、さらに前の前提をさかのぼれます。技能を押すと、そこまでの道筋が光ります。
一覧で見る(前提が先)
- 小数の四則計算 (算数 計算と数のきまり)
- 分数のたし算・ひき算 (算数 計算と数のきまり)
- 分数のかけ算・わり算 (算数 計算と数のきまり)
- 小数と分数のまじった計算 (算数 計算と数のきまり)
- 逆算(□ を求める) (算数 計算と数のきまり)
- 正負の数の加法・減法 (中学数学 数と式)
- 四則の混じった計算の順序 (算数 計算と数のきまり)
- 正負の数の乗除・累乗と四則混合 (中学数学 数と式)
- 分配法則を使った計算のくふう (算数 計算と数のきまり)
- 文字式の計算(同類項・分配法則) (中学数学 数と式)
- 1 次方程式の解き方 (中学数学 方程式)
- 連立方程式の解き方(加減法・代入法) (中学数学 方程式)
- 等差数列・等比数列の一般項 (数学B 数列)
- 数学的帰納法と一般項の推定 (数学B 数列)
- 原始再帰的定義と関数の値 (大学院数学 計算理論・ラムダ計算)
説明
アッカーマン関数は、0 以上の整数 に対して
で定められる関数で、 と の両方について帰納的に定義されています(二重帰納法)。この技能では、第 段の関数 の閉じた式を と下の段から順に導き、それを使って のような値や、初期値を変えた変種の値を求めます。値が爆発的に大きくなる関数の振る舞いを具体的につかむための基本の計算です。
なぜそうしてよいのか
を 1 つ固定して と書くと、定義の 2・3 番目の式は
となります。これは「 は初期値 から始めて、1 段下の関数 を 1 回ずつ適用していく数列」という原始再帰の形です。つまり、1 段下の閉じた式 がわかっていれば、 は , という漸化式で決まる数列で、前提の技能(小さい値の表から一般形を推定し帰納法で確かめる)でその一般項を求められます。
実際に下から順に解くと: なので は「 から 1 ずつ増える」等差数列で 。 は「 から 2 ずつ増える」等差数列で 。 は「 から始めて をくり返す」数列で、 より は初項 、公比 の等比数列となり 。どの段も「1 段下の関数を何回もくり返し適用する」ので、段が上がるごとに足し算 → 掛け算 → 累乗 → 累乗の塔と、増え方が一気に激しくなります。初期値や を変えた変種でも、この「段ごとに 1 段下をくり返す」構造は同じなので、同じ手順で解けます。
手順
定義を段ごとの漸化式に書き直す: ,
最下段 の式を定義から読み取る
1 段上の初期値 を求め、漸化式 を具体的に書く( が なら等差、 なら を等比に直す)
の値の表から一般項を推定し、数学的帰納法で確かめる
必要な段まで手順 3・4 をくり返す。閉じた式が求めにくい段では、1 段下の閉じた式に代入して値を順に計算する:
例題
0 以上の整数 に対し、関数 を
で定める。 を求めよ。
例題の解答
(手順 1) とおくと、, 。
(手順 2)最下段は 。
(手順 3・4、), 。初項 1、公差 2 の等差数列なので ( で 、 で帰納法が進む)。
(手順 3・4、), 。両辺に 1 を足すと で、 は初項 2、公比 2 の等比数列。よって ( で 、 で帰納法が進む)。
(手順 5、) から を順に計算する:
答え:
よくある誤り
上の段の初期値を下の段の初期値と同じだと思ってしまう誤り。標準のアッカーマン関数では で、 ではない。正しくは定義の 2 番目の式 に従って段ごとに計算する
漸化式の入れ子の向きを取り違え、 のように計算してしまう誤り。正しくは外側が 1 段下の関数で、(例えば )
の一般項を のように足される定数をそのまま足し合わせてしまう誤り。正しくは と変形して ( では より )
閉じた式の指数をずらしてしまう誤り。 を や とすると と合わない。求めた式は必ず の値と比べて確かめる
この説明は AI が書き、別の AI が例題を独立に解いて答えを確かめ、説明を一歩ずつ査読しました。
入口の問題
この技能を使う問題
( を含む)とする。関数 と に対し、 を の 回合成( は恒等写像、)とする。
関数の列 ()を次で定める(アッカーマン関数と同じ増大度をもつ階層の一種である)。
このとき、 の値を求めよ。この問題では ( を含む)とする。関数 を次の再帰式で定める(アッカーマン・ペーター関数)。
この再帰式によって がすべての で一意に定まる全域関数であることは用いてよい。すべての に対して
が成り立つことを証明せよ。以上の整数全体を とする。関数 を、すべての に対して
を満たすものとして(アッカーマン関数と同様の二重帰納法で)定める。 の値を求めよ。( を含む)とし、関数 を次の再帰で定める(アッカーマン関数の変形である)。すべての に対して
この再帰は の辞書式順序に関する整礎帰納法によりすべての で値が定まる。 を 以上の整数とするとき、 を の式で表せ。( を含む)とし、関数 (アッカーマン・ペーター関数)を次の再帰で定める。すべての に対して
このとき、 を で割った余りを求めよ。( を含む)とし、関数 をすべての について
で定める。この定義をそのまま再帰手続きとして実行して を計算する。すなわち、手続き が呼ばれると、 なら再帰呼び出しをせずに を返し、 なら を 回呼んでその値を返し、 ならまず を呼んでその値 を得たのち を呼んでその値を返す。最初の呼び出しも含めて、 の計算で手続き が呼ばれる回数の合計を とする(たとえば 、)。
に対し、 を の式で表せ。
この技能の次に学べること
- べきの塔の剰余 (大学院数学 計算理論・ラムダ計算)