A function $f\colon \{0,1\}^n \to \{0,1\}$ is a polymorphism of a predicate $P \subseteq \{0,1\}^m$ if whenever $x^{(1)},\dots,x^{(n)} \in P$, then also $f(x^{(1)},\dots,x^{(n)}) = (f(x^{(1)}_1,\dots,x^{(n)}_1),\dots,f(x^{(1)}_m,\dots,x^{(n)}_m)) \in P$. Predicates and their polymorphisms are classified by Post’s lattice.
A special case of this framework is the truth-functional setting, in which $P = \{(x,y) : y = g(x)\}$, for some function $g\colon \{0,1\}^{m-1} \to \{0,1\}$. Stated differently (and switching from $m-1$ to $m$), a function $f$ is a polymorphism of $g$ if for every $n \times m$ array filled with $0,1$ entries, the following two operations always give the same result:
It is known that the only “polymorphic pairs” $f,g$ are ANDs, ORs and XORs. A similar result holds if we allow $f$ to depend on the column, that is, there are $m+1$ many different $f$’s (the extra one appears when first computing $g$ on each row). In symbols, we can express this as $f_0 \circ g = g \circ (f_1,\dots,f_m)$.
In this work, we solve the more general problem in which both $f$ depends on the column and $g$ depends on the row: $f_0 \circ (g_1,\dots,g_n) = g_0 \circ (f_1,\dots,f_m)$. The space of solutions becomes substantially more complicated. To prove the characterization, we think of both sides of the identity as functions from $\{0,1\}^{nm} \to \{0,1\}$, and consider their Fourier expansions, which must coincide.