10 votos

Búsqueda de expresiones mínimas o canónicas para tablas de verdad booleanas

No se trata de una pregunta urgente, sino de algo por lo que siento curiosidad desde hace tiempo.

Consideremos una función booleana en n entradas: la tabla de verdad de esta función tiene 2 n filas.

Estas funciones se utilizan, por ejemplo, en gráficos por ordenador: las llamadas ROP3 (operaciones raster ternarias) toman tres entradas: D (destino), S (fuente) y M (máscara). Los tres son planos de bits, y el resultado se devuelve al plano de bits de destino. Ahora bien, esto sólo es realmente aplicable a las pantallas de 2 colores (blanco y negro) o de 8 colores (considerando los planos rojo, verde y azul por separado). A un ROP3 dado se le asigna un código de 0 a 255, un número que representa el patrón del bit de salida, por las filas de la tabla. Del mismo modo, los ROP2 tienen un valor de 0 a 15. Las ROPs también pueden recibir nombres, especialmente cuando la conectiva lógica de la que la tabla de verdad es una extensión es simple, como AND, XOR o SRC (fuente).

Se puede encontrar una expresión para cualquier tabla de verdad (o ROP) en términos de un conjunto expresivamente completo de conectivas (normalmente unarias o binarias, a veces también nulas). [Por ejemplo, los conjuntos {NOT, AND}, {NOT, OR}, {NAND} son expresivamente completos.

Un conjunto expresivamente completo (redundante) de uso común es {NOT, AND, OR}. Dos conjuntos canónicos especialmente comunes de expresiones sobre este conjunto son la forma normal conjuntiva (CNF) y la forma normal disyuntiva (DNF). Ambos son bastante prolijos.

También existe una noción de expresión mínima sobre un conjunto de conectivas, definida de diversas maneras. El recuento puede ser de instancias de una variable o de conectivas. Puede haber un límite a la profundidad o amplitud de la expresión (quizás).

Las conectivas booleanas pueden extenderse al conjunto R [0,1], para la lógica difusa; es decir, las conectivas son sobre R [0,1], siendo la restricción a {0,1} la función booleana habitual. Hay muchas maneras de hacerlo; es posible conservar algunas pero no todas las propiedades habituales (por ejemplo, asociatividad, idempotencia) de las conectivas. [NOT(x) se interpretaría normalmente como (1-x); AND(x,y) podría ser (x*y) o (min{x,y}), o de muchas otras maneras].

Estas extensiones pueden utilizarse, por ejemplo, para dar un significado a una ROP3 aplicada a imágenes monocromas de 256 niveles (para combinar o "mezclar" dichas imágenes) o a planos de imágenes a todo color. (Necesariamente, debe producirse algún truncamiento o 'cuantificación').

Sin embargo, dos expresiones que tengan la misma función sobre {0,1} tendrán generalmente funciones diferentes sobre R [0,1]. En lugar de elegir alguna expresión arbitraria, sería una ventaja elegir alguna expresión canónica o mínima.

¿Cuánto se sabe sobre este campo? ¿Existen buenas referencias en línea? Estoy especialmente interesado en definiciones, teoremas y algoritmos para la generación de expresiones mínimas o canónicas.

9voto

Jake McGraw Puntos 16515

Si jugar un poco, probablemente llegado a la misma conclusión que yo hice hace mucho tiempo, a saber, que, efectivamente, hay una verdadera extensión de funciones booleanas $\{0,1\}^n\to \{0,1\}$ a funciones de $[0,1]^n\to [0,1]$. Hay muchas sencillo caracterizaciones de esta extensión (lo cual nos indica que es importante). El más intuitivo para mí es relajarse en la lógica booleana a la probabilidad: tomar de una función booleana de un cierto número de variables, como $$y \text{ or not } (x \text{ and } z).$$ Now suppose we flip possibly biased coins independently to determine the truth values of $x,y,z$. The probability of $x$ being true is $p$, the probability of $s$ being true is $p$, and the probability of $z$ being true is $r$, so we have $0\leq p,q,r \leq 1$. Now consider our expression $y \text{ o } (x \text{ y } z)$: what is the probability that this will be true? It's some function of $p,q,r$ that takes values in $[0,1]$. If you work it out (which is straightforward), you'll find that the function is $$f(p,q,r) = 1-p(1-q)r.$$ You should check that when you restrict $p,q,r$ to be 0 or 1, this agrees with the original boolean function when the corresponding boolean variables are respectively false or true. One of the other main characterizations of this extension is as the unique multiaffine interpolating polynomial. ("Multiaffine" means that if you set all but one of the variables, say $p$, to constant, then you get a linear function $ap + b$ of $p$ for some constants $$ and $b$ (que dependen de las constantes que eligió para el resto de variables)).

Por desgracia, la informática esta extensión para una función booleana de muchas variables es fácilmente visto para ser #P-duro, lo que significa que es uno de los duros problemas que la gente odia porque no se pueden resolver de forma eficiente, pero no puede probar que ellos no pueden. (De hecho, cualquier fácilmente computable representación canónica (que se extiende a [0,1] o de otra manera) aplicable a todas las funciones booleanas podría probar que P=NP, por lo que su problema como se dijo es bastante desesperante. Este particular canónica de la extensión pasa a ser lo suficientemente potente como para ser #P-duro.) Sin embargo, si sus expresiones booleanas tienen sólo unas pocas variables, entonces hay una muy fácil algoritmo recursivo para calcular la extensión. Aquí está: $$f(p\_1,p\_2,\ldots,p\_n) = p\_1f(1,p\_2,\ldots,p\_n) + (1-p\_1)f(0,p\_2,\ldots,p\_n).$$ $f(1,p\_2,\ldots,p\_n)$ and $f(0,p\_2,\ldots,p\_n)$ are respectively the extensions in which you set the first variable to true and to false, which you can compute recursively. The basis case is when $n=0$, en el que caso de que usted tiene un nullary función 0 o 1.

[Edit: Si su función booleana es en realidad representada, literalmente, como una tabla de verdad, entonces no hay ninguna dificultad en calcular sus canónica de extensión a valores reales; de hecho, el algoritmo recursivo ha dado por encima de $O(N)$ complejidad, donde $N=2^n$ es el número de filas en la tabla de verdad. Por supuesto, la producción de una tabla de verdad para una función de varias variables es el tiempo y el espacio-tiempo, pero si ya tienes la tabla de verdad, entonces usted ya ha comprometido con ella.]

De hecho, hay un caso especial en que la extensión es fácil de calcular, para cualquier número de variables, que puede o no puede ayudar a usted: si usted puede escribir su expresión booleana para cada variable aparece sólo una vez, entonces usted puede calcular la extensión en el tiempo lineal. Utiliza las reglas de transformación

  • $(\text{not } A)\to (1-A)$,
  • $(A \text{ and } B)\to (AB)$,
  • $(A \text{ or } B)\to (A + B - AB)$

y simplemente recurse en la expresión. Mi ejemplo $y \text{ or not } (x \text{ and } z)$ tiene esta propiedad, por lo que vamos a utilizar este procedimiento:

$$ y \text{ or } (\text {not } (x \text{ and } z)) \to y + (1-xz) - y(1-xz), $$ which you can see is the same as $1-x(1-y), z$. This, very unfortunately, fails miserably when you have multiple occurrences of any variable (just try $x \text{ y } x$). However, the situation is just slightly more general than may appear initially: note that I gave transformation rules for AND, OR, and NOT. I did that because it's often convenient to express boolean expressions in terms of those three. You can in fact formulate a corresponding transformation rule for the boolean function $f$ of your choice (which is identical to the canonical extension of $f$: e. g., $1-x$ is the canonical extension of $\text{no }x$ and $x + y - xy$ is the canonical extension of $x\text{ o }y$), and you can apply that transformation to $f(A\_1,\ldots,Un\_n)$ provided that no variable appears in more than one subexpression $\_1,\ldots,\_n$. Por ejemplo, en exclusiva o podría ser una útil función booleana, así que usted puede utilizar la regla de transformación

  • $(A \text{ xor } B)\to A + B - 2AB$.

De esta manera, se puede construir una biblioteca de su favorito de funciones booleanas y sus canónica de extensiones, que se puede utilizar como reglas de transformación cada vez que usted aplica las funciones para las subexpresiones con distintos conjuntos de variables.

Por último, permítanme darles una "diversión" para calcular el canónica de extensión según las reglas de transformación que es tremendamente útil cuando computación canónica de la extensión de la mano: resulta que se puede aplicar a cualquier canónica de la transformación de la regla de forma arbitraria, incluso para los argumentos con los no-distintos conjuntos de variables, expanda todo en una suma de monomials, y el uso de la transformación adicional

  • $(x^2) \to x$.

como tantas veces como puedas hasta que te deja con una multiaffine polinomio. (De hecho, usted es libre de aplicar la transformación, incluso sin la expansión de su polinomio: e. g., $(1 -xy)^2 \to (1-xy)$ es perfectamente válido.) Para ilustrar esto, vamos a aplicar eso a la exclusiva-o de la función:

$$ x \text{ xor } y = (x \text{ or } y) \text{ and not } (x \text{ and } y).$$

Si nos cegamos aplicar las transformaciones Y, O y NO, obtenemos:

$$ x \text{ xor } y \to (x + y - xy)(1-xy). $$ Expandir en monomials: $$ (x + y - xy)(1-xy) = x + y - xy - x^2y - xy^2 + x^2y^2.$$Now replace $A^2$ by $$ siempre que sea posible: $$x + y - xy - x^2y - xy^2 + x^2y^2 \to x + y - xy - xy - xy + xy = x + y - 2xy,$ $ , que está de acuerdo con mi canónica de la expresión/transformación de la regla de XOR se indicó anteriormente.

7voto

Michiel de Mare Puntos 15888

1voto

Jose Brox Puntos 969

Para cualquier información, usted debe buscar en cualquier libro sobre Diseño Electrónico de la Tecnología. Cuando se fabrica un microchip, usted quiere que sea lo más simple posible, mientras que la integración de todas las funciones que usted está interesado en. Por lo tanto, usted desea reducir al mínimo el número de transistores que se use (es decir, para minimizar el número de puertas lógicas que implementar sus funciones), que llega a desarrollar técnicas generales para lograr esto.

Aunque no he leído, creo que puede darle una oportunidad a la siguiente libro:

"Principios de Diseño de CMOS VLSI: Una Perspectiva de Sistema (2ª edición)", N. WESTE y K. ESHRAGHIAN, Addison-Wesley, 1993.

0voto

Jon Awbrey Puntos 357

Dudo si hay algo como la mejor de todos los posibles lenguajes formales de expresiones booleanas, pero hay muchas maneras de llegar hasta con cálculos que son más eficientes que la mayoría de los actualmente en uso común.

Usted puede disfrutar de la exploración de las posibilidades de uso de un mínimo de negación de los operadores como la base fundamental de las primitivas de un cálculo proposicional.

Un cálculo que es muy eficiente tanto desde conceptual y computacional de punto de vista se basa en dos tipos de conectivos lógicos, tanto de la variable $k$-ary alcance. Las fórmulas de este cálculo analizar en una familia de gráfico teórico-estructuras de datos cuyo subyacente gráficos son llamados "pintado y con raíces de cactus" (Parques). De ahí el nombre de "cactus language" para este estilo de cálculo proposicional, ya sea en su recorrido cadena o análisis gráfico de las formas.

  • El primer tipo de expresión proposicional es un entre paréntesis secuencia de expresiones proposicionales, escrito como $⦗ ~ e_1 ﹐ e_2 ﹐ \ldots ﹐ e_{k-1} ﹐ e_k ~ ⦘$ y leer a decir que exactamente una de las proposiciones $e_1, e_2, \ldots, e_{k-1}, e_k$ es falso, en otras palabras, que a su mínima negación es verdadera. Una cláusula de esta forma los mapas en un parque estructura denominada lóbulo, en este caso, uno que está pintado con los colores de la $e_1, e_2, \ldots, e_{k-1}, e_k$ como se muestra a continuación.

    Cactus Graph Lobe Connective

  • El segundo tipo de expresión proposicional es una secuencia concatenada de expresiones proposicionales, escrito como $e_1 ~ e_2 ~ \ldots ~ e_{k-1} ~ e_k$ y leer a decir que todas las proposiciones $e_1, e_2, \ldots, e_{k-1}, e_k$ son verdaderas, en otras palabras, que su conjunción lógica es verdadera. Una cláusula de esta forma los mapas en un parque estructura de un nodo, en este caso, uno que está pintado con los colores de la $e_1, e_2, \ldots, e_{k-1}, e_k$ como se muestra a continuación.

    Cactus Graph Node Connective

Todas las otras conectivas proposicionales pueden ser obtenidos a través de la combinación de estas dos formas. Estrictamente hablando, los números entre paréntesis forma es suficiente para definir la forma concatenada, hacer el último formalmente prescindible, pero es conveniente mantener como una manera concisa de expresar más complicadas combinaciones de números entre paréntesis formas. Mientras se trabaja con expresiones exclusivamente en el cálculo proposicional, lo más fácil es utilizar texto entre paréntesis para los conectivos lógicos. En contextos donde ordinario paréntesis son necesarios para otros fines alternativo de los tipos de letra — por ejemplo, $⦗ ~ ﹐ ~ ⦘$ — puede ser utilizado para los operadores lógicos.

Ver enlaces arriba para más detalles.

0voto

Jon Awbrey Puntos 357

Por medio de la clarificación de la cuestión hasta el punto donde se podría obtener una respuesta definitiva, o al menos una paramétrico conjunto de respuestas, creo que sería de gran ayuda para trazar la distinción entre el lenguaje de la fija y el lenguaje de la variable de los lados del problema un poco más en picado. Rhubbarb aludido a esta distinción en hacer la pregunta, pero podría ser formalizado aún más por la introducción de un parámetro de $L$ para el cálculo o lenguaje formal que se utiliza para describir el objeto de dominio $O$, que supongo que es algo así como una unión sobre los conjuntos de funciones booleanas de los tipos de $\mathbb{B}^k \to \mathbb{B}$ donde $\mathbb{B} = \lbrace 0, 1 \rbrace$ $k$ es un entero positivo.

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X