Apakah || dan! operator cukup untuk membuat setiap kemungkinan ekspresi logis?

294

Ekspresi logis ( a && b ) (keduanya adan bmemiliki nilai boolean) dapat ditulis seperti !(!a || !b), misalnya. Bukankah ini berarti &&"tidak perlu"? Apakah ini berarti bahwa semua ekspresi logis hanya dapat dibuat menggunakan ||dan !?

JakeTheNake
sumber
83
Ini lebih merupakan pertanyaan logika simbolis dasar daripada masalah Java, tapi ya. ATAU dan BUKAN dalam kombinasi dapat digunakan untuk membangun yang lainnya. Sama dengan DAN dan TIDAK. Misalnya, ketika saya masih di sekolah kami diajarkan untuk membangun semuanya hanya menggunakan gerbang NAND karena mereka menggunakan lebih sedikit transistor.
azurefrog
79
Jangan bingung kemampuan untuk menulis pernyataan seperti ini dengan keinginan untuk melakukannya. Gula sintaksis adalah hal yang baik .
azurefrog
20
Banyak chip gerbang logika hanya menyediakan gerbang NAND atau NOR karena memungkinkan untuk mengimplementasikan semua operasi dengannya dan membuatnya murah untuk diproduksi - A and B == !A nor !B == !(!A or !B). Demikian juga A or B == !A nand !B == !(!A and !B). Jelas melewati nilai yang sama untuk kedua input dari NAND atau NOR akan memberikan hasil yang sama dengan TIDAK sederhana. XOR dan XNOR juga dimungkinkan tetapi lebih kompleks. Lihat teorema De Morgan
Dasar
16
Bukankah ini pertanyaan ilmu komputer? Saya tidak melihat kode di sini. Secara khusus, apakah ini benar dalam praktiknya akan bervariasi berdasarkan implementasi, misalnya dalam C ++ dengan operasi overloading itu tidak secara umum.
Lightness Races in Orbit
6
@SnakeDoc Saya tidak berpikir ada orang di sini yang menganjurkan untuk melakukan hal seperti itu. Saya percaya pertanyaan ini lebih merupakan pertanyaan logika teoretis, daripada pertanyaan pemrograman.
ryuu9187

Jawaban:

425

Ya, seperti yang ditunjukkan oleh jawaban lain, sekumpulan operator terdiri dari ||dan !secara fungsional lengkap . Berikut ini adalah bukti konstruktif dari itu, menunjukkan bagaimana menggunakannya untuk mengekspresikan semua enam belas kemungkinan koneksi logis antara variabel boolean Adan B:

Perhatikan bahwa NAND dan NOR sendiri secara fungsional telah selesai (yang dapat dibuktikan menggunakan metode yang sama di atas), jadi jika Anda ingin memverifikasi bahwa satu set operator secara fungsional selesai, itu cukup untuk menunjukkan bahwa Anda dapat mengekspresikan NAND atau NOR dengan itu.

Berikut ini adalah grafik yang menunjukkan diagram Venn untuk masing-masing penghubung yang tercantum di atas:

masukkan deskripsi gambar di sini

[ sumber ]

Peter Olson
sumber
20
Sulit untuk mengatakan apakah pertanyaannya bermaksud ini, tetapi jawaban ini tidak membahas perilaku hubungan pendek (relevan, karena pertanyaannya tentang ||bukan |) atau efek samping (relevan karena perluasan dari true, false, XOR dan XNOR mengevaluasi argumen mereka lebih sering daripada konstanta atau operator asli lakukan).
David Richerby
5
Lingkaran yang berisi lingkaran dan transisi membentuk Diagram Hasse ( en.wikipedia.org/wiki/Hasse_diagram ). (Yay, saya belajar sesuatu yang baru hari ini!)
Kasper van den Berg
5
@ DavidRicherby Itu benar. Selain XOR, XNOR, benar, dan salah, sejauh yang saya tahu, efek samping dan jumlah evaluasi harus sama dengan built-in equivalents (misalnya !(!A || !B)memiliki hubung pendek dan jumlah evaluasi yang sama dengan A && B). Saya tidak berpikir Anda bisa melakukan ini untuk XOR dan XNOR tanpa konstruksi tambahan (misalnya a ? !b : b), dan benar atau salah bukanlah masalah jika Anda dapat menyimpan nilai, karena Anda dapat memulai program Anda dengan mendefinisikan truedan falsemenggunakan beberapa variabel boolean dummy.
Peter Olson
Sangat menarik untuk dicatat bahwa daftar di atas terdiri dari 16 operasi. Ini konsisten dengan fakta bahwa ada 16 tabel kebenaran yang memungkinkan untuk kasus di mana Anda memiliki 2 input dan 1 output.
Paul R
1
Hanya ingin menambahkan visualisasi lain sebagai tabel untuk referensi orang. Sumber yang sama seperti di atas.
Agustus
125

Apa yang Anda gambarkan adalah kelengkapan fungsional .

Ini menggambarkan seperangkat operator logis yang cukup untuk "mengungkapkan semua tabel kebenaran yang mungkin". Set operator Java Anda, { ||,! }, cukup; itu sesuai dengan set {∨, ¬}, yang terdaftar di bawah bagian "Minimal set lengkap operator fungsional".

Himpunan semua tabel kebenaran berarti semua set yang mungkin dari 4 nilai boolean yang dapat merupakan hasil operasi antara 2 nilai boolean. Karena ada 2 nilai yang mungkin untuk boolean, ada 2 4 , atau 16, tabel kebenaran yang mungkin.

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

Berikut adalah tabel angka-angka tabel kebenaran (0-15), ||dan !kombinasi yang menghasilkannya, dan deskripsi.

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

Ada banyak set lengkap yang berfungsi seperti itu, termasuk set elemen satu {NAND} dan {NOR}, yang tidak memiliki operator tunggal yang sesuai di Jawa.

rgettman
sumber
4
+1 untuk hasil edit. Meskipun ada perbedaan dalam penghitungan suara, saya pikir jawaban Anda sebenarnya lebih detail dari saya sekarang.
Peter Olson
Tabel Kebenaran Saya pikir saya telah meninggalkan mereka setelah tahun pertama di universitas
Barkermn01
80

Iya.

Semua gerbang logika dapat dibuat dari gerbang NOR.

Karena gerbang NOR dapat dibuat dari TIDAK dan OR, hasilnya mengikuti.

Paul Boddington
sumber
64
@PaulDraper atau NAND gates
slebetman
25
Butuh 4100 gerbang NOR untuk mendaratkan dua orang di bulan.
Hans Passant
4
@HansPassant Dan beberapa string. Banyak tali. (Memori tali inti, bukan variasi kaleng).
CVn
3
@HansPassant Terkadang saya berharap Stack Exchange adalah Wikipedia, maka saya akan memasukkan [citation-needed]tanda di sana.
Simon Forsberg
11
Ya, maaf, komputer panduan Apollo .
Hans Passant
64

Luangkan waktu untuk membaca Hukum DeMorgan jika Anda bisa.

Anda akan menemukan jawabannya di bacaan di sana, serta referensi ke bukti logis.

Tetapi pada dasarnya, jawabannya adalah ya.

EDIT : Sebagai penjelasan, poin saya adalah bahwa seseorang dapat secara logis mengambil ekspresi ATAU dari ekspresi DAN, dan sebaliknya. Ada lebih banyak hukum juga untuk kesetaraan dan kesimpulan logis, tapi saya pikir ini yang paling tepat.


EDIT 2 : Berikut ini adalah bukti melalui tabel kebenaran yang menunjukkan kesetaraan logis dari ungkapan berikut.

Hukum 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 |
_______________________________________________________
ryuu9187
sumber
19
Beberapa orang harus memilih sebagai bagian dari "kelengkapan fungsional" mereka
Jesse
3
Pada + 27 / -2, saya tidak akan terlalu khawatir tentang downvote nyasar.
CVn
2
@ MichaelKjörling Saya hanya ingin tahu mengapa beberapa orang berpikir jawaban saya tidak membantu / berbahaya.
ryuu9187
3
Umumnya jawaban yang bergantung pada tautan tidak terlalu disukai (seperti tautan mati), tetapi dalam hal ini ada begitu banyak penjelasan alternatif tentang Hukum DeMorgan, sehingga saya tidak melihat masalah - tetap saja itulah dugaan saya mengenai DV's
user2813274
@ user2813274 Terima kasih atas penjelasannya. Mudah-mudahan, suntingan saya akan membantu menjembatani kesenjangan antara penelitian pribadi dan mendapatkan jawaban.
ryuu9187
11

NAND dan NOR bersifat universal, mereka dapat digunakan untuk membangun operasi logis yang Anda inginkan di mana saja; operator lain tersedia dalam bahasa pemrograman untuk membuatnya mudah untuk menulis dan membuat kode yang dapat dibaca.

Juga semua operasi logis yang diperlukan untuk kabel di sirkuit juga dikembangkan menggunakan IC hanya NAND atau NOR.

anand
sumber
10

Ya, menurut aljabar Boolean, fungsi Boolean apa pun dapat dinyatakan sebagai jumlah minterm atau produk maxterms, yang disebut bentuk normal kanonik . Tidak ada alasan mengapa logika seperti itu tidak dapat diterapkan pada operator yang sama yang digunakan dalam ilmu komputer.

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

Michał Szydłowski
sumber