aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--.depend92
-rw-r--r--pretyping/tacred.ml49
2 files changed, 63 insertions, 78 deletions
diff --git a/.depend b/.depend
index 801487d6e3..83fe598fc1 100644
--- a/.depend
+++ b/.depend
@@ -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) ->