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.
Section Intervals.