計算理論・ラムダ計算の問題
とし、 を空列 を含む 上の有限列全体、 を列 の長さ、 を長さ の列全体とする。集合 が接頭語自由であるとは、 のどの元も の別の元の真の接頭語になっていないことをいう。
部分計算可能関数 で、定義域 が接頭語自由であるものを考える。 に対し
と定める(そのような がなければ とする)。
は次の条件を満たすとする。
(条件)長さ 以下のすべての列 ( も含む)に対して である。
この条件を満たすような すべてを考えるとき、 を満たす の個数としてありうる最小値を求めよ。
この問題で使うもの
- 記述複雑性とカウンティング論法(説明と入口の問題)
- 等差・等比数列の和と Σ(説明と入口の問題)
この問題を解けるようになるまで(11 技能)
読み込み中…
右端(太枠)がこの問題で使う技能です。左へドラッグすると、さらに前の前提をさかのぼれます。技能を押すと、そこまでの道筋が光ります。
ヒント
行き詰まったら、上から順に 1 つずつ開いてください。
ヒント 1
となる の個数の最大値を求め、全体 から引けばよい。定義域が接頭語自由であることから、どんな不等式が使えるかを考えよう。
ヒント 2
接頭語自由な集合 に対してクラフトの不等式 が成り立つ。長さ 以下の列の記述が、この「予算 」のうちどれだけを消費するかを計算しよう。
ヒント 3
短い列の記述が消費する量は少なくとも である。残りの予算は で、長さ 以下の記述は つあたり 以上を消費する。上限が実際に達成できるかどうかも確かめよう。
答えと解説
答えを見る
どこでつまずきましたか?(選ぶと、戻る場所を案内します)
解説を読む
方針. 接頭語自由な集合に対するクラフトの不等式を使って、 となる の個数の上限を求める。そのうえで、上限が実際に達成されることを示す。
クラフトの不等式. が接頭語自由な有限集合なら が成り立つ。
証明: とする。各 に、 で始まる長さ の列全体( 個)を対応させる。 は接頭語自由なので、異なる に対応するこれらの集合は互いに交わらない。どれも に含まれるから となる。
上限. 長さ 以下の各 について、 かつ となる を つ選ぶ。また、 を満たす各 について、 かつ となる を つ選ぶ。そのような の個数を とする。
は関数なので、出力が異なれば選んだ入力も異なる。出力となる列 と も長さが違うので互いに異なる。したがって選んだ入力はすべて互いに異なり、それらの集合 は の有限部分集合なので接頭語自由である。クラフトの不等式より
長さ の列は 個あるので、第 項は
以上である。第 項は 以上である。よって
となり、 を得る。
達成. 次の長さの符号語を考える。
- 長さ を 個、長さ を 個、長さ を 個、長さ を 個、長さ を 個(短い列 用)
- 長さ をさらに 個( の列用)
クラフト和は
である。クラフトの不等式の逆(長さの短い順に、辞書式で最小の使える列を割り当てていく構成)により、これらの長さをもつ接頭語自由な符号語の集合が存在する。
各 ()に長さ の符号語を、 個の に長さ の符号語を割り当てて を定義し、ほかの入力では未定義とする。定義域は有限なので は計算可能であり、条件も満たす。このとき となる はちょうど 個である。
結論. ( を含む)となる の個数の最小値は
である。
別解
定義域 は接頭語自由なので Kraft の不等式 が成り立つ。
1. 長さ の各列 には、 となる で を満たすものが必要である。異なる には異なる が対応する。 1 個あたりの Kraft 和への寄与は、 のとき最小で である。
2. これらの 全体の寄与の最小値は である。
3. 残りの Kraft 和は である。 は長さ 4 以下の列ではないので、 とするには ごとに別の符号語が必要で、その長さは 8 以下である。1 個あたりの寄与は 以上である。したがって となる の個数は高々 である。
4. 達成可能性を確かめる。符号語の長さを、長さ 2 が 1 個、4 が 2 個、6 が 4 個、8 が 個、10 が 16 個とする。Kraft 和は なので、この長さをもつ接頭語自由な有限集合が存在する。定義域が有限なので は計算可能である。これらを (長さ 4 以下の 31 個)と、 の 132 個の に割り当てる。
5. よって となる の最大個数は 132 であり、 となる個数の最小値は である。