# Shannon-Zerlegung

Die Shannon-Zerlegung oder Shannon-Expansion (benannt nach Claude Elwood Shannon) stellt eine Möglichkeit dar, boolesche Funktionen mithilfe ihrer sogenannten Kofaktoren darzustellen. Die mathematische Aussage über diese Zerlegung wird auch als Entwicklungssatz von Shannon bezeichnet. Obwohl der Satz nach Shannon benannt ist, der ihn erstmals 1949 verwendete, wurde er bereits etwa hundert Jahre zuvor von George Boole aufgestellt.

## Aussage

Eine beliebige boolesche Funktion $F(x_{1},x_{2},\ldots ,x_{n})$ kann folgendermaßen zerlegt werden:
    $F(x_{1},x_{2},\ldots ,x_{n})=x_{i}F(x_{1},\ldots ,x_{i-1},1,x_{i+1},\ldots ,x_{n})\vee {\overline {x}}_{i}F(x_{1},\ldots ,x_{i-1},0,x_{i+1},\ldots ,x_{n})$
oder kürzer unter Verwendung der sogenannten Kofaktoren:
    $F(x_{1},x_{2},\ldots ,x_{n})=x_{i}F_{x_{i}}\vee {\overline {x}}_{i}F_{{\overline {x}}_{i}}$
Die Kofaktoren $F_{x_{i}}$ und $F_{{\overline {x}}_{i}}$ werden dabei durch partielle Auswertung von $F(x_{1},\ldots ,x_{n})$, d. h. Einsetzen der Variable $x_{i}$ definiert:
    ${\begin{aligned}F_{x_{i}}&\equiv F(x_{1},\ldots ,x_{i-1},1,x_{i+1},\ldots ,x_{n})\\[3pt]F_{{\overline {x}}_{i}}&\equiv F(x_{1},\ldots ,x_{i-1},0,x_{i+1},\ldots ,x_{n})\\\end{aligned}}$
Diese Zerlegung wird auch als If-then-else-Normalform (INF) bezeichnet. Man sagt auch, die Funktion $f$ wird „nach $x_{i}$ entwickelt“. Wiederholt man die Anwendung des Satzes für eine beliebige Funktion $f$ auf alle ihre n Parameter, so gelangt man zu einer Darstellung der Funktion, welche ausschließlich die Operatoren ∧, ∨ und ¬ verwendet. Die rekursive Anwendung der Shannon-Zerlegung liefert also einen Beweis, dass sich jede boolesche Funktion mittels der Operatoren ∧, ∨ und ¬ ausdrücken lässt.
Diese Zerlegung führte unter anderem zur Entwicklung von binären Entscheidungsdiagrammen und damit zu einer der Möglichkeiten der Bearbeitung des Erfüllbarkeitsproblems der Aussagenlogik. Darüber hinaus kann der Entwicklungssatz etwa zur Herleitung klammerfreier Ausdrücke verwendet werden.

## Beispiel

Gegeben sei die Boolesche Funktion $y=f(x_{1},x_{2},x_{3})=x_{1}x_{2}{\overline {x_{3}}}\vee {\overline {x_{1}}}x_{2}\vee {\overline {x_{2}}}x_{3}$.
Diese soll zunächst nach $x_{1}$, dann nach $x_{2}$ und schließlich nach $x_{3}$ entwickelt werden:
| $=x_{1}[x_{2}{\overline {x_{3}}}\vee {\overline {x_{2}}}x_{3}]\vee {\overline {x_{1}}}[x_{2}\vee {\overline {x_{2}}}x_{3}]$ | (Entwicklung nach $x_{1}$) |
| $=x_{1}[x_{2}({\overline {x_{3}}})\vee {\overline {x_{2}}}(x_{3})]\vee {\overline {x_{1}}}[x_{2}(1)\vee {\overline {x_{2}}}(x_{3})]$ | (Entwicklung nach $x_{2}$) |
| $=x_{1}[x_{2}({\overline {x_{3}}})\vee {\overline {x_{2}}}(x_{3})]\vee {\overline {x_{1}}}[x_{2}(x_{3}\vee {\overline {x_{3}}})\vee {\overline {x_{2}}}(x_{3})]$ | (Entwicklung nach $x_{3}$) |
| $=x_{1}x_{2}{\overline {x_{3}}}\vee x_{1}{\overline {x_{2}}}x_{3}\vee {\overline {x_{1}}}x_{2}x_{3}\vee {\overline {x_{1}}}x_{2}{\overline {x_{3}}}\vee {\overline {x_{1}}}{\overline {x_{2}}}x_{3}$ | (Anwendung des Distributivgesetzes) |

## Darstellung als Diagramm

Man kann die Umformung auch als Multiplexer aus einem Nicht-Gatter, zwei UND sowie einem ODER-Gatter verstehen. Das Signal, nach dem die Zerlegung durchgeführt wird, ist das Steuersignal für den Multiplexer. Gemultiplext werden die beiden Ausgänge der gedoppelten Logik, wobei die eine Logik an dem entwickelten Eingang mit einer „1“ beaufschlagt wird, während die andere mit einer „0“ beaufschlagt wird. Als Diagramm dargestellt, sieht dies folgendermaßen aus: