Remark get_leaf:
  forall (n: positive), get Leaf n = None.

(* Specifications: *)
Lemma get_set_other: forall (n1 n2: positive) (m: map) (x: A), n1 <> n2 -> get (set m n1 x) n2 = get m n2.
Lemma get_set: forall (m: map) (n1 n2: positive) (x: A), get (set m n1 x) n2 = if peq n1 n2 then Some x else get m n2.
Lemma unset_same : forall m v, get (unset m v) v = None.
Lemma unset_other : forall m v v', v <> v' -> get (unset m v) v' = get m v'.
Lemma get_set_other: forall (n1 n2: positive) (m: map) (x: A), n1 <> n2 -> get (set m n1 x) n2 = get m n2.
Lemma get_set: forall (m: map) (n1 n2: positive) (x: A), get (set m n1 x) n2 = if peq n1 n2 then Some x else get m n2.
Lemma unset_same : forall m v, get (unset m v) v = None.
Lemma unset_other : forall m v v', v <> v' -> get (unset m v) v' = get m v'.
Lemma get_set_other: forall (n1 n2: positive) (m: map) (x: A), n1 <> n2 -> get (set m n1 x) n2 = get m n2.
Lemma get_set: forall (m: map) (n1 n2: positive) (x: A), get (set m n1 x) n2 = if peq n1 n2 then Some x else get m n2.
Lemma unset_same : forall m v, get (unset m v) v = None.
Lemma unset_other : forall m v v', v <> v' -> get (unset m v) v' = get m v'.