# Reed–Muller expansion

In Boolean logic, a Reed–Muller expansion (or Davio expansion) is a decomposition of a Boolean function.
For a Boolean function $f(x_{1},\ldots ,x_{n}):\mathbb {B} ^{n}\to \mathbb {B}$ we call
    ${\begin{aligned}f_{x_{i}}(x)&=f(x_{1},\ldots ,x_{i-1},1,x_{i+1},\ldots ,x_{n})\\f_{{\overline {x}}_{i}}(x)&=f(x_{1},\ldots ,x_{i-1},0,x_{i+1},\ldots ,x_{n})\end{aligned}}$
the positive and negative cofactors of $f$ with respect to $x_{i}$, and
    ${\begin{aligned}{\frac {\partial f}{\partial x_{i}}}&=f_{x_{i}}(x)\oplus f_{{\overline {x}}_{i}}(x)\end{aligned}}$
the boolean derivation of $f$ with respect to $x_{i}$, where ${\oplus }$ denotes the XOR operator.
Then we have for the Reed–Muller or positive Davio expansion:
    $f=f_{{\overline {x}}_{i}}\oplus x_{i}{\frac {\partial f}{\partial x_{i}}}.$

## Description

This equation is written in a way that it resembles a Taylor expansion of $f$ about $x_{i}=0$. There is a similar decomposition corresponding to an expansion about $x_{i}=1$ (negative Davio expansion):
    $f=f_{x_{i}}\oplus {\overline {x}}_{i}{\frac {\partial f}{\partial x_{i}}}.$
Repeated application of the Reed–Muller expansion results in an XOR polynomial in $x_{1},\ldots ,x_{n}$:
    $f=a_{1}\oplus a_{2}x_{1}\oplus a_{3}x_{2}\oplus a_{4}x_{1}x_{2}\oplus \ldots \oplus a_{2^{n}}x_{1}\cdots x_{n}$
This representation is unique and sometimes also called Reed–Muller expansion.
E.g. for $n=2$ the result would be
    $f(x_{1},x_{2})=f_{{\overline {x}}_{1}{\overline {x}}_{2}}\oplus {\frac {\partial f_{{\overline {x}}_{2}}}{\partial x_{1}}}x_{1}\oplus {\frac {\partial f_{{\overline {x}}_{1}}}{\partial x_{2}}}x_{2}\oplus {\frac {\partial ^{2}f}{\partial x_{1}\,\partial x_{2}}}x_{1}x_{2}$
where
    ${\partial ^{2}f \over \partial x_{1}\,\partial x_{2}}=f_{{\bar {x}}_{1}{\bar {x}}_{2}}\oplus f_{{\bar {x}}_{1}x_{2}}\oplus f_{x_{1}{\bar {x}}_{2}}\oplus f_{x_{1}x_{2}}.$
For $n=3$ the result would be
    $f(x_{1},x_{2},x_{3})=f_{{\bar {x}}_{1}{\bar {x}}_{2}{\bar {x}}_{3}}\oplus {\partial f_{{\bar {x}}_{2}{\bar {x}}_{3}} \over \partial x_{1}}x_{1}\oplus {\partial f_{{\bar {x}}_{1}{\bar {x}}_{3}} \over \partial x_{2}}x_{2}\oplus {\partial f_{{\bar {x}}_{1}{\bar {x}}_{2}} \over \partial x_{3}}x_{3}\oplus {\partial ^{2}f_{{\bar {x}}_{3}} \over \partial x_{1}\,\partial x_{2}}x_{1}x_{2}\oplus {\partial ^{2}f_{{\bar {x}}_{2}} \over \partial x_{1}\,\partial x_{3}}x_{1}x_{3}\oplus {\partial ^{2}f_{{\bar {x}}_{1}} \over \partial x_{2}\,\partial x_{3}}x_{2}x_{3}\oplus {\partial ^{3}f \over \partial x_{1}\,\partial x_{2}\,\partial x_{3}}x_{1}x_{2}x_{3}$
where
    ${\partial ^{3}f \over \partial x_{1}\,\partial x_{2}\,\partial x_{3}}=f_{{\bar {x}}_{1}{\bar {x}}_{2}{\bar {x}}_{3}}\oplus f_{{\bar {x}}_{1}{\bar {x}}_{2}x_{3}}\oplus f_{{\bar {x}}_{1}x_{2}{\bar {x}}_{3}}\oplus f_{{\bar {x}}_{1}x_{2}x_{3}}\oplus f_{x_{1}{\bar {x}}_{2}{\bar {x}}_{3}}\oplus f_{x_{1}{\bar {x}}_{2}x_{3}}\oplus f_{x_{1}x_{2}{\bar {x}}_{3}}\oplus f_{x_{1}x_{2}x_{3}}.$

## Geometric interpretation

