Definition var_env' := nat -> bool.Definition var_env_to_env' (ve : var_env) : var_env' :=
  fun n : nat => ve (N_of_nat n).Definition var_env'_to_env (ve : var_env') : var_env :=
  fun x : BDDvar => ve (nat_of_N x).Definition eval_be' (be : bool_expr) (ve : var_env') :=
  bool_fun_of_bool_expr be (var_env'_to_env ve).Definition var_env'' := Map unit.Definition var_env''_to_env (ve : var_env'') : var_env :=
  fun x : ad => in_dom _ x ve.Definition var_env''_to_env' (ve : var_env'') : var_env' :=
  fun n : nat => in_dom _ (N_of_nat n) ve.Definition be_eq (be1 be2 : bool_expr) :=
  forall ve : var_env', eval_be' be1 ve = eval_be' be2 ve.Definition be_eq_dec (be1 be2 : bool_expr) :=
  is_tauto (fun x _ => x) (Iff be1 be2).(* [x,_]x is same as gc_inf *)
Definition be_le (be1 be2 : bool_expr) :=
  forall ve : var_env', eval_be' be1 ve = true -> eval_be' be2 ve = true.

Lemma impl_eq : forall be1 be2 be1' be2' : bool_expr, be_eq be1 be1' -> be_eq be2 be2' -> be_eq (Impl be1 be2) (Impl be1' be2').