tuple/list distinctions are way confusing. It would be better to just have a list of lists, which represents a cnf, so `[a, b, c]` is `a or b or c`, and `[[a, b, c]]` is `a and b and c` (and `[a, [b, c]]` would be `a or (b and c)`) and so on. You could require everything is nested correctly too, e.g., `[[a], [b], [c]]` and `[[a], [b, c]]`.

Or you could just use `Or` and `And`...