関数的に完全な集合とは何か?関数的に完全な集合とは何か?
定義
ブール関数の集合{fk}={fk:{0,1}nk→{0,1}}k∈Γが与えられたとしよう。Γは有限集合だ。任意のブール関数
{0,1}n→{0,1}(n∈N)
が{fk}の合成で表現できるとき、集合{fk}を機能的に完全functionally completeだという。
定理
NOTゲートとANDゲートの集合{¬,∧}は機能的に完全だ。
説明
つまり、全てのブール関数はNOTとANDの繰り返しで作ることができる。機能的に完全な集合は一意ではなく、無数にある。例えばa∧b=¬(¬a∨¬b)であるため、{¬,∨}も機能的に完全な集合だ。この定理から、任意の集合がANDゲートとNOTゲートを作ることができるかだけ示せば、機能的に完全な集合であることを証明できる。
機能的に完全な集合の例:
もちろん複製関数が必要な場合もある。これらの結果をコンピュータ回路の言葉で述べれば以下のようになる。全ての論理演算は:
- NOTゲートとANDゲートのみを使用して回路に実装できる。
- NANDゲートと複製関数のみを使用して回路に実装できる。
- NORゲートと複製関数のみを使用して回路に実装できる。
- トフォリゲートのみを使用して回路に実装できる。
- フレドキンゲートのみを使用して回路に実装できる。
ユニバーサルゲート
特に、自分自身だけで構成された集合{f}が機能的に完全なとき、そのようなfをユニバーサルゲートという。ユニバーサルゲートは自分自身だけで全てのブール関数を表現できる。NAND、NOR、T、Fはユニバーサルゲートだ。