|| ve ! operatörler mümkün olan her mantıksal ifadeyi yapmak için yeterli mi?


294

Mantıksal ifade ( a && b ) (her ikisi de ave bmantıksal değerleri) gibi yazılabilir !(!a || !b)örneğin. Bu &&"gereksiz" anlamına gelmiyor mu? Bu, tüm mantıksal ifadelerin yalnızca ||ve kullanılarak yapılabileceği anlamına mı geliyor !?


83
Bu, bir Java sorunundan ziyade temel bir sembolik mantık sorusudur, ancak evet. VEYA ve NOT birlikte başka her şeyi inşa etmek için kullanılabilir. AND ve NOT ile aynı. Örneğin, okuldayken daha az transistör aldıkları için her şeyi sadece NAND kapılarını kullanarak yapmamız öğretildi.
azurefrog

79
Bu şekilde bir ifade yazabilme yeteneğini, bunu yapma arzusuyla karıştırmayın. Sözdizimsel şeker iyi bir şeydir.
azurefrog

20
Birçok mantık kapısı yongası sadece NAND veya NOR kapılarını sağlar, çünkü onlarla tüm işlemleri uygulamak mümkün ve bunları üretmeyi ucuzlaştırır A and B == !A nor !B == !(!A or !B). Aynı şekilde A or B == !A nand !B == !(!A and !B). Bir NAND veya NOR'nun her iki girişine de aynı değerin iletilmesi, basit bir NOT ile aynı sonucu verecektir. XOR ve XNOR da mümkündür ancak daha karmaşıktır. De Morgan teoremini görün
Temel

16
Bu bir bilgisayar bilimi sorunu değil mi? Burada kod görmüyorum. Özellikle, bunun pratikte doğru olup olmadığı uygulamaya göre değişecektir, örneğin C ++ 'da aşırı çalışma yükü ile genel olarak değildir .
Yörüngedeki Hafiflik Yarışları

6
@SnakeDoc Burada kimsenin böyle bir şey yapmayı savunduğunu sanmıyorum. Bu sorunun gerçekten bir programlama sorusundan ziyade teorik mantık sorusu olduğuna inanıyorum.
ryuu9187

Yanıtlar:


425

Diğer cevaplar belirttiği gibi Evet, operatörlerin kümesi oluşan ||ve !bir işlevsel olarak tam . Aşağıda, boole değişkenleri arasındaki on altı olası mantıksal bağlantının tümünü ifade etmek için nasıl kullanılacağını gösteren yapıcı bir kanıt Ave B:

Hem NAND hem de NOR kendiliğinden işlevsel olarak eksiksizdir (yukarıdaki aynı yöntem kullanılarak kanıtlanabilir), bu nedenle bir dizi operatörün işlevsel olarak tamamlandığını doğrulamak istiyorsanız, NAND veya NOR'u ifade edebileceğinizi göstermek yeterlidir. Bununla.

Yukarıda listelenen bağlayıcıların her biri için Venn diyagramlarını gösteren bir grafik :

resim açıklamasını buraya girin

[ kaynak ]


