Definition BDDvar_le := Nleb.Definition BDDvar_max (x y : BDDvar) := if BDDvar_le x y then y else x.

(* Specifications: *)
Lemma BDDvar_max_comm : forall x y : BDDvar, BDDvar_max x y = BDDvar_max y x.
Lemma BDDvar_max_lemma_1 : forall x y z : BDDvar, BDDcompare x y = Datatypes.Lt -> BDDcompare (BDDvar_max x N0) (BDDvar_max y z) = Datatypes.Lt.
Lemma BDDvar_le_z : forall x : BDDvar, BDDvar_le N0 x = true.
Lemma BDDvar_le_compare : forall x y : BDDvar, BDDcompare x y = Datatypes.Lt -> BDDvar_le x y = true.
Lemma BDDcompare_max_1_2 : forall x1 x2 y1 y2 : BDDvar, BDDcompare x1 x2 = Datatypes.Lt -> BDDcompare y1 y2 = Datatypes.Lt -> BDDcompare (BDDvar_max x1 y1) (BDDvar_max x2 y2) = Datatypes.Lt.
Lemma BDDcompare_z_nz : forall x : BDDvar, x <> N0 -> BDDcompare N0 x = Datatypes.Lt.
Lemma BDDvar_max_x_x : forall x : BDDvar, BDDvar_max x x = x.
Lemma BDDvar_ordered_high_1 : forall (cfg : BDDconfig) (node1 node2 : ad), BDDconfig_OK cfg -> is_internal_node cfg node1 -> is_internal_node cfg node2 -> is_internal_node cfg (high cfg node1) \/ is_internal_node cfg (high cfg node2) -> BDDcompare (BDDvar_max (var cfg (high cfg node1)) (var cfg (high cfg node2))) (BDDvar_max (var cfg node1) (var cfg node2)) = Datatypes.Lt.
Lemma BDDvar_ordered_low_1 : forall (cfg : BDDconfig) (node1 node2 : ad), BDDconfig_OK cfg -> is_internal_node cfg node1 -> is_internal_node cfg node2 -> is_internal_node cfg (low cfg node1) \/ is_internal_node cfg (low cfg node2) -> BDDcompare (BDDvar_max (var cfg (low cfg node1)) (var cfg (low cfg node2))) (BDDvar_max (var cfg node1) (var cfg node2)) = Datatypes.Lt.
Lemma BDDvar_ordered_high_2 : forall (cfg : BDDconfig) (node1 node2 : ad), BDDconfig_OK cfg -> is_internal_node cfg node1 -> is_internal_node cfg node2 -> BDDcompare (var cfg node1) (var cfg node2) = Datatypes.Lt -> BDDcompare (BDDvar_max (var cfg node1) (var cfg (high cfg node2))) (var cfg node2) = Datatypes.Lt.
Lemma BDDvar_ordered_low_2 : forall (cfg : BDDconfig) (node1 node2 : ad), BDDconfig_OK cfg -> is_internal_node cfg node1 -> is_internal_node cfg node2 -> BDDcompare (var cfg node1) (var cfg node2) = Datatypes.Lt -> BDDcompare (BDDvar_max (var cfg node1) (var cfg (low cfg node2))) (var cfg node2) = Datatypes.Lt.
Lemma BDDvar_ordered_high_3 : forall (cfg : BDDconfig) (node1 node2 : ad), BDDconfig_OK cfg -> is_internal_node cfg node1 -> is_internal_node cfg node2 -> BDDcompare (var cfg node2) (var cfg node1) = Datatypes.Lt -> BDDcompare (BDDvar_max (var cfg (high cfg node1)) (var cfg node2)) (var cfg node1) = Datatypes.Lt.
Lemma BDDvar_ordered_low_3 : forall (cfg : BDDconfig) (node1 node2 : ad), BDDconfig_OK cfg -> is_internal_node cfg node1 -> is_internal_node cfg node2 -> BDDcompare (var cfg node2) (var cfg node1) = Datatypes.Lt -> BDDcompare (BDDvar_max (var cfg (low cfg node1)) (var cfg node2)) (var cfg node1) = Datatypes.Lt.
Lemma lt_max_nat_of_N : forall x y z : BDDvar, BDDcompare (BDDvar_max x y) z = Datatypes.Lt -> max (nat_of_N x) (nat_of_N y) < nat_of_N z.
Lemma le_nat_of_N_max : forall x y z : BDDvar, BDDvar_le x (BDDvar_max y z) = true -> nat_of_N x <= max (nat_of_N y) (nat_of_N z).