単元一覧 › 大学院数学 計算理論・ラムダ計算

計算理論・ラムダ計算の問題

難易度 3大学院入試の専門科目の標準レベル大学院数学 計算理論・ラムダ計算

変数 を用いる論理式を、次の規則で帰納的に定める。

  • 各 は論理式である。
  • が論理式ならば、、、 も論理式である。

定数記号 は用いない。論理式に を代入すると、写像 が定まる。現れない変数には依存しない関数とみなす。

各変数 の出現回数がどれも高々 回である論理式を、リードワンス論理式とよぶ。写像 のうち、あるリードワンス論理式で表されるものの個数を求めよ。

この問題で使うもの

この問題を解けるようになるまで(30 技能)

ヒント

行き詰まったら、上から順に 1 つずつ開いてください。

ヒント 1

否定を葉まで押し下げ、同種のゲートをまとめた「標準木」を考えます。そのうえで、異なる標準木が異なる関数を表すこと、使われる変数にはすべて本質的に依存することを確かめましょう。

ヒント 2

根が の標準木の個数を とします。根の子への葉の分割を考えると、各子はリテラル(2 通り)か根が の木( 通り)なので、 が分割の和として漸化的に求まります。

ヒント 3

、 となるので、ちょうど 変数を使う関数はそれぞれ 個です。あとは を分割の型 ごとに数え、使う変数の選び方を掛けて合計します。

答えと解説

答えを見る
結果を記録する(このブラウザにだけ保存されます):
解説を読む

1. 標準形への変形

ド・モルガンの法則を使うと、否定はすべて葉(変数)まで押し下げられる。変数の出現回数は変わらない。さらに の結合律・交換律を使い、同じ種類のゲートが親子で続くときはまとめる。すると任意のリードワンス論理式は、次の形の標準木で表せる。

  • 葉は互いに異なる変数のリテラル( か )である。
  • 内部節点は か で、子は 個以上、子の順序は区別しない。
  • 親子の内部節点は種類が交互になる。

2. 使われる変数にはすべて本質的に依存する

リードワンス論理式は、そこに現れる変数すべてに本質的に依存する(したがって定数関数ではない)。これは帰納法で示せる。

  • では、 と の変数は互いに素で、 は定数でない。そこで となるように の変数を固定すれば、 の変数への依存がそのまま残る。
  • のときは となるように固定すればよい。 のときは明らかである。

3. 標準木は関数から一意に復元できる

異なる標準木は異なる関数を表すことを示す。

*(a) 2 変数の最小共通祖先の種類が から決まる。* 変数 が葉にあるとする。他の変数を固定して の両方が本質的になるようにすると、 の制限は次の形になる。

ここで は の葉の最小共通祖先のゲートである。理由は次のとおり。最小共通祖先の両側の部分木は か定数に退化し、他の兄弟は定数になる。 がともに本質的なら、兄弟の定数は中立元でなければならない。また、そのような固定は 2. の議論により存在する。 型の関数は値 を 点でとり、 型は 点でとるので、両者は区別できる。よって の種類は だけから決まる。

*(b) 木の構造が決まる。* (a) により、各変数対について「最小共通祖先が か か」が分かる。根が なら、根の子の部分木の変数集合は、「 で結ばれる」という関係のグラフの連結成分と一致する(異なる子にまたがる対はすべて で結ばれるからである)。これを再帰的に繰り返せば木の形が決まる。

*(c) リテラルの符号が決まる。* 葉の符号は、 がその変数について単調増加か単調減少かで決まる。

したがって、ちょうど 個の変数を使うリードワンス関数の個数は、それらの変数をラベルとする標準木の個数に等しい。

4. 標準木の数え上げ

個のラベル付き葉をもつ標準木のうち、根が のものの個数を とする。 を入れ替えれば根が のものも 個ある。

根が のとき、各子は「リテラル」( 通り)か「根が の木」( 通り)である。そこで 、 とおくと、

  • は分割の型ごとに数える。
  • :
  • : 通り
  • : 通り
  • : 通り

よって 。

ちょうど 変数を使う関数の個数を とすると、

5. 合計

2. により、使う変数の集合が異なれば関数も異なる。また定数関数は表せない。よって求める個数は

別解

リードワンス論理式で表される関数のうち、ちょうど 個の指定した変数すべてに本質的に依存するものの個数を とする。定数記号がないので、少なくとも 1 つの変数に依存する関数だけが対象になる。

の求め方。 のとき、リードワンス関数は最上位が ∧ 型か ∨ 型のどちらかである。否定を取ると ∧ 型と ∨ 型が入れ替わるので、∧ 型は 個になる。

∧ 型の関数は、変数を互いに素な 2 個以上のブロックに分け、各ブロックの関数の積で表される。各ブロックの関数は、最上位が ∧ 型でないものでなければならない。そのようなブロック関数の個数を ()とおく。 では ()である。

  • 、。
  • : 分割は のみで、 個。よって 、。これは 2 変数に依存する 14 個の関数から XOR と XNOR を除いた数と一致する。
  • : 分割 が 3 通りで 、分割 は 。合計 32 個なので 、。
  • : 分割 は 4 通りで 。分割 は 3 通りで 。分割 は 6 通りで 。分割 は 。合計 416 個なので 。

全体の個数。 依存する変数の部分集合ごとに数える。

検算。 は直接数えた結果と一致する。また、 は 3 変数の「分解可能な」関数の個数として知られる値と整合している。

この問題の確認

AI が作成した問題です。公開前に次の確認を行いました。確認の方法について

間違いを報告する

この問題の誤り・分かりにくい点・難易度や学年のずれを知らせる
どこについての報告ですか

報告の内容と問題の番号を保存します。名前やメールアドレスは保存しません。

関連する問題