Dado um 2-CNF satisfatório , você pode calcular uma atribuição satisfatória específica e por uma função NL (ou seja, existe um predicado NL P ( ϕ , i ) que informa se e ( x i ) é verdadeiro). Uma maneira de fazer isso é descrita abaixo. Usarei livremente o fato de o NL estar fechado sob A C 0ϕeP(ϕ,i)e(xi)AC0 -reductions, portanto, NL-funções são fechados sob composição; isso é uma consequência de NL = coNL.
Seja um 2-CNF satisfatório. Para qualquer literal a , deixe a → ser o número de literais alcançáveis de a por um caminho direcionado no gráfico de implicação de ϕ e a ← o número de literais a partir dos quais umaϕ(x1,…,xn)aa→aϕa←a é alcançável. Ambos são computáveis em NL.
Observe que e ¯ a ← = a → , devido à simetria inclinada do gráfico de implicação. Defina uma atribuição e para quea¯¯¯→=a←a¯¯¯←=a→e
se , então e ( a ) = 1 ;a←>a→e(a)=1
se , então e ( a ) = 0 ;a←<a→e(a)=0
se , deixe i ser mínimo de modo a que x i ou ¯ x i aparece na componente fortemente ligado de uma (isto não pode ser ao mesmo tempo, como φ é satisfatório). Coloque e ( a ) = 1 se x i aparecer e e ( a ) = 0 caso contrário.a←=a→ixix¯¯¯iaϕe(a)=1xie(a)=0
A simetria de inclinação do gráfico implica que , portanto, essa é uma atribuição bem definida. Além disso, para qualquer aresta a → b no gráfico de implicação:e(a¯¯¯)=e(a)¯¯¯¯¯¯¯¯¯a→b
Se não estiver acessível a partir de b , então a ← < b ← e a → > b → . Assim, e ( a ) = 1 implica e ( b ) = 1 .aba←<b←a→>b→e(a)=1e(b)=1
Caso contrário, e b estão no mesmo componente fortemente ligado, e um ← = b ← , um → = b → . Assim, e ( a ) = e ( b ) .aba←=b←a→=b→e(a)=e(b)
Segue-se que .e(ϕ)=1