Post on 11-May-2020
Resolviendo el problema diplomático con tablas de verdad
P Q R P v ¬Q Q v R ¬R v P F
1 1 1
1 1 0
1 0 1
1 0 0
0 1 1
0 1 0
0 0 1
0 0 0
Este método requiere comprobar una cantidad exponencial de combinaciones, no importa cual es la fórmula de entrada. Seguramente se puede ser más eficiente… 2
Conjunctive Normal Form
● Los algoritmos eficientes para LP toman fórmulas con un formato particular
● CNF: Conjunctive Normal Form (Forma Normal Conjunctiva)
● F = conjunción ( … /\ … /\ … ) de disyunciones (... v … v … )
● Esto significa:○ no hay conjunciones dentro de disyunciones○ las negaciones ocurren solamente sobre los símbolos
proposicionales
3
Literales y Cláusulas
● Un literal es un símbolo proposicional solo o negado.● Una disyunción de literales se puede ver como un conjunto
de literales llamado cláusula .● Entonces una fórmula en CNF se puede escribir como
conjunto de cláusulas.● La formula:
○ (l11 ∨ … ∨ l1n1 )∧(l21 ∨ … ∨ l2n2 )∧ … ∧(lk1 ∨ … v lknk )
● se puede ver como el conjunto:○ { {l11, … , l1n1} , {l21 , ..., l2n2} , ... , {lk1 , … , lknk} }.
4
Transformar cualquier fórmula en equivalente CNF
Aplicar tantas veces como se puede las reglas de reescritura siguientes:
● (¬(φ ∨ ψ)) ---> (¬φ ∧ ¬ψ)● (¬(φ ∧ ψ)) ---> (¬φ ∨ ¬ψ)● (¬¬φ) ---> φ● (φ ∨ (ψ ∧ θ)) ---> ((φ ∨ ψ) ∧ (φ ∨ θ))● ((ψ ∧ θ) ∨ φ) ---> ((φ ∨ ψ) ∧ (φ ∨ θ))
Una vez que la fórmula es una conjunción de disyunciones, pasarla a al representación por conjunto de cláusulas.
5
Ejemplo CNF 1
El problema diplomático:
1. (P ∨ ¬Q) ∧ (Q ∨ R) ∧ (¬R ∨ ¬P)2. {{P, ¬Q}, {Q, R}, {¬R, ¬P}}
6
Ejemplo CNF 2
1. ¬((p ∨ q) → (¬q → (p ∨ q)))
2. ¬(¬(p ∨ q) ∨ (¬¬q ∨ (p ∨ q)))
3. ¬(¬(p ∨ q) ∨ (q ∨ (p ∨ q)))
4. (¬¬(p ∨ q) ∧ ¬(q ∨ (p ∨ q)))
5. ((p ∨ q) ∧ ¬(q ∨ (p ∨ q)))
6. ((p ∨ q) ∧ (¬q ∧ ¬(p ∨ q)))
7. ((p ∨ q) ∧ (¬q ∧ (¬p ∧ ¬q)))
8. {{p, q}, {¬q}, {¬p}}7
Ejemplo CNF 3
1. (p ↔ q) ∨ r
2. ((p → q) ∧ (q → p)) ∨ r
3. ((¬p ∨ q) ∧ (¬q ∨ p)) ∨ r
4. (((¬p ∨ q) ∨ r ) ∧ ((¬q ∨ p) ∨ r ))
5. {{¬p, q, r }, {¬q, p, r }}
8
Definición de la relación “satisface” (⊨):
Notación: I ⊭ F si no es el caso que I ⊨ F.
Caso básico: I ⊨ p ssi I(p) = 1
Casos inductivos:
● I ⊨ ¬F ssi I ⊭ F● I ⊨ F1 ∧ F2 ssi I ⊨ F1 y I ⊨ F2● I ⊨ F1 v F2 ssi I ⊨ F1 o I ⊨ F2
Definición: Una fórmula φ es satisfactible si I ⊨ φ para alguna interpretación I.
Definición: Una fórmula φ es válida si I ⊨ φ para toda interpretación I.
Propiedad: F es válida ssi ¬F no es satisfactible.
→ si tenemos algoritmo para satisfactibilidad, sirve para validez.9
Conversión polinomial a CNF (1)
¡Las reglas de reescritura que vimos pueden generar fórmulas exponencialmente más grandes!
La culpa es de: (φ ∨ (ψ ∧ θ)) ---> ((φ ∨ ψ) ∧ (φ ∨ θ))
Consideramos:
φ = (p1 ∧ q1 ) ∨ (p2 ∧ q2 ) ∨ … ∨ (pn ∧ qn).
Obtendríamos 2n cláusulas
10
Conversión polinomial a CNF (2)
Se evita el problema introduciendo símbolos proposicionales nuevos.
Consideramos:
φ = (p1 ∧ q1 ) ∨ (p2 ∧ q2 ) ∨ … ∨ (pn ∧ qn).
Entonces definamos:
φ’ = (r1∨ … v rn ) ∧ (¬r1 ∨ p1 ) ∧ (¬r1 ∨ q1 ) ∧ …∧ (¬rn ∨ pn ) ∧ (¬rn ∨ qn )
Cualquier interpretación que satisfaga φ’ tiene que satisfacer uno de los símbolos ri . Entonces también satisface pi y qi , por lo cual φ también.
En cambio, si tenemos una interpretación para φ , satisface algún par pi y qi. La extendemos a una interpretación para φ’ que haga verdadero ri.
11
El procedimiento de la Resolución (1)
Si buscamos a satisfacer las cláusulas siguientes:
● Ca : (a1 \/ a2 \/ … \/ p \/ … \/ ak )● Cb : (b1 \/ b2 \/ … \/ ¬p \/ … \/ bn )
Entonces tenemos que satisfacer también:
● (a1 \/ … \/ ak \/ b1 \/ … \/ bn )
Esta regla para derivar cláusulas nueva se llama resolución.
12
El procedimiento de la Resolución (2)
Caso particular de la resolución unitaria:
● Ca: p● Cb : (b1 \/ b2 \/ … \/ ¬p \/ … \/ bn )
---> (b1 \/ b2 \/ … \/ bn )
¿Les recuerda a modus ponens?
p /\ (p → b1 \/ b2 \/ … \/ bn )
---> (b1 \/ b2 \/ … \/ bn )
Aplicar Resolución Unitaria tantas veces como posible es conocido como Boolean Constraint Propagation (BCP).
Con BCP tenemos todo para conocer el algoritmo de Davis Putnam Logemann Loveland (DPLL). 13
Algoritmo DPLL (Davis Putnam Logemann Loveland)
● Todos los SAT solvers modernos se basan en este algoritmo● DPLL se aplica a fórmulas en CNF● DPLL es un algoritmo recursivo que combina:
○ la regla “split” que prueba si se puede satisfacer la formula con algun literal a 1, si falla prueba con 0
○ la regla de resolución unitaria (varias aplicaciones dentro de)● El resultado de la resolución unitaria nos da una subcláusula de
una de las cláusulas a las cuales se aplicó● A la diferencia del algoritmo de resolución, la subcláusula nueva
reemplaza la cláusula original en la fórmula original
14
Algoritmo DPLL(F):
● F’ = BCP(F)● si F es {}, return SAT● si F contiene {}, return UNSAT● sino, elegir proposición p de F’, y:
○ si DPLL(F[p = 1]) devuelve SAT, entonces devolver SAT
○ sino devolver DPLL(F[p =0])
15
Algoritmo DPLL, en resumen
Substitución en una fórmula CNF
Si F contiene la cláusula C = { p } ∪ C’ entonces:
● se saca C en F[p = 1] .● se reemplaza C por C’ en F[p=0].
Si F contiene la cláusula C = { ¬p } ∪ C’ entonces:
● se reemplaza C por C’ en F[p = 1].● se saca C en F[p = 0].
16
Substitución en una fórmula CNF (más conciso)
Sea l un literal. Si F contiene la cláusula C = { l } ∪ C’ entonces:
● se saca C en F[l = 1] .● se reemplaza C por C’ en F[l = 0].
(dado que l puede ser de la forma p o ¬p).
17
Ejemplos DPLL
● Desarrollar ejemplos de la forma siguiente:● formato de cada línea:
[interpretación actual] || [Cláusulas] => regla
● reglas:○ resolución unitaria○ split:
■ elegir siempre el símbolo proposicional en orden lexicográfico
■ empezar con el valor 1 luego 0○ UNSAT (+ backtrack)○ SAT
18
Ejemplo DPLL 1
. || -1 v 2 , -3 v 4, -5 v -6, 6 v -5 v -2 => split
1s || 2 , -3 v 4, -5 v -6, 6 v -5 v -2 => u. prop.
1s2 || -3 v 4, -5 v -6, 6 v -5 => split
1s23s || 4, -5 v -6, 6 v -5 => u. prop.
1s23s4 || -5 v -6, 6 v -5 => split
1s23s45s || -6, 6 => u. prop
1s23s45s || {{}} => UNSAT + backtrack
1s23s4-5 || {} => SAT
19
Ejemplo DPLL 2
. || -1v2v3, 1, -2v3,-2v-3, 2v3, 2v-3 => u. prop.
1 || 2 v 3, -2 v 3, -2 v -3, 2 v -3 => split
12s || 3, -3 => u. prop
12s3 || {{}} => UNSAT + backtrack
1-2 || 3, -3 => u. prop.
1-23 || {{}} => UNSAT
20