Grundläggande logik och modellteori Kapitel 7: SAT-lösare Henrik Björklund Umeå universitet 29. september, 2014
SAT En instans av SAT är en mängd av mängder av literaler. Exempel: {{p, q, r}, {p, q, s}, {q}, {p, q, s}} Frågan är om det finns en tolkning v som gör minst en litteral per klausul sann. Fråga: Finns en sådan tolkning för exemplet ovan? Svar: Ja, det finns en sådan tolkning: v(p) = T v(q) = T v(r) = F v(s) = F
Satisfierbarhetsekvivalens Låt S och S vara mängder av klausuler. De är satisfierbarhetsekvivalenta om S är satisfierbar om och endast om S är satisifierbar. Vi skriver S S. Exempel: {{p, q}, {p}} {q} Notera: {{p, q}, {p}} {q}!
Rena litteraler Definition: Låt S vara en mängd klausuler. En ren litteral i S är en litteral l som förekommer i någon klausul i S men sådan att dess komplement l c inte förekommer i någon klausul i S. Exempel: q är en ren litteral i {{p, q}, {p}}.
Eliminera rena litteraler Sats: Låt S vara en mängd klausuler och låt l vara en ren litteral i S. Låt S vara mängden av klausuler vi får från S genom att ta bort alla klausuler som innehåller l. Då gäller S S. Exempel: {{p, q}, {p} {p}
Eliminera rena litteraler Bevis: Om S är satisfierbar så är S satisifierbar eftersom S S. Antag att S är satisfierbar. Då finns en tolkning v sådan att v(c) = T för alla C S. Utåka v till v så att v (l) = T och v (p) = v(p) för alla atomer utom den som ingår i l. Ta en godtycklig klausul C i S. Om C S så har vi v (C) = v(c) = T. Om, å andra sidan, C S så gäller l C. Eftersom v (l) = T har vi v (C) = T. Alltså satisfierar v varje klausul i S och därmed S.
Singeltonklausuler Definition: En singeltonklausul är en klausul som innehåller exakt en litteral. Sats: Låt {l} S vara en singeltonklausul. Låt S vara den mängd klausuler vi får från S genom att ta bort alla klausuler som innehåller l och ta bort l c från alla kvaravarande klausuler där den förekommer. Då gäller S S. Exempel: {{p}, {p, q}, {p, q, r}} {{q, r}} När vi använder oss av denna sats säger vi att vi använder singeltonklausulregeln.
Singeltonklausuler Bevis: Antag att S är satisifierbar och att v är en modell för S. Då måste v(l) = T. Låt C vara en godtycklig klausul i S. Om C S så v(c) = T. Om, å andra sidan, C S så tillhör klausulen C {l c }S. Vi vet att v(l) = T och därmed att v(l c ) = F. Alltså måste det finnas en annan litteral l i C sådan att v(l ) = T och vi får att v(c) = T. Alltså är S satisfierbar.
Singeltonklausuler Bevis (forts.): Antag att S är satisfierbar och att v är en modell för S. Utåka v till en tolkning för S sådan att v(l) = T och v (p) = v(p) för alla atomer som förekommer i S. Låt C vara en godtycklig klausul i S. Om C S så v (C) = T. Om C = C {l c }, för någon C S så v (C) = v(c ) = T. Den enda återstaände möjligheten är att C innehåller l. I så fall gäller v (C) = v (l) = T.
Superklausuler Vi har redan tidigare sett att vi kan ta bort klausuler som är superklausuler till någon annan klausul i formeln: Sats: Låt S vara en mängd av klausuler. Låt C, C S vara sådana att C C. Då gäller att S S {C }.
Komplementering Definition: Låt S vara en mängd klausuler och U en delmängd av de atomer som förekommer i S. Då är R U (S) den mängd klausuler vi får från S genom att ersätta varje literal l vars atom tillhör U med l c. Sats: För varje mängd S av klausuler och varje mängd U av atomer gäller att S R U (S). Bevis: Antag att S är satisfierbar och att tolkningen v är en modell för S. Låt v vara en tolkning som definieras genom v (p) = v(p) om p inte tillhör U v (p) = v(p) om p tillhör
Komplementering Bevis (forts).: Låt C vara en godtycklig klausul i S och C = R U ({C}). Eftersom v är en modell för S vet vi att v(c) = T och därmed att v(l) = T för någon litteral l C. Om atomen p i l inte tillhör U har vi att l tillhör R U ({C}) och att v (l) = v(l) = T. Om p tillhör U så tillhör l c klausulen R U ({C}). Vi har också v (l c ) = v(l) = T. Alltså tillfredsställs R U ({C}) av v. Eftersom klausulen C var godtycklig kan vi sluta oss till att alla klausuler i R U (S) tillfredsställs av v och därmed att R U (S) är satisfierbar. Beviset för den andra rikningen är symmetriskt.
Variabeleliminering genom resolution Sats: Låt S vara en mängd klausuler och p en atom i S. Låt S vara den mängd klausuler vi får från S genom att utföra resolution på alla par av klausuler C, C sådana att p C och p C, lägga till alla resolventer och sedan ta bort alla klausuler som innehåller p eller p. Då gäller S S. Bevis: Övning. När vi använder oss av detta resultat säger vi att vi eliminerar atomen p genom resolution.
Davis-Putnams algoritm Input: En mängd A av klausuler. Upprepa: Upprepa: Applicera singeltonklausulregeln Applicera regeln för rena litteraler Tills det inte finns någon singeltonklausul eller ren litteral Välj en atom p och eliminera den genom resolution. Terminera om den tomma klausulen produceras returnera ej satisfierbar om ingen av reglerna (singeltonklausul, ren litteral, resolution) går att tillämpa returnera satisfierbar
Davis-Putnam: problem Att välja ut en atom i taget och eliminera dem en i taget är för det mesta ineffektivt.
Singeltonpropagering och partiella tolkningar Låt S är en mängd klausuler och {l} en singeltonklausul i S. Låt S vara den mängd klausuler vi får genom att använda singeltonregeln på S med avseende på l. Om S har en modell v så är tolkningen v sådan att v (l) = T och v i ovrigt är identisk med v en modell för S. Att så länge det går använda sineltonregeln och samtidigt bygga upp en partiell tolkning kallas för singeltonpropagering.
Partiella tolkningar och atomeliminering Låt S vara en mängd klausuler och v en partiell tolkning för S. Låt p vara en atom sådan att v(s) är definerad. Konstruera S från S som följer. Låt l vara den litteral (p eller p) som innehåller p och sådan att v(l) = T. Ta bort alla klausuler som innehåller l. Ta bort l c från alla återstaände klausuler. Då gäller att S kan satisfieras av en utökning av v om och endast om S kan det. Vi säger att vi eliminerar atomen p med avseende på v.
DPLL-algoritmen Input: En mängd S av klausuler och en partiell tolkning v. DPLL(S,v) Konstruera S och v genom singeltonpropagering Evaluera v (S ). Om v (S ) = T returnera v. Om v (S ) = F, returnera ej satisifierbar. Annars, fortsätt. Välj en atom p. Välj ett sanningsvärde V för p. Låt v vara v utökad med v (p) = V. S fås från S genom att eliminera p med avseende på v (p). resultat DPLL(S,v ) om resultat inte är ej satisfierbar, returnera resultat v är v utökad med v = V, där V är komplementet till V. S fås från S genom att eliminera p med avseende på v (p). resultat DPLL(S,v ) returnera resultat
Hornklausuler Definition: En Hornklausul är en klausul där högst en litteral är en icke-negerad atom. Exempel på Hornklausuler: {p, q, r, s} {q, r, s} {p}
Hornklausuler Vi kan se en Hornklausul som en implikation: (p q r s) (q r s) p ( q r s) (q r s) p p Ofta skrivs de andra vägen: (p q r s) p (q r s) ( q r s) (q r s) p p (Känns igen från PROLOG.)
HORN-SAT Sats: Satisfierbarhetsproblemet för mängder av Hornklausuler (HORN-SAT) är avgörbart i polynomiell tid. Algoritm: Utför singeltonpropagering så långt det går. Om vi någon gång under processen har både en singeltonklausul {p} och dess komplement {p} så är formeln ej satisfierbar. Annars är den satisfierbar genom att sätta alla återstaände atomer till F.