計算理論・ラムダ計算の問題
変数のブール関数とは写像 のこととする。入力 をもつ基底 上のブール回路を次のように定める。
- 回路は有向非巡回グラフで、入力ノード と、いくつかのゲートからなる(定数の入力ノードはもたない)。
- 各ゲートは 入力の任意のブール関数 (全 個のどれでもよい)を計算し、その つの入力はそれより前にある入力ノードまたはゲートの出力である( つの入力が同じノードでもよい)。
- 回路のノード(入力ノードでもゲートでもよい)を つ選んで出力とし、そのノードが計算する関数を回路が計算する関数とする。
- 回路の大きさはゲートの個数とする。
変数のブール関数 に対し、 を計算する回路の大きさの最小値を とする。 を満たす 変数のブール関数 の個数を求めよ。
この問題で使うもの
- 小さな回路で計算できる関数(説明と入口の問題)
この問題を解けるようになるまで(31 技能)
読み込み中…
右端(太枠)がこの問題で使う技能です。左へドラッグすると、さらに前の前提をさかのぼれます。技能を押すと、そこまでの道筋が光ります。
一覧で見る(前提が先)
- 樹形図で数え上げる
- 積の法則と和の法則
- 和の法則・積の法則と樹形図
- 順列・円順列・重複順列
- 組合せ
- 確率の定義と和事象・余事象
- 包除原理
- 同じものを含む順列・重複組合せ
- 一般の包除原理
- 約数の見つけ方
- 最大公約数と最小公倍数
- 素因数分解と約数の個数
- 最大公約数と最小公倍数
- 分数のたし算・ひき算
- 小数の四則計算
- 正負の数の加法・減法
- 分数のかけ算・わり算
- 四則の混じった計算の順序
- 正負の数の乗除・累乗と四則混合
- 分配法則を使った計算のくふう
- 文字式の計算(同類項・分配法則)
- 乗法公式による展開
- 因数分解
- 文字式で表した整数の性質
- 余りによる整数の分類
- 合同式
- 群の位数と元の位数
- 置換の巡回置換分解と位数
- バーンサイドの補題
- 条件つきブール関数の数え上げ
- 小さな回路で計算できる関数
ヒント
行き詰まったら、上から順に 1 つずつ開いてください。
ヒント 1
高々 2 変数に依存する関数(ゲート 1 個で足りる)と、3 変数すべてに依存する関数に分けて数えよう。
ヒント 2
3 変数すべてに依存する関数は、ゲート 2 個では ()の形に限られる。 での制限がそれぞれ のどれになるかを調べよう。
ヒント 3
高々 2 変数に依存する関数は 個ある。各 について、上の形で 3 変数すべてに依存するものは 50 個ある。異なる どうしの重なりを ANF( 次・ 次の項)で判定しよう。
答えと解説
答えを見る
どこでつまずきましたか?(選ぶと、戻る場所を案内します)
解説を読む
方針. 大きさ 以下の回路で計算できる関数を、本質的に依存する変数の個数で分けて数える。 を と同一視し、関数の区別には代数標準形(ANF)を使う。
(1) 高々 変数にしか依存しない関数.
入力ノード を出力とすれば が得られる。ゲートを 個使えば、任意の と任意の 入力関数 について が得られる。これで定数・・ もすべて得られる。逆に、ゲート 個の回路が計算する関数は高々 変数にしか依存しない。したがって、ちょうど 変数に本質的に依存する 変数関数 (以下、非退化という)の個数を求めればよい。それは 個で、内訳は
- AND 型 個:
- XOR 型 個:
である。よってこの種類の関数は
あり、いずれも である。
(2) 変数すべてに依存し、ゲート 個で計算できる関数.
出力が 個目のゲート である場合だけを考えればよい。 の入力の組み合わせで分けると次のとおり。
- が を使わない場合、または入力が の場合:高々 変数に依存する。
- 入力が と ()の場合:高々 変数に依存する。
- 入力が と ()の場合: となる。
この形の関数で 変数すべてに依存するものの集合を とする。 変数すべてに依存するには が非退化であることが必要である。、 と書くと、 であり、条件は かつ「 がともに定数ではない」ことである。制限の組 は次の 種類になる。
- 型 I:( は非退化)。 で、 個。
- 型 II:一方が定数で他方が非退化。( は非退化)で、 個。
よって である。次に、 の重なりを ANF の形で調べる。
- 型 I で が XOR 型: の 個。これはすべての に属する。
- 型 I で が AND 型:ANF の 次の部分が だけ、 次の項はない。ほかの形と一致しないので、 固有の関数が 個ある。
- 型 II で が XOR 型: 次の部分が で、 が決まる。 固有の関数が 個ある。
- 型 II で 、:( つのリテラルの積)となる。これは について対称なので、すべての に属し、 個ある。
- 型 II で 、:( はリテラル)となり、重みは または である。たとえば を考える。 について制限すると と になり、どちらも定数でなく互いの否定でもない。したがって に属さない( についても同様)。よって 固有の関数が 個ある。
各 の内訳は で、上の計算と合う。和集合の大きさは
(3) 合計. と を合わせて
別解
となる を、ゲート数ごとに数える。
ゲート数 0〜1。 出力が入力ノードなら の 個。ゲートが 個のとき、( も可)で表せるのは、高々 変数に依存する関数すべてである。その個数は次のとおり。
- 定数: 個
- ちょうど 変数に依存する関数 : 個
- ちょうど 変数に依存する関数: 変数の組ごとに 個で、組は 通りなので 個
合計 個。これは の関数の個数である。
ゲート数 2。 出力は第 2 ゲート の出力としてよい。 の入力は入力ノードか第 1 ゲート である。 の入力が両方入力ノードなら の関数になる。 も 変数の関数 になるので同様である。よって新しい関数は の形に限る。 なら高々 変数に依存するので既出である。したがって とし、 変数すべてに依存する関数を数える。
このとき は の両方に依存し、 も両引数に依存する。両方に依存する関数は各 個(AND 型 個と XOR 型 個)である。 と は を取り替えれば同じ を与えるので、 は 類(AND 型 類と XOR 型 類)に分ける。 の類を決めると の 通りは異なる を与える。よって各 について 個で、その型は次のとおり。
- パリティ とその否定: 個
- とその否定の形( はリテラル): 個
- とその否定の形: 個
- 3 リテラルの積 とその否定: 個
- とその否定の形: 個
をまたぐ重複。 パリティ( 個)と 3 リテラルの積およびその否定( 個)は、どの でも現れる。残りの型は ごとに別の関数である。たとえば で に制限した関数が、定数または互いに補関係にある関数の組にならないことから確かめられる。したがって次のようになる。
- に依らない共通の関数: 個
- ごとに固有の関数: 個ずつ、 通りで 個
変数すべてに依存する新しい関数は 個である。
合計。 。