Là | | và! Toán tử đủ để làm cho mọi biểu thức logic có thể?


294

Biểu thức logic ( a && b ) (cả abcó giá trị boolean) có thể được viết như thế !(!a || !b), ví dụ. Điều này không có nghĩa &&là "không cần thiết" sao? Điều này có nghĩa là tất cả các biểu thức logic chỉ có thể được thực hiện bằng cách sử dụng ||!?


83
Đây là một câu hỏi logic biểu tượng cơ bản hơn là một vấn đề Java, nhưng có. HOẶC và KHÔNG kết hợp có thể được sử dụng để xây dựng mọi thứ khác. Tương tự với VÀ và KHÔNG. Ví dụ, khi tôi còn đi học, chúng tôi được dạy xây dựng mọi thứ chỉ bằng cổng NAND vì chúng lấy ít bóng bán dẫn hơn.
azurefrog

79
Đừng nhầm lẫn khả năng viết một tuyên bố theo cách này với mong muốn làm điều đó. Đường cú pháp là một điều tốt .
azurefrog

20
Nhiều chip cổng logic chỉ cung cấp cổng NAND hoặc NOR vì có thể thực hiện tất cả các hoạt động với chúng và điều đó khiến chúng có giá rẻ để sản xuất - A and B == !A nor !B == !(!A or !B). Tương tự như vậy A or B == !A nand !B == !(!A and !B). Rõ ràng việc chuyển cùng một giá trị cho cả hai đầu vào của NAND hoặc NOR sẽ cho kết quả giống như một KHÔNG đơn giản. XOR và XNOR cũng có thể nhưng phức tạp hơn. Xem định lý của De Morgan
Cơ bản

16
Đây không phải là một câu hỏi khoa học máy tính? Tôi thấy không có mã ở đây. Cụ thể, liệu điều này có đúng trong thực tế hay không sẽ thay đổi theo cách thực hiện, ví dụ như trong C ++ với việc quá tải hoạt động thì không phải nói chung.
Các cuộc đua Lightness trong quỹ đạo

6
@SnakeDoc Tôi không nghĩ có ai ở đây ủng hộ để làm điều đó. Tôi tin rằng câu hỏi này là câu hỏi logic lý thuyết, hơn là một câu hỏi lập trình, thực sự.
ryuu9187

Câu trả lời:


425

Vâng, như các câu trả lời khác chỉ ra, tập hợp các toán gồm ||!chức năng hoàn chỉnh . Đây là một bằng chứng mang tính xây dựng về điều đó, cho thấy cách sử dụng chúng để thể hiện tất cả mười sáu kết nối logic có thể có giữa các biến boolean AB:

Lưu ý rằng cả NAND và NOR đều tự hoàn thành về mặt chức năng (có thể được chứng minh bằng cách sử dụng cùng một phương pháp ở trên), vì vậy nếu bạn muốn xác minh rằng một tập hợp toán tử đã hoàn thành về mặt chức năng, đủ để cho thấy rằng bạn có thể biểu thị NAND hoặc NOR với nó.

Dưới đây là biểu đồ hiển thị biểu đồ Venn cho từng kết nối được liệt kê ở trên:

nhập mô tả hình ảnh ở đây

[ nguồn ]


20
Thật khó để biết liệu câu hỏi có ý định này hay không, nhưng câu trả lời này không giải quyết được hành vi ngắn mạch (có liên quan, vì câu hỏi hỏi về ||thay vì |) hoặc tác dụng phụ (có liên quan vì việc mở rộng đánh giá đúng, sai, XOR và XNOR đối số của họ nhiều lần hơn hằng số ban đầu hoặc toán tử đã làm).
David Richerby

5
Các vòng tròn chứa các vòng tròn và chuyển tiếp tạo thành Biểu đồ Hasse ( en.wikipedia.org/wiki/Hasse_diagram ). (Yay, hôm nay tôi đã học được một điều mới!)
Kasper van den Berg

5
@DavidR Richby Đó là sự thật. Khác với XOR, XNOR, đúng và sai, theo như tôi có thể nói, các tác dụng phụ và số lượng đánh giá phải giống như các tương đương tích hợp (ví dụ: !(!A || !B)có cùng số lượng ngắn mạch và đánh giá như A && B). Tôi không nghĩ bạn có thể làm điều này cho XOR và XNOR mà không cần các cấu trúc bổ sung (ví dụ a ? !b : b) và đúng hay sai không phải là vấn đề nếu bạn có thể lưu các giá trị, vì bạn có thể bắt đầu chương trình của mình bằng cách xác định truefalsesử dụng một số biến boolean giả.
Peter Olson

Thật thú vị khi lưu ý rằng danh sách trên bao gồm 16 thao tác. Điều này phù hợp với thực tế là có 16 bảng chân lý có thể cho trường hợp bạn có 2 đầu vào và 1 đầu ra.
Paul R

1
Chỉ muốn thêm một hình ảnh trực quan khác như một bảng để tham khảo của mọi người. Cùng một nguồn như trên.
Tháng Tám

