Lógica para Computação Segundo Semestre, 2014 Aula 10: SAT DAINF-UTFPR Prof. Ricardo Dutra da Silva Definição 10.1. SAT é o problema de decidir se existe uma valoração que satisfaça uma fórmula proposicional. A resposta do problema é sim se a fórmula for satisfazível e não caso contrário. Definição 10.2. Seja A uma fórmula proposicional, sua forma clausal é um conjunto de cláusulas disjuntivas que é satisfazível se e somente se A é satisfazível. Exemplo 10.1 Dada a seguinte fórmula proposicional A = (p (q (q r))) (p r). Podemos obter a fórmula em FNC equivalente (p (q (q r))) ( p r) (p (q ( q r))) ( p r) ( p (q ( q r))) ( p r) (( p q) ( p ( q r))) ( p r) (( p q) ( p q r)) ( p r) ( p q) ( p q r) ( p r) ( p q) ( p q r) p r. Na forma clausal, temos que A = { p q, p q r, p, r}. Para que a fórmula A seja satisfazível, todas as cláusulas precisam ser verdadeiras. Definição 10.3. k-sat é o problema de decidir se existe uma valoração que satisfaça uma fórmula proposicional, na forma clausal, cujas cláusulas contêm até k literais. O que se sabe sobre o k-sat: 2-SAT pode ser resolvido eficientemente (tempo polinomial); 1
2 Aula 10: SAT k-sat, k 3, é NP-completo. Vimos anteriormente que tabelas-verdade podem ser usadas para verificar se formas são satisfazíveis. No entanto, fica evidente a dificuldade do problema, uma vez que é possível que tenhamos que analisar 2 n linhas de tabela para uma fórmula com n variáveis proposicionais. Nosso propósito agora é tentar métodos mais eficientes de verificar se uma fórmula pode ser satisfeita. Vamos analisar inicialmente algumas propriedades de fórmulas na forma clausal. Definição 10.4. Um literal L é um átomo ou a negação de um átomo. Definição 10.5. for a negação de um átomo. Um literal é positivo se ele for um átomo. Um literal é negativo se ele Definição 10.6. Definição 10.7. Uma cláusula é uma disjunção de literais. Uma cláusula unitária é formada por um único literal. Definição 10.8. Uma cláusula é positiva se todos os seus literais são positivos. Uma cláusula é negativa se todos os seus literais são negativos. Exemplo 10.2 Algumas cláusulas positivas: p q p q r r. Algumas cláusulas negativas: p q p q r r.
Aula 10: SAT 3 Lema 10.1. Seja C um conjunto de cláusulas insatisfazíveis, então C contém pelo menos uma cláusula positiva e pelo menos uma cláusula negativa. Demonstração. Seja um conjunto C de fórmulas insatisfazível. Suponha que não existem cláusulas positivas em C. Então todas as cláusulas contém pelo menos um literal negativo. No entanto, neste caso, basta fazer a valoração de todos os átomos falsa e a fórmula será satisfeita. Mas isto é uma contradição, logo deve existir pelo menos uma cláusula positiva. A prova da cláusula negativa segue com raciocínio semelhante (convença-se). Exemplo 10.3 Seja o conjunto de cláusulas C = { p q, p q r, p, r}, pela tabela-verdade verificamos que a fórmula é insatisfazível. p q r p q r p q p q p q r C 0 0 0 1 1 1 1 1 1 0 0 0 1 1 1 0 1 1 1 0 0 1 0 1 0 1 1 1 1 0 0 1 1 1 0 0 1 1 1 0 1 0 0 0 1 1 0 1 1 0 1 0 1 0 1 0 0 1 1 0 1 1 0 0 0 1 1 0 0 0 1 1 1 0 0 0 1 0 1 0 Então a fórmula deve conter cláusulas positivas e negativas. De fato, r é uma cláusula negativa e p é uma cláusula positiva. No entanto, o resultado não é suficiente para que possamos afirma que sempre que houver cláusulas positivas e negativas a fórmula será insatisfazível.
4 Aula 10: SAT Exemplo 10.4 Seja o conjunto de cláusulas C = { p q, p, q}. Existem cláusulas positivas e negativas mas a fórmula é satisfazível. p q p q p q C 0 0 1 1 1 0 0 1 1 0 0 0 1 0 0 1 1 1 1 1 0 0 1 0 Vamos inicialmente estudar um tipo de cláusula que possui restrições e verificar que podemos criar uma método para decidir se uma fórmula é satisfazível de maneira mais eficiente que uma tabela-verdade. Definição 10.9. Uma cláusula de Horn é uma disjunção de literais que contém no máximo um literal positivo. As cláusulas de Horn podem ser de três tipos: fatos: cláusulas unitárias com o único literal positivo; regras: cláusulas da forma p 1 p 2... q. restrições: cláusulas sem nenhum átomo positivo: p 1 p 2... p n, ou, equivalentemente, (p 1 p 2... p n ). Exemplo 10.5 A fórmula em FNC abaixo é uma fórmula de Horn. ( p q s p) ( q r p) ( p s s) p s A fórmula na forma clausal é dada abaixo. { p q s p, q r p, p s s, p, s} As cláusulas de Horn possuem propriedades que tornam a verificação de satisfazibilidade mais simples do que em cláusulas genéricas. Uma cláusula de Horn positiva é um fato, ou
Aula 10: SAT 5 seja, uma cláusula unitária positiva. O restante das cláusulas necessariamente possui literais negativos. Lema 10.2. Seja C um conjunto de cláusulas de Horn sem nenhum fato. Então, C é satisfazível. Demonstração. Em um conjunto de cláusulas de Horn sem fatos, todas as cláusulas têm pelo menos um literal negativo. Basta então fazer, para todo átomo p, V (p) = 0. O literal negativo das cláusulas será verdadeiro e todas as cláusulas serão satisfeitas. Exemplo 10.6 Considere as seguintes cláusulas de Horn, C = { p q s p, p r p, p s s}. Não há fatos, logo basta fazer V (p) = V (q) = V (r) = V (s) = 0 e temos ( p q s p) ( p r p) ( p s s) ( 0 0 0 0) ( 0 0 0) ( 0 0 0) (1 1 1 0) (1 1 0) (1 1 0) (1) (1) (1) 1 No entanto, cláusulas de Horn podem ter fatos! Como proceder nesse caso? Uma fato é uma cláusula positiva, portanto, seu único átomo p, necessariamente, tem que ser verdadeiro, caso contrário não há como satisfazer uma fórmula de Horn. Seja um fato p em um conjunto C de cláusulas de Horn, esse fato influencia na procura pela satisfazibilidade das cláusulas: 1. A satisfazibilidade das cláusulas não depende mais de p (V (p) = 1), apenas de C = C {p}. 2. p pode aparecer positivo em cláusulas da forma p 1 p 2... p, neste caso a cláusula torna-se verdadeira, já que p é verdadeiro. Não dependemos mais de qualquer cláusula desta forma e podemos removê-las do conjunto C. 3. p pode aparecer negativo em cláusulas da forma p p 1... p n, neste caso as cláusulas dependem apenas dos outros literais para serem verdadeiras, já que p é
6 Aula 10: SAT falso. Não dependemos mais do literal p e podemos substituir as cláusulas do tipo p p 1... p n por p 1... p n. Chamaremos o conjunto de cláusulas resultantes de conjunto simplificado e cada uma das operações aplicadas uma simplificação. Exemplo 10.7 Considere as seguintes cláusulas de Horn, C = { p q s p, p r p, p s s, s}. Temos um fato s. Logo V (s) = 1 e podemos remover s do conjunto de cláusulas. C = { p q s p, p r p, p s s} Mas s ainda aparece positivo em outras cláusulas e podemos removê-las. C = { p q s p, p r p} Ainda é possível remover o literal s de qualquer cláusula. C = { p q p, p r p} Agora temos um conjunto de cláusulas sem fatos, logo elas são satisfazíveis. Basta fazer V (p) = V (q) = V (r) = 0. Como consequência, C é satisfazível, com a valoração V (p) = V (q) = V (r) = 0 e V (s) = 1. Reescrevendo a fórmula em FNC temos a valoração abaixo. ( p q s p) ( p r p) ( p s s) s ( 0 0 1 0) ( 0 0 0) ( 0 1 1) 1 (1 1 0 0) (1 1 0) (1 0 1) 1 1 1 1 1 1 Exemplo 10.8 Considere as seguintes cláusulas de Horn, C = { p q, p}.
Aula 10: SAT 7 Temos um fato p. Logo V (p) = 1 e podemos remover p do conjunto de cláusulas. C = { p q} Removemos o literal p de qualquer cláusula. C = {q} Ficamos com uma única cláusula para ser satisfeita. Mas esta cláusula é um fato então basta fazer V (q) = 1. ( p q) p ( 1 1) 1 (0 1) 1 1 1 1 Exemplo 10.9 Considere as seguintes cláusulas de Horn, C = { p q, q s, p, s}. Temos um fato s. Logo V (s) = 1 e podemos remover s do conjunto de cláusulas. C = { p q, q s, p} Mas s ainda aparece negativo em outras cláusulas e podemos usar a terceira simplificação. C = { p q, q, p} Novamente temos um fato, p. Façamos V (p) = 1 e podemos removê-lo do conjunto de cláusulas. C = { p q, q}
8 Aula 10: SAT Podemos remover o literal p de qualquer cláusula. C = {q, q} Chegamos em cláusulas contraditórias e portanto insatisfazíveis. V (q) = 1 e V ( q) = 1 ao mesmo tempo. Vimos que V (s) = V (p) = 1. Se fizermos V (q) = 0 Não há como fazer ( p q) ( q s) p s ( 1 0) ( 0 1) 1 1 (0 0) (1 0) 1 1 0 1 1 1 0 falsificamos C. O mesmo ocorre se V (q) = 1. ( p q) ( q s) p s ( 1 1) ( 1 1) 1 1 (0 1) (0 0) 1 1 1 0 1 1 0