Estoy tratando de demostrar que/se derivan de la equivalencia de la siguiente fórmula:
$$ x*y = (x \de la tierra y) * (x \lor y) + (x \de la tierra \neg y) * (\neg x \de la tierra y) $$
mientras que $(\land, \lor, \neg)$ corresponden a operaciones bit a bit sobre el álgebra Booleana ( $B^n, \land , \lor, \neg)$ , y las operaciones aritméticas son en números enteros modulares anillo de $Z/(2^n)$.
Reorganización mediante el uso de DeMorgan reglas me da: $x * (x \lor y) \land y * (x \lor y)$. Sin embargo, no puedo factor $(x \lor y)$ así que estoy atascado en ese punto. El problema parece ser, que todo esto es un no-lineal de la expresión.
Me encontré con esta identidad en este papel y se preguntaba cómo se podría derivar/generar tales identidades. Identidades similares se pueden encontrar en los Hackers Delicia capítulo 2 (y son mucho más simples, es decir, las combinaciones lineales de las 16 funciones booleanas).
Es porque el último término siempre es igual a cero? ¿Cómo se podía demostrar que? El último término no es siempre cero (por ejemplo,$1*524288$).
Ejemplo de $Z/2^{32}$
$$ 4 * 5 = (4 \de la tierra 5) * (4 \lor 5) + (4 \la tierra \lnot 5) * (\lnot 4 \de la tierra 5) \equiv (4) * (5) + (4 \la tierra 4294967290) * (4294967291 \de la tierra 5) \equiv (4) * (5) + (0) * (0) \equiv 20 $$
Actualización:
Vamos a dividir la fórmula en las dos partes para facilitar la referencia: $$ t0 = (x \de la tierra y) * (x \lor y) \\ t1 = (x \de la tierra \neg y) * (\neg x \de la tierra y) $$
He usado un SMT solver (z3) demostrar que para todos los valores de $x,y$ $t0$ o $t1$$\neq 0$, pero no ambos al mismo tiempo.
Contador de ejemplo: $x = 1431655427, y = 427$