diff options
| author | Emilio Jesus Gallego Arias | 2020-03-09 02:09:03 -0400 |
|---|---|---|
| committer | Emilio Jesus Gallego Arias | 2020-03-25 06:04:29 -0400 |
| commit | affb6ac843380e8e134fd89380746f2f6f8c11de (patch) | |
| tree | f66eb970c747c1f03a3c5fec6c7c2aaeb1d0a0b8 /vernac/comFixpoint.ml | |
| parent | 09d6197bd11ed4a323b335118ae749d7caefeb55 (diff) | |
[proof] [mutual] Factorize mutual body construction.
Diffstat (limited to 'vernac/comFixpoint.ml')
| -rw-r--r-- | vernac/comFixpoint.ml | 21 |
1 files changed, 5 insertions, 16 deletions
diff --git a/vernac/comFixpoint.ml b/vernac/comFixpoint.ml index ced9656218..6e6be4fe3a 100644 --- a/vernac/comFixpoint.ml +++ b/vernac/comFixpoint.ml @@ -256,26 +256,15 @@ let declare_fixpoint_interactive_generic ?indexes ~scope ~poly ((fixnames,_fixrs lemma let declare_fixpoint_generic ?indexes ~scope ~poly ((fixnames,fixrs,fixdefs,fixtypes),pl,ctx,fiximps) ntns = - let indexes, cofix, fix_kind = + let possible_indexes, cofix, fix_kind = match indexes with - | Some indexes -> indexes, false, Decls.(IsDefinition Fixpoint) - | None -> [], true, Decls.(IsDefinition CoFixpoint) + | Some indexes -> Some indexes, false, Decls.(IsDefinition Fixpoint) + | None -> None, true, Decls.(IsDefinition CoFixpoint) in (* We shortcut the proof process *) let fixdefs = List.map Option.get fixdefs in - let fixdecls = prepare_recursive_declaration fixnames fixrs fixtypes fixdefs in - let vars, fixdecls, indexes = - if not cofix then - let env = Global.env() in - let indexes = Pretyping.search_guard env indexes fixdecls in - let vars = Vars.universes_of_constr (Constr.mkFix ((indexes,0),fixdecls)) in - let fixdecls = List.map_i (fun i _ -> Constr.mkFix ((indexes,i),fixdecls)) 0 fixnames in - vars, fixdecls, Some indexes - else (* cofix *) - let fixdecls = List.map_i (fun i _ -> Constr.mkCoFix (i,fixdecls)) 0 fixnames in - let vars = Vars.universes_of_constr (List.hd fixdecls) in - vars, fixdecls, None - in + let rec_declaration = prepare_recursive_declaration fixnames fixrs fixtypes fixdefs in + let vars, fixdecls, indexes = DeclareDef.mutual_make_bodies ~fixnames ~rec_declaration ~possible_indexes in let fiximps = List.map (fun (n,r,p) -> r) fiximps in let evd = Evd.from_ctx ctx in let evd = Evd.restrict_universe_context evd vars in |
