計算理論・ラムダ計算の問題
とし、 を空列 を含む 上の有限列全体、 を列 の長さ、 を長さ の列全体とする。
部分関数 (定義されない入力があってもよい)を記述方式とよび、 に対して
と定める( となる がなければ とする)。
記述方式 をいろいろに選ぶとき、 をみたす の個数のとりうる最大値を求めよ。
この問題で使うもの
- 記述複雑性とカウンティング論法(説明と入口の問題)
この問題を解けるようになるまで(11 技能)
読み込み中…
右端(太枠)がこの問題で使う技能です。左へドラッグすると、さらに前の前提をさかのぼれます。技能を押すと、そこまでの道筋が光ります。
ヒント
行き詰まったら、上から順に 1 つずつ開いてください。
ヒント 1
技能「記述複雑性とカウンティング論法」を使います。 となる には、長さ 以下の記述 が少なくとも 1 つ対応することに注目しましょう。
ヒント 2
長さ 以下の 列の個数は です。1 つの記述 が表せる列 は高々 1 つです。
ヒント 3
長さ 以下の列は 個なので、 となる は 個以下です。この上限を実際に達成する が作れるかを、 の元の個数と比べて確かめましょう。
答えと解説
答えを見る
どこでつまずきましたか?(選ぶと、戻る場所を案内します)
解説を読む
手順 1: 短い記述の個数を数える。
とは、長さ 以下のある列 で となるものがあることである。長さ 以下の列は、長さ のものがそれぞれ 個あるので、等比数列の和より
個である。
手順 2: カウンティング論法で上限を出す。
は関数なので、1 つの に対して は高々 1 つの列である。したがって となる は、長さ 以下の 個の列 の像 のどれかであり、その個数はどんな についても 以下である。
手順 3: 上限を達成する を作る。
は 個の元をもち、 なので、長さ 以下の 個の列に の相異なる 個の元を 1 つずつ対応させる を定められる(それ以外の入力では未定義とする)。これは有限個の対応表で与えられるので計算可能でもある。この では、対応させた 個の について となる。
手順 4: まとめる。
上限 が達成されるので、求める最大値は である。
別解
となるのは、長さ 以下の列 で となるものがあるときである。長さ 以下の列は を含めて 個ある。
は(部分)関数なので、各 に対して は高々 つの列である。したがって の元の個数は高々 であり、 をみたす の個数も高々 。
は達成できる。長さ の列を 個選んで とし、長さ 以下の列 を全部並べて 、それ以外の入力では未定義とすれば、 となる。 には 個の列があるので 個選べる。
検算: 上限と達成例が一致するので最大値は 。