計算理論・ラムダ計算の問題
変数 を用いる論理式を、次の規則で帰納的に定める。
- 各 は論理式である。
- が論理式ならば、、、 も論理式である。
定数記号 は用いない。論理式に を代入すると、写像 が定まる。現れない変数には依存しない関数とみなす。
各変数 の出現回数がどれも高々 回である論理式を、リードワンス論理式とよぶ。写像 のうち、あるリードワンス論理式で表されるものの個数を求めよ。
この問題で使うもの
- 条件つきブール関数の数え上げ(説明と入口の問題)
この問題を解けるようになるまで(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 変数の「分解可能な」関数の個数として知られる値と整合している。