I'm trying to use Cudd_bddIte
to implement simple BDDs.
The following code works as expected, giving the diagram in the picture (which represents node bdd
):
DdNode *v1 = Cudd_bddNewVar(gbm);
Cudd_Ref(v1);
DdNode *v2 = Cudd_bddNewVar(gbm);
Cudd_Ref(v2);
DdNode *v3 = Cudd_bddNewVar(gbm);
Cudd_Ref(v3);
DdNode *tmp1 = Cudd_bddIte(gbm, v1, Cudd_ReadLogicZero(gbm), Cudd_ReadOne(gbm));
Cudd_Ref(tmp1);
DdNode *tmp2 = Cudd_bddIte(gbm, v2, tmp1, Cudd_ReadOne(gbm));
Cudd_Ref(tmp2);
Cudd_RecursiveDeref(gbm,tmp1);
DdNode *bdd = Cudd_bddIte(gbm, v3, tmp2, Cudd_ReadOne(gbm));
Cudd_Ref(bdd);
Cudd_RecursiveDeref(gbm,tmp2);
However, if I change the ITE statement for tmp2
to the following
DdNode *tmp2 = Cudd_bddIte(gbm, v2, tmp1, Cudd_ReadLogicZero(gbm));
I get this unexpected graph:
To me, this is wrong, as I would expect the topmost variable still immediately yielding 1 if false, as in the first picture. What am I doing wrong?