Variable L U : nat.
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.
Section Sequence.
Variable A : Set.
Variable A_eq : A -> A -> Prop.
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.
End Sequence.

(* 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.