Każdą klauzę z 5CNF zamieniamy osobno.
Mamy C = a \vee b \vee c \vee d \vee e. Dodajemy dwie nowe zmienne logiczne y_1 i y_2. Z C tworzymy C' = (a \vee b \vee y_1) \wedge (\neg y_1 \vee c \vee y_2) \wedge (\neg y_2 \vee d \vee e).
Dowód. Załóżmy, że istnieje wartościowanie, które spełnia tę formułę 5CNF. Każda klauzula musi zostać spełniona, zatem w każdej klauzuli istnieje co najmniej jeden literał, który jest spełniony przez to wartościowanie. W takim wypadku ustawiamy odpowienio wartościowania y_1 i y_2.
W drugą stronę należy zauważyć, że samymi y_1 i y_2 nie spełnimy wszystkich trzech klauzul naraz, zatem któryś literał musi zostać spełniony.
Pokażemy, że 3SAT <_p STASI.
Liczba k w STASI to liczba zmiennych w formule.
Tworzymy graf:
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?
Co się dzieje, jak agenci są na wierzchołkach p_i albo \neg p_i?
(\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.
Weźmy \phi \in 3CNF.
Dla każdej zmiennej x_i w formule \phi, która wystepuje więcej niż 3 razy, zamień jej wystąpienia na dodatkowe zmienne: y_{x_i,1},\cdots ,y_{x_i,k} gdzie k to liczba wystąpień tej zmiennej.
Zapewnij, że wszystkie nowe zmienne są tak samo wartościowane: y_{x_i,1} ⇒ y_{x_i,2} ⇒ … ⇒ y_{x_i,k} ⇒ y_{x_i,1} (dodajemy te implikacje parami do naszej formuly). Dla każdego zanegowanego wystąpienia zmiennej, w formule zawierajacej implikacje przed nową zmienną obrazującą to wystąpienie zmiennej x_i, dodajemy negację.