Ciele
- Naštudovať potrebné pojmy.
- Preštudovať vzorové príklady prezentované v rámci teoretickej časti.
- Vypracovať zadané úlohy.
Základné pojmy
Predchádzajúce cvičenia boli venované výrokovej logike, konkrétne trom dôležitým aspektom každého logického systému: jazyku, sémantike a dedukčným kalkulom. V rámci sémantiky boli prezentované spôsoby nájdenia modelu formuly, a v dedukčných kalkuloch sme sa venovali dokazovaniu formúl. Dnešné cvičenie je venované automatizácii a zefektívneniu týchto postupov. Konkrétne dvom metódam:
- Rezolučná metóda, ktorá je základom systémov automatického dokazovania teorém.
- DPLL algoritmus, ktorý je základom systémov pre riešenie SAT problému.
SAT problém (Boolean satisfiability problem), problém splniteľnosti booleovských formúl je úloha zistiť, či existuje aspoň jedno pravdivostné ohodnotenie formuly pri ktorom $φ$ je pravda. Cieľom je získať áno/nie odpoveď, prípadne extrahovať model formuly.
Binárny rozhodovací strom (Binary Decision Tree) je štruktúra založená na sekvenčnom rozhodovacom procese. Začínajúc od koreňa sa vyhodnotí prvok a vyberie sa jedna z dvoch vetiev. Tento postup sa opakuje, kým sa nedosiahne koncový list, ktorý zvyčajne reprezentuje hľadaný cieľ.
Spätné vyhľadávanie (Návrat,Backtracking) je všeobecná algoritmická technika, ktorá spočíva v preskúmaní všetkých možných riešení problému tým, že postupne vytvárame riešenie a potom vraciame "backtrackujeme" kroky, keď narazíme na nesprávne riešenie.
Rezolučná metóda
Gentzen formuloval prirodzenú dedukciu a sekventový kalkul tak, aby samotný proces dokazovania bol prirodzený pre človeka. Avšak ich nevýhodou je, že nájsť formálny dôkaz formuly (sekventu) prostredníctvom počítača je neefektívny a algoritmicky zložitý proces (z dôvodu možnosti aplikácie viacerých pravidiel).
Rezolučná metóda je dedukčný kalkul, ktorý nie je vhodný na dokazovanie formúl človekom, avšak je jednoduché ho automatizovať, keďže obsahuje iba jedno dedukčné pravidlo a žiadne axiómy. Obmedzením je, že na vstupe sa očakávaná formula v konjunktívnom normálnom tvare.
Gentzenové dedukčné kalkuly sú založené na type dôkazu, ktorý sa nazýva priamy dôkaz. Rezolučná metóda oproti tomu využíva dôkaz sporom..
Rezolučná metóda je konzistentná a úplná sporom (refutation completeness).
Úplnosť sporom (silná forma vety).
Dedukčný kalkul je úplný sporom ak schopný odvodiť $⊥$ pre každú množinu predpokladov, ktorá je kontradikcia.
$$Γ \models ⊥ \quad \text{vtt.} \quad Γ \vdash ⊥$$
Úplnosť sporom (slabá forma vety).
Dedukčný kalkul je úplný sporom ak schopný odvodiť $⊥$ pre každú formulu, ktorá je kontradikcia.
$$ \models ⊥ \quad \text{vtt.} \quad \vdash ⊥$$
Klauzula ako množina literálov
Spomeňme si, že klauzula je disjunkcia literálov v tvare: $$¬k_1 ∨ ... ∨ ¬k_n ∨ l_1 ∨ ... ∨ l_m.$$
Nech $φ_1, φ_2, φ_3 \in Prop$. Keďže disjunkcia $∨$ je:
- komutatívna $φ_1 ∨ φ_2 ≡ φ_2 ∨ φ_1$,
- neasociatívna $(φ_1 ∨ φ_2) ∨ φ_3 ≡ φ_1 ∨ (φ_2 ∨ φ_3) $,
- idempotentná $φ ∨ φ ≡ φ$,
je možné ju zapísať aj v tvare množiny: $$\{¬k_1, ..., ¬k_n, l_1, ..., l_m\}.$$
- Klauzuly budeme označovať $C_1, ..., C_n$.
- Prázdna klauzula v množinovom tvare $\{\}$ znamená kontradikciu $⊥$.
CNF ako množina klauzúl
Formula v CNF je konjunkcia klauzúl. Keďže konjunkcia je komutatívna, neasociatívna a idempotentná je možné je zapísať aj v tvare množiny: $$\{C_1, ..., C_n\}.$$
- Prázdna CNF v množinovom tvare $\{\}$ znamená tautológiu $⊤$.
- CNF v množinovom tvare, ktorá obsahuje aspoň jednu prázdnu klauzulu $\{\{\}\}$ je kontradikcia.
Pravidlo rezolúcie
V dedukčnom pravidle rezolučnej metódy sú predpoklady aj záver klauzuly. Pravidlo rezolúcie spája dve klauzuly, ktoré obsahujú komplementárne literály. Zjednodušene vychádza z nasledujúceho pravidla:
- Rezolúcia - proces aplikácie rezolučného pravidla.
- Rezolventa - (klauzula) výsledok rezolúcie.
Poznámka: Toto pravidlo neznamená ekvivalenciu formúl $(a ∨ b) ∧ (¬b ∨ c)$ a $(a ∨ c)$, ale formula $(a ∨ c)$ vyplýva z predpokladov ($(a ∨ b) ∧ (¬b ∨ c)$).
Nech je formula $(a ∨ b) ∧ (¬b ∨ c)$ pravdivá pri nejakom pravdivostnom ohodnotení $v$. Potom musia byť pravdivé obidva disjunkty $(a ∨ b)$ a $(¬b ∨ c)$.
- Ak $v(b)=0$, potom $v(a)=1$ a $v(a ∨ c)=1$.
- Ak $v(b)=1$, potom $v(¬b)=0$ a $v(c)=1$, čiže $v(a ∨ c)=1$.
Teda platí: $$(a ∨ b) ∧ (¬b ∨ c)\models (a ∨ c).$$
Úloha 0.1
Prostredníctvom tabuľkovej metódy ukážte platnosť $$(a ∨ b) ∧ (¬b ∨ c)\models (a ∨ c).$$ Prostredníctvom prirodzenej dedukcie a sekventového kalkulu dokážte: $$(a ∨ b) ∧ (¬b ∨ c)\vdash (a ∨ c).$$
Pre lepšie pochopenie, je možné sa na pravidlo res_bin pozrieť ako na tranzitivitu implikácie:
Detekcia kontradikcie (špeciálny prípad pravidla):
Všeobecné pravidlo rezolúcie má tvar:
V rámci narábania s formulami je vhodne využiť množinový tvar CNF aj klauzúl. Rezolučné pravidlo v množinovom tvare:
Detekcia kontradikcie v množinovom tvare:
Poznámka
Prázdna klauzula $\{\}$ sa v dôkazoch rezolučnej označuje ako $\Box$.
Dôkaz formuly rezolučnou metódou
Formulu $φ$ je možné dokázať rezolučnou metódou nasledovne:
- Negácia formuly $φ$.
- Prevod $¬φ$ do CNF.
- Pokračujem algoritmom nižšie.
Algoritmus: Dôkaz formuly $φ$ rezolučnou metódou
Vstup: Formula $¬φ$ v CNF
Výstup: Kontradikcia ak $¬φ≡⊥$, splniteľná inak
- Zvoľ dve klauzuly.
- Aplikuj pravidlo rezolúcie.
- Ak kontradikcia vráť $⊥$.
- Ak nie pridaj rezolventu do množiny klauzúl.
- Ak je to možné pokračuj krokom 1.
- Ak nie, formula $φ$ je splniteľná.
To znamená:
- Formula $φ$ je dokázaná ak jej negácia je kontradikcia.
- Algoritmus sa zastaví vtedy, ak už nie je možné aplikovať pravidlo rezolúcie, tak aby vznikla nová rezolventa alebo bola odvodená kontradikcia.
Dôkaz formuly:
- Je strom ktorého listy sú klauzuly.
- Každý ďalší uzol vznikol aplikáciou pravidla rezolúcie na ľubovoľné dva uzly (vrátane listov).
- Pravidlo rezolúcie je možné aplikovať na jeden uzol viacnásobne alebo ani raz,
- V koreni sa nachádza prázdna klauzula (kontradikcia).
Poznámka
Pravidlo rezolúcie je možné aplikovať len na také dve klauzuly, ktoré obsahujú komplementárne literály.
Príklad
Dokážte rezolučnou metódou nasledujúcu formulu: $$(a ⇒ b)∧a⇒b.$$
Riešenie
- krok negácia formuly: $$¬((a ⇒ b)∧a⇒b).$$
- prevod formuly do CNF: $$ \begin{array}{rl} ¬((a ⇒ b)∧a⇒b) &≡ ¬((¬a ∨ b)∧a⇒b)\\ ¬((¬a ∨ b)∧a⇒b) &≡ ¬(¬((¬a ∨ b)∧a)∨b)\\ ¬(¬((¬a ∨ b)∧a)∨b) &≡ (¬a ∨ b)∧a∧¬b \end{array} $$ Výsledná negovaná formula v CNF: $$(¬a ∨ b)∧a∧¬b.$$
- Jednotlivé klauzuly tvoria listy dôkazového stromu:
$$(¬a ∨ b)\quad a \quad ¬b.$$
Zvolíme ľubovoľné dve klauzuly, ktoré obsahujú komplementárne literály a aplikujeme pravidlo rezolúcie:
Po aplikácii pravidla rezolúcie vznikla klauzula $$b.$$ Aktuálne klauzuly: $$(¬a ∨ b)\quad a \quad ¬b \quad b.$$ Zvolíme ľubovoľné dve klauzuly, ktoré obsahujú komplementárne literály a aplikujeme pravidlo rezolúcie:
výsledná klauzula:
$$⊥.$$
Dosiahli sme kontradikciu, to znamená, že pôvodná formula
$$(a ⇒ b)∧a⇒b,$$
je dokázaná.
Postup v tvare dôkazového stromu:
Poznámka
Po aplikácii pravidla rezolúcie sa zoznám klauzúl rozširuje o vzniknutú klauzulu. V príklade vyššie po dvoch aplikáciách vyzeral zoznam klauzúl nasledovne: $$(¬a ∨ b)\quad a \quad ¬b \quad \quad b \quad ⊥.$$ Je potrebné si uvedomiť, že zoznam klauzúl je v CNF a zápis vyššie je ekvivalentný zápisu: $$(¬a ∨ b)\wedge a \wedge ¬b \wedge b \wedge ⊥,$$ čo znamená, že cieľom aplikovania rezolučného pravidla je nájsť kontradikciu čo najskôr, keďže akákoľvek formula v konjunkcii s absurdom $⊥$ je kontradikcia.
Všimnite si, že v našom príklade sú dve možnosti ako začať rezolúciu. Druhá možnosť je použiť v prvom kroku klauzuly $$(¬a ∨ b)\quad ¬b.$$
V každom prípade dosiahneme rovnaký výsledok, avšak komplexnosť dôkazu sa môže výrazné líšiť. Ako postupovať aby bol dôkaz získaný čo najefektívnejšie definujú stratégie rezolúcie, ktorým sa budeme venovať neskôr.
Príklad
Dokážte rezolučnou metódou nasledujúcu formulu: $$(a ⇔ b)⇔ (b⇔a).$$
Riešenie
V prvom kroku negácia formuly a nasleduje prevod do CNF.
Výsledná množina klauzúl:
$$ \{a,b\} \quad \{\neg a,b\} \quad \{a,\neg b \} \quad \{\neg a, \neg b \} $$
Dôkaz:
Poznámka
Všimnite si v prvom kroku použitie pravidla:
Pri rezolúcií pre ľubovoľnú klauzulu platí:
- Klauzula (aj rezolventa) môže byť použitá viac krát.
- Klauzula (aj rezolventa) nemusí byť použitá.
Príklad
Majme množinu klauzúl: $$ \{\neg a,b\} \quad \{ a\} \quad \{ \neg c,b \} \quad \{\neg b \}.$$ Nájdite kontradikciu.
Riešenie
V krokoch rezolúcie nevyužijeme klauzulu $\{\neg c,b \}$.
Poznámka
Redundantné klauzuly sú veľkou výzvou v systémoch automatického dokazovania teorém.
Dôkaz logického vyplývania rezolučnou metódou
Dôkaz logického vyplývania $Γ \vdash φ$ rezolučnou metódou vychádza z nasledujúcej vety: $$Γ\vdash φ \quad~ \text{vtt.} \quad~ Γ ∪ \{¬φ\} \vdash ⊥.$$ Postup je nasledovný.
- Prevod predpokladov v $Γ$ do CNF.
- Negácia záveru $φ$.
- Prevod negovaného záveru $¬φ$ do CNF.
- Pridanie negovaného záveru do množiny $Γ'=Γ ∪ \{¬φ\}$.
- Pokračovanie algoritmom nižšie.
Algoritmus: Dôkaz formuly $φ$ rezolučnou metódou
Vstup: Množina klauzúl $Γ'$
Výstup: Kontradikcia ak $Γ'≡⊥$, splniteľná inak
-
- Zvoľ dve klauzuly.
-
- Aplikuj pravidlo rezolúcie.
- 2.1. Ak kontradikcia vráť $⊥$.
- 2.2. Ak nie pridaj rezolventu do množiny klauzúl.
- 2.2.1. Ak je to možné pokračuj krokom 1.
- 2.2.1. Ak nie, formula tvoriaca $Γ'$ je splniteľná.
Príklad
Majme nasledujúci sylogizmus:
Ak Ivan nepôjde študovať matematiku, pôjde študovať informatiku.
Ak Ivan nepôjde študovať informatiku, začne podnikať.
Ivan nebude zároveň študovať matematiku aj podnikať.
----------------------------------------------------------------
Ivan pôjde študovať informatiku.
Preložte dané logické vyplývanie do jazyka výrokovej logiky a dokážte ho rezolučnou metódou.
Riešenie
Logické tvrdenie v tvare $Γ \vdash φ$ je výhodné na preklad do CNF, keďže predpoklady sú v konjunkcii, to znamená stačí iba preložiť predpoklad jeden po druhom. Posledný krok pozostáva z negácie záveru a jeho prekladu do CNF.
Formula: $$ \begin{array} ~\neg p \Rightarrow q\\ \neg q \Rightarrow r\\ \neg (p \wedge r)\\ \hline \\ q \end{array} $$ | CNF: $$ \begin{array} ~p \vee q\\ q \vee r\\ \neg p \vee \neg r\\ \hline \\ \neg q \end{array} $$ |
---|
Množina predpokladov množinovej notácii CNF: $$Γ=\{\{~p, q\}, \{q, r\}, \{\neg p, \neg r\}\}$$ Znegovaný záver: $$\neg q$$ Výsledná množina klauzúl: $$Γ'=\{\{~p, q\}, \{q, r\}, \{\neg p, \neg r\}, \{\neg q\}\}.$$ Pokračujeme algoritmom definovaným vyššie:
Jednotlivé klauzuly neboli zvolené náhodne. Napríklad:
- Majme danú množinu klauzúl: $$Γ=\{\{p, q\}, \{q, r\}, \{\neg r, t\}, \{\neg p, \neg r\}, \{\neg q\}, \{\neg q, s\} \}.$$
- Dôkaz vyzerá tak isto ako v predchádzajúcom prípade.
Stratégie rezolúcie:
- Ignorovanie nepodstatného. Klauzuly $$\{\neg q, s\}, \{\neg r, t\}$$ neboli zvolené zámerne. Po ich rezolúcii by vznikla klauzula $\{s\}$ resp. $\{t\}$, pričom atomické výroky $s,t$ nemajú komplementárny výskyt v inej klauzule, čo znamená ich rezolúcia by neviedla k cieľu.
- Práca so záverom. Nepokúšame sa nájsť kontradikciu len z klauzúl, ktoré vznikli z predpokladov.
- Lineárna rezolúcia. Dokaz má lineárnu štruktúru. Po prvom kroku rezolúcie sú štandardne zvolené dve klauzuly, v každom ďalšom kroku rezolúcie je použitá rezolventa. (Dôkaz predchádzajúceho príkladu spĺňa podmienky lineárnej rezolúcie.)
- Jednotková rezolúcia (unit resolution) v každom kroku rezolúcie musí byť jedna z použitých klauzúl jednotková. Jednotková klauzula je taká, ktorá obsahuje iba jeden literál.
Poznámka
Existuje mnoho stratégií rezolúcie. Sú to pravidlá a obmedzenia, ktoré určujú ako postupovať pri dôkaze. Lineárna rezolúcia zachováva konzistentnosť a úplnosť sporom. Avšak, nie každá stratégia je konzistentná a úplná sporom. Napríklad jednotková rezolúcia nie je úplná sporom, avšak je dôležitou súčasťou algoritmu DPLL.
SAT problém a Jednoduchý SAT solver
SAT problém:
Existuje pravdivostné ohodnotenie $v$ formuly $φ$ také, že $φ$ je pravda?
Poznámka
Budeme používať nasledujúce skratky:
- SAT splniteľnosť formuly.
- UNSAT nesplniteľnosť formuly.
- SAT solver systém ktorý rieši SAT problém.
Naivné riešenie SAT problému
je možné vykonať zostrojením pravdivostnej tabuľky, ak existuje aspoň jeden riadok, pri ktorom formula $φ$ je pravdivá, potom $φ$ je splniteľná, ak nie potom $φ$ je nesplniteľná.
Takéto riešenie nie je výhodné. Tabuľka sa zväčšuje exponenciálne s počtom výrokových premenných. S $n$ premennými bude obsahovať $2^n$ riadkov. To znamená exponenciálnu algoritmickú časovú aj priestorovú zložitosť. Reálne problémy často obsahujú aj stovky tisíc premenných. Z tohto dôvodu je potrebné hľadať iné riešenie. Problém s priestorovou zložitosťou je možné vyriešiť prostredníctvom binárneho rozhodovacieho stromu a spätným prehľadávaním. Avšak v prípade, že je formula nesplniteľná je potrebné prehľadať všetky uzly stromu, čo znova vytvára exponenciálnu časovú zložitosť.
Poznámka
Všetky algoritmy ďalej budú pracovať s formulami v CNF tvare.
Jednoduchý SAT solver
Jednoduchý algoritmus pre riešenie SAT problému využitím backtracking-u (spätného prehľadávania) je možné definovať nasledovne
Algoritmus: Jednoduchý SAT solver
Vstup: Formula $φ$ v CNF ako množina klauzúl $Γ$.
Výstup: SAT ak $φ$ splniteľná, UNSAT inak
simple_SAT($Γ$):
-
- Ak $Γ=\{\}$, vráť SAT.
-
- Ak $\{\} \in Γ$, vráť UNSAT.
-
- Zvoľ výrokovú premennú $p$ z $Γ$.
- 3.1. $Γ'$=nahraď všetky výskyty $p$ v $Γ$ za $⊤$ a $\neg p$ za $⊥$ v $Γ$.
- 3.2. Ak simple_SAT($Γ'$)$=$ UNSAT,
- $Γ''$=nahraď všetky výskyty $p$ za $⊥$ a $\neg p$ za $⊤$ v $Γ$ a simple_SAT($Γ''$).
- Ak simple_SAT($Γ''$)$=$ UNSAT, vráť UNSAT
Slovný opis algoritmu:
- Algoritmus simple_SAT očakáva na vstupe množinu klauzúl.
- Ak množina klauzúl neobsahuje premenné, zjednodušíme klauzuly $\{⊥\} = \{\}$ a tautologické klauzuly $\{⊤\}$ a $\{⊤,...\}$ odstránime.
- Ak je množina klauzúl prázdna $Γ=\{\}$, formula $φ$ je splniteľná.
- Ak množina klauzúl obsahuje prázdnu klauzulu $\{\} \in Γ$, formula $φ$ je nesplniteľná.
- Zvolíme ľubovoľnú premennú $p$ z $Γ$, nahradíme ju za $⊤$, v prípade $¬p$ za $⊥$ v $Γ$ a rekurzívne voláme simple_SAT s aktualizovanou množinou klauzúl.
- Ak rekurzívne volanie simple_SAT nevráti SAT, spätné navracanie - nahradíme premennú $p$ za $⊥$, v prípade $¬p$ za $⊤$ v $Γ$ a rekurzívne voláme simple_SAT s aktualizovanou množinou klauzúl.
- Ak po spätnom navrátení simple_SAT nevráti SAT, potom formula je nesplniteľná.
Príklad
Zistite algoritmom simple_SAT či je splniteľná formula $$a ∧ (b ⇒ c).$$ Znázornite proces vykonávania algoritmu rozhodovacím stromom.
Riešenie
- Preklad formuly $φ$ do množiny klauzúl: $$Γ=\{\{a\},\{¬b,c\}\}$$
- Rekurzívne voláme simple_SAT($Γ$).
Iterácia | $Γ$ | Opis |
---|---|---|
1. | $Γ=\{\{a\},\{¬b,c\}\}$ | Substitúcia $a=⊤$ |
2. | $\{\{⊤\},\{¬b,c\}\}$ | Substitúcia $b=⊤$ |
3. | $\{\{⊤\},\{⊥,c\}\}$ | Substitúcia $c=⊤$ |
4. | $\{\{⊤\},\{⊥,⊤\}\}$ | Zjednodušenie $\Gamma$ |
5. | $\{\}$ | $Γ=\{\}$, vráť SAT. |
Vytvorený rozhodovací strom:
Príklad
Zistite algoritmom simple_SAT či je splniteľná formula $$¬a ∧ (b ⇒ c).$$ Znázornite proces vykonávania algoritmu rozhodovacím stromom.
Riešenie
- Preklad do množiny klauzúl: $$Γ=\{\{¬a\},\{¬b,c\}\}.$$
- Rekurzívne volanie simple_SAT($Γ$).
Iterácia | $Γ$ | Opis |
---|---|---|
1. |
$\{\{¬a\},\{¬b,c\}\}$ | Substitúcia $a=⊤$ |
2. |
$\{\{⊥\},\{¬b,c\}\}$ | Substitúcia $b=⊤$ |
3. |
$\{\{⊥\},\{⊥,c\}\}$ | Substitúcia $c=⊤$ |
4. |
$\{\{⊥\},\{⊥,⊤\}\}$ | Zjednodušenie $\Gamma$ |
5. |
$\{\{\}\}$ | $\{\} \in Γ$,UNSAT. Návrat o úroveň vyššie zmena voľby substitúcie $c=⊥$ |
6. |
$\{\{⊥\},\{⊥,c\}\}$ | Substitúcia $c=\bot$ |
7. |
$\{\{⊥\},\{⊥,⊥\}\}$ | Zjednodušenie $\Gamma$ |
8. |
$\{\{\},\{\}\}$ | $\{\} \in Γ$,UNSAT. Návrat o 2 úrovne vyššie zmena voľby substitúcie $b=⊥$ |
9. |
$\{\{⊥\},\{¬b,c\}\}$ | Substitúcia $b=\bot$ |
10. |
$\{\{⊥\},\{⊤,c\}\}$ | Substitúcia $c=⊤$ |
11. |
$\{\{⊥\},\{⊤,⊤\}\}$ | Zjednodušenie $\Gamma$ |
12. |
$\{\{\}\}$ | $\{\} \in Γ$,UNSAT. Návrat o úroveň vyššie zmena voľby substitúcie $c=⊥$ |
13. |
$\{\{⊥\},\{⊤,c\}\}$ | Substitúcia $c=\bot$ |
14. |
$\{\{⊥\},\{⊤,⊥\}\}$ | Zjednodušenie $\Gamma$ |
15. |
$\{\{\}\}$ | $\{\} \in Γ$,UNSAT. Návrat o 3 úrovne vyššie zmena voľby substitúcie $a=⊥$ |
16. |
$\{\{¬a\},\{¬b,c\}\}$ | Substitúcia $a=⊥$ |
17. |
$\{\{⊤\},\{¬b,c\}\}$ | Substitúcia $b=⊤$ |
18. |
$\{\{⊤\},\{⊥,c\}\}$ | Substitúcia $c=⊤$ |
19. |
$\{\{⊤\},\{⊥,⊤\}\}$ | Zjednodušenie $\Gamma$ |
20. |
$\{\}$ | $Γ=\{\}$, vráť SAT |
- Vytvorený rozhodovací strom:
Poznámka
Algoritmus simple_SAT funguje efektívne na väčšinu vstupov. Je výhodný aj z hľadiska priestorovej komplexnosti, keďže stačí si pamätať jednu cestu v strome. Pre formuly s mnoho splniteľnými pravdivostnými ohodnoteniami, väčšinou nájde jedno veľmi rýchlo. Avšak časová zložitosť je v najhoršom prípade exponenciálna Napríklad ak je formula nesplniteľná, algoritmus musí prehľadať všetky uzly stromu.
Príklad
Vytvorte rozhodovací strom, ktorý opisuje vykonávanie algoritmu simple_SAT pre formulu: $$a \wedge b \wedge c \wedge \neg a.$$
Riešenie
Vytvorený rozhodovací strom:
Poznámka
Algoritmus simple_SAT je možné jednoducho rozšíriť o možnosť nájdenia modelu formuly, pridaním množiny pre čiastočné pravdivostné ohodnotenie.
DPLL algoritmus, jednotková propagácia, eliminácia čistého literálu
DPLL (Davis–Putnam–Logemann–Loveland) algoritmus bol predstavený v roku 1962. Rieši SAT problém obdobným spôsobom ako algoritmus prezentovaný v predchádzajúcej kapitole, avšak je rozšírený o dve procedúry, ktoré umožňujú zjednodušenie formuly pred začatím prehľadávania stromu:
- Jednotková propagácia (Unit Propagation).
- Eliminácia čistého literálu (Pure Literal Elimination).
Rozšírime algoritmus pre naše potreby tak, aby v prípade splniteľnej formuly vrátil aj model, ktorý našiel ako množinu (čiastočnej) interpretácie.
Množinu interpretácie budeme označovať $I$
Orezávanie prehľadávania nesplniteľných vetiev. Jednoduchý algoritmus definovaný v predchádzajúcej kapitole v príklade: $$¬a ∧ (b ⇒ c),$$ pri vykonávaní prehľadá viac ako polovicu rozhodovacieho stromu. Vhodnými metódami je možné tento proces výrazné zjednodušiť - orezať prehľadávanie vetiev, ktoré nemôžu byť splnené.
Príklad
Majme nasledovnú množinu klauzúl formuly $φ$: $$\{\{b,c\},\{¬ a\},\{c\},\{¬a,b\}\}.$$ Keď sa pozrieme na danú množinu klauzúl, môžeme si všimnúť, že obsahuje jednotkovú klauzulu: $$\{¬ a\}.$$ To znamená, že formula $φ$ nemôže byť splniteľná ak výroková premenná $a$ nadobudne hodnotu pravda. Vhodným priradením pravdivostnej hodnoty danej premennej, je možné formulu výrazne zjednodušiť a zároveň jedným krokom orezať prehľadávanie stromu o polovicu vetiev. Tento postup opisuje jednotková propagácia.
Jednotková propagácia
Ak sa vo formule nachádza jednotková klauzula literál musí byť pravdivý, aby cela formula mohla byť splniteľná. Teda je zrejme aká hodnota musí byť priradená výrokovej premennej. Postupujeme nasledovne:
- Do množiny interpretácie pridáme danú výrokovú premennú s priradenou hodnotou:
- $I∪\{p↦1\}$ ak jednotková klauzula je v tvare $\{p\}$,
- $I∪\{p↦0\}$ ak jednotková klauzula je v tvare $\{¬p\}$.
- Zjednodušíme formulu tak, že vo formule všetky výskyty premennej $p$ nahradíme nasledovne:
- ak $I∪\{p↦1\}$:
- klauzuly kde $p$ odstránime,
- klauzuly kde $¬p$ odstrime z nich $¬p$.
- ak $I∪\{p↦0\}$:
- klauzuly kde $¬p$ odstránime,
- klauzuly kde $p$ odstrime z nich $p$.
- ak $I∪\{p↦1\}$:
- Ak získame prázdnu klauzulu formula je nesplniteľná.
- Ak získame prázdnu množinu klauzúl, formula je splniteľná a množina interpretácie obsahuje jej model.
Poznámka
$\\$
- Aplikácia jednotkovej propagácie môže vytvoriť nové jednotkové klauzuly, to znamená postup opakujeme, pokiaľ existuje jednotková klauzula.
- Tento postup vychádza z jednotkovej rezolúcie.
Algoritmus: Jednotková propagácia:
Vstup: Množina klauzúl $Γ$ formuly $φ$ a množina interpretácie $I$
Výstup: Zjednodušená množina klauzúl $Γ'$ a množina interpretácie $I$ ak je množina splniteľná, UNSAT inak
unit_propagation($Γ$,$I$):
- Pokiaľ v $Γ$ existuje jednotková klauzula s nepriradenou premennou $p$:
- Priraď $p$ pravdivostnú hodnotu, ktorá robí jednotkovú klauzulu pravdivou.
- Pridaj $p$ do $I$.
- Ak $p↦1$:
- Odstráň všetky klauzuly obsahujúce $p$ z $Γ$.
- Odstráň $\neg p$ zo všetkých zostávajúcich klauzúl v $Γ$.
- Ak $p↦0$:
- Odstráň všetky klauzuly obsahujúce $¬p$ z $Γ$.
- Odstráň $p$ zo všetkých zostávajúcich klauzúl v $Γ$.
- Ak $Γ=\{\}$, vráť $I$.
- Ak $\{\} \in Γ$, vráť UNSAT.
- Vráť výslednú množinu klauzúl $Γ'$ a množinu interpretácie $I'$.
Príklad
Aplikujte jednotkovú propagáciu na množinu klauzúl: $$Γ=\{\{¬a,¬b\},\{b,c\},\{¬c,d\},\{a\}\}.$$
Riešenie
Rekurzívne voláme unit_propagation($Γ$,$I$).
Iterácia | $Γ$ | $I$ | Opis |
---|---|---|---|
1. | $\{\{¬a,¬b\},\{b,c\},\{¬c,d\},\{a\}\}$ | $\{\}$ | Množina $Γ$ obsahuje jednotkovú klauzulu $\{a\}$. |
2. | $\{\{¬b\},\{b,c\},\{¬c,d\}\}$ | $\{a↦1\}$ | Množina $Γ$ obsahuje jednotkovú klauzulu $\{¬b\}$. |
3. | $\{\{c\},\{¬c,d\}\}$ | $\{a↦1, b↦0\}$ | Množina $Γ$ obsahuje jednotkovú klauzulu $\{c\}$. |
4. | $\{\{d\}\}$ | $\{a↦1, b↦0, c↦1\}$ | Množina $Γ$ obsahuje jednotkovú klauzulu $\{d\}$. |
5 | {} | $\{a↦1, b↦0, c↦1, d↦1\}$ | Množina $Γ$ je prázdna, formula je splniteľná, model formuly je v $I$. |
Príklad
Aplikujte jednotkovú propagáciu na množinu klauzúl: $$Γ=\{\{¬a,¬b\},\{b,c\},\{¬c,d\},\{c\}\}.$$
Riešenie
Rekurzívne voláme unit_propagation($Γ$,$I$).
Iterácia | $Γ$ | $I$ | Opis |
---|---|---|---|
1. | $\{\{¬a,¬b\},\{b,c\},\{¬c,d\},\{c\}\}$ | $\{\}$ | Množina $Γ$ obsahuje jednotkovú klauzulu $\{c\}$. |
2. | $\{\{¬a,¬b\},\{d\}\}$ | $\{c↦1\}$ | Množina $Γ$ obsahuje jednotkovú klauzulu $\{d\}$. |
3. | $\{\{¬a,¬b\}\}$ | $\{c↦1,d↦1\}$ | Vráť $Γ$, $I$. |
V 3. iterácii $\Gamma$ neobsahuje jednotkovú klauzulu, nie je prázdna, neobsahuje prázdnu klauzulu. $\Gamma$ obsahuje zjednodušenú množinu klauzúl, v $I$ sa nachádza čiastočná interpretácia.
Eliminácia čistého literálu
Ďalšou procedúrou pre zjednodušenie formuly a orezanie prehľadávania rozhodovacieho stromu je eliminácia čistého literálu.
Čistý literál je taký literál, ktorého výroková premenná sa nachádza v klauzulách iba v jednom tvare a to buď ako atomický výrok alebo jeho negácia. Na základe toho je zrejme, akú hodnotu je potrebné mu priradiť, tak aby dané klauzuly s jeho výskytom boli pravdivé. Postupujeme nasledovne:
- Ak sa vyskytuje výroková premenná $p$ literálu v množine klauzúl len v pozitívnom tvare, potom do množiny interpretácie pridáme $I∪\{p↦1\}$ a odstránime všetky klauzuly, ktoré obsahujú $p$.
- Ak sa vyskytuje výroková premenná $p$ literálu v množine klauzúl len v negovanom tvare, potom do množiny interpretácie pridáme $I∪\{p↦0\}$ a odstránime všetky klauzuly, ktoré obsahujú $¬p$.
- Ak získame prázdnu klauzulu formula je nesplniteľná.
- Ak získame prázdnu množinu klauzúl, formula je splniteľná a množina interpretácie obsahuje jej model.
Poznámka
- Takéto priradenie pravdivostnej hodnoty čistému literálu nemá za následok nepravdivosť žiadneho literálu, keďže jeho komplementárna forma sa v množine klauzúl nenachádza.
- Tento postup je taktiež rekurzívny, keďže po eliminácii jedného čistého literálu môže vzniknúť situácia umožňujúca eliminovať ďalší čistý literál.
Algoritmus: Eliminácia čistého literálu:
Vstup: Množina klauzúl $Γ$ formuly $φ$ a množina interpretácie $I$
Výstup: Zjednodušená množina klauzúl $Γ'$ a množina interpretácie $I$ ak je množina splniteľná, UNSAT inak
pure_literal_elimination($Γ$,$I$):
- Pokiaľ v $Γ$ existuje čistý literál $l$:
- Priraď $l$ pravdivostnú hodnotu, ktorá robí klauzulu pravdivou.
- Pridaj $l$ do $I$.
- Odstráň všetky klauzuly obsahujúce $l$ z $Γ$.
- Ak $Γ=\{\}$, vráť $I$.
- Ak $\{\} \in Γ$, vráť UNSAT.
- Vráť výslednú množinu klauzúl $Γ'$ a množinu interpretácie $I'$.
Príklad
Aplikujte elimináciu čistého literálu na množinu klauzúl: $$Γ=\{\{¬a,b,c\},\{a,c\},\{¬a,¬b\},\{¬a,b,d\},\{¬b,¬d\}\}.$$
Riešenie
Rekurzívne voláme pure_literal_elimination($Γ$,$I$).
Iterácia | $Γ$ | $I$ | Opis |
---|---|---|---|
1. | $\begin{array}{l} \{\{¬a,b,c\},\{a,c\},\\ \{¬a,¬b\},\{¬a,b,d\},\\\{¬b,¬d\}\}\end{array}$ |
$\{\}$ | Literál $c$ je čistý. |
2. | $\begin{array}{l}\{\{¬a,¬b\},\{¬a,b,d\},\\ \{¬b,¬d\}\}\end{array}$ |
$\{c↦1\}$ | Literál $\neg a$ je čistý. |
3. | $\{\{¬b,¬d\}\}$ |
$\{c↦1, a↦0\}$ | Literál $¬b$ je čistý. |
4. | $\{\}$ | $\{c↦1, a↦0, b↦0\}$ | $Γ = \{\}$, vráť $\Gamma, I$ |
Poznámka
V predchádzajúcom príklade bola výsledkom čiastočná interpretácia $I$, ktorá neobsahuje $d$. To znamená, že pri tejto čiastočnej interpretácii môže premenná $d$, nadobúdať akúkoľvek hodnotu bez vplyvu na splniteľnosť formuly.
DPLL algoritmus
DPLL algoritmus očakáva na vstupe množinu klauzúl a množinu interpretácie výrokových premenných.
- V prvom kroku zjednoduší formulu prostredníctvom jednotkovej propagácie.
- V druhom kroku pokračuje zjednodušovaním formuly prostredníctvom eliminácie čistého literálu.
- Po prvých dvoch krokoch nasleduje kontrola:
- Ak je množina klauzúl prázdna, v tom prípade algoritmus vráti množinu interpretácie a zastaví vykonávanie.
- Ak množina klauzúl obsahuje prázdnu klauzulu, formula je nesplniteľná algoritmus vráti UNSAT a zastaví vykonávanie.
- Nasleduje voľba výrokovej premennej $p \in \Gamma$ a jej priradenie do množiny klauzúl ako jednotkovej klauzuly a množiny interpretácie $I$.
- Po pridaní danej premennej $\{p\}$ do $\Gamma$ a $p↦1$ do $I$ sa rekurzívne volá algoritmus. Ak vráti interpretáciu, vykonávanie sa zastaví.
- Ak vráti UNSAT, odstránime $\{p\}$ z množiny klauzúl a množiny interpretácie $I$. Pridáme $\{\neg p\}$ do $Γ$ a $p↦0$ do $I$ a volá sa rekurzívne algoritmus. Ak vráti interpretáciu, vykonávanie sa zastaví.
- Inak je formula nesplniteľná, vráti UNSAT.
Algoritmus: DPLL
Vstup: Formula $φ$ v CNF ako množina klauzúl $Γ$.
Výstup: Množina interpretácie $I$ ak $φ$ splniteľná, UNSAT inak
DPLL($Γ$,$I$):
-
- unit_propagation($Γ$,$I$).
-
- pure_literal_elimination($Γ$,$I$).
-
- Ak $Γ=\{\}$, vráť $I$.
-
- Ak $\{\} \in Γ$, vráť UNSAT.
-
- Zvoľ výrokovú premennú $p$ z $Γ$.
- 5.1. Ak DPLL($Γ∪\{p\}, I$) $≠$ UNSAT, vráť $I∪\{p↦1\}$.
- 5.2. Ak DPLL($Γ∪\{¬p\}, I$) $≠$ UNSAT, vráť $I∪\{p↦0\}$.
-
- UNSAT
Poznámka
- Aj napriek tomu, že tento algoritmus bol predstavený pred viac ako 60 rokmi, je stále základom mnohých moderných SAT solver-ov.
- Použité algoritmy orezávania dokážu výrazne zmenšiť formulu pri väčšine vstupov.
- Avšak stále má v najhoršom prípade exponenciálnu časovú zložitosť.
- V piatom kroku algoritmu prichádza k nedeterministickej voľbe. V tomto kroku sa v moderných implementáciách využívajú rôzne heuristiky, ktoré napovedajú ako najvhodnejšie zvoliť premennú.
Príklad
Pokúste sa nájsť model množiny klauzúl $Γ$ prostredníctvom algoritmu DPLL:
$ \begin{array}{l} Γ= \{ \{a, b, c, \neg d\} \{\neg a, b, \neg c, d\} \{a, \neg b, \neg c, \neg d\} \{a, b\} \{c, d\} \} \end{array} $
$I= \{ \}$
Riešenie
Rekurzívne voláme DPLL($Γ$,$I$):
Iterácia | $Γ$ | $I$ | Opis |
---|---|---|---|
1. | $\begin{array}{l} \{\{a, b, c, \neg d\}, \{\neg a, b, \neg c, d\},\\ \{a, \neg b, \neg c, \neg d\}, \{a, b\},\\ \{c, d\}\} \end{array}$ |
$\{\}$ | Voľba premennej $a\mapsto 1$, $\Gamma \cup \{a\}$ Rekurzívne volanie DPLL |
2. | $\begin{array}{l} \{\{a, b, c, \neg d\}, \{\neg a, b, \neg c, d\},\\ \{a, \neg b, \neg c, \neg d\}, \{a, b\},\\ \{c, d\}, \{a\}\} \end{array}$ |
$\{a \mapsto 1\}$ | Jednotková propagácia $\{a\}$ Rekruzívne volanie DPLL |
3. | $\begin{array}{l} \{ \{b, \neg c, d\},\\ \{c, d\}\} \end{array}$ |
$\begin{array}{l} \{a \mapsto 1\} \end{array}$ | Čistý literál $b$ |
4. | $\begin{array}{l} \{ \{c, d\}\} \end{array} $ |
$\begin{array}{l} \{a \mapsto 1, b \mapsto 1\} \end{array}$ | Čistý literál $c$ |
5. | $\begin{array}{l} \{ \} \end{array}$ |
$\begin{array}{l} \{a \mapsto 1, b \mapsto 1, c \mapsto 1\} \end{array}$ | SAT, $Γ=\{\}$, vráť $I$ |
Príklad
Pokúste sa nájsť model množiny klauzúl $Γ$ prostredníctvom algoritmu DPLL: $ \begin{array}{l} Γ= \{\\ \{ a , b , c \}, \{ ¬a,¬b, c \}, \{ a ,¬b,¬c \}, \{ ¬b,¬c, d \}, \\ \{ a ,¬d \}, \{ b , c , d \}, \{ ¬a, b ,¬c \}, \{ a , c , d \}, \{ ¬a,¬b,¬d \}, \\ \{ b , c ,¬d \}, \{ ¬a,¬b \}, \{ ¬b,¬c,¬d \}, \{ a ,¬c, d \} \\\} \end{array} $
$I= \{ \}$
Riešenie
Rekurzívne voláme DPLL($Γ$,$I$):
Iterácia | $\Gamma$ | $I$ | Opis |
---|---|---|---|
1. DPLL | $ \begin{array}{l} \{\{a , b , c \}, \{ ¬a,¬b, c \},\\ \{ a ,¬b,¬c \}, \{ ¬b,¬c, d \}, \\ \{ a ,¬d \}, \{ b , c , d \},\\ \{ ¬a, b ,¬c \}, \{ a , c , d \},\\ \{ ¬a,¬b,¬d \}, \{ b , c ,¬d \},\\ \{ ¬a,¬b \}, \{ ¬b,¬c,¬d \},\\ \{ a ,¬c, d \}\} \end{array} $ |
$\{ \}$ | $\Gamma$ nie je prázdna, neobsahuje prázdnu klauzulu, neobsahuje jednotkovú klauzulu ani čistý literál. Pokračujeme voľbou premennej napr. $a$, pridáme do množiny $Γ$ klauzulu $\{a\}$ a rekurzívne voláme DPLL. |
2. DPLL 1. UP | $\begin{array}{l} \{\{a , b , c \}, \{ ¬a,¬b, c \},\\ \{ a ,¬b,¬c \}, \{ ¬b,¬c, d \}, \\ \{ a ,¬d \}, \{ b , c , d \},\\ \{ ¬a, b ,¬c \}, \{ a , c , d \},\\ \{ ¬a,¬b,¬d \}, \{ b , c ,¬d \},\\ \{ ¬a,¬b \}, \{ ¬b,¬c,¬d \},\\ \{ a ,¬c, d \},\{ a \}\} \end{array}$ |
$\{\}$ | $\Gamma$ nie je prázdna, neobsahuje prázdnu klauzulu, obsahuje jednotkovú klauzulu $\{ a \}$, pokračujeme jednotkovou propagáciou. |
2. DPLL 2. UP | $\begin{array}{l} \{ \{ ¬b, c \},\\ \{ ¬b,¬c, d \}, \\ \{ b , c , d \},\\ \{ b ,¬c \}, \\ \{ ¬b,¬d \}, \{ b , c ,¬d \},\\ \{ ¬b \}, \{ ¬b,¬c,¬d \},\} \end{array}$ |
$\{a↦1\}$ | $\Gamma$ nie je prázdna, neobsahuje prázdnu klauzulu, obsahuje jednotkovú klauzulu $\{ ¬b \}$, pokračujeme jednotkovou propagáciou. |
2. DPLL 3. UP | $\begin{array}{l} \{ \{ c , d \}, \{ ¬c \}, \{ c ,¬d \}\} \end{array}$ |
$\begin{array}{l} \{a↦1,\\ b↦0\}\end{array}$ | $\Gamma$ nie je prázdna, neobsahuje prázdnu klauzulu, obsahuje jednotkovú klauzulu $\{ ¬c \}$, pokračujeme jednotkovou propagáciou. |
2. DPLL 4. UP | $\begin{array}{l} \{ \{ d \}, \{ ¬d \}\} \end{array}$ |
$\begin{array}{l} \{a↦1, \\ b↦0,\\ c↦0\}\end{array}$ | $\Gamma$ nie je prázdna, neobsahuje prázdnu klauzulu, obsahuje jednotkovú klauzulu $\{ d \}$, pokračujeme jednotkovou propagáciou. |
2. DPLL |
$\begin{array}{l} \{\{ \}\} \end{array}$ |
$\begin{array}{l} \{a↦1,\\ b↦0,\\c↦0,\\ d↦1\}\end{array}$ | UNSAT, $\Gamma = \{\{ \}\}$. Návrat (backtrack) na voľbu premennej $a$. Zmazanie $I$, do pôvodnej $Γ ∪\{\neg a\}$ |
3. DPLL 1. UP |
$\begin{array}{l} \{\{a , b , c \}, \{ ¬a,¬b, c \},\\ \{ a ,¬b,¬c \}, \{ ¬b,¬c, d \}, \\ \{ a ,¬d \}, \{ b , c , d \},\\ \{ ¬a, b ,¬c \}, \{ a , c , d \},\\ \{ ¬a,¬b,¬d \}, \{ b , c ,¬d \},\\ \{ ¬a,¬b \}, \{ ¬b,¬c,¬d \},\\ \{ a ,¬c, d \},\{\neg a\}\} \end{array}$ |
$\{\}$ | $\Gamma$ nie je prázdna, neobsahuje prázdnu klauzulu, obsahuje jednotkovú klauzulu $\{ ¬a \}$, pokračujeme jednotkovou propagáciou |
3. DPLL 2. UP | $\begin{array}{l} \{\{ b , c \},\\ \{ ¬b,¬c \}, \{ ¬b,¬c, d \}, \\ \{ ¬d \},\\ \{ b , c , d \},\\ \{ c , d \},\\ \{ b , c ,¬d \},\\ \{ ¬b,¬c,¬d \},\\ \{ ¬c, d \}\} \end{array}$ |
$\{a↦0\}$ | $\Gamma$ nie je prázdna, neobsahuje prázdnu klauzulu, obsahuje jednotkovú klauzulu $\{ ¬d \}$, pokračujeme jednotkovou propagáciou. |
3. DPLL 3. UP | $\begin{array}{l} \{\{ b , c \},\\ \{ ¬b,¬c \}, \{ ¬b,¬c \}, \\ \{ b , c \},\\ \{ c \},\\ \{ ¬c \}\} \end{array}$ |
$\begin{array}{l}\{a↦0,\\ d↦0\}\end{array} $ | $\Gamma$ nie je prázdna, neobsahuje prázdnu klauzulu, obsahuje jednotkovú klauzulu $\{ c \}$, pokračujeme jednotkovou propagáciou. |
3. DPLL | $\begin{array}{l} \{ \{ ¬b \}, \{ ¬b \}, \\ \{ \}\} \end{array}$ |
$\begin{array}{l}\{a↦0,\\ d↦0 \\ c↦1\}\end{array} $ | UNSAT, $\Gamma$ obsahuje prázdnu klauzulu. |
Postup
Krok 1: Pokúste sa dokázať formuly rezolučnou metódou
Úloha 1.1
$$p \lor \neg p$$
Úloha 1.2
$$(p \Rightarrow q) \Rightarrow (\neg q \Rightarrow \neg p)$$
Úloha 1.3
$$(p \lor q) \Rightarrow (p \lor r)$$
Úloha 1.4
$$(p \Rightarrow q) \land (q \Rightarrow r) \Rightarrow (p \Rightarrow r)$$
Úloha 1.5
$$p \land q \Rightarrow p$$
Úloha 1.6
$$p \Rightarrow (q \Rightarrow p)$$
Úloha 1.7
$$(p \Rightarrow q) \Rightarrow (\neg p \lor q)$$
Úloha 1.8
$$(p \lor q) \land (\neg p \lor r) \Rightarrow (q \lor r)$$
Úloha 1.9
$$p \Rightarrow (p \lor q)$$
Úloha 1.10
$$(p \Rightarrow q) \land (p \Rightarrow r) \Rightarrow (p \Rightarrow q \land r)$$
Krok 2: Prepíšte nasledujúce tvrdenia v prirodzenom jazyku do formúl výrokovej logiky a rozhodnite rezolučnou metódou či formula pod čiarou je dôsledkom formúl nad čiarou.
Úloha 2.1
Ak mám peniaze, tak si kúpim auto.
Peniaze mám.
----------------------------------------------
Kúpim si auto.
Úloha 2.2
Ak je Svätopluk učiteľ, tak je múdry.
Svätopluk je múdry.
----------------------------------------------
Svätopluk je učiteľ.
Úloha 2.3
Ak je zamračené a nezoberiem si dáždnik, zmoknem.
Nezoberiem si dáždnik.
----------------------------------------------
Zmoknem.
Úloha 2.4
Budem inžinier z informatiky ak urobím skúšku.
Urobím skúšku ak urobím zápočet
Urobím zápočet ak nebudem lenivý.
----------------------------------------------
Budem inžinier ak nebudem lenivý.
Úloha 2.5
Ak budem veľa cestovať, tak navštívim veľa krajín.
Ak navštívim veľa krajín, tak spoznám veľa ľudí.
Ak spoznám veľa ľudí, tak budem mať veľa priateľov.
----------------------------------------------
Ak budem veľa cestovať, budem mať veľa priateľov.
Úloha 2.6
Ak sa Argentína pripojí k aliancii, potom Brazília alebo Chile ju budú bojkotovať.
Ak sa Ekvádor pripojí k aliancii, potom Chile alebo Peru ju budú bojkotovať.
Chile nebojkotuje alianciu.
----------------------------------------------
Ak ani Brazília ani Peru nebojkotujú alianciu, tak sa ani Argentína ani Ekvádor nepripoja k aliancii.
Krok 3: Zistite či sú formuly splniteľné prostredníctvom jednoduchého SAT solveru
Úloha 3.1
$$ \begin{array}{l} \{ \{p, q\}, \{\neg p, r\}, \\ \{\neg q, s\}, \{\neg r, \neg s\}\} \end{array} $$
Riešenie
SAT
Úloha 3.2
$$ \begin{array}{l} \{ \{p, q\}, \{\neg p, r\}, \{\neg q, s\}, \\ \{\neg r, \neg s\}, \{\neg p, \neg s\}\} \end{array} $$
Riešenie
Model: SAT.
Úloha 3.3
$$ \begin{array}{l} \{ \{p, q, r\}, \{\neg p, q, r\}, \\ \{p, \neg q, r\}, \{p, q, \neg r\}, \\ \{\neg p, \neg q, r\}\} \end{array} $$
Riešenie
SAT
Úloha 3.4
$$ \begin{array}{l} \{ \{p, q, r\}, \{\neg p, \neg q, r\}, \{\neg p, q, \neg r\}, \\ \{p, \neg q, \neg r\}, \{\neg p, \neg q, \neg r\}\} \end{array} $$
Riešenie
Model: SAT.
Úloha 3.5
$$ \begin{array}{l} \{ \{p, \neg q, \neg r\}, \{\neg p, q, r\}, \\ \{p, \neg q, r\}, \{\neg p, q, \neg r\}\} \end{array} $$
Riešenie
SAT
Úloha 3.6
$$ \begin{array}{l} \{ \{p, q, r\}, \{\neg p, \neg q, r\},\\ \{\neg p, q, \neg r\}, \{p, \neg q, \neg r\}, \\ \{\neg p, \neg q, \neg r\}, \{\neg p, \neg r\}\} \end{array} $$
Riešenie
SAT
Úloha 3.7
$$ \begin{array}{l} \{ \{p, q, r\}, \{\neg p, \neg q, r\}, \\ \{\neg p, q, \neg r\}, \{p, \neg q, \neg r\}, \{\neg p, \neg q, \neg r\}, \\ \{\neg p, \neg r\}, \{q, \neg r\}\} \end{array} $$
Riešenie
SAT
Úloha 3.8
$$ \begin{array}{l} \{ \{p, q\}, \{\neg p, q, r\}, \\ \{\neg q, r\}, \{\neg r\}\} \end{array} $$
Riešenie
UNSAT.
Úloha 3.9
$$ \begin{array}{l} \{ \{p, q, r\}, \{\neg p, \neg q, r\},\\ \{\neg p, q, \neg r\}, \{p, \neg q, \neg r\}, \{\neg p, \neg q, \neg r\}, \\\{\neg p, \neg r\}, \{q, r\} \} \end{array} $$
Riešenie
SAT
Krok 4: Aplikujte jednotkovú propagáciu
Úloha 4.1
$$\{a\}, \{\neg a, b\}, \{\neg b, c\}, \{\neg c\}$$
Úloha 4.2
$$\{\neg a\}, \{a, \neg b, c\}, \{\neg c, d\}, \{\neg d\}$$
Úloha 4.3
$$\{a\}, \{b\}, \{\neg a, \neg b, c\}, \{\neg c\}$$
Úloha 4.4
$$\{\neg a, b\}, \{\neg b, c\}, \{\neg c, d\}, \{\neg d, e\}, \{a\}$$
Úloha 4.5
$$\{a\}, \{\neg a, b\}, \{b, c\}, \{\neg c, d\}, \{\neg d\}$$
Úloha 4.6
$$\{b\}, \{\neg a, c\}, \{\neg b, \neg c, d\}, \{\neg d\}$$
Úloha 4.7
$$\{a\}, \{\neg a, b\}, \{b, \neg c\}, \{c, \neg d\}, \{\neg d\}$$
Úloha 4.8
$$\{a\}, \{b\}, \{\neg a, \neg b, c\}, \{\neg c, d\}, \{\neg d, e\}, \{\neg e\}$$
Úloha 4.9
$$\{a\}, \{c, \neg d\}, \{\neg b, \neg c, \neg e\}, \{\neg a, \neg e\}, \{\neg d, e\}$$
Úloha 4.10
$$\{b\}, \{\neg a, c\}, \{\neg b, \neg c, d\}, \{e\}, \{\neg d, e\}$$
Krok 5: Aplikujte elimináciu čistého literálu
Úloha 5.1
$$\{a, \neg b\}, \{a, b\}, \{\neg b, c\}, \{\neg c, d\}$$
Úloha 5.2
$$\{\neg a, c\}, \{ \neg b, c\}, \{\neg c, d\}, \{\neg d\}$$
Úloha 5.3
$$\{a, d\}, \{b, e\}, \{\neg a, \neg b, c\}, \{\neg c, d\}$$
Úloha 5.4
$$\{\neg a, b, e\}, \{\neg b, c\}, \{\neg c, d, e\}, \{\neg d, e\}, \{a, e\}$$
Úloha 5.5
$$\{a,\neg e\}, \{\neg a, b\}, \{b, c,\neg e\}, \{\neg c, d\}, \{\neg d,\neg e\}$$
Úloha 5.6
$$\{b,\neg e\}, \{\neg a, c\}, \{\neg b, \neg c, d,\neg e\}, \{\neg d\}$$
Úloha 5.7
$$\{a,\neg e\}, \{\neg a, b\}, \{b, \neg e, \neg c\}, \{c, \neg d\}, \{\neg d,\neg e\}$$
Úloha 5.8
$$\{a, \neg e\}, \{b,\neg e\}, \{\neg a, \neg b, c\}, \{\neg c, d\}, \{\neg d, c\}, \{\neg e\}$$
Úloha 5.9
$$\{a,\neg e\}, \{c, \neg d\}, \{\neg b, \neg c, \neg e\}, \{\neg a, \neg e\}, \{\neg d, c\}$$
Úloha 5.10
$$\{b,\neg e\}, \{\neg a, c\}, \{b, \neg c, d\}, \{e, c\}, \{\neg d, e\}$$
Krok 6: Pokúste sa nájsť model formúl prostredníctvom algoritmu DPLL
Úloha 6.1
$$ \begin{array}{l} \{ \{p, q\}, \{\neg p, r\}, \\ \{\neg q, s\}, \{\neg r, \neg s\}\} \end{array} $$
Riešenie
Model: $$\{p \mapsto 1, q \mapsto 0, r \mapsto 1, s \mapsto 0\}$$
Úloha 6.2
$$ \begin{array}{l} \{ \{p, q\}, \{\neg p, r\}, \{\neg q, s\}, \\ \{\neg r, \neg s\}, \{\neg p, \neg s\}\} \end{array} $$
Riešenie
Model: $$\{p \mapsto 1, q \mapsto 0, r \mapsto 1, s \mapsto 0\}$$
Úloha 6.3
$$ \begin{array}{l} \{ \{p, q, r\}, \{\neg p, q, r\}, \\ \{p, \neg q, r\}, \{p, q, \neg r\}, \\ \{\neg p, \neg q, r\}\} \end{array} $$
Riešenie
Model: $$\{p \mapsto 1, q \mapsto 1, r \mapsto 1\}$$
Úloha 6.4
$$ \begin{array}{l} \{ \{p, q, r\}, \{\neg p, \neg q, r\}, \{\neg p, q, \neg r\}, \\ \{p, \neg q, \neg r\}, \{\neg p, \neg q, \neg r\}\} \end{array} $$
Riešenie
Model: $$\{p \mapsto 1, q \mapsto 0, r \mapsto 0\}$$
Úloha 6.5
$$ \begin{array}{l} \{ \{p, \neg q, \neg r\}, \{\neg p, q, r\}, \\ \{p, \neg q, r\}, \{\neg p, q, \neg r\}\} \end{array} $$
Riešenie
Model: $$\{p \mapsto 1, q \mapsto 1, r \mapsto 1\}$$
Úloha 6.6
$$ \begin{array}{l} \{ \{p, q, r\}, \{\neg p, \neg q, r\},\\ \{\neg p, q, \neg r\}, \{p, \neg q, \neg r\}, \\ \{\neg p, \neg q, \neg r\}, \{\neg p, \neg r\}\} \end{array} $$
Riešenie
Model: $$\{p \mapsto 1, q \mapsto 0, r \mapsto 0\}$$
Úloha 6.7
$$ \begin{array}{l} \{ \{p, q, r\}, \{\neg p, \neg q, r\}, \\ \{\neg p, q, \neg r\}, \{p, \neg q, \neg r\}, \{\neg p, \neg q, \neg r\}, \\ \{\neg p, \neg r\}, \{q, \neg r\}\} \end{array} $$
Riešenie
Model: $$\{p \mapsto 1, q \mapsto 0, r \mapsto 0\}$$
Úloha 6.8
$$ \begin{array}{l} \{ \{p, q\}, \{\neg p, q, r\}, \\ \{\neg q, r\}, \{\neg r\}\} \end{array} $$
Riešenie
Model: UNSAT.
Úloha 6.9
$$ \begin{array}{l} \{ \{p, q, r\}, \{\neg p, \neg q, r\},\\ \{\neg p, q, \neg r\}, \{p, \neg q, \neg r\}, \{\neg p, \neg q, \neg r\}, \\\{\neg p, \neg r\}, \{q, r\} \} \end{array} $$
Riešenie
Model: $$\{p \mapsto 0, q \mapsto 1, r \mapsto 0\}$$