Čtení: 50 minHodnotí se: test 2 (15 b), zkouška

3 Výroková logika a SAT

Po přečtení umíš
  • převést formuli Cejtinovou transformací
  • provést jednotkovou propagaci a DPLL
  • nakreslit implikační graf, najít první UIP a úroveň návratu
  • zapsat jednoduchou úlohu jako SAT

Test 2 je za 15 bodů na 45 minut a píše se na papír bez pomůcek. Počítat budeš ručně, proto si postupy opravdu vyzkoušej tužkou.

3.1 Ukázka: co dělá SAT řešič

Máme (¬u∨w)∧(u∨v)∧(u)∧(¬w∨z)(\neg u \vee w) \wedge (u \vee v) \wedge (u) \wedge (\neg w \vee z).

Klauzule (u)(u) nedává na výběr: u=1u = 1. Tím se (¬u∨w)(\neg u \vee w) změní na (w)(w), takže w=1w = 1, a stejně z=1z = 1. Formule je vyřešená bez jediného tipu. To je jednotková propagace, základ všech řešičů.

3.2 Pojmy

Definice 3.2 (Splnitelnost)

Formule je splnitelná, pokud má model, pravdivá, pokud je splněná každým ohodnocením, a sporná, pokud nemá model. Rozhodnutí o splnitelnosti je problém SAT, který je NP-úplný.

Definice 3.3 (CNF)

Konjunkce klauzulí. Klauzule je disjunkce literálů a literál je proměnná nebo její negace.

Převod na ekvivalentní CNF může exponenciálně narůst. Formule (x1∧y1)∨⋯∨(xn∧yn)(x_1 \wedge y_1) \vee \dots \vee (x_n \wedge y_n) dá 2n2^n klauzulí. Pro SAT ale stačí ekvisplnitelnost: nová formule je splnitelná právě tehdy, když původní.

3.3 Cejtinova transformace

Pro každý vnitřní uzel stromu formule zaveď pomocnou proměnnou, zapiš ekvivalenci a přidej kořen.

Příklad 3.4 (Cejtin pro x⇒(y∧z)x \Rightarrow (y \wedge z))

Zkus si to nejdřív sám: kolik pomocných proměnných a kolik klauzulí?

Řešení

Vnitřní uzly jsou dva: a2⇔(y∧z)a_2 \Leftrightarrow (y \wedge z) a a1⇔(x⇒a2)a_1 \Leftrightarrow (x \Rightarrow a_2). Kořen je (a1)(a_1).

Rozepsáno do klauzulí:

  • a1⇔(¬x∨a2)a_1 \Leftrightarrow (\neg x \vee a_2): (¬a1∨¬x∨a2)(\neg a_1 \vee \neg x \vee a_2), (a1∨x)(a_1 \vee x), (a1∨¬a2)(a_1 \vee \neg a_2)
  • a2⇔(y∧z)a_2 \Leftrightarrow (y \wedge z): (¬a2∨y)(\neg a_2 \vee y), (¬a2∨z)(\neg a_2 \vee z), (a2∨¬y∨¬z)(a_2 \vee \neg y \vee \neg z)
  • kořen: (a1)(a_1)

Celkem 7 klauzulí a délka roste lineárně. Ověřeno hrubou silou: modely po zúžení na x,y,zx, y, z odpovídají modelům původní formule.

Tahák (Klauzule pro a⇔a \Leftrightarrow spojka)
Podformule Klauzule
a⇔¬ba \Leftrightarrow \neg b (¬a∨¬b),(a∨b)(\neg a \vee \neg b), (a \vee b)
a⇔(b∧c)a \Leftrightarrow (b \wedge c) (¬a∨b),(¬a∨c),(a∨¬b∨¬c)(\neg a \vee b), (\neg a \vee c), (a \vee \neg b \vee \neg c)
a⇔(b∨c)a \Leftrightarrow (b \vee c) (a∨¬b),(a∨¬c),(¬a∨b∨c)(a \vee \neg b), (a \vee \neg c), (\neg a \vee b \vee c)
a⇔(b⇒c)a \Leftrightarrow (b \Rightarrow c) (¬a∨¬b∨c),(a∨b),(a∨¬c)(\neg a \vee \neg b \vee c), (a \vee b), (a \vee \neg c)

3.4 DPLL

Definice 3.6 (Jednotková klauzule)

Nerozhodnutá klauzule, jejíž všechny literály kromě jednoho jsou nesplněné. Ten poslední musí být pravdivý.

DPLL je backtracking s jednotkovou propagací a volitelně s pravidlem čisté proměnné: proměnná vyskytující se jen v jedné polaritě se dá rovnou ohodnotit. Čas je O(2∣Var∣)O(2^{|Var|}) a paměť lineární.

Slabina: při konfliktu se vrací chronologicky a opakuje tytéž chyby v nesouvisející části formule.

3.5 CDCL

Tři věci navíc: implikační graf, učení klauzulí a skok zpět.

Definice 3.7 (Implikační graf)

Acyklický graf ohodnocení. Vrchol je ohodnocená proměnná s úrovní rozhodnutí. Hrany vedou z literálů předchůdcovské klauzule do propagovaného literálu. Vrchol KK značí konflikt.

Definice 3.8 (UIP)

Unikátní implikační bod je vrchol na aktuální úrovni, kterým vedou všechny cesty z rozhodovacího vrcholu do KK. První UIP je ten nejblíž ke konfliktu.