20
Sorunun bunu niyet edip etmediğini söylemek zordur, ancak bu cevap kısa devre davranışını (sorudan ||ziyade sorulduğundan beri alakalı |) veya yan etkileri (doğru, yanlış, XOR ve XNOR'un genişlemesi nedeniyle ilgili değildir) argümanlarını orijinal sabit veya operatörden daha fazla kez).
David Richerby

5
Daireler ve geçişler içeren daireler bir Hasse Diyagramı oluşturur ( en.wikipedia.org/wiki/Hasse_diagram ). (Yay, bugün yeni bir şey öğrendim!)
Kasper van den Berg

5
@DavidRicherby Bu doğru. XOR, XNOR, doğru ve yanlış dışında, anlayabildiğim kadarıyla, yan etkiler ve değerlendirme sayısı yerleşik eşdeğerlerle aynı olmalıdır (örn !(!A || !B). Aynı kısa devre ve değerlendirme sayısına sahiptir A && B). Ben (örneğin ek yapılarla olmadan XOR ve XNOR için bunu yapabilirsiniz sanmıyorum a ? !b : b) ve tanımlayarak programınızı başlayabileceğini beri, değerleri kaydetmek eğer doğru veya yanlış bir sorun değildir trueve falsebazı kukla boole değişkeni kullanılarak.
Peter Olson

Yukarıdaki listenin 16 işlem içerdiğini belirtmek ilginçtir. Bu, 2 giriş ve 1 çıktınız olduğu durumda 16 olası doğruluk tablosunun olmasıyla tutarlıdır.
Paul R

1
İnsanların referansı için bir tablo olarak başka bir görselleştirme eklemek istedim . Yukarıdaki ile aynı kaynak.
Ağustos

125

Açıkladığınız şey işlevsel bütünlüktür .

Bu, "tüm olası doğruluk tablolarını ifade etmek" için yeterli olan bir dizi mantıksal işleçleri açıklar. Java operatör kümeniz { ||, !} yeterlidir; "Minimal işlevsel olarak tam operatör setleri" bölümünde listelenen {∨, ¬} kümesine karşılık gelir.

Tüm doğruluk tabloları kümesi, 2 boolean değeri arasındaki bir işlemin sonucu olabilecek tüm olası 4 boolean değer kümesi anlamına gelir. Bir boole için 2 olası değer olduğundan, 2 4 veya 16 olası doğruluk tablosu vardır.

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

İşte doğruluk tablosu numaralarının (0-15) bir tablosu ||ve !onu veren kombinasyonlar ve bir açıklama.

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'da karşılık gelen tek işleçleri olmayan {NAND} ve {NOR} bir öğe kümesi de dahil olmak üzere işlevsel olarak tamamlanmış bu tür diğer pek çok küme vardır.


4
Düzenleme için +1. Oy sayısındaki farka rağmen, cevabın aslında benimkinden daha detaylı olduğunu düşünüyorum.
Peter Olson

Doğruluk Tabloları üniversitede ilk yıldan sonra geride bıraktığımı sanıyordum
Barkermn01

80

Evet.

Tüm mantık kapıları NOR kapılarından yapılabilir.

NOT ve OR'den NOR geçidi yapılabileceğinden, sonuç aşağıdaki gibidir.


64
@PaulDraper veya NAND kapıları
slebetman

25
Ayda iki kişinin inmesi 4100 NOR geçidi aldı.
Hans Passant

4
@HansPassant Ve bazı dize. Çok sayıda dize. (Çekirdek halat hafızası, teneke kutu çeşidi değil.)
CVn

3
@HansPassant Bazen Stack Exchange'in Wikipedia olmasını isterdim, o zaman [citation-needed]buraya bir işaret eklerdim .
Simon Forsberg


64

Mümkünse DeMorgan Yasalarını okumak için zaman ayırın .

Buradaki okumada yanıtı ve mantıksal kanıtlara referansları bulacaksınız.

Ama aslında cevap evet.

EDIT : Açıklık, benim açımdan bir AND ifadesi bir OR ifadesi mantıklı bir şekilde çıkarım, ya da tersi olmasıdır. Mantıksal denklik ve çıkarım için daha fazla yasa var, ama bence bu en apropos.


DÜZENLEME 2 : İşte aşağıdaki ifadenin mantıksal denkliğini gösteren doğruluk tablosu aracılığıyla bir kanıt.

DeMorgan Yasası: !(!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
Bazı insanlar "işlevsel bütünlükleri" nin bir parçası olarak oy vermek zorunda
Jesse

3
+ 27 / -2'de başıboş bir düşüş hakkında endişelenmezdim.
CVn

2
@ MichaelKjörling Bazı insanların cevabımın neden yararlı olmadığını / zararlı olduğunu düşündüğünü merak ediyorum.
ryuu9187

3
Genel olarak bağlantılara dayanan cevaplar çok beğenilmez (bağlantılar öldükçe), ancak bu durumda DeMorgan Yasalarının çok fazla alternatif açıklaması vardır, bir sorun görmüyorum - yine de, bu benim tahminim DV en
user2813274

@ user2813274 Açıklama için teşekkürler. Umarım yaptığım düzenlemeler kişisel araştırma ile cevaba ulaşmak arasındaki uçurumu kapatmaya yardımcı olacaktır.
ryuu9187

11

NAND ve NOR evrenseldir, herhangi bir yerde istediğiniz herhangi bir mantıksal işlemi oluşturmak için kullanılabilirler; diğer operatörler, okunabilir kodların yazılmasını ve yapılmasını kolaylaştırmak için programlama dillerinde mevcuttur.

Ayrıca devrede kablo bağlantısı yapılması gereken tüm mantıksal işlemler de NAND veya yalnızca NOR IC'leri kullanılarak geliştirilir.


Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.