Skip to content
Part IA Michaelmas Term

Consensus Theorem

Statement

The consensus theorem in its most common form states:

a⋅b+aˉ⋅c+b⋅c=a⋅b+aˉ⋅ca \cdot b + \bar{a} \cdot c + b \cdot c = a \cdot b + \bar{a} \cdot c

The term b⋅cb \cdot c is called the consensus term. It is formed by taking the AND of the terms that remain after removing the variable and its complement from the two product terms a⋅ba \cdot b and aˉ⋅c\bar{a} \cdot c: strip aa from a⋅ba \cdot b to get bb, strip aˉ\bar{a} from aˉ⋅c\bar{a} \cdot c to get cc, and AND them to get b⋅cb \cdot c.

The dual form (swap AND with OR):

(a+b)⋅(aˉ+c)⋅(b+c)=(a+b)⋅(aˉ+c)(a + b) \cdot (\bar{a} + c) \cdot (b + c) = (a + b) \cdot (\bar{a} + c)

Proof via Boolean Algebra

Starting from the left-hand side:

a⋅b+aˉ⋅c+b⋅c=a⋅b+aˉ⋅c+b⋅c⋅(a+aˉ)=a⋅b+aˉ⋅c+a⋅b⋅c+aˉ⋅b⋅c=(a⋅b+a⋅b⋅c)+(aˉ⋅c+aˉ⋅b⋅c)=a⋅b⋅(1+c)+aˉ⋅c⋅(1+b)=a⋅b⋅1+aˉ⋅c⋅1=a⋅b+aˉ⋅c\begin{aligned} a \cdot b + \bar{a} \cdot c + b \cdot c &= a \cdot b + \bar{a} \cdot c + b \cdot c \cdot (a + \bar{a}) \\ &= a \cdot b + \bar{a} \cdot c + a \cdot b \cdot c + \bar{a} \cdot b \cdot c \\ &= (a \cdot b + a \cdot b \cdot c) + (\bar{a} \cdot c + \bar{a} \cdot b \cdot c) \\ &= a \cdot b \cdot (1 + c) + \bar{a} \cdot c \cdot (1 + b) \\ &= a \cdot b \cdot 1 + \bar{a} \cdot c \cdot 1 \\ &= a \cdot b + \bar{a} \cdot c \end{aligned}

The critical trick is multiplying b⋅cb \cdot c by (a+aˉ)=1(a + \bar{a}) = 1. This expands the consensus term into two terms, each of which is absorbed by one of the original product terms.

Proof via Truth Table

Build the truth table for all three input variables and compute both sides:

abca⋅ba \cdot baˉ⋅c\bar{a} \cdot cb⋅cb \cdot cLHS (ab+aˉc+bcab + \bar{a}c + bc)RHS (ab+aˉcab + \bar{a}c)
00000000
00101011
01000000
01101111
10000000
10100000
11010011
11110111

The columns for LHS and RHS are identical, confirming the theorem. Notice that b⋅cb \cdot c is 1 only in rows where either a⋅ba \cdot b or aˉ⋅c\bar{a} \cdot c is already 1, so it never adds a new 1 to the function.

Proof via Karnaugh Map Preview

Plot the function f=a⋅b+aˉ⋅c+b⋅cf = a \cdot b + \bar{a} \cdot c + b \cdot c on a K-map (3 variables: a, b, c). The K-map for a 3-variable function uses Gray code ordering:

a∖bc000111100011010011\begin{array}{c|cccc} a \setminus bc & 00 & 01 & 11 & 10 \\ \hline 0 & 0 & 1 & 1 & 0 \\ 1 & 0 & 0 & 1 & 1 \end{array}

The term a⋅ba \cdot b (1 when a=1, b=1, any c) covers cells (a=1, b=1, c=0) and (a=1, b=1, c=1), i.e., bc=10 and bc=11 in the second row. Both are 1.

The term aˉ⋅c\bar{a} \cdot c (1 when a=0, c=1, any b) covers cells (a=0, b=0, c=1) and (a=0, b=1, c=1), i.e., bc=01 and bc=11 in the first row. Both are 1.

The term b⋅cb \cdot c (1 when b=1, c=1, any a) covers (a=0, b=1, c=1) and (a=1, b=1, c=1). But both of these cells are already covered by aˉ⋅c\bar{a} \cdot c and a⋅ba \cdot b respectively. So b⋅cb \cdot c is redundant: it covers no minterms that are not already covered. This visual verification matches the algebraic proof: the consensus term is always redundant on a K-map because its cells are a subset of the union of the two generating terms’ cells.

How to Identify a Consensus Term

