Fixpoint BDDexl (cfg : BDDconfig) (ul : list ad) (node : ad)
 (ly : list BDDvar) {struct ly} : BDDconfig * ad :=
  match ly with
  | nil => (cfg, node)
  | y :: ly' =>
      match BDDexl cfg ul node ly' with
      | (cfg1, node1) => BDDex cfg1 (node1 :: ul) y node1
      end
  end.

Lemma BDDexl_is_exl : bool_fun_eq (bool_fun_of_BDD (fst (BDDexl cfg ul node ly)) (snd (BDDexl cfg ul node ly))) (bool_fun_exl (bool_fun_of_BDD cfg node) ly).