( を含む)とする。関数 と を
で定め、関数 を原始再帰
で定める。 を の式で表せ。
原始再帰的定義と関数の値
原始再帰 で定義された関数の値を計算できる。小さい値の表から一般形(例: )を推定し、帰納法で確かめて求められる
前提
- 数学的帰納法と一般項の推定 (数学B 数列)
この技能までの道筋(14 技能)
読み込み中…
右端(太枠)がこの技能です。左へドラッグすると、さらに前の前提をさかのぼれます。技能を押すと、そこまでの道筋が光ります。
一覧で見る(前提が先)
- 小数の四則計算 (算数 計算と数のきまり)
- 分数のたし算・ひき算 (算数 計算と数のきまり)
- 分数のかけ算・わり算 (算数 計算と数のきまり)
- 小数と分数のまじった計算 (算数 計算と数のきまり)
- 逆算(□ を求める) (算数 計算と数のきまり)
- 正負の数の加法・減法 (中学数学 数と式)
- 四則の混じった計算の順序 (算数 計算と数のきまり)
- 正負の数の乗除・累乗と四則混合 (中学数学 数と式)
- 分配法則を使った計算のくふう (算数 計算と数のきまり)
- 文字式の計算(同類項・分配法則) (中学数学 数と式)
- 1 次方程式の解き方 (中学数学 方程式)
- 連立方程式の解き方(加減法・代入法) (中学数学 方程式)
- 等差数列・等比数列の一般項 (数学B 数列)
- 数学的帰納法と一般項の推定 (数学B 数列)
説明
原始再帰は、自然数(ここでは を含む )上の関数を「 のときの値」と「 のときの値から のときの値を作る規則」で定義する方法で、計算理論で計算可能な関数を組み立てる基本の道具です。この技能では、、 の形の定義から具体的な値を計算し、小さい値の表から一般形を推定して、数学的帰納法で確かめられるようになります。足し算・掛け算・べき乗などのなじみのある関数も、この形で定義できます。
なぜそうしてよいのか
定義の第 2 式は、 を固定すると についての漸化式 、 にほかなりません。 に渡される 3 つの引数は「いま何段目か()」「1 つ前の値()」「固定したままの引数()」です。 が決まり、 が決まれば も決まるので、すべての で が一通りに定まります。
したがって値の計算は、 と順に漸化式をたどれば機械的にできます。大きな の値が必要なときは、 を文字のまま(あるいはいくつかの で)表を作って規則を推定し、その形を数学的帰納法で確かめます。ここでの帰納法は から始まり、「 で成立」「 で成立なら で成立」の 2 段階です。第 2 段では定義の第 2 式 に仮定 を代入し、結果が推定した式の を にしたものと一致することを確かめます。たとえば 、 なら、表 から と推定でき、 で確かめられます。
手順
と を読み取り、 を固定した漸化式 、 の形に書く( の第 1 引数は ではなく であることに注意)
を文字のまま、 程度まで順に値を計算して表を作る
表から の一般形を推定する( の係数・定数項がそれぞれどう増えるかを見る)
数学的帰納法で確かめる: で と一致すること、 が推定式に等しいと仮定して が の推定式になること
確かめた式に具体的な を代入して値を求める
例題
自然数を を含む とする。自然数の 2 変数関数 を、、 による原始再帰
で定める。 を求めよ。
例題の解答
手順 1: 漸化式は 、 である。
手順 2: 順に計算する。
-
-
-
-
手順 3: の係数は 、定数項は なので、 と推定する。
手順 4: 帰納法で示す。 のとき で成立。 と仮定すると
となり、 でも成立する。よってすべての自然数 で 。
手順 5: 。
答え:
よくある誤り
の第 1 引数に を入れてしまう誤り。 なので、 を作るときに使うのは 。例題で を使うと となって以後すべてずれる。正しくは 。
出発点を と思い込み、 として表を作ってしまう誤り。原始再帰の出発点は であり、帰納法も から始める。例題で とすると が にあたる値 になってしまうが、正しくは 。
再帰の途中で も変化すると考えてしまう誤り。 は最後まで固定されたパラメータで、 の第 3 引数にはいつも同じ が入る。 を や から作るのではない。
表から推定した式を確かめずに使ってしまう誤り。数項の一致だけでは一般形は保証されないので、 に仮定を代入して の式になることを必ず確かめる。例題では の確認がこれにあたる。
この説明は AI が書き、別の AI が例題を独立に解いて答えを確かめ、説明を一歩ずつ査読しました。
入口の問題
この技能を使う問題
自然数全体を ( を含む)とする。 上の関数を次の原始再帰で順に定める。
符号関数 :
打ち切り差 :。ただし とする。
関数 :
関数 :
このとき の値を求めよ。
( を含む)とする。関数 と に対し、 を の 回合成( は恒等写像、)とする。
関数の列 ()を次で定める(アッカーマン関数と同じ増大度をもつ階層の一種である)。
このとき、 の値を求めよ。自然数は を含むものとし、 とする。 で 番目の素数を表す()。 と に対し、 を「 となる最大の 」と定め、 とする。
長さ の有限列 のゲーデル数を
と定める(空列のゲーデル数は )。関数 を、 がある有限列 のゲーデル数であるとき 、そうでないとき と定める。が原始再帰関数であることを証明せよ。
ただし、次の事実は用いてよい。
- , , ( なら 、そうでなければ )、、 は原始再帰関数であり、述語 と は原始再帰的である。
- 原始再帰関数・原始再帰的述語の全体は、合成、原始再帰、論理結合子 、有界量化 , ( は原始再帰関数の値)で閉じている。また、述語 が原始再帰的であることは、その特性関数 ( が成り立てば 、そうでなければ )が原始再帰関数であることと定義する。
- 素因数分解の一意性。この問題では自然数 は を含むものとする。 を小さい順に並べた素数とする( は 番目から数えて 番目の素数)。
正の整数 と に対し、 を素因数分解したときの の指数を とする( が を割り切らなければ )。さらに
と定める。例えば のとき なので である。関数 を、正の整数 に対して
で定める(右辺の 2 つの項はどちらも上で定めた の値の和であり、 を再帰的に使うものではない)。さらに関数 を
で定める。例えば である。このとき、 を素因数分解したときの素数 の指数 を求めよ。
この技能の次に学べること
- アッカーマン関数の値 (大学院数学 計算理論・ラムダ計算)
- 累積再帰 (大学院数学 数理論理学・集合論)