Shannon's Expansion is a method by which a boolean function can be represented by the sum of two sub-functions of the original.
Claude Shannon was the creator of Shannon's expansion, and is credited for numerous other achievements in the field of
Boolean algebra. Rather than explain it
pedantically, here is an example:
Take this as our function:
f = xyz+ xy'z + x'y'z + x'yz + x'y'z'
Now, notice that you can re-write the function in terms of any two variables - namely, a variable and its compliment.
Observe:
f = x'gx' + xgx
Now, to make the final expression equivalent to our composition of functions, simply apply the distribuive theorem to the function about x:
f = x'(y'z + yz + y'z') + x(yz + y'z)
And there we have it! We have just expanded the function f about the variable x. Now, you might be thinking to yourself "What if there were no x variable in one or more of the terms? Very good question, and one whose solution is not always intuitive.
Remember, that in Boolean algebra, you can AND any literal or term with 1, and still achieve the same truth value. With that in mind, let's look at this function:
f = yz + xyz' + x'y'z
If we desire to expand around the variable x, we simply don't have enough information in the first term to accomplish this task. So, what do we do? Give up? No! Remember what was said above: AND the literal with 1, or, in this case (x' + x).
f = yz(x' + x) + xyz' + x'y'z
Expand:
f = x'yz + xyz + xyz' + x'y'z
This function contains the variable about which we want to expand the expression, so now we should have no problem performing the expansion:
f = x'gx' + xgx
f = x'(yz + y'z) = x(yz + yz')
Our expansion is complete!
Of course, you can perform Shannon's Expansion about any variable you desire, so long as you can provide for that variable in the expression without changing the truth value of the expression. Also, you can perform multiple expansions of a single function (e.g. about x, then about y) or, you can even perform the expansion about many variables at once (e.g. about xy). The result is a functionally equivalent expression for the variables involved.
You might be asking "Why would I want to make an expression larger? I thought boolean algebra was all about minimizing functions?". Consider a logic device called a multiplexer. Multiplexers take n select inputs, and 2n data inputs. Once you expand any boolean function about any number of variables, you can use the variables that the function was expanded about as the select inputs, and their respective composed functions as the corresponding data inputs.
There, now go forth with this information and build better communication devices, computers, and toaster ovens. Yes, now!