eolas/Logic/Propositional_logic/Boolean_function_synthesis.md

114 lines
4.7 KiB
Markdown
Raw Normal View History

2022-12-19 07:30:04 +00:00
---
categories:
- Logic
- Computer Architecture
2023-02-10 18:22:04 +00:00
tags: [propositional-logic, nand-to-tetris]
2022-12-19 07:30:04 +00:00
---
# Boolean function synthesis
2022-12-20 07:00:05 +00:00
When we looked at [boolean functions](/Logic/Propositional_logic/Boolean_functions.md) we were working in a particular direction: from a function to a truth table. When we do Boolean function synthesis we work in the opposite direction: from a truth table to a function.
2022-12-19 07:30:04 +00:00
2022-12-20 08:00:07 +00:00
This is an important skill that we will use when constructing [logic circuits](/Electronics_and_Hardware/Digital_circuits/Digital_circuits.md). We will go from truth conditions (i.e. what we want the circuit to do and when we want it to do it) to a function expression which is then reduced to its simplest form and implemented with [logic gates](/Electronics_and_Hardware/Digital_circuits/Logic_gates.md). Specifically, NAND gates.
We will show here that a complex logical expression can be reduced to an equivalent expression that uses only the NAND operator.
2022-12-19 07:30:04 +00:00
## The process
The process proceeds as follows:
2022-12-19 08:00:05 +00:00
1. Work out the truth conditions for the circuit we want to construct
2. Identify the rows where the output is equal to 1
3. For each of these rows construct a Boolean expression that evaluates to that output
4. Join each expression with OR
5. Reduce these expressions to a single expression in its simplest form
## Example
Let's say we have the following truth table:
| Line | $x$ | $y$ | $z$ | $f$ |
| ---- | --- | --- | --- | --- |
2022-12-28 10:30:06 +00:00
| 1 | 0 | 0 | 0 | 0 |
2022-12-19 08:00:05 +00:00
| 2 | 0 | 0 | 1 | 0 |
| 3 | 0 | 1 | 0 | 1 |
| 4 | 0 | 1 | 1 | 0 |
| 5 | 1 | 0 | 0 | 1 |
| 6 | 1 | 0 | 1 | 0 |
| 7 | 1 | 1 | 0 | 0 |
| 8 | 1 | 1 | 1 | 0 |
We only need to focus on lines 1, 3, and 5 since they have the output 1:
| Line | $x$ | $y$ | $z$ | $f$ |
| ---- | --- | --- | --- | --- |
| 1 | 0 | 0 | 0 | 1 |
| 3 | 0 | 1 | 0 | 1 |
| 5 | 1 | 0 | 0 | 1 |
For each line we construct a Boolean expression that would result in the value in the $f$ column. In other words we construct the function:
2022-12-27 10:30:05 +00:00
| Line | $x$ | $y$ | $z$ | $f$ |
| ---- | --- | --- | --- | ----------------------------------------- |
| 1 | 0 | 0 | 0 | $\lnot(x) \land \lnot (y) \land \lnot(z)$ |
| 3 | 0 | 1 | 0 | $\lnot(x) \land y \land \lnot(z)$ |
| 5 | 1 | 0 | 0 | $x \land \lnot(y) \land \lnot(z)$ |
2022-12-19 08:00:05 +00:00
2022-12-20 07:00:05 +00:00
We can now join each expression to create a complex expression that covers the entire truth table using OR:
2022-12-19 08:00:05 +00:00
$$
2022-12-28 10:30:06 +00:00
(\lnot(x) \land \lnot (y) \land \lnot(z)) \\ \lor \\ (\lnot(x) \land y \land \lnot(z)) \\ \lor \\ (x \land \lnot(y) \land \lnot(z))
2022-12-19 08:00:05 +00:00
$$
2022-12-19 08:30:04 +00:00
It's clear that we have transcribed the truth conditions accurately but that we are doing so in a rather verbose way. We can simplify by just looking at the position of the 1s in the truth table. Notice:
- $z$ is always 0
- $x$ and $y$ are either 0 or 1 but never both 1 in the same row
So we simplify:
$$
(\lnot(x) \land \lnot(z)) \lor (\lnot(y) \land \lnot(z))
$$
2022-12-20 07:00:05 +00:00
Notice that $\lnot(z)$ is repeated so we can remove the repetition through [idempotence](/Logic/Propositional_logic/Boolean_algebra.md#idempotent-law):
2022-12-19 08:30:04 +00:00
$$
\lnot z \land (\lnot(x) \lor \lnot(y))
$$
2022-12-20 07:30:07 +00:00
The upshot is that we now have a simpler expression that uses only NOT, OR and AND. These are the fundamental logic gates thus we are able to construct a circuit that embodies the logic of the expression.
2022-12-19 08:30:04 +00:00
> This is important and is an instance of the general theorem that _any Boolean function_ can be represented using an expression containing AND, OR and NOT operations
2022-12-20 07:30:07 +00:00
But even this is too complex. We could get rid of the OR and just use AND and NOT:
2022-12-19 08:30:04 +00:00
2022-12-20 08:00:07 +00:00
We can prove this theorem by showing that an expression with AND, NOT, and OR can be formulated as an equivalent expression using just NOT and AND:
2022-12-20 07:30:07 +00:00
$$
x \lor y = \lnot(\lnot(x) \land \lnot(y))
$$
| $x$ | $y$ | $x \lor y$ | $\lnot(\lnot(x) \land \lnot(y)$ |
| --- | --- | ---------- | ------------------------------- |
| 0 | 0 | 0 | 0 |
| 0 | 1 | 1 | 1 |
| 1 | 0 | 1 | 1 |
| 1 | 1 | 1 | 1 |
2022-12-20 08:00:07 +00:00
Finally, we can simplify even further by doing away with AND and NOT and using a single [NAND gate](/Electronics_and_Hardware/Digital_circuits/Logic_gates.md#nand-gate) which embodies the logic of both, being true in all instances where AND would be false: $\lnot (x \land y)$.
Let's prove the theorem that every logical expression can be formulated as a NAND function. To do this we need to show that both NOT and AND can be converted to NAND.
NOT:
$$
\lnot(x) = x \lnot\land x
$$
AND:
2022-12-20 07:30:07 +00:00
$$
2022-12-20 08:00:07 +00:00
x \land y = \lnot(x \lnot\land y)
2022-12-20 07:30:07 +00:00
$$