計算理論・ラムダ計算の問題
入力変数を とするブール回路を考える。ゲートとしては 2 入力のブール関数 をすべて(16 個。定数関数や片方の入力だけによる関数も含む)使ってよく、各ゲートの 2 つの入力には入力変数 またはそれより前のゲートの出力を(同じものを 2 回使うことも含めて)つなぐ。定数は入力として与えられない。回路の出力は、入力変数またはゲートのどれか 1 つの値とし、回路の大きさはゲートの個数とする。
ブール関数 のうち、大きさ 以下の回路で計算できるものの個数を求めよ。
この問題で使うもの
- 小さな回路で計算できる関数(説明と入口の問題)
- 条件つきブール関数の数え上げ(説明と入口の問題)
この問題を解けるようになるまで(31 技能)
読み込み中…
右端(太枠)がこの問題で使う技能です。左へドラッグすると、さらに前の前提をさかのぼれます。技能を押すと、そこまでの道筋が光ります。
一覧で見る(前提が先)
- 樹形図で数え上げる
- 積の法則と和の法則
- 和の法則・積の法則と樹形図
- 順列・円順列・重複順列
- 組合せ
- 確率の定義と和事象・余事象
- 包除原理
- 同じものを含む順列・重複組合せ
- 一般の包除原理
- 約数の見つけ方
- 最大公約数と最小公倍数
- 素因数分解と約数の個数
- 最大公約数と最小公倍数
- 分数のたし算・ひき算
- 小数の四則計算
- 正負の数の加法・減法
- 分数のかけ算・わり算
- 四則の混じった計算の順序
- 正負の数の乗除・累乗と四則混合
- 分配法則を使った計算のくふう
- 文字式の計算(同類項・分配法則)
- 乗法公式による展開
- 因数分解
- 文字式で表した整数の性質
- 余りによる整数の分類
- 合同式
- 群の位数と元の位数
- 置換の巡回置換分解と位数
- バーンサイドの補題
- 条件つきブール関数の数え上げ
- 小さな回路で計算できる関数
ヒント
行き詰まったら、上から順に 1 つずつ開いてください。
ヒント 1
が本質的に依存する変数の個数で場合分けする。2 変数以下に依存する関数はゲート 1 個で作れる。3 変数すべてに依存する関数を大きさ 2 の回路で作るとき、回路の形がどう制限されるかを考える。
ヒント 2
3 変数に依存する場合は の形で、 はともに 2 引数に本質的に依存する 10 個の関数のどれか。この 10 個は AND 型 8 個と XOR 型 2 個に分かれ、補関数で閉じていることを使って重複を減らす。
ヒント 3
2 変数以下に依存する関数は 個。3 変数に依存するものは、 が XOR 型のとき と の形、 が AND 型のとき の種類で 3 通りの形に分かれる。異なる形の関数が重ならないことは代数標準形の次数や真になる点の個数で確かめる。
答えと解説
答えを見る
どこでつまずきましたか?(選ぶと、戻る場所を案内します)
解説を読む
が本質的に依存する変数の個数で分けて数える。
(1) 本質的に依存する変数が 2 個以下の関数. これらはすべて大きさ 以下で計算できる。実際、ゲートとして定数関数や も使えるので、 に適当な 2 入力ゲートを 1 つ当てればよい。個数は、2 変数の関数 16 個のうち、定数 2 個、1 変数に本質的に依存するもの の 4 個を除いた 個が 2 変数に本質的に依存することから
個。
(2) 3 変数すべてに本質的に依存する関数. ゲート 1 個では入力が 2 つなので不可能で、ちょうど 2 個必要。出力ゲート は 3 変数すべてに依存しなければならないので、 の入力は 1 つ目のゲート と入力変数 であり、 の入力は残りの 2 変数 ()である。よって
で、 はともに 2 引数に本質的に依存する 2 入力関数(10 個のうちのどれか)である。この 10 個は、AND 型 8 個 と XOR 型 2 個 からなり、補関数をとる操作で閉じている。以下、 はリテラル(変数またはその否定)を表す。
が XOR 型のとき: で、 は を補関数に取り替えれば吸収できるので 。
- が XOR 型: の 個( によらない)
- が AND 型(8 個): 。代数標準形(ANF)の 2 次の項がちょうど なので が決まり、 個はすべて異なる
計 個。これらの次数(ANF の次数)は または で、2 次の項は高々 1 つ。
が AND 型のとき: は の補関数で吸収できるので 。
- : 。リテラルの符号 通りと で 個( によらない)
- : 。 を偽にする の値でだけ が定数になる( を偽にしても が残る)ので が から決まり、さらに残りの部分から符号と も決まる。 個
- : 。ANF の 2 次の項は でちょうど 2 つあり、共通の変数として が決まる。 個
最初の 2 種類は ANF に を含む(次数 )が、真になる点の個数が または 個と または 個で異なる。3 種類目は次数 で 2 次の項が 2 つ。よって互いに重ならず、計 個。さらに XOR 型の 個とも、次数と 2 次の項の個数で区別できるので重ならない。
どれも 3 変数すべてに本質的に依存しているので (1) とも重ならない。したがって (2) の個数は 。
合計.
別解
大きさ 2 以下の回路で計算できる関数を、本質的に依存する変数の個数で分けて数える。
(1) 大きさ 1 以下(ゲート 0 個または 1 個)。入力変数そのもの、または 1 個のゲート の出力。定数 が 2 個。1 変数関数()が 個。ちょうど 2 つの変数 に本質的に依存する 2 変数関数は、16 個の 2 入力関数のうち定数 2 個と片方だけの関数 4 個を除いた 10 個で、変数の組が 3 通りあるので 30 個。合計 個。3 変数以下に依存するどんな 2 変数以下の関数も 1 ゲートで作れるので、これで 2 変数以下の関数はすべて尽くされる。
(2) 大きさ 2 で、3 つの変数すべてに本質的に依存するもの。ゲート の出力と別のゲート を考える。。3 変数すべてに依存するには が の両方に本質的に依存し、( は残りの変数)の形でなければならない。 は、 のときの関数 と のときの関数 が の元で、 かつ両方定数ではない場合。 は で分類して 5 類(4 つの符号違いの AND/OR 型と XOR 型)。
AND/OR 型(、 はリテラル)の 4 類:
- リテラル 3 つの AND: 8 個、リテラル 3 つの OR: 8 個
- 型: 各 で 個、計 24 個
- 型: 同様に 24 個
- またはその否定: 各 で 8 個、計 24 個(ANF の 2 次項が異なるので重ならない)
XOR 型:
- または 型: 各 で 4 個、計 12 個
- または 型: 12 個
- パリティ とその否定: 2 個( の選び方によらず同じ)
これらは互いに異なる(形が異なる、または非対称な形で が一意に決まる)ので、 個。
(3) 合計 個。
検算: (1) は 2 変数以下の関数の個数 を、 から数え直して一致。(2) は 3 変数に依存する関数が 114 個で、3 変数関数全体 256 個に収まり、パリティ(次数 1)、2 次の ANF をもつ型、AND/OR 型を ANF の形で区別できることを確認した。