Given two product terms, a consensus term exists if they contain exactly one variable that appears complemented in one term and uncomplemented in the other. For a⋅ba \cdot b and aˉ⋅c\bar{a} \cdot c: the variable aa appears uncomplemented in the first and complemented in the second. The consensus is formed by AND-ing the remaining literals: b⋅cb \cdot c.

Example: x⋅yˉ⋅zx \cdot \bar{y} \cdot z and xˉ⋅w⋅z\bar{x} \cdot w \cdot z

  • Conflicting variable: xx (uncomplemented vs complemented)
  • Remaining literals: yˉ⋅z\bar{y} \cdot z and w⋅zw \cdot z
  • Consensus term: yˉ⋅z⋅w\bar{y} \cdot z \cdot w (AND of all remaining literals from both terms)

Using Consensus to Simplify

Elimination of Consensus Terms

If you find a consensus term in an expression, you can delete it without changing the function:

a⋅b+aˉ⋅c+b⋅c=a⋅b+aˉ⋅ca \cdot b + \bar{a} \cdot c + b \cdot c = a \cdot b + \bar{a} \cdot c

Example: Simplify a⋅b+aˉ⋅c+b⋅c+bˉ⋅c+a⋅bˉa \cdot b + \bar{a} \cdot c + b \cdot c + \bar{b} \cdot c + a \cdot \bar{b}.

In this expression, b⋅cb \cdot c is the consensus of a⋅ba \cdot b and aˉ⋅c\bar{a} \cdot c, so eliminate it.

Now examine the remaining expression: a⋅b+aˉ⋅c+bˉ⋅c+a⋅bˉa \cdot b + \bar{a} \cdot c + \bar{b} \cdot c + a \cdot \bar{b}.

Looking for other consensus terms: a⋅bˉa \cdot \bar{b} and aˉ⋅c\bar{a} \cdot c do not share a conflicting variable (the variables aa and bb in the first, aˉ\bar{a} and cc in the second; aa conflicts, leaving bˉ\bar{b} and cc; consensus would be bˉ⋅c\bar{b} \cdot c, which is already present!). So bˉ⋅c\bar{b} \cdot c is the consensus of a⋅bˉa \cdot \bar{b} and aˉ⋅c\bar{a} \cdot c, and can be removed.

Final expression: a⋅b+aˉ⋅c+a⋅bˉa \cdot b + \bar{a} \cdot c + a \cdot \bar{b}.

Adding Consensus Terms for Simplification

Sometimes it is useful to add a consensus term to enable further simplification. This is non-obvious because adding a term makes the expression larger; but it may allow factoring or combination that yields a net reduction.

Example: Simplify a⋅b+a⋅c+aˉ⋅b⋅ca \cdot b + a \cdot c + \bar{a} \cdot b \cdot c.

Direct simplification does not give much leverage. Add the consensus of a⋅ba \cdot b and a⋅ca \cdot c: these share aa in common (no conflict), so no consensus between them. The consensus of a⋅ba \cdot b and aˉ⋅b⋅c\bar{a} \cdot b \cdot c: conflicting variable aa, remaining literals bb from the first and b⋅cb \cdot c from the second; consensus is b⋅b⋅c=b⋅cb \cdot b \cdot c = b \cdot c. Add b⋅cb \cdot c:

a⋅b+a⋅c+aˉ⋅b⋅c+b⋅ca \cdot b + a \cdot c + \bar{a} \cdot b \cdot c + b \cdot c =a⋅b+a⋅c+b⋅c⋅(aˉ+1)= a \cdot b + a \cdot c + b \cdot c \cdot (\bar{a} + 1) =a⋅b+a⋅c+b⋅c= a \cdot b + a \cdot c + b \cdot c =a⋅(b+c)+b⋅c= a \cdot (b + c) + b \cdot c

(Better example with a real simplification):

Example: Simplify a⋅bˉ+aˉ⋅b+a⋅cˉa \cdot \bar{b} + \bar{a} \cdot b + a \cdot \bar{c}.

Check consensus: a⋅bˉa \cdot \bar{b} and aˉ⋅b\bar{a} \cdot b have aa conflicting, remaining literals bˉ\bar{b} and bb, consensus bˉ⋅b=0\bar{b} \cdot b = 0 (trivial). a⋅bˉa \cdot \bar{b} and a⋅cˉa \cdot \bar{c} have no conflicting variable (both start with aa). aˉ⋅b\bar{a} \cdot b and a⋅cˉa \cdot \bar{c} have aa conflicting, remaining bb and cˉ\bar{c}, consensus b⋅cˉb \cdot \bar{c}. Add b⋅cˉb \cdot \bar{c}:

a⋅bˉ+aˉ⋅b+a⋅cˉ+b⋅cˉa \cdot \bar{b} + \bar{a} \cdot b + a \cdot \bar{c} + b \cdot \bar{c}

