Image:Npc.jpg

:: Literál je buď proměnná nebo její negace. :: Pozitivní literál je každá proměnná xx . :: Negativní literál je každá negace proměnnej x\overline x. :: Klauzule je disjunkcí literálů, která neobsahuje dva literály s touž proměnnou xyzx ∨ \overline y ∨ \overline z. :: Formule φφ je v konjunktivně normální formě (KNF), pokud je konjunkcí klauzulí (xy)z(x ∨ y) ∧ \overline z. :: Je-li φφ formulí na n proměnných a t{0,1}nt ∈ \{0, 1\}^n , pak φ(t)φ(t) značí hodnotu φφ v ohodnocení tt.

Splnitelnost formule v KNF (SAT)

  • Instance: Formule φφ na nn proměnných v KNF

  • Otázka: ohodnocení, pro které je φφ splněná?

Důkaz transformací KACHL ∝ SAT: pomocí proměnných xijkx_{ijk}, kde xijk=1x_{ijk} = 1, pokud na pozici

ParseError: KaTeX parse error: Undefined control sequence: \[ at position 1: \̲[̲i,j]

se nachází kachlík typu kk. Jednotlivé klauzule se vytvoří tak, aby zaručovaly, že na každé pozici je právě jeden kachlík, že kachlíky navazují horizontálně, vertikálně i na kraje stěny.

{{theorem

| SAT je NP-úplný problém | NP-úplnost SAT

}}

Dk (KACHL → SAT - myšlenka) ::

:: pomocí proměnných xijkx_{ijk}, kde xijk=1x_{ijk} = 1, pokud na pozici

ParseError: KaTeX parse error: Undefined control sequence: \[ at position 1: \̲[̲i,j]

se nachází kachlík typu kk. Jednotlivé klauzule se vytvoří tak, aby zaručovaly, že na každé pozici je právě jeden kachlík, že kachlíky navazují horizontálně, vertikálně i na kraje stěny.

Dk (KACHL → SAT) ::

To, že SATSAT patří do NP, plyne z toho, že pokud dostaneme vektor t0,1nt ∈ {0, 1}^n, můžeme spočítat hodnotu φ(t) v polynomiálním čase. Certifikátem kladné odpovědi je tedy splňující ohodnocení. Toto ohodnocení je ve skutečnosti řešením úlohy splnitelnosti, v níž chceme splňující ohodnocení nalézt a ne jen zjistit, zda existuje, tato úloha tedy patří do NPF. NPNP-těžkost splnitelnosti ukážeme převodem z problému Kachlíkování. Uvažme instanci Kachlíkování danou množinou barev BB, přirozeným číslem ss, čtvercovou sítí SS velikosti s×ss × s, jejíž okraje jsou obarveny barvami z BB, a množinou typů kachlíků K={T1,...,TK}K = \{T1, . . . , T|K|\}. Popíšeme, jak zkonstruovat formuli φφ v KNF, která bude splnitelná právě tehdy, když tato instance má přípustné vykachlíkování. Formule φφ bude využívat {s.K}\{ s . |K| \} proměnných xi,j,kx_{i,j,k} pro {i,j=1,...,s,}\{ i, j = 1, . . . , s, \} a {k=1,...,K}\{ k = 1, . . . , |K| \}. Konstrukcí formule φφ zabezpečíme, že ve splňujícím ohodnocení bude hodnota xi,j,k=1xi, j, k = 1 odpovídat tomu, že na políčko

ParseError: KaTeX parse error: Undefined control sequence: \[ at position 2: S\̲[̲i, j]

umístíme kachlík Tk. V konstrukci použijeme následující dvě množiny určující nekompatibilní dvojice kachlíků: ::VV = {(p, q) | spodní barva Tp se neshoduje s horní barvou Tq},

::HH = {(p, q) | pravá barva Tp se neshoduje s levou barvou Tq}. Množina V obsahuje dvojice typů, jež nemohou být umístěny nad sebe, tedy vertikálně. Množina H obsahuje dvojice typů, jež nemohou být umístěny vedle sebe, tedy horizontálně.

Podobné množiny si definujeme i pro barvy na okrajích, pro i = 1, . . . , s definujeme Ui, Bi, Li, Ri. ::UjU_j = {k | horní barva Tk se shoduje s barvou horního okraje S v j-tém sloupci}

::BjB_j = {k | spodní barva Tk se shoduje s barvou spodního okraje S v j-tém sloupci} ::LjL_j = {k | levá barva Tk se shoduje s barvou levého okraje S na j-tém řádku}

::RjR_j = {k | pravá barva Tk se shoduje s barvou pravého okraje S na j-tém řádku} Množina UiUi tedy obsahuje typy kachlíků, jež mohou být umístěny na políčko

ParseError: KaTeX parse error: Undefined control sequence: \[ at position 2: S\̲[̲1, i]

, množina BiBi

obsahuje typy kachlíků, jež mohou být umístěny na políčko

ParseError: KaTeX parse error: Undefined control sequence: \[ at position 2: S\̲[̲s, i]

, množina LiLi obsahuje typy kachlíků, jež mohou být umístěny na políčko

ParseError: KaTeX parse error: Undefined control sequence: \[ at position 2: S\̲[̲i, 1]

, a konečně RiRi obsahuje typy kachlíků, jež

mohou být umístěny na políčko

ParseError: KaTeX parse error: Undefined control sequence: \[ at position 2: S\̲[̲i, s]

. Konstrukci formule φφ popíšeme po částech. Formule KNF je definovaná množinou svých klauzulí (jejich konjunkcí získáme danou formuli). Konjunkce několika KNF je KNF.

  1. Pro {i,j=1,...,s}\{ i, j = 1, . . . , s \} definujeme: Ci,j=(xi,j,1xi,j,2...xi,j,K)C_{i, j} = (x_{i,j,1}\vee x_{i,j,2} \vee ... \vee x_{i,j,K} ). Tyto klauzule v budoucí CNF vynucují, že na každém políčku je aspoň 1 typ kachlíku.

  2. Pro {i,j=1,...,s}\{ i, j = 1, . . . , s \} definujeme: αi,j=k=1..Kl=(k+1)..K(¬xi,j,k¬xi,j,l)\alpha_{i, j} = \wedge_{k = 1..K} \wedge_{l=(k+1)..K}(\neg x_{i,j,k} \vee \neg x_{i,j,l}). Tyto klauzule vynucují, že každému políčku

    ParseError: KaTeX parse error: Undefined control sequence: \[ at position 2: S\̲[̲i, j]

    je přiřazen nejvýš jeden typ kachlíku.

  3. Pro {i,j=1,...,s}\{ i, j = 1, . . . , s \} definujeme: βi,j=Ci,jαi,j\beta_{i, j} = C_{i, j} \wedge \alpha_{i,j}. Formule βi,jβi, j je tedy splněna, pokud políčku

    ParseError: KaTeX parse error: Undefined control sequence: \[ at position 2: S\̲[̲i, j]

    přiřadíme právě jeden typ kachlíku.

  4. Pro {1i(s1)},{1js}\{ 1 ≤ i ≤ (s – 1) \}, \{ 1 ≤ j ≤ s \} definujeme: γi,j=(p,q)V(¬xi,j,p¬x(i+1),j,q)\gamma_{i, j} = \wedge_{(p, q) \in V} (\neg x_{i, j,p} \vee \neg x_{(i + 1),j,q}). Formule γi,j\gamma_{i, j} je splněna, pokud nad sebou umístěným políčkům

    ParseError: KaTeX parse error: Undefined control sequence: \[ at position 2: S\̲[̲i, j], S\[(i + …

    nejsou přiřazeny nekompatibilní typy kachlíků.

  5. Pro {1is},{1j(s1)}\{ 1 ≤ i ≤ s \}, \{ 1 ≤ j ≤ (s – 1) \} definujeme: δi,j=(p,q)H(¬xi,j,p¬xi,(j+1),q)\delta_{i, j} = \wedge_{(p, q) \in H} (\neg x_{i, j,p} \vee \neg x_{i,(j + 1),q}). Formule δi,j\delta_{i, j} je splněna, pokud vedle sebe umístěným políčkům

    ParseError: KaTeX parse error: Undefined control sequence: \[ at position 2: S\̲[̲i, j], S\[i, (j…

    nejsou přiřazeny nekompatibilní typy kachlíků.

  6. Definujeme:

    ParseError: KaTeX parse error: Undefined control sequence: \[ at position 30: …wedge_{j=1..s} \̲[̲ \vee_{k\in U_j…

    . Formule je splněna, pokud je na každém políčku v prvním řádku kachlík s barvou shodnou s příslušným horním okrajem.

  7. Definujeme:

    ParseError: KaTeX parse error: Undefined control sequence: \[ at position 30: …wedge_{j=1..s} \̲[̲ \vee_{k\in B_j…

    . Formule je splněna, pokud je na každém políčku v nejspodnějším řádku kachlík s barvou shodnou s příslušným spodním okrajem.

  8. Definujeme:

    ParseError: KaTeX parse error: Undefined control sequence: \[ at position 30: …wedge_{i=1..s} \̲[̲ \vee_{k\in L_i…

    . Formule je splněna, pokud je na každém políčku v nejlevějším sloupci kachlík s barvou shodnou s příslušným levým okrajem.

  9. Definujeme:

    ParseError: KaTeX parse error: Undefined control sequence: \[ at position 30: …wedge_{i=1..s} \̲[̲ \vee_{k\in R_i…

    . Formule je splněna, pokud je na každém políčku v nejlevějším sloupci kachlík s barvou shodnou s příslušným levým okrajem.

Formuli φφ dostaneme jako konjunkci všech formulí výše: ::$φ = [\wedge_{i = 1..s; j = 1..s} \beta_{i, j}] \wedge [\wedge_{i = 1..(s - 1); j = 1..s} (\gamma_{i, j} \wedge \delta_{j,i})]

\wedge \epsilon_u \wedge \epsilon_b \wedge \epsilon_r \wedge \epsilon_l.Zkonstrukceokamzˇiteˇvyplyˊvaˊ,zˇe. Z konstrukce okamžitě vyplývá, že φjeformulevKNFazˇevelikost je formule v KNF a že velikost φjepolynomiaˊlnıˊvsa je polynomiální v s a |K|,avpolynomiaˊlnıˊmcˇaselze, a v polynomiálním čase lze φizkonstruovat.Zbyˊvaˊukaˊzat,zˇeprovyˊchozıˊinstanciprobleˊmuKachlıˊkovaˊnıˊexistujeprˇıˊpustneˊvykachlıˊcˇkovaˊnıˊ,praˊveˇkdyzˇ i zkonstruovat. Zbývá ukázat, že pro výchozí instanci problému Kachlíkování existuje přípustné vykachlíčkování, právě když φjesplnitelnaˊformule.Veskutecˇnostiukaˊzˇeme,zˇezesplnˇujıˊcıˊhoohodnocenıˊformule je splnitelná formule. Ve skutečnosti ukážeme, že ze splňujícího ohodnocení formule φlzevycˇıˊstprˇıˊpustneˊvykachlıˊkovaˊnıˊcˇtvercoveˊsıˊteˇ lze vyčíst přípustné vykachlíkování čtvercové sítě Sanaopakzprˇıˊpustneˊhovykachlıˊkovaˊnıˊlzeurcˇitsplnˇujıˊcıˊohodnocenıˊformule a naopak z přípustného vykachlíkování lze určit splňující ohodnocení formule φ$.

Předpokládejme nejprve, že existuje přípustné vykachlíčkování S kachlíky z KK. Označme pomocí

ParseError: KaTeX parse error: Undefined control sequence: \[ at position 2: S\̲[̲i, j]

index typu kachlíku, který je na i-tém řádku a j-tém sloupci. Definujme xi,j,k=1xi, j, k = 1 právě když je na políčku

ParseError: KaTeX parse error: Undefined control sequence: \[ at position 2: S\̲[̲i, j]

umístňen kachlík TkTk. Není těžké ověřit, že každá z podformulí βi,j,γi,j,δi,j,εu,εb,εl,εrβi ,j, γi, j, δi, j, εu, εb, εl, εr je tímto ohodnocením splněna, a tedy že i celá formule φφ je splněna. Předpokládejme na druhou stranu, že existuje splňující ohodnocení formule φφ a pomocí

ParseError: KaTeX parse error: Undefined control sequence: \[ at position 2: v\̲[̲i, j, k]

označme hodnotu přiřazenou proměnné xi,j,kxi, j, k ve splňujícím ohodnocení. Díky tomu, že ohodnocení splňuje i formuli βi,jβi,j, existuje pro každé {i,j=1,...,s}\{ i, j = 1, . . . , s \} právě jedno k{1,...,K}k ∈ \{1, . . . , |K|\}, pro kterou je

ParseError: KaTeX parse error: Undefined control sequence: \[ at position 2: v\̲[̲i, j, k] = 1

. Na pozici

ParseError: KaTeX parse error: Undefined control sequence: \[ at position 2: S\̲[̲i, j]

tedy dáme kachlík toho typu TkTk, pro který je

ParseError: KaTeX parse error: Undefined control sequence: \[ at position 2: v\̲[̲i, j, k] = 1

. Lze snadno ověřit, že podmínky zakódované do formulí γi,j,δi,j,εu,εb,εl,εrγi, j, δi, j, εu, εb, εl, εr zaručují, že tímto způsobem obdržíme přípustné vykachlíkování SS.