Skip to content

Commit b8cb5f8

Browse files
committed
Lock filterf
1 parent d9ffee5 commit b8cb5f8

File tree

1 file changed

+13
-8
lines changed

1 file changed

+13
-8
lines changed

finmap.v

Lines changed: 13 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -3246,13 +3246,14 @@ End ReduceOp.
32463246

32473247
Arguments 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+
32493253
Section RestrictionOps.
32503254
Variable (K : choiceType) (V : Type).
32513255
Implicit 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-
32563257
Definition 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

32633264
Lemma 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

32673268
Lemma 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

32713272
Lemma 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

32923293
Lemma fnd_filterf f P k : (filterf f P).[? k] = if P k then f.[? k] else None.
32933294
Proof.
3295+
rewrite filterf.unlock.
32943296
case: fndP => [kff|]; last first.
32953297
by rewrite in_fset => /nandP [/not_fnd->|/negPf-> //]; rewrite if_same.
32963298
by 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].
33013303
Proof.
33023304
apply: 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 [? ->].
33043306
Qed.
33053307

33063308
Lemma 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].
36503652
Proof.
36513653
apply/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.
36543659
have kA : val k \in [fset x | x in domf f & x \in A] by rewrite !inE (valP k).
36553660
by exists [` kA]; rewrite // ?ffunE !getfE.
3656-
Qed.
3661+
Qed. *)
36573662

36583663
Lemma codomf_restrict_exists f (A : {fset K}) :
36593664
codomf f.[& A] = [fset v in codomf f

0 commit comments

Comments
 (0)