21
Programación Lógica 2. Lógica proposicional y (CNF-)SAT 1

2. Lógica proposicional y (CNF-)SAThoffmann/pd17/PL02.pdf · Cualquier interpretación que satisfaga φ’ tiene que satisfacer uno de los símbolos r i. Entonces también satisface

  • Upload
    others

  • View
    8

  • Download
    0

Embed Size (px)

Citation preview

Programación Lógica2. Lógica proposicional y (CNF-)SAT

1

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

DPLL para encontrar una interpretación

● cuando DPLL contesta SAT, a los símbolos de la fórmula no asignados, fijar valor arbitrario

● así DPLL nos devuelve una interpretación que satisface la fórmula de entrada

● DPLL nos dice no solo que la fórmula es satisfactible, sino también porqué

21