Skip to content
Part IA Michaelmas Term

Consensus Theorem

Statement

The consensus theorem in its most common form states:

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

The term bcb \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 aba \cdot b and aˉc\bar{a} \cdot c: strip aa from aba \cdot b to get bb, strip aˉ\bar{a} from aˉc\bar{a} \cdot c to get cc, and AND them to get bcb \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:

ab+aˉc+bc=ab+aˉc+bc(a+aˉ)=ab+aˉc+abc+aˉbc=(ab+abc)+(aˉc+aˉbc)=ab(1+c)+aˉc(1+b)=ab1+aˉc1=ab+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 bcb \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:

abcaba \cdot baˉc\bar{a} \cdot cbcb \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 bcb \cdot c is 1 only in rows where either aba \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=ab+aˉc+bcf = 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:

abc000111100011010011\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 aba \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 bcb \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 aba \cdot b respectively. So bcb \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 aba \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: bcb \cdot c.

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

  • Conflicting variable: xx (uncomplemented vs complemented)
  • Remaining literals: yˉz\bar{y} \cdot z and wzw \cdot z
  • Consensus term: yˉzw\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:

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

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

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

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

Looking for other consensus terms: abˉ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 abˉa \cdot \bar{b} and aˉc\bar{a} \cdot c, and can be removed.

Final expression: ab+aˉc+abˉ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 ab+ac+aˉbca \cdot b + a \cdot c + \bar{a} \cdot b \cdot c.

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

ab+ac+aˉbc+bca \cdot b + a \cdot c + \bar{a} \cdot b \cdot c + b \cdot c =ab+ac+bc(aˉ+1)= a \cdot b + a \cdot c + b \cdot c \cdot (\bar{a} + 1) =ab+ac+bc= a \cdot b + a \cdot c + b \cdot c =a(b+c)+bc= a \cdot (b + c) + b \cdot c

(Better example with a real simplification):

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

Check consensus: abˉ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). abˉa \cdot \bar{b} and acˉa \cdot \bar{c} have no conflicting variable (both start with aa). aˉb\bar{a} \cdot b and acˉa \cdot \bar{c} have aa conflicting, remaining bb and cˉ\bar{c}, consensus bcˉb \cdot \bar{c}. Add bcˉb \cdot \bar{c}:

abˉ+aˉb+acˉ+bcˉa \cdot \bar{b} + \bar{a} \cdot b + a \cdot \bar{c} + b \cdot \bar{c}

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

=abˉ+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ˉ+acˉ+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ˉ+acˉ\bar{f} = \bar{a} \cdot \bar{b} + a \cdot \bar{c}

Take the complement again:

f=aˉbˉ+acˉf = \overline{\bar{a} \cdot \bar{b} + a \cdot \bar{c}} f=aˉbˉacˉ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:

ab+bc+aca \cdot b + b \cdot c + a \cdot c

Here the consensus of aba \cdot b and bcb \cdot c (conflicting on bb) leaves aca \cdot c, which is already the third term. The consensus of aba \cdot b and aca \cdot c (conflicting on aa) leaves bcb \cdot c, also present. So with all three terms present, any one can be eliminated as the consensus of the other two: ab+ac=ab+ac+bca \cdot b + a \cdot c = a \cdot b + a \cdot c + b \cdot c, but equally bc+ac=bc+ac+abb \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=abˉ+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 bcb \cdot c gives f=abˉ+aˉc+bcf = a \cdot \bar{b} + \bar{a} \cdot c + b \cdot c, which is logically identical but hazard-free. The consensus theorem guarantees that adding bcb \cdot c does not change the Boolean function; it only adds a physical gate that holds the output steady during the transition.