Příklad 3.9 (Konflikt a první UIP)

Formule: c1=(¬x1∨x2)c_1 = (\neg x_1 \vee x_2), c2=(¬x2∨x3∨x5)c_2 = (\neg x_2 \vee x_3 \vee x_5), c3=(¬x2∨x4∨x5)c_3 = (\neg x_2 \vee x_4 \vee x_5), c4=(¬x3∨¬x4)c_4 = (\neg x_3 \vee \neg x_4), c5=(x2∨x6)c_5 = (x_2 \vee x_6).

Rozhodnutí: x5=0x_5 = 0 na úrovni 1, x1=1x_1 = 1 na úrovni 2. Najdi konflikt, první UIP, naučenou klauzuli a úroveň návratu.

Nápověda

Propaguj na úrovni 2. Pak rezolvuj konfliktní klauzuli s předchůdci, dokud v ní nezůstane jediný literál z úrovně 2.

Řešení
x1@2x2@2x3@2x4@2K¬x5@1
Všechny cesty z x1 do K vedou přes x2, takže první UIP je x2. Vrchol ¬x5 je z nižší úrovně.

Propagace. c1c_1 dá x2=1x_2 = 1. Pak c2c_2 dá x3=1x_3 = 1 a c3c_3 dá x4=1x_4 = 1. Klauzule c4c_4 je nesplněná, konflikt.

Analýza rezolucí od konfliktu:

  1. c4c_4 a c3c_3 přes x4x_4: (¬x2∨¬x3∨x5)(\neg x_2 \vee \neg x_3 \vee x_5)
  2. výsledek a c2c_2 přes x3x_3: (¬x2∨x5)(\neg x_2 \vee x_5)

Teď je z úrovně 2 jediný literál, ¬x2\neg x_2. První UIP je x2x_2.

Naučená klauzule: (¬x2∨x5)(\neg x_2 \vee x_5).

Skok zpět: na druhou nejvyšší úroveň v klauzuli, tedy 1. Klauzule je tam jednotková a vynutí x2=0x_2 = 0. Pak c1c_1 dá x1=0x_1 = 0 a c5c_5 dá x6=1x_6 = 1.

Varování 3.10 (Kam se skáče)

Ne o jednu úroveň zpět, ale na druhou nejvyšší úroveň v naučené klauzuli. Klauzule musí být po návratu vynucující.

3.6 Další techniky

3.7 Modelování

Hamiltonovská kružnice a kódování xp,vx_{p,v} jsou stejné jako v kapitole ICC Modelování. U 8-puzzle se používá časová expanze: proměnná pro každé políčko, hodnotu a čas.

3.8 Typické chyby

3.9 Kvíz

Kvíz

1. Co zaručuje Cejtinova transformace?
2. Ohodnocení x=0x = 0, y=0y = 0. Klauzule (x∨y∨¬z)(x \vee y \vee \neg z) je:
3. Naučená klauzule má literály na úrovních 2, 5 a 7. Kam CDCL skočí?
4. Co platí pro CDCL? Může být správně více možností, ale také žádná.
5. Která proměnná je čistá ve formuli (x∨y)∧(¬x∨y)∧(¬y∨z)(x \vee y) \wedge (\neg x \vee y) \wedge (\neg y \vee z)?
6. Proč CDCL potřebuje, aby naučená klauzule byla vynucující?
Ukázat řešeníCDCL nemá explicitní větvení. Po skoku musí klauzule hned propagovat, jinak by nezajistila změnu a systematičnost.

3.10 Příklady na procvičení

Cvičení 3.11

Převeď Cejtinem ¬(x∧y)\neg(x \wedge y).

Řešení

a2⇔(x∧y)a_2 \Leftrightarrow (x \wedge y): (¬a2∨x)(\neg a_2 \vee x), (¬a2∨y)(\neg a_2 \vee y), (a2∨¬x∨¬y)(a_2 \vee \neg x \vee \neg y). Dále a1⇔¬a2a_1 \Leftrightarrow \neg a_2: (¬a1∨¬a2)(\neg a_1 \vee \neg a_2), (a1∨a2)(a_1 \vee a_2). Kořen (a1)(a_1).

Cvičení 3.12

Rozhodni, zda je formule pravdivá: (x⇒y)∨(y⇒x)(x \Rightarrow y) \vee (y \Rightarrow x).

Řešení

Ano. Je-li y=1y = 1, platí první člen. Je-li y=0y = 0, platí druhý. Žádné ohodnocení ji nezfalzifikuje.

3.11 Tahák

Tahák
  • CNF: klauzule = OR literálů, formule = AND klauzulí.
  • Cejtin: proměnná na vnitřní uzel, ekvivalence na klauzule, přidej kořen.
  • Jednotková klauzule vynutí poslední literál.
  • DPLL = backtracking + UP + čisté proměnné.
  • CDCL: konflikt → rezoluce s předchůdci → jediný literál z aktuální úrovně = první UIP.
  • Skok na druhou nejvyšší úroveň v naučené klauzuli.
  • WalkSAT neúplný, CDCL úplný.

Zdroje

  • UMI přednáška 4: formule strany 2–6, CNF 8, Cejtin 10–11, jednotková propagace 12–13, DPLL 14–15, implikační graf 16–19, CDCL 20
  • UMI přednáška 5: analýza konfliktu 2–6, rezoluční průchod 8–9, sledované literály 11–14, lokální hledání 15–17
  • UMI seminář 3: logika pro umělou inteligenci