Skip to content

Sum of products vs product of sums

A sum of products is an OR of AND-terms; a product of sums is an AND of OR-clauses. Every function has both, and for Σm(A, B, C; 1, 3, 5, 6) the engine shows both canonical forms at four terms each, a three-group Karnaugh cover, and the gate counts that follow.

The function is TRUE on rows 1, 3, 5 and 6 of eight. Its canonical sum of products has one AND-term per TRUE row, four terms of three literals; its canonical product of sums has one OR-clause per FALSE row, ΠM(0, 2, 4, 7), also four clauses. The engine's minterm and maxterm lines state both, and the normal-form converter reaches each from the indexed form by minterm expansion in a single named step.

Sum of products is the natural reading of a rule as cases (“TRUE when this, or when that”) and the form a Karnaugh map produces; here the map derives (A AND B AND NOT C) OR (NOT A AND C) OR (NOT B AND C), three groups covering the four minterms, three prime implicants. Product of sums is the natural reading as constraints (“must satisfy this, and that”) and the form a SAT solver consumes, since each clause is a constraint. Which is shorter depends on the function: a function TRUE on few rows has a short SOP, one FALSE on few rows a short POS.

The gate counts the engine reports for the indexed form, built mechanically from the canonical expansion, are large on both bases; a hand design from the Karnaugh cover is much smaller. That is the practical lesson of the comparison: pick the form by what you want to do with it, read, constrain or build, and let the exact check confirm that the two forms are the same function.

Example

f := Σm(A, B, C; 1, 3, 5, 6) · output

Exact checks

Always true (tautology)? No Counterexample: A = F, B = F, C = F · Exhaustively checked and solver cross-checked · 1 rows
Always false (contradiction)? No Counterexample: A = F, B = F, C = T · Exhaustively checked and solver cross-checked · 2 rows
Can be true? Yes Example assignment: A = F, B = F, C = T · Exhaustively checked and solver cross-checked · 2 rows

Truth table (8 rows)

Sum of products vs product of sums
#ABCf
0FALSEFALSEFALSEFALSE
1FALSEFALSETRUETRUE
2FALSETRUEFALSEFALSE
3FALSETRUETRUETRUE
4TRUEFALSEFALSEFALSE
5TRUEFALSETRUETRUE
6TRUETRUEFALSETRUE
7TRUETRUETRUEFALSE

Logic diagram

Sum of products vs product of sums Sum of products vs product of sums A B C f Σm(1,3,5,6)ABC
Sum of products vs product of sums Sum of products vs product of sums A B C f Σm(1,3,5,6)ABC

Karnaugh map

A \ BC
00
01
11
10
0
0m0
1m1
1m3
0m2
1
0m4
1m5
0m7
1m6
  1. cells m6A AND B AND NOT C
  2. cells m1, m3NOT A AND C
  3. cells m1, m5NOT B AND C
(A AND B AND NOT C) OR (NOT A AND C) OR (NOT B AND C) · Derived (A AND B AND NOT C) OR (NOT A AND C) OR (NOT B AND C). Exactly equivalent on every assignment.

Minterms and maxterms

f(A, B, C) = Σm(1, 3, 5, 6)f(A, B, C) = ΠM(0, 2, 4, 7)

Variable order: A, B, C · 8 rows

Normal forms

Conjunctive normal form (CNF)

(A OR B OR C) AND (A OR NOT B OR C) AND (NOT A OR B OR C) AND (NOT A OR NOT B OR NOT C)

4 clauses, 12 literals · complete · Minterm expansion ×1

Disjunctive normal form (DNF)

(A AND B AND NOT C) OR (A AND NOT B AND C) OR (NOT A AND B AND C) OR (NOT A AND NOT B AND C)

4 terms, 12 literals · complete · Minterm expansion ×1

NAND-only and NOR-only

NAND-only form

