aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorGravatar barras <barras@85f007b7-540e-0410-9357-904b9bb8a0f7>2004-09-15 16:50:56 +0000
committerGravatar barras <barras@85f007b7-540e-0410-9357-904b9bb8a0f7>2004-09-15 16:50:56 +0000
commit2d707f4445c0cc86d8f8c30bdbe9eecf956997f9 (patch)
tree9d6c2ff5489ba6bbf5683963108c34aa10b81e6f
parent8f5a7bbf2e5c64d6badd9e7c39da83d07b9c6f40 (diff)
hiding the meta_map in evar_defs
git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/coq/trunk@6109 85f007b7-540e-0410-9357-904b9bb8a0f7
-rw-r--r--.depend395
-rw-r--r--Makefile18
-rw-r--r--contrib/first-order/instances.ml2
-rw-r--r--contrib/xml/cic2acic.ml2
-rw-r--r--contrib/xml/proof2aproof.ml18
-rw-r--r--dev/top_printers.ml2
-rw-r--r--interp/constrextern.ml8
-rw-r--r--interp/constrintern.ml10
-rw-r--r--interp/reserve.ml2
-rw-r--r--interp/topconstr.ml10
-rw-r--r--interp/topconstr.mli2
-rw-r--r--pretyping/cases.ml49
-rw-r--r--pretyping/clenv.ml56
-rw-r--r--pretyping/clenv.mli3
-rw-r--r--pretyping/coercion.ml1
-rw-r--r--pretyping/detyping.ml1
-rw-r--r--pretyping/evarconv.ml13
-rw-r--r--pretyping/evarconv.mli2
-rw-r--r--pretyping/evarutil.ml321
-rw-r--r--pretyping/evarutil.mli65
-rw-r--r--pretyping/evd.ml102
-rw-r--r--pretyping/evd.mli56
-rw-r--r--pretyping/pretype_errors.ml4
-rw-r--r--pretyping/pretype_errors.mli9
-rw-r--r--pretyping/pretyping.ml13
-rw-r--r--pretyping/rawterm.ml9
-rw-r--r--pretyping/rawterm.mli10
-rw-r--r--pretyping/reductionops.ml4
-rw-r--r--pretyping/reductionops.mli4
-rw-r--r--pretyping/retyping.mli8
-rw-r--r--pretyping/termops.ml14
-rw-r--r--pretyping/termops.mli3
-rw-r--r--pretyping/typing.ml21
-rw-r--r--pretyping/typing.mli8
-rw-r--r--pretyping/unification.ml24
-rw-r--r--pretyping/unification.mli3
-rw-r--r--proofs/evar_refiner.ml60
-rw-r--r--proofs/evar_refiner.mli11
-rw-r--r--proofs/proof_trees.ml19
-rw-r--r--proofs/proof_trees.mli10
-rw-r--r--proofs/refiner.ml2
-rw-r--r--proofs/refiner.mli2
-rw-r--r--tactics/equality.ml9
-rw-r--r--tactics/evar_tactics.ml29
-rw-r--r--tactics/tacticals.ml2
-rw-r--r--toplevel/command.ml4
-rw-r--r--toplevel/himsg.ml1
-rw-r--r--toplevel/vernacentries.ml2
48 files changed, 674 insertions, 749 deletions
diff --git a/.depend b/.depend
index 39288ec53..618aa95c0 100644
--- a/.depend
+++ b/.depend
@@ -26,9 +26,9 @@ interp/symbols.cmi: lib/bignat.cmi pretyping/classops.cmi \
interp/topconstr.cmi lib/util.cmi
interp/syntax_def.cmi: kernel/names.cmi pretyping/rawterm.cmi \
interp/topconstr.cmi lib/util.cmi
-interp/topconstr.cmi: lib/bignat.cmi lib/dyn.cmi library/libnames.cmi \
- kernel/names.cmi lib/pp.cmi pretyping/rawterm.cmi kernel/term.cmi \
- lib/util.cmi
+interp/topconstr.cmi: lib/bignat.cmi lib/dyn.cmi pretyping/evd.cmi \
+ library/libnames.cmi kernel/names.cmi lib/pp.cmi pretyping/rawterm.cmi \
+ kernel/term.cmi lib/util.cmi
kernel/closure.cmi: kernel/environ.cmi kernel/esubst.cmi kernel/names.cmi \
lib/pp.cmi kernel/term.cmi
kernel/conv_oracle.cmi: kernel/closure.cmi kernel/names.cmi
@@ -46,10 +46,10 @@ kernel/indtypes.cmi: kernel/declarations.cmi kernel/entries.cmi \
kernel/univ.cmi
kernel/inductive.cmi: kernel/declarations.cmi kernel/environ.cmi \
kernel/names.cmi kernel/term.cmi kernel/univ.cmi
-kernel/mod_typing.cmi: kernel/declarations.cmi kernel/entries.cmi \
- kernel/environ.cmi
kernel/modops.cmi: kernel/declarations.cmi kernel/entries.cmi \
kernel/environ.cmi kernel/names.cmi kernel/univ.cmi lib/util.cmi
+kernel/mod_typing.cmi: kernel/declarations.cmi kernel/entries.cmi \
+ kernel/environ.cmi
kernel/names.cmi: lib/pp.cmi lib/predicate.cmi
kernel/reduction.cmi: kernel/environ.cmi kernel/sign.cmi kernel/term.cmi \
kernel/univ.cmi
@@ -69,9 +69,6 @@ kernel/typeops.cmi: kernel/entries.cmi kernel/environ.cmi kernel/names.cmi \
kernel/univ.cmi: kernel/names.cmi lib/pp.cmi
lib/bignat.cmi: lib/pp.cmi
lib/pp.cmi: lib/pp_control.cmi
-lib/rtree.cmi: lib/pp.cmi
-lib/system.cmi: lib/pp.cmi
-lib/util.cmi: lib/compat.cmo lib/pp.cmi
library/declare.cmi: kernel/cooking.cmi library/decl_kinds.cmo \
kernel/declarations.cmi library/dischargedhypsmap.cmi kernel/entries.cmi \
kernel/indtypes.cmi library/libnames.cmi library/libobject.cmi \
@@ -100,6 +97,9 @@ library/library.cmi: library/libnames.cmi library/libobject.cmi \
library/nameops.cmi: kernel/names.cmi lib/pp.cmi kernel/term.cmi
library/nametab.cmi: library/libnames.cmi kernel/names.cmi lib/pp.cmi \
lib/util.cmi
+lib/rtree.cmi: lib/pp.cmi
+lib/system.cmi: lib/pp.cmi
+lib/util.cmi: lib/compat.cmo lib/pp.cmi
parsing/ast.cmi: parsing/coqast.cmi lib/dyn.cmi interp/genarg.cmi \
library/libnames.cmi kernel/names.cmi lib/pp.cmi interp/topconstr.cmi \
lib/util.cmi
@@ -155,19 +155,20 @@ pretyping/classops.cmi: library/decl_kinds.cmo kernel/environ.cmi \
kernel/names.cmi library/nametab.cmi lib/pp.cmi kernel/term.cmi
pretyping/clenv.cmi: kernel/environ.cmi pretyping/evarutil.cmi \
pretyping/evd.cmi kernel/names.cmi lib/pp.cmi pretyping/rawterm.cmi \
- pretyping/reductionops.cmi kernel/sign.cmi kernel/term.cmi lib/util.cmi
+ kernel/sign.cmi kernel/term.cmi lib/util.cmi
pretyping/coercion.cmi: kernel/environ.cmi pretyping/evarutil.cmi \
pretyping/evd.cmi kernel/names.cmi pretyping/rawterm.cmi kernel/sign.cmi \
kernel/term.cmi lib/util.cmi
pretyping/detyping.cmi: kernel/environ.cmi kernel/names.cmi \
pretyping/rawterm.cmi kernel/sign.cmi kernel/term.cmi \
pretyping/termops.cmi lib/util.cmi
-pretyping/evarconv.cmi: kernel/environ.cmi pretyping/evarutil.cmi \
+pretyping/evarconv.cmi: kernel/environ.cmi pretyping/evd.cmi \
pretyping/reductionops.cmi kernel/sign.cmi kernel/term.cmi
pretyping/evarutil.cmi: kernel/environ.cmi pretyping/evd.cmi kernel/names.cmi \
pretyping/rawterm.cmi pretyping/reductionops.cmi kernel/sign.cmi \
kernel/term.cmi pretyping/termops.cmi lib/util.cmi
-pretyping/evd.cmi: kernel/names.cmi kernel/sign.cmi kernel/term.cmi
+pretyping/evd.cmi: library/libnames.cmi kernel/names.cmi kernel/sign.cmi \
+ kernel/term.cmi lib/util.cmi
pretyping/indrec.cmi: kernel/declarations.cmi kernel/environ.cmi \
pretyping/evd.cmi pretyping/inductiveops.cmi kernel/names.cmi \
kernel/term.cmi
@@ -184,9 +185,9 @@ pretyping/pretype_errors.cmi: kernel/environ.cmi pretyping/evd.cmi \
pretyping/pretyping.cmi: lib/dyn.cmi kernel/environ.cmi \
pretyping/evarutil.cmi pretyping/evd.cmi kernel/names.cmi \
pretyping/rawterm.cmi kernel/sign.cmi kernel/term.cmi
-pretyping/rawterm.cmi: lib/dyn.cmi library/libnames.cmi kernel/names.cmi \
- library/nametab.cmi kernel/sign.cmi kernel/term.cmi kernel/univ.cmi \
- lib/util.cmi
+pretyping/rawterm.cmi: lib/dyn.cmi pretyping/evd.cmi library/libnames.cmi \
+ kernel/names.cmi library/nametab.cmi kernel/sign.cmi kernel/term.cmi \
+ kernel/univ.cmi lib/util.cmi
pretyping/recordops.cmi: pretyping/classops.cmi library/libnames.cmi \
library/libobject.cmi library/library.cmi kernel/names.cmi \
library/nametab.cmi kernel/term.cmi
@@ -202,8 +203,8 @@ pretyping/termops.cmi: kernel/environ.cmi kernel/names.cmi lib/pp.cmi \
kernel/sign.cmi kernel/term.cmi kernel/univ.cmi lib/util.cmi
pretyping/typing.cmi: kernel/environ.cmi pretyping/evd.cmi kernel/term.cmi
pretyping/unification.cmi: kernel/environ.cmi pretyping/evarutil.cmi \
- pretyping/evd.cmi kernel/names.cmi pretyping/reductionops.cmi \
- kernel/sign.cmi kernel/term.cmi lib/util.cmi
+ pretyping/evd.cmi kernel/names.cmi kernel/sign.cmi kernel/term.cmi \
+ lib/util.cmi
proofs/clenvtac.cmi: pretyping/clenv.cmi pretyping/evd.cmi kernel/names.cmi \
proofs/proof_type.cmi kernel/sign.cmi kernel/term.cmi lib/util.cmi
proofs/evar_refiner.cmi: kernel/environ.cmi pretyping/evd.cmi \
@@ -322,11 +323,11 @@ toplevel/recordobj.cmi: library/libnames.cmi proofs/tacexpr.cmo
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/pcoq.cmi lib/util.cmi toplevel/vernacexpr.cmo
toplevel/vernacentries.cmi: kernel/environ.cmi pretyping/evd.cmi \
library/libnames.cmi kernel/names.cmi kernel/term.cmi \
interp/topconstr.cmi toplevel/vernacexpr.cmo toplevel/vernacinterp.cmi
toplevel/vernacinterp.cmi: proofs/tacexpr.cmo
+toplevel/vernac.cmi: parsing/pcoq.cmi lib/util.cmi toplevel/vernacexpr.cmo
translate/ppconstrnew.cmi: parsing/coqast.cmi kernel/environ.cmi \
parsing/extend.cmi interp/genarg.cmi library/libnames.cmi \
kernel/names.cmi pretyping/pattern.cmi parsing/pcoq.cmi lib/pp.cmi \
@@ -346,9 +347,9 @@ contrib/cc/ccalgo.cmi: kernel/names.cmi kernel/term.cmi
contrib/cc/ccproof.cmi: contrib/cc/ccalgo.cmi kernel/names.cmi
contrib/correctness/past.cmi: kernel/names.cmi kernel/term.cmi \
interp/topconstr.cmi lib/util.cmi
-contrib/correctness/pcic.cmi: pretyping/rawterm.cmi
contrib/correctness/pcicenv.cmi: kernel/names.cmi kernel/sign.cmi \
kernel/term.cmi
+contrib/correctness/pcic.cmi: pretyping/rawterm.cmi
contrib/correctness/pdb.cmi: kernel/names.cmi
contrib/correctness/peffect.cmi: kernel/names.cmi lib/pp.cmi
contrib/correctness/penv.cmi: library/libnames.cmi kernel/names.cmi \
@@ -478,6 +479,14 @@ ide/config_lexer.cmo: ide/config_parser.cmi lib/util.cmi
ide/config_lexer.cmx: ide/config_parser.cmx lib/util.cmx
ide/config_parser.cmo: lib/util.cmi ide/config_parser.cmi
ide/config_parser.cmx: lib/util.cmx ide/config_parser.cmi
+ide/coqide.cmo: ide/blaster_window.cmo ide/command_windows.cmi ide/coq.cmi \
+ ide/coq_commands.cmo ide/find_phrase.cmo ide/highlight.cmo \
+ ide/ideutils.cmi proofs/pfedit.cmi ide/preferences.cmi lib/system.cmi \
+ ide/undo.cmi lib/util.cmi toplevel/vernacexpr.cmo ide/coqide.cmi
+ide/coqide.cmx: ide/blaster_window.cmx ide/command_windows.cmx ide/coq.cmx \
+ ide/coq_commands.cmx ide/find_phrase.cmx ide/highlight.cmx \
+ ide/ideutils.cmx proofs/pfedit.cmx ide/preferences.cmx lib/system.cmx \
+ ide/undo.cmx lib/util.cmx toplevel/vernacexpr.cmx ide/coqide.cmi
ide/coq.cmo: toplevel/cerrors.cmi config/coq_config.cmi toplevel/coqtop.cmi \
kernel/declarations.cmi kernel/environ.cmi pretyping/evarutil.cmi \
pretyping/evd.cmi library/global.cmi tactics/hipattern.cmi \
@@ -500,14 +509,6 @@ ide/coq.cmx: toplevel/cerrors.cmx config/coq_config.cmx toplevel/coqtop.cmx \
toplevel/vernacentries.cmx toplevel/vernacexpr.cmx ide/coq.cmi
ide/coq_tactics.cmo: ide/coq_tactics.cmi
ide/coq_tactics.cmx: ide/coq_tactics.cmi
-ide/coqide.cmo: ide/blaster_window.cmo ide/command_windows.cmi ide/coq.cmi \
- ide/coq_commands.cmo ide/find_phrase.cmo ide/highlight.cmo \
- ide/ideutils.cmi proofs/pfedit.cmi ide/preferences.cmi lib/system.cmi \
- ide/undo.cmi lib/util.cmi toplevel/vernacexpr.cmo ide/coqide.cmi
-ide/coqide.cmx: ide/blaster_window.cmx ide/command_windows.cmx ide/coq.cmx \
- ide/coq_commands.cmx ide/find_phrase.cmx ide/highlight.cmx \
- ide/ideutils.cmx proofs/pfedit.cmx ide/preferences.cmx lib/system.cmx \
- ide/undo.cmx lib/util.cmx toplevel/vernacexpr.cmx ide/coqide.cmi
ide/find_phrase.cmo: ide/ideutils.cmi
ide/find_phrase.cmx: ide/ideutils.cmx
ide/highlight.cmo: ide/ideutils.cmi
@@ -524,19 +525,21 @@ ide/undo.cmo: ide/ideutils.cmi ide/undo.cmi
ide/undo.cmx: ide/ideutils.cmx ide/undo.cmi
interp/constrextern.cmo: lib/bignat.cmi pretyping/classops.cmi \
kernel/declarations.cmi pretyping/detyping.cmi kernel/environ.cmi \
- library/global.cmi library/impargs.cmi kernel/inductive.cmi \
- library/lib.cmi library/libnames.cmi library/nameops.cmi kernel/names.cmi \
- library/nametab.cmi lib/options.cmi pretyping/pattern.cmi lib/pp.cmi \
- pretyping/rawterm.cmi pretyping/recordops.cmi interp/reserve.cmi \
- kernel/sign.cmi interp/symbols.cmi kernel/term.cmi pretyping/termops.cmi \
+ pretyping/evd.cmi library/global.cmi library/impargs.cmi \
+ kernel/inductive.cmi library/lib.cmi library/libnames.cmi \
+ library/nameops.cmi kernel/names.cmi library/nametab.cmi lib/options.cmi \
+ pretyping/pattern.cmi lib/pp.cmi pretyping/rawterm.cmi \
+ pretyping/recordops.cmi interp/reserve.cmi kernel/sign.cmi \
+ interp/symbols.cmi kernel/term.cmi pretyping/termops.cmi \
interp/topconstr.cmi kernel/univ.cmi lib/util.cmi interp/constrextern.cmi
interp/constrextern.cmx: lib/bignat.cmx pretyping/classops.cmx \
kernel/declarations.cmx pretyping/detyping.cmx kernel/environ.cmx \
- library/global.cmx library/impargs.cmx kernel/inductive.cmx \
- library/lib.cmx library/libnames.cmx library/nameops.cmx kernel/names.cmx \
- library/nametab.cmx lib/options.cmx pretyping/pattern.cmx lib/pp.cmx \
- pretyping/rawterm.cmx pretyping/recordops.cmx interp/reserve.cmx \
- kernel/sign.cmx interp/symbols.cmx kernel/term.cmx pretyping/termops.cmx \
+ pretyping/evd.cmx library/global.cmx library/impargs.cmx \
+ kernel/inductive.cmx library/lib.cmx library/libnames.cmx \
+ library/nameops.cmx kernel/names.cmx library/nametab.cmx lib/options.cmx \
+ pretyping/pattern.cmx lib/pp.cmx pretyping/rawterm.cmx \
+ pretyping/recordops.cmx interp/reserve.cmx kernel/sign.cmx \
+ interp/symbols.cmx kernel/term.cmx pretyping/termops.cmx \
interp/topconstr.cmx kernel/univ.cmx lib/util.cmx interp/constrextern.cmi
interp/constrintern.cmo: lib/bignat.cmi kernel/declarations.cmi \
kernel/environ.cmi pretyping/evd.cmi library/global.cmi \
@@ -584,12 +587,12 @@ interp/ppextend.cmo: kernel/names.cmi lib/pp.cmi lib/util.cmi \
interp/ppextend.cmi
interp/ppextend.cmx: kernel/names.cmx lib/pp.cmx lib/util.cmx \
interp/ppextend.cmi
-interp/reserve.cmo: library/lib.cmi library/libobject.cmi library/nameops.cmi \
- kernel/names.cmi lib/options.cmi lib/pp.cmi pretyping/rawterm.cmi \
- library/summary.cmi lib/util.cmi interp/reserve.cmi
-interp/reserve.cmx: library/lib.cmx library/libobject.cmx library/nameops.cmx \
- kernel/names.cmx lib/options.cmx lib/pp.cmx pretyping/rawterm.cmx \
- library/summary.cmx lib/util.cmx interp/reserve.cmi
+interp/reserve.cmo: pretyping/evd.cmi library/lib.cmi library/libobject.cmi \
+ library/nameops.cmi kernel/names.cmi lib/options.cmi lib/pp.cmi \
+ pretyping/rawterm.cmi library/summary.cmi lib/util.cmi interp/reserve.cmi
+interp/reserve.cmx: pretyping/evd.cmx library/lib.cmx library/libobject.cmx \
+ library/nameops.cmx kernel/names.cmx lib/options.cmx lib/pp.cmx \
+ pretyping/rawterm.cmx library/summary.cmx lib/util.cmx interp/reserve.cmi
interp/symbols.cmo: lib/bignat.cmi pretyping/classops.cmi library/global.cmi \
lib/gmap.cmi lib/gmapl.cmi library/lib.cmi library/libnames.cmi \
library/libobject.cmi kernel/names.cmi library/nametab.cmi \
@@ -610,12 +613,14 @@ interp/syntax_def.cmx: library/lib.cmx library/libnames.cmx \
library/libobject.cmx library/nameops.cmx kernel/names.cmx \
library/nametab.cmx lib/pp.cmx library/summary.cmx interp/symbols.cmx \
interp/topconstr.cmx lib/util.cmx interp/syntax_def.cmi
-interp/topconstr.cmo: lib/bignat.cmi lib/dyn.cmi library/libnames.cmi \
- library/nameops.cmi kernel/names.cmi lib/options.cmi lib/pp.cmi \
- pretyping/rawterm.cmi kernel/term.cmi lib/util.cmi interp/topconstr.cmi
-interp/topconstr.cmx: lib/bignat.cmx lib/dyn.cmx library/libnames.cmx \
- library/nameops.cmx kernel/names.cmx lib/options.cmx lib/pp.cmx \
- pretyping/rawterm.cmx kernel/term.cmx lib/util.cmx interp/topconstr.cmi
+interp/topconstr.cmo: lib/bignat.cmi lib/dyn.cmi pretyping/evd.cmi \
+ library/libnames.cmi library/nameops.cmi kernel/names.cmi lib/options.cmi \
+ lib/pp.cmi pretyping/rawterm.cmi kernel/term.cmi lib/util.cmi \
+ interp/topconstr.cmi
+interp/topconstr.cmx: lib/bignat.cmx lib/dyn.cmx pretyping/evd.cmx \
+ library/libnames.cmx library/nameops.cmx kernel/names.cmx lib/options.cmx \
+ lib/pp.cmx pretyping/rawterm.cmx kernel/term.cmx lib/util.cmx \
+ interp/topconstr.cmi
kernel/closure.cmo: kernel/declarations.cmi kernel/environ.cmi \
kernel/esubst.cmi kernel/names.cmi lib/pp.cmi kernel/term.cmi \
lib/util.cmi kernel/closure.cmi
@@ -660,6 +665,12 @@ kernel/inductive.cmo: kernel/declarations.cmi kernel/environ.cmi \
kernel/inductive.cmx: kernel/declarations.cmx kernel/environ.cmx \
kernel/names.cmx kernel/reduction.cmx kernel/sign.cmx kernel/term.cmx \
kernel/type_errors.cmx kernel/univ.cmx lib/util.cmx kernel/inductive.cmi
+kernel/modops.cmo: kernel/declarations.cmi kernel/entries.cmi \
+ kernel/environ.cmi kernel/names.cmi lib/pp.cmi kernel/term.cmi \
+ kernel/univ.cmi lib/util.cmi kernel/modops.cmi
+kernel/modops.cmx: kernel/declarations.cmx kernel/entries.cmx \
+ kernel/environ.cmx kernel/names.cmx lib/pp.cmx kernel/term.cmx \
+ kernel/univ.cmx lib/util.cmx kernel/modops.cmi
kernel/mod_typing.cmo: kernel/declarations.cmi kernel/entries.cmi \
kernel/environ.cmi kernel/modops.cmi kernel/names.cmi \
kernel/reduction.cmi kernel/subtyping.cmi kernel/term_typing.cmi \
@@ -668,12 +679,6 @@ kernel/mod_typing.cmx: kernel/declarations.cmx kernel/entries.cmx \
kernel/environ.cmx kernel/modops.cmx kernel/names.cmx \
kernel/reduction.cmx kernel/subtyping.cmx kernel/term_typing.cmx \
kernel/typeops.cmx kernel/univ.cmx lib/util.cmx kernel/mod_typing.cmi
-kernel/modops.cmo: kernel/declarations.cmi kernel/entries.cmi \
- kernel/environ.cmi kernel/names.cmi lib/pp.cmi kernel/term.cmi \
- kernel/univ.cmi lib/util.cmi kernel/modops.cmi
-kernel/modops.cmx: kernel/declarations.cmx kernel/entries.cmx \
- kernel/environ.cmx kernel/names.cmx lib/pp.cmx kernel/term.cmx \
- kernel/univ.cmx lib/util.cmx kernel/modops.cmi
kernel/names.cmo: lib/hashcons.cmi lib/options.cmi lib/pp.cmi \
lib/predicate.cmi lib/util.cmi kernel/names.cmi
kernel/names.cmx: lib/hashcons.cmx lib/options.cmx lib/pp.cmx \
@@ -754,10 +759,10 @@ 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/explore.cmo: lib/explore.cmi
lib/explore.cmx: lib/explore.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/gmap.cmo: lib/gmap.cmi
+lib/gmap.cmx: lib/gmap.cmi
lib/gset.cmo: lib/gset.cmi
lib/gset.cmx: lib/gset.cmi
lib/hashcons.cmo: lib/hashcons.cmi
@@ -766,24 +771,14 @@ lib/heap.cmo: lib/heap.cmi
lib/heap.cmx: lib/heap.cmi
lib/options.cmo: lib/util.cmi lib/options.cmi
lib/options.cmx: lib/util.cmx lib/options.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/pp.cmo: lib/pp_control.cmi lib/pp.cmi
+lib/pp.cmx: lib/pp_control.cmx lib/pp.cmi
lib/predicate.cmo: lib/predicate.cmi
lib/predicate.cmx: lib/predicate.cmi
lib/profile.cmo: lib/profile.cmi
lib/profile.cmx: lib/profile.cmi
-lib/rtree.cmo: lib/pp.cmi lib/util.cmi lib/rtree.cmi
-lib/rtree.cmx: lib/pp.cmx lib/util.cmx lib/rtree.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/compat.cmo lib/pp.cmi lib/util.cmi
-lib/util.cmx: lib/compat.cmx lib/pp.cmx lib/util.cmi
library/declare.cmo: library/decl_kinds.cmo kernel/declarations.cmi \
library/dischargedhypsmap.cmi kernel/entries.cmi kernel/environ.cmi \
library/global.cmi library/impargs.cmi kernel/indtypes.cmi \
@@ -890,6 +885,16 @@ library/states.cmx: library/lib.cmx library/library.cmx library/summary.cmx \
lib/system.cmx library/states.cmi
library/summary.cmo: lib/dyn.cmi lib/pp.cmi lib/util.cmi library/summary.cmi
library/summary.cmx: lib/dyn.cmx lib/pp.cmx lib/util.cmx library/summary.cmi
+lib/rtree.cmo: lib/pp.cmi lib/util.cmi lib/rtree.cmi
+lib/rtree.cmx: lib/pp.cmx lib/util.cmx lib/rtree.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/compat.cmo lib/pp.cmi lib/util.cmi
+lib/util.cmx: lib/compat.cmx lib/pp.cmx lib/util.cmi
parsing/argextend.cmo: parsing/ast.cmi interp/genarg.cmi parsing/pcoq.cmi \
parsing/q_coqast.cmo parsing/q_util.cmi lib/util.cmi \
toplevel/vernacexpr.cmo
@@ -1224,17 +1229,17 @@ parsing/vernacextend.cmx: parsing/argextend.cmx parsing/ast.cmx \
toplevel/vernacexpr.cmx
pretyping/cases.cmo: pretyping/coercion.cmi kernel/declarations.cmi \
kernel/environ.cmi pretyping/evarconv.cmi pretyping/evarutil.cmi \
- library/global.cmi kernel/inductive.cmi pretyping/inductiveops.cmi \
- library/nameops.cmi kernel/names.cmi lib/pp.cmi \
- pretyping/pretype_errors.cmi pretyping/rawterm.cmi \
+ pretyping/evd.cmi library/global.cmi kernel/inductive.cmi \
+ pretyping/inductiveops.cmi library/nameops.cmi kernel/names.cmi \
+ lib/pp.cmi pretyping/pretype_errors.cmi pretyping/rawterm.cmi \
pretyping/reductionops.cmi pretyping/retyping.cmi kernel/sign.cmi \
kernel/term.cmi pretyping/termops.cmi kernel/type_errors.cmi \
kernel/typeops.cmi lib/util.cmi pretyping/cases.cmi
pretyping/cases.cmx: pretyping/coercion.cmx kernel/declarations.cmx \
kernel/environ.cmx pretyping/evarconv.cmx pretyping/evarutil.cmx \
- library/global.cmx kernel/inductive.cmx pretyping/inductiveops.cmx \
- library/nameops.cmx kernel/names.cmx lib/pp.cmx \
- pretyping/pretype_errors.cmx pretyping/rawterm.cmx \
+ pretyping/evd.cmx library/global.cmx kernel/inductive.cmx \
+ pretyping/inductiveops.cmx library/nameops.cmx kernel/names.cmx \
+ lib/pp.cmx pretyping/pretype_errors.cmx pretyping/rawterm.cmx \
pretyping/reductionops.cmx pretyping/retyping.cmx kernel/sign.cmx \
kernel/term.cmx pretyping/termops.cmx kernel/type_errors.cmx \
kernel/typeops.cmx lib/util.cmx pretyping/cases.cmi
@@ -1287,43 +1292,45 @@ pretyping/coercion.cmx: pretyping/classops.cmx kernel/environ.cmx \
pretyping/retyping.cmx kernel/term.cmx kernel/typeops.cmx lib/util.cmx \
pretyping/coercion.cmi
pretyping/detyping.cmo: kernel/declarations.cmi kernel/environ.cmi \
- library/global.cmi library/goptions.cmi kernel/inductive.cmi \
- pretyping/inductiveops.cmi library/libnames.cmi library/nameops.cmi \
- kernel/names.cmi library/nametab.cmi lib/options.cmi lib/pp.cmi \
- pretyping/rawterm.cmi kernel/sign.cmi kernel/term.cmi \
+ pretyping/evd.cmi library/global.cmi library/goptions.cmi \
+ kernel/inductive.cmi pretyping/inductiveops.cmi library/libnames.cmi \
+ library/nameops.cmi kernel/names.cmi library/nametab.cmi lib/options.cmi \
+ lib/pp.cmi pretyping/rawterm.cmi kernel/sign.cmi kernel/term.cmi \
pretyping/termops.cmi kernel/univ.cmi lib/util.cmi pretyping/detyping.cmi
pretyping/detyping.cmx: kernel/declarations.cmx kernel/environ.cmx \
- library/global.cmx library/goptions.cmx kernel/inductive.cmx \
- pretyping/inductiveops.cmx library/libnames.cmx library/nameops.cmx \
- kernel/names.cmx library/nametab.cmx lib/options.cmx lib/pp.cmx \
- pretyping/rawterm.cmx kernel/sign.cmx kernel/term.cmx \
+ pretyping/evd.cmx library/global.cmx library/goptions.cmx \
+ kernel/inductive.cmx pretyping/inductiveops.cmx library/libnames.cmx \
+ library/nameops.cmx kernel/names.cmx library/nametab.cmx lib/options.cmx \
+ lib/pp.cmx pretyping/rawterm.cmx kernel/sign.cmx kernel/term.cmx \
pretyping/termops.cmx kernel/univ.cmx lib/util.cmx pretyping/detyping.cmi
pretyping/evarconv.cmo: pretyping/classops.cmi kernel/closure.cmi \
kernel/environ.cmi pretyping/evarutil.cmi pretyping/evd.cmi \
- library/libnames.cmi kernel/names.cmi pretyping/rawterm.cmi \
- pretyping/recordops.cmi kernel/reduction.cmi pretyping/reductionops.cmi \
- kernel/term.cmi pretyping/typing.cmi lib/util.cmi pretyping/evarconv.cmi
+ library/libnames.cmi kernel/names.cmi pretyping/recordops.cmi \
+ kernel/reduction.cmi pretyping/reductionops.cmi kernel/term.cmi \
+ pretyping/typing.cmi lib/util.cmi pretyping/evarconv.cmi
pretyping/evarconv.cmx: pretyping/classops.cmx kernel/closure.cmx \
kernel/environ.cmx pretyping/evarutil.cmx pretyping/evd.cmx \
- library/libnames.cmx kernel/names.cmx pretyping/rawterm.cmx \
- pretyping/recordops.cmx kernel/reduction.cmx pretyping/reductionops.cmx \
- kernel/term.cmx pretyping/typing.cmx lib/util.cmx pretyping/evarconv.cmi
+ library/libnames.cmx kernel/names.cmx pretyping/recordops.cmx \
+ kernel/reduction.cmx pretyping/reductionops.cmx kernel/term.cmx \
+ pretyping/typing.cmx lib/util.cmx pretyping/evarconv.cmi
pretyping/evarutil.cmo: kernel/environ.cmi pretyping/evd.cmi \
library/global.cmi pretyping/indrec.cmi library/nameops.cmi \
kernel/names.cmi lib/pp.cmi pretyping/pretype_errors.cmi \
- pretyping/rawterm.cmi pretyping/reductionops.cmi kernel/sign.cmi \
- kernel/term.cmi pretyping/termops.cmi kernel/typeops.cmi kernel/univ.cmi \
- lib/util.cmi pretyping/evarutil.cmi
+ pretyping/reductionops.cmi kernel/sign.cmi kernel/term.cmi \
+ pretyping/termops.cmi kernel/typeops.cmi kernel/univ.cmi lib/util.cmi \
+ pretyping/evarutil.cmi
pretyping/evarutil.cmx: kernel/environ.cmx pretyping/evd.cmx \
library/global.cmx pretyping/indrec.cmx library/nameops.cmx \
kernel/names.cmx lib/pp.cmx pretyping/pretype_errors.cmx \
- pretyping/rawterm.cmx pretyping/reductionops.cmx kernel/sign.cmx \
- kernel/term.cmx pretyping/termops.cmx kernel/typeops.cmx kernel/univ.cmx \
- lib/util.cmx pretyping/evarutil.cmi
-pretyping/evd.cmo: kernel/environ.cmi kernel/names.cmi kernel/sign.cmi \
- kernel/term.cmi lib/util.cmi pretyping/evd.cmi
-pretyping/evd.cmx: kernel/environ.cmx kernel/names.cmx kernel/sign.cmx \
- kernel/term.cmx lib/util.cmx pretyping/evd.cmi
+ pretyping/reductionops.cmx kernel/sign.cmx kernel/term.cmx \
+ pretyping/termops.cmx kernel/typeops.cmx kernel/univ.cmx lib/util.cmx \
+ pretyping/evarutil.cmi
+pretyping/evd.cmo: kernel/environ.cmi library/libnames.cmi kernel/names.cmi \
+ kernel/sign.cmi kernel/term.cmi pretyping/termops.cmi lib/util.cmi \
+ pretyping/evd.cmi
+pretyping/evd.cmx: kernel/environ.cmx library/libnames.cmx kernel/names.cmx \
+ kernel/sign.cmx kernel/term.cmx pretyping/termops.cmx lib/util.cmx \
+ pretyping/evd.cmi
pretyping/indrec.cmo: kernel/declarations.cmi kernel/entries.cmi \
kernel/environ.cmi library/global.cmi kernel/indtypes.cmi \
kernel/inductive.cmi pretyping/inductiveops.cmi library/libnames.cmi \
@@ -1398,12 +1405,12 @@ pretyping/pretyping.cmx: pretyping/cases.cmx pretyping/classops.cmx \
pretyping/retyping.cmx kernel/sign.cmx kernel/term.cmx \
pretyping/termops.cmx kernel/type_errors.cmx kernel/typeops.cmx \
lib/util.cmx pretyping/pretyping.cmi
-pretyping/rawterm.cmo: lib/dyn.cmi library/libnames.cmi kernel/names.cmi \
- library/nametab.cmi kernel/sign.cmi kernel/term.cmi kernel/univ.cmi \
- lib/util.cmi pretyping/rawterm.cmi
-pretyping/rawterm.cmx: lib/dyn.cmx library/libnames.cmx kernel/names.cmx \
- library/nametab.cmx kernel/sign.cmx kernel/term.cmx kernel/univ.cmx \
- lib/util.cmx pretyping/rawterm.cmi
+pretyping/rawterm.cmo: lib/dyn.cmi pretyping/evd.cmi library/libnames.cmi \
+ kernel/names.cmi library/nametab.cmi kernel/sign.cmi kernel/term.cmi \
+ kernel/univ.cmi lib/util.cmi pretyping/rawterm.cmi
+pretyping/rawterm.cmx: lib/dyn.cmx pretyping/evd.cmx library/libnames.cmx \
+ kernel/names.cmx library/nametab.cmx kernel/sign.cmx kernel/term.cmx \
+ kernel/univ.cmx lib/util.cmx pretyping/rawterm.cmi
pretyping/recordops.cmo: pretyping/classops.cmi library/lib.cmi \
library/libnames.cmi library/libobject.cmi library/library.cmi \
kernel/names.cmi library/nametab.cmi lib/pp.cmi library/summary.cmi \
@@ -1616,32 +1623,34 @@ scripts/coqmktop.cmo: config/coq_config.cmi scripts/tolink.cmo
scripts/coqmktop.cmx: config/coq_config.cmx scripts/tolink.cmx
tactics/auto.cmo: tactics/btermdn.cmi pretyping/clenv.cmi \
interp/constrintern.cmi kernel/declarations.cmi tactics/dhyp.cmi \
- proofs/evar_refiner.cmi pretyping/evd.cmi library/global.cmi \
- tactics/hiddentac.cmi tactics/hipattern.cmi kernel/inductive.cmi \
- library/lib.cmi library/libnames.cmi library/libobject.cmi \
- library/library.cmi proofs/logic.cmi pretyping/matching.cmi \
- library/nameops.cmi kernel/names.cmi library/nametab.cmi lib/options.cmi \
- pretyping/pattern.cmi proofs/pfedit.cmi lib/pp.cmi parsing/pptactic.cmi \
- parsing/printer.cmi proofs/proof_type.cmi pretyping/rawterm.cmi \
- kernel/reduction.cmi proofs/refiner.cmi kernel/sign.cmi \
- library/summary.cmi proofs/tacexpr.cmo proofs/tacmach.cmi \
- pretyping/tacred.cmi tactics/tacticals.cmi tactics/tactics.cmi \
- kernel/term.cmi pretyping/termops.cmi pretyping/typing.cmi lib/util.cmi \
- toplevel/vernacexpr.cmo tactics/auto.cmi
+ kernel/environ.cmi proofs/evar_refiner.cmi pretyping/evd.cmi \
+ library/global.cmi tactics/hiddentac.cmi tactics/hipattern.cmi \
+ kernel/inductive.cmi library/lib.cmi library/libnames.cmi \
+ library/libobject.cmi library/library.cmi proofs/logic.cmi \
+ pretyping/matching.cmi library/nameops.cmi kernel/names.cmi \
+ library/nametab.cmi lib/options.cmi pretyping/pattern.cmi \
+ proofs/pfedit.cmi lib/pp.cmi parsing/pptactic.cmi parsing/printer.cmi \
+ proofs/proof_type.cmi pretyping/rawterm.cmi kernel/reduction.cmi \
+ proofs/refiner.cmi kernel/sign.cmi library/summary.cmi proofs/tacexpr.cmo \
+ proofs/tacmach.cmi pretyping/tacred.cmi tactics/tacticals.cmi \
+ tactics/tactics.cmi kernel/term.cmi pretyping/termops.cmi \
+ pretyping/typing.cmi lib/util.cmi toplevel/vernacexpr.cmo \
+ tactics/auto.cmi
tactics/auto.cmx: tactics/btermdn.cmx pretyping/clenv.cmx \
interp/constrintern.cmx kernel/declarations.cmx tactics/dhyp.cmx \
- proofs/evar_refiner.cmx pretyping/evd.cmx library/global.cmx \
- tactics/hiddentac.cmx tactics/hipattern.cmx kernel/inductive.cmx \
- library/lib.cmx library/libnames.cmx library/libobject.cmx \
- library/library.cmx proofs/logic.cmx pretyping/matching.cmx \
- library/nameops.cmx kernel/names.cmx library/nametab.cmx lib/options.cmx \
- pretyping/pattern.cmx proofs/pfedit.cmx lib/pp.cmx parsing/pptactic.cmx \
- parsing/printer.cmx proofs/proof_type.cmx pretyping/rawterm.cmx \
- kernel/reduction.cmx proofs/refiner.cmx kernel/sign.cmx \
- library/summary.cmx proofs/tacexpr.cmx proofs/tacmach.cmx \
- pretyping/tacred.cmx tactics/tacticals.cmx tactics/tactics.cmx \
- kernel/term.cmx pretyping/termops.cmx pretyping/typing.cmx lib/util.cmx \
- toplevel/vernacexpr.cmx tactics/auto.cmi
+ kernel/environ.cmx proofs/evar_refiner.cmx pretyping/evd.cmx \
+ library/global.cmx tactics/hiddentac.cmx tactics/hipattern.cmx \
+ kernel/inductive.cmx library/lib.cmx library/libnames.cmx \
+ library/libobject.cmx library/library.cmx proofs/logic.cmx \
+ pretyping/matching.cmx library/nameops.cmx kernel/names.cmx \
+ library/nametab.cmx lib/options.cmx pretyping/pattern.cmx \
+ proofs/pfedit.cmx lib/pp.cmx parsing/pptactic.cmx parsing/printer.cmx \
+ proofs/proof_type.cmx pretyping/rawterm.cmx kernel/reduction.cmx \
+ proofs/refiner.cmx kernel/sign.cmx library/summary.cmx proofs/tacexpr.cmx \
+ proofs/tacmach.cmx pretyping/tacred.cmx tactics/tacticals.cmx \
+ tactics/tactics.cmx kernel/term.cmx pretyping/termops.cmx \
+ pretyping/typing.cmx lib/util.cmx toplevel/vernacexpr.cmx \
+ tactics/auto.cmi
tactics/autorewrite.cmo: parsing/ast.cmi parsing/coqast.cmi \
tactics/equality.cmi tactics/hipattern.cmi library/lib.cmi \
library/libobject.cmi kernel/names.cmi lib/pp.cmi proofs/proof_type.cmi \
@@ -1961,16 +1970,16 @@ tactics/tacticals.cmo: pretyping/clenv.cmi proofs/clenvtac.cmi \
pretyping/evd.cmi interp/genarg.cmi library/global.cmi \
pretyping/indrec.cmi kernel/inductive.cmi library/libnames.cmi \
pretyping/matching.cmi kernel/names.cmi pretyping/pattern.cmi lib/pp.cmi \
- kernel/reduction.cmi pretyping/reductionops.cmi proofs/refiner.cmi \
- kernel/sign.cmi proofs/tacexpr.cmo proofs/tacmach.cmi kernel/term.cmi \
+ kernel/reduction.cmi proofs/refiner.cmi kernel/sign.cmi \
+ proofs/tacexpr.cmo proofs/tacmach.cmi kernel/term.cmi \
pretyping/termops.cmi lib/util.cmi tactics/tacticals.cmi
tactics/tacticals.cmx: pretyping/clenv.cmx proofs/clenvtac.cmx \
kernel/declarations.cmx kernel/environ.cmx proofs/evar_refiner.cmx \
pretyping/evd.cmx interp/genarg.cmx library/global.cmx \
pretyping/indrec.cmx kernel/inductive.cmx library/libnames.cmx \
pretyping/matching.cmx kernel/names.cmx pretyping/pattern.cmx lib/pp.cmx \
- kernel/reduction.cmx pretyping/reductionops.cmx proofs/refiner.cmx \
- kernel/sign.cmx proofs/tacexpr.cmx proofs/tacmach.cmx kernel/term.cmx \
+ kernel/reduction.cmx proofs/refiner.cmx kernel/sign.cmx \
+ proofs/tacexpr.cmx proofs/tacmach.cmx kernel/term.cmx \
pretyping/termops.cmx lib/util.cmx tactics/tacticals.cmi
tactics/tactics.cmo: pretyping/clenv.cmi proofs/clenvtac.cmi \
interp/constrintern.cmi interp/coqlib.cmi library/decl_kinds.cmo \
@@ -2055,35 +2064,33 @@ toplevel/class.cmx: pretyping/classops.cmx library/decl_kinds.cmx \
toplevel/command.cmo: toplevel/class.cmi interp/constrextern.cmi \
interp/constrintern.cmi library/decl_kinds.cmo kernel/declarations.cmi \
library/declare.cmi kernel/entries.cmi kernel/environ.cmi \
- pretyping/evarutil.cmi pretyping/evd.cmi library/global.cmi \
- library/impargs.cmi pretyping/indrec.cmi kernel/indtypes.cmi \
- kernel/inductive.cmi library/lib.cmi library/libnames.cmi \
- library/libobject.cmi library/library.cmi proofs/logic.cmi \
- toplevel/metasyntax.cmi library/nameops.cmi kernel/names.cmi \
- library/nametab.cmi lib/options.cmi proofs/pfedit.cmi lib/pp.cmi \
- pretyping/pretyping.cmi parsing/printer.cmi proofs/proof_type.cmi \
- kernel/reduction.cmi pretyping/reductionops.cmi pretyping/retyping.cmi \
- kernel/safe_typing.cmi library/states.cmi interp/symbols.cmi \
- interp/syntax_def.cmi proofs/tacmach.cmi pretyping/tacred.cmi \
- kernel/term.cmi pretyping/termops.cmi interp/topconstr.cmi \
- kernel/typeops.cmi lib/util.cmi toplevel/vernacexpr.cmo \
- toplevel/command.cmi
+ pretyping/evd.cmi library/global.cmi library/impargs.cmi \
+ pretyping/indrec.cmi kernel/indtypes.cmi kernel/inductive.cmi \
+ library/lib.cmi library/libnames.cmi library/libobject.cmi \
+ library/library.cmi proofs/logic.cmi toplevel/metasyntax.cmi \
+ library/nameops.cmi kernel/names.cmi library/nametab.cmi lib/options.cmi \
+ proofs/pfedit.cmi lib/pp.cmi pretyping/pretyping.cmi parsing/printer.cmi \
+ proofs/proof_type.cmi kernel/reduction.cmi pretyping/reductionops.cmi \
+ pretyping/retyping.cmi kernel/safe_typing.cmi library/states.cmi \
+ interp/symbols.cmi interp/syntax_def.cmi proofs/tacmach.cmi \
+ pretyping/tacred.cmi kernel/term.cmi pretyping/termops.cmi \
+ interp/topconstr.cmi kernel/typeops.cmi lib/util.cmi \
+ toplevel/vernacexpr.cmo toplevel/command.cmi
toplevel/command.cmx: toplevel/class.cmx interp/constrextern.cmx \
interp/constrintern.cmx library/decl_kinds.cmx kernel/declarations.cmx \
library/declare.cmx kernel/entries.cmx kernel/environ.cmx \
- pretyping/evarutil.cmx pretyping/evd.cmx library/global.cmx \
- library/impargs.cmx pretyping/indrec.cmx kernel/indtypes.cmx \
- kernel/inductive.cmx library/lib.cmx library/libnames.cmx \
- library/libobject.cmx library/library.cmx proofs/logic.cmx \
- toplevel/metasyntax.cmx library/nameops.cmx kernel/names.cmx \
- library/nametab.cmx lib/options.cmx proofs/pfedit.cmx lib/pp.cmx \
- pretyping/pretyping.cmx parsing/printer.cmx proofs/proof_type.cmx \
- kernel/reduction.cmx pretyping/reductionops.cmx pretyping/retyping.cmx \
- kernel/safe_typing.cmx library/states.cmx interp/symbols.cmx \
- interp/syntax_def.cmx proofs/tacmach.cmx pretyping/tacred.cmx \
- kernel/term.cmx pretyping/termops.cmx interp/topconstr.cmx \
- kernel/typeops.cmx lib/util.cmx toplevel/vernacexpr.cmx \
- toplevel/command.cmi
+ pretyping/evd.cmx library/global.cmx library/impargs.cmx \
+ pretyping/indrec.cmx kernel/indtypes.cmx kernel/inductive.cmx \
+ library/lib.cmx library/libnames.cmx library/libobject.cmx \
+ library/library.cmx proofs/logic.cmx toplevel/metasyntax.cmx \
+ library/nameops.cmx kernel/names.cmx library/nametab.cmx lib/options.cmx \
+ proofs/pfedit.cmx lib/pp.cmx pretyping/pretyping.cmx parsing/printer.cmx \
+ proofs/proof_type.cmx kernel/reduction.cmx pretyping/reductionops.cmx \
+ pretyping/retyping.cmx kernel/safe_typing.cmx library/states.cmx \
+ interp/symbols.cmx interp/syntax_def.cmx proofs/tacmach.cmx \
+ pretyping/tacred.cmx kernel/term.cmx pretyping/termops.cmx \
+ interp/topconstr.cmx kernel/typeops.cmx lib/util.cmx \
+ toplevel/vernacexpr.cmx toplevel/command.cmi
toplevel/coqinit.cmo: config/coq_config.cmi toplevel/mltop.cmi \
library/nameops.cmi kernel/names.cmi lib/options.cmi lib/pp.cmi \
lib/system.cmi toplevel/toplevel.cmi toplevel/vernac.cmi \
@@ -2232,20 +2239,6 @@ toplevel/toplevel.cmx: toplevel/cerrors.cmx library/lib.cmx \
toplevel/vernac.cmx toplevel/vernacexpr.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: interp/constrextern.cmi interp/constrintern.cmi \
- parsing/coqast.cmi parsing/lexer.cmi library/lib.cmi library/library.cmi \
- kernel/names.cmi lib/options.cmi parsing/pcoq.cmi proofs/pfedit.cmi \
- lib/pp.cmi translate/ppvernacnew.cmi proofs/refiner.cmi \
- library/states.cmi lib/system.cmi tactics/tacinterp.cmi \
- proofs/tacmach.cmi lib/util.cmi toplevel/vernacentries.cmi \
- toplevel/vernacexpr.cmo toplevel/vernacinterp.cmi toplevel/vernac.cmi
-toplevel/vernac.cmx: interp/constrextern.cmx interp/constrintern.cmx \
- parsing/coqast.cmx parsing/lexer.cmx library/lib.cmx library/library.cmx \
- kernel/names.cmx lib/options.cmx parsing/pcoq.cmx proofs/pfedit.cmx \
- lib/pp.cmx translate/ppvernacnew.cmx proofs/refiner.cmx \
- library/states.cmx lib/system.cmx tactics/tacinterp.cmx \
- proofs/tacmach.cmx lib/util.cmx toplevel/vernacentries.cmx \
- toplevel/vernacexpr.cmx toplevel/vernacinterp.cmx toplevel/vernac.cmi
toplevel/vernacentries.cmo: tactics/auto.cmi toplevel/class.cmi \
pretyping/classops.cmi toplevel/command.cmi interp/constrextern.cmi \
interp/constrintern.cmi library/decl_kinds.cmo library/declaremods.cmi \
@@ -2310,6 +2303,20 @@ toplevel/vernacinterp.cmx: parsing/ast.cmx parsing/coqast.cmx \
kernel/names.cmx lib/options.cmx lib/pp.cmx proofs/proof_type.cmx \
proofs/tacexpr.cmx tactics/tacinterp.cmx lib/util.cmx \
toplevel/vernacexpr.cmx toplevel/vernacinterp.cmi
+toplevel/vernac.cmo: interp/constrextern.cmi interp/constrintern.cmi \
+ parsing/coqast.cmi parsing/lexer.cmi library/lib.cmi library/library.cmi \
+ kernel/names.cmi lib/options.cmi parsing/pcoq.cmi proofs/pfedit.cmi \
+ lib/pp.cmi translate/ppvernacnew.cmi proofs/refiner.cmi \
+ library/states.cmi lib/system.cmi tactics/tacinterp.cmi \
+ proofs/tacmach.cmi lib/util.cmi toplevel/vernacentries.cmi \
+ toplevel/vernacexpr.cmo toplevel/vernacinterp.cmi toplevel/vernac.cmi
+toplevel/vernac.cmx: interp/constrextern.cmx interp/constrintern.cmx \
+ parsing/coqast.cmx parsing/lexer.cmx library/lib.cmx library/library.cmx \
+ kernel/names.cmx lib/options.cmx parsing/pcoq.cmx proofs/pfedit.cmx \
+ lib/pp.cmx translate/ppvernacnew.cmx proofs/refiner.cmx \
+ library/states.cmx lib/system.cmx tactics/tacinterp.cmx \
+ proofs/tacmach.cmx lib/util.cmx toplevel/vernacentries.cmx \
+ toplevel/vernacexpr.cmx toplevel/vernacinterp.cmx toplevel/vernac.cmi
translate/ppconstrnew.cmo: parsing/ast.cmi lib/bignat.cmi \
interp/constrextern.cmi interp/constrintern.cmi parsing/coqast.cmi \
pretyping/evd.cmi interp/genarg.cmi library/global.cmi library/lib.cmi \
@@ -2396,6 +2403,12 @@ contrib/cc/cctac.cmx: contrib/cc/ccalgo.cmx contrib/cc/ccproof.cmx \
proofs/refiner.cmx kernel/sign.cmx proofs/tacexpr.cmx \
tactics/tacinterp.cmx proofs/tacmach.cmx tactics/tacticals.cmx \
tactics/tactics.cmx kernel/term.cmx pretyping/termops.cmx lib/util.cmx
+contrib/correctness/pcicenv.cmo: library/global.cmi kernel/names.cmi \
+ kernel/sign.cmi kernel/term.cmi kernel/univ.cmi \
+ contrib/correctness/pcicenv.cmi
+contrib/correctness/pcicenv.cmx: library/global.cmx kernel/names.cmx \
+ kernel/sign.cmx kernel/term.cmx kernel/univ.cmx \
+ contrib/correctness/pcicenv.cmi
contrib/correctness/pcic.cmo: kernel/declarations.cmi library/declare.cmi \
pretyping/detyping.cmi kernel/entries.cmi library/global.cmi \
kernel/indtypes.cmi library/libnames.cmi library/nameops.cmi \
@@ -2410,12 +2423,6 @@ contrib/correctness/pcic.cmx: kernel/declarations.cmx library/declare.cmx \
toplevel/record.cmx kernel/sign.cmx kernel/term.cmx pretyping/termops.cmx \
interp/topconstr.cmx kernel/typeops.cmx lib/util.cmx \
toplevel/vernacexpr.cmx contrib/correctness/pcic.cmi
-contrib/correctness/pcicenv.cmo: library/global.cmi kernel/names.cmi \
- kernel/sign.cmi kernel/term.cmi kernel/univ.cmi \
- contrib/correctness/pcicenv.cmi
-contrib/correctness/pcicenv.cmx: library/global.cmx kernel/names.cmx \
- kernel/sign.cmx kernel/term.cmx kernel/univ.cmx \
- contrib/correctness/pcicenv.cmi
contrib/correctness/pdb.cmo: interp/constrintern.cmi library/global.cmi \
kernel/names.cmi library/nametab.cmi kernel/term.cmi \
pretyping/termops.cmi contrib/correctness/pdb.cmi
@@ -2992,6 +2999,14 @@ contrib/interface/pbp.cmx: interp/coqlib.cmx kernel/environ.cmx \
proofs/tacmach.cmx tactics/tacticals.cmx tactics/tactics.cmx \
kernel/term.cmx pretyping/termops.cmx interp/topconstr.cmx \
pretyping/typing.cmx lib/util.cmx contrib/interface/pbp.cmi
+contrib/interface/showproof_ct.cmo: contrib/interface/ascent.cmi \
+ parsing/esyntax.cmi library/global.cmi toplevel/metasyntax.cmi lib/pp.cmi \
+ parsing/printer.cmi contrib/interface/translate.cmi \
+ contrib/interface/vtp.cmi contrib/interface/xlate.cmi
+contrib/interface/showproof_ct.cmx: contrib/interface/ascent.cmi \
+ parsing/esyntax.cmx library/global.cmx toplevel/metasyntax.cmx lib/pp.cmx \
+ parsing/printer.cmx contrib/interface/translate.cmx \
+ contrib/interface/vtp.cmx contrib/interface/xlate.cmx
contrib/interface/showproof.cmo: pretyping/clenv.cmi interp/constrintern.cmi \
parsing/coqast.cmi kernel/declarations.cmi kernel/environ.cmi \
pretyping/evd.cmi interp/genarg.cmi library/global.cmi \
@@ -3016,14 +3031,6 @@ contrib/interface/showproof.cmx: pretyping/clenv.cmx interp/constrintern.cmx \
pretyping/termops.cmx contrib/interface/translate.cmx \
pretyping/typing.cmx lib/util.cmx toplevel/vernacinterp.cmx \
contrib/interface/showproof.cmi
-contrib/interface/showproof_ct.cmo: contrib/interface/ascent.cmi \
- parsing/esyntax.cmi library/global.cmi toplevel/metasyntax.cmi lib/pp.cmi \
- parsing/printer.cmi contrib/interface/translate.cmi \
- contrib/interface/vtp.cmi contrib/interface/xlate.cmi
-contrib/interface/showproof_ct.cmx: contrib/interface/ascent.cmi \
- parsing/esyntax.cmx library/global.cmx toplevel/metasyntax.cmx lib/pp.cmx \
- parsing/printer.cmx contrib/interface/translate.cmx \
- contrib/interface/vtp.cmx contrib/interface/xlate.cmx
contrib/interface/translate.cmo: contrib/interface/ascent.cmi parsing/ast.cmi \
interp/constrextern.cmi contrib/interface/ctast.cmo kernel/environ.cmi \
pretyping/evarutil.cmi pretyping/evd.cmi library/libobject.cmi \
@@ -3206,12 +3213,12 @@ contrib/romega/refl_omega.cmx: contrib/romega/const_omega.cmx \
proofs/logic.cmx kernel/names.cmx contrib/romega/omega2.cmx \
lib/options.cmx lib/pp.cmx parsing/printer.cmx proofs/tacmach.cmx \
tactics/tacticals.cmx tactics/tactics.cmx kernel/term.cmx lib/util.cmx
-contrib/xml/acic.cmo: kernel/names.cmi kernel/term.cmi
-contrib/xml/acic.cmx: kernel/names.cmx kernel/term.cmx
contrib/xml/acic2Xml.cmo: contrib/xml/acic.cmo contrib/xml/cic2acic.cmo \
kernel/names.cmi kernel/term.cmi lib/util.cmi contrib/xml/xml.cmi
contrib/xml/acic2Xml.cmx: contrib/xml/acic.cmx contrib/xml/cic2acic.cmx \
kernel/names.cmx kernel/term.cmx lib/util.cmx contrib/xml/xml.cmx
+contrib/xml/acic.cmo: kernel/names.cmi kernel/term.cmi
+contrib/xml/acic.cmx: kernel/names.cmx kernel/term.cmx
contrib/xml/cic2acic.cmo: contrib/xml/acic.cmo kernel/declarations.cmi \
library/declare.cmi library/dischargedhypsmap.cmi \
contrib/xml/doubleTypeInference.cmi kernel/environ.cmi \
@@ -3270,8 +3277,6 @@ contrib/xml/proofTree2Xml.cmx: contrib/xml/acic.cmx contrib/xml/acic2Xml.cmx \
contrib/xml/unshare.cmx lib/util.cmx contrib/xml/xml.cmx
contrib/xml/unshare.cmo: contrib/xml/unshare.cmi
contrib/xml/unshare.cmx: contrib/xml/unshare.cmi
-contrib/xml/xml.cmo: contrib/xml/xml.cmi
-contrib/xml/xml.cmx: contrib/xml/xml.cmi
contrib/xml/xmlcommand.cmo: contrib/xml/acic.cmo contrib/xml/acic2Xml.cmo \
contrib/xml/cic2acic.cmo config/coq_config.cmi library/decl_kinds.cmo \
kernel/declarations.cmi library/declare.cmi kernel/environ.cmi \
@@ -3300,10 +3305,8 @@ contrib/xml/xmlentries.cmo: toplevel/cerrors.cmi parsing/egrammar.cmi \
contrib/xml/xmlentries.cmx: toplevel/cerrors.cmx parsing/egrammar.cmx \
parsing/extend.cmx interp/genarg.cmx parsing/pcoq.cmx lib/pp.cmx \
lib/util.cmx toplevel/vernacinterp.cmx contrib/xml/xmlcommand.cmx
-ide/utils/configwin.cmo: ide/utils/configwin_ihm.cmo \
- ide/utils/configwin_types.cmo ide/utils/configwin.cmi
-ide/utils/configwin.cmx: ide/utils/configwin_ihm.cmx \
- ide/utils/configwin_types.cmx ide/utils/configwin.cmi
+contrib/xml/xml.cmo: contrib/xml/xml.cmi
+contrib/xml/xml.cmx: contrib/xml/xml.cmi
ide/utils/configwin_html_config.cmo: ide/utils/configwin_ihm.cmo \
ide/utils/configwin_messages.cmo ide/utils/configwin_types.cmo \
ide/utils/uoptions.cmi
@@ -3314,6 +3317,10 @@ ide/utils/configwin_ihm.cmo: ide/utils/configwin_messages.cmo \
ide/utils/configwin_types.cmo ide/utils/okey.cmi ide/utils/uoptions.cmi
ide/utils/configwin_ihm.cmx: ide/utils/configwin_messages.cmx \
ide/utils/configwin_types.cmx ide/utils/okey.cmx ide/utils/uoptions.cmx
+ide/utils/configwin.cmo: ide/utils/configwin_ihm.cmo \
+ ide/utils/configwin_types.cmo ide/utils/configwin.cmi
+ide/utils/configwin.cmx: ide/utils/configwin_ihm.cmx \
+ ide/utils/configwin_types.cmx ide/utils/configwin.cmi
ide/utils/configwin_types.cmo: ide/utils/configwin_keys.cmo \
ide/utils/uoptions.cmi
ide/utils/configwin_types.cmx: ide/utils/configwin_keys.cmx \
diff --git a/Makefile b/Makefile
index 09e7aace0..f8969933d 100644
--- a/Makefile
+++ b/Makefile
@@ -133,15 +133,15 @@ LIBRARY=\
PRETYPING=\
pretyping/termops.cmo pretyping/evd.cmo \
pretyping/reductionops.cmo pretyping/inductiveops.cmo \
- pretyping/rawterm.cmo pretyping/pattern.cmo \
- pretyping/detyping.cmo pretyping/retyping.cmo \
- pretyping/cbv.cmo pretyping/tacred.cmo \
+ pretyping/retyping.cmo pretyping/cbv.cmo pretyping/tacred.cmo \
pretyping/pretype_errors.cmo \
- pretyping/classops.cmo pretyping/recordops.cmo pretyping/indrec.cmo \
pretyping/evarutil.cmo pretyping/typing.cmo \
- pretyping/unification.cmo pretyping/evarconv.cmo \
- pretyping/coercion.cmo pretyping/clenv.cmo pretyping/cases.cmo \
- pretyping/pretyping.cmo pretyping/matching.cmo
+ pretyping/unification.cmo pretyping/recordops.cmo pretyping/evarconv.cmo \
+ pretyping/classops.cmo pretyping/indrec.cmo \
+ pretyping/coercion.cmo pretyping/clenv.cmo \
+ pretyping/rawterm.cmo pretyping/pattern.cmo \
+ pretyping/detyping.cmo \
+ pretyping/cases.cmo pretyping/pretyping.cmo pretyping/matching.cmo
INTERP=\
parsing/lexer.cmo interp/topconstr.cmo interp/ppextend.cmo interp/symbols.cmo \
@@ -1302,11 +1302,11 @@ GRAMMARNEEDEDCMO=\
lib/pp_control.cmo lib/pp.cmo lib/compat.cmo lib/util.cmo lib/bignat.cmo \
lib/dyn.cmo lib/options.cmo \
lib/hashcons.cmo lib/predicate.cmo lib/rtree.cmo \
- kernel/names.cmo kernel/univ.cmo kernel/esubst.cmo kernel/term.cmo \
- kernel/sign.cmo kernel/declarations.cmo kernel/environ.cmo\
+ $(KERNEL) \
library/nameops.cmo library/libnames.cmo library/summary.cmo \
library/nametab.cmo library/libobject.cmo library/lib.cmo \
library/goptions.cmo library/decl_kinds.cmo \
+ library/global.cmo pretyping/termops.cmo \
pretyping/rawterm.cmo pretyping/pattern.cmo pretyping/evd.cmo \
interp/topconstr.cmo interp/genarg.cmo \
interp/ppextend.cmo parsing/coqast.cmo parsing/ast.cmo \
diff --git a/contrib/first-order/instances.ml b/contrib/first-order/instances.ml
index e4b0c944b..a2b834ffb 100644
--- a/contrib/first-order/instances.ml
+++ b/contrib/first-order/instances.ml
@@ -127,7 +127,7 @@ let mk_open_instance id gl m t=
match t with
RLambda(loc,name,_,t0)->
let t1=raux (n-1) t0 in
- RLambda(loc,name,RHole (dummy_loc,BinderType name),t1)
+ RLambda(loc,name,RHole (dummy_loc,Evd.BinderType name),t1)
| _-> anomaly "can't happen" in
let ntt=Pretyping.understand evmap env (raux m rawt) in
Sign.decompose_lam_n_assum m ntt
diff --git a/contrib/xml/cic2acic.ml b/contrib/xml/cic2acic.ml
index b15611438..d379c5569 100644
--- a/contrib/xml/cic2acic.ml
+++ b/contrib/xml/cic2acic.ml
@@ -384,7 +384,7 @@ Pp.ppnl (Pp.(++) (Pp.str "BUG: this subterm was not visited during the double-ty
{D.synthesized =
Reductionops.nf_beta
(CPropRetyping.get_type_of env evar_map
- (Evarutil.refresh_universes tt)) ;
+ (Termops.refresh_universes tt)) ;
D.expected = None}
in
(* Debugging only:
diff --git a/contrib/xml/proof2aproof.ml b/contrib/xml/proof2aproof.ml
index 62d4ad842..5c5ac5d61 100644
--- a/contrib/xml/proof2aproof.ml
+++ b/contrib/xml/proof2aproof.ml
@@ -93,7 +93,7 @@ module ProofTreeHash =
let extract_open_proof sigma pf =
let module PT = Proof_type in
let module L = Logic in
- let sigma = ref sigma in
+ let evd = ref (Evd.create_evar_defs sigma) in
let proof_tree_to_constr = ProofTreeHash.create 503 in
let proof_tree_to_flattened_proof_tree = ProofTreeHash.create 503 in
let unshared_constrs = ref S.empty in
@@ -134,17 +134,18 @@ let extract_open_proof sigma pf =
(*CSC: the section variables in the right order must be added too *)
let evar_instance = List.map (fun (n,_) -> Term.mkRel n) sorted_rels in
let env = Global.env_of_context context in
- let sigma',evar =
- Evarutil.new_isevar_sign env !sigma goal.Evd.evar_concl evar_instance
- in
- sigma := sigma' ;
+ let evd',evar =
+ Evarutil.new_evar_instance context !evd goal.Evd.evar_concl
+ evar_instance in
+ evd := evd' ;
evar
| _ -> Util.anomaly "Bug : a case has been forgotten in proof_extractor"
in
let unsharedconstr =
let evar_nf_constr =
- nf_evar !sigma ~preserve:(function e -> S.mem e !unshared_constrs) constr
+ nf_evar (Evd.evars_of !evd)
+ ~preserve:(function e -> S.mem e !unshared_constrs) constr
in
Unshare.unshare
~already_unshared:(function e -> S.mem e !unshared_constrs)
@@ -152,14 +153,15 @@ let extract_open_proof sigma pf =
in
(*CSC: debugging stuff to be removed *)
if ProofTreeHash.mem proof_tree_to_constr node then
- Pp.ppnl (Pp.(++) (Pp.str "#DUPLICATE INSERTION: ") (Refiner.print_proof !sigma [] node)) ;
+ Pp.ppnl (Pp.(++) (Pp.str "#DUPLICATE INSERTION: ")
+ (Refiner.print_proof (Evd.evars_of !evd) [] node)) ;
ProofTreeHash.add proof_tree_to_constr node unsharedconstr ;
unshared_constrs := S.add unsharedconstr !unshared_constrs ;
unsharedconstr
in
let unshared_pf = unshare_proof_tree pf in
let pfterm = proof_extractor [] unshared_pf in
- (pfterm, !sigma, proof_tree_to_constr, proof_tree_to_flattened_proof_tree,
+ (pfterm, Evd.evars_of !evd, proof_tree_to_constr, proof_tree_to_flattened_proof_tree,
unshared_pf)
;;
diff --git a/dev/top_printers.ml b/dev/top_printers.ml
index 40f7d0da0..1aac94ffd 100644
--- a/dev/top_printers.ml
+++ b/dev/top_printers.ml
@@ -88,7 +88,7 @@ let pproof p = pp(print_proof Evd.empty empty_named_context p)
let prevm evd = pp(pr_decls evd)
-let prevd evd = prevm(Evarutil.evars_of evd)
+let prevd evd = prevm(Evd.evars_of evd)
let prwc wc = pp(pr_evc wc)
diff --git a/interp/constrextern.ml b/interp/constrextern.ml
index 372b6c4ed..77853ade8 100644
--- a/interp/constrextern.ml
+++ b/interp/constrextern.ml
@@ -1231,10 +1231,10 @@ let rec cases_pattern_expr_of_constr_expr = function
let rec rawconstr_of_cases_pattern = function
| PatVar (loc,Name id) -> RVar (loc,id)
- | PatVar (loc,Anonymous) -> RHole (loc,InternalHole)
+ | PatVar (loc,Anonymous) -> RHole (loc,Evd.InternalHole)
| PatCstr (loc,(ind,_ as c),args,_) ->
let nparams = (snd (Global.lookup_inductive ind)).Declarations.mind_nparams in
- let params = list_tabulate (fun _ -> RHole (loc,InternalHole)) nparams in
+ let params = list_tabulate (fun _ -> RHole (loc,Evd.InternalHole)) nparams in
let args = params @ List.map rawconstr_of_cases_pattern args in
let f = RRef (loc,ConstructRef c) in
if args = [] then f else RApp (loc,f,args)
@@ -1573,7 +1573,7 @@ let rec extern inctx scopes vars r =
(sub_extern false scopes vars tm,
(na',option_app (fun (loc,ind,nal) ->
let args = List.map (function
- | Anonymous -> RHole (dummy_loc,InternalHole)
+ | Anonymous -> RHole (dummy_loc,Evd.InternalHole)
| Name id -> RVar (dummy_loc,id)) nal in
let t = RApp (dummy_loc,RRef (dummy_loc,IndRef ind),args) in
(extern_type scopes vars t)) x))) tml in
@@ -1794,7 +1794,7 @@ let rec raw_of_pat tenv env = function
anomaly "rawconstr_of_pattern: index to an anonymous variable"
with Not_found -> id_of_string ("[REL "^(string_of_int n)^"]") in
RVar (loc,id)
- | PMeta None -> RHole (loc,InternalHole)
+ | PMeta None -> RHole (loc,Evd.InternalHole)
| PMeta (Some n) -> RPatVar (loc,(false,n))
| PApp (f,args) ->
RApp (loc,raw_of_pat tenv env f,array_map_to_list (raw_of_pat tenv env) args)
diff --git a/interp/constrintern.ml b/interp/constrintern.ml
index 03cd671af..28f0de932 100644
--- a/interp/constrintern.ml
+++ b/interp/constrintern.ml
@@ -625,7 +625,7 @@ let locate_if_isevar loc na = function
(try match na with
| Name id -> Reserve.find_reserved_type id
| Anonymous -> raise Not_found
- with Not_found -> RHole (loc, BinderType na))
+ with Not_found -> RHole (loc, Evd.BinderType na))
| x -> x
let check_hidden_implicit_parameters id (_,_,_,indnames,_) =
@@ -669,8 +669,8 @@ let get_implicit_name n imps =
else Some (Impargs.name_of_implicit (List.nth imps (n-1)))
let set_hole_implicit i = function
- | RRef (loc,r) -> (loc,ImplicitArg (r,i))
- | RVar (loc,id) -> (loc,ImplicitArg (VarRef id,i))
+ | RRef (loc,r) -> (loc,Evd.ImplicitArg (r,i))
+ | RVar (loc,id) -> (loc,Evd.ImplicitArg (VarRef id,i))
| _ -> anomaly "Only refs have implicits"
let exists_implicit_name id =
@@ -908,7 +908,7 @@ let internalise sigma env allow_soapp lvar c =
let p' = option_app (intern_type env'') po in
RIf (loc, c', (na', p'), intern env b1, intern env b2)
| CHole loc ->
- RHole (loc, QuestionMark)
+ RHole (loc, Evd.QuestionMark)
| CPatVar (loc, n) when allow_soapp ->
RPatVar (loc, n)
| CPatVar (loc, (false,n)) when Options.do_translate () ->
@@ -943,7 +943,7 @@ let internalise sigma env allow_soapp lvar c =
(env,bl) nal
| LocalRawDef((loc,na),def) ->
((name_fold Idset.add na ids,ts,sc),
- (na,Some(intern env def),RHole(loc,BinderType na))::bl)
+ (na,Some(intern env def),RHole(loc,Evd.BinderType na))::bl)
and intern_eqn n (ids,tmp_scope,scopes as env) (loc,lhs,rhs) =
let idsl_pll = List.map (intern_cases_pattern scopes ([],[]) None) lhs in
diff --git a/interp/reserve.ml b/interp/reserve.ml
index 167f492c8..14797930d 100644
--- a/interp/reserve.ml
+++ b/interp/reserve.ml
@@ -89,7 +89,7 @@ let anonymize_if_reserved na t = match na with
if !Options.v7 & id = id_of_string "_" then t else
(try
if unloc t = find_reserved_type id
- then RHole (dummy_loc,BinderType na)
+ then RHole (dummy_loc,Evd.BinderType na)
else t
with Not_found -> t)
| Anonymous -> t
diff --git a/interp/topconstr.ml b/interp/topconstr.ml
index d3b72ef78..8f9360e57 100644
--- a/interp/topconstr.ml
+++ b/interp/topconstr.ml
@@ -43,7 +43,7 @@ type aconstr =
| ALetTuple of name list * (name * aconstr option) * aconstr * aconstr
| AIf of aconstr * (name * aconstr option) * aconstr * aconstr
| ASort of rawsort
- | AHole of hole_kind
+ | AHole of Evd.hole_kind
| APatVar of patvar
| ACast of aconstr * aconstr
@@ -192,12 +192,12 @@ let rec subst_aconstr subst raw =
| APatVar _ | ASort _ -> raw
- | AHole (ImplicitArg (ref,i)) ->
+ | AHole (Evd.ImplicitArg (ref,i)) ->
let ref' = subst_global subst ref in
if ref' == ref then raw else
- AHole (ImplicitArg (ref',i))
- | AHole (BinderType _ | QuestionMark | CasesType |
- InternalHole | TomatchTypeParameter _) -> raw
+ AHole (Evd.ImplicitArg (ref',i))
+ | AHole (Evd.BinderType _ | Evd.QuestionMark | Evd.CasesType |
+ Evd.InternalHole | Evd.TomatchTypeParameter _) -> raw
| ACast (r1,r2) ->
let r1' = subst_aconstr subst r1 and r2' = subst_aconstr subst r2 in
diff --git a/interp/topconstr.mli b/interp/topconstr.mli
index d5046b43b..53182e34b 100644
--- a/interp/topconstr.mli
+++ b/interp/topconstr.mli
@@ -39,7 +39,7 @@ type aconstr =
| ALetTuple of name list * (name * aconstr option) * aconstr * aconstr
| AIf of aconstr * (name * aconstr option) * aconstr * aconstr
| ASort of rawsort
- | AHole of hole_kind
+ | AHole of Evd.hole_kind
| APatVar of patvar
| ACast of aconstr * aconstr
diff --git a/pretyping/cases.ml b/pretyping/cases.ml
index 463788a22..9e10c9390 100644
--- a/pretyping/cases.ml
+++ b/pretyping/cases.ml
@@ -63,13 +63,13 @@ let error_needs_inversion env x t =
(* A) Typing old cases *)
(* This was previously in Indrec but creates existential holes *)
-let mkExistential isevars env loc =
- e_new_isevar isevars env loc (new_Type ())
+let mkExistential env ?(src=(dummy_loc,Evd.InternalHole)) isevars =
+ e_new_evar isevars env ~src:src (new_Type ())
let norec_branch_scheme env isevars cstr =
let rec crec env = function
| d::rea -> mkProd_or_LetIn d (crec (push_rel d env) rea)
- | [] -> mkExistential isevars env (dummy_loc, InternalHole) in
+ | [] -> mkExistential env isevars in
crec env (List.rev cstr.cs_args)
let rec_branch_scheme env isevars (sp,j) recargs cstr =
@@ -79,8 +79,7 @@ let rec_branch_scheme env isevars (sp,j) recargs cstr =
let d =
match dest_recarg ra with
| Mrec k when k=j ->
- let t = mkExistential isevars env (dummy_loc, InternalHole)
- in
+ let t = mkExistential env isevars in
mkArrow t
(crec (push_rel (Anonymous,None,t) env)
(List.rev (lift_rel_context 1 (List.rev rea)),reca))
@@ -89,7 +88,7 @@ let rec_branch_scheme env isevars (sp,j) recargs cstr =
| (name,Some b,c as d)::rea, reca ->
mkLetIn (name,b, c,crec (push_rel d env) (rea,reca))
- | [],[] -> mkExistential isevars env (dummy_loc, InternalHole)
+ | [],[] -> mkExistential env isevars
| _ -> anomaly "rec_branch_scheme"
in
crec env (List.rev cstr.cs_args,recargs)
@@ -154,7 +153,7 @@ let pred_case_ml env sigma isrec (IndType (indf,realargs)) (i,ft) =
let j = snd ind in (* index of inductive *)
let nbrec = if isrec then count_rec_arg j recargi else 0 in
let nb_arg = List.length (recargs.(i)) + nbrec in
- let pred = Evarutil.refresh_universes (concl_n env sigma nb_arg ft) in
+ let pred = refresh_universes (concl_n env sigma nb_arg ft) in
if noccur_between 1 nb_arg pred then
lift (-nb_arg) pred
else
@@ -379,7 +378,7 @@ let push_history_pattern n current cont =
*)
type pattern_matching_problem =
{ env : env;
- isevars : evar_defs ref;
+ isevars : Evd.evar_defs ref;
pred : predicate_signature option;
tomatch : tomatch_stack;
history : pattern_continuation;
@@ -405,15 +404,15 @@ exception NotCoercible
let inh_coerce_to_ind isevars env tmloc ty tyi =
let (mib,mip) = Inductive.lookup_mind_specif env tyi in
- let (ntys,_) = splay_prod env (evars_of !isevars) mip.mind_nf_arity in
+ let (ntys,_) = splay_prod env (Evd.evars_of !isevars) mip.mind_nf_arity in
let hole_source = match tmloc with
- | Some loc -> fun i -> (loc, TomatchTypeParameter (tyi,i))
- | None -> fun _ -> (dummy_loc, InternalHole) in
+ | Some loc -> fun i -> (loc, Evd.TomatchTypeParameter (tyi,i))
+ | None -> fun _ -> (dummy_loc, Evd.InternalHole) in
let (_,evarl,_) =
List.fold_right
(fun (na,ty) (env,evl,n) ->
(push_rel (na,None,ty) env,
- (e_new_isevar isevars env (hole_source n) ty)::evl,n+1))
+ (e_new_evar isevars env ~src:(hole_source n) ty)::evl,n+1))
ntys (env,[],1) in
let expected_typ = applist (mkInd tyi,evarl) in
(* devrait être indifférent d'exiger leq ou pas puisque pour
@@ -432,17 +431,17 @@ let unify_tomatch_with_patterns isevars env tmloc typ = function
(let tyi = inductive_of_constructor c in
try
let indtyp = inh_coerce_to_ind isevars env tmloc typ tyi in
- IsInd (typ,find_rectype env (evars_of !isevars) typ)
+ IsInd (typ,find_rectype env (Evd.evars_of !isevars) typ)
with NotCoercible ->
(* 2 cases : Not the right inductive or not an inductive at all *)
try
- IsInd (typ,find_rectype env (evars_of !isevars) typ)
+ IsInd (typ,find_rectype env (Evd.evars_of !isevars) typ)
(* will try to coerce later in check_and_adjust_constructor.. *)
with Not_found ->
NotInd (None,typ))
(* error will be detected in check_all_variables *)
| None ->
- try IsInd (typ,find_rectype env (evars_of !isevars) typ)
+ try IsInd (typ,find_rectype env (Evd.evars_of !isevars) typ)
with Not_found -> NotInd (None,typ)
let coerce_row typing_fun isevars env cstropt tomatch =
@@ -906,7 +905,7 @@ let shift_operator k = function OpLambda _ | OpProd _ -> k+1 | _ -> k
let reloc_operator (k,n) = function OpRel p when p > k ->
let rec unify_clauses k pv =
- let pv'= Array.map (fun (n,sign,_,p) -> n,splay_constr (whd_betaiotaevar (push_rels (List.rev sign) env) (evars_of isevars)) p) pv in
+ let pv'= Array.map (fun (n,sign,_,p) -> n,splay_constr (whd_betaiotaevar (push_rels (List.rev sign) env) (Evd.evars_of isevars)) p) pv in
let n1,op1 = let (n1,(op1,args1)) = pv'.(0) in n1,op1 in
if Array.for_all (fun (ni,(opi,_)) -> eq_operator_lift k (n1,ni) (op1,opi)) pv'
then
@@ -930,7 +929,7 @@ let infer_predicate loc env isevars typs cstrs indf =
(* Empiric normalization: p may depend in a irrelevant way on args of the*)
(* cstr as in [c:{_:Alpha & Beta}] Cases c of (existS a b)=>(a,b) end *)
let typs =
- Array.map (local_strong (whd_betaevar empty_env (evars_of !isevars))) typs
+ Array.map (local_strong (whd_betaevar empty_env (Evd.evars_of !isevars))) typs
in
let eqns = array_map2 prepare_unif_pb typs cstrs in
(* First strategy: no dependencies at all *)
@@ -941,7 +940,7 @@ let infer_predicate loc env isevars typs cstrs indf =
(* Heuristic to avoid comparison between non-variables algebric univs*)
new_Type ()
else
- mkExistential isevars env (loc, CasesType)
+ mkExistential env ~src:(loc, Evd.CasesType) isevars
in
if array_for_all (fun (_,_,typ) -> e_cumul env isevars typ mtyp) eqns
then
@@ -1128,7 +1127,7 @@ let find_predicate loc env isevars p typs cstrs current
(IndType (indf,realargs)) tms =
let (dep,pred) =
match p with
- | Some p -> abstract_predicate env (evars_of !isevars) indf current tms p
+ | Some p -> abstract_predicate env (Evd.evars_of !isevars) indf current tms p
| None -> infer_predicate loc env isevars typs cstrs indf in
let typ = whd_beta (applist (pred, realargs)) in
if dep then
@@ -1368,7 +1367,7 @@ and compile_generalization pb d rest =
and compile_alias pb (deppat,nondeppat,d,t) rest =
let history = simplify_history pb.history in
let sign, newenv, mat =
- insert_aliases pb.env (evars_of !(pb.isevars)) (deppat,nondeppat,d,t) pb.mat in
+ insert_aliases pb.env (Evd.evars_of !(pb.isevars)) (deppat,nondeppat,d,t) pb.mat in
let n = List.length sign in
(* We had Gamma1; x:current; Gamma2 |- tomatch(x) and we rebind x to get *)
@@ -1586,13 +1585,13 @@ let prepare_predicate_from_tycon loc dep env isevars tomatchs c =
(n, l, env) in
let n, allargs, env = List.fold_left cook (0, [], env) tomatchs in
let allargs =
- List.map (fun c -> lift n (nf_betadeltaiota env (evars_of !isevars) c)) allargs in
+ List.map (fun c -> lift n (nf_betadeltaiota env (Evd.evars_of !isevars) c)) allargs in
let rec build_skeleton env c =
(* Don't put into normal form, it has effects on the synthesis of evars *)
(* let c = whd_betadeltaiota env (evars_of isevars) c in *)
(* We turn all subterms possibly dependent into an evar with maximum ctxt*)
if isEvar c or List.exists (eq_constr c) allargs then
- mkExistential isevars env (loc, CasesType)
+ mkExistential env ~src:(loc, Evd.CasesType) isevars
else
map_constr_with_full_binders push_rel build_skeleton env c in
build_skeleton env (lift n c)
@@ -1700,21 +1699,21 @@ let prepare_predicate loc typing_fun isevars env tomatchs sign tycon = function
| (Some pred,x) ->
let loc = loc_of_rawconstr pred in
let dep, n, predj =
- let isevars_copy = evars_of !isevars in
+ let isevars_copy = Evd.evars_of !isevars in
(* We first assume the predicate is non dependent *)
let ndep_arity = build_expected_arity env isevars false tomatchs in
try
false, nb_prod ndep_arity, typing_fun (mk_tycon ndep_arity) env pred
with PretypeError _ | TypeError _ |
Stdpp.Exc_located (_,(PretypeError _ | TypeError _)) ->
- isevars := evars_reset_evd isevars_copy !isevars;
+ isevars := Evd.evars_reset_evd isevars_copy !isevars;
(* We then assume the predicate is dependent *)
let dep_arity = build_expected_arity env isevars true tomatchs in
try
true, nb_prod dep_arity, typing_fun (mk_tycon dep_arity) env pred
with PretypeError _ | TypeError _ |
Stdpp.Exc_located (_,(PretypeError _ | TypeError _)) ->
- isevars := evars_reset_evd isevars_copy !isevars;
+ isevars := Evd.evars_reset_evd isevars_copy !isevars;
(* Otherwise we attempt to type it without constraints, possibly *)
(* failing with an error message; it may also be well-typed *)
(* but fails to satisfy arity constraints in case_dependent *)
diff --git a/pretyping/clenv.ml b/pretyping/clenv.ml
index 5b4ed6571..450c87a1f 100644
--- a/pretyping/clenv.ml
+++ b/pretyping/clenv.ml
@@ -48,7 +48,6 @@ type clausenv = {
namenv : identifier Metamap.t }
let cl_env ce = ce.templenv
-let cl_metas ce = metas_of ce.env
let cl_sigma ce = evars_of ce.env
let subst_clenv sub clenv =
@@ -57,14 +56,14 @@ let subst_clenv sub clenv =
namenv = clenv.namenv;
env = reset_evd
(evars_of clenv.env,
- Metamap.map (map_clb (subst_mps sub)) (cl_metas clenv))
+ Metamap.map (map_clb (subst_mps sub)) (metas_of clenv.env))
clenv.env;
templenv = clenv.templenv }
-let clenv_nf_meta clenv c = nf_meta (cl_metas clenv) c
-let clenv_meta_type clenv mv = meta_type (cl_metas clenv) mv
-let clenv_value clenv = meta_instance (cl_metas clenv) clenv.templval
-let clenv_type clenv = meta_instance (cl_metas clenv) clenv.templtyp
+let clenv_nf_meta clenv c = nf_meta clenv.env c
+let clenv_meta_type clenv mv = meta_type clenv.env mv
+let clenv_value clenv = meta_instance clenv.env clenv.templval
+let clenv_type clenv = meta_instance clenv.env clenv.templtyp
let clenv_hnf_constr ce t = hnf_constr (cl_env ce) (cl_sigma ce) t
@@ -75,12 +74,12 @@ let clenv_get_type_of ce c =
(function
| (n,Clval(_,typ)) -> (n,typ.rebus)
| (n,Cltyp typ) -> (n,typ.rebus))
- (metamap_to_list (cl_metas ce)) in
+ (metamap_to_list (metas_of ce.env)) in
Retyping.get_type_of_with_meta (cl_env ce) (cl_sigma ce) metamap c
-let clenv_environments bound c =
+let clenv_environments evd bound c =
let rec clrec (ne,e,metas) n c =
match n, kind_of_term c with
| (Some 0, _) -> (ne, e, List.rev metas, c)
@@ -109,14 +108,15 @@ let clenv_environments bound c =
clrec (ne,e,metas) (option_app ((+) (-1)) n) (subst1 b c)
| (n, _) -> (ne, e, List.rev metas, c)
in
- clrec (Metamap.empty,Metamap.empty,[]) bound c
+ clrec (Metamap.empty,evd,[]) bound c
let mk_clenv_from_n gls n (c,cty) =
- let (namenv,env,args,concl) = clenv_environments n cty in
+ let evd = create_evar_defs gls.sigma in
+ let (namenv,env,args,concl) = clenv_environments evd n cty in
{ templval = mk_freelisted (match args with [] -> c | _ -> applist (c,args));
templtyp = mk_freelisted concl;
namenv = namenv;
- env = mk_evar_defs (gls.sigma,env);
+ env = env;
templenv = Global.env_of_context gls.it.evar_hyps }
let mk_clenv_from gls = mk_clenv_from_n gls None
@@ -138,7 +138,7 @@ let mk_clenv_type_of gls t = mk_clenv_from gls (t,pf_type_of gls t)
let mentions clenv mv0 =
let rec menrec mv1 =
try
- (match Metamap.find mv1 (cl_metas clenv) with
+ (match Metamap.find mv1 (metas_of clenv.env) with
| Clval (b,_) ->
Metaset.mem mv0 b.freemetas || meta_exists menrec b.freemetas
| Cltyp _ -> false)
@@ -147,7 +147,7 @@ let mentions clenv mv0 =
in
menrec
-let clenv_defined clenv mv = meta_defined (cl_metas clenv) mv
+let clenv_defined clenv mv = meta_defined clenv.env mv
(* TODO: replace by clenv_unify (mkMeta mv) rhs ? *)
let clenv_assign mv rhs clenv =
@@ -155,7 +155,7 @@ let clenv_assign mv rhs clenv =
if meta_exists (mentions clenv mv) rhs_fls.freemetas then
error "clenv__assign: circularity in unification";
try
- (match Metamap.find mv (cl_metas clenv) with
+ (match Metamap.find mv (metas_of clenv.env) with
| Clval (fls,ty) ->
if not (eq_constr fls.rebus rhs) then
try
@@ -167,12 +167,7 @@ let clenv_assign mv rhs clenv =
anomaly "clenv_assign: non dependent metavar already assigned"
else
clenv
- | Cltyp bty ->
- { clenv with
- env = reset_evd
- (cl_sigma clenv,
- Metamap.add mv (Clval (rhs_fls,bty)) (cl_metas clenv))
- clenv.env })
+ | Cltyp _ -> {clenv with env = meta_assign mv rhs_fls.rebus clenv.env})
with Not_found ->
error "clenv_assign"
@@ -203,12 +198,12 @@ let collect_metas c =
* returns a list of the metavars which appear in the type of
* the metavar mv. The list is unordered. *)
-let clenv_metavars clenv mv = (meta_ftype (cl_metas clenv) mv).freemetas
+let clenv_metavars clenv mv = (meta_ftype clenv mv).freemetas
let dependent_metas clenv mvs conclmetas =
List.fold_right
(fun mv deps ->
- Metaset.union deps (clenv_metavars clenv mv))
+ Metaset.union deps (clenv_metavars clenv.env mv))
mvs conclmetas
let clenv_dependent hyps_only clenv =
@@ -240,12 +235,9 @@ let clenv_pose_dependent_evars clenv =
let dep_mvs = clenv_dependent false clenv in
List.fold_left
(fun clenv mv ->
- let evar = Evarutil.new_evar_in_sign (cl_env clenv) in
- let (evar_n,_) = destEvar evar in
- let tY = clenv_meta_type clenv mv in
- let clenv' =
- clenv_wtactic (w_Declare (cl_env clenv) evar_n tY) clenv in
- clenv_assign mv evar clenv')
+ let ty = clenv_meta_type clenv mv in
+ let (evd,evar) = new_evar clenv.env (cl_env clenv) ty in
+ clenv_assign mv evar {clenv with env=evd})
clenv
dep_mvs
@@ -286,11 +278,7 @@ let clenv_fchain mv clenv nextclenv =
end else
Metamap.add mv id ne)
clenv.namenv (metamap_to_list nextclenv.namenv);
- env = reset_evd
- (cl_sigma nextclenv,
- List.fold_left (fun m (n,v) -> Metamap.add n v m)
- (cl_metas clenv) (metamap_to_list (cl_metas nextclenv)))
- nextclenv.env;
+ env = meta_merge clenv.env nextclenv.env;
templenv = nextclenv.templenv }
in
(* unify the type of the template of [nextclenv] with the type of [mv] *)
@@ -474,4 +462,4 @@ let pr_clenv clenv =
in
(str"TEMPL: " ++ print_constr clenv.templval.rebus ++
str" : " ++ print_constr clenv.templtyp.rebus ++ fnl () ++
- (prlist pr_meta_binding (metamap_to_list (cl_metas clenv))))
+ (prlist pr_meta_binding (metamap_to_list (metas_of clenv.env))))
diff --git a/pretyping/clenv.mli b/pretyping/clenv.mli
index 30bc96338..cb53feb90 100644
--- a/pretyping/clenv.mli
+++ b/pretyping/clenv.mli
@@ -67,8 +67,7 @@ val clenv_fchain : metavariable -> clausenv -> clausenv -> clausenv
(* Unifies two terms in a clenv. The boolean is allow_K (see Unification) *)
val clenv_unify :
- bool -> Reductionops.conv_pb -> constr -> constr ->
- clausenv -> clausenv
+ bool -> conv_pb -> constr -> constr -> clausenv -> clausenv
(* unifies the concl of the goal with the type of the clenv *)
val clenv_unique_resolver :
diff --git a/pretyping/coercion.ml b/pretyping/coercion.ml
index 347bc7b8e..51fea11a2 100644
--- a/pretyping/coercion.ml
+++ b/pretyping/coercion.ml
@@ -19,6 +19,7 @@ open Recordops
open Evarutil
open Evarconv
open Retyping
+open Evd
(* Typing operations dealing with coercions *)
diff --git a/pretyping/detyping.ml b/pretyping/detyping.ml
index 086bf61ba..26b646bdd 100644
--- a/pretyping/detyping.ml
+++ b/pretyping/detyping.ml
@@ -23,6 +23,7 @@ open Nameops
open Termops
open Libnames
open Nametab
+open Evd
(****************************************************************************)
(* Tools for printing of Cases *)
diff --git a/pretyping/evarconv.ml b/pretyping/evarconv.ml
index 6454e0e84..2ed26c92c 100644
--- a/pretyping/evarconv.ml
+++ b/pretyping/evarconv.ml
@@ -19,6 +19,7 @@ open Classops
open Recordops
open Evarutil
open Libnames
+open Evd
type flex_kind_of_term =
| Rigid of constr
@@ -175,13 +176,13 @@ let rec evar_conv_x env isevars pbty term1 term2 =
(* Maybe convertible but since reducing can erase evars which [evar_apprec]*)
(* could have found, we do it only if the terms are free of evar *)
if
- (not (has_undefined_isevars isevars term1) &
- not (has_undefined_isevars isevars term2) &
+ (not (has_undefined_evars isevars term1) &
+ not (has_undefined_evars isevars term2) &
is_fconv pbty env (evars_of isevars) term1 term2) then
(isevars,true)
- else if ise_undefined isevars term1 then
+ else if is_undefined_evar isevars term1 then
solve_simple_eqn evar_conv_x env isevars (pbty,destEvar term1,term2)
- else if ise_undefined isevars term2 then
+ else if is_undefined_evar isevars term2 then
solve_simple_eqn evar_conv_x env isevars (pbty,destEvar term2,term1)
else
let (t1,l1) = apprec_nohdbeta env isevars term1 in
@@ -438,8 +439,8 @@ and conv_record env isevars (c,bs,(params,params1),(us,us2),(ts,ts1),c1) =
let (isevars',ks) =
List.fold_left
(fun (i,ks) b ->
- let dloc = (dummy_loc,Rawterm.InternalHole) in
- let (i',ev) = new_isevar i env dloc (substl ks b) in
+ let dloc = (dummy_loc,InternalHole) in
+ let (i',ev) = new_evar i env ~src:dloc (substl ks b) in
(i', ev :: ks))
(isevars,[]) bs
in
diff --git a/pretyping/evarconv.mli b/pretyping/evarconv.mli
index 5deccaa8b..41b5e05fa 100644
--- a/pretyping/evarconv.mli
+++ b/pretyping/evarconv.mli
@@ -13,7 +13,7 @@ open Term
open Sign
open Environ
open Reductionops
-open Evarutil
+open Evd
(*i*)
(* returns exception Reduction.NotConvertible if not unifiable *)
diff --git a/pretyping/evarutil.ml b/pretyping/evarutil.ml
index cb4efd2e1..276c455fe 100644
--- a/pretyping/evarutil.ml
+++ b/pretyping/evarutil.ml
@@ -120,7 +120,8 @@ let exist_to_meta sigma (emap, c) =
(*************************************)
(* Metas *)
-let meta_val_of env mv =
+let meta_val_of evd mv =
+ let env = metas_of evd in
let rec valrec mv =
try
(match Metamap.find mv env with
@@ -152,10 +153,8 @@ let meta_type env mv =
(* Creating new evars *)
(**********************)
-let evar_env evd = Global.env_of_context evd.evar_hyps
-
(* Generator of existential names *)
-let new_evar =
+let new_untyped_evar =
let evar_ctr = ref 0 in
fun () -> incr evar_ctr; existential_of_int !evar_ctr
@@ -165,8 +164,8 @@ let make_evar_instance env =
env ~init:[]
(* create an untyped existential variable *)
-let new_evar_in_sign env =
- let ev = new_evar () in
+let new_untyped_evar_in_sign env =
+ let ev = new_untyped_evar () in
mkEvar (ev, Array.of_list (make_evar_instance env))
(*------------------------------------*
@@ -174,20 +173,66 @@ let new_evar_in_sign env =
*------------------------------------*)
(* All ids of sign must be distincts! *)
-let new_isevar_sign env sigma typ instance =
- let sign = named_context env in
+let new_evar_instance sign evd typ ?(src=(dummy_loc,InternalHole)) instance =
+ assert (List.length instance = named_context_length sign);
if not (list_distinct (ids_of_named_context sign)) then
- error "new_isevar_sign: two vars have the same name";
- let newev = new_evar() in
- let info = { evar_concl = typ; evar_hyps = sign;
- evar_body = Evar_empty } in
- (Evd.add sigma newev info, mkEvar (newev,Array.of_list instance))
+ error "new_evar_instance: two vars have the same name";
+ let newev = new_untyped_evar() in
+ (evar_declare sign newev typ ~src:src evd,
+ mkEvar (newev,Array.of_list instance))
+
+let make_evar_instance_with_rel env =
+ let n = rel_context_length (rel_context env) in
+ let vars =
+ fold_named_context
+ (fun env (id,b,_) l -> (* if b=None then *) mkVar id :: l (*else l*))
+ env ~init:[] in
+ snd (fold_rel_context
+ (fun env (_,b,_) (i,l) ->
+ (i-1, (*if b=None then *) mkRel i :: l (*else l*)))
+ env ~init:(n,vars))
+
+let make_subst env args =
+ snd (fold_named_context
+ (fun env (id,b,c) (args,l as g) ->
+ match b, args with
+ | (* None *) _ , a::rest -> (rest, (id,a)::l)
+(* | Some _, _ -> g*)
+ | _ -> anomaly "Instance does not match its signature")
+ env ~init:(List.rev args,[]))
+
+(* [new_isevar] declares a new existential in an env env with type typ *)
+(* Converting the env into the sign of the evar to define *)
+
+let push_rel_context_to_named_context env =
+ let sign0 = named_context env in
+ let (subst,_,sign) =
+ Sign.fold_rel_context
+ (fun (na,c,t) (subst,avoid,sign) ->
+ let na = if na = Anonymous then Name(id_of_string"_") else na in
+ let id = next_name_away na avoid in
+ ((mkVar id)::subst,
+ id::avoid,
+ add_named_decl (id,option_app (substl subst) c,
+ type_app (substl subst) t)
+ sign))
+ (rel_context env) ~init:([],ids_of_named_context sign0,sign0)
+ in (subst, sign)
+
+let new_evar evd env ?(src=(dummy_loc,InternalHole)) typ =
+ let subst,sign = push_rel_context_to_named_context env in
+ let typ' = substl subst typ in
+ let instance = make_evar_instance_with_rel env in
+ new_evar_instance sign evd typ' ~src:src instance
+
+(* The same using side-effect *)
+let e_new_evar evd env ?(src=(dummy_loc,InternalHole)) ty =
+ let (evd',ev) = new_evar !evd env ~src:src ty in
+ evd := evd';
+ ev
(* We don't try to guess in which sort the type should be defined, since
any type has type Type. May cause some trouble, but not so far... *)
-let new_Type () = mkType (new_univ ())
-
-let new_Type_sort () = Type (new_univ ())
let judge_of_new_Type () = Typeops.judge_of_type (new_univ ())
(*
@@ -200,40 +245,7 @@ let judge_of_new_Type () =
uj_type = mkSort (Type dummy_univ) }
*)
-(* This refreshes universes in types; works only for inferred types (i.e. for
- types of the form (x1:A1)...(xn:An)B with B a sort or an atom in
- head normal form) *)
-let refresh_universes t =
- let modified = ref false in
- let rec refresh t = match kind_of_term t with
- | Sort (Type _) -> modified := true; new_Type ()
- | Prod (na,u,v) -> mkProd (na,u,refresh v)
- | _ -> t in
- let t' = refresh t in
- if !modified then t' else t
-(* Declaring any type to be in the sort Type shouldn't be harmful since
- cumulativity now includes Prop and Set in Type. *)
-let new_type_var env sigma =
- let instance = make_evar_instance env in
- new_isevar_sign env sigma (new_Type ()) instance
-
-let split_evar_to_arrow sigma (ev,args) =
- let evd = Evd.map sigma ev in
- let evenv = evar_env evd in
- let (sigma1,dom) = new_type_var evenv sigma in
- let hyps = evd.evar_hyps in
- let nvar = next_ident_away (id_of_string "x") (ids_of_named_context hyps) in
- let newenv = push_named (nvar, None, dom) evenv in
- let (sigma2,rng) = new_type_var newenv sigma1 in
- let x = named_hd newenv dom Anonymous in
- let prod = mkProd (x, dom, subst_var nvar rng) in
- let sigma3 = Evd.define sigma2 ev prod in
- let evdom = fst (destEvar dom), args in
- let evrng =
- fst (destEvar rng), array_cons (mkRel 1) (Array.map (lift 1) args) in
- let prod' = mkProd (x, mkEvar evdom, mkEvar evrng) in
- (sigma3,prod', evdom, evrng)
(* Redefines an evar with a smaller context (i.e. it may depend on less
* variables) such that c becomes closed.
@@ -243,11 +255,11 @@ let split_evar_to_arrow sigma (ev,args) =
* What we do is that ?2 is defined by a new evar ?4 whose context will be
* a prefix of ?2's env, included in ?1's env. *)
-let do_restrict_hyps sigma ev args =
+let do_restrict_hyps evd ev args =
let args = Array.to_list args in
- let evd = Evd.map sigma ev in
- let env = evar_env evd in
- let hyps = evd.evar_hyps in
+ let evi = Evd.map (evars_of !evd) ev in
+ let env = evar_env evi in
+ let hyps = evi.evar_hyps in
let (_,(rsign,ncargs)) =
List.fold_left
(fun (sign,(rs,na)) a ->
@@ -261,10 +273,11 @@ let do_restrict_hyps sigma ev args =
let sign' = List.rev rsign in
let env' = reset_with_named_context sign' env in
let instance = make_evar_instance env' in
- let (sigma',nc) = new_isevar_sign env' sigma evd.evar_concl instance in
- let nc = refresh_universes nc in (* needed only if nc is an inferred type *)
- let sigma'' = Evd.define sigma' ev nc in
- (sigma'', nc)
+ let (evd',nc) =
+ new_evar_instance sign' !evd evi.evar_concl
+ ~src:(evar_source ev !evd) instance in
+ evd := Evd.evar_define ev nc evd';
+ nc
@@ -273,45 +286,6 @@ let do_restrict_hyps sigma ev args =
* operations on the evar constraints *
*------------------------------------*)
-type maps = evar_map * meta_map
-type evar_constraint = conv_pb * constr * constr
-type evar_defs =
- { evars : Evd.evar_map;
- conv_pbs : evar_constraint list;
- history : (existential_key * (loc * Rawterm.hole_kind)) list;
- metas : Evd.meta_map }
-
-let mk_evar_defs (sigma,mmap) =
- { evars=sigma; conv_pbs=[]; history=[]; metas=mmap }
-let create_evar_defs sigma =
- mk_evar_defs (sigma,Metamap.empty)
-let evars_of d = d.evars
-let metas_of d = d.metas
-let evars_reset_evd evd d = {d with evars = evd}
-let reset_evd (sigma,mmap) d = {d with evars = sigma; metas=mmap}
-let add_conv_pb pb d = {d with conv_pbs = pb::d.conv_pbs}
-let evar_source ev d =
- try List.assoc ev d.history
- with Failure _ -> (dummy_loc, Rawterm.InternalHole)
-
-(* say if the section path sp corresponds to an existential *)
-let ise_in_dom isevars sp = Evd.in_dom isevars.evars sp
-
-(* map the given section path to the enamed_declaration *)
-let ise_map isevars sp = Evd.map isevars.evars sp
-
-(* define the existential of section path sp as the constr body *)
-let ise_define isevars sp body =
- let body = refresh_universes body in (* needed only if an inferred type *)
- {isevars with evars = Evd.define isevars.evars sp body}
-
-let is_defined_evar isevars (n,_) = Evd.is_defined isevars.evars n
-
-(* Does k corresponds to an (un)defined existential ? *)
-let ise_undefined isevars c = match kind_of_term c with
- | Evar ev -> not (is_defined_evar isevars ev)
- | _ -> false
-
let need_restriction isevars args = not (array_for_all closed0 args)
(* The list of non-instantiated existential declarations *)
@@ -343,17 +317,9 @@ let real_clean env isevars ev args rhs =
| Evar (ev,args) ->
let args' = Array.map (subs k) args in
if need_restriction !evd args' then
- if Evd.is_defined !evd.evars ev then
- subs k (existential_value !evd.evars (ev,args'))
- else begin
- let (sigma,rc) = do_restrict_hyps !evd.evars ev args' in
- evd :=
- {!evd with
- evars = sigma;
- history =
- (fst (destEvar rc),evar_source ev !evd):: !evd.history};
- rc
- end
+ if Evd.is_defined_evar !evd (ev,args) then
+ subs k (existential_value (evars_of !evd) (ev,args'))
+ else do_restrict_hyps evd ev args'
else
mkEvar (ev,args')
| Var _ -> (try List.assoc t subst with Not_found -> t)
@@ -361,63 +327,9 @@ let real_clean env isevars ev args rhs =
in
let body = subs 0 rhs in
if not (closed0 body)
- then error_not_clean env !evd.evars ev body (evar_source ev !evd);
+ then error_not_clean env (evars_of !evd) ev body (evar_source ev !evd);
(!evd,body)
-let make_evar_instance_with_rel env =
- let n = rel_context_length (rel_context env) in
- let vars =
- fold_named_context
- (fun env (id,b,_) l -> (* if b=None then *) mkVar id :: l (*else l*))
- env ~init:[] in
- snd (fold_rel_context
- (fun env (_,b,_) (i,l) ->
- (i-1, (*if b=None then *) mkRel i :: l (*else l*)))
- env ~init:(n,vars))
-
-let make_subst env args =
- snd (fold_named_context
- (fun env (id,b,c) (args,l as g) ->
- match b, args with
- | (* None *) _ , a::rest -> (rest, (id,a)::l)
-(* | Some _, _ -> g*)
- | _ -> anomaly "Instance does not match its signature")
- env ~init:(List.rev args,[]))
-
-(* [new_isevar] declares a new existential in an env env with type typ *)
-(* Converting the env into the sign of the evar to define *)
-
-let push_rel_context_to_named_context env =
- let sign0 = named_context env in
- let (subst,_,sign) =
- Sign.fold_rel_context
- (fun (na,c,t) (subst,avoid,sign) ->
- let na = if na = Anonymous then Name(id_of_string"_") else na in
- let id = next_name_away na avoid in
- ((mkVar id)::subst,
- id::avoid,
- add_named_decl (id,option_app (substl subst) c,
- type_app (substl subst) t)
- sign))
- (rel_context env) ~init:([],ids_of_named_context sign0,sign0)
- in (subst, reset_with_named_context sign env)
-
-let new_isevar isevars env src typ =
- let subst,env' = push_rel_context_to_named_context env in
- let typ' = substl subst typ in
- let instance = make_evar_instance_with_rel env in
- let (sigma',evar) = new_isevar_sign env' isevars.evars typ' instance in
- {isevars with
- evars = sigma';
- history = (fst (destEvar evar),src)::isevars.history},
- evar
-
-(* The same using side-effect *)
-let e_new_isevar isevars env loc ty =
- let (evd',ev) = new_isevar !isevars env loc ty in
- isevars := evd';
- ev
-
(* [evar_define] solves the problem lhs = rhs when lhs is an uninstantiated
* evar, i.e. tries to find the body ?sp for lhs=mkEvar (sp,args)
* ?sp [ sp.hyps \ args ] unifies to rhs
@@ -440,24 +352,24 @@ let evar_define env isevars (ev,argsv) rhs =
if occur_evar ev rhs
then error_occur_check env (evars_of isevars) ev rhs;
let args = Array.to_list argsv in
- let evi = ise_map isevars ev in
+ let evi = Evd.map (evars_of isevars) ev in
(* the bindings to invert *)
let worklist = make_subst (evar_env evi) args in
let (isevars',body) = real_clean env isevars ev worklist rhs in
- let isevars'' = ise_define isevars' ev body in
+ let isevars'' = Evd.evar_define ev body isevars' in
isevars'',[ev]
(*-------------------*)
(* Auxiliary functions for the conversion algorithms modulo evars
*)
-let has_undefined_isevars isevars t =
- try let _ = local_strong (whd_ise isevars.evars) t in false
+let has_undefined_evars isevars t =
+ try let _ = local_strong (whd_ise (evars_of isevars)) t in false
with Uninstantiated_evar _ -> true
let head_is_evar isevars =
let rec hrec k = match kind_of_term k with
- | Evar (n,_) -> not (Evd.is_defined isevars.evars n)
+ | Evar n -> not (Evd.is_defined_evar isevars n)
| App (f,_) -> hrec f
| Cast (c,_) -> hrec c
| _ -> false
@@ -515,20 +427,6 @@ let status_changed lev (pbty,t1,t2) =
with Failure _ ->
try List.mem (head_evar t2) lev with Failure _ -> false
-let get_changed_pb isevars lev =
- let (pbs,pbs1) =
- List.fold_left
- (fun (pbs,pbs1) pb ->
- if status_changed lev pb then
- (pb::pbs,pbs1)
- else
- (pbs,pb::pbs1))
- ([],[])
- isevars.conv_pbs
- in
- {isevars with conv_pbs = pbs1},
- pbs
-
(* Solve pbs (?i x1..xn) = (?i y1..yn) which arises often in fixpoint
* definitions. We try to unify the xi with the yi pairwise. The pairs
* that don't unify are discarded (i.e. ?i is redefined so that it does not
@@ -536,7 +434,7 @@ let get_changed_pb isevars lev =
let solve_refl conv_algo env isevars ev argsv1 argsv2 =
if argsv1 = argsv2 then (isevars,[]) else
- let evd = Evd.map isevars.evars ev in
+ let evd = Evd.map (evars_of isevars) ev in
let hyps = evd.evar_hyps in
let (isevars',_,rsign) =
array_fold_left2
@@ -549,15 +447,11 @@ let solve_refl conv_algo env isevars ev argsv1 argsv2 =
(isevars,hyps,[]) argsv1 argsv2
in
let nsign = List.rev rsign in
- let nargs = (Array.of_list (List.map mkVar (ids_of_named_context nsign))) in
- let newev = new_evar () in
- let info = { evar_concl = evd.evar_concl; evar_hyps = nsign;
- evar_body = Evar_empty } in
- {isevars with
- evars =
- Evd.define (Evd.add isevars.evars newev info) ev (mkEvar (newev,nargs));
- history = (newev,evar_source ev isevars)::isevars.history},
- [ev]
+ let (evd',newev) =
+ new_evar isevars (reset_with_named_context nsign env)
+ ~src:(evar_source ev isevars) evd.evar_concl in
+ let evd'' = Evd.evar_define ev newev evd' in
+ evd'', [ev]
(* Tries to solve problem t1 = t2.
@@ -567,7 +461,7 @@ let solve_refl conv_algo env isevars ev argsv1 argsv2 =
(* Rq: uncomplete algorithm if pbty = CONV_X_LEQ ! *)
let solve_simple_eqn conv_algo env isevars (pbty,(n1,args1 as ev1),t2) =
- let t2 = nf_evar isevars.evars t2 in
+ let t2 = nf_evar (evars_of isevars) t2 in
let (isevars,lsp) = match kind_of_term t2 with
| Evar (n2,args2 as ev2) ->
if n1 = n2 then
@@ -579,7 +473,7 @@ let solve_simple_eqn conv_algo env isevars (pbty,(n1,args1 as ev1),t2) =
evar_define env isevars ev1 t2
| _ ->
evar_define env isevars ev1 t2 in
- let (isevars,pbs) = get_changed_pb isevars lsp in
+ let (isevars,pbs) = get_conv_pbs isevars (status_changed lsp) in
List.fold_left
(fun (isevars,b as p) (pbty,t1,t2) ->
if b then conv_algo env isevars pbty t1 t2 else p) (isevars,true)
@@ -618,23 +512,29 @@ let mk_valcon c = Some c
(* Refining an evar to a product or a sort *)
-let refine_evar_as_arrow isevars ev =
- let (sigma,prod,evdom,evrng) = split_evar_to_arrow isevars.evars ev in
- let hst = evar_source (fst ev) isevars in
- let isevars' =
- {isevars with
- evars=sigma;
- history = (fst evrng,hst)::(fst evdom, hst)::isevars.history } in
- (isevars',prod,evdom,evrng)
-
-let define_evar_as_arrow isevars ev =
- let (isevars',prod,_,_) = refine_evar_as_arrow isevars ev in
- isevars',prod
+(* Declaring any type to be in the sort Type shouldn't be harmful since
+ cumulativity now includes Prop and Set in Type...
+ It is, but that's not too bad *)
+let define_evar_as_arrow evd (ev,args) =
+ let evi = Evd.map (evars_of evd) ev in
+ let evenv = evar_env evi in
+ let (evd1,dom) = new_evar evd evenv (new_Type()) in
+ let nvar =
+ next_ident_away (id_of_string "x") (ids_of_named_context evi.evar_hyps) in
+ let newenv = push_named (nvar, None, dom) evenv in
+ let (evd2,rng) =
+ new_evar evd1 newenv ~src:(evar_source ev evd1) (new_Type()) in
+ let prod = mkProd (Name nvar, dom, subst_var nvar rng) in
+ let evd3 = Evd.evar_define ev prod evd2 in
+ let evdom = fst (destEvar dom), args in
+ let evrng =
+ fst (destEvar rng), array_cons (mkRel 1) (Array.map (lift 1) args) in
+ let prod' = mkProd (Name nvar, mkEvar evdom, mkEvar evrng) in
+ (evd3,prod')
let define_evar_as_sort isevars (ev,args) =
let s = new_Type () in
- let sigma' = Evd.define isevars.evars ev s in
- evars_reset_evd sigma' isevars, destSort s
+ Evd.evar_define ev s isevars, destSort s
(* Propagation of constraints through application and abstraction:
@@ -649,9 +549,10 @@ let split_tycon loc env isevars = function
let t = whd_betadeltaiota env sigma c in
match kind_of_term t with
| Prod (na,dom,rng) -> isevars, (na, Some dom, Some rng)
- | Evar (n,_ as ev) when not (Evd.is_defined isevars.evars n) ->
- let (isevars',_,evdom,evrng) = refine_evar_as_arrow isevars ev in
- isevars',(Anonymous, Some (mkEvar evdom), Some (mkEvar evrng))
+ | Evar ev when not (Evd.is_defined_evar isevars ev) ->
+ let (isevars',prod) = define_evar_as_arrow isevars ev in
+ let (_,dom,rng) = destProd prod in
+ isevars',(Anonymous, Some dom, Some rng)
| _ -> error_not_product_loc loc env sigma c
let valcon_of_tycon x = x
diff --git a/pretyping/evarutil.mli b/pretyping/evarutil.mli
index 6d264b718..711e10707 100644
--- a/pretyping/evarutil.mli
+++ b/pretyping/evarutil.mli
@@ -46,53 +46,43 @@ val whd_castappevar : evar_map -> constr -> constr
(* [new_meta] is a generator of unique meta variables *)
val new_meta : unit -> metavariable
val mk_new_meta : unit -> constr
-val nf_meta : meta_map -> constr -> constr
-val meta_type : meta_map -> metavariable -> types
-val meta_instance : meta_map -> constr freelisted -> constr
+val nf_meta : evar_defs -> constr -> constr
+val meta_type : evar_defs -> metavariable -> types
+val meta_instance : evar_defs -> constr freelisted -> constr
(* [exist_to_meta] generates new metavariables for each existential
and performs the replacement in the given constr *)
val exist_to_meta : evar_map -> open_constr -> (Termops.metamap * constr)
-(* Creating new existential variables *)
-val new_evar : unit -> evar
-val new_evar_in_sign : env -> constr
-
-val evar_env : evar_info -> env
(***********************************************************)
-type maps = evar_map * meta_map
-type evar_defs
-val evars_of : evar_defs -> evar_map
-val metas_of : evar_defs -> meta_map
-
-val non_instantiated : evar_map -> (evar * evar_info) list
-
-val mk_evar_defs : maps -> evar_defs
-(* the same with empty meta map: *)
-val create_evar_defs : evar_map -> evar_defs
-val evars_reset_evd : evar_map -> evar_defs -> evar_defs
-val reset_evd : maps -> evar_defs -> evar_defs
-val evar_source : existential_key -> evar_defs -> loc * hole_kind
-
-type evar_constraint = conv_pb * constr * constr
-val add_conv_pb : evar_constraint -> evar_defs -> evar_defs
-
-val is_defined_evar : evar_defs -> existential -> bool
-val ise_undefined : evar_defs -> constr -> bool
-val has_undefined_isevars : evar_defs -> constr -> bool
-
-val new_isevar_sign :
- Environ.env -> Evd.evar_map -> Term.constr -> Term.constr list ->
- Evd.evar_map * Term.constr
+(* Creating a fresh evar given their type and context *)
+val new_evar :
+ evar_defs -> env -> ?src:loc * hole_kind -> types -> evar_defs * constr
+(* the same with side-effects *)
+val e_new_evar :
+ evar_defs ref -> env -> ?src:loc * hole_kind -> types -> constr
+
+(* Create a fresh evar in a context different from its definition context:
+ [new_evar_instance sign evd ty inst] creates a new evar of context
+ [sign] and type [ty], [inst] is a mapping of the evar context to
+ the context where the evar should occur. This means that the terms
+ of [inst] are typed in the occurrence context and their type (seen
+ as a telescope) is [sign] *)
+val new_evar_instance :
+ named_context -> evar_defs -> types -> ?src:loc * hole_kind -> constr list ->
+ evar_defs * constr
+
+(* Builds the instance in the case where the occurrence context is the
+ same as the evar context *)
+val make_evar_instance : env -> constr list
-val new_isevar : evar_defs -> env -> loc * hole_kind -> constr ->
- evar_defs * constr
+(***********************************************************)
-(* the same with side-effects *)
-val e_new_isevar : evar_defs ref -> env -> loc * hole_kind -> constr -> constr
+val non_instantiated : evar_map -> (evar * evar_info) list
+val has_undefined_evars : evar_defs -> constr -> bool
val is_eliminator : constr -> bool
val head_is_embedded_evar : evar_defs -> constr -> bool
val solve_simple_eqn :
@@ -106,10 +96,7 @@ val define_evar_as_sort : evar_defs -> existential -> evar_defs * sorts
(***********************************************************)
(* Value/Type constraints *)
-val new_Type_sort : unit -> sorts
-val new_Type : unit -> constr
val judge_of_new_Type : unit -> unsafe_judgment
-val refresh_universes : types -> types
type type_constraint = constr option
type val_constraint = constr option
diff --git a/pretyping/evd.ml b/pretyping/evd.ml
index d7468eded..c91d9ae7d 100644
--- a/pretyping/evd.ml
+++ b/pretyping/evd.ml
@@ -13,6 +13,7 @@ open Names
open Term
open Sign
open Environ
+open Libnames
(* The type of mappings for existential variables *)
@@ -60,6 +61,7 @@ let is_defined sigma ev =
not (info.evar_body = Evar_empty)
let evar_body ev = ev.evar_body
+let evar_env evd = Global.env_of_context evd.evar_hyps
let string_of_existential ev = "?" ^ string_of_int ev
@@ -184,25 +186,103 @@ let metamap_to_list m =
let metamap_inv m b =
Metamap.fold (fun n v l -> if v = b then n::l else l) m []
+(*************************)
+(* Unification state *)
+
+type hole_kind =
+ | ImplicitArg of global_reference * (int * identifier option)
+ | BinderType of name
+ | QuestionMark
+ | CasesType
+ | InternalHole
+ | TomatchTypeParameter of inductive * int
+
+type conv_pb =
+ | CONV
+ | CUMUL
+
type meta_map = clbinding Metamap.t
-
-let meta_defined env mv =
- match Metamap.find mv env with
+type evar_constraint = conv_pb * constr * constr
+type evar_defs =
+ { evars : evar_map;
+ conv_pbs : evar_constraint list;
+ history : (existential_key * (loc * hole_kind)) list;
+ metas : meta_map }
+
+let mk_evar_defs (sigma,mmap) =
+ { evars=sigma; conv_pbs=[]; history=[]; metas=mmap }
+let create_evar_defs sigma =
+ mk_evar_defs (sigma,Metamap.empty)
+let evars_of d = d.evars
+let metas_of d = d.metas
+let evars_reset_evd evd d = {d with evars = evd}
+let reset_evd (sigma,mmap) d = {d with evars = sigma; metas=mmap}
+let add_conv_pb pb d = {d with conv_pbs = pb::d.conv_pbs}
+let evar_source ev d =
+ try List.assoc ev d.history
+ with Failure _ -> (dummy_loc, InternalHole)
+
+(* define the existential of section path sp as the constr body *)
+let evar_define sp body isevars =
+ (* needed only if an inferred type *)
+ let body = Termops.refresh_universes body in
+ {isevars with evars = define isevars.evars sp body}
+
+
+let evar_declare hyps evn ty ?(src=(dummy_loc,InternalHole)) evd =
+ { evd with
+ evars = add evd.evars evn
+ {evar_hyps=hyps; evar_concl=ty; evar_body=Evar_empty};
+ history = (evn,src)::evd.history }
+
+let set_evar_source ev k evd = {evd with history=(ev,k)::evd.history}
+
+let is_defined_evar isevars (n,_) = is_defined isevars.evars n
+
+(* Does k corresponds to an (un)defined existential ? *)
+let is_undefined_evar isevars c = match kind_of_term c with
+ | Evar ev -> not (is_defined_evar isevars ev)
+ | _ -> false
+
+
+let get_conv_pbs isevars p =
+ let (pbs,pbs1) =
+ List.fold_left
+ (fun (pbs,pbs1) pb ->
+ if p pb then
+ (pb::pbs,pbs1)
+ else
+ (pbs,pb::pbs1))
+ ([],[])
+ isevars.conv_pbs
+ in
+ {isevars with conv_pbs = pbs1},
+ pbs
+
+let meta_defined evd mv =
+ match Metamap.find mv evd.metas with
| Clval _ -> true
| Cltyp _ -> false
-let meta_fvalue env mv =
- match Metamap.find mv env with
+let meta_fvalue evd mv =
+ match Metamap.find mv evd.metas with
| Clval(b,_) -> b
| Cltyp _ -> anomaly "meta_fvalue: meta has no value"
-let meta_ftype env mv =
- match Metamap.find mv env with
+let meta_ftype evd mv =
+ match Metamap.find mv evd.metas with
| Cltyp b -> b
| Clval(_,b) -> b
-let meta_declare mv v menv =
- Metamap.add mv (Cltyp(mk_freelisted v)) menv
+let meta_declare mv v evd =
+ { evd with metas = Metamap.add mv (Cltyp(mk_freelisted v)) evd.metas }
-let meta_assign mv v menv =
- Metamap.add mv (Clval(mk_freelisted v, meta_ftype menv mv)) menv
+let meta_assign mv v evd =
+ {evd with
+ metas =
+ Metamap.add mv (Clval(mk_freelisted v, meta_ftype evd mv)) evd.metas }
+
+let meta_merge evd1 evd2 =
+ {evd2 with
+ metas = List.fold_left (fun m (n,v) -> Metamap.add n v m)
+ evd2.metas (metamap_to_list evd1.metas) }
diff --git a/pretyping/evd.mli b/pretyping/evd.mli
index df362a9bf..fd6e944e1 100644
--- a/pretyping/evd.mli
+++ b/pretyping/evd.mli
@@ -9,9 +9,11 @@
(*i $Id$ i*)
(*i*)
+open Util
open Names
open Term
open Sign
+open Libnames
(*i*)
(* The type of mappings for existential variables.
@@ -51,6 +53,7 @@ val is_evar : evar_map -> evar -> bool
val is_defined : evar_map -> evar -> bool
val evar_body : evar_info -> evar_body
+val evar_env : evar_info -> Environ.env
val string_of_existential : evar -> string
val existential_of_int : int -> evar
@@ -104,8 +107,51 @@ type clbinding =
val map_clb : (constr -> constr) -> clbinding -> clbinding
type meta_map = clbinding Metamap.t
-val meta_defined : meta_map -> metavariable -> bool
-val meta_fvalue : meta_map -> metavariable -> constr freelisted
-val meta_ftype : meta_map -> metavariable -> constr freelisted
-val meta_declare : metavariable -> types -> meta_map -> meta_map
-val meta_assign : metavariable -> constr -> meta_map -> meta_map
+
+(*************************)
+(* Unification state *)
+
+type hole_kind =
+ | ImplicitArg of global_reference * (int * identifier option)
+ | BinderType of name
+ | QuestionMark
+ | CasesType
+ | InternalHole
+ | TomatchTypeParameter of inductive * int
+
+type conv_pb =
+ | CONV
+ | CUMUL
+
+type evar_defs
+val evars_of : evar_defs -> evar_map
+val metas_of : evar_defs -> meta_map
+
+val mk_evar_defs : evar_map * meta_map -> evar_defs
+(* the same with empty meta map: *)
+val create_evar_defs : evar_map -> evar_defs
+val evars_reset_evd : evar_map -> evar_defs -> evar_defs
+val reset_evd : evar_map * meta_map -> evar_defs -> evar_defs
+val evar_source : existential_key -> evar_defs -> loc * hole_kind
+
+type evar_constraint = conv_pb * constr * constr
+val add_conv_pb : evar_constraint -> evar_defs -> evar_defs
+
+val evar_declare :
+ named_context -> evar -> types -> ?src:loc * hole_kind ->
+ evar_defs -> evar_defs
+val evar_define : evar -> constr -> evar_defs -> evar_defs
+
+val is_defined_evar : evar_defs -> existential -> bool
+val is_undefined_evar : evar_defs -> constr -> bool
+
+val get_conv_pbs : evar_defs -> (evar_constraint -> bool) ->
+ evar_defs * evar_constraint list
+
+val meta_defined : evar_defs -> metavariable -> bool
+val meta_fvalue : evar_defs -> metavariable -> constr freelisted
+val meta_ftype : evar_defs -> metavariable -> constr freelisted
+val meta_declare : metavariable -> types -> evar_defs -> evar_defs
+val meta_assign : metavariable -> constr -> evar_defs -> evar_defs
+
+val meta_merge : evar_defs -> evar_defs -> evar_defs
diff --git a/pretyping/pretype_errors.ml b/pretyping/pretype_errors.ml
index 84fd4798b..d3a602ac2 100644
--- a/pretyping/pretype_errors.ml
+++ b/pretyping/pretype_errors.ml
@@ -24,8 +24,8 @@ type pretype_error =
| CantFindCaseType of constr
(* Unification *)
| OccurCheck of existential_key * constr
- | NotClean of existential_key * constr * hole_kind
- | UnsolvableImplicit of hole_kind
+ | NotClean of existential_key * constr * Evd.hole_kind
+ | UnsolvableImplicit of Evd.hole_kind
| CannotUnify of constr * constr
| CannotUnifyBindingType of constr * constr
| CannotGeneralize of constr
diff --git a/pretyping/pretype_errors.mli b/pretyping/pretype_errors.mli
index fadd3f338..ee4cdb206 100644
--- a/pretyping/pretype_errors.mli
+++ b/pretyping/pretype_errors.mli
@@ -26,8 +26,8 @@ type pretype_error =
| CantFindCaseType of constr
(* Unification *)
| OccurCheck of existential_key * constr
- | NotClean of existential_key * constr * hole_kind
- | UnsolvableImplicit of hole_kind
+ | NotClean of existential_key * constr * Evd.hole_kind
+ | UnsolvableImplicit of Evd.hole_kind
| CannotUnify of constr * constr
| CannotUnifyBindingType of constr * constr
| CannotGeneralize of constr
@@ -84,9 +84,10 @@ val error_ill_typed_rec_body_loc :
val error_occur_check : env -> Evd.evar_map -> existential_key -> constr -> 'b
val error_not_clean :
- env -> Evd.evar_map -> existential_key -> constr -> loc * hole_kind -> 'b
+ env -> Evd.evar_map -> existential_key -> constr -> loc * Evd.hole_kind -> 'b
-val error_unsolvable_implicit : loc -> env -> Evd.evar_map -> hole_kind -> 'b
+val error_unsolvable_implicit :
+ loc -> env -> Evd.evar_map -> Evd.hole_kind -> 'b
val error_cannot_unify : env -> Evd.evar_map -> constr * constr -> 'b
diff --git a/pretyping/pretyping.ml b/pretyping/pretyping.ml
index d0402a552..0054c4770 100644
--- a/pretyping/pretyping.ml
+++ b/pretyping/pretyping.ml
@@ -276,7 +276,7 @@ let rec pretype tycon env isevars lvar = function
| RHole (loc,k) ->
(match tycon with
| Some ty ->
- { uj_val = e_new_isevar isevars env (loc,k) ty; uj_type = ty }
+ { uj_val = e_new_evar isevars env ~src:(loc,k) ty; uj_type = ty }
| None -> error_unsolvable_implicit loc env (evars_of !isevars) k)
| RRec (loc,fixkind,names,bl,lar,vdef) ->
@@ -391,7 +391,7 @@ let rec pretype tycon env isevars lvar = function
| RLetIn(loc,name,c1,c2) ->
let j = pretype empty_tycon env isevars lvar c1 in
- let t = Evarutil.refresh_universes j.uj_type in
+ let t = refresh_universes j.uj_type in
let var = (name,Some j.uj_val,t) in
let tycon = option_app (lift 1) tycon in
let j' = pretype tycon (push_rel var env) isevars lvar c2 in
@@ -529,7 +529,7 @@ let rec pretype tycon env isevars lvar = function
Cases.pred_case_ml
env (evars_of !isevars) false indt (0,fj.uj_type)
in
- if has_undefined_isevars !isevars pred then
+ if has_undefined_evars !isevars pred then
use_constraint ()
else
true, pred
@@ -683,7 +683,8 @@ let rec pretype tycon env isevars lvar = function
| None ->
let p = match tycon with
| Some ty -> ty
- | None -> e_new_isevar isevars env (loc,InternalHole) (new_Type ())
+ | None ->
+ e_new_evar isevars env ~src:(loc,InternalHole) (new_Type ())
in
it_mkLambda_or_LetIn (lift (nar+1) p) psign, p in
let f cs b =
@@ -750,7 +751,7 @@ let rec pretype tycon env isevars lvar = function
let pred =
Cases.pred_case_ml (* eta-expanse *)
env (evars_of !isevars) isrec indt (i,fj.uj_type) in
- if has_undefined_isevars !isevars pred then findtype (i+1)
+ if has_undefined_evars !isevars pred then findtype (i+1)
else
let pty =
Retyping.get_type_of env (evars_of !isevars) pred in
@@ -942,7 +943,7 @@ and pretype_type valcon env isevars lvar = function
utj_type = s }
| None ->
let s = new_Type_sort () in
- { utj_val = e_new_isevar isevars env loc (mkSort s);
+ { utj_val = e_new_evar isevars env ~src:loc (mkSort s);
utj_type = s})
| c ->
let j = pretype empty_tycon env isevars lvar c in
diff --git a/pretyping/rawterm.ml b/pretyping/rawterm.ml
index 1aeca07cb..0a9722b87 100644
--- a/pretyping/rawterm.ml
+++ b/pretyping/rawterm.ml
@@ -15,6 +15,7 @@ open Sign
open Term
open Libnames
open Nametab
+open Evd
(*i*)
(* Untyped intermediate terms, after ASTs and before constr. *)
@@ -48,14 +49,6 @@ type 'a bindings =
type 'a with_bindings = 'a * 'a bindings
-type hole_kind =
- | ImplicitArg of global_reference * (int * identifier option)
- | BinderType of name
- | QuestionMark
- | CasesType
- | InternalHole
- | TomatchTypeParameter of inductive * int
-
type rawconstr =
| RRef of (loc * global_reference)
| RVar of (loc * identifier)
diff --git a/pretyping/rawterm.mli b/pretyping/rawterm.mli
index 54bb306bd..ff1f86c58 100644
--- a/pretyping/rawterm.mli
+++ b/pretyping/rawterm.mli
@@ -46,14 +46,6 @@ type 'a bindings =
type 'a with_bindings = 'a * 'a bindings
-type hole_kind =
- | ImplicitArg of global_reference * (int * identifier option)
- | BinderType of name
- | QuestionMark
- | CasesType
- | InternalHole
- | TomatchTypeParameter of inductive * int
-
type rawconstr =
| RRef of (loc * global_reference)
| RVar of (loc * identifier)
@@ -74,7 +66,7 @@ type rawconstr =
| RRec of loc * fix_kind * identifier array * rawdecl list array *
rawconstr array * rawconstr array
| RSort of loc * rawsort
- | RHole of (loc * hole_kind)
+ | RHole of (loc * Evd.hole_kind)
| RCast of loc * rawconstr * rawconstr
| RDynamic of loc * Dyn.t
diff --git a/pretyping/reductionops.ml b/pretyping/reductionops.ml
index a9fc90df2..9372effeb 100644
--- a/pretyping/reductionops.ml
+++ b/pretyping/reductionops.ml
@@ -461,10 +461,6 @@ let fhnf_apply info k h a = Profile.profile4 fakey fhnf_apply info k h a;;
type conversion_test = constraints -> constraints
-type conv_pb =
- | CONV
- | CUMUL
-
let pb_is_equal pb = pb = CONV
let pb_equal = function
diff --git a/pretyping/reductionops.mli b/pretyping/reductionops.mli
index b02cc4214..9c70b1a40 100644
--- a/pretyping/reductionops.mli
+++ b/pretyping/reductionops.mli
@@ -162,10 +162,6 @@ val reduce_fix : local_state_reduction_function -> fixpoint
type conversion_test = constraints -> constraints
-type conv_pb =
- | CONV
- | CUMUL
-
val pb_is_equal : conv_pb -> bool
val pb_equal : conv_pb -> conv_pb
diff --git a/pretyping/retyping.mli b/pretyping/retyping.mli
index 18c54da47..f0c01a56e 100644
--- a/pretyping/retyping.mli
+++ b/pretyping/retyping.mli
@@ -9,12 +9,9 @@
(*i $Id$ i*)
(*i*)
-open Names
open Term
open Evd
open Environ
-open Pattern
-open Termops
(*i*)
(* This family of functions assumes its constr argument is known to be
@@ -23,11 +20,12 @@ open Termops
either produces a wrong result or raise an anomaly. Use with care.
It doesn't handle predicative universes too. *)
-val get_type_of : env -> evar_map -> constr -> constr
+val get_type_of : env -> evar_map -> constr -> types
val get_sort_of : env -> evar_map -> types -> sorts
val get_sort_family_of : env -> evar_map -> types -> sorts_family
-val get_type_of_with_meta : env -> evar_map -> metamap -> constr -> constr
+val get_type_of_with_meta :
+ env -> evar_map -> Termops.metamap -> constr -> types
(* Makes an assumption from a constr *)
val get_assumption_of : env -> evar_map -> constr -> types
diff --git a/pretyping/termops.ml b/pretyping/termops.ml
index 02e8618dc..d8c85cf7a 100644
--- a/pretyping/termops.ml
+++ b/pretyping/termops.ml
@@ -101,6 +101,20 @@ let new_univ =
(fun sp ->
incr univ_gen;
Univ.make_univ (Lib.library_dp(),!univ_gen))
+let new_Type () = mkType (new_univ ())
+let new_Type_sort () = Type (new_univ ())
+
+(* This refreshes universes in types; works only for inferred types (i.e. for
+ types of the form (x1:A1)...(xn:An)B with B a sort or an atom in
+ head normal form) *)
+let refresh_universes t =
+ let modified = ref false in
+ let rec refresh t = match kind_of_term t with
+ | Sort (Type _) -> modified := true; new_Type ()
+ | Prod (na,u,v) -> mkProd (na,u,refresh v)
+ | _ -> t in
+ let t' = refresh t in
+ if !modified then t' else t
let new_sort_in_family = function
| InProp -> mk_Prop
diff --git a/pretyping/termops.mli b/pretyping/termops.mli
index 8ce7b39dc..e1a9d5ba9 100644
--- a/pretyping/termops.mli
+++ b/pretyping/termops.mli
@@ -19,6 +19,9 @@ open Environ
(*val set_module : Names.dir_path -> unit*)
val new_univ : unit -> Univ.universe
val new_sort_in_family : sorts_family -> sorts
+val new_Type : unit -> types
+val new_Type_sort : unit -> sorts
+val refresh_universes : types -> types
(* printers *)
val print_sort : sorts -> std_ppcmds
diff --git a/pretyping/typing.ml b/pretyping/typing.ml
index b98ff0e7d..9aa2758a0 100644
--- a/pretyping/typing.ml
+++ b/pretyping/typing.ml
@@ -24,23 +24,24 @@ let vect_lift_type = Array.mapi (fun i t -> type_app (lift i) t)
(* The typing machine without information, without universes but with
existential variables. *)
-let assumption_of_judgment env (sigma,_) j =
- assumption_of_judgment env (j_nf_evar sigma j)
+let assumption_of_judgment env evd j =
+ assumption_of_judgment env (j_nf_evar (Evd.evars_of evd) j)
-let type_judgment env (sigma,_) j =
- type_judgment env (j_nf_evar sigma j)
+let type_judgment env evd j =
+ type_judgment env (j_nf_evar (Evd.evars_of evd) j)
-let check_type env (sigma,_) j ty =
+let check_type env evd j ty =
+ let sigma = Evd.evars_of evd in
if not (is_conv_leq env sigma j.uj_type ty) then
error_actual_type env (j_nf_evar sigma j) (nf_evar sigma ty)
let rec execute env evd cstr =
match kind_of_term cstr with
| Meta n ->
- { uj_val = cstr; uj_type = Evarutil.meta_type (snd evd) n }
+ { uj_val = cstr; uj_type = Evarutil.meta_type evd n }
| Evar ev ->
- let sigma = fst evd in
+ let sigma = Evd.evars_of evd in
let ty = Evd.existential_type sigma ev in
let jty = execute env evd ty in
let jty = assumption_of_judgment env evd jty in
@@ -161,11 +162,11 @@ let msort_of env evd c =
a.utj_type
let type_of env sigma c =
- mtype_of env (sigma, Evd.Metamap.empty) c
+ mtype_of env (Evd.create_evar_defs sigma) c
let sort_of env sigma c =
- msort_of env (sigma, Evd.Metamap.empty) c
+ msort_of env (Evd.create_evar_defs sigma) c
let check env sigma c =
- mcheck env (sigma, Evd.Metamap.empty) c
+ mcheck env (Evd.create_evar_defs sigma) c
(* The typed type of a judgment. *)
diff --git a/pretyping/typing.mli b/pretyping/typing.mli
index 15f3a6597..c4503f51b 100644
--- a/pretyping/typing.mli
+++ b/pretyping/typing.mli
@@ -25,9 +25,9 @@ val sort_of : env -> evar_map -> types -> sorts
val check : env -> evar_map -> constr -> types -> unit
(* The same but with metas... *)
-val mtype_of : env -> evar_map * meta_map -> constr -> types
-val msort_of : env -> evar_map * meta_map -> types -> sorts
-val mcheck : env -> evar_map * meta_map -> constr -> types -> unit
+val mtype_of : env -> evar_defs -> constr -> types
+val msort_of : env -> evar_defs -> types -> sorts
+val mcheck : env -> evar_defs -> constr -> types -> unit
(* unused typing function... *)
-val mtype_of_type : env -> evar_map * meta_map -> types -> types
+val mtype_of_type : env -> evar_defs -> types -> types
diff --git a/pretyping/unification.ml b/pretyping/unification.ml
index 33f09fd0a..11b24f096 100644
--- a/pretyping/unification.ml
+++ b/pretyping/unification.ml
@@ -51,7 +51,7 @@ let abstract_list_all env sigma typ c l =
let w_Declare env sp ty evd =
let sigma = evars_of evd in
- let _ = Typing.type_of env sigma ty in (* Utile ?? *)
+ let _ = Typing.type_of env sigma ty in (* Checks there is no meta *)
let newdecl =
{ evar_hyps=named_context env; evar_concl=ty; evar_body=Evar_empty } in
evars_reset_evd (Evd.add sigma sp newdecl) evd
@@ -211,9 +211,7 @@ let applyHead env evd n c =
else
match kind_of_term (whd_betadeltaiota env (evars_of evd) cty) with
| Prod (_,c1,c2) ->
- let (evd',evar) =
- Evarutil.new_isevar evd env
- (dummy_loc,Rawterm.InternalHole) c1 in
+ let (evd',evar) = Evarutil.new_evar evd env c1 in
apprec (n-1) (mkApp(c,[|evar|])) (subst1 evar c2) evd'
| _ -> error "Apply_Head_Then"
in
@@ -270,25 +268,23 @@ let w_merge env with_types metas evars evd =
| _ -> anomaly "w_merge_rec"))
| ([], (mv,n)::t) ->
- let mmap = metas_of evd in
- if meta_defined mmap mv then
+ if meta_defined evd mv then
let (metas',evars') =
- unify_0 env (evars_of evd) CONV (meta_fvalue mmap mv).rebus n in
+ unify_0 env (evars_of evd) CONV (meta_fvalue evd mv).rebus n in
w_merge_rec evd (metas'@t) evars'
else
begin
if with_types (* or occur_meta mvty *) then
- (let mvty = meta_type mmap mv in
+ (let mvty = meta_type evd mv in
try
let sigma = evars_of evd in
(* why not typing with the metamap ? *)
- let nty = Typing.type_of env sigma (nf_meta mmap n) in
+ let nty = Typing.type_of env sigma (nf_meta evd n) in
let (mc,ec) = unify_0 env sigma CUMUL nty mvty in
ty_metas := mc @ !ty_metas;
ty_evars := ec @ !ty_evars
with e when precatchable_exception e -> ());
- let evd' =
- reset_evd (evars_of evd,meta_assign mv n mmap) evd in
+ let evd' = meta_assign mv n evd in
w_merge_rec evd' t []
end
@@ -430,7 +426,7 @@ let secondOrderAbstraction env allow_K typ (p, oplist) evd =
let sigma = evars_of evd in
let (evd',cllist) =
w_unify_to_subterm_list env allow_K oplist typ evd in
- let typp = meta_type (metas_of evd') p in
+ let typp = meta_type evd' p in
let pred = abstract_list_all env sigma typp typ cllist in
w_unify_0 env CONV (mkMeta p) pred evd'
@@ -443,13 +439,13 @@ let w_unify2 env allow_K cv_pb ty1 ty2 evd =
let evd' =
secondOrderAbstraction env allow_K ty2 (p1,oplist1) evd in
(* Resume first order unification *)
- w_unify_0 env cv_pb (nf_meta (metas_of evd') ty1) ty2 evd'
+ w_unify_0 env cv_pb (nf_meta evd' ty1) ty2 evd'
| _, Meta p2 ->
(* Find the predicate *)
let evd' =
secondOrderAbstraction env allow_K ty1 (p2, oplist2) evd in
(* Resume first order unification *)
- w_unify_0 env cv_pb ty1 (nf_meta (metas_of evd') ty2) evd'
+ w_unify_0 env cv_pb ty1 (nf_meta evd' ty2) evd'
| _ -> error "w_unify2"
diff --git a/pretyping/unification.mli b/pretyping/unification.mli
index d3007e69d..95b35a56c 100644
--- a/pretyping/unification.mli
+++ b/pretyping/unification.mli
@@ -23,8 +23,7 @@ val w_Define : evar -> constr -> evar_defs -> evar_defs
(* The "unique" unification fonction *)
val w_unify :
- bool -> env -> Reductionops.conv_pb -> constr -> constr ->
- evar_defs -> evar_defs
+ bool -> env -> conv_pb -> constr -> constr -> evar_defs -> evar_defs
(* [w_unify_to_subterm env (c,t) m] performs unification of [c] with a
subterm of [t]. Constraints are added to [m] and the matched
diff --git a/proofs/evar_refiner.ml b/proofs/evar_refiner.ml
index 41b910222..303338143 100644
--- a/proofs/evar_refiner.ml
+++ b/proofs/evar_refiner.ml
@@ -8,40 +8,13 @@
(* $Id$ *)
-open Pp
open Util
open Names
-open Rawterm
open Term
-open Termops
-open Environ
open Evd
open Sign
-open Reductionops
-open Typing
-open Tacred
open Proof_trees
-open Proof_type
-open Logic
open Refiner
-open Tacexpr
-open Nameops
-
-
-type wc = named_context sigma (* for a better reading of the following *)
-
-let rc_of_glsigma sigma = rc_of_gc sigma.sigma sigma.it
-
-type w_tactic = named_context sigma -> named_context sigma
-
-let extract_decl sp evc =
- let evdmap = evc.sigma in
- let evd = Evd.map evdmap sp in
- { it = evd.evar_hyps;
- sigma = Evd.rmv evdmap sp }
-
-let restore_decl sp evd evc =
- (rc_add evc (sp,evd))
(******************************************)
(* Instantiation of existential variables *)
@@ -49,34 +22,29 @@ let restore_decl sp evd evc =
(* w_tactic pour instantiate *)
-let w_refine ev rawc wc =
- if Evd.is_defined wc.sigma ev then
+let w_refine env ev rawc evd =
+ if Evd.is_defined (evars_of evd) ev then
error "Instantiate called on already-defined evar";
- let e_info = Evd.map wc.sigma ev in
- let env = Evarutil.evar_env e_info in
- let evd,typed_c =
- Pretyping.understand_gen_tcc wc.sigma env []
+ let e_info = Evd.map (evars_of evd) ev in
+ let env = Evd.evar_env e_info in
+ let sigma,typed_c =
+ Pretyping.understand_gen_tcc (evars_of evd) env []
(Some e_info.evar_concl) rawc in
let inst_info = {e_info with evar_body = Evar_defined typed_c } in
- restore_decl ev inst_info (extract_decl ev {wc with sigma=evd})
- (* w_Define ev typed_c {wc with sigma=evd} *)
-
-(* the instantiate tactic was moved to tactics/evar_tactics.ml *)
+ evar_define ev typed_c (evars_reset_evd sigma evd)
(* vernac command Existential *)
let instantiate_pf_com n com pfts =
let gls = top_goal_of_pftreestate pfts in
- let wc = project_with_focus gls in
- let sigma = wc.sigma in
- let (sp,evd) (* as evc *) =
+ let sigma = gls.sigma in
+ let (sp,evi) (* as evc *) =
try
List.nth (Evarutil.non_instantiated sigma) (n-1)
with Failure _ ->
- error "not so many uninstantiated existential variables"
- in
- let e_info = Evd.map sigma sp in
- let env = Evarutil.evar_env e_info in
+ error "not so many uninstantiated existential variables" in
+ let env = Evd.evar_env evi in
let rawc = Constrintern.interp_rawconstr sigma env com in
- let wc' = w_refine sp rawc wc in
- change_constraints_pftreestate wc'.sigma pfts
+ let evd = create_evar_defs sigma in
+ let evd' = w_refine env sp rawc evd in
+ change_constraints_pftreestate (evars_of evd') pfts
diff --git a/proofs/evar_refiner.mli b/proofs/evar_refiner.mli
index 4766d94cb..57312cb4b 100644
--- a/proofs/evar_refiner.mli
+++ b/proofs/evar_refiner.mli
@@ -11,23 +11,14 @@
(*i*)
open Names
open Term
-open Sign
open Environ
open Evd
open Refiner
-open Proof_type
(*i*)
-type wc = named_context sigma (* for a better reading of the following *)
-
(* Refinement of existential variables. *)
-(* A [w_tactic] is a tactic which modifies the a set of evars of which
- a goal depend, either by instantiating one, or by declaring a new
- dependent goal *)
-type w_tactic = wc -> wc
-
-val w_refine : evar -> Rawterm.rawconstr -> w_tactic
+val w_refine : env -> evar -> Rawterm.rawconstr -> evar_defs -> evar_defs
val instantiate_pf_com :
int -> Topconstr.constr_expr -> pftreestate -> pftreestate
diff --git a/proofs/proof_trees.ml b/proofs/proof_trees.ml
index 967b3edaf..445e19967 100644
--- a/proofs/proof_trees.ml
+++ b/proofs/proof_trees.ml
@@ -70,25 +70,6 @@ let is_tactic_proof pf = match pf.ref with
(* Constraints for existential variables *)
(*******************************************************************)
-(* A readable constraint is a global constraint plus a focus set
- of existential variables and a signature. *)
-
-(* Functions on readable constraints *)
-
-let mt_evcty gc =
- { it = empty_named_context; sigma = gc }
-
-let rc_of_gc evds gl =
- { it = gl.evar_hyps; sigma = evds }
-
-let rc_add evc (k,v) =
- { it = evc.it;
- sigma = Evd.add evc.sigma k v }
-
-let get_hyps evc = evc.it
-let get_env evc = Global.env_of_context evc.it
-let get_gc evc = evc.sigma
-
let pf_lookup_name_as_renamed env ccl s =
Detyping.lookup_name_as_renamed env ccl s
diff --git a/proofs/proof_trees.mli b/proofs/proof_trees.mli
index 348a4b173..12f82b7f4 100644
--- a/proofs/proof_trees.mli
+++ b/proofs/proof_trees.mli
@@ -33,16 +33,6 @@ val is_complete_proof : proof_tree -> bool
val is_leaf_proof : proof_tree -> bool
val is_tactic_proof : proof_tree -> bool
-(*s A readable constraint is a global constraint plus a focus set
- of existential variables and a signature. *)
-
-val rc_of_gc : evar_map -> goal -> named_context sigma
-val rc_add : named_context sigma -> existential_key * goal ->
- named_context sigma
-val get_hyps : named_context sigma -> named_context
-val get_env : named_context sigma -> env
-val get_gc : named_context sigma -> evar_map
-
val pf_lookup_name_as_renamed : env -> constr -> identifier -> int option
val pf_lookup_index_as_renamed : env -> constr -> int -> int option
diff --git a/proofs/refiner.ml b/proofs/refiner.ml
index b2629013b..acdc302af 100644
--- a/proofs/refiner.ml
+++ b/proofs/refiner.ml
@@ -31,8 +31,6 @@ let sig_it x = x.it
let sig_sig x = x.sigma
-let project_with_focus gls = rc_of_gc (gls.sigma) (gls.it)
-
let pf_status pf = pf.open_subgoals
let is_complete pf = (0 = (pf_status pf))
diff --git a/proofs/refiner.mli b/proofs/refiner.mli
index f6f65ef93..8e39e0181 100644
--- a/proofs/refiner.mli
+++ b/proofs/refiner.mli
@@ -23,8 +23,6 @@ open Tacexpr
val sig_it : 'a sigma -> 'a
val sig_sig : 'a sigma -> evar_map
-val project_with_focus : goal sigma -> named_context sigma
-
val unpackage : 'a sigma -> evar_map ref * 'a
val repackage : evar_map ref -> 'a -> 'a sigma
val apply_sig_tac :
diff --git a/tactics/equality.ml b/tactics/equality.ml
index f9834f522..8dcc8e06b 100644
--- a/tactics/equality.ml
+++ b/tactics/equality.ml
@@ -567,7 +567,7 @@ let minimal_free_rels env sigma (c,cty) =
let sig_clausal_form env sigma sort_of_ty siglen ty (dFLT,dFLTty) =
let { intro = exist_term } = find_sigma_data sort_of_ty in
- let isevars = ref (Evarutil.create_evar_defs sigma) in
+ let isevars = ref (Evd.create_evar_defs sigma) in
let rec sigrec_clausal_form siglen p_i =
if siglen = 0 then
if Evarconv.e_conv env isevars p_i dFLTty then
@@ -579,19 +579,18 @@ let sig_clausal_form env sigma sort_of_ty siglen ty (dFLT,dFLTty) =
let (a,p_i_minus_1) = match whd_beta_stack p_i with
| (_sigS,[a;p]) -> (a,p)
| _ -> anomaly "sig_clausal_form: should be a sigma type" in
- let ev = Evarutil.e_new_isevar isevars env (dummy_loc,InternalHole)
- (Evarutil.new_Type ()) in
+ let ev = Evarutil.e_new_evar isevars env (new_Type ()) in
let rty = beta_applist(p_i_minus_1,[ev]) in
let tuple_tail = sigrec_clausal_form (siglen-1) rty in
match
- Evd.existential_opt_value (Evarutil.evars_of !isevars)
+ Evd.existential_opt_value (Evd.evars_of !isevars)
(destEvar ev)
with
| Some w -> applist(exist_term,[a;p_i_minus_1;w;tuple_tail])
| None -> anomaly "Not enough components to build the dependent tuple"
in
let scf = sigrec_clausal_form siglen ty in
- Evarutil.nf_evar (Evarutil.evars_of !isevars) scf
+ Evarutil.nf_evar (Evd.evars_of !isevars) scf
(* The problem is to build a destructor (a generalization of the
predecessor) which, when applied to a term made of constructors
diff --git a/tactics/evar_tactics.ml b/tactics/evar_tactics.ml
index d65b1f3eb..a0be2149a 100644
--- a/tactics/evar_tactics.ml
+++ b/tactics/evar_tactics.ml
@@ -20,7 +20,7 @@ open Termops
(* The instantiate tactic *)
-let evars_of evc c =
+let evar_list evc c =
let rec evrec acc c =
match kind_of_term c with
| Evar (n, _) when Evd.in_dom evc n -> c :: acc
@@ -29,30 +29,30 @@ let evars_of evc c =
evrec [] c
let instantiate n rawc ido gl =
- let wc = Refiner.project_with_focus gl in
+ let sigma = gl.sigma in
let evl =
match ido with
- ConclLocation () -> evars_of wc.sigma gl.it.evar_concl
+ ConclLocation () -> evar_list sigma gl.it.evar_concl
| HypLocation (id,hloc) ->
let decl = lookup_named id gl.it.evar_hyps in
match hloc with
InHyp ->
(match decl with
- (_,None,typ) -> evars_of wc.sigma typ
+ (_,None,typ) -> evar_list sigma typ
| _ -> error
"please be more specific : in type or value ?")
| InHypTypeOnly ->
- let (_, _, typ) = decl in evars_of wc.sigma typ
+ let (_, _, typ) = decl in evar_list sigma typ
| InHypValueOnly ->
(match decl with
- (_,Some body,_) -> evars_of wc.sigma body
+ (_,Some body,_) -> evar_list sigma body
| _ -> error "not a let .. in hypothesis") in
if List.length evl < n then
error "not enough uninstantiated existential variables";
if n <= 0 then error "incorrect existential variable index";
let ev,_ = destEvar (List.nth evl (n-1)) in
- let wc' = w_refine ev rawc wc in
- Tacticals.tclIDTAC {gl with sigma = wc'.sigma}
+ let evd' = w_refine (pf_env gl) ev rawc (create_evar_defs sigma) in
+ Refiner.tclEVARS (evars_of evd') gl
(*
let pfic gls c =
@@ -67,12 +67,9 @@ let instantiate_tac = function
| _ -> invalid_arg "Instantiate called with bad arguments"
*)
-let let_evar nam typ gls =
- let sp = Evarutil.new_evar () in
- let evd = Evarutil.create_evar_defs gls.sigma in
- let evd' = Unification.w_Declare (pf_env gls) sp typ evd in
- let ngls = {gls with sigma = Evarutil.evars_of evd'} in
- let args = Array.of_list
- (List.map mkVar (ids_of_named_context (pf_hyps gls))) in
- Tactics.forward true nam (mkEvar(sp,args)) ngls
+let let_evar name typ gls =
+ let evd = Evd.create_evar_defs gls.sigma in
+ let evd',evar = Evarutil.new_evar evd (pf_env gls) typ in
+ Refiner.tclTHEN (Refiner.tclEVARS (evars_of evd'))
+ (Tactics.forward true name evar) gls
diff --git a/tactics/tacticals.ml b/tactics/tacticals.ml
index 79aa71c0f..3d91877d0 100644
--- a/tactics/tacticals.ml
+++ b/tactics/tacticals.ml
@@ -369,7 +369,7 @@ let general_elim_then_using
match predicate with
| None -> elimclause'
| Some p ->
- clenv_unify true Reductionops.CONV (mkMeta pmv) p elimclause'
+ clenv_unify true Evd.CONV (mkMeta pmv) p elimclause'
in
elim_res_pf_THEN_i elimclause' branchtacs gl
diff --git a/toplevel/command.ml b/toplevel/command.ml
index 33663ec21..6dad04c98 100644
--- a/toplevel/command.ml
+++ b/toplevel/command.ml
@@ -92,7 +92,7 @@ let constant_entry_of_com (bl,com,comtypopt,opacity) =
let b = abstract_rawconstr com bl in
let j = judgment_of_rawconstr sigma env b in
{ const_entry_body = j.uj_val;
- const_entry_type = Some (Evarutil.refresh_universes j.uj_type);
+ const_entry_type = Some (refresh_universes j.uj_type);
const_entry_opaque = opacity }
| Some comtyp ->
(* We use a cast to avoid troubles with evars in comtyp *)
@@ -602,7 +602,7 @@ let build_scheme lnamedepindsort =
let listdecl = Indrec.build_mutual_indrec env0 sigma lrecspec in
let rec declare decl fi lrecref =
let decltype = Retyping.get_type_of env0 Evd.empty decl in
- let decltype = Evarutil.refresh_universes decltype in
+ let decltype = refresh_universes decltype in
let ce = { const_entry_body = decl;
const_entry_type = Some decltype;
const_entry_opaque = false } in
diff --git a/toplevel/himsg.ml b/toplevel/himsg.ml
index e032b9f00..8b1745bd3 100644
--- a/toplevel/himsg.ml
+++ b/toplevel/himsg.ml
@@ -27,6 +27,7 @@ open Logic
open Printer
open Ast
open Rawterm
+open Evd
let quote s = if !Options.v7 then s else h 0 (str "\"" ++ s ++ str "\"")
diff --git a/toplevel/vernacentries.ml b/toplevel/vernacentries.ml
index 1b87853bd..2b2dc3138 100644
--- a/toplevel/vernacentries.ml
+++ b/toplevel/vernacentries.ml
@@ -1039,7 +1039,7 @@ let vernac_check_guard () =
let (pfterm,_) = extract_open_pftreestate pts in
let message =
try
- Inductiveops.control_only_guard (Evarutil.evar_env (goal_of_proof pf))
+ Inductiveops.control_only_guard (Evd.evar_env (goal_of_proof pf))
pfterm;
(str "The condition holds up to here")
with UserError(_,s) ->