Skip to content

Commit f7992e1

Browse files
authored
Remove module overriding when cloning a theory. (#458)
1 parent ed61f01 commit f7992e1

File tree

5 files changed

+25
-33
lines changed

5 files changed

+25
-33
lines changed

src/ecParser.mly

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3872,8 +3872,11 @@ clone_override:
38723872
| LEMMA x=qoident mode=loc(opclmode) y=qoident
38733873
{ x, PTHO_Axiom (y, unloc mode) }
38743874

3875-
| MODULE x=uqident mode=loc(opclmode) y=uqident
3876-
{ (x, PTHO_Module (y, unloc mode)) }
3875+
| MODULE uqident loc(opclmode) uqident
3876+
{ parse_error
3877+
(EcLocation.make $startpos $endpos)
3878+
(Some "Module overriding is no longer supported.")
3879+
}
38773880

38783881
| MODULE TYPE x=uqident mode=loc(opclmode) y=uqident
38793882
{ (x, PTHO_ModTyp (y, unloc mode)) }

src/ecParsetree.ml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1191,7 +1191,6 @@ and theory_override =
11911191
| PTHO_Op of op_override
11921192
| PTHO_Pred of pr_override
11931193
| PTHO_Axiom of ax_override
1194-
| PTHO_Module of me_override
11951194
| PTHO_ModTyp of mt_override
11961195
| PTHO_Theory of th_override
11971196

src/ecThCloning.ml

Lines changed: 15 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -23,13 +23,13 @@ type ovkind =
2323
| OVK_Abbrev
2424
| OVK_Theory
2525
| OVK_Lemma
26-
| OVK_ModExpr
2726
| OVK_ModType
2827

2928
type clone_error =
3029
| CE_UnkTheory of qsymbol
3130
| CE_DupOverride of ovkind * qsymbol
3231
| CE_UnkOverride of ovkind * qsymbol
32+
| CE_ThyOverride of qsymbol
3333
| CE_UnkAbbrev of qsymbol
3434
| CE_TypeArgMism of ovkind * qsymbol
3535
| CE_OpIncompatible of qsymbol * incompatible
@@ -335,26 +335,6 @@ end = struct
335335
pthp_tactic = Some tc; } in
336336
(pr :: proofs, evc)
337337

338-
(* ------------------------------------------------------------------ *)
339-
let modexpr_ovrd oc ((proofs, evc) : state) name (med : me_override) =
340-
let { pl_loc = lc; pl_desc = ((nm, x) as name) } = name in
341-
342-
let () =
343-
match find_modexpr oc.oc_oth name with
344-
| None ->
345-
clone_error oc.oc_env (CE_UnkOverride (OVK_ModExpr, name));
346-
| _ -> () in
347-
348-
let evc =
349-
evc_update
350-
(fun evc ->
351-
if Msym.mem x evc.evc_modexprs then
352-
clone_error oc.oc_env (CE_DupOverride (OVK_ModExpr, name));
353-
{ evc with evc_modexprs = Msym.add x (mk_loc lc med) evc.evc_modexprs })
354-
nm evc
355-
356-
in (proofs, evc)
357-
358338
(* ------------------------------------------------------------------ *)
359339
let modtype_ovrd oc ((proofs, evc) : state) name (mtd : mt_override) =
360340
let { pl_loc = lc; pl_desc = ((nm, x) as name) } = name in
@@ -388,6 +368,18 @@ end = struct
388368
| Some ({cth_mode = `Concrete} as th) -> th
389369
in
390370

371+
let rec contains_module cth =
372+
let doit it =
373+
match it.ti_item with
374+
| Th_module _ -> true
375+
| Th_theory (_, cth) -> contains_module cth
376+
| _ -> false
377+
in
378+
List.exists doit cth.cth_items
379+
in
380+
if contains_module dth then
381+
clone_error oc.oc_env (CE_ThyOverride name);
382+
391383
let sp =
392384
match EcEnv.Theory.lookup_opt (unloc thd) oc.oc_env with
393385
| None -> clone_error oc.oc_env (CE_UnkOverride (OVK_Theory, unloc thd))
@@ -436,10 +428,8 @@ end = struct
436428
| Th_export _ ->
437429
(proofs, evc)
438430

439-
| Th_module m ->
440-
modexpr_ovrd
441-
oc (proofs, evc) (loced (xdth @ prefix, m.tme_expr.me_name))
442-
(loced (thd @ prefix, m.tme_expr.me_name), mode)
431+
| Th_module _ ->
432+
(proofs, evc)
443433

444434
| Th_modtype (x, _) ->
445435
modtype_ovrd
@@ -474,9 +464,6 @@ end = struct
474464
| PTHO_Axiom axd ->
475465
ax_ovrd oc state name axd
476466

477-
| PTHO_Module med ->
478-
modexpr_ovrd oc state name med
479-
480467
| PTHO_ModTyp mtd ->
481468
modtype_ovrd oc state name mtd
482469

src/ecThCloning.mli

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,13 +17,13 @@ type ovkind =
1717
| OVK_Abbrev
1818
| OVK_Theory
1919
| OVK_Lemma
20-
| OVK_ModExpr
2120
| OVK_ModType
2221

2322
type clone_error =
2423
| CE_UnkTheory of qsymbol
2524
| CE_DupOverride of ovkind * qsymbol
2625
| CE_UnkOverride of ovkind * qsymbol
26+
| CE_ThyOverride of qsymbol
2727
| CE_UnkAbbrev of qsymbol
2828
| CE_TypeArgMism of ovkind * qsymbol
2929
| CE_OpIncompatible of qsymbol * incompatible

src/ecUserMessages.ml

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -703,7 +703,6 @@ end = struct
703703
| OVK_Abbrev -> "abbreviation"
704704
| OVK_Theory -> "theory"
705705
| OVK_Lemma -> "lemma/axiom"
706-
| OVK_ModExpr -> "module"
707706
| OVK_ModType -> "module type"
708707

709708
let pp_incompatible env fmt = function
@@ -735,6 +734,10 @@ end = struct
735734
msg "unknown %s `%s'"
736735
(string_of_ovkind kd) (string_of_qsymbol x)
737736

737+
| CE_ThyOverride x ->
738+
msg "Cannot override theory `%s`: contains module"
739+
(string_of_qsymbol x)
740+
738741
| CE_UnkAbbrev x ->
739742
msg "unknown abbreviation: `%s'" (string_of_qsymbol x)
740743

0 commit comments

Comments
 (0)