End FMapInd.
Section Filtering.
Variables (K : ordType) (V : Type).
Notation fmap := (finMap K V).
Notation nil := (nil K V).
Definition kfilter' (p : pred K) (s : fmap) :=
filter (fun kv => p kv.1) (seq_of s).

(* Specifications: *)
Lemma sorted_kfilter (p : pred K) s : sorted ord (map key (kfilter' p s)).
Definition kfilter (p : pred K) (s : fmap) := FinMap (sorted_kfilter p s).
Lemma supp_kfilt (p : pred K) (s : fmap) :
supp (kfilter p s) = filter p (supp s).
Lemma kfilt_nil (p : pred K) : kfilter p nil = nil.
Lemma kfilt_ins (p : pred K) k v (s : fmap) :
kfilter p (ins k v s) =
if p k then ins k v (kfilter p s) else kfilter p s.
Lemma rem_kfilt (p : pred K) k (s : fmap) :
rem k (kfilter p s) =
if p k then kfilter p (rem k s) else kfilter p s.
Lemma kfilt_rem (p : pred K) k (s : fmap) :
kfilter p (rem k s) =
if p k then rem k (kfilter p s) else kfilter p s.