web-dev-qa-db-ja.com

||そして!すべての可能な論理式を作成するのに十分な演算子?

論理式( a && b )abの両方にブール値があります)は、たとえば!(!a || !b)のように記述できます。これは、&&が「不要」であることを意味しませんか?これは、all論理式が||!を使用してのみ作成できることを意味しますか?

295
JakeTheSnake

はい、他の回答が指摘したように、||!で構成される演算子のセットは 機能的に完全 です。ブール変数ABの間の16の可能な論理結合をすべて表現するためにそれらを使用する方法を示す、その建設的な証拠があります:

NANDとNORは両方とも機能的に完全であることに注意してください(上記と同じ方法を使用して証明できます)。したがって、一連の演算子が機能的に完全であることを確認する場合NANDまたはNORを表現できます。

上記の各接続詞の Venn図 を示すグラフは次のとおりです。

enter image description here

[ ソース ]

425
Peter Olson

あなたが説明しているのは functional completeness です。

これは、「考えられるすべての真理値表」を表現するのに十分な論理演算子のセットを記述しています。 Java演算子セット{||!}で十分です。これは、「最小機能的に完全な演算子セット」セクションの下にリストされているセット{∨、¬}に対応します。

すべての真理値表のセットは、2つのブール値間の演算の結果である可能性のある4つのブール値のすべての可能なセットを意味します。ブール値には2つの可能な値があるため、24、または16、可能な真理値表。

A B | 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15
----+------------------------------------------------
T T | T  T  T  T  T  T  T  T  F  F  F  F  F  F  F  F
T F | T  T  T  T  F  F  F  F  T  T  T  T  F  F  F  F
F T | T  T  F  F  T  T  F  F  T  T  F  F  T  T  F  F 
F F | T  F  T  F  T  F  T  F  T  F  T  F  T  F  T  F

以下は、真理値表の番号(0〜15)、それを生成する||!の組み合わせ、および説明です。

Table  |  Operation(s)                    | Description
-------+----------------------------------+-------------
  0    | A || !A                          | TRUE
  1    | A || B                           | OR
  2    | A || !B                          | B IMPLIES A
  3    | A                                | A
  4    | !A || B                          | A IMPLIES B
  5    | B                                | B
  6    | !(!A || !B) || !(A || B)         | XNOR (equals)
  7    | !(!A || !B)                      | AND
  8    | !A || !B                         | NAND
  9    | !(A || !B) || !(!A || B)         | XOR
 10    | !B                               | NOT B
 11    | !(!A || B)                       | NOT A IMPLIES B
 12    | !A                               | NOT A
 13    | !(A || !B)                       | NOT B IMPLIES A
 14    | !(A || B)                        | NOR
 15    | !(A || !A)                       | FALSE

1つの要素セット{NAND}および{NOR}を含む、このような機能的に完全なセットは他にもたくさんあります。これらにはJavaに対応する単一の演算子がありません。

125
rgettman

はい。

すべての論理ゲートは、NORゲート​​から作成できます。

NORゲート​​はNOTとORから作成できるため、結果は次のようになります。

80
Paul Boddington

可能であれば DeMorganの法則 を読んでください。

論理的な証明への参照と同様、そこの読書で答えを見つけるでしょう。

しかし、本質的には、答えはイエスです。

EDIT:明確にするために、私のポイントは、AND式からOR式を論理的に推論できることです。その逆。論理的等価性と推論にはさらに多くの法則がありますが、これは最も適切だと思います。


EDIT 2:これは、次の式の論理的等価性を示す真理値表による証明です。

デモルガンの法則:!(!A || !B) -> A && B

 _____________________________________________________ 
 | A | B | !A | !B | !A || !B | !(!A ||!B)| A && B | 
 --------------------------------------------- ---------- 
 | 0 | 0 | 1 | 1 | 1 | 0 | 0 | 
 --------------------------------------------- ---------- 
 | 0 | 1 | 1 | 0 | 1 | 0 | 0 | 
 ------------------------------------------- ------------ 
 | 1 | 0 | 0 | 1 | 1 | 0 | 0 | 
 ------------------------------------------- ------------ 
 | 1 | 1 | 0 | 0 | 0 | 1 | 1 | 
 _______________________________________________________ 
64
ryuu9187

NAND および NOR は普遍的であり、任意の場所で必要な論理演算を構築するために使用できます。他の演算子は、プログラミング言語で利用でき、読みやすいコードを簡単に記述および作成できます。

また、回路に配線する必要があるすべての論理演算も、NANDまたはNORのみのICを使用して開発されます。

11
anand

はい、ブール代数によれば、ブール関数はmintermsの合計またはmaxtermsの積として表現できます。これは正規正規形と呼ばれます。そのようなロジックを、コンピューターサイエンスで使用されるのと同じ演算子に適用できなかった理由はありません。

https://en.wikipedia.org/wiki/Canonical_normal_form

10