diff options
| -rw-r--r-- | .depend | 92 | ||||
| -rw-r--r-- | pretyping/tacred.ml | 49 |
2 files changed, 63 insertions, 78 deletions
@@ -28,6 +28,8 @@ kernel/typeops.cmi: kernel/environ.cmi kernel/evd.cmi kernel/inductive.cmi \ kernel/names.cmi kernel/sign.cmi kernel/term.cmi kernel/univ.cmi kernel/univ.cmi: kernel/names.cmi lib/pp.cmi lib/pp.cmi: lib/pp_control.cmi +lib/system.cmi: lib/pp.cmi +lib/util.cmi: lib/pp.cmi library/declare.cmi: kernel/cooking.cmi kernel/declarations.cmi \ kernel/environ.cmi kernel/evd.cmi kernel/inductive.cmi \ library/libobject.cmi kernel/names.cmi kernel/sign.cmi kernel/term.cmi @@ -45,8 +47,6 @@ library/library.cmi: library/lib.cmi library/libobject.cmi kernel/names.cmi \ library/nametab.cmi: library/libobject.cmi kernel/names.cmi kernel/term.cmi \ lib/util.cmi library/summary.cmi: kernel/names.cmi -lib/system.cmi: lib/pp.cmi -lib/util.cmi: lib/pp.cmi parsing/ast.cmi: parsing/coqast.cmi lib/dyn.cmi kernel/names.cmi \ parsing/pcoq.cmi lib/pp.cmi parsing/astterm.cmi: parsing/coqast.cmi kernel/environ.cmi kernel/evd.cmi \ @@ -188,11 +188,11 @@ toplevel/record.cmi: parsing/coqast.cmi kernel/names.cmi kernel/term.cmi toplevel/searchisos.cmi: library/libobject.cmi kernel/names.cmi \ kernel/term.cmi toplevel/toplevel.cmi: parsing/pcoq.cmi lib/pp.cmi +toplevel/vernac.cmi: parsing/coqast.cmi parsing/pcoq.cmi toplevel/vernacentries.cmi: kernel/names.cmi kernel/term.cmi \ toplevel/vernacinterp.cmi toplevel/vernacinterp.cmi: parsing/coqast.cmi lib/dyn.cmi kernel/names.cmi \ proofs/proof_type.cmi -toplevel/vernac.cmi: parsing/coqast.cmi parsing/pcoq.cmi contrib/xml/xmlcommand.cmi: kernel/names.cmi config/coq_config.cmo: config/coq_config.cmi config/coq_config.cmx: config/coq_config.cmi @@ -310,22 +310,30 @@ lib/dyn.cmo: lib/util.cmi lib/dyn.cmi lib/dyn.cmx: lib/util.cmx lib/dyn.cmi lib/edit.cmo: lib/bstack.cmi lib/pp.cmi lib/util.cmi lib/edit.cmi lib/edit.cmx: lib/bstack.cmx lib/pp.cmx lib/util.cmx lib/edit.cmi -lib/gmapl.cmo: lib/gmap.cmi lib/util.cmi lib/gmapl.cmi -lib/gmapl.cmx: lib/gmap.cmx lib/util.cmx lib/gmapl.cmi lib/gmap.cmo: lib/gmap.cmi lib/gmap.cmx: lib/gmap.cmi +lib/gmapl.cmo: lib/gmap.cmi lib/util.cmi lib/gmapl.cmi +lib/gmapl.cmx: lib/gmap.cmx lib/util.cmx lib/gmapl.cmi lib/gset.cmo: lib/gset.cmi lib/gset.cmx: lib/gset.cmi lib/hashcons.cmo: lib/hashcons.cmi lib/hashcons.cmx: lib/hashcons.cmi lib/options.cmo: lib/util.cmi lib/options.cmi lib/options.cmx: lib/util.cmx lib/options.cmi -lib/pp_control.cmo: lib/pp_control.cmi -lib/pp_control.cmx: lib/pp_control.cmi lib/pp.cmo: lib/pp_control.cmi lib/pp.cmi lib/pp.cmx: lib/pp_control.cmx lib/pp.cmi +lib/pp_control.cmo: lib/pp_control.cmi +lib/pp_control.cmx: lib/pp_control.cmi lib/profile.cmo: lib/system.cmi lib/profile.cmi lib/profile.cmx: lib/system.cmx lib/profile.cmi +lib/stamps.cmo: lib/stamps.cmi +lib/stamps.cmx: lib/stamps.cmi +lib/system.cmo: config/coq_config.cmi lib/pp.cmi lib/util.cmi lib/system.cmi +lib/system.cmx: config/coq_config.cmx lib/pp.cmx lib/util.cmx lib/system.cmi +lib/tlm.cmo: lib/gmap.cmi lib/gset.cmi lib/tlm.cmi +lib/tlm.cmx: lib/gmap.cmx lib/gset.cmx lib/tlm.cmi +lib/util.cmo: lib/pp.cmi lib/util.cmi +lib/util.cmx: lib/pp.cmx lib/util.cmi library/declare.cmo: kernel/cooking.cmi kernel/declarations.cmi \ kernel/environ.cmi kernel/evd.cmi library/global.cmi library/impargs.cmi \ library/indrec.cmi kernel/inductive.cmi library/lib.cmi \ @@ -398,14 +406,6 @@ library/summary.cmo: lib/dyn.cmi kernel/names.cmi lib/pp.cmi lib/util.cmi \ library/summary.cmi library/summary.cmx: lib/dyn.cmx kernel/names.cmx lib/pp.cmx lib/util.cmx \ library/summary.cmi -lib/stamps.cmo: lib/stamps.cmi -lib/stamps.cmx: lib/stamps.cmi -lib/system.cmo: config/coq_config.cmi lib/pp.cmi lib/util.cmi lib/system.cmi -lib/system.cmx: config/coq_config.cmx lib/pp.cmx lib/util.cmx lib/system.cmi -lib/tlm.cmo: lib/gmap.cmi lib/gset.cmi lib/tlm.cmi -lib/tlm.cmx: lib/gmap.cmx lib/gset.cmx lib/tlm.cmi -lib/util.cmo: lib/pp.cmi lib/util.cmi -lib/util.cmx: lib/pp.cmx lib/util.cmi parsing/ast.cmo: parsing/coqast.cmi lib/dyn.cmi lib/hashcons.cmi \ kernel/names.cmi parsing/pcoq.cmi lib/pp.cmi lib/util.cmi parsing/ast.cmi parsing/ast.cmx: parsing/coqast.cmx lib/dyn.cmx lib/hashcons.cmx \ @@ -442,14 +442,6 @@ parsing/extend.cmo: parsing/ast.cmi parsing/coqast.cmi parsing/lexer.cmi \ parsing/pcoq.cmi lib/pp.cmi lib/util.cmi parsing/extend.cmi parsing/extend.cmx: parsing/ast.cmx parsing/coqast.cmx parsing/lexer.cmx \ parsing/pcoq.cmx lib/pp.cmx lib/util.cmx parsing/extend.cmi -parsing/g_basevernac.cmo: parsing/ast.cmi parsing/coqast.cmi parsing/pcoq.cmi \ - toplevel/vernac.cmi -parsing/g_basevernac.cmx: parsing/ast.cmx parsing/coqast.cmx parsing/pcoq.cmx \ - toplevel/vernac.cmx -parsing/g_cases.cmo: parsing/coqast.cmi parsing/pcoq.cmi -parsing/g_cases.cmx: parsing/coqast.cmx parsing/pcoq.cmx -parsing/g_constr.cmo: parsing/ast.cmi parsing/coqast.cmi parsing/pcoq.cmi -parsing/g_constr.cmx: parsing/ast.cmx parsing/coqast.cmx parsing/pcoq.cmx parsing/g_natsyntax.cmo: parsing/ast.cmi parsing/astterm.cmi \ parsing/coqast.cmi parsing/esyntax.cmi kernel/names.cmi parsing/pcoq.cmi \ lib/pp.cmi lib/util.cmi parsing/g_natsyntax.cmi @@ -458,24 +450,12 @@ parsing/g_natsyntax.cmx: parsing/ast.cmx parsing/astterm.cmx \ lib/pp.cmx lib/util.cmx parsing/g_natsyntax.cmi parsing/g_prim.cmo: parsing/coqast.cmi parsing/pcoq.cmi toplevel/vernac.cmi parsing/g_prim.cmx: parsing/coqast.cmx parsing/pcoq.cmx toplevel/vernac.cmx -parsing/g_proofs.cmo: parsing/coqast.cmi parsing/pcoq.cmi lib/pp.cmi \ - lib/util.cmi toplevel/vernac.cmi -parsing/g_proofs.cmx: parsing/coqast.cmx parsing/pcoq.cmx lib/pp.cmx \ - lib/util.cmx toplevel/vernac.cmx parsing/g_rsyntax.cmo: parsing/ast.cmi parsing/astterm.cmi parsing/coqast.cmi \ parsing/esyntax.cmi kernel/names.cmi parsing/pcoq.cmi lib/pp.cmi \ lib/util.cmi parsing/g_rsyntax.cmx: parsing/ast.cmx parsing/astterm.cmx parsing/coqast.cmx \ parsing/esyntax.cmx kernel/names.cmx parsing/pcoq.cmx lib/pp.cmx \ lib/util.cmx -parsing/g_tactic.cmo: parsing/ast.cmi parsing/coqast.cmi parsing/pcoq.cmi \ - lib/pp.cmi lib/util.cmi -parsing/g_tactic.cmx: parsing/ast.cmx parsing/coqast.cmx parsing/pcoq.cmx \ - lib/pp.cmx lib/util.cmx -parsing/g_vernac.cmo: parsing/coqast.cmi parsing/pcoq.cmi lib/pp.cmi \ - lib/util.cmi toplevel/vernac.cmi -parsing/g_vernac.cmx: parsing/coqast.cmx parsing/pcoq.cmx lib/pp.cmx \ - lib/util.cmx toplevel/vernac.cmx parsing/g_zsyntax.cmo: parsing/ast.cmi parsing/astterm.cmi parsing/coqast.cmi \ parsing/esyntax.cmi kernel/names.cmi parsing/pcoq.cmi lib/pp.cmi \ lib/util.cmi parsing/g_zsyntax.cmi @@ -980,12 +960,6 @@ tactics/tactics.cmx: parsing/astterm.cmx proofs/clenv.cmx \ kernel/reduction.cmx kernel/sign.cmx lib/stamps.cmx proofs/tacinterp.cmx \ proofs/tacmach.cmx pretyping/tacred.cmx tactics/tacticals.cmx \ kernel/term.cmx lib/util.cmx tactics/tactics.cmi -tactics/tauto.cmo: parsing/ast.cmi parsing/coqast.cmi tactics/hipattern.cmi \ - kernel/names.cmi lib/pp.cmi proofs/proof_type.cmi proofs/tacinterp.cmi \ - proofs/tacmach.cmi tactics/tacticals.cmi tactics/tactics.cmi -tactics/tauto.cmx: parsing/ast.cmx parsing/coqast.cmx tactics/hipattern.cmx \ - kernel/names.cmx lib/pp.cmx proofs/proof_type.cmx proofs/tacinterp.cmx \ - proofs/tacmach.cmx tactics/tacticals.cmx tactics/tactics.cmx tactics/termdn.cmo: tactics/dn.cmi kernel/names.cmi parsing/pattern.cmi \ pretyping/rawterm.cmi kernel/term.cmi lib/util.cmi tactics/termdn.cmi tactics/termdn.cmx: tactics/dn.cmx kernel/names.cmx parsing/pattern.cmx \ @@ -998,10 +972,10 @@ tactics/wcclausenv.cmx: proofs/clenv.cmx kernel/environ.cmx kernel/evd.cmx \ library/global.cmx proofs/logic.cmx kernel/names.cmx lib/pp.cmx \ proofs/proof_trees.cmx kernel/reduction.cmx kernel/sign.cmx \ proofs/tacmach.cmx kernel/term.cmx lib/util.cmx tactics/wcclausenv.cmi -tools/coqdep_lexer.cmo: config/coq_config.cmi -tools/coqdep_lexer.cmx: config/coq_config.cmx tools/coqdep.cmo: config/coq_config.cmi tools/coqdep_lexer.cmo tools/coqdep.cmx: config/coq_config.cmx tools/coqdep_lexer.cmx +tools/coqdep_lexer.cmo: config/coq_config.cmi +tools/coqdep_lexer.cmx: config/coq_config.cmx tools/gallina.cmo: tools/gallina_lexer.cmo tools/gallina.cmx: tools/gallina_lexer.cmx toplevel/class.cmo: pretyping/classops.cmi kernel/declarations.cmi \ @@ -1146,6 +1120,14 @@ toplevel/toplevel.cmx: parsing/ast.cmx toplevel/errors.cmx toplevel/mltop.cmi \ toplevel/vernac.cmx toplevel/vernacinterp.cmx toplevel/toplevel.cmi toplevel/usage.cmo: config/coq_config.cmi toplevel/usage.cmi toplevel/usage.cmx: config/coq_config.cmx toplevel/usage.cmi +toplevel/vernac.cmo: parsing/ast.cmi parsing/coqast.cmi \ + toplevel/discharge.cmi library/library.cmi lib/options.cmi \ + parsing/pcoq.cmi proofs/pfedit.cmi lib/pp.cmi library/states.cmi \ + lib/system.cmi lib/util.cmi toplevel/vernacinterp.cmi toplevel/vernac.cmi +toplevel/vernac.cmx: parsing/ast.cmx parsing/coqast.cmx \ + toplevel/discharge.cmx library/library.cmx lib/options.cmx \ + parsing/pcoq.cmx proofs/pfedit.cmx lib/pp.cmx library/states.cmx \ + lib/system.cmx lib/util.cmx toplevel/vernacinterp.cmx toplevel/vernac.cmi toplevel/vernacentries.cmo: parsing/ast.cmi parsing/astterm.cmi \ toplevel/class.cmi toplevel/command.cmi parsing/coqast.cmi \ library/declare.cmi toplevel/discharge.cmi kernel/environ.cmi \ @@ -1188,14 +1170,6 @@ toplevel/vernacinterp.cmx: parsing/ast.cmx parsing/astterm.cmx \ kernel/names.cmx library/nametab.cmx lib/options.cmx lib/pp.cmx \ pretyping/pretype_errors.cmx proofs/proof_type.cmx proofs/tacinterp.cmx \ lib/util.cmx toplevel/vernacinterp.cmi -toplevel/vernac.cmo: parsing/ast.cmi parsing/coqast.cmi \ - toplevel/discharge.cmi library/library.cmi lib/options.cmi \ - parsing/pcoq.cmi proofs/pfedit.cmi lib/pp.cmi library/states.cmi \ - lib/system.cmi lib/util.cmi toplevel/vernacinterp.cmi toplevel/vernac.cmi -toplevel/vernac.cmx: parsing/ast.cmx parsing/coqast.cmx \ - toplevel/discharge.cmx library/library.cmx lib/options.cmx \ - parsing/pcoq.cmx proofs/pfedit.cmx lib/pp.cmx library/states.cmx \ - lib/system.cmx lib/util.cmx toplevel/vernacinterp.cmx toplevel/vernac.cmi contrib/omega/coq_omega.cmo: parsing/ast.cmi proofs/clenv.cmi \ library/declare.cmi kernel/environ.cmi tactics/equality.cmi \ kernel/evd.cmi library/global.cmi kernel/inductive.cmi proofs/logic.cmi \ @@ -1238,23 +1212,23 @@ contrib/ring/ring.cmx: parsing/astterm.cmx kernel/closure.cmx \ library/summary.cmx proofs/tacmach.cmx pretyping/tacred.cmx \ tactics/tactics.cmx kernel/term.cmx pretyping/typing.cmx lib/util.cmx \ toplevel/vernacinterp.cmx +contrib/xml/xml.cmo: contrib/xml/xml.cmi +contrib/xml/xml.cmx: contrib/xml/xml.cmi contrib/xml/xmlcommand.cmo: kernel/declarations.cmi library/declare.cmi \ kernel/environ.cmi kernel/evd.cmi library/global.cmi library/lib.cmi \ library/libobject.cmi library/library.cmi kernel/names.cmi \ library/nametab.cmi proofs/pfedit.cmi proofs/proof_trees.cmi \ - pretyping/retyping.cmi kernel/safe_typing.cmi lib/system.cmi \ - proofs/tacmach.cmi kernel/term.cmi lib/util.cmi contrib/xml/xml.cmi \ - contrib/xml/xmlcommand.cmi + kernel/reduction.cmi pretyping/retyping.cmi kernel/safe_typing.cmi \ + lib/system.cmi proofs/tacmach.cmi kernel/term.cmi lib/util.cmi \ + contrib/xml/xml.cmi contrib/xml/xmlcommand.cmi contrib/xml/xmlcommand.cmx: kernel/declarations.cmx library/declare.cmx \ kernel/environ.cmx kernel/evd.cmx library/global.cmx library/lib.cmx \ library/libobject.cmx library/library.cmx kernel/names.cmx \ library/nametab.cmx proofs/pfedit.cmx proofs/proof_trees.cmx \ - pretyping/retyping.cmx kernel/safe_typing.cmx lib/system.cmx \ - proofs/tacmach.cmx kernel/term.cmx lib/util.cmx contrib/xml/xml.cmx \ - contrib/xml/xmlcommand.cmi + kernel/reduction.cmx pretyping/retyping.cmx kernel/safe_typing.cmx \ + lib/system.cmx proofs/tacmach.cmx kernel/term.cmx lib/util.cmx \ + contrib/xml/xml.cmx contrib/xml/xmlcommand.cmi contrib/xml/xmlentries.cmo: lib/util.cmi toplevel/vernacinterp.cmi \ contrib/xml/xmlcommand.cmi contrib/xml/xmlentries.cmx: lib/util.cmx toplevel/vernacinterp.cmx \ contrib/xml/xmlcommand.cmx -contrib/xml/xml.cmo: contrib/xml/xml.cmi -contrib/xml/xml.cmx: contrib/xml/xml.cmi diff --git a/pretyping/tacred.ml b/pretyping/tacred.ml index 51cfe4f89e..0c9ec04844 100644 --- a/pretyping/tacred.ml +++ b/pretyping/tacred.ml @@ -89,11 +89,7 @@ let check_fix_reversibility cst labs args ((lv,i),(tys,_,bds)) = else raise Elimconst -(* [compute_consteval_direct] expand all constant in a whole, but - [compute_consteval] only one by one, until finding the one which is - reversible (in case of a unary Fix) or the last one before the Fix - if the latter is mutually defined *) - +(** let compute_consteval_direct sigma env cst c = let rec srec env n labs c = let c',l = whd_betadeltaeta_stack env sigma c in @@ -104,8 +100,13 @@ let compute_consteval_direct sigma env cst c = | IsMutCase (_,_,d,_) when isRel d -> EliminationCases n | _ -> NotAnElimination in srec env 0 [] c +**) +(* [srec_direct] expand all constant in a whole, but + [srec] only one by one, until finding the one which is + reversible (in case of a unary Fix) or the last one before the Fix + if the latter is mutually defined *) -let rec compute_consteval sigma env cst c = +let rec descend_consteval sigma env cst = let rec srec env n labs c = let c',l = whd_betaetalet_stack c in let nargs = List.length l in @@ -125,7 +126,7 @@ let rec compute_consteval sigma env cst c = try (* We try to name the Fix by cst *) (* Complexité en n^2, bof, peut mieux faire *) - compute_consteval_direct sigma env cst c + srec_direct env n labs c with Elimconst -> EliminationFix (new_minarg,info) else @@ -134,14 +135,21 @@ let rec compute_consteval sigma env cst c = let new_minarg = max (minarg+n-nargs) minarg in EliminationCases new_minarg) | _ -> raise Elimconst - in - try srec env 0 [] c - with Elimconst -> NotAnElimination + and srec_direct env n labs c = + let c',l = whd_betadeltaeta_stack env sigma c in + match kind_of_term c' with + | IsLambda (id,t,g) when l=[] -> + srec_direct (push_rel_assum (id,t) env) (n+1) (t::labs) g + | IsFix fix -> check_fix_reversibility cst labs l fix + | IsMutCase (_,_,d,_) when isRel d -> EliminationCases n + | _ -> NotAnElimination -and descend_consteval sigma env cst = + in match reference_opt_value sigma env cst with | None -> NotAnElimination - | Some c -> compute_consteval sigma env cst c + | Some c -> + try srec env 0 [] c + with Elimconst -> NotAnElimination let reference_eval sigma env = function | EvalConst cst as ref -> @@ -301,10 +309,11 @@ and construct_const env sigma = match kind_of_term x with | IsCast (c,_) -> hnfstack (c, stack) | IsApp (f,cl) -> hnfstack (f, append_stack cl stack) - | IsLambda (_,_,c) -> + | IsLambda (id,t,c) -> (match decomp_stack stack with | None -> assert false - | Some (c',rest) -> stacklam hnfstack [c'] c rest) + | Some (c',rest) -> + stacklam hnfstack [c'] c rest) | IsMutCase (ci,p,c,lf) -> hnfstack (special_red_case env (construct_const env sigma) (ci,p,c,lf), stack) @@ -328,7 +337,7 @@ and construct_const env sigma = raise Redelimination)) | _ -> raise Redelimination in - hnfstack + hnfstack (***********************************************************************) (* Special Purpose Reduction Strategies *) @@ -360,8 +369,9 @@ let hnf_constr env sigma c = | IsLambda (n,t,c) -> (match decomp_stack largs with | None -> app_stack s - | Some (a,rest) -> stacklam redrec [a] c rest) - | IsLetIn (n,b,_,c) -> stacklam redrec [b] c largs + | Some (a,rest) -> + stacklam redrec [a] c rest) + | IsLetIn (n,b,t,c) -> stacklam redrec [b] c largs | IsApp (f,cl) -> redrec (f, append_stack cl largs) | IsCast (c,_) -> redrec (c, largs) | IsMutCase (ci,p,c,lf) -> @@ -400,8 +410,9 @@ let whd_nf env sigma c = | IsLambda (name,c1,c2) -> (match decomp_stack stack with | None -> (c,empty_stack) - | Some (a1,rest) -> stacklam nf_app [a1] c2 rest) - | IsLetIn (n,b,_,c) -> stacklam nf_app [b] c stack + | Some (a1,rest) -> + stacklam nf_app [a1] c2 rest) + | IsLetIn (n,b,t,c) -> stacklam nf_app [b] c stack | IsApp (f,cl) -> nf_app (f, append_stack cl stack) | IsCast (c,_) -> nf_app (c, stack) | IsMutCase (ci,p,d,lf) -> |
