diff options
| author | letouzey | 2001-10-22 16:19:42 +0000 |
|---|---|---|
| committer | letouzey | 2001-10-22 16:19:42 +0000 |
| commit | a5b3d9a4486c176d76926d824f2386988d3edd7b (patch) | |
| tree | bc19e09ee576fa77af9d1e64e2124cc1298fee21 | |
| parent | 115a337d250da743c136dfed77b03c69109f2517 (diff) | |
chambardement important des fichiers auxiliaires. Nouvelle syntaxe pour les options
git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/coq/trunk@2133 85f007b7-540e-0410-9357-904b9bb8a0f7
| -rw-r--r-- | .depend | 358 | ||||
| -rw-r--r-- | Makefile | 4 | ||||
| -rw-r--r-- | contrib/extraction/Extraction.v | 39 | ||||
| -rw-r--r-- | contrib/extraction/extract_env.ml | 69 | ||||
| -rw-r--r-- | contrib/extraction/extraction.ml | 3 | ||||
| -rw-r--r-- | contrib/extraction/haskell.ml | 27 | ||||
| -rw-r--r-- | contrib/extraction/haskell.mli | 2 | ||||
| -rw-r--r-- | contrib/extraction/miniml.mli | 3 | ||||
| -rw-r--r-- | contrib/extraction/mlutil.ml | 281 | ||||
| -rw-r--r-- | contrib/extraction/mlutil.mli | 31 | ||||
| -rw-r--r-- | contrib/extraction/ocaml.ml | 35 | ||||
| -rw-r--r-- | contrib/extraction/ocaml.mli | 2 | ||||
| -rw-r--r-- | contrib/extraction/table.ml | 203 | ||||
| -rw-r--r-- | contrib/extraction/table.mli | 49 | ||||
| -rw-r--r-- | contrib/extraction/test/addReals | 2 |
15 files changed, 599 insertions, 509 deletions
@@ -29,10 +29,12 @@ kernel/typeops.cmi: kernel/environ.cmi kernel/evd.cmi kernel/inductive.cmi \ kernel/names.cmi kernel/sign.cmi kernel/term.cmi kernel/univ.cmi kernel/univ.cmi: kernel/names.cmi lib/pp.cmi lib/pp.cmi: lib/pp_control.cmi +lib/system.cmi: lib/pp.cmi +lib/util.cmi: lib/pp.cmi library/declare.cmi: kernel/cooking.cmi kernel/declarations.cmi \ - kernel/environ.cmi kernel/evd.cmi kernel/inductive.cmi \ - library/libobject.cmi library/library.cmi kernel/names.cmi \ - library/nametab.cmi kernel/sign.cmi kernel/term.cmi kernel/univ.cmi + kernel/environ.cmi kernel/inductive.cmi library/libobject.cmi \ + library/library.cmi kernel/names.cmi library/nametab.cmi kernel/sign.cmi \ + kernel/term.cmi kernel/univ.cmi library/global.cmi: kernel/cooking.cmi kernel/declarations.cmi \ kernel/environ.cmi kernel/inductive.cmi kernel/names.cmi \ library/nametab.cmi kernel/safe_typing.cmi kernel/sign.cmi \ @@ -46,12 +48,10 @@ library/lib.cmi: library/libobject.cmi kernel/names.cmi library/summary.cmi library/libobject.cmi: kernel/names.cmi library/library.cmi: library/lib.cmi library/libobject.cmi kernel/names.cmi \ library/nametab.cmi lib/pp.cmi lib/system.cmi -library/nametab.cmi: kernel/names.cmi lib/pp.cmi kernel/term.cmi lib/util.cmi +library/nametab.cmi: kernel/names.cmi lib/pp.cmi lib/util.cmi library/opaque.cmi: kernel/closure.cmi kernel/environ.cmi kernel/names.cmi \ kernel/safe_typing.cmi library/summary.cmi: kernel/names.cmi -lib/system.cmi: lib/pp.cmi -lib/util.cmi: lib/pp.cmi parsing/ast.cmi: parsing/coqast.cmi lib/dyn.cmi kernel/names.cmi \ parsing/pcoq.cmi lib/pp.cmi parsing/astterm.cmi: parsing/coqast.cmi kernel/environ.cmi kernel/evd.cmi \ @@ -70,9 +70,10 @@ parsing/g_minicoq.cmi: kernel/environ.cmi kernel/names.cmi lib/pp.cmi \ kernel/term.cmi parsing/g_zsyntax.cmi: parsing/coqast.cmi parsing/pcoq.cmi: parsing/coqast.cmi -parsing/prettyp.cmi: kernel/environ.cmi kernel/inductive.cmi library/lib.cmi \ - kernel/names.cmi library/nametab.cmi lib/pp.cmi kernel/reduction.cmi \ - kernel/safe_typing.cmi kernel/sign.cmi kernel/term.cmi +parsing/prettyp.cmi: pretyping/classops.cmi kernel/environ.cmi \ + kernel/inductive.cmi library/lib.cmi kernel/names.cmi library/nametab.cmi \ + lib/pp.cmi kernel/reduction.cmi kernel/safe_typing.cmi kernel/sign.cmi \ + kernel/term.cmi parsing/printer.cmi: parsing/coqast.cmi kernel/environ.cmi kernel/names.cmi \ pretyping/pattern.cmi lib/pp.cmi pretyping/rawterm.cmi kernel/sign.cmi \ kernel/term.cmi @@ -119,8 +120,8 @@ pretyping/tacred.cmi: kernel/closure.cmi kernel/environ.cmi kernel/evd.cmi \ kernel/names.cmi kernel/reduction.cmi kernel/term.cmi pretyping/typing.cmi: kernel/environ.cmi kernel/evd.cmi kernel/term.cmi proofs/clenv.cmi: kernel/environ.cmi proofs/evar_refiner.cmi kernel/evd.cmi \ - kernel/names.cmi lib/pp.cmi proofs/proof_type.cmi proofs/tacmach.cmi \ - kernel/term.cmi lib/util.cmi + kernel/names.cmi lib/pp.cmi proofs/proof_type.cmi kernel/reduction.cmi \ + proofs/tacmach.cmi kernel/term.cmi lib/util.cmi proofs/evar_refiner.cmi: parsing/coqast.cmi kernel/environ.cmi kernel/evd.cmi \ kernel/names.cmi proofs/proof_trees.cmi proofs/proof_type.cmi \ proofs/refiner.cmi kernel/sign.cmi kernel/term.cmi @@ -187,8 +188,8 @@ toplevel/class.cmi: pretyping/classops.cmi library/declare.cmi \ kernel/names.cmi kernel/term.cmi toplevel/command.cmi: parsing/coqast.cmi kernel/declarations.cmi \ library/declare.cmi kernel/environ.cmi library/library.cmi \ - kernel/names.cmi proofs/proof_type.cmi pretyping/tacred.cmi \ - kernel/term.cmi + kernel/names.cmi library/nametab.cmi proofs/proof_type.cmi \ + pretyping/tacred.cmi kernel/term.cmi toplevel/coqinit.cmi: kernel/names.cmi toplevel/discharge.cmi: kernel/names.cmi toplevel/errors.cmi: parsing/coqast.cmi lib/pp.cmi @@ -202,23 +203,22 @@ toplevel/mltop.cmi: library/libobject.cmi kernel/names.cmi toplevel/protectedtoplevel.cmi: lib/pp.cmi toplevel/record.cmi: parsing/coqast.cmi kernel/names.cmi kernel/sign.cmi \ kernel/term.cmi -toplevel/recordobj.cmi: kernel/term.cmi +toplevel/recordobj.cmi: kernel/names.cmi toplevel/searchisos.cmi: library/libobject.cmi kernel/names.cmi \ kernel/term.cmi toplevel/toplevel.cmi: parsing/pcoq.cmi lib/pp.cmi -toplevel/vernacentries.cmi: parsing/coqast.cmi kernel/environ.cmi \ - kernel/names.cmi library/nametab.cmi proofs/proof_type.cmi \ - kernel/term.cmi toplevel/vernacinterp.cmi +toplevel/vernac.cmi: parsing/coqast.cmi parsing/pcoq.cmi +toplevel/vernacentries.cmi: kernel/environ.cmi kernel/names.cmi \ + proofs/proof_type.cmi kernel/term.cmi toplevel/vernacinterp.cmi toplevel/vernacinterp.cmi: parsing/coqast.cmi lib/dyn.cmi kernel/names.cmi \ library/nametab.cmi proofs/proof_type.cmi -toplevel/vernac.cmi: parsing/coqast.cmi parsing/pcoq.cmi contrib/correctness/past.cmi: parsing/coqast.cmi kernel/names.cmi \ contrib/correctness/ptype.cmi kernel/term.cmi +contrib/correctness/pcic.cmi: contrib/correctness/past.cmi \ + pretyping/rawterm.cmi contrib/correctness/pcicenv.cmi: kernel/names.cmi \ contrib/correctness/penv.cmi contrib/correctness/prename.cmi \ kernel/sign.cmi kernel/term.cmi -contrib/correctness/pcic.cmi: contrib/correctness/past.cmi \ - pretyping/rawterm.cmi contrib/correctness/pdb.cmi: kernel/names.cmi contrib/correctness/past.cmi \ contrib/correctness/ptype.cmi contrib/correctness/peffect.cmi: kernel/names.cmi lib/pp.cmi @@ -259,12 +259,14 @@ contrib/correctness/pwp.cmi: contrib/correctness/peffect.cmi \ contrib/extraction/extraction.cmi: kernel/environ.cmi \ contrib/extraction/miniml.cmi kernel/names.cmi kernel/term.cmi contrib/extraction/haskell.cmi: contrib/extraction/miniml.cmi \ - contrib/extraction/mlutil.cmi kernel/term.cmi + contrib/extraction/mlutil.cmi kernel/names.cmi contrib/extraction/miniml.cmi: kernel/names.cmi lib/pp.cmi kernel/term.cmi contrib/extraction/mlutil.cmi: contrib/extraction/miniml.cmi kernel/names.cmi \ kernel/term.cmi contrib/extraction/ocaml.cmi: contrib/extraction/miniml.cmi \ contrib/extraction/mlutil.cmi kernel/names.cmi lib/pp.cmi kernel/term.cmi +contrib/extraction/table.cmi: library/goptions.cmi kernel/names.cmi \ + library/summary.cmi toplevel/vernacinterp.cmi contrib/interface/dad.cmi: contrib/interface/ctast.cmo proofs/proof_type.cmi \ proofs/tacmach.cmi contrib/interface/debug_tac.cmi: parsing/coqast.cmi proofs/proof_type.cmi \ @@ -330,12 +332,12 @@ kernel/evd.cmx: kernel/names.cmx kernel/sign.cmx kernel/term.cmx lib/util.cmx \ kernel/evd.cmi kernel/indtypes.cmo: kernel/declarations.cmi kernel/environ.cmi \ kernel/evd.cmi kernel/inductive.cmi kernel/instantiate.cmi \ - kernel/names.cmi lib/options.cmi kernel/reduction.cmi kernel/sign.cmi \ - kernel/term.cmi kernel/typeops.cmi lib/util.cmi kernel/indtypes.cmi + kernel/names.cmi kernel/reduction.cmi kernel/sign.cmi kernel/term.cmi \ + kernel/typeops.cmi lib/util.cmi kernel/indtypes.cmi kernel/indtypes.cmx: kernel/declarations.cmx kernel/environ.cmx \ kernel/evd.cmx kernel/inductive.cmx kernel/instantiate.cmx \ - kernel/names.cmx lib/options.cmx kernel/reduction.cmx kernel/sign.cmx \ - kernel/term.cmx kernel/typeops.cmx lib/util.cmx kernel/indtypes.cmi + kernel/names.cmx kernel/reduction.cmx kernel/sign.cmx kernel/term.cmx \ + kernel/typeops.cmx lib/util.cmx kernel/indtypes.cmi kernel/inductive.cmo: kernel/declarations.cmi kernel/environ.cmi \ kernel/names.cmi kernel/reduction.cmi kernel/sign.cmi kernel/term.cmi \ kernel/univ.cmi lib/util.cmi kernel/inductive.cmi @@ -343,11 +345,11 @@ kernel/inductive.cmx: kernel/declarations.cmx kernel/environ.cmx \ kernel/names.cmx kernel/reduction.cmx kernel/sign.cmx kernel/term.cmx \ kernel/univ.cmx lib/util.cmx kernel/inductive.cmi kernel/instantiate.cmo: kernel/declarations.cmi kernel/environ.cmi \ - kernel/evd.cmi kernel/names.cmi lib/options.cmi lib/pp.cmi \ - kernel/sign.cmi kernel/term.cmi lib/util.cmi kernel/instantiate.cmi + kernel/evd.cmi kernel/names.cmi lib/pp.cmi kernel/sign.cmi \ + kernel/term.cmi lib/util.cmi kernel/instantiate.cmi kernel/instantiate.cmx: kernel/declarations.cmx kernel/environ.cmx \ - kernel/evd.cmx kernel/names.cmx lib/options.cmx lib/pp.cmx \ - kernel/sign.cmx kernel/term.cmx lib/util.cmx kernel/instantiate.cmi + kernel/evd.cmx kernel/names.cmx lib/pp.cmx kernel/sign.cmx \ + kernel/term.cmx lib/util.cmx kernel/instantiate.cmi kernel/names.cmo: lib/hashcons.cmi lib/pp.cmi lib/predicate.cmi lib/util.cmi \ kernel/names.cmi kernel/names.cmx: lib/hashcons.cmx lib/pp.cmx lib/predicate.cmx lib/util.cmx \ @@ -362,20 +364,18 @@ kernel/reduction.cmx: kernel/closure.cmx kernel/declarations.cmx \ kernel/term.cmx kernel/univ.cmx lib/util.cmx kernel/reduction.cmi kernel/safe_typing.cmo: kernel/cooking.cmi kernel/declarations.cmi \ kernel/environ.cmi kernel/evd.cmi kernel/indtypes.cmi \ - kernel/inductive.cmi kernel/names.cmi lib/options.cmi lib/pp.cmi \ - kernel/reduction.cmi kernel/sign.cmi kernel/term.cmi \ - kernel/type_errors.cmi kernel/typeops.cmi kernel/univ.cmi lib/util.cmi \ - kernel/safe_typing.cmi + kernel/inductive.cmi kernel/names.cmi lib/pp.cmi kernel/reduction.cmi \ + kernel/sign.cmi kernel/term.cmi kernel/type_errors.cmi kernel/typeops.cmi \ + kernel/univ.cmi lib/util.cmi kernel/safe_typing.cmi kernel/safe_typing.cmx: kernel/cooking.cmx kernel/declarations.cmx \ kernel/environ.cmx kernel/evd.cmx kernel/indtypes.cmx \ - kernel/inductive.cmx kernel/names.cmx lib/options.cmx lib/pp.cmx \ - kernel/reduction.cmx kernel/sign.cmx kernel/term.cmx \ - kernel/type_errors.cmx kernel/typeops.cmx kernel/univ.cmx lib/util.cmx \ - kernel/safe_typing.cmi -kernel/sign.cmo: kernel/names.cmi lib/options.cmi kernel/term.cmi \ - lib/util.cmi kernel/sign.cmi -kernel/sign.cmx: kernel/names.cmx lib/options.cmx kernel/term.cmx \ - lib/util.cmx kernel/sign.cmi + kernel/inductive.cmx kernel/names.cmx lib/pp.cmx kernel/reduction.cmx \ + kernel/sign.cmx kernel/term.cmx kernel/type_errors.cmx kernel/typeops.cmx \ + kernel/univ.cmx lib/util.cmx kernel/safe_typing.cmi +kernel/sign.cmo: kernel/names.cmi kernel/term.cmi lib/util.cmi \ + kernel/sign.cmi +kernel/sign.cmx: kernel/names.cmx kernel/term.cmx lib/util.cmx \ + kernel/sign.cmi kernel/term.cmo: kernel/esubst.cmi lib/hashcons.cmi kernel/names.cmi \ lib/pp.cmi kernel/univ.cmi lib/util.cmi kernel/term.cmi kernel/term.cmx: kernel/esubst.cmx lib/hashcons.cmx kernel/names.cmx \ @@ -408,24 +408,32 @@ 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/gmapl.cmo: lib/gmap.cmi lib/util.cmi lib/gmapl.cmi -lib/gmapl.cmx: lib/gmap.cmx lib/util.cmx lib/gmapl.cmi lib/gmap.cmo: lib/gmap.cmi lib/gmap.cmx: lib/gmap.cmi +lib/gmapl.cmo: lib/gmap.cmi lib/util.cmi lib/gmapl.cmi +lib/gmapl.cmx: lib/gmap.cmx lib/util.cmx lib/gmapl.cmi lib/gset.cmo: lib/gset.cmi lib/gset.cmx: lib/gset.cmi lib/hashcons.cmo: lib/hashcons.cmi lib/hashcons.cmx: lib/hashcons.cmi lib/options.cmo: lib/util.cmi lib/options.cmi lib/options.cmx: lib/util.cmx lib/options.cmi -lib/pp_control.cmo: lib/pp_control.cmi -lib/pp_control.cmx: lib/pp_control.cmi lib/pp.cmo: lib/pp_control.cmi lib/pp.cmi lib/pp.cmx: lib/pp_control.cmx lib/pp.cmi +lib/pp_control.cmo: lib/pp_control.cmi +lib/pp_control.cmx: lib/pp_control.cmi lib/predicate.cmo: lib/predicate.cmi lib/predicate.cmx: lib/predicate.cmi lib/profile.cmo: lib/profile.cmi lib/profile.cmx: lib/profile.cmi +lib/stamps.cmo: lib/stamps.cmi +lib/stamps.cmx: lib/stamps.cmi +lib/system.cmo: config/coq_config.cmi lib/pp.cmi lib/util.cmi lib/system.cmi +lib/system.cmx: config/coq_config.cmx lib/pp.cmx lib/util.cmx lib/system.cmi +lib/tlm.cmo: lib/gmap.cmi lib/gset.cmi lib/tlm.cmi +lib/tlm.cmx: lib/gmap.cmx lib/gset.cmx lib/tlm.cmi +lib/util.cmo: lib/pp.cmi lib/util.cmi +lib/util.cmx: lib/pp.cmx lib/util.cmi library/declare.cmo: kernel/cooking.cmi kernel/declarations.cmi \ kernel/environ.cmi kernel/evd.cmi library/global.cmi library/impargs.cmi \ library/indrec.cmi kernel/inductive.cmi library/lib.cmi \ @@ -494,11 +502,9 @@ library/library.cmx: kernel/environ.cmx library/global.cmx library/lib.cmx \ library/libobject.cmx kernel/names.cmx library/nametab.cmx \ lib/options.cmx lib/pp.cmx library/summary.cmx lib/system.cmx \ lib/util.cmx library/library.cmi -library/nametab.cmo: kernel/declarations.cmi library/libobject.cmi \ - kernel/names.cmi lib/pp.cmi library/summary.cmi kernel/term.cmi \ +library/nametab.cmo: kernel/names.cmi lib/pp.cmi library/summary.cmi \ lib/util.cmi library/nametab.cmi -library/nametab.cmx: kernel/declarations.cmx library/libobject.cmx \ - kernel/names.cmx lib/pp.cmx library/summary.cmx kernel/term.cmx \ +library/nametab.cmx: kernel/names.cmx lib/pp.cmx library/summary.cmx \ lib/util.cmx library/nametab.cmi library/opaque.cmo: kernel/closure.cmi kernel/declarations.cmi \ kernel/environ.cmi library/global.cmi kernel/names.cmi \ @@ -514,14 +520,6 @@ library/summary.cmo: lib/dyn.cmi kernel/names.cmi lib/pp.cmi lib/util.cmi \ library/summary.cmi library/summary.cmx: lib/dyn.cmx kernel/names.cmx lib/pp.cmx lib/util.cmx \ library/summary.cmi -lib/stamps.cmo: lib/stamps.cmi -lib/stamps.cmx: lib/stamps.cmi -lib/system.cmo: config/coq_config.cmi lib/pp.cmi lib/util.cmi lib/system.cmi -lib/system.cmx: config/coq_config.cmx lib/pp.cmx lib/util.cmx lib/system.cmi -lib/tlm.cmo: lib/gmap.cmi lib/gset.cmi lib/tlm.cmi -lib/tlm.cmx: lib/gmap.cmx lib/gset.cmx lib/tlm.cmi -lib/util.cmo: lib/pp.cmi lib/util.cmi -lib/util.cmx: lib/pp.cmx lib/util.cmi parsing/ast.cmo: parsing/coqast.cmi lib/dyn.cmi kernel/names.cmi \ parsing/pcoq.cmi lib/pp.cmi lib/util.cmi parsing/ast.cmi parsing/ast.cmx: parsing/coqast.cmx lib/dyn.cmx kernel/names.cmx \ @@ -546,12 +544,10 @@ parsing/coqast.cmo: lib/dyn.cmi lib/hashcons.cmi kernel/names.cmi \ parsing/coqast.cmi parsing/coqast.cmx: lib/dyn.cmx lib/hashcons.cmx kernel/names.cmx \ parsing/coqast.cmi -parsing/coqlib.cmo: library/declare.cmi kernel/evd.cmi library/global.cmi \ - kernel/names.cmi library/nametab.cmi pretyping/pattern.cmi \ - kernel/term.cmi lib/util.cmi parsing/coqlib.cmi -parsing/coqlib.cmx: library/declare.cmx kernel/evd.cmx library/global.cmx \ - kernel/names.cmx library/nametab.cmx pretyping/pattern.cmx \ - kernel/term.cmx lib/util.cmx parsing/coqlib.cmi +parsing/coqlib.cmo: library/declare.cmi kernel/names.cmi library/nametab.cmi \ + pretyping/pattern.cmi kernel/term.cmi lib/util.cmi parsing/coqlib.cmi +parsing/coqlib.cmx: library/declare.cmx kernel/names.cmx library/nametab.cmx \ + pretyping/pattern.cmx kernel/term.cmx lib/util.cmx parsing/coqlib.cmi parsing/egrammar.cmo: parsing/ast.cmi parsing/coqast.cmi parsing/extend.cmi \ parsing/lexer.cmi parsing/pcoq.cmi lib/pp.cmi lib/util.cmi \ parsing/egrammar.cmi @@ -719,25 +715,25 @@ pretyping/coercion.cmx: pretyping/classops.cmx kernel/environ.cmx \ pretyping/recordops.cmx kernel/reduction.cmx pretyping/retyping.cmx \ kernel/term.cmx kernel/typeops.cmx lib/util.cmx pretyping/coercion.cmi pretyping/detyping.cmo: kernel/declarations.cmi library/declare.cmi \ - kernel/environ.cmi kernel/evd.cmi library/global.cmi library/goptions.cmi \ + kernel/environ.cmi library/global.cmi library/goptions.cmi \ library/impargs.cmi kernel/inductive.cmi kernel/names.cmi lib/pp.cmi \ pretyping/rawterm.cmi kernel/sign.cmi kernel/term.cmi kernel/univ.cmi \ lib/util.cmi pretyping/detyping.cmi pretyping/detyping.cmx: kernel/declarations.cmx library/declare.cmx \ - kernel/environ.cmx kernel/evd.cmx library/global.cmx library/goptions.cmx \ + kernel/environ.cmx library/global.cmx library/goptions.cmx \ library/impargs.cmx kernel/inductive.cmx kernel/names.cmx lib/pp.cmx \ pretyping/rawterm.cmx kernel/sign.cmx kernel/term.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 kernel/evd.cmi \ - kernel/instantiate.cmi kernel/names.cmi pretyping/recordops.cmi \ - kernel/reduction.cmi kernel/term.cmi pretyping/typing.cmi lib/util.cmi \ - pretyping/evarconv.cmi + library/declare.cmi kernel/environ.cmi pretyping/evarutil.cmi \ + kernel/evd.cmi kernel/instantiate.cmi kernel/names.cmi \ + pretyping/recordops.cmi kernel/reduction.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 kernel/evd.cmx \ - kernel/instantiate.cmx kernel/names.cmx pretyping/recordops.cmx \ - kernel/reduction.cmx kernel/term.cmx pretyping/typing.cmx lib/util.cmx \ - pretyping/evarconv.cmi + library/declare.cmx kernel/environ.cmx pretyping/evarutil.cmx \ + kernel/evd.cmx kernel/instantiate.cmx kernel/names.cmx \ + pretyping/recordops.cmx kernel/reduction.cmx kernel/term.cmx \ + pretyping/typing.cmx lib/util.cmx pretyping/evarconv.cmi pretyping/evarutil.cmo: kernel/environ.cmi kernel/evd.cmi library/global.cmi \ library/indrec.cmi kernel/instantiate.cmi kernel/names.cmi lib/pp.cmi \ pretyping/pretype_errors.cmi kernel/reduction.cmi kernel/sign.cmi \ @@ -748,20 +744,22 @@ pretyping/evarutil.cmx: kernel/environ.cmx kernel/evd.cmx library/global.cmx \ pretyping/pretype_errors.cmx kernel/reduction.cmx kernel/sign.cmx \ kernel/term.cmx kernel/typeops.cmx kernel/univ.cmx lib/util.cmx \ pretyping/evarutil.cmi -pretyping/pattern.cmo: library/declare.cmi kernel/environ.cmi kernel/evd.cmi \ - library/global.cmi kernel/names.cmi pretyping/rawterm.cmi \ - kernel/reduction.cmi kernel/term.cmi lib/util.cmi pretyping/pattern.cmi -pretyping/pattern.cmx: library/declare.cmx kernel/environ.cmx kernel/evd.cmx \ - library/global.cmx kernel/names.cmx pretyping/rawterm.cmx \ - kernel/reduction.cmx kernel/term.cmx lib/util.cmx pretyping/pattern.cmi +pretyping/pattern.cmo: library/declare.cmi kernel/environ.cmi \ + kernel/names.cmi pretyping/rawterm.cmi kernel/reduction.cmi \ + kernel/term.cmi lib/util.cmi pretyping/pattern.cmi +pretyping/pattern.cmx: library/declare.cmx kernel/environ.cmx \ + kernel/names.cmx pretyping/rawterm.cmx kernel/reduction.cmx \ + kernel/term.cmx lib/util.cmx pretyping/pattern.cmi pretyping/pretype_errors.cmo: kernel/environ.cmi kernel/evd.cmi \ kernel/inductive.cmi kernel/instantiate.cmi kernel/names.cmi \ pretyping/rawterm.cmi kernel/reduction.cmi kernel/sign.cmi \ - kernel/term.cmi kernel/type_errors.cmi pretyping/pretype_errors.cmi + kernel/term.cmi kernel/type_errors.cmi lib/util.cmi \ + pretyping/pretype_errors.cmi pretyping/pretype_errors.cmx: kernel/environ.cmx kernel/evd.cmx \ kernel/inductive.cmx kernel/instantiate.cmx kernel/names.cmx \ pretyping/rawterm.cmx kernel/reduction.cmx kernel/sign.cmx \ - kernel/term.cmx kernel/type_errors.cmx pretyping/pretype_errors.cmi + kernel/term.cmx kernel/type_errors.cmx lib/util.cmx \ + pretyping/pretype_errors.cmi pretyping/pretyping.cmo: pretyping/cases.cmi pretyping/classops.cmi \ pretyping/coercion.cmi library/declare.cmi lib/dyn.cmi kernel/environ.cmi \ pretyping/evarconv.cmi pretyping/evarutil.cmi kernel/evd.cmi \ @@ -1003,15 +1001,15 @@ tactics/dn.cmx: lib/tlm.cmx tactics/dn.cmi tactics/eauto.cmo: tactics/auto.cmi proofs/clenv.cmi proofs/evar_refiner.cmi \ pretyping/evarutil.cmi kernel/evd.cmi lib/explore.cmi proofs/logic.cmi \ kernel/names.cmi pretyping/pattern.cmi lib/pp.cmi proofs/proof_trees.cmi \ - proofs/proof_type.cmi kernel/reduction.cmi kernel/sign.cmi \ - proofs/tacmach.cmi tactics/tacticals.cmi tactics/tactics.cmi \ - kernel/term.cmi lib/util.cmi + proofs/proof_type.cmi kernel/reduction.cmi parsing/search.cmi \ + kernel/sign.cmi proofs/tacmach.cmi tactics/tacticals.cmi \ + tactics/tactics.cmi kernel/term.cmi lib/util.cmi tactics/eauto.cmx: tactics/auto.cmx proofs/clenv.cmx proofs/evar_refiner.cmx \ pretyping/evarutil.cmx kernel/evd.cmx lib/explore.cmx proofs/logic.cmx \ kernel/names.cmx pretyping/pattern.cmx lib/pp.cmx proofs/proof_trees.cmx \ - proofs/proof_type.cmx kernel/reduction.cmx kernel/sign.cmx \ - proofs/tacmach.cmx tactics/tacticals.cmx tactics/tactics.cmx \ - kernel/term.cmx lib/util.cmx + proofs/proof_type.cmx kernel/reduction.cmx parsing/search.cmx \ + kernel/sign.cmx proofs/tacmach.cmx tactics/tacticals.cmx \ + tactics/tactics.cmx kernel/term.cmx lib/util.cmx tactics/elim.cmo: proofs/clenv.cmi library/declare.cmi kernel/environ.cmi \ tactics/hiddentac.cmi tactics/hipattern.cmi kernel/inductive.cmi \ kernel/names.cmi library/nametab.cmi lib/pp.cmi proofs/proof_type.cmi \ @@ -1196,12 +1194,12 @@ tactics/wcclausenv.cmx: proofs/clenv.cmx kernel/environ.cmx \ proofs/logic.cmx kernel/names.cmx lib/pp.cmx proofs/proof_trees.cmx \ kernel/reduction.cmx kernel/sign.cmx proofs/tacmach.cmx kernel/term.cmx \ lib/util.cmx tactics/wcclausenv.cmi -tools/coqdep_lexer.cmo: config/coq_config.cmi -tools/coqdep_lexer.cmx: config/coq_config.cmx -tools/coqdep.cmo: config/coq_config.cmi tools/coqdep_lexer.cmo -tools/coqdep.cmx: config/coq_config.cmx tools/coqdep_lexer.cmx tools/coq_vo2xml.cmo: config/coq_config.cmi toplevel/usage.cmi tools/coq_vo2xml.cmx: config/coq_config.cmx toplevel/usage.cmx +tools/coqdep.cmo: config/coq_config.cmi tools/coqdep_lexer.cmo +tools/coqdep.cmx: config/coq_config.cmx tools/coqdep_lexer.cmx +tools/coqdep_lexer.cmo: config/coq_config.cmi +tools/coqdep_lexer.cmx: config/coq_config.cmx tools/gallina.cmo: tools/gallina_lexer.cmo tools/gallina.cmx: tools/gallina_lexer.cmx toplevel/class.cmo: pretyping/classops.cmi kernel/declarations.cmi \ @@ -1220,26 +1218,28 @@ toplevel/command.cmo: parsing/ast.cmi parsing/astterm.cmi parsing/coqast.cmi \ kernel/declarations.cmi library/declare.cmi kernel/environ.cmi \ kernel/evd.cmi library/global.cmi library/impargs.cmi library/indrec.cmi \ kernel/inductive.cmi library/lib.cmi library/libobject.cmi \ - library/library.cmi proofs/logic.cmi kernel/names.cmi lib/options.cmi \ - proofs/pfedit.cmi lib/pp.cmi parsing/printer.cmi proofs/proof_type.cmi \ - kernel/reduction.cmi kernel/safe_typing.cmi library/states.cmi \ - pretyping/syntax_def.cmi proofs/tacmach.cmi pretyping/tacred.cmi \ - kernel/term.cmi lib/util.cmi toplevel/command.cmi + library/library.cmi proofs/logic.cmi kernel/names.cmi library/nametab.cmi \ + lib/options.cmi proofs/pfedit.cmi lib/pp.cmi parsing/printer.cmi \ + proofs/proof_type.cmi kernel/reduction.cmi kernel/safe_typing.cmi \ + library/states.cmi pretyping/syntax_def.cmi proofs/tacmach.cmi \ + pretyping/tacred.cmi kernel/term.cmi lib/util.cmi toplevel/command.cmi toplevel/command.cmx: parsing/ast.cmx parsing/astterm.cmx parsing/coqast.cmx \ kernel/declarations.cmx library/declare.cmx kernel/environ.cmx \ kernel/evd.cmx library/global.cmx library/impargs.cmx library/indrec.cmx \ kernel/inductive.cmx library/lib.cmx library/libobject.cmx \ - library/library.cmx proofs/logic.cmx kernel/names.cmx lib/options.cmx \ - proofs/pfedit.cmx lib/pp.cmx parsing/printer.cmx proofs/proof_type.cmx \ - kernel/reduction.cmx kernel/safe_typing.cmx library/states.cmx \ - pretyping/syntax_def.cmx proofs/tacmach.cmx pretyping/tacred.cmx \ - kernel/term.cmx lib/util.cmx toplevel/command.cmi + library/library.cmx proofs/logic.cmx kernel/names.cmx library/nametab.cmx \ + lib/options.cmx proofs/pfedit.cmx lib/pp.cmx parsing/printer.cmx \ + proofs/proof_type.cmx kernel/reduction.cmx kernel/safe_typing.cmx \ + library/states.cmx pretyping/syntax_def.cmx proofs/tacmach.cmx \ + pretyping/tacred.cmx kernel/term.cmx lib/util.cmx toplevel/command.cmi toplevel/coqinit.cmo: config/coq_config.cmi toplevel/mltop.cmi \ - library/nametab.cmi lib/options.cmi lib/pp.cmi lib/system.cmi \ - toplevel/toplevel.cmi toplevel/vernac.cmi toplevel/coqinit.cmi + kernel/names.cmi library/nametab.cmi lib/options.cmi lib/pp.cmi \ + lib/system.cmi toplevel/toplevel.cmi toplevel/vernac.cmi \ + toplevel/coqinit.cmi toplevel/coqinit.cmx: config/coq_config.cmx toplevel/mltop.cmx \ - library/nametab.cmx lib/options.cmx lib/pp.cmx lib/system.cmx \ - toplevel/toplevel.cmx toplevel/vernac.cmx toplevel/coqinit.cmi + kernel/names.cmx library/nametab.cmx lib/options.cmx lib/pp.cmx \ + lib/system.cmx toplevel/toplevel.cmx toplevel/vernac.cmx \ + toplevel/coqinit.cmi toplevel/coqtop.cmo: config/coq_config.cmi toplevel/coqinit.cmi \ toplevel/errors.cmi library/lib.cmi library/library.cmi \ toplevel/mltop.cmi kernel/names.cmi library/nametab.cmi lib/options.cmi \ @@ -1347,13 +1347,13 @@ toplevel/record.cmx: parsing/ast.cmx parsing/astterm.cmx toplevel/class.cmx \ pretyping/recordops.cmx kernel/term.cmx kernel/type_errors.cmx \ lib/util.cmx toplevel/record.cmi toplevel/recordobj.cmo: pretyping/classops.cmi library/declare.cmi \ - kernel/evd.cmi library/global.cmi kernel/instantiate.cmi library/lib.cmi \ - kernel/names.cmi lib/pp.cmi parsing/printer.cmi pretyping/recordops.cmi \ - kernel/term.cmi lib/util.cmi toplevel/recordobj.cmi + library/global.cmi kernel/instantiate.cmi library/lib.cmi \ + kernel/names.cmi lib/pp.cmi pretyping/recordops.cmi kernel/term.cmi \ + lib/util.cmi toplevel/recordobj.cmi toplevel/recordobj.cmx: pretyping/classops.cmx library/declare.cmx \ - kernel/evd.cmx library/global.cmx kernel/instantiate.cmx library/lib.cmx \ - kernel/names.cmx lib/pp.cmx parsing/printer.cmx pretyping/recordops.cmx \ - kernel/term.cmx lib/util.cmx toplevel/recordobj.cmi + library/global.cmx kernel/instantiate.cmx library/lib.cmx \ + kernel/names.cmx lib/pp.cmx pretyping/recordops.cmx kernel/term.cmx \ + lib/util.cmx toplevel/recordobj.cmi toplevel/toplevel.cmo: parsing/ast.cmi toplevel/errors.cmi library/lib.cmi \ toplevel/mltop.cmi kernel/names.cmi lib/options.cmi parsing/pcoq.cmi \ proofs/pfedit.cmi lib/pp.cmi toplevel/protectedtoplevel.cmi lib/util.cmi \ @@ -1364,6 +1364,14 @@ toplevel/toplevel.cmx: parsing/ast.cmx toplevel/errors.cmx library/lib.cmx \ toplevel/vernac.cmx toplevel/vernacinterp.cmx toplevel/toplevel.cmi toplevel/usage.cmo: config/coq_config.cmi toplevel/usage.cmi toplevel/usage.cmx: config/coq_config.cmx toplevel/usage.cmi +toplevel/vernac.cmo: parsing/ast.cmi parsing/coqast.cmi library/lib.cmi \ + library/library.cmi kernel/names.cmi lib/options.cmi parsing/pcoq.cmi \ + lib/pp.cmi library/states.cmi lib/system.cmi lib/util.cmi \ + toplevel/vernacinterp.cmi toplevel/vernac.cmi +toplevel/vernac.cmx: parsing/ast.cmx parsing/coqast.cmx library/lib.cmx \ + library/library.cmx kernel/names.cmx lib/options.cmx parsing/pcoq.cmx \ + lib/pp.cmx library/states.cmx lib/system.cmx lib/util.cmx \ + toplevel/vernacinterp.cmx toplevel/vernac.cmi toplevel/vernacentries.cmo: parsing/ast.cmi parsing/astterm.cmi \ toplevel/class.cmi pretyping/classops.cmi toplevel/command.cmi \ parsing/coqast.cmi kernel/declarations.cmi library/declare.cmi \ @@ -1406,14 +1414,16 @@ toplevel/vernacinterp.cmx: parsing/ast.cmx parsing/astterm.cmx \ kernel/names.cmx library/nametab.cmx lib/options.cmx lib/pp.cmx \ proofs/proof_type.cmx proofs/tacinterp.cmx lib/util.cmx \ toplevel/vernacinterp.cmi -toplevel/vernac.cmo: parsing/ast.cmi parsing/coqast.cmi library/lib.cmi \ - library/library.cmi kernel/names.cmi lib/options.cmi parsing/pcoq.cmi \ - lib/pp.cmi library/states.cmi lib/system.cmi lib/util.cmi \ - toplevel/vernacinterp.cmi toplevel/vernac.cmi -toplevel/vernac.cmx: parsing/ast.cmx parsing/coqast.cmx library/lib.cmx \ - library/library.cmx kernel/names.cmx lib/options.cmx parsing/pcoq.cmx \ - lib/pp.cmx library/states.cmx lib/system.cmx lib/util.cmx \ - toplevel/vernacinterp.cmx toplevel/vernac.cmi +contrib/correctness/pcic.cmo: parsing/ast.cmi kernel/declarations.cmi \ + library/declare.cmi pretyping/detyping.cmi kernel/names.cmi \ + library/nametab.cmi contrib/correctness/past.cmi \ + contrib/correctness/pmisc.cmi pretyping/rawterm.cmi toplevel/record.cmi \ + kernel/sign.cmi kernel/term.cmi lib/util.cmi contrib/correctness/pcic.cmi +contrib/correctness/pcic.cmx: parsing/ast.cmx kernel/declarations.cmx \ + library/declare.cmx pretyping/detyping.cmx kernel/names.cmx \ + library/nametab.cmx contrib/correctness/past.cmi \ + contrib/correctness/pmisc.cmx pretyping/rawterm.cmx toplevel/record.cmx \ + kernel/sign.cmx kernel/term.cmx lib/util.cmx contrib/correctness/pcic.cmi contrib/correctness/pcicenv.cmo: library/global.cmi kernel/names.cmi \ contrib/correctness/past.cmi contrib/correctness/penv.cmi \ contrib/correctness/pmisc.cmi contrib/correctness/pmonad.cmi \ @@ -1426,16 +1436,6 @@ contrib/correctness/pcicenv.cmx: library/global.cmx kernel/names.cmx \ contrib/correctness/prename.cmx contrib/correctness/ptype.cmi \ contrib/correctness/putil.cmx kernel/sign.cmx kernel/term.cmx \ kernel/univ.cmx contrib/correctness/pcicenv.cmi -contrib/correctness/pcic.cmo: parsing/ast.cmi kernel/declarations.cmi \ - library/declare.cmi pretyping/detyping.cmi kernel/names.cmi \ - library/nametab.cmi contrib/correctness/past.cmi \ - contrib/correctness/pmisc.cmi pretyping/rawterm.cmi toplevel/record.cmi \ - kernel/sign.cmi kernel/term.cmi lib/util.cmi contrib/correctness/pcic.cmi -contrib/correctness/pcic.cmx: parsing/ast.cmx kernel/declarations.cmx \ - library/declare.cmx pretyping/detyping.cmx kernel/names.cmx \ - library/nametab.cmx contrib/correctness/past.cmi \ - contrib/correctness/pmisc.cmx pretyping/rawterm.cmx toplevel/record.cmx \ - kernel/sign.cmx kernel/term.cmx lib/util.cmx contrib/correctness/pcic.cmi contrib/correctness/pdb.cmo: library/declare.cmi library/global.cmi \ kernel/names.cmi library/nametab.cmi contrib/correctness/past.cmi \ contrib/correctness/peffect.cmi contrib/correctness/penv.cmi \ @@ -1652,28 +1652,30 @@ contrib/extraction/extract_env.cmo: parsing/astterm.cmi kernel/evd.cmi \ library/library.cmi contrib/extraction/miniml.cmi \ contrib/extraction/mlutil.cmi kernel/names.cmi library/nametab.cmi \ contrib/extraction/ocaml.cmi lib/pp.cmi parsing/printer.cmi \ - kernel/term.cmi lib/util.cmi toplevel/vernacinterp.cmi \ - contrib/extraction/extract_env.cmi + contrib/extraction/table.cmi kernel/term.cmi lib/util.cmi \ + toplevel/vernacinterp.cmi contrib/extraction/extract_env.cmi contrib/extraction/extract_env.cmx: parsing/astterm.cmx kernel/evd.cmx \ contrib/extraction/extraction.cmx library/global.cmx \ contrib/extraction/haskell.cmx library/lib.cmx library/libobject.cmx \ library/library.cmx contrib/extraction/miniml.cmi \ contrib/extraction/mlutil.cmx kernel/names.cmx library/nametab.cmx \ contrib/extraction/ocaml.cmx lib/pp.cmx parsing/printer.cmx \ - kernel/term.cmx lib/util.cmx toplevel/vernacinterp.cmx \ - contrib/extraction/extract_env.cmi + contrib/extraction/table.cmx kernel/term.cmx lib/util.cmx \ + toplevel/vernacinterp.cmx contrib/extraction/extract_env.cmi contrib/extraction/extraction.cmo: kernel/closure.cmi kernel/declarations.cmi \ kernel/environ.cmi kernel/evd.cmi library/global.cmi lib/gmap.cmi \ kernel/inductive.cmi kernel/instantiate.cmi contrib/extraction/miniml.cmi \ contrib/extraction/mlutil.cmi kernel/names.cmi lib/pp.cmi \ kernel/reduction.cmi pretyping/retyping.cmi library/summary.cmi \ - kernel/term.cmi lib/util.cmi contrib/extraction/extraction.cmi + contrib/extraction/table.cmi kernel/term.cmi lib/util.cmi \ + contrib/extraction/extraction.cmi contrib/extraction/extraction.cmx: kernel/closure.cmx kernel/declarations.cmx \ kernel/environ.cmx kernel/evd.cmx library/global.cmx lib/gmap.cmx \ kernel/inductive.cmx kernel/instantiate.cmx contrib/extraction/miniml.cmi \ contrib/extraction/mlutil.cmx kernel/names.cmx lib/pp.cmx \ kernel/reduction.cmx pretyping/retyping.cmx library/summary.cmx \ - kernel/term.cmx lib/util.cmx contrib/extraction/extraction.cmi + contrib/extraction/table.cmx kernel/term.cmx lib/util.cmx \ + contrib/extraction/extraction.cmi contrib/extraction/haskell.cmo: kernel/environ.cmi library/global.cmi \ contrib/extraction/miniml.cmi contrib/extraction/mlutil.cmi \ kernel/names.cmi contrib/extraction/ocaml.cmi lib/options.cmi lib/pp.cmi \ @@ -1684,26 +1686,34 @@ contrib/extraction/haskell.cmx: kernel/environ.cmx library/global.cmx \ kernel/names.cmx contrib/extraction/ocaml.cmx lib/options.cmx lib/pp.cmx \ lib/pp_control.cmx kernel/term.cmx lib/util.cmx \ contrib/extraction/haskell.cmi -contrib/extraction/mlutil.cmo: kernel/declarations.cmi library/global.cmi \ - library/lib.cmi library/libobject.cmi contrib/extraction/miniml.cmi \ - kernel/names.cmi library/nametab.cmi lib/options.cmi lib/pp.cmi \ - parsing/printer.cmi library/summary.cmi kernel/term.cmi lib/util.cmi \ - toplevel/vernacinterp.cmi contrib/extraction/mlutil.cmi -contrib/extraction/mlutil.cmx: kernel/declarations.cmx library/global.cmx \ - library/lib.cmx library/libobject.cmx contrib/extraction/miniml.cmi \ - kernel/names.cmx library/nametab.cmx lib/options.cmx lib/pp.cmx \ - parsing/printer.cmx library/summary.cmx kernel/term.cmx lib/util.cmx \ - toplevel/vernacinterp.cmx contrib/extraction/mlutil.cmi +contrib/extraction/mlutil.cmo: kernel/declarations.cmi \ + contrib/extraction/miniml.cmi kernel/names.cmi lib/pp.cmi \ + parsing/printer.cmi contrib/extraction/table.cmi kernel/term.cmi \ + lib/util.cmi contrib/extraction/mlutil.cmi +contrib/extraction/mlutil.cmx: kernel/declarations.cmx \ + contrib/extraction/miniml.cmi kernel/names.cmx lib/pp.cmx \ + parsing/printer.cmx contrib/extraction/table.cmx kernel/term.cmx \ + lib/util.cmx contrib/extraction/mlutil.cmi contrib/extraction/ocaml.cmo: kernel/environ.cmi library/global.cmi \ contrib/extraction/miniml.cmi contrib/extraction/mlutil.cmi \ kernel/names.cmi lib/options.cmi lib/pp.cmi lib/pp_control.cmi \ - parsing/printer.cmi kernel/term.cmi lib/util.cmi \ - contrib/extraction/ocaml.cmi + parsing/printer.cmi contrib/extraction/table.cmi kernel/term.cmi \ + lib/util.cmi contrib/extraction/ocaml.cmi contrib/extraction/ocaml.cmx: kernel/environ.cmx library/global.cmx \ contrib/extraction/miniml.cmi contrib/extraction/mlutil.cmx \ kernel/names.cmx lib/options.cmx lib/pp.cmx lib/pp_control.cmx \ - parsing/printer.cmx kernel/term.cmx lib/util.cmx \ - contrib/extraction/ocaml.cmi + parsing/printer.cmx contrib/extraction/table.cmx kernel/term.cmx \ + lib/util.cmx contrib/extraction/ocaml.cmi +contrib/extraction/table.cmo: kernel/declarations.cmi library/global.cmi \ + library/goptions.cmi library/lib.cmi library/libobject.cmi \ + kernel/names.cmi library/nametab.cmi lib/pp.cmi parsing/printer.cmi \ + library/summary.cmi kernel/term.cmi lib/util.cmi \ + toplevel/vernacinterp.cmi contrib/extraction/table.cmi +contrib/extraction/table.cmx: kernel/declarations.cmx library/global.cmx \ + library/goptions.cmx library/lib.cmx library/libobject.cmx \ + kernel/names.cmx library/nametab.cmx lib/pp.cmx parsing/printer.cmx \ + library/summary.cmx kernel/term.cmx lib/util.cmx \ + toplevel/vernacinterp.cmx contrib/extraction/table.cmi contrib/field/field.cmo: parsing/astterm.cmi parsing/coqast.cmi \ library/declare.cmi kernel/evd.cmi library/global.cmi library/lib.cmi \ library/libobject.cmi kernel/names.cmi library/nametab.cmi \ @@ -1831,31 +1841,21 @@ contrib/interface/parse.cmx: contrib/interface/ascent.cmi \ contrib/interface/paths.cmo: contrib/interface/paths.cmi contrib/interface/paths.cmx: contrib/interface/paths.cmi contrib/interface/pbp.cmo: parsing/coqlib.cmi contrib/interface/ctast.cmo \ - library/declare.cmi kernel/environ.cmi kernel/evd.cmi library/global.cmi \ - tactics/hipattern.cmi proofs/logic.cmi kernel/names.cmi \ - library/nametab.cmi pretyping/pattern.cmi lib/pp.cmi \ - pretyping/pretyping.cmi proofs/proof_trees.cmi proofs/proof_type.cmi \ - pretyping/rawterm.cmi kernel/reduction.cmi proofs/tacinterp.cmi \ - proofs/tacmach.cmi tactics/tacticals.cmi tactics/tactics.cmi \ - kernel/term.cmi pretyping/typing.cmi lib/util.cmi \ - contrib/interface/pbp.cmi + library/declare.cmi kernel/environ.cmi tactics/hipattern.cmi \ + proofs/logic.cmi kernel/names.cmi library/nametab.cmi \ + pretyping/pattern.cmi lib/pp.cmi pretyping/pretyping.cmi \ + proofs/proof_trees.cmi proofs/proof_type.cmi pretyping/rawterm.cmi \ + kernel/reduction.cmi proofs/tacinterp.cmi proofs/tacmach.cmi \ + tactics/tacticals.cmi tactics/tactics.cmi kernel/term.cmi \ + pretyping/typing.cmi lib/util.cmi contrib/interface/pbp.cmi contrib/interface/pbp.cmx: parsing/coqlib.cmx contrib/interface/ctast.cmx \ - library/declare.cmx kernel/environ.cmx kernel/evd.cmx library/global.cmx \ - tactics/hipattern.cmx proofs/logic.cmx kernel/names.cmx \ - library/nametab.cmx pretyping/pattern.cmx lib/pp.cmx \ - pretyping/pretyping.cmx proofs/proof_trees.cmx proofs/proof_type.cmx \ - pretyping/rawterm.cmx kernel/reduction.cmx proofs/tacinterp.cmx \ - proofs/tacmach.cmx tactics/tacticals.cmx tactics/tactics.cmx \ - kernel/term.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 + library/declare.cmx kernel/environ.cmx tactics/hipattern.cmx \ + proofs/logic.cmx kernel/names.cmx library/nametab.cmx \ + pretyping/pattern.cmx lib/pp.cmx pretyping/pretyping.cmx \ + proofs/proof_trees.cmx proofs/proof_type.cmx pretyping/rawterm.cmx \ + kernel/reduction.cmx proofs/tacinterp.cmx proofs/tacmach.cmx \ + tactics/tacticals.cmx tactics/tactics.cmx kernel/term.cmx \ + pretyping/typing.cmx lib/util.cmx contrib/interface/pbp.cmi contrib/interface/showproof.cmo: parsing/ast.cmi parsing/astterm.cmi \ proofs/clenv.cmi parsing/coqast.cmi kernel/declarations.cmi \ kernel/environ.cmi kernel/evd.cmi library/global.cmi kernel/inductive.cmi \ @@ -1874,6 +1874,14 @@ contrib/interface/showproof.cmx: parsing/ast.cmx parsing/astterm.cmx \ proofs/tacmach.cmx kernel/term.cmx parsing/termast.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 \ contrib/interface/ctast.cmo kernel/environ.cmi pretyping/evarutil.cmi \ kernel/evd.cmi library/libobject.cmi library/library.cmi kernel/names.cmi \ @@ -1966,6 +1974,8 @@ contrib/romega/refl_omega.cmx: parsing/ast.cmx tactics/auto.cmx \ parsing/printer.cmx proofs/proof_type.cmx kernel/reduction.cmx \ kernel/sign.cmx proofs/tacmach.cmx tactics/tacticals.cmx \ tactics/tactics.cmx kernel/term.cmx lib/util.cmx +contrib/xml/xml.cmo: contrib/xml/xml.cmi +contrib/xml/xml.cmx: contrib/xml/xml.cmi contrib/xml/xmlcommand.cmo: kernel/declarations.cmi library/declare.cmi \ kernel/environ.cmi kernel/evd.cmi library/global.cmi library/lib.cmi \ library/libobject.cmi library/library.cmi kernel/names.cmi \ @@ -1984,8 +1994,6 @@ contrib/xml/xmlentries.cmo: lib/util.cmi toplevel/vernacinterp.cmi \ contrib/xml/xmlcommand.cmi contrib/xml/xmlentries.cmx: lib/util.cmx toplevel/vernacinterp.cmx \ contrib/xml/xmlcommand.cmx -contrib/xml/xml.cmo: contrib/xml/xml.cmi -contrib/xml/xml.cmx: contrib/xml/xml.cmi tactics/tauto.cmo: parsing/grammar.cma kernel/names.cmo parsing/ast.cmo parsing/g_tactic.cmo parsing/g_ltac.cmo parsing/g_constr.cmo contrib/correctness/psyntax.cmo: parsing/grammar.cma contrib/field/field.cmo: parsing/grammar.cma kernel/names.cmo parsing/ast.cmo parsing/g_tactic.cmo parsing/g_ltac.cmo parsing/g_constr.cmo @@ -197,7 +197,9 @@ XMLCMO=contrib/xml/xml.cmo \ FOURIERCMO=contrib/fourier/fourier.cmo contrib/fourier/fourierR.cmo -EXTRACTIONCMO=contrib/extraction/mlutil.cmo contrib/extraction/ocaml.cmo \ +EXTRACTIONCMO=contrib/extraction/table.cmo\ + contrib/extraction/mlutil.cmo\ + contrib/extraction/ocaml.cmo \ contrib/extraction/haskell.cmo \ contrib/extraction/extraction.cmo \ contrib/extraction/extract_env.cmo diff --git a/contrib/extraction/Extraction.v b/contrib/extraction/Extraction.v index f32b3e96db..51574bda0d 100644 --- a/contrib/extraction/Extraction.v +++ b/contrib/extraction/Extraction.v @@ -16,34 +16,42 @@ Grammar vernac vernac : ast := (* Monolithic extraction to a file *) | extr_file - [ "Extraction" stringarg($f) options($o) ne_qualidarg_list($l) "." ] - -> [ (ExtractionFile "ocaml" $o $f ($LIST $l)) ] + [ "Extraction" stringarg($f) ne_qualidarg_list($l) "." ] + -> [ (ExtractionFile "ocaml" $f ($LIST $l)) ] | haskell_extr_file - [ "Haskell" "Extraction" stringarg($f) options($o) - ne_qualidarg_list($l) "." ] - -> [ (ExtractionFile "haskell" $o $f ($LIST $l)) ] + [ "Haskell" "Extraction" stringarg($f) ne_qualidarg_list($l) "." ] + -> [ (ExtractionFile "haskell" $f ($LIST $l)) ] (* Modular extraction (one Coq module = one ML module) *) | extr_module - [ "Extraction" "Module" options($o) identarg($m) "." ] - -> [ (ExtractionModule "ocaml" $o $m) ] + [ "Extraction" "Module" identarg($m) "." ] + -> [ (ExtractionModule "ocaml" $m) ] | haskell_extr_module - [ "Haskell" "Extraction" "Module" options($o) identarg($m) "." ] - -> [ (ExtractionModule "haskell" $o $m) ] + [ "Haskell" "Extraction" "Module" identarg($m) "." ] + -> [ (ExtractionModule "haskell" $m) ] + +(* Custum inlining directives *) +| inline_constant + [ "Extraction" "Inline" ne_qualidarg_list($l) "." ] + -> [ (ExtractionInline ($LIST $l)) ] + +| no_inline_constant + [ "Extraction" "NoInline" ne_qualidarg_list($l) "." ] + -> [ (ExtractionNoInline ($LIST $l)) ] (* Overriding of a Coq object by an ML one *) | extract_constant [ "Extract" "Constant" qualidarg($x) "=>" idorstring($y) "." ] - -> [ (EXTRACT_CONSTANT $x $y) ] + -> [ (ExtractConstant $x $y) ] | extract_inlined_constant [ "Extract" "Inlined" "Constant" qualidarg($x) "=>" idorstring($y) "." ] - -> [ (EXTRACT_INLINED_CONSTANT $x $y) ] + -> [ (ExtractInlinedConstant $x $y) ] | extract_inductive [ "Extract" "Inductive" qualidarg($x) "=>" mindnames($y) "."] - -> [ (EXTRACT_INDUCTIVE $x $y) ] + -> [ (ExtractInductive $x $y) ] (* Utility entries *) with mindnames : ast := @@ -57,9 +65,4 @@ with idorstring_list: ast list := with idorstring : ast := ids_ident [ identarg($id) ] -> [ $id ] | ids_string [ stringarg($s) ] -> [ $s ] - -with options : ast := -| ext_opt_noopt [ "[" "noopt" "]" ] -> [ (VERNACARGLIST "noopt") ] -| ext_op_expand [ "[" "expand" ne_qualidarg_list($l) "]" ] -> - [ (VERNACARGLIST "expand" ($LIST $l)) ] -| ext_opt_none [ ] -> [ (VERNACARGLIST "nooption") ]. +.
\ No newline at end of file diff --git a/contrib/extraction/extract_env.ml b/contrib/extraction/extract_env.ml index d726d4fa33..02e2da7419 100644 --- a/contrib/extraction/extract_env.ml +++ b/contrib/extraction/extract_env.ml @@ -15,7 +15,9 @@ open Term open Lib open Extraction open Miniml +open Table open Mlutil +open Vernacinterp (*s Recursive computation of the global references to extract. We use a set of functions visiting the extracted objects in @@ -85,6 +87,7 @@ and visit_decl eenv = function visit_type eenv t | Dglob (_,a) -> visit_ast eenv a + | Dcustom _ -> () (*s Recursive extracted environment for a list of reference: we just iterate [visit_reference] on the list, starting with an empty @@ -110,17 +113,16 @@ end module Pp = Ocaml.Make(ToplevelParams) -open Vernacinterp - let refs_set_of_list l = List.fold_right Refset.add l Refset.empty let decl_of_refs refs = - let params = - { modular = false ; module_name = "" ; - optimization = true ; to_keep = refs_set_of_list refs; - to_expand = Refset.empty } in - let rl = List.map extract_declaration (extract_env refs) in - optimize params rl + List.map extract_declaration (extract_env refs) + +let local_optimize refs = + let prm = + { strict = true ; modular = false ; + module_name = "" ; to_appear = refs} in + optimize prm (decl_of_refs refs) let print_user_extract r = mSGNL [< 'sTR "User defined extraction:"; 'sPC; 'sTR (find_ml_extraction r) ; 'fNL>] @@ -129,7 +131,7 @@ let extract_reference r = if is_ml_extraction r then print_user_extract r else - mSGNL (Pp.pp_decl (list_last (decl_of_refs [r]))) + mSGNL (Pp.pp_decl (list_last (local_optimize [r]))) let _ = vinterp_add "Extraction" @@ -153,17 +155,6 @@ let _ = \verb!Recursive Extraction! [qualid1] ... [qualidn]. We use [extract_env] to get the saturated environment to extract. *) -let no_such_reference q = - errorlabstrm "reference_of_varg" - [< Nametab.pr_qualid q; 'sTR ": no such reference" >] - -let reference_of_varg = function - | VARG_QUALID q -> - (try Nametab.locate q with Not_found -> no_such_reference q) - | _ -> assert false - -let refs_of_vargl = List.map reference_of_varg - let _ = vinterp_add "ExtractionRec" (fun vl () -> @@ -181,22 +172,6 @@ let strict_language = function | "haskell" -> false | _ -> assert false -let interp_options lang keep modular m = function - | [VARG_STRING "noopt"] -> - { optimization = false; modular = modular; module_name = m; - to_keep = refs_set_of_list keep; to_expand = Refset.empty } - | [VARG_STRING "nooption"] -> - { optimization = strict_language lang; - modular = modular; module_name = m; - to_keep = refs_set_of_list keep; to_expand = Refset.empty } - | VARG_STRING "expand" :: l -> - { optimization = strict_language lang; - modular = modular; module_name = m; - to_keep = refs_set_of_list keep; - to_expand = refs_set_of_list (refs_of_vargl l) } - | _ -> - assert false - (*s Extraction to a file (necessarily recursive). The vernacular command is \verb!Extraction "file"! [qualid1] ... [qualidn]. We just call [extract_to_file] on the saturated environment. *) @@ -212,15 +187,14 @@ let _ = | VARG_STRING lang :: VARG_VARGLIST o :: VARG_STRING f :: vl -> (fun () -> let refs = refs_of_vargl vl in - let prm = interp_options lang refs false "" o in + let prm = {strict=strict_language lang; + modular=false; + module_name=""; + to_appear= refs} in let decls = decl_of_refs refs in + let decls = add_ml_decls prm decls in let decls = optimize prm decls in - let ml_decls = - list_subtract - (List.filter is_ml_extraction refs) - (fst (ml_cst_extractions ())) - in - extract_to_file lang f prm decls ml_decls) + extract_to_file lang f prm decls) | _ -> assert false) (*s Extraction of a module. The vernacular command is \verb!Extraction Module! @@ -246,6 +220,7 @@ let decl_mem rl = function | Dabbrev (r,_,_) -> List.mem r rl | Dtype ((_,r,_)::_, _) -> List.mem r rl | Dtype ([],_) -> false + | Dcustom (r,s) -> List.mem r rl let file_suffix = function | "ocaml" -> ".ml" @@ -260,9 +235,13 @@ let _ = Ocaml.current_module := Some m; let ms = Names.string_of_id m in let f = (String.uncapitalize ms) ^ (file_suffix lang) in - let prm = interp_options lang [] true ms o in + let prm = {strict=strict_language lang; + modular=true; + module_name= Names.string_of_id m; + to_appear= []} in let rl = extract_module m in let decls = optimize prm (decl_of_refs rl) in + let decls = add_ml_decls prm decls in let decls = List.filter (decl_mem rl) decls in - extract_to_file lang f prm decls []) + extract_to_file lang f prm decls) | _ -> assert false) diff --git a/contrib/extraction/extraction.ml b/contrib/extraction/extraction.ml index f5b28598c7..23264fb075 100644 --- a/contrib/extraction/extraction.ml +++ b/contrib/extraction/extraction.ml @@ -18,6 +18,7 @@ open Reduction open Inductive open Instantiate open Miniml +open Table open Mlutil open Closure open Summary @@ -892,7 +893,7 @@ and extract_inductive_declaration sp = (*s Extraction of a global reference i.e. a constant or an inductive. *) let false_rec_sp = path_of_string "Coq.Init.Specif.False_rec" -let false_rec_e = MLlam (prop_name, MLexn (id_of_string "False_rec")) +let false_rec_e = MLlam (prop_name, MLexn "False_rec") let extract_declaration r = match r with | ConstRef sp when sp = false_rec_sp -> Dglob (r, false_rec_e) diff --git a/contrib/extraction/haskell.ml b/contrib/extraction/haskell.ml index 057767f5e6..9549829862 100644 --- a/contrib/extraction/haskell.ml +++ b/contrib/extraction/haskell.ml @@ -196,9 +196,8 @@ let rec pp_expr par env args = | MLfix (i,ids,defs) -> let ids',env' = push_vars (List.rev (Array.to_list ids)) env in pp_fix par env' (Some i) (Array.of_list (List.rev ids'),defs) args - | MLexn id -> - [< open_par par; 'sTR "error"; 'sPC; - 'qS (string_of_id id); close_par par >] + | MLexn str -> + [< open_par par; 'sTR "error"; 'sPC; 'qS str; close_par par >] | MLprop -> string "prop" | MLarity -> @@ -223,10 +222,7 @@ and pp_pat env pv = end; 'sTR " ->"; 'sPC; pp_expr par env' [] t >] in - if pv = [||] then - [< 'sTR "_ -> error \"shouldn't happen\" -- empty inductive" >] - else - [< prvect_with_sep (fun () -> [< 'fNL; 'sTR " " >]) pp_one_pat pv >] + [< prvect_with_sep (fun () -> [< 'fNL; 'sTR " " >]) pp_one_pat pv >] (*s names of the functions ([ids]) are already pushed in [env], and passed here just for convenience. *) @@ -313,6 +309,9 @@ let pp_decl = function [< >] >] | Dglob (r, a) -> hOV 0 [< pp_function (empty_env ()) (pp_global r) a; 'fNL >] + | Dcustom (r,s) -> + hOV 0 [< 'sTR (string_of_r r); 'sTR " ="; + 'sPC; 'sTR s; 'fNL >] let pp_type = pp_type false @@ -407,23 +406,11 @@ let haskell_preamble prm = 'sTR "type Arity = ()"; 'fNL; 'sTR "arity = ()"; 'fNL; 'fNL >] -let haskell_header ft b ml_decls = - let l,l' = ml_cst_extractions () in - List.iter2 - (fun r s -> - if (not b) or (Some (module_of_r r) = !current_module) then - pP_with ft (hV 0 - [< 'sTR (string_of_r r); 'sTR " ="; 'sPC; 'sTR s; 'fNL ; 'fNL >])) - ((List.rev l) @ ml_decls) - ((List.rev l') @ (List.map find_ml_extraction ml_decls)) - - -let extract_to_file f prm decls ml_decls= +let extract_to_file f prm decls= let pp_decl = if prm.modular then ModularPp.pp_decl else MonoPp.pp_decl in let cout = open_out f in let ft = Pp_control.with_output_to cout in pP_with ft (hV 0 (haskell_preamble prm)); - haskell_header ft prm.modular ml_decls; begin try List.iter (fun d -> mSGNL_with ft (pp_decl d)) decls diff --git a/contrib/extraction/haskell.mli b/contrib/extraction/haskell.mli index 4f380271f5..fa10cb1bd9 100644 --- a/contrib/extraction/haskell.mli +++ b/contrib/extraction/haskell.mli @@ -15,4 +15,4 @@ open Mlutil open Names val extract_to_file : - string -> extraction_params -> ml_decl list -> global_reference list -> unit + string -> extraction_params -> ml_decl list -> unit diff --git a/contrib/extraction/miniml.mli b/contrib/extraction/miniml.mli index c2ed8e7a97..d8a9597e18 100644 --- a/contrib/extraction/miniml.mli +++ b/contrib/extraction/miniml.mli @@ -40,7 +40,7 @@ type ml_ast = | MLcons of global_reference * ml_ast list | MLcase of ml_ast * (global_reference * identifier list * ml_ast) array | MLfix of int * identifier array * ml_ast array - | MLexn of identifier + | MLexn of string | MLprop | MLarity | MLcast of ml_ast * ml_type @@ -52,6 +52,7 @@ type ml_decl = | Dtype of ml_ind list * bool (* cofix *) | Dabbrev of global_reference * identifier list * ml_type | Dglob of global_reference * ml_ast + | Dcustom of global_reference * string (*s Pretty-printing of MiniML in a given concrete syntax is parameterized by a function [pp_global] that pretty-prints global references. diff --git a/contrib/extraction/mlutil.ml b/contrib/extraction/mlutil.ml index cb555a67a4..649d816f6d 100644 --- a/contrib/extraction/mlutil.ml +++ b/contrib/extraction/mlutil.ml @@ -9,14 +9,12 @@ (*i $Id$ i*) open Pp -open Options open Names open Term open Declarations -open Libobject -open Lib open Util open Miniml +open Table (*s Dummy names. *) @@ -218,12 +216,10 @@ let check_identity_case br = check_list (List.length l) l' | _ -> raise Impossible in - if br=[||] then raise Impossible; Array.iter check_one_branch br let check_constant_case br = - if br = [||] then raise Impossible; let (r,l,t) = br.(0) in let n = List.length l in if occurs_itvl 1 n t then raise Impossible; @@ -234,7 +230,19 @@ let check_constant_case br = if (occurs_itvl 1 n t) || (cst <> (ml_lift (-n) t)) then raise Impossible done; cst - + + +let all_constr br = + try + Array.iter + (fun (_,_,t)-> + match t with + | MLcons _ -> () + | _ -> raise Impossible) + br; + true + with Impossible -> false + let rec betaiota = function | MLapp (f, []) -> @@ -261,26 +269,37 @@ let rec betaiota = function (fun (n,l,t) -> let k = List.length l in let a'' = List.map (ml_lift k) a' in - (n, l, betaiota (MLapp (t,a'')))) + (n, l, betaiota (MLapp (t,a'')))) br - in - betaiota (MLcase (e,br')) + in betaiota (MLcase (e,br')) | _ -> MLapp (f',a')) + | MLcase (e,[||]) -> + MLexn "Empty inductive" | MLcase (e,br) -> (match betaiota e with - (* iota redex *) - | MLcons (r,a) -> - let j = constructor_index r in - let (_,ids,c) = br.(j) in + (* iota redex *) + | MLcons (r,a) -> + let (_,ids,c) = br.(constructor_index r) in let c' = List.fold_right (fun id t -> MLlam (id,t)) ids c in betaiota (MLapp (c',a)) + | MLcase(e',br') when (all_constr br') -> + let new_br= + Array.map + (function + | (n, i, MLcons (r,a))-> + let (_,ids,c) = br.(constructor_index r) in + let c = ml_lift (List.length i) c in + let c' = List.fold_right (fun id t -> MLlam (id,t)) ids c in + (n,i,betaiota (MLapp (c',a))) + | _ -> assert false) br' + in MLcase(e', new_br) | e' -> let br' = Array.map (fun (n,l,t) -> (n,l,betaiota t)) br in - try check_identity_case br'; e' - with Impossible -> - try check_constant_case br' - with Impossible -> MLcase (e', br')) + try check_identity_case br'; e' + with Impossible -> + try check_constant_case br' + with Impossible -> MLcase (e', br')) | MLletin(_,c,e) when (is_atomic c) || (nb_occur e <= 1) -> (* expansion of a letin in special cases *) betaiota (ml_subst c e) @@ -289,23 +308,12 @@ let rec betaiota = function let normalize a = betaiota (merge_app a) +let optional_normalize a = a (* TODO *) + let normalize_decl = function | Dglob (id, a) -> Dglob (id, normalize a) | d -> d -(*s Extraction parameters *) - -module Refset = - Set.Make(struct type t = global_reference let compare = compare end) - -type extraction_params = { - modular : bool; (* modular extraction *) - module_name : string; (* module name if [modular] *) - optimization : bool; (* we need optimization *) - to_keep : Refset.t; (* globals to keep *) - to_expand : Refset.t; (* globals to expand *) -} - (*s Utility functions used for the decision of expansion *) let rec ml_size = function @@ -344,7 +352,7 @@ exception Toplevel let lift n l = List.map ((+) n) l -let pop n l = List.map (fun x -> if x-n<0 then raise Toplevel else x-n) l +let pop n l = List.map (fun x -> if x<=n then raise Toplevel else x-n) l (* This function returns a list of de Bruijn indices of non-strict variables, or raises [Toplevel] if it has an internal non-strict variable. @@ -361,10 +369,11 @@ let rec non_stricts add cand = function pop 1 (non_stricts add cand t) | MLrel n -> List.filter ((<>) n) cand -(*i old particular case | MLapp (MLrel n, _) -> - List.filter ((<>) n) cand - (* In [(x y)] we say that only x is strict. (WHY?) *) i*) + List.filter ((<>) n) cand + (* In [(x y)] we say that only x is strict. Cf [sig_rec]. + We may gain something if x is replaced by a function like + a projection *) | MLapp (t,l)-> let cand = non_stricts false cand t in List.fold_left (non_stricts false) cand l @@ -412,30 +421,31 @@ let is_not_strict t = If we could expand [t] (the user said nothing special), should we expand ? - We don't expand fixpoints, but always inductive constructors. - Last case of expansion is a term not to big with at least one - non-strict variable (i.e. a variable that may not be evaluated). *) + We don't expand fixpoints, but always inductive constructors + and small terms. + Last case of expansion is a term with at least one non-strict + variable (i.e. a variable that may not be evaluated). *) let expansion_test t = (not (is_fix t)) && - ((is_constr t) - || - (ml_size t < 10 && is_not_strict t)) + ((is_constr t) || + (ml_size t < 3) || + ((ml_size t < 12) && (is_not_strict t))) (* If the user doesn't say he wants to keep [t], we expand in two cases: \begin{itemize} \item the user explicitly requests it \item [expansion_test] answers that the expansion is a good idea, and - we are free to act (no [noopt] given as argument) + we are free to act (AutoInline is set) \end{itemize} *) -let expand prm r t = - (not (Refset.mem r prm.to_keep)) (* the user DOES want to keep it *) +let expand strict_lang r t = + (not (to_keep r)) (* the user DOES want to keep it *) && - (Refset.mem r prm.to_expand (* the user DOES want to expand it *) + ((to_inline r) (* the user DOES want to expand it *) || - (prm.optimization && expansion_test t)) + (auto_inline () && strict_lang && expansion_test t)) (*s Optimization *) @@ -450,178 +460,47 @@ let subst_glob_decl r m = function | Dglob(r',t') -> Dglob(r', subst_glob_ast r m t') | d -> d -let warning_expansion r = +let warning_expansion r t= wARN (hOV 0 [< 'sTR "The constant"; 'sPC; - Printer.pr_global r; 'sPC; 'sTR "is expanded." >]) + Printer.pr_global r; + 'sTR (" of size "^ (string_of_int (ml_size t))^" "); + 'sPC; 'sTR "is expanded." >]) + +type extraction_params = + { strict : bool ; + modular : bool ; + module_name : string ; + to_appear : global_reference list } + +let print_ml_decl prm (r,_) = + not (to_inline r) || List.mem r prm.to_appear + +let add_ml_decls prm decls = + let l = sorted_ml_extractions () in + let l = List.filter (print_ml_decl prm) l in + let l = List.map (fun (r,s)-> Dcustom (r,s)) l in + (List.rev l @ decls) let rec optimize prm = function | [] -> [] - | (Dtype _ | Dabbrev _) as d :: l -> + | (Dtype _ | Dabbrev _ | Dcustom _) as d :: l -> d :: (optimize prm l) | Dglob (r, MLprop) as d :: l -> - if Refset.mem r prm.to_keep then + if List.mem r prm.to_appear then d :: (optimize prm l) else optimize prm l - (*i - | Dglob(id,(MLexn _ as t)) as d :: l -> - let l' = List.map (expand (id,t)) l in optimize prm l' - i*) | Dglob (r,t) :: l -> let t = normalize t in - let b = expand prm r t in + let t = if optim() then optional_normalize t else t in + let b = expand prm.strict r t in let l = if b then begin - if_verbose warning_expansion r; + (*i if_verbose i*) warning_expansion r t; List.map (subst_glob_decl r t) l end else l in - if prm.modular || l = [] || not b then + if prm.modular || List.mem r prm.to_appear || not b then Dglob (r,t) :: (optimize prm l) else optimize prm l - -(*s Table for direct ML extractions. *) - -module Refmap = - Map.Make(struct type t = global_reference let compare = compare end) - -let empty_extractions = (Refmap.empty, Refset.empty) - -let extractions = ref empty_extractions - -let ml_extractions () = snd !extractions - -let add_ml_extraction r s = - let (map,set) = !extractions in - extractions := (Refmap.add r s map, Refset.add r set) - -let is_ml_extraction r = Refset.mem r (snd !extractions) - -let find_ml_extraction r = Refmap.find r (fst !extractions) - -(*s Registration of operations for rollback. *) - -let (in_ml_extraction,_) = - declare_object ("ML extractions", - { cache_function = (fun (_,(r,s)) -> add_ml_extraction r s); - load_function = (fun (_,(r,s)) -> add_ml_extraction r s); - open_function = (fun _ -> ()); - export_function = (fun x -> Some x) }) - -(*s Registration of the table for rollback. *) - -open Summary - -let _ = declare_summary "ML extractions" - { freeze_function = (fun () -> !extractions); - unfreeze_function = ((:=) extractions); - init_function = (fun () -> extractions := empty_extractions); - survive_section = true } - -(*s List of Extract Constant directives *) - -let cst_extractions = ref ([],[]) - -let ml_cst_extractions () = !cst_extractions - -let add_ml_cst_extraction r s = - let l,l' = !cst_extractions in - cst_extractions := r::l,s::l' - -let (in_ml_cst_extraction,_) = - declare_object ("ML constants extractions", - { cache_function = (fun (_,(r,s)) -> add_ml_cst_extraction r s); - load_function = (fun (_,(r,s)) -> add_ml_cst_extraction r s); - open_function = (fun _ -> ()); - export_function = (fun x -> Some x) }) - -let _ = declare_summary "ML constants extractions" - { freeze_function = (fun () -> !cst_extractions); - unfreeze_function = ((:=) cst_extractions); - init_function = (fun () -> cst_extractions := [],[]); - survive_section = true } - -(*s Grammar entries. *) - -open Vernacinterp - -let string_of_varg = function - | VARG_IDENTIFIER id -> string_of_id id - | VARG_STRING s -> s - | _ -> assert false - -let no_such_reference q = - errorlabstrm "reference_of_varg" - [< Nametab.pr_qualid q; 'sTR ": no such reference" >] - -let reference_of_varg = function - | VARG_QUALID q -> - (try Nametab.locate q with Not_found -> no_such_reference q) - | _ -> assert false - -(*s \verb!Extract Constant qualid => string! *) - -let extract_constant r s = match r with - | ConstRef sp -> - let rs = string_of_id (basename sp) in - add_anonymous_leaf (in_ml_cst_extraction (r,s)); - add_anonymous_leaf (in_ml_extraction (r,rs)) - | _ -> - errorlabstrm "extract_constant" - [< Printer.pr_global r; 'sPC; 'sTR "is not a constant" >] - -let _ = - vinterp_add "EXTRACT_CONSTANT" - (function - | [id; s] -> - (fun () -> - extract_constant - (reference_of_varg id) - (string_of_varg s)) - | _ -> assert false) - -(*s \verb!Extract Inlined Constant qualid => string! *) - -let extract_inlined_constant r s = match r with - | ConstRef _ -> - add_anonymous_leaf (in_ml_extraction (r,s)) - | _ -> - errorlabstrm "extract_constant" - [< Printer.pr_global r; 'sPC; 'sTR "is not a constant" >] - -let _ = - vinterp_add "EXTRACT_INLINED_CONSTANT" - (function - | [id; s] -> - (fun () -> - extract_inlined_constant - (reference_of_varg id) - (string_of_varg s)) - | _ -> assert false) - -(*s \verb!Extract Inductive qualid => string [ string ... string ]! *) - -let extract_inductive r (id2,l2) = match r with - | IndRef ((sp,i) as ip) -> - let mib = Global.lookup_mind sp in - let n = Array.length mib.mind_packets.(i).mind_consnames in - if n <> List.length l2 then - error "not the right number of constructors"; - add_anonymous_leaf (in_ml_extraction (r,id2)); - list_iter_i - (fun j s -> - add_anonymous_leaf - (in_ml_extraction (ConstructRef (ip,succ j),s))) l2 - | _ -> - errorlabstrm "extract_inductive" - [< Printer.pr_global r; 'sPC; 'sTR "is not an inductive type" >] - -let _ = - vinterp_add "EXTRACT_INDUCTIVE" - (function - | [q1; VARG_VARGLIST (id2 :: l2)] -> - (fun () -> - extract_inductive (reference_of_varg q1) - (string_of_varg id2, List.map string_of_varg l2)) - | _ -> assert false) diff --git a/contrib/extraction/mlutil.mli b/contrib/extraction/mlutil.mli index 6f7168ed07..27608c46fe 100644 --- a/contrib/extraction/mlutil.mli +++ b/contrib/extraction/mlutil.mli @@ -50,30 +50,17 @@ val subst_glob_ast : global_reference -> ml_ast -> ml_ast -> ml_ast val normalize : ml_ast -> ml_ast val normalize_decl : ml_decl -> ml_decl -(*s Extraction parameters *) - -module Refset : Set.S with type elt = global_reference - -type extraction_params = { - modular : bool; (* modular extraction *) - module_name : string; (* module name if [modular] *) - optimization : bool; (* we need optimization *) - to_keep : Refset.t; (* globals to keep *) - to_expand : Refset.t; (* globals to expand *) -} - (*s Optimization. *) -val optimize : extraction_params -> ml_decl list -> ml_decl list - -(*s Table for direct extractions to ML values. *) - -val is_ml_extraction : global_reference -> bool -val find_ml_extraction : global_reference -> string +type extraction_params = + { strict : bool; + modular : bool; + module_name : string; + to_appear : global_reference list } -val ml_extractions : unit -> Refset.t +val add_ml_decls : + extraction_params -> ml_decl list -> ml_decl list -(* List of Extract Constant directives *) +val optimize : + extraction_params -> ml_decl list -> ml_decl list -val ml_cst_extractions : - unit -> global_reference list * string list diff --git a/contrib/extraction/ocaml.ml b/contrib/extraction/ocaml.ml index 81d77741b0..e50b087442 100644 --- a/contrib/extraction/ocaml.ml +++ b/contrib/extraction/ocaml.ml @@ -15,6 +15,7 @@ open Util open Names open Term open Miniml +open Table open Mlutil open Options @@ -92,8 +93,10 @@ let module_option r = else (String.capitalize (string_of_id m)) ^ "." let check_ml r d = - try find_ml_extraction r - with Not_found -> d + if to_inline r then d else + try + find_ml_extraction r + with Not_found -> d (*s de Bruijn environments for programs *) @@ -233,9 +236,9 @@ let rec pp_expr par env args = | MLfix (i,ids,defs) -> let ids',env' = push_vars (List.rev (Array.to_list ids)) env in pp_fix par env' (Some i) (Array.of_list (List.rev ids'),defs) args - | MLexn id -> - [< open_par par; 'sTR "failwith"; 'sPC; - 'qS (string_of_id id); close_par par >] + | MLexn str -> + [< open_par par; 'sTR "assert false"; 'sPC; + 'sTR ("(* "^str^" *)"); close_par par >] | MLprop -> string "prop" | MLarity -> @@ -258,10 +261,7 @@ and pp_pat env pv = end; 'sTR " ->"; 'sPC; pp_expr par env' [] t >] in - if pv = [||] then - [< 'sTR "_ -> assert false (* empty inductive *)" >] - else - [< prvect_with_sep (fun () -> [< 'fNL; 'sTR "| " >]) pp_one_pat pv >] + [< prvect_with_sep (fun () -> [< 'fNL; 'sTR "| " >]) pp_one_pat pv >] (*s names of the functions ([ids]) are already pushed in [env], and passed here just for convenience. *) @@ -367,6 +367,9 @@ let pp_decl = function | Dglob (r, a) -> hOV 0 [< 'sTR "let "; pp_function (empty_env ()) (pp_global r) a; 'fNL >] + | Dcustom (r,s) -> + hOV 0 [< 'sTR "let "; 'sTR (string_of_r r); + 'sTR " ="; 'sPC; 'sTR s; 'fNL >] let pp_type = pp_type false @@ -461,23 +464,11 @@ let ocaml_preamble () = 'sTR "type arity = unit"; 'fNL; 'sTR "let arity = ()"; 'fNL; 'fNL >] - -let ocaml_header ft b ml_decls = - let l,l' = ml_cst_extractions () in - List.iter2 - (fun r s -> - if (not b) or (Some (module_of_r r) = !current_module) then - pP_with ft (hV 0 - [< 'sTR "let "; 'sTR (string_of_r r); 'sTR " ="; 'sPC; 'sTR s; 'fNL ; 'fNL >])) - ((List.rev l) @ ml_decls) - ((List.rev l') @ (List.map find_ml_extraction ml_decls)) - -let extract_to_file f prm decls ml_decls = +let extract_to_file f prm decls = let pp_decl = if prm.modular then ModularPp.pp_decl else MonoPp.pp_decl in let cout = open_out f in let ft = Pp_control.with_output_to cout in pP_with ft (hV 0 (ocaml_preamble ())); - ocaml_header ft prm.modular ml_decls; begin try List.iter (fun d -> mSGNL_with ft (pp_decl d)) decls diff --git a/contrib/extraction/ocaml.mli b/contrib/extraction/ocaml.mli index e1325d4814..58ee9b662f 100644 --- a/contrib/extraction/ocaml.mli +++ b/contrib/extraction/ocaml.mli @@ -43,6 +43,6 @@ module Make : functor(P : Mlpp_param) -> Mlpp val current_module : Names.identifier option ref val extract_to_file : - string -> extraction_params -> ml_decl list -> global_reference list -> unit + string -> extraction_params -> ml_decl list -> unit diff --git a/contrib/extraction/table.ml b/contrib/extraction/table.ml new file mode 100644 index 0000000000..85f1887e2a --- /dev/null +++ b/contrib/extraction/table.ml @@ -0,0 +1,203 @@ +(***********************************************************************) +(* v * The Coq Proof Assistant / The Coq Development Team *) +(* <O___,, * INRIA-Rocquencourt & LRI-CNRS-Orsay *) +(* \VV/ *************************************************************) +(* // * This file is distributed under the terms of the *) +(* * GNU Lesser General Public License Version 2.1 *) +(***********************************************************************) + +(*i $Id$ i*) + +open Summary +open Goptions +open Vernacinterp +open Names +open Util +open Pp +open Libobject +open Term +open Declarations +open Lib + +(*s Set and Map over global reference *) + +module Refset = + Set.Make(struct type t = global_reference let compare = compare end) + +module Refmap = + Map.Make(struct type t = global_reference let compare = compare end) + +(*s Auxiliary functions *) + +let check_constant r = match r with + | ConstRef sp -> r + | _ -> errorlabstrm "extract_constant" + [< Printer.pr_global r; 'sPC; 'sTR "is not a constant" >] + +let string_of_varg = function + | VARG_IDENTIFIER id -> string_of_id id + | VARG_STRING s -> s + | _ -> assert false + +let no_such_reference q = + errorlabstrm "reference_of_varg" + [< Nametab.pr_qualid q; 'sTR ": no such reference" >] + +let reference_of_varg = function + | VARG_QUALID q -> + (try Nametab.locate q with Not_found -> no_such_reference q) + | _ -> assert false + +let refs_of_vargl = List.map reference_of_varg + + +(*s AutoInline parameter *) + +let auto_inline_params = + {optsyncname = "Extraction AutoInline"; + optsynckey = SecondaryTable ("Extraction", "AutoInline"); + optsyncdefault = true} + +let auto_inline = declare_sync_bool_option auto_inline_params + +(*s Optimize parameter *) + +let optim_params = + {optsyncname = "Extraction Optimize"; + optsynckey = SecondaryTable ("Extraction", "Optimize"); + optsyncdefault = true} + +let optim = declare_sync_bool_option optim_params + + +(*s Table for custom inlining *) + +let empty_inline_table = (Refset.empty,Refset.empty) + +let inline_table = ref empty_inline_table + +let to_inline r = Refset.mem r (fst !inline_table) + +let to_keep r = Refset.mem r (snd !inline_table) + +let add_inline_entries b l = + let f b = if b then Refset.add else Refset.remove in + let i,k = !inline_table in + inline_table := + (List.fold_right (f b) l i), + (List.fold_right (f (not b)) l k) + + +(*s Registration of operations for rollback. *) + +let (inline_extraction,_) = + declare_object ("Extraction Inline", + { cache_function = (fun (_,(b,l)) -> add_inline_entries b l); + load_function = (fun (_,(b,l)) -> add_inline_entries b l); + open_function = (fun _ -> ()); + export_function = (fun x -> Some x) }) + +let _ = declare_summary "Extraction Inline" + { freeze_function = (fun () -> !inline_table); + unfreeze_function = ((:=) inline_table); + init_function = (fun () -> inline_table := empty_inline_table); + survive_section = true } + +(*s Grammar entries. *) + +let _ = + vinterp_add "ExtractionInline" + (fun vl () -> + let refs = List.map check_constant (refs_of_vargl vl) in + add_anonymous_leaf (inline_extraction (true,refs))) + +let _ = + vinterp_add "ExtractionNoInline" + (fun vl () -> + let refs = List.map check_constant (refs_of_vargl vl) in + add_anonymous_leaf (inline_extraction (false,refs))) + + +(*s Table for direct ML extractions. *) + +let empty_extractions = (Refmap.empty, Refset.empty, []) + +let extractions = ref empty_extractions + +let ml_extractions () = let (_,set,_) = !extractions in set + +let sorted_ml_extractions () = let (_,_,l) = !extractions in l + +let add_ml_extraction r s = + let (map,set,list) = !extractions in + extractions := (Refmap.add r s map, Refset.add r set, (r,s)::list) + +let is_ml_extraction r = + let (_,set,_) = !extractions in Refset.mem r set + +let find_ml_extraction r = + let (map,_,_) = !extractions in Refmap.find r map + +(*s Registration of operations for rollback. *) + +let (in_ml_extraction,_) = + declare_object ("ML extractions", + { cache_function = (fun (_,(r,s)) -> add_ml_extraction r s); + load_function = (fun (_,(r,s)) -> add_ml_extraction r s); + open_function = (fun _ -> ()); + export_function = (fun x -> Some x) }) + +let _ = declare_summary "ML extractions" + { freeze_function = (fun () -> !extractions); + unfreeze_function = ((:=) extractions); + init_function = (fun () -> extractions := empty_extractions); + survive_section = true } + + +(*s Grammar entries. *) + +let _ = + vinterp_add "ExtractConstant" + (function + | [id; vs] -> + (fun () -> + let r = check_constant (reference_of_varg id) in + let s = string_of_varg vs in + add_anonymous_leaf (in_ml_extraction (r,s))) + | _ -> assert false) + +let _ = + vinterp_add "ExtractInlinedConstant" + (function + | [id; vs] -> + (fun () -> + let r = check_constant (reference_of_varg id) in + let s = string_of_varg vs in + add_anonymous_leaf (inline_extraction (true,[r])); + add_anonymous_leaf (in_ml_extraction (r,s))) + | _ -> assert false) + + +let extract_inductive r (id2,l2) = match r with + | IndRef ((sp,i) as ip) -> + let mib = Global.lookup_mind sp in + let n = Array.length mib.mind_packets.(i).mind_consnames in + if n <> List.length l2 then + error "not the right number of constructors"; + add_anonymous_leaf (in_ml_extraction (r,id2)); + list_iter_i + (fun j s -> + add_anonymous_leaf + (in_ml_extraction (ConstructRef (ip,succ j),s))) l2 + | _ -> + errorlabstrm "extract_inductive" + [< Printer.pr_global r; 'sPC; 'sTR "is not an inductive type" >] + +let _ = + vinterp_add "ExtarctInductive" + (function + | [q1; VARG_VARGLIST (id2 :: l2)] -> + (fun () -> + extract_inductive (reference_of_varg q1) + (string_of_varg id2, List.map string_of_varg l2)) + | _ -> assert false) diff --git a/contrib/extraction/table.mli b/contrib/extraction/table.mli new file mode 100644 index 0000000000..7efbc0faaa --- /dev/null +++ b/contrib/extraction/table.mli @@ -0,0 +1,49 @@ +(***********************************************************************) +(* v * The Coq Proof Assistant / The Coq Development Team *) +(* <O___,, * INRIA-Rocquencourt & LRI-CNRS-Orsay *) +(* \VV/ *************************************************************) +(* // * This file is distributed under the terms of the *) +(* * GNU Lesser General Public License Version 2.1 *) +(***********************************************************************) + +(*i $Id$ i*) + +open Summary +open Goptions +open Vernacinterp +open Names + +(*s Set and Map over global reference *) + +module Refset : Set.S with type elt = global_reference + +(*s Auxiliary functions *) + +val check_constant : global_reference -> global_reference + +val refs_of_vargl : vernac_arg list -> global_reference list + +(*s AutoInline parameter *) + +val auto_inline : unit -> bool + +(*s Optimize parameter *) + +val optim : unit -> bool + +(* Table for custom inlining *) + +val to_inline : global_reference -> bool + +val to_keep : global_reference -> bool + +(*s Table for direct ML extractions. *) + +val is_ml_extraction : global_reference -> bool + +val find_ml_extraction : global_reference -> string + +val ml_extractions : unit -> Refset.t + +val sorted_ml_extractions : unit -> (global_reference * string) list + diff --git a/contrib/extraction/test/addReals b/contrib/extraction/test/addReals index 86e9a79947..601592091a 100644 --- a/contrib/extraction/test/addReals +++ b/contrib/extraction/test/addReals @@ -22,4 +22,4 @@ let rec int_to_Z i = else Fast_integer.NEG (int_to_positive (-i)) -let my_ceil x = int_to_Z (int_of_float (ceil x)) +let my_ceil x = int_to_Z (succ (int_of_float (floor x))) |
