Skip to content

Commit fd6e2b6

Browse files
committed
fixes
1 parent 1606f62 commit fd6e2b6

File tree

5 files changed

+37
-10
lines changed

5 files changed

+37
-10
lines changed

apps/derive/elpi/derive.elpi

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ main T P CL :- get-option "recursive" tt, !,
100100
pred main.aux i:list gref, i:list prop, o:list prop.
101101
main.aux [] X X.
102102
main.aux [T|TS] Acc CL :-
103-
/* (pi X\get-option "only" X :- !, fail) => */ Acc => main T tt CL1,
103+
Acc => main T tt CL1,
104104
main.aux TS {std.append CL1 Acc} CL.
105105

106106
main T P CL :- main1 T P CL.

apps/derive/elpi/eqb.elpi

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -190,12 +190,18 @@ fields.branch2 Args Args2 VarsA _ _ VarsB _ R :-
190190
fields.aux Args Args2 VarsA VarsB R.
191191

192192

193+
pred mk-eqb-for i:term, i:term, o:term.
194+
mk-eqb-for T1 T2 R :- eqb-for T1 T2 R, !.
195+
mk-eqb-for T1 _ _ :-
196+
Msg is "derive.eqb: missing boolean equality for " ^ {coq.term->string T1} ^ ", maybe use derive.eqb first",
197+
stop Msg.
198+
193199
pred fields.aux i:arguments, i:arguments, i:list term, i:list term, o:term.
194200

195201
fields.aux (dependent TYX FX) (dependent TYY FY) [X|XS] [Y|YS] {{ lib:elpi.andb (lp:EQB lp:X lp:Y) lp:R1 }} :-
196202
feqb.trm->term TYX TX,
197203
feqb.trm->term TYY TY,
198-
std.assert! (eqb-for TX TY EQB) "??",
204+
mk-eqb-for TX TY EQB,
199205
@pi-decl `p` TX n\ pi a\ (feqb.trm->term a n :- !) =>
200206
@pi-decl `p` TY m\ pi b\ (feqb.trm->term b m :- !) =>
201207
fields.aux (FX a) (FY b) XS YS (R n m),
@@ -204,7 +210,7 @@ fields.aux (dependent TYX FX) (dependent TYY FY) [X|XS] [Y|YS] {{ lib:elpi.andb
204210
fields.aux (regular TYX FX) (regular TYY FY) [X|XS] [Y|YS] {{ lib:elpi.andb (lp:EQB lp:X lp:Y) lp:R }} :-
205211
feqb.trm->term TYX TX,
206212
feqb.trm->term TYY TY,
207-
std.assert! (eqb-for TX TY EQB) "??",
213+
mk-eqb-for TX TY EQB,
208214
fields.aux FX FY XS YS R.
209215

210216
fields.aux (irrelevant _ FX) (irrelevant _ FY) [_|XS] [_|YS] R :- fields.aux FX FY XS YS R.

apps/derive/elpi/eqbcorrect.elpi

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -431,11 +431,15 @@ apply-functor X [ff|Mask] [Y|YS] Rec R :- reali Y PY, apply-functor {coq.mk-app
431431

432432
pred mk-reali i:term, o:term.
433433
mk-reali T R :- reali T R, !.
434-
mk-reali T _ :- coq.error {calc ("derive.eqbcorrect: no unary parametricity translation for " ^ {coq.term->string T} ^ ", use derive.param1 first")}.
434+
mk-reali T _ :-
435+
Msg is "derive.eqbcorrect: no unary parametricity translation for " ^ {coq.term->string T} ^ ", use derive.param1 first",
436+
stop Msg.
435437

436438
pred mk-eqb-for i:term, o:term.
437439
mk-eqb-for T R :- eqb-for T T R, !.
438-
mk-eqb-for T _ :- coq.error {calc ("derive.eqbcorrect: boolean equality for " ^ {coq.term->string T} ^ ", maybe use derive.eqb first")}.
440+
mk-eqb-for T _ :-
441+
Msg is "derive.eqbcorrect: missing boolean equality for " ^ {coq.term->string T} ^ ", maybe use derive.eqb first",
442+
stop Msg.
439443

440444
}
441445

apps/derive/examples/usage.v

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -68,7 +68,8 @@ Check Box._tag_contents_exchange : (* another one *)
6868
forall A (r : Box A) x y, set Box._tag x (set Box._contents y r) =
6969
set Box._contents y (set Box._tag x r).
7070

71-
(** Finally, one can derive an existing inductive typegenerated constants are
71+
(** Finally, one can derive an existing inductive type.
72+
Generated constants are
7273
prefixed with nat_ but won't be in the right
7374
place, which is where the type is defined. This means that two users
7475
may run derive for the same type in different files, leading to

apps/derive/theories/derive/param1_trivial.v

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -149,19 +149,35 @@ Elpi Accumulate Db derive.param1.trivial.db.
149149
Elpi Accumulate File param1_inhab.
150150
Elpi Accumulate File param1_trivial.
151151
Elpi Accumulate lp:{{
152-
main [str I, str O] :- !, coq.locate I (indt GR),
153-
derive.param1.inhab.main GR O CL,
154-
CL => derive.param1.trivial.main GR O _.
155152
main [str I] :- !, coq.locate I (indt GR),
156153
derive.param1.inhab.main GR "_witness" CL,
157154
CL => derive.param1.trivial.main GR "_trivial" _.
158155
main _ :- usage.
159156

160157
usage :-
161-
coq.error "Usage: derive.param1.trivial <inductive type name> [<output suffix>]".
158+
coq.error "Usage: derive.param1.trivial <inductive type name>".
162159
}}.
163160
Elpi Typecheck.
164161

162+
Elpi Command derive.param1.inhab.
163+
Elpi Accumulate File derive_hook.
164+
Elpi Accumulate File paramX.
165+
Elpi Accumulate File param1.
166+
Elpi Accumulate Db derive.param1.db.
167+
Elpi Accumulate Db derive.param1.congr.db.
168+
Elpi Accumulate Db derive.param1.trivial.db.
169+
Elpi Accumulate File param1_inhab.
170+
Elpi Accumulate lp:{{
171+
main [str I] :- !, coq.locate I (indt GR),
172+
derive.param1.inhab.main GR "_witness" _.
173+
main _ :- usage.
174+
175+
usage :-
176+
coq.error "Usage: derive.param1.inhab <inductive type name>".
177+
}}.
178+
Elpi Typecheck.
179+
180+
165181
(* hook into derive *)
166182
Elpi Accumulate derive Db derive.param1.trivial.db.
167183
Elpi Accumulate derive File param1_inhab.

0 commit comments

Comments
 (0)