Forma normal disyuntiva en Python

Usando python, ¿cuál es la mejor manera de convertir una cadena de AND y OR en una forma normal disyuntiva (también conocida como “sum de productos”)?

b AND (c OR (a AND d)) 

se convierte en

 (b AND c) OR (b AND a AND d) 

Me gustaría también ordenar estos, lexicográficamente

 (a AND b AND d) OR (b AND c) 

Tal vez esta biblioteca pueda ayudar: pyeda

Aquí hay un método para convertir una expresión en DNF: to_dnf()

Por supuesto, debes convertir tu cadena en una expresión pyeda válida …