คือ || และ! ผู้ประกอบการเพียงพอที่จะทำให้ทุกการแสดงออกทางตรรกะที่เป็นไปได้?


294

ตัวอย่างการแสดงออกทางตรรกะ( a && b ) (ทั้งaและbมีค่าบูลีน)สามารถเขียนได้!(!a || !b)เช่น นี่ไม่ได้หมายความว่า&&เป็นสิ่งที่ไม่จำเป็นหรือ? นี่หมายความว่านิพจน์เชิงตรรกะทั้งหมดสามารถทำได้โดยใช้||และ!?


83
นี่เป็นคำถามเชิงสัญลักษณ์เชิงตรรกะพื้นฐานมากกว่าปัญหาของ Java แต่ใช่ หรือไม่รวมกันสามารถใช้ในการสร้างทุกอย่างอื่น เช่นเดียวกันกับ 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 ++ กับการดำเนินงานมากไปก็ไม่ได้โดยทั่วไป
การแข่งขัน Lightness ใน Orbit

6
@ SnakeDoc ฉันไม่คิดว่าทุกคนที่นี่สนับสนุนให้ทำสิ่งนี้ ฉันเชื่อว่าคำถามนี้เป็นคำถามเชิงทฤษฎีมากกว่าคำถามหนึ่งในการเขียนโปรแกรมจริงๆ
ryuu9187

คำตอบ:


425

ใช่เป็นคำตอบอื่น ๆ ชี้ให้เห็นชุดของผู้ประกอบการที่ประกอบการ||และ!เป็นที่สมบูรณ์ตามหน้าที่ นี่คือข้อพิสูจน์เชิงสร้างสรรค์ของสิ่งนั้นซึ่งแสดงให้เห็นว่าจะใช้มันอย่างไรเพื่อแสดงการเชื่อมต่อทางตรรกะทั้งสิบหกที่เป็นไปได้ระหว่างตัวแปรบูลีนAและB:

โปรดทราบว่าทั้ง NAND และ NOR นั้นทำหน้าที่ของตัวเองให้เสร็จสมบูรณ์ (ซึ่งสามารถพิสูจน์ได้โดยใช้วิธีเดียวกันข้างต้น) ดังนั้นหากคุณต้องการตรวจสอบว่าชุดของตัวดำเนินการเสร็จสมบูรณ์ตามหน้าที่แล้วก็เพียงพอที่จะแสดงว่าคุณสามารถแสดง NAND หรือ NOR ได้ กับมัน

นี่คือกราฟแสดงVenn diagramsสำหรับแต่ละส่วนเชื่อมต่อที่แสดงด้านบน:

ป้อนคำอธิบายรูปภาพที่นี่

[ แหล่งที่มา ]


20
เป็นการยากที่จะบอกว่าคำถามนี้มีจุดประสงค์หรือไม่ แต่คำตอบนี้ไม่ได้ตอบสนองพฤติกรรมลัดวงจร (เกี่ยวข้องเนื่องจากคำถามถาม||มากกว่า|) หรือผลข้างเคียง (เกี่ยวข้องเนื่องจากการขยายตัวของจริงเท็จ XOR และ XNOR ประเมิน อาร์กิวเมนต์ของพวกเขามากกว่าค่าคงที่เดิมหรือโอเปอเรเตอร์ได้)
David Richerby

5
วงกลมที่มีวงกลมและช่วงการเปลี่ยนภาพเป็น Hasse Diagram ( en.wikipedia.org/wiki/Hasse_diagram ) (วันนี้ฉันเรียนรู้สิ่งใหม่วันนี้!)
Kasper van den Berg

5
@DavidRicherby นั่นเป็นเรื่องจริง นอกเหนือจาก XOR, XNOR, จริงและเท็จเท่าที่ฉันสามารถบอกได้ผลข้างเคียงและจำนวนของการประเมินควรจะเหมือนกับในตัวเทียบเท่า (เช่น!(!A || !B)มีการลัดวงจรและการประเมินการนับเดียวกันA && B) ฉันไม่คิดว่าคุณสามารถทำสิ่งนี้เพื่อ XOR และ XNOR โดยไม่มีโครงสร้างเพิ่มเติม (เช่นa ? !b : b) และจริงหรือเท็จไม่ใช่ปัญหาหากคุณสามารถบันทึกค่าได้เนื่องจากคุณสามารถเริ่มโปรแกรมของคุณโดยการกำหนดtrueและfalseใช้ตัวแปรบูลีนจำลอง
ปีเตอร์โอลสัน

เป็นที่น่าสนใจที่จะทราบว่ารายการข้างต้นประกอบด้วยการดำเนินงาน 16 ครั้ง นี่สอดคล้องกับความจริงที่ว่ามี 16 ตารางความจริงที่เป็นไปได้สำหรับกรณีที่คุณมี 2 อินพุตและ 1 เอาต์พุต
Paul R

1
แค่ต้องการเพิ่มการสร้างภาพข้อมูลอื่นเป็นตารางสำหรับการอ้างอิงของผู้คน แหล่งเดียวกันข้างต้น
ส.ค.

125

สิ่งที่คุณกำลังอธิบายคือความสมบูรณ์แบบในการใช้งาน

