Spis treści

JFIZO - Zadanie 09.089

Pokażemy, że 3SAT <_p STASI.

Redukcja

Liczba k w STASI to liczba zmiennych w formule.

Tworzymy graf:

Dlaczego to działa?

Rozstawiamy agentów po wierzchołkach p_i albo \neg p_i. Agent na literale oznacza wartość True.

Co się stanie, jak ustawimy agenta gdzieś indziej?

  1. Agent na v_i. Jeżeli chociaż jednego agenta ustawimy na klauzuli, to nie mamy jak nadzorować któregoś wierzchołka q_i,
    ponieważ mamy k agentów i k wierzchołków q_i.
  2. Agent na q_i. Jeżeli agenta ustawimy na wierzchołku q_i, to może on nie nadzorować klauzuli, dla której jest kluczowy.
    Jeżeli tak jest można go przestawić w inne miejsce. Jeżeli formuła jest niezależna od którejś zmiennej p_i, to wtedy agent może stać na q_i.
  3. Agenci stoją jednocześnie na p_i oraz \neg p_i. Wtedy któryś z q_i jest nienadzorowany, bo brak nam agentów.

Co się dzieje, jak agenci są na wierzchołkach p_i albo \neg p_i?

Dowód

(\Rightarrow) Skoro \phi jest spełnialna, to istnieje takie wartościowanie \sigma, że \hat{\sigma}(\phi) = \top.
W grafie f(\phi) możemy rozstawić k agentów po wierzchołkach p_i oraz \neg p_i tak, że jeżeli p_i jest prawdziwe w \sigma, to stawiamy tam agenta,
w przeciwnym wypadku stawiamy agenta na \neg p_i. Widać, że każde q_i, p_i, \neg p_i będzie nadzorowane, oraz każdy wierzchołek odpowiadający klauzuli również będzie nadzorowany,
bo przy tym wartościowaniu była ona prawdziwa w \phi.

(\Leftarrow) Skoro f(\phi) ma dobre rozstawienie, to znaczy, że dla każdego i agent stoi na jednym z \{p_i, q_i, \neg p_i\}.
Skonstruujemy wartosciowanie \sigma tak, że jeżeli agent stoi na p_i lub q_i, to \sigma(p_i)=\top, a w przeciwnym przypadku \sigma(p_i)=\bot.
Widać teraz, że dla takiego wartościowania \phi jest prawdziwa, bo każda klauzula jest nadzorowana,
czyli w każdej klauzuli co najmniej jeden literał jest prawdziwy.