This $n=3$ case can be given a cubical geometric interpretation (or a graph-theoretic interpretation) as follows: when moving along the edge from ${\bar {x}}_{1}{\bar {x}}_{2}{\bar {x}}_{3}$ to $x_{1}{\bar {x}}_{2}{\bar {x}}_{3}$, XOR up the functions of the two end-vertices of the edge in order to obtain the coefficient of $x_{1}$. To move from ${\bar {x}}_{1}{\bar {x}}_{2}{\bar {x}}_{3}$ to $x_{1}x_{2}{\bar {x}}_{3}$ there are two shortest paths: one is a two-edge path passing through $x_{1}{\bar {x}}_{2}{\bar {x}}_{3}$ and the other one a two-edge path passing through ${\bar {x}}_{1}x_{2}{\bar {x}}_{3}$. These two paths encompass four vertices of a square, and XORing up the functions of these four vertices yields the coefficient of $x_{1}x_{2}$. Finally, to move from ${\bar {x}}_{1}{\bar {x}}_{2}{\bar {x}}_{3}$ to $x_{1}x_{2}x_{3}$ there are six shortest paths which are three-edge paths, and these six paths encompass all the vertices of the cube, therefore the coefficient of $x_{1}x_{2}x_{3}$ can be obtained by XORing up the functions of all eight of the vertices. (The other, unmentioned coefficients can be obtained by symmetry.)

## Paths

The shortest paths all involve monotonic changes to the values of the variables, whereas non-shortest paths all involve non-monotonic changes of such variables; or, to put it another way, the shortest paths all have lengths equal to the Hamming distance between the starting and destination vertices. This means that it should be easy to generalize an algorithm for obtaining coefficients from a truth table by XORing up values of the function from appropriate rows of a truth table, even for hyperdimensional cases ($n=4$ and above). Between the starting and destination rows of a truth table, some variables have their values remaining fixed: find all the rows of the truth table such that those variables likewise remain fixed at those given values, then XOR up their functions and the result should be the coefficient for the monomial corresponding to the destination row. (In such monomial, include any variable whose value is 1 (at that row) and exclude any variable whose value is 0 (at that row), instead of including the negation of the variable whose value is 0, as in the minterm style.)
Similar to binary decision diagrams (BDDs), where nodes represent Shannon expansion with respect to the according variable, we can define a decision diagram based on the Reed–Muller expansion. These decision diagrams are called functional BDDs (FBDDs).

## Derivations

The Reed–Muller expansion can be derived from the XOR-form of the Shannon decomposition, using the identity ${\overline {x}}=1\oplus x$:
    ${\begin{aligned}f&=x_{i}f_{x_{i}}\oplus {\overline {x}}_{i}f_{{\overline {x}}_{i}}\\[5pt]&=x_{i}f_{x_{i}}\oplus (1\oplus x_{i})f_{{\overline {x}}_{i}}\\[5pt]&=x_{i}f_{x_{i}}\oplus f_{{\overline {x}}_{i}}\oplus x_{i}f_{{\overline {x}}_{i}}\\[5pt]&=f_{{\overline {x}}_{i}}\oplus x_{i}{\frac {\partial f}{\partial x_{i}}}.\end{aligned}}$
Derivation of the expansion for $n=2$:
    ${\begin{aligned}f&=f_{{\bar {x}}_{1}}\oplus x_{1}{\partial f \over \partial x_{1}}\\[5pt]&={\Bigf_{{\bar {x}}_{2}}\oplus x_{2}{\partial f \over \partial x_{2}}{\Big )}_{{\bar {x}}_{1}}\oplus x_{1}{\partial {\Bigf_{{\bar {x}}_{2}}\oplus x_{2}{\partial f \over \partial x_{2}}{\Big )} \over \partial x_{1}}\\[5pt]&=f_{{\bar {x}}_{1}{\bar {x}}_{2}}\oplus x_{2}{\partial f_{{\bar {x}}_{1}} \over \partial x_{2}}\oplus x_{1}{\Big{\partial f_{{\bar {x}}_{2}} \over \partial x_{1}}\oplus x_{2}{\partial ^{2}f \over \partial x_{1}\,\partial x_{2}}{\Big )}\\[5pt]&=f_{{\bar {x}}_{1}{\bar {x}}_{2}}\oplus x_{2}{\partial f_{{\bar {x}}_{1}} \over \partial x_{2}}\oplus x_{1}{\partial f_{{\bar {x}}_{2}} \over \partial x_{1}}\oplus x_{1}x_{2}{\partial ^{2}f \over \partial x_{1}\,\partial x_{2}}.\end{aligned}}$
Derivation of the second-order boolean derivative:
    ${\begin{aligned}{\partial ^{2}f \over \partial x_{1}\,\partial x_{2}}&={\partial \over \partial x_{1}}{\Big{\partial f \over \partial x_{2}}{\Big )}={\partial \over \partial x_{1}}(f_{{\bar {x}}_{2}}\oplus f_{x_{2}})\\[5pt]&=(f_{{\bar {x}}_{2}}\oplus f_{x_{2}})_{{\bar {x}}_{1}}\oplus (f_{{\bar {x}}_{2}}\oplus f_{x_{2}})_{x_{1}}\\[5pt]&=f_{{\bar {x}}_{1}{\bar {x}}_{2}}\oplus f_{{\bar {x}}_{1}x_{2}}\oplus f_{x_{1}{\bar {x}}_{2}}\oplus f_{x_{1}x_{2}}.\end{aligned}}$