สิ่งนี้อธิบายชุดของตัวดำเนินการเชิงตรรกะที่เพียงพอที่จะ "แสดงตารางความจริงที่เป็นไปได้ทั้งหมด" ชุดตัวดำเนินการ Java ของคุณ { ||, !} เพียงพอแล้ว; มันสอดคล้องกับชุด {∨, ¬} ซึ่งอยู่ภายใต้ส่วน "ชุดตัวดำเนินการที่สมบูรณ์แบบที่ใช้งานได้น้อยที่สุด"

ชุดของตารางความจริงทั้งหมดหมายถึงชุดที่เป็นไปได้ทั้งหมดของค่าบูลีน 4 ค่าที่สามารถเป็นผลลัพธ์ของการดำเนินการระหว่างค่าบูลีน 2 ค่า เนื่องจากมีค่าที่เป็นไปได้ 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

มีอีกหลายชุดที่ทำหน้าที่ได้อย่างสมบูรณ์เช่นชุดหนึ่งองค์ประกอบ {NAND} และ {NOR} ซึ่งไม่มีโอเปอเรเตอร์เดียวใน Java


4
+1 สำหรับการแก้ไข แม้จะมีความแตกต่างในการนับคะแนน แต่ฉันคิดว่าคำตอบของคุณมีรายละเอียดมากกว่าของฉันในตอนนี้
Peter Olson

Truth Tables ฉันคิดว่าฉันทิ้งพวกเขาไว้หลังจากปีแรกในมหาวิทยาลัย
Barkermn01

80

ใช่.

ลอจิกประตูทั้งหมดสามารถทำจากประตู NOR

เนื่องจากประตู NOR สามารถสร้างได้จาก NOT และ OR ผลลัพธ์จึงเป็นดังนี้


64
@PaulDraper หรือ NAND gates
slebetman

25
มันใช้ประตู 4100 NOR เพื่อลงจอดสองคนบนดวงจันทร์
Hans Passant

4
@HansPassant และสตริงบางส่วน สตริงมากมาย (หน่วยความจำเชือกแกนไม่ใช่ดีบุกสามารถหลากหลายได้)
CVn

3
@HansPassant บางครั้งฉันต้องการ Stack Exchange เป็น Wikipedia จากนั้นฉันก็จะใส่[citation-needed]เครื่องหมายที่นั่น
Simon Forsberg

11
ใช่ขอโทษคอมพิวเตอร์คำแนะนำอพอลโล
Hans Passant

64

ใช้เวลาอ่านกฎหมายของ DeMorganถ้าคุณทำได้

คุณจะพบคำตอบในการอ่านที่นั่นเช่นเดียวกับการอ้างอิงถึงการพิสูจน์ตรรกะ

แต่โดยพื้นฐานแล้วคำตอบคือใช่

แก้ไข : สำหรับ explicitness จุดของฉันคือว่าหนึ่งสามารถสรุปการแสดงออก OR จากตรรกะและการแสดงออกและในทางกลับกัน มีกฎหมายมากขึ้นเช่นกันสำหรับความเท่าเทียมเชิงตรรกะและการอนุมาน แต่ฉันคิดว่านี่เป็นข้อเสนอที่ดีที่สุด


แก้ไข 2 : ต่อไปนี้เป็นข้อพิสูจน์ผ่านตารางความจริงที่แสดงความเสมอภาคเชิงตรรกะของนิพจน์ต่อไปนี้

กฎหมายของ DeMorgan: !(!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
ที่ +1 / 27 / -2 ฉันไม่ต้องกังวลมากเกี่ยวกับ downvote หลงทาง
CVn

2
@ MichaelKjörlingฉันแค่อยากรู้ว่าทำไมบางคนคิดว่าคำตอบของฉันไม่เป็นประโยชน์ / เป็นอันตราย
ryuu9187

3
โดยทั่วไปคำตอบที่พึ่งพาลิงก์จะไม่ชอบมากเกินไป (ในกรณีที่ลิงก์ตาย) แต่ในกรณีนี้มีคำอธิบายอื่น ๆ มากมายตามกฎหมายของ DeMorgan ที่ฉันไม่เห็นปัญหา DV's
2813274

@ user2813274 ขอบคุณสำหรับคำอธิบาย หวังว่าการแก้ไขของฉันจะช่วยลดช่องว่างระหว่างการวิจัยส่วนบุคคลและการได้รับคำตอบ
ryuu9187

11

NANDและNORเป็นสากลที่สามารถใช้เพื่อสร้างการดำเนินการทางตรรกะที่คุณต้องการได้ทุกที่ ตัวดำเนินการอื่นมีอยู่ในภาษาการเขียนโปรแกรมเพื่อให้ง่ายต่อการเขียนและสร้างรหัส

นอกจากนี้การดำเนินการทางตรรกะทั้งหมดที่จำเป็นสำหรับการเดินสายในวงจรได้รับการพัฒนาโดยใช้ไอซี NAND หรือ NOR เท่านั้น


10

ใช่ตามพีชคณิตแบบบูลฟังก์ชั่นบูลีนใด ๆ ที่สามารถแสดงเป็นผลรวมของ minterms หรือผลิตภัณฑ์ของ maxterms ซึ่งเรียกว่ารูปแบบบัญญัติ ไม่มีเหตุผลใดที่เหตุผลดังกล่าวไม่สามารถใช้กับผู้ให้บริการรายเดียวกันที่ใช้ในวิทยาการคอมพิวเตอร์

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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.