これを手作業で行う方法については、多くの文献があります。Karnaugh マップを参照してください。これらの手法の 1 つを自動化できます。
しかし、本質的には、真理値表を表す素朴なブール方程式を作成し、その方程式にシンボリック ブール単純化器 (または最小化器) を適用することです (ハードウェア言語シンセサイザーは、コード生成プロセスの一部としてこれを行います)。
単純な方程式の作成は簡単です。真を生成する真理値表の各行の論理積を作成し、すべての論理積の論理和を取ります。最初のテーブルは単純な方程式を生成します。
(~a & ~b) | (a & ~b)
これにブール単純化を適用すると、次のようになります。
((~a | a) & ~b) // combine terms
(TRUE & ~b ) // consequence of ~a | a
~b // the answer
2 番目のテーブルは単純な方程式を生成します。
(~a & b) | (a & ~b )
これはさらに単純化されません。
これを実現するために、プログラム変換システムを使用できます。このようなシステムでは通常、入力言語 (この場合は真理値表) のパーサーを定義し、入力言語から出力言語への変換を定義し、さらに出力言語でさらに変換を定義できます。入力から出力への変換は、真理値表の表記をブール方程式の表記にマップします。ブール方程式の変換は、単純化を実行します。
単純化された式を取得したら、さらに別の変換セットを適用して、純粋なブール代数から最終的なコンピューター言語 (この場合は PHP) にマップします。
私たちは、DMS Software Reengineering Toolkitを使用して、この種のことをかなり頻繁に行ってきました。DMS はこの問題を解決するのに役立ちます: 連想代数と可換代数の書き直しを理解するため、複雑な数式に直面した場合でも単純化方程式をより簡単かつ堅牢に作成できます。
多くのケースで、文字どおり数十万のリテラル (A または ~A の形式の項) を持つ代数ブール式に DMS を適用しました。1 つの例は、センサー (工場の状態を読み取る) とアクチュエータ (工場の状態を変更するもの) の観点から工場を (文字通り) 制御する方法の記述を受け入れ、方程式を生成し、単純化してから翻訳するコード ジェネレーターです。それらを、PLC と呼ばれる産業用コントローラ用の複数の異なるターゲット コンピュータ言語に変換します。
ブール単純化ではなく、DMS を使用した実際の代数的単純化の例を見ることができます。ブール単純化は書きやすいです:-}