Now a⋅cˉ+b⋅cˉ=(a+b)⋅cˉa \cdot \bar{c} + b \cdot \bar{c} = (a + b) \cdot \bar{c}. So:

=a⋅bˉ+aˉ⋅b+(a+b)⋅cˉ= a \cdot \bar{b} + \bar{a} \cdot b + (a + b) \cdot \bar{c}

This may or may not be simpler than the original, depending on the implementation cost metric. The point is that adding a consensus term is a legitimate step that opens up new factoring possibilities.

Proof of the Dual Form

The dual of the consensus theorem is:

(a+b)⋅(aˉ+c)⋅(b+c)=(a+b)⋅(aˉ+c)(a + b) \cdot (\bar{a} + c) \cdot (b + c) = (a + b) \cdot (\bar{a} + c)

Proof: Start from the left-hand side and apply the distributive law for OR over AND to expand, or apply De Morgan to reduce to the original form:

Let f=(a+b)⋅(aˉ+c)⋅(b+c)f = (a + b) \cdot (\bar{a} + c) \cdot (b + c). Take the complement:

fˉ=(a+b)⋅(aˉ+c)⋅(b+c)‾\bar{f} = \overline{(a + b) \cdot (\bar{a} + c) \cdot (b + c)} fˉ=a+b‾+aˉ+c‾+b+c‾\bar{f} = \overline{a + b} + \overline{\bar{a} + c} + \overline{b + c} fˉ=aˉ⋅bˉ+a⋅cˉ+bˉ⋅cˉ\bar{f} = \bar{a} \cdot \bar{b} + a \cdot \bar{c} + \bar{b} \cdot \bar{c}

Now apply the original consensus theorem to fˉ\bar{f} (the variables are now aˉ\bar{a}, aa, bˉ\bar{b}, cˉ\bar{c}; the conflicting variable is aˉ/a\bar{a}/a, remaining terms bˉ\bar{b} and cˉ\bar{c}, consensus bˉ⋅cˉ\bar{b} \cdot \bar{c}):

fˉ=aˉ⋅bˉ+a⋅cˉ\bar{f} = \bar{a} \cdot \bar{b} + a \cdot \bar{c}

Take the complement again:

f=aˉ⋅bˉ+a⋅cˉ‾f = \overline{\bar{a} \cdot \bar{b} + a \cdot \bar{c}} f=aˉ⋅bˉ‾⋅a⋅cˉ‾f = \overline{\bar{a} \cdot \bar{b}} \cdot \overline{a \cdot \bar{c}} f=(a+b)⋅(aˉ+c)f = (a + b) \cdot (\bar{a} + c)

Which proves the dual form. This approach (complement, apply the original theorem, complement again) is a general technique for proving the dual of any Boolean identity.

Extended Consensus: Three or More Consensus Terms

Consider an expression with three product terms that each conflict with the others in a cycle:

a⋅b+b⋅c+a⋅ca \cdot b + b \cdot c + a \cdot c

Here the consensus of a⋅ba \cdot b and b⋅cb \cdot c (conflicting on bb) leaves a⋅ca \cdot c, which is already the third term. The consensus of a⋅ba \cdot b and a⋅ca \cdot c (conflicting on aa) leaves b⋅cb \cdot c, also present. So with all three terms present, any one can be eliminated as the consensus of the other two: a⋅b+a⋅c=a⋅b+a⋅c+b⋅ca \cdot b + a \cdot c = a \cdot b + a \cdot c + b \cdot c, but equally b⋅c+a⋅c=b⋅c+a⋅c+a⋅bb \cdot c + a \cdot c = b \cdot c + a \cdot c + a \cdot b. The three-term expression reduces to any two of the three.

In general, when multiple consensus terms exist, eliminating them iteratively reduces the expression to a form that cannot be further simplified by consensus alone. The order of elimination can affect the intermediate expression but the final minimised form is unique for a given function (up to K-map grouping choices).

Connection to Hazard Removal

The consensus theorem is not just a simplification tool. In the context of hazards (see Static and Dynamic Hazards), the consensus term corresponds to a redundant prime implicant that, when added to a circuit, eliminates static hazards. For the function f=a⋅bˉ+aˉ⋅cf = a \cdot \bar{b} + \bar{a} \cdot c, when b=c=1b = c = 1, a change in aa causes a momentary glitch. Adding the consensus term b⋅cb \cdot c gives f=a⋅bˉ+aˉ⋅c+b⋅cf = a \cdot \bar{b} + \bar{a} \cdot c + b \cdot c, which is logically identical but hazard-free. The consensus theorem guarantees that adding b⋅cb \cdot c does not change the Boolean function; it only adds a physical gate that holds the output steady during the transition.