Since it appears you can have arbitrarily deeply nested conjunctions and disjunctions (see this question), such as:
$$(((A ∧ B) ∨ (C ∧ (D ∨ E)) ∧ (F ∧ (G ∨ H)))$$
How do you "flatten" it, if you have the constraint that both conjunction and disjunction only have 2 arguments (that is they are binary operations)? That is, you are not allowed to do this:
$$(X ∨ Y) ∧ (W ∨ Z) ∧ (P ∨ Q) ∧ (S ∨ R)$$
That would really be:
$$((X ∨ Y) ∧ (W ∨ Z) ∧ (P ∨ Q) ∧ (S ∨ R))$$
And it would mean the disjunction takes an arbitrary amount of args (4 in this case).
So instead of flattening the list, like this, "into a conjunction of disjunctions", you would instead be forced to build a normalized tree of some sort (which I am not sure how that would look/work).
So given you must in the end have a tree instead of a flattened list (from a technical perspective), my question is how do you apply the transformation rules to get this tree like the first one into conjunctive normal form (CNF)? You don't have a "conjunction of disjunctions", as that is a flat list. Instead, you have a tree of disjunctions or something? Not quite sure what it should look like.
I am trying to figure out how to implement an algorithm for converting arbitrarily deeply nested propositional formulas into CNF. But I am stuck on the step of how to implement the conjunction and disjunction simplification functions (just those 2 functions). See Algorithm implementation to convert propositional formula into conjunctive normal form in JavaScript? for details.