Definition nat_lu (n : nat) := leb L n && leb (S n) U.Definition var_lu (x : ad) :=
  leb L (nat_of_N x) && leb (S (nat_of_N x)) U.Definition var_env_eq (e1 e2 : var_env) :=
  forall x : BDDvar, var_lu x = true -> e1 x = e2 x.Definition seq := nat -> A.Definition seq_eq (s1 s2 : seq) :=
    forall n : nat, nat_lu n = true -> A_eq (s1 n) (s2 n).Definition seq_inj (s : seq) :=
    forall i j : nat,
    nat_lu i = true -> nat_lu j = true -> A_eq (s i) (s j) -> i = j.Definition seq_surj (s : seq) :=
    forall a : A, exists i : nat, nat_lu i = true /\ A_eq (s i) a.

(* Specifications: *)
Lemma var_lu_nat_lu : forall x : ad, var_lu x = true -> nat_lu (nat_of_N x) = true.
Lemma nat_lu_var_lu : forall n : nat, nat_lu n = true -> var_lu (N_of_nat n) = true.
Lemma eval_be_independent : forall ve1 ve2 : var_env', seq_eq _ (eq (A:=_)) ve1 ve2 -> forall be : bool_expr, be_ok var_lu be -> eval_be' be ve1 = eval_be' be ve2.