計算理論・ラムダ計算の問題
とし、 を空列 を含む 上の有限列全体、 を列 の長さ、 を長さ の列全体とする。部分計算可能関数 (定義域が の部分集合である計算可能な部分関数。定義域が接頭語自由である必要はない)に対し、 の に関する記述量を
で定める(そのような がなければ )。
を正の整数とする。 が部分計算可能関数全体を動くとき、
の最小値を の式で表せ。
この問題で使うもの
- 記述複雑性とカウンティング論法(説明と入口の問題)
- 等差・等比数列の和と Σ(説明と入口の問題)
この問題を解けるようになるまで(11 技能)
読み込み中…
右端(太枠)がこの問題で使う技能です。左へドラッグすると、さらに前の前提をさかのぼれます。技能を押すと、そこまでの道筋が光ります。
ヒント
行き詰まったら、上から順に 1 つずつ開いてください。
ヒント 1
各 の最短プログラムは、 が異なれば異なる列になる。長さ の列が何個あるかを使って、長さの和の下界を考えよう。
ヒント 2
長さ 以下の列は全部で 個しかない。したがって 個の列のうち少なくとも 個は長さ 以上になる。
ヒント 3
下界は 。この和を の形で計算し、有限の表で定めた で下界が達成できることを確かめよう。
答えと解説
答えを見る
どこでつまずきましたか?(選ぶと、戻る場所を案内します)
解説を読む
下界(カウンティング論法). は関数なので、 となる は各 に対して高々 つである。したがって、各 に対して を与える最短のプログラム を つずつ選ぶと、 なら ( なら )。つまり は単射である( となる があれば和は なので、最小値を考えるときはすべて有限としてよい)。
長さ の列はちょうど 個あるので、 個の相異なる列 の長さの和は、短い列から順に使い切ったときが最小になる。長さ の列は合わせて
個しかないので、どう選んでも長さの和は少なくとも
である(長さ 以下の列をすべて使い、残る 個は長さ 以上)。より正確には、相異なる 個の列の長さを小さい順に とすると、長さ 未満の列は 個しかないので が成り立ち、これを足し合わせると上の値になる。
和の計算. とおくと
よって 。したがって
上界(達成). の元を と並べ、長さ 以下の 個の列と長さ の列 を と並べ、(それ以外の入力では未定義)と定める。 は有限の表で与えられるので計算可能であり、 を実現する。
検算. : の 個に長さ のプログラムを割り当てて和は 。式は 。: 長さ で和 、式は 。
したがって最小値は 。
別解
を固定する。 は関数なので、各 に対して は高々 1 つの値しかとらない。したがって異なる に対し、最短の記述 , は異なる列でなければならない。つまり は から への単射であり、 は互いに異なる 個の列の長さの和以上である。
長さ の列は 個ある。長さの和を最小にするには、短い列から順に使えばよい。長さ の列は合計 個なので、残り 1 個は長さ の列を使う。よって下界は
より で 。下界は 。
達成可能性: の列を長さ順・辞書順に並べ、先頭から 個を とする。 の列も辞書順に とし、(それ以外では未定義)と定める。これは有限の表なので計算可能な部分関数であり、 となる。よって最小値は下界に一致する。
検算: では に と を割り当てて和は 、公式 。 では長さ で和 、公式 。一致する。