技能一覧 › 大学院数学 計算理論・ラムダ計算

小さな回路で計算できる関数

2 入力ゲートからなるブール回路について、大きさ の回路で計算できる関数を、使う変数の個数と 2 変数関数の種類(本質的に 2 変数に依存する 10 個など)で分類して数え上げ、重複を除いて大きさ 以下で計算できる関数の個数を求められる

前提

この技能までの道筋(30 技能)
算数中学高校大学大学院

読み込み中…

右端(太枠)がこの技能です。左へドラッグすると、さらに前の前提をさかのぼれます。技能を押すと、そこまでの道筋が光ります。

一覧で見る(前提が先)
  1. 樹形図で数え上げる (算数 場合の数)
  2. 積の法則と和の法則 (算数 場合の数)
  3. 和の法則・積の法則と樹形図 (数学A 場合の数と確率)
  4. 順列・円順列・重複順列 (数学A 場合の数と確率)
  5. 組合せ (数学A 場合の数と確率)
  6. 確率の定義と和事象・余事象 (数学A 場合の数と確率)
  7. 包除原理 (数学A 場合の数と確率)
  8. 同じものを含む順列・重複組合せ (数学A 場合の数と確率)
  9. 一般の包除原理 (大学数学 離散数学・組合せ論)
  10. 約数の見つけ方 (算数 整数の性質)
  11. 最大公約数と最小公倍数 (算数 整数の性質)
  12. 素因数分解と約数の個数 (算数 整数の性質)
  13. 最大公約数と最小公倍数 (数学A 整数の性質)
  14. 分数のたし算・ひき算 (算数 計算と数のきまり)
  15. 小数の四則計算 (算数 計算と数のきまり)
  16. 正負の数の加法・減法 (中学数学 数と式)
  17. 分数のかけ算・わり算 (算数 計算と数のきまり)
  18. 四則の混じった計算の順序 (算数 計算と数のきまり)
  19. 正負の数の乗除・累乗と四則混合 (中学数学 数と式)
  20. 分配法則を使った計算のくふう (算数 計算と数のきまり)
  21. 文字式の計算(同類項・分配法則) (中学数学 数と式)
  22. 乗法公式による展開 (中学数学 数と式)
  23. 因数分解 (中学数学 数と式)
  24. 文字式で表した整数の性質 (中学数学 数と式)
  25. 余りによる整数の分類 (数学A 整数の性質)
  26. 合同式 (数学A 整数の性質)
  27. 群の位数と元の位数 (大学数学 代数学)
  28. 置換の巡回置換分解と位数 (大学数学 代数学)
  29. バーンサイドの補題 (大学数学 離散数学・組合せ論)
  30. 条件つきブール関数の数え上げ (大学院数学 計算理論・ラムダ計算)

説明

ブール回路は、入力 から出発し、2 入力のゲートを次々につないで 1 つの出力を作る計算の模型で、使うゲートの個数を回路の大きさといいます。この技能では、大きさ のようなごく小さな回路で計算できる 変数ブール関数を、「実際に依存する変数の個数」と「2 変数関数の種類」で分類して数え、重複を取り除いて「大きさ 以下で計算できる関数の個数」を求めます。これは、ほとんどの関数が小さな回路では計算できないという回路計算量の数え上げ論法の、最も基本的な練習になります。

なぜそうしてよいのか

回路のモデルを定めます。ノードは入力 とゲートで、各ゲートは の任意の関数( 種)を、それより前にあるノード 2 つ(同じノードを 2 度選んでもよい)に施します。出力はどれか 1 つのノードで、大きさ 0 の回路は入力をそのまま出力するだけです。数えたいのは回路の個数ではなく、回路が計算する関数 の個数なので、同じ関数を計算する回路をまとめて 1 つと数える必要があります。そこで、関数が「本質的に依存する」変数(その変数の値だけを変えると出力が変わる入力があるもの)の個数で分類すると、重複を見通しよく除けます。

