Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

derive: param1 support for is_true and primitive strings #784

Merged
merged 9 commits into from
Feb 26, 2025
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,10 @@ jobs:
with:
opam_file: 'rocq-elpi.opam'
custom_image: ${{ matrix.image }}
after_script: |
sudo chmod -R a+w .
make all-examples
make all-tests
export: 'OPAMWITHTEST OPAMIGNORECONSTRAINTS OPAMVERBOSE' # space-separated list of variables
env:
OPAMWITHTEST: 'true'
Expand Down
7 changes: 7 additions & 0 deletions Changelog.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,10 @@
# UNRELEASED

### APPS:
- derive: support for primitive strings in `param1` and `param1_trivial`
- derive: support for `is_true` in `param1_trivial` (based on pre-existing
special support for `is_eq` and `is_bool`)

# [2.5.0] 18/2/2025

Requires Elpi 2.0.7 and Coq 8.20 or Rocq 9.0.
Expand Down
4 changes: 2 additions & 2 deletions _CoqProject
Original file line number Diff line number Diff line change
Expand Up @@ -8,8 +8,8 @@

# Theories

-Q theories elpi
-Q _build/default/theories elpi
-R theories elpi
-R _build/default/theories elpi
-Q theories-stdlib elpi_stdlib
-Q _build/default/theories-stdlib elpi_stdlib

Expand Down
1 change: 0 additions & 1 deletion apps/cs/tests/setup-project.sh

This file was deleted.

3 changes: 1 addition & 2 deletions apps/derive/elpi/eqType.elpi
Original file line number Diff line number Diff line change
Expand Up @@ -63,7 +63,6 @@ translate-record-constructor (field _ ID _ _) _ (error S) :- S is "unsupported r
pred self o:eqb.trm.

pred valid i:eqb.trm, o:diagnostic.
valid (eqb.global X) ok :- global X = {{ PrimInt63.int }}, !.
valid (eqb.global GR) ok :- eqType GR _, !.
valid (eqb.app GR A Args) D :- eqType GR EQT, !, valid-eqType EQT [A|Args] D.
valid T (error S) :- S is "not an eqType: " ^ {std.any->string T}.
Expand All @@ -86,7 +85,7 @@ irrelevant? (app [{{ @eq }}, global EqType, A, B]) (eqb.app EQ EQTYPE [A1,B1]) D
term->trm A A1,
term->trm B B1,
].
irrelevant? T R D :- whd1 T T1, coq.say "whd" T T1, irrelevant? T1 R D.
irrelevant? T R D :- whd1 T T1, irrelevant? T1 R D.

pred term->trm i:term, o:eqb.trm, o:diagnostic.
term->trm (global GR) (eqb.global GR) ok :- !.
Expand Down
1 change: 1 addition & 0 deletions apps/derive/tests/test_bcongr.v
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ Elpi derive.bcongr large.
*)
Elpi derive.bcongr prim_int.
Elpi derive.bcongr prim_float.
Elpi derive.bcongr prim_string.
Elpi derive.bcongr fo_record.
Elpi derive.bcongr pa_record.
Elpi derive.bcongr pr_record.
Expand Down
7 changes: 5 additions & 2 deletions apps/derive/tests/test_derive_corelib.v
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
(* Some standard data types using different features *)
From elpi.core Require PrimInt63.
From elpi.core Require PrimFloat.
From elpi Require elpi.
From elpi.core Require PrimInt63 PrimFloat PrimString.

Module Coverage.

Expand Down Expand Up @@ -70,6 +70,7 @@ Inductive large :=

Inductive prim_int := PI (i : PrimInt63.int).
Inductive prim_float := PF (f : PrimFloat.float).
Inductive prim_string := PS (s : lib:elpi.pstring).

Record fo_record := { f1 : peano; f2 : unit; }.

Expand All @@ -91,6 +92,8 @@ Definition is_zero (n:peano) : bool :=

Record sigma_bool := { depn : peano; depeq : is_zero depn = true }.

Record sigma_bool2 := { depn2 : peano; depeq2 : lib:elpi.is_true (is_zero depn2) }.

