|| 그리고! 가능한 모든 논리적 표현을하기에 충분한 연산자?


294

논리식은 ( a && b ) (모두 ab부울 값을 갖는다) 과 같이 기록 될 수있다 !(!a || !b), 예를 들면. 이것이 &&"비 분비"를 의미하지 않습니까? 이것은 모든 논리식 이 ||and 만 사용하여 만들 수 있음을 의미합니까 !?


83
이것은 Java 문제보다 기본적인 상징적 논리 질문에 가깝지만 그렇습니다. OR과 NOT의 조합은 다른 모든 것을 구성하는 데 사용될 수 있습니다. AND 및 NOT과 동일합니다. 예를 들어, 학교에있을 때 트랜지스터를 덜 사용했기 때문에 NAND 게이트 만 사용하여 모든 것을 구축하도록 배웠습니다.
azurefrog

79
이런 식으로 진술을 작성하는 능력과 그렇게하는 것이 바람직하다는 것을 혼동하지 마십시오. 구문 설탕은 좋은 것입니다.
azurefrog

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도 가능하지만 더 복잡합니다.
기본

16
이것은 컴퓨터 과학 질문이 아닌가? 여기에 코드가 없습니다. 특히 이것이 실제로 적용되는지 여부는 구현에 따라 다릅니다. 예를 들어, 오버로드를 운영하는 C ++ 에서는 일반적으로 그렇지 않습니다 .
궤도에서 가벼움

6
@SnakeDoc 나는 여기서 누군가가 그런 일을한다고 주장하지 않는다고 생각합니다. 나는이 질문이 실제로 프로그래밍 질문보다 이론적 논리 문제라고 생각합니다.
ryuu9187

답변:


425

다른 답변이 지적한대로 예, 사업자의 집합의 포함 ||하고 !있다 기능적으로 완전한 . 다음은 부울 변수 A와 사이에 16 개의 가능한 논리적 연결을 표현하는 데 사용하는 방법을 보여주는 건설적인 증거입니다 B.

NAND와 NOR 모두 자체적으로 기능적으로 완전하므로 (위와 동일한 방법을 사용하여 증명할 수 있음) 일련의 연산자가 기능적으로 완전한지 확인하려면 NAND 또는 NOR을 표현할 수 있음을 보여주는 것으로 충분합니다 그것으로.

다음 은 위에 나열된 각 연결에 대한 벤 다이어그램 을 보여주는 그래프입니다 .

여기에 이미지 설명을 입력하십시오

[ 출처 ]


20
질문이 이것을 의도하는지 여부를 말하기는 어렵지만이 답변은 단락 동작 (질문이 ||아닌 질문이 |있기 때문에 관련) 또는 부작용 (참, 거짓, XOR 및 XNOR 평가의 확장으로 인해 관련 이 있음 )을 다루지 않습니다. 원래 상수 또는 연산자보다 더 많은 인수).
David Richerby

5
원과 전환이 포함 된 원은 Hasse Diagram ( 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는 문제가되지 않습니다 .
피터 올슨 1

위의 목록은 16 개의 작업으로 구성되어 있습니다. 이것은 2 개의 입력과 1 개의 출력이있는 경우 16 개의 가능한 진리표가 있다는 사실과 일치합니다.
Paul R

1
사람들의 참조를 위해 표로 다른 시각화 를 추가하고 싶었습니다 . 위와 동일한 소스.
8월

125

당신이 설명하는 것은 기능적 완전성 입니다.

여기에는 "가능한 모든 진리표를 표현"하기에 충분한 논리 연산자 세트가 설명되어 있습니다. 자바 연산자 세트는, { ||, !}는 충분하다; "최소 기능적으로 완전한 오퍼레이터 세트"섹션에 나열된 {∨, ¬} 세트에 해당합니다.

모든 진리표 세트는 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에는 해당 단일 연산자가없는 하나의 요소 세트 {NAND} 및 {NOR}을 포함하여 기능적으로 완전한 다른 세트가 많이 있습니다.


4
편집시 +1 투표 수의 차이에도 불구하고, 귀하의 답변은 실제로 지금보다 더 자세하다고 생각합니다.
피터 올슨

진실 테이블은 내가 대학에서 첫번째 년 후에 뒤에 그들을 떠난 생각
Barkermn01

80

예.

모든 논리 게이트는 NOR 게이트로 만들 수 있습니다.

NOR 게이트는 NOT 및 OR로 만들 수 있으므로 결과는 다음과 같습니다.


64
@PaulDraper 또는 NAND 게이트
slebetman

25
달에 두 사람을 착륙시키는 데 4100 개의 NOR 게이트가 필요했습니다.
Hans Passant

4
@HansPassant 그리고 일부 문자열. 많은 문자열. (깡통 종류가 아닌 코어 로프 메모리.)
CVn

3
@HansPassant 때때로 Stack Exchange가 Wikipedia가되기를 바랍니다. 그런 다음 [citation-needed]바로 마크를 삽입합니다 .
Simon Forsberg


64

가능하면 DeMorgan 's Laws 를 읽으십시오 .

논리적 증거에 대한 참조뿐만 아니라 거기에서 읽을 수 있습니다.

그러나 본질적으로 대답은 그렇습니다.

편집 : 명시 적으로, 내 요점은 논리적으로 AND 식에서 OR 식을 유추 할 수 있으며 그 반대도 마찬가지입니다. 논리적 동등성과 추론에 대한 법칙이 더 있지만, 이것이 가장 큰 제안이라고 생각합니다.


편집 2 : 다음 표의 논리적 동등성을 보여주는 진리표를 통한 증거가 있습니다.

데모 간의 법칙 : !(!A || !B) -> A && B

 _____________________________________________________
| A | B | ! A | ! B | ! A || ! B | ! (! A ||! B) | & 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

2
@ MichaelKjörling 나는 왜 일부 사람들이 내 대답이 도움이되지 않거나 해롭다 고 생각하는지 궁금합니다.
ryuu9187

3
일반적으로 링크에 의존하는 답변은 (링크가 죽을 때) 너무 좋아하지 않지만,이 경우 DeMorgan의 법칙에 대한 대체 설명이 너무 많아서 문제가 보이지 않습니다. DV
2813274

@ user2813274 설명해 주셔서 감사합니다. 내 편집 내용이 개인 연구와 답변을 얻는 사이의 격차를 해소하는 데 도움이되기를 바랍니다.
ryuu9187

11

NANDNOR 는 보편적이며 어디에서나 원하는 논리 연산을 구축하는 데 사용할 수 있습니다. 다른 연산자는 프로그래밍 언어로 제공되어 쉽게 읽고 쓸 수있는 코드를 만들 수 있습니다.

또한 회로에서 하드 와이어가 필요한 모든 논리 연산도 NAND 또는 NOR 전용 IC를 사용하여 개발됩니다.


당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.