Rezolucja oraz problem SAT
Transkrypt
Rezolucja oraz problem SAT
MFI Metody Formalne Informatyki: Zestaw 2 Semestr zimowy 2016/2017 Kraków 13 października 2016 Rezolucja oraz problem SAT Zadanie 1. Niech Φ będzie formułą w koniunkcyjnej postaci normalnej (CNF). Udowodnij, że Φ jest tautologią wtedy i tylko wtedy, gdy każda klauzula zawiera przynajmniej jedną zmienną występującą zarówno pozytywnie jak i negatywnie. Zadanie 2. Niech Φ będzie formułą w dysjunkcyjnej postaci normalnej (DNF). Udowodnij, że Φ jest spełnialna wtedy i tylko wtedy, gdy Φ posiada klauzulę, w której żadna zmienna nie występuje jednocześnie pozytywnie jak i negatywnie. Zadanie 3. Niech Φ będzie dowolną formułą w koniunkcyjnej postaci normalnej. Wykaż, że istnieje formuła Ψ w koniunkcyjnej postaci normalnej taka, że: (i) Φ jest spełnialna wtedy i tylko wtedy gdy Ψ jest spełnialna, (ii) Ψ składa się z klauzul zawierających co najwyżej trzy literały. Zadanie 4. Podaj warunek konieczny i wystarczający na to, że instancja problemu 1-SAT była spełnialna. Ile różnych wartościowań może jednocześnie spełniać taką formułę? Zadanie 5. Używając metody rezolucji, udowodnij następujące twierdzenia: (i) p → p, (ii) p → (p ∨ q), (iii) p ↔ ¬¬p, (iv) (p → q) ↔ (¬q → ¬p), (v) ((p → q) → p) → p. Zadanie 6. Niech Φ będzie formułą 2-SAT. Jeżeli używając metody rezolucji na Φ, nie da się jednocześnie wygenerować (x ∨ x) oraz (¬x ∨ ¬x) dla dowolnej zmiennej x wówczas mówimy, że Φ jest spójna. Wykaż, że Φ jest spójna wtedy i tylko wtedy gdy Φ jest spełnialna. Zadanie 7. Rozważmy formuły CNF gdzie każda klauzula posiada co najwyżej jedno niezaprzeczone wystąpienie zmiennej. Takie formuły nazywamy formułami Horna. Niech dany będzie poniższy algorytm zachłanny rozstrzygający czy dana na wejściu formuła Horna jest spełnialna. Udowodnij poprawność tego algorytmu. Algorithm Greedy Input: Φ = C1 ∧ . . . ∧ Cm – formuła Horna Output: T rue wtedy i tylko wtedy gdy Φ jest spełnialna 1: ρ ← {v1 → F alse, v2 → F alse, . . . , vn → F alse} 2: while ∃i (Ci = (vi1 ∨ ¬vi2 ∨ . . . ∨ ¬vik ) oraz Ci jest fałszywa) do i 3: ρ := ρ[vi1 → T rue] 4: end while 5: return ∀i (Ci = (¬vi1 ∨ . . . ∨ ¬vik ) =⇒ Ci jest prawdziwa) i Strona 1/1