Fixpoint is_leq (n m:peano) : bool :=
match n, m with
| Zero, _ => true
Expand Down
1 change: 1 addition & 0 deletions apps/derive/tests/test_eq.v
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ Fail Elpi derive.eq iota.
Elpi derive.eq large.
Elpi derive.eq prim_int.
Elpi derive.eq prim_float.
Elpi derive.eq prim_string.
Elpi derive.eq fo_record.
Elpi derive.eq pa_record.
Elpi derive.eq pr_record.
Expand Down
1 change: 1 addition & 0 deletions apps/derive/tests/test_eqK.v
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ Elpi derive.eqK large.
*)
Elpi derive.eqK prim_int.
Elpi derive.eqK prim_float.
Elpi derive.eqK prim_string.
Elpi derive.eqK fo_record.
Elpi derive.eqK pa_record.
Elpi derive.eqK pr_record.
Expand Down
3 changes: 2 additions & 1 deletion apps/derive/tests/test_eqOK.v
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
From elpi.apps Require Import derive.eqOK.
From elpi.apps Require Import derive.param1 derive.eqOK.

From elpi.apps Require Import test_derive_corelib test_eqcorrect test_param1 test_param1_trivial.

Expand Down Expand Up @@ -31,6 +31,7 @@ Elpi derive.eqOK large.
*)
Elpi derive.eqOK prim_int.
Fail Elpi derive.eqOK prim_float.
Elpi derive.eqOK prim_string.
Elpi derive.eqOK fo_record.
Elpi derive.eqOK pa_record.
Elpi derive.eqOK pr_record.
Expand Down
2 changes: 2 additions & 0 deletions apps/derive/tests/test_eqType_ast.v
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ Fail Elpi derive.eqType.ast iota.
Elpi derive.eqType.ast large.
Elpi derive.eqType.ast prim_int.
Fail Elpi derive.eqType.ast prim_float.
Elpi derive.eqType.ast prim_string.
Elpi derive.eqType.ast fo_record.
Elpi derive.eqType.ast pa_record.
Elpi derive.eqType.ast pr_record.
Expand All @@ -32,6 +33,7 @@ Elpi derive.eqType.ast enum.
Elpi derive.eqType.ast bool.
Fail Elpi derive.eqType.ast eq.
Elpi derive.eqType.ast sigma_bool.
Elpi derive.eqType.ast sigma_bool2.
Elpi derive.eqType.ast ord.
Elpi derive.eqType.ast ord2.
Elpi derive.eqType.ast val.
Expand Down
2 changes: 2 additions & 0 deletions apps/derive/tests/test_eqb.v
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ Elpi derive.eqb large.
*)
Elpi derive.eqb prim_int.
Fail Elpi derive.eqb prim_float.
Elpi derive.eqb prim_string.
Elpi derive.eqb fo_record.
Elpi derive.eqb pa_record.
Elpi derive.eqb pr_record.
Expand All @@ -34,6 +35,7 @@ Elpi derive.eqb enum.
Fail Elpi derive.eqb eq.
Elpi derive.eqb bool.
Elpi derive.eqb sigma_bool.
Elpi derive.eqb sigma_bool2.
Elpi derive.eqb ord.
Elpi derive.eqb ord2.
Elpi derive.eqb val.
Expand Down
2 changes: 2 additions & 0 deletions apps/derive/tests/test_eqbOK.v
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ Elpi derive.eqbOK large.
*)
Elpi derive.eqbOK prim_int.
Fail Elpi derive.eqbOK prim_float.
Elpi derive.eqbOK prim_string.
Elpi derive.eqbOK fo_record.
Elpi derive.eqbOK pa_record.
Elpi derive.eqbOK pr_record.
Expand All @@ -40,6 +41,7 @@ Elpi derive.eqbOK enum.
Fail Elpi derive.eqbOK eq.
Elpi derive.eqbOK bool.
Elpi derive.eqbOK sigma_bool.
Elpi derive.eqbOK sigma_bool2.
Elpi derive.eqbOK ord.
Elpi derive.eqbOK ord2.
Elpi derive.eqbOK val.
Expand Down
2 changes: 2 additions & 0 deletions apps/derive/tests/test_eqbcorrect.v
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ Elpi derive.eqbcorrect large.
*)
Elpi derive.eqbcorrect prim_int.
Fail Elpi derive.eqbcorrect prim_float. (* Can not work, we don't have a syntaxtic test *)
Elpi derive.eqbcorrect prim_string.
Elpi derive.eqbcorrect fo_record.
Elpi derive.eqbcorrect pa_record.
Elpi derive.eqbcorrect pr_record.
Expand All @@ -45,6 +46,7 @@ Elpi derive.eqbcorrect enum.
Fail Elpi derive.eqbcorrect eq.
Elpi derive.eqbcorrect bool.
Elpi derive.eqbcorrect sigma_bool.
Elpi derive.eqbcorrect sigma_bool2.
Elpi derive.eqbcorrect ord.
Elpi derive.eqbcorrect ord2.
Elpi derive.eqbcorrect val.
Expand Down
1 change: 1 addition & 0 deletions apps/derive/tests/test_eqcorrect.v
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ Elpi derive.eqcorrect large.
*)
Elpi derive.eqcorrect prim_int.
Fail Elpi derive.eqcorrect prim_float.
Elpi derive.eqcorrect prim_string.
Elpi derive.eqcorrect fo_record.
Elpi derive.eqcorrect pa_record.
Elpi derive.eqcorrect pr_record.
Expand Down
2 changes: 2 additions & 0 deletions apps/derive/tests/test_fields.v
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ Fail Elpi derive.fields iota.
Elpi derive.fields large.
Elpi derive.fields prim_int.
Fail Elpi derive.fields prim_float.
Elpi derive.fields prim_string.
Elpi derive.fields fo_record.
Elpi derive.fields pa_record.
Elpi derive.fields pr_record.
Expand All @@ -32,6 +33,7 @@ Elpi derive.fields enum.
Elpi derive.fields bool.
Fail Elpi derive.fields eq.
Elpi derive.fields sigma_bool.
Elpi derive.fields sigma_bool2.
Elpi derive.fields ord.
Elpi derive.fields ord2.
Elpi derive.fields val.
Expand Down
6 changes: 4 additions & 2 deletions apps/derive/tests/test_induction.v
Original file line number Diff line number Diff line change
Expand Up @@ -28,14 +28,15 @@ Elpi derive.induction iota.
Elpi derive.induction large.
Elpi derive.induction prim_int.
Elpi derive.induction prim_float.
Elpi derive.induction prim_string.
Elpi derive.induction fo_record.
Elpi derive.induction pa_record.
Elpi derive.induction pr_record.
Elpi derive.induction dep_record.
Elpi derive.induction enum.
Elpi derive.induction eq.
Elpi derive.induction bool.
Elpi derive.induction sigma_bool.
Elpi derive.induction bool.
Elpi derive.induction sigma_bool2.
Elpi derive.induction ord.
Elpi derive.induction ord2.
Elpi derive.induction val.
Expand Down Expand Up @@ -66,5 +67,6 @@ Redirect "tmp" Check pr_record_induction : forall A pr P, (forall x, is_peano x
Redirect "tmp" Check dep_record_induction : forall P, (forall x (px : is_peano x) y, is_vect unit is_unit x px y -> P (Build_dep_record x y)) -> forall x, is_dep_record x -> P x.
Redirect "tmp" Check enum_induction : forall P, (P E1) -> (P E2) -> (P E3) -> forall x, is_enum x -> P x.
Redirect "tmp" Check sigma_bool_induction.
Redirect "tmp" Check sigma_bool2_induction.
Redirect "tmp" Check ord_induction : forall p Pp P, (forall n Pn l, is_eq bool is_bool (is_leq n p) (is_is_leq n Pn p Pp) true is_true l -> P (mkOrd p n l)) -> forall (o : ord p), is_ord p Pp o -> P o.
Redirect "tmp" Check ord2_induction : forall p Pp P, (forall (o1 : ord p), is_ord p Pp o1 -> forall (o2 : ord p), is_ord p Pp o2 -> P (mkOrd2 p o1 o2)) -> forall (o : ord2 p), is_ord2 p Pp o -> P o.
1 change: 1 addition & 0 deletions apps/derive/tests/test_isK.v
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ Elpi derive.isK iota.
Elpi derive.isK large.
Elpi derive.isK prim_int.
Elpi derive.isK prim_float.
Elpi derive.isK prim_string.
Elpi derive.isK fo_record.
Elpi derive.isK pa_record.
Elpi derive.isK pr_record.
Expand Down
2 changes: 1 addition & 1 deletion apps/derive/tests/test_lens.v
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ intros; unfold _pf3.
match goal with
| |- x = {| over := fun f r => {| pf3 := f (_ r); pf4 := _ r |} ;
view := _ |}
=> idtac "ok"
=> idtac
| |- _ => fail "not primitive"
end.
Abort.
Expand Down
1 change: 1 addition & 0 deletions apps/derive/tests/test_map.v
Original file line number Diff line number Diff line change
Expand Up @@ -33,6 +33,7 @@ Elpi derive.map enum.
Fail Elpi derive.map eq.
Elpi derive.map bool.
Elpi derive.map sigma_bool.
Elpi derive.map sigma_bool2.
Fail Elpi derive.map ord.
Elpi derive.map val.
End Coverage.
Expand Down
6 changes: 3 additions & 3 deletions apps/derive/tests/test_param1.v
Original file line number Diff line number Diff line change
Expand Up @@ -25,17 +25,19 @@ Elpi derive.param1 iota.
Elpi derive.param1 large.
Elpi derive.param1 prim_int.
Elpi derive.param1 prim_float.
Elpi derive.param1 prim_string.
Elpi derive.param1 fo_record.
Elpi derive.param1 pa_record.
Elpi derive.param1 pr_record.
Elpi derive.param1 dep_record.
Elpi derive.param1 enum.
(*
Elpi derive.param1 eq. (* done in param1.v *)
Elpi derive.param1 bool. (* done in param1.v *)
*)
Elpi derive.param1 bool.
Elpi derive.param1 is_zero.
Elpi derive.param1 sigma_bool.
Elpi derive.param1 sigma_bool2.
Elpi derive.param1 is_leq.
Elpi derive.param1 ord.
Elpi derive.param1 ord2.
Expand Down Expand Up @@ -101,15 +103,13 @@ Fixpoint vec_length (A : Type) n (v : vec A n) :=
Elpi derive.param1 vec_length.
Elpi derive.param1 list.
Elpi derive.param1 is_list.
Elpi derive.param1 eq.

Fixpoint plus' m n := match n with 0 => m | S n => S (plus' m n) end.
Elpi derive.param1 plus'.
Elpi derive.param1 plus.
Elpi derive.param1 prod.
Elpi derive.param1 fst.
Elpi derive.param1 snd.
Elpi derive.param1 bool.
Elpi derive.param1 Nat.divmod.
Elpi derive.param1 Nat.div.

