計算理論・ラムダ計算の問題
とし、 を空列 を含む 上の有限列全体、 を列 の長さ、 を長さ の列全体とする。部分計算可能関数 に対し、 の に関する(プレーンな)記述複雑性を
で定める。ただし となる が存在しないときは とする。 の定義域が接頭語自由であることは仮定しない。
すべての部分計算可能関数 を考えたときの
の最小値を求めよ。
この問題で使うもの
- 記述複雑性とカウンティング論法(説明と入口の問題)
- 等差・等比数列の和と Σ(説明と入口の問題)
この問題を解けるようになるまで(11 技能)
読み込み中…
右端(太枠)がこの問題で使う技能です。左へドラッグすると、さらに前の前提をさかのぼれます。技能を押すと、そこまでの道筋が光ります。
ヒント
行き詰まったら、上から順に 1 つずつ開いてください。
ヒント 1
は関数なので、異なる出力の最短記述は異なる列になる。長さ 未満の記述が何個あるかを数えよう。
ヒント 2
となる は高々 個。値を小さい順に並べると 番目は 以上になる。
ヒント 3
下界は 。これが達成できる を有限の表で作り、和を計算する。
答えと解説
答えを見る
どこでつまずきましたか?(選ぶと、戻る場所を案内します)
解説を読む
下界. 各 について でなければ なので、すべて有限の場合を考える。各 に対し , となる最短記述 を 1 つ選ぶ。 は関数なので、 なら より 。つまり は単射である。
長さ 未満の列は 個しかないので、 となる は高々 個である。そこで の 個の値 を小さい順に と並べる。もし なら はすべて 未満なので 。したがって なら となり、
が成り立つ。よって
となる は の 個()、それに のとき値 なので
(公式 で としても )。よって 。
達成. 長さ から までの列全部( 個)と長さ の列 1 個、計 個を の 個の列に一対一に対応させ、それ以外の入力では未定義とする を作る。これは有限の表で与えられるので計算可能である。このとき各 の唯一の記述が最短記述なので、。
以上より最小値は である。
別解
は任意の部分計算可能関数でよい。 の 1024 個の列それぞれに別々の記述 が必要で、 は関数なので 1 つの は高々 1 つの にしか対応しない。よって は、長さの短い順に 1024 個のプログラムを取ったときの長さの総和以上である。
長さ の列は 個ある。長さ から までのプログラムは 個で、1024 個にはあと 1 個足りない。足りない 1 個は長さ のプログラムで補う。したがって下界は
である。
公式 に を代入すると となる。よって下界は である。
下界は達成できる。1024 個の列と上記 1024 個のプログラムを 1 対 1 に対応させる有限の表を作り、 をその表を引く関数とする。有限の表で定まる関数は計算可能で、表にない入力では未定義とすればよい。このとき となる。
検算として、長さ別の和は である。これに長さ の 1 個分 を加えて となり、一致する。