Ltac do_interp_balance :=
match goal with
| |- interp (match ?A with Red => _ | Black => _ end) _  => destruct A
| |- interp (match ?A with EE => _ | T _ _ _ _ => _ end) _ => destruct A
|  H: interp (T _ _ _ _) _ |- _ => inv H
| H: interp (match ?A with Red => _ | Black => _ end) _ |- _ => destruct A
| H: interp (match ?A with EE => _ | T _ _ _ _ => _ end) _ |- _ => destruct A
end; auto.

(* Specifications: *)
Lemma interp_balance:
forall c tl k tr y, interp (balance c tl k tr) y <-> interp (T c tl k tr) y.
Lemma ins_ok:
forall x y t lo hi,
searchtree lo hi t ->
((K.eq x y \/ interp t x) <-> interp (ins y t) x).
Lemma interp_insert:
forall x y s,
searchtree None None s ->
((K.eq x y \/ interp s x) <-> interp (insert y s) x).