fact: Fixpoint BDDof_bool_expr (cfg : BDDconfig) (negm : BDDneg_memo) (orm : BDDor_memo) (be : bool_expr) {struct be} : BDDconfig * (ad * (BDDneg_memo * BDDor_memo)) := match be with | Zero => (cfg, (BDDzero, (negm, orm))) | One => (cfg, (BDDone, (negm, orm))) | Var x => match BDDvar_make cfg x with | (cfg', node) => (cfg', (node, (negm, orm))) end | Neg be' => match BDDof_bool_expr cfg negm orm be' with | (cfg', (node, (negm', orm'))) => match BDDneg cfg' negm' node with | (cfg'', (node', negm'')) => (cfg'', (node', (negm'', orm'))) end end | Or be1 be2 => match BDDof_bool_expr cfg negm orm be1 with | (cfg', (node1, (negm', orm'))) => match BDDof_bool_expr cfg' negm' orm' be2 with | (cfg'', (node2, (negm'', orm''))) => match BDDor cfg'' orm'' node1 node2 with | (cfg''', (node, orm''')) => (cfg''', (node, (negm'', orm'''))) end end end | ANd be1 be2 => match BDDof_bool_expr cfg negm orm be1 with | (cfg', (node1, (negm', orm'))) => match BDDof_bool_expr cfg' negm' orm' be2 with | (cfg'', (node2, (negm'', orm''))) => BDDand cfg'' negm'' orm'' node1 node2 end end | Impl be1 be2 => match BDDof_bool_expr cfg negm orm be1 with | (cfg', (node1, (negm', orm'))) => match BDDof_bool_expr cfg' negm' orm' be2 with | (cfg'', (node2, (negm'', orm''))) => BDDimpl cfg'' negm'' orm'' node1 node2 end end | Iff be1 be2 => match BDDof_bool_expr cfg negm orm be1 with | (cfg', (node1, (negm', orm'))) => match BDDof_bool_expr cfg' negm' orm' be2 with | (cfg'', (node2, (negm'', orm''))) => BDDiff cfg'' negm'' orm'' node1 node2 end end end.
imports: Bool Sumbool Arith ZArith NArith Nnat Ndec Ndigits IntMap(Allmaps) Wf_nat BDDvar_ad_nat bdd1 bdd2 bdd3 bdd4 bdd5_1 bdd5_2 bdd6 bdd7 BDDdummy_lemma_2 BDDdummy_lemma_3 BDDdummy_lemma_4 bdd8 bdd9 bdd10