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').