Definition reducef f : {fmap K -> V} :=
[fmap x => oextract (@reducef_subproof f x)].

(* Specifications: *)
Lemma domf_reduce f : domf (reducef f) = [fsetval x : domf f | f x].
Lemma fnd_reducef f k : (reducef f).[? k] = ojoin f.[? k].
Lemma get_reducef f k (krf : k \in reducef f) (kf : k \in f):
Some (reducef f).[krf] = f.[kf].
Lemma get_filterf f P k (kff : k \in filterf f P) (kf : k \in f) :
(filterf f P).[kff] = f.[kf].
Lemma fnd_restrict f A (k : K) :
f.[& A].[? k] = if k \in A then f.[? k] else None.
Lemma restrictf_comp f A B : f.[& A].[& B] = f.[& A `&` B].
Lemma remf_comp f A B : f.[\ A].[\ B] = f.[\ A `|` B].
Lemma setf_rem f A (k : K) (v : V) :
f.[\ A].[k <- v] = f.[k <- v].[\ (A `\ k)].
Lemma restrictf_mkdom f A : f.[& A] = f.[& domf f `&` A].
Lemma restrictf_id f A : [disjoint domf f & A] -> f.[& A] = [fmap].
Lemma remf_set f A (k : K) (v : V) :
f.[k <- v].[\ A] = if k \in A then f.[\ A] else f.[\ A].[k <- v].
Lemma remf1_set f (k k' : K) (v : V) :
f.[k' <- v].[~ k] = if k == k' then f.[~ k] else f.[~ k].[k' <- v].