Chapter 26: Boolean Algebra
Part 1: What is Boolean Algebra?
Boolean algebra is a branch of algebra that deals with binary variables and logical operations. Unlike regular algebra, where variables can take any numeric value (like x = 5, x = -3.14, etc.), Boolean variables can only take one of two possible values:
-
TRUE (often represented as 1)
-
FALSE (often represented as 0)
These two values are the only building blocks. Everything in Boolean algebra—every expression, every rule, every operation—reduces to combinations of these two fundamental states.
Part 2: The Three Basic Operations
Just as regular algebra has operations like addition and multiplication, Boolean algebra has three fundamental operations: AND, OR, and NOT. These are the building blocks of all logical expressions.
1. AND (Conjunction) – Symbol: ∧ or · or AND
The AND operation produces a TRUE result only if both inputs are TRUE. Think of it as “both must be true.”
Truth Table for AND:
| A | B | A AND B |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 0 |
| 1 | 0 | 0 |
| 1 | 1 | 1 |
In words:
-
FALSE AND FALSE = FALSE
-
FALSE AND TRUE = FALSE
-
TRUE AND FALSE = FALSE
-
TRUE AND TRUE = TRUE
Real-world example: “I’ll go to the beach if it’s sunny AND warm.” Both conditions must be true, or I’m not going.
2. OR (Disjunction) – Symbol: ∨ or + or OR
The OR operation produces a TRUE result if at least one input is TRUE. Think of it as “either or both.”
Truth Table for OR:
| A | B | A OR B |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 1 |
In words:
-
FALSE OR FALSE = FALSE
-
FALSE OR TRUE = TRUE
-
TRUE OR FALSE = TRUE
-
TRUE OR TRUE = TRUE
Real-world example: “I’ll buy a car if I win the lottery OR get a big bonus.” If either condition is true, I’m buying that car.
3. NOT (Negation) – Symbol: ¬ or ~ or ! or ‘
The NOT operation is a unary operator (it works on a single input). It simply inverts the value: TRUE becomes FALSE, FALSE becomes TRUE.
Truth Table for NOT:
| A | NOT A |
|---|---|
| 0 | 1 |
| 1 | 0 |
In words:
-
NOT TRUE = FALSE
-
NOT FALSE = TRUE
Real-world example: “I’ll go out if it’s NOT raining.” The condition is the opposite of raining.
Part 3: Boolean Algebra in Programming
In programming, Boolean algebra appears in every conditional statement. Most languages use keywords or symbols for these operations.
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
<span class="token comment"># Python uses 'and', 'or', 'not'</span> is_sunny <span class="token operator">=</span> <span class="token boolean">True</span> is_warm <span class="token operator">=</span> <span class="token boolean">False</span> has_umbrella <span class="token operator">=</span> <span class="token boolean">True</span> <span class="token comment"># AND</span> <span class="token keyword">if</span> is_sunny <span class="token keyword">and</span> is_warm<span class="token punctuation">:</span> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string">"Perfect beach day!"</span><span class="token punctuation">)</span> <span class="token comment"># OR</span> <span class="token keyword">if</span> is_sunny <span class="token keyword">or</span> has_umbrella<span class="token punctuation">:</span> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string">"I can go outside (either sunny or I have protection)"</span><span class="token punctuation">)</span> <span class="token comment"># NOT</span> <span class="token keyword">if</span> <span class="token keyword">not</span> is_warm<span class="token punctuation">:</span> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string">"It's not warm. Bring a jacket."</span><span class="token punctuation">)</span> |
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
<span class="token comment">// JavaScript uses &&, ||, !</span> <span class="token keyword">let</span> isSunny <span class="token operator">=</span> <span class="token boolean">true</span><span class="token punctuation">;</span> <span class="token keyword">let</span> isWarm <span class="token operator">=</span> <span class="token boolean">false</span><span class="token punctuation">;</span> <span class="token keyword">let</span> hasUmbrella <span class="token operator">=</span> <span class="token boolean">true</span><span class="token punctuation">;</span> <span class="token comment">// AND</span> <span class="token keyword">if</span> <span class="token punctuation">(</span>isSunny <span class="token operator">&&</span> isWarm<span class="token punctuation">)</span> <span class="token punctuation">{</span> console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span><span class="token string">"Perfect beach day!"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token comment">// OR</span> <span class="token keyword">if</span> <span class="token punctuation">(</span>isSunny <span class="token operator">||</span> hasUmbrella<span class="token punctuation">)</span> <span class="token punctuation">{</span> console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span><span class="token string">"I can go outside"</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> <span class="token comment">// NOT</span> <span class="token keyword">if</span> <span class="token punctuation">(</span><span class="token operator">!</span>isWarm<span class="token punctuation">)</span> <span class="token punctuation">{</span> console<span class="token punctuation">.</span><span class="token function">log</span><span class="token punctuation">(</span><span class="token string">"It's not warm. Bring a jacket."</span><span class="token punctuation">)</span><span class="token punctuation">;</span> <span class="token punctuation">}</span> |
Part 4: Boolean Expressions and Truth Tables
A Boolean expression combines variables and operations to produce a Boolean value. We can analyze these expressions using truth tables, which show the output for all possible input combinations.
Example 1: Expression: (A AND B) OR (NOT A)
Let’s build the truth table step by step:
| A | B | NOT A | A AND B | (A AND B) OR (NOT A) |
|---|---|---|---|---|
| 0 | 0 | 1 | 0 | 1 |
| 0 | 1 | 1 | 0 | 1 |
| 1 | 0 | 0 | 0 | 0 |
| 1 | 1 | 0 | 1 | 1 |
Example 2: Expression: (A OR B) AND (NOT (A AND B)) (This is actually XOR – exclusive OR)
| A | B | A OR B | A AND B | NOT (A AND B) | (A OR B) AND (NOT (A AND B)) |
|---|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 1 | 0 |
| 0 | 1 | 1 | 0 | 1 | 1 |
| 1 | 0 | 1 | 0 | 1 | 1 |
| 1 | 1 | 1 | 1 | 0 | 0 |
Notice this matches the XOR operation (true when inputs are different).
Part 5: Boolean Algebra Laws
Just like regular algebra has laws (commutative, associative, distributive), Boolean algebra has its own set of laws. These are essential for simplifying logical expressions.
1. Basic Laws
| Law | AND Form | OR Form |
|---|---|---|
| Identity | A AND 1 = A | A OR 0 = A |
| Null | A AND 0 = 0 | A OR 1 = 1 |
| Idempotent | A AND A = A | A OR A = A |
| Complement | A AND NOT A = 0 | A OR NOT A = 1 |
| Double Negation | NOT (NOT A) = A |
2. Commutative Laws
-
A AND B = B AND A
-
A OR B = B OR A
3. Associative Laws
-
(A AND B) AND C = A AND (B AND C)
-
(A OR B) OR C = A OR (B OR C)
4. Distributive Laws
-
A AND (B OR C) = (A AND B) OR (A AND C)
-
A OR (B AND C) = (A OR B) AND (A OR C)
5. De Morgan’s Laws (Very Important!)
These laws show how to distribute NOT over AND/OR:
-
NOT (A AND B) = (NOT A) OR (NOT B)
-
NOT (A OR B) = (NOT A) AND (NOT B)
In words:
-
“Not (A and B)” is the same as “(Not A) or (Not B)”
-
“Not (A or B)” is the same as “(Not A) and (Not B)”
Example of De Morgan’s Law:
The statement “It is not both sunny and warm” is equivalent to “It is not sunny OR it is not warm.”
Part 6: Simplifying Boolean Expressions
Using these laws, we can simplify complex Boolean expressions, which is crucial for designing efficient digital circuits.
Example: Simplify (A AND B) OR (A AND NOT B)
Step by step:
-
Start with:
(A AND B) OR (A AND NOT B) -
Factor out A (distributive law):
A AND (B OR NOT B) -
Complement law:
B OR NOT B = 1 -
Identity law:
A AND 1 = A
Result: A (The expression simplifies to just A!)
This makes intuitive sense: If A is true and B is either true or false, the expression is true; if A is false, the expression is false. So it’s equivalent to just A.
In Python:
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
<span class="token comment"># The original expression</span> <span class="token keyword">def</span> <span class="token function">original</span><span class="token punctuation">(</span>a<span class="token punctuation">,</span> b<span class="token punctuation">)</span><span class="token punctuation">:</span> <span class="token keyword">return</span> <span class="token punctuation">(</span>a <span class="token keyword">and</span> b<span class="token punctuation">)</span> <span class="token keyword">or</span> <span class="token punctuation">(</span>a <span class="token keyword">and</span> <span class="token keyword">not</span> b<span class="token punctuation">)</span> <span class="token comment"># The simplified expression</span> <span class="token keyword">def</span> <span class="token function">simplified</span><span class="token punctuation">(</span>a<span class="token punctuation">)</span><span class="token punctuation">:</span> <span class="token keyword">return</span> a <span class="token comment"># Test all combinations</span> <span class="token keyword">for</span> a <span class="token keyword">in</span> <span class="token punctuation">[</span><span class="token boolean">False</span><span class="token punctuation">,</span> <span class="token boolean">True</span><span class="token punctuation">]</span><span class="token punctuation">:</span> <span class="token keyword">for</span> b <span class="token keyword">in</span> <span class="token punctuation">[</span><span class="token boolean">False</span><span class="token punctuation">,</span> <span class="token boolean">True</span><span class="token punctuation">]</span><span class="token punctuation">:</span> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string-interpolation"><span class="token string">f"a=</span><span class="token interpolation"><span class="token punctuation">{</span>a<span class="token punctuation">}</span></span><span class="token string">, b=</span><span class="token interpolation"><span class="token punctuation">{</span>b<span class="token punctuation">}</span></span><span class="token string">: original=</span><span class="token interpolation"><span class="token punctuation">{</span>original<span class="token punctuation">(</span>a<span class="token punctuation">,</span>b<span class="token punctuation">)</span><span class="token punctuation">}</span></span><span class="token string">, simplified=</span><span class="token interpolation"><span class="token punctuation">{</span>simplified<span class="token punctuation">(</span>a<span class="token punctuation">)</span><span class="token punctuation">}</span></span><span class="token string">"</span></span><span class="token punctuation">)</span> |
Part 7: Boolean Algebra in Digital Circuits
Boolean algebra isn’t just theoretical—it’s the mathematics behind every digital circuit. The three basic operations correspond directly to logic gates:
| Operation | Logic Gate | Symbol |
|---|---|---|
| AND | AND Gate | https://upload.wikimedia.org/wikipedia/commons/thumb/b/b9/AND_ANSI.svg/120px-AND_ANSI.svg.png |
| OR | OR Gate | https://upload.wikimedia.org/wikipedia/commons/thumb/1/16/OR_ANSI.svg/120px-OR_ANSI.svg.png |
| NOT | NOT Gate (Inverter) | https://upload.wikimedia.org/wikipedia/commons/thumb/6/60/NOT_ANSI.svg/120px-NOT_ANSI.svg.png |
Combinations of these gates can create any logical function, from simple decision circuits to complete computer processors.
Part 8: Practical Examples
Example 1: Access Control System
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
<span class="token keyword">def</span> <span class="token function">can_access</span><span class="token punctuation">(</span>user_has_keycard<span class="token punctuation">,</span> user_is_employee<span class="token punctuation">,</span> user_is_admin<span class="token punctuation">,</span> is_weekend<span class="token punctuation">)</span><span class="token punctuation">:</span> <span class="token triple-quoted-string string">"""</span> Determine if a user can access a building. Rules: - Employees with keycard can access on weekdays - Admins can access anytime - On weekends, only admins can access """ <span class="token comment"># Weekday access for employees with keycard</span> weekday_access <span class="token operator">=</span> <span class="token keyword">not</span> is_weekend <span class="token keyword">and</span> user_is_employee <span class="token keyword">and</span> user_has_keycard <span class="token comment"># Admin access (anytime)</span> admin_access <span class="token operator">=</span> user_is_admin <span class="token comment"># Can access if either condition is true</span> <span class="token keyword">return</span> weekday_access <span class="token keyword">or</span> admin_access <span class="token comment"># Test cases</span> test_cases <span class="token operator">=</span> <span class="token punctuation">[</span> <span class="token punctuation">{</span><span class="token string">"name"</span><span class="token punctuation">:</span> <span class="token string">"Employee with keycard on weekday"</span><span class="token punctuation">,</span> <span class="token string">"keycard"</span><span class="token punctuation">:</span> <span class="token boolean">True</span><span class="token punctuation">,</span> <span class="token string">"employee"</span><span class="token punctuation">:</span> <span class="token boolean">True</span><span class="token punctuation">,</span> <span class="token string">"admin"</span><span class="token punctuation">:</span> <span class="token boolean">False</span><span class="token punctuation">,</span> <span class="token string">"weekend"</span><span class="token punctuation">:</span> <span class="token boolean">False</span><span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token punctuation">{</span><span class="token string">"name"</span><span class="token punctuation">:</span> <span class="token string">"Employee with keycard on weekend"</span><span class="token punctuation">,</span> <span class="token string">"keycard"</span><span class="token punctuation">:</span> <span class="token boolean">True</span><span class="token punctuation">,</span> <span class="token string">"employee"</span><span class="token punctuation">:</span> <span class="token boolean">True</span><span class="token punctuation">,</span> <span class="token string">"admin"</span><span class="token punctuation">:</span> <span class="token boolean">False</span><span class="token punctuation">,</span> <span class="token string">"weekend"</span><span class="token punctuation">:</span> <span class="token boolean">True</span><span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token punctuation">{</span><span class="token string">"name"</span><span class="token punctuation">:</span> <span class="token string">"Admin on weekend"</span><span class="token punctuation">,</span> <span class="token string">"keycard"</span><span class="token punctuation">:</span> <span class="token boolean">False</span><span class="token punctuation">,</span> <span class="token string">"employee"</span><span class="token punctuation">:</span> <span class="token boolean">True</span><span class="token punctuation">,</span> <span class="token string">"admin"</span><span class="token punctuation">:</span> <span class="token boolean">True</span><span class="token punctuation">,</span> <span class="token string">"weekend"</span><span class="token punctuation">:</span> <span class="token boolean">True</span><span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token punctuation">{</span><span class="token string">"name"</span><span class="token punctuation">:</span> <span class="token string">"Visitor on weekday"</span><span class="token punctuation">,</span> <span class="token string">"keycard"</span><span class="token punctuation">:</span> <span class="token boolean">False</span><span class="token punctuation">,</span> <span class="token string">"employee"</span><span class="token punctuation">:</span> <span class="token boolean">False</span><span class="token punctuation">,</span> <span class="token string">"admin"</span><span class="token punctuation">:</span> <span class="token boolean">False</span><span class="token punctuation">,</span> <span class="token string">"weekend"</span><span class="token punctuation">:</span> <span class="token boolean">False</span><span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token punctuation">]</span> <span class="token keyword">for</span> <span class="token keyword">case</span> <span class="token keyword">in</span> test_cases<span class="token punctuation">:</span> result <span class="token operator">=</span> can_access<span class="token punctuation">(</span><span class="token keyword">case</span><span class="token punctuation">[</span><span class="token string">"keycard"</span><span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token keyword">case</span><span class="token punctuation">[</span><span class="token string">"employee"</span><span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token keyword">case</span><span class="token punctuation">[</span><span class="token string">"admin"</span><span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token keyword">case</span><span class="token punctuation">[</span><span class="token string">"weekend"</span><span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string-interpolation"><span class="token string">f"</span><span class="token interpolation"><span class="token punctuation">{</span><span class="token keyword">case</span><span class="token punctuation">[</span><span class="token string">'name'</span><span class="token punctuation">]</span><span class="token punctuation">}</span></span><span class="token string">: </span><span class="token interpolation"><span class="token punctuation">{</span><span class="token string">'✅ Access'</span> <span class="token keyword">if</span> result <span class="token keyword">else</span> <span class="token string">'❌ Denied'</span><span class="token punctuation">}</span></span><span class="token string">"</span></span><span class="token punctuation">)</span> |
Example 2: Search Engine Query
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
<span class="token keyword">def</span> <span class="token function">search_documents</span><span class="token punctuation">(</span>documents<span class="token punctuation">,</span> must_terms<span class="token punctuation">,</span> should_terms<span class="token punctuation">,</span> must_not_terms<span class="token punctuation">)</span><span class="token punctuation">:</span> <span class="token triple-quoted-string string">"""</span> Simple search engine logic using Boolean operations. Args: documents: List of documents (each with text and tags) must_terms: Terms that MUST be present (AND) should_terms: Terms that SHOULD be present (OR for boosting) must_not_terms: Terms that must NOT be present (NOT) """ results <span class="token operator">=</span> <span class="token punctuation">[</span><span class="token punctuation">]</span> <span class="token keyword">for</span> doc <span class="token keyword">in</span> documents<span class="token punctuation">:</span> <span class="token comment"># Check MUST terms (all must be present)</span> must_satisfied <span class="token operator">=</span> <span class="token builtin">all</span><span class="token punctuation">(</span>term <span class="token keyword">in</span> doc<span class="token punctuation">[</span><span class="token string">'text'</span><span class="token punctuation">]</span> <span class="token keyword">for</span> term <span class="token keyword">in</span> must_terms<span class="token punctuation">)</span> <span class="token comment"># Check MUST NOT terms (none should be present)</span> must_not_violated <span class="token operator">=</span> <span class="token builtin">any</span><span class="token punctuation">(</span>term <span class="token keyword">in</span> doc<span class="token punctuation">[</span><span class="token string">'text'</span><span class="token punctuation">]</span> <span class="token keyword">for</span> term <span class="token keyword">in</span> must_not_terms<span class="token punctuation">)</span> <span class="token comment"># Document is valid if must terms satisfied and no must not terms</span> <span class="token keyword">if</span> must_satisfied <span class="token keyword">and</span> <span class="token keyword">not</span> must_not_violated<span class="token punctuation">:</span> <span class="token comment"># Calculate relevance based on should terms</span> relevance <span class="token operator">=</span> <span class="token builtin">sum</span><span class="token punctuation">(</span>term <span class="token keyword">in</span> doc<span class="token punctuation">[</span><span class="token string">'text'</span><span class="token punctuation">]</span> <span class="token keyword">for</span> term <span class="token keyword">in</span> should_terms<span class="token punctuation">)</span> results<span class="token punctuation">.</span>append<span class="token punctuation">(</span><span class="token punctuation">(</span>doc<span class="token punctuation">[</span><span class="token string">'id'</span><span class="token punctuation">]</span><span class="token punctuation">,</span> relevance<span class="token punctuation">)</span><span class="token punctuation">)</span> <span class="token comment"># Sort by relevance</span> results<span class="token punctuation">.</span>sort<span class="token punctuation">(</span>key<span class="token operator">=</span><span class="token keyword">lambda</span> x<span class="token punctuation">:</span> x<span class="token punctuation">[</span><span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">,</span> reverse<span class="token operator">=</span><span class="token boolean">True</span><span class="token punctuation">)</span> <span class="token keyword">return</span> results <span class="token comment"># Example usage</span> docs <span class="token operator">=</span> <span class="token punctuation">[</span> <span class="token punctuation">{</span><span class="token string">'id'</span><span class="token punctuation">:</span> <span class="token number">1</span><span class="token punctuation">,</span> <span class="token string">'text'</span><span class="token punctuation">:</span> <span class="token string">'python programming tutorial'</span><span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token punctuation">{</span><span class="token string">'id'</span><span class="token punctuation">:</span> <span class="token number">2</span><span class="token punctuation">,</span> <span class="token string">'text'</span><span class="token punctuation">:</span> <span class="token string">'java programming guide'</span><span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token punctuation">{</span><span class="token string">'id'</span><span class="token punctuation">:</span> <span class="token number">3</span><span class="token punctuation">,</span> <span class="token string">'text'</span><span class="token punctuation">:</span> <span class="token string">'python vs java comparison'</span><span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token punctuation">{</span><span class="token string">'id'</span><span class="token punctuation">:</span> <span class="token number">4</span><span class="token punctuation">,</span> <span class="token string">'text'</span><span class="token punctuation">:</span> <span class="token string">'advanced python concepts'</span><span class="token punctuation">}</span><span class="token punctuation">,</span> <span class="token punctuation">]</span> results <span class="token operator">=</span> search_documents<span class="token punctuation">(</span>docs<span class="token punctuation">,</span> <span class="token punctuation">[</span><span class="token string">'python'</span><span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token punctuation">[</span><span class="token string">'programming'</span><span class="token punctuation">,</span> <span class="token string">'guide'</span><span class="token punctuation">]</span><span class="token punctuation">,</span> <span class="token punctuation">[</span><span class="token string">'java'</span><span class="token punctuation">]</span><span class="token punctuation">)</span> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string">"Search results:"</span><span class="token punctuation">,</span> results<span class="token punctuation">)</span> |
Example 3: Combinational Logic Circuit
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
<span class="token keyword">def</span> <span class="token function">half_adder</span><span class="token punctuation">(</span>a<span class="token punctuation">,</span> b<span class="token punctuation">)</span><span class="token punctuation">:</span> <span class="token triple-quoted-string string">"""</span> A half adder circuit adds two bits. Returns (sum, carry) """ sum_bit <span class="token operator">=</span> a <span class="token operator">^</span> b <span class="token comment"># XOR</span> carry <span class="token operator">=</span> a <span class="token operator">&</span> b <span class="token comment"># AND</span> <span class="token keyword">return</span> sum_bit<span class="token punctuation">,</span> carry <span class="token keyword">def</span> <span class="token function">full_adder</span><span class="token punctuation">(</span>a<span class="token punctuation">,</span> b<span class="token punctuation">,</span> carry_in<span class="token punctuation">)</span><span class="token punctuation">:</span> <span class="token triple-quoted-string string">"""</span> A full adder adds three bits (two bits plus carry-in). Returns (sum, carry_out) """ sum1<span class="token punctuation">,</span> carry1 <span class="token operator">=</span> half_adder<span class="token punctuation">(</span>a<span class="token punctuation">,</span> b<span class="token punctuation">)</span> sum2<span class="token punctuation">,</span> carry2 <span class="token operator">=</span> half_adder<span class="token punctuation">(</span>sum1<span class="token punctuation">,</span> carry_in<span class="token punctuation">)</span> carry_out <span class="token operator">=</span> carry1 <span class="token operator">|</span> carry2 <span class="token comment"># OR</span> <span class="token keyword">return</span> sum2<span class="token punctuation">,</span> carry_out <span class="token comment"># Test the full adder</span> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string">"Full Adder Truth Table:"</span><span class="token punctuation">)</span> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string">"A B Cin | Sum Cout"</span><span class="token punctuation">)</span> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string">"-"</span> <span class="token operator">*</span> <span class="token number">20</span><span class="token punctuation">)</span> <span class="token keyword">for</span> a <span class="token keyword">in</span> <span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">:</span> <span class="token keyword">for</span> b <span class="token keyword">in</span> <span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">:</span> <span class="token keyword">for</span> cin <span class="token keyword">in</span> <span class="token punctuation">[</span><span class="token number">0</span><span class="token punctuation">,</span> <span class="token number">1</span><span class="token punctuation">]</span><span class="token punctuation">:</span> s<span class="token punctuation">,</span> cout <span class="token operator">=</span> full_adder<span class="token punctuation">(</span>a<span class="token punctuation">,</span> b<span class="token punctuation">,</span> cin<span class="token punctuation">)</span> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string-interpolation"><span class="token string">f"</span><span class="token interpolation"><span class="token punctuation">{</span>a<span class="token punctuation">}</span></span> <span class="token interpolation"><span class="token punctuation">{</span>b<span class="token punctuation">}</span></span> <span class="token interpolation"><span class="token punctuation">{</span>cin<span class="token punctuation">}</span></span><span class="token string"> | </span><span class="token interpolation"><span class="token punctuation">{</span>s<span class="token punctuation">}</span></span> <span class="token interpolation"><span class="token punctuation">{</span>cout<span class="token punctuation">}</span></span><span class="token string">"</span></span><span class="token punctuation">)</span> |
Part 9: Common Mistakes and How to Avoid Them
Mistake 1: Confusing AND and OR in Natural Language
Natural language can be ambiguous. “I want coffee or tea” usually means one or the other but not both (XOR), while in Boolean logic, OR includes both.
Mistake 2: Forgetting De Morgan’s Laws When Negating Complex Conditions
|
0 1 2 3 4 5 6 7 8 9 10 11 12 13 |
<span class="token comment"># Original condition</span> <span class="token keyword">if</span> user<span class="token punctuation">.</span>is_logged_in <span class="token keyword">and</span> user<span class="token punctuation">.</span>has_permission<span class="token punctuation">:</span> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string">"Access granted"</span><span class="token punctuation">)</span> <span class="token comment"># Negating this condition correctly</span> <span class="token keyword">if</span> <span class="token keyword">not</span> <span class="token punctuation">(</span>user<span class="token punctuation">.</span>is_logged_in <span class="token keyword">and</span> user<span class="token punctuation">.</span>has_permission<span class="token punctuation">)</span><span class="token punctuation">:</span> <span class="token comment"># Using De Morgan's: not logged_in OR not has_permission</span> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string">"Access denied"</span><span class="token punctuation">)</span> |
Mistake 3: Assuming Boolean Expressions Evaluate Like Arithmetic
|
0 1 2 3 4 5 6 7 8 9 10 11 12 |
<span class="token comment"># This doesn't work the way you might think</span> x <span class="token operator">=</span> <span class="token number">5</span> <span class="token keyword">if</span> <span class="token number">3</span> <span class="token operator"><</span> x <span class="token operator"><</span> <span class="token number">10</span><span class="token punctuation">:</span> <span class="token comment"># In Python, this works as expected</span> <span class="token keyword">print</span><span class="token punctuation">(</span><span class="token string">"x is between 3 and 10"</span><span class="token punctuation">)</span> <span class="token comment"># But in many languages, you need:</span> <span class="token comment"># if (3 < x) and (x < 10):</span> |
Summary: The Boolean Algebra Philosophy
-
Boolean algebra is the mathematics of binary variables (TRUE/FALSE, 1/0).
-
The three fundamental operations are AND, OR, and NOT.
-
Truth tables show the output of Boolean expressions for all input combinations.
-
Boolean laws (commutative, associative, distributive, De Morgan’s) allow us to simplify expressions.
-
Boolean algebra is the theoretical foundation for:
-
Programming logic (conditionals, loops, control flow)
-
Digital circuit design (processors, memory, all computer hardware)
-
Database queries (search conditions)
-
Search engines (Boolean queries)
-
Understanding Boolean algebra is like understanding the grammar of logical thought. It gives you a precise language for expressing and manipulating conditions, and it’s the invisible force behind every decision your computer makes. Master it, and you’ll have a deeper appreciation for how software and hardware alike process the fundamental yes/no questions that drive all of computing.
