From 98048378aa9a0a0a5299bc0555963957b607a046 Mon Sep 17 00:00:00 2001 From: herbelin Date: Tue, 26 Dec 2000 10:46:42 +0000 Subject: Pattern sera mieux dans Pretyping; relâchement head_pattern_bound git-svn-id: svn+ssh://scm.gforge.inria.fr/svn/coq/trunk@1219 85f007b7-540e-0410-9357-904b9bb8a0f7 --- .depend | 327 +++++++++++++++++++++++++++----------------------- Makefile | 4 +- parsing/pattern.ml | 325 ------------------------------------------------- parsing/pattern.mli | 86 ------------- pretyping/pattern.ml | 326 +++++++++++++++++++++++++++++++++++++++++++++++++ pretyping/pattern.mli | 86 +++++++++++++ 6 files changed, 593 insertions(+), 561 deletions(-) delete mode 100644 parsing/pattern.ml delete mode 100644 parsing/pattern.mli create mode 100644 pretyping/pattern.ml create mode 100644 pretyping/pattern.mli diff --git a/.depend b/.depend index 375065ff5f..87260726bb 100644 --- a/.depend +++ b/.depend @@ -8,7 +8,7 @@ kernel/environ.cmi: kernel/declarations.cmi kernel/names.cmi kernel/sign.cmi \ kernel/term.cmi kernel/univ.cmi kernel/evd.cmi: kernel/names.cmi kernel/sign.cmi kernel/term.cmi kernel/indtypes.cmi: kernel/declarations.cmi kernel/environ.cmi \ - kernel/names.cmi kernel/sign.cmi kernel/term.cmi kernel/univ.cmi + kernel/names.cmi kernel/term.cmi kernel/univ.cmi kernel/inductive.cmi: kernel/declarations.cmi kernel/environ.cmi \ kernel/evd.cmi kernel/names.cmi kernel/sign.cmi kernel/term.cmi \ kernel/univ.cmi @@ -28,8 +28,6 @@ kernel/typeops.cmi: kernel/environ.cmi kernel/evd.cmi kernel/inductive.cmi \ kernel/names.cmi kernel/sign.cmi kernel/term.cmi kernel/univ.cmi kernel/univ.cmi: kernel/names.cmi lib/pp.cmi lib/pp.cmi: lib/pp_control.cmi -lib/system.cmi: lib/pp.cmi -lib/util.cmi: lib/pp.cmi library/declare.cmi: kernel/cooking.cmi kernel/declarations.cmi \ kernel/environ.cmi kernel/evd.cmi kernel/inductive.cmi \ library/libobject.cmi kernel/names.cmi kernel/sign.cmi kernel/term.cmi @@ -47,10 +45,12 @@ library/library.cmi: library/lib.cmi library/libobject.cmi kernel/names.cmi \ library/nametab.cmi: library/libobject.cmi kernel/names.cmi kernel/term.cmi \ lib/util.cmi library/summary.cmi: kernel/names.cmi +lib/system.cmi: lib/pp.cmi +lib/util.cmi: lib/pp.cmi parsing/ast.cmi: parsing/coqast.cmi lib/dyn.cmi kernel/names.cmi \ parsing/pcoq.cmi lib/pp.cmi parsing/astterm.cmi: parsing/coqast.cmi kernel/environ.cmi kernel/evd.cmi \ - kernel/names.cmi parsing/pattern.cmi pretyping/rawterm.cmi \ + kernel/names.cmi pretyping/pattern.cmi pretyping/rawterm.cmi \ kernel/sign.cmi kernel/term.cmi parsing/coqast.cmi: lib/dyn.cmi parsing/egrammar.cmi: parsing/ast.cmi parsing/coqast.cmi parsing/extend.cmi \ @@ -61,19 +61,18 @@ parsing/extend.cmi: parsing/ast.cmi parsing/coqast.cmi parsing/pcoq.cmi \ lib/pp.cmi parsing/g_minicoq.cmi: kernel/environ.cmi kernel/names.cmi lib/pp.cmi \ kernel/term.cmi -parsing/pattern.cmi: kernel/environ.cmi kernel/evd.cmi kernel/names.cmi \ - pretyping/rawterm.cmi kernel/sign.cmi kernel/term.cmi parsing/pcoq.cmi: parsing/coqast.cmi parsing/pretty.cmi: kernel/declarations.cmi kernel/environ.cmi \ kernel/inductive.cmi library/lib.cmi kernel/names.cmi lib/pp.cmi \ kernel/reduction.cmi kernel/sign.cmi kernel/term.cmi parsing/printer.cmi: parsing/coqast.cmi kernel/environ.cmi kernel/names.cmi \ - parsing/pattern.cmi lib/pp.cmi pretyping/rawterm.cmi kernel/sign.cmi \ - kernel/term.cmi -parsing/search.cmi: kernel/environ.cmi parsing/pattern.cmi lib/pp.cmi \ + pretyping/pattern.cmi lib/pp.cmi pretyping/rawterm.cmi kernel/sign.cmi \ kernel/term.cmi +parsing/search.cmi: kernel/environ.cmi kernel/names.cmi pretyping/pattern.cmi \ + lib/pp.cmi kernel/term.cmi parsing/termast.cmi: parsing/coqast.cmi kernel/environ.cmi kernel/names.cmi \ - parsing/pattern.cmi pretyping/rawterm.cmi kernel/sign.cmi kernel/term.cmi + pretyping/pattern.cmi pretyping/rawterm.cmi kernel/sign.cmi \ + kernel/term.cmi pretyping/cases.cmi: kernel/environ.cmi pretyping/evarutil.cmi kernel/evd.cmi \ kernel/inductive.cmi kernel/names.cmi pretyping/rawterm.cmi \ kernel/term.cmi @@ -91,6 +90,8 @@ pretyping/evarutil.cmi: kernel/environ.cmi kernel/evd.cmi kernel/names.cmi \ kernel/term.cmi pretyping/multcase.cmi: kernel/environ.cmi pretyping/evarutil.cmi \ kernel/evd.cmi kernel/names.cmi pretyping/rawterm.cmi kernel/term.cmi +pretyping/pattern.cmi: kernel/environ.cmi kernel/evd.cmi kernel/names.cmi \ + pretyping/rawterm.cmi kernel/sign.cmi kernel/term.cmi pretyping/pretype_errors.cmi: kernel/environ.cmi kernel/names.cmi lib/pp.cmi \ pretyping/rawterm.cmi kernel/sign.cmi kernel/term.cmi \ kernel/type_errors.cmi @@ -136,36 +137,38 @@ proofs/tacmach.cmi: parsing/coqast.cmi kernel/environ.cmi \ proofs/tactic_debug.cmi: parsing/coqast.cmi kernel/environ.cmi \ proofs/proof_type.cmi kernel/term.cmi tactics/auto.cmi: tactics/btermdn.cmi proofs/clenv.cmi parsing/coqast.cmi \ - kernel/environ.cmi kernel/evd.cmi kernel/names.cmi parsing/pattern.cmi \ + kernel/environ.cmi kernel/evd.cmi kernel/names.cmi pretyping/pattern.cmi \ proofs/proof_type.cmi pretyping/rawterm.cmi kernel/sign.cmi \ proofs/tacmach.cmi kernel/term.cmi lib/util.cmi -tactics/autorewrite.cmi: proofs/tacmach.cmi kernel/term.cmi -tactics/btermdn.cmi: parsing/pattern.cmi kernel/term.cmi +tactics/autorewrite.cmi: parsing/coqast.cmi proofs/tacmach.cmi \ + kernel/term.cmi +tactics/btermdn.cmi: pretyping/pattern.cmi kernel/term.cmi tactics/dhyp.cmi: kernel/names.cmi proofs/tacmach.cmi tactics/elim.cmi: kernel/names.cmi proofs/proof_type.cmi proofs/tacmach.cmi \ tactics/tacticals.cmi kernel/term.cmi tactics/equality.cmi: parsing/coqast.cmi kernel/environ.cmi kernel/evd.cmi \ - tactics/hipattern.cmi kernel/names.cmi parsing/pattern.cmi \ + tactics/hipattern.cmi kernel/names.cmi pretyping/pattern.cmi \ proofs/proof_type.cmi kernel/sign.cmi proofs/tacmach.cmi \ tactics/tacticals.cmi tactics/tactics.cmi kernel/term.cmi \ tactics/wcclausenv.cmi tactics/hiddentac.cmi: kernel/names.cmi proofs/proof_type.cmi \ tactics/tacentries.cmi proofs/tacmach.cmi kernel/term.cmi -tactics/hipattern.cmi: kernel/evd.cmi kernel/names.cmi parsing/pattern.cmi \ +tactics/hipattern.cmi: kernel/evd.cmi kernel/names.cmi pretyping/pattern.cmi \ proofs/proof_trees.cmi kernel/sign.cmi proofs/stock.cmi kernel/term.cmi \ lib/util.cmi -tactics/inv.cmi: parsing/coqast.cmi kernel/names.cmi proofs/tacmach.cmi -tactics/nbtermdn.cmi: tactics/btermdn.cmi parsing/pattern.cmi kernel/term.cmi +tactics/inv.cmi: kernel/names.cmi proofs/tacmach.cmi kernel/term.cmi +tactics/nbtermdn.cmi: tactics/btermdn.cmi pretyping/pattern.cmi \ + kernel/term.cmi tactics/refine.cmi: proofs/tacmach.cmi kernel/term.cmi tactics/tacentries.cmi: proofs/proof_type.cmi proofs/tacmach.cmi tactics/tacticals.cmi: proofs/clenv.cmi parsing/coqast.cmi kernel/names.cmi \ - parsing/pattern.cmi proofs/proof_type.cmi kernel/reduction.cmi \ + pretyping/pattern.cmi proofs/proof_type.cmi kernel/reduction.cmi \ kernel/sign.cmi proofs/tacmach.cmi kernel/term.cmi tactics/wcclausenv.cmi tactics/tactics.cmi: proofs/clenv.cmi kernel/environ.cmi kernel/evd.cmi \ kernel/names.cmi proofs/proof_type.cmi kernel/reduction.cmi \ proofs/tacmach.cmi pretyping/tacred.cmi tactics/tacticals.cmi \ kernel/term.cmi -tactics/termdn.cmi: parsing/pattern.cmi kernel/term.cmi +tactics/termdn.cmi: pretyping/pattern.cmi kernel/term.cmi tactics/wcclausenv.cmi: proofs/clenv.cmi kernel/environ.cmi kernel/evd.cmi \ kernel/names.cmi proofs/proof_type.cmi kernel/sign.cmi proofs/tacmach.cmi \ kernel/term.cmi @@ -188,28 +191,28 @@ toplevel/record.cmi: parsing/coqast.cmi kernel/names.cmi kernel/term.cmi toplevel/searchisos.cmi: library/libobject.cmi kernel/names.cmi \ kernel/term.cmi toplevel/toplevel.cmi: parsing/pcoq.cmi lib/pp.cmi -toplevel/vernac.cmi: parsing/coqast.cmi parsing/pcoq.cmi toplevel/vernacentries.cmi: kernel/names.cmi kernel/term.cmi \ toplevel/vernacinterp.cmi toplevel/vernacinterp.cmi: parsing/coqast.cmi lib/dyn.cmi kernel/names.cmi \ proofs/proof_type.cmi +toplevel/vernac.cmi: parsing/coqast.cmi parsing/pcoq.cmi contrib/xml/xmlcommand.cmi: kernel/names.cmi config/coq_config.cmo: config/coq_config.cmi config/coq_config.cmx: config/coq_config.cmi dev/db_printers.cmo: kernel/names.cmi lib/pp.cmi dev/db_printers.cmx: kernel/names.cmx lib/pp.cmx dev/top_printers.cmo: parsing/ast.cmi parsing/astterm.cmi proofs/clenv.cmi \ - toplevel/command.cmi kernel/environ.cmi kernel/evd.cmi kernel/names.cmi \ - lib/pp.cmi parsing/printer.cmi proofs/proof_trees.cmi proofs/refiner.cmi \ - kernel/sign.cmi lib/system.cmi proofs/tacmach.cmi kernel/term.cmi \ - parsing/termast.cmi kernel/univ.cmi toplevel/vernacentries.cmi \ - toplevel/vernacinterp.cmi + toplevel/command.cmi kernel/environ.cmi toplevel/errors.cmi \ + kernel/evd.cmi kernel/names.cmi lib/pp.cmi parsing/printer.cmi \ + proofs/proof_trees.cmi proofs/refiner.cmi kernel/sign.cmi lib/system.cmi \ + proofs/tacmach.cmi kernel/term.cmi parsing/termast.cmi kernel/univ.cmi \ + toplevel/vernacentries.cmi toplevel/vernacinterp.cmi dev/top_printers.cmx: parsing/ast.cmx parsing/astterm.cmx proofs/clenv.cmx \ - toplevel/command.cmx kernel/environ.cmx kernel/evd.cmx kernel/names.cmx \ - lib/pp.cmx parsing/printer.cmx proofs/proof_trees.cmx proofs/refiner.cmx \ - kernel/sign.cmx lib/system.cmx proofs/tacmach.cmx kernel/term.cmx \ - parsing/termast.cmx kernel/univ.cmx toplevel/vernacentries.cmx \ - toplevel/vernacinterp.cmx + toplevel/command.cmx kernel/environ.cmx toplevel/errors.cmx \ + kernel/evd.cmx kernel/names.cmx lib/pp.cmx parsing/printer.cmx \ + proofs/proof_trees.cmx proofs/refiner.cmx kernel/sign.cmx lib/system.cmx \ + proofs/tacmach.cmx kernel/term.cmx parsing/termast.cmx kernel/univ.cmx \ + toplevel/vernacentries.cmx toplevel/vernacinterp.cmx kernel/closure.cmo: kernel/declarations.cmi kernel/environ.cmi kernel/evd.cmi \ kernel/instantiate.cmi kernel/names.cmi lib/pp.cmi kernel/term.cmi \ kernel/univ.cmi lib/util.cmi kernel/closure.cmi @@ -310,30 +313,22 @@ lib/dyn.cmo: lib/util.cmi lib/dyn.cmi lib/dyn.cmx: lib/util.cmx lib/dyn.cmi lib/edit.cmo: lib/bstack.cmi lib/pp.cmi lib/util.cmi lib/edit.cmi lib/edit.cmx: lib/bstack.cmx lib/pp.cmx lib/util.cmx lib/edit.cmi -lib/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 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.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/profile.cmo: lib/system.cmi lib/profile.cmi lib/profile.cmx: lib/system.cmx lib/profile.cmi -lib/stamps.cmo: lib/stamps.cmi -lib/stamps.cmx: lib/stamps.cmi -lib/system.cmo: config/coq_config.cmi lib/pp.cmi lib/util.cmi lib/system.cmi -lib/system.cmx: config/coq_config.cmx lib/pp.cmx lib/util.cmx lib/system.cmi -lib/tlm.cmo: lib/gmap.cmi lib/gset.cmi lib/tlm.cmi -lib/tlm.cmx: lib/gmap.cmx lib/gset.cmx lib/tlm.cmi -lib/util.cmo: lib/pp.cmi lib/util.cmi -lib/util.cmx: lib/pp.cmx lib/util.cmi library/declare.cmo: kernel/cooking.cmi kernel/declarations.cmi \ kernel/environ.cmi kernel/evd.cmi library/global.cmi library/impargs.cmi \ library/indrec.cmi kernel/inductive.cmi library/lib.cmi \ @@ -378,10 +373,12 @@ library/indrec.cmx: kernel/declarations.cmx kernel/environ.cmx \ kernel/names.cmx lib/pp.cmx kernel/reduction.cmx kernel/sign.cmx \ kernel/term.cmx kernel/type_errors.cmx kernel/typeops.cmx lib/util.cmx \ library/indrec.cmi -library/lib.cmo: library/libobject.cmi kernel/names.cmi library/summary.cmi \ - kernel/univ.cmi lib/util.cmi library/lib.cmi -library/lib.cmx: library/libobject.cmx kernel/names.cmx library/summary.cmx \ - kernel/univ.cmx lib/util.cmx library/lib.cmi +library/lib.cmo: library/libobject.cmi kernel/names.cmi library/nametab.cmi \ + lib/pp.cmi library/summary.cmi kernel/univ.cmi lib/util.cmi \ + library/lib.cmi +library/lib.cmx: library/libobject.cmx kernel/names.cmx library/nametab.cmx \ + lib/pp.cmx library/summary.cmx kernel/univ.cmx lib/util.cmx \ + library/lib.cmi library/libobject.cmo: lib/dyn.cmi kernel/names.cmi lib/util.cmi \ library/libobject.cmi library/libobject.cmx: lib/dyn.cmx kernel/names.cmx lib/util.cmx \ @@ -406,6 +403,14 @@ library/summary.cmo: lib/dyn.cmi kernel/names.cmi lib/pp.cmi lib/util.cmi \ library/summary.cmi library/summary.cmx: lib/dyn.cmx kernel/names.cmx lib/pp.cmx lib/util.cmx \ library/summary.cmi +lib/stamps.cmo: lib/stamps.cmi +lib/stamps.cmx: lib/stamps.cmi +lib/system.cmo: config/coq_config.cmi lib/pp.cmi lib/util.cmi lib/system.cmi +lib/system.cmx: config/coq_config.cmx lib/pp.cmx lib/util.cmx lib/system.cmi +lib/tlm.cmo: lib/gmap.cmi lib/gset.cmi lib/tlm.cmi +lib/tlm.cmx: lib/gmap.cmx lib/gset.cmx lib/tlm.cmi +lib/util.cmo: lib/pp.cmi lib/util.cmi +lib/util.cmx: lib/pp.cmx lib/util.cmi parsing/ast.cmo: parsing/coqast.cmi lib/dyn.cmi lib/hashcons.cmi \ kernel/names.cmi parsing/pcoq.cmi lib/pp.cmi lib/util.cmi parsing/ast.cmi parsing/ast.cmx: parsing/coqast.cmx lib/dyn.cmx lib/hashcons.cmx \ @@ -413,7 +418,7 @@ parsing/ast.cmx: parsing/coqast.cmx lib/dyn.cmx lib/hashcons.cmx \ parsing/astterm.cmo: parsing/ast.cmi parsing/coqast.cmi library/declare.cmi \ kernel/environ.cmi pretyping/evarutil.cmi kernel/evd.cmi \ library/global.cmi library/impargs.cmi kernel/names.cmi \ - library/nametab.cmi parsing/pattern.cmi lib/pp.cmi \ + library/nametab.cmi pretyping/pattern.cmi lib/pp.cmi \ pretyping/pretype_errors.cmi pretyping/pretyping.cmi \ pretyping/rawterm.cmi kernel/reduction.cmi pretyping/retyping.cmi \ kernel/sign.cmi pretyping/syntax_def.cmi kernel/term.cmi \ @@ -421,7 +426,7 @@ parsing/astterm.cmo: parsing/ast.cmi parsing/coqast.cmi library/declare.cmi \ parsing/astterm.cmx: parsing/ast.cmx parsing/coqast.cmx library/declare.cmx \ kernel/environ.cmx pretyping/evarutil.cmx kernel/evd.cmx \ library/global.cmx library/impargs.cmx kernel/names.cmx \ - library/nametab.cmx parsing/pattern.cmx lib/pp.cmx \ + library/nametab.cmx pretyping/pattern.cmx lib/pp.cmx \ pretyping/pretype_errors.cmx pretyping/pretyping.cmx \ pretyping/rawterm.cmx kernel/reduction.cmx pretyping/retyping.cmx \ kernel/sign.cmx pretyping/syntax_def.cmx kernel/term.cmx \ @@ -442,6 +447,14 @@ parsing/extend.cmo: parsing/ast.cmi parsing/coqast.cmi parsing/lexer.cmi \ parsing/pcoq.cmi lib/pp.cmi lib/util.cmi parsing/extend.cmi parsing/extend.cmx: parsing/ast.cmx parsing/coqast.cmx parsing/lexer.cmx \ parsing/pcoq.cmx lib/pp.cmx lib/util.cmx parsing/extend.cmi +parsing/g_basevernac.cmo: parsing/ast.cmi parsing/coqast.cmi parsing/pcoq.cmi \ + toplevel/vernac.cmi +parsing/g_basevernac.cmx: parsing/ast.cmx parsing/coqast.cmx parsing/pcoq.cmx \ + toplevel/vernac.cmx +parsing/g_cases.cmo: parsing/coqast.cmi parsing/pcoq.cmi +parsing/g_cases.cmx: parsing/coqast.cmx parsing/pcoq.cmx +parsing/g_constr.cmo: parsing/ast.cmi parsing/coqast.cmi parsing/pcoq.cmi +parsing/g_constr.cmx: parsing/ast.cmx parsing/coqast.cmx parsing/pcoq.cmx parsing/g_natsyntax.cmo: parsing/ast.cmi parsing/astterm.cmi \ parsing/coqast.cmi parsing/esyntax.cmi kernel/names.cmi parsing/pcoq.cmi \ lib/pp.cmi lib/util.cmi parsing/g_natsyntax.cmi @@ -450,12 +463,24 @@ parsing/g_natsyntax.cmx: parsing/ast.cmx parsing/astterm.cmx \ lib/pp.cmx lib/util.cmx parsing/g_natsyntax.cmi parsing/g_prim.cmo: parsing/coqast.cmi parsing/pcoq.cmi toplevel/vernac.cmi parsing/g_prim.cmx: parsing/coqast.cmx parsing/pcoq.cmx toplevel/vernac.cmx +parsing/g_proofs.cmo: parsing/coqast.cmi parsing/pcoq.cmi lib/pp.cmi \ + lib/util.cmi toplevel/vernac.cmi +parsing/g_proofs.cmx: parsing/coqast.cmx parsing/pcoq.cmx lib/pp.cmx \ + lib/util.cmx toplevel/vernac.cmx parsing/g_rsyntax.cmo: parsing/ast.cmi parsing/astterm.cmi parsing/coqast.cmi \ parsing/esyntax.cmi kernel/names.cmi parsing/pcoq.cmi lib/pp.cmi \ lib/util.cmi parsing/g_rsyntax.cmx: parsing/ast.cmx parsing/astterm.cmx parsing/coqast.cmx \ parsing/esyntax.cmx kernel/names.cmx parsing/pcoq.cmx lib/pp.cmx \ lib/util.cmx +parsing/g_tactic.cmo: parsing/ast.cmi parsing/coqast.cmi parsing/pcoq.cmi \ + lib/pp.cmi lib/util.cmi +parsing/g_tactic.cmx: parsing/ast.cmx parsing/coqast.cmx parsing/pcoq.cmx \ + lib/pp.cmx lib/util.cmx +parsing/g_vernac.cmo: parsing/coqast.cmi parsing/pcoq.cmi lib/pp.cmi \ + lib/util.cmi toplevel/vernac.cmi +parsing/g_vernac.cmx: parsing/coqast.cmx parsing/pcoq.cmx lib/pp.cmx \ + lib/util.cmx toplevel/vernac.cmx parsing/g_zsyntax.cmo: parsing/ast.cmi parsing/astterm.cmi parsing/coqast.cmi \ parsing/esyntax.cmi kernel/names.cmi parsing/pcoq.cmi lib/pp.cmi \ lib/util.cmi parsing/g_zsyntax.cmi @@ -464,12 +489,6 @@ parsing/g_zsyntax.cmx: parsing/ast.cmx parsing/astterm.cmx parsing/coqast.cmx \ lib/util.cmx parsing/g_zsyntax.cmi parsing/lexer.cmo: lib/util.cmi parsing/lexer.cmi parsing/lexer.cmx: lib/util.cmx parsing/lexer.cmi -parsing/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 parsing/pattern.cmi -parsing/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 parsing/pattern.cmi parsing/pcoq.cmo: parsing/coqast.cmi parsing/lexer.cmi lib/pp.cmi \ lib/util.cmi parsing/pcoq.cmi parsing/pcoq.cmx: parsing/coqast.cmx parsing/lexer.cmx lib/pp.cmx \ @@ -490,12 +509,12 @@ parsing/pretty.cmx: pretyping/classops.cmx kernel/declarations.cmx \ kernel/typeops.cmx lib/util.cmx parsing/pretty.cmi parsing/printer.cmo: parsing/ast.cmi parsing/coqast.cmi library/declare.cmi \ kernel/environ.cmi parsing/esyntax.cmi parsing/extend.cmi \ - library/global.cmi kernel/names.cmi lib/options.cmi parsing/pattern.cmi \ + library/global.cmi kernel/names.cmi lib/options.cmi pretyping/pattern.cmi \ lib/pp.cmi kernel/sign.cmi kernel/term.cmi parsing/termast.cmi \ lib/util.cmi parsing/printer.cmi parsing/printer.cmx: parsing/ast.cmx parsing/coqast.cmx library/declare.cmx \ kernel/environ.cmx parsing/esyntax.cmx parsing/extend.cmx \ - library/global.cmx kernel/names.cmx lib/options.cmx parsing/pattern.cmx \ + library/global.cmx kernel/names.cmx lib/options.cmx pretyping/pattern.cmx \ lib/pp.cmx kernel/sign.cmx kernel/term.cmx parsing/termast.cmx \ lib/util.cmx parsing/printer.cmi parsing/q_coqast.cmo: parsing/coqast.cmi parsing/pcoq.cmi @@ -504,24 +523,24 @@ parsing/search.cmo: parsing/astterm.cmi parsing/coqast.cmi \ kernel/declarations.cmi library/declare.cmi kernel/environ.cmi \ kernel/evd.cmi library/global.cmi library/libobject.cmi \ library/library.cmi kernel/names.cmi library/nametab.cmi \ - parsing/pattern.cmi lib/pp.cmi parsing/pretty.cmi parsing/printer.cmi \ + pretyping/pattern.cmi lib/pp.cmi parsing/pretty.cmi parsing/printer.cmi \ kernel/term.cmi pretyping/typing.cmi lib/util.cmi parsing/search.cmi parsing/search.cmx: parsing/astterm.cmx parsing/coqast.cmx \ kernel/declarations.cmx library/declare.cmx kernel/environ.cmx \ kernel/evd.cmx library/global.cmx library/libobject.cmx \ library/library.cmx kernel/names.cmx library/nametab.cmx \ - parsing/pattern.cmx lib/pp.cmx parsing/pretty.cmx parsing/printer.cmx \ + pretyping/pattern.cmx lib/pp.cmx parsing/pretty.cmx parsing/printer.cmx \ kernel/term.cmx pretyping/typing.cmx lib/util.cmx parsing/search.cmi parsing/termast.cmo: parsing/ast.cmi pretyping/classops.cmi \ parsing/coqast.cmi library/declare.cmi pretyping/detyping.cmi \ kernel/environ.cmi library/impargs.cmi kernel/inductive.cmi \ - kernel/names.cmi library/nametab.cmi parsing/pattern.cmi lib/pp.cmi \ + kernel/names.cmi library/nametab.cmi pretyping/pattern.cmi lib/pp.cmi \ pretyping/rawterm.cmi kernel/reduction.cmi kernel/sign.cmi \ kernel/term.cmi kernel/univ.cmi lib/util.cmi parsing/termast.cmi parsing/termast.cmx: parsing/ast.cmx pretyping/classops.cmx \ parsing/coqast.cmx library/declare.cmx pretyping/detyping.cmx \ kernel/environ.cmx library/impargs.cmx kernel/inductive.cmx \ - kernel/names.cmx library/nametab.cmx parsing/pattern.cmx lib/pp.cmx \ + kernel/names.cmx library/nametab.cmx pretyping/pattern.cmx lib/pp.cmx \ pretyping/rawterm.cmx kernel/reduction.cmx kernel/sign.cmx \ kernel/term.cmx kernel/univ.cmx lib/util.cmx parsing/termast.cmi pretyping/cases.cmo: pretyping/coercion.cmi kernel/declarations.cmi \ @@ -538,14 +557,16 @@ pretyping/cases.cmx: pretyping/coercion.cmx kernel/declarations.cmx \ pretyping/retyping.cmx kernel/sign.cmx kernel/term.cmx \ kernel/type_errors.cmx kernel/typeops.cmx kernel/univ.cmx lib/util.cmx \ pretyping/cases.cmi -pretyping/classops.cmo: library/declare.cmi kernel/environ.cmi \ - library/lib.cmi library/libobject.cmi kernel/names.cmi lib/options.cmi \ - lib/pp.cmi pretyping/rawterm.cmi library/summary.cmi pretyping/tacred.cmi \ - kernel/term.cmi lib/util.cmi pretyping/classops.cmi -pretyping/classops.cmx: library/declare.cmx kernel/environ.cmx \ - library/lib.cmx library/libobject.cmx kernel/names.cmx lib/options.cmx \ - lib/pp.cmx pretyping/rawterm.cmx library/summary.cmx pretyping/tacred.cmx \ - kernel/term.cmx lib/util.cmx pretyping/classops.cmi +pretyping/classops.cmo: library/declare.cmi kernel/environ.cmi kernel/evd.cmi \ + library/global.cmi library/lib.cmi library/libobject.cmi kernel/names.cmi \ + lib/options.cmi lib/pp.cmi pretyping/rawterm.cmi pretyping/retyping.cmi \ + library/summary.cmi pretyping/tacred.cmi kernel/term.cmi lib/util.cmi \ + pretyping/classops.cmi +pretyping/classops.cmx: library/declare.cmx kernel/environ.cmx kernel/evd.cmx \ + library/global.cmx library/lib.cmx library/libobject.cmx kernel/names.cmx \ + lib/options.cmx lib/pp.cmx pretyping/rawterm.cmx pretyping/retyping.cmx \ + library/summary.cmx pretyping/tacred.cmx kernel/term.cmx lib/util.cmx \ + pretyping/classops.cmi pretyping/coercion.cmo: pretyping/classops.cmi kernel/environ.cmi \ pretyping/evarconv.cmi kernel/evd.cmi kernel/names.cmi \ pretyping/pretype_errors.cmi pretyping/rawterm.cmi \ @@ -566,14 +587,16 @@ pretyping/detyping.cmx: kernel/declarations.cmx library/declare.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/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/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/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 +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 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 \ @@ -584,6 +607,12 @@ 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/type_errors.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/pretype_errors.cmo: kernel/environ.cmi library/global.cmi \ kernel/names.cmi pretyping/rawterm.cmi kernel/sign.cmi \ kernel/type_errors.cmi pretyping/pretype_errors.cmi @@ -658,14 +687,16 @@ proofs/clenv.cmx: kernel/environ.cmx pretyping/evarutil.cmx kernel/evd.cmx \ pretyping/typing.cmx lib/util.cmx proofs/clenv.cmi proofs/evar_refiner.cmo: parsing/astterm.cmi kernel/environ.cmi \ pretyping/evarutil.cmi kernel/evd.cmi library/global.cmi proofs/logic.cmi \ - kernel/names.cmi lib/pp.cmi proofs/proof_trees.cmi proofs/proof_type.cmi \ - kernel/reduction.cmi proofs/refiner.cmi kernel/sign.cmi lib/stamps.cmi \ - kernel/term.cmi pretyping/typing.cmi lib/util.cmi proofs/evar_refiner.cmi + kernel/names.cmi lib/options.cmi lib/pp.cmi proofs/proof_trees.cmi \ + proofs/proof_type.cmi kernel/reduction.cmi proofs/refiner.cmi \ + kernel/sign.cmi lib/stamps.cmi kernel/term.cmi pretyping/typing.cmi \ + lib/util.cmi proofs/evar_refiner.cmi proofs/evar_refiner.cmx: parsing/astterm.cmx kernel/environ.cmx \ pretyping/evarutil.cmx kernel/evd.cmx library/global.cmx proofs/logic.cmx \ - kernel/names.cmx lib/pp.cmx proofs/proof_trees.cmx proofs/proof_type.cmx \ - kernel/reduction.cmx proofs/refiner.cmx kernel/sign.cmx lib/stamps.cmx \ - kernel/term.cmx pretyping/typing.cmx lib/util.cmx proofs/evar_refiner.cmi + kernel/names.cmx lib/options.cmx lib/pp.cmx proofs/proof_trees.cmx \ + proofs/proof_type.cmx kernel/reduction.cmx proofs/refiner.cmx \ + kernel/sign.cmx lib/stamps.cmx kernel/term.cmx pretyping/typing.cmx \ + lib/util.cmx proofs/evar_refiner.cmi proofs/logic.cmo: parsing/coqast.cmi library/declare.cmi kernel/environ.cmi \ pretyping/evarutil.cmi kernel/evd.cmi library/global.cmi \ kernel/inductive.cmi kernel/names.cmi lib/pp.cmi parsing/printer.cmi \ @@ -728,7 +759,7 @@ proofs/tacinterp.cmo: parsing/ast.cmi parsing/astterm.cmi kernel/closure.cmi \ parsing/coqast.cmi library/declare.cmi lib/dyn.cmi kernel/environ.cmi \ kernel/evd.cmi library/global.cmi lib/gmap.cmi library/lib.cmi \ library/libobject.cmi kernel/names.cmi library/nametab.cmi \ - lib/options.cmi parsing/pattern.cmi lib/pp.cmi \ + lib/options.cmi pretyping/pattern.cmi lib/pp.cmi \ pretyping/pretype_errors.cmi proofs/proof_type.cmi pretyping/rawterm.cmi \ kernel/sign.cmi library/summary.cmi proofs/tacmach.cmi \ pretyping/tacred.cmi proofs/tactic_debug.cmi kernel/term.cmi \ @@ -737,7 +768,7 @@ proofs/tacinterp.cmx: parsing/ast.cmx parsing/astterm.cmx kernel/closure.cmx \ parsing/coqast.cmx library/declare.cmx lib/dyn.cmx kernel/environ.cmx \ kernel/evd.cmx library/global.cmx lib/gmap.cmx library/lib.cmx \ library/libobject.cmx kernel/names.cmx library/nametab.cmx \ - lib/options.cmx parsing/pattern.cmx lib/pp.cmx \ + lib/options.cmx pretyping/pattern.cmx lib/pp.cmx \ pretyping/pretype_errors.cmx proofs/proof_type.cmx pretyping/rawterm.cmx \ kernel/sign.cmx library/summary.cmx proofs/tacmach.cmx \ pretyping/tacred.cmx proofs/tactic_debug.cmx kernel/term.cmx \ @@ -769,7 +800,7 @@ tactics/auto.cmo: parsing/astterm.cmi tactics/btermdn.cmi proofs/clenv.cmi \ library/global.cmi tactics/hiddentac.cmi tactics/hipattern.cmi \ kernel/inductive.cmi library/lib.cmi library/libobject.cmi \ library/library.cmi proofs/logic.cmi kernel/names.cmi lib/options.cmi \ - parsing/pattern.cmi proofs/pfedit.cmi lib/pp.cmi parsing/printer.cmi \ + pretyping/pattern.cmi proofs/pfedit.cmi lib/pp.cmi parsing/printer.cmi \ proofs/proof_type.cmi pretyping/rawterm.cmi kernel/reduction.cmi \ kernel/sign.cmi library/summary.cmi proofs/tacmach.cmi \ pretyping/tacred.cmi tactics/tacticals.cmi tactics/tactics.cmi \ @@ -780,7 +811,7 @@ tactics/auto.cmx: parsing/astterm.cmx tactics/btermdn.cmx proofs/clenv.cmx \ library/global.cmx tactics/hiddentac.cmx tactics/hipattern.cmx \ kernel/inductive.cmx library/lib.cmx library/libobject.cmx \ library/library.cmx proofs/logic.cmx kernel/names.cmx lib/options.cmx \ - parsing/pattern.cmx proofs/pfedit.cmx lib/pp.cmx parsing/printer.cmx \ + pretyping/pattern.cmx proofs/pfedit.cmx lib/pp.cmx parsing/printer.cmx \ proofs/proof_type.cmx pretyping/rawterm.cmx kernel/reduction.cmx \ kernel/sign.cmx library/summary.cmx proofs/tacmach.cmx \ pretyping/tacred.cmx tactics/tacticals.cmx tactics/tactics.cmx \ @@ -800,14 +831,14 @@ tactics/autorewrite.cmx: parsing/ast.cmx toplevel/command.cmx \ proofs/tacmach.cmx proofs/tactic_debug.cmx tactics/tactics.cmx \ kernel/term.cmx lib/util.cmx toplevel/vernacinterp.cmx \ tactics/autorewrite.cmi -tactics/btermdn.cmo: tactics/dn.cmi parsing/pattern.cmi kernel/term.cmi \ +tactics/btermdn.cmo: tactics/dn.cmi pretyping/pattern.cmi kernel/term.cmi \ tactics/termdn.cmi tactics/btermdn.cmi -tactics/btermdn.cmx: tactics/dn.cmx parsing/pattern.cmx kernel/term.cmx \ +tactics/btermdn.cmx: tactics/dn.cmx pretyping/pattern.cmx kernel/term.cmx \ tactics/termdn.cmx tactics/btermdn.cmi tactics/dhyp.cmo: parsing/ast.cmi parsing/astterm.cmi proofs/clenv.cmi \ parsing/coqast.cmi kernel/environ.cmi kernel/evd.cmi library/global.cmi \ library/lib.cmi library/libobject.cmi library/library.cmi \ - kernel/names.cmi tactics/nbtermdn.cmi parsing/pattern.cmi \ + kernel/names.cmi tactics/nbtermdn.cmi pretyping/pattern.cmi \ parsing/pcoq.cmi lib/pp.cmi proofs/proof_type.cmi pretyping/rawterm.cmi \ kernel/reduction.cmi library/summary.cmi proofs/tacinterp.cmi \ proofs/tacmach.cmi tactics/tacticals.cmi tactics/tactics.cmi \ @@ -815,7 +846,7 @@ tactics/dhyp.cmo: parsing/ast.cmi parsing/astterm.cmi proofs/clenv.cmi \ tactics/dhyp.cmx: parsing/ast.cmx parsing/astterm.cmx proofs/clenv.cmx \ parsing/coqast.cmx kernel/environ.cmx kernel/evd.cmx library/global.cmx \ library/lib.cmx library/libobject.cmx library/library.cmx \ - kernel/names.cmx tactics/nbtermdn.cmx parsing/pattern.cmx \ + kernel/names.cmx tactics/nbtermdn.cmx pretyping/pattern.cmx \ parsing/pcoq.cmx lib/pp.cmx proofs/proof_type.cmx pretyping/rawterm.cmx \ kernel/reduction.cmx library/summary.cmx proofs/tacinterp.cmx \ proofs/tacmach.cmx tactics/tacticals.cmx tactics/tactics.cmx \ @@ -823,12 +854,12 @@ tactics/dhyp.cmx: parsing/ast.cmx parsing/astterm.cmx proofs/clenv.cmx \ tactics/dn.cmo: lib/tlm.cmi tactics/dn.cmi tactics/dn.cmx: lib/tlm.cmx tactics/dn.cmi tactics/eauto.cmo: tactics/auto.cmi proofs/clenv.cmi kernel/evd.cmi \ - kernel/instantiate.cmi kernel/names.cmi parsing/pattern.cmi lib/pp.cmi \ + kernel/instantiate.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 tactics/eauto.cmx: tactics/auto.cmx proofs/clenv.cmx kernel/evd.cmx \ - kernel/instantiate.cmx kernel/names.cmx parsing/pattern.cmx lib/pp.cmx \ + kernel/instantiate.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 @@ -846,7 +877,7 @@ tactics/equality.cmo: parsing/astterm.cmi parsing/coqast.cmi \ library/declare.cmi kernel/environ.cmi kernel/evd.cmi library/global.cmi \ lib/gmapl.cmi tactics/hipattern.cmi kernel/inductive.cmi \ kernel/instantiate.cmi library/lib.cmi library/libobject.cmi \ - proofs/logic.cmi kernel/names.cmi parsing/pattern.cmi lib/pp.cmi \ + proofs/logic.cmi kernel/names.cmi pretyping/pattern.cmi lib/pp.cmi \ proofs/proof_type.cmi kernel/reduction.cmi pretyping/retyping.cmi \ proofs/tacinterp.cmi proofs/tacmach.cmi pretyping/tacred.cmi \ tactics/tacticals.cmi tactics/tactics.cmi kernel/term.cmi \ @@ -856,7 +887,7 @@ tactics/equality.cmx: parsing/astterm.cmx parsing/coqast.cmx \ library/declare.cmx kernel/environ.cmx kernel/evd.cmx library/global.cmx \ lib/gmapl.cmx tactics/hipattern.cmx kernel/inductive.cmx \ kernel/instantiate.cmx library/lib.cmx library/libobject.cmx \ - proofs/logic.cmx kernel/names.cmx parsing/pattern.cmx lib/pp.cmx \ + proofs/logic.cmx kernel/names.cmx pretyping/pattern.cmx lib/pp.cmx \ proofs/proof_type.cmx kernel/reduction.cmx pretyping/retyping.cmx \ proofs/tacinterp.cmx proofs/tacmach.cmx pretyping/tacred.cmx \ tactics/tacticals.cmx tactics/tactics.cmx kernel/term.cmx \ @@ -869,25 +900,25 @@ tactics/hiddentac.cmx: proofs/proof_type.cmx tactics/tacentries.cmx \ tactics/hipattern.cmo: parsing/astterm.cmi proofs/clenv.cmi \ library/declare.cmi kernel/environ.cmi kernel/evd.cmi library/global.cmi \ kernel/inductive.cmi library/library.cmi kernel/names.cmi \ - parsing/pattern.cmi parsing/pcoq.cmi lib/pp.cmi parsing/printer.cmi \ + pretyping/pattern.cmi parsing/pcoq.cmi lib/pp.cmi parsing/printer.cmi \ proofs/proof_trees.cmi kernel/reduction.cmi proofs/stock.cmi \ kernel/term.cmi lib/util.cmi tactics/hipattern.cmi tactics/hipattern.cmx: parsing/astterm.cmx proofs/clenv.cmx \ library/declare.cmx kernel/environ.cmx kernel/evd.cmx library/global.cmx \ kernel/inductive.cmx library/library.cmx kernel/names.cmx \ - parsing/pattern.cmx parsing/pcoq.cmx lib/pp.cmx parsing/printer.cmx \ + pretyping/pattern.cmx parsing/pcoq.cmx lib/pp.cmx parsing/printer.cmx \ proofs/proof_trees.cmx kernel/reduction.cmx proofs/stock.cmx \ kernel/term.cmx lib/util.cmx tactics/hipattern.cmi tactics/inv.cmo: tactics/auto.cmi proofs/clenv.cmi tactics/elim.cmi \ kernel/environ.cmi tactics/equality.cmi library/global.cmi \ - kernel/inductive.cmi kernel/names.cmi parsing/pattern.cmi lib/pp.cmi \ + kernel/inductive.cmi kernel/names.cmi pretyping/pattern.cmi lib/pp.cmi \ parsing/printer.cmi proofs/proof_type.cmi kernel/reduction.cmi \ pretyping/retyping.cmi kernel/sign.cmi proofs/tacmach.cmi \ tactics/tacticals.cmi tactics/tactics.cmi kernel/term.cmi \ pretyping/typing.cmi lib/util.cmi tactics/wcclausenv.cmi tactics/inv.cmi tactics/inv.cmx: tactics/auto.cmx proofs/clenv.cmx tactics/elim.cmx \ kernel/environ.cmx tactics/equality.cmx library/global.cmx \ - kernel/inductive.cmx kernel/names.cmx parsing/pattern.cmx lib/pp.cmx \ + kernel/inductive.cmx kernel/names.cmx pretyping/pattern.cmx lib/pp.cmx \ parsing/printer.cmx proofs/proof_type.cmx kernel/reduction.cmx \ pretyping/retyping.cmx kernel/sign.cmx proofs/tacmach.cmx \ tactics/tacticals.cmx tactics/tactics.cmx kernel/term.cmx \ @@ -909,11 +940,11 @@ tactics/leminv.cmx: parsing/astterm.cmx proofs/clenv.cmx \ tactics/tactics.cmx kernel/term.cmx lib/util.cmx \ toplevel/vernacinterp.cmx tactics/wcclausenv.cmx tactics/nbtermdn.cmo: tactics/btermdn.cmi lib/gmap.cmi library/libobject.cmi \ - library/library.cmi kernel/names.cmi parsing/pattern.cmi kernel/term.cmi \ - tactics/termdn.cmi lib/util.cmi tactics/nbtermdn.cmi + library/library.cmi kernel/names.cmi pretyping/pattern.cmi \ + kernel/term.cmi tactics/termdn.cmi lib/util.cmi tactics/nbtermdn.cmi tactics/nbtermdn.cmx: tactics/btermdn.cmx lib/gmap.cmx library/libobject.cmx \ - library/library.cmx kernel/names.cmx parsing/pattern.cmx kernel/term.cmx \ - tactics/termdn.cmx lib/util.cmx tactics/nbtermdn.cmi + library/library.cmx kernel/names.cmx pretyping/pattern.cmx \ + kernel/term.cmx tactics/termdn.cmx lib/util.cmx tactics/nbtermdn.cmi tactics/refine.cmo: parsing/astterm.cmi kernel/environ.cmi kernel/evd.cmi \ kernel/names.cmi lib/pp.cmi parsing/printer.cmi proofs/proof_type.cmi \ kernel/reduction.cmi pretyping/retyping.cmi kernel/sign.cmi \ @@ -931,7 +962,7 @@ tactics/tacentries.cmx: proofs/proof_trees.cmx proofs/tacmach.cmx \ tactics/tacticals.cmo: proofs/clenv.cmi parsing/coqast.cmi \ kernel/declarations.cmi library/declare.cmi kernel/environ.cmi \ library/global.cmi library/indrec.cmi kernel/inductive.cmi \ - kernel/instantiate.cmi kernel/names.cmi parsing/pattern.cmi lib/pp.cmi \ + kernel/instantiate.cmi kernel/names.cmi pretyping/pattern.cmi lib/pp.cmi \ parsing/pretty.cmi kernel/reduction.cmi kernel/sign.cmi lib/stamps.cmi \ proofs/tacinterp.cmi proofs/tacmach.cmi kernel/term.cmi \ parsing/termast.cmi lib/util.cmi tactics/wcclausenv.cmi \ @@ -939,7 +970,7 @@ tactics/tacticals.cmo: proofs/clenv.cmi parsing/coqast.cmi \ tactics/tacticals.cmx: proofs/clenv.cmx parsing/coqast.cmx \ kernel/declarations.cmx library/declare.cmx kernel/environ.cmx \ library/global.cmx library/indrec.cmx kernel/inductive.cmx \ - kernel/instantiate.cmx kernel/names.cmx parsing/pattern.cmx lib/pp.cmx \ + kernel/instantiate.cmx kernel/names.cmx pretyping/pattern.cmx lib/pp.cmx \ parsing/pretty.cmx kernel/reduction.cmx kernel/sign.cmx lib/stamps.cmx \ proofs/tacinterp.cmx proofs/tacmach.cmx kernel/term.cmx \ parsing/termast.cmx lib/util.cmx tactics/wcclausenv.cmx \ @@ -947,28 +978,28 @@ tactics/tacticals.cmx: proofs/clenv.cmx parsing/coqast.cmx \ tactics/tactics.cmo: parsing/astterm.cmi proofs/clenv.cmi \ kernel/declarations.cmi library/declare.cmi kernel/environ.cmi \ kernel/evd.cmi library/global.cmi tactics/hipattern.cmi \ - library/indrec.cmi kernel/inductive.cmi proofs/logic.cmi kernel/names.cmi \ - proofs/pfedit.cmi lib/pp.cmi proofs/proof_trees.cmi proofs/proof_type.cmi \ - kernel/reduction.cmi kernel/sign.cmi lib/stamps.cmi proofs/tacinterp.cmi \ - proofs/tacmach.cmi pretyping/tacred.cmi tactics/tacticals.cmi \ - kernel/term.cmi lib/util.cmi tactics/tactics.cmi + library/indrec.cmi kernel/inductive.cmi library/lib.cmi proofs/logic.cmi \ + kernel/names.cmi proofs/pfedit.cmi lib/pp.cmi proofs/proof_trees.cmi \ + proofs/proof_type.cmi kernel/reduction.cmi kernel/sign.cmi lib/stamps.cmi \ + proofs/tacinterp.cmi proofs/tacmach.cmi pretyping/tacred.cmi \ + tactics/tacticals.cmi kernel/term.cmi lib/util.cmi tactics/tactics.cmi tactics/tactics.cmx: parsing/astterm.cmx proofs/clenv.cmx \ kernel/declarations.cmx library/declare.cmx kernel/environ.cmx \ kernel/evd.cmx library/global.cmx tactics/hipattern.cmx \ - library/indrec.cmx kernel/inductive.cmx proofs/logic.cmx kernel/names.cmx \ - proofs/pfedit.cmx lib/pp.cmx proofs/proof_trees.cmx proofs/proof_type.cmx \ - kernel/reduction.cmx kernel/sign.cmx lib/stamps.cmx proofs/tacinterp.cmx \ - proofs/tacmach.cmx pretyping/tacred.cmx tactics/tacticals.cmx \ - kernel/term.cmx lib/util.cmx tactics/tactics.cmi + library/indrec.cmx kernel/inductive.cmx library/lib.cmx proofs/logic.cmx \ + kernel/names.cmx proofs/pfedit.cmx lib/pp.cmx proofs/proof_trees.cmx \ + proofs/proof_type.cmx kernel/reduction.cmx kernel/sign.cmx lib/stamps.cmx \ + proofs/tacinterp.cmx proofs/tacmach.cmx pretyping/tacred.cmx \ + tactics/tacticals.cmx kernel/term.cmx lib/util.cmx tactics/tactics.cmi tactics/tauto.cmo: parsing/ast.cmi parsing/coqast.cmi tactics/hipattern.cmi \ kernel/names.cmi lib/pp.cmi proofs/proof_type.cmi proofs/tacinterp.cmi \ - proofs/tacmach.cmi tactics/tacticals.cmi + proofs/tacmach.cmi tactics/tacticals.cmi tactics/tactics.cmi tactics/tauto.cmx: parsing/ast.cmx parsing/coqast.cmx tactics/hipattern.cmx \ kernel/names.cmx lib/pp.cmx proofs/proof_type.cmx proofs/tacinterp.cmx \ - proofs/tacmach.cmx tactics/tacticals.cmx -tactics/termdn.cmo: tactics/dn.cmi kernel/names.cmi parsing/pattern.cmi \ + proofs/tacmach.cmx tactics/tacticals.cmx tactics/tactics.cmx +tactics/termdn.cmo: tactics/dn.cmi kernel/names.cmi pretyping/pattern.cmi \ pretyping/rawterm.cmi kernel/term.cmi lib/util.cmi tactics/termdn.cmi -tactics/termdn.cmx: tactics/dn.cmx kernel/names.cmx parsing/pattern.cmx \ +tactics/termdn.cmx: tactics/dn.cmx kernel/names.cmx pretyping/pattern.cmx \ pretyping/rawterm.cmx kernel/term.cmx lib/util.cmx tactics/termdn.cmi tactics/wcclausenv.cmo: proofs/clenv.cmi kernel/environ.cmi kernel/evd.cmi \ library/global.cmi proofs/logic.cmi kernel/names.cmi lib/pp.cmi \ @@ -978,10 +1009,10 @@ tactics/wcclausenv.cmx: proofs/clenv.cmx kernel/environ.cmx kernel/evd.cmx \ library/global.cmx proofs/logic.cmx kernel/names.cmx lib/pp.cmx \ proofs/proof_trees.cmx kernel/reduction.cmx kernel/sign.cmx \ proofs/tacmach.cmx kernel/term.cmx lib/util.cmx tactics/wcclausenv.cmi -tools/coqdep.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/coqdep.cmo: config/coq_config.cmi tools/coqdep_lexer.cmo +tools/coqdep.cmx: config/coq_config.cmx tools/coqdep_lexer.cmx tools/gallina.cmo: tools/gallina_lexer.cmo tools/gallina.cmx: tools/gallina_lexer.cmx toplevel/class.cmo: pretyping/classops.cmi kernel/declarations.cmi \ @@ -1050,11 +1081,11 @@ toplevel/discharge.cmx: toplevel/class.cmx pretyping/classops.cmx \ kernel/typeops.cmx lib/util.cmx toplevel/discharge.cmi toplevel/errors.cmo: parsing/ast.cmi toplevel/himsg.cmi kernel/indtypes.cmi \ parsing/lexer.cmi proofs/logic.cmi lib/options.cmi lib/pp.cmi \ - proofs/tacmach.cmi kernel/type_errors.cmi lib/util.cmi \ + proofs/tacmach.cmi kernel/type_errors.cmi kernel/univ.cmi lib/util.cmi \ toplevel/errors.cmi toplevel/errors.cmx: parsing/ast.cmx toplevel/himsg.cmx kernel/indtypes.cmx \ parsing/lexer.cmx proofs/logic.cmx lib/options.cmx lib/pp.cmx \ - proofs/tacmach.cmx kernel/type_errors.cmx lib/util.cmx \ + proofs/tacmach.cmx kernel/type_errors.cmx kernel/univ.cmx lib/util.cmx \ toplevel/errors.cmi toplevel/fhimsg.cmo: kernel/environ.cmi parsing/g_minicoq.cmi \ kernel/names.cmi lib/pp.cmi kernel/reduction.cmi kernel/sign.cmi \ @@ -1126,14 +1157,6 @@ toplevel/toplevel.cmx: parsing/ast.cmx toplevel/errors.cmx toplevel/mltop.cmi \ toplevel/vernac.cmx toplevel/vernacinterp.cmx toplevel/toplevel.cmi toplevel/usage.cmo: config/coq_config.cmi toplevel/usage.cmi toplevel/usage.cmx: config/coq_config.cmx toplevel/usage.cmi -toplevel/vernac.cmo: parsing/ast.cmi parsing/coqast.cmi \ - toplevel/discharge.cmi library/library.cmi lib/options.cmi \ - parsing/pcoq.cmi proofs/pfedit.cmi lib/pp.cmi library/states.cmi \ - lib/system.cmi lib/util.cmi toplevel/vernacinterp.cmi toplevel/vernac.cmi -toplevel/vernac.cmx: parsing/ast.cmx parsing/coqast.cmx \ - toplevel/discharge.cmx library/library.cmx lib/options.cmx \ - parsing/pcoq.cmx proofs/pfedit.cmx lib/pp.cmx library/states.cmx \ - lib/system.cmx lib/util.cmx toplevel/vernacinterp.cmx toplevel/vernac.cmi toplevel/vernacentries.cmo: parsing/ast.cmi parsing/astterm.cmi \ toplevel/class.cmi toplevel/command.cmi parsing/coqast.cmi \ library/declare.cmi toplevel/discharge.cmi kernel/environ.cmi \ @@ -1176,6 +1199,14 @@ toplevel/vernacinterp.cmx: parsing/ast.cmx parsing/astterm.cmx \ kernel/names.cmx library/nametab.cmx lib/options.cmx lib/pp.cmx \ pretyping/pretype_errors.cmx proofs/proof_type.cmx proofs/tacinterp.cmx \ lib/util.cmx toplevel/vernacinterp.cmi +toplevel/vernac.cmo: parsing/ast.cmi parsing/coqast.cmi \ + toplevel/discharge.cmi library/library.cmi lib/options.cmi \ + parsing/pcoq.cmi proofs/pfedit.cmi lib/pp.cmi library/states.cmi \ + lib/system.cmi lib/util.cmi toplevel/vernacinterp.cmi toplevel/vernac.cmi +toplevel/vernac.cmx: parsing/ast.cmx parsing/coqast.cmx \ + toplevel/discharge.cmx library/library.cmx lib/options.cmx \ + parsing/pcoq.cmx proofs/pfedit.cmx lib/pp.cmx library/states.cmx \ + lib/system.cmx lib/util.cmx toplevel/vernacinterp.cmx toplevel/vernac.cmi contrib/omega/coq_omega.cmo: parsing/ast.cmi proofs/clenv.cmi \ library/declare.cmi kernel/environ.cmi tactics/equality.cmi \ kernel/evd.cmi library/global.cmi kernel/inductive.cmi proofs/logic.cmi \ @@ -1193,48 +1224,48 @@ contrib/omega/coq_omega.cmx: parsing/ast.cmx proofs/clenv.cmx \ contrib/omega/omega.cmo: lib/util.cmi contrib/omega/omega.cmx: lib/util.cmx contrib/ring/quote.cmo: library/declare.cmi library/global.cmi \ - kernel/instantiate.cmi kernel/names.cmi parsing/pattern.cmi lib/pp.cmi \ + kernel/instantiate.cmi kernel/names.cmi pretyping/pattern.cmi lib/pp.cmi \ proofs/proof_trees.cmi proofs/proof_type.cmi proofs/tacmach.cmi \ tactics/tactics.cmi kernel/term.cmi lib/util.cmi contrib/ring/quote.cmx: library/declare.cmx library/global.cmx \ - kernel/instantiate.cmx kernel/names.cmx parsing/pattern.cmx lib/pp.cmx \ + kernel/instantiate.cmx kernel/names.cmx pretyping/pattern.cmx lib/pp.cmx \ proofs/proof_trees.cmx proofs/proof_type.cmx proofs/tacmach.cmx \ tactics/tactics.cmx kernel/term.cmx lib/util.cmx contrib/ring/ring.cmo: parsing/astterm.cmi kernel/closure.cmi \ library/declare.cmi tactics/equality.cmi kernel/evd.cmi \ library/global.cmi tactics/hiddentac.cmi tactics/hipattern.cmi \ library/lib.cmi library/libobject.cmi kernel/names.cmi \ - parsing/pattern.cmi lib/pp.cmi parsing/printer.cmi proofs/proof_trees.cmi \ - proofs/proof_type.cmi contrib/ring/quote.cmo kernel/reduction.cmi \ - library/summary.cmi proofs/tacmach.cmi pretyping/tacred.cmi \ - tactics/tactics.cmi kernel/term.cmi pretyping/typing.cmi lib/util.cmi \ - toplevel/vernacinterp.cmi + pretyping/pattern.cmi lib/pp.cmi parsing/printer.cmi \ + proofs/proof_trees.cmi proofs/proof_type.cmi contrib/ring/quote.cmo \ + kernel/reduction.cmi library/summary.cmi proofs/tacmach.cmi \ + pretyping/tacred.cmi tactics/tactics.cmi kernel/term.cmi \ + pretyping/typing.cmi lib/util.cmi toplevel/vernacinterp.cmi contrib/ring/ring.cmx: parsing/astterm.cmx kernel/closure.cmx \ library/declare.cmx tactics/equality.cmx kernel/evd.cmx \ library/global.cmx tactics/hiddentac.cmx tactics/hipattern.cmx \ library/lib.cmx library/libobject.cmx kernel/names.cmx \ - parsing/pattern.cmx lib/pp.cmx parsing/printer.cmx proofs/proof_trees.cmx \ - proofs/proof_type.cmx contrib/ring/quote.cmx kernel/reduction.cmx \ - library/summary.cmx proofs/tacmach.cmx pretyping/tacred.cmx \ - tactics/tactics.cmx kernel/term.cmx pretyping/typing.cmx lib/util.cmx \ - toplevel/vernacinterp.cmx -contrib/xml/xml.cmo: contrib/xml/xml.cmi -contrib/xml/xml.cmx: contrib/xml/xml.cmi + pretyping/pattern.cmx lib/pp.cmx parsing/printer.cmx \ + proofs/proof_trees.cmx proofs/proof_type.cmx contrib/ring/quote.cmx \ + kernel/reduction.cmx library/summary.cmx proofs/tacmach.cmx \ + pretyping/tacred.cmx tactics/tactics.cmx kernel/term.cmx \ + pretyping/typing.cmx lib/util.cmx toplevel/vernacinterp.cmx contrib/xml/xmlcommand.cmo: kernel/declarations.cmi library/declare.cmi \ kernel/environ.cmi kernel/evd.cmi library/global.cmi library/lib.cmi \ library/libobject.cmi library/library.cmi kernel/names.cmi \ library/nametab.cmi proofs/pfedit.cmi proofs/proof_trees.cmi \ kernel/reduction.cmi pretyping/retyping.cmi kernel/safe_typing.cmi \ - lib/system.cmi proofs/tacmach.cmi kernel/term.cmi lib/util.cmi \ - contrib/xml/xml.cmi contrib/xml/xmlcommand.cmi + kernel/sign.cmi lib/system.cmi proofs/tacmach.cmi kernel/term.cmi \ + lib/util.cmi contrib/xml/xml.cmi contrib/xml/xmlcommand.cmi contrib/xml/xmlcommand.cmx: kernel/declarations.cmx library/declare.cmx \ kernel/environ.cmx kernel/evd.cmx library/global.cmx library/lib.cmx \ library/libobject.cmx library/library.cmx kernel/names.cmx \ library/nametab.cmx proofs/pfedit.cmx proofs/proof_trees.cmx \ kernel/reduction.cmx pretyping/retyping.cmx kernel/safe_typing.cmx \ - lib/system.cmx proofs/tacmach.cmx kernel/term.cmx lib/util.cmx \ - contrib/xml/xml.cmx contrib/xml/xmlcommand.cmi + kernel/sign.cmx lib/system.cmx proofs/tacmach.cmx kernel/term.cmx \ + lib/util.cmx contrib/xml/xml.cmx contrib/xml/xmlcommand.cmi contrib/xml/xmlentries.cmo: lib/util.cmi toplevel/vernacinterp.cmi \ contrib/xml/xmlcommand.cmi contrib/xml/xmlentries.cmx: lib/util.cmx toplevel/vernacinterp.cmx \ contrib/xml/xmlcommand.cmx +contrib/xml/xml.cmo: contrib/xml/xml.cmi +contrib/xml/xml.cmx: contrib/xml/xml.cmi diff --git a/Makefile b/Makefile index ee77f9f8c7..c2e1e0b8da 100644 --- a/Makefile +++ b/Makefile @@ -84,10 +84,10 @@ PRETYPING=pretyping/rawterm.cmo pretyping/detyping.cmo \ pretyping/classops.cmo pretyping/recordops.cmo \ pretyping/evarutil.cmo pretyping/evarconv.cmo \ pretyping/coercion.cmo pretyping/cases.cmo pretyping/pretyping.cmo \ - pretyping/syntax_def.cmo + pretyping/syntax_def.cmo pretyping/pattern.cmo PARSING=parsing/lexer.cmo parsing/coqast.cmo parsing/pcoq.cmo parsing/ast.cmo \ - parsing/pattern.cmo parsing/astterm.cmo parsing/termast.cmo \ + parsing/astterm.cmo parsing/termast.cmo \ parsing/g_prim.cmo parsing/g_basevernac.cmo \ parsing/g_vernac.cmo parsing/g_proofs.cmo parsing/g_tactic.cmo \ parsing/g_constr.cmo parsing/g_cases.cmo \ diff --git a/parsing/pattern.ml b/parsing/pattern.ml deleted file mode 100644 index 3dd339d466..0000000000 --- a/parsing/pattern.ml +++ /dev/null @@ -1,325 +0,0 @@ - -(* $Id$ *) - -open Util -open Names -open Term -open Reduction -open Rawterm -open Environ - -type constr_pattern = - | PRef of global_reference - | PVar of identifier - | PRel of int - | PApp of constr_pattern * constr_pattern array - | PSoApp of int * constr_pattern list - | PBinder of binder_kind * name * constr_pattern * constr_pattern - | PSort of rawsort - | PMeta of int option - | PCase of constr_pattern option * constr_pattern * constr_pattern array - | PFix of fixpoint - | PCoFix of cofixpoint - -let rec occur_meta_pattern = function - | PApp (f,args) -> - (occur_meta_pattern f) or (array_exists occur_meta_pattern args) - | PBinder(_,na,t,c) -> (occur_meta_pattern t) or (occur_meta_pattern c) - | PCase(None,c,br) -> - (occur_meta_pattern c) or (array_exists occur_meta_pattern br) - | PCase(Some p,c,br) -> - (occur_meta_pattern p) or - (occur_meta_pattern c) or (array_exists occur_meta_pattern br) - | PMeta _ | PSoApp _ -> true - | PVar _ | PRef _ | PRel _ | PSort _ | PFix _ | PCoFix _ -> false - -type constr_label = - | ConstNode of section_path - | IndNode of inductive_path - | CstrNode of constructor_path - | VarNode of identifier - | SectionVarNode of section_path -(* - | ... -*) - -exception BoundPattern;; - -let label_of_ref = function - | ConstRef sp -> ConstNode sp - | IndRef sp -> IndNode sp - | ConstructRef sp -> CstrNode sp - | VarRef sp -> SectionVarNode sp - | EvarRef n -> raise BoundPattern - -let rec head_pattern_bound t = - match t with - | PBinder ((BProd|BLetIn),_,_,b) -> head_pattern_bound b - | PApp (c,args) -> head_pattern_bound c - | PCase (p,c,br) -> head_pattern_bound c - | PRef r -> label_of_ref r - | PVar id -> VarNode id - | PRel _ | PMeta _ | PSoApp _ | PSort _ | PFix _ -> raise BoundPattern - | PBinder(BLambda,_,_,_) | PCoFix _ -> - anomaly "head_pattern_bound: not a type" - -let head_of_constr_reference c = match kind_of_term c with - | IsConst (sp,_) -> ConstNode sp - | IsMutConstruct (sp,_) -> CstrNode sp - | IsMutInd (sp,_) -> IndNode sp - | IsVar id -> VarNode id - | _ -> anomaly "Not a rigid reference" - - -(* Second part : Given a term with second-order variables in it, - represented by Meta's, and possibly applied using [SOAPP] to - terms, this function will perform second-order, binding-preserving, - matching, in the case where the pattern is a pattern in the sense - of Dale Miller. - - ALGORITHM: - - Given a pattern, we decompose it, flattening Cast's and apply's, - recursing on all operators, and pushing the name of the binder each - time we descend a binder. - - When we reach a first-order variable, we ask that the corresponding - term's free-rels all be higher than the depth of the current stack. - - When we reach a second-order application, we ask that the - intersection of the free-rels of the term and the current stack be - contained in the arguments of the application, and in that case, we - construct a LAMBDA with the names on the stack. - - *) - -exception PatternMatchingFailure - -let constrain ((n : int),(m : constr)) sigma = - if List.mem_assoc n sigma then - if eq_constr m (List.assoc n sigma) then sigma - else raise PatternMatchingFailure - else - (n,m)::sigma - -let build_lambda toabstract stk (m : constr) = - let rec buildrec m p_0 p_1 = match p_0,p_1 with - | (_, []) -> m - | (n, (na,t)::tl) -> - if List.mem n toabstract then - buildrec (mkLambda (na,t,m)) (n+1) tl - else - buildrec (pop m) (n+1) tl - in - buildrec m 1 stk - -let memb_metavars m n = - match (m,n) with - | (None, _) -> true - | (Some mvs, n) -> List.mem n mvs - -let eq_context ctxt1 ctxt2 = array_for_all2 eq_constr ctxt1 ctxt2 - -let matches_core convert pat c = - let rec sorec stk sigma p t = - let cT = strip_outer_cast t in - match p,kind_of_term cT with - | PSoApp (n,args),m -> - let relargs = - List.map - (function - | PRel n -> n - | _ -> error "Only bound indices are currently allowed in second order pattern matching") - args in - let frels = Intset.elements (free_rels cT) in - if list_subset frels relargs then - constrain (n,build_lambda relargs stk cT) sigma - else - raise PatternMatchingFailure - - | PMeta (Some n), m -> - let depth = List.length stk in - let frels = Intset.elements (free_rels cT) in - if List.for_all (fun i -> i > depth) frels then - constrain (n,lift (-depth) cT) sigma - else - raise PatternMatchingFailure - - | PMeta None, m -> sigma - - | PRef (VarRef sp1), IsVar v2 when basename sp1 = v2 -> sigma - - | PVar v1, IsVar v2 when v1 = v2 -> sigma - - | PRef ref, _ when Declare.constr_of_reference Evd.empty (Global.env()) ref = cT -> sigma - - | PRel n1, IsRel n2 when n1 = n2 -> sigma - - | PSort (RProp c1), IsSort (Prop c2) when c1 = c2 -> sigma - - | PSort RType, IsSort (Type _) -> sigma - - | PApp (c1,arg1), IsApp (c2,arg2) -> - (try array_fold_left2 (sorec stk) (sorec stk sigma c1 c2) arg1 arg2 - with Invalid_argument _ -> raise PatternMatchingFailure) - - | PBinder(BProd,na1,c1,d1), IsProd(na2,c2,d2) -> - sorec ((na2,c2)::stk) (sorec stk sigma c1 c2) d1 d2 - - | PBinder(BLambda,na1,c1,d1), IsLambda(na2,c2,d2) -> - sorec ((na2,c2)::stk) (sorec stk sigma c1 c2) d1 d2 - - | PBinder(BLetIn,na1,c1,d1), IsLetIn(na2,c2,t2,d2) -> - sorec ((na2,t2)::stk) (sorec stk sigma c1 c2) d1 d2 - - | PRef (ConstRef _ as ref), _ when convert <> None -> - let (env,evars) = out_some convert in - let c = Declare.constr_of_reference Evd.empty env ref in - if is_conv env evars c cT then sigma - else raise PatternMatchingFailure - - | PCase (_,a1,br1), IsMutCase (_,_,a2,br2) -> - (* On ne teste pas le prédicat *) - array_fold_left2 (sorec stk) (sorec stk sigma a1 a2) - br1 br2 - (* À faire *) - | PFix f0, IsFix f1 when f0 = f1 -> sigma - | PCoFix c0, IsCoFix c1 when c0 = c1 -> sigma - | _ -> raise PatternMatchingFailure - - in - Sort.list (fun (a,_) (b,_) -> a raise (NextOccurrence nocc) - | c::tl -> - (try authorized_occ nocc (matches pat c) with - | PatternMatchingFailure -> (try_matches nocc pat tl) - | NextOccurrence nocc -> (try_matches (nocc - 1) pat tl)) - -(* Tries to match a subterm of [c] with [pat] *) -let rec sub_match nocc pat c = - match kind_of_term c with - | IsCast (c1,c2) -> - (try authorized_occ nocc ((matches pat c), mkMeta (-1)) with - | PatternMatchingFailure -> - let (lm,lc) = try_sub_match nocc pat [c1] in - (lm,mkCast (List.hd lc, c2)) - | NextOccurrence nocc -> - let (lm,lc) = try_sub_match (nocc - 1) pat [c1] in - (lm,mkCast (List.hd lc, c2))) - | IsLambda (x,c1,c2) -> - (try authorized_occ nocc ((matches pat c), mkMeta (-1)) with - | PatternMatchingFailure -> - let (lm,lc) = try_sub_match nocc pat [c1;c2] in - (lm,mkLambda (x,List.hd lc,List.nth lc 1)) - | NextOccurrence nocc -> - let (lm,lc) = try_sub_match (nocc - 1) pat [c1;c2] in - (lm,mkLambda (x,List.hd lc,List.nth lc 1))) - | IsProd (x,c1,c2) -> - (try authorized_occ nocc ((matches pat c), mkMeta (-1)) with - | PatternMatchingFailure -> - let (lm,lc) = try_sub_match nocc pat [c1;c2] in - (lm,mkProd (x,List.hd lc,List.nth lc 1)) - | NextOccurrence nocc -> - let (lm,lc) = try_sub_match (nocc - 1) pat [c1;c2] in - (lm,mkProd (x,List.hd lc,List.nth lc 1))) - | IsLetIn (x,c1,t2,c2) -> - (try authorized_occ nocc ((matches pat c), mkMeta (-1)) with - | PatternMatchingFailure -> - let (lm,lc) = try_sub_match nocc pat [c1;t2;c2] in - (lm,mkLetIn (x,List.hd lc,List.nth lc 1,List.nth lc 2)) - | NextOccurrence nocc -> - let (lm,lc) = try_sub_match (nocc - 1) pat [c1;t2;c2] in - (lm,mkLetIn (x,List.hd lc,List.nth lc 1,List.nth lc 2))) - | IsApp (c1,lc) -> - (try authorized_occ nocc ((matches pat c), mkMeta (-1)) with - | PatternMatchingFailure -> - let (lm,le) = try_sub_match nocc pat (c1::(Array.to_list lc)) in - (lm,mkApp (List.hd le, Array.of_list (List.tl le))) - | NextOccurrence nocc -> - let (lm,le) = try_sub_match (nocc - 1) pat (c1::(Array.to_list lc)) in - (lm,mkApp (List.hd le, Array.of_list (List.tl le)))) - | IsMutCase (ci,hd,c1,lc) -> - (try authorized_occ nocc ((matches pat c), mkMeta (-1)) with - | PatternMatchingFailure -> - let (lm,le) = try_sub_match nocc pat (c1::Array.to_list lc) in - (lm,mkMutCaseL (ci,hd,List.hd le,List.tl le)) - | NextOccurrence nocc -> - let (lm,le) = try_sub_match (nocc - 1) pat (c1::Array.to_list lc) in - (lm,mkMutCaseL (ci,hd,List.hd le,List.tl le))) - | IsMutConstruct _ | IsFix _ | IsMutInd _|IsCoFix _ |IsEvar _|IsConst _ - | IsRel _|IsMeta _|IsVar _|IsXtra _|IsSort _ -> - (try authorized_occ nocc ((matches pat c),mkMeta (-1)) with - | PatternMatchingFailure -> raise (NextOccurrence nocc) - | NextOccurrence nocc -> raise (NextOccurrence (nocc - 1))) - -(* Tries [sub_match] for all terms in the list *) -and try_sub_match nocc pat lc = - let rec try_sub_match_rec nocc pat lacc = function - | [] -> raise (NextOccurrence nocc) - | c::tl -> - (try - let (lm,ce) = sub_match nocc pat c in - (lm,lacc@(ce::tl)) - with - | NextOccurrence nocc -> try_sub_match_rec nocc pat (lacc@[c]) tl) in - try_sub_match_rec nocc pat [] lc - -let is_matching pat n = - try let _ = matches pat n in true - with PatternMatchingFailure -> false - -let matches_conv env sigma = matches_core (Some (env,sigma)) - -let is_matching_conv env sigma pat n = - try let _ = matches_conv env sigma pat n in true - with PatternMatchingFailure -> false - -let rec pattern_of_constr t = - match kind_of_term t with - | IsRel n -> PRel n - | IsMeta n -> PMeta (Some n) - | IsVar id -> PVar id - | IsSort (Prop c) -> PSort (RProp c) - | IsSort (Type _) -> PSort RType - | IsCast (c,_) -> pattern_of_constr c - | IsLetIn (na,c,_,b) -> - PBinder (BLetIn,na,pattern_of_constr c,pattern_of_constr b) - | IsProd (na,c,b) -> - PBinder (BProd,na,pattern_of_constr c,pattern_of_constr b) - | IsLambda (na,c,b) -> - PBinder (BLambda,na,pattern_of_constr c,pattern_of_constr b) - | IsApp (f,args) -> - PApp (pattern_of_constr f, Array.map pattern_of_constr args) - | IsConst (sp,ctxt) -> - pattern_of_ref (ConstRef sp) ctxt - | IsMutInd (sp,ctxt) -> - pattern_of_ref (IndRef sp) ctxt - | IsMutConstruct (sp,ctxt) -> - pattern_of_ref (ConstructRef sp) ctxt - | IsEvar (n,ctxt) -> - pattern_of_ref (EvarRef n) ctxt - | IsMutCase (ci,p,a,br) -> - PCase (Some (pattern_of_constr p),pattern_of_constr a, - Array.map pattern_of_constr br) - | IsFix f -> PFix f - | IsCoFix _ -> - error "pattern_of_constr: (co)fix currently not supported" - | IsXtra _ -> anomaly "No longer supported" - -and pattern_of_ref ref inst = - let args = Declare.extract_instance ref inst in - let f = PRef ref in - if args = [||] then f else PApp (f, Array.map pattern_of_constr args) diff --git a/parsing/pattern.mli b/parsing/pattern.mli deleted file mode 100644 index 5c5c28ba1b..0000000000 --- a/parsing/pattern.mli +++ /dev/null @@ -1,86 +0,0 @@ - -(*i $Id$ i*) - -(*i*) -open Names -open Sign -open Term -open Environ -(*i*) - -type constr_pattern = - | PRef of global_reference - | PVar of identifier - | PRel of int - | PApp of constr_pattern * constr_pattern array - | PSoApp of int * constr_pattern list - | PBinder of Rawterm.binder_kind * name * constr_pattern * constr_pattern - | PSort of Rawterm.rawsort - | PMeta of int option - | PCase of constr_pattern option * constr_pattern * constr_pattern array - | PFix of fixpoint - | PCoFix of cofixpoint - -val occur_meta_pattern : constr_pattern -> bool - -type constr_label = - | ConstNode of section_path - | IndNode of inductive_path - | CstrNode of constructor_path - | VarNode of identifier - | SectionVarNode of section_path - -exception BoundPattern - -(* [head_pattern_bound t] extracts the head variable/constant of the - type [t] or raises [BoundPattern] (even if a sort); it raises an anomaly - if [t] is an abstraction *) - -val head_pattern_bound : constr_pattern -> constr_label - -(* [head_of_constr_reference c] assumes [r] denotes a reference and - returns its label; raises an anomaly otherwise *) - -val head_of_constr_reference : Term.constr -> constr_label - -(* [pattern_of_constr c] translates a term [c] with metavariables into - a pattern; currently, no destructor (Cases, Fix, Cofix) and no - existential variable are allowed in [c] *) - -val pattern_of_constr : constr -> constr_pattern - - -exception PatternMatchingFailure - -(* [matches pat c] matches [c] against [pat] and returns the resulting - assignment of metavariables; it raises [PatternMatchingFailure] if - not matchable; bindings are given in increasing order based on the - numbers given in the pattern *) -val matches : - constr_pattern -> constr -> (int * constr) list - -(* [is_matching pat c] just tells if [c] matches against [pat] *) - -val is_matching : - constr_pattern -> constr -> bool - -(* [matches_conv env sigma] matches up to conversion in environment - [(env,sigma)] when constants in pattern are concerned; it raises - [PatternMatchingFailure] if not matchable; bindings are given in - increasing order based on the numbers given in the pattern *) - -val matches_conv : - env -> 'a Evd.evar_map -> constr_pattern -> constr -> (int * constr) list - -(* To skip to the next occurrence *) -exception NextOccurrence of int - -(* Tries to match a subterm of [c] with [pat] *) -val sub_match : - int -> constr_pattern -> constr -> ((int * constr) list * constr) - -(* [is_matching_conv env sigma pat c] tells if [c] matches against [pat] - up to conversion for constants in patterns *) - -val is_matching_conv : - env -> 'a Evd.evar_map -> constr_pattern -> constr -> bool diff --git a/pretyping/pattern.ml b/pretyping/pattern.ml new file mode 100644 index 0000000000..4b94fe8b4e --- /dev/null +++ b/pretyping/pattern.ml @@ -0,0 +1,326 @@ + +(* $Id$ *) + +open Util +open Names +open Term +open Reduction +open Rawterm +open Environ + +type constr_pattern = + | PRef of global_reference + | PVar of identifier + | PRel of int + | PApp of constr_pattern * constr_pattern array + | PSoApp of int * constr_pattern list + | PBinder of binder_kind * name * constr_pattern * constr_pattern + | PSort of rawsort + | PMeta of int option + | PCase of constr_pattern option * constr_pattern * constr_pattern array + | PFix of fixpoint + | PCoFix of cofixpoint + +let rec occur_meta_pattern = function + | PApp (f,args) -> + (occur_meta_pattern f) or (array_exists occur_meta_pattern args) + | PBinder(_,na,t,c) -> (occur_meta_pattern t) or (occur_meta_pattern c) + | PCase(None,c,br) -> + (occur_meta_pattern c) or (array_exists occur_meta_pattern br) + | PCase(Some p,c,br) -> + (occur_meta_pattern p) or + (occur_meta_pattern c) or (array_exists occur_meta_pattern br) + | PMeta _ | PSoApp _ -> true + | PVar _ | PRef _ | PRel _ | PSort _ | PFix _ | PCoFix _ -> false + +type constr_label = + | ConstNode of section_path + | IndNode of inductive_path + | CstrNode of constructor_path + | VarNode of identifier + | SectionVarNode of section_path +(* + | ... +*) + +exception BoundPattern;; + +let label_of_ref = function + | ConstRef sp -> ConstNode sp + | IndRef sp -> IndNode sp + | ConstructRef sp -> CstrNode sp + | VarRef sp -> SectionVarNode sp + | EvarRef n -> raise BoundPattern + +let rec head_pattern_bound t = + match t with + | PBinder ((BProd|BLetIn),_,_,b) -> head_pattern_bound b + | PApp (c,args) -> head_pattern_bound c + | PCase (p,c,br) -> head_pattern_bound c + | PRef r -> label_of_ref r + | PVar id -> VarNode id + | PRel _ | PMeta _ | PSoApp _ | PSort _ | PFix _ -> raise BoundPattern + (* Perhaps they were arguments, but we don't beta-reduce *) + | PBinder(BLambda,_,_,_) -> raise BoundPattern + | PCoFix _ -> anomaly "head_pattern_bound: not a type" + +let head_of_constr_reference c = match kind_of_term c with + | IsConst (sp,_) -> ConstNode sp + | IsMutConstruct (sp,_) -> CstrNode sp + | IsMutInd (sp,_) -> IndNode sp + | IsVar id -> VarNode id + | _ -> anomaly "Not a rigid reference" + + +(* Second part : Given a term with second-order variables in it, + represented by Meta's, and possibly applied using [SOAPP] to + terms, this function will perform second-order, binding-preserving, + matching, in the case where the pattern is a pattern in the sense + of Dale Miller. + + ALGORITHM: + + Given a pattern, we decompose it, flattening Cast's and apply's, + recursing on all operators, and pushing the name of the binder each + time we descend a binder. + + When we reach a first-order variable, we ask that the corresponding + term's free-rels all be higher than the depth of the current stack. + + When we reach a second-order application, we ask that the + intersection of the free-rels of the term and the current stack be + contained in the arguments of the application, and in that case, we + construct a LAMBDA with the names on the stack. + + *) + +exception PatternMatchingFailure + +let constrain ((n : int),(m : constr)) sigma = + if List.mem_assoc n sigma then + if eq_constr m (List.assoc n sigma) then sigma + else raise PatternMatchingFailure + else + (n,m)::sigma + +let build_lambda toabstract stk (m : constr) = + let rec buildrec m p_0 p_1 = match p_0,p_1 with + | (_, []) -> m + | (n, (na,t)::tl) -> + if List.mem n toabstract then + buildrec (mkLambda (na,t,m)) (n+1) tl + else + buildrec (pop m) (n+1) tl + in + buildrec m 1 stk + +let memb_metavars m n = + match (m,n) with + | (None, _) -> true + | (Some mvs, n) -> List.mem n mvs + +let eq_context ctxt1 ctxt2 = array_for_all2 eq_constr ctxt1 ctxt2 + +let matches_core convert pat c = + let rec sorec stk sigma p t = + let cT = strip_outer_cast t in + match p,kind_of_term cT with + | PSoApp (n,args),m -> + let relargs = + List.map + (function + | PRel n -> n + | _ -> error "Only bound indices are currently allowed in second order pattern matching") + args in + let frels = Intset.elements (free_rels cT) in + if list_subset frels relargs then + constrain (n,build_lambda relargs stk cT) sigma + else + raise PatternMatchingFailure + + | PMeta (Some n), m -> + let depth = List.length stk in + let frels = Intset.elements (free_rels cT) in + if List.for_all (fun i -> i > depth) frels then + constrain (n,lift (-depth) cT) sigma + else + raise PatternMatchingFailure + + | PMeta None, m -> sigma + + | PRef (VarRef sp1), IsVar v2 when basename sp1 = v2 -> sigma + + | PVar v1, IsVar v2 when v1 = v2 -> sigma + + | PRef ref, _ when Declare.constr_of_reference Evd.empty (Global.env()) ref = cT -> sigma + + | PRel n1, IsRel n2 when n1 = n2 -> sigma + + | PSort (RProp c1), IsSort (Prop c2) when c1 = c2 -> sigma + + | PSort RType, IsSort (Type _) -> sigma + + | PApp (c1,arg1), IsApp (c2,arg2) -> + (try array_fold_left2 (sorec stk) (sorec stk sigma c1 c2) arg1 arg2 + with Invalid_argument _ -> raise PatternMatchingFailure) + + | PBinder(BProd,na1,c1,d1), IsProd(na2,c2,d2) -> + sorec ((na2,c2)::stk) (sorec stk sigma c1 c2) d1 d2 + + | PBinder(BLambda,na1,c1,d1), IsLambda(na2,c2,d2) -> + sorec ((na2,c2)::stk) (sorec stk sigma c1 c2) d1 d2 + + | PBinder(BLetIn,na1,c1,d1), IsLetIn(na2,c2,t2,d2) -> + sorec ((na2,t2)::stk) (sorec stk sigma c1 c2) d1 d2 + + | PRef (ConstRef _ as ref), _ when convert <> None -> + let (env,evars) = out_some convert in + let c = Declare.constr_of_reference Evd.empty env ref in + if is_conv env evars c cT then sigma + else raise PatternMatchingFailure + + | PCase (_,a1,br1), IsMutCase (_,_,a2,br2) -> + (* On ne teste pas le prédicat *) + array_fold_left2 (sorec stk) (sorec stk sigma a1 a2) + br1 br2 + (* À faire *) + | PFix f0, IsFix f1 when f0 = f1 -> sigma + | PCoFix c0, IsCoFix c1 when c0 = c1 -> sigma + | _ -> raise PatternMatchingFailure + + in + Sort.list (fun (a,_) (b,_) -> a raise (NextOccurrence nocc) + | c::tl -> + (try authorized_occ nocc (matches pat c) with + | PatternMatchingFailure -> (try_matches nocc pat tl) + | NextOccurrence nocc -> (try_matches (nocc - 1) pat tl)) + +(* Tries to match a subterm of [c] with [pat] *) +let rec sub_match nocc pat c = + match kind_of_term c with + | IsCast (c1,c2) -> + (try authorized_occ nocc ((matches pat c), mkMeta (-1)) with + | PatternMatchingFailure -> + let (lm,lc) = try_sub_match nocc pat [c1] in + (lm,mkCast (List.hd lc, c2)) + | NextOccurrence nocc -> + let (lm,lc) = try_sub_match (nocc - 1) pat [c1] in + (lm,mkCast (List.hd lc, c2))) + | IsLambda (x,c1,c2) -> + (try authorized_occ nocc ((matches pat c), mkMeta (-1)) with + | PatternMatchingFailure -> + let (lm,lc) = try_sub_match nocc pat [c1;c2] in + (lm,mkLambda (x,List.hd lc,List.nth lc 1)) + | NextOccurrence nocc -> + let (lm,lc) = try_sub_match (nocc - 1) pat [c1;c2] in + (lm,mkLambda (x,List.hd lc,List.nth lc 1))) + | IsProd (x,c1,c2) -> + (try authorized_occ nocc ((matches pat c), mkMeta (-1)) with + | PatternMatchingFailure -> + let (lm,lc) = try_sub_match nocc pat [c1;c2] in + (lm,mkProd (x,List.hd lc,List.nth lc 1)) + | NextOccurrence nocc -> + let (lm,lc) = try_sub_match (nocc - 1) pat [c1;c2] in + (lm,mkProd (x,List.hd lc,List.nth lc 1))) + | IsLetIn (x,c1,t2,c2) -> + (try authorized_occ nocc ((matches pat c), mkMeta (-1)) with + | PatternMatchingFailure -> + let (lm,lc) = try_sub_match nocc pat [c1;t2;c2] in + (lm,mkLetIn (x,List.hd lc,List.nth lc 1,List.nth lc 2)) + | NextOccurrence nocc -> + let (lm,lc) = try_sub_match (nocc - 1) pat [c1;t2;c2] in + (lm,mkLetIn (x,List.hd lc,List.nth lc 1,List.nth lc 2))) + | IsApp (c1,lc) -> + (try authorized_occ nocc ((matches pat c), mkMeta (-1)) with + | PatternMatchingFailure -> + let (lm,le) = try_sub_match nocc pat (c1::(Array.to_list lc)) in + (lm,mkApp (List.hd le, Array.of_list (List.tl le))) + | NextOccurrence nocc -> + let (lm,le) = try_sub_match (nocc - 1) pat (c1::(Array.to_list lc)) in + (lm,mkApp (List.hd le, Array.of_list (List.tl le)))) + | IsMutCase (ci,hd,c1,lc) -> + (try authorized_occ nocc ((matches pat c), mkMeta (-1)) with + | PatternMatchingFailure -> + let (lm,le) = try_sub_match nocc pat (c1::Array.to_list lc) in + (lm,mkMutCaseL (ci,hd,List.hd le,List.tl le)) + | NextOccurrence nocc -> + let (lm,le) = try_sub_match (nocc - 1) pat (c1::Array.to_list lc) in + (lm,mkMutCaseL (ci,hd,List.hd le,List.tl le))) + | IsMutConstruct _ | IsFix _ | IsMutInd _|IsCoFix _ |IsEvar _|IsConst _ + | IsRel _|IsMeta _|IsVar _|IsXtra _|IsSort _ -> + (try authorized_occ nocc ((matches pat c),mkMeta (-1)) with + | PatternMatchingFailure -> raise (NextOccurrence nocc) + | NextOccurrence nocc -> raise (NextOccurrence (nocc - 1))) + +(* Tries [sub_match] for all terms in the list *) +and try_sub_match nocc pat lc = + let rec try_sub_match_rec nocc pat lacc = function + | [] -> raise (NextOccurrence nocc) + | c::tl -> + (try + let (lm,ce) = sub_match nocc pat c in + (lm,lacc@(ce::tl)) + with + | NextOccurrence nocc -> try_sub_match_rec nocc pat (lacc@[c]) tl) in + try_sub_match_rec nocc pat [] lc + +let is_matching pat n = + try let _ = matches pat n in true + with PatternMatchingFailure -> false + +let matches_conv env sigma = matches_core (Some (env,sigma)) + +let is_matching_conv env sigma pat n = + try let _ = matches_conv env sigma pat n in true + with PatternMatchingFailure -> false + +let rec pattern_of_constr t = + match kind_of_term t with + | IsRel n -> PRel n + | IsMeta n -> PMeta (Some n) + | IsVar id -> PVar id + | IsSort (Prop c) -> PSort (RProp c) + | IsSort (Type _) -> PSort RType + | IsCast (c,_) -> pattern_of_constr c + | IsLetIn (na,c,_,b) -> + PBinder (BLetIn,na,pattern_of_constr c,pattern_of_constr b) + | IsProd (na,c,b) -> + PBinder (BProd,na,pattern_of_constr c,pattern_of_constr b) + | IsLambda (na,c,b) -> + PBinder (BLambda,na,pattern_of_constr c,pattern_of_constr b) + | IsApp (f,args) -> + PApp (pattern_of_constr f, Array.map pattern_of_constr args) + | IsConst (sp,ctxt) -> + pattern_of_ref (ConstRef sp) ctxt + | IsMutInd (sp,ctxt) -> + pattern_of_ref (IndRef sp) ctxt + | IsMutConstruct (sp,ctxt) -> + pattern_of_ref (ConstructRef sp) ctxt + | IsEvar (n,ctxt) -> + pattern_of_ref (EvarRef n) ctxt + | IsMutCase (ci,p,a,br) -> + PCase (Some (pattern_of_constr p),pattern_of_constr a, + Array.map pattern_of_constr br) + | IsFix f -> PFix f + | IsCoFix _ -> + error "pattern_of_constr: (co)fix currently not supported" + | IsXtra _ -> anomaly "No longer supported" + +and pattern_of_ref ref inst = + let args = Declare.extract_instance ref inst in + let f = PRef ref in + if args = [||] then f else PApp (f, Array.map pattern_of_constr args) diff --git a/pretyping/pattern.mli b/pretyping/pattern.mli new file mode 100644 index 0000000000..5c5c28ba1b --- /dev/null +++ b/pretyping/pattern.mli @@ -0,0 +1,86 @@ + +(*i $Id$ i*) + +(*i*) +open Names +open Sign +open Term +open Environ +(*i*) + +type constr_pattern = + | PRef of global_reference + | PVar of identifier + | PRel of int + | PApp of constr_pattern * constr_pattern array + | PSoApp of int * constr_pattern list + | PBinder of Rawterm.binder_kind * name * constr_pattern * constr_pattern + | PSort of Rawterm.rawsort + | PMeta of int option + | PCase of constr_pattern option * constr_pattern * constr_pattern array + | PFix of fixpoint + | PCoFix of cofixpoint + +val occur_meta_pattern : constr_pattern -> bool + +type constr_label = + | ConstNode of section_path + | IndNode of inductive_path + | CstrNode of constructor_path + | VarNode of identifier + | SectionVarNode of section_path + +exception BoundPattern + +(* [head_pattern_bound t] extracts the head variable/constant of the + type [t] or raises [BoundPattern] (even if a sort); it raises an anomaly + if [t] is an abstraction *) + +val head_pattern_bound : constr_pattern -> constr_label + +(* [head_of_constr_reference c] assumes [r] denotes a reference and + returns its label; raises an anomaly otherwise *) + +val head_of_constr_reference : Term.constr -> constr_label + +(* [pattern_of_constr c] translates a term [c] with metavariables into + a pattern; currently, no destructor (Cases, Fix, Cofix) and no + existential variable are allowed in [c] *) + +val pattern_of_constr : constr -> constr_pattern + + +exception PatternMatchingFailure + +(* [matches pat c] matches [c] against [pat] and returns the resulting + assignment of metavariables; it raises [PatternMatchingFailure] if + not matchable; bindings are given in increasing order based on the + numbers given in the pattern *) +val matches : + constr_pattern -> constr -> (int * constr) list + +(* [is_matching pat c] just tells if [c] matches against [pat] *) + +val is_matching : + constr_pattern -> constr -> bool + +(* [matches_conv env sigma] matches up to conversion in environment + [(env,sigma)] when constants in pattern are concerned; it raises + [PatternMatchingFailure] if not matchable; bindings are given in + increasing order based on the numbers given in the pattern *) + +val matches_conv : + env -> 'a Evd.evar_map -> constr_pattern -> constr -> (int * constr) list + +(* To skip to the next occurrence *) +exception NextOccurrence of int + +(* Tries to match a subterm of [c] with [pat] *) +val sub_match : + int -> constr_pattern -> constr -> ((int * constr) list * constr) + +(* [is_matching_conv env sigma pat c] tells if [c] matches against [pat] + up to conversion for constants in patterns *) + +val is_matching_conv : + env -> 'a Evd.evar_map -> constr_pattern -> constr -> bool -- cgit v1.2.3