125

Những gì bạn đang mô tả là đầy đủ chức năng .

Phần này mô tả một tập hợp các toán tử logic đủ để "diễn đạt tất cả các bảng chân lý có thể". Toán tử Java của bạn được đặt, { ||,! }, là đủ; nó tương ứng với tập {∨,}, được liệt kê trong phần "Bộ toán tử hoàn thành chức năng tối thiểu".

Tập hợp tất cả các bảng chân lý có nghĩa là tất cả các bộ có thể có 4 giá trị boolean có thể là kết quả của một hoạt động giữa 2 giá trị boolean. Bởi vì có 2 giá trị có thể cho một boolean, có 2 4 hoặc 16, các bảng chân lý có thể.

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

Dưới đây là bảng các số của bảng chân lý (0-15), ||và các !kết hợp mang lại nó và mô tả.

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

Có rất nhiều bộ hoàn chỉnh chức năng khác, bao gồm một bộ phần tử {NAND} và {NOR}, không có các toán tử đơn tương ứng trong Java.


4
+1 cho chỉnh sửa. Mặc dù có sự khác biệt về số phiếu, tôi nghĩ rằng câu trả lời của bạn thực sự chi tiết hơn của tôi bây giờ.
Peter Olson

Bàn chân lý tôi nghĩ rằng tôi đã bỏ lại họ sau năm đầu tiên ở trường đại học
Barkermn01

80

Đúng.

Tất cả các cổng logic có thể được thực hiện từ cổng NOR.

Vì một cổng NOR có thể được tạo từ KHÔNG và OR, kết quả như sau.


64
@PaulDraper hoặc cổng NAND
slebetman

25
Phải mất 4100 cổng NOR để hạ cánh hai người trên mặt trăng.
Hans Passant

4
@HansPassant Và một số chuỗi. Rất nhiều chuỗi. (Bộ nhớ dây lõi, không phải hộp thiếc có thể đa dạng.)
CVn

3
@HansPassant Đôi khi tôi muốn Stack Exchange là Wikipedia, sau đó tôi sẽ chèn một [citation-needed]dấu ngay tại đó.
Simon Forsberg


64

Dành thời gian để đọc về Luật DeMorgan nếu bạn có thể.

Bạn sẽ tìm thấy câu trả lời trong bài đọc ở đó, cũng như các tài liệu tham khảo cho các bằng chứng logic.

Nhưng thực chất, câu trả lời là có.

EDIT : Đối với nhân chứng, quan điểm của tôi là người ta có thể suy luận một cách logic một biểu thức OR từ một biểu thức AND và ngược lại. Có nhiều luật hơn về sự tương đương và suy luận logic, nhưng tôi nghĩ rằng đây là hầu hết các apropos.


EDIT 2 : Đây là một bằng chứng thông qua bảng chân lý cho thấy sự tương đương logic của biểu thức sau đây.

Luật của DeMorgan: !(!A || !B) -> A && B

 Giới thiệu
| Một | 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 |
Giới thiệu

19
Một số người phải bỏ phiếu như là một phần của "tính đầy đủ chức năng" của họ
Jesse

3
Ở mức + 27 / -2, tôi sẽ không lo lắng nhiều về một downvote đi lạc.
một CVn

2
@ MichaelKjorling Tôi chỉ tò mò tại sao một số người nghĩ rằng câu trả lời của tôi không hữu ích / có hại.
ryuu9187

3
Nói chung, các câu trả lời dựa trên các liên kết không được yêu thích quá nhiều (vì liên kết bị chết), nhưng trong trường hợp này, có rất nhiều cách giải thích khác về Luật DeMorgan, mà tôi không thấy vấn đề gì - vẫn vậy, đó là suy đoán của tôi đối với DV's
user2813274

@ user2813274 Cảm ơn bạn đã giải thích. Hy vọng, các chỉnh sửa của tôi sẽ giúp thu hẹp khoảng cách giữa nghiên cứu cá nhân và đi đến câu trả lời.
ryuu9187

11

NANDNOR là phổ quát, chúng có thể được sử dụng để xây dựng bất kỳ hoạt động logic nào bạn muốn ở bất cứ đâu; toán tử khác có sẵn trong các ngôn ngữ lập trình để giúp dễ viết và tạo mã dễ đọc.

Ngoài ra, tất cả các hoạt động logic cần thiết trong mạch điện cũng được phát triển bằng cách sử dụng IC chỉ NAND hoặc NOR.


10

Đúng, theo đại số Boolean, bất kỳ hàm Boolean nào cũng có thể được biểu diễn dưới dạng tổng của minterms hoặc sản phẩm của maxterms, được gọi là dạng chuẩn chính tắc . Không có lý do tại sao logic như vậy không thể được áp dụng cho các toán tử tương tự được sử dụng trong khoa học máy tính.

https://en.wikipedia.org/wiki/Canonical_n normal_form

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.