O documento discute o algoritmo DPLL para resolver problemas SAT. Ele começa explicando o problema SAT e métodos para resolvê-lo. Em seguida, descreve o algoritmo DPLL, desenvolvido em 1962 para testar novas heurísticas para problemas SAT. O DPLL usa backtracking com três melhorias principais: término antecipado, heurística do símbolo puro e heurística da cláusula unitária. Finalmente, apresenta o pseudocódigo do algoritmo DPLL.
5. DPLL
I Desenvolvido em 1962
I Usado para testar novas heurı́sticas
I Usa busca em profundidade com retrocesso (backtrack)
I Analisa sentenças na FNC (Forma normal conjuntiva)
5/12
6. DPLL - Melhoramentos
I Término Antecipado
I Heurı́stica do Sı́mbolo Puro
I Heurı́stica da Cláusula Unitária
6/12
7. DPLL - Término Antecipado
O algoritmo DPLL pode ser finalizado como V ou F antes de uma
atribuição completa dos átomos para os seguintes casos:
I Uma sentença pode ser preliminarmente declarada como
verdadeira se um dos literais é verdade independentemente do
valor dos outros.
Ex. A expressão ((A ∨ B) ∧ (A ∨ C)) será V se A for V
independente de C e B.
I Uma sentença será falsa se uma de suas cláusulas for falsa
(todos os literais são falsos).
Ex. A expressão ((A ∨ B) ∧ (A ∨ C)) será F se A e B forem F
independente de C.
7/12
8. Heurı́stica do Sı́mbolo Puro
Um sı́mbolo puro é um sı́mbolo que sempre aparece com o mesmo
sinal (Verdadeiro ou falso) em todas as cláusulas). Ex. Nas
cláusulas (A ∨ ¬B), (¬B ∨ ¬C), (C ∨ A) A e B são puros e C é
impuro.
Uma vez que as sı́mbolos puros tenham sido atribuı́dos a valores
que os tornem literais positivos suas cláusulas podem ser
eliminadas e novos sı́mbolos puros podem aparecer.
8/12
9. Cláusulas Unitárias
Contém apenas um literal (Ou apenas um literal cujo valor não
está fixado). Valores devem ser atribuı́dos a estas cláusulas
inicialmente o que pode levar a uma Propagação unitária
9/12
10. DPLL - Algoritmo
Entrada: Sentença em FNC
Saı́da: Verdade ou Falso
1. clausulas, simbolos ← remover clausulas e sı́mbolos
2. retornar DPLL(clausulas,simbolos,modelo={})
10/12
11. DPLL-Algoritmo
função DPLL (clausulas,simbolos,modelo)
1. Se todas as cláusulas são verdadeiras no modelo então retorne
V
2. Se alguma cláusula no modelo é falsa então retorne F
3. P,valor ← ENCONTRAR-SÍMBOLO-PURO ( simbolos,
clausulas, modelo )
4. Se P é não nulo retornar DPLL (clausulas, sı́mbolos - P,
modelo ∪ { P = valor} )
5. P,valor ← ENCONTRAR-CLÁUSULA-UNITÁRIA (clausulas,
modelo)
6. Se P é não nulo então retorne DPLL (clausulas, sı́mbolos - P,
modelo ∪ { P = valor} )
7. P ← PRIMEIRO(simbolos); resto ← RESTO( simbolos )
8. retornar DPLL (clausulas, resto, modelo ∪ { P = V } ) ou
DPLL (clausulas, resto, modelo ∪ { P = F } )
11/12