CODE: 10 - Logic and Switches
Các chương đã dịch. Chân lý là gì? Aristotle nghĩ rằng logic có gì đó để có thể trả lời được câu hỏi này. Tập hợp các bài...
Chân lý là gì? Aristotle nghĩ rằng logic có gì đó để có thể trả lời được câu hỏi này. Tập hợp các bài giảng được biết đến như là Organon (từ thế kỷ thứ tư trước công nguyên) là bản viết mở rộng sớm nhất về chủ đề logic. Với người Hy Lạp cổ, logic là một phương tiện phân tích ngôn ngữ trong quá trình tìm kiếm chân lý và do đó được xem là một dạng triết học. Nền tảng logic của Aristotle là tam đoạn luận. Tam đoạn luận nổi tiếng nhất (mà thực tế lại không được tìm thấy trong công trình của Aristotle) là
Tất cả con người đều chết;
Socrates là người;
Vậy nên, Socrates sẽ chết.
(All men are mortal;
Socrates is a man;
Hence, Socrates is mortal.)
Socrates là người;
Vậy nên, Socrates sẽ chết.
(All men are mortal;
Socrates is a man;
Hence, Socrates is mortal.)
Trong một tam đoạn luận, hai luận đề được xem là đúng, và từ đó một kết luận được rút ra.
Tính khả tử của Socrates có vẻ dễ hiểu, nhưng vẫn còn nhiều kiểu tam đoạn luận khác. Ví dụ, xem xét hai luận đề sau, được phát biểu bởi nhà toán học thế kỷ mười chín Charles Dodgson (còn được biết tới là Lewis Carroll):
Tính khả tử của Socrates có vẻ dễ hiểu, nhưng vẫn còn nhiều kiểu tam đoạn luận khác. Ví dụ, xem xét hai luận đề sau, được phát biểu bởi nhà toán học thế kỷ mười chín Charles Dodgson (còn được biết tới là Lewis Carroll):
Tất cả các triết gia đều có tính luận lý;
Một người vô lý thì luôn luôn cứng đầu.
(All philosophers are logical;
An illogical man is always obstinate.)
Một người vô lý thì luôn luôn cứng đầu.
(All philosophers are logical;
An illogical man is always obstinate.)
Kết luận không rõ ràng mấy. (Nghĩa là “Một vài người cứng đầu, bướng bỉnh thì không phải là triết gia.” Để ý sự xuất hiện không đâu của từ “một vài.”)
Đã hơn hai ngàn năm, các nhà toán học vật lộn với logic của Aristotle, cố gắng thu phục chúng bằng các ký hiệu và phép toán. Trước thế kỷ mười chín, người duy nhất đến gần được là Gottfried Wilhelm von Leibniz (1648-1716), người sớm đã đắm mình trong logic nhưng sau lại rẽ hướng sang các sở thích khác (như là độc lập phát minh ra máy tính cùng thời điểm với Newton).
Và sau đó đến lượt George Boole.
Đã hơn hai ngàn năm, các nhà toán học vật lộn với logic của Aristotle, cố gắng thu phục chúng bằng các ký hiệu và phép toán. Trước thế kỷ mười chín, người duy nhất đến gần được là Gottfried Wilhelm von Leibniz (1648-1716), người sớm đã đắm mình trong logic nhưng sau lại rẽ hướng sang các sở thích khác (như là độc lập phát minh ra máy tính cùng thời điểm với Newton).
Và sau đó đến lượt George Boole.
George Boole sinh ra ở Anh năm 1815 bước vào một thế giới nơi mà những điều kì lạ xảy ra bất lợi cho ông. Bởi vì ông là con trai của một người đóng giày và một người giúp việc, cấu trúc giai cấp cứng nhắc theo lẽ thường sẽ ngăn cản Boole đạt được bất cứ thứ gì khác hơn tổ tiên của ông. Nhưng được hỗ trợ bởi trí tò mò và sự giúp đỡ từ người cha (người có niềm say mê mạnh mẽ với khoa học, toán và văn học), chàng George trẻ đã tự trao cho mình kiểu giáo dục mà thông thường là đặc quyền của các cậu bé tầng lớp trên; việc học của cậu bao gồm tiếng Latin, tiếng Hi Lạp, và toán học. Như là một kết quả của việc làm quen với toán học từ sớm, năm 1849 Boole được bổ nhiệm làm Giáo sư Toán học đầu tiên tại Queen’s College, Cork, ở Ireland.
Một vài nhà toán học trong giữa những năm 1800 đã mày mò tìm hiểu định nghĩa toán học của logic (nổi bật nhất là Augustus De Morgan), nhưng chỉ có Boole là người có một sự thấu hiểu thật sự, đầu tiên là trong quyển sách The Mathematical Analysis of Logic, Being an Essay Towards a Calculus of Deductive Reasoning (1847) và sau đó là trong bài viết dài hơn và tham vọng hơn, An Investigation of the Laws of Thought on Which Are Founded the Mathematical Theories of Logic and Probabilities (1854), được biết đến gọn hơn là The Laws of Thought. Boole mất vào năm 1864 ở tuổi 49 sau khi vội vã lao đến lớp trong cơn mưa cùng với cơn co thắt phổi.
Tựa đề cuốn sách 1854 của Boole đề ra một diễn giải đầy tham vọng: bởi vì não người với lý tính của nó dùng logic để suy nghĩ, nếu chúng ta tìm ra được cách thức mà theo đó logic có thể được đại diện bởi toán học, thì chúng ta cũng sẽ có một mô tả toán học về cách hoạt động của não bộ. Tất nhiên, ngày nay thì cách nhìn này có vẻ khá là ngây thơ. (Không chỉ bây giờ mà ngay từ đó đã vậy).
Boole phát minh ra một dạng đại số mà vẻ ngoài và cách hành xử rất giống với đại số thông thường. Trong đại số thông thường, toán hạng (thường là các chữ) đại diện cho số, và toán tử (thường là + và ×) thể hiện cách các số kết hợp với nhau. Thường thì ta dùng đại số quy ước để giải quyết các vấn đề như là: Anya có 3 kg mận. Betty có nhiều hơn hai lần số mận của Anya. Carmen có nhiều hơn 5 kg mận so với Betty. Deirdre có gấp ba lần số mận của Carmen. Hỏi Deirdre có bao nhiêu kg mận?
Để giải quyết bài toán này, ta dịch từ tiếng Việt sang các mệnh đề toán học, sử dụng bốn chữ cái đại diện cho số kg mận mà bốn cô có:
A = 3
B = 2 × A
C = B + 5
D = 3 × C
B = 2 × A
C = B + 5
D = 3 × C
Chúng ta có thể gộp bốn câu này thành một bằng phép thế và cuối cùng biểu diễn phép cộng và phép nhân:
D = 3 × C
D = 3 × (B + 5)
D = 3 × ((2 × A) + 5)
D = 3 × ((2 × 3) + 5)
D = 33
D = 3 × (B + 5)
D = 3 × ((2 × A) + 5)
D = 3 × ((2 × 3) + 5)
D = 33
Khi ta làm phép toán quy ước, ta theo một vài quy tắc. Những quy tắc này có lẽ đã bắt đầu bám sâu vào thực tiễn mà chúng ta chưa từng nghĩ tới nó như là các quy tắc hoặc có thể thậm chí đã quên luôn tên của chúng. Thế nhưng các quy tắc này chính là nền tảng của tất cả các dạng toán học.
Quy tắc thứ nhất đó là phép cộng và phép nhân có tính giao hoán. Có nghĩa là ta có thể đổi chỗ hai số cho nhau :
A + B = B + A
A × B = B × A
A × B = B × A
Theo quy ước, phép trừ và phép chia không có tính giao hoán.
Phép cộng và phép nhân cũng có tính kết hợp, đó là
A + (B + C) = (A + B) + C
A × (B × C) = (A × B) × C
A × (B × C) = (A × B) × C
Và cuối cùng, là tính phân phối:
A × (B + C) = A × B + A × C
Một đặc điểm khác của đại số quy ước đó là nó luôn luôn thực hiện với số, như là số kg mận hay số vịt hay khoảng cách mà một đoàn tàu chạy hoặc tuổi của các thành viên trong gia đình. Đó là khả năng thiên tài của Boole khi làm cho đại số trực quan hơn bằng cách tách nó ra khỏi các khái niệm về số. Trong đại số Boole (như cuối cùng môn toán số của Boole sẽ được gọi), các toán hạng không liên hệ đến các con số mà thay vào đó là các lớp (classes). Một lớp đơn giản chỉ là một nhóm các thứ, cái mà trong những khoảng thời gian sau được biết đến như là một nhóm (set).
Hãy nói về mèo đi. Mèo có thể là mèo đực hoặc mèo cái. Để thuận tiện, ta có thể dùng M (male) để nhắc đến lớp mèo đực và F (female) để nhắc đến lớp mèo cái. Nhớ kỹ là hai ký hiệu này không đại diện cho số con mèo. Số lượng mèo đực và cái có thể thay đổi từng phút một vì mèo mới sẽ được sinh ra và một số mèo già (đáng tiếc là) ra đi. Chữ cái đại diện cho các lớp mèo - mèo với các đặc điểm cụ thể. Thay vào việc đề cập đến mèo đực, ta chỉ cần nói “M”.
Chúng ta cũng có thể dùng các chữ cái khác để đại diện cho màu sắc mèo: Ví dụ, T (tan) có thể nhắc tới lớp mèo nâu nhạt, B (black) cho lớp mèo đen, W (white) cho lớp mèo trắng và O (other) cho lớp mèo của các màu “khác” - tất cả mèo mà không nằm trong T, B hay W.
Cuối cùng (ít nhất cũng tới mức mà ví dụ này đi đến), mèo có thể bị thiến hoặc không. Hãy dùng N (neutered) đại diện cho lớp mèo bị thiến và U (unneutered) cho không thiến.
Trong đại (số) quy ước, các toán tử + và × được dùng để thể hiện phép cộng và nhân. Trong đại số Boolean, dấu + và × đều được dùng, và đây là nơi mọi thứ có thể trở nên rắc rối. Mọi người đều biết cộng và nhân trong toán đại, nhưng chúng ta cộng và nhân các lớp như thế nào?
Chà, thật ra thì ta không cộng và nhân trong đại số Boolean. Thay vào đó, + và × mang một ý nghĩa khác hoàn toàn.
Ký hiệu + trong đại số Boolean mang nghĩa hợp của hai lớp. Một hợp của hai lớp là mọi thứ trong lớp thứ nhất hợp lại với mọi thứ trong lớp thứ hai. Ví dụ, B + W đại diện cho lớp tất cả các con mèo màu trắng hoặc đen.
Ký hiệu × trong đại số Boolean nghĩa là giao của hai lớp. Một tập giao của hai lớp là mọi thứ mà cả lớp thứ nhất và lớp thứ hai đều có. Ví dụ, F × T đại diện cho lớp gồm tất cả mèo cái và có màu nâu. Như trong đại số, ta có thể viết F × T thành F.T hay đơn giản là FT (cái mà Boole thích hơn). Bạn có thể nghĩ về hai chữ cái như là chuỗi hai tính từ đi cùng nhau: mèo “cái nâu” (“female tan” cats).
Để tránh nhầm lẫn giữa đại số thông thường và đại số Boolean, đôi khi ký tự ∪ và ∩ được dùng cho hợp và giao thay vì + và ×. Nhưng phần giải phóng của Boole ảnh hưởng lên toán học là làm cho công dụng của các toán tử quen thuộc trực quan hơn, vậy nên tôi quyết định theo ý kiến của ông mà không giới thiệu thêm những ký hiệu mới vào toán học. (!!!)
Tính giao hoán, kết hợp và phân phối đều được giữ cho đại số Boolean. Còn gì thêm nữa, trong đại số Boolean phép + được phân phối cho phép ×. Điều này không đúng cho đại số thông thường:
W + (B × F) = (W + B) × (W + F)
Hợp của mèo trắng với mèo cái đen thì cũng tương tự như giao của hai hợp: hợp mèo trắng với đen và hợp của mèo cái với trắng. Điều này có thể sẽ hơi khó để nắm bắt, nhưng bạn sẽ làm được thôi.
Có thêm hai ký hiệu nữa để hoàn chỉnh toán học Boolean. Hai ký hiệu này trông thì giống số, nhưng thực chất lại không vì chúng đôi khi được dùng khác một chút với số. Ký hiệu 1 trong đại số Boolean nghĩa là “vũ trụ” (the universe) - có nghĩa là, mọi thứ chúng ta nói đến. Trong ví dụ này, ký hiệu 1 nghĩa là “lớp của tất cả mèo”. Do đó,
M + F = 1
Có nghĩa là hợp của lớp mèo đực và mèo cái là lớp của tất cả mèo. Tương tự, hợp của mèo nâu, đen, trắng và các màu khác cũng là lớp của tất cả mèo:
T + B + W + O = 1
Và bạn cũng lấy được lớp tất cả các mèo bằng cách này:
N + U = 1
Ký hiệu 1 có thể đi với dấu trừ để biểu thị vũ trụ loại bỏ đi gì đó. Ví dụ,
1 – M
là lớp tất cả các con mèo ngoại trừ mèo đực. Vũ trụ trừ đi mèo đực cũng như là lớp các mèo cái:
1 – M = F
Ký hiệu khác mà ta cần là 0, và trong đại số Boolean 0 nghĩa là lớp rỗng - lớp không có gì. Lớp rỗng là kết quả của phép giao hai lớp mà không có phần tử chung nào, ví dụ, mèo mà vừa đực vừa cái:
F × M = 0
Để ý là đôi khi 1 và 0 hoạt động tương tự như trong đại số thông thường. Ví dụ, giao của tất cả mèo với mèo cái là mèo cái :
1 × F = F
Giao của không con mèo với mèo cái là lớp có không con mèo:
0 × F = 0
Nhưng đôi khi kết quả lại không giống với đại số thông thường. Ví dụ, hợp của tất cả mèo với mèo cái là lớp tất cả mèo :
1 + F = 1
Cái này không có ý nghĩa gì trong đại số.
Bởi vì F là lớp tất cả mèo cái, và (1 – F) là lớp tất cả mèo không phải cái, hợp của hai lớp này là 1 :
F + (1 – F) = 1
và giao của hai lớp này là 0 :
F × (1 – F) = 0
Trong quá khứ, công thức này đại diện cho một khái niệm quan trọng trong logic: Nó được gọi là Quy luật mâu thuẫn và biểu thị cho thứ gì đó không thể vừa là chính nó vừa là đối của nó.
Đại số Boolean trông thật sự khác với đại số thông thường là khi ở trong một mệnh đề như thế này:
F × F = F
Mệnh đề có ý nghĩa hoàn hảo trong đại số Boolean: Giao của mèo cái và mèo cái thì vẫn là lớp mèo cái. Nhưng nó chắc chắn sẽ không trông đúng lắm nếu F mang nghĩa là một số. Boole xem xét
X^2 = X
là một mệnh đề riêng làm cho đại số của ông khác biệt với đại số thông thường. Một mệnh đề Boolean khác trông khá nhộn nếu hiểu theo kiểu đại số thông thường là đây:
F + F = F
Hợp của mèo cái với mèo cái thì cũng vẫn là lớp mèo cái.
Đại số Boolean cung cấp một phương pháp toán học cho việc giải quyết tam đoạn luận của Aristotle. Hãy nhìn vào hai phần ba đầu tiên của tam đoạn luận nổi tiếng này một lần nữa, nhưng giờ thì dùng ngôn ngữ trung tính:
Tất cả mọi người đều chết;
Socrates là một con người.
Socrates là một con người.
Chúng ta sẽ dùng P để đại diện cho lớp tất cả con người, M cho lớp những thứ khả tử, và S cho lớp Socrates. Sẽ có nghĩa là gì nếu nói rằng “tất cả mọi người đều chết”? Nó có nghĩa là giao của lớp mọi người và lớp mọi thứ chết được là lớp của tất cả mọi người:
P × M = P
Sẽ sai khi nói rằng P × M = M, bởi vì lớp những thứ chết được bao gồm cả mèo, chó và cây du.
Nói, “Socrates là một con người”, nghĩa là giao của lớp chứa Socrates (một lớp rất nhỏ) và lớp của mọi người (một lớp lớn hơn nhiều) là lớp chứa Socrates :
S × P = S
Bởi vì chúng ta biết từ đẳng thức thứ nhất rằng P bằng với (P × M) ta có thể thay thế nó vào đẳng thức thứ hai:
S × (P × M) = S
Bằng luật kết hợp, ta được
(S × P) × M = S
Nhưng ta đã biết rằng (S × P) bằng S, vậy ta có thể đơn giản bằng cách dùng sự thay thế này:
S × M = S
Giờ thì xong rồi. Công thức này nói cho ta biết rằng giao của Socrates và lớp của mọi thứ chết được là S, có nghĩa là Socrates khả tử. Nếu ta thấy (S × M) bằng 0, ta suy ra rằng Socrates không chết được. Nếu ta thấy (S × M) bằng M, kết luận sẽ phải là Socrates là thứ khả tử duy nhất và mọi thứ khác đều bất tử!
Dùng đại số Boolean dường như quá màu mè để chứng minh sự thật rõ ràng (cụ thể hãy xem xét việc Socrates chứng minh chính ông ta có thể chết ở 2400 năm trước), nhưng đại số Boolean cũng có thể được dùng để xác minh xem vài thứ có thỏa mãn một nhóm các tiêu chí nhất định không. Có lẽ một ngày bạn đi bộ vào một cửa hàng thú cưng và nói với người bán hàng rằng, “Tôi muốn một con mèo đực, bị thiến, trắng hay nâu đều được; hoặc một con mèo cái cắt buồng trứng, màu gì cũng được trừ màu trắng ra; hoặc tôi sẽ lấy bất kì con mèo nào bạn có miễn là nó đen.” Và nhân viên bán hàng nói với bạn rằng, “Vậy bạn muốn một con mèo từ lớp mèo được đại diện bởi biểu thức sau:
(M × N × (W + T) + (F × N × (1 – W)) + B
“Đúng chứ?” Và bạn nói, “Chính cmn xác!”
Trong việc xác thực người bán có đúng không, bạn có thể muốn bỏ qua khái niệm hợp và giao và thay thế bằng công tắc cho các chữ cái OR và AND. Tôi viết hoa những từ này bởi vì những chữ này thường đại diện cho các nghĩa tiếng Anh, nhưng chúng cũng có thể mang nghĩa phép toán trong đại số Boolean. Khi bạn kết một hợp của hai lớp, bạn thật sự chấp nhận những thứ từ lớp một OR lớp hai. Và khi bạn kết một phép giao, bạn chỉ chấp nhận những thứ thuộc cả lớp thứ nhất AND lớp thứ hai. Thêm nữa, bạn có thể dùng từ NOT bất kể khi nào bạn thấy 1 theo sau là dấu trừ. Tóm lại,
- Dấu + (được biết từ trước là một hợp) giờ nghĩa là OR.
- Dấu × (được biết từ trước là một giao) giờ nghĩa là AND.
- 1 – (trước đó là vũ trụ mà không có thứ gì đó) giờ nghĩa là NOT.
Vậy nên biểu thức có thể được viết như này:
(M AND N AND (W OR T)) OR (F AND N AND (NOT W)) OR B
Điều này rất gần với những gì bạn nói. Chú ý tới cách các dấu ngoặc tròn đơn giản hóa sự ưu tiên. Bạn muốn mọt con mèo từ một trong ba lớp:
(M AND N AND (W OR T))
OR
(F AND N AND (NOT W))
OR
B
OR
(F AND N AND (NOT W))
OR
B
Với công thức được viết dọc xuống, người bán hàng có thể biểu diễn vài thứ được gọi là bài kiểm tra Boolean. Để không làm mọi thứ rối tung lên, tôi vừa mới nhẹ nhàng chuyển về một dạng hơi khác với đại số Boolean. Trong dạng này của đại số Boolean, các chữ cái không còn ám chỉ đến các lớp nữa. Thay vào đó, các chữ cái giờ có thể được gán số. Điều cần nắm ở đây là chúng có thể được gán chỉ bởi 0 hoặc 1. Số 1 có nghĩa là Đúng, Vâng, con mèo cụ thể này thỏa mãn tiêu chí. Số 0 nghĩa là Sai, Không, con mèo này không thỏa mãn.
Đầu tiên người bán hàng mang ra một con mèo đực nâu chưa thiến. Đây là biểu thức của mèo chấp thuận:
(M × N × (W + T) + (F × N × (1 – W)) + B
và đây là hình ảnh của nó khi thay với 0 và 1:
(1 × 0 × (0 + 1)) + (0 × 0 × (1 – 0)) + 0
Để ý là các kí hiệu được gán bởi 1 chỉ là M và T bởi vì mèo đực và nâu.
Những gì chúng ta cần làm ngay là đơn giản hóa biểu thức. Nếu nó đơn giản thành 1, mèo thỏa tiêu chí của bạn; nếu nó đơn giản thành 0, mèo này không thỏa. Trong khi chúng ta đơn giản biểu thức, luôn nhớ trong đầu là ta không thật sự cộng và nhân, mặc dù thông thường chúng ta có thể giả vờ như vậy. Đa phần các quy luật tương tự cho phép khi + mang nghĩa OR và × mang nghĩa AND. (Đôi khi trong các văn bản hiện đại kí tự ∧ và ∨ được dùng cho AND và OR thay vì × và +. Nhưng ở đây nơi mà dấu + và × có lẽ là hiệu quả hơn.)
Khi dấu × nghĩa là AND, kết quả khả thi là
0 × 0 = 0
0 × 1 = 0
1 × 0 = 0
1 × 1 = 1
0 × 1 = 0
1 × 0 = 0
1 × 1 = 1
Nói cách khác, kết quả là 1 nếu chỉ khi cả trái và phải của AND là 1. Phép toán này hoạt động chính xác như cách của phép nhân thông thường, và nó có thể được tóm gọn lại trong bảng nhỏ, tương tự như cách mà bảng phép cộng và phép nhân được trình bày trong Chương 8:
Khi dấu + mang nghĩa OR, kết quả khả thi là
0 + 0 = 0
0 + 1 = 1
1 + 0 = 1
1 + 1 = 1
0 + 1 = 1
1 + 0 = 1
1 + 1 = 1
Kết quả là 1 nếu cả bên trái và bên phải OR là 1. Phép toán này cho ra kết quả rất giống với phép cộng thông thường, ngoại trừ trong trường hợp 1 + 1 bằng 1. Phép toán OR có thể được tóm gọn trong một bảng nhỏ khác:
Giờ thì ta có thể dùng những bảng này để tính kết quả của biểu thức
(1 × 0 × 1) + (0 × 0 × 1) + 0 = 0 + 0 + 0 = 0
Kết quả bằng 0 có nghĩa là Không, Sai, chú mèo này không được.
Kế tiếp nhân viên mang ra một con mèo cái trắng chưa thiến. Biểu thức ban đầu là
(M × N × (W + T) + (F × N × (1 – W)) + B
Thay 0 và 1 vào lần nữa:
(0 × 1 × (1 + 0)) + (1 × 1 × (1 – 1)) + 0
Và đơn giản đi:
(0 × 1 × 1) + (1 × 1 × 0) + 0 = 0 + 0 + 0 = 0
Và chú mèo nhỏ tội nghiệp phải bị từ chối rồi.
Lần nữa nhân viên mang ra một chú mèo cái xám đã thiến. (Xám thì cho vào màu “khác” – không phải trắng, đen hay nâu). Đây là biểu thức:
(0 × 1 × (0 + 0)) + (1 × 1 ×(1 – 0)) + 0
Giờ thì đơn giản lại:
(0 × 1 × 0) + ( 1 × 1 × 1) + 0 = 0 + 1 + 0 = 1
Kết quả cuối cùng là 1 nghĩa là Có, Đúng, một chú mèo đã tìm được nhà. (Và nó cũng là chú mèo dễ thương nhất!)
Khuya tối đó, khi chú mèo đang cuộn tròn ngủ trong lòng bạn, bạn tự hỏi liệu bạn có thể nối một vài công tắc và bóng đèn để giúp bạn xác minh xem mấy chú mèo có thỏa mãn tiêu chí của bạn không. (Vâng, bạn là một đứa bé quái lạ.) Bạn có chút nào nhận ra là mình sắp làm nên một bước đột phá quan trọng. Bạn sắp biểu diễn một vài thí nghiệm sẽ thống nhất đại số của George Boole với mạch điện và do đó có khả năng tạo ra được bản thiết kế và cấu trúc của các máy tính hoạt động với các số nhị phân. Nhưng đừng để nó hù dọa bạn.
Để bắt đầu thí nghiệm của mình, bạn nối một bóng đèn và pin như thông thường, nhưng bạn dùng hai công tắc thay vì một:
Các công tắc được nối theo cách này – cái này ngay sau cái kia – được gọi là nối nối tiếp. Nếu bạn đóng công tắc trái, không có gì xảy ra:
Tương tự, nếu bạn để công tắc trái mở và đóng công tắc phải, cũng không có gì xảy ra cả. Bóng đèn chỉ sáng lên khi cả hai công tắc trái phải đều đóng, như trong trang sau.
Từ khóa ở đây là và. Cả công tắc trái và phải phải được đóng để dòng điện chạy qua mạch.
Mạch này đang biểu diễn một thực tế nhỏ trong logic. Trong thực hành, bóng đèn trả lời cho câu hỏi “Có phải cả hai công tắc đều đóng?” Ta có thể tóm tắt hoạt động của mạch này bằng bảng sau:
Công tắc trái Công tắc phải Bóng đèn
Mở Mở Không bật
Mở Đóng Không bật
Đóng Mở Không bật
Đóng Đóng Bật sáng
Mở Mở Không bật
Mở Đóng Không bật
Đóng Mở Không bật
Đóng Đóng Bật sáng
Trong chương trước, chúng ta đã thấy cách các số nhị phân, hay bit, có thể đại diện cho thông tin – mọi thứ từ số đến chỉ dẫn cho các ngón cái của Roger Ebert. Ta có thể nói rằng một bit 0 mang nghĩa “Ngón cái của Ebert chỉ xuống” và một bit 1 nghĩa là “Ngón cái của Ebert chỉ lên”. Một công tắc có hai vị trí, cho nên nó có thể đại diện cho một bit. Chúng ta có thể nói rằng một 0 nghĩa là “công tắc mở” và một 1 nghĩa “công tắc đóng”. Một bóng đèn có hai trạng thái; do đó nó cũng có thể đại diện cho một bit. Ta có thể nói là một 0 nghĩa là “bóng đèn không bật” và một 1 nghĩa là “bóng đèn bật”. Giờ ta đơn giản chỉ viết lại bảng:
Công tắc trái Công tắc phải Bóng đèn
0 0 0
0 1 0
1 0 0
1 1 1
0 0 0
0 1 0
1 0 0
1 1 1
Để ý là nếu ta đổi công tắc trái và công tắc phải, kết quả như nhau. Chúng ta thực sự không phải xác minh công tắc nào là công tắc nào. Cho nên bảng có thể được viết lại để trông giống với mấy bảng AND và OR đã được bày ra trước đó:
Và thật ra, nó cũng giống với bảng AND. Kiểm thử xem:
Mạch điện đơn giản này thực chất trình diễn một phép toán AND trong đại số Boolean.
Giờ hay thử nối hai công tắc khác đi một chút:
Những công tắc này được gọi là nối song song. Sự khác biệt giữa mạch này và mạch trước là bóng đèn sẽ sáng nếu bạn đóng công tắc trên:
hay đóng công tắc dưới:
hay đóng cả hai công tắc:
Bóng đèn sáng nếu công tắc trên hoặc công tắc dưới được đóng. Từ khóa ở đây là hoặc.
Một lần nữa, mạch diễn tả một thử nghiệm của logic. Bóng đèn trả lời câu hỏi, “Có phải một trong hai công tắc đóng?” Bảng sau tóm tắt cách mạch hoạt động:
Công tắc trái Công tắc phải Bóng đèn
Mở Mở Không bật
Mở Đóng Bật sáng
Đóng Mở Bật sáng
Đóng Đóng Bật sáng
Mở Mở Không bật
Mở Đóng Bật sáng
Đóng Mở Bật sáng
Đóng Đóng Bật sáng
Lần nữa, dùng 0 nghĩa là một công tắc mở hay một bóng đèn chưa bật và 1 nghĩa là một công tắc đóng hay một bóng đèn bật, bảng này có thể được viết lại như sau:
Công tắc trái Công tắc phải Bóng đèn
0 0 0
0 1 1
1 0 1
1 1 1
0 0 0
0 1 1
1 0 1
1 1 1
Lần nữa sẽ không sao nếu hai công tắc đổi chỗ nhau, nên bảng có thể viết lại:
Và bạn có lẽ đã đoán được rằng nó giống với Boolean OR:
có nghĩa là hai công tắc nối song song biểu diễn tương đồng với một phép toán Boolean OR.
Khi ban đầu bạn bước chân vào cửa hàng thú cưng, bạn nói với nhân viên ở đó là “Tôi muốn một chú mèo đực đã thiến trắng hay nâu đều được; hoặc một mèo cái đã cắt trứng màu gì cũng được trừ trắng; hoặc tôi sẽ lấy bất kì con mèo nào bạn có ngoại trừ mèo đen” và nhân viên phát triển biểu thức này:
(M × N × (W + T)) + (F × N × (1 – W)) + B
Giờ thì bạn biết rằng hai công tắc được mắc nối tiếp mô tả một lập luận AND (được đại diện bởi dấu ×) và hai công tắc song song biểu diễn một lập luận OR (được đại diện bỏi dấu +), bạn có thể mắc các công tắc như sau:
Mỗi công tắc trong mạch này được gắn với một chữ cái – trùng với chữ cái trong biểu thức Boolean. (-W nghĩa là NOT W và là một cách thay thế để viết 1 – W). Thật ra, nếu bạn đi xuyên suốt việc mắc sơ đồ từ trái sang phải bắt đầu từ trên và đi từ trên xuống, bạn sẽ gặp các chữ cái theo đúng thứ tự mà chúng xuất hiện trong biểu thức. Mỗi dấu × trong biểu thức tương ứng với một điểm trong mạch nơi mà hai công tắc (hay một nhóm các công tắc) được nối nối tiếp. Mỗi dấu + trong biểu thức tương ứng với một nơi trong mạch mà hai công tắc (hay một nhóm các công tắc) được nối song song.
Như bạn sẽ nhớ lại, nhân viên đầu tiên lấy ra một chú mèo đực nâu chưa thiến. Đóng công tắc thích hợp:
Mặc dù công tắc M, N và NOT W được đóng, chúng ta không có một mạch hoàn thiện để thắp sáng bóng đèn. Kế tiếp nhân viên mang ra một cô mèo trắng đã cắt trứng:
Một lần nữa, các công tắc đúng không được đóng để hoàn thành mạch. Nhưng cuối cùng, nhân viên mang ra một cô mèo xám đã cắt buồng:
Và đã đủ để hoàn thành mạch, bật sáng bóng đèn, và biểu thị chú mèo thỏa hết các tiêu chí.
George Boolean chưa bao giờ mắc một mạch điện như thế này. Ông ta sẽ không bao giờ có được cái nhìn hồi hộp khi một biểu thức Boolean hiện ra trong các công tắc, dây dẫn và bóng đèn. Một trở ngại, tất nhiên, là bóng đèn vẫn chưa được phát minh cho tới 15 năm sau khi Boole mất. Nhưng Samuel Morse đã mô tả máy điện báo của ông ta trong năm 1844 – mười năm trước khi Boole công bố The Laws of Thought – và sẽ đơn giản để thay thế một máy điện báo phát tiếng cho bóng đèn trong mạch trên.
Nhưng không ai trong thế kỷ mười chín làm ra một sự kết nối giữa AND và OR của đại số Boolean và mắc các công tắc đơn giản theo kiểu nối tiếp và song song. Không một nhà toán học, điện học, người điều khiển máy điện báo, không một ai cả. Thậm chí là ngay cả biểu tượng của sự tiến hóa máy tính Charles Babbage (1792-1871), người đáp ứng Boole và biết công trình của ông, và dùng hầu hết cuộc đời ông để đấu tranh cho việc thiết kế Difference Engine đầu tiên và sau đó là Analytical Engine mà một thế kỷ sau được xem là tiền thân của máy tính hiện đại. Cái gì có thể đã giúp Babbage, hư chúng ta biết hiện nay, là sự nhận ra rằng có lẽ thay vì dùng các công cụ và đòn bẩy để biểu diễn phép tính, một máy tính có thể được tạo nên tốt hơn nhờ rơ-le máy điện báo.
Vâng, rơ-le điện báo.
Khoa học - Công nghệ
/khoa-hoc-cong-nghe
Bài viết nổi bật khác
- Hot nhất
- Mới nhất