Skip to content

Commit da06334

Browse files
committed
Do not store recursive trees anymore in inductive blocks.
This data is now useless as it can be recovered from the compiled automaton.
1 parent a2eaff6 commit da06334

12 files changed

Lines changed: 20 additions & 56 deletions

File tree

checker/checkInductive.ml

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -174,7 +174,7 @@ let check_same_record r1 r2 = match r1, r2 with
174174
let check_packet mind ind
175175
{ mind_typename; mind_arity_ctxt; mind_user_arity; mind_record; mind_sort; mind_consnames; mind_user_lc;
176176
mind_nrealargs; mind_nrealdecls; mind_squashed; mind_nf_lc;
177-
mind_consnrealargs; mind_consnrealdecls; mind_recargs; mind_automaton; mind_relevance;
177+
mind_consnrealargs; mind_consnrealdecls; mind_automaton; mind_relevance;
178178
mind_relies_on_indices_not_mattering; mind_nb_constant; mind_nb_args; mind_reloc_tbl } =
179179
let check = check mind in
180180

@@ -196,7 +196,6 @@ let check_packet mind ind
196196
check "mind_consnrealargs" (Array.equal Int.equal ind.mind_consnrealargs mind_consnrealargs);
197197
check "mind_consnrealdecls" (Array.equal Int.equal ind.mind_consnrealdecls mind_consnrealdecls);
198198

199-
check "mind_recargs" (Rtree.equal eq_recarg ind.mind_recargs mind_recargs);
200199
check "mind_automaton" (Rtree.Automaton.equal eq_recarg ind.mind_automaton mind_automaton);
201200

202201
check "mind_relevant" (Sorts.relevance_equal ind.mind_relevance mind_relevance);

checker/values.ml

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -430,14 +430,6 @@ let v_recarg_type = v_sum "recarg_type" 0
430430
let v_recarg = v_sum "recarg" 1 (* Norec *)
431431
[|[|v_recarg_type|] (* Mrec *)|]
432432

433-
let v_wfp =
434-
fix (fun v_wfp ->
435-
v_sum_c ("wf_paths",0,
436-
[|[|v_int;v_int|]; (* Rtree.Param *)
437-
[|v_recarg;v_array (v_array v_wfp)|]; (* Rtree.Node *)
438-
[|v_int;v_array v_wfp|] (* Rtree.Rec *)
439-
|]))
440-
441433
let v_automaton =
442434
v_tuple "automaton"
443435
[|v_int; v_array (v_pair v_recarg (v_array (v_array v_int)))|]
@@ -463,7 +455,6 @@ let v_one_ind = v_tuple "one_inductive_body"
463455
v_array (v_pair v_rctxt v_constr);
464456
v_array v_int;
465457
v_array v_int;
466-
v_wfp;
467458
v_automaton;
468459
v_relevance;
469460
v_bool;

