MochiuWiki : SUSE, EC, PCB
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
検索
個人用ツール
ログイン
Toggle dark mode
名前空間
ページ
議論
表示
閲覧
ソースを閲覧
履歴を表示
情報理論 - 主乗法標準形のソースを表示
提供: MochiuWiki : SUSE, EC, PCB
←
情報理論 - 主乗法標準形
あなたには「このページの編集」を行う権限がありません。理由は以下の通りです:
この操作は、次のグループのいずれかに属する利用者のみが実行できます:
管理者
、new-group。
このページのソースの閲覧やコピーができます。
== 概要 == 主乗法標準形 (PCNF: Principal Conjunctive Normal Form) は、論理関数を最大項 (maxterm) の論理積として一意に表現する標準形である。<br> POS canonical form (Product of Sums) とも呼ばれ、Π記法 <math>\prod M(\ldots)</math> を用いて表記する。<br> <br> 任意のブール関数は一意の主乗法標準形を持ち、論理回路の設計や検証において重要な役割を担う。<br> <br> 主な応用領域を以下に示す。<br> * デジタル論理回路の設計 * 論理式の等価性判定 * 論理式の簡単化 (カルノー図、クワイン・マクラスキー法) * ブール関数の解析 <br> 下表に、主乗法標準形の特徴を示す。<br> <br> <center> {| class="wikitable" |+ 主乗法標準形の特徴 ! 項目 !! 内容 |- | 正式名称 || 主乗法標準形 (Principal Conjunctive Normal Form) |- | 略称 || PCNF |- | 別名 || POS canonical form (Product of Sums) |- | 構成要素 || 最大項 (maxterm) |- | 結合演算 || 論理積 (AND, ・) |- | 記号表記 || <math>\prod M(\ldots)</math> |- | 真理値表から || f = 0 の行を使用 |- | 展開に利用 || <math>x + \overline{x} = 1</math> |- | 簡単化手法 || カルノー図、クワイン・マクラスキー法 |} </center> <br> 対となる標準形として、[[情報理論 - 主加法標準形]]が存在し、最小項の論理和で関数を表現する。<br> <br><br> == 基本用語 == ==== リテラル ==== 論理変数またはその否定のことをリテラルという。<br> <br> * 肯定リテラル *: 変数そのもの *: 例: <math>A</math> * 否定リテラル *: 変数の否定 *: 例: <math>\overline{A}</math> <br> n個の変数があるとき、リテラルは合計 <math>2n</math> 個存在する。<br> <br> ==== 基本和 ==== リテラルの論理和 (OR結合) を基本和という。和項とも呼ぶ。<br> <br> 例: <math>A + \overline{B} + C</math><br> <br> ==== 最大項 (maxterm) ==== n個の変数が全て1回ずつ現れる基本和を最大項という。記号 <math>M_i</math> で表す。<br> <br> 命名ルールは最小項と逆であり、以下の規則に従う。<br> * 変数の値が0の場合 → 肯定リテラルとして含める * 変数の値が1の場合 → 否定リテラルとして含める <br> 例: A=0, B=1, C=0 のとき、10進数で 2 (010) となる。<br> このとき最大項は <math>M_2 = A + \overline{B} + C</math> である。<br> <br> 最大項の重要な性質として、対応する入力の組み合わせのときのみ値が0となり、その他の全ての入力では値が1となる。<br> <br> ==== 最小項と最大項の補数関係 ==== 最小項 <math>m_i</math> と最大項 <math>M_i</math> の間には以下の補数関係が成立する。<br> <br> <math>m_i = \overline{M_i}</math><br> <br> ド・モルガンの定理による導出例を以下に示す。(<math>m_2</math> と <math>M_2</math> の場合)<br> * 最小項 <math>m_2</math> の定義 *: <math>m_2 = \overline{A} \cdot B \cdot \overline{C}</math> * ド・モルガンの定理を適用 *: <math>\overline{m_2} = \overline{\overline{A} \cdot B \cdot \overline{C}} = A + \overline{B} + C</math> * 最大項 <math>M_2</math> との一致を確認 *: <math>M_2 = A + \overline{B} + C</math> * 結論 *: したがって <math>m_2 = \overline{M_2}</math> が成立する。 <br><br> == 最大項の一覧 == 3変数 (A, B, C) の最大項8個を以下の表に示す。<br> <br> <center> {| class="wikitable" |+ 3変数の最大項一覧 ! A !! B !! C !! 最大項 !! 記号 |- | 0 || 0 || 0 || <math>A + B + C</math> || <math>M_0</math> |- | 0 || 0 || 1 || <math>A + B + \overline{C}</math> || <math>M_1</math> |- | 0 || 1 || 0 || <math>A + \overline{B} + C</math> || <math>M_2</math> |- | 0 || 1 || 1 || <math>A + \overline{B} + \overline{C}</math> || <math>M_3</math> |- | 1 || 0 || 0 || <math>\overline{A} + B + C</math> || <math>M_4</math> |- | 1 || 0 || 1 || <math>\overline{A} + B + \overline{C}</math> || <math>M_5</math> |- | 1 || 1 || 0 || <math>\overline{A} + \overline{B} + C</math> || <math>M_6</math> |- | 1 || 1 || 1 || <math>\overline{A} + \overline{B} + \overline{C}</math> || <math>M_7</math> |} </center> <br><br> == 主乗法標準形の定義 == 論理関数 <math>f</math> の主乗法標準形とは、<math>f</math> の値が0となる全ての入力の組み合わせに対応する最大項の論理積として表した形式である。<br> <br> 一般式を以下に示す。<br> <br> <math>f(x_1, x_2, \ldots, x_n) = \prod M(j_1, j_2, \ldots, j_l)</math><br> <br> ここで <math>j_1, j_2, \ldots, j_l</math> は、<math>f</math> の値が0となる入力の組み合わせに対応する10進番号である。<br> <br> 任意のブール関数は一意の主乗法標準形を持つ。<br> これは、真理値表から関数の値が0となる行が一意に決まるためである。<br> <br><br> == 真理値表からの導出 == ==== 導出手順 ==== 真理値表から主乗法標準形を導出する手順を以下に示す。<br> <br> # 真理値表から、関数の値が0となる行を全て特定する。 # 各行に対応する最大項を書き出す。(値が0の変数は肯定リテラル、値が1の変数は否定リテラル) # 全ての最大項の論理積 (AND) を取る。 # 最大項番号のリスト表記 (Π記法) に変換する。 <br> ==== 具体例 ==== 真理値表から主乗法標準形を導出する。<br> <br> <center> {| class="wikitable" |+ 真理値表 ! A !! B !! C !! f(A,B,C) |- | 0 || 0 || 0 || 0 |- | 0 || 0 || 1 || 1 |- | 0 || 1 || 0 || 1 |- | 0 || 1 || 1 || 0 |- | 1 || 0 || 0 || 1 |- | 1 || 0 || 1 || 0 |- | 1 || 1 || 0 || 0 |- | 1 || 1 || 1 || 1 |} </center> <br> 導出過程を以下に示す。<br> # f = 0 となる行の特定 #: 入力 000 (行0), 011 (行3), 101 (行5), 110 (行6) の4行 # 対応する最大項 #: <math>M_0 = A + B + C</math>, <math>M_3 = A + \overline{B} + \overline{C}</math>, <math>M_5 = \overline{A} + B + \overline{C}</math>, <math>M_6 = \overline{A} + \overline{B} + C</math> # 主乗法標準形 #: <math>f = (A + B + C) \cdot (A + \overline{B} + \overline{C}) \cdot (\overline{A} + B + \overline{C}) \cdot (\overline{A} + \overline{B} + C)</math> # Π記法 #: <math>f = \prod M(0, 3, 5, 6)</math> <br><br> == 論理式からの導出 == 一般の論理式から主乗法標準形を導出するには、<math>x + \overline{x} = 1</math> および <math>x \cdot \overline{x} = 0</math> を利用した展開を行う。<br> <br> 手順を以下に示す。<br> <br> # 論理式を和積形に展開する。(分配法則を適用) # 各因子に含まれない変数 <math>x</math> について、<math>(x + \overline{x})</math> を因子にOR演算で加える。(<math>x + \overline{x} = 1</math> なので値は変わらない) # 分配法則で展開し、全ての因子を最大項の形にする。 # 重複する最大項を除去する。(<math>M_i \cdot M_i = M_i</math>) <br> 具体例として <math>f = A \cdot B + \overline{A} \cdot C</math> を主乗法標準形に変換する。<br> <br> * 和積形への変換 *: 分配法則 <math>x \cdot y + z = (x + z) \cdot (y + z)</math> を使用する。 *: <math>f = A \cdot B + \overline{A} \cdot C = (A + \overline{A} \cdot C) \cdot (B + \overline{A} \cdot C)</math> *: さらに展開すると、<math>f = (A + \overline{A})(A + C)(\overline{A} + B)(B + C)</math> *: <math>(A + \overline{A}) = 1</math> なので <math>f = (A + C) \cdot (\overline{A} + B) \cdot (B + C)</math> * 第1因子 <math>(A + C)</math> の変換 *: B が含まれないため、<math>(A + B + C) \cdot (A + \overline{B} + C)</math> に展開する。 *: 10進番号 0 (000), 2 (010) に対応し、<math>M_0 \cdot M_2</math> * 第2因子 <math>(\overline{A} + B)</math> の変換 *: C が含まれないため、<math>(\overline{A} + B + C) \cdot (\overline{A} + B + \overline{C})</math> に展開する。 *: 10進番号 4 (100), 5 (101) に対応し、<math>M_4 \cdot M_5</math> * 第3因子 <math>(B + C)</math> の変換 *: Aが含まれないため、<math>(A + B + C) \cdot (\overline{A} + B + C)</math> に展開する。 *: 10進番号 0 (000), 4 (100) に対応し、<math>M_0 \cdot M_4</math> * 重複を除去した結果 *: <math>f = M_0 \cdot M_2 \cdot M_4 \cdot M_5 = \prod M(0, 2, 4, 5)</math> <br><br> == 論理式の簡単化に用いる変換法則 == ブール代数の論理式を簡単化する際に使用される主要な変換法則を以下に示す。<br> これらの法則は、主乗法標準形から得られた論理式を、より簡潔な等価式に変換するために用いられる。<br> <br> ブール代数には双対性原理 (Duality Principle) が成立する。<br> AND演算とOR演算、および定数0と定数1を互いに交換することで、ある法則からその双対の法則が導出される。<br> <br> ==== 基本法則 ==== 下表に、各法則をAND形式とOR形式の双対の組を示す。<br> <br> <center> {| class="wikitable" |+ ブール代数の基本法則 ! 法則名 !! AND形式 !! OR形式 |- | 恒等法則 (Identity Law) || <math>A \cdot 1 = A</math> || <math>A + 0 = A</math> |- | 支配法則 (Domination Law) || <math>A \cdot 0 = 0</math> || <math>A + 1 = 1</math> |- | 冪等法則 (Idempotent Law) || <math>A \cdot A = A</math> || <math>A + A = A</math> |- | 補元法則 (Complement Law) || <math>A \cdot \overline{A} = 0</math> || <math>A + \overline{A} = 1</math> |- | 二重否定法則 (Involution Law) || colspan="2" | <math>\overline{\overline{A}} = A</math> |} </center> <br> ==== 構造法則 ==== <center> {| class="wikitable" |+ ブール代数の構造法則 ! 法則名 !! AND形式 !! OR形式 |- | 交換法則 (Commutative Law) || <math>A \cdot B = B \cdot A</math> || <math>A + B = B + A</math> |- | 結合法則 (Associative Law) || <math>(A \cdot B) \cdot C = A \cdot (B \cdot C)</math> || <math>(A + B) + C = A + (B + C)</math> |- | 分配法則 (Distributive Law) || <math>A \cdot (B + C) = A \cdot B + A \cdot C</math> || <math>A + B \cdot C = (A + B) \cdot (A + C)</math> |} </center> <br> ==== 簡単化法則 ==== <center> {| class="wikitable" |+ ブール代数の簡単化法則 ! 法則名 !! AND形式 !! OR形式 |- | 吸収法則 (Absorption Law) || <math>A \cdot (A + B) = A</math> || <math>A + A \cdot B = A</math> |- | ド・モルガンの法則 (De Morgan's Law) || <math>\overline{A \cdot B} = \overline{A} + \overline{B}</math> || <math>\overline{A + B} = \overline{A} \cdot \overline{B}</math> |- | コンセンサス定理 (Consensus Theorem) || <math>(A + B) \cdot (\overline{A} + C) \cdot (B + C) = (A + B) \cdot (\overline{A} + C)</math> || <math>A \cdot B + \overline{A} \cdot C + B \cdot C = A \cdot B + \overline{A} \cdot C</math> |} </center> <br> ==== 吸収法則の証明 ==== 吸収法則 <math>A \cdot (A + B) = A</math> の成立を以下のように証明できる。<br> <br> <math>\begin{align} A \cdot (A + B) &= A \cdot A + A \cdot B && \text{(分配法則)} \\ &= A + A \cdot B && \text{(冪等法則: } A \cdot A = A \text{)} \\ &= A \cdot 1 + A \cdot B && \text{(恒等法則: } A = A \cdot 1 \text{)} \\ &= A \cdot (1 + B) && \text{(分配法則)} \\ &= A \cdot 1 && \text{(支配法則: } 1 + B = 1 \text{)} \\ &= A && \text{(恒等法則)} \end{align}</math> <br> ==== コンセンサス定理の証明 ==== コンセンサス定理 <math>(A + B) \cdot (\overline{A} + C) \cdot (B + C) = (A + B) \cdot (\overline{A} + C)</math> の成立を以下のように証明できる。<br> <br> 第3因子 <math>(B + C)</math> が冗長であることを示す。<br> 双対の定理 <math>A \cdot B + \overline{A} \cdot C + B \cdot C = A \cdot B + \overline{A} \cdot C</math> を証明し、双対性原理により成立を確認する。<br> <br> <math>\begin{align} A \cdot B + \overline{A} \cdot C + B \cdot C &= A \cdot B + \overline{A} \cdot C + B \cdot C \cdot (A + \overline{A}) && \text{(補元法則: } A + \overline{A} = 1 \text{)} \\ &= A \cdot B + \overline{A} \cdot C + A \cdot B \cdot C + \overline{A} \cdot B \cdot C && \text{(分配法則)} \\ &= A \cdot B \cdot (1 + C) + \overline{A} \cdot C \cdot (1 + B) && \text{(分配法則)} \\ &= A \cdot B + \overline{A} \cdot C && \text{(支配法則: } 1 + C = 1 \text{, } 1 + B = 1 \text{)} \end{align}</math> <br> 双対性原理により、AND形式のコンセンサス定理も成立する。<br> <br> ==== 簡単化の適用例 ==== 以下の和積形の論理式を変換法則を用いて簡単化する。<br> <br> まず、第1因子と第2因子を統合する。<br> ここで <math>X = A + B</math> とおく。<br> <br> <math> \begin{align} f &= (A + B + C) \cdot (A + B + \overline{C}) \cdot (\overline{A} + B + C) \\ &= (X + C) \cdot (X + \overline{C}) \cdot (\overline{A} + B + C) && \text{(} X = A + B \text{ とおく)} \\ &= (X + C \cdot \overline{C}) \cdot (\overline{A} + B + C) && \text{(分配法則 (OR形式))} \\ &= (X + 0) \cdot (\overline{A} + B + C) && \text{(補元法則: } C \cdot \overline{C} = 0 \text{)} \\ &= (A + B) \cdot (\overline{A} + B + C) && \text{(恒等法則)} \end{align} </math><br> <br> 次に、結果と第3因子を統合する。<br> ここで、<math>X = B</math> とおく。<br> <br> <math> \begin{align} f &= (X + A) \cdot (X + \overline{A} + C) && \text{(交換法則)} \\ &= B + A \cdot (\overline{A} + C) && \text{(分配法則 (OR形式))} \\ &= B + A \cdot \overline{A} + A \cdot C && \text{(分配法則)} \\ &= B + 0 + A \cdot C && \text{(補元法則: } A \cdot \overline{A} = 0 \text{)} \\ &= A \cdot C + B && \text{(恒等法則)} \end{align} </math><br> <br><br> == クワイン・マクラスキー法による簡単化 == ==== 概要 ==== クワイン・マクラスキー法 (QM法) は最大項にも適用可能であり、主乗法標準形を体系的に簡単化できる。<br> 最小項ベースと同じアルゴリズムを使用するが、ビットの解釈が異なる点に注意が必要である。<br> <br> * ビット解釈の違い *: 最大項では 0 → 肯定リテラル、1 → 否定リテラルとなる。(最小項と逆) * グループ化 *: グループ化は最小項と同様に「1のビット数」で行う。 <br> ==== 手順 ==== クワイン・マクラスキー法による主乗法標準形の簡単化手順を以下に示す。<br> <br> # 主乗法標準形の全最大項を2進数で表し、1のビット数でグループ分けする。 # 隣接グループ間で、正確に1ビットだけ異なる項を組み合わせる。(ダッシュ「-」で置換) # 組み合わせ不可の項が主項 (prime implicant) となる。 # 主項表を作成する。(行: 主項、列: 元の最大項) # 必須主項 (essential prime implicant) を特定する。(その最大項をカバーする主項が1つだけのもの) # 必須主項で全最大項がカバーされるか確認し、不足があれば追加の主項を選択する。 # 選択した主項の論理積が簡単化された論理式となる。 # ビット解釈に注意: ダッシュ以外の 0 → 肯定リテラル、1 → 否定リテラルとして和項 (sum term) を構成する。 <br> ==== 具体例 ==== 例として <math>f = \prod M(0, 1, 2, 5)</math> を簡単化する。<br> <br> ステップ1として、1のビット数でグループ分けする。<br> <br> <center> {| class="wikitable" |+ ステップ1 : グループ分け ! グループ (1のビット数) !! 最大項 !! 2進数 |- | 0 || <math>M_0</math> || 000 |- | 1 || <math>M_1</math> || 001 |- | 1 || <math>M_2</math> || 010 |- | 2 || <math>M_5</math> || 101 |} </center> <br> ステップ2として、隣接グループ間で1ビットだけ異なる項を組み合わせる。<br> <br> <center> {| class="wikitable" |+ ステップ2 : 第1回の組み合わせ ! 組み合わせ !! 結果 !! カバーする最大項 |- | <math>M_0</math>(000) と <math>M_1</math>(001) || 00- || {0, 1} |- | <math>M_0</math>(000) と <math>M_2</math>(010) || 0-0 || {0, 2} |- | <math>M_1</math>(001) と <math>M_5</math>(101) || -01 || {1, 5} |} </center> <br> <math>M_2</math>(010) と <math>M_5</math>(101) は2ビット以上異なるため組み合わせ不可である。<br> <br> ステップ3として、第2回の組み合わせを試みる。全ての主項のダッシュ位置が異なるため、これ以上の組み合わせは不可能である。<br> <br> 主項の一覧とそれぞれの和項への変換を以下に示す。<br> * 00- → <math>(A + B)</math> *: ビット解釈: A=0 → 肯定(A), B=0 → 肯定(B), C=ダッシュ → 除去 * 0-0 → <math>(A + C)</math> *: ビット解釈: A=0 → 肯定(A), B=ダッシュ → 除去, C=0 → 肯定(C) * -01 → <math>(B + \overline{C})</math> *: ビット解釈: A=ダッシュ → 除去, B=0 → 肯定(B), C=1 → 否定(<math>\overline{C}</math>) <br> ステップ4として、主項表を作成する。<br> <br> <center> {| class="wikitable" |+ ステップ4 : 主項表 ! 主項 !! <math>M_0</math> !! <math>M_1</math> !! <math>M_2</math> !! <math>M_5</math> |- | <math>(A + B)</math> (00-) || ○ || ○ || || |- | <math>(A + C)</math> (0-0) || ○ || || ○ || |- | <math>(B + \overline{C})</math> (-01) || || ○ || || ○ |} </center> <br> ステップ5として、必須主項を特定する。<br> * <math>M_2</math> は、<math>(A + C)</math> のみがカバーするため、<math>(A + C)</math> は必須主項である * <math>M_5</math> は、<math>(B + \overline{C})</math> のみがカバーするため、<math>(B + \overline{C})</math> は必須主項である * <math>(A + C)</math> は <math>M_0</math> もカバーし、<math>(B + \overline{C})</math> は <math>M_1</math> もカバーするため、全最大項がカバーされる <br> 簡単化の結果を以下に示す。<br> <br> <math>f = (A + C) \cdot (B + \overline{C})</math><br> <br><br> == 主加法標準形との関係 == ==== 補集合による変換 ==== n変数の関数では、<math>0</math> から <math>2^n - 1</math> までの全ての番号のうち、最大項番号の補集合が最小項番号となる。<br> <br> 例: <math>\prod M(0, 3, 5, 6)</math> の場合、全体集合 {0, 1, ..., 7} から {0, 3, 5, 6} を除いた {1, 2, 4, 7} が最小項番号となる。<br> したがって、<math>\sum m(1, 2, 4, 7)</math> と等価である。<br> <br> 逆に、最小項番号の補集合が最大項番号となる。<br> この対称性から、一方の標準形が分かれば他方を直ちに求めることができる。<br> <br> ==== ド・モルガンの定理による変換 ==== 補関数を求めて展開する方法によっても変換が可能である。<br> <br> 手順を以下に示す。<br> # 関数 <math>f</math> の補関数 <math>\overline{f}</math> を求める。(fの値が1の行の最大項の積) # ド・モルガンの定理で <math>\overline{f}</math> の否定を取る。 # 整理すると主加法標準形が得られる。 <br> 例として、<math>f = \prod M(0, 3, 5, 6)</math> からの変換を示す。<br> * 補関数の導出 *: fの値が1となる行の最小項番号の補集合を考える。 *: fの値が0となる行は {0, 3, 5, 6} であるため、<math>\overline{f}</math> の値が1となる行は {0, 3, 5, 6} である。 *: <math>\overline{f} = \sum m(0, 3, 5, 6) = m_0 + m_3 + m_5 + m_6</math> * 否定を取る。 *: <math>f = \overline{\overline{f}} = \overline{m_0 + m_3 + m_5 + m_6}</math> * ド・モルガンの定理を適用 *: <math>f = \overline{m_0} \cdot \overline{m_3} \cdot \overline{m_5} \cdot \overline{m_6}</math> * 主加法標準形への変換 *: fが1となる行の最小項番号は {1, 2, 4, 7} であるため *: <math>f = \sum m(1, 2, 4, 7)</math> <br> 主加法標準形との詳細な比較については、[[情報理論 - 主加法標準形]]のページを参照すること。<br> <br><br> == 関連ページ == * [[情報理論 - 主加法標準形]] * [[情報理論 - カルノー図]] <br><br> {{#seo: |title={{PAGENAME}} : Exploring Electronics and SUSE Linux | MochiuWiki |keywords=MochiuWiki,Mochiu,Wiki,Mochiu Wiki,Electric Circuit,Electric,pcb,Mathematics,AVR,TI,STMicro,AVR,ATmega,MSP430,STM,Arduino,Xilinx,FPGA,Verilog,HDL,PinePhone,Pine Phone,Raspberry,Raspberry Pi,C,C++,C#,Qt,Qml,MFC,Shell,Bash,Zsh,Fish,SUSE,SLE,Suse Enterprise,Suse Linux,openSUSE,open SUSE,Leap,Linux,uCLnux,電気回路,電子回路,基板,プリント基板,主乗法標準形,PCNF,最大項,maxterm,POS,canonical form,ブール代数,論理回路,標準形,クワイン・マクラスキー法,Quine-McCluskey,論理式簡単化 |description={{PAGENAME}} - 電子回路とSUSE Linuxに関する情報 | This page is {{PAGENAME}} in our wiki about electronic circuits and SUSE Linux |image=/resources/assets/MochiuLogo_Single_Blue.png }} __FORCETOC__ [[カテゴリ:情報理論]]
情報理論 - 主乗法標準形
に戻る。
案内
メインページ
最近の更新
おまかせ表示
MediaWiki についてのヘルプ
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報
We ask for
Donations
Collapse