Expand Down
2 changes: 2 additions & 0 deletions apps/derive/tests/test_param1_congr.v
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ Elpi derive.param1.congr is_large. (* slow *)
*)
Elpi derive.param1.congr is_prim_int.
Elpi derive.param1.congr is_prim_float.
Elpi derive.param1.congr is_prim_string.
Elpi derive.param1.congr is_fo_record.
Elpi derive.param1.congr is_pa_record.
Elpi derive.param1.congr is_pr_record.
Expand All @@ -37,6 +38,7 @@ Elpi derive.param1.congr is_enum.
Elpi derive.param1.congr is_bool.
Elpi derive.param1.congr is_eq.
Elpi derive.param1.congr is_sigma_bool.
Elpi derive.param1.congr is_sigma_bool2.
Elpi derive.param1.congr is_ord.
Elpi derive.param1.congr is_val.
End Coverage.
Expand Down
8 changes: 5 additions & 3 deletions apps/derive/tests/test_param1_functor.v
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
From elpi.apps Require Import derive.param1_functor.
From elpi.apps Require Import derive.param1 derive.param1_functor.

From elpi.apps.derive.tests Require Import test_derive_corelib test_param1.
Import test_derive_corelib.Coverage.
Expand Down Expand Up @@ -26,14 +26,16 @@ Elpi derive.param1.functor is_iota.
Elpi derive.param1.functor is_large.
Elpi derive.param1.functor is_prim_int.
Elpi derive.param1.functor is_prim_float.
Elpi derive.param1.functor is_prim_string.
Elpi derive.param1.functor is_fo_record.
Elpi derive.param1.functor is_pa_record.
Elpi derive.param1.functor is_pr_record.
Elpi derive.param1.functor is_dep_record.
Elpi derive.param1.functor is_enum.
Fail Elpi derive.param1.functor param1.is_eq.
Elpi derive.param1.functor is_bool.
Fail Elpi derive.param1.functor derive.param1.exports.is_eq.
Elpi derive.param1.functor derive.param1.exports.is_bool.
Elpi derive.param1.functor is_sigma_bool.
Elpi derive.param1.functor is_sigma_bool2.
Elpi derive.param1.functor is_ord.
Elpi derive.param1.functor is_ord2.
Elpi derive.param1.functor is_val.
Expand Down
2 changes: 2 additions & 0 deletions apps/derive/tests/test_param1_trivial.v
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ Fail Elpi derive.param1.trivial is_iota.
Elpi derive.param1.trivial is_large.
Elpi derive.param1.trivial is_prim_int.
Elpi derive.param1.trivial is_prim_float.
Elpi derive.param1.trivial is_prim_string.
Elpi derive.param1.trivial is_fo_record.
Elpi derive.param1.trivial is_pa_record.
Elpi derive.param1.trivial is_pr_record.
Expand All @@ -38,6 +39,7 @@ Elpi derive.param1.trivial is_bool.
Elpi derive.param1.trivial is_eq. (* ad-hoc *)
*)
Elpi derive.param1.trivial is_sigma_bool.
Elpi derive.param1.trivial is_sigma_bool2.
Elpi derive.param1.trivial is_ord.
Elpi derive.param1.trivial is_ord2.
Elpi derive.param1.trivial is_val.
Expand Down
1 change: 1 addition & 0 deletions apps/derive/tests/test_projK.v
Original file line number Diff line number Diff line change
Expand Up @@ -24,6 +24,7 @@ Elpi derive.projK iota.
Elpi derive.projK large.
Elpi derive.projK prim_int.
Elpi derive.projK prim_float.
Elpi derive.projK prim_string.
Elpi derive.projK fo_record.
Elpi derive.projK pa_record.
Elpi derive.projK pr_record.
Expand Down
2 changes: 2 additions & 0 deletions apps/derive/tests/test_tag.v
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ Elpi derive.tag iota.
Elpi derive.tag large.
Elpi derive.tag prim_int.
Elpi derive.tag prim_float.
Elpi derive.tag prim_string.
Elpi derive.tag fo_record.
Elpi derive.tag pa_record.
Elpi derive.tag pr_record.
Expand All @@ -33,6 +34,7 @@ Elpi derive.tag enum.
Elpi derive.tag eq.
Elpi derive.tag bool.
Elpi derive.tag sigma_bool.
Elpi derive.tag sigma_bool2.
Elpi derive.tag ord.
Elpi derive.tag ord2.
Elpi derive.tag val.
Expand Down
3 changes: 2 additions & 1 deletion apps/derive/theories/derive/eq.v
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ From elpi.apps.derive.elpi Extra Dependency "derive_synterp_hook.elpi" as derive
From elpi Require Import elpi.
From elpi.apps Require Import derive.

From elpi.core Require Import PrimInt63 PrimFloat.
From elpi.core Require Import PrimInt63 PrimFloat PrimString.

Register Coq.Numbers.Cyclic.Int63.PrimInt63.eqb as elpi.derive.eq_unit63.
Register Coq.Floats.PrimFloat.eqb as elpi.derive.eq_float64.
Expand All @@ -20,6 +20,7 @@ Elpi Db derive.eq.db lp:{{
type eq-db term -> term -> term -> prop.
eq-db {{ lib:num.int63.type }} {{ lib:num.int63.type }} {{ lib:elpi.derive.eq_unit63 }} :- !.
eq-db {{ lib:num.float.type }} {{ lib:num.float.type }} {{ lib:elpi.derive.eq_float64 }} :- !.
eq-db {{ lib:elpi.pstring }} {{ lib:elpi.pstring }} {{ lib:elpi.pstring_eqb }} :- !.

% quick access
type eq-for inductive -> constant -> prop.
Expand Down
Loading
Loading