aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
-rw-r--r--.depend149
-rw-r--r--.depend.camlp43
-rw-r--r--Makefile7
-rw-r--r--parsing/g_ltac.ml4160
-rw-r--r--parsing/g_tactic.ml4146
-rw-r--r--tactics/tauto.ml42
6 files changed, 242 insertions, 225 deletions
diff --git a/.depend b/.depend
index 9d50b1f97..d7c1472ce 100644
--- a/.depend
+++ b/.depend
@@ -29,8 +29,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 library/nametab.cmi \
@@ -51,6 +49,8 @@ library/library.cmi: library/lib.cmi library/libobject.cmi kernel/names.cmi \
library/nametab.cmi: library/libobject.cmi kernel/names.cmi lib/pp.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 \
@@ -202,19 +202,19 @@ toplevel/recordobj.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: parsing/coqast.cmi kernel/environ.cmi \
kernel/names.cmi library/nametab.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
@@ -401,30 +401,22 @@ lib/edit.cmo: lib/bstack.cmi lib/pp.cmi lib/util.cmi lib/edit.cmi
lib/edit.cmx: lib/bstack.cmx lib/pp.cmx lib/util.cmx lib/edit.cmi
lib/explore.cmo: lib/explore.cmi
lib/explore.cmx: lib/explore.cmi
-lib/gmap.cmo: lib/gmap.cmi
-lib/gmap.cmx: lib/gmap.cmi
lib/gmapl.cmo: lib/gmap.cmi lib/util.cmi lib/gmapl.cmi
lib/gmapl.cmx: lib/gmap.cmx lib/util.cmx lib/gmapl.cmi
+lib/gmap.cmo: lib/gmap.cmi
+lib/gmap.cmx: lib/gmap.cmi
lib/gset.cmo: lib/gset.cmi
lib/gset.cmx: lib/gset.cmi
lib/hashcons.cmo: lib/hashcons.cmi
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/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 \
@@ -499,6 +491,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 \
@@ -549,6 +549,10 @@ 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_ltac.cmo: parsing/ast.cmi parsing/coqast.cmi parsing/pcoq.cmi \
+ lib/pp.cmi lib/util.cmi
+parsing/g_ltac.cmx: parsing/ast.cmx parsing/coqast.cmx parsing/pcoq.cmx \
+ lib/pp.cmx lib/util.cmx
parsing/g_minicoq.cmo: kernel/environ.cmi parsing/lexer.cmi kernel/names.cmi \
lib/pp.cmi kernel/term.cmi kernel/univ.cmi lib/util.cmi \
parsing/g_minicoq.cmi
@@ -970,15 +974,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 parsing/search.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 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 parsing/search.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 kernel/sign.cmx \
+ proofs/tacmach.cmx tactics/tacticals.cmx tactics/tactics.cmx \
+ kernel/term.cmx lib/util.cmx
tactics/elim.cmo: proofs/clenv.cmi tactics/hiddentac.cmi \
tactics/hipattern.cmi kernel/inductive.cmi kernel/names.cmi lib/pp.cmi \
proofs/proof_type.cmi kernel/reduction.cmi proofs/tacmach.cmi \
@@ -1123,12 +1127,6 @@ tactics/tactics.cmx: parsing/astterm.cmx proofs/clenv.cmx kernel/closure.cmx \
kernel/reduction.cmx kernel/sign.cmx lib/stamps.cmx proofs/tacinterp.cmx \
proofs/tacmach.cmx pretyping/tacred.cmx tactics/tacticals.cmx \
kernel/term.cmx lib/util.cmx tactics/tactics.cmi
-tactics/tauto.cmo: parsing/ast.cmi parsing/coqast.cmi tactics/hipattern.cmi \
- kernel/names.cmi lib/pp.cmi proofs/proof_type.cmi proofs/tacinterp.cmi \
- proofs/tacmach.cmi tactics/tacticals.cmi tactics/tactics.cmi lib/util.cmi
-tactics/tauto.cmx: parsing/ast.cmx parsing/coqast.cmx tactics/hipattern.cmx \
- kernel/names.cmx lib/pp.cmx proofs/proof_type.cmx proofs/tacinterp.cmx \
- proofs/tacmach.cmx tactics/tacticals.cmx tactics/tactics.cmx lib/util.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 pretyping/pattern.cmx \
@@ -1143,12 +1141,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/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/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/gallina.cmo: tools/gallina_lexer.cmo
tools/gallina.cmx: tools/gallina_lexer.cmx
toplevel/class.cmo: pretyping/classops.cmi kernel/declarations.cmi \
@@ -1309,12 +1307,6 @@ 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/library.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/library.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 \
@@ -1357,16 +1349,12 @@ 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
-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
+toplevel/vernac.cmo: parsing/ast.cmi parsing/coqast.cmi library/library.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/library.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/pcicenv.cmo: library/global.cmi kernel/names.cmi \
contrib/correctness/past.cmi contrib/correctness/penv.cmi \
contrib/correctness/pmisc.cmi contrib/correctness/pmonad.cmi \
@@ -1379,6 +1367,16 @@ 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/penv.cmi contrib/correctness/perror.cmi \
@@ -1783,6 +1781,14 @@ contrib/interface/pbp.cmx: parsing/coqast.cmx parsing/coqlib.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
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 \
@@ -1801,14 +1807,6 @@ 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 \
parsing/coqast.cmi kernel/environ.cmi pretyping/evarutil.cmi \
kernel/evd.cmi library/libobject.cmi library/library.cmi kernel/names.cmi \
@@ -1882,25 +1880,23 @@ contrib/ring/ring.cmx: parsing/astterm.cmx kernel/closure.cmx \
pretyping/tacred.cmx tactics/tactics.cmx kernel/term.cmx \
pretyping/typing.cmx lib/util.cmx toplevel/vernacinterp.cmx
contrib/setoid/setoid_replace.cmo: parsing/astterm.cmi tactics/auto.cmi \
- toplevel/command.cmi kernel/declarations.cmi library/declare.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 proofs/pfedit.cmi lib/pp.cmi \
- parsing/printer.cmi proofs/proof_type.cmi kernel/reduction.cmi \
- library/summary.cmi proofs/tacmach.cmi tactics/tactics.cmi \
- kernel/term.cmi parsing/termast.cmi pretyping/typing.cmi lib/util.cmi \
+ toplevel/command.cmi library/declare.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 proofs/pfedit.cmi lib/pp.cmi parsing/printer.cmi \
+ proofs/proof_type.cmi kernel/reduction.cmi library/summary.cmi \
+ proofs/tacmach.cmi tactics/tactics.cmi kernel/term.cmi \
+ parsing/termast.cmi pretyping/typing.cmi lib/util.cmi \
toplevel/vernacentries.cmi toplevel/vernacinterp.cmi
contrib/setoid/setoid_replace.cmx: parsing/astterm.cmx tactics/auto.cmx \
- toplevel/command.cmx kernel/declarations.cmx library/declare.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 proofs/pfedit.cmx lib/pp.cmx \
- parsing/printer.cmx proofs/proof_type.cmx kernel/reduction.cmx \
- library/summary.cmx proofs/tacmach.cmx tactics/tactics.cmx \
- kernel/term.cmx parsing/termast.cmx pretyping/typing.cmx lib/util.cmx \
+ toplevel/command.cmx library/declare.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 proofs/pfedit.cmx lib/pp.cmx parsing/printer.cmx \
+ proofs/proof_type.cmx kernel/reduction.cmx library/summary.cmx \
+ proofs/tacmach.cmx tactics/tactics.cmx kernel/term.cmx \
+ parsing/termast.cmx pretyping/typing.cmx lib/util.cmx \
toplevel/vernacentries.cmx toplevel/vernacinterp.cmx
-contrib/xml/xml.cmo: contrib/xml/xml.cmi
-contrib/xml/xml.cmx: contrib/xml/xml.cmi
contrib/xml/xmlcommand.cmo: kernel/declarations.cmi library/declare.cmi \
kernel/environ.cmi kernel/evd.cmi library/global.cmi library/lib.cmi \
library/libobject.cmi library/library.cmi kernel/names.cmi \
@@ -1919,9 +1915,11 @@ 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
-tactics/tauto.cmo: parsing/grammar.cma kernel/names.cmo parsing/ast.cmo parsing/g_tactic.cmo parsing/g_constr.cmo
+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_constr.cmo
+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
parsing/lexer.cmo:
parsing/q_coqast.cmo:
parsing/g_prim.cmo:
@@ -1933,5 +1931,6 @@ parsing/g_proofs.cmo: parsing/grammar.cma
parsing/g_cases.cmo: parsing/grammar.cma
parsing/g_constr.cmo: parsing/grammar.cma
parsing/g_tactic.cmo: parsing/grammar.cma
+parsing/g_ltac.cmo: parsing/grammar.cma
parsing/extend.cmo: parsing/grammar.cma
toplevel/mltop.cmo:
diff --git a/.depend.camlp4 b/.depend.camlp4
index e30a54d29..6612744a1 100644
--- a/.depend.camlp4
+++ b/.depend.camlp4
@@ -1,6 +1,6 @@
tactics/tauto.ml: parsing/grammar.cma kernel/names.cmo parsing/ast.cmo parsing/g_tactic.cmo parsing/g_constr.cmo
contrib/correctness/psyntax.ml: parsing/grammar.cma
-contrib/field/field.ml: parsing/grammar.cma kernel/names.cmo parsing/ast.cmo parsing/g_tactic.cmo parsing/g_constr.cmo
+contrib/field/field.ml: parsing/grammar.cma kernel/names.cmo parsing/ast.cmo parsing/g_tactic.cmo parsing/g_ltac.cmo parsing/g_constr.cmo
parsing/lexer.ml:
parsing/q_coqast.ml:
parsing/g_prim.ml:
@@ -12,5 +12,6 @@ parsing/g_proofs.ml: parsing/grammar.cma
parsing/g_cases.ml: parsing/grammar.cma
parsing/g_constr.ml: parsing/grammar.cma
parsing/g_tactic.ml: parsing/grammar.cma
+parsing/g_ltac.ml: parsing/grammar.cma
parsing/extend.ml: parsing/grammar.cma
toplevel/mltop.ml:
diff --git a/Makefile b/Makefile
index b43907b96..bb0be2238 100644
--- a/Makefile
+++ b/Makefile
@@ -96,7 +96,7 @@ PARSING=parsing/lexer.cmo parsing/coqast.cmo parsing/pcoq.cmo parsing/ast.cmo \
parsing/termast.cmo parsing/astterm.cmo parsing/coqlib.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 \
+ parsing/g_ltac.cmo parsing/g_constr.cmo parsing/g_cases.cmo \
parsing/extend.cmo parsing/esyntax.cmo \
parsing/printer.cmo parsing/prettyp.cmo parsing/search.cmo \
parsing/egrammar.cmo \
@@ -165,7 +165,7 @@ PARSERREQUIRES=lib/pp_control.cmo lib/pp.cmo \
parsing/pcoq.cmo parsing/ast.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 \
+ parsing/g_ltac.cmo parsing/g_constr.cmo parsing/g_cases.cmo \
parsing/extend.cmo config/coq_config.cmo\
lib/system.cmo lib/bstack.cmo lib/edit.cmo \
library/nametab.cmo kernel/univ.cmo library/lib.cmo kernel/esubst.cmo \
@@ -695,7 +695,8 @@ clean::
ML4FILES +=parsing/g_basevernac.ml4 parsing/g_minicoq.ml4 \
parsing/g_vernac.ml4 parsing/g_proofs.ml4 parsing/g_cases.ml4 \
- parsing/g_constr.ml4 parsing/g_tactic.ml4 parsing/extend.ml4
+ parsing/g_constr.ml4 parsing/g_tactic.ml4 parsing/g_ltac.ml4 \
+ parsing/extend.ml4
# beforedepend:: $(GRAMMARCMO)
diff --git a/parsing/g_ltac.ml4 b/parsing/g_ltac.ml4
new file mode 100644
index 000000000..cd6947b5b
--- /dev/null
+++ b/parsing/g_ltac.ml4
@@ -0,0 +1,160 @@
+(***********************************************************************)
+(* 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 camlp4deps: "parsing/grammar.cma" i*)
+
+(* $Id$ *)
+
+open Pp
+open Ast
+open Pcoq
+open Tactic
+open Util
+
+(* Tactics grammar rules *)
+
+(* Tactics grammar rules *)
+
+GEXTEND Gram
+ input_fun:
+ [ [ l = identarg -> l
+ | "()" -> <:ast< (VOID) >> ] ]
+ ;
+ let_clause:
+ [ [ id = identarg; "="; te=tactic_atom -> <:ast< (LETCLAUSE $id $te) >>
+ | id = identarg; ":"; c = constrarg; ":="; "Proof" ->
+ (match c with
+ | Coqast.Node(_,"COMMAND",[csr]) ->
+ <:ast< (LETTOPCLAUSE $id (CONSTR $csr)) >>
+ | _ -> errorlabstrm "Gram.let_clause" [<'sTR "Not a COMMAND">])
+ | id = identarg; ":"; c = constrarg; ":="; te = tactic_expr ->
+ <:ast< (LETCUTCLAUSE $id $c $te) >>
+ | id = identarg; ":"; c = constrarg ->
+ (match c with
+ | Coqast.Node(_,"COMMAND",[csr]) ->
+ <:ast< (LETTOPCLAUSE $id (CONSTR $csr)) >>
+ | _ -> errorlabstrm "Gram.let_clause" [<'sTR "Not a COMMAND">]) ] ]
+ ;
+ rec_clause:
+ [ [ name = identarg; it = LIST1 input_fun; "->"; body = tactic_atom ->
+ <:ast< (RECCLAUSE $name (FUNVAR ($LIST $it)) $body) >> ] ]
+ ;
+ match_pattern:
+ [ [ id = constrarg; "["; pc = constrarg; "]" ->
+ (match id with
+ | Coqast.Node(_,"COMMAND",
+ [Coqast.Node(_,"QUALID",[Coqast.Nvar(_,s)])]) ->
+ <:ast< (SUBTERM ($VAR $s) $pc) >>
+ | _ ->
+ errorlabstrm "Gram.match_pattern" [<'sTR "Not a correct SUBTERM">])
+ | "["; pc = constrarg; "]" -> <:ast< (SUBTERM $pc) >>
+ | pc = constrarg -> <:ast< (TERM $pc) >> ] ]
+ ;
+ match_hyps:
+ [ [ id = identarg; ":"; mp = match_pattern ->
+ <:ast< (MATCHCONTEXTHYPS $id $mp) >>
+ | IDENT "_"; ":"; mp = match_pattern ->
+ <:ast< (MATCHCONTEXTHYPS $mp) >> ] ]
+ ;
+ match_context_rule:
+ [ [ "["; largs = LIST0 match_hyps SEP ";"; "|-"; mp = match_pattern; "]";
+ "->"; te = tactic_expr ->
+ <:ast< (MATCHCONTEXTRULE ($LIST $largs) $mp $te) >>
+ | IDENT "_"; "->"; te = tactic_expr -> <:ast< (MATCHCONTEXTRULE $te) >>
+ ] ]
+ ;
+ match_context_list:
+ [ [ mrl = LIST1 match_context_rule SEP "|" -> mrl
+ | "|"; mrl = LIST1 match_context_rule SEP "|" -> mrl ] ]
+ ;
+ match_rule:
+ [ [ "["; mp = match_pattern; "]"; "->"; te = tactic_expr ->
+ <:ast<(MATCHRULE $mp $te)>>
+ | IDENT "_"; "->"; te = tactic_expr -> <:ast< (MATCHRULE $te) >> ] ]
+ ;
+ match_list:
+ [ [ mrl = LIST1 match_rule SEP "|" -> mrl
+ | "|"; mrl = LIST1 match_rule SEP "|" -> mrl ] ]
+ ;
+ tactic_expr:
+ [ [ ta0 = tactic_expr; ";"; ta1 = tactic_expr ->
+ <:ast< (TACTICLIST $ta0 $ta1) >>
+ | ta = tactic_expr; ";"; "["; lta = LIST0 tactic_expr SEP "|"; "]" ->
+ <:ast< (TACTICLIST $ta (TACLIST ($LIST $lta))) >>
+ | y = tactic_atom0 -> y ] ]
+ ;
+ tactic_atom0:
+ [ [ la = LIST1 tactic_atom ->
+ if (List.length la) = 1 then
+ let el = List.hd la in <:ast< $el >>
+ else
+ <:ast< (APP ($LIST $la)) >> ] ]
+ ;
+ tactic_atom:
+ [ [ IDENT "Fun"; it = LIST1 input_fun ; "->"; body = tactic_expr ->
+ <:ast< (FUN (FUNVAR ($LIST $it)) $body) >>
+ | IDENT "Rec"; rc = rec_clause -> <:ast< (REC $rc) >>
+ | IDENT "Rec"; rc = rec_clause; IDENT "In"; body = tactic_expr ->
+ <:ast< (REC (RECDECL $rc) $body) >>
+ | IDENT "Rec"; rc = rec_clause; "And";
+ rcl = LIST1 rec_clause SEP "And"; IDENT "In";
+ body = tactic_expr ->
+ <:ast< (REC (RECDECL $rc ($LIST $rcl)) $body) >>
+ | IDENT "Let"; llc = LIST1 let_clause SEP "And"; IDENT "In";
+ u = tactic_expr -> <:ast< (LET (LETDECL ($LIST $llc)) $u) >>
+ | IDENT "Let"; llc = LIST1 let_clause SEP "And" ->
+ (match llc with
+ | [Coqast.Node(_,"LETTOPCLAUSE",[id;c])] ->
+ <:ast< (StartProof "LETTOP" $id $c) >>
+ | _ -> <:ast< (LETCUT (LETDECL ($LIST $llc))) >>)
+ | IDENT "Let"; llc = LIST1 let_clause SEP "And";
+ tb = Vernac_.theorem_body; "Qed" ->
+ (match llc with
+ | [Coqast.Node(_,"LETTOPCLAUSE",[id;c])] ->
+ <:ast< (TheoremProof "LETTOP" $id $c $tb) >>
+ | _ -> errorlabstrm "Gram.tactic_atom" [<'sTR "Not a LETTOPCLAUSE">])
+ | IDENT "Match"; IDENT "Context"; IDENT "With"; mrl = match_context_list
+ -> <:ast< (MATCHCONTEXT ($LIST $mrl)) >>
+ | IDENT "Match"; com = constrarg; IDENT "With"; mrl = match_list ->
+ <:ast< (MATCH $com ($LIST $mrl)) >>
+ | "("; te = tactic_expr; ")" -> te
+ | "("; te = tactic_expr; tel=LIST1 tactic_expr; ")" ->
+ <:ast< (APP $te ($LIST tel)) >>
+ | IDENT "First" ; "["; l = LIST0 tactic_expr SEP "|"; "]" ->
+ <:ast<(FIRST ($LIST $l))>>
+ | IDENT "Info"; tc = tactic_expr -> <:ast< (INFO $tc) >>
+ | IDENT "Solve" ; "["; l = LIST0 tactic_expr SEP "|"; "]" ->
+ <:ast<(TCLSOLVE ($LIST $l))>>
+ | IDENT "Try"; ta0 = tactic_atom; "Orelse"; ta1 = tactic_atom ->
+ <:ast< (TRY (ORELSE $ta0 $ta1)) >>
+ | IDENT "Try"; ta = tactic_atom -> <:ast< (TRY $ta) >>
+ | IDENT "Do"; n = pure_numarg; ta = tactic_atom -> <:ast< (DO $n $ta) >>
+ | IDENT "Repeat"; ta0 = tactic_atom; "Orelse"; ta1 = tactic_atom ->
+ <:ast< (REPEAT (ORELSE $ta0 $ta1)) >>
+ | IDENT "Repeat"; ta = tactic_atom -> <:ast< (REPEAT $ta) >>
+ | IDENT "Idtac" -> <:ast< (IDTAC) >>
+ | IDENT "Fail" -> <:ast<(FAIL)>>
+ | IDENT "Fail"; n = pure_numarg -> <:ast<(FAIL $n)>>
+ | ta0 = tactic_atom; "Orelse"; ta1 = tactic_atom ->
+ <:ast< (ORELSE $ta0 $ta1) >>
+ | IDENT "Progress"; ta = tactic_atom -> <:ast< (PROGRESS $ta) >>
+ | st = simple_tactic -> st
+ | tca = tactic_arg -> tca ] ]
+ ;
+ tactic_arg:
+ [ [ "()" -> <:ast< (VOID) >>
+ | n = pure_numarg -> n
+ | id = identarg -> id
+ | "?" -> <:ast< (COMMAND (ISEVAR)) >>
+ | "?"; n = Prim.number -> <:ast< (COMMAND (META $n)) >>
+ | IDENT "Eval"; rtc = Tactic.red_tactic; "in"; c = Constr.constr ->
+ <:ast< (COMMAND (EVAL $c (REDEXP $rtc))) >>
+ | IDENT "Inst"; id = identarg; "["; c = Constr.constr; "]" ->
+ <:ast< (COMMAND (CONTEXT $id $c)) >>
+ | "'"; c = constrarg -> c ] ];
+ END
diff --git a/parsing/g_tactic.ml4 b/parsing/g_tactic.ml4
index 42552fbd1..70aaba18d 100644
--- a/parsing/g_tactic.ml4
+++ b/parsing/g_tactic.ml4
@@ -227,146 +227,7 @@ GEXTEND Gram
;
END
-(* Tactics grammar rules *)
-
GEXTEND Gram
- input_fun:
- [ [ l = identarg -> l
- | "()" -> <:ast< (VOID) >> ] ]
- ;
- let_clause:
- [ [ id = identarg; "="; te=tactic_atom -> <:ast< (LETCLAUSE $id $te) >>
- | id = identarg; ":"; c = constrarg; ":="; "Proof" ->
- (match c with
- | Coqast.Node(_,"COMMAND",[csr]) ->
- <:ast< (LETTOPCLAUSE $id (CONSTR $csr)) >>
- | _ -> errorlabstrm "Gram.let_clause" [<'sTR "Not a COMMAND">])
- | id = identarg; ":"; c = constrarg; ":="; te = tactic_expr ->
- <:ast< (LETCUTCLAUSE $id $c $te) >>
- | id = identarg; ":"; c = constrarg ->
- (match c with
- | Coqast.Node(_,"COMMAND",[csr]) ->
- <:ast< (LETTOPCLAUSE $id (CONSTR $csr)) >>
- | _ -> errorlabstrm "Gram.let_clause" [<'sTR "Not a COMMAND">]) ] ]
- ;
- rec_clause:
- [ [ name = identarg; it = LIST1 input_fun; "->"; body = tactic_atom ->
- <:ast< (RECCLAUSE $name (FUNVAR ($LIST $it)) $body) >> ] ]
- ;
- match_pattern:
- [ [ id = constrarg; "["; pc = constrarg; "]" ->
- (match id with
- | Coqast.Node(_,"COMMAND",
- [Coqast.Node(_,"QUALID",[Coqast.Nvar(_,s)])]) ->
- <:ast< (SUBTERM ($VAR $s) $pc) >>
- | _ ->
- errorlabstrm "Gram.match_pattern" [<'sTR "Not a correct SUBTERM">])
- | "["; pc = constrarg; "]" -> <:ast< (SUBTERM $pc) >>
- | pc = constrarg -> <:ast< (TERM $pc) >> ] ]
- ;
- match_hyps:
- [ [ id = identarg; ":"; mp = match_pattern ->
- <:ast< (MATCHCONTEXTHYPS $id $mp) >>
- | IDENT "_"; ":"; mp = match_pattern ->
- <:ast< (MATCHCONTEXTHYPS $mp) >> ] ]
- ;
- match_context_rule:
- [ [ "["; largs = LIST0 match_hyps SEP ";"; "|-"; mp = match_pattern; "]";
- "->"; te = tactic_expr ->
- <:ast< (MATCHCONTEXTRULE ($LIST $largs) $mp $te) >>
- | IDENT "_"; "->"; te = tactic_expr -> <:ast< (MATCHCONTEXTRULE $te) >>
- ] ]
- ;
- match_context_list:
- [ [ mrl = LIST1 match_context_rule SEP "|" -> mrl
- | "|"; mrl = LIST1 match_context_rule SEP "|" -> mrl ] ]
- ;
- match_rule:
- [ [ "["; mp = match_pattern; "]"; "->"; te = tactic_expr ->
- <:ast<(MATCHRULE $mp $te)>>
- | IDENT "_"; "->"; te = tactic_expr -> <:ast< (MATCHRULE $te) >> ] ]
- ;
- match_list:
- [ [ mrl = LIST1 match_rule SEP "|" -> mrl
- | "|"; mrl = LIST1 match_rule SEP "|" -> mrl ] ]
- ;
- tactic_expr:
- [ [ ta0 = tactic_expr; ";"; ta1 = tactic_expr ->
- <:ast< (TACTICLIST $ta0 $ta1) >>
- | ta = tactic_expr; ";"; "["; lta = LIST0 tactic_expr SEP "|"; "]" ->
- <:ast< (TACTICLIST $ta (TACLIST ($LIST $lta))) >>
- | y = tactic_atom0 -> y ] ]
- ;
- tactic_atom0:
- [ [ la = LIST1 tactic_atom ->
- if (List.length la) = 1 then
- let el = List.hd la in <:ast< $el >>
- else
- <:ast< (APP ($LIST $la)) >> ] ]
- ;
- tactic_atom:
- [ [ IDENT "Fun"; it = LIST1 input_fun ; "->"; body = tactic_expr ->
- <:ast< (FUN (FUNVAR ($LIST $it)) $body) >>
- | IDENT "Rec"; rc = rec_clause -> <:ast< (REC $rc) >>
- | IDENT "Rec"; rc = rec_clause; IDENT "In"; body = tactic_expr ->
- <:ast< (REC (RECDECL $rc) $body) >>
- | IDENT "Rec"; rc = rec_clause; "And";
- rcl = LIST1 rec_clause SEP "And"; IDENT "In";
- body = tactic_expr ->
- <:ast< (REC (RECDECL $rc ($LIST $rcl)) $body) >>
- | IDENT "Let"; llc = LIST1 let_clause SEP "And"; IDENT "In";
- u = tactic_expr -> <:ast< (LET (LETDECL ($LIST $llc)) $u) >>
- | IDENT "Let"; llc = LIST1 let_clause SEP "And" ->
- (match llc with
- | [Coqast.Node(_,"LETTOPCLAUSE",[id;c])] ->
- <:ast< (StartProof "LETTOP" $id $c) >>
- | _ -> <:ast< (LETCUT (LETDECL ($LIST $llc))) >>)
- | IDENT "Let"; llc = LIST1 let_clause SEP "And";
- tb = Vernac_.theorem_body; "Qed" ->
- (match llc with
- | [Coqast.Node(_,"LETTOPCLAUSE",[id;c])] ->
- <:ast< (TheoremProof "LETTOP" $id $c $tb) >>
- | _ -> errorlabstrm "Gram.tactic_atom" [<'sTR "Not a LETTOPCLAUSE">])
- | IDENT "Match"; IDENT "Context"; IDENT "With"; mrl = match_context_list
- -> <:ast< (MATCHCONTEXT ($LIST $mrl)) >>
- | IDENT "Match"; com = constrarg; IDENT "With"; mrl = match_list ->
- <:ast< (MATCH $com ($LIST $mrl)) >>
- | "("; te = tactic_expr; ")" -> te
- | "("; te = tactic_expr; tel=LIST1 tactic_expr; ")" ->
- <:ast< (APP $te ($LIST tel)) >>
- | IDENT "First" ; "["; l = LIST0 tactic_expr SEP "|"; "]" ->
- <:ast<(FIRST ($LIST $l))>>
- | IDENT "Info"; tc = tactic_expr -> <:ast< (INFO $tc) >>
- | IDENT "Solve" ; "["; l = LIST0 tactic_expr SEP "|"; "]" ->
- <:ast<(TCLSOLVE ($LIST $l))>>
- | IDENT "Try"; ta0 = tactic_atom; "Orelse"; ta1 = tactic_atom ->
- <:ast< (TRY (ORELSE $ta0 $ta1)) >>
- | IDENT "Try"; ta = tactic_atom -> <:ast< (TRY $ta) >>
- | IDENT "Do"; n = pure_numarg; ta = tactic_atom -> <:ast< (DO $n $ta) >>
- | IDENT "Repeat"; ta0 = tactic_atom; "Orelse"; ta1 = tactic_atom ->
- <:ast< (REPEAT (ORELSE $ta0 $ta1)) >>
- | IDENT "Repeat"; ta = tactic_atom -> <:ast< (REPEAT $ta) >>
- | IDENT "Idtac" -> <:ast< (IDTAC) >>
- | IDENT "Fail" -> <:ast<(FAIL)>>
- | IDENT "Fail"; n = pure_numarg -> <:ast<(FAIL $n)>>
- | ta0 = tactic_atom; "Orelse"; ta1 = tactic_atom ->
- <:ast< (ORELSE $ta0 $ta1) >>
- | IDENT "Progress"; ta = tactic_atom -> <:ast< (PROGRESS $ta) >>
- | st = simple_tactic -> st
- | tca = tactic_arg -> tca ] ]
- ;
- tactic_arg:
- [ [ "()" -> <:ast< (VOID) >>
- | n = pure_numarg -> n
- | id = identarg -> id
- | "?" -> <:ast< (COMMAND (ISEVAR)) >>
- | "?"; n = Prim.number -> <:ast< (COMMAND (META $n)) >>
- | IDENT "Eval"; rtc = Tactic.red_tactic; "in"; c = Constr.constr ->
- <:ast< (COMMAND (EVAL $c (REDEXP $rtc))) >>
- | IDENT "Inst"; id = identarg; "["; c = Constr.constr; "]" ->
- <:ast< (COMMAND (CONTEXT $id $c)) >>
- | "'"; c = constrarg -> c ] ]
- ;
simple_tactic:
[ [ IDENT "Fix"; n = pure_numarg -> <:ast< (Fix $n) >>
| IDENT "Fix"; id = identarg; n = pure_numarg -> <:ast< (Fix $id $n) >>
@@ -407,12 +268,7 @@ GEXTEND Gram
| IDENT "Auto"; IDENT "Decomp" -> <:ast< (DAuto) >>
| IDENT "Auto"; n = pure_numarg; IDENT "Decomp"; p = pure_numarg ->
<:ast< (DAuto $n $p) >>
- ] ];
- END
-
-GEXTEND Gram
- simple_tactic:
- [ [ IDENT "Intros" -> <:ast< (Intros) >>
+ | IDENT "Intros" -> <:ast< (Intros) >>
| IDENT "Intros"; IDENT "until"; id = identarg
-> <:ast< (IntrosUntil $id) >>
| IDENT "Intros"; IDENT "until"; n = numarg -> <:ast<(IntrosUntil $n)>>
diff --git a/tactics/tauto.ml4 b/tactics/tauto.ml4
index 1788298be..acc978aff 100644
--- a/tactics/tauto.ml4
+++ b/tactics/tauto.ml4
@@ -6,7 +6,7 @@
(* * GNU Lesser General Public License Version 2.1 *)
(***********************************************************************)
-(*i camlp4deps: "parsing/grammar.cma kernel/names.cmo parsing/ast.cmo parsing/g_tactic.cmo parsing/g_constr.cmo" i*)
+(*i camlp4deps: "parsing/grammar.cma kernel/names.cmo parsing/ast.cmo parsing/g_tactic.cmo parsing/g_ltac.cmo parsing/g_constr.cmo" i*)
(*i $Id$ i*)