A product-of-sums (POS) K-map starts from the places where a Boolean function is 0. That is the mirror image of the familiar sum-of-products method, which groups the 1s. The map layout, Gray-code adjacency, wraparound, and power-of-two group sizes stay the same. The main change is how each zero group becomes a sum term.
This guide works from a four-variable maxterm list to a simplified POS expression, then checks the result against the original function. The example is deliberately chosen so that the useful groups include both a wraparound group and an ordinary 2×2 block. By following the values through the grid, you can see why the literals in a POS term follow a different rule from the literals in an SOP term.
What POS grouping starts from
A canonical POS expression is a product of maxterms. Each maxterm corresponds to one row where the function is 0. For example, a three-variable zero at A=0, B=1, C=0 is represented by the maxterm (A + B′ + C): substituting those input values makes every item in the parentheses 0, so the whole sum is 0. The maxterm list is commonly written ΠM(...), with the indices of all zero rows inside the parentheses.
Minimizing POS does not mean grouping maxterm symbols in a list. It means plotting the zero rows in the K-map, finding rectangular groups of adjacent zeros, and replacing the full maxterms in each group with one shorter sum term. Every required zero must be covered at least once. A cell may appear in more than one group if overlap allows a better complete cover.
For a zero group, look for variables that remain constant. A variable fixed at 0 appears uncomplemented in the sum term; a variable fixed at 1 appears complemented. Variables that change are omitted. This differs from deriving an SOP product term from a group of ones, where a fixed 0 is complemented and a fixed 1 is uncomplemented. Keeping those two translation rules separate prevents many sign errors.
The cost objective also matters. A larger group generally produces a shorter sum term, but one group at a time does not determine the best expression. The complete POS is the AND of all selected sum terms. Compare candidate covers over the whole map and use the criterion required by the problem. This site's solver minimizes the number of terms first and total literals among covers with that term count; another assignment may state a different objective.
Map the maxterms
Consider F(A,B,C,D) = ΠM(0,2,5,7,8,10,13,15). These eight indices are the rows where F is 0. The remaining indices are where F is 1, so the same function can also be written Σm(1,3,4,6,9,11,12,14). Both notations describe one truth table; they simply list opposite output sets.
Use AB for the rows and CD for the columns. Write each axis in Gray-code order 00, 01, 11, 10. This ordering is important: adjacent entries, including the first and last labels, differ in one bit. The table below shows the function values. The cells containing 0 correspond exactly to the maxterm indices in the given list.
| AB\CD | 00 | 01 | 11 | 10 |
|---|---|---|---|---|
| 00 | 00 | 11 | 31 | 20 |
| 01 | 41 | 50 | 70 | 61 |
| 11 | 121 | 130 | 150 | 141 |
| 10 | 80 | 91 | 111 | 100 |
Before grouping, check the indexing convention. With variables ordered A, B, C, D, minterm 10 is binary 1010, which means A=1, B=0, C=1, D=0. That places it in row AB=10 and column CD=10. If a worksheet uses a different variable order, the numerical indices change; the labels printed on the map determine where each row belongs.
Find useful groups of zeros
The first group covers minterms 0, 2, 8, and 10. On the diagram these occupy the four outer corners. They are a valid group of four because the map wraps horizontally and vertically: column 00 is adjacent to column 10, and row 00 is adjacent to row 10. A group does not need to look like a rectangle in the flat drawing if it is rectangular on the wrapped map. The group is still a four-cell rectangle in the map's adjacency structure.
The second group covers minterms 5, 7, 13, and 15. These occupy rows AB=01 and AB=11, and columns CD=01 and CD=11. The two row labels differ in one bit, as do the two column labels, so they form a normal 2×2 block. The groups do not overlap in this example, but overlapping is allowed in other maps when it helps cover all zeros with a simpler set of terms.
Why choose groups of four? A group of four can eliminate two changing variables from its maxterm. A pair eliminates one; a single zero leaves all four variables in the corresponding maxterm. However, do not split a zero into a smaller group just because it is already covered elsewhere. The goal is to build a complete cover with suitable candidate groups, not to assign exactly one group to each cell.
Also check that every group has a power-of-two number of cells and is rectangular under wraparound. Groups of three are invalid even when three zeros look close. Diagonal cells are not adjacent. In a four-variable map, opposite edges connect, but a corner is not adjacent to every other corner; adjacency still requires changing only one input bit.
Turn each group into a sum term
For the corner group {0,2,8,10}, write the four assignments in binary: 0000, 0010, 1000, and 1010. Across these rows, B=0 and D=0 remain fixed; A and C vary. For a POS zero group, fixed zeros enter the sum term uncomplemented. The resulting maxterm is (B + D). Substituting B=0 and D=0 makes this sum zero, exactly where the group is supposed to make F zero.
For the middle group {5,7,13,15}, the assignments are 0101, 0111, 1101, and 1111. Here B=1 and D=1 stay fixed, while A and C vary. Fixed ones are complemented in the POS sum term, so the group becomes (B′ + D′). Substitution confirms the result: when B=1 and D=1, both complemented literals are zero.
Multiply the two sum terms to obtain the simplified POS form:
Notice what has disappeared. The canonical form contained eight four-literal maxterms. The grouped form contains two two-literal sum terms. A and C are absent because each group includes both values of those variables. The expression is also the exclusive-OR relation B ⊕ D, but the POS result above follows directly from the zero groups and does not require recognizing an XOR pattern.
Verify the simplified expression
A quick check is to reason from the two sum terms. The first factor (B + D) is zero only when B=0 and D=0. The second factor (B′ + D′) is zero only when B=1 and D=1. Since the factors are multiplied, F is zero whenever either factor is zero. Those are exactly the two zero patterns represented by the groups; the values of A and C do not affect the output.
When B and D differ, both factors evaluate to 1, so F=1. That matches the listed minterms: for every combination of A and C, the function is on when B=0,D=1 or B=1,D=0. There are two choices for A, two for C, and two ordered unequal pairs for B,D, giving eight 1 rows. The original maxterm list has eight zero rows out of sixteen, leaving the same eight rows as ones.
For a larger expression, compare the original and simplified forms on all input combinations or use an equivalence checker. If one row disagrees, inspect the row's binary index, map position, and complemented literals in that order. A disagreement isolated to a group boundary often signals a Gray-code or wraparound mistake; a disagreement across all rows with one fixed variable value often signals a missing complement.
When POS is useful
POS is worth checking when the function has a small or regular set of zeros, when the assignment explicitly requests maxterms, or when the resulting OR-AND structure suits the target implementation. A map can be read in both directions: group ones for SOP and zeros for POS. The shorter-looking zero pattern may produce fewer or shorter sum terms, but that is not guaranteed for every function.
Compare the two forms if the task allows either. They represent the same truth table, yet their term counts and literal counts can differ. If the problem specifies POS, give POS even when the SOP has fewer literals. If it asks for a minimal function without defining a cost measure, state what you minimized. Physical area, delay, fan-in, and available gate types can change which circuit is preferable, so a minimum POS expression is not automatically a minimum-cost implementation for every library.
For a wider overview of the two forms, read SOP vs. POS explained. The canonical SOP and POS guide covers the complete, unminimized notation. This page focuses on one practical skill: going from a maxterm list through zero groups to a simplified POS answer.
Mistakes to watch for
- Grouping ones for POS: POS groups the zeros. Grouping ones directly creates SOP product terms instead.
- Using the SOP literal rule: in a zero group, a constant 0 is uncomplemented in the sum term, and a constant 1 is complemented.
- Forgetting wraparound: the first and last Gray-code rows or columns are adjacent. The four-corner group is valid because of both edge connections.
- Using binary order on an axis: 00, 01, 11, 10 is Gray order. Plain binary order breaks the visual adjacency pattern.
- Assuming each zero belongs to exactly one group: overlap is legal and may be needed for a smaller cover.
- Calling one local group “the minimum”: compare whole covers under the stated objective, especially when several candidates cover the same cells.
A reliable POS workflow is therefore: identify every zero row, place its maxterm index using the stated variable order, group adjacent zeros in powers of two, translate fixed variables with the POS rule, multiply the sum terms, and verify the result. Practicing that sequence makes POS maps feel like a direct mirror of SOP maps rather than a separate technique.
Try it yourself
Use the same steps on F(A,B,C,D)=ΠM(1,3,4,6,9,11,12,14). First mark the listed zero cells, then look for a cover that avoids unnecessarily small groups. Before deriving terms, write the binary assignments in each group and mark which variables stay fixed. That one extra line is an effective way to prevent complement errors.
After solving, test the factors against at least one zero pattern and one one pattern. A correct zero-group term must evaluate to 0 across the cells it covers. The full product must evaluate to 1 on every unlisted index. Then compare your result with the POS solver and investigate any difference rather than assuming one expression is wrong; the same function can have multiple equivalent minimum covers under a tie.