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


294

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


83
これは、Javaの問題というよりは、シンボリックロジックの基本的な質問ですが、そうです。ORとNOTを組み合わせて使用​​すると、その他すべてを構築できます。ANDおよびNOTでも同じです。たとえば、私が学校にいたとき、トランジスタの数が少ないため、NANDゲートのみを使用してすべてを構築するように教えられました。
azurefrog 2015年

79
この方法でステートメントを作成する機能と、それを実行する必要性を混同しないでください。構文糖は良いものです。
azurefrog 2015年

20
多くのロジックゲートチップは、NANDゲートまたはNORゲートのみを提供します。これらのゲートを使用してすべての演算を実装することが可能であり、安価に製造できるためA and B == !A nor !B == !(!A or !B)です。同様にA or B == !A nand !B == !(!A and !B)。NANDまたはNORの両方の入力に同じ値を渡すと、単純なNOTと同じ結果になります。XORとXNORも可能ですが、より複雑です。De Morganの定理を参照してください
基本的な

16
これはコンピュータサイエンスの質問ではありませんか?ここにコードはありません。特に、これが実際に当てはまるかどうかは、実装によって異なります。たとえば、C ++では、オーバーロードを操作することは一般的ではありません
オービットのライトネスレース'16年

6
@SnakeDoc私はここにいる誰もがそのようなことをすることを主張しているとは思いません。この質問は、プログラミングの問題ではなく、理論的な論理の問題であったと思います。
ryuu9187

回答:


425

他の回答が指摘したようにはい、であって演算子のセット||とは、!ある機能的に完全な。これがその建設的な証明であり、ブール変数Aとの間の16の可能な論理接続をすべて表現するためにそれらを使用する方法を示していますB

NANDとNORの両方がそれ自体機能的に完全であることに注意してください(上記と同じ方法を使用して証明できます)。したがって、オペレーターのセットが機能的に完全であることを確認したい場合は、NANDまたはNORのいずれかを表現できることを示すだけで十分です。それと。

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

ここに画像の説明を入力してください

[ ソース ]


20
質問がこれを意図しているかどうかを判断することは困難ですが、この回答は、短絡動作(質問では||なくについて尋ねられる|ため、関連)または副作用(true、false、XORおよびXNORの展開が評価されるために関連)を扱いませんそれらの引数は、元の定数または演算子よりも多くの回数です)。
デビッドリチャービー2015年

5
円を含む円と遷移がハッセ図を形成します(en.wikipedia.org/wiki/Hasse_diagram)。(そう、今日は何か新しいことを学びました!)
Kasper van den Berg

5
@DavidRicherbyそうです。XOR、XNOR、true、false以外は、私が知る限り、副作用と評価の数は組み込みの同等のものと同じでなければなりません(たとえば!(!A || !B)、短絡と評価数はと同じA && Bです)。XORとXNORにこれを追加の構成(例:)なしで行うことはできないと思います。a ? !b : b値を保存できれば、trueまたはfalseは問題になりません。ダミーのブール変数を定義trueしてfalse使用することでプログラムを開始できるためです。
Peter Olson

上記のリストは16の操作で構成されています。これは、2つの入力と1つの出力がある場合に16の真理値表があるという事実と一致しています。
ポールR

1
人の参照用のテーブルとして別の視覚化を追加したかっただけです。上記と同じソース。
8月

125

あなたが説明しているのは機能の完全性です。

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

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

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


4
編集のために+1。投票数の違いにもかかわらず、私はあなたの答えが実際には私のものより実際に詳細だと思います。
Peter Olson

真理値表大学1年後、私はそれらを置き去りにしたと思った
Barkermn01 2015年

80

はい。

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

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


64
@PaulDraper または NANDゲート
slebetman 2015年

25
2人が月に着陸するには4100のNORゲートが必要でした。
Hans Passant、2015年

4
@HansPassantそしていくつかの文字列。たくさんのひも。(ブリキ缶の種類ではなく、コアロープメモリ。)
CVn '16年

3
@HansPassant時々、Stack ExchangeがWikipediaであることを望み、そこに[citation-needed]マークを挿入します。
Simon Forsberg

11
はい、申し訳ありませんが、アポロガイダンスコンピューター
ハンスパッサント

64

できれば、時間をかけてDeMorganの法則を読んでください。

そこにあるリーディングや論理的な証明への参照で答えを見つけるでしょう。

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

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


編集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 |
_______________________________________________________

19
一部の人々は、「機能の完全性」の一環として反対票を投じなければなりません
Jesse

3
+ 27 / -2で、私は迷った反対投票についてあまり心配しません。
CVn 2015年

2
@MichaelKjörling私の回答が役に立たなかった/有害だと思った人がいる理由を知りたいです。
ryuu9187 2015年

3
一般的にリンクに依存する回答はあまり好きではありませんが(リンクが死んでしまうため)、この場合、DeMorganの法則の説明が非常に多いため、問題は発生しません-それでも、それは私の推測ですDV
user2813274

@ user2813274説明ありがとうございます。うまくいけば、私の編集は、個人的な研究と答えに到達することの間のギャップを埋めるのに役立ちます。
ryuu9187

11

NANDNORは汎用的であり、どこでも必要な論理演算を構築するために使用できます。その他の演算子は、プログラミング言語で使用できるため、コードを簡単に記述し、読みやすくすることができます。

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


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.