以上の整数全体を とする。関数 を、累積再帰
で定める。ここで は 以下の最大の整数である。 となる最小の を求めよ。
累積再帰
が のいくつかの値(, など)で決まる累積再帰の定義について、それまでの値の列をゲーデル数で 1 つの数にまとめれば通常の原始再帰になることを理解し、値の表を小さい から順に埋めて、指定した値をとる最小の などを求められる
前提
- 原始再帰的定義と関数の値 (大学院数学 計算理論・ラムダ計算)
- 素因数分解による列のゲーデル数 (大学院数学 数理論理学・集合論)
- カントールの対関数とその逆 (大学院数学 数理論理学・集合論)
この技能までの道筋(25 技能)
読み込み中…
右端(太枠)がこの技能です。左へドラッグすると、さらに前の前提をさかのぼれます。技能を押すと、そこまでの道筋が光ります。
一覧で見る(前提が先)
- 小数の四則計算 (算数 計算と数のきまり)
- 分数のたし算・ひき算 (算数 計算と数のきまり)
- 分数のかけ算・わり算 (算数 計算と数のきまり)
- 小数と分数のまじった計算 (算数 計算と数のきまり)
- 逆算(□ を求める) (算数 計算と数のきまり)
- 正負の数の加法・減法 (中学数学 数と式)
- 四則の混じった計算の順序 (算数 計算と数のきまり)
- 正負の数の乗除・累乗と四則混合 (中学数学 数と式)
- 分配法則を使った計算のくふう (算数 計算と数のきまり)
- 文字式の計算(同類項・分配法則) (中学数学 数と式)
- 1 次方程式の解き方 (中学数学 方程式)
- 連立方程式の解き方(加減法・代入法) (中学数学 方程式)
- 等差数列・等比数列の一般項 (数学B 数列)
- 数学的帰納法と一般項の推定 (数学B 数列)
- 原始再帰的定義と関数の値 (大学院数学 計算理論・ラムダ計算)
- 樹形図で数え上げる (算数 場合の数)
- 積の法則と和の法則 (算数 場合の数)
- 和の法則・積の法則と樹形図 (数学A 場合の数と確率)
- 約数の個数と総和 (数学A 整数の性質)
- 素因数分解による列のゲーデル数 (大学院数学 数理論理学・集合論)
- 順列・円順列・重複順列 (数学A 場合の数と確率)
- 組合せ (数学A 場合の数と確率)
- 写像・単射の個数と集合の濃度 (大学数学 集合と位相)
- 可算集合 (大学数学 集合と位相)
- カントールの対関数とその逆 (大学院数学 数理論理学・集合論)
説明
原始再帰では を直前の値 だけから決めましたが、実際には やカントールの対関数の逆 のように、もっと前の値を参照したい定義がよく現れます。このように が のいくつかの値で決まる定義を累積再帰(値の経過による再帰)といいます。この技能では、初期値と「それまでの値から次の値を作る規則」が原始再帰的であれば、累積再帰がゲーデル数を使って通常の原始再帰に書き直せる理由を理解し、値の表を小さい から順に埋めて、指定した値や条件を満たす最小の を求めます。
なぜそうしてよいのか
累積再帰で困るのは、原始再帰の形 では「直前の 1 つの値」しか渡せないことです。そこで、それまでの値をすべて 1 つの数にまとめて持ち運びます。列のゲーデル数を使って
とおきます( は空の列の符号)。 を素因数分解して の指数から を引けば ()がすべて読み取れるので、「 のいくつかの値から を計算する」操作は、「 から計算する」操作として書けます。これを と書くことにします。ここで仮定するのは、初期値 が定数(引数があればその原始再帰的関数)であり、 が原始再帰的であることです。たとえば なら で、 や のような添字の計算、和や積は原始再帰的なので、この仮定は満たされます。また、符号の成分の読み取り ( を割り切る のべきの指数から を引いたもの)、 番目の素数 、積とべきもすべて原始再帰的な関数であることを使います。
すると 自身は
と、 に新しい値 を 1 成分つけ足すだけで次が決まります。 は から( なら初期値として、 なら として)読み出せるので、右辺は と の原始再帰的関数です。つまり上の仮定のもとで は通常の原始再帰で定義でき、 と成分を読むことで も原始再帰的に得られます。
計算のうえでは、これは「値の表を左から右へ埋めていく」ことにほかなりません。 は「ここまでに埋めた表」を 1 つの数で表したもので、 を計算するときに必要な などは、すでに埋めた欄から読めばよいのです。参照先の添字がつねに 以下であることが、この方法がうまくいく理由です。
手順
定義を読み、初期値 と、 がどの添字(, , など)の値を使うかを確認する。参照する添字が 以上 以下であることも確かめる
表を用意し、 の欄に初期値を書く
の順に、 の計算に必要な添字(たとえば )をまず計算する
すでに埋めた欄からその値を読み、定義の式に入れて を表に書き込む
問われている条件(値が一致する・ある値以上になるなど)を満たす欄が現れるまで手順 3・4 をくり返し、それより前の欄が条件を満たさないことを確かめて最小の を答える
例題
関数 ()を
で定める。 となる最小の を求めよ。
例題の解答
【手順 1】 は と を使う。 なので、どちらもすでに計算済みの値である。
【手順 2】。
【手順 3・4】 の順に、 を求めてから表を埋める。
- :、
- :、
- :、
- :、
- :、
- :、
- :、
- :、
【手順 5】表は 。 はすべて 未満で、 だから、 となる最小の は 。
答え:
よくある誤り
添字をずらして読んでしまう誤り。 の を のように左辺の添字 で床関数をとるのは、ここでは偶然一致するが一般には誤り。正しくは は の場合なので 。たとえば は で、 ではない。
値の経過の符号で指数をそのまま値と読んでしまう誤り。 の指数 を とするのは誤りで、正しくは指数から を引いた 。
まだ計算していない値を参照してよいと考える誤り。 のような「未来の値」を使う式は累積再帰ではなく、表を左から埋められない。正しくは、参照する添字がすべて 以下( の範囲)であることを確かめてから計算する。
「最小の 」を答えるときに、条件を満たした の値そのものを答えてしまう誤り。例題で と答えるのは誤りで、正しくは添字の 。
この説明は AI が書き、別の AI が例題を独立に解いて答えを確かめ、説明を一歩ずつ査読しました。
入口の問題
この技能を使う問題
自然数全体を ( を含む)とし、 を 番目の素数とする()。有限列 のゲーデル数を
で定める(空列のゲーデル数は とする)。関数 を
で定め、その累積値関数(course-of-values function) を
で定める。自然数 の正の約数の個数を求めよ。自然数全体を ( を含む)とする。カントールの対関数 を
で定める。 は全単射であるから、各 に対して をみたす がただ 1 つ存在する。これを , と書く( は原始再帰関数である)。関数 を、累積再帰(course-of-values recursion)により
で定める( なので well-defined であり、 は原始再帰関数である)。 の値を求めよ。この問題では自然数 は を含むものとする。 を小さい順に並べた素数とする( は 番目から数えて 番目の素数)。
正の整数 と に対し、 を素因数分解したときの の指数を とする( が を割り切らなければ )。さらに
と定める。例えば のとき なので である。関数 を、正の整数 に対して
で定める(右辺の 2 つの項はどちらも上で定めた の値の和であり、 を再帰的に使うものではない)。さらに関数 を
で定める。例えば である。このとき、 を素因数分解したときの素数 の指数 を求めよ。
( を含む)とする。カントールの対関数
は から への全単射であり、その逆写像の成分を (すなわち )とすると、 はいずれも原始再帰関数である。 に注意して、関数 を累積再帰(course-of-values recursion)により
で定める( は原始再帰関数である)。 をみたす最小の を求めよ。