# Deriving sum-of-products (SOP) and product-of ```Deriving sum-of-products (SOP) and product-of-sums (POS) forms
Every group you make on a Karnaugh map is a product term. When the product terms are unified, you've
formed a sum-of-products expression. What makes the various SOP expressions different is if they're formed
by grouping ones on a map – that is, if they're prime implicants – or if they're formed by grouping zeros on a
map – that is, if they're prime implicates.
If you group ones on a map, you've obtained an SOP expression for the uncomplemented form of a function.
Let's call the function f. With f determined in SOP form, the story is basically over. We can implement the
SOP form of f with a set of first-level AND gates unified by a second-level OR gate. Using bubble propagation,
all of the AND gates and OR gates can be turned into NAND gates.
If you group zeros on a map, you've implemented an SOP expression for the complemented form of f. We'll
call this form f '. We seldom care about f '. We could implement f ' in SOP form using AND gates on the first
level and a unifying OR gate on the second level, but then we'd have to invert the output to obtain f from f '.
This adds a level of logic to the circuit that makes it that much slower than the maximum-speed circuit – the one
that only requires two levels of logic, plus input inverters.
Our alternative is to transform the SOP expression for f ' into another form. We do this by complementing both
sides of the function. Of course, f ' becomes f when it is complemented. This occurs because of involution. On
the other side, the complemented SOP expression becomes a POS expression through two sets of application of
DeMorgan's Theorem. Here's an example:
f  AB  A CD  BC D
f  AB  A CD  BC D
 

f  AB A CD BC D




 A  B AC  D B C  D

The SOP expression for f ' is now a POS expression for f. At this point, we can use a set of first-level OR gates
to implement the sum terms, and a second-level unifying AND gate. Using bubble propagation, we can change
all of the OR gates and AND gates into NOR gates.
Compare the two forms:
f  AB  A CD  BC D
f  A  B A  C  D B  C  D 
Notice that in forming the sum terms, all of the complemented literals in the products became uncomplemented
literals in the sums, and vice versa. You can therefore write out a POS form function straight from a K-map in
which you've grouped the zeros. You just have to remember to do two things:
1. Form sum terms instead of product terms.
2. Call a literal complemented if its label value is 1 for that group of zeros (prime implicate), or call the literal
uncomplemented if its label value is 0 for that group of zeros (prime implicate).
Step 2 follows the opposite convention for complemented and uncomplemented literals from the one that is
used in standard SOP forms. Remember this if you form a POS expression directly from a Karnaugh map.
Here's the map from which the above function was derived:
CD
00
00
01
1
1
0
01
1
11
1
1
10
0
1
0
2
0
7
1
13
0
8
1
3
5
12
10
0
1
4
AB
11
6
0
15
0
9
14
0
11
10
In the bottom row, we have a group of zeros for which A is 1 and B is 0. In the final POS expression, this will
correspond to the sum term (A' + B).
The vertical term in the third column is such that A is 0, C is 1, and D is 1. In the final POS expression, this
will correspond to the sum term (A + C' + D').
Finally, the vertical term in the fourth column is such that B is 1, C is 1, and D is 0. In the final POS
expression, this will correspond to the sum term (B' + C' + D).
Unifying these three sums with an AND operator gives the POS expression for f derived above using
DeMorgan’s Theorem on the SOP expression for f '.
So, when forming a POS expression, you have two alternatives:
1. Group the zeros on a map, and form the SOP expression for f '. Use the normal convention for the
correspondence between zeroes and ones in the labels and complemented and uncomplemented literals.
Then, apply DeMorgan's Theorem and involution to obtain the POS expression for f.
2. Group the zeros on a map, and form the POS expression for f directly. Reverse the standard convention for
the correspondence between zeroes and ones in the labels and complemented and uncomplemented literals.
Make sure that you do one or the other. Don't do some of both, and don't do neither. Also, you should never
attempt to group the ones when forming a POS expression. If you follow either of the procedures listed above
when grouping the ones, you will have formed a POS expression for f ', and not for f.
```