kernel/declarations.mli

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -248,9 +248,7 @@ type one_inductive_body = {
248248
mind_consnrealdecls : int array;
249249
(** Length of the signature of the constructors (with let, w/o params) *)
250250

251-
mind_recargs : wf_paths; (** Signature of recursive arguments in the constructors *)
252-
253-
mind_automaton : recarg Rtree.Automaton.t; (** Minimal automaton generated from the above *)
251+
mind_automaton : recarg Rtree.Automaton.t; (** Minimal automaton generated from the inductive tree *)
254252

255253
mind_relevance : Sorts.relevance;
256254
(* XXX this is redundant with mind_sort, is it actually worth keeping? *)

kernel/declareops.ml

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -218,12 +218,6 @@ let dest_subterms p =
218218
assert (match ra with Norec -> false | _ -> true);
219219
Array.map Array.to_list cstrs
220220

221-
let recarg_length p j =
222-
let (_,cstrs) = Rtree.dest_node p in
223-
Array.length cstrs.(j-1)
224-
225-
let subst_wf_paths subst p = Rtree.Smart.map (subst_recarg subst) p
226-
227221
let subst_automaton subst a =
228222
Rtree.Automaton.map (fun r -> subst_recarg subst r) a
229223

@@ -251,7 +245,6 @@ let subst_mind_packet subst mbp =
251245
mind_nrealargs = mbp.mind_nrealargs;
252246
mind_nrealdecls = mbp.mind_nrealdecls;
253247
mind_squashed = mbp.mind_squashed;
254-
mind_recargs = subst_wf_paths subst mbp.mind_recargs (*wf_paths*);
255248
mind_automaton = subst_automaton subst mbp.mind_automaton;
256249
mind_relevance = mbp.mind_relevance;
257250
mind_relies_on_indices_not_mattering = mbp.mind_relies_on_indices_not_mattering;

kernel/declareops.mli

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -51,9 +51,6 @@ val mk_norec : wf_paths
5151
val mk_paths : recarg -> wf_paths list array -> wf_paths
5252
val dest_recarg : wf_paths -> recarg
5353
val dest_subterms : wf_paths -> wf_paths list array
54-
val recarg_length : wf_paths -> int -> int
55-
56-
val subst_wf_paths : substitution -> wf_paths -> wf_paths
5754

5855
val subst_mind_body : substitution -> mutual_inductive_body -> mutual_inductive_body
5956

kernel/discharge.ml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -155,7 +155,6 @@ let cook_one_ind info cache ~params ~ntypes mip =
155155
mind_nf_lc;
156156
mind_consnrealargs = mip.mind_consnrealargs;
157157
mind_consnrealdecls = mip.mind_consnrealdecls;
158-
mind_recargs = mip.mind_recargs;
159158
mind_automaton = mip.mind_automaton;
160159
mind_relevance = lift_relevance info mip.mind_relevance;
161160
mind_relies_on_indices_not_mattering = mip.mind_relies_on_indices_not_mattering;

kernel/indtypes.ml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -561,7 +561,6 @@ let build_inductive env ~sec_univs names prv univs template variance
561561
mind_consnrealargs = consnrealargs;
562562
mind_user_lc = lc;
563563
mind_nf_lc = nf_lc;
564-
mind_recargs = recarg;
565564
mind_automaton = automaton;
566565
mind_relevance;
567566
mind_relies_on_indices_not_mattering = relies_on_indices_not_mattering;

plugins/funind/gen_principle.ml

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1109,8 +1109,7 @@ let prove_fun_complete funcs graphs schemes lemmas_types_infos i :
11091109
in
11101110
if
11111111
infos.is_general
1112-
|| Rtree.is_infinite Declareops.eq_recarg
1113-
graph_def.Declarations.mind_recargs
1112+
|| Inductiveops.mis_is_recursive graph_def
11141113
then
11151114
let eq_lemma = match infos.equation_lemma with
11161115
| None -> CErrors.anomaly (Pp.str "Cannot find equation lemma.")

pretyping/inductiveops.ml

Lines changed: 9 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@ open EConstr
1515
open Vars
1616
open Context
1717
open Declarations
18-
open Declareops
1918
open Environ
2019
open Reductionops
2120
open Context.Rel.Declaration
@@ -116,24 +115,22 @@ let dest_subterms p = match Rtree.Kind.kind p with
116115
| Rtree.Kind.Var _ -> assert false
117116

118117
let mis_is_recursive mip =
119-
let one_is_rec rvec =
120-
Array.exists (fun ra ->
121-
match dest_recarg ra with
122-
| Mrec (RecArgInd ind) -> true
123-
| Mrec (RecArgPrim _) | Norec -> false
124-
) rvec
125-
in
126-
Array.exists one_is_rec (dest_subterms @@ Rtree.Kind.make mip.mind_recargs)
118+
let ra = mip.mind_automaton in
119+
let trans = Rtree.Automaton.transitions ra (Rtree.Automaton.initial ra) in
120+
let check tr = match Rtree.Automaton.data ra tr with Mrec _ -> true | Norec -> false in
121+
Array.exists (fun v -> Array.exists check v) trans
127122

128123
let mis_is_nested kn mib =
129124
Array.exists (fun mip ->
125+
let ra = mip.mind_automaton in
126+
let trans = Rtree.Automaton.transitions ra (Rtree.Automaton.initial ra) in
130127
Array.exists (fun rvec ->
131-
Array.exists (fun ra ->
132-
match dest_recarg ra with
128+
Array.exists (fun tr ->
129+
match Rtree.Automaton.data ra tr with
133130
| Mrec (RecArgInd (kni, _)) -> not @@ MutInd.CanOrd.equal kn kni
134131
| Mrec (RecArgPrim _) | Norec -> false
135132
) rvec
136-
) (dest_subterms @@ Rtree.Kind.make mip.mind_recargs)
133+
) trans
137134
) mib.mind_packets
138135

139136
let mis_nf_constructor_type ((_,j),u) (mib,mip) =
@@ -239,12 +236,6 @@ let constructor_alltags env (ind,j) =
239236
let (mib,mip) = Inductive.lookup_mind_specif env ind in
240237
Context.Rel.to_tags (fst mip.mind_nf_lc.(j-1))
241238

242-
let constructor_has_local_defs env (indsp,j) =
243-
let (mib,mip) = Inductive.lookup_mind_specif env indsp in
244-
let l1 = mip.mind_consnrealdecls.(j-1) + Context.Rel.length (mib.mind_params_ctxt) in
245-
let l2 = recarg_length mip.mind_recargs j + mib.mind_nparams in
246-
not (Int.equal l1 l2)
247-
248239
let inductive_has_local_defs env ind =
249240
let (mib,mip) = Inductive.lookup_mind_specif env ind in
250241
let l1 = Context.Rel.length (mib.mind_params_ctxt) + mip.mind_nrealdecls in

pretyping/inductiveops.mli

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,6 @@ val inductive_alltags : env -> inductive -> bool list
123123
val constructor_alltags : env -> constructor -> bool list
124124

125125
(** Is there local defs in params or args ? *)
126-
val constructor_has_local_defs : env -> constructor -> bool
127126
val inductive_has_local_defs : env -> inductive -> bool
128127

129128
val constant_sorts_below : UnivGen.QualityOrSet.t -> UnivGen.QualityOrSet.t list

0 commit comments

Comments
 (0)