CNF

@Hoss93 
negate: negates an expression
push negation: pushes the negation of the expression to inner elements (it does as it says)
push_nots_inwards: keeps pushing negations until they reach the predicates