@@ -15,6 +15,9 @@ From Stdlib Require Import ssreflect ssrbool ssrfun.
1515From mathcomp Require Import ssrnat seq eqtype path choice fintype bigop perm.
1616From pcm Require Import options prelude pred seqperm.
1717
18+ (* change Set to Unset when porting the file, then remove the line when requiring MathComp >= 2.6 *)
19+ Set SsrOldRewriteGoalsOrder.
20+
1821(******************** *)
1922(* Extensions to seq *)
2023(******************** *)
@@ -83,9 +86,9 @@ Lemma drop_take_mask {A} (s : seq A) x y :
8386 drop x (take y s) = mask (nseq x false ++ nseq (y-x) true) s.
8487Proof .
8588case: (ltnP x (size s))=>Hx; last first.
86- - rewrite drop_oversize; first by rewrite size_take_min geq_min Hx orbT.
87- rewrite -{1}(subnKC Hx) nseqD -catA -{3}(cats0 s) mask_cat.
88- - by rewrite size_nseq.
89+ - rewrite drop_oversize; last by rewrite size_take_min geq_min Hx orbT.
90+ rewrite -{1}(subnKC Hx) nseqD -catA -{3}(cats0 s) mask_cat;
91+ last by rewrite size_nseq.
8992 by rewrite mask0 mask_false.
9093have Hx': size (nseq x false) = size (take x s).
9194- by rewrite size_nseq size_take_min; symmetry; apply/minn_idPl/ltnW.
@@ -400,7 +403,7 @@ case: m=>/=[|b m]; first by rewrite in_nil nth_nil andbF.
400403case: b; rewrite !inE eq_sym; case: eqP=>//= _.
401404- by rewrite add0n; apply: IHs.
402405- rewrite -{2}(addn0 1%N) leq_add2l leqn0 => /eqP Hc.
403- rewrite IHs; first by rewrite Hc.
406+ rewrite IHs; last by rewrite Hc.
404407 by move/count_memPn/negbTE: Hc=>->.
405408by rewrite add0n; apply: IHs.
406409Qed .
@@ -728,8 +731,8 @@ case/boolP: (has p s2)=>H2; last first.
728731 by rewrite addnC subnDl.
729732have H2' : find p (rev s2) < size s2.
730733- by rewrite -size_rev -has_find has_rev.
731- rewrite /= orbT andbF -addnBA; first by apply: ltnW.
732- rewrite -!subn1 -subnDA -addnBA; first by rewrite subn_gt0.
734+ rewrite /= orbT andbF -addnBA; last by apply: ltnW.
735+ rewrite -!subn1 -subnDA -addnBA; last by rewrite subn_gt0.
733736by rewrite subnDA.
734737Qed .
735738
@@ -757,7 +760,7 @@ Lemma nth_findlast x0 p s :
757760 p (nth x0 s (findlast p s)).
758761Proof .
759762rewrite findlastE=>/[dup] E ->; rewrite -has_rev in E.
760- rewrite -subnS -nth_rev; first by rewrite -size_rev -has_find.
763+ rewrite -subnS -nth_rev; last by rewrite -size_rev -has_find.
761764by apply: nth_find.
762765Qed .
763766
@@ -771,7 +774,7 @@ have Hh: 0 < size s - find p (rev s).
771774rewrite -size_rev; move/(has_take (size s - i)): (E).
772775rewrite take_rev -subnS size_rev.
773776case/boolP: (i < size s)=>[Hi|].
774- - rewrite subnA //; first by apply: ltnW.
777+ - rewrite subnA //; last by apply: ltnW.
775778 rewrite subnn add0n has_rev=>->.
776779 rewrite ltn_subRL addnC -ltn_subRL subnS.
777780 by case: (size s - find p (rev s)) Hh.
@@ -799,7 +802,7 @@ elim: s=>//= h s IH.
799802rewrite rev_cons -cats1 find_cat has_rev size_rev /=.
800803case/orP; first by move=>->.
801804move=>/[dup] H ->; case: ifP=>_ //.
802- rewrite subSn /=.
805+ rewrite subSn /=; last first .
803806- by rewrite -size_rev; apply: find_size.
804807apply: (leq_ltn_trans (IH H)); rewrite ltn_predL subn_gt0.
805808by rewrite -size_rev -has_find has_rev.
@@ -814,7 +817,7 @@ Lemma split_findlast_nth x0 p s (i := findlast p s) :
814817 split_findlast_nth_spec p s (take i s) (drop i.+1 s) (nth x0 s i).
815818Proof .
816819move=> p_s; rewrite -[X in split_findlast_nth_spec _ X](cat_take_drop i s).
817- rewrite (drop_nth x0 _); first by rewrite -has_findlast.
820+ rewrite (drop_nth x0 _); last by rewrite -has_findlast.
818821rewrite -cat_rcons; constructor; first by apply: nth_findlast.
819822by rewrite has_drop // ltnn.
820823Qed .
@@ -1004,11 +1007,11 @@ Lemma findall_cat p s1 s2 :
10041007 findall p (s1 ++ s2) =
10051008 findall p s1 ++ map (fun n => size s1 + n) (findall p s2).
10061009Proof .
1007- rewrite !findallE size_cat iotaD add0n zip_cat; first by rewrite size_iota.
1010+ rewrite !findallE size_cat iotaD add0n zip_cat; last by rewrite size_iota.
10081011rewrite filter_cat {1}/unzip1 map_cat; congr (_ ++ _).
10091012set n := size s1.
10101013rewrite -{1}(addn0 n) iotaDl zip_mapl filter_map -!map_comp.
1011- rewrite (eq_filter (a2:=(p \o snd))); first by case.
1014+ rewrite (eq_filter (a2:=(p \o snd))); last by case.
10121015by apply: eq_map; case.
10131016Qed .
10141017
@@ -1258,8 +1261,8 @@ Lemma filter_sub (p1 p2 : pred A) (s : seq A) :
12581261 subpred p1 p2 ->
12591262 {subset filter p1 s <= filter p2 s}.
12601263Proof .
1261- move=>S; rewrite (_ : filter p1 s = filter p1 (filter p2 s));
1262- last by apply: mem_subseq; apply: filter_subseq.
1264+ move=>S; rewrite (_ : filter p1 s = filter p1 (filter p2 s)).
1265+ - by apply: mem_subseq; apply: filter_subseq.
12631266rewrite -filter_predI; apply: eq_in_filter=>x X /=.
12641267by case E : (p1 x)=>//=; rewrite (S _ E).
12651268Qed .
0 commit comments