@@ -136,6 +136,7 @@ From mathcomp Require Import choice finset finfun fintype bigop.
136136(* fsinjectiveb f == boolean predicate of injectivity of f *)
137137(**************************************************************************** *)
138138
139+ Unset SsrOldRewriteGoalsOrder. (* remove this line when requiring MathComp >= 2.6 *)
139140Set Implicit Arguments .
140141Unset Strict Implicit .
141142Import Prenex Implicits.
@@ -1902,7 +1903,7 @@ Proof. by rewrite -!fsubset0 fsubUset. Qed.
19021903Lemma fsubsetD1 A B x : (A `<=` B `\ x) = (A `<=` B) && (x \notin A).
19031904Proof .
19041905do !rewrite -(@subset_fsubE (x |` A `|` B)) ?fsubDset ?fsetUA // 1?fsetUAC //.
1905- rewrite fsubD1 => [| mem_x]; first by rewrite -fsetUA fset1U1.
1906+ rewrite fsubD1 => [mem_x| ]; last by rewrite -fsetUA fset1U1.
19061907by rewrite subsetD1 // inE.
19071908Qed .
19081909
@@ -1955,9 +1956,9 @@ Qed.
19551956Lemma fsetDpS C A B : B `<=` C -> A `<` B -> C `\` B `<` C `\` A.
19561957Proof .
19571958move=> subBC subAB; rewrite fproperEneq fsetDS 1?fproper_sub// andbT.
1958- apply/negP => /eqP /(congr1 (fsetD C)); rewrite !fsetDK // => [eqAB//| ].
1959- by rewrite eqAB (negPf (fproper_irrefl _)) in subAB .
1960- by apply: fsubset_trans subBC; apply: fproper_sub .
1959+ apply/negP => /eqP /(congr1 (fsetD C)); rewrite !fsetDK // => [| eqAB//].
1960+ by apply: fsubset_trans subBC; apply: fproper_sub .
1961+ by rewrite eqAB (negPf (fproper_irrefl _)) in subAB .
19611962Qed .
19621963
19631964Lemma fproperD2l C A B : A `<=` C -> B `<=` C -> (C `\` B `<` C `\` A) = (A `<` B).
@@ -2011,7 +2012,7 @@ Proof.
20112012pose D := A `|` B `|` C.
20122013have AD : A `<=` D by rewrite /D -fsetUA fsubsetUl.
20132014have BD : B `<=` D by rewrite /D fsetUAC fsubsetUr.
2014- rewrite -(@subset_fsubE D) //; last first .
2015+ rewrite -(@subset_fsubE D) //.
20152016 by rewrite fsubDset (fsubset_trans BD) // fsubsetUr.
20162017rewrite fsubD subsetD !subset_fsubE // disjoint_fsub //.
20172018by rewrite /D fsetUAC fsubsetUl.
@@ -2235,7 +2236,7 @@ Proof. by apply/fsetP=> X; rewrite inE !fpowersetE fsubsetI. Qed.
22352236
22362237Lemma card_fpowerset (A : {fset K}) : #|` fpowerset A| = 2 ^ #|` A|.
22372238Proof .
2238- rewrite !card_imfset; first by rewrite -cardE card_powerset cardsE cardfE.
2239+ rewrite !card_imfset; last by rewrite -cardE card_powerset cardsE cardfE.
22392240by move=> X Y /fsetP eqXY; apply/setP => x; have := eqXY (val x); rewrite !inE.
22402241Qed .
22412242
@@ -2379,7 +2380,7 @@ Lemma big_fset_incl (A : {fset I}) B F : A `<=` B ->
23792380 \big[op/idx]_(x <- A) F x = \big[op/idx]_(x <- B) F x.
23802381Proof .
23812382move=> subAB Fid; rewrite [in RHS](big_fsetID (mem A)) /=.
2382- rewrite [X in op _ X]big1_fset ?Monoid.mulm1; last first .
2383+ rewrite [X in op _ X]big1_fset ?Monoid.mulm1.
23832384 by move=> i; rewrite !inE /= => /andP[iB iNA _]; apply: Fid.
23842385by apply: eq_fbigl => i; rewrite !inE /= -(@in_fsetI _ B A) (fsetIidPr _).
23852386Qed .
@@ -2425,7 +2426,7 @@ Lemma pair_big_dep_cond (A : {fset I}) (B : I -> {fset J})
24252426 \big[op/idx]_(p <- [fset ((i, j) : I * J) | i in [fset i in A | P i],
24262427 j in [fset j in B i | Q i j]]) F p.1 p.2.
24272428Proof .
2428- rewrite big_imfset2 //=; last by move=> [??] [??] _ _ /= [-> ->].
2429+ rewrite big_imfset2 //=; first by move=> [??] [??] _ _ /= [-> ->].
24292430by rewrite big_fset /=; apply: eq_bigr => i _; rewrite big_fset.
24302431Qed .
24312432End BigFsetDep.
@@ -2450,8 +2451,8 @@ transitivity (\big[op/idx]_(i <- [fset ij | ij in
24502451 by rewrite in_imfset.
24512452 by move=> /andP[/allpairsP[[/= j i] [/imfsetP[/=a aA ->] iA ->/= /eqP<-]]]; exists i.
24522453rewrite eq_big_imfset //= big_map undup_id.
2453- by rewrite big_allpairs; apply: eq_bigr => i /= _; rewrite -big_mkcond .
2454- by rewrite allpairs_uniq => //= -[j0 i0] [j1 i1] /= .
2454+ by rewrite allpairs_uniq => //= -[j0 i0] [j1 i1] /= .
2455+ by rewrite big_allpairs; apply: eq_bigr => i /= _; rewrite -big_mkcond .
24552456Qed .
24562457
24572458End BigComImfset.
@@ -2646,7 +2647,7 @@ have {tI} : {in enum_fset P &, forall A B, A != B -> [disjoint A & B]%fset}.
26462647 by [].
26472648elim: (enum_fset P) (fset_uniq P) => [_|h t ih /= /andP[ht ut] tP].
26482649 by rewrite !big_nil.
2649- rewrite !big_cons -ih //; last first .
2650+ rewrite !big_cons -ih //.
26502651 by move=> x y xt yt xy; apply tP => //; rewrite !inE ?(xt,yt) orbT.
26512652rewrite {1}/fsetU big_imfset //= undup_cat /= big_cat !undup_id //.
26522653congr (op _ _).
@@ -2675,11 +2676,11 @@ have trivP : trivIfset P.
26752676have -> : (\bigcup_(i <- K) F i)%fset = fcover P.
26762677 apply/esym; rewrite /P fcover_imfset big_mkcond /=; apply eq_bigr => i _.
26772678 by case: ifPn => // /negPn/eqP.
2678- rewrite big_trivIfset // /rhs big_imfset => [| i j iK /andP[jK notFj0] eqFij] /=.
2679- rewrite big_filter big_mkcond; apply eq_bigr => i _ .
2680- by case: ifPn => // /negPn /eqP ->; rewrite big_seq_fset0 .
2681- move: iK; rewrite !inE/= => /andP[iK Fi0] .
2682- by apply: contraNeq (disjF _ _ iK jK) _; rewrite -fsetI_eq0 eqFij fsetIid .
2679+ rewrite big_trivIfset // /rhs big_imfset => [i j iK /andP[jK notFj0] eqFij| ] /=.
2680+ move: iK; rewrite !inE/= => /andP[iK Fi0] .
2681+ by apply: contraNeq (disjF _ _ iK jK) _; rewrite -fsetI_eq0 eqFij fsetIid .
2682+ rewrite big_filter big_mkcond; apply eq_bigr => i _ .
2683+ by case: ifPn => // /negPn /eqP ->; rewrite big_seq_fset0 .
26832684Qed .
26842685
26852686End FsetBigOps.
0 commit comments