{{NAIL021 Skripta}}
V této kapitole nadefinujeme literály, logické operátory, Boolovské formule a funkce. Popíšeme normální tvary formulí (DNF, CNF) a jejich vlastnosti. Dále
zavedem implikanty, konsekventy, rezoluci (konsensus). V závěru popíšeme konsenzuální metodu a dokážeme její úplnost.
Boolovské funkce
jsou boolovské funkce
je ohodnocení proměnných
je \negace x
proměnné a negované proměnné jsou literály
jsou logické operátory (spojky)
Boolovská formule
Boolovskou formuli definujme rekurzivně:
každý literál je Boolovská formule (dále jen formule)
pokud jsou A, B formule, pak jsou také formule
Normální formy
Disjunkci literálů nazýváme klauzule, konjunkci literálů nazýváme term. Formule je v konjunktivní normální formě (CNF), pokud je
konjunkcí klauzulí. Formule je v disjunktivní normální formě (DNF), pokud je disjunkcí termů.
Ekvivalentní formule
Následující pravidla definují ekvivalentní formule, lze je využít k úpravě formulí:
(de Morganovo pravidlo)
(de Morganovo pravidlo)
(distributivita )
(distributivita )
Boolovská funkce je funkce . Lze ji reprezentovat např. formulí nebo tabulkou.
0 | 0 | 1 | 0 |
0 | 1 | 0 | 1 |
0 | 1 | 1 | 0 |
1 | 0 | 0 | 1 |
1 | 0 | 1 | 1 |
1 | 1 | 0 | 0 |
1 | 1 | 1 | 1 |
Vektory, pro které , nazýváme true-pointy, ostatní, pro které označujeme jako false-pointy.
Pozorování: Ke každé formuli existuje logicky ekvivalentní formule v CNF i DNF.
Důkaz : Pokud funkce reprezentujeme tabulkou, pak můžeme sestavit normální formy:
DNF: disjunkce termů odpovídajících true-pointům dané funkce
CNF: konjunkce klauzulí odpovídajících false-pointům dané funkce
Pozorování: Počet boolovských funkcí na n proměnných je (tabulka má řádků, na každém může být hodnota 1 1 nebo 0).
Uspořádání boolovských funkcí
Definujme relaci takto: právě tehdy, když . Odbobně .
V následující části se zaměříme na DNF. Věci, které dokážeme, platí analogicky i pro CNF.
Definice: Term T je implikantem funkce f, pokud (korektně ). Term T je primární implikant, pokud po vypuštění libovolného literálu přestane být implikantem.
Věta: Pokud DNF F reprezentuje funkci f a T je implikant f, pak také reprezentuje f.
Důkaz:
triviálně
z definice implikantu
Definice: Pokud jsou termy a (tj. je "kratší"), říkáme, že absorbuje .
Pozorování: Pokud reprezentuje f a , pak reprezentuje tutéž funkci.
Definice: Termy a mají konflikt v proměnné x, pokud
a (nebo a ). Řekneme, že mají konsenus, pokud mají konflikt právě v jedné proměnné. Označíme-li termy , pak .
Tvrzení: Nechť jsou implikanty f mající konsenzus. Pak je také implikantem f.
Důkaz:
Definice: Kanonická DNF funkce f je disjunkce všech primárních implikantů funkce f.
Konsenzuální metoda
Vstup: DNF reprezentující f, výstup: kanonická DNF funkce f.
Dokud se F může změnit:
proveď všechny absorbce, které je možné provést
najdi dva termy , že není absorbován žádným termem v F a přidej k F
Důkaz konečnost: Existuje konečně mnoho termů na n proměnných. Žádný term není přidán dvakrát (díky tranzitivitě absorbce).
Důkaz správnosti: nechť je výstupem algoritmu a nechť je primární implikant f, který není obsažen v .
Označme . Množina je neprázdná, obsahuje alespoň samotné .
Nechť je nejdelší (dle počtu literálů) term v .
(obsahuje všechny proměnné), z definice Q není implikantem žádného , pak musí mít konflikt s každým .
, což je spor, takové Q ani P nemůže existovat
, pak existuje proměnná x neobsažená v Q. Zkoumejme termy . Nejsou v (Q je nejdelší), avšak jsou implikanty P (a celé f). Pak existují takové, že (Qx implikuje pravdivost formule, musí být splněn nějaký její term). obsahuje x (a nějaké proměnné z Q, jinak by ), obsahuje . Pak . Neexistuje (jinak by ). To je spor s fungováním algoritmu ( měl být přidán, ale nebyl).
Složitost konsenzualní metody
Oba kroky měnící F v algoritmu konsenzualní metody lze provést v polynomiálním čase.
Cyklus ovšem může mít exponenciální počet iteraci. Ve speciálních případech (např. pokud je omezena délka klauzule, jako třeba pro 2-SAT) lze dosáhnout lepších výsledků.
Kanonická formule k
ParseError: KaTeX parse error: Undefined control sequence: \F at position 1: \̲F̲
je exponenciálně dlouhá vzhledem k délce vstupní formule.