Canonical Structure fmap_eqType := EqType (finMap K V) fmap_eqMixin.
End EqType.
(* mapping a function over a contents of a finite map *)
Section Map.
Variables (K : ordType) (U V : Type) (f : U -> V).
Definition mapf' (m : seq (K * U)) : seq (K * V) :=
map (fun kv => (key kv, f (value kv))) m.

(* Specifications: *)
Lemma map_key_mapf (m : seq (K * U)) : map key (mapf' m) = map key m.
Definition mapf (m : finMap K U) : finMap K V :=
let: FinMap _ pf := m in FinMap (sorted_map pf).
Lemma mapf_ins k v s : mapf (ins k v s) = ins k (f v) (mapf s).
Lemma mapf_fcat s1 s2 : mapf (fcat s1 s2) = fcat (mapf s1) (mapf s2).
Lemma mapf_disjL s1 s2 s : mapf s1 = mapf s2 -> disj s1 s = disj s2 s.
Lemma mapf_disj s1 s2 s1' s2' :
mapf s1 = mapf s2 -> mapf s1' = mapf s2' ->
disj s1 s1' = disj s2 s2'.