Fixpoint eqm_bool (x y : Map bool) {struct y} : bool :=
  match x, y with
  | M0, M0 => true
  | M0, M1 _ _ => false
  | M0, M2 _ _ => false
  | M1 _ _, M0 => false
  | M1 a b, M1 c d => Neqb a c && eq_bool b d
  | M1 _ _, M2 _ _ => false
  | M2 _ _, M0 => false
  | M2 _ _, M1 _ _ => false
  | M2 a b, M2 c d => eqm_bool a c && eqm_bool b d
  end.

(* Specifications: *)
Lemma eqm_bool_equal : forall x y : Map bool, eqm_bool x y = true -> x = y.
Lemma equal_eqm_bool : forall x : Map bool, eqm_bool x x = true.
Lemma lem_get_leb : forall (m0 m1 : Map bool) (a : ad) (b0 b1 : bool), lem m0 m1 -> MapGet bool m0 a = Some b0 -> MapGet bool m1 a = Some b1 -> leb b0 b1.
Lemma lem_domain_equal : forall m0 m1 : Map bool, lem m0 m1 -> domain_equal bool bool m0 m1.
Lemma andb_inc_r : forall b b0 b1 : bool, leb b0 b1 -> leb (b && b0) (b && b1).
Lemma andb_inc_l : forall b b0 b1 : bool, leb b0 b1 -> leb (b0 && b) (b1 && b).
Lemma orb_inc_r : forall b b0 b1 : bool, leb b0 b1 -> leb (b || b0) (b || b1).
Lemma orb_inc_l : forall b b0 b1 : bool, leb b0 b1 -> leb (b0 || b) (b1 || b).
Lemma andb_incr : forall b0 b1 b2 b3 : bool, leb b0 b1 -> leb b2 b3 -> leb (b0 && b2) (b1 && b3).
Lemma orb_incr : forall b0 b1 b2 b3 : bool, leb b0 b1 -> leb b2 b3 -> leb (b0 || b2) (b1 || b3).