Étant donné un 2-CNF satisfaisable , vous pouvez calculer une affectation satisfaisante particulière par une fonction NL (c'est-à-dire qu'il existe un prédicat NL qui vous indique si est vrai) . Une façon de le faire est décrite ci-dessous. J'utiliserai librement le fait que NL est fermé sous -reductions, donc les fonctions NL sont fermées sous composition; c'est une conséquence de NL = coNL.e P ( ϕ , i ) e ( x i ) A C 0ϕeP(ϕ,i)e(xi)AC0
Soit un 2-CNF satisfaisable. Pour tout littéral , soit a → le nombre de littéraux accessibles depuis a par un chemin dirigé dans le graphe d'implication de ϕ , et le nombre de littéraux à partir desquels est accessible. Les deux sont calculables en NL.a a ←ϕ(x1,…,xn)aa→aϕa←a
Observez que , et , en raison de la symétrie asymétrique du graphe d'implication. Définissez une affectation pour quea¯¯¯→=a←a¯¯¯←=a→e
si , alors ;a←>a→e(a)=1
si , alors ;a←<a→e(a)=0
si , soit minimal tel que ou apparaisse dans la composante fortement connectée de (il ne peut pas être les deux, car est satisfaisable). Mettez si apparaît, et sinon.a←=a→ixix¯¯¯iaϕe(a)=1xie(a)=0
La symétrie asymétrique du graphique implique que , donc c'est une affectation bien définie. De plus, pour toute arête dans le graphe d'implication:e(a¯¯¯)=e(a)¯¯¯¯¯¯¯¯¯a→b
Si n'est pas accessible depuis , alors et . Ainsi, implique .aba←<b←a→>b→e(a)=1e(b)=1
Sinon, et sont dans le même composant fortement connecté, et , . Ainsi, .aba←=b←a→=b→e(a)=e(b)
Il s'ensuit que .e(ϕ)=1