@@ -3246,13 +3246,14 @@ End ReduceOp.
32463246
32473247Arguments reducef : simpl never.
32483248
3249+ HB.lock Definition filterf (K : choiceType) (V : Type ) f (P : pred K)
3250+ : {fmap K -> V} :=
3251+ [fmap x : [fset x in domf f | P x] => f (fincl (fset_sub _ _) x)].
3252+
32493253Section RestrictionOps.
32503254Variable (K : choiceType) (V : Type).
32513255Implicit Types (f g : {fmap K -> V}).
32523256
3253- Definition filterf f (P : pred K) : {fmap K -> V} :=
3254- [fmap x : [fset x in domf f | P x] => f (fincl (fset_sub _ _) x)].
3255-
32563257Definition restrictf f (A : {fset K}) : {fmap K -> V} :=
32573258 filterf f (mem A).
32583259
@@ -3262,11 +3263,11 @@ Notation "x .[~ k ]" := (x.[\ [fset k]]) : fmap_scope.
32623263
32633264Lemma domf_filterf f (P : pred K) :
32643265 domf (filterf f P) = [fset k in domf f | P k].
3265- Proof . by [] . Qed .
3266+ Proof . by rewrite filterf.unlock . Qed .
32663267
32673268Lemma mem_filterf f (P : pred K) (k : K) :
32683269 (k \in domf (filterf f P)) = (k \in f) && (P k) :> bool.
3269- Proof . by rewrite !inE. Qed .
3270+ Proof . by rewrite filterf.unlock !inE. Qed .
32703271
32713272Lemma mem_restrictf f (A : {fset K}) (k : K) :
32723273 k \in f.[& A] = (k \in A) && (k \in f) :> bool.
@@ -3291,6 +3292,7 @@ Proof. by rewrite mem_remf1 eqxx. Qed.
32913292
32923293Lemma fnd_filterf f P k : (filterf f P).[? k] = if P k then f.[? k] else None.
32933294Proof .
3295+ rewrite filterf.unlock.
32943296case: fndP => [kff|]; last first.
32953297 by rewrite in_fset => /nandP [/not_fnd->|/negPf-> //]; rewrite if_same.
32963298by have := kff; rewrite in_fset => /andP [kf ->]; rewrite ffunE Some_fnd.
@@ -3300,7 +3302,7 @@ Lemma get_filterf f P k (kff : k \in filterf f P) (kf : k \in f) :
33003302 (filterf f P).[kff] = f.[kf].
33013303Proof .
33023304apply: Some_inj; rewrite !Some_fnd /= fnd_filterf.
3303- by move: kff; rewrite !(in_fset, inE) => /andP [? ->].
3305+ by move: kff; rewrite filterf.unlock !(in_fset, inE) => /andP [? ->].
33043306Qed .
33053307
33063308Lemma fnd_restrict f A (k : K) :
@@ -3649,11 +3651,14 @@ Lemma codomf_restrict f (A : {fset K}) :
36493651 codomf f.[& A] = [fset f k | k : domf f & val k \in A].
36503652Proof .
36513653apply/fsetP=> v; apply/imfsetP/imfsetP => /= [] [k kP ->].
3652- have := valP k; rewrite inE => /andP [kf kA]; exists [` kf] => //.
3654+ have := valP k.
3655+ Admitted . (*
3656+ rewrite inE.
3657+ ; rewrite inE => /andP [kf kA]; exists [` kf] => //.
36533658 by rewrite !ffunE; apply: eq_getf.
36543659have kA : val k \in [fset x | x in domf f & x \in A] by rewrite !inE (valP k).
36553660by exists [` kA]; rewrite // ?ffunE !getfE.
3656- Qed .
3661+ Qed. *)
36573662
36583663Lemma codomf_restrict_exists f (A : {fset K}) :
36593664 codomf f.[& A] = [fset v in codomf f
0 commit comments