Skip to content

Commit d8ec02f

Browse files
* Adapt to math-comp/math-comp#1545 * added testing image 2.5.0-rocq-prover-9.1 * added docker image 2.5.0-rocq-prover-9.1 * adding docker image 2.5.0-rocq-prover-9.1 * adding docker image 2.5.0-rocq-prover-9.1 * adding docker image 2.5.0-rocq-prover-9.1 * relaxing hb bound
1 parent dea1d87 commit d8ec02f

20 files changed

Lines changed: 197 additions & 142 deletions

.github/workflows/docker-action.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ on:
99
pull_request:
1010
branches:
1111
- '**'
12+
workflow_dispatch:
1213

1314
jobs:
1415
build:
@@ -18,6 +19,7 @@ jobs:
1819
matrix:
1920
image:
2021
- 'mathcomp/mathcomp:2.4.0-rocq-prover-9.0'
22+
- 'mathcomp/mathcomp:2.5.0-rocq-prover-9.1'
2123
- 'mathcomp/mathcomp-dev:rocq-prover-dev'
2224
fail-fast: false
2325
steps:

README.md

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -29,12 +29,12 @@ This library relies on propositional and functional extentionality axioms.
2929
- Anton Trunov
3030
- Alexander Gryzlov
3131
- License: [Apache-2.0](LICENSE)
32-
- Compatible Coq versions: 9.0 or later
32+
- Compatible Rocq/Coq versions: 9.0 or later
3333
- Additional dependencies:
3434
- [MathComp ssreflect 2.4 or later](https://math-comp.github.io)
3535
- [Hierarchy Builder 1.7.0 or later](https://github.com/math-comp/hierarchy-builder)
3636
- [MathComp algebra](https://math-comp.github.io)
37-
- Coq namespace: `pcm`
37+
- Rocq/Coq namespace: `pcm`
3838
- Related publication(s): none
3939

4040
## Building and installation instructions
@@ -43,15 +43,19 @@ The easiest way to install the latest released version of The PCM library
4343
is via [OPAM](https://opam.ocaml.org/doc/Install.html):
4444

4545
```shell
46-
opam repo add coq-released https://coq.inria.fr/opam/released
46+
opam repo add rocq-released https://rocq-prover.org/opam/released
4747
opam install coq-fcsl-pcm
4848
```
4949

50-
To instead build and install manually, do:
50+
To instead build and install manually, you need to make sure that all the
51+
libraries this development depends on are installed. The easiest way to do that
52+
is still to rely on opam:
5153

5254
``` shell
5355
git clone https://github.com/imdea-software/fcsl-pcm.git
5456
cd fcsl-pcm
57+
opam repo add rocq-released https://rocq-prover.org/opam/released
58+
opam install --deps-only .
5559
make # or make -j <number-of-cores-on-your-machine>
5660
make install
5761
```

coq-fcsl-pcm.opam

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,9 +25,9 @@ This library relies on propositional and functional extentionality axioms."""
2525
build: [make "-j%{jobs}%"]
2626
install: [make "install"]
2727
depends: [
28-
"coq" { (>= "9.0" & < "9.1~") | (= "dev") }
29-
"coq-mathcomp-ssreflect" { (>= "2.4.0" & < "2.5~") | (= "dev") }
30-
"coq-hierarchy-builder" { (>= "1.7.0" & < "1.10~") | (= "dev") }
28+
"coq" { (>= "9.0" & < "9.2~") | (= "dev") }
29+
"coq-mathcomp-ssreflect" { (>= "2.4.0" & < "2.6~") | (= "dev") }
30+
"coq-hierarchy-builder" { (>= "1.7.0" & < "1.11~") | (= "dev") }
3131
"coq-mathcomp-algebra"
3232
]
3333

core/finmap.v

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,9 @@ From mathcomp Require Import ssrnat eqtype seq path.
2222
From pcm Require Export ordtype seqperm.
2323
From pcm Require Import options.
2424

25+
(* change Set to Unset when porting the file, then remove the line when requiring MathComp >= 2.6 *)
26+
Set SsrOldRewriteGoalsOrder.
27+
2528
Section Def.
2629
Variables (K : ordType) (V : Type).
2730

@@ -416,7 +419,7 @@ case: (ordP k2 k3)=>H2 /=.
416419
- rewrite eq_sym H1 /=.
417420
case: (ordP k3 k1)=>H3 /=; case: (ordP k2 k3) (H2)=>//=.
418421
rewrite -(eqP H3) in H1 *.
419-
rewrite -IH //; first by apply: path_sorted H.
422+
rewrite -IH //; last by apply: path_sorted H.
420423
rewrite last_ins' /= 1?eq_sym ?H1 //.
421424
by apply: ord_path H.
422425
- by move: H1; rewrite (eqP H2) /= eq_sym => -> /=; rewrite irr eq_refl.
@@ -520,9 +523,9 @@ Lemma fmap_ind' (P : fmap -> Prop) :
520523
forall s, P s.
521524
Proof.
522525
move=>H1 H2; case; elim=>[|[k v] s IH] /= H.
523-
- by rewrite (_ : FinMap _ = nil); first by rewrite fmapE.
526+
- by rewrite (_ : FinMap _ = nil); last by rewrite fmapE.
524527
have S: sorted ord (map key s) by apply: path_sorted H.
525-
rewrite (_ : FinMap _ = ins k v (FinMap S)).
528+
rewrite (_ : FinMap _ = ins k v (FinMap S)); last first.
526529
- by rewrite fmapE /= last_ins'.
527530
by apply: H2.
528531
Qed.
@@ -534,7 +537,7 @@ Lemma fmap_ind'' (P : fmap -> Prop) :
534537
forall s, P s.
535538
Proof.
536539
move=>H1 H2; case; elim/last_ind=>[|s [k v] IH] /= H.
537-
- by rewrite (_ : FinMap _ = nil); first by rewrite fmapE.
540+
- by rewrite (_ : FinMap _ = nil); last by rewrite fmapE.
538541
have Sb: subseq (map key s) (map key (rcons s (k, v))).
539542
- by elim: s {IH H}=>[|x s IH] //=; rewrite eq_refl.
540543
have S : sorted ord (map key s).
@@ -544,7 +547,7 @@ have T : forall x : K, x \in map key s -> ord x k.
544547
rewrite inE; case/orP; last by apply: IH; apply: path_sorted L.
545548
move/eqP=>->; elim: s {IH} L=>[|[x1 w1] s IH] /=; first by rewrite andbT.
546549
by case/andP=>O /(ord_path O) /IH.
547-
rewrite (_ : FinMap _ = ins k v (FinMap S)).
550+
rewrite (_ : FinMap _ = ins k v (FinMap S)); last first.
548551
- by rewrite fmapE /= first_ins'.
549552
by apply: H2 (IH _)=>x /T.
550553
Qed.
@@ -985,7 +988,7 @@ Lemma sorted_map_key (m : seq (K * U)) :
985988
sorted ord (map key m) -> sorted ord (map key (mapf' m)).
986989
Proof.
987990
elim: m=>[|[k v] m IH] //= H.
988-
rewrite path_min_sorted; last by apply: IH; apply: path_sorted H.
991+
rewrite path_min_sorted; first by apply: IH; apply: path_sorted H.
989992
rewrite map_key_mapf.
990993
by apply/(order_path_min _ H);apply/trans.
991994
Qed.
@@ -1099,7 +1102,7 @@ Lemma mapk_comp m:
10991102
Proof.
11001103
elim/fmap_ind': m =>//= k v s P IH.
11011104
rewrite [mapk (g \o f) _]mapk_ins //.
1102-
rewrite mapk_ins // mapk_ins //; last by rewrite IH.
1105+
rewrite mapk_ins // mapk_ins //; first by rewrite IH.
11031106
exact: (path_mapk Hf P).
11041107
Qed.
11051108
End KeyMap.

core/pred.v

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,10 @@ From Stdlib Require Import ssreflect ssrbool ssrfun Setoid Basics.
1919
From mathcomp Require Import ssrnat seq eqtype bigop.
2020
From pcm Require Import options.
2121

22-
(* First some basic propositional equalities *)
22+
(* change Set to Unset when porting the file, then remove the line when requiring MathComp >= 2.6 *)
23+
Set SsrOldRewriteGoalsOrder.
2324

25+
(* First some basic propositional equalities *)
2426

2527
Lemma andTp p : True /\ p <-> p. Proof. by intuition. Qed.
2628
Lemma andpT p : p /\ True <-> p. Proof. by intuition. Qed.
@@ -867,7 +869,7 @@ Lemma eq_In_filter (T : Type) a1 a2 (s : seq T) :
867869
filter a1 s = filter a2 s.
868870
Proof.
869871
elim: s => //= x s IHs eq_a.
870-
rewrite eq_a; first by rewrite InE; left.
872+
rewrite eq_a; last by rewrite InE; left.
871873
rewrite IHs // => y s_y; apply: eq_a.
872874
by rewrite InE; right.
873875
Qed.

core/prelude.v

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,9 @@ From mathcomp Require Import path fintype finset finfun tuple perm fingroup.
2323
From mathcomp Require Import ssralg.
2424
From pcm Require Import options axioms.
2525

26+
(* change Set to Unset when porting the file, then remove the line when requiring MathComp >= 2.6 *)
27+
Set SsrOldRewriteGoalsOrder.
28+
2629
(***********)
2730
(* Prelude *)
2831
(***********)
@@ -775,7 +778,7 @@ elim: (enum T) (enum_uniq T)=>[|x xs IH] //.
775778
set f := index^~(x :: xs)=>/= /andP [H1 H2].
776779
rewrite {1}/f /= eqxx; congr (0 :: _).
777780
case: (eq_in_map f (fun x=>(index x xs).+1) xs)=>E _.
778-
rewrite E.
781+
rewrite E; last first.
779782
- by move=>z R; rewrite /f /=; case: (x =P z) R H1=>//= ->->.
780783
by rewrite -add1n iotaDl -IH // -map_comp.
781784
Qed.

core/seqext.v

Lines changed: 17 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,9 @@ From Stdlib Require Import ssreflect ssrbool ssrfun.
1515
From mathcomp Require Import ssrnat seq eqtype path choice fintype bigop perm.
1616
From 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.
8487
Proof.
8588
case: (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.
9093
have 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.
400403
case: 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=>->.
405408
by rewrite add0n; apply: IHs.
406409
Qed.
@@ -728,8 +731,8 @@ case/boolP: (has p s2)=>H2; last first.
728731
by rewrite addnC subnDl.
729732
have 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.
733736
by rewrite subnDA.
734737
Qed.
735738

@@ -757,7 +760,7 @@ Lemma nth_findlast x0 p s :
757760
p (nth x0 s (findlast p s)).
758761
Proof.
759762
rewrite 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.
761764
by apply: nth_find.
762765
Qed.
763766

@@ -771,7 +774,7 @@ have Hh: 0 < size s - find p (rev s).
771774
rewrite -size_rev; move/(has_take (size s - i)): (E).
772775
rewrite take_rev -subnS size_rev.
773776
case/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.
799802
rewrite rev_cons -cats1 find_cat has_rev size_rev /=.
800803
case/orP; first by move=>->.
801804
move=>/[dup] H ->; case: ifP=>_ //.
802-
rewrite subSn /=.
805+
rewrite subSn /=; last first.
803806
- by rewrite -size_rev; apply: find_size.
804807
apply: (leq_ltn_trans (IH H)); rewrite ltn_predL subn_gt0.
805808
by 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).
815818
Proof.
816819
move=> 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.
818821
rewrite -cat_rcons; constructor; first by apply: nth_findlast.
819822
by rewrite has_drop // ltnn.
820823
Qed.
@@ -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).
10061009
Proof.
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.
10081011
rewrite filter_cat {1}/unzip1 map_cat; congr (_ ++ _).
10091012
set n := size s1.
10101013
rewrite -{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.
10121015
by apply: eq_map; case.
10131016
Qed.
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}.
12601263
Proof.
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.
12631266
rewrite -filter_predI; apply: eq_in_filter=>x X /=.
12641267
by case E : (p1 x)=>//=; rewrite (S _ E).
12651268
Qed.

core/slice.v

Lines changed: 11 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,9 @@ From pcm Require Import options prelude seqext.
1818
Open Scope order_scope.
1919
Import Order.Theory.
2020

21+
(* change Set to Unset when porting the file, then remove the line when requiring MathComp >= 2.6 *)
22+
Set SsrOldRewriteGoalsOrder.
23+
2124
Section BSimp_Extension.
2225
Context disp (T : porderType disp).
2326
Implicit Types (x y : T) (b c : bool).
@@ -222,7 +225,7 @@ by exact: geq_minl.
222225
Qed.
223226

224227
Corollary slice_usize s : s = &:s `]-oo, size s[.
225-
Proof. by rewrite itv_overR /=; [rewrite addn0|rewrite slice_uu]. Qed.
228+
Proof. by rewrite itv_overR /=; [rewrite slice_uu|rewrite addn0]. Qed.
226229

227230
(* slice size *)
228231

@@ -367,7 +370,7 @@ move: (onth_size H)=>Hk; case: l; case: r=>/=;
367370
rewrite ?addn0 ?addn1.
368371
- by apply: drop_oversize; rewrite size_take Hk.
369372
- rewrite -addn1 addnC -take_drop.
370-
rewrite (take_nth v); first by rewrite size_drop subn_gt0.
373+
rewrite (take_nth v); last by rewrite size_drop subn_gt0.
371374
by rewrite take0 /= nth_drop addn0 nth_onth H.
372375
- by apply: drop_oversize; rewrite size_take Hk.
373376
apply: drop_oversize; rewrite size_take; case: ifP=>// /negbT.
@@ -441,7 +444,7 @@ Lemma slice_xR a x s :
441444
(&:s (Interval a +oo))
442445
(onth s x).
443446
Proof.
444-
move=>Hax; rewrite (slice_split _ true (x:=x)) /=.
447+
move=>Hax; rewrite (slice_split _ true (x:=x)) /=; last first.
445448
- rewrite in_itv /= lexx andbT.
446449
by case: a Hax=>/=[ax av|ax]; case: ax.
447450
rewrite slice_kk /=; case: (onth_sizeP s x)=>[|v] H;
@@ -457,7 +460,7 @@ Lemma slice_xL b x s :
457460
[::]
458461
(onth s x).
459462
Proof.
460-
move=>Hxb; rewrite (slice_split _ false (x:=x)) /=.
463+
move=>Hxb; rewrite (slice_split _ false (x:=x)) /=; last first.
461464
- rewrite in_itv /= lexx /=.
462465
by case: b Hxb=>/=[bx bv|bx]; case: bx.
463466
rewrite slice_kk /=; case: (onth_sizeP s x)=>[|v] H; rewrite H //=.
@@ -556,7 +559,7 @@ Lemma slice_cat_piecewise s1 s2 i :
556559
Proof.
557560
rewrite slice_cat; case: i=>i j /=; case: ifP.
558561
- rewrite in_itv; case/andP=>Hi Hj.
559-
rewrite (itv_overR _ (j:=j)).
562+
rewrite (itv_overR _ (j:=j)); last first.
560563
- case: j Hj=>[[] j|[]] //=.
561564
- by rewrite addn0; move/ltnW.
562565
by rewrite addn1 leEnat; move/(ltnW (n:=j.+1)).
@@ -566,7 +569,7 @@ rewrite slice_cat; case: i=>i j /=; case: ifP.
566569
by rewrite ltnn /= subnn.
567570
rewrite in_itv=>/negbT; rewrite negb_and=>H.
568571
case: ifP=>Hj.
569-
- rewrite (itv_underR (s:=s2)); last by rewrite cats0.
572+
- rewrite (itv_underR (s:=s2)); first by rewrite cats0.
570573
case: {H}j Hj=>[[] j|[]] //=.
571574
- rewrite addn0 leEnat leq_eqVlt; case/orP=>[/eqP->|->] //=.
572575
by rewrite ltnn /= subnn.
@@ -678,10 +681,10 @@ move=>x Hx.
678681
have Hij : i1 <= j1.
679682
- apply: contraLR Hx; rewrite -ltNge=>/ltW Hji.
680683
by rewrite itv_swapped_bnd.
681-
rewrite (@slice_split_bnd _ _ _ i1) /=.
684+
rewrite (@slice_split_bnd _ _ _ i1) /=; last first.
682685
- by rewrite Hi /=; apply/le_trans/Hj.
683686
rewrite mem_cat; apply/orP; right.
684-
rewrite (@slice_split_bnd _ _ _ j1) /=.
687+
rewrite (@slice_split_bnd _ _ _ j1) /=; last first.
685688
- by rewrite Hj andbT.
686689
by rewrite mem_cat Hx.
687690
Qed.

0 commit comments

Comments
 (0)