2 変数関数 の 16 個を分類しておきます。 に依存しない関数は だけの関数で 個、 に依存しないものも 4 個、どちらにも依存しないもの(定数 )は 2 個なので、包除原理より両方に本質的に依存するものは 個です( 型の 4 個 、 型の 4 個、 とその否定)。残りの 6 個は定数 2 個と です。

すると大きさ 1 以下で計算できる関数は次のように完全に分類できます。大きさ 0 では の 個。大きさ 1 ではゲート 1 個 が出力で、 なら は の 1 変数関数(定数・・)にしかならず、 なら上の 16 個の分類から「定数」「1 変数のリテラル 」「 に本質的に依存する 10 個」のどれかになります。依存する変数の集合が異なる関数は異なる関数であり、同じ集合 に本質的に依存する 2 変数関数は 10 個しかないので( の形も を取りかえれば同じ 10 個に含まれる)、重複なく数えると、定数 2 個・リテラル 個( は大きさ 0 のものと同じ)・本質的 2 変数関数 個です。大きさ 2 では、出力ゲートがもう 1 つのゲート を使わなければ大きさ 1 の関数に戻り、 を 2 度使えば の 1 変数関数(定数・・)でやはり大きさ 1 で済むので、新しく現れるのは ( は本質的 2 変数)の形だけです。ただしこの形では、 と を同時に否定側に取りかえても同じ関数になり( の代わりに 、 の代わりに )、また のように の選び方を変えても同じ関数が出ることがあるので、重複の除去が数え上げの中心になります。

手順

  1. 回路のモデルを確認する:ゲートは 16 種の 2 変数関数のどれでもよいか、同じノードを 2 度入力にしてよいか、定数入力があるか

  2. 2 変数関数 16 個を「定数 2 個」「1 変数のリテラル 4 個」「本質的に 2 変数に依存する 個」に分ける

  3. 大きさ の回路が計算できる関数を、本質的に依存する変数の集合ごとに分類する(大きさ 0 は 、大きさ 1 は定数・リテラル ・ に本質的に依存する 10 個)

  4. 変数の集合ごとに個数を数えて足す:大きさ 1 以下なら

  5. 大きさ 2 を含めるときは、新しい形 だけを追加し、 を否定で取りかえた組や の選び方の違いで同じ関数が重複していないかを確かめてから足す

例題

入力 をもつブール回路を考える(定数の入力はない)。各ゲートは の 16 個の関数のいずれかを、それより前にあるノード(入力または前のゲート)2 つに施す。2 つは同じノードでもよい。出力はどれか 1 つのノードとし、回路の大きさはゲートの個数とする。大きさ 1 以下の回路で計算できる関数 の個数を求めよ。

例題の解答

【手順 1】モデルの確認:ゲートは 16 種すべて使え、同じノードを 2 度入力にしてよく、定数入力はない。

【手順 2】2 変数関数 16 個は、定数 2 個、リテラル 4 個()、本質的に 2 変数に依存する 個に分かれる。

【手順 3】大きさ 0 で計算できるのは 。大きさ 1 ではゲート が出力で、 なら定数か か 、 なら定数・リテラル・ に本質的に依存する関数のいずれか。よって計算できる関数を依存する変数の集合で分けると
- 依存する変数なし(定数): の 個
- 1 変数に依存:()の 個( は大きさ 0 のものと同じ関数なので 1 回だけ数える)
- 2 変数に依存:組 は 通りで、それぞれ 10 個

3 変数すべてに依存する関数は、ゲート 1 個では入力が 2 つしかないので現れない。

【手順 4】依存する変数の集合が違えば関数は異なるので、重複なく

答え:

よくある誤り

この説明は AI が書き、別の AI が例題を独立に解いて答えを確かめ、説明を一歩ずつ査読しました。

入口の問題

この技能を使う問題