Tenemos n variables x1,...,xn m polinomios f1,...,fm.
El grado máximo de cada variable xi en cada polinomio fj1.
Además, cada variable está presente en la mayoría de los dos de los polinomios y cada polinomio contiene un máximo de 3 de las variables.
Definimos F como el producto de todos los polinomios: F=f1∗f2∗...∗fn .
Nos interesa conocer si un determinado plazo (x1x2...xn) aparece en F o no. En otras palabras, si el coeficiente de x1x2...xn sería distinto de cero si estamos totalmente de expandir F. Es allí una manera eficiente para comprobar eso?
He aquí un ejemplo:
f1=(5x+3xy−z)
f2=(−xy+2y)
f3=(z−3)
F=f1f2f3=(5x+3xy−z)(−xy+2y)(z−3)
F=−30xy+15x2y−18xy2+9x2y2+6yz+7xyz−5x2yz+6xy2z−3x2y2z−2yz2+xyz2
Estamos interesados en saber si es o no el coeficiente de xyz es cero. En el ejemplo anterior, no es cero y es igual a 7. Es allí una manera eficiente de hacerlo (al menos para algunos no trivial casos especiales) que es aplicable a los casos con, por ejemplo, n=300 variables e m=200 polinomios.
Fondo: Aquí hay alguna información de fondo acerca de los orígenes de este problema para el lector interesado:
Dada cualquier función booleana en 3 variables, podemos representar con un vector binario en una de las 8 dimensiones del espacio con entidades igual a 1 si la función devuelve TRUE para que la combinación de entradas. (es decir, estándar de la suma de los productos de la forma)
Se podría utilizar la siguiente matriz lineal del mapa el espacio de las funciones booleanas a un nuevo espacio que puede ser representada con polinomios en 3 variables:
La anterior matriz se define una transformación reversible (booleano de dominio para el polinomio de dominio) con varias características muy interesantes, algunos de los enumerados a continuación:
i) de la Fila X sólo depende de x, y es 1 en columnas con x −1 en columnas con x′ (complemento de x).
ii) de la Fila XY es el elemento por elemento producto de la fila X y la de la fila Y. (y sólo depende de XY, o más específicamente x⊕y).
iii) El producto interior de cada par de filas (o columnas) es cero (ortogonales).
iv) Todos los elementos son 1 y -1 (para normalizada w 1√2n −1√2n donde n # de variables)
v) de la Matriz es simétrica, por lo w′=w y para normalizada w, tenemos w−1=w. (La inversa de la transformación y el avance de transformación sólo se diferencian en un factor constante 12n).
vi) Cualquier función booleana de tres (o, en general,n) variables, podría ser representado por un vector binario u donde ui es 1 si y sólo si f es CIERTO para la correspondiente combinación de entradas.
vii) por otra parte, si tenemos dos funciones de f1 y f2, f12=f1∧f2 está representado por u12=u1∗u2 donde, ∗ es el elemento por elemento del producto. A continuación,v12=w.u12=w(u1∗u2). (no es igual a wu1∗wu2, sin embargo se puede realizar regular la multiplicación de polinomio de dominio sólo necesitará reemplazar cualquier x2 1 al final y será equivalente a ∧ booleanas de dominio. Tenga en cuenta que dado (iv), en la plaza de cualquier fila será igual a la fila 1)
viii) de la misma forma con tres funciones de f123=f1∧f2∧f3, tenemos u123=u1∗u2∗u3, v123=w(u1∗u2∗u3)
ix) Si multiplicamos F X en el polinomio de dominio, en booleana de dominio de todos los términos con x será multiplicado por el 1 y todos los términos con x′ será multiplicado por el −1.
x) F(X=0) en el polinomio de dominio da el número de soluciones de (1 elementos) en booleana de dominio. Del mismo modo, el coeficiente de X en el polinomio de dominio es el número de soluciones con x=TRUE menos el número de soluciones con x=FALSE. Del mismo modo que el coeficiente de XY es el número de soluciones con xy ponderado por la paridad (es decir, xy x′y′ soluciones son contados con signo positivo y xy′ x′y soluciones son contados con signo negativo). Esto también es consecuencia directa de la i y ii.
Hay alguna buena referencia para esta transformación? Es conocido por los nombres de lo que puedo ver? Todas las ideas para posibles aplicaciones? Mi motivación fue que el uso de estas bases ortogonales, uno podría simplificar algunos cálculos en la transformada de dominio (por ejemplo, desarrollar más rápido los algoritmos para la solución de SAT o simplificar circuitos lógicos utilizando algebraicas y no algebraicas métodos).
Para probar si un conjunto de ecuaciones booleanas son al mismo tiempo conste, se podría transformar a los polinomios, ampliar, sustituir todas las x2i 1 y comprobar si el resto es cero absoluto o no. Para hacerlo de manera más eficiente, se podría establecer xi a cero para eliminar algunos intermedio términos de la expansión.
Por ejemplo, supongamos xi sólo está presente en f1=axi+bf2=cxi+d, la expansión de xi y la eliminación de xi utilizando el método anterior sería el rendimiento:
F=f1f2f3...fm=(axi+b)(cxi+d)f3...fm=(acx2i+(bc+ad)xi+bd)f3...fm≡(ac+bd)f3...fm
Luego se puede continuar con la eliminación de las otras variables. Después de la eliminación de todas las variables, el resto se dará el número total de soluciones que satisfacen todas las ecuaciones simultáneamente. Es allí una manera eficiente para obtener la solución para algún subconjunto de los casos, sin la necesidad de exponencial cálculos ?