Aljabar boolean adalah cabang matematika yang mendasari setiap chip di dalam komputer, yakni rangkaian logika yang dibuat sebagai satu komponen fisik. Topik ini membahas tiga operasi dasar beserta operasi XOR, tabel kebenaran yang mendefinisikannya, dan hukum-hukum penyederhanaan ekspresi boolean. Notasi yang diperkenalkan di sini menjadi notasi baku untuk seluruh jalur. Pada bagian akhir, hukum de Morgan dan hukum distributif diverifikasi dengan program Python yang menelusuri seluruh kombinasi nilai masukan.
Operasi dasar AND, OR, dan NOT#
Aljabar boolean bekerja atas nilai yang hanya mengenal dua keadaan, yaitu 1 untuk benar dan 0 untuk salah. Satu angka biner semacam ini disebut bit, yakni satuan data terkecil pada perangkat keras. Tiga operasi dasar merangkai bit-bit itu: AND menghasilkan 1 hanya apabila kedua masukannya bernilai 1, OR menghasilkan 1 apabila salah satu masukannya bernilai 1, dan NOT membalik nilai masukannya. Perilaku setiap operasi didefinisikan lengkap oleh tabel kebenaran (truth table), yaitu daftar keluaran untuk seluruh kemungkinan masukan.
| 0 | 0 | 0 | 0 | 1 |
| 0 | 1 | 0 | 1 | 1 |
| 1 | 0 | 0 | 1 | 0 |
| 1 | 1 | 1 | 1 | 0 |
Notasi mengikuti kebiasaan buku teks perangkat keras. Konjungsi AND ditulis dengan titik, , disjungsi OR ditulis dengan tanda tambah, , sedangkan negasi NOT ditulis sebagai garis di atas variabel, . Tanda titik sering ditiadakan sehingga juga ditulis . Urutan pengerjaannya sejajar aritmetika biasa: NOT bekerja lebih dahulu, kemudian AND, dan OR paling akhir. Dua ekspresi yang menghasilkan tabel kebenaran yang sama dinyatakan ekuivalen, dan tanda sama dengan menunjukkan ekuivalensi itu.
XOR, literal, dan minterm#
Operasi gabungan yang paling sering dipakai di sepanjang jalur ini adalah XOR (exclusive or), yang menghasilkan 1 tepat apabila kedua masukannya berbeda. Operasi ini ditulis dan dinyatakan dalam operasi dasar sebagai
Pembacaan ekspresi boolean memakai dua istilah yang muncul berulang kali pada jalur ini. Literal adalah satu variabel dalam bentuk aslinya atau bentuk ternegasi, misalnya dan pada ekspresi di atas. Minterm adalah suku AND yang memuat setiap variabel tepat satu kali, dalam bentuk asli atau ternegasi, sehingga suku itu bernilai 1 hanya untuk satu kombinasi masukan. Ekspresi XOR di atas tersusun dari dua minterm, dan masing-masing minterm menutupi satu baris tabel kebenaran XOR yang bernilai 1. Bentuk penjumlahan minterm semacam ini menjadi titik awal standar ketika sebuah fungsi diterjemahkan dari tabel kebenaran menjadi rangkaian, karena setiap baris bernilai 1 langsung menjadi satu suku.
Hukum-hukum penyederhanaan#
Ekspresi boolean jarang muncul dalam bentuk paling ringkasnya. Hukum-hukum aljabar boolean menyediakan cara mengubah bentuk ekspresi tanpa mengubah perilakunya, dan hasil penyederhanaannya berarti lebih sedikit gerbang pada chip. Berikut hukum-hukum yang dipakai di sepanjang jalur ini untuk setiap nilai , , dan .
- Hukum komutatif menyatakan dan .
- Hukum asosiatif menyatakan dan .
- Hukum distributif menyatakan serta bentuk keduanya, .
- Hukum identitas menyatakan dan , sedangkan hukum idempoten menyatakan dan .
- Hukum komplemen menyatakan dan .
- Hukum absorpsi menyatakan dan .
- Hukum de Morgan menyatakan dan .
Hukum de Morgan mendapat peran khusus pada perangkat keras karena menghubungkan AND dengan OR. Kedua bentuknya menyatakan bahwa negasi dapat bergeser melewati operator asalkan operatornya ikut bertukar. Hukum absorpsi memperlihatkan kejutan yang tidak dimiliki aritmetika biasa, yaitu suku yang memuat dapat hilang seluruhnya karena kasus dan kasus sama-sama menentukan hasil ekspresi tersebut. Transformasi semacam inilah yang mengubah tabel kebenaran mentah menjadi rangkaian yang hemat.
Membuktikan hukum dengan enumerasi#
Kekuatan aljabar boolean terletak pada domainnya yang kecil. Hanya ada empat kombinasi nilai untuk dua variabel dan delapan untuk tiga variabel, sehingga sebuah hukum dapat dibuktikan dengan memeriksa seluruh kombinasi itu satu per satu. Program berikut mendefinisikan operasi AND, OR, dan NOT untuk nilai 0 dan 1, mencetak tabel kebenaran kedua bentuk de Morgan, lalu menguji hukum de Morgan dan hukum distributif terhadap semua kombinasi masukan. Fungsi all() pada Python mengembalikan True hanya apabila setiap pengujian bernilai benar.
"""Verifikasi hukum de Morgan dan hukum distributif lewat enumerasi lengkap.
Setiap operasi didefinisikan untuk nilai 0 dan 1, lalu setiap hukum diuji
terhadap seluruh kombinasi nilai variabelnya.
"""
def dan(a, b):
"""Operasi AND pada nilai 0 dan 1."""
return a & b
def atau(a, b):
"""Operasi OR pada nilai 0 dan 1."""
return a | b
def tidak(a):
"""Operasi NOT pada nilai 0 dan 1."""
return 1 - a
dua_bit = [(0, 0), (0, 1), (1, 0), (1, 1)]
tiga_bit = [(a, b, c) for a in (0, 1) for b in (0, 1) for c in (0, 1)]
print(f"A B | {'~(A.B)':^6} {'~A+~B':^6}")
for a, b in dua_bit:
print(f"{a} {b} | {tidak(dan(a, b)):^6} {atau(tidak(a), tidak(b)):^6}")
print(f"\nA B | {'~(A+B)':^6} {'~A.~B':^6}")
for a, b in dua_bit:
print(f"{a} {b} | {tidak(atau(a, b)):^6} {dan(tidak(a), tidak(b)):^6}")
de_morgan_dan = all(tidak(dan(a, b)) == atau(tidak(a), tidak(b)) for a, b in dua_bit)
de_morgan_atau = all(tidak(atau(a, b)) == dan(tidak(a), tidak(b)) for a, b in dua_bit)
distributif_satu = all(
dan(a, atau(b, c)) == atau(dan(a, b), dan(a, c)) for a, b, c in tiga_bit
)
distributif_dua = all(
atau(a, dan(b, c)) == dan(atau(a, b), atau(a, c)) for a, b, c in tiga_bit
)
print("\nKesimpulan enumerasi lengkap:")
print(f"~(A.B) = ~A+~B berlaku untuk semua kombinasi: {de_morgan_dan}")
print(f"~(A+B) = ~A.~B berlaku untuk semua kombinasi: {de_morgan_atau}")
print(f"A.(B+C) = A.B+A.C berlaku untuk semua kombinasi: {distributif_satu}")
print(f"A+(B.C) = (A+B).(A+C) berlaku untuk semua kombinasi: {distributif_dua}")A B | ~(A.B) ~A+~B
0 0 | 1 1
0 1 | 1 1
1 0 | 1 1
1 1 | 0 0
A B | ~(A+B) ~A.~B
0 0 | 1 1
0 1 | 0 0
1 0 | 0 0
1 1 | 0 0
Kesimpulan enumerasi lengkap:
~(A.B) = ~A+~B berlaku untuk semua kombinasi: True
~(A+B) = ~A.~B berlaku untuk semua kombinasi: True
A.(B+C) = A.B+A.C berlaku untuk semua kombinasi: True
A+(B.C) = (A+B).(A+C) berlaku untuk semua kombinasi: TrueLaporan True pada keluaran berlaku untuk seluruh kombinasi yang mungkin, bukan sekadar untuk beberapa contoh yang dipilih. Argumen semacam ini adalah bentuk pembuktian paling sederhana pada domain dua nilai. Pada aritmetika biasa, cara yang sama tidak dapat dilakukan karena bilangan bulat berjumlah tak terbatas, sehingga pembuktian di sana memerlukan jalur deduksi.
Kesalahan umum#
Kesalahan pertama yang sering terjadi adalah menerapkan hukum de Morgan tanpa menukar operatornya, sehingga disederhanakan menjadi . Bentuk kedua itu keliru karena bernilai 1 hanya pada , , sedangkan bentuk yang benar bernilai 1 pada tiga kombinasi lain. Kesalahan kedua adalah membaca seolah-olah hanya yang dinegasikan. Garis yang membentang di atas seluruh ekspresi berarti seluruh ekspresi dinegasikan lebih dahulu sebelum dibaca. Kesalahan ketiga adalah memindahkan kebiasaan aritmetika ke aljabar boolean, misalnya menuliskan . Angka dua tidak memiliki arti di sini karena nilai hanya mengenal 0 dan 1, dan hukum idempoten justru menyatakan . Apabila sebuah penyederhanaan terasa meragukan, tulis tabel kebenaran kedua sisinya lalu bandingkan baris demi baris.
Ringkasan#
- AND, OR, dan NOT didefinisikan lengkap oleh tabel kebenarannya, dan XOR dinyatakan sebagai .
- Notasi jalur ini memakai titik untuk AND, tanda tambah untuk OR, dan garis atas untuk NOT.
- Hukum komutatif, asosiatif, distributif, absorpsi, dan de Morgan menyederhanakan ekspresi tanpa mengubah perilakunya.
- Pada domain dua nilai, sebuah hukum dibuktikan dengan enumerasi seluruh kombinasi masukan.
Referensi#
- Computation Structures, Spring 2017 — MIT OpenCourseWare — Materi kuliah yang memperkenalkan aljabar boolean dan hukum-hukumnya sebagai dasar rangkaian digital.
- The Elements of Computing Systems, Second Edition — Nand2Tetris — Proyek yang membangun seluruh komputer dari gerbang NAND dan memakai notasi boolean yang sama.