First of all, <-> is associative, so that it does not matter for its semantics how we parse a sequence of this operator. According to the lecture, we defined this operator however as being left associative, so that we get the following expression with full use of brackets:
((((a&d)<->b)<->c)|((a<->a)&!b))<->!(c<->(a->a))
A CNF obtained by the BDD of this formula is for instance the following one:
(!a|!b|!d) & (b|!c)
Before starting any computation, we first simplify the formula by replacing a<->a with true and propagating the boolean constants so that we get
((((a&d)<->b)<->c)|!b)<->!c
Next, we make a Shannon decomposition: Starting with variable b (it has two occurrences and thus more than variable a), we get the following cofactors:
- b=0: !c
- b=1: (a&d<->c)<->!c
Thus, our formula is equivalent to (b -> (a&d<->c)<->!c) & (!b -> !c) which yields
(!b | ((a&d<->c)<->!c)) & (b|!c)
It remains to convert (a&d<->c)<->!c) to a CNF, so we make a Shannon decomposition with c:
That makes it simple, since the formula (a&d<->c)<->!c) is equivalent to !(a&d). Hence, we get the following formula:
(!b | !(a&d)) & (b|!c)
which has the following CNF:
(!b|!a|!d) & (b|!c)