In NNF, the negation operator is only applied to variables.
var a = new LVar("a")
var b = new LVar("b")
assert (a&b).nnf.to_s == "(a & b)"
assert (~(a&b)).nnf.to_s == "(~a | ~b)"
Subclasses implement it recursively.
# The negation normal form (NNF).
#
# In NNF, the negation operator is only applied to variables.
#
# ~~~
# var a = new LVar("a")
# var b = new LVar("b")
# assert (a&b).nnf.to_s == "(a & b)"
# assert (~(a&b)).nnf.to_s == "(~a | ~b)"
# ~~~
#
# Subclasses implement it recursively.
fun nnf: LExpr do return self
lib/logic/lexpr.nit:153,2--165,30