Fixpoint Map_eq (m1 m2 : Map unit) {struct m2} : bool :=
  match m1, m2 with
  | M0, M0 => true
  | M1 a1 _, M1 a2 _ => Neqb a1 a2
  | M2 m1 m1', M2 m2 m2' => Map_eq m1 m2 && Map_eq m1' m2'
  | _, _ => false
  end.

(* Specifications: *)
Lemma Map_eq_complete : forall m1 m2 : Map unit, Map_eq m1 m2 = true -> m1 = m2.
Lemma Map_eq_correct : forall m : Map unit, Map_eq m m = true.
Lemma Map_eq_dec : forall m1 m2 : Map unit, m1 = m2 \/ m1 <> m2.