(********)
(* find *)
(********)
Section FindLemmas.
Variables (K : ordType) (V : Type) (U : union_map_class K V).
Implicit Types (k : K) (v : V) (f : U).

(* Specifications: *)
Lemma find0E k : find k (Unit : U) = None.
Lemma findU k1 k2 v f :
find k1 (upd k2 v f) =
if k1 == k2 then
if cond U k2 && valid f then Some v else None
else if cond U k2 then find k1 f else None.
Lemma findF k1 k2 f :
find k1 (free k2 f) = if k1 == k2 then None else find k1 f.
Lemma findUnL k f1 f2 :
valid (f1 \+ f2) ->
find k (f1 \+ f2) = if k \in dom f1 then find k f1 else find k f2.
Lemma findUnR k f1 f2 :
valid (f1 \+ f2) ->
find k (f1 \+ f2) = if k \in dom f2 then find k f2 else find k f1.
Lemma find_umfilt p k f :
find k (um_filter p f) = if p k then find k f else None.