a bunch of refactorings to express the CNF rules in the types better.
this also simplified the code ALOT. Lesson learned