NAND(NAND(NAND(NAND(NAND(NAND(NAND(A, A), NAND(B, B)), NAND(NAND(A, A), NAND(B, B))), C), NAND(NAND(NAND(NAND(A, A), B), NAND(NAND(A, A), B)), C)), NAND(NAND(NAND(NAND(NAND(A, A), NAND(B, B)), NAND(NAND(A, A), NAND(B, B))), C), NAND(NAND(NAND(NAND(A, A), B), NAND(NAND(A, A), B)), C))), NAND(NAND(NAND(NAND(NAND(A, NAND(B, B)), NAND(A, NAND(B, B))), C), NAND(NAND(NAND(A, B), NAND(A, B)), NAND(C, C))), NAND(NAND(NAND(NAND(A, NAND(B, B)), NAND(A, NAND(B, B))), C), NAND(NAND(NAND(A, B), NAND(A, B)), NAND(C, C)))))

57 gates · verified equivalent on every row

NOR-only form

NOR(NOR(NOR(NOR(NOR(NOR(NOR(A, B), NOR(A, B)), NOR(C, C)), NOR(NOR(NOR(A, NOR(B, B)), NOR(A, NOR(B, B))), NOR(C, C))), NOR(NOR(NOR(NOR(A, B), NOR(A, B)), NOR(C, C)), NOR(NOR(NOR(A, NOR(B, B)), NOR(A, NOR(B, B))), NOR(C, C)))), NOR(NOR(NOR(NOR(NOR(NOR(A, A), B), NOR(NOR(A, A), B)), NOR(C, C)), NOR(NOR(NOR(NOR(A, A), NOR(B, B)), NOR(NOR(A, A), NOR(B, B))), C)), NOR(NOR(NOR(NOR(NOR(A, A), B), NOR(NOR(A, A), B)), NOR(C, C)), NOR(NOR(NOR(NOR(A, A), NOR(B, B)), NOR(NOR(A, A), NOR(B, B))), C)))), NOR(NOR(NOR(NOR(NOR(NOR(A, B), NOR(A, B)), NOR(C, C)), NOR(NOR(NOR(A, NOR(B, B)), NOR(A, NOR(B, B))), NOR(C, C))), NOR(NOR(NOR(NOR(A, B), NOR(A, B)), NOR(C, C)), NOR(NOR(NOR(A, NOR(B, B)), NOR(A, NOR(B, B))), NOR(C, C)))), NOR(NOR(NOR(NOR(NOR(NOR(A, A), B), NOR(NOR(A, A), B)), NOR(C, C)), NOR(NOR(NOR(NOR(A, A), NOR(B, B)), NOR(NOR(A, A), NOR(B, B))), C)), NOR(NOR(NOR(NOR(NOR(A, A), B), NOR(NOR(A, A), B)), NOR(C, C)), NOR(NOR(NOR(NOR(A, A), NOR(B, B)), NOR(NOR(A, A), NOR(B, B))), C)))))

123 gates · verified equivalent on every row

The common slip

Assuming the product of sums of a function is the sum of products with the operators swapped. ΠM(0, 2, 4, 7) is not Σm with AND and OR exchanged; the maxterms list the FALSE rows, and each clause negates where the row has a TRUE.

Questions

Which form does the Karnaugh map give?

A sum of products, from groups of TRUE cells. Grouping the FALSE cells instead and negating gives a product of sums; the engine's map works on the TRUE cells, and the converter produces the POS form directly.

Are SOP and DNF the same thing?

In practice yes: disjunctive normal form is the logicians' name, sum of products the engineers'. Likewise CNF and product of sums. The comparison on CNF versus DNF uses the logic vocabulary for the same pair.

Related

Practice

See also

Compare

Generated from the Tangibool engine, semantics tangibool-semantics/1, engine 1.0.0, build . Every table, map, simplification and verdict on these pages was computed by the Tangibool engine when the site was built, and every claim was re-checked by the same exact checker the app uses. Limits are stated where they apply. © 2026 Foreranger LTD.