Complejidad de convertir un circuito booleano en una fórmula booleana


10

Dado un circuito booleano en variables (que usa solo compuertas NOT, AND y OR), ¿cuál es la forma más eficiente de extraer la fórmula booleana representada por el circuito? ¿Existe un algoritmo polytime para este problema?nCn


¿Qué tipo de puertas tiene el circuito?
— Lev Reyzin

1
¿Qué restricciones en fan-in o fan-out? Si es solo un despliegue único, es trivial: el circuito en sí mismo es esencialmente un AST para la fórmula.
— Mark Reitblatt

1
Fan-in limitado para ser general. Pero para ser precisos, digamos que AND y OR tienen fan-in 2. En muchas referencias en la literatura, encuentro que un circuito y fórmulas se usan indistintamente, pero quiero saber si convertir un circuito en una fórmula es fácil problema.
— Nikhil

66
En general, se esperaría que cualquier fórmula equivalente pudiera tener un tamaño exponencial incluso para un circuito pequeño.
— Kristoffer Arnsfelt Hansen

44
Las fórmulas de tamaño polinómico son equivalentes a los circuitos . No se sabe que los circuitos de polisización ( P / p o l y ) sean equivalentes a N C 1 . Las fórmulas y los circuitos se usan indistintamente cuando la profundidad del circuito está limitada. NC1 P/polyNC1
— Kaveh

Respuestas:


8

Si entiendo su pregunta correctamente, diría que podría usar la reducción estándar de CIRCUIT-SAT a SAT: represente cada puerta como una nueva variable, y luego represente todo el circuito en forma CNF, con cada cláusula que tiene la forma , donde v es la nueva variable, y la fórmula para la puerta está dada por ϕ , usando las variables para otras puertas para representar las entradas. Esto puede hacerse mediante un recorrido simple (en tiempo lineal, que es claramente óptimo).(v↔ϕ)vϕ

Por ejemplo, si tiene tres entradas, , x 2 y x 3 , con puertas AND que unen x 1 y x 2 , así como x 2 y x 3 , y una puerta OR que une sus salidas, puede introducir tres variables para representar las puertas ( v 1 , v 2 y v 3 , respectivamente) y reescribir la fórmula a ( v 1 ↔ ( x 1 ∧ x 2 ) ) ∧x1x2x3x1x2x2x3v1v2v3Tenga en cuenta que la variable de salida se incluye explícitamente.

(v1↔(x1∧x2))∧(v2↔(x2∧x3))∧(v3↔(v1∨v2))∧v3.

Introducción a los algoritmos por Cormen et al. explica esto en detalle, en el capítulo sobre NP-Completeness.


¿CIRCUIT-SAT no utiliza puertas de abanico 1?
— Mark Reitblatt

1
Claro, pero hasta donde puedo ver, eso no afecta la reducción / transformación. La idea de representar cada salida como una nueva variable significa que puede reutilizar cada salida como entrada varias veces (correspondiente a un abanico arbitrariamente grande). En otras palabras, la solución dada en esta respuesta debería funcionar para circuitos arbitrarios.
— Magnus Lie Hetland

3
Supongo que esto no es lo que se pide. Creo que lo que se quiere es hacer una fórmula en el mismo conjunto de variables que el circuito.
— Kristoffer Arnsfelt Hansen

1
Hm. Sí, probablemente tengas razón. Introducir las nuevas variables tiene sentido en el caso de CIRCUIT-SAT a CNF-SAT, pero no en un entorno más general, estoy de acuerdo.
— Magnus Lie Hetland

1
Cx1,x2,…,xnϕ(x1,x2,…,xn)
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.