この記事は,
旧ブログから移植された記事です. よって, その内容として,
旧ブログに依存した文脈が含まれている可能性があります. 予めご了承下さい.
ブール代数は古典論理における命題論理と密接に関連している.
結論からいえば, 両者の違いは歴史的な背景ぐらいであり, 殆どの場合は同等の理論であるということができる.
ブール代数はその応用として論理回路の構築に直接役立つことから, 計算機科学, とくにハードウェアの分野において重宝される代数系の 1 つである.
ブール代数の公理とその定理
次に示すのはブール代数の公理系である. 公理系に関する詳細は証明理論 (TODO) の冒頭を参照のこと.
半順序集合 (B,∨,∧,′,0,1)
が可補分配束ならば,
(B,∨,∧,′,0,1) はブール代数である.
すなわち, x,y,z∈B に対して, 次のすべての公理を満たした (B,∨,∧,′,0,1) はブール代数である.
- 可換律: x∧y=y∧x,x∨y=y∨x
- 分配律:
(x∨y)∧z=(x∧z)∨(y∧z),(x∧y)∨z=(x∨z)∧(y∨z)
- 同一律: ∀x∈L に対して x∧1=x,x∨0=x.
ここで 1 は最大限, 単位元である. 0 は最小限, 零元である.
- 補元律:
∃x′∈L s.t. ∀x∈L,x∨x′=1,x∧x′=0
また, この 1,0 からのみ成る集合をブール領域, ブール代数の下に書かれた式をブール式,
n∈N 個のブール領域の引数をとり, 1 個のブール領域の値となる関数 f:Bn→B をブール関数という.
例えば, 2 変数ブール関数 f(x1,x2) では x1,x2 がそれぞれ 1,0 のいずれかとなるので,
24=16 通りの 2 変数ブール式が存在することとなる.
以下, 演算の優先順序は左結合性で ′,∧,∨ の順とする. ただし, 括弧内の演算はより優先される.
さてブール代数の公理における乗法 ∧ と加法 ∨, および 1,0 をそれぞれ入れ替えると,
再びブール代数の公理である.
これは双対の原理という公理である.
ブール代数で成立する文/式は, そこに現れるすべての ∨,∧,0,1 をそれぞれ ∧,∨,1,0
で置き換えても成立する.
これらの公理から補元の一意性, べき等律,
有界律, 吸収律, 結合律, 対合律,
ド・モルガンの法則, シャノンの展開定理が導出可能である.
以下 x,y,z∈B とする.
2 つの x の補元 x1′,x2′ を仮定する.
x1′========x1′∧1x1′∧(x∨x2′)(x1′∧x)∨(x1′∧x2′)0∨(x1′∧x2′)(x∧x2′)∨(x1′∧x2′)x2′∧(x∨x1′)x2′∧1x2′(∵公理3:同一律)(∵公理4:補元律)(∵公理2:分配律)(∵公理4:補元律)(∵公理4:補元律)(∵公理2:分配律)(∵公理4:補元律)(∵公理3:同一律)
より x の補元が一意であることは明らか.
以下が成り立つ.
- x∧x⇔x
- x∨x⇔x
以下が成り立つ.
- x∨1=1
- x∧0=0
x∨1x∧0========(x∨1)∧1(x∨1)(x∨x′)x∨(1∧x′)x∨x′1x∧x∧x′x∧x′0(∵公理3:同一律)(∵公理4:補元律)(∵公理2:分配律)(∵公理1,公理3:可換律,同一律)(∵公理4:補元律)(∵定理:べき等律)(∵公理4:補元律)
以下が成り立つ.
x∨x∧y=x∧(x∨y)=x
x∨x∧yx∧(x∨y)========(x∧1)∨(x∧y)x∧(1∨y)x∧1x(x∨0)(x∨y)(0∧y)∨xx∨0x(∵公理3:同一律)(∵公理2:分配律)(∵公理1:可換律,定理:有界律)(∵公理3:同一律)(∵公理3:同一律)(∵公理2:分配律)(∵公理1:可換律,定理:有界律)(∵公理3:同一律)
以下が成り立つ.
x∨(y∨z)=(x∨y)∨z
A=x∨(y∨z),B=(x∨y)∨z とおく. このとき,
x∧Ax∧B======x∧(x∨(y∨z))xx∧((x∨y)∨z)x∧(x∨y)∨x∧zx∨x∧zx(∵定理:吸収律)(∵公理2:分配律)(∵定理:吸収律)(∵定理:吸収律)
ゆえに x∧A=x∧B=x(L1)
また,
x′∧Ax′∧B==========x′∧(x∨(y∨z))x′∧x∨x′∧(y∨z)x′∧(y∨z)∨0x′∧(y∨z)x′∧((x∨y)∨z)x′∧(x∨y)∨x′∧z(x′∧x∨x′∧y)∨x′∧z(0∨x′∧y)∨x′∧zx′∧y∨x′∧zx′∧(y∨z)(∵公理2:分配律)(∵公理1,公理4:可換律,補元律)(∵公理3:同一律)(∵公理2:分配律)(∵公理2:分配律)(∵公理4:補元律)(∵公理3:同一律)(∵公理2:分配律)
ゆえに x′∧A=x′∧B=x′∧(y∨z)(L2)
従って,
A========A∧1A∧(x∨x′)A∧x∨A∧x′x∧A∨x′∧Ax∧B∨x′∧BB(x∨x′)B∧1B(∵公理3:同一律)(∵公理4:補元律)(∵公理2:分配律)(∵公理1:可換律)(∵, より)(∵公理2:分配律)(∵公理4:補元律)(∵公理3:同一律)
また, 双対の原理より x(y∧z)=(x∧y)∧z.
以下が成り立つ.
(x′)′=x
(x′)′========(x′)′∨0(x′)′∨x∧x′((x′)′∨x)((x′)′∨x′)(x∨(x′)′)∧1(x∨(x′)′)(x∨x′)x∨((x′)′∧x′)x∨0x(∵公理3:同一律)(∵公理4:補元律)(∵公理2:分配律)(∵公理1,公理4:可換律,補元律)(∵公理4:補元律)(∵公理2:分配律)(∵公理4:補元律)(∵公理3:同一律)
以下が成り立つ.
(x∨y)′=x′∧y′
x′∧y′ が (x∨y) の補元でなければならない.
すなわち, 公理4: 補元律より (x∨y)∨(x′∧y′)=1 および
(x∨y)∧(x′∧y′)=0
が同時に成り立つことを示せばよい.
(x∨y)∨(x′∧y′)(x∨y)∧(x′∧y′)===========((x∨y)∨x′)((x∨y)∨y′)(y∨(x∨x′))(x∨(y∨y′))(y∨1)(x∨1)1∧11(x′∧y′)∧(x∨y)((x′∧y′)∧x)∨((x′∧y′)∧y)(y′∧(x∧x′))∨(x′∧(y∧y′))(y′∨0)∨(x′∧1)0∨00(∵公理2:分配律)(∵公理1:可換律,定理:結合律)(∵公理4:補元律)(∵定理:有界律)(∵定理:べき等律)(∵公理1:可換律)(∵公理2:分配律)(∵公理1:可換律,定理:結合律)(∵公理4:補元律)(∵定理:有界律)(∵定理:べき等律)
また, 双対の原理より (x∧y)′=x′∨y′.
任意の n 変数ブール関数 f(x1,x2,⋯,xn) を x1 について, 次のように展開できる.
f(x1,x2,⋯,xn)===(x1′∨x1)∧f(x1,x2,⋯,xn)x1′∧f(x1,x2,⋯,xn)∨x1∧f(x1,x2,⋯,xn)x1′∧f(0,x2,⋯,xn)∨x1∧f(1,x2,⋯,xn)(∵公理4,公理3:補元律,同一律)(∵公理2:分配律)(∵以下に証明)
x1=0 のとき,
f(0,x2,⋯,xn)=1∧f(0,x2,⋯,xn)∨0∧f(1,x2,⋯,xn)=f(0,x2,⋯,xn)
x1=1 のとき,
f(1,x2,⋯,xn)=0∧f(0,x2,⋯,xn)∨1∧f(1,x2,⋯,xn)=f(1,x2,⋯,xn)
例として, f(x1,x2,x3)=x1∧x2∨x2∧x3∨x1∧x3 を x1 について展開すると,
f(x1,x2,x3)======x1∧x2∨x2∧x3∨x1∧x3(x1′∨x1)∧f(x1,x2,x3)x1′∧f(x1,x2,x3)∨x1∧f(x1,x2,x3)x1′∧f(0,x2,x3)∨x1∧f(1,x2,x3)x1′∧x2∧x3∨x1∧x2∨x2∧x3∨x3x1′∧x2∧x3∨x1∧x2∨x3(∵公理4,公理3:補元律,同一律)(∵公理2:分配律)(∵定理:シャノンの展開定理)(∵公理3:同一律)(∵公理1:可換律,定理:吸収律)
となる. また双対の原理より,
f(x1,x2,⋯,xn)===(x1∧x1′)∨f(x1,x2,⋯,xn)(x1∨f(x1,x2,⋯,xn))∧(x1′∨f(x1,x2,⋯,xn))(x1∨f(0,x2,⋯,xn))∧(x1′∨f(1,x2,⋯,xn))(∵公理4,公理3:補元律,同一律)(∵公理2:分配律)(∵上記証明の双対)
この展開をシャノン双対展開という.
標準形
異なる表現のなされたブール式が同値であるかを即座に断定することは, 一般的に困難であることが多い.
ここで, ブール式を一意に表す方法が決まっていれば, 即座に同値であるか判断がしやすく, 便利である.
ブール代数では主に 2 つの形式が決められており, その形式への変形を標準化, また正規化という.
以下, n 変数ブール関数 f(x1,x2,⋯,xn) において, x1,x2,⋯,xn を入力変数,
また入力変数およびその否定をリテラルという.
さらに n 個の入力変数に対し, k 番目のリテラル xkek (1≤k≤n) を次のように表す.
xkek={xkxk′(=xk1)(=xk0)ek=1 のときek=0 のとき
加法標準形, 主加法標準形
f(x1,x2,⋯,xn) を x1,x2 についてシャノン展開すると,
f(x1,x2,⋯,xn)=x1′∧x2′∧f(0,0,⋯,xn)∨x1′∧x2∧f(0,1,⋯,xn)∨x1∧x2′∧f(1,0,⋯,xn)∨x1∧x2∧f(1,1,⋯,xn)
となる. 従って, 全入力変数 x1,x2,⋯,xn についてシャノン展開すると,
f(x1,x2,⋯,xn)=x1′∧x2′∧⋯∧xn′∧f(0,0,⋯,0)∨x1′∧x2′∧⋯∧xn∧f(0,0,⋯,1)∨⋯∨x1∧x2∧⋯∧xn′∧f(1,1,⋯,0)∨x1∧x2∧⋯∧xn∧f(1,1,⋯,1)
となる (シャノンの定理より数学的帰納法により証明できるが, 省略).
これを以下のように定義する.
n 変数ブール関数 f(x1,x2,⋯,xn) のすべての入力変数 x1,x2,⋯,xn について,
シャノン展開した形式
f(x1,x2,⋯,xn)=(e1,e2,⋯,en)∈Bn⋁f(e1,e2,⋯,en)∧i=1⋀nxiei(1)
は f(x1,x2,⋯,xn) の最小項展開である.
なお, このときの項数は 2n となる.
これを踏まえ, 加法標準形および主加法標準形を導入する.
- 加法標準形 (disjunctive normal form: DNF) は, ブール式のリテラル, または 2 つ以上のリテラルの積の和のことをいう.
ここで, 2 つ以上のリテラルの積で同じ入力変数を 2 度以上含まない論理式を基本積, また標準項という.
基本積のうち, すべての入力変数を含むブール式を最小項という.
すなわち, 上記最小項展開の i=1⋀nxiei は最小項である.
- 主加法標準形 (principal disjunctive normal form: PDNF) は,
ブール関数を最小項展開した形式, すなわち最小項展開の形式である.
例えば, 否定論理積 ∣ を PDNF で表すとしよう.
否定論理和は 2 項演算子なので, その PDNF は 2 変数ブール関数を最小項展開した形となる.
f(x1,x2)=f(0,0)∧x1′∧x2′∨f(0,1)x1′∧x2∨f(1,0)∧x1∧x2′∨f(1,1)∧x1∧x2
便宜上, 2 項演算子 ∣ を最小項展開した形を f∣(x1,x2) で表すこととする.
あとは真理値表 2 の ∣ の列のとおりに f∣(x1,x2) の値を決めてやればよいので
f∣(x1,x2)==1∧x1′∧x2′∨1∧x1′∧x2∨1∧x1∧x2′∨0∧x1∧x2x1′∧x2′∨x1′∧x2∨x1∧x2′
従って, 否定論理積の PDNF は x1′∧x2′∨x1′∧x2∨x1∧x2′ となる.
この操作を振り返ると, 真理値表から PDNF を書くためには, 結果が 1 となっている入力変数の全パターンに対して,
元の入力変数の値が 1 ならそのまま, 0 ならその補元をとり,
それらすべての和を取ればよいことがわかる.
何故ならば, 結果が 0 となる部分は,
シャノンの展開定理の証明でも示したように消えてしまうからである.
同じようにして, 否定論理和, 排他的論理和も真理値表 2 の ↓,⊕ の列をみると,
1 となる入力のパターンから
f↓(x1,x2)f⊕(x1,x2)==x1′∧x2′x1∧x2′∨x1′∧x2
となる.
すなわち, 真理値表で表現できるブール式は PDNF で表せるということである.
次に, 任意の論理式から PDNF に変換することを考える.
結論からいうと, 次の手順に従えば PDNF へ機械的に変換できることが知られている.
- ブール式全体を基本項による積の和の形にする (分配律等を利用)
- 最小項でない基本項に対し, その基本項に含まれないすべてのリテラル xi について (xi∧xi′) を乗ずる
- 分配律等に従い展開して, 冗長な項を除去する
以下, PDNF で表されたブール式を f(x1,x2,⋯,xn)PDNF と書くこととする.
例えば, ブール式 f(x1,x2)=x1∧x2∧x1∨x2 を PDNF で表すとすると,
f(x1,x2)=======x1∧x2∧x1∨x2x1∧x1∧x2∨x2x1∧x2∨x2x1∧x2∨1∧x2x1∧x2∨(x1∨x1′)∧x2x1∧x2∨x1∧x2∨x1′∧x2x1∧x2∨x1′∧x2(∵公理1:可換律)(∵定理:べき等律)(∵公理3:同一律)(∵公理4:補元律)(∵公理2:分配律)(∵定理:べき等律)
従って f(x1,x2)PDNF=x1∧x2∨x1′∧x2 となる.
例としてもう 1 つ, f(x1,x2,x3)=x1∧x2′∧x3∨x1∧x3′∨x2∧x3′ としたときの PDNF は
f(x1,x2,x3)====x1∧x2′∧x3∨x∧x3′∨x2∧x3′x1∧x2′∧x3∨x1∧(x2∨x2′)∧x3′∨(x1∨x1′)∧x2∧x3′x1∧x2′∧x3∨x1∧x2∧x3′∨x1∧x2′∧x3′∨x1∧x2∧x3′∨x1′∧x2∧x3′x1∧x2′∧x3∨x1∧x2∧x3′∨x1∧x2′∧x3′∨x1′∧x2∧x3′(∵公理3,公理4:同一律,補元律)(∵公理2:分配律)(∵定理:べき等律)
従って f(x1,x2,x3)PDNF=x1∧x2′∧x3∨x1∧x2∧x3′∨x1∧x2′∧x3′∨x1′∧x2∧x3′ となる.
乗法標準形, 主乗法標準形
f(x1,x2,⋯,xn) を x1,x2 についてシャノン双対展開すると,
f(x1,x2,⋯,xn)=(x1∨x2∨f(0,0,⋯,xn))∧(x1∨x2′∨f(0,1,⋯,xn))∧(x1′∨x2∨f(1,0,⋯,xn))∧(x1′∨x2′∨f(1,1,⋯,xn))
となる. 従って, 全入力変数 x1,x2,⋯,xn についてシャノン双対展開すると,
f(x1,x2,⋯,xn)=(x1∨x2∨⋯∨xn∨f(0,0,⋯,0))∧(x1∨x2∨⋯∨xn′∨f(1,0,⋯,0))∧⋯∧(x1′∨x2′∨⋯xn∨f(1,1,⋯,0))∧(x1′∨x2′∨⋯xn′∨f(1,1,⋯,1))
となる (シャノンの定理より数学的帰納法により証明できるが, 省略).
これを以下のように定義する.
n 変数ブール関数 f(x1,x2,⋯,xn) のすべての入力変数 x1,x2,⋯,xn について,
シャノン双対展開した形式
f(x1,x2,⋯,xn)=(e1,e2,⋯,en)∈Bn⋀(f(e1,e2,⋯,en)∨i=1⋁nxiei′)(2)
は f(x1,x2,⋯,xn) の最大項展開である. なお, このときの項数は 2n となる.
これを踏まえ, 乗法標準形, 主乗法標準形を導入する.
- 乗法標準形 (CNF: conjunctive normal form) は, ブール式のリテラル, または 2 つ以上のリテラルの和の積のことをいう.
ここで, 2 つ以上のリテラルの和で同じ入力変数を 2 度以上含まないブール式を基本和, また標準項という.
基本和のうち, すべての入力変数を含むブール式を最大項という.
すなわち, 上記最大項展開の i=1⋁nxiei′ は最大項である.
- 主乗法標準形 (principal conjunctive normal form: PCNF) は,
ブール関数を最大項展開した形式, すなわち最大項展開の形式である.
例えば, 否定論理積 ∣ を PCNF で表すとしよう.
否定論理積は 2 項演算子なので, その PCNF は 2 変数ブール関数を最大項展開した形となる.
f(x1,x2)=(x1∨x2∨f(0,0))∧(x1∨x2′∨f(0,1))∧(x1′∨x2∨f(1,0))∧(x1′∨x2′∨f(1,1))
2 項演算子 ∣ を最大項展開した式 f∣(x1,x2) は,
真理値表 2 の ∣ の列のとおりに f∣(x1,x2) の値を決めてやればよいので
f∣(x1,x2)==(x1∨x2∨1)∧(x1∨x2′∨1)∧(x1′∨x2∨1)∧(x1′∨x2′∨0)x1′∨x2′
従って, 否定論理積の PCNF は x1′∨x2′ となる. この操作を振り返ると, 真理値表から PCNF を書くためには,
結果が 0 となっている入力変数の全パターンに対して, 元の入力変数の値が 1 なら補元をとり, 0 ならそのままで和を取り, それらすべての積を取ればよいことがわかる.
何故ならば, 結果が 1 となる部分は, 和の性質, すなわち公理 2: 同一律より消えてしまうからである.
同じようにして, 否定論理和, 排他的論理和も真理値表 2 の ↓,⊕ の列をみると, 0 となる入力のパターンから
f↓(x1,x2)f⊕(x1,x2)==(x1′∨x2′)∧(x1′∨x2)∧(x1∨x2′)(x1′∨x2′)∧(x1∨y1)
となる. すなわち, 真理値表で表現できるブール式は, PCNF で表せるということである.
次に, 任意の論理式から PCNF に変換することを考える. 結論からいうと, 次の手順に従えば PCNF へ機械的に変換できることが知られている.
- ブール式全体を基本項による和の積の形にする (分配律等を利用)
- 最大項でない基本項に対し, その基本項に含まれないすべてのリテラル xi について xi∧xi′ を乗ずる
- 分配律等に従い展開して, 冗長な項を除去する
以下, PCNF で表されたブール式を f(x1,x2,⋯,xn)PCNF と書くこととする. 例えば, ブール式
f(x1,x2,x3)=x1∧(x2′∧x3)′ を PCNF で表すとすると,
f(x1,x2,x3)=======x1∧(x2′∧x3)′x1∧(x2∨x3′)(x1∨x2∧x2′)∧(x2∨x3′)(x1∨x2)∧(x1∨x2′)∧(x2∨x3′)(x1∨x2∨x3∧x3′)∧(x1∨x2′∨x3∧x3′)∧(x1∧x1′∨x2∧x3′)(x1∨x2∨x3)∧(x1∨x2∨x3′)∧(x1∨x2′∨x3)∧(x1∨x2′∨x3′)∧(x1∨x2∨x3′)∧(x1′∨x2∨x3′)(x1∨x2∨x3)∧(x1∨x2∨x3′)∧(x1∨x2′∨x3)∧(x1∨x2′∨x3′)∧(x1′∨x2∨x3′)(∵定理:ド・モルガンの法則)(∵公理3:同一律)(∵公理2:分配律)(∵公理3:同一律)(∵公理2:分配律)(∵定理:べき等律)
従って f(x1,x2,x3)PCNF=(x1∨x2∨x3)∧(x1∨x2∨x3′)∧(x1∨x2′∨x3)∧(x1∨x2′∨x3′)∧(x1′∨x2∨x3′)
となる. 例としてもう 1 つ, f(x1,x2,x3)=x1∧x2′∨x2∧x3 としたときの PCNF は
f(x1,x2,x3)=====x1∧x2′∨x2∧x3(x1∧x2′∨x2)∧(x1∧x2′∨x3)(x1∨x2)∧(x1∨x3)∧(x2′∨x3)(x1∨x2∨x3∧x3′)∧(x1∨x2∧x2′∨x3)∧(x1∧x1′∨x2′∨x3)(x1∨x2∨x3)∧(x1∨x2∨x3′)∧(x1∨x2′∨x3)∧(x1′∨x2′∨x3)(∵公理2:分配律)(∵公理4:補元律)(∵公理4:補元律)(∵公理2:分配律)
従って
f(x1,x2,x3)PCNF=(x1∨x2∨x3)∧(x1∨x2∨x3′)∧(x1∨x2′∨x3)∧(x1′∨x2′∨x3)
となる.
簡単化
ブール式を簡単化する方法について見ていく.
カルノー図
例えばブール関数が f(x1,x2)=x1∧x2′∨x1′∧x2′∨x1∧x2′∨x1∧x2(3) と与えられたとき,
式変形をしていくと簡単化できることがわかる.
事実,