From e978da8c41d8a3c19a29036d9c569fbe2a4616b0 Mon Sep 17 00:00:00 2001 From: Samuel Mimram Date: Fri, 16 Jun 2006 14:41:51 +0000 Subject: Imported Upstream version 8.0pl3+8.1beta --- dev/Makefile.common | 52 -- dev/Makefile.devel | 74 -- dev/Makefile.dir | 131 ---- dev/Makefile.subdir | 7 - dev/README | 54 +- dev/base_include | 102 +++ dev/changements.txt | 455 ------------ dev/db | 1 + dev/debugging.txt | 56 -- dev/doc/Makefile | 67 -- dev/doc/ast.ml | 47 -- dev/doc/changes.txt | 504 +++++++++++++ dev/doc/check-grammar | 50 -- dev/doc/cic.dtd | 231 ++++++ dev/doc/debugging.txt | 71 ++ dev/doc/extensions.txt | 19 + dev/doc/header | 7 + dev/doc/interp.dep.ps | 583 --------------- dev/doc/intro.tex | 25 - dev/doc/kernel.dep.ps | 1454 ------------------------------------- dev/doc/lex.mll | 81 --- dev/doc/library.dep.ps | 836 --------------------- dev/doc/macros.tex | 7 - dev/doc/memo-v8.tex | 286 -------- dev/doc/parse.ml | 183 ----- dev/doc/parsing.dep.ps | 1115 ---------------------------- dev/doc/perf-analysis | 47 ++ dev/doc/preamble.tex | 8 - dev/doc/pretyping.dep.ps | 1259 -------------------------------- dev/doc/proofs.dep.ps | 638 ---------------- dev/doc/style.txt | 49 ++ dev/doc/syntax-v8.tex | 1268 -------------------------------- dev/doc/syntax.mly | 224 ------ dev/doc/tactics.dep.ps | 991 ------------------------- dev/doc/toplevel.dep.ps | 971 ------------------------- dev/doc/translate.txt | 495 +++++++++++++ dev/doc/universes.txt | 32 + dev/header | 7 - dev/objects.el | 153 ---- dev/ocamldebug-coq.template | 2 +- dev/ocamlweb-doc/Makefile | 75 ++ dev/ocamlweb-doc/ast.ml | 47 ++ dev/ocamlweb-doc/interp.dep.ps | 583 +++++++++++++++ dev/ocamlweb-doc/intro.tex | 25 + dev/ocamlweb-doc/kernel.dep.ps | 1454 +++++++++++++++++++++++++++++++++++++ dev/ocamlweb-doc/lex.mll | 81 +++ dev/ocamlweb-doc/library.dep.ps | 836 +++++++++++++++++++++ dev/ocamlweb-doc/macros.tex | 7 + dev/ocamlweb-doc/parse.ml | 183 +++++ dev/ocamlweb-doc/parsing.dep.ps | 1115 ++++++++++++++++++++++++++++ dev/ocamlweb-doc/preamble.tex | 8 + dev/ocamlweb-doc/pretyping.dep.ps | 1259 ++++++++++++++++++++++++++++++++ dev/ocamlweb-doc/proofs.dep.ps | 638 ++++++++++++++++ dev/ocamlweb-doc/syntax.mly | 224 ++++++ dev/ocamlweb-doc/tactics.dep.ps | 991 +++++++++++++++++++++++++ dev/ocamlweb-doc/toplevel.dep.ps | 971 +++++++++++++++++++++++++ dev/perf-analysis | 47 -- dev/style.txt | 49 -- dev/tools/Makefile.common | 52 ++ dev/tools/Makefile.devel | 74 ++ dev/tools/Makefile.dir | 131 ++++ dev/tools/Makefile.subdir | 7 + dev/tools/objects.el | 153 ++++ dev/tools/univdot | 49 ++ dev/translate.txt | 495 ------------- dev/univdot | 49 -- dev/universes.txt | 32 - dev/v8-syntax/check-grammar | 50 ++ dev/v8-syntax/memo-v8.tex | 286 ++++++++ dev/v8-syntax/syntax-v8.tex | 1268 ++++++++++++++++++++++++++++++++ 70 files changed, 12167 insertions(+), 11714 deletions(-) delete mode 100644 dev/Makefile.common delete mode 100644 dev/Makefile.devel delete mode 100644 dev/Makefile.dir delete mode 100644 dev/Makefile.subdir delete mode 100644 dev/changements.txt delete mode 100644 dev/debugging.txt delete mode 100644 dev/doc/Makefile delete mode 100644 dev/doc/ast.ml create mode 100644 dev/doc/changes.txt delete mode 100755 dev/doc/check-grammar create mode 100644 dev/doc/cic.dtd create mode 100644 dev/doc/debugging.txt create mode 100644 dev/doc/extensions.txt create mode 100644 dev/doc/header delete mode 100644 dev/doc/interp.dep.ps delete mode 100644 dev/doc/intro.tex delete mode 100644 dev/doc/kernel.dep.ps delete mode 100644 dev/doc/lex.mll delete mode 100644 dev/doc/library.dep.ps delete mode 100644 dev/doc/macros.tex delete mode 100644 dev/doc/memo-v8.tex delete mode 100644 dev/doc/parse.ml delete mode 100644 dev/doc/parsing.dep.ps create mode 100644 dev/doc/perf-analysis delete mode 100644 dev/doc/preamble.tex delete mode 100644 dev/doc/pretyping.dep.ps delete mode 100644 dev/doc/proofs.dep.ps create mode 100644 dev/doc/style.txt delete mode 100644 dev/doc/syntax-v8.tex delete mode 100644 dev/doc/syntax.mly delete mode 100644 dev/doc/tactics.dep.ps delete mode 100644 dev/doc/toplevel.dep.ps create mode 100644 dev/doc/translate.txt create mode 100644 dev/doc/universes.txt delete mode 100644 dev/header delete mode 100644 dev/objects.el create mode 100644 dev/ocamlweb-doc/Makefile create mode 100644 dev/ocamlweb-doc/ast.ml create mode 100644 dev/ocamlweb-doc/interp.dep.ps create mode 100644 dev/ocamlweb-doc/intro.tex create mode 100644 dev/ocamlweb-doc/kernel.dep.ps create mode 100644 dev/ocamlweb-doc/lex.mll create mode 100644 dev/ocamlweb-doc/library.dep.ps create mode 100644 dev/ocamlweb-doc/macros.tex create mode 100644 dev/ocamlweb-doc/parse.ml create mode 100644 dev/ocamlweb-doc/parsing.dep.ps create mode 100644 dev/ocamlweb-doc/preamble.tex create mode 100644 dev/ocamlweb-doc/pretyping.dep.ps create mode 100644 dev/ocamlweb-doc/proofs.dep.ps create mode 100644 dev/ocamlweb-doc/syntax.mly create mode 100644 dev/ocamlweb-doc/tactics.dep.ps create mode 100644 dev/ocamlweb-doc/toplevel.dep.ps delete mode 100644 dev/perf-analysis delete mode 100644 dev/style.txt create mode 100644 dev/tools/Makefile.common create mode 100644 dev/tools/Makefile.devel create mode 100644 dev/tools/Makefile.dir create mode 100644 dev/tools/Makefile.subdir create mode 100644 dev/tools/objects.el create mode 100755 dev/tools/univdot delete mode 100644 dev/translate.txt delete mode 100755 dev/univdot delete mode 100644 dev/universes.txt create mode 100755 dev/v8-syntax/check-grammar create mode 100644 dev/v8-syntax/memo-v8.tex create mode 100644 dev/v8-syntax/syntax-v8.tex (limited to 'dev') diff --git a/dev/Makefile.common b/dev/Makefile.common deleted file mode 100644 index 1ff5cf79..00000000 --- a/dev/Makefile.common +++ /dev/null @@ -1,52 +0,0 @@ -# this Makefile contains goals common for directory and main devel makefiles - -ifndef TOPDIR -TOPDIR=.. -endif - -ifndef BASEDIR -BASEDIR= -endif - -# the following entries are used to make synchronize two source trees -# (on big computer and on a laptop for example) - -OTHER_FILE=$(TOPDIR)/dev/other -OTHER=$(shell cat $(OTHER_FILE)) - -# this is a directory of useful temporary things -WORKDIR=tmp - -ifneq (,$(findstring n,$(MAKEFLAGS))) -NFLAG=-n -else -NFLAG= -endif - -check_other: - +@(if [ "$(OTHER)" = "" ] ; then \ - echo You must put the ssh path to the other Coq source in $(OTHER_FILE) ; \ - echo For example: chrzaszc@ruta:coq/V7 ; \ - exit 1; \ - fi) - -get: check_other - +rsync -Cauvz $(NFLAG) $(OTHER)/ $(TOPDIR)/ - +@(if [ -d $(TOPDIR)/$(WORKDIR) ]; then \ - rsync -auvz $(NFLAG) $(OTHER)/tmp/ $(TOPDIR)/tmp/ ; \ - fi) - -put: check_other - +rsync -Cauvz $(NFLAG) $(TOPDIR)/ $(OTHER)/ - +@(if [ -d $(TOPDIR)/$(WORKDIR) ]; then \ - rsync -auvz $(NFLAG) $(TOPDIR)/tmp/ $(OTHER)/tmp/ ; \ - fi) - -sync: get put - - -conflicts: - cvs status | grep File | grep conflicts | less - -confl: conflicts - diff --git a/dev/Makefile.devel b/dev/Makefile.devel deleted file mode 100644 index f3abb62d..00000000 --- a/dev/Makefile.devel +++ /dev/null @@ -1,74 +0,0 @@ -# to be linked to makefile (lowercase - takes precedence over Makefile) -# in main directory -# make devel in main directory should do this for you. - -TOPDIR=. -BASEDIR= - -SOURCEDIRS=lib kernel library pretyping parsing proofs tactics toplevel - -default: usage noargument - -usage:: - @echo Usage: make \ - @echo Targets are: - -usage:: - @echo " setup-devel -- set the devel makefile" -setup-devel: - @ln -sfv dev/Makefile.devel makefile - @(for i in $(SOURCEDIRS); do \ - (cd $(TOPDIR)/$$i; ln -sfv ../dev/Makefile.dir Makefile) \ - done) - - -usage:: - @echo " clean-devel -- clear all devel files" -clean-devel: - echo rm -f makefile .depend.devel - echo rm -f $(foreach dir,$(SOURCEDIRS), $(TOPDIR)/$(dir)/Makefile) - - -usage:: - @echo " coqtop -- make until the bytecode executable, make the link" -coqtop: bin/coqtop.byte - ln -sf bin/coqtop.byte coqtop - - -usage:: - @echo " quick -- make bytecode executable and states" -quick: - $(MAKE) states BEST=byte - -include Makefile - -include $(TOPDIR)/dev/Makefile.common - -# this file is better described in dev/Makefile.dir -include .depend.devel - -#if dev/Makefile.local exists, it is included -ifneq ($(wildcard $(TOPDIR)/dev/Makefile.local),) -include $(TOPDIR)/dev/Makefile.local -endif - - -usage:: - @echo " total -- runs coqtop with all theories required" -total: - ledit ./bin/coqtop.byte $(foreach th,$(THEORIESVO),-require $(notdir $(basename $(th)))) - - -usage:: - @echo " run -- makes and runs bytecode coqtop using ledit and the history file" - @echo " if you want to pass arguments to coqtop, use make run ARG=" -run: $(TOPDIR)/coqtop - ledit -h $(TOPDIR)/dev/debug_history -x $(TOPDIR)/coqtop $(ARG) $(ARGS) - - -usage:: - @echo " vars -- echos commands to set COQTOP and COQBIN variables" -vars: - @(cd $(TOPDIR); \ - echo export COQTOP=`pwd`/ ; \ - echo export COQBIN=`pwd`/bin/ ) \ No newline at end of file diff --git a/dev/Makefile.dir b/dev/Makefile.dir deleted file mode 100644 index 54f7bfe9..00000000 --- a/dev/Makefile.dir +++ /dev/null @@ -1,131 +0,0 @@ -# make a link to this file if you are working hard in one directory of Coq -# ln -s ../dev/Makefile.dir Makefile -# if you are working in a sub/dir/ make a link to dev/Makefile.subdir instead -# this Makefile provides many useful facilities to develop Coq -# it is not completely compatible with .ml4 files unfortunately - -ifndef TOPDIR -TOPDIR=.. -endif - -# this complicated thing should work for subsubdirs as well -BASEDIR=$(shell (dir=`pwd`; cd $(TOPDIR); top=`pwd`; echo $$dir | sed -e "s|$$top/||")) - -noargs: dir - -test-dir: - @echo TOPDIR=$(TOPDIR) - @echo BASEDIR=$(BASEDIR) - -include $(TOPDIR)/dev/Makefile.common - -# make this directory -dir: - $(MAKE) -C $(TOPDIR) $(notdir $(BASEDIR)) - -# make all cmo's in this directory. Useful in case the main Makefile is not -# up-to-date -all: - @( ( for i in *.ml; do \ - echo -n $(BASEDIR)/`basename $$i .ml`.cmo "" ; \ - done; \ - for i in *.ml4; do \ - echo -n $(BASEDIR)/`basename $$i .ml4`.cmo "" ; \ - done ) \ - | xargs $(MAKE) -C $(TOPDIR) ) - -# lists all files that should be compiled in this directory -list: - @(for i in *.mli; do \ - ls -l `basename $$i .mli`.cmi; \ - done) - @(for i in *.ml; do \ - ls -l `basename $$i .ml`.cmo; \ - done) - @(for i in *.ml4; do \ - ls -l `basename $$i .ml4`.cmo; \ - done) - - -clean:: - rm -f *.cmi *.cmo *.cmx *.o - - -# if grammar.cmo files cannot be compiled and main .depend cannot be -# rebuilt, this is quite useful -depend: - (cd $(TOPDIR); ocamldep -I $(BASEDIR) $(BASEDIR)/*.ml $(BASEDIR)/*.mli > .depend.devel) - - -# displays the dependency graph of the current directory (vertically, -# unlike in doc/) -graph: - (ocamldep *.ml *.mli | ocamldot | dot -Tps | gv -) & - - -# the pretty entry draws a dependency graph marking red those nodes -# which do not have their .cmo files - -.INTERMEDIATE: depend.dot depend.2.dot -.PHONY: depend.ps - -depend.dot: - ocamldep *.ml *.mli | ocamldot > $@ - -depend.2.dot: depend.dot - (i=`cat $< | wc -l`; i=`expr $$i - 1`; head -n $$i $<) > $@ - (for ml in *.ml; do \ - base=`basename $$ml .ml`; \ - fst=`echo $$base | cut -c1 | tr [:lower:] [:upper:]`; \ - rest=`echo $$base | cut -c2-`; \ - name=`echo $$fst $$rest | tr -d " "`; \ - cmo=$$base.cmo; \ - if [ ! -e $$cmo ]; then \ - echo \"$$name\" [color=red]\; >> $@;\ - fi;\ - done;\ - echo } >> $@) - -depend.ps: depend.2.dot - dot -Tps $< > $@ - -clean:: - rm -f depend.ps - -pretty: depend.ps - (gv -spartan $<; rm $<) & -# gv -spartan $< & - - - -# generating file.ml.mli by tricking make to pass -i to ocamlc - -%.ml.mli: FORCE - @(cmo=`basename $@ .ml.mli`.cmo ; \ - mv -f $$cmo $$cmo.tmp ; \ - $(MAKE) -s -C $(TOPDIR) $(BASEDIR)/$$cmo CAMLDEBUG=-i > $@ ; \ - echo Generated interface file $@ ; \ - mv -f $$cmo.tmp $$cmo) - -%.annot: FORCE - @(cmo=`basename $@ .annot`.cmo ; \ - mv -f $$cmo $$cmo.tmp ; \ - $(MAKE) -s -C $(TOPDIR) $(BASEDIR)/$$cmo CAMLDEBUG=-dtypes ; \ - echo Generated annotation file $@ ; \ - mv -f $$cmo.tmp $$cmo) - -FORCE: - -clean:: - rm -f *.ml.mli - -# this is not perfect but mostly WORKS! It just calls the main makefile - -%.cmi: FORCE - $(MAKE) -C $(TOPDIR) $(BASEDIR)/$@ - -%.cmo: FORCE - $(MAKE) -C $(TOPDIR) $(BASEDIR)/$@ - -coqtop: - $(MAKE) -C $(TOPDIR) bin/coqtop.byte diff --git a/dev/Makefile.subdir b/dev/Makefile.subdir deleted file mode 100644 index 45358c42..00000000 --- a/dev/Makefile.subdir +++ /dev/null @@ -1,7 +0,0 @@ -# if you work in a sub/sub-rectory of Coq -# you should make a link to that makefile -# ln -s ../../dev/Makefile.subdir Makefile -# in order to have all the facilities of dev/Makefile.dir - -TOPDIR=../.. -include $(TOPDIR)/dev/Makefile.dir diff --git a/dev/README b/dev/README index a8811bea..0e40e820 100644 --- a/dev/README +++ b/dev/README @@ -1,21 +1,49 @@ -This directory contains informations and tools to help developping the -Coq system +This directory contains informations and tools to help developing the + Coq system + ====================== -TODO -changements.txt -header -lisezmoi.txt -style.txt +Debugging and profiling (in current directory - see doc/debugging.txt) +----------------------- -Debugging and profiling -======================= +ocamldebug-coq: to launch ocaml debugger -debugging.txt: help for debugging or profiling -db: to install pretty-printers from ocaml debugger +db: to install pretty-printers from ocaml debugger base_db: to install raw pretty-printers from ocaml debugger -ocamldebug-v7: to launch ocaml debugger -include: to install pretty-printers from ocaml toplevel + +include: to install pretty-printers from ocaml toplevel base_include: to install raw pretty-printers from ocaml toplevel + +vm_printers.ml, dev_printers.ml: ML pretty-printers for debugging + + +Miscellaneous informations about the code (directory doc) +----------------------------------------- + +changes.txt: (partial) per-version summary of the evolutions of Coq ML source +style.txt: a few style recommendations for writing Coq ML files +debugging.txt: help for debugging or profiling universes.txt: help to debug universes +translate.txt: help to use coq translator +extensions.txt: some help about TACTIC EXTEND + +header: standard header for Coq ML files +perf-analysis: analysis of perfs measured on the compilation of user contribs +cic.dtd: official dtd of the calc. of ind. constr. for im/ex-portation + + +Documentation of ML interfaces using tex (directory ocamlweb-doc) +---------------------------------------- + +go in directory and call "make" + + +Other development tools (directory tools) +----------------------- + univdot: produces a graph of CIC universes +Makefile.dir: makefile dedicated to intensive work in a given directory +Makefile.subdir: makefile dedicated to intensive work in a given subdirectory +Makefile.devel: utilities to automatically launch coq in various states +Makefile.common: used by other Makefiles +objects.el: various development utilities at emacs level diff --git a/dev/base_include b/dev/base_include index 30a6ed96..b7fa38ea 100644 --- a/dev/base_include +++ b/dev/base_include @@ -39,6 +39,108 @@ #install_printer (* bigint *) ppbigint;; #install_printer (* loc *) pploc;; +(* Open main files *) + +open Names +open Term +open Typeops +open Univ +open Inductive +open Indtypes +open Cooking +open Closure +open Reduction +open Safe_typing +open Declare +open Declaremods +open Impargs +open Libnames +open Nametab +open Library + +open Cases +open Pattern +open Cbv +open Classops +open Pretyping +open Cbv +open Classops +open Pretyping +open Clenv +open Rawterm +open Coercion +open Recordops +open Detyping +open Reductionops +open Evarconv +open Retyping +open Evarutil +open Tacred +open Evd +open Termops +open Indrec +open Typing +open Inductiveops +open Unification + +open Constrextern +open Constrintern +open Coqlib +open Genarg +open Modintern +open Notation +open Ppextend +open Reserve +open Syntax_def +open Topconstr + +open Clenvtac +open Evar_refiner +open Logic +open Pfedit +open Proof_trees +open Proof_type +open Redexpr +open Refiner +open Tacmach + +open Auto +open Autorewrite +open Contradiction +open Dhyp +open Eauto +open Elim +open Equality +open Evar_tactics +open Extraargs +open Extratactics +open Hiddentac +open Hipattern +open Inv +open Leminv +open Refine +open Setoid_replace +open Tacinterp +open Tacticals +open Tactics + +open Cerrors +open Class +open Command +open Coqinit +open Coqtop +open Discharge +open Himsg +open Metasyntax +open Mltop +open Record +open Toplevel +open Vernacentries +open Vernacinterp +open Vernac + +(* Various utilities *) + let qid = Libnames.qualid_of_string;; (* parsing of terms *) diff --git a/dev/changements.txt b/dev/changements.txt deleted file mode 100644 index d1df2a81..00000000 --- a/dev/changements.txt +++ /dev/null @@ -1,455 +0,0 @@ -CHANGES DUE TO INTRODUCTION OF MODULES -====================================== - -1.Kernel --------- - - The module level has no effect on constr except for the structure of -section_path. The type of unique names for constructions (what -section_path served) is now called a kernel name and is defined by - -type uniq_ident = int * string * dir_path (* int may be enough *) -type module_path = - | MPfile of dir_path (* reference to physical module, e.g. file *) - | MPbound of uniq_ident (* reference to a module parameter in a functor *) - | MPself of uniq_ident (* reference to one of the containing module *) - | MPdot of module_path * label -type label = identifier -type kernel_name = module_path * dir_path * label - ^^^^^^^^^^^ ^^^^^^^^ ^^^^^ - | | \ - | | the base name - | \ - / the (true) section path - example: (non empty only inside open sections) - L = (* i.e. some file of logical name L *) - struct - module A = struct Def a = ... end - end - M = (* i.e. some file of logical name M *) - struct - Def t = ... - N = functor (X : sig module T = struct Def b = ... end end) -> struct - module O = struct - Def u = ... - end - Def x := ... .t ... .O.u ... X.T.b ... L.A.a - - and are self-references, X is a bound reference and L is a -reference to a physical module. - - Notice that functor application is not part of a path: it must be -named by a "module M = F(A)" declaration to be used in a kernel -name. - - Notice that Jacek chose a practical approach, making directories not -modules. Another approach could have been to replace the constructor -MPfile by a constant constructor MProot representing the root of the -world. - - Other relevant informations are in kernel/entries.ml (type -module_expr) and kernel/declarations.ml (type module_body and -module_type_body). - -2. Library ----------- - -i) tables -[Summaries] - the only change is the special treatment of the -global environmet. - -ii) objects -[Libobject] declares persistent objects, given with methods: - - * cache_function specifying how to add the object in the current - scope; - * load_function, specifying what to do when the module - containing the object is loaded; - * open_function, specifying what to do when the module - containing the object is opened (imported); - * classify_function, specyfying what to do with the object, - when the current module (containing the object) is ended. - * subst_function - * export_function, to signal end_section survival - -(Almost) Each of these methods is called with a parameter of type -object_name = section_path * kernel_name -where section_path is the full user name of the object (such as -Coq.Init.Datatypes.Fst) and kernel_name is its substitutive internal -version such as (MPself,[],"Fst") (see above) - - -What happens at the end of an interactive module ? -================================================== -(or when a file is stored and reloaded from disk) - -All summaries (except Global environment) are reverted to the state -from before the beginning of the module, and: - -a) the objects (again, since last Declaremods.start_module or - Library.start_library) are classified using the classify_function. - To simplify consider only those who returned Substitute _ or Keep _. - -b) If the module is not a functor, the subst_function for each object of - the first group is called with the substitution - [MPself "" |-> MPfile "Coq.Init.Datatypes"]. - Then the load_function is called for substituted objects and the - "keep" object. - (If the module is a library the substitution is done at reloading). - -c) The objects which returned substitute are stored in the modtab - together with the self ident of the module, and functor argument - names if the module was a functor. - - They will be used (substituted and loaded) when a command like - Module M := F(N) or - Module Z := N - is evaluated - - -The difference between "substitute" and "keep" objects -======================================================== -i) The "keep" objects can _only_ reference other objects by section_paths -and qualids. They do not need the substitution function. - -They will work after end_module (or reloading a compiled library), -because these operations do not change section_path's - -They will obviously not work after Module Z:=N. - -These would typically be grammar rules, pretty printing rules etc. - - - -ii) The "substitute" objects can _only_ reference objects by -kernel_names. They must have a valid subst_function. - -They will work after end_module _and_ after Module Z:=N or -Module Z:=F(M). - - - -Other kinds of objects: -iii) "Dispose" - objects which do not survive end_module - As a consequence, objects which reference other objects sometimes - by kernel_names and sometimes by section_path must be of this kind... - -iv) "Anticipate" - objects which must be treated individually by - end_module (typically "REQUIRE" objects) - - - -Writing subst_thing functions -============================= -The subst_thing shoud not copy the thing if it hasn't actually -changed. There are some cool emacs macros in dev/objects.el -to help writing subst functions this way quickly and without errors. -Also there are *_smartmap functions in Util. - -The subst_thing functions are already written for many types, -including constr (Term.subst_mps), -global_reference (Libnames.subst_global), -rawconstr (Rawterm.subst_raw) etc - -They are all (apart from constr, for now) written in the non-copying -way. - - -Nametab -======= - -Nametab has been made more uniform. For every kind of thing there is -only one "push" function and one "locate" function. - - -Lib -=== - -library_segment is now a list of object_name * library_item, where -object_name = section_path * kernel_name (see above) - -New items have been added for open modules and module types - - -Declaremods -========== -Functions to declare interactive and noninteractive modules and module -types. - - -Library -======= -Uses Declaremods to actually communicate with Global and to register -objects. - - -MAIN CHANGES FROM COQ V7.3 -========================== - -Internal representation of tactics bindings has changed (see type -Rawterm.substitution). - -New parsing model for tactics and vernacular commands - - - Introduction of a dedicated type for tactic expressions - (Tacexpr.raw_tactic_expr) - - Introduction of a dedicated type for vernac expressions - (Vernacexpr.vernac_expr) - - Declaration of new vernacular parsing rules by a new camlp4 macro - GRAMMAR COMMAND EXTEND ... END to be used in ML files - - Declaration of new tactics parsing/printing rules by a new camlp4 macro - TACTIC EXTEND ... END to be used in ML files - -New organisation of THENS: -tclTHENS tac tacs : tacs is now an array -tclTHENSFIRSTn tac1 tacs tac2 : - apply tac1 then, apply the array tacs on the first n subgoals and - tac2 on the remaining subgoals (previously tclTHENST) -tclTHENSLASTn tac1 tac2 tacs : - apply tac1 then, apply tac2 on the first subgoals and apply the array - tacs on the last n subgoals -tclTHENFIRSTn tac1 tacs = tclTHENSFIRSTn tac1 tacs tclIDTAC (prev. tclTHENSI) -tclTHENLASTn tac1 tacs = tclTHENSLASTn tac1 tclIDTAC tacs -tclTHENFIRST tac1 tac2 = tclTHENFIRSTn tac1 [|tac2|] -tclTHENLAST tac1 tac2 = tclTHENLASTn tac1 [|tac2|] (previously tclTHENL) -tclTHENS tac1 tacs = tclTHENSFIRSTn tac1 tacs (fun _ -> error "wrong number") -tclTHENSV same as tclTHENS but with an array -tclTHENSi : no longer available - -Proof_type: subproof field in type proof_tree glued with the ref field - -Tacmach: no more echo from functions of module Refiner - -Files contrib/*/g_*.ml4 take the place of files contrib/*/*.v. -Files parsing/{vernac,tac}extend.ml{4,i} implements TACTIC EXTEND andd - VERNAC COMMAND EXTEND macros -File syntax/PPTactic.v moved to parsing/pptactic.ml -Tactics about False and not now in tactics/contradiction.ml -Tactics depending on Init now tactics/*.ml4 (no longer in tactics/*.v) -File tacinterp.ml moved from proofs to directory tactics - -MAIN CHANGES FROM COQ V7.1 TO COQ V7.2 -====================================== - -The core of Coq (kernel) has meen minimized with the following effects: - -kernel/term.ml split into kernel/term.ml, pretyping/termops.ml -kernel/reduction.ml split into kernel/reduction.ml, pretyping/reductionops.ml -kernel/names.ml split into kernel/names.ml, library/nameops.ml -kernel/inductive.ml split into kernel/inductive.ml, pretyping/inductiveops.ml - -the prefixes "Is" ans "IsMut" have been dropped from kind_of_term constructors, -e.g. IsRel is now Rel, IsMutCase is now Case, etc. - - -PRINCIPAUX CHANGEMENTS ENTRE COQ V6.3.1 ET COQ V7.0 -=================================================== - -Changements d'organisation / modules : --------------------------------------- - - Std, More_util -> lib/util.ml - - Names -> kernel/names.ml et kernel/sign.ml - (les parties noms et signatures ont été séparées) - - Avm,Mavm,Fmavm,Mhm -> utiliser plutôt Map (et freeze alors gratuit) - Mhb -> Bij - - Generic est intégré à Term (et un petit peu à Closure) - -Changements dans les types de données : ---------------------------------------- - dans Generic: free_rels : constr -> int Listset.t - devient : constr -> Intset.t - - type_judgement -> typed_type - environment -> context - context -> typed_type signature - - -ATTENTION: ----------- - - Il y a maintenant d'autres exceptions que UserError (TypeError, - RefinerError, etc.) - - Il ne faut donc plus se contenter (pour rattraper) de faire - - try . .. with UserError _ -> ... - - mais écrire à la place - - try ... with e when Logic.catchable_exception e -> ... - - -Changements dans les fonctions : --------------------------------- - - Vectops. - it_vect -> Array.fold_left - vect_it -> Array.fold_right - exists_vect -> Util.array_exists - for_all2eq_vect -> Util.array_for_all2 - tabulate_vect -> Array.init - hd_vect -> Util.array_hd - tl_vect -> Util.array_tl - last_vect -> Util.array_last - it_vect_from -> array_fold_left_from - vect_it_from -> array_fold_right_from - app_tl_vect -> array_app_tl - cons_vect -> array_cons - map_i_vect -> Array.mapi - map2_vect -> array_map2 - list_of_tl_vect -> array_list_of_tl - - Names - sign_it -> fold_var_context (se fait sur env maintenant) - it_sign -> fold_var_context_reverse (sur env maintenant) - - Generic - noccur_bet -> noccur_between - substn_many -> substnl - - Std - comp -> Util.compose - rev_append -> List.rev_append - - Termenv - mind_specif_of_mind -> Global.lookup_mind_specif - ou Environ.lookup_mind_specif si on a un env sous la main - mis_arity -> instantiate_arity - mis_lc -> instantiate_lc - - Ex-Environ - mind_of_path -> Global.lookup_mind - - Printer - gentermpr -> gen_pr_term - term0 -> prterm_env - pr_sign -> pr_var_context - pr_context_opt -> pr_context_of - pr_ne_env -> pr_ne_context_of - - Typing, Machops - type_of_type -> judge_of_type - fcn_proposition -> judge_of_prop_contents - safe_fmachine -> safe_infer - - Reduction, Clenv - whd_betadeltat -> whd_betaevar - whd_betadeltatiota -> whd_betaiotaevar - find_mrectype -> Inductive.find_mrectype - find_minductype -> Inductive.find_inductive - find_mcoinductype -> Inductive.find_coinductive - - Astterm - constr_of_com_casted -> interp_casted_constr - constr_of_com_sort -> interp_type - constr_of_com -> interp_constr - rawconstr_of_com -> interp_rawconstr - type_of_com -> type_judgement_of_rawconstr - judgement_of_com -> judgement_of_rawconstr - - Termast - bdize -> ast_of_constr - - Tacmach - pf_constr_of_com_sort -> pf_interp_type - pf_constr_of_com -> pf_interp_constr - pf_get_hyp -> pf_get_hyp_typ - pf_hyps, pf_untyped_hyps -> pf_env (tout se fait sur env maintenant) - - Pattern - raw_sopattern_of_compattern -> Astterm.interp_constrpattern - somatch -> is_matching - dest_somatch -> matches - - Tacticals - matches -> gl_is_matching - dest_match -> gl_matches - suff -> utiliser sort_of_goal - lookup_eliminator -> utiliser sort_of_goal pour le dernier arg - - Divers - initial_sign -> var_context - - Sign - ids_of_sign -> ids_of_var_context (or Environ.ids_of_context) - empty_sign -> empty_var_context - - Pfedit - list_proofs -> get_all_proof_names - get_proof -> get_current_proof_name - abort_goal -> abort_proof - abort_goals -> abort_all_proofs - abort_cur_goal -> abort_current_proof - get_evmap_sign -> get_goal_context/get_current_goal_context - unset_undo -> reset_undo - - Proof_trees - mkGOAL -> mk_goal - - Declare - machine_constant -> declare_constant (+ modifs) - - ex-Trad, maintenant Pretyping - inh_cast_rel -> Coercion.inh_conv_coerce_to - inh_conv_coerce_to -> Coercion.inh_conv_coerce_to_fail - ise_resolve1 -> understand, understand_type - ise_resolve -> understand_judgment, understand_type_judgment - - ex-Tradevar, maintenant Evarutil - mt_tycon -> empty_tycon - - Recordops - struc_info -> find_structure - -Changements dans les inductifs ------------------------------- -Nouveaux types "constructor" et "inductive" dans Term -La plupart des fonctions de typage des inductives prennent maintenant -un inductive au lieu d'un oonstr comme argument. Les seules fonctions -à traduire un constr en inductive sont les find_rectype and co. - -Changements dans les grammaires -------------------------------- - - . le lexer (parsing/lexer.mll) est maintenant un lexer ocamllex - - . attention : LIDENT -> IDENT (les identificateurs n'ont pas de - casse particulière dans Coq) - - . Le mot "command" est remplacé par "constr" dans les noms de - fichiers, noms de modules et non-terminaux relatifs au parsing des - termes; aussi les changements suivants "COMMAND"/"CONSTR" dans - g_vernac.ml4, VARG_COMMAND/VARG_CONSTR dans vernac*.ml* - - . Les constructeurs d'arguments de tactiques IDENTIFIER, CONSTR, ...n - passent en minuscule Identifier, Constr, ... - - . Plusieurs parsers ont changé de format (ex: sortarg) - -Changements dans le pretty-printing ------------------------------------ - - . Découplage de la traduction de constr -> rawconstr (dans detyping) - et de rawconstr -> ast (dans termast) - . Déplacement des options d'affichage de printer vers termast - . Déplacement des réaiguillage d'univers du pp de printer vers esyntax - - -Changements divers ------------------- - - . il n'y a plus de script coqtop => coqtop et coqtop.byte sont - directement le résultat du link du code - => debuggage et profiling directs - - . il n'y a plus d'installation locale dans bin/$ARCH - - . #use "include.ml" => #use "include" - go() => loop() - - . il y a "make depend" et "make dependcamlp4" car ce dernier prend beaucoup - de temps diff --git a/dev/db b/dev/db index 6c657d4e..784e5bac 100644 --- a/dev/db +++ b/dev/db @@ -28,6 +28,7 @@ install_printer Top_printers.ppgoal install_printer Top_printers.ppsigmagoal install_printer Top_printers.pproof install_printer Top_printers.ppevd +install_printer Top_printers.ppevm install_printer Top_printers.ppclenv install_printer Top_printers.pptac diff --git a/dev/debugging.txt b/dev/debugging.txt deleted file mode 100644 index 4c04c42f..00000000 --- a/dev/debugging.txt +++ /dev/null @@ -1,56 +0,0 @@ - -Debugging from Coq toplevel using Caml trace mechanism -====================================================== - - 1. Launch bytecode version of Coq (coqtop.byte or coqtop -byte) - 2. Access Ocaml toplevel using vernacular command 'Drop.' - 3. Install load paths and pretty printers for terms, idents, ... using - Ocaml command '#use "base_include";;' (use '#use "include";;' for a rawer - term pretty printer) - 4. Use #trace to tell which function(s) to trace - 5. Go back to Coq toplevel with 'go();;' - 6. Test your Coq command and observe the result of tracing your functions - 7. Freely switch from Coq to Ocaml toplevels with 'Drop.' and 'go();;' - - Hints: To remove high-level pretty-printing features (coercions, - notations, ...), use "Set Printing All". It will affect the #trace - printers too. - -Debugging from Caml debugger -============================ - - Preferably use ocaml 3.06 (pretty-printing is broken with ocaml 3.07/3.08) - Needs tuareg mode in Emacs - Coq must be configured with -debug and -local (./configure -debug -local) - - 1. M-x camldebug - 2. give the binary name bin/coqtop.byte - 3. give ../dev/ocamldebug-coq - 4. source db (to get pretty-printers) - 5. add breakpoints with C-x C-a C-b from the buffer displaying the ocaml - source - 6. get more help from ocamldebug manual - run - step - back - start - next - last - print x (abbreviated into p x) - ... - 7. some hints: - - - To debug a failure/error/anomaly, add a breakpoint in - Vernac.vernac_com at the with clause of the "try ... interp com - with ..." block, then go "back" a few steps to find where the - failure/error/anomaly has been raised - - If "source db" fails, first recompile top_printers.ml with - "make dev/top_printers.cmo" - -Profiling -========= - - Coq must be configured with option -profile - - 1. Run native Coq which must end normally (use Quit or option -batch) - 2. gprof ./coqtop gmon.out diff --git a/dev/doc/Makefile b/dev/doc/Makefile deleted file mode 100644 index a0bef897..00000000 --- a/dev/doc/Makefile +++ /dev/null @@ -1,67 +0,0 @@ - -# Makefile for doc/ - -all:: newparse -#newsyntax.dvi minicoq.dvi - - -OBJS=lex.cmo ast.cmo parse.cmo syntax.cmo - -newparse: $(OBJS) syntax.mli lex.ml syntax.ml - ocamlc -o newparse $(OBJS) - -.ml.cmo: - ocamlc -c $< - -.mli.cmi: - ocamlc -c $< - -.mll.ml: - ocamllex $< - -.mly.ml: - ocamlyacc -v $< - -.mly.mli: - ocamlyacc -v $< - -clean:: - rm -f *.cm* *.output syntax.ml syntax.mli lex.ml newparse - -parse.cmo: ast.cmo -syntax.cmi: parse.cmo -syntax.cmo: lex.cmo parse.cmo syntax.cmi -lex.cmo: syntax.cmi -ast.cmo: ast.ml - -newsyntax.dvi: newsyntax.tex - latex $< - latex $< - -coq.dvi: coq.tex - latex coq - latex coq - -coq.tex:: - make -C .. doc/coq.tex - -depend:: kernel.dep.ps library.dep.ps pretyping.dep.ps parsing.dep.ps \ - proofs.dep.ps tactics.dep.ps toplevel.dep.ps interp.dep.ps - -%.dot: ../% - (cd ../$*; ocamldep *.ml *.mli) | ocamldot -lr > $@ - -%.dep.ps: %.dot - dot -Tps $< -o $@ - -clean:: - rm -f *~ *.log *.aux - -.SUFFIXES: .tex .dvi .ps .cmo .cmi .mli .ml .mll .mly - -.tex.dvi: - latex $< && latex $< - -.dvi.ps: - dvips $< -o $@ - diff --git a/dev/doc/ast.ml b/dev/doc/ast.ml deleted file mode 100644 index 2153ef47..00000000 --- a/dev/doc/ast.ml +++ /dev/null @@ -1,47 +0,0 @@ - -type constr_ast = - Pair of constr_ast * constr_ast -| Prod of binder list * constr_ast -| Lambda of binder list * constr_ast -| Let of string * constr_ast * constr_ast -| LetCase of binder list * constr_ast * constr_ast -| IfCase of constr_ast * constr_ast * constr_ast -| Eval of red_fun * constr_ast -| Infix of string * constr_ast * constr_ast -| Prefix of string * constr_ast -| Postfix of string * constr_ast -| Appl of constr_ast * constr_arg list -| ApplExpl of string list * constr_ast list -| Scope of string * constr_ast -| Qualid of string list -| Prop | Set | Type -| Int of string -| Hole -| Meta of string -| Fixp of fix_kind * - (string * binder list * constr_ast * string option * constr_ast) list * - string -| Match of case_item list * constr_ast option * - (pattern list * constr_ast) list - -and red_fun = Simpl - -and binder = string * constr_ast - -and constr_arg = string option * constr_ast - -and fix_kind = Fix | CoFix - -and case_item = constr_ast * (string option * constr_ast option) - -and pattern = - PatAs of pattern * string -| PatType of pattern * constr_ast -| PatConstr of string * pattern list -| PatVar of string - -let mk_cast c t = - if t=Hole then c else Infix(":",c,t) - -let mk_lambda bl t = - if bl=[] then t else Lambda(bl,t) diff --git a/dev/doc/changes.txt b/dev/doc/changes.txt new file mode 100644 index 00000000..f60e3203 --- /dev/null +++ b/dev/doc/changes.txt @@ -0,0 +1,504 @@ +========================================= += CHANGES BETWEEN COQ V8.0 AND COQ V8.1 = +========================================= + +A few differences in Coq ML interfaces between Coq V8.0 and V8.1 +================================================================ + +** Functions + +Util: option_app -> option_map +Term: substl_decl -> subst_named_decl +Lib: library_part -> remove_section_part +Printer: prterm -> pr_lconstr +Printer: prterm_env -> pr_lconstr_env +Ppconstr: pr_sort -> pr_rawsort + +** Constructors + +Declarations: mind_consnrealargs -> mind_consnrealdecls +NoRedun -> NoDup + +** Modules + +module Decl_kinds: new interface +module Bigint: new interface +module Tacred spawned module Redexpr +module Symbols -> Notation +module Coqast, Ast, Esyntax, Termast, and all other modules related to old + syntax are removed + +** Internal names + +OBJDEF and OBJDEF1 -> CANONICAL-STRUCTURE + + +========================================= += CHANGES BETWEEN COQ V7.4 AND COQ V8.0 = +========================================= + +See files in dev/syntax-v8 + + +============================================== += MAIN CHANGES BETWEEN COQ V7.3 AND COQ V7.4 = +============================================== + +CHANGES DUE TO INTRODUCTION OF MODULES +====================================== + +1.Kernel +-------- + + The module level has no effect on constr except for the structure of +section_path. The type of unique names for constructions (what +section_path served) is now called a kernel name and is defined by + +type uniq_ident = int * string * dir_path (* int may be enough *) +type module_path = + | MPfile of dir_path (* reference to physical module, e.g. file *) + | MPbound of uniq_ident (* reference to a module parameter in a functor *) + | MPself of uniq_ident (* reference to one of the containing module *) + | MPdot of module_path * label +type label = identifier +type kernel_name = module_path * dir_path * label + ^^^^^^^^^^^ ^^^^^^^^ ^^^^^ + | | \ + | | the base name + | \ + / the (true) section path + example: (non empty only inside open sections) + L = (* i.e. some file of logical name L *) + struct + module A = struct Def a = ... end + end + M = (* i.e. some file of logical name M *) + struct + Def t = ... + N = functor (X : sig module T = struct Def b = ... end end) -> struct + module O = struct + Def u = ... + end + Def x := ... .t ... .O.u ... X.T.b ... L.A.a + + and are self-references, X is a bound reference and L is a +reference to a physical module. + + Notice that functor application is not part of a path: it must be +named by a "module M = F(A)" declaration to be used in a kernel +name. + + Notice that Jacek chose a practical approach, making directories not +modules. Another approach could have been to replace the constructor +MPfile by a constant constructor MProot representing the root of the +world. + + Other relevant informations are in kernel/entries.ml (type +module_expr) and kernel/declarations.ml (type module_body and +module_type_body). + +2. Library +---------- + +i) tables +[Summaries] - the only change is the special treatment of the +global environmet. + +ii) objects +[Libobject] declares persistent objects, given with methods: + + * cache_function specifying how to add the object in the current + scope; + * load_function, specifying what to do when the module + containing the object is loaded; + * open_function, specifying what to do when the module + containing the object is opened (imported); + * classify_function, specyfying what to do with the object, + when the current module (containing the object) is ended. + * subst_function + * export_function, to signal end_section survival + +(Almost) Each of these methods is called with a parameter of type +object_name = section_path * kernel_name +where section_path is the full user name of the object (such as +Coq.Init.Datatypes.Fst) and kernel_name is its substitutive internal +version such as (MPself,[],"Fst") (see above) + + +What happens at the end of an interactive module ? +================================================== +(or when a file is stored and reloaded from disk) + +All summaries (except Global environment) are reverted to the state +from before the beginning of the module, and: + +a) the objects (again, since last Declaremods.start_module or + Library.start_library) are classified using the classify_function. + To simplify consider only those who returned Substitute _ or Keep _. + +b) If the module is not a functor, the subst_function for each object of + the first group is called with the substitution + [MPself "" |-> MPfile "Coq.Init.Datatypes"]. + Then the load_function is called for substituted objects and the + "keep" object. + (If the module is a library the substitution is done at reloading). + +c) The objects which returned substitute are stored in the modtab + together with the self ident of the module, and functor argument + names if the module was a functor. + + They will be used (substituted and loaded) when a command like + Module M := F(N) or + Module Z := N + is evaluated + + +The difference between "substitute" and "keep" objects +======================================================== +i) The "keep" objects can _only_ reference other objects by section_paths +and qualids. They do not need the substitution function. + +They will work after end_module (or reloading a compiled library), +because these operations do not change section_path's + +They will obviously not work after Module Z:=N. + +These would typically be grammar rules, pretty printing rules etc. + + + +ii) The "substitute" objects can _only_ reference objects by +kernel_names. They must have a valid subst_function. + +They will work after end_module _and_ after Module Z:=N or +Module Z:=F(M). + + + +Other kinds of objects: +iii) "Dispose" - objects which do not survive end_module + As a consequence, objects which reference other objects sometimes + by kernel_names and sometimes by section_path must be of this kind... + +iv) "Anticipate" - objects which must be treated individually by + end_module (typically "REQUIRE" objects) + + + +Writing subst_thing functions +============================= +The subst_thing shoud not copy the thing if it hasn't actually +changed. There are some cool emacs macros in dev/objects.el +to help writing subst functions this way quickly and without errors. +Also there are *_smartmap functions in Util. + +The subst_thing functions are already written for many types, +including constr (Term.subst_mps), +global_reference (Libnames.subst_global), +rawconstr (Rawterm.subst_raw) etc + +They are all (apart from constr, for now) written in the non-copying +way. + + +Nametab +======= + +Nametab has been made more uniform. For every kind of thing there is +only one "push" function and one "locate" function. + + +Lib +=== + +library_segment is now a list of object_name * library_item, where +object_name = section_path * kernel_name (see above) + +New items have been added for open modules and module types + + +Declaremods +========== +Functions to declare interactive and noninteractive modules and module +types. + + +Library +======= +Uses Declaremods to actually communicate with Global and to register +objects. + + +OTHER CHANGES +============= + +Internal representation of tactics bindings has changed (see type +Rawterm.substitution). + +New parsing model for tactics and vernacular commands + + - Introduction of a dedicated type for tactic expressions + (Tacexpr.raw_tactic_expr) + - Introduction of a dedicated type for vernac expressions + (Vernacexpr.vernac_expr) + - Declaration of new vernacular parsing rules by a new camlp4 macro + GRAMMAR COMMAND EXTEND ... END to be used in ML files + - Declaration of new tactics parsing/printing rules by a new camlp4 macro + TACTIC EXTEND ... END to be used in ML files + +New organisation of THENS: +tclTHENS tac tacs : tacs is now an array +tclTHENSFIRSTn tac1 tacs tac2 : + apply tac1 then, apply the array tacs on the first n subgoals and + tac2 on the remaining subgoals (previously tclTHENST) +tclTHENSLASTn tac1 tac2 tacs : + apply tac1 then, apply tac2 on the first subgoals and apply the array + tacs on the last n subgoals +tclTHENFIRSTn tac1 tacs = tclTHENSFIRSTn tac1 tacs tclIDTAC (prev. tclTHENSI) +tclTHENLASTn tac1 tacs = tclTHENSLASTn tac1 tclIDTAC tacs +tclTHENFIRST tac1 tac2 = tclTHENFIRSTn tac1 [|tac2|] +tclTHENLAST tac1 tac2 = tclTHENLASTn tac1 [|tac2|] (previously tclTHENL) +tclTHENS tac1 tacs = tclTHENSFIRSTn tac1 tacs (fun _ -> error "wrong number") +tclTHENSV same as tclTHENS but with an array +tclTHENSi : no longer available + +Proof_type: subproof field in type proof_tree glued with the ref field + +Tacmach: no more echo from functions of module Refiner + +Files contrib/*/g_*.ml4 take the place of files contrib/*/*.v. +Files parsing/{vernac,tac}extend.ml{4,i} implements TACTIC EXTEND andd + VERNAC COMMAND EXTEND macros +File syntax/PPTactic.v moved to parsing/pptactic.ml +Tactics about False and not now in tactics/contradiction.ml +Tactics depending on Init now tactics/*.ml4 (no longer in tactics/*.v) +File tacinterp.ml moved from proofs to directory tactics + + +========================================== += MAIN CHANGES FROM COQ V7.1 TO COQ V7.2 = +========================================== + +The core of Coq (kernel) has meen minimized with the following effects: + +kernel/term.ml split into kernel/term.ml, pretyping/termops.ml +kernel/reduction.ml split into kernel/reduction.ml, pretyping/reductionops.ml +kernel/names.ml split into kernel/names.ml, library/nameops.ml +kernel/inductive.ml split into kernel/inductive.ml, pretyping/inductiveops.ml + +the prefixes "Is" ans "IsMut" have been dropped from kind_of_term constructors, +e.g. IsRel is now Rel, IsMutCase is now Case, etc. + + +======================================================= += PRINCIPAUX CHANGEMENTS ENTRE COQ V6.3.1 ET COQ V7.0 = +======================================================= + +Changements d'organisation / modules : +-------------------------------------- + + Std, More_util -> lib/util.ml + + Names -> kernel/names.ml et kernel/sign.ml + (les parties noms et signatures ont été séparées) + + Avm,Mavm,Fmavm,Mhm -> utiliser plutôt Map (et freeze alors gratuit) + Mhb -> Bij + + Generic est intégré à Term (et un petit peu à Closure) + +Changements dans les types de données : +--------------------------------------- + dans Generic: free_rels : constr -> int Listset.t + devient : constr -> Intset.t + + type_judgement -> typed_type + environment -> context + context -> typed_type signature + + +ATTENTION: +---------- + + Il y a maintenant d'autres exceptions que UserError (TypeError, + RefinerError, etc.) + + Il ne faut donc plus se contenter (pour rattraper) de faire + + try . .. with UserError _ -> ... + + mais écrire à la place + + try ... with e when Logic.catchable_exception e -> ... + + +Changements dans les fonctions : +-------------------------------- + + Vectops. + it_vect -> Array.fold_left + vect_it -> Array.fold_right + exists_vect -> Util.array_exists + for_all2eq_vect -> Util.array_for_all2 + tabulate_vect -> Array.init + hd_vect -> Util.array_hd + tl_vect -> Util.array_tl + last_vect -> Util.array_last + it_vect_from -> array_fold_left_from + vect_it_from -> array_fold_right_from + app_tl_vect -> array_app_tl + cons_vect -> array_cons + map_i_vect -> Array.mapi + map2_vect -> array_map2 + list_of_tl_vect -> array_list_of_tl + + Names + sign_it -> fold_var_context (se fait sur env maintenant) + it_sign -> fold_var_context_reverse (sur env maintenant) + + Generic + noccur_bet -> noccur_between + substn_many -> substnl + + Std + comp -> Util.compose + rev_append -> List.rev_append + + Termenv + mind_specif_of_mind -> Global.lookup_mind_specif + ou Environ.lookup_mind_specif si on a un env sous la main + mis_arity -> instantiate_arity + mis_lc -> instantiate_lc + + Ex-Environ + mind_of_path -> Global.lookup_mind + + Printer + gentermpr -> gen_pr_term + term0 -> prterm_env + pr_sign -> pr_var_context + pr_context_opt -> pr_context_of + pr_ne_env -> pr_ne_context_of + + Typing, Machops + type_of_type -> judge_of_type + fcn_proposition -> judge_of_prop_contents + safe_fmachine -> safe_infer + + Reduction, Clenv + whd_betadeltat -> whd_betaevar + whd_betadeltatiota -> whd_betaiotaevar + find_mrectype -> Inductive.find_mrectype + find_minductype -> Inductive.find_inductive + find_mcoinductype -> Inductive.find_coinductive + + Astterm + constr_of_com_casted -> interp_casted_constr + constr_of_com_sort -> interp_type + constr_of_com -> interp_constr + rawconstr_of_com -> interp_rawconstr + type_of_com -> type_judgement_of_rawconstr + judgement_of_com -> judgement_of_rawconstr + + Termast + bdize -> ast_of_constr + + Tacmach + pf_constr_of_com_sort -> pf_interp_type + pf_constr_of_com -> pf_interp_constr + pf_get_hyp -> pf_get_hyp_typ + pf_hyps, pf_untyped_hyps -> pf_env (tout se fait sur env maintenant) + + Pattern + raw_sopattern_of_compattern -> Astterm.interp_constrpattern + somatch -> is_matching + dest_somatch -> matches + + Tacticals + matches -> gl_is_matching + dest_match -> gl_matches + suff -> utiliser sort_of_goal + lookup_eliminator -> utiliser sort_of_goal pour le dernier arg + + Divers + initial_sign -> var_context + + Sign + ids_of_sign -> ids_of_var_context (or Environ.ids_of_context) + empty_sign -> empty_var_context + + Pfedit + list_proofs -> get_all_proof_names + get_proof -> get_current_proof_name + abort_goal -> abort_proof + abort_goals -> abort_all_proofs + abort_cur_goal -> abort_current_proof + get_evmap_sign -> get_goal_context/get_current_goal_context + unset_undo -> reset_undo + + Proof_trees + mkGOAL -> mk_goal + + Declare + machine_constant -> declare_constant (+ modifs) + + ex-Trad, maintenant Pretyping + inh_cast_rel -> Coercion.inh_conv_coerce_to + inh_conv_coerce_to -> Coercion.inh_conv_coerce_to_fail + ise_resolve1 -> understand, understand_type + ise_resolve -> understand_judgment, understand_type_judgment + + ex-Tradevar, maintenant Evarutil + mt_tycon -> empty_tycon + + Recordops + struc_info -> find_structure + +Changements dans les inductifs +------------------------------ +Nouveaux types "constructor" et "inductive" dans Term +La plupart des fonctions de typage des inductives prennent maintenant +un inductive au lieu d'un oonstr comme argument. Les seules fonctions +à traduire un constr en inductive sont les find_rectype and co. + +Changements dans les grammaires +------------------------------- + + . le lexer (parsing/lexer.mll) est maintenant un lexer ocamllex + + . attention : LIDENT -> IDENT (les identificateurs n'ont pas de + casse particulière dans Coq) + + . Le mot "command" est remplacé par "constr" dans les noms de + fichiers, noms de modules et non-terminaux relatifs au parsing des + termes; aussi les changements suivants "COMMAND"/"CONSTR" dans + g_vernac.ml4, VARG_COMMAND/VARG_CONSTR dans vernac*.ml* + + . Les constructeurs d'arguments de tactiques IDENTIFIER, CONSTR, ...n + passent en minuscule Identifier, Constr, ... + + . Plusieurs parsers ont changé de format (ex: sortarg) + +Changements dans le pretty-printing +----------------------------------- + + . Découplage de la traduction de constr -> rawconstr (dans detyping) + et de rawconstr -> ast (dans termast) + . Déplacement des options d'affichage de printer vers termast + . Déplacement des réaiguillage d'univers du pp de printer vers esyntax + + +Changements divers +------------------ + + . il n'y a plus de script coqtop => coqtop et coqtop.byte sont + directement le résultat du link du code + => debuggage et profiling directs + + . il n'y a plus d'installation locale dans bin/$ARCH + + . #use "include.ml" => #use "include" + go() => loop() + + . il y a "make depend" et "make dependcamlp4" car ce dernier prend beaucoup + de temps diff --git a/dev/doc/check-grammar b/dev/doc/check-grammar deleted file mode 100755 index 67da1bc5..00000000 --- a/dev/doc/check-grammar +++ /dev/null @@ -1,50 +0,0 @@ -#!/bin/bash -# This scripts checks that the new grammar of Coq as defined in syntax-v8.tex -# is consistent in the sense that all invoked non-terminals are defined - -defined-nt() { - grep "\\DEFNT{.*}" syntax-v8.tex | sed -e "s|.*DEFNT{\([^}]*\)}.*|\1|"|\ - sort | sort -u -} - -used-nt() { - cat syntax-v8.tex | tr \\\\ \\n | grep "^NT{.*}" |\ - sed -e "s|^NT{\([^}]*\)}.*|\1|" | egrep -v ^\#1\|non-terminal | sort -u -} - -used-term() { - cat syntax-v8.tex | tr \\\\ \\n | grep "^TERM{.*}" |\ - sed -e "s|^TERM{\([^}]*\)}.*|\1|" -e "s|\\$||g" | egrep -v ^\#1\|terminal | sort -u -} - -used-kwd() { - cat syntax-v8.tex | tr \\\\ \\n | grep "^KWD{.*}" |\ - sed -e "s|^KWD{\([^}]*\)}.*|\1|" -e "s|\\$||g" | egrep -v ^\#1 | sort -u -} - -defined-nt > def -used-nt > use -used-term > use-t -used-kwd > use-k -diff def use > df - -############################### -echo -if grep ^\> df > /dev/null 2>&1 ; then - echo Undefined non-terminals: - echo ======================== - echo - grep ^\> df | sed -e "s|^> ||" - echo -fi -if grep ^\< df > /dev/null 2>&1 ; then - echo Unused non-terminals: - echo ===================== - echo - grep ^\< df | sed -e "s|^< ||" - echo -fi -#echo Used terminals: -#echo =============== -#echo -#cat use-t \ No newline at end of file diff --git a/dev/doc/cic.dtd b/dev/doc/cic.dtd new file mode 100644 index 00000000..f2314e22 --- /dev/null +++ b/dev/doc/cic.dtd @@ -0,0 +1,231 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/dev/doc/debugging.txt b/dev/doc/debugging.txt new file mode 100644 index 00000000..e5c83139 --- /dev/null +++ b/dev/doc/debugging.txt @@ -0,0 +1,71 @@ +Debugging from Coq toplevel using Caml trace mechanism +====================================================== + + 1. Launch bytecode version of Coq (coqtop.byte or coqtop -byte) + 2. Access Ocaml toplevel using vernacular command 'Drop.' + 3. Install load paths and pretty printers for terms, idents, ... using + Ocaml command '#use "base_include";;' (use '#use "include";;' for a rawer + term pretty printer) + 4. Use #trace to tell which function(s) to trace + 5. Go back to Coq toplevel with 'go();;' + 6. Test your Coq command and observe the result of tracing your functions + 7. Freely switch from Coq to Ocaml toplevels with 'Drop.' and 'go();;' + + Hints: To remove high-level pretty-printing features (coercions, + notations, ...), use "Set Printing All". It will affect the #trace + printers too. + +Debugging from Caml debugger +============================ + + Needs tuareg mode in Emacs + Coq must be configured with -debug and -local (./configure -debug -local) + + 1. M-x camldebug + 2. give the binary name bin/coqtop.byte + 3. give ../dev/ocamldebug-coq + 4. source db (to get pretty-printers) + 5. add breakpoints with C-x C-a C-b from the buffer displaying the ocaml + source + 6. get more help from ocamldebug manual + run + step + back + start + next + last + print x (abbreviated into p x) + ... + 7. some hints: + + - To debug a failure/error/anomaly, add a breakpoint in + Vernac.vernac_com at the with clause of the "try ... interp com + with ..." block, then go "back" a few steps to find where the + failure/error/anomaly has been raised + - Alternatively, for an error or an anomaly, add breakpoints in the middle + of each of error* functions or anomaly* functions in lib/util.ml + - If "source db" fails, recompile printers.cma with + "make dev/printers.cma" and try again + +Global gprof-based profiling +============================ + + Coq must be configured with option -profile + + 1. Run native Coq which must end normally (use Quit or option -batch) + 2. gprof ./coqtop gmon.out + +Per function profiling +====================== + + 1. To profile function foo in file bar.ml, add the following lines, just + after the definition of the function: + + let fookey = Profile.declare_profile "foo";; + let foo a b c = Profile.profile3 fookey foo a b c;; + + where foo is assumed to have three arguments (adapt using + Profile.profile1, Profile. profile2, etc). + + This has the effect to cumulate the time passed in foo under a + line of name "foo" which is displayed at the time coqtop exits. diff --git a/dev/doc/extensions.txt b/dev/doc/extensions.txt new file mode 100644 index 00000000..eb4d2659 --- /dev/null +++ b/dev/doc/extensions.txt @@ -0,0 +1,19 @@ +Comment ajouter une nouvelle entrée primitive pour les TACTIC EXTEND ? +====================================================================== + +Exemple de l'ajout de l'entrée "clause": + +- ajouter un type ClauseArgType dans interp/genarg.ml{,i}, avec les + wit_, rawwit_, et globwit_ correspondants + +- ajouter partout où Genarg.argument_type est filtré le cas traitant de + ce nouveau ClauseArgType + +- utiliser le rawwit_clause pour définir une entrée clause du bon + type et du bon nom dans le module Tactic de pcoq.ml4 + +- il faut aussi exporter la règle hors de g_tactic.ml4. Pour cela, il + faut rejouter clause dans le GLOBAL du GEXTEND + +- seulement après, le nom clause sera accessible dans les TACTIC EXTEND ! + diff --git a/dev/doc/header b/dev/doc/header new file mode 100644 index 00000000..57945e47 --- /dev/null +++ b/dev/doc/header @@ -0,0 +1,7 @@ +(************************************************************************) +(* v * The Coq Proof Assistant / The Coq Development Team *) +(* >' safe on PS Level 1 devices -/languagelevel where {pop languagelevel}{1} ifelse -2 lt { - userdict (<<) cvn ([) cvn load put - userdict (>>) cvn ([) cvn load put -} if - -%%EndSetup -%%Page: 1 1 -%%PageBoundingBox: 36 36 577 160 -%%PageOrientation: Portrait -gsave -35 35 542 125 boxprim clip newpath -36 36 translate -0 0 1 beginpage -0.9343 set_scale -0 0 translate 0 rotate -0.000 0.000 0.000 graphcolor -14.00 /Times-Roman set_font - -% Syntax_def -gsave 10 dict begin -303 110 45 18 ellipse_path -stroke -gsave 10 dict begin -271 105 moveto -(Syntax_def) -[7.68 6.96 6.96 4.08 6.24 6.96 6.96 6.96 6.24 4.56] -xshow -end grestore -end grestore - -% Notation -gsave 10 dict begin -422 60 38 18 ellipse_path -stroke -gsave 10 dict begin -397 55 moveto -(Notation) -[9.84 6.72 4.08 6.24 3.84 3.84 6.96 6.96] -xshow -end grestore -end grestore - -% Syntax_def -> Notation -newpath 334 97 moveto -350 90 369 83 385 76 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 386 79 moveto -394 72 lineto -383 73 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 386 79 moveto -394 72 lineto -383 73 lineto -closepath -stroke -end grestore - -% Ppextend -gsave 10 dict begin -537 60 39 18 ellipse_path -stroke -gsave 10 dict begin -511 55 moveto -(Ppextend) -[7.68 6.96 5.76 6.96 3.84 6.24 6.96 6.96] -xshow -end grestore -end grestore - -% Notation -> Ppextend -newpath 460 60 moveto -469 60 478 60 488 60 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 488 64 moveto -498 60 lineto -488 57 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 488 64 moveto -498 60 lineto -488 57 lineto -closepath -stroke -end grestore - -% Topconstr -gsave 10 dict begin -537 114 41 18 ellipse_path -stroke -gsave 10 dict begin -509 109 moveto -(Topconstr) -[7.2 6.96 6.96 6.24 6.96 6.96 5.28 3.84 4.56] -xshow -end grestore -end grestore - -% Notation -> Topconstr -newpath 449 73 moveto -464 80 483 89 500 97 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 498 100 moveto -509 101 lineto -501 94 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 498 100 moveto -509 101 lineto -501 94 lineto -closepath -stroke -end grestore - -% Modintern -gsave 10 dict begin -44 98 43 18 ellipse_path -stroke -gsave 10 dict begin -13 93 moveto -(Modintern) -[12.48 6.96 6.96 3.84 6.96 3.84 6.24 4.8 6.96] -xshow -end grestore -end grestore - -% Constrintern -gsave 10 dict begin -173 98 48 18 ellipse_path -stroke -gsave 10 dict begin -138 93 moveto -(Constrintern) -[9.36 6.96 6.96 5.28 3.84 4.8 3.84 6.96 3.84 6.24 4.8 6.96] -xshow -end grestore -end grestore - -% Modintern -> Constrintern -newpath 88 98 moveto -97 98 106 98 115 98 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 115 102 moveto -125 98 lineto -115 95 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 115 102 moveto -125 98 lineto -115 95 lineto -closepath -stroke -end grestore - -% Constrintern -> Syntax_def -newpath 220 102 moveto -229 103 239 104 249 105 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 249 108 moveto -259 106 lineto -249 102 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 249 108 moveto -259 106 lineto -249 102 lineto -closepath -stroke -end grestore - -% Reserve -gsave 10 dict begin -303 56 35 18 ellipse_path -stroke -gsave 10 dict begin -280 51 moveto -(Reserve) -[9.12 6.24 5.52 6.24 4.8 6.48 6.24] -xshow -end grestore -end grestore - -% Constrintern -> Reserve -newpath 210 86 moveto -227 81 246 75 263 69 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 264 72 moveto -273 66 lineto -262 66 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 264 72 moveto -273 66 lineto -262 66 lineto -closepath -stroke -end grestore - -% Genarg -gsave 10 dict begin -422 114 33 18 ellipse_path -stroke -gsave 10 dict begin -401 109 moveto -(Genarg) -[10.08 6.24 6.96 6.24 4.32 6.96] -xshow -end grestore -end grestore - -% Genarg -> Topconstr -newpath 456 114 moveto -465 114 476 114 486 114 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 486 118 moveto -496 114 lineto -486 111 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 486 118 moveto -496 114 lineto -486 111 lineto -closepath -stroke -end grestore - -% Coqlib -gsave 10 dict begin -44 21 32 18 ellipse_path -stroke -gsave 10 dict begin -24 16 moveto -(Coqlib) -[9.36 6.96 6.96 3.84 3.84 6.96] -xshow -end grestore -end grestore - -% Constrextern -gsave 10 dict begin -173 21 49 18 ellipse_path -stroke -gsave 10 dict begin -137 16 moveto -(Constrextern) -[9.36 6.96 6.96 5.28 3.84 4.56 5.76 6.96 3.84 6.24 4.8 6.96] -xshow -end grestore -end grestore - -% Coqlib -> Constrextern -newpath 77 21 moveto -88 21 101 21 114 21 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 114 25 moveto -124 21 lineto -114 18 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 114 25 moveto -124 21 lineto -114 18 lineto -closepath -stroke -end grestore - -% Constrextern -> Notation -newpath 222 19 moveto -257 18 307 20 348 29 curveto -361 31 375 37 388 42 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 386 45 moveto -397 46 lineto -389 39 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 386 45 moveto -397 46 lineto -389 39 lineto -closepath -stroke -end grestore - -% Constrextern -> Reserve -newpath 213 32 moveto -228 36 246 41 261 45 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 260 48 moveto -271 48 lineto -262 42 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 260 48 moveto -271 48 lineto -262 42 lineto -closepath -stroke -end grestore -endpage -showpage -grestore -%%PageTrailer -%%EndPage: 1 -%%Trailer -%%Pages: 1 -end -restore -%%EOF diff --git a/dev/doc/intro.tex b/dev/doc/intro.tex deleted file mode 100644 index 4cec8673..00000000 --- a/dev/doc/intro.tex +++ /dev/null @@ -1,25 +0,0 @@ - -\ocwsection This is \Coq, a proof assistant for the \CCI. -This document describes the implementation of \Coq. -It has been automatically generated from the source of -\Coq\ using \textsf{ocamlweb}, a literate programming tool for -\textsf{Objective Caml}\footnote{\Coq, \textsf{Objective Caml} and - \textsf{ocamlweb} are all freely available at - \textsf{http://coq.inria.fr/}, \textsf{http://caml.inria.fr/} and - \textsf{http://www.lri.fr/\~{}filliatr/ocamlweb}.}. -The source files are organized in several directories, which are -described here as separate chapters. - -\begin{center} - \begin{tabular}{p{10cm}rr} - Chapter & section & page \\[0.5em] - \hline\\[0.2em] - Utility libraries \dotfill & \refsec{lib} & \pageref{lib} \\[0.5em] - Kernel \dotfill & \refsec{kernel} & \pageref{kernel} \\[0.5em] - Library \dotfill & \refsec{library} & \pageref{library} \\[0.5em] - Pretyping \dotfill & \refsec{pretyping} & \pageref{pretyping} \\[0.5em] - Proof engine \dotfill & \refsec{proofs} & \pageref{proofs} \\[0.5em] - Tactics \dotfill & \refsec{tactics} & \pageref{tactics} \\[0.5em] - Toplevel \dotfill & \refsec{toplevel}& \pageref{toplevel}\\[0.5em] - \end{tabular} -\end{center} \ No newline at end of file diff --git a/dev/doc/kernel.dep.ps b/dev/doc/kernel.dep.ps deleted file mode 100644 index 3c00121e..00000000 --- a/dev/doc/kernel.dep.ps +++ /dev/null @@ -1,1454 +0,0 @@ -%!PS-Adobe-2.0 -%%Creator: dot version 2.2 (Wed Jan 19 21:09:25 UTC 2005) -%%For: (herbelin) Hugo Herbelin -%%Title: G -%%Pages: (atend) -%%BoundingBox: 35 35 577 127 -%%EndComments -save -%%BeginProlog -/DotDict 200 dict def -DotDict begin - -/setupLatin1 { -mark -/EncodingVector 256 array def - EncodingVector 0 - -ISOLatin1Encoding 0 255 getinterval putinterval - -EncodingVector - dup 306 /AE - dup 301 /Aacute - dup 302 /Acircumflex - dup 304 /Adieresis - dup 300 /Agrave - dup 305 /Aring - dup 303 /Atilde - dup 307 /Ccedilla - dup 311 /Eacute - dup 312 /Ecircumflex - dup 313 /Edieresis - dup 310 /Egrave - dup 315 /Iacute - dup 316 /Icircumflex - dup 317 /Idieresis - dup 314 /Igrave - dup 334 /Udieresis - dup 335 /Yacute - dup 376 /thorn - dup 337 /germandbls - dup 341 /aacute - dup 342 /acircumflex - dup 344 /adieresis - dup 346 /ae - dup 340 /agrave - dup 345 /aring - dup 347 /ccedilla - dup 351 /eacute - dup 352 /ecircumflex - dup 353 /edieresis - dup 350 /egrave - dup 355 /iacute - dup 356 /icircumflex - dup 357 /idieresis - dup 354 /igrave - dup 360 /dcroat - dup 361 /ntilde - dup 363 /oacute - dup 364 /ocircumflex - dup 366 /odieresis - dup 362 /ograve - dup 365 /otilde - dup 370 /oslash - dup 372 /uacute - dup 373 /ucircumflex - dup 374 /udieresis - dup 371 /ugrave - dup 375 /yacute - dup 377 /ydieresis - -% Set up ISO Latin 1 character encoding -/starnetISO { - dup dup findfont dup length dict begin - { 1 index /FID ne { def }{ pop pop } ifelse - } forall - /Encoding EncodingVector def - currentdict end definefont -} def -/Times-Roman starnetISO def -/Times-Italic starnetISO def -/Times-Bold starnetISO def -/Times-BoldItalic starnetISO def -/Helvetica starnetISO def -/Helvetica-Oblique starnetISO def -/Helvetica-Bold starnetISO def -/Helvetica-BoldOblique starnetISO def -/Courier starnetISO def -/Courier-Oblique starnetISO def -/Courier-Bold starnetISO def -/Courier-BoldOblique starnetISO def -cleartomark -} bind def - -%%BeginResource: procset graphviz 0 0 -/coord-font-family /Times-Roman def -/default-font-family /Times-Roman def -/coordfont coord-font-family findfont 8 scalefont def - -/InvScaleFactor 1.0 def -/set_scale { - dup 1 exch div /InvScaleFactor exch def - dup scale -} bind def - -% styles -/solid { [] 0 setdash } bind def -/dashed { [9 InvScaleFactor mul dup ] 0 setdash } bind def -/dotted { [1 InvScaleFactor mul 6 InvScaleFactor mul] 0 setdash } bind def -/invis {/fill {newpath} def /stroke {newpath} def /show {pop newpath} def} bind def -/bold { 2 setlinewidth } bind def -/filled { } bind def -/unfilled { } bind def -/rounded { } bind def -/diagonals { } bind def - -% hooks for setting color -/nodecolor { sethsbcolor } bind def -/edgecolor { sethsbcolor } bind def -/graphcolor { sethsbcolor } bind def -/nopcolor {pop pop pop} bind def - -/beginpage { % i j npages - /npages exch def - /j exch def - /i exch def - /str 10 string def - npages 1 gt { - gsave - coordfont setfont - 0 0 moveto - (\() show i str cvs show (,) show j str cvs show (\)) show - grestore - } if -} bind def - -/set_font { - findfont exch - scalefont setfont -} def - -% draw aligned label in bounding box aligned to current point -/alignedtext { % width adj text - /text exch def - /adj exch def - /width exch def - gsave - width 0 gt { - text stringwidth pop adj mul 0 rmoveto - } if - [] 0 setdash - text show - grestore -} def - -/boxprim { % xcorner ycorner xsize ysize - 4 2 roll - moveto - 2 copy - exch 0 rlineto - 0 exch rlineto - pop neg 0 rlineto - closepath -} bind def - -/ellipse_path { - /ry exch def - /rx exch def - /y exch def - /x exch def - matrix currentmatrix - newpath - x y translate - rx ry scale - 0 0 1 0 360 arc - setmatrix -} bind def - -/endpage { showpage } bind def -/showpage { } def - -/layercolorseq - [ % layer color sequence - darkest to lightest - [0 0 0] - [.2 .8 .8] - [.4 .8 .8] - [.6 .8 .8] - [.8 .8 .8] - ] -def - -/layerlen layercolorseq length def - -/setlayer {/maxlayer exch def /curlayer exch def - layercolorseq curlayer 1 sub layerlen mod get - aload pop sethsbcolor - /nodecolor {nopcolor} def - /edgecolor {nopcolor} def - /graphcolor {nopcolor} def -} bind def - -/onlayer { curlayer ne {invis} if } def - -/onlayers { - /myupper exch def - /mylower exch def - curlayer mylower lt - curlayer myupper gt - or - {invis} if -} def - -/curlayer 0 def - -%%EndResource -%%EndProlog -%%BeginSetup -14 default-font-family set_font -1 setmiterlimit -% /arrowlength 10 def -% /arrowwidth 5 def - -% make sure pdfmark is harmless for PS-interpreters other than Distiller -/pdfmark where {pop} {userdict /pdfmark /cleartomark load put} ifelse -% make '<<' and '>>' safe on PS Level 1 devices -/languagelevel where {pop languagelevel}{1} ifelse -2 lt { - userdict (<<) cvn ([) cvn load put - userdict (>>) cvn ([) cvn load put -} if - -%%EndSetup -%%Page: 1 1 -%%PageBoundingBox: 36 36 577 127 -%%PageOrientation: Portrait -gsave -35 35 542 92 boxprim clip newpath -36 36 translate -0 0 1 beginpage -0.2845 set_scale -0 0 translate 0 rotate -0.000 0.000 0.000 graphcolor -14.00 /Times-Roman set_font - -% Vm -gsave 10 dict begin -801 294 27 18 ellipse_path -stroke -gsave 10 dict begin -789 289 moveto -(Vm) -[10.08 10.8] -xshow -end grestore -end grestore - -% Cemitcodes -gsave 10 dict begin -1427 200 46 18 ellipse_path -stroke -gsave 10 dict begin -1393 195 moveto -(Cemitcodes) -[9.36 6.24 10.8 3.84 3.84 6.24 6.96 6.96 6.24 5.52] -xshow -end grestore -end grestore - -% Vm -> Cemitcodes -newpath 826 287 moveto -871 276 969 254 1053 254 curveto -1053 254 1053 254 1174 254 curveto -1249 254 1332 231 1382 215 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 1383 218 moveto -1392 212 lineto -1381 212 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 1383 218 moveto -1392 212 lineto -1381 212 lineto -closepath -stroke -end grestore - -% Conv_oracle -gsave 10 dict begin -1053 300 48 18 ellipse_path -stroke -gsave 10 dict begin -1017 295 moveto -(Conv_oracle) -[9.36 6.96 6.48 6.96 6.96 6.96 4.56 6.24 6.24 3.84 6.24] -xshow -end grestore -end grestore - -% Vm -> Conv_oracle -newpath 828 295 moveto -868 296 942 298 995 299 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 995 303 moveto -1005 299 lineto -995 296 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 995 303 moveto -1005 299 lineto -995 296 lineto -closepath -stroke -end grestore - -% Mod_subst -gsave 10 dict begin -1556 146 45 18 ellipse_path -stroke -gsave 10 dict begin -1524 141 moveto -(Mod_subst) -[12.48 6.96 6.96 6.96 5.52 6.96 6.96 5.28 3.84] -xshow -end grestore -end grestore - -% Cemitcodes -> Mod_subst -newpath 1459 187 moveto -1476 180 1497 171 1516 163 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 1517 166 moveto -1525 159 lineto -1514 160 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 1517 166 moveto -1525 159 lineto -1514 160 lineto -closepath -stroke -end grestore - -% Cbytecodes -gsave 10 dict begin -1556 200 45 18 ellipse_path -stroke -gsave 10 dict begin -1523 195 moveto -(Cbytecodes) -[9.36 6.48 6.96 3.84 6.24 6.24 6.96 6.96 6.24 5.52] -xshow -end grestore -end grestore - -% Cemitcodes -> Cbytecodes -newpath 1474 200 moveto -1482 200 1491 200 1500 200 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 1500 204 moveto -1510 200 lineto -1500 197 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 1500 204 moveto -1510 200 lineto -1500 197 lineto -closepath -stroke -end grestore - -% Copcodes -gsave 10 dict begin -1556 254 41 18 ellipse_path -stroke -gsave 10 dict begin -1528 249 moveto -(Copcodes) -[9.36 6.96 6.96 6.24 6.96 6.96 6.24 5.52] -xshow -end grestore -end grestore - -% Cemitcodes -> Copcodes -newpath 1459 213 moveto -1476 221 1498 230 1517 237 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 1515 240 moveto -1526 241 lineto -1518 234 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 1515 240 moveto -1526 241 lineto -1518 234 lineto -closepath -stroke -end grestore - -% Names -gsave 10 dict begin -1865 270 33 18 ellipse_path -stroke -gsave 10 dict begin -1845 265 moveto -(Names) -[9.6 6.24 10.8 6.24 5.52] -xshow -end grestore -end grestore - -% Conv_oracle -> Names -newpath 1102 300 moveto -1151 300 1228 300 1295 300 curveto -1295 300 1295 300 1666 300 curveto -1722 300 1785 288 1825 279 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 1826 282 moveto -1835 277 lineto -1825 276 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 1826 282 moveto -1835 277 lineto -1825 276 lineto -closepath -stroke -end grestore - -% Vconv -gsave 10 dict begin -552 202 32 18 ellipse_path -stroke -gsave 10 dict begin -533 197 moveto -(Vconv) -[10.08 6.24 6.96 6.48 6.96] -xshow -end grestore -end grestore - -% Csymtable -gsave 10 dict begin -674 202 43 18 ellipse_path -stroke -gsave 10 dict begin -643 197 moveto -(Csymtable) -[9.36 5.52 6.96 10.8 4.08 6.24 6.96 3.84 6.24] -xshow -end grestore -end grestore - -% Vconv -> Csymtable -newpath 584 202 moveto -595 202 608 202 620 202 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 620 206 moveto -630 202 lineto -620 199 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 620 206 moveto -630 202 lineto -620 199 lineto -closepath -stroke -end grestore - -% Inductive -gsave 10 dict begin -674 110 39 18 ellipse_path -stroke -gsave 10 dict begin -647 105 moveto -(Inductive) -[4.56 6.96 6.96 6.96 6.24 3.84 3.84 6.48 6.24] -xshow -end grestore -end grestore - -% Vconv -> Inductive -newpath 571 187 moveto -591 172 622 149 645 132 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 647 135 moveto -653 126 lineto -643 129 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 647 135 moveto -653 126 lineto -643 129 lineto -closepath -stroke -end grestore - -% Csymtable -> Vm -newpath 696 218 moveto -717 234 751 258 775 275 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 773 278 moveto -783 281 lineto -777 272 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 773 278 moveto -783 281 lineto -777 272 lineto -closepath -stroke -end grestore - -% Cbytegen -gsave 10 dict begin -801 164 39 18 ellipse_path -stroke -gsave 10 dict begin -774 159 moveto -(Cbytegen) -[9.36 6.48 6.96 3.84 6.24 6.72 6.24 6.96] -xshow -end grestore -end grestore - -% Csymtable -> Cbytegen -newpath 709 191 moveto -724 187 742 181 758 177 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 759 180 moveto -768 174 lineto -757 174 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 759 180 moveto -768 174 lineto -757 174 lineto -closepath -stroke -end grestore - -% Type_errors -gsave 10 dict begin -801 110 47 18 ellipse_path -stroke -gsave 10 dict begin -767 105 moveto -(Type_errors) -[6.96 6.96 6.96 6.24 6.96 6.24 5.04 4.56 6.96 4.56 5.52] -xshow -end grestore -end grestore - -% Inductive -> Type_errors -newpath 714 110 moveto -724 110 734 110 744 110 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 744 114 moveto -754 110 lineto -744 107 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 744 114 moveto -754 110 lineto -744 107 lineto -closepath -stroke -end grestore - -% Univ -gsave 10 dict begin -1763 241 27 18 ellipse_path -stroke -gsave 10 dict begin -1748 236 moveto -(Univ) -[9.6 6.96 3.84 6.96] -xshow -end grestore -end grestore - -% Univ -> Names -newpath 1788 248 moveto -1800 251 1814 255 1826 259 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 1825 262 moveto -1836 262 lineto -1827 256 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 1825 262 moveto -1836 262 lineto -1827 256 lineto -closepath -stroke -end grestore - -% Typeops -gsave 10 dict begin -552 110 36 18 ellipse_path -stroke -gsave 10 dict begin -528 105 moveto -(Typeops) -[6.96 6.96 6.96 6.24 6.96 6.96 5.52] -xshow -end grestore -end grestore - -% Typeops -> Inductive -newpath 589 110 moveto -600 110 612 110 624 110 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 624 114 moveto -634 110 lineto -624 107 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 624 114 moveto -634 110 lineto -624 107 lineto -closepath -stroke -end grestore - -% Entries -gsave 10 dict begin -801 56 33 18 ellipse_path -stroke -gsave 10 dict begin -780 51 moveto -(Entries) -[8.4 6.96 3.84 4.8 3.84 6.24 5.52] -xshow -end grestore -end grestore - -% Typeops -> Entries -newpath 581 99 moveto -595 93 614 87 630 83 curveto -673 73 723 66 758 61 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 758 64 moveto -768 60 lineto -758 58 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 758 64 moveto -768 60 lineto -758 58 lineto -closepath -stroke -end grestore - -% Sign -gsave 10 dict begin -1427 100 27 18 ellipse_path -stroke -gsave 10 dict begin -1414 95 moveto -(Sign) -[7.68 3.84 6.96 6.96] -xshow -end grestore -end grestore - -% Entries -> Sign -newpath 834 61 moveto -882 68 974 79 1053 79 curveto -1053 79 1053 79 1174 79 curveto -1251 79 1342 89 1390 95 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 1390 98 moveto -1400 96 lineto -1390 92 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 1390 98 moveto -1400 96 lineto -1390 92 lineto -closepath -stroke -end grestore - -% Reduction -gsave 10 dict begin -926 208 42 18 ellipse_path -stroke -gsave 10 dict begin -897 203 moveto -(Reduction) -[9.12 6.24 6.96 6.96 6.24 3.84 3.84 6.96 6.96] -xshow -end grestore -end grestore - -% Type_errors -> Reduction -newpath 829 125 moveto -836 129 842 133 848 137 curveto -868 151 887 170 902 184 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 900 187 moveto -910 191 lineto -905 182 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 900 187 moveto -910 191 lineto -905 182 lineto -closepath -stroke -end grestore - -% Reduction -> Conv_oracle -newpath 948 224 moveto -968 239 999 261 1023 278 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 1021 281 moveto -1031 284 lineto -1025 275 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 1021 281 moveto -1031 284 lineto -1025 275 lineto -closepath -stroke -end grestore - -% Closure -gsave 10 dict begin -1053 208 35 18 ellipse_path -stroke -gsave 10 dict begin -1031 203 moveto -(Closure) -[9.36 3.84 6.96 5.52 6.96 4.56 6.24] -xshow -end grestore -end grestore - -% Reduction -> Closure -newpath 968 208 moveto -981 208 994 208 1008 208 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 1008 212 moveto -1018 208 lineto -1008 205 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 1008 212 moveto -1018 208 lineto -1008 205 lineto -closepath -stroke -end grestore - -% Term_typing -gsave 10 dict begin -313 110 49 18 ellipse_path -stroke -gsave 10 dict begin -277 105 moveto -(Term_typing) -[7.2 6.24 4.8 10.8 6.96 3.84 6.96 6.96 3.84 6.96 6.96] -xshow -end grestore -end grestore - -% Term_typing -> Cbytegen -newpath 347 123 moveto -363 128 381 134 398 137 curveto -524 161 675 165 752 165 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 752 169 moveto -762 165 lineto -752 162 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 752 169 moveto -762 165 lineto -752 162 lineto -closepath -stroke -end grestore - -% Cooking -gsave 10 dict begin -436 225 37 18 ellipse_path -stroke -gsave 10 dict begin -411 220 moveto -(Cooking) -[9.36 6.96 6.96 6.96 3.84 6.96 6.96] -xshow -end grestore -end grestore - -% Term_typing -> Cooking -newpath 331 127 moveto -352 147 387 179 410 202 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 408 205 moveto -418 209 lineto -413 200 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 408 205 moveto -418 209 lineto -413 200 lineto -closepath -stroke -end grestore - -% Indtypes -gsave 10 dict begin -436 110 37 18 ellipse_path -stroke -gsave 10 dict begin -411 105 moveto -(Indtypes) -[4.56 6.96 6.96 3.84 6.96 6.96 6.24 5.52] -xshow -end grestore -end grestore - -% Term_typing -> Indtypes -newpath 362 110 moveto -370 110 379 110 388 110 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 388 114 moveto -398 110 lineto -388 107 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 388 114 moveto -398 110 lineto -388 107 lineto -closepath -stroke -end grestore - -% Environ -gsave 10 dict begin -1174 181 36 18 ellipse_path -stroke -gsave 10 dict begin -1151 176 moveto -(Environ) -[8.4 6.48 6.96 3.84 4.56 6.96 6.96] -xshow -end grestore -end grestore - -% Cbytegen -> Environ -newpath 841 166 moveto -911 169 1054 175 1128 179 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 1128 183 moveto -1138 179 lineto -1128 176 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 1128 183 moveto -1138 179 lineto -1128 176 lineto -closepath -stroke -end grestore - -% Cooking -> Reduction -newpath 473 227 moveto -485 228 498 229 510 229 curveto -603 231 626 233 718 229 curveto -773 226 834 220 876 214 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 876 217 moveto -886 213 lineto -876 211 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 876 217 moveto -886 213 lineto -876 211 lineto -closepath -stroke -end grestore - -% Indtypes -> Typeops -newpath 474 110 moveto -484 110 495 110 505 110 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 505 114 moveto -515 110 lineto -505 107 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 505 114 moveto -515 110 lineto -505 107 lineto -closepath -stroke -end grestore - -% Term -gsave 10 dict begin -1666 173 28 18 ellipse_path -stroke -gsave 10 dict begin -1651 168 moveto -(Term) -[7.2 6.24 4.8 10.8] -xshow -end grestore -end grestore - -% Term -> Univ -newpath 1685 186 moveto -1699 196 1719 211 1736 222 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 1734 225 moveto -1744 228 lineto -1738 219 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 1734 225 moveto -1744 228 lineto -1738 219 lineto -closepath -stroke -end grestore - -% Esubst -gsave 10 dict begin -1763 173 32 18 ellipse_path -stroke -gsave 10 dict begin -1743 168 moveto -(Esubst) -[8.4 5.52 6.96 6.96 5.28 3.84] -xshow -end grestore -end grestore - -% Term -> Esubst -newpath 1694 173 moveto -1702 173 1711 173 1720 173 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 1720 177 moveto -1730 173 lineto -1720 170 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 1720 177 moveto -1730 173 lineto -1720 170 lineto -closepath -stroke -end grestore - -% Subtyping -gsave 10 dict begin -552 56 42 18 ellipse_path -stroke -gsave 10 dict begin -523 51 moveto -(Subtyping) -[7.68 6.96 6.96 3.84 6.96 6.96 3.84 6.96 6.96] -xshow -end grestore -end grestore - -% Subtyping -> Inductive -newpath 581 69 moveto -597 77 618 86 636 93 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 634 96 moveto -645 97 lineto -637 90 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 634 96 moveto -645 97 lineto -637 90 lineto -closepath -stroke -end grestore - -% Modops -gsave 10 dict begin -674 18 36 18 ellipse_path -stroke -gsave 10 dict begin -650 13 moveto -(Modops) -[12.48 6.96 6.96 6.96 6.96 5.52] -xshow -end grestore -end grestore - -% Subtyping -> Modops -newpath 586 45 moveto -601 41 618 35 633 31 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 634 34 moveto -643 28 lineto -632 28 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 634 34 moveto -643 28 lineto -632 28 lineto -closepath -stroke -end grestore - -% Modops -> Entries -newpath 705 27 moveto -722 32 743 39 761 44 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 760 47 moveto -771 47 lineto -762 41 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 760 47 moveto -771 47 lineto -762 41 lineto -closepath -stroke -end grestore - -% Modops -> Cbytegen -newpath 686 35 moveto -695 48 707 67 718 83 curveto -735 107 733 118 754 137 curveto -757 140 761 143 765 145 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 763 148 moveto -773 151 lineto -767 142 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 763 148 moveto -773 151 lineto -767 142 lineto -closepath -stroke -end grestore - -% Sign -> Term -newpath 1454 99 moveto -1489 98 1553 100 1602 119 curveto -1626 129 1637 135 1649 148 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 1647 151 moveto -1656 156 lineto -1652 146 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 1647 151 moveto -1656 156 lineto -1652 146 lineto -closepath -stroke -end grestore - -% Safe_typing -gsave 10 dict begin -47 85 46 18 ellipse_path -stroke -gsave 10 dict begin -13 80 moveto -(Safe_typing) -[7.68 6.24 4.08 6.24 6.96 3.84 6.96 6.96 3.84 6.96 6.96] -xshow -end grestore -end grestore - -% Mod_typing -gsave 10 dict begin -179 85 48 18 ellipse_path -stroke -gsave 10 dict begin -143 80 moveto -(Mod_typing) -[12.48 6.96 6.96 6.96 3.84 6.96 6.96 3.84 6.96 6.96] -xshow -end grestore -end grestore - -% Safe_typing -> Mod_typing -newpath 94 85 moveto -103 85 111 85 120 85 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 120 89 moveto -130 85 lineto -120 82 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 120 89 moveto -130 85 lineto -120 82 lineto -closepath -stroke -end grestore - -% Mod_typing -> Term_typing -newpath 223 93 moveto -235 95 248 98 260 100 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 260 103 moveto -270 102 lineto -261 97 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 260 103 moveto -270 102 lineto -261 97 lineto -closepath -stroke -end grestore - -% Mod_typing -> Subtyping -newpath 227 81 moveto -297 75 428 65 500 60 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 500 63 moveto -510 59 lineto -500 57 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 500 63 moveto -510 59 lineto -500 57 lineto -closepath -stroke -end grestore - -% Closure -> Environ -newpath 1085 201 moveto -1099 198 1116 194 1131 190 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 1132 193 moveto -1141 188 lineto -1131 187 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 1132 193 moveto -1141 188 lineto -1131 187 lineto -closepath -stroke -end grestore - -% Mod_subst -> Term -newpath 1594 155 moveto -1606 158 1618 161 1630 164 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 1630 167 moveto -1640 166 lineto -1631 161 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 1630 167 moveto -1640 166 lineto -1631 161 lineto -closepath -stroke -end grestore - -% Declarations -gsave 10 dict begin -1295 181 49 18 ellipse_path -stroke -gsave 10 dict begin -1259 176 moveto -(Declarations) -[10.08 6.24 6.24 3.84 6.24 4.56 6.24 3.84 3.84 6.96 6.96 5.52] -xshow -end grestore -end grestore - -% Environ -> Declarations -newpath 1210 181 moveto -1218 181 1227 181 1236 181 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 1236 185 moveto -1246 181 lineto -1236 178 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 1236 185 moveto -1246 181 lineto -1236 178 lineto -closepath -stroke -end grestore - -% Declarations -> Cemitcodes -newpath 1341 188 moveto -1351 189 1363 191 1373 192 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 1373 195 moveto -1383 194 lineto -1374 189 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 1373 195 moveto -1383 194 lineto -1374 189 lineto -closepath -stroke -end grestore - -% Declarations -> Sign -newpath 1320 165 moveto -1343 152 1375 132 1398 118 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 1401 120 moveto -1407 112 lineto -1397 115 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 1401 120 moveto -1407 112 lineto -1397 115 lineto -closepath -stroke -end grestore - -% Cbytecodes -> Term -newpath 1595 190 moveto -1607 188 1619 185 1630 182 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 1631 185 moveto -1640 179 lineto -1629 179 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 1631 185 moveto -1640 179 lineto -1629 179 lineto -closepath -stroke -end grestore -endpage -showpage -grestore -%%PageTrailer -%%EndPage: 1 -%%Trailer -%%Pages: 1 -end -restore -%%EOF diff --git a/dev/doc/lex.mll b/dev/doc/lex.mll deleted file mode 100644 index 617163e7..00000000 --- a/dev/doc/lex.mll +++ /dev/null @@ -1,81 +0,0 @@ - -{ - open Lexing - open Syntax - - let chan_out = ref stdout - - let comment_depth = ref 0 - let print s = output_string !chan_out s - - exception Fin_fichier - -} - -let space = [' ' '\t' '\n'] -let letter = ['a'-'z' 'A'-'Z'] -let digit = ['0'-'9'] - -let identifier = letter (letter | digit | ['_' '\''])* -let number = digit+ -let oper = ['-' '+' '/' '*' '|' '>' '<' '=' '%' '#' '$' ':' '\\' '?' - '.' '!' '@' ]+ - -rule token = parse - | "let" {LET} - | "in" {IN} - | "match" {MATCH} - | "with" {WITH} - | "end" {END} - | "and" {AND} - | "fun" {FUN} - | "if" {IF} - | "then" {THEN} - | "else" {ELSE} - | "eval" {EVAL} - | "for" {FOR} - | "Prop" {PROP} - | "Set" {SET} - | "Type" {TYPE} - | "fix" {FIX} - | "cofix" {COFIX} - | "struct" {STRUCT} - | "as" {AS} - - | "Simpl" {SIMPL} - - | "_" {WILDCARD} - | "(" {LPAR} - | ")" {RPAR} - | "{" {LBRACE} - | "}" {RBRACE} - | "!" {BANG} - | "@" {AT} - | ":" {COLON} - | ":=" {COLONEQ} - | "." {DOT} - | "," {COMMA} - | "->" {OPER "->"} - | "=>" {RARROW} - | "|" {BAR} - | "%" {PERCENT} - - | '?' { META(ident lexbuf)} - | number { INT(Lexing.lexeme lexbuf) } - | oper { OPER(Lexing.lexeme lexbuf) } - | identifier { IDENT (Lexing.lexeme lexbuf) } - | "(*" (*"*)"*) { comment_depth := 1; - comment lexbuf; - token lexbuf } - | space+ { token lexbuf} - | eof { EOF } - -and ident = parse - | identifier { Lexing.lexeme lexbuf } - -and comment = parse - | "(*" (*"*)"*) { incr comment_depth; comment lexbuf } - | (*"(*"*) "*)" - { decr comment_depth; if !comment_depth > 0 then comment lexbuf } - | eof { raise Fin_fichier } - | _ { comment lexbuf } diff --git a/dev/doc/library.dep.ps b/dev/doc/library.dep.ps deleted file mode 100644 index 1c68240e..00000000 --- a/dev/doc/library.dep.ps +++ /dev/null @@ -1,836 +0,0 @@ -%!PS-Adobe-2.0 -%%Creator: dot version 2.2 (Wed Jan 19 21:09:25 UTC 2005) -%%For: (herbelin) Hugo Herbelin -%%Title: G -%%Pages: (atend) -%%BoundingBox: 35 35 577 207 -%%EndComments -save -%%BeginProlog -/DotDict 200 dict def -DotDict begin - -/setupLatin1 { -mark -/EncodingVector 256 array def - EncodingVector 0 - -ISOLatin1Encoding 0 255 getinterval putinterval - -EncodingVector - dup 306 /AE - dup 301 /Aacute - dup 302 /Acircumflex - dup 304 /Adieresis - dup 300 /Agrave - dup 305 /Aring - dup 303 /Atilde - dup 307 /Ccedilla - dup 311 /Eacute - dup 312 /Ecircumflex - dup 313 /Edieresis - dup 310 /Egrave - dup 315 /Iacute - dup 316 /Icircumflex - dup 317 /Idieresis - dup 314 /Igrave - dup 334 /Udieresis - dup 335 /Yacute - dup 376 /thorn - dup 337 /germandbls - dup 341 /aacute - dup 342 /acircumflex - dup 344 /adieresis - dup 346 /ae - dup 340 /agrave - dup 345 /aring - dup 347 /ccedilla - dup 351 /eacute - dup 352 /ecircumflex - dup 353 /edieresis - dup 350 /egrave - dup 355 /iacute - dup 356 /icircumflex - dup 357 /idieresis - dup 354 /igrave - dup 360 /dcroat - dup 361 /ntilde - dup 363 /oacute - dup 364 /ocircumflex - dup 366 /odieresis - dup 362 /ograve - dup 365 /otilde - dup 370 /oslash - dup 372 /uacute - dup 373 /ucircumflex - dup 374 /udieresis - dup 371 /ugrave - dup 375 /yacute - dup 377 /ydieresis - -% Set up ISO Latin 1 character encoding -/starnetISO { - dup dup findfont dup length dict begin - { 1 index /FID ne { def }{ pop pop } ifelse - } forall - /Encoding EncodingVector def - currentdict end definefont -} def -/Times-Roman starnetISO def -/Times-Italic starnetISO def -/Times-Bold starnetISO def -/Times-BoldItalic starnetISO def -/Helvetica starnetISO def -/Helvetica-Oblique starnetISO def -/Helvetica-Bold starnetISO def -/Helvetica-BoldOblique starnetISO def -/Courier starnetISO def -/Courier-Oblique starnetISO def -/Courier-Bold starnetISO def -/Courier-BoldOblique starnetISO def -cleartomark -} bind def - -%%BeginResource: procset graphviz 0 0 -/coord-font-family /Times-Roman def -/default-font-family /Times-Roman def -/coordfont coord-font-family findfont 8 scalefont def - -/InvScaleFactor 1.0 def -/set_scale { - dup 1 exch div /InvScaleFactor exch def - dup scale -} bind def - -% styles -/solid { [] 0 setdash } bind def -/dashed { [9 InvScaleFactor mul dup ] 0 setdash } bind def -/dotted { [1 InvScaleFactor mul 6 InvScaleFactor mul] 0 setdash } bind def -/invis {/fill {newpath} def /stroke {newpath} def /show {pop newpath} def} bind def -/bold { 2 setlinewidth } bind def -/filled { } bind def -/unfilled { } bind def -/rounded { } bind def -/diagonals { } bind def - -% hooks for setting color -/nodecolor { sethsbcolor } bind def -/edgecolor { sethsbcolor } bind def -/graphcolor { sethsbcolor } bind def -/nopcolor {pop pop pop} bind def - -/beginpage { % i j npages - /npages exch def - /j exch def - /i exch def - /str 10 string def - npages 1 gt { - gsave - coordfont setfont - 0 0 moveto - (\() show i str cvs show (,) show j str cvs show (\)) show - grestore - } if -} bind def - -/set_font { - findfont exch - scalefont setfont -} def - -% draw aligned label in bounding box aligned to current point -/alignedtext { % width adj text - /text exch def - /adj exch def - /width exch def - gsave - width 0 gt { - text stringwidth pop adj mul 0 rmoveto - } if - [] 0 setdash - text show - grestore -} def - -/boxprim { % xcorner ycorner xsize ysize - 4 2 roll - moveto - 2 copy - exch 0 rlineto - 0 exch rlineto - pop neg 0 rlineto - closepath -} bind def - -/ellipse_path { - /ry exch def - /rx exch def - /y exch def - /x exch def - matrix currentmatrix - newpath - x y translate - rx ry scale - 0 0 1 0 360 arc - setmatrix -} bind def - -/endpage { showpage } bind def -/showpage { } def - -/layercolorseq - [ % layer color sequence - darkest to lightest - [0 0 0] - [.2 .8 .8] - [.4 .8 .8] - [.6 .8 .8] - [.8 .8 .8] - ] -def - -/layerlen layercolorseq length def - -/setlayer {/maxlayer exch def /curlayer exch def - layercolorseq curlayer 1 sub layerlen mod get - aload pop sethsbcolor - /nodecolor {nopcolor} def - /edgecolor {nopcolor} def - /graphcolor {nopcolor} def -} bind def - -/onlayer { curlayer ne {invis} if } def - -/onlayers { - /myupper exch def - /mylower exch def - curlayer mylower lt - curlayer myupper gt - or - {invis} if -} def - -/curlayer 0 def - -%%EndResource -%%EndProlog -%%BeginSetup -14 default-font-family set_font -1 setmiterlimit -% /arrowlength 10 def -% /arrowwidth 5 def - -% make sure pdfmark is harmless for PS-interpreters other than Distiller -/pdfmark where {pop} {userdict /pdfmark /cleartomark load put} ifelse -% make '<<' and '>>' safe on PS Level 1 devices -/languagelevel where {pop languagelevel}{1} ifelse -2 lt { - userdict (<<) cvn ([) cvn load put - userdict (>>) cvn ([) cvn load put -} if - -%%EndSetup -%%Page: 1 1 -%%PageBoundingBox: 36 36 577 207 -%%PageOrientation: Portrait -gsave -35 35 542 172 boxprim clip newpath -36 36 translate -0 0 1 beginpage -0.6750 set_scale -0 0 translate 0 rotate -0.000 0.000 0.000 graphcolor -14.00 /Times-Roman set_font - -% States -gsave 10 dict begin -30 18 30 18 ellipse_path -stroke -gsave 10 dict begin -13 13 moveto -(States) -[7.44 4.08 6.24 3.84 6.24 5.52] -xshow -end grestore -end grestore - -% Library -gsave 10 dict begin -132 18 34 18 ellipse_path -stroke -gsave 10 dict begin -110 13 moveto -(Library) -[8.4 3.84 6.96 4.56 6.24 4.8 6.96] -xshow -end grestore -end grestore - -% States -> Library -newpath 60 18 moveto -69 18 78 18 87 18 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 87 22 moveto -97 18 lineto -87 15 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 87 22 moveto -97 18 lineto -87 15 lineto -closepath -stroke -end grestore - -% Declaremods -gsave 10 dict begin -274 18 50 18 ellipse_path -stroke -gsave 10 dict begin -236 13 moveto -(Declaremods) -[10.08 6.24 6.24 3.84 6.24 4.56 6.24 10.8 6.96 6.96 5.52] -xshow -end grestore -end grestore - -% Library -> Declaremods -newpath 167 18 moveto -181 18 197 18 213 18 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 213 22 moveto -223 18 lineto -213 15 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 213 22 moveto -223 18 lineto -213 15 lineto -closepath -stroke -end grestore - -% Nametab -gsave 10 dict begin -523 134 39 18 ellipse_path -stroke -gsave 10 dict begin -497 129 moveto -(Nametab) -[9.6 6.24 10.8 6 4.08 6.24 6.96] -xshow -end grestore -end grestore - -% Libnames -gsave 10 dict begin -642 134 41 18 ellipse_path -stroke -gsave 10 dict begin -613 129 moveto -(Libnames) -[8.4 3.84 6.96 6.96 6.24 10.8 6.24 5.52] -xshow -end grestore -end grestore - -% Nametab -> Libnames -newpath 562 134 moveto -571 134 580 134 590 134 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 590 138 moveto -600 134 lineto -590 131 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 590 138 moveto -600 134 lineto -590 131 lineto -closepath -stroke -end grestore - -% Summary -gsave 10 dict begin -642 65 40 18 ellipse_path -stroke -gsave 10 dict begin -614 60 moveto -(Summary) -[7.68 6.96 10.8 10.8 6.24 4.8 6.96] -xshow -end grestore -end grestore - -% Nametab -> Summary -newpath 547 120 moveto -565 110 589 96 608 84 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 610 87 moveto -617 79 lineto -607 81 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 610 87 moveto -617 79 lineto -607 81 lineto -closepath -stroke -end grestore - -% Nameops -gsave 10 dict begin -760 134 40 18 ellipse_path -stroke -gsave 10 dict begin -733 129 moveto -(Nameops) -[9.6 6.24 10.8 6.24 6.96 6.96 5.52] -xshow -end grestore -end grestore - -% Libnames -> Nameops -newpath 684 134 moveto -693 134 701 134 710 134 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 710 138 moveto -720 134 lineto -710 131 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 710 138 moveto -720 134 lineto -710 131 lineto -closepath -stroke -end grestore - -% Lib -gsave 10 dict begin -413 153 27 18 ellipse_path -stroke -gsave 10 dict begin -402 148 moveto -(Lib) -[8.4 3.84 6.96] -xshow -end grestore -end grestore - -% Declaremods -> Lib -newpath 315 29 moveto -325 33 336 38 344 45 curveto -359 58 383 99 399 127 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 396 129 moveto -404 136 lineto -402 126 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 396 129 moveto -404 136 lineto -402 126 lineto -closepath -stroke -end grestore - -% Global -gsave 10 dict begin -413 65 32 18 ellipse_path -stroke -gsave 10 dict begin -393 60 moveto -(Global) -[10.08 3.84 6.96 6.96 6.24 3.84] -xshow -end grestore -end grestore - -% Declaremods -> Global -newpath 311 30 moveto -331 37 355 45 375 52 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 374 55 moveto -385 55 lineto -376 49 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 374 55 moveto -385 55 lineto -376 49 lineto -closepath -stroke -end grestore - -% Libobject -gsave 10 dict begin -523 188 40 18 ellipse_path -stroke -gsave 10 dict begin -495 183 moveto -(Libobject) -[8.4 3.84 6.96 6.96 6.96 3.84 6.24 6.24 3.84] -xshow -end grestore -end grestore - -% Libobject -> Libnames -newpath 552 175 moveto -567 168 587 159 604 151 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 605 154 moveto -613 147 lineto -602 148 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 605 154 moveto -613 147 lineto -602 148 lineto -closepath -stroke -end grestore - -% Lib -> Nametab -newpath 439 148 moveto -450 146 464 144 476 142 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 477 145 moveto -486 140 lineto -476 139 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 477 145 moveto -486 140 lineto -476 139 lineto -closepath -stroke -end grestore - -% Lib -> Libobject -newpath 437 161 moveto -450 165 466 170 480 174 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 479 177 moveto -490 177 lineto -481 171 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 479 177 moveto -490 177 lineto -481 171 lineto -closepath -stroke -end grestore - -% Impargs -gsave 10 dict begin -274 126 36 18 ellipse_path -stroke -gsave 10 dict begin -251 121 moveto -(Impargs) -[4.56 10.56 6.96 6.24 4.32 6.96 5.52] -xshow -end grestore -end grestore - -% Impargs -> Lib -newpath 308 133 moveto -329 137 355 142 377 146 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 377 149 moveto -387 148 lineto -378 143 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 377 149 moveto -387 148 lineto -378 143 lineto -closepath -stroke -end grestore - -% Impargs -> Global -newpath 304 116 moveto -316 111 331 105 344 99 curveto -357 94 369 88 381 82 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 382 85 moveto -390 78 lineto -379 79 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 382 85 moveto -390 78 lineto -379 79 lineto -closepath -stroke -end grestore - -% Global -> Libnames -newpath 443 73 moveto -473 81 522 94 564 107 curveto -576 111 589 115 600 119 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 599 122 moveto -610 122 lineto -601 116 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 599 122 moveto -610 122 lineto -601 116 lineto -closepath -stroke -end grestore - -% Global -> Summary -newpath 446 65 moveto -484 65 547 65 591 65 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 591 69 moveto -601 65 lineto -591 62 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 591 69 moveto -601 65 lineto -591 62 lineto -closepath -stroke -end grestore - -% Goptions -gsave 10 dict begin -274 180 39 18 ellipse_path -stroke -gsave 10 dict begin -248 175 moveto -(Goptions) -[10.08 6.96 6.96 3.84 3.84 6.96 6.96 5.52] -xshow -end grestore -end grestore - -% Goptions -> Lib -newpath 310 173 moveto -331 169 356 164 377 160 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 378 163 moveto -387 158 lineto -377 157 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 378 163 moveto -387 158 lineto -377 157 lineto -closepath -stroke -end grestore - -% Dischargedhypsmap -gsave 10 dict begin -274 234 70 18 ellipse_path -stroke -gsave 10 dict begin -217 229 moveto -(Dischargedhypsmap) -[10.08 3.84 5.52 6 6.96 6.24 4.32 6.72 6.24 6.96 6.48 6.96 6.96 5.52 10.8 6.24 6.96] -xshow -end grestore -end grestore - -% Dischargedhypsmap -> Lib -newpath 317 220 moveto -326 216 336 212 344 207 curveto -360 197 376 185 389 175 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 392 177 moveto -397 168 lineto -387 172 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 392 177 moveto -397 168 lineto -387 172 lineto -closepath -stroke -end grestore - -% Declare -gsave 10 dict begin -132 126 35 18 ellipse_path -stroke -gsave 10 dict begin -109 121 moveto -(Declare) -[10.08 6.24 6.24 3.84 6.24 4.56 6.24] -xshow -end grestore -end grestore - -% Declare -> Impargs -newpath 168 126 moveto -186 126 208 126 228 126 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 228 130 moveto -238 126 lineto -228 123 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 228 130 moveto -238 126 lineto -228 123 lineto -closepath -stroke -end grestore - -% Declare -> Dischargedhypsmap -newpath 144 143 moveto -157 161 179 189 204 207 curveto -209 210 215 213 221 216 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 219 219 moveto -230 220 lineto -222 213 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 219 219 moveto -230 220 lineto -222 213 lineto -closepath -stroke -end grestore - -% Decl_kinds -gsave 10 dict begin -274 72 45 18 ellipse_path -stroke -gsave 10 dict begin -241 67 moveto -(Decl_kinds) -[10.08 6.24 6.24 3.84 6.96 6.96 3.84 6.96 6.96 5.52] -xshow -end grestore -end grestore - -% Declare -> Decl_kinds -newpath 161 115 moveto -181 107 209 97 232 88 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 233 91 moveto -241 84 lineto -230 85 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 233 91 moveto -241 84 lineto -230 85 lineto -closepath -stroke -end grestore -endpage -showpage -grestore -%%PageTrailer -%%EndPage: 1 -%%Trailer -%%Pages: 1 -end -restore -%%EOF diff --git a/dev/doc/macros.tex b/dev/doc/macros.tex deleted file mode 100644 index 6beacf7b..00000000 --- a/dev/doc/macros.tex +++ /dev/null @@ -1,7 +0,0 @@ - -% macros for coq.tex - -\newcommand{\Coq}{\textsf{Coq}} -\newcommand{\CCI}{Calculus of Inductive Constructions} - -\newcommand{\refsec}[1]{\textbf{\ref{#1}}} \ No newline at end of file diff --git a/dev/doc/memo-v8.tex b/dev/doc/memo-v8.tex deleted file mode 100644 index 8d116de2..00000000 --- a/dev/doc/memo-v8.tex +++ /dev/null @@ -1,286 +0,0 @@ - -\documentclass{article} - -\usepackage{verbatim} -\usepackage{amsmath} -\usepackage{amssymb} -\usepackage{array} -\usepackage{fullpage} - -\author{B.~Barras} -\title{An introduction to syntax of Coq V8} - -%% Le _ est un caractère normal -\catcode`\_=13 -\let\subscr=_ -\def_{\ifmmode\sb\else\subscr\fi} - -\def\NT#1{\langle\textit{#1}\rangle} -\def\NTL#1#2{\langle\textit{#1}\rangle_{#2}} -\def\TERM#1{\textsf{\bf #1}} - -\newenvironment{transbox} - {\begin{center}\tt\begin{tabular}{l|ll} \hfil\textrm{V7} & \hfil\textrm{V8} \\ \hline} - {\end{tabular}\end{center}} -\def\TRANS#1#2 - {\begin{tabular}[t]{@{}l@{}}#1\end{tabular} & - \begin{tabular}[t]{@{}l@{}}#2\end{tabular} \\} -\def\TRANSCOM#1#2#3 - {\begin{tabular}[t]{@{}l@{}}#1\end{tabular} & - \begin{tabular}[t]{@{}l@{}}#2\end{tabular} & #3 \\} - -\begin{document} - -\maketitle - -The goal of this document is to introduce by example to the new syntax of -Coq. It is strongly recommended to read first the definition of the new -syntax, but this document should also be useful for the eager user who wants -to start with the new syntax quickly. - - -\section{Changes in lexical conventions w.r.t. V7} - -\subsection{Identifiers} - -The lexical conventions changed: \TERM{_} is not a regular identifier -anymore. It is used in terms as a placeholder for subterms to be inferred -at type-checking, and in patterns as a non-binding variable. - -Furthermore, only letters (unicode letters), digits, single quotes and -_ are allowed after the first character. - -\subsection{Quoted string} - -Quoted strings are used typically to give a filename (which may not -be a regular identifier). As before they are written between double -quotes ("). Unlike for V7, there is no escape character: characters -are written normaly but the double quote which is doubled. - -\section{Main changes in terms w.r.t. V7} - - -\subsection{Precedence of application} - -In the new syntax, parentheses are not really part of the syntax of -application. The precedence of application (10) is tighter than all -prefix and infix notations. It makes it possible to remove parentheses -in many contexts. - -\begin{transbox} -\TRANS{(A x)->(f x)=(g y)}{A x -> f x = g y} -\TRANS{(f [x]x)}{f (fun x => x)} -\end{transbox} - - -\subsection{Arithmetics and scopes} - -The specialized notation for \TERM{Z} and \TERM{R} (introduced by -symbols \TERM{`} and \TERM{``}) have disappeared. They have been -replaced by the general notion of scope. - -\begin{center} -\begin{tabular}{l|l|l} -type & scope name & delimiter \\ -\hline -types & type_scope & \TERM{T} \\ -\TERM{bool} & bool_scope & \\ -\TERM{nat} & nat_scope & \TERM{nat} \\ -\TERM{Z} & Z_scope & \TERM{Z} \\ -\TERM{R} & R_scope & \TERM{R} \\ -\TERM{positive} & positive_scope & \TERM{P} -\end{tabular} -\end{center} - -In order to use notations of arithmetics on \TERM{Z}, its scope must be opened with command \verb+Open Scope Z_scope.+ Another possibility is using the scope change notation (\TERM{\%}). The latter notation is to be used when notations of several scopes appear in the same expression. - -In examples below, scope changes are not needed if the appropriate scope -has been opened. Scope nat_scope is opened in the initial state of Coq. -\begin{transbox} -\TRANSCOM{`0+x=x+0`}{0+x=x+0}{\textrm{Z_scope}} -\TRANSCOM{``0 + [if b then ``1`` else ``2``]``}{0 + if b then 1 else 2}{\textrm{R_scope}} -\TRANSCOM{(0)}{0}{\textrm{nat_scope}} -\end{transbox} - -Below is a table that tells which notation is available in which -scope. The relative precedences and associativity of operators is the -same as in usual mathematics. See the reference manual for more -details. However, it is important to remember that unlike V7, the type -operators for product and sum are left associative, in order not to -clash with arithmetic operators. - -\begin{center} -\begin{tabular}{l|l} -scope & notations \\ -\hline -nat_scope & $+ ~- ~* ~< ~\leq ~> ~\geq$ \\ -Z_scope & $+ ~- ~* ~/ ~\TERM{mod} ~< ~\leq ~> ~\geq ~?=$ \\ -R_scope & $+ ~- ~* ~/ ~< ~\leq ~> ~\geq$ \\ -type_scope & $* ~+$ \\ -bool_scope & $\TERM{\&\&} ~\TERM{$||$} ~\TERM{-}$ \\ -list_scope & $\TERM{::} ~\TERM{++}$ -\end{tabular} -\end{center} -(Note: $\leq$ is written \TERM{$<=$}) - - - -\subsection{Notation for implicit arguments} - -The explicitation of arguments is closer to the \emph{bindings} notation in -tactics. Argument positions follow the argument names of the head constant. - -\begin{transbox} -\TRANS{f 1!t1 2!t2}{f (x:=t1) (y:=t2)} -\TRANS{!f t1 t2}{@f t1 t2} -\end{transbox} - - -\subsection{Universal quantification} - -The universal quantification and dependent product types are now -materialized with the \TERM{forall} keyword before the binders and a -comma after the binders. - -The syntax of binders also changed significantly. A binder can simply be -a name when its type can be inferred. In other cases, the name and the type -of the variable are put between parentheses. When several consecutive -variables have the same type, they can be grouped. Finally, if all variables -have the same type parentheses can be omitted. - -\begin{transbox} -\TRANS{(x:A)B}{forall (x:~A), B ~~\textrm{or}~~ forall x:~A, B} -\TRANS{(x,y:nat)P}{forall (x y :~nat), P ~~\textrm{or}~~ forall x y :~nat, P} -\TRANS{(x,y:nat;z:A)P}{forall (x y :~nat) (z:A), P} -\TRANS{(x,y,z,t:?)P}{forall x y z t, P} -\TRANS{(x,y:nat;z:?)P}{forall (x y :~nat) z, P} -\end{transbox} - -\subsection{Abstraction} - -The notation for $\lambda$-abstraction follows that of universal -quantification. The binders are surrounded by keyword \TERM{fun} -and $\Rightarrow$ (\verb+=>+ in ascii). - -\begin{transbox} -\TRANS{[x,y:nat; z](f a b c)}{fun (x y:nat) z => f a b c} -\end{transbox} - - -\subsection{Pattern-matching} - -Beside the usage of the keyword pair \TERM{match}/\TERM{with} instead of -\TERM{Cases}/\TERM{of}, the main change is the notation for the type of -branches and return type. It is no longer written between \TERM{$<$ $>$} before -the \TERM{Cases} keyword, but interleaved with the destructured objects. - -The idea is that for each destructured object, one may specify a variable -name to tell how the branches types depend on this destructured objects (case -of a dependent elimination), and also how they depend on the value of the -arguments of the inductive type of the destructured objects. The type of -branches is then given after the keyword \TERM{return}, unless it can be -inferred. - -Moreover, when the destructured object is a variable, one may use this -variable in the return type. - -\begin{transbox} -\TRANS{Cases n of\\~~ O => O \\| (S k) => (1) end}{match n with\\~~ 0 => 0 \\| (S k) => 1 end} -\TRANS{Cases m n of \\~~0 0 => t \\| ... end}{match m, n with \\~~0, 0 => t \\| .. end} -\TRANS{<[n:nat](P n)>Cases T of ... end}{match T as n return P n with ... end} -\TRANS{<[n:nat][p:(even n)]\~{}(odd n)>Cases p of\\~~ ... \\end}{match p in even n return \~{} odd n with\\~~ ...\\end} -\end{transbox} - - -\subsection{Fixpoints and cofixpoints} - -An easier syntax for non-mutual fixpoints is provided, making it very close -to the usual notation for non-recursive functions. The decreasing argument -is now indicated by an annotation between curly braces, regardless of the -binders grouping. The annotation can be omitted if the binders introduce only -one variable. The type of the result can be omitted if inferable. - -\begin{transbox} -\TRANS{Fix plus\{plus [n:nat] : nat -> nat :=\\~~ [m]...\}}{fix plus (n m:nat) \{struct n\}: nat := ...} -\TRANS{Fix fact\{fact [n:nat]: nat :=\\ -~~Cases n of\\~~~~ O => (1) \\~~| (S k) => (mult n (fact k)) end\}}{fix fact - (n:nat) :=\\ -~~match n with \\~~~~0 => 1 \\~~| (S k) => n * fact k end} -\end{transbox} - -There is a syntactic sugar for mutual fixpoints associated to a local -definition: - -\begin{transbox} -\TRANS{let f := Fix f \{f [x:A] : T := M\} in\\(g (f y))}{let fix f (x:A) : T := M in\\g (f x)} -\end{transbox} - -The same applies to cofixpoints, annotations are not allowed in that case. - -\subsection{Notation for type cast} - -\begin{transbox} -\TRANS{O :: nat}{0 : nat} -\end{transbox} - -\section{Main changes in tactics w.r.t. V7} - -The main change is that all tactic names are lowercase. This also holds for -Ltac keywords. - -\subsection{Ltac} - -Definitions of macros are introduced by \TERM{Ltac} instead of -\TERM{Tactic Definition}, \TERM{Meta Definition} or \TERM{Recursive -Definition}. - -Rules of a match command are not between square brackets anymore. - -Context (understand a term with a placeholder) instantiation \TERM{inst} -became \TERM{context}. Syntax is unified with subterm matching. - -\begin{transbox} -\TRANS{match t with [C[x=y]] => inst C[y=x]}{match t with context C[x=y] => context C[y=x]} -\end{transbox} - -\subsection{Named arguments of theorems} - -\begin{transbox} -\TRANS{Apply thm with x:=t 1:=u}{apply thm with (x:=t) (1:=u)} -\end{transbox} - - -\subsection{Occurrences} - -To avoid ambiguity between a numeric literal and the optionnal -occurence numbers of this term, the occurence numbers are put after -the term itself. This applies to tactic \TERM{pattern} and also -\TERM{unfold} -\begin{transbox} -\TRANS{Pattern 1 2 (f x) 3 4 d y z}{pattern (f x at 1 2) (d at 3 4) y z} -\end{transbox} - -\section{Main changes in vernacular commands w.r.t. V7} - - -\subsection{Binders} - -The binders of vernacular commands changed in the same way as those of -fixpoints. This also holds for parameters of inductive definitions. - - -\begin{transbox} -\TRANS{Definition x [a:A] : T := M}{Definition x (a:A) : T := M} -\TRANS{Inductive and [A,B:Prop]: Prop := \\~~conj : A->B->(and A B)}% - {Inductive and (A B:Prop): Prop := \\~~conj : A -> B -> and A B} -\end{transbox} - -\subsection{Hints} - -The syntax of \emph{extern} hints changed: the pattern and the tactic -to be applied are separated by a \TERM{$\Rightarrow$}. -\begin{transbox} -\TRANS{Hint Extern 4 (toto ?) Apply lemma}{Hint Extern 4 (toto _) => apply lemma} -\end{transbox} - -\end{document} diff --git a/dev/doc/parse.ml b/dev/doc/parse.ml deleted file mode 100644 index e537b1f2..00000000 --- a/dev/doc/parse.ml +++ /dev/null @@ -1,183 +0,0 @@ - -open Ast - -type assoc = L | R | N - -let level = function - | "--" -> 70,L - | "=" -> 70,N - | "+" -> 60,L - | "++" -> 60,R - | "+++" -> 60,R - | "-" -> 60,L - | "*" -> 50,L - | "/" -> 50,L - | "**" -> 40,R - | ":" -> (100,R) - | "->" -> (90,R) - | s -> failwith ("unknowm operator '"^s^"'") - -let fixity = function - | "--" -> [L] - | "=" -> [N] - | ("+"|"-"|"*"|"/") -> [L;N] - | "++" -> [R] - | _ -> [L;N;R] - -let ground_oper = function - ("-"|"+") -> true - | _ -> false - -let is_prefix op = List.mem L (fixity op) -let is_infix op = List.mem N (fixity op) -let is_postfix op = List.mem R (fixity op) - -let mk_inf op t1 t2 = - if not (is_infix op) then failwith (op^" not infix"); - Infix(op,t1,t2) - -let mk_post op t = - if not (is_postfix op) then failwith (op^" not postfix"); - Postfix(op,t) - - -(* Pb avec ground_oper: pas de diff entre -1 et -(1) *) -let mk_pre op t = - if not (is_prefix op) then failwith (op^" not prefix"); - if ground_oper op then - match t with - | Int i -> Int (op^i) - | _ -> Prefix(op,t) - else Prefix(op,t) - -(* teste si on peut reduire op suivi d'un op de niveau (n,a) - si la reponse est false, c'est que l'op (n,a) doit se reduire - avant *) -let red_left_op (nl,al) (nr,ar) = - if nl < nr then true - else - if nl = nr then - match al,ar with - | (L|N), L -> true - | R, (R|N) -> false - | R, L -> failwith "conflit d'assoc: ambigu" - | (L|N), (R|N) -> failwith "conflit d'assoc: blocage" - else false - - -type level = int * assoc -type stack = - | PrefixOper of string list - | Term of constr_ast * stack - | Oper of string list * string * constr_ast * stack - -let rec str_ast = function - | Infix(op,t1,t2) -> str_ast t1 ^ " " ^ op ^ " " ^ str_ast t2 - | Postfix(op,t) -> str_ast t ^ " " ^ op - | Prefix(op,t) -> op ^ " " ^ str_ast t - | _ -> "_" - -let rec str_stack = function - | PrefixOper ops -> String.concat " " (List.rev ops) - | Term (t,s) -> str_stack s ^ " (" ^ str_ast t ^ ")" - | Oper(ops,lop,t,s) -> - str_stack (Term(t,s)) ^ " " ^ lop ^ " " ^ - String.concat " " (List.rev ops) - -let pps s = prerr_endline (str_stack s) -let err s stk = failwith (s^": "^str_stack stk) - - -let empty = PrefixOper [] - -let check_fixity_term stk = - match stk with - Term _ -> err "2 termes successifs" stk - | _ -> () - -let shift_term t stk = - check_fixity_term stk; - Term(t,stk) - -let shift_oper op stk = - match stk with - | Oper(ops,lop,t,s) -> Oper(op::ops,lop,t,s) - | Term(t,s) -> Oper([],op,t,s) - | PrefixOper ops -> PrefixOper (op::ops) - -let is_reducible lv stk = - match stk with - | Oper([],iop,_,_) -> red_left_op (level iop) lv - | Oper(op::_,_,_,_) -> red_left_op (level op) lv - | PrefixOper(op::_) -> red_left_op (level op) lv - | _ -> false - -let reduce_head (t,stk) = - match stk with - | Oper([],iop,t1,s) -> - (Infix(iop,t1,t), s) - | Oper(op::ops,lop,t',s) -> - (mk_pre op t, Oper(ops,lop,t',s)) - | PrefixOper(op::ops) -> - (Prefix(op,t), PrefixOper ops) - | _ -> assert false - -let rec reduce_level lv (t,s) = - if is_reducible lv s then reduce_level lv (reduce_head (t, s)) - else (t, s) - -let reduce_post op (t,s) = - let (t',s') = reduce_level (level op) (t,s) in - (mk_post op t', s') - -let reduce_posts stk = - match stk with - Oper(ops,iop,t,s) -> - let pts1 = reduce_post iop (t,s) in - List.fold_right reduce_post ops pts1 - | Term(t,s) -> (t,s) - | PrefixOper _ -> failwith "reduce_posts" - - -let shift_infix op stk = - let (t,s) = reduce_level (level op) (reduce_posts stk) in - Oper([],op,t,s) - -let is_better_infix op stk = - match stk with - | Oper(ops,iop,t,s) -> - is_postfix iop && - List.for_all is_postfix ops && - (not (is_prefix op) || red_left_op (level iop) (level op)) - | Term _ -> false - | _ -> assert false - -let parse_oper op stk = - match stk with - | PrefixOper _ -> - if is_prefix op then shift_oper op stk else failwith "prefix_oper" - | Oper _ -> - if is_infix op then - if is_better_infix op stk then shift_infix op stk - else shift_oper op stk - else if is_prefix op then shift_oper op stk - else if is_postfix op then - let (t,s) = reduce_post op (reduce_posts stk) in - Term(t,s) - else assert false - | Term(t,s) -> - if is_infix op then shift_infix op stk - else if is_postfix op then - let (t2,s2) = reduce_post op (t,s) in Term(t2,s2) - else failwith "infix/postfix" - -let parse_term = shift_term - -let rec close_stack stk = - match stk with - Term(t,PrefixOper []) -> t - | PrefixOper _ -> failwith "expression sans atomes" - | _ -> - let (t,s) = reduce_head (reduce_posts stk) in - close_stack (Term(t,s)) - diff --git a/dev/doc/parsing.dep.ps b/dev/doc/parsing.dep.ps deleted file mode 100644 index 723d8c69..00000000 --- a/dev/doc/parsing.dep.ps +++ /dev/null @@ -1,1115 +0,0 @@ -%!PS-Adobe-2.0 -%%Creator: dot version 2.2 (Wed Jan 19 21:09:25 UTC 2005) -%%For: (herbelin) Hugo Herbelin -%%Title: G -%%Pages: (atend) -%%BoundingBox: 35 35 577 314 -%%EndComments -save -%%BeginProlog -/DotDict 200 dict def -DotDict begin - -/setupLatin1 { -mark -/EncodingVector 256 array def - EncodingVector 0 - -ISOLatin1Encoding 0 255 getinterval putinterval - -EncodingVector - dup 306 /AE - dup 301 /Aacute - dup 302 /Acircumflex - dup 304 /Adieresis - dup 300 /Agrave - dup 305 /Aring - dup 303 /Atilde - dup 307 /Ccedilla - dup 311 /Eacute - dup 312 /Ecircumflex - dup 313 /Edieresis - dup 310 /Egrave - dup 315 /Iacute - dup 316 /Icircumflex - dup 317 /Idieresis - dup 314 /Igrave - dup 334 /Udieresis - dup 335 /Yacute - dup 376 /thorn - dup 337 /germandbls - dup 341 /aacute - dup 342 /acircumflex - dup 344 /adieresis - dup 346 /ae - dup 340 /agrave - dup 345 /aring - dup 347 /ccedilla - dup 351 /eacute - dup 352 /ecircumflex - dup 353 /edieresis - dup 350 /egrave - dup 355 /iacute - dup 356 /icircumflex - dup 357 /idieresis - dup 354 /igrave - dup 360 /dcroat - dup 361 /ntilde - dup 363 /oacute - dup 364 /ocircumflex - dup 366 /odieresis - dup 362 /ograve - dup 365 /otilde - dup 370 /oslash - dup 372 /uacute - dup 373 /ucircumflex - dup 374 /udieresis - dup 371 /ugrave - dup 375 /yacute - dup 377 /ydieresis - -% Set up ISO Latin 1 character encoding -/starnetISO { - dup dup findfont dup length dict begin - { 1 index /FID ne { def }{ pop pop } ifelse - } forall - /Encoding EncodingVector def - currentdict end definefont -} def -/Times-Roman starnetISO def -/Times-Italic starnetISO def -/Times-Bold starnetISO def -/Times-BoldItalic starnetISO def -/Helvetica starnetISO def -/Helvetica-Oblique starnetISO def -/Helvetica-Bold starnetISO def -/Helvetica-BoldOblique starnetISO def -/Courier starnetISO def -/Courier-Oblique starnetISO def -/Courier-Bold starnetISO def -/Courier-BoldOblique starnetISO def -cleartomark -} bind def - -%%BeginResource: procset graphviz 0 0 -/coord-font-family /Times-Roman def -/default-font-family /Times-Roman def -/coordfont coord-font-family findfont 8 scalefont def - -/InvScaleFactor 1.0 def -/set_scale { - dup 1 exch div /InvScaleFactor exch def - dup scale -} bind def - -% styles -/solid { [] 0 setdash } bind def -/dashed { [9 InvScaleFactor mul dup ] 0 setdash } bind def -/dotted { [1 InvScaleFactor mul 6 InvScaleFactor mul] 0 setdash } bind def -/invis {/fill {newpath} def /stroke {newpath} def /show {pop newpath} def} bind def -/bold { 2 setlinewidth } bind def -/filled { } bind def -/unfilled { } bind def -/rounded { } bind def -/diagonals { } bind def - -% hooks for setting color -/nodecolor { sethsbcolor } bind def -/edgecolor { sethsbcolor } bind def -/graphcolor { sethsbcolor } bind def -/nopcolor {pop pop pop} bind def - -/beginpage { % i j npages - /npages exch def - /j exch def - /i exch def - /str 10 string def - npages 1 gt { - gsave - coordfont setfont - 0 0 moveto - (\() show i str cvs show (,) show j str cvs show (\)) show - grestore - } if -} bind def - -/set_font { - findfont exch - scalefont setfont -} def - -% draw aligned label in bounding box aligned to current point -/alignedtext { % width adj text - /text exch def - /adj exch def - /width exch def - gsave - width 0 gt { - text stringwidth pop adj mul 0 rmoveto - } if - [] 0 setdash - text show - grestore -} def - -/boxprim { % xcorner ycorner xsize ysize - 4 2 roll - moveto - 2 copy - exch 0 rlineto - 0 exch rlineto - pop neg 0 rlineto - closepath -} bind def - -/ellipse_path { - /ry exch def - /rx exch def - /y exch def - /x exch def - matrix currentmatrix - newpath - x y translate - rx ry scale - 0 0 1 0 360 arc - setmatrix -} bind def - -/endpage { showpage } bind def -/showpage { } def - -/layercolorseq - [ % layer color sequence - darkest to lightest - [0 0 0] - [.2 .8 .8] - [.4 .8 .8] - [.6 .8 .8] - [.8 .8 .8] - ] -def - -/layerlen layercolorseq length def - -/setlayer {/maxlayer exch def /curlayer exch def - layercolorseq curlayer 1 sub layerlen mod get - aload pop sethsbcolor - /nodecolor {nopcolor} def - /edgecolor {nopcolor} def - /graphcolor {nopcolor} def -} bind def - -/onlayer { curlayer ne {invis} if } def - -/onlayers { - /myupper exch def - /mylower exch def - curlayer mylower lt - curlayer myupper gt - or - {invis} if -} def - -/curlayer 0 def - -%%EndResource -%%EndProlog -%%BeginSetup -14 default-font-family set_font -1 setmiterlimit -% /arrowlength 10 def -% /arrowwidth 5 def - -% make sure pdfmark is harmless for PS-interpreters other than Distiller -/pdfmark where {pop} {userdict /pdfmark /cleartomark load put} ifelse -% make '<<' and '>>' safe on PS Level 1 devices -/languagelevel where {pop languagelevel}{1} ifelse -2 lt { - userdict (<<) cvn ([) cvn load put - userdict (>>) cvn ([) cvn load put -} if - -%%EndSetup -%%Page: 1 1 -%%PageBoundingBox: 36 36 577 314 -%%PageOrientation: Portrait -gsave -35 35 542 279 boxprim clip newpath -36 36 translate -0 0 1 beginpage -0.6027 set_scale -0 0 translate 0 rotate -0.000 0.000 0.000 graphcolor -14.00 /Times-Roman set_font - -% Pcoq -gsave 10 dict begin -557 280 27 18 ellipse_path -stroke -gsave 10 dict begin -543 275 moveto -(Pcoq) -[7.68 6.24 6.96 6.96] -xshow -end grestore -end grestore - -% Extend -gsave 10 dict begin -664 226 33 18 ellipse_path -stroke -gsave 10 dict begin -643 221 moveto -(Extend) -[8.4 6.96 3.84 6.24 6.96 6.96] -xshow -end grestore -end grestore - -% Pcoq -> Extend -newpath 579 269 moveto -593 261 613 252 630 243 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 632 246 moveto -639 238 lineto -629 240 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 632 246 moveto -639 238 lineto -629 240 lineto -closepath -stroke -end grestore - -% Ast -gsave 10 dict begin -764 172 27 18 ellipse_path -stroke -gsave 10 dict begin -753 167 moveto -(Ast) -[10.08 5.28 3.84] -xshow -end grestore -end grestore - -% Extend -> Ast -newpath 688 213 moveto -701 206 719 196 734 188 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 736 191 moveto -743 183 lineto -733 185 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 736 191 moveto -743 183 lineto -733 185 lineto -closepath -stroke -end grestore - -% Lexer -gsave 10 dict begin -764 226 29 18 ellipse_path -stroke -gsave 10 dict begin -747 221 moveto -(Lexer) -[8.4 5.76 6.48 6.24 4.56] -xshow -end grestore -end grestore - -% Extend -> Lexer -newpath 698 226 moveto -706 226 715 226 724 226 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 724 230 moveto -734 226 lineto -724 223 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 724 230 moveto -734 226 lineto -724 223 lineto -closepath -stroke -end grestore - -% Termast -gsave 10 dict begin -557 172 35 18 ellipse_path -stroke -gsave 10 dict begin -534 167 moveto -(Termast) -[7.2 6.24 4.8 10.8 6.24 5.28 3.84] -xshow -end grestore -end grestore - -% Termast -> Ast -newpath 593 172 moveto -630 172 689 172 727 172 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 727 176 moveto -737 172 lineto -727 169 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 727 176 moveto -737 172 lineto -727 169 lineto -closepath -stroke -end grestore - -% Coqast -gsave 10 dict begin -863 172 32 18 ellipse_path -stroke -gsave 10 dict begin -843 167 moveto -(Coqast) -[9.36 6.96 6.96 6.24 5.28 3.84] -xshow -end grestore -end grestore - -% Ast -> Coqast -newpath 791 172 moveto -800 172 810 172 820 172 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 820 176 moveto -830 172 lineto -820 169 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 820 176 moveto -830 172 lineto -820 169 lineto -closepath -stroke -end grestore - -% Tactic_printer -gsave 10 dict begin -53 126 52 18 ellipse_path -stroke -gsave 10 dict begin -13 121 moveto -(Tactic_printer) -[7.44 6.24 6.24 3.84 3.84 6.24 6.96 6.96 4.8 3.84 6.96 3.84 6.24 4.56] -xshow -end grestore -end grestore - -% Pptactic -gsave 10 dict begin -178 126 36 18 ellipse_path -stroke -gsave 10 dict begin -155 121 moveto -(Pptactic) -[7.68 6.96 4.08 6.24 6.24 3.84 3.84 6.24] -xshow -end grestore -end grestore - -% Tactic_printer -> Pptactic -newpath 106 126 moveto -114 126 123 126 132 126 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 132 130 moveto -142 126 lineto -132 123 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 132 130 moveto -142 126 lineto -132 123 lineto -closepath -stroke -end grestore - -% Printer -gsave 10 dict begin -289 72 32 18 ellipse_path -stroke -gsave 10 dict begin -269 67 moveto -(Printer) -[7.68 4.8 3.84 6.96 3.84 6.24 4.56] -xshow -end grestore -end grestore - -% Pptactic -> Printer -newpath 204 113 moveto -219 105 238 96 255 88 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 256 91 moveto -264 84 lineto -253 85 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 256 91 moveto -264 84 lineto -253 85 lineto -closepath -stroke -end grestore - -% Search -gsave 10 dict begin -178 72 32 18 ellipse_path -stroke -gsave 10 dict begin -159 67 moveto -(Search) -[7.68 6.24 6.24 4.56 6 6.96] -xshow -end grestore -end grestore - -% Search -> Printer -newpath 210 72 moveto -221 72 234 72 246 72 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 246 76 moveto -256 72 lineto -246 69 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 246 76 moveto -256 72 lineto -246 69 lineto -closepath -stroke -end grestore - -% Printer -> Termast -newpath 316 62 moveto -355 48 430 30 484 58 curveto -518 77 538 117 548 144 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 545 146 moveto -552 154 lineto -552 143 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 545 146 moveto -552 154 lineto -552 143 lineto -closepath -stroke -end grestore - -% Esyntax -gsave 10 dict begin -557 226 36 18 ellipse_path -stroke -gsave 10 dict begin -533 221 moveto -(Esyntax) -[8.4 5.52 6.96 6.96 4.08 6.24 6.96] -xshow -end grestore -end grestore - -% Printer -> Esyntax -newpath 322 71 moveto -370 70 460 72 484 91 curveto -489 95 516 193 520 197 curveto -527 204 532 203 538 204 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 536 207 moveto -547 208 lineto -539 201 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 536 207 moveto -547 208 lineto -539 201 lineto -closepath -stroke -end grestore - -% Ppconstr -gsave 10 dict begin -424 388 37 18 ellipse_path -stroke -gsave 10 dict begin -399 383 moveto -(Ppconstr) -[7.68 6.96 6.24 6.96 6.96 5.28 3.84 4.56] -xshow -end grestore -end grestore - -% Printer -> Ppconstr -newpath 292 90 moveto -300 147 329 319 364 361 curveto -369 367 375 371 382 375 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 380 378 moveto -391 379 lineto -383 372 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 380 378 moveto -391 379 lineto -383 372 lineto -closepath -stroke -end grestore - -% Esyntax -> Extend -newpath 594 226 moveto -602 226 611 226 620 226 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 620 230 moveto -630 226 lineto -620 223 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 620 230 moveto -630 226 lineto -620 223 lineto -closepath -stroke -end grestore - -% Ppconstr -> Pcoq -newpath 454 377 moveto -464 373 475 368 484 361 curveto -506 345 526 322 540 304 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 543 306 moveto -546 296 lineto -537 302 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 543 306 moveto -546 296 lineto -537 302 lineto -closepath -stroke -end grestore - -% Prettyp -gsave 10 dict begin -178 18 33 18 ellipse_path -stroke -gsave 10 dict begin -158 13 moveto -(Prettyp) -[7.68 4.56 6 3.84 3.84 6.96 6.96] -xshow -end grestore -end grestore - -% Prettyp -> Printer -newpath 203 30 moveto -218 38 238 47 255 55 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 254 58 moveto -264 60 lineto -257 52 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 254 58 moveto -264 60 lineto -257 52 lineto -closepath -stroke -end grestore - -% Printmod -gsave 10 dict begin -289 18 39 18 ellipse_path -stroke -gsave 10 dict begin -263 13 moveto -(Printmod) -[7.68 4.8 3.84 6.96 3.84 10.8 6.96 6.96] -xshow -end grestore -end grestore - -% Prettyp -> Printmod -newpath 211 18 moveto -220 18 230 18 240 18 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 240 22 moveto -250 18 lineto -240 15 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 240 22 moveto -250 18 lineto -240 15 lineto -closepath -stroke -end grestore - -% G_zsyntax -gsave 10 dict begin -424 172 43 18 ellipse_path -stroke -gsave 10 dict begin -393 167 moveto -(G_zsyntax) -[10.08 6.96 6.24 5.52 6.96 6.96 4.08 6.24 6.96] -xshow -end grestore -end grestore - -% G_zsyntax -> Pcoq -newpath 458 183 moveto -467 188 476 193 484 199 curveto -507 218 501 233 520 253 curveto -523 256 526 259 530 261 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 528 264 moveto -538 267 lineto -532 258 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 528 264 moveto -538 267 lineto -532 258 lineto -closepath -stroke -end grestore - -% G_zsyntax -> Termast -newpath 468 172 moveto -482 172 497 172 511 172 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 511 176 moveto -521 172 lineto -511 169 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 511 176 moveto -521 172 lineto -511 169 lineto -closepath -stroke -end grestore - -% G_zsyntax -> Esyntax -newpath 455 185 moveto -474 193 499 203 520 211 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 518 214 moveto -529 215 lineto -521 208 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 518 214 moveto -529 215 lineto -521 208 lineto -closepath -stroke -end grestore - -% G_string_syntax -gsave 10 dict begin -424 280 59 18 ellipse_path -stroke -gsave 10 dict begin -377 275 moveto -(G_string_syntax) -[10.08 6.96 5.28 3.84 4.8 3.84 6.96 6.96 6.96 5.52 6.96 6.96 4.08 6.24 6.96] -xshow -end grestore -end grestore - -% G_string_syntax -> Pcoq -newpath 484 280 moveto -496 280 509 280 520 280 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 520 284 moveto -530 280 lineto -520 277 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 520 284 moveto -530 280 lineto -520 277 lineto -closepath -stroke -end grestore - -% G_string_syntax -> Esyntax -newpath 460 266 moveto -478 258 501 249 520 242 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 521 245 moveto -529 238 lineto -518 239 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 521 245 moveto -529 238 lineto -518 239 lineto -closepath -stroke -end grestore - -% G_rsyntax -gsave 10 dict begin -424 118 42 18 ellipse_path -stroke -gsave 10 dict begin -394 113 moveto -(G_rsyntax) -[10.08 6.96 4.56 5.52 6.96 6.96 4.08 6.24 6.96] -xshow -end grestore -end grestore - -% G_rsyntax -> Pcoq -newpath 459 128 moveto -468 132 477 138 484 145 curveto -518 183 491 213 520 253 curveto -523 256 526 259 529 262 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 527 265 moveto -537 268 lineto -531 259 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 527 265 moveto -537 268 lineto -531 259 lineto -closepath -stroke -end grestore - -% G_rsyntax -> Termast -newpath 455 131 moveto -474 139 499 149 520 157 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 518 160 moveto -529 161 lineto -521 154 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 518 160 moveto -529 161 lineto -521 154 lineto -closepath -stroke -end grestore - -% G_rsyntax -> Esyntax -newpath 457 129 moveto -467 133 476 139 484 145 curveto -507 164 501 179 520 199 curveto -522 201 525 203 527 205 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 525 208 moveto -535 212 lineto -530 203 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 525 208 moveto -535 212 lineto -530 203 lineto -closepath -stroke -end grestore - -% G_natsyntax -gsave 10 dict begin -424 226 48 18 ellipse_path -stroke -gsave 10 dict begin -388 221 moveto -(G_natsyntax) -[10.08 6.96 6.96 6.24 3.84 5.52 6.96 6.96 4.08 6.24 6.96] -xshow -end grestore -end grestore - -% G_natsyntax -> Pcoq -newpath 457 239 moveto -478 248 504 259 525 266 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 523 269 moveto -534 270 lineto -526 263 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 523 269 moveto -534 270 lineto -526 263 lineto -closepath -stroke -end grestore - -% G_natsyntax -> Termast -newpath 457 213 moveto -476 205 500 195 520 187 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 521 190 moveto -529 183 lineto -518 184 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 521 190 moveto -529 183 lineto -518 184 lineto -closepath -stroke -end grestore - -% G_natsyntax -> Esyntax -newpath 473 226 moveto -485 226 498 226 510 226 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 510 230 moveto -520 226 lineto -510 223 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 510 230 moveto -520 226 lineto -510 223 lineto -closepath -stroke -end grestore - -% G_ascii_syntax -gsave 10 dict begin -424 334 56 18 ellipse_path -stroke -gsave 10 dict begin -380 329 moveto -(G_ascii_syntax) -[10.08 6.96 6.24 5.52 6.24 3.84 3.84 6.96 5.52 6.96 6.96 4.08 6.24 6.96] -xshow -end grestore -end grestore - -% G_ascii_syntax -> Pcoq -newpath 459 320 moveto -479 311 504 301 525 293 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 526 296 moveto -534 289 lineto -523 290 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 526 296 moveto -534 289 lineto -523 290 lineto -closepath -stroke -end grestore - -% G_ascii_syntax -> Esyntax -newpath 462 321 moveto -470 317 478 312 484 307 curveto -507 288 501 273 520 253 curveto -522 251 524 249 527 247 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 529 250 moveto -535 241 lineto -525 244 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 529 250 moveto -535 241 lineto -525 244 lineto -closepath -stroke -end grestore - -% Egrammar -gsave 10 dict begin -424 442 43 18 ellipse_path -stroke -gsave 10 dict begin -394 437 moveto -(Egrammar) -[8.4 7.2 4.56 6.24 10.8 10.8 6.24 4.56] -xshow -end grestore -end grestore - -% Egrammar -> Pcoq -newpath 458 431 moveto -467 427 477 422 484 415 curveto -516 385 537 337 548 308 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 551 309 moveto -551 298 lineto -545 307 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 551 309 moveto -551 298 lineto -545 307 lineto -closepath -stroke -end grestore -endpage -showpage -grestore -%%PageTrailer -%%EndPage: 1 -%%Trailer -%%Pages: 1 -end -restore -%%EOF diff --git a/dev/doc/perf-analysis b/dev/doc/perf-analysis new file mode 100644 index 00000000..23259156 --- /dev/null +++ b/dev/doc/perf-analysis @@ -0,0 +1,47 @@ +Performance analysis for V8-0 branch +------------------------------------ + + Dec 29, 2005: new test and use of -vm in Stalmarck + + Dec 27, 2005: contrib Karatsuba added (~ 30s) + +Dec 28, 2005: size decrease + mainly due to Defined moved to Qed in FSets (reduction from 95M to 7Mo) + +Dec 1-14, 2005: benchmarking server down + between the two dates: Godel: -10%, CoRN: -10% + probably due to changes around vm (new informative Cast, + change of equality in named_context_val) + + Oct 6, 2005: contribs IPC and Tait added (~ 22s and ~ 25s) + +Aug 19, 2005: time decrease after application of "Array.length x=0" Xavier's + suggestions for optimisation + (e.g. Nijmegen/QArith: -3%, Nijmegen/CoRN: -7%, Godel: -3%) + + Aug 1, 2005: contrib Kildall added (~ 65s) + +Jul 26-Aug 2, 2005: bench down + +Jul 14-15, 2005: 4 contribs failed including CoRN + +Jul 14, 2005: time increase after activation of "closure optimisation" + (e.g. Nijmegen/QArith: +8%, Nijmegen/CoRN: +3%, Godel: +13%) + + Jul 7, 2005: adding contrib Fermat4 + + Jun 17, 2005: contrib Goodstein extended and moved to CantorOrdinals (~ 30s) + + May 19, 2005: contrib Goodstein and prfx (~ 9s) added + +Apr 21, 2005: strange time decrease + (could it be due to the change of Back and Reset mechanism) + (e.g. Nijmegen/CoRN: -2%, Nijmegen/QARITH: -4%, Godel: -11%) + +Mar 20, 2005: fixed Logic.with_check bug + global time decrease (e.g. Nijmegen/CoRN: -3%, Nijmegen/QARITH: -1.5%) + +Jan 31-Feb 8, 2005: small instability + (e.g. CoRN: ~2015s -> ~1999s -> ~2032s, Godel: ~340s -> ~370s) + + Jan 13, 2005: contrib SumOfTwoSquare added (~ 38s) diff --git a/dev/doc/preamble.tex b/dev/doc/preamble.tex deleted file mode 100644 index 2cd21f02..00000000 --- a/dev/doc/preamble.tex +++ /dev/null @@ -1,8 +0,0 @@ -\documentclass[11pt]{article} -\usepackage[latin1]{inputenc} -\usepackage[T1]{fontenc} -\usepackage{ocamlweb} -\pagestyle{ocamlweb} -\usepackage{fullpage} -\usepackage{epsfig} -\begin{document} diff --git a/dev/doc/pretyping.dep.ps b/dev/doc/pretyping.dep.ps deleted file mode 100644 index 02d1b8b5..00000000 --- a/dev/doc/pretyping.dep.ps +++ /dev/null @@ -1,1259 +0,0 @@ -%!PS-Adobe-2.0 -%%Creator: dot version 2.2 (Wed Jan 19 21:09:25 UTC 2005) -%%For: (herbelin) Hugo Herbelin -%%Title: G -%%Pages: (atend) -%%BoundingBox: 35 35 577 146 -%%EndComments -save -%%BeginProlog -/DotDict 200 dict def -DotDict begin - -/setupLatin1 { -mark -/EncodingVector 256 array def - EncodingVector 0 - -ISOLatin1Encoding 0 255 getinterval putinterval - -EncodingVector - dup 306 /AE - dup 301 /Aacute - dup 302 /Acircumflex - dup 304 /Adieresis - dup 300 /Agrave - dup 305 /Aring - dup 303 /Atilde - dup 307 /Ccedilla - dup 311 /Eacute - dup 312 /Ecircumflex - dup 313 /Edieresis - dup 310 /Egrave - dup 315 /Iacute - dup 316 /Icircumflex - dup 317 /Idieresis - dup 314 /Igrave - dup 334 /Udieresis - dup 335 /Yacute - dup 376 /thorn - dup 337 /germandbls - dup 341 /aacute - dup 342 /acircumflex - dup 344 /adieresis - dup 346 /ae - dup 340 /agrave - dup 345 /aring - dup 347 /ccedilla - dup 351 /eacute - dup 352 /ecircumflex - dup 353 /edieresis - dup 350 /egrave - dup 355 /iacute - dup 356 /icircumflex - dup 357 /idieresis - dup 354 /igrave - dup 360 /dcroat - dup 361 /ntilde - dup 363 /oacute - dup 364 /ocircumflex - dup 366 /odieresis - dup 362 /ograve - dup 365 /otilde - dup 370 /oslash - dup 372 /uacute - dup 373 /ucircumflex - dup 374 /udieresis - dup 371 /ugrave - dup 375 /yacute - dup 377 /ydieresis - -% Set up ISO Latin 1 character encoding -/starnetISO { - dup dup findfont dup length dict begin - { 1 index /FID ne { def }{ pop pop } ifelse - } forall - /Encoding EncodingVector def - currentdict end definefont -} def -/Times-Roman starnetISO def -/Times-Italic starnetISO def -/Times-Bold starnetISO def -/Times-BoldItalic starnetISO def -/Helvetica starnetISO def -/Helvetica-Oblique starnetISO def -/Helvetica-Bold starnetISO def -/Helvetica-BoldOblique starnetISO def -/Courier starnetISO def -/Courier-Oblique starnetISO def -/Courier-Bold starnetISO def -/Courier-BoldOblique starnetISO def -cleartomark -} bind def - -%%BeginResource: procset graphviz 0 0 -/coord-font-family /Times-Roman def -/default-font-family /Times-Roman def -/coordfont coord-font-family findfont 8 scalefont def - -/InvScaleFactor 1.0 def -/set_scale { - dup 1 exch div /InvScaleFactor exch def - dup scale -} bind def - -% styles -/solid { [] 0 setdash } bind def -/dashed { [9 InvScaleFactor mul dup ] 0 setdash } bind def -/dotted { [1 InvScaleFactor mul 6 InvScaleFactor mul] 0 setdash } bind def -/invis {/fill {newpath} def /stroke {newpath} def /show {pop newpath} def} bind def -/bold { 2 setlinewidth } bind def -/filled { } bind def -/unfilled { } bind def -/rounded { } bind def -/diagonals { } bind def - -% hooks for setting color -/nodecolor { sethsbcolor } bind def -/edgecolor { sethsbcolor } bind def -/graphcolor { sethsbcolor } bind def -/nopcolor {pop pop pop} bind def - -/beginpage { % i j npages - /npages exch def - /j exch def - /i exch def - /str 10 string def - npages 1 gt { - gsave - coordfont setfont - 0 0 moveto - (\() show i str cvs show (,) show j str cvs show (\)) show - grestore - } if -} bind def - -/set_font { - findfont exch - scalefont setfont -} def - -% draw aligned label in bounding box aligned to current point -/alignedtext { % width adj text - /text exch def - /adj exch def - /width exch def - gsave - width 0 gt { - text stringwidth pop adj mul 0 rmoveto - } if - [] 0 setdash - text show - grestore -} def - -/boxprim { % xcorner ycorner xsize ysize - 4 2 roll - moveto - 2 copy - exch 0 rlineto - 0 exch rlineto - pop neg 0 rlineto - closepath -} bind def - -/ellipse_path { - /ry exch def - /rx exch def - /y exch def - /x exch def - matrix currentmatrix - newpath - x y translate - rx ry scale - 0 0 1 0 360 arc - setmatrix -} bind def - -/endpage { showpage } bind def -/showpage { } def - -/layercolorseq - [ % layer color sequence - darkest to lightest - [0 0 0] - [.2 .8 .8] - [.4 .8 .8] - [.6 .8 .8] - [.8 .8 .8] - ] -def - -/layerlen layercolorseq length def - -/setlayer {/maxlayer exch def /curlayer exch def - layercolorseq curlayer 1 sub layerlen mod get - aload pop sethsbcolor - /nodecolor {nopcolor} def - /edgecolor {nopcolor} def - /graphcolor {nopcolor} def -} bind def - -/onlayer { curlayer ne {invis} if } def - -/onlayers { - /myupper exch def - /mylower exch def - curlayer mylower lt - curlayer myupper gt - or - {invis} if -} def - -/curlayer 0 def - -%%EndResource -%%EndProlog -%%BeginSetup -14 default-font-family set_font -1 setmiterlimit -% /arrowlength 10 def -% /arrowwidth 5 def - -% make sure pdfmark is harmless for PS-interpreters other than Distiller -/pdfmark where {pop} {userdict /pdfmark /cleartomark load put} ifelse -% make '<<' and '>>' safe on PS Level 1 devices -/languagelevel where {pop languagelevel}{1} ifelse -2 lt { - userdict (<<) cvn ([) cvn load put - userdict (>>) cvn ([) cvn load put -} if - -%%EndSetup -%%Page: 1 1 -%%PageBoundingBox: 36 36 577 146 -%%PageOrientation: Portrait -gsave -35 35 542 111 boxprim clip newpath -36 36 translate -0 0 1 beginpage -0.3600 set_scale -0 0 translate 0 rotate -0.000 0.000 0.000 graphcolor -14.00 /Times-Roman set_font - -% Unification -gsave 10 dict begin -610 118 45 18 ellipse_path -stroke -gsave 10 dict begin -577 113 moveto -(Unification) -[9.6 6.96 3.84 4.8 3.84 6.24 6.24 3.84 3.84 6.96 6.96] -xshow -end grestore -end grestore - -% Evarutil -gsave 10 dict begin -728 72 36 18 ellipse_path -stroke -gsave 10 dict begin -705 67 moveto -(Evarutil) -[8.4 6.72 6.24 4.8 6.96 3.84 3.84 3.84] -xshow -end grestore -end grestore - -% Unification -> Evarutil -newpath 643 105 moveto -657 99 674 93 689 87 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 691 90 moveto -699 83 lineto -688 83 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 691 90 moveto -699 83 lineto -688 83 lineto -closepath -stroke -end grestore - -% Pattern -gsave 10 dict begin -728 210 33 18 ellipse_path -stroke -gsave 10 dict begin -708 205 moveto -(Pattern) -[7.44 6.24 3.84 3.84 6.24 4.8 6.96] -xshow -end grestore -end grestore - -% Unification -> Pattern -newpath 631 134 moveto -650 150 680 173 701 189 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 699 192 moveto -709 195 lineto -703 186 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 699 192 moveto -709 195 lineto -703 186 lineto -closepath -stroke -end grestore - -% Retyping -gsave 10 dict begin -839 118 38 18 ellipse_path -stroke -gsave 10 dict begin -813 113 moveto -(Retyping) -[9.12 6 3.84 6.96 6.96 3.84 6.96 6.96] -xshow -end grestore -end grestore - -% Unification -> Retyping -newpath 656 118 moveto -695 118 750 118 790 118 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 790 122 moveto -800 118 lineto -790 115 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 790 122 moveto -800 118 lineto -790 115 lineto -closepath -stroke -end grestore - -% Typing -gsave 10 dict begin -839 64 32 18 ellipse_path -stroke -gsave 10 dict begin -819 59 moveto -(Typing) -[6.96 6.96 6.96 3.84 6.96 6.96] -xshow -end grestore -end grestore - -% Evarutil -> Typing -newpath 764 69 moveto -775 68 786 67 797 67 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 797 70 moveto -807 66 lineto -797 64 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 797 70 moveto -807 66 lineto -797 64 lineto -closepath -stroke -end grestore - -% Rawterm -gsave 10 dict begin -1109 110 39 18 ellipse_path -stroke -gsave 10 dict begin -1083 105 moveto -(Rawterm) -[9.36 5.76 10.08 3.84 6.24 4.8 10.8] -xshow -end grestore -end grestore - -% Pattern -> Rawterm -newpath 759 216 moveto -816 226 939 239 1024 191 curveto -1049 176 1038 155 1060 138 curveto -1069 131 1077 130 1084 129 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 1085 132 moveto -1094 127 lineto -1084 126 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 1085 132 moveto -1094 127 lineto -1084 126 lineto -closepath -stroke -end grestore - -% Inductiveops -gsave 10 dict begin -1109 164 49 18 ellipse_path -stroke -gsave 10 dict begin -1073 159 moveto -(Inductiveops) -[4.56 6.96 6.96 6.96 6.24 3.84 3.84 6.48 6.24 6.96 6.96 5.52] -xshow -end grestore -end grestore - -% Retyping -> Inductiveops -newpath 878 120 moveto -915 122 974 126 1024 137 curveto -1037 139 1051 144 1064 148 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 1063 151 moveto -1074 151 lineto -1065 145 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 1063 151 moveto -1074 151 lineto -1065 145 lineto -closepath -stroke -end grestore - -% Pretype_errors -gsave 10 dict begin -969 72 54 18 ellipse_path -stroke -gsave 10 dict begin -927 67 moveto -(Pretype_errors) -[7.68 4.56 6 3.84 6.96 6.96 6.24 6.96 6.24 5.04 4.56 6.96 4.56 5.52] -xshow -end grestore -end grestore - -% Typing -> Pretype_errors -newpath 871 66 moveto -881 67 893 68 905 68 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 905 71 moveto -915 69 lineto -905 65 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 905 71 moveto -915 69 lineto -905 65 lineto -closepath -stroke -end grestore - -% Pretype_errors -> Inductiveops -newpath 998 87 moveto -1007 92 1016 98 1024 104 curveto -1042 116 1043 124 1060 137 curveto -1063 139 1067 142 1071 144 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 1070 147 moveto -1080 149 lineto -1073 141 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 1070 147 moveto -1080 149 lineto -1073 141 lineto -closepath -stroke -end grestore - -% Pretype_errors -> Rawterm -newpath 1011 84 moveto -1029 88 1048 94 1065 98 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 1064 101 moveto -1075 101 lineto -1066 95 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 1064 101 moveto -1075 101 lineto -1066 95 lineto -closepath -stroke -end grestore - -% Tacred -gsave 10 dict begin -728 18 32 18 ellipse_path -stroke -gsave 10 dict begin -709 13 moveto -(Tacred) -[7.44 6.24 6.24 4.56 6.24 6.96] -xshow -end grestore -end grestore - -% Tacred -> Retyping -newpath 748 32 moveto -754 36 759 41 764 45 curveto -783 63 782 73 800 91 curveto -802 93 805 95 808 97 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 806 100 moveto -816 103 lineto -810 94 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 806 100 moveto -816 103 lineto -810 94 lineto -closepath -stroke -end grestore - -% Tacred -> Typing -newpath 754 29 moveto -769 35 787 43 803 49 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 802 53 moveto -813 53 lineto -805 46 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 802 53 moveto -813 53 lineto -805 46 lineto -closepath -stroke -end grestore - -% Cbv -gsave 10 dict begin -1246 41 27 18 ellipse_path -stroke -gsave 10 dict begin -1234 36 moveto -(Cbv) -[9.36 6.48 6.96] -xshow -end grestore -end grestore - -% Tacred -> Cbv -newpath 760 19 moveto -852 23 1111 35 1209 40 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 1209 44 moveto -1219 40 lineto -1209 37 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 1209 44 moveto -1219 40 lineto -1209 37 lineto -closepath -stroke -end grestore - -% Evd -gsave 10 dict begin -1361 110 27 18 ellipse_path -stroke -gsave 10 dict begin -1349 105 moveto -(Evd) -[8.4 6.96 6.96] -xshow -end grestore -end grestore - -% Cbv -> Evd -newpath 1266 53 moveto -1284 64 1312 80 1332 93 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 1331 96 moveto -1341 98 lineto -1334 90 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 1331 96 moveto -1341 98 lineto -1334 90 lineto -closepath -stroke -end grestore - -% Reductionops -gsave 10 dict begin -1246 164 51 18 ellipse_path -stroke -gsave 10 dict begin -1207 159 moveto -(Reductionops) -[9.12 6.24 6.96 6.96 6.24 3.84 3.84 6.96 6.96 6.96 6.96 5.52] -xshow -end grestore -end grestore - -% Inductiveops -> Reductionops -newpath 1158 164 moveto -1167 164 1175 164 1184 164 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 1184 168 moveto -1194 164 lineto -1184 161 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 1184 168 moveto -1194 164 lineto -1184 161 lineto -closepath -stroke -end grestore - -% Reductionops -> Evd -newpath 1277 150 moveto -1294 142 1313 133 1330 125 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 1331 128 moveto -1339 121 lineto -1328 122 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 1331 128 moveto -1339 121 lineto -1328 122 lineto -closepath -stroke -end grestore - -% Termops -gsave 10 dict begin -1462 110 37 18 ellipse_path -stroke -gsave 10 dict begin -1437 105 moveto -(Termops) -[7.2 6.24 4.8 10.8 6.96 6.96 5.52] -xshow -end grestore -end grestore - -% Evd -> Termops -newpath 1388 110 moveto -1396 110 1405 110 1414 110 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 1414 114 moveto -1424 110 lineto -1414 107 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 1414 114 moveto -1424 110 lineto -1414 107 lineto -closepath -stroke -end grestore - -% Recordops -gsave 10 dict begin -485 24 43 18 ellipse_path -stroke -gsave 10 dict begin -455 19 moveto -(Recordops) -[9.12 6.24 6.24 6.96 4.32 6.96 6.96 6.96 5.52] -xshow -end grestore -end grestore - -% Classops -gsave 10 dict begin -610 20 38 18 ellipse_path -stroke -gsave 10 dict begin -584 15 moveto -(Classops) -[9.36 3.84 6.24 5.52 5.52 6.96 6.96 5.52] -xshow -end grestore -end grestore - -% Recordops -> Classops -newpath 528 23 moveto -538 22 550 22 561 22 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 561 25 moveto -571 21 lineto -561 19 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 561 25 moveto -571 21 lineto -561 19 lineto -closepath -stroke -end grestore - -% Classops -> Tacred -newpath 649 19 moveto -661 19 674 19 686 19 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 686 23 moveto -696 19 lineto -686 16 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 686 23 moveto -696 19 lineto -686 16 lineto -closepath -stroke -end grestore - -% Rawterm -> Evd -newpath 1148 110 moveto -1196 110 1277 110 1324 110 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 1324 114 moveto -1334 110 lineto -1324 107 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 1324 114 moveto -1334 110 lineto -1324 107 lineto -closepath -stroke -end grestore - -% Pretyping -gsave 10 dict begin -40 183 40 18 ellipse_path -stroke -gsave 10 dict begin -13 178 moveto -(Pretyping) -[7.68 4.56 6 3.84 6.96 6.96 3.84 6.96 6.96] -xshow -end grestore -end grestore - -% Pretyping -> Pattern -newpath 78 189 moveto -121 194 191 202 251 202 curveto -251 202 251 202 485 202 curveto -556 202 636 205 685 208 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 685 212 moveto -695 208 lineto -685 205 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 685 212 moveto -695 208 lineto -685 205 lineto -closepath -stroke -end grestore - -% Cases -gsave 10 dict begin -146 64 30 18 ellipse_path -stroke -gsave 10 dict begin -129 59 moveto -(Cases) -[9.36 6.24 5.52 6.24 5.52] -xshow -end grestore -end grestore - -% Pretyping -> Cases -newpath 53 166 moveto -68 147 93 115 116 91 curveto -118 89 119 88 121 86 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 124 88 moveto -129 79 lineto -119 83 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 124 88 moveto -129 79 lineto -119 83 lineto -closepath -stroke -end grestore - -% Detyping -gsave 10 dict begin -969 164 39 18 ellipse_path -stroke -gsave 10 dict begin -942 159 moveto -(Detyping) -[10.08 6 3.84 6.96 6.96 3.84 6.96 6.96] -xshow -end grestore -end grestore - -% Pretyping -> Detyping -newpath 78 177 moveto -121 172 191 164 251 164 curveto -251 164 251 164 728 164 curveto -794 164 870 164 919 164 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 919 168 moveto -929 164 lineto -919 161 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 919 168 moveto -929 164 lineto -919 161 lineto -closepath -stroke -end grestore - -% Indrec -gsave 10 dict begin -251 271 31 18 ellipse_path -stroke -gsave 10 dict begin -233 266 moveto -(Indrec) -[4.56 6.96 6.96 4.56 6.24 6.24] -xshow -end grestore -end grestore - -% Pretyping -> Indrec -newpath 69 195 moveto -83 202 101 209 116 216 curveto -150 230 188 246 216 257 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 214 260 moveto -225 261 lineto -217 254 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 214 260 moveto -225 261 lineto -217 254 lineto -closepath -stroke -end grestore - -% Coercion -gsave 10 dict begin -251 67 39 18 ellipse_path -stroke -gsave 10 dict begin -225 62 moveto -(Coercion) -[9.36 6.96 6.24 4.56 6.24 3.84 6.96 6.96] -xshow -end grestore -end grestore - -% Cases -> Coercion -newpath 176 65 moveto -184 65 193 66 202 66 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 202 70 moveto -212 66 lineto -202 63 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 202 70 moveto -212 66 lineto -202 63 lineto -closepath -stroke -end grestore - -% Detyping -> Inductiveops -newpath 1009 164 moveto -1022 164 1036 164 1050 164 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 1050 168 moveto -1060 164 lineto -1050 161 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 1050 168 moveto -1060 164 lineto -1050 161 lineto -closepath -stroke -end grestore - -% Detyping -> Rawterm -newpath 999 152 moveto -1020 144 1047 133 1069 125 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 1070 128 moveto -1079 122 lineto -1068 122 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 1070 128 moveto -1079 122 lineto -1068 122 lineto -closepath -stroke -end grestore - -% Indrec -> Inductiveops -newpath 281 276 moveto -325 283 412 294 485 294 curveto -485 294 485 294 839 294 curveto -937 294 1036 225 1082 188 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 1085 190 moveto -1090 181 lineto -1080 185 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 1085 190 moveto -1090 181 lineto -1080 185 lineto -closepath -stroke -end grestore - -% Matching -gsave 10 dict begin -610 248 40 18 ellipse_path -stroke -gsave 10 dict begin -582 243 moveto -(Matching) -[12.48 6.24 3.84 6 6.96 3.84 6.96 6.96] -xshow -end grestore -end grestore - -% Matching -> Pattern -newpath 643 237 moveto -658 232 675 227 689 222 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 690 225 moveto -699 219 lineto -688 219 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 690 225 moveto -699 219 lineto -688 219 lineto -closepath -stroke -end grestore - -% Matching -> Reductionops -newpath 650 250 moveto -696 253 773 256 839 256 curveto -839 256 839 256 969 256 curveto -1059 256 1159 212 1210 184 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 1212 187 moveto -1219 179 lineto -1209 181 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 1212 187 moveto -1219 179 lineto -1209 181 lineto -closepath -stroke -end grestore - -% Evarconv -gsave 10 dict begin -366 67 40 18 ellipse_path -stroke -gsave 10 dict begin -339 62 moveto -(Evarconv) -[8.4 6.72 6.24 4.56 6.24 6.96 6.48 6.96] -xshow -end grestore -end grestore - -% Evarconv -> Evarutil -newpath 406 68 moveto -474 69 610 71 682 72 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 682 76 moveto -692 72 lineto -682 69 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 682 76 moveto -692 72 lineto -682 69 lineto -closepath -stroke -end grestore - -% Evarconv -> Recordops -newpath 397 56 moveto -411 51 428 45 442 39 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 443 42 moveto -452 36 lineto -441 36 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 443 42 moveto -452 36 lineto -441 36 lineto -closepath -stroke -end grestore - -% Coercion -> Evarconv -newpath 290 67 moveto -299 67 307 67 316 67 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 316 71 moveto -326 67 lineto -316 64 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 316 71 moveto -326 67 lineto -316 64 lineto -closepath -stroke -end grestore - -% Clenv -gsave 10 dict begin -146 118 30 18 ellipse_path -stroke -gsave 10 dict begin -129 113 moveto -(Clenv) -[9.36 3.84 6.24 6.48 6.96] -xshow -end grestore -end grestore - -% Clenv -> Unification -newpath 176 118 moveto -252 118 455 118 554 118 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 554 122 moveto -564 118 lineto -554 115 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 554 122 moveto -564 118 lineto -554 115 lineto -closepath -stroke -end grestore - -% Clenv -> Coercion -newpath 170 107 moveto -183 100 200 93 215 85 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 217 88 moveto -224 80 lineto -214 82 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 217 88 moveto -224 80 lineto -214 82 lineto -closepath -stroke -end grestore -endpage -showpage -grestore -%%PageTrailer -%%EndPage: 1 -%%Trailer -%%Pages: 1 -end -restore -%%EOF diff --git a/dev/doc/proofs.dep.ps b/dev/doc/proofs.dep.ps deleted file mode 100644 index 0e78f422..00000000 --- a/dev/doc/proofs.dep.ps +++ /dev/null @@ -1,638 +0,0 @@ -%!PS-Adobe-2.0 -%%Creator: dot version 2.2 (Wed Jan 19 21:09:25 UTC 2005) -%%For: (herbelin) Hugo Herbelin -%%Title: G -%%Pages: (atend) -%%BoundingBox: 35 35 577 136 -%%EndComments -save -%%BeginProlog -/DotDict 200 dict def -DotDict begin - -/setupLatin1 { -mark -/EncodingVector 256 array def - EncodingVector 0 - -ISOLatin1Encoding 0 255 getinterval putinterval - -EncodingVector - dup 306 /AE - dup 301 /Aacute - dup 302 /Acircumflex - dup 304 /Adieresis - dup 300 /Agrave - dup 305 /Aring - dup 303 /Atilde - dup 307 /Ccedilla - dup 311 /Eacute - dup 312 /Ecircumflex - dup 313 /Edieresis - dup 310 /Egrave - dup 315 /Iacute - dup 316 /Icircumflex - dup 317 /Idieresis - dup 314 /Igrave - dup 334 /Udieresis - dup 335 /Yacute - dup 376 /thorn - dup 337 /germandbls - dup 341 /aacute - dup 342 /acircumflex - dup 344 /adieresis - dup 346 /ae - dup 340 /agrave - dup 345 /aring - dup 347 /ccedilla - dup 351 /eacute - dup 352 /ecircumflex - dup 353 /edieresis - dup 350 /egrave - dup 355 /iacute - dup 356 /icircumflex - dup 357 /idieresis - dup 354 /igrave - dup 360 /dcroat - dup 361 /ntilde - dup 363 /oacute - dup 364 /ocircumflex - dup 366 /odieresis - dup 362 /ograve - dup 365 /otilde - dup 370 /oslash - dup 372 /uacute - dup 373 /ucircumflex - dup 374 /udieresis - dup 371 /ugrave - dup 375 /yacute - dup 377 /ydieresis - -% Set up ISO Latin 1 character encoding -/starnetISO { - dup dup findfont dup length dict begin - { 1 index /FID ne { def }{ pop pop } ifelse - } forall - /Encoding EncodingVector def - currentdict end definefont -} def -/Times-Roman starnetISO def -/Times-Italic starnetISO def -/Times-Bold starnetISO def -/Times-BoldItalic starnetISO def -/Helvetica starnetISO def -/Helvetica-Oblique starnetISO def -/Helvetica-Bold starnetISO def -/Helvetica-BoldOblique starnetISO def -/Courier starnetISO def -/Courier-Oblique starnetISO def -/Courier-Bold starnetISO def -/Courier-BoldOblique starnetISO def -cleartomark -} bind def - -%%BeginResource: procset graphviz 0 0 -/coord-font-family /Times-Roman def -/default-font-family /Times-Roman def -/coordfont coord-font-family findfont 8 scalefont def - -/InvScaleFactor 1.0 def -/set_scale { - dup 1 exch div /InvScaleFactor exch def - dup scale -} bind def - -% styles -/solid { [] 0 setdash } bind def -/dashed { [9 InvScaleFactor mul dup ] 0 setdash } bind def -/dotted { [1 InvScaleFactor mul 6 InvScaleFactor mul] 0 setdash } bind def -/invis {/fill {newpath} def /stroke {newpath} def /show {pop newpath} def} bind def -/bold { 2 setlinewidth } bind def -/filled { } bind def -/unfilled { } bind def -/rounded { } bind def -/diagonals { } bind def - -% hooks for setting color -/nodecolor { sethsbcolor } bind def -/edgecolor { sethsbcolor } bind def -/graphcolor { sethsbcolor } bind def -/nopcolor {pop pop pop} bind def - -/beginpage { % i j npages - /npages exch def - /j exch def - /i exch def - /str 10 string def - npages 1 gt { - gsave - coordfont setfont - 0 0 moveto - (\() show i str cvs show (,) show j str cvs show (\)) show - grestore - } if -} bind def - -/set_font { - findfont exch - scalefont setfont -} def - -% draw aligned label in bounding box aligned to current point -/alignedtext { % width adj text - /text exch def - /adj exch def - /width exch def - gsave - width 0 gt { - text stringwidth pop adj mul 0 rmoveto - } if - [] 0 setdash - text show - grestore -} def - -/boxprim { % xcorner ycorner xsize ysize - 4 2 roll - moveto - 2 copy - exch 0 rlineto - 0 exch rlineto - pop neg 0 rlineto - closepath -} bind def - -/ellipse_path { - /ry exch def - /rx exch def - /y exch def - /x exch def - matrix currentmatrix - newpath - x y translate - rx ry scale - 0 0 1 0 360 arc - setmatrix -} bind def - -/endpage { showpage } bind def -/showpage { } def - -/layercolorseq - [ % layer color sequence - darkest to lightest - [0 0 0] - [.2 .8 .8] - [.4 .8 .8] - [.6 .8 .8] - [.8 .8 .8] - ] -def - -/layerlen layercolorseq length def - -/setlayer {/maxlayer exch def /curlayer exch def - layercolorseq curlayer 1 sub layerlen mod get - aload pop sethsbcolor - /nodecolor {nopcolor} def - /edgecolor {nopcolor} def - /graphcolor {nopcolor} def -} bind def - -/onlayer { curlayer ne {invis} if } def - -/onlayers { - /myupper exch def - /mylower exch def - curlayer mylower lt - curlayer myupper gt - or - {invis} if -} def - -/curlayer 0 def - -%%EndResource -%%EndProlog -%%BeginSetup -14 default-font-family set_font -1 setmiterlimit -% /arrowlength 10 def -% /arrowwidth 5 def - -% make sure pdfmark is harmless for PS-interpreters other than Distiller -/pdfmark where {pop} {userdict /pdfmark /cleartomark load put} ifelse -% make '<<' and '>>' safe on PS Level 1 devices -/languagelevel where {pop languagelevel}{1} ifelse -2 lt { - userdict (<<) cvn ([) cvn load put - userdict (>>) cvn ([) cvn load put -} if - -%%EndSetup -%%Page: 1 1 -%%PageBoundingBox: 36 36 577 136 -%%PageOrientation: Portrait -gsave -35 35 542 101 boxprim clip newpath -36 36 translate -0 0 1 beginpage -0.6923 set_scale -0 0 translate 0 rotate -0.000 0.000 0.000 graphcolor -14.00 /Times-Roman set_font - -% Tactic_debug -gsave 10 dict begin -163 72 51 18 ellipse_path -stroke -gsave 10 dict begin -125 67 moveto -(Tactic_debug) -[7.44 6.24 6.24 3.84 3.84 6.24 6.96 6.96 6.24 6.96 6.96 6.96] -xshow -end grestore -end grestore - -% Refiner -gsave 10 dict begin -287 72 34 18 ellipse_path -stroke -gsave 10 dict begin -266 67 moveto -(Refiner) -[9.12 6.24 4.8 3.84 6.96 6.24 4.56] -xshow -end grestore -end grestore - -% Tactic_debug -> Refiner -newpath 214 72 moveto -223 72 233 72 243 72 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 243 76 moveto -253 72 lineto -243 69 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 243 76 moveto -253 72 lineto -243 69 lineto -closepath -stroke -end grestore - -% Logic -gsave 10 dict begin -390 72 30 18 ellipse_path -stroke -gsave 10 dict begin -373 67 moveto -(Logic) -[8.4 6.96 6.96 3.84 6.24] -xshow -end grestore -end grestore - -% Refiner -> Logic -newpath 321 72 moveto -330 72 340 72 350 72 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 350 76 moveto -360 72 lineto -350 69 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 350 76 moveto -360 72 lineto -350 69 lineto -closepath -stroke -end grestore - -% Tacmach -gsave 10 dict begin -163 126 38 18 ellipse_path -stroke -gsave 10 dict begin -137 121 moveto -(Tacmach) -[7.44 6.24 6.24 10.8 6.24 6 6.96] -xshow -end grestore -end grestore - -% Tacmach -> Refiner -newpath 191 114 moveto -209 106 232 96 251 88 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 253 91 moveto -261 84 lineto -250 84 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 253 91 moveto -261 84 lineto -250 84 lineto -closepath -stroke -end grestore - -% Redexpr -gsave 10 dict begin -287 126 36 18 ellipse_path -stroke -gsave 10 dict begin -263 121 moveto -(Redexpr) -[9.12 6.24 6.96 5.76 6.96 6.96 4.56] -xshow -end grestore -end grestore - -% Tacmach -> Redexpr -newpath 202 126 moveto -214 126 227 126 240 126 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 240 130 moveto -250 126 lineto -240 123 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 240 130 moveto -250 126 lineto -240 123 lineto -closepath -stroke -end grestore - -% Proof_trees -gsave 10 dict begin -502 72 45 18 ellipse_path -stroke -gsave 10 dict begin -469 67 moveto -(Proof_trees) -[7.68 4.56 6.96 6.96 4.56 6.96 3.84 4.56 6.24 6.24 5.52] -xshow -end grestore -end grestore - -% Logic -> Proof_trees -newpath 420 72 moveto -428 72 437 72 446 72 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 446 76 moveto -456 72 lineto -446 69 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 446 76 moveto -456 72 lineto -446 69 lineto -closepath -stroke -end grestore - -% Proof_type -gsave 10 dict begin -628 72 44 18 ellipse_path -stroke -gsave 10 dict begin -597 67 moveto -(Proof_type) -[7.68 4.56 6.96 6.96 4.56 6.96 3.84 6.96 6.96 6.24] -xshow -end grestore -end grestore - -% Tacexpr -gsave 10 dict begin -744 72 35 18 ellipse_path -stroke -gsave 10 dict begin -721 67 moveto -(Tacexpr) -[7.44 6.24 6.24 5.76 6.96 6.96 4.56] -xshow -end grestore -end grestore - -% Proof_type -> Tacexpr -newpath 672 72 moveto -680 72 689 72 698 72 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 698 76 moveto -708 72 lineto -698 69 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 698 76 moveto -708 72 lineto -698 69 lineto -closepath -stroke -end grestore - -% Proof_trees -> Proof_type -newpath 548 72 moveto -557 72 565 72 574 72 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 574 76 moveto -584 72 lineto -574 69 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 574 76 moveto -584 72 lineto -574 69 lineto -closepath -stroke -end grestore - -% Pfedit -gsave 10 dict begin -38 112 29 18 ellipse_path -stroke -gsave 10 dict begin -21 107 moveto -(Pfedit) -[7.68 4.08 6.24 6.96 3.84 3.84] -xshow -end grestore -end grestore - -% Pfedit -> Tacmach -newpath 67 115 moveto -81 117 99 118 115 120 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 115 123 moveto -125 122 lineto -116 117 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 115 123 moveto -125 122 lineto -116 117 lineto -closepath -stroke -end grestore - -% Evar_refiner -gsave 10 dict begin -163 18 49 18 ellipse_path -stroke -gsave 10 dict begin -127 13 moveto -(Evar_refiner) -[8.4 6.72 6.24 4.56 6.96 4.56 6.24 4.8 3.84 6.96 6.24 4.56] -xshow -end grestore -end grestore - -% Pfedit -> Evar_refiner -newpath 53 96 moveto -67 82 90 60 112 45 curveto -116 42 120 40 124 37 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 126 40 moveto -133 32 lineto -123 34 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 126 40 moveto -133 32 lineto -123 34 lineto -closepath -stroke -end grestore - -% Evar_refiner -> Refiner -newpath 195 32 moveto -212 40 233 49 251 57 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 249 60 moveto -260 61 lineto -252 54 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 249 60 moveto -260 61 lineto -252 54 lineto -closepath -stroke -end grestore - -% Clenvtac -gsave 10 dict begin -38 45 38 18 ellipse_path -stroke -gsave 10 dict begin -13 40 moveto -(Clenvtac) -[9.36 3.84 6.24 6.48 6.96 4.08 6.24 6.24] -xshow -end grestore -end grestore - -% Clenvtac -> Tacmach -newpath 58 61 moveto -73 72 93 87 112 99 curveto -117 102 123 105 128 108 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 127 111 moveto -137 113 lineto -130 105 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 127 111 moveto -137 113 lineto -130 105 lineto -closepath -stroke -end grestore - -% Clenvtac -> Evar_refiner -newpath 73 37 moveto -85 35 98 32 110 29 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 111 32 moveto -120 27 lineto -110 26 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 111 32 moveto -120 27 lineto -110 26 lineto -closepath -stroke -end grestore -endpage -showpage -grestore -%%PageTrailer -%%EndPage: 1 -%%Trailer -%%Pages: 1 -end -restore -%%EOF diff --git a/dev/doc/style.txt b/dev/doc/style.txt new file mode 100644 index 00000000..2e597dc4 --- /dev/null +++ b/dev/doc/style.txt @@ -0,0 +1,49 @@ + +<< L'uniformité du style est plus importante que le style lui-même. >> +(Kernigan & Pike, The Practice of Programming) + +Mode Emacs +========== + Tuareg, que l'on trouve ici : http://www.prism.uvsq.fr/~acohen/tuareg/ + + avec le réglage suivant : (setq tuareg-in-indent 2) + +Types récursifs et filtrages +============================ + Une barre de séparation y compris sur le premier constructeur + +type t = + | A + | B of machin + +match expr with + | A -> ... + | B x -> ... + + +Conditionnelles +=============== + if condition then + premier-cas + else + deuxieme-cas + + Si effets de bord dans les branches, utilisez begin ... end et non des + parenthèses i.e. + + if condition then begin + instr1; + instr2 + end else begin + instr3; + instr4 + end + + Si la première branche lève une exception, évitez le else i.e. + + if condition then if condition then error "machin"; + error "machin" -----> suite + else + suite + + diff --git a/dev/doc/syntax-v8.tex b/dev/doc/syntax-v8.tex deleted file mode 100644 index 97973df2..00000000 --- a/dev/doc/syntax-v8.tex +++ /dev/null @@ -1,1268 +0,0 @@ - -\documentclass{article} - -\usepackage{verbatim} -\usepackage{amsmath} -\usepackage{amssymb} -\usepackage{array} -\usepackage{fullpage} - -\author{B.~Barras} -\title{Syntax of Coq V8} - -%% Le _ est un caractère normal -\catcode`\_=13 -\let\subscr=_ -\def_{\ifmmode\sb\else\subscr\fi} - -\def\bfbar{\ensuremath{|\hskip -0.22em{}|\hskip -0.24em{}|}} -\def\TERMbar{\bfbar} -\def\TERMbarbar{\bfbar\bfbar} -\def\notv{\text{_}} -\def\infx#1{\notv#1\notv} - - -%% Macros pour les grammaires -\def\GR#1{\text{\large(}#1\text{\large)}} -\def\NT#1{\langle\textit{#1}\rangle} -\def\NTL#1#2{\langle\textit{#1}\rangle_{#2}} -\def\TERM#1{{\bf\textrm{\bf #1}}} -%\def\TERM#1{{\bf\textsf{#1}}} -\def\KWD#1{\TERM{#1}} -\def\ETERM#1{\TERM{#1}} -\def\CHAR#1{\TERM{#1}} - -\def\STAR#1{#1*} -\def\STARGR#1{\GR{#1}*} -\def\PLUS#1{#1+} -\def\PLUSGR#1{\GR{#1}+} -\def\OPT#1{#1?} -\def\OPTGR#1{\GR{#1}?} -%% Tableaux de definition de non-terminaux -\newenvironment{cadre} - {\begin{array}{|c|}\hline\\} - {\\\\\hline\end{array}} -\newenvironment{rulebox} - {$$\begin{cadre}\begin{array}{r@{~}c@{~}l@{}l@{}r}} - {\end{array}\end{cadre}$$} -\def\DEFNT#1{\NT{#1} & ::= &} -\def\EXTNT#1{\NT{#1} & ::= & ... \\&|&} -\def\RNAME#1{(\textsc{#1})} -\def\SEPDEF{\\\\} -\def\nlsep{\\&|&} -\def\nlcont{\\&&} -\newenvironment{rules} - {\begin{center}\begin{rulebox}} - {\end{rulebox}\end{center}} - -\begin{document} - -\maketitle - -\section{Meta notations used in this document} - -Non-terminals are printed between angle brackets (e.g. $\NT{non-terminal}$) and -terminal symbols are printed in bold font (e.g. $\ETERM{terminal}$). Lexemes -are displayed as non-terminals. - -The usual operators on regular expressions: -\begin{center} -\begin{tabular}{l|l} -\hfil notation & \hfil meaning \\ -\hline -$\STAR{regexp}$ & repeat $regexp$ 0 or more times \\ -$\PLUS{regexp}$ & repeat $regexp$ 1 or more times \\ -$\OPT{regexp}$ & $regexp$ is optional \\ -$regexp_1~\mid~regexp_2$ & alternative -\end{tabular} -\end{center} - -Parenthesis are used to group regexps. Beware to distinguish this operator -$\GR{~}$ from the terminals $\ETERM{( )}$, and $\mid$ from terminal -\TERMbar. - -Rules are optionaly annotated in the right margin with: -\begin{itemize} -\item a precedence and associativity (L for left, R for right and N for no associativity), indicating how to solve conflicts; - lower levels are tighter; -\item a rule name. -\end{itemize} -In order to solve some conflicts, a non-terminal may be invoked with a -precedence (notation: $\NTL{entry}{prec}$), meaning that rules with higher -precedence do not apply. - -\section{Lexical conventions} - -Lexical categories are: -\begin{rules} -\DEFNT{ident} - \STARGR{\NT{letter}\mid\CHAR{_}} - \STARGR{\NT{letter}\mid \NT{digit} \mid \CHAR{'} \mid \CHAR{_}} -\SEPDEF -\DEFNT{field} \CHAR{.}\NT{ident} -\SEPDEF -\DEFNT{meta-ident} \CHAR{?}\NT{ident} -\SEPDEF -\DEFNT{num} \PLUS{\NT{digit}} -\SEPDEF -\DEFNT{int} \NT{num} \mid \CHAR{-}\NT{num} -\SEPDEF -\DEFNT{digit} \CHAR{0}-\CHAR{9} -\SEPDEF -\DEFNT{letter} \CHAR{a}-\CHAR{z}\mid\CHAR{A}-\CHAR{Z} - \mid\NT{unicode-letter} - -\SEPDEF -\DEFNT{string} \CHAR{"}~\STARGR{\CHAR{""}\mid\NT{unicode-char-but-"}}~\CHAR{"} -\end{rules} - -Reserved identifiers for the core syntax are: -\begin{quote} -\KWD{as}, -\KWD{cofix}, -\KWD{else}, -\KWD{end}, -\KWD{fix}, -\KWD{for}, -\KWD{forall}, -\KWD{fun}, -\KWD{if}, -\KWD{in}, -\KWD{let}, -\KWD{match}, -\KWD{Prop}, -\KWD{return}, -\KWD{Set}, -\KWD{then}, -\KWD{Type}, -\KWD{with} -\end{quote} - -Symbols used in the core syntax: -$$ \KWD{(} -~~ \KWD{)} -~~ \KWD{\{} -~~ \KWD{\}} -~~ \KWD{:} -~~ \KWD{,} -~~ \Rightarrow -~~ \rightarrow -~~ \KWD{:=} -~~ \KWD{_} -~~ \TERMbar -~~ \KWD{@} -~~ \KWD{\%} -~~ \KWD{.(} -$$ - -Note that \TERM{struct} is not a reserved identifier. - -\section{Syntax of terms} - -\subsection{Core syntax} - -The main entry point of the term grammar is $\NTL{constr}{9}$. When no -conflict can appear, $\NTL{constr}{200}$ is also used as entry point. - -\begin{rules} -\DEFNT{constr} - \NT{binder-constr} &200R~~ &\RNAME{binders} -\nlsep \NT{constr}~\KWD{:}~\NT{constr} &100R &\RNAME{cast} -\nlsep \NT{constr}~\KWD{:}~\NT{binder-constr} &100R &\RNAME{cast'} -\nlsep \NT{constr}~\KWD{$\rightarrow$}~\NT{constr} &80R &\RNAME{arrow} -\nlsep \NT{constr}~\KWD{$\rightarrow$}~\NT{binder-constr} &80R &\RNAME{arrow'} -\nlsep \NT{constr}~\PLUS{\NT{appl-arg}} &10L &\RNAME{apply} -\nlsep \KWD{@}~\NT{reference}~\STAR{\NTL{constr}{9}} &10L &\RNAME{expl-apply} -\nlsep \NT{constr}~\KWD{.(} - ~\NT{reference}~\STAR{\NT{appl-arg}}~\TERM{)} &1L & \RNAME{proj} -\nlsep \NT{constr}~\KWD{.(}~\TERM{@} - ~\NT{reference}~\STAR{\NTL{constr}{9}}~\TERM{)} &1L & \RNAME{expl-proj} -\nlsep \NT{constr} ~ \KWD{\%} ~ \NT{ident} &1L &\RNAME{scope-chg} -\nlsep \NT{atomic-constr} &0 -\nlsep \NT{match-expr} &0 -\nlsep \KWD{(}~\NT{constr}~\KWD{)} &0 -\SEPDEF -\DEFNT{binder-constr} - \KWD{forall}~\NT{binder-list}~\KWD{,}~\NTL{constr}{200} - &&\RNAME{prod} -\nlsep \KWD{fun} ~\NT{binder-list} ~\KWD{$\Rightarrow$}~\NTL{constr}{200} - &&\RNAME{lambda} -\nlsep \NT{fix-expr} -\nlsep \KWD{let}~\NT{ident-with-params} ~\KWD{:=}~\NTL{constr}{200} - ~\KWD{in}~\NTL{constr}{200} &&\RNAME{let} -\nlsep \KWD{let}~\NT{single-fix} ~\KWD{in}~\NTL{constr}{200} - &&\RNAME{rec-let} -\nlsep \KWD{let}~\KWD{(}~\OPT{\NT{let-pattern}}~\KWD{)}~\OPT{\NT{return-type}} - ~\KWD{:=}~\NTL{constr}{200}~\KWD{in}~\NTL{constr}{200} - &&\RNAME{let-case} -\nlsep \KWD{if}~\NT{if-item} - ~\KWD{then}~\NTL{constr}{200}~\KWD{else}~\NTL{constr}{200} - &&\RNAME{if-case} -\SEPDEF -\DEFNT{appl-arg} - \KWD{(}~\NT{ident}~\!\KWD{:=}~\NTL{constr}{200}~\KWD{)} - &&\RNAME{impl-arg} -\nlsep \KWD{(}~\NT{num}~\!\KWD{:=}~\NTL{constr}{200}~\KWD{)} - &&\RNAME{impl-arg} -\nlsep \NTL{constr}{9} -\SEPDEF -\DEFNT{atomic-constr} - \NT{reference} && \RNAME{variables} -\nlsep \NT{sort} && \RNAME{CIC-sort} -\nlsep \NT{num} && \RNAME{number} -\nlsep \KWD{_} && \RNAME{hole} -\nlsep \NT{meta-ident} && \RNAME{meta/evar} -\end{rules} - - - -\begin{rules} -\DEFNT{ident-with-params} - \NT{ident}~\STAR{\NT{binder-let}}~\NT{type-cstr} -\SEPDEF -\DEFNT{binder-list} - \NT{binder}~\STAR{\NT{binder-let}} -\nlsep \PLUS{\NT{name}}~\KWD{:}~\NT{constr} -\SEPDEF -\DEFNT{binder} - \NT{name} &&\RNAME{infer} -\nlsep \KWD{(}~\PLUS{\NT{name}}~\KWD{:}~\NT{constr} - ~\KWD{)} &&\RNAME{binder} -\SEPDEF -\DEFNT{binder-let} - \NT{binder} -\nlsep \KWD{(}~\NT{name}~\NT{type-cstr}~\KWD{:=}~\NT{constr}~\KWD{)} -\SEPDEF -\DEFNT{let-pattern} - \NT{name} -\nlsep \NT{name} ~\KWD{,} ~\NT{let-pattern} -\SEPDEF -\DEFNT{type-cstr} - \OPTGR{\KWD{:}~\NT{constr}} -\SEPDEF -\DEFNT{reference} - \NT{ident} && \RNAME{short-ident} -\nlsep \NT{ident}~\PLUS{\NT{field}} && \RNAME{qualid} -\SEPDEF -\DEFNT{sort} - \KWD{Prop} ~\mid~ \KWD{Set} ~\mid~ \KWD{Type} -\SEPDEF -\DEFNT{name} - \NT{ident} ~\mid~ \KWD{_} -\end{rules} - -\begin{rules} -\DEFNT{fix-expr} - \NT{single-fix} -\nlsep \NT{single-fix}~\PLUSGR{\KWD{with}~\NT{fix-decl}} - ~\KWD{for}~\NT{ident} -\SEPDEF -\DEFNT{single-fix} - \NT{fix-kw}~\NT{fix-decl} -\SEPDEF -\DEFNT{fix-kw} \KWD{fix} ~\mid~ \KWD{cofix} -\SEPDEF -\DEFNT{fix-decl} - \NT{ident}~\STAR{\NT{binder-let}}~\OPT{\NT{annot}}~\NT{type-cstr} - ~\KWD{:=}~\NTL{constr}{200} -\SEPDEF -\DEFNT{annot} - \KWD{\{}~\TERM{struct}~\NT{ident}~\KWD{\}} -\end{rules} - - -\begin{rules} -\DEFNT{match-expr} - \KWD{match}~\NT{match-items}~\OPT{\NT{return-type}}~\KWD{with} - ~\OPT{\TERMbar}~\OPT{\NT{branches}}~\KWD{end} &&\RNAME{match} -\SEPDEF -\DEFNT{match-items} - \NT{match-item} ~\KWD{,} ~\NT{match-items} -\nlsep \NT{match-item} -\SEPDEF -\DEFNT{match-item} - \NTL{constr}{100}~\OPTGR{\KWD{as}~\NT{name}} - ~\OPTGR{\KWD{in}~\NTL{constr}{100}} -\SEPDEF -\DEFNT{return-type} - \KWD{return}~\NTL{constr}{100} -\SEPDEF -\DEFNT{if-item} - \NT{constr}~\OPTGR{\OPTGR{\KWD{as}~\NT{name}}~\NT{return-type}} -\SEPDEF -\DEFNT{branches} - \NT{eqn}~\TERMbar~\NT{branches} -\nlsep \NT{eqn} -\SEPDEF -\DEFNT{eqn} - \NT{pattern} ~\STARGR{\KWD{,}~\NT{pattern}} - ~\KWD{$\Rightarrow$}~\NT{constr} -\SEPDEF -\DEFNT{pattern} - \NT{reference}~\PLUS{\NT{pattern}} &1L~~ & \RNAME{constructor} -\nlsep \NT{pattern}~\KWD{as}~\NT{ident} &1L & \RNAME{alias} -\nlsep \NT{pattern}~\KWD{\%}~\NT{ident} &1L & \RNAME{scope-change} -\nlsep \NT{reference} &0 & \RNAME{pattern-var} -\nlsep \KWD{_} &0 & \RNAME{hole} -\nlsep \NT{num} &0 -\nlsep \KWD{(}~\NT{tuple-pattern}~\KWD{)} -\SEPDEF -\DEFNT{tuple-pattern} - \NT{pattern} -\nlsep \NT{tuple-pattern}~\KWD{,}~\NT{pattern} && \RNAME{pair} -\end{rules} - -\subsection{Notations of the prelude (logic and basic arithmetic)} - -Reserved notations: - -$$ -\begin{array}{l|c} -\text{Symbol} & \text{precedence} \\ -\hline -\infx{,} & 250L \\ -\KWD{IF}~\notv~\KWD{then}~\notv~\KWD{else}~\notv - & 200R \\ -\infx{:} & 100R \\ -\infx{\leftrightarrow} & 95N \\ -\infx{\rightarrow} & 90R \\ -\infx{\vee} & 85R \\ -\infx{\wedge} & 80R \\ -\tilde{}\notv & 75R \\ -\begin{array}[c]{@{}l@{}} - \infx{=}\quad \infx{=}\KWD{$:>$}\notv \quad \infx{=}=\notv - \quad \infx{\neq} \quad \infx{\neq}\KWD{$:>$}\notv \\ - \infx{<}\quad\infx{>} \quad \infx{\leq}\quad\infx{\geq} - \quad \infx{<}<\notv \quad \infx{<}\leq\notv - \quad \infx{\leq}<\notv \quad \infx{\leq}\leq\notv -\end{array} & 70N \\ -\infx{+}\quad\infx{-}\quad -\notv & 50L \\ -\infx{*}\quad\infx{/}\quad /\notv & 40L \\ -\end{array} -$$ - -Existential quantifiers follows the \KWD{forall} notation (with same -precedence 200), but only one quantified variable is allowed. - -\begin{rules} -\EXTNT{binder-constr} - \NT{quantifier-kwd}~\NT{name}~\NT{type-cstr}~\KWD{,}~\NTL{constr}{200} \\ -\SEPDEF -\DEFNT{quantifier-kwd} - \TERM{exists} && \RNAME{ex} -\nlsep \TERM{exists2} && \RNAME{ex2} -\end{rules} - -$$ -\begin{array}{l|c|l} -\text{Symbol} & \text{precedence} \\ -\hline -\notv+\{\notv\} & 50 & \RNAME{sumor} \\ -\{\notv:\notv~|~\notv\} & 0 & \RNAME{sig} \\ -\{\notv:\notv~|~\notv \& \notv \} & 0 & \RNAME{sig2} \\ -\{\notv:\notv~\&~\notv \} & 0 & \RNAME{sigS} \\ -\{\notv:\notv~\&~\notv \& \notv \} & 0 & \RNAME{sigS2} \\ -\{\notv\}+\{\notv\} & 0 & \RNAME{sumbool} \\ -\end{array} -$$ - -%% Strange: nat + {x:nat|x=x} * nat == ( + ) * - -\section{Grammar of tactics} - -\def\tacconstr{\NTL{constr}{9}} -\def\taclconstr{\NTL{constr}{200}} - -Additional symbols are: -$$ \TERM{'} -~~ \KWD{;} -~~ \TERM{()} -~~ \TERMbarbar -~~ \TERM{$\vdash$} -~~ \TERM{[} -~~ \TERM{]} -~~ \TERM{$\leftarrow$} -$$ -Additional reserved keywords are: -$$ \KWD{at} -~~ \TERM{using} -$$ - -\subsection{Basic tactics} - -\begin{rules} -\DEFNT{simple-tactic} - \TERM{intros}~\TERM{until}~\NT{quantified-hyp} -\nlsep \TERM{intros}~\NT{intro-patterns} -\nlsep \TERM{intro}~\OPT{\NT{ident}}~\OPTGR{\TERM{after}~\NT{ident}} -%% -\nlsep \TERM{assumption} -\nlsep \TERM{exact}~\tacconstr -%% -\nlsep \TERM{apply}~\NT{constr-with-bindings} -\nlsep \TERM{elim}~\NT{constr-with-bindings}~\OPT{\NT{eliminator}} -\nlsep \TERM{elimtype}~\tacconstr -\nlsep \TERM{case}~\NT{constr-with-bindings} -\nlsep \TERM{casetype}~\tacconstr -\nlsep \KWD{fix}~\OPT{\NT{ident}}~\NT{num} -\nlsep \KWD{fix}~\NT{ident}~\NT{num}~\KWD{with}~\PLUS{\NT{fix-spec}} -\nlsep \KWD{cofix}~\OPT{\NT{ident}} -\nlsep \KWD{cofix}~\NT{ident}~\PLUS{\NT{fix-spec}} -%% -\nlsep \TERM{cut}~\tacconstr -\nlsep \TERM{assert}~\tacconstr -\nlsep \TERM{assert}~ - \TERM{(}~\NT{ident}~\KWD{:}~\taclconstr~\TERM{)} -\nlsep \TERM{assert}~ - \TERM{(}~\NT{ident}~\KWD{:=}~\taclconstr~\TERM{)} -\nlsep \TERM{pose}~\tacconstr -\nlsep \TERM{pose}~ - \TERM{(}~\NT{ident}~\KWD{:=}~\taclconstr~\TERM{)} -\nlsep \TERM{generalize}~\PLUS{\tacconstr} -\nlsep \TERM{generalize}~\TERM{dependent}~\tacconstr -\nlsep \TERM{set}~\tacconstr~\OPT{\NT{clause}} -\nlsep \TERM{set}~ - \TERM{(}~\NT{ident}~\KWD{:=}~\taclconstr~\TERM{)}~\OPT{\NT{clause}} -\nlsep \TERM{instantiate}~ - \TERM{(}~\NT{num}~\TERM{:=}~\taclconstr~\TERM{)}~\OPT{\NT{clause}} -%% -\nlsep \TERM{specialize}~\OPT{\NT{num}}~\NT{constr-with-bindings} -\nlsep \TERM{lapply}~\tacconstr -%% -\nlsep \TERM{simple}~\TERM{induction}~\NT{quantified-hyp} -\nlsep \TERM{induction}~\NT{induction-arg}~\OPT{\NT{with-names}} - ~\OPT{\NT{eliminator}} -\nlsep \TERM{double}~\TERM{induction}~\NT{quantified-hyp}~\NT{quantified-hyp} -\nlsep \TERM{simple}~\TERM{destruct}~\NT{quantified-hyp} -\nlsep \TERM{destruct}~\NT{induction-arg}~\OPT{\NT{with-names}} - ~\OPT{\NT{eliminator}} -\nlsep \TERM{decompose}~\TERM{record}~\tacconstr -\nlsep \TERM{decompose}~\TERM{sum}~\tacconstr -\nlsep \TERM{decompose}~\TERM{[}~\PLUS{\NT{reference}}~\TERM{]} - ~\tacconstr -%% -\nlsep ... -\end{rules} - -\begin{rules} -\EXTNT{simple-tactic} - \TERM{trivial}~\OPT{\NT{hint-bases}} -\nlsep \TERM{auto}~\OPT{\NT{num}}~\OPT{\NT{hint-bases}} -%% -%%\nlsep \TERM{autotdb}~\OPT{\NT{num}} -%%\nlsep \TERM{cdhyp}~\NT{ident} -%%\nlsep \TERM{dhyp}~\NT{ident} -%%\nlsep \TERM{dconcl} -%%\nlsep \TERM{superauto}~\NT{auto-args} -\nlsep \TERM{auto}~\OPT{\NT{num}}~\TERM{decomp}~\OPT{\NT{num}} -%% -\nlsep \TERM{clear}~\PLUS{\NT{ident}} -\nlsep \TERM{clearbody}~\PLUS{\NT{ident}} -\nlsep \TERM{move}~\NT{ident}~\TERM{after}~\NT{ident} -\nlsep \TERM{rename}~\NT{ident}~\TERM{into}~\NT{ident} -%% -\nlsep \TERM{left}~\OPT{\NT{with-binding-list}} -\nlsep \TERM{right}~\OPT{\NT{with-binding-list}} -\nlsep \TERM{split}~\OPT{\NT{with-binding-list}} -\nlsep \TERM{exists}~\OPT{\NT{binding-list}} -\nlsep \TERM{constructor}~\NT{num}~\OPT{\NT{with-binding-list}} -\nlsep \TERM{constructor}~\OPT{\NT{tactic}} -%% -\nlsep \TERM{reflexivity} -\nlsep \TERM{symmetry}~\OPTGR{\KWD{in}~\NT{ident}} -\nlsep \TERM{transitivity}~\tacconstr -%% -\nlsep \NT{inversion-kwd}~\NT{quantified-hyp}~\OPT{\NT{with-names}}~\OPT{\NT{clause}} -\nlsep \TERM{dependent}~\NT{inversion-kwd}~\NT{quantified-hyp} - ~\OPT{\NT{with-names}}~\OPTGR{\KWD{with}~\tacconstr} -\nlsep \TERM{inversion}~\NT{quantified-hyp}~\TERM{using}~\tacconstr~\OPT{\NT{clause}} -%% -\nlsep \NT{red-expr}~\OPT{\NT{clause}} -\nlsep \TERM{change}~\NT{conversion}~\OPT{\NT{clause}} -\SEPDEF -\DEFNT{red-expr} - \TERM{red} ~\mid~ \TERM{hnf} ~\mid~ \TERM{compute} -\nlsep \TERM{simpl}~\OPT{\NT{pattern-occ}} -\nlsep \TERM{cbv}~\PLUS{\NT{red-flag}} -\nlsep \TERM{lazy}~\PLUS{\NT{red-flag}} -\nlsep \TERM{unfold}~\NT{unfold-occ}~\STARGR{\KWD{,}~\NT{unfold-occ}} -\nlsep \TERM{fold}~\PLUS{\tacconstr} -\nlsep \TERM{pattern}~\NT{pattern-occ}~\STARGR{\KWD{,}~\NT{pattern-occ}} -\SEPDEF -\DEFNT{conversion} - \NT{pattern-occ}~\KWD{with}~\tacconstr -\nlsep \tacconstr -\SEPDEF -\DEFNT{inversion-kwd} - \TERM{inversion} ~\mid~ \TERM{invesion_clear} ~\mid~ - \TERM{simple}~\TERM{inversion} -\end{rules} - -Conflicts exists between integers and constrs. - -\begin{rules} -\DEFNT{quantified-hyp} - \NT{int}~\mid~\NT{ident} -\SEPDEF -\DEFNT{induction-arg} - \NT{int}~\mid~\tacconstr -\SEPDEF -\DEFNT{fix-spec} - \KWD{(}~\NT{ident}~\STAR{\NT{binder}}~\OPT{\NT{annot}} - ~\KWD{:}~\taclconstr~\KWD{)} -\SEPDEF -\DEFNT{intro-patterns} - \STAR{\NT{intro-pattern}} -\SEPDEF -\DEFNT{intro-pattern} - \NT{name} -\nlsep \TERM{[}~\NT{intro-patterns}~\STARGR{\TERMbar~\NT{intro-patterns}} - ~\TERM{]} -\nlsep \KWD{(}~\NT{intro-pattern}~\STARGR{\KWD{,}~\NT{intro-pattern}} - ~\KWD{)} -\SEPDEF -\DEFNT{with-names} -% \KWD{as}~\TERM{[}~\STAR{\NT{ident}}~\STARGR{\TERMbar~\STAR{\NT{ident}}} -% ~\TERM{]} - \KWD{as}~\NT{intro-pattern} -\SEPDEF -\DEFNT{eliminator} - \TERM{using}~\NT{constr-with-bindings} -\SEPDEF -\DEFNT{constr-with-bindings} - % dangling ``with'' of ``fix'' can conflict with ``with'' - \tacconstr~\OPT{\NT{with-binding-list}} -\SEPDEF -\DEFNT{with-binding-list} - \KWD{with}~\NT{binding-list} -\SEPDEF -\DEFNT{binding-list} - \PLUS{\tacconstr} -\nlsep \PLUS{\NT{simple-binding}} -\SEPDEF -\DEFNT{simple-binding} - \KWD{(}~\NT{quantified-hyp}~\KWD{:=}~\taclconstr~\KWD{)} -\SEPDEF -\DEFNT{red-flag} - \TERM{beta} ~\mid~ \TERM{iota} ~\mid~ \TERM{zeta} - ~\mid~ \TERM{delta} ~\mid~ - \TERM{delta}~\OPT{\TERM{-}}~\TERM{[}~\PLUS{\NT{reference}}~\TERM{]} -\SEPDEF -\DEFNT{clause} - \KWD{in}~\TERM{*} -\nlsep \KWD{in}~\TERM{*}~\KWD{$\vdash$}~\OPT{\NT{concl-occ}} -\nlsep \KWD{in}~\OPT{\NT{hyp-ident-list}} ~\KWD{$\vdash$} ~\OPT{\NT{concl-occ}} -\nlsep \KWD{in}~\OPT{\NT{hyp-ident-list}} -\SEPDEF -\DEFNT{hyp-ident-list} - \NT{hyp-ident} -\nlsep \NT{hyp-ident}~\KWD{,}~\NT{hyp-ident-list} -\SEPDEF -\DEFNT{hyp-ident} - \NT{ident} -\nlsep \KWD{(}~\TERM{type}~\TERM{of}~\NT{ident}~\KWD{)} -\nlsep \KWD{(}~\TERM{value}~\TERM{of}~\NT{ident}~\KWD{)} -\SEPDEF -\DEFNT{concl-occ} - \TERM{*} ~\NT{occurrences} -\SEPDEF -\DEFNT{pattern-occ} - \tacconstr ~\NT{occurrences} -\SEPDEF -\DEFNT{unfold-occ} - \NT{reference}~\NT{occurrences} -\SEPDEF -\DEFNT{occurrences} - ~\OPTGR{\KWD{at}~\PLUS{\NT{int}}} -\SEPDEF -\DEFNT{hint-bases} - \KWD{with}~\TERM{*} -\nlsep \KWD{with}~\PLUS{\NT{ident}} -\SEPDEF -\DEFNT{auto-args} - \OPT{\NT{num}}~\OPTGR{\TERM{adding}~\TERM{[}~\PLUS{\NT{reference}} - ~\TERM{]}}~\OPT{\TERM{destructuring}}~\OPTGR{\TERM{using}~\TERM{tdb}} -\end{rules} - -\subsection{Ltac} - -%% Currently, there are conflicts with keyword \KWD{in}: in the following, -%% has the keyword to be associated to \KWD{let} or to tactic \TERM{simpl} ? -%% \begin{center} -%% \texttt{let x := simpl in ...} -%% \end{center} - - -\begin{rules} -\DEFNT{tactic} - \NT{tactic} ~\KWD{;} ~\NT{tactic} &5 &\RNAME{Then} -\nlsep \NT{tactic} ~\KWD{;}~\TERM{[} ~\OPT{\NT{tactic-seq}} ~\TERM{]} - &5 &\RNAME{Then-seq} -%% -\nlsep \TERM{try} ~\NT{tactic} &3R &\RNAME{Try} -\nlsep \TERM{do} ~\NT{int-or-var} ~\NT{tactic} -\nlsep \TERM{repeat} ~\NT{tactic} -\nlsep \TERM{progress} ~\NT{tactic} -\nlsep \TERM{info} ~\NT{tactic} -\nlsep \TERM{abstract}~\NTL{tactic}{2}~\OPTGR{\TERM{using}~\NT{ident}} -%% -\nlsep \NT{tactic} ~\TERMbarbar ~\NT{tactic} &2R &\RNAME{Orelse} -%% -\nlsep \KWD{fun} ~\PLUS{\NT{name}} ~\KWD{$\Rightarrow$} - ~\NT{tactic} &1 &\RNAME{Fun-tac} -\nlsep \KWD{let} ~\NT{let-clauses} ~\KWD{in} ~\NT{tactic} -\nlsep \KWD{let} ~\TERM{rec} ~\NT{rec-clauses} ~\KWD{in} ~\NT{tactic} -\nlsep \KWD{match}~\OPT{\TERM{reverse}}~\TERM{goal}~\KWD{with} - ~\OPT{\TERMbar}~\OPT{\NT{match-goal-rules}} ~\KWD{end} -\nlsep \KWD{match} ~\NT{tactic} ~\KWD{with} - ~\OPT{\TERMbar}~\OPT{\NT{match-rules}} ~\KWD{end} -\nlsep \TERM{first}~\TERM{[} ~\NT{tactic-seq} ~\TERM{]} -\nlsep \TERM{solve}~\TERM{[} ~\NT{tactic-seq} ~\TERM{]} -\nlsep \TERM{idtac} -\nlsep \TERM{fail} ~\OPT{\NT{num}} ~\OPT{\NT{string}} -\nlsep \TERM{constr}~\KWD{:}~\tacconstr -\nlsep \TERM{ipattern}~\KWD{:}~\NT{intro-pattern} -\nlsep \NT{term-ltac} -\nlsep \NT{reference}~\STAR{\NT{tactic-arg}} &&\RNAME{call-tactic} -\nlsep \NT{simple-tactic} -%% -\nlsep \NT{tactic-atom} &0 &\RNAME{atomic} -\nlsep \KWD{(} ~\NT{tactic} ~\KWD{)} -\SEPDEF -\DEFNT{tactic-arg} - \TERM{ltac}~\KWD{:}~\NTL{tactic}{0} -\nlsep \TERM{ipattern}~\KWD{:}~\NT{intro-pattern} -\nlsep \NT{term-ltac} -\nlsep \NT{tactic-atom} -\nlsep \tacconstr -\SEPDEF -\DEFNT{term-ltac} - \TERM{fresh} ~\OPT{\NT{string}} -\nlsep \TERM{context} ~\NT{ident} ~\TERM{[} ~\taclconstr ~\TERM{]} -\nlsep \TERM{eval} ~\NT{red-expr} ~\KWD{in} ~\tacconstr -\nlsep \TERM{type} ~\tacconstr -\SEPDEF -\DEFNT{tactic-atom} - \NT{reference} -\nlsep \TERM{()} -\SEPDEF -\DEFNT{tactic-seq} - \NT{tactic} ~\TERMbar ~\NT{tactic-seq} -\nlsep \NT{tactic} -\end{rules} - - - -\begin{rules} -\DEFNT{let-clauses} - \NT{let-clause} ~\STARGR{\KWD{with}~\NT{let-clause}} -\SEPDEF -\DEFNT{let-clause} - \NT{ident} ~\STAR{\NT{name}} ~\KWD{:=} ~\NT{tactic} -\SEPDEF -\DEFNT{rec-clauses} - \NT{rec-clause} ~\KWD{with} ~\NT{rec-clauses} -\nlsep \NT{rec-clause} -\SEPDEF -\DEFNT{rec-clause} - \NT{ident} ~\PLUS{\NT{name}} ~\KWD{:=} ~\NT{tactic} -\SEPDEF -\DEFNT{match-goal-rules} - \NT{match-goal-rule} -\nlsep \NT{match-goal-rule} ~\TERMbar ~\NT{match-goal-rules} -\SEPDEF -\DEFNT{match-goal-rule} - \NT{match-hyps-list} ~\TERM{$\vdash$} ~\NT{match-pattern} - ~\KWD{$\Rightarrow$} ~\NT{tactic} -\nlsep \KWD{[}~\NT{match-hyps-list} ~\TERM{$\vdash$} ~\NT{match-pattern} - ~\KWD{]}~\KWD{$\Rightarrow$} ~\NT{tactic} -\nlsep \KWD{_} ~\KWD{$\Rightarrow$} ~\NT{tactic} -\SEPDEF -\DEFNT{match-hyps-list} - \NT{match-hyps} ~\KWD{,} ~\NT{match-hyps-list} -\nlsep \NT{match-hyps} -\SEPDEF -\DEFNT{match-hyps} - \NT{name} ~\KWD{:} ~\NT{match-pattern} -\SEPDEF -\DEFNT{match-rules} - \NT{match-rule} -\nlsep \NT{match-rule} ~\TERMbar ~\NT{match-rules} -\SEPDEF -\DEFNT{match-rule} - \NT{match-pattern} ~\KWD{$\Rightarrow$} ~\NT{tactic} -\nlsep \KWD{_} ~\KWD{$\Rightarrow$} ~\NT{tactic} -\SEPDEF -\DEFNT{match-pattern} - \TERM{context}~\OPT{\NT{ident}} - ~\TERM{[} ~\NT{constr-pattern} ~\TERM{]} &&\RNAME{subterm} -\nlsep \NT{constr-pattern} -\SEPDEF -\DEFNT{constr-pattern} - \tacconstr -\end{rules} - -\subsection{Other tactics} - -\begin{rules} -\EXTNT{simple-tactic} - \TERM{rewrite} ~\NT{orient} ~\NT{constr-with-bindings} - ~\OPTGR{\KWD{in}~\NT{ident}} -\nlsep \TERM{replace} ~\tacconstr ~\KWD{with} ~\tacconstr - ~\OPTGR{\KWD{in}~\NT{ident}} -\nlsep \TERM{replace} ~\OPT{\NT{orient}} ~\tacconstr - ~\OPTGR{\KWD{in}~\NT{ident}} -\nlsep \TERM{symplify_eq} ~\OPT{\NT{quantified-hyp}} -\nlsep \TERM{discriminate} ~\OPT{\NT{quantified-hyp}} -\nlsep \TERM{injection} ~\OPT{\NT{quantified-hyp}} -\nlsep \TERM{conditional}~\NT{tactic}~\TERM{rewrite}~\NT{orient} - ~\NT{constr-with-bindings}~\OPTGR{\KWD{in}~\NT{ident}} -\nlsep \TERM{dependent}~\TERM{rewrite}~\NT{orient}~\NT{ident} -\nlsep \TERM{cutrewrite}~\NT{orient}~\tacconstr - ~\OPTGR{\KWD{in}~\NT{ident}} -\nlsep \TERM{absurd} ~\tacconstr -\nlsep \TERM{contradiction} -\nlsep \TERM{autorewrite}~\NT{hint-bases}~\OPTGR{\KWD{using}~\NT{tactic}} -\nlsep \TERM{refine}~\tacconstr -\nlsep \TERM{setoid_replace} ~\tacconstr ~\KWD{with} ~\tacconstr -\nlsep \TERM{setoid_rewrite} ~\NT{orient} ~\tacconstr -\nlsep \TERM{subst} ~\STAR{\NT{ident}} -%% eqdecide.ml4 -\nlsep \TERM{decide}~\TERM{equality} ~\OPTGR{\tacconstr~\tacconstr} -\nlsep \TERM{compare}~\tacconstr~\tacconstr -%% eauto -\nlsep \TERM{eexact}~\tacconstr -\nlsep \TERM{eapply}~\NT{constr-with-bindings} -\nlsep \TERM{prolog}~\TERM{[}~\STAR{\tacconstr}~\TERM{]} - ~\NT{quantified-hyp} -\nlsep \TERM{eauto}~\OPT{\NT{quantified-hyp}}~\OPT{\NT{quantified-hyp}} - ~\NT{hint-bases} -\nlsep \TERM{eautod}~\OPT{\NT{quantified-hyp}}~\OPT{\NT{quantified-hyp}} - ~\NT{hint-bases} -%% tauto -\nlsep \TERM{tauto} -\nlsep \TERM{simplif} -\nlsep \TERM{intuition}~\OPT{\NTL{tactic}{0}} -\nlsep \TERM{linearintuition}~\OPT{\NT{num}} -%% contrib/cc -\nlsep \TERM{cc} -%% contrib/field -\nlsep \TERM{field}~\STAR{\tacconstr} -%% contrib/first-order -\nlsep \TERM{ground}~\OPT{\NTL{tactic}{0}} -\nlsep \TERM{ground}~\OPT{\NTL{tactic}{0}}~\KWD{with}~\PLUS{\NT{reference}} -\nlsep \TERM{ground}~\OPT{\NTL{tactic}{0}}~\KWD{using}~\PLUS{\NT{ident}} -%%\nlsep \TERM{gtauto} -\nlsep \TERM{gintuition}~\OPT{\NTL{tactic}{0}} -%% contrib/fourier -\nlsep \TERM{fourierZ} -%% contrib/funind -\nlsep \TERM{functional}~\TERM{induction}~\tacconstr~\PLUS{\tacconstr} -%% contrib/jprover -\nlsep \TERM{jp}~\OPT{\NT{num}} -%% contrib/omega -\nlsep \TERM{omega} -%% contrib/ring -\nlsep \TERM{quote}~\NT{ident}~\OPTGR{\KWD{[}~\PLUS{\NT{ident}}~\KWD{]}} -\nlsep \TERM{ring}~\STAR{\tacconstr} -%% contrib/romega -\nlsep \TERM{romega} -\SEPDEF -\DEFNT{orient} - \KWD{$\rightarrow$}~\mid~\KWD{$\leftarrow$} -\end{rules} - -\section{Grammar of commands} - -New symbols: -$$ \TERM{.} -~~ \TERM{..} -~~ \TERM{\tt >->} -~~ \TERM{:$>$} -~~ \TERM{$<$:} -$$ - -New keyword: -$$ \KWD{where} -$$ - -\subsection{Classification of commands} - -\begin{rules} -\DEFNT{vernac} - \TERM{Time}~\NT{vernac} &2~~ &\RNAME{Timing} -%% -\nlsep \NT{gallina}~\TERM{.} &1 -\nlsep \NT{command}~\TERM{.} -\nlsep \NT{syntax}~\TERM{.} -\nlsep \TERM{[}~\PLUS{\NT{vernac}}~\TERM{]}~\TERM{.} -%% -\nlsep \OPTGR{\NT{num}~\KWD{:}}~\NT{subgoal-command}~\TERM{.} ~~~&0 -\SEPDEF -\DEFNT{subgoal-command} - \NT{check-command} -\nlsep %\OPT{\TERM{By}}~ - \NT{tactic}~\OPT{\KWD{..}} -\end{rules} - -\subsection{Gallina and extensions} - -\begin{rules} -\DEFNT{gallina} - \NT{thm-token}~\NT{ident}~\STAR{\NT{binder-let}}~\KWD{:}~\NT{constr} -\nlsep \NT{def-token}~\NT{ident}~\NT{def-body} -\nlsep \NT{assum-token}~\NT{assum-list} -\nlsep \NT{finite-token}~\NT{inductive-definition} - ~\STARGR{\KWD{with}~\NT{inductive-definition}} -\nlsep \TERM{Fixpoint}~\NT{fix-decl}~\STARGR{\KWD{with}~\NT{fix-decl}} -\nlsep \TERM{CoFixpoint}~\NT{fix-decl}~\STARGR{\KWD{with}~\NT{fix-decl}} -\nlsep \TERM{Scheme}~\NT{scheme}~\STARGR{\KWD{with}~\NT{scheme}} -%% Extension: record -\nlsep \NT{record-tok}~\OPT{\TERM{$>$}}~\NT{ident}~\STAR{\NT{binder-let}} - ~\KWD{:}~\NT{constr}~\KWD{:=} - ~\OPT{\NT{ident}}~\KWD{\{}~\NT{field-list}~\KWD{\}} -\nlsep \TERM{Ltac}~\NT{ltac-def}~\STARGR{~\TERM{with}~\NT{ltac-def}} -\end{rules} - -\begin{rules} -\DEFNT{thm-token} - \TERM{Theorem} ~\mid~ \TERM{Lemma} ~\mid~ \TERM{Fact} ~\mid~ \TERM{Remark} -\SEPDEF -\DEFNT{def-token} - \TERM{Definition} ~\mid~ \TERM{Let} ~\mid~ - \OPT{\TERM{Local}}~\TERM{SubClass} -\SEPDEF -\DEFNT{assum-token} - \TERM{Hypothesis} ~\mid~ \TERM{Variable} ~\mid~ \TERM{Axiom} ~\mid~ - \TERM{Parameter} -\SEPDEF -\DEFNT{finite-token} - \TERM{Inductive} ~\mid~ \TERM{CoInductive} -\SEPDEF -\DEFNT{record-tok} - \TERM{Record} ~\mid~ \TERM{Structure} -\end{rules} - - -\begin{rules} -\DEFNT{def-body} - \STAR{\NT{binder-let}}~\NT{type-cstr}~\KWD{:=} - ~\OPT{\NT{reduce}}~\NT{constr} -\nlsep \STAR{\NT{binder-let}}~\KWD{:}~\NT{constr} -\SEPDEF -\DEFNT{reduce} - \TERM{Eval}~\NT{red-expr}~\KWD{in} -\SEPDEF -\DEFNT{ltac-def} - \NT{ident}~\STAR{\NT{name}}~\KWD{:=}~\NT{tactic} -\SEPDEF -\DEFNT{rec-definition} - \NT{fix-decl}~\OPT{\NT{decl-notation}} -\SEPDEF -\DEFNT{inductive-definition} - \OPT{\NT{string}}~\NT{ident}~\STAR{\NT{binder-let}}~\KWD{:} - ~\NT{constr}~\KWD{:=} - ~\OPT{\TERMbar}~\OPT{\NT{constructor-list}} - ~\OPT{\NT{decl-notation}} -\SEPDEF -\DEFNT{constructor-list} - \NT{constructor}~\TERMbar~\NT{constructor-list} -\nlsep \NT{constructor} -\SEPDEF -\DEFNT{constructor} - \NT{ident}~\STAR{\NT{binder-let}}\OPTGR{\NT{coerce-kwd}~\NT{constr}} -\SEPDEF -\DEFNT{decl-notation} - \TERM{where}~\NT{string}~\TERM{:=}~\NT{constr} -\SEPDEF -\DEFNT{field-list} - \NT{field}~\KWD{;}~\NT{field-list} -\nlsep \NT{field} -\SEPDEF -\DEFNT{field} - \NT{ident}~\OPTGR{\NT{coerce-kwd}~\NT{constr}} -\nlsep \NT{ident}~\NT{type-cstr-coe}~\KWD{:=}~\NT{constr} -\SEPDEF -\DEFNT{assum-list} - \PLUS{\GR{\KWD{(}~\NT{simple-assum-coe}~\KWD{)}}} -\nlsep \NT{simple-assum-coe} -\SEPDEF -\DEFNT{simple-assum-coe} - \PLUS{\NT{ident}}~\NT{coerce-kwd}~\NT{constr} -\SEPDEF -\DEFNT{coerce-kwd} \TERM{:$>$} ~\mid~ \KWD{:} -\SEPDEF -\DEFNT{type-cstr-coe} \OPTGR{\NT{coerce-kwd}~\NT{constr}} -\SEPDEF -\DEFNT{scheme} - \NT{ident}~\KWD{:=}~\NT{dep-scheme}~\KWD{for}~\NT{reference} - ~\TERM{Sort}~\NT{sort} -\SEPDEF -\DEFNT{dep-scheme} - \TERM{Induction}~\mid~\TERM{Minimality} -\end{rules} - -\subsection{Modules and sections} - -\begin{rules} -\DEFNT{gallina} - \TERM{Module}~\NT{ident}~\STAR{\NT{mbinder}}~\OPT{\NT{of-mod-type}} - ~\OPTGR{\KWD{:=}~\NT{mod-expr}} -\nlsep \TERM{Module}~\KWD{Type}~\NT{ident}~\STAR{\NT{mbinder}} - ~\OPTGR{\KWD{:=}~\NT{mod-type}} -\nlsep \TERM{Declare}~\TERM{Module}~\NT{ident}~\STAR{\NT{mbinder}} - ~\OPT{\NT{of-mod-type}} - ~\OPTGR{\KWD{:=}~\NT{mod-expr}} -\nlsep \TERM{Section}~\NT{ident} -\nlsep \TERM{Chapter}~\NT{ident} -\nlsep \TERM{End}~\NT{ident} -%% -\nlsep \TERM{Require}~\OPT{\NT{export-token}}~\OPT{\NT{specif-token}} - ~\PLUS{\NT{reference}} -\nlsep \TERM{Require}~\OPT{\NT{export-token}}~\OPT{\NT{specif-token}} - ~\NT{string} -\nlsep \TERM{Import}~\PLUS{\NT{reference}} -\nlsep \TERM{Export}~\PLUS{\NT{reference}} -\SEPDEF -\DEFNT{export-token} - \TERM{Import} ~\mid~ \TERM{Export} -\SEPDEF -\DEFNT{specif-token} - \TERM{Implementation} ~\mid~ \TERM{Specification} -\SEPDEF -\DEFNT{mod-expr} - \NT{reference} -\nlsep \NT{mod-expr}~\NT{mod-expr} & L -\nlsep \KWD{(}~\NT{mod-expr}~\KWD{)} -\SEPDEF -\DEFNT{mod-type} - \NT{reference} -\nlsep \NT{mod-type}~\KWD{with}~\NT{with-declaration} -\SEPDEF -\DEFNT{with-declaration} - %on forcera les ( ) - %si exceptionnellemt - %un fixpoint ici - \TERM{Definition}~\NT{ident}~\KWD{:=}~\NTL{constr}{} %{100} -\nlsep \TERM{Module}~\NT{ident}~\KWD{:=}~\NT{reference} -\SEPDEF -\DEFNT{of-mod-type} - \KWD{:}~\NT{mod-type} -\nlsep \TERM{$<$:}~\NT{mod-type} -\SEPDEF -\DEFNT{mbinder} - \KWD{(}~\PLUS{\NT{ident}}~\KWD{:}~\NT{mod-type}~\KWD{)} -\end{rules} - -\begin{rules} -\DEFNT{gallina} - \TERM{Transparent}~\PLUS{\NT{reference}} -\nlsep \TERM{Opaque}~\PLUS{\NT{reference}} -\nlsep \TERM{Canonical}~\TERM{Structure}~\NT{reference}~\OPT{\NT{def-body}} -\nlsep \TERM{Coercion}~\OPT{\TERM{Local}}~\NT{reference}~\NT{def-body} -\nlsep \TERM{Coercion}~\OPT{\TERM{Local}}~\NT{reference}~\KWD{:} - ~\NT{class-rawexpr}~\TERM{$>->$}~\NT{class-rawexpr} -\nlsep \TERM{Identity}~\TERM{Coercion}~\OPT{\TERM{Local}}~\NT{ident}~\KWD{:} - ~\NT{class-rawexpr}~\TERM{$>->$}~\NT{class-rawexpr} -\nlsep \TERM{Implicit}~\TERM{Arguments}~\NT{reference}~\TERM{[}~\STAR{\NT{num}}~\TERM{]} -\nlsep \TERM{Implicit}~\TERM{Arguments}~\NT{reference} -\nlsep \TERM{Implicit}~\KWD{Type}~\PLUS{\NT{ident}}~\KWD{:}~\NT{constr} -\SEPDEF -\DEFNT{command} - \TERM{Comments}~\STAR{\NT{comment}} -\nlsep \TERM{Pwd} -\nlsep \TERM{Cd}~\OPT{\NT{string}} -\nlsep \TERM{Drop} ~\mid~ \TERM{ProtectedLoop} ~\mid~\TERM{Quit} -%% -\nlsep \TERM{Load}~\OPT{\TERM{Verbose}}~\NT{ident} -\nlsep \TERM{Load}~\OPT{\TERM{Verbose}}~\NT{string} -\nlsep \TERM{Declare}~\TERM{ML}~\TERM{Module}~\PLUS{\NT{string}} -\nlsep \TERM{Dump}~\TERM{Universes}~\OPT{\NT{string}} -\nlsep \TERM{Locate}~\NT{locatable} -\nlsep \TERM{Add}~\OPT{\TERM{Rec}}~\TERM{LoadPath}~\NT{string}~\OPT{\NT{as-dirpath}} -\nlsep \TERM{Remove}~\TERM{LoadPath}~\NT{string} -\nlsep \TERM{Add}~\OPT{\TERM{Rec}}~\TERM{ML}~\TERM{Path}~\NT{string} -%% -\nlsep \KWD{Type}~\NT{constr} -\nlsep \TERM{Print}~\NT{printable} -\nlsep \TERM{Print}~\NT{reference} -\nlsep \TERM{Inspect}~\NT{num} -\nlsep \TERM{About}~\NT{reference} -%% -\nlsep \TERM{Search}~\NT{reference}~\OPT{\NT{in-out-modules}} -\nlsep \TERM{SearchPattern}~\NT{constr-pattern}~\OPT{\NT{in-out-modules}} -\nlsep \TERM{SearchRewrite}~\NT{constr-pattern}~\OPT{\NT{in-out-modules}} -\nlsep \TERM{SearchAbout}~\NT{reference}~\OPT{\NT{in-out-modules}} -\nlsep \TERM{SearchAbout}~\TERM{[}~\STAR{\NT{ref-or-string}}~\TERM{]}\OPT{\NT{in-out-modules}} -\nlsep \KWD{Set}~\NT{ident}~\OPT{\NT{opt-value}} -\nlsep \TERM{Unset}~\NT{ident} -\nlsep \KWD{Set}~\NT{ident}~\NT{ident}~\OPT{\NT{opt-value}} -\nlsep \KWD{Set}~\NT{ident}~\NT{ident}~\PLUS{\NT{opt-ref-value}} -\nlsep \TERM{Unset}~\NT{ident}~\NT{ident}~\STAR{\NT{opt-ref-value}} -%% -\nlsep \TERM{Print}~\TERM{Table}~\NT{ident}~\NT{ident} -\nlsep \TERM{Print}~\TERM{Table}~\NT{ident} -\nlsep \TERM{Add}~\NT{ident}~\OPT{\NT{ident}}~\PLUS{\NT{opt-ref-value}} -%% -\nlsep \TERM{Test}~\NT{ident}~\OPT{\NT{ident}}~\STAR{\NT{opt-ref-value}} -%% -\nlsep \TERM{Remove}~\NT{ident}~\OPT{\NT{ident}}~\PLUS{\NT{opt-ref-value}} -\SEPDEF -\DEFNT{check-command} - \TERM{Eval}~\NT{red-expr}~\KWD{in}~\NT{constr} -\nlsep \TERM{Check}~\NT{constr} -\SEPDEF -\DEFNT{ref-or-string} - \NT{reference} -\nlsep \NT{string} -\end{rules} - -\begin{rules} -\DEFNT{printable} - \TERM{Term}~\NT{reference} -\nlsep \TERM{All} -\nlsep \TERM{Section}~\NT{reference} -\nlsep \TERM{Grammar}~\NT{ident} -\nlsep \TERM{LoadPath} -\nlsep \TERM{Module}~\OPT{\KWD{Type}}~\NT{reference} -\nlsep \TERM{Modules} -\nlsep \TERM{ML}~\TERM{Path} -\nlsep \TERM{ML}~\TERM{Modules} -\nlsep \TERM{Graph} -\nlsep \TERM{Classes} -\nlsep \TERM{Coercions} -\nlsep \TERM{Coercion}~\TERM{Paths}~\NT{class-rawexpr}~\NT{class-rawexpr} -\nlsep \TERM{Tables} -% \nlsep \TERM{Proof}~\NT{reference} % Obsolete, useful in V6.3 ?? -\nlsep \TERM{Hint}~\OPT{\NT{reference}} -\nlsep \TERM{Hint}~\TERM{*} -\nlsep \TERM{HintDb}~\NT{ident} -\nlsep \TERM{Scopes} -\nlsep \TERM{Scope}~\NT{ident} -\nlsep \TERM{Visibility}~\OPT{\NT{ident}} -\nlsep \TERM{Implicit}~\NT{reference} -\SEPDEF -\DEFNT{class-rawexpr} - \TERM{Funclass}~\mid~\TERM{Sortclass}~\mid~\NT{reference} -\SEPDEF -\DEFNT{locatable} - \NT{reference} -\nlsep \TERM{File}~\NT{string} -\nlsep \TERM{Library}~\NT{reference} -\nlsep \NT{string} -\SEPDEF -\DEFNT{opt-value} - \NT{ident} ~\mid~ \NT{string} -\SEPDEF -\DEFNT{opt-ref-value} - \NT{reference} ~\mid~ \NT{string} -\SEPDEF -\DEFNT{as-dirpath} - \KWD{as}~\NT{reference} -\SEPDEF -\DEFNT{in-out-modules} - \TERM{inside}~\PLUS{\NT{reference}} -\nlsep \TERM{outside}~\PLUS{\NT{reference}} -\SEPDEF -\DEFNT{comment} - \NT{constr} -\nlsep \NT{string} -\end{rules} - -\subsection{Other commands} - -%% TODO: min/maj pas a jour -\begin{rules} -\EXTNT{command} - \TERM{Debug}~\TERM{On} -\nlsep \TERM{Debug}~\TERM{Off} -%% TODO: vernac -\nlsep \TERM{Add}~\TERM{setoid}~\tacconstr~\tacconstr~\tacconstr -\nlsep \TERM{Add}~\TERM{morphism}~\tacconstr~\KWD{:}~\NT{ident} -\nlsep \TERM{Derive}~\TERM{inversion_clear} - ~\OPT{\NT{num}}~\NT{ident}~\NT{ident} -\nlsep \TERM{Derive}~\TERM{inversion_clear} - ~\NT{ident}~\KWD{with}~\tacconstr~\OPTGR{\TERM{Sort}~\NT{sort}} -\nlsep \TERM{Derive}~\TERM{inversion} - ~\OPT{\NT{num}}~\NT{ident}~\NT{ident} -\nlsep \TERM{Derive}~\TERM{inversion} - ~\NT{ident}~\KWD{with}~\tacconstr~\OPTGR{\TERM{Sort}~\NT{sort}} -\nlsep \TERM{Derive}~\TERM{dependent}~\TERM{inversion_clear} - ~\NT{ident}~\KWD{with}~\tacconstr~\OPTGR{\TERM{Sort}~\NT{sort}} -\nlsep \TERM{Derive}~\TERM{dependent}~\TERM{inversion} - ~\NT{ident}~\KWD{with}~\tacconstr~\OPTGR{\TERM{Sort}~\NT{sort}} -%% Correctness: obsolete ? -%\nlsep Correctness -%\nlsep Global Variable -%% TODO: extraction -\nlsep Extraction ... -%% field -\nlsep \TERM{Add}~\TERM{Field}~\tacconstr~\tacconstr~\tacconstr - ~\tacconstr~\tacconstr~\tacconstr -\nlcont~~~~\tacconstr~\tacconstr~\OPT{\NT{minus-div}} -%% funind -\nlsep \TERM{Functional}~\TERM{Scheme}~\NT{ident}~\KWD{:=} - ~\TERM{Induction}~\KWD{for}~\tacconstr - ~\OPTGR{\KWD{with}~\PLUS{\tacconstr}} -%% ring -\nlsep \TERM{Add}~\TERM{Ring}~\tacconstr~\tacconstr~\tacconstr - ~\tacconstr~\tacconstr~\tacconstr -\nlcont~~~~\tacconstr~\tacconstr~\KWD{[}~\PLUS{\tacconstr}~\KWD{]} -\nlsep \TERM{Add}~\TERM{Semi}~\TERM{Ring}~\tacconstr~\tacconstr~\tacconstr - ~\tacconstr~\tacconstr~\tacconstr -\nlcont~~~~\tacconstr~\KWD{[}~\PLUS{\tacconstr}~\KWD{]} -\nlsep \TERM{Add}~\TERM{Abstract}~\TERM{Ring}~\tacconstr~\tacconstr~\tacconstr - ~\tacconstr~\tacconstr~\tacconstr -\nlcont~~~~\tacconstr~\tacconstr -\nlsep \TERM{Add}~\TERM{Abstract}~\TERM{Semi}~\TERM{Ring}~\tacconstr - ~\tacconstr~\tacconstr~\tacconstr~\tacconstr~\tacconstr -\nlcont~~~~\tacconstr -\nlsep \TERM{Add}~\TERM{Setoid}~\TERM{Ring}~\tacconstr~\tacconstr~\tacconstr - ~\tacconstr~\tacconstr~\tacconstr -\nlcont~~~~\tacconstr~\tacconstr~\tacconstr~\tacconstr~\tacconstr~\tacconstr - ~\tacconstr~\KWD{[}~\PLUS{\tacconstr}~\KWD{]} -\nlsep \TERM{Add}~\TERM{Setoid}~\TERM{Semi}~\TERM{Ring}~\tacconstr~\tacconstr - ~\tacconstr~\tacconstr~\tacconstr~\tacconstr -\nlcont~~~~\tacconstr~\tacconstr~\tacconstr~\tacconstr~\tacconstr - ~\KWD{[}~\PLUS{tacconstr}~\KWD{]} -\SEPDEF -\DEFNT{minus-div} - \KWD{with}~\NT{minus-arg}~\NT{div-arg} -\nlsep \KWD{with}~\NT{div-arg}~\NT{minus-arg} -\SEPDEF -\DEFNT{minus-arg} - \TERM{minus}~\KWD{:=}~\tacconstr -\SEPDEF -\DEFNT{div-arg} - \TERM{div}~\KWD{:=}~\tacconstr -\end{rules} - -\begin{rules} -\EXTNT{command} - \TERM{Write}~\TERM{State}~\NT{ident} -\nlsep \TERM{Write}~\TERM{State}~\NT{string} -\nlsep \TERM{Restore}~\TERM{State}~\NT{ident} -\nlsep \TERM{Restore}~\TERM{State}~\NT{string} -\nlsep \TERM{Reset}~\NT{ident} -\nlsep \TERM{Reset}~\TERM{Initial} -\nlsep \TERM{Back}~\OPT{\NT{num}} -\end{rules} - -\subsection{Proof-editing commands} - -\begin{rules} -\EXTNT{command} - \TERM{Goal}~\NT{constr} -\nlsep \TERM{Proof}~\OPT{\NT{constr}} -\nlsep \TERM{Proof}~\KWD{with}~\NT{tactic} -\nlsep \TERM{Abort}~\OPT{\TERM{All}} -\nlsep \TERM{Abort}~\NT{ident} -\nlsep \TERM{Existential}~\NT{num}~\KWD{:=}~\NT{constr-body} -\nlsep \TERM{Qed} -\nlsep \TERM{Save}~\OPTGR{\NT{thm-token}~\NT{ident}} -\nlsep \TERM{Defined}~\OPT{\NT{ident}} -\nlsep \TERM{Suspend} -\nlsep \TERM{Resume}~\OPT{\NT{ident}} -\nlsep \TERM{Restart} -\nlsep \TERM{Undo}~\OPT{\NT{num}} -\nlsep \TERM{Focus}~\OPT{\NT{num}} -\nlsep \TERM{Unfocus} -\nlsep \TERM{Show}~\OPT{\NT{num}} -\nlsep \TERM{Show}~\TERM{Implicit}~\TERM{Arguments}~\OPT{\NT{num}} -\nlsep \TERM{Show}~\TERM{Node} -\nlsep \TERM{Show}~\TERM{Script} -\nlsep \TERM{Show}~\TERM{Existentials} -\nlsep \TERM{Show}~\TERM{Tree} -\nlsep \TERM{Show}~\TERM{Conjecture} -\nlsep \TERM{Show}~\TERM{Proof} -\nlsep \TERM{Show}~\TERM{Intro} -\nlsep \TERM{Show}~\TERM{Intros} -%% Correctness: obsolete ? -%%\nlsep \TERM{Show}~\TERM{Programs} -\nlsep \TERM{Explain}~\TERM{Proof}~\OPT{\TERM{Tree}}~\STAR{\NT{num}} -%% Go not documented -\nlsep \TERM{Hint}~\OPT{\TERM{Local}}~\NT{hint}~\OPT{\NT{inbases}} -%% PrintConstr not documented -\end{rules} - - -\begin{rules} -\DEFNT{constr-body} - \NT{type-cstr}~\KWD{:=}~\NT{constr} -\SEPDEF -\DEFNT{hint} - \TERM{Resolve}~\PLUS{\NTL{constr}{9}} -\nlsep \TERM{Immediate}~\PLUS{\NTL{constr}{9}} -\nlsep \TERM{Unfold}~\PLUS{\NT{reference}} -\nlsep \TERM{Constructors}~\PLUS{\NT{reference}} -\nlsep \TERM{Extern}~\NT{num}~\NT{constr}~\KWD{$\Rightarrow$}~\NT{tactic} -\nlsep \TERM{Destruct}~\NT{ident}~\KWD{:=}~\NT{num}~\NT{destruct-loc} - ~\NT{constr}~\KWD{$\Rightarrow$}~\NT{tactic} -\nlsep \TERM{Rewrite}~\NT{orient}~\PLUS{\NTL{constr}{9}} - ~\OPTGR{\KWD{using}~\NT{tactic}} -\SEPDEF -\DEFNT{inbases} - \KWD{:}~\PLUS{\NT{ident}} -\SEPDEF -\DEFNT{destruct-loc} - \TERM{Conclusion} -\nlsep \OPT{\TERM{Discardable}}~\TERM{Hypothesis} -\end{rules} - - -\subsection{Syntax extensions} - -\begin{rules} -\DEFNT{syntax} - \TERM{Open}~\TERM{Scope}~\NT{ident} -\nlsep \TERM{Close}~\TERM{Scope}~\NT{ident} -\nlsep \TERM{Delimit}~\TERM{Scope}~\NT{ident}~\KWD{with}~\NT{ident} -\nlsep \TERM{Bind}~\TERM{Scope}~\NT{ident}~\KWD{with}~\PLUS{\NT{class-rawexpr}} -\nlsep \TERM{Arguments}~\TERM{Scope}~\NT{reference} - ~\TERM{[}~\PLUS{\NT{name}}~\TERM{]} -\nlsep \TERM{Infix}~\OPT{\TERM{Local}} %%% ~\NT{prec}~\OPT{\NT{num}} - ~\NT{string}~\KWD{:=}~\NT{reference}~\OPT{\NT{modifiers}} - ~\OPT{\NT{in-scope}} -\nlsep \TERM{Notation}~\OPT{\TERM{Local}}~\NT{string}~\KWD{:=}~\NT{constr} - ~\OPT{\NT{modifiers}}~\OPT{\NT{in-scope}} -\nlsep \TERM{Notation}~\OPT{\TERM{Local}}~\NT{ident}~\KWD{:=}~\NT{constr} - ~\OPT{\KWD{(}\TERM{only~\TERM{parsing}\KWD{)}}} -\nlsep \TERM{Reserved}~\TERM{Notation}~\OPT{\TERM{Local}}~\NT{string} - ~\OPT{\NT{modifiers}} -\nlsep \TERM{Tactic}~\TERM{Notation}~\NT{string}~\STAR{\NT{tac-production}} - ~\KWD{:=}~\NT{tactic} -\SEPDEF -\DEFNT{modifiers} - \KWD{(}~\NT{mod-list}~\KWD{)} -\SEPDEF -\DEFNT{mod-list} - \NT{modifier} -\nlsep \NT{modifier}~\KWD{,}~\NT{mod-list} -\SEPDEF -\DEFNT{modifier} - \NT{ident}~\KWD{at}~\NT{num} -\nlsep \NT{ident}~\STARGR{\KWD{,}~\NT{ident}}~\KWD{at}~\NT{num} -\nlsep \KWD{at}~\TERM{next}~\TERM{level} -\nlsep \KWD{at}~\TERM{level}~\NT{num} -\nlsep \TERM{left}~\TERM{associativity} -\nlsep \TERM{right}~\TERM{associativity} -\nlsep \TERM{no}~\TERM{associativity} -\nlsep \NT{ident}~\NT{syntax-entry} -\nlsep \TERM{only}~\TERM{parsing} -\nlsep \TERM{format}~\NT{string} -\SEPDEF -\DEFNT{in-scope} - \KWD{:}~\NT{ident} -\SEPDEF -\DEFNT{syntax-entry} - \TERM{ident}~\mid~\TERM{global}~\mid~\TERM{bigint} -\SEPDEF -\DEFNT{tac-production} - \NT{string} -\nlsep \NT{ident}~\TERM{(}~\NT{ident}~\TERM{)} -%%% \SEPDEF -%%% \DEFNT{prec} -%%% \TERM{LeftA}~\mid~\TERM{RightA}~\mid~\TERM{NonA} -\end{rules} - -\end{document} diff --git a/dev/doc/syntax.mly b/dev/doc/syntax.mly deleted file mode 100644 index bfc7d5cc..00000000 --- a/dev/doc/syntax.mly +++ /dev/null @@ -1,224 +0,0 @@ -%{ -open Ast -open Parse -%} - -%token META INT IDENT -%token OPER -%token LPAR RPAR BAR COMMA COLON BANG FUN DOT RARROW LET COLONEQ IN IF -%token THEN ELSE EVAL AT FOR PROP SET TYPE WILDCARD FIX -%token COFIX MATCH WITH END AND LBRACE RBRACE STRUCT AS SIMPL PERCENT -%token EOF - -%start main -%type main - -%start constr -%type constr - -%start simple_constr -%type simple_constr - -%% - -main: - constr EOF { $1 } -; - - -paren_constr: - constr COMMA paren_constr { Pair($1,$3) } - | constr { $1 } -; - -constr: - binder_constr { $1 } - | oper_constr { close_stack $1 } -; - -binder_constr: - BANG ne_binders DOT constr { Prod($2, $4) } - | FUN ne_binders type_cstr RARROW constr { Lambda($2,mk_cast $5 $3) } - | LET IDENT binders type_cstr COLONEQ constr IN constr - { Let($2,mk_lambda $3 (mk_cast $6 $4),$8) } - | LET LPAR comma_binders RPAR COLONEQ constr IN constr - { LetCase($3,$6,$8) } - | IF constr THEN constr ELSE constr { IfCase($2,$4,$6) } - | fix_constr { $1 } - | EVAL rfun IN constr { Eval($2,$4) } -; - -comma_binders: - ne_comma_binders { $1 } - | { [] } -; - -ne_comma_binders: - binder COMMA ne_comma_binders { $1 :: $3 } - | binder { [$1] } -; - -rfun: - SIMPL { Simpl } -; - - -/* 2 Conflits shift/reduce */ -oper_constr: - oper_constr oper appl_constr - { parse_term $3 (parse_oper $2 $1) } - | oper_constr oper binder_constr - { parse_term $3 (parse_oper $2 $1) } - | oper_constr oper { parse_oper $2 $1 } - | { empty } - | appl_constr { parse_term $1 empty } -; - -oper: - OPER {$1} - | COLON {":"} -; - -appl_constr: - simple_constr ne_appl_args { Appl($1,$2) } - | AT global simple_constrs { ApplExpl($2,$3) } - | simple_constr { $1 } -; - -appl_arg: - AT INT COLONEQ simple_constr { (Some $2,$4) } - | simple_constr { (None,$1) } -; - -ne_appl_args: - appl_arg { [$1] } - | appl_arg ne_appl_args { $1::$2 } -; - -simple_constr: - atomic_constr { $1 } - | match_constr { $1 } - | LPAR paren_constr RPAR { $2 } - | simple_constr PERCENT IDENT { Scope($3,$1) } -; - -simple_constrs: - simple_constr simple_constrs { $1::$2 } - | { [] } -; - -atomic_constr: - global { Qualid $1 } - | PROP { Prop } - | SET { Set } - | TYPE { Type } - | INT { Int $1 } - | WILDCARD { Hole } - | META { Meta $1 } -; - -global: - IDENT DOT global { $1 :: $3 } - | IDENT { [$1] } -; - -/* Conflit normal */ -fix_constr: - fix_kw fix_decl - { let (id,_,_,_,_ as fx) = $2 in Fixp($1,[fx],id) } - | fix_kw fix_decl fix_decls FOR IDENT { Fixp($1, $2::$3, $5) } -; - -fix_kw: FIX {Fix} | COFIX {CoFix} -; - -fix_decl: - IDENT binders type_cstr annot COLONEQ constr { ($1,$2,$3,$4,$6) } -; - -fix_decls: - AND fix_decl fix_decls { $2::$3 } - | AND fix_decl { [$2] } -; - -annot: - LBRACE STRUCT IDENT RBRACE { Some $3 } - | { None } -; - -match_constr: - MATCH case_items case_type WITH branches END { Match($2,$3,$5) } -; - -case_items: - case_item { [$1] } - | case_item COMMA case_items { $1::$3 } -; - -case_item: - constr pred_pattern { ($1,$2) } -; - -case_type: - RARROW constr { Some $2 } - | { None } -; - -pred_pattern: - AS IDENT COLON constr { (Some $2, Some $4) } - | AS IDENT { (Some $2, None) } - | COLON constr { (None, Some $2) } - | { (None,None) } -; - -branches: - BAR branch_list { $2 } - | branch_list { $1 } - | { [] } -; - -branch_list: - patterns RARROW constr { [$1, $3] } - | patterns RARROW constr BAR branch_list { ($1,$3)::$5 } -; - -patterns: - pattern { [$1] } - | pattern COMMA patterns { $1::$3 } -; - -pattern: - pattern AS IDENT { PatAs($1,$3) } - | pattern COLON constr { PatType($1,$3) } - | IDENT simple_patterns { PatConstr($1,$2) } - | simple_pattern { $1 } -; - -simple_pattern: - IDENT { PatVar $1 } - | LPAR pattern RPAR { $2 } -; - -simple_patterns: - simple_pattern { [$1] } - | simple_pattern simple_patterns { $1::$2 } -; - -binder: - IDENT { ($1,Hole) } - | LPAR IDENT type_cstr RPAR { ($2,$3) } -; - -binders: - ne_binders { $1 } - | { [] } - -ne_binders: - binder { [$1] } - | binder ne_binders { $1::$2 } -; - -type_cstr: - COLON constr { $2 } - | { Hole } -; diff --git a/dev/doc/tactics.dep.ps b/dev/doc/tactics.dep.ps deleted file mode 100644 index f4de22b7..00000000 --- a/dev/doc/tactics.dep.ps +++ /dev/null @@ -1,991 +0,0 @@ -%!PS-Adobe-2.0 -%%Creator: dot version 2.2 (Wed Jan 19 21:09:25 UTC 2005) -%%For: (herbelin) Hugo Herbelin -%%Title: G -%%Pages: (atend) -%%BoundingBox: 35 35 577 165 -%%EndComments -save -%%BeginProlog -/DotDict 200 dict def -DotDict begin - -/setupLatin1 { -mark -/EncodingVector 256 array def - EncodingVector 0 - -ISOLatin1Encoding 0 255 getinterval putinterval - -EncodingVector - dup 306 /AE - dup 301 /Aacute - dup 302 /Acircumflex - dup 304 /Adieresis - dup 300 /Agrave - dup 305 /Aring - dup 303 /Atilde - dup 307 /Ccedilla - dup 311 /Eacute - dup 312 /Ecircumflex - dup 313 /Edieresis - dup 310 /Egrave - dup 315 /Iacute - dup 316 /Icircumflex - dup 317 /Idieresis - dup 314 /Igrave - dup 334 /Udieresis - dup 335 /Yacute - dup 376 /thorn - dup 337 /germandbls - dup 341 /aacute - dup 342 /acircumflex - dup 344 /adieresis - dup 346 /ae - dup 340 /agrave - dup 345 /aring - dup 347 /ccedilla - dup 351 /eacute - dup 352 /ecircumflex - dup 353 /edieresis - dup 350 /egrave - dup 355 /iacute - dup 356 /icircumflex - dup 357 /idieresis - dup 354 /igrave - dup 360 /dcroat - dup 361 /ntilde - dup 363 /oacute - dup 364 /ocircumflex - dup 366 /odieresis - dup 362 /ograve - dup 365 /otilde - dup 370 /oslash - dup 372 /uacute - dup 373 /ucircumflex - dup 374 /udieresis - dup 371 /ugrave - dup 375 /yacute - dup 377 /ydieresis - -% Set up ISO Latin 1 character encoding -/starnetISO { - dup dup findfont dup length dict begin - { 1 index /FID ne { def }{ pop pop } ifelse - } forall - /Encoding EncodingVector def - currentdict end definefont -} def -/Times-Roman starnetISO def -/Times-Italic starnetISO def -/Times-Bold starnetISO def -/Times-BoldItalic starnetISO def -/Helvetica starnetISO def -/Helvetica-Oblique starnetISO def -/Helvetica-Bold starnetISO def -/Helvetica-BoldOblique starnetISO def -/Courier starnetISO def -/Courier-Oblique starnetISO def -/Courier-Bold starnetISO def -/Courier-BoldOblique starnetISO def -cleartomark -} bind def - -%%BeginResource: procset graphviz 0 0 -/coord-font-family /Times-Roman def -/default-font-family /Times-Roman def -/coordfont coord-font-family findfont 8 scalefont def - -/InvScaleFactor 1.0 def -/set_scale { - dup 1 exch div /InvScaleFactor exch def - dup scale -} bind def - -% styles -/solid { [] 0 setdash } bind def -/dashed { [9 InvScaleFactor mul dup ] 0 setdash } bind def -/dotted { [1 InvScaleFactor mul 6 InvScaleFactor mul] 0 setdash } bind def -/invis {/fill {newpath} def /stroke {newpath} def /show {pop newpath} def} bind def -/bold { 2 setlinewidth } bind def -/filled { } bind def -/unfilled { } bind def -/rounded { } bind def -/diagonals { } bind def - -% hooks for setting color -/nodecolor { sethsbcolor } bind def -/edgecolor { sethsbcolor } bind def -/graphcolor { sethsbcolor } bind def -/nopcolor {pop pop pop} bind def - -/beginpage { % i j npages - /npages exch def - /j exch def - /i exch def - /str 10 string def - npages 1 gt { - gsave - coordfont setfont - 0 0 moveto - (\() show i str cvs show (,) show j str cvs show (\)) show - grestore - } if -} bind def - -/set_font { - findfont exch - scalefont setfont -} def - -% draw aligned label in bounding box aligned to current point -/alignedtext { % width adj text - /text exch def - /adj exch def - /width exch def - gsave - width 0 gt { - text stringwidth pop adj mul 0 rmoveto - } if - [] 0 setdash - text show - grestore -} def - -/boxprim { % xcorner ycorner xsize ysize - 4 2 roll - moveto - 2 copy - exch 0 rlineto - 0 exch rlineto - pop neg 0 rlineto - closepath -} bind def - -/ellipse_path { - /ry exch def - /rx exch def - /y exch def - /x exch def - matrix currentmatrix - newpath - x y translate - rx ry scale - 0 0 1 0 360 arc - setmatrix -} bind def - -/endpage { showpage } bind def -/showpage { } def - -/layercolorseq - [ % layer color sequence - darkest to lightest - [0 0 0] - [.2 .8 .8] - [.4 .8 .8] - [.6 .8 .8] - [.8 .8 .8] - ] -def - -/layerlen layercolorseq length def - -/setlayer {/maxlayer exch def /curlayer exch def - layercolorseq curlayer 1 sub layerlen mod get - aload pop sethsbcolor - /nodecolor {nopcolor} def - /edgecolor {nopcolor} def - /graphcolor {nopcolor} def -} bind def - -/onlayer { curlayer ne {invis} if } def - -/onlayers { - /myupper exch def - /mylower exch def - curlayer mylower lt - curlayer myupper gt - or - {invis} if -} def - -/curlayer 0 def - -%%EndResource -%%EndProlog -%%BeginSetup -14 default-font-family set_font -1 setmiterlimit -% /arrowlength 10 def -% /arrowwidth 5 def - -% make sure pdfmark is harmless for PS-interpreters other than Distiller -/pdfmark where {pop} {userdict /pdfmark /cleartomark load put} ifelse -% make '<<' and '>>' safe on PS Level 1 devices -/languagelevel where {pop languagelevel}{1} ifelse -2 lt { - userdict (<<) cvn ([) cvn load put - userdict (>>) cvn ([) cvn load put -} if - -%%EndSetup -%%Page: 1 1 -%%PageBoundingBox: 36 36 577 165 -%%PageOrientation: Portrait -gsave -35 35 542 130 boxprim clip newpath -36 36 translate -0 0 1 beginpage -0.4696 set_scale -0 0 translate 0 rotate -0.000 0.000 0.000 graphcolor -14.00 /Times-Roman set_font - -% Extraargs -gsave 10 dict begin -483 110 40 18 ellipse_path -stroke -gsave 10 dict begin -455 105 moveto -(Extraargs) -[8.4 6.96 3.84 4.56 6.24 6.24 4.32 6.96 5.52] -xshow -end grestore -end grestore - -% Setoid_replace -gsave 10 dict begin -615 64 54 18 ellipse_path -stroke -gsave 10 dict begin -573 59 moveto -(Setoid_replace) -[7.68 6 3.84 6.96 3.84 6.96 6.96 4.56 6.24 6.96 3.84 6.24 6.24 6.24] -xshow -end grestore -end grestore - -% Extraargs -> Setoid_replace -newpath 515 99 moveto -531 93 550 87 567 81 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 569 84 moveto -577 77 lineto -566 77 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 569 84 moveto -577 77 lineto -566 77 lineto -closepath -stroke -end grestore - -% Tactics -gsave 10 dict begin -884 110 33 18 ellipse_path -stroke -gsave 10 dict begin -864 105 moveto -(Tactics) -[7.44 6.24 6.24 3.84 3.84 6.24 5.52] -xshow -end grestore -end grestore - -% Setoid_replace -> Tactics -newpath 669 66 moveto -709 68 764 72 810 83 curveto -823 85 837 90 848 94 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 847 98 moveto -858 98 lineto -850 91 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 847 98 moveto -858 98 lineto -850 91 lineto -closepath -stroke -end grestore - -% Termdn -gsave 10 dict begin -998 256 35 18 ellipse_path -stroke -gsave 10 dict begin -976 251 moveto -(Termdn) -[7.2 6.24 4.8 10.8 6.96 6.96] -xshow -end grestore -end grestore - -% Dn -gsave 10 dict begin -1112 256 27 18 ellipse_path -stroke -gsave 10 dict begin -1102 251 moveto -(Dn) -[10.08 6.96] -xshow -end grestore -end grestore - -% Termdn -> Dn -newpath 1033 256 moveto -1047 256 1061 256 1075 256 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 1075 260 moveto -1085 256 lineto -1075 253 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 1075 260 moveto -1085 256 lineto -1075 253 lineto -closepath -stroke -end grestore - -% Hipattern -gsave 10 dict begin -998 110 40 18 ellipse_path -stroke -gsave 10 dict begin -971 105 moveto -(Hipattern) -[10.08 3.84 6.96 6.24 3.84 3.84 6.24 4.8 6.96] -xshow -end grestore -end grestore - -% Tactics -> Hipattern -newpath 917 110 moveto -927 110 938 110 948 110 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 948 114 moveto -958 110 lineto -948 107 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 948 114 moveto -958 110 lineto -948 107 lineto -closepath -stroke -end grestore - -% Tacticals -gsave 10 dict begin -1112 110 38 18 ellipse_path -stroke -gsave 10 dict begin -1087 105 moveto -(Tacticals) -[7.44 6.24 6.24 3.84 3.84 6.24 6.24 3.84 5.52] -xshow -end grestore -end grestore - -% Hipattern -> Tacticals -newpath 1038 110 moveto -1047 110 1055 110 1064 110 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 1064 114 moveto -1074 110 lineto -1064 107 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 1064 114 moveto -1074 110 lineto -1064 107 lineto -closepath -stroke -end grestore - -% Tacinterp -gsave 10 dict begin -170 191 39 18 ellipse_path -stroke -gsave 10 dict begin -143 186 moveto -(Tacinterp) -[7.44 6.24 6.24 3.84 6.96 3.84 6.24 4.8 6.96] -xshow -end grestore -end grestore - -% Auto -gsave 10 dict begin -483 218 27 18 ellipse_path -stroke -gsave 10 dict begin -468 213 moveto -(Auto) -[9.6 6.96 3.84 6.96] -xshow -end grestore -end grestore - -% Tacinterp -> Auto -newpath 209 194 moveto -269 200 386 210 445 215 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 445 218 moveto -455 216 lineto -445 212 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 445 218 moveto -455 216 lineto -445 212 lineto -closepath -stroke -end grestore - -% Leminv -gsave 10 dict begin -281 166 35 18 ellipse_path -stroke -gsave 10 dict begin -259 161 moveto -(Leminv) -[8.4 6.24 10.8 3.84 6.48 6.96] -xshow -end grestore -end grestore - -% Tacinterp -> Leminv -newpath 205 183 moveto -216 181 228 178 239 175 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 240 178 moveto -249 173 lineto -239 172 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 240 178 moveto -249 173 lineto -239 172 lineto -closepath -stroke -end grestore - -% Hiddentac -gsave 10 dict begin -615 164 42 18 ellipse_path -stroke -gsave 10 dict begin -585 159 moveto -(Hiddentac) -[10.08 3.84 6.96 6.96 6.24 6.96 4.08 6.24 6.24] -xshow -end grestore -end grestore - -% Auto -> Hiddentac -newpath 507 208 moveto -526 200 553 189 574 181 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 576 184 moveto -584 177 lineto -573 177 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 576 184 moveto -584 177 lineto -573 177 lineto -closepath -stroke -end grestore - -% Dhyp -gsave 10 dict begin -615 218 29 18 ellipse_path -stroke -gsave 10 dict begin -599 213 moveto -(Dhyp) -[10.08 6.48 6.96 6.96] -xshow -end grestore -end grestore - -% Auto -> Dhyp -newpath 511 218 moveto -530 218 555 218 576 218 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 576 222 moveto -586 218 lineto -576 215 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 576 222 moveto -586 218 lineto -576 215 lineto -closepath -stroke -end grestore - -% Inv -gsave 10 dict begin -379 164 27 18 ellipse_path -stroke -gsave 10 dict begin -369 159 moveto -(Inv) -[4.56 6.48 6.96] -xshow -end grestore -end grestore - -% Leminv -> Inv -newpath 316 165 moveto -324 165 333 165 342 165 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 342 169 moveto -352 165 lineto -342 162 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 342 169 moveto -352 165 lineto -342 162 lineto -closepath -stroke -end grestore - -% Refine -gsave 10 dict begin -758 110 32 18 ellipse_path -stroke -gsave 10 dict begin -739 105 moveto -(Refine) -[9.12 6.24 4.8 3.84 6.96 6.24] -xshow -end grestore -end grestore - -% Refine -> Tactics -newpath 790 110 moveto -805 110 824 110 841 110 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 841 114 moveto -851 110 lineto -841 107 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 841 114 moveto -851 110 lineto -841 107 lineto -closepath -stroke -end grestore - -% Nbtermdn -gsave 10 dict begin -758 256 42 18 ellipse_path -stroke -gsave 10 dict begin -729 251 moveto -(Nbtermdn) -[10.08 6.96 3.84 6.24 4.8 10.8 6.96 6.96] -xshow -end grestore -end grestore - -% Btermdn -gsave 10 dict begin -884 256 38 18 ellipse_path -stroke -gsave 10 dict begin -859 251 moveto -(Btermdn) -[9.36 3.84 6.24 4.8 10.8 6.96 6.96] -xshow -end grestore -end grestore - -% Nbtermdn -> Btermdn -newpath 800 256 moveto -812 256 824 256 836 256 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 836 260 moveto -846 256 lineto -836 253 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 836 260 moveto -846 256 lineto -836 253 lineto -closepath -stroke -end grestore - -% Btermdn -> Termdn -newpath 922 256 moveto -932 256 943 256 953 256 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 953 260 moveto -963 256 lineto -953 253 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 953 260 moveto -963 256 lineto -953 253 lineto -closepath -stroke -end grestore - -% Elim -gsave 10 dict begin -483 164 27 18 ellipse_path -stroke -gsave 10 dict begin -468 159 moveto -(Elim) -[8.4 3.84 3.84 10.8] -xshow -end grestore -end grestore - -% Inv -> Elim -newpath 406 164 moveto -418 164 432 164 445 164 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 445 168 moveto -455 164 lineto -445 161 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 445 168 moveto -455 164 lineto -445 161 lineto -closepath -stroke -end grestore - -% Equality -gsave 10 dict begin -483 56 37 18 ellipse_path -stroke -gsave 10 dict begin -459 51 moveto -(Equality) -[8.4 6.72 6.96 6.24 3.84 3.84 3.84 6.96] -xshow -end grestore -end grestore - -% Inv -> Equality -newpath 390 147 moveto -401 130 421 102 442 83 curveto -445 80 448 78 451 76 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 453 79 moveto -459 70 lineto -449 73 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 453 79 moveto -459 70 lineto -449 73 lineto -closepath -stroke -end grestore - -% Elim -> Hiddentac -newpath 511 164 moveto -526 164 545 164 562 164 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 562 168 moveto -572 164 lineto -562 161 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 562 168 moveto -572 164 lineto -562 161 lineto -closepath -stroke -end grestore - -% Equality -> Setoid_replace -newpath 520 58 moveto -530 59 540 60 551 60 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 551 63 moveto -561 61 lineto -551 57 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 551 63 moveto -561 61 lineto -551 57 lineto -closepath -stroke -end grestore - -% Evar_tactics -gsave 10 dict begin -758 164 48 18 ellipse_path -stroke -gsave 10 dict begin -722 159 moveto -(Evar_tactics) -[8.4 6.72 6.24 4.56 6.96 4.08 6.24 6.24 3.84 3.84 6.24 5.52] -xshow -end grestore -end grestore - -% Hiddentac -> Evar_tactics -newpath 658 164 moveto -671 164 685 164 699 164 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 699 168 moveto -709 164 lineto -699 161 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 699 168 moveto -709 164 lineto -699 161 lineto -closepath -stroke -end grestore - -% Evar_tactics -> Tactics -newpath 790 150 moveto -808 142 830 132 849 125 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 850 128 moveto -858 121 lineto -847 122 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 850 128 moveto -858 121 lineto -847 122 lineto -closepath -stroke -end grestore - -% Dhyp -> Tactics -newpath 644 219 moveto -684 220 756 217 810 191 curveto -844 175 855 163 872 137 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 875 138 moveto -877 128 lineto -869 135 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 875 138 moveto -877 128 lineto -869 135 lineto -closepath -stroke -end grestore - -% Dhyp -> Nbtermdn -newpath 642 225 moveto -662 230 689 238 712 244 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 712 247 moveto -722 246 lineto -713 241 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 712 247 moveto -722 246 lineto -713 241 lineto -closepath -stroke -end grestore - -% Contradiction -gsave 10 dict begin -758 18 51 18 ellipse_path -stroke -gsave 10 dict begin -719 13 moveto -(Contradiction) -[9.36 6.96 6.96 3.84 4.56 6.24 6.96 3.84 6.24 3.84 3.84 6.96 6.96] -xshow -end grestore -end grestore - -% Contradiction -> Tactics -newpath 784 34 moveto -793 39 802 44 810 50 curveto -827 62 845 76 859 88 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 857 91 moveto -867 95 lineto -862 86 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 857 91 moveto -867 95 lineto -862 86 lineto -closepath -stroke -end grestore - -% Autorewrite -gsave 10 dict begin -47 191 47 18 ellipse_path -stroke -gsave 10 dict begin -13 186 moveto -(Autorewrite) -[9.6 6.96 3.84 6.96 4.56 5.76 10.08 4.8 3.84 3.84 6.24] -xshow -end grestore -end grestore - -% Autorewrite -> Tacinterp -newpath 94 191 moveto -102 191 111 191 120 191 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 120 195 moveto -130 191 lineto -120 188 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 120 195 moveto -130 191 lineto -120 188 lineto -closepath -stroke -end grestore -endpage -showpage -grestore -%%PageTrailer -%%EndPage: 1 -%%Trailer -%%Pages: 1 -end -restore -%%EOF diff --git a/dev/doc/toplevel.dep.ps b/dev/doc/toplevel.dep.ps deleted file mode 100644 index e0355aac..00000000 --- a/dev/doc/toplevel.dep.ps +++ /dev/null @@ -1,971 +0,0 @@ -%!PS-Adobe-2.0 -%%Creator: dot version 2.2 (Wed Jan 19 21:09:25 UTC 2005) -%%For: (herbelin) Hugo Herbelin -%%Title: G -%%Pages: (atend) -%%BoundingBox: 35 35 577 166 -%%EndComments -save -%%BeginProlog -/DotDict 200 dict def -DotDict begin - -/setupLatin1 { -mark -/EncodingVector 256 array def - EncodingVector 0 - -ISOLatin1Encoding 0 255 getinterval putinterval - -EncodingVector - dup 306 /AE - dup 301 /Aacute - dup 302 /Acircumflex - dup 304 /Adieresis - dup 300 /Agrave - dup 305 /Aring - dup 303 /Atilde - dup 307 /Ccedilla - dup 311 /Eacute - dup 312 /Ecircumflex - dup 313 /Edieresis - dup 310 /Egrave - dup 315 /Iacute - dup 316 /Icircumflex - dup 317 /Idieresis - dup 314 /Igrave - dup 334 /Udieresis - dup 335 /Yacute - dup 376 /thorn - dup 337 /germandbls - dup 341 /aacute - dup 342 /acircumflex - dup 344 /adieresis - dup 346 /ae - dup 340 /agrave - dup 345 /aring - dup 347 /ccedilla - dup 351 /eacute - dup 352 /ecircumflex - dup 353 /edieresis - dup 350 /egrave - dup 355 /iacute - dup 356 /icircumflex - dup 357 /idieresis - dup 354 /igrave - dup 360 /dcroat - dup 361 /ntilde - dup 363 /oacute - dup 364 /ocircumflex - dup 366 /odieresis - dup 362 /ograve - dup 365 /otilde - dup 370 /oslash - dup 372 /uacute - dup 373 /ucircumflex - dup 374 /udieresis - dup 371 /ugrave - dup 375 /yacute - dup 377 /ydieresis - -% Set up ISO Latin 1 character encoding -/starnetISO { - dup dup findfont dup length dict begin - { 1 index /FID ne { def }{ pop pop } ifelse - } forall - /Encoding EncodingVector def - currentdict end definefont -} def -/Times-Roman starnetISO def -/Times-Italic starnetISO def -/Times-Bold starnetISO def -/Times-BoldItalic starnetISO def -/Helvetica starnetISO def -/Helvetica-Oblique starnetISO def -/Helvetica-Bold starnetISO def -/Helvetica-BoldOblique starnetISO def -/Courier starnetISO def -/Courier-Oblique starnetISO def -/Courier-Bold starnetISO def -/Courier-BoldOblique starnetISO def -cleartomark -} bind def - -%%BeginResource: procset graphviz 0 0 -/coord-font-family /Times-Roman def -/default-font-family /Times-Roman def -/coordfont coord-font-family findfont 8 scalefont def - -/InvScaleFactor 1.0 def -/set_scale { - dup 1 exch div /InvScaleFactor exch def - dup scale -} bind def - -% styles -/solid { [] 0 setdash } bind def -/dashed { [9 InvScaleFactor mul dup ] 0 setdash } bind def -/dotted { [1 InvScaleFactor mul 6 InvScaleFactor mul] 0 setdash } bind def -/invis {/fill {newpath} def /stroke {newpath} def /show {pop newpath} def} bind def -/bold { 2 setlinewidth } bind def -/filled { } bind def -/unfilled { } bind def -/rounded { } bind def -/diagonals { } bind def - -% hooks for setting color -/nodecolor { sethsbcolor } bind def -/edgecolor { sethsbcolor } bind def -/graphcolor { sethsbcolor } bind def -/nopcolor {pop pop pop} bind def - -/beginpage { % i j npages - /npages exch def - /j exch def - /i exch def - /str 10 string def - npages 1 gt { - gsave - coordfont setfont - 0 0 moveto - (\() show i str cvs show (,) show j str cvs show (\)) show - grestore - } if -} bind def - -/set_font { - findfont exch - scalefont setfont -} def - -% draw aligned label in bounding box aligned to current point -/alignedtext { % width adj text - /text exch def - /adj exch def - /width exch def - gsave - width 0 gt { - text stringwidth pop adj mul 0 rmoveto - } if - [] 0 setdash - text show - grestore -} def - -/boxprim { % xcorner ycorner xsize ysize - 4 2 roll - moveto - 2 copy - exch 0 rlineto - 0 exch rlineto - pop neg 0 rlineto - closepath -} bind def - -/ellipse_path { - /ry exch def - /rx exch def - /y exch def - /x exch def - matrix currentmatrix - newpath - x y translate - rx ry scale - 0 0 1 0 360 arc - setmatrix -} bind def - -/endpage { showpage } bind def -/showpage { } def - -/layercolorseq - [ % layer color sequence - darkest to lightest - [0 0 0] - [.2 .8 .8] - [.4 .8 .8] - [.6 .8 .8] - [.8 .8 .8] - ] -def - -/layerlen layercolorseq length def - -/setlayer {/maxlayer exch def /curlayer exch def - layercolorseq curlayer 1 sub layerlen mod get - aload pop sethsbcolor - /nodecolor {nopcolor} def - /edgecolor {nopcolor} def - /graphcolor {nopcolor} def -} bind def - -/onlayer { curlayer ne {invis} if } def - -/onlayers { - /myupper exch def - /mylower exch def - curlayer mylower lt - curlayer myupper gt - or - {invis} if -} def - -/curlayer 0 def - -%%EndResource -%%EndProlog -%%BeginSetup -14 default-font-family set_font -1 setmiterlimit -% /arrowlength 10 def -% /arrowwidth 5 def - -% make sure pdfmark is harmless for PS-interpreters other than Distiller -/pdfmark where {pop} {userdict /pdfmark /cleartomark load put} ifelse -% make '<<' and '>>' safe on PS Level 1 devices -/languagelevel where {pop languagelevel}{1} ifelse -2 lt { - userdict (<<) cvn ([) cvn load put - userdict (>>) cvn ([) cvn load put -} if - -%%EndSetup -%%Page: 1 1 -%%PageBoundingBox: 36 36 577 166 -%%PageOrientation: Portrait -gsave -35 35 542 131 boxprim clip newpath -36 36 translate -0 0 1 beginpage -0.4180 set_scale -0 0 translate 0 rotate -0.000 0.000 0.000 graphcolor -14.00 /Times-Roman set_font - -% Vernac -gsave 10 dict begin -562 145 33 18 ellipse_path -stroke -gsave 10 dict begin -541 140 moveto -(Vernac) -[8.88 6.24 4.8 6.96 6.24 6.24] -xshow -end grestore -end grestore - -% Vernacentries -gsave 10 dict begin -724 158 52 18 ellipse_path -stroke -gsave 10 dict begin -685 153 moveto -(Vernacentries) -[8.88 6.24 4.8 6.96 6.24 6.24 6.24 6.96 3.84 4.8 3.84 6.24 5.52] -xshow -end grestore -end grestore - -% Vernac -> Vernacentries -newpath 595 148 moveto -615 149 640 151 663 153 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 663 156 moveto -673 154 lineto -663 150 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 663 156 moveto -673 154 lineto -663 150 lineto -closepath -stroke -end grestore - -% Vernacinterp -gsave 10 dict begin -862 158 50 18 ellipse_path -stroke -gsave 10 dict begin -825 153 moveto -(Vernacinterp) -[8.88 6.24 4.8 6.96 6.24 6.24 3.84 6.96 3.84 6.24 4.8 6.96] -xshow -end grestore -end grestore - -% Vernacentries -> Vernacinterp -newpath 776 158 moveto -785 158 793 158 802 158 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 802 162 moveto -812 158 lineto -802 155 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 802 162 moveto -812 158 lineto -802 155 lineto -closepath -stroke -end grestore - -% Discharge -gsave 10 dict begin -862 212 42 18 ellipse_path -stroke -gsave 10 dict begin -833 207 moveto -(Discharge) -[10.08 3.84 5.52 6 6.96 6.24 4.32 6.72 6.24] -xshow -end grestore -end grestore - -% Vernacentries -> Discharge -newpath 758 171 moveto -777 179 801 188 822 196 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 820 199 moveto -831 200 lineto -823 193 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 820 199 moveto -831 200 lineto -823 193 lineto -closepath -stroke -end grestore - -% Mltop -gsave 10 dict begin -862 104 31 18 ellipse_path -stroke -gsave 10 dict begin -844 99 moveto -(Mltop) -[12.48 3.84 3.84 6.96 6.96] -xshow -end grestore -end grestore - -% Vernacentries -> Mltop -newpath 758 145 moveto -779 137 805 126 826 118 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 828 121 moveto -836 114 lineto -825 114 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 828 121 moveto -836 114 lineto -825 114 lineto -closepath -stroke -end grestore - -% Record -gsave 10 dict begin -862 281 33 18 ellipse_path -stroke -gsave 10 dict begin -842 276 moveto -(Record) -[9.12 6.24 6.24 6.96 4.32 6.96] -xshow -end grestore -end grestore - -% Vernacentries -> Record -newpath 742 175 moveto -760 192 788 217 812 239 curveto -819 246 828 253 835 259 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 833 262 moveto -843 266 lineto -838 257 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 833 262 moveto -843 266 lineto -838 257 lineto -closepath -stroke -end grestore - -% Himsg -gsave 10 dict begin -991 85 32 18 ellipse_path -stroke -gsave 10 dict begin -971 80 moveto -(Himsg) -[10.08 3.84 10.8 5.52 6.96] -xshow -end grestore -end grestore - -% Vernacinterp -> Himsg -newpath 890 143 moveto -897 139 905 135 912 131 curveto -929 123 946 112 960 103 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 962 106 moveto -969 98 lineto -959 100 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 962 106 moveto -969 98 lineto -959 100 lineto -closepath -stroke -end grestore - -% Vernacexpr -gsave 10 dict begin -1246 221 45 18 ellipse_path -stroke -gsave 10 dict begin -1213 216 moveto -(Vernacexpr) -[8.88 6.24 4.8 6.96 6.24 6.24 5.76 6.96 6.96 4.56] -xshow -end grestore -end grestore - -% Vernacinterp -> Vernacexpr -newpath 912 159 moveto -947 160 994 163 1034 169 curveto -1092 178 1158 195 1200 207 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 1199 210 moveto -1210 210 lineto -1201 204 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 1199 210 moveto -1210 210 lineto -1201 204 lineto -closepath -stroke -end grestore - -% Class -gsave 10 dict begin -1117 238 28 18 ellipse_path -stroke -gsave 10 dict begin -1101 233 moveto -(Class) -[9.36 3.84 6.24 5.52 5.52] -xshow -end grestore -end grestore - -% Discharge -> Class -newpath 902 217 moveto -917 219 933 221 948 223 curveto -992 228 1044 232 1079 235 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 1079 238 moveto -1089 236 lineto -1079 232 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 1079 238 moveto -1089 236 lineto -1079 232 lineto -closepath -stroke -end grestore - -% Recordobj -gsave 10 dict begin -991 196 42 18 ellipse_path -stroke -gsave 10 dict begin -962 191 moveto -(Recordobj) -[9.12 6.24 6.24 6.96 4.32 6.96 6.96 6.96 3.84] -xshow -end grestore -end grestore - -% Discharge -> Recordobj -newpath 902 207 moveto -914 205 927 204 940 202 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 940 205 moveto -950 201 lineto -940 199 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 940 205 moveto -950 201 lineto -940 199 lineto -closepath -stroke -end grestore - -% Command -gsave 10 dict begin -991 288 42 18 ellipse_path -stroke -gsave 10 dict begin -961 283 moveto -(Command) -[9.36 6.96 10.8 10.8 6.24 6.96 6.96] -xshow -end grestore -end grestore - -% Record -> Command -newpath 895 283 moveto -908 284 923 285 938 285 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 938 288 moveto -948 286 lineto -938 282 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 938 288 moveto -948 286 lineto -938 282 lineto -closepath -stroke -end grestore - -% Toplevel -gsave 10 dict begin -255 72 37 18 ellipse_path -stroke -gsave 10 dict begin -231 67 moveto -(Toplevel) -[7.2 6.96 6.96 3.84 5.76 6.48 6.24 3.84] -xshow -end grestore -end grestore - -% Protectedtoplevel -gsave 10 dict begin -390 72 61 18 ellipse_path -stroke -gsave 10 dict begin -341 67 moveto -(Protectedtoplevel) -[7.68 4.56 6.72 3.84 6.24 6.24 3.84 6.24 6.96 3.84 6.96 6.96 3.84 5.76 6.48 6.24 3.84] -xshow -end grestore -end grestore - -% Toplevel -> Protectedtoplevel -newpath 292 72 moveto -300 72 309 72 318 72 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 318 76 moveto -328 72 lineto -318 69 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 318 76 moveto -328 72 lineto -318 69 lineto -closepath -stroke -end grestore - -% Protectedtoplevel -> Vernac -newpath 425 87 moveto -455 100 497 117 527 130 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 525 133 moveto -536 134 lineto -528 127 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 525 133 moveto -536 134 lineto -528 127 lineto -closepath -stroke -end grestore - -% Cerrors -gsave 10 dict begin -724 65 34 18 ellipse_path -stroke -gsave 10 dict begin -702 60 moveto -(Cerrors) -[9.36 6.24 5.04 4.56 6.96 4.56 5.52] -xshow -end grestore -end grestore - -% Protectedtoplevel -> Cerrors -newpath 452 71 moveto -518 70 621 67 679 66 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 679 70 moveto -689 66 lineto -679 63 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 679 70 moveto -689 66 lineto -679 63 lineto -closepath -stroke -end grestore - -% Line_oriented_parser -gsave 10 dict begin -562 26 73 18 ellipse_path -stroke -gsave 10 dict begin -501 21 moveto -(Line_oriented_parser) -[8.4 3.84 6.96 6.24 6.96 6.96 4.8 3.84 6.24 6.96 3.84 6.24 6.96 6.96 6.96 6.24 4.56 5.52 6.24 4.56] -xshow -end grestore -end grestore - -% Protectedtoplevel -> Line_oriented_parser -newpath 436 60 moveto -457 55 481 48 502 42 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 503 45 moveto -512 39 lineto -501 39 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 503 45 moveto -512 39 lineto -501 39 lineto -closepath -stroke -end grestore - -% Metasyntax -gsave 10 dict begin -1117 292 46 18 ellipse_path -stroke -gsave 10 dict begin -1083 287 moveto -(Metasyntax) -[12.48 6 4.08 6.24 5.52 6.96 6.96 4.08 6.24 6.96] -xshow -end grestore -end grestore - -% Command -> Metasyntax -newpath 1034 289 moveto -1043 290 1052 290 1061 290 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 1061 293 moveto -1071 291 lineto -1061 287 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 1061 293 moveto -1071 291 lineto -1061 287 lineto -closepath -stroke -end grestore - -% Command -> Class -newpath 1022 276 moveto -1041 268 1065 259 1084 252 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 1085 255 moveto -1093 248 lineto -1082 249 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 1085 255 moveto -1093 248 lineto -1082 249 lineto -closepath -stroke -end grestore - -% Cerrors -> Himsg -newpath 758 67 moveto -796 69 859 73 912 77 curveto -924 78 937 79 949 80 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 949 83 moveto -959 81 lineto -949 77 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 949 83 moveto -959 81 lineto -949 77 lineto -closepath -stroke -end grestore - -% Minicoq -gsave 10 dict begin -38 126 37 18 ellipse_path -stroke -gsave 10 dict begin -13 121 moveto -(Minicoq) -[12.48 3.84 6.96 3.84 6.24 6.96 6.96] -xshow -end grestore -end grestore - -% Fhimsg -gsave 10 dict begin -147 126 34 18 ellipse_path -stroke -gsave 10 dict begin -125 121 moveto -(Fhimsg) -[7.68 6.96 3.84 10.8 5.52 6.96] -xshow -end grestore -end grestore - -% Minicoq -> Fhimsg -newpath 76 126 moveto -84 126 93 126 102 126 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 102 130 moveto -112 126 lineto -102 123 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 102 130 moveto -112 126 lineto -102 123 lineto -closepath -stroke -end grestore - -% Metasyntax -> Vernacexpr -newpath 1144 277 moveto -1163 267 1189 252 1210 241 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 1212 244 moveto -1219 236 lineto -1209 238 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 1212 244 moveto -1219 236 lineto -1209 238 lineto -closepath -stroke -end grestore - -% Coqtop -gsave 10 dict begin -38 45 34 18 ellipse_path -stroke -gsave 10 dict begin -17 40 moveto -(Coqtop) -[9.36 6.96 6.96 3.84 6.96 6.96] -xshow -end grestore -end grestore - -% Coqinit -gsave 10 dict begin -147 72 34 18 ellipse_path -stroke -gsave 10 dict begin -126 67 moveto -(Coqinit) -[9.36 6.96 6.96 3.84 6.96 3.84 3.84] -xshow -end grestore -end grestore - -% Coqtop -> Coqinit -newpath 69 53 moveto -81 56 94 59 106 62 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 105 65 moveto -116 65 lineto -107 59 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 105 65 moveto -116 65 lineto -107 59 lineto -closepath -stroke -end grestore - -% Usage -gsave 10 dict begin -147 18 31 18 ellipse_path -stroke -gsave 10 dict begin -129 13 moveto -(Usage) -[10.08 5.52 6.24 6.72 6.24] -xshow -end grestore -end grestore - -% Coqtop -> Usage -newpath 69 37 moveto -81 34 95 31 108 28 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 109 31 moveto -118 25 lineto -107 25 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 109 31 moveto -118 25 lineto -107 25 lineto -closepath -stroke -end grestore - -% Coqinit -> Toplevel -newpath 181 72 moveto -190 72 199 72 208 72 curveto -stroke -gsave 10 dict begin -solid -1 setlinewidth -0.000 0.000 0.000 edgecolor -newpath 208 76 moveto -218 72 lineto -208 69 lineto -closepath -fill -0.000 0.000 0.000 edgecolor -newpath 208 76 moveto -218 72 lineto -208 69 lineto -closepath -stroke -end grestore -endpage -showpage -grestore -%%PageTrailer -%%EndPage: 1 -%%Trailer -%%Pages: 1 -end -restore -%%EOF diff --git a/dev/doc/translate.txt b/dev/doc/translate.txt new file mode 100644 index 00000000..5b372c96 --- /dev/null +++ b/dev/doc/translate.txt @@ -0,0 +1,495 @@ + + How to use the translator + ========================= + + (temporary version to be included in the official + TeX document describing the translator) + +The translator is a smart, robust and powerful tool to improve the +readibility of your script. The current document describes the +possibilities of the translator. + +In case of problem recompiling the translated files, don't waste time +to modify the translated file by hand, read first the following +document telling on how to modify the original files to get a smooth +uniform safe translation. All 60000 lines of Coq lines on our +user-contributions server have been translated without any change +afterwards, and 0,5 % of the lines of the original files (mainly +notations) had to be modified beforehand to get this result. + +Table of contents +----------------- + +I) Implicit Arguments + 1) Strict Implicit Arguments + 2) Implicit Arguments in standard library + +II) Notations + 1) Translating a V7 notation as it was + 2) Translating a V7 notation which conflicts with the new syntax + a) Associativity conflicts + b) Conflicts with other notations + b1) A notation hides another notation + b2) A notation conflicts with the V8 grammar + b3) My notation is already defined at another level + c) How to use V8only with Distfix ? + d) Can I overload a notation in V8, e.g. use "*" and "+" ? + 3) Using the translator to have simplest notations + 4) Setting the translator to automatically use new notations that + wasn't used in old syntax + 5) Defining a construction and its notation simultaneously + +III) Various pitfalls + 1) New keywords + 2) Old "Case" and "Match" + 3) Change of definition or theorem names + 4) Change of tactic names + +--------------------------------------------------------------------- + +I) Implicit Arguments + ------------------ + +1) Strict Implicit Arguments + + "Set Implicit Arguments" changes its meaning in V8: the default is +to turn implicit only the arguments that are _strictly_ implicit (or +rigid), i.e. that remains inferable whatever the other arguments +are. E.g "x" inferable from "P x" is not strictly inferable since it +can disappears if "P" is instanciated by a term which erase "x". + + To respect the old semantics, the default behaviour of the +translator is to replace each occurrence "Set Implicit Arguments" by + + Set Implicit Arguments. + Unset Strict Implicits. + + However, you may wish to adopt the new semantics of "Set Implicit +Arguments" (for instance because you think that the choice of +arguments it setsimplicit is more "natural" for you). In this case, +add the option -strict-implicit to the translator. + + Warning: Changing the number of implicit arguments can break the +notations. Then use the V8only modifier of Notations. + +2) Implicit Arguments in standard library + + Main definitions of standard library have now implicit +arguments. These arguments are dropped in the translated files. This +can exceptionally be a source of incompatibilities which has to be +solved by hand (it typically happens for polymorphic functions applied +to "nil" or "None"). + +II) Notations + --------- + + Grammar (on constr) and Syntax are no longer supported. Replace them by +Notation before translation. + + Precedence levels are now from 0 to 200. In V8, the precedence and +associativity of an operator cannot be redefined. Typical level are +(refer to the chapter on notations in the Reference Manual for the +full list): + + <-> : 95 (no associativity) + -> : 90 (right associativity) + \/ : 85 (right associativity) + /\ : 80 (right associativity) + ~ : 75 (right associativity) + =, <, >, <=, >=, <> : 70 (no associativity) + +, - : 50 (left associativity) + *, / : 40 (left associativity) + ^ : 30 (right associativity) + +1) Translating a V7 notation as it was + + By default, the translator keeps the associativity given in V7 while +the levels are mapped according to the following table: + + the V7 levels [ 0; 1; 2; 3; 4; 5; 6; 7; 8; 9; 10] + are resp. mapped in V8 to [ 0; 20; 30; 40; 50; 70; 80; 85; 90; 95; 100] + with predefined assoc [ No; L; R; L; L; No; R; R; R; No; L] + + If this is OK for you, just simply apply the translator. + +2) Translating a V7 notation which conflicts with the new syntax + +a) Associativity conflict + + Since the associativity of the levels obtained by translating a V7 +level (as shown on table above) cannot be changed, you have to choose +another level with a compatible associativity. + + You can choose any level between 0 and 200, knowing that the +standard operators are already set at the levels shown on the list +above. + +Example 1: Assume you have a notation + +Infix NONA 2 "=_S" my_setoid_eq. + +By default, the translator moves it to level 30 which is right +associative, hence a conflict with the expected no associativity. + +To solve the problem, just add the "V8only" modifier to reset the +level and enforce the associativity as follows: + +Infix NONA 2 "=_S" my_setoid_eq V8only (at level 70, no associativity). + +The translator now knows that it has to translate "=_S" at level 70 +with no associativity. + +Rem: 70 is the "natural" level for relations, hence the choice of 70 +here, but any other level accepting a no-associativity would have been +OK. + +Example 2: Assume you have a notation + +Infix RIGHTA 1 "o" my_comp. + +By default, the translator moves it to level 20 which is left +associative, hence a conflict with the expected right associativity. + +To solve the problem, just add the "V8only" modifier to reset the +level and enforce the associativity as follows: + +Infix RIGHTA 1 "o" my_comp V8only (at level 20, right associativity). + +The translator now knows that it has to translate "o" at level 20 +which has the correct "right associativity". + +Rem: We assumed here that the user wants a strong precedence for +composition, in such a way, say, that "f o g + h" is parsed as +"(f o g) + h". To get "o" binding less than the arithmetical operators, +an appropriated level would have been close of 70, and below, e.g. 65. + +b) Conflicts with other notations + +Since the new syntax comes with new keywords and new predefined +symbols, new conflicts can occur. Again, you can use the option V8only +to inform the translator of the new syntax to use. + +b1) A notation hides another notation + +Rem: use Print Grammar constr in V8 to diagnose the overlap and see the +section on factorization in the chapter on notations of the Reference +Manual for hints on how to factorize. + +Example: + +Notation "{ x }" := (my_embedding x) (at level 1). + +overlaps in V8 with notation "{ x : A & P }" at level 0 and with x at +level 99. The conflicts can be solved by left-factorizing the notation +as follows: + +Notation "{ x }" := (my_embedding x) (at level 1) + V8only (at level 0, x at level 99). + +b2) A notation conflicts with the V8 grammar. + +Again, use the V8only modifier to tell the translator to automatically +take in charge the new syntax. + +Example: + +Infix 3 "@" app. + +Since "@" is used in the new syntax for deactivating the implicit +arguments, another symbol has to be used, e.g. "@@". This is done via +the V8only option as follows: + +Infix 3 "@" app V8only "@@" (at level 40, left associativity). + +or, alternatively by + +Notation "x @ y" := (app x y) (at level 3, left associativity) + V8only "x @@ y" (at level 40, left associativity). + +b3) My notation is already defined at another level (or with another +associativity) + +In V8, the level and associativity of a given notation can no longer +be changed. Then, either you adopt the standard reserved levels and +associativity for this notation (as given on the list above) or you +change your notation. + +- To change the notation, follow the directions in section b2. + +- To adopt the standard level, just use V8only without any argument. + +Example. + +Infix 6 "*" my_mult. + +is not accepted as such in V8. Write + +Infix 6 "*" my_mult V8only. + +to tell the translator to use "*" at the reserved level (i.e. 40 with +left associativity). Even better, use interpretation scopes (look at +the Reference Manual). + +c) How to use V8only with Distfix ? + +You can't, use Notation instead of Distfix. + +d) Can I overload a notation in V8, e.g. use "*" and "+" for my own +algebraic operations ? + +Yes, using interpretation scopes (see the corresponding chapter in the +Reference Manual). + +3) Using the translator to have simplest notations + +Thanks to the new syntax, * has now the expected left associativity, +and the symbols <, >, <= and >= are now available. + +Thanks to the interpretation scopes, you can overload the +interpretation of these operators with the default interpretation +provided in Coq. + +This may be a motivation to use the translator to automatically change +the notations while switching to the new syntax. + +See sections b) and d) above for examples. + +4) Setting the translator to automatically use new notations that +wasn't used in old syntax + +Thanks to the "Notation" mechanism, defining symbolic notations is +simpler than in the previous versions of Coq. + +Thanks to the new syntax and interpretation scopes, new symbols and +overloading is available. + +This may be a motivation for using the translator to automatically change +the notations while switching to the new syntax. + +Use for that the commands V8Notation and V8Infix. + +Examples: + +V8Infix "==>" my_relation (at level 65, right associativity). + +tells the translator to write an infix "==>" instead of my_relation in +the translated files. + +V8Infix ">=" my_ge. + +tells the translator to write an infix ">=" instead of my_ge in the +translated files and that the level and associativity are the standard +one (as defined in the chart above). + +V8Infix ">=" my_ge : my_scope. + +tells the translator to write an infix ">=" instead of my_ge in the +translated files, that the level and associativity are the standard +one (as defined in the chart above), but only if scope my_scope is +open or if a delimiting key is available for "my_scope" (see the +Reference Manual). + +5) Defining a construction and its notation simultaneously + +This is permitted by the new syntax. Look at the Reference Manual for +explanation. The translator is not fully able to take this in charge... + +III) Various pitfalls + ---------------- + +1) New keywords + + The following identifiers are new keywords + + "forall"; "fun"; "match"; "fix"; "cofix"; "for"; "if"; "then"; + "else"; "return"; "mod"; "at"; "let"; "_"; ".(" + + The translator automatically add a "_" to names clashing with a +keyword, except for files. Hence users may need to rename the files +whose name clashes with a keyword. + + Remark: "in"; "with"; "end"; "as"; "Prop"; "Set"; "Type" + were already keywords + +2) Old "Case" and "Match" + + "Case" and "Match" are normally automatically translated into + "match" or "match" and "fix", but sometimes it fails to do so. It + typically fails when the Case or Match is argument of a tactic whose + typing context is unknown because of a preceding Intro/Intros, as e.g. in + + Intros; Exists [m:nat](Case m of t [p:nat](f m) end) + + The solution is then to replace the invocation of the sequence of + tactics into several invocation of the elementary tactics as follows + + Intros. Exists [m:nat](Case m of t [p:nat](f m) end) + ^^^ + +3) Change of definition or theorem names + + Type "entier" from fast_integer.v is renamed into "N" by the +translator. As a consequence, user-defined objects of same name "N" +are systematically qualified even tough it may not be necessary. The +same apply for names "GREATER", "EQUAL", "LESS", etc... [COMPLETE LIST +TO GIVE]. + +4) Change of tactics names + + Since tactics names are now lowercase, this can clash with +user-defined tactic definitions. To pally this, clashing names are +renamed by adding an extra "_" to their name. + +====================================================================== +Main examples for new syntax +---------------------------- + +1) Constructions + + Applicative terms don't any longer require to be surrounded by parentheses as +e.g in + + "x = f y -> S x = S (f y)" + + + Product is written + + "forall x y : T, U" + "forall x y, U" + "forall (x y : T) z (v w : V), U" + etc. + + Abstraction is written + + "fun x y : T, U" + "fun x y, U" + "fun (x y : T) z (v w : V), U" + etc. + + Pattern-matching is written + + "match x with c1 x1 x2 => t | c2 y as z => u end" + "match v1, v2 with c1 x1 x2, _ => t | c2 y, d z => u end" + "match v1 as y in le _ n, v2 as z in I p q return P n y p q z with + c1 x1 x2, _ => t | c2 y, d z => u end" + + The last example is the new form of what was written + + "<[n;y:(le ? n);p;q;z:(I p q)](P n y p q z)>Cases v1 v2 of + (c1 x1 x2) _ => t | (c2 y) (d z) => u end" + + Pattern-matching of type with one constructors and no dependencies +of the arguments in the resulting type can be written + + "let (x,y,z) as u return P u := t in v" + + Local fixpoints are written + + "fix f (n m:nat) z (x : X) {struct m} : nat := ... + with ..." + + and "struct" tells which argument is structurally decreasing. + + Explicitation of implicit arguments is written + + "f @1:=u v @3:=w t" + "@f u v w t" + +2) Tactics + + The main change is that tactics names are now lowercase. Besides +this, the following renaming are applied: + + "NewDestruct" -> "destruct" + "NewInduction" -> "induction" + "Induction" -> "simple induction" + "Destruct" -> "simple destruct" + + For tactics with occurrences, the occurrences now comes after and + repeated use is separated by comma as in + + "Pattern 1 3 c d 4 e" -> "pattern c at 3 1, d, e at 4" + "Unfold 1 3 f 4 g" -> "unfold f at 1 3, g at 4" + "Simpl 1 3 e" -> "simpl e at 1 3" + +3) Tactic language + + Definitions are now introduced with keyword "Ltac" (instead of +"Tactic"/"Meta" "Definition") and are implicitly recursive +("Recursive" is no longer used). + + The new rule for distinguishing terms from ltac expressions is: + + Write "ltac:" in front of any tactic in argument position and + "constr:" in front of any construction in head position + +4) Vernacular language + +a) Assumptions + + The syntax for commands is mainly unchanged. Declaration of +assumptions is now done as follows + + Variable m : t. + Variables m n p : t. + Variables (m n : t) (u v : s) (w : r). + +b) Definitions + + Definitions are done as follows + + Definition f m n : t := ... . + Definition f m n := ... . + Definition f m n := ... : t. + Definition f (m n : u) : t := ... . + Definition f (m n : u) := ... : t. + Definition f (m n : u) := ... . + Definition f a b (p q : v) r s (m n : t) : t := ... . + Definition f a b (p q : v) r s (m n : t) := ... . + Definition f a b (p q : v) r s (m n : t) := ... : t. + +c) Fixpoints + + Fixpoints are done this way + + Fixpoint f x (y : t) z a (b c : u) {struct z} : v := ... with ... . + Fixpoint f x : v := ... . + Fixpoint f (x : t) : v := ... . + + It is possible to give a concrete notation to a fixpoint as follows + + Fixpoint plus (n m:nat) {struct n} : nat as "n + m" := + match n with + | O => m + | S p => S (p + m) + end. + +d) Inductive types + + The syntax for inductive types is as follows + + Inductive t (a b : u) (d : e) : v := + c1 : w1 | c2 : w2 | ... . + + Inductive t (a b : u) (d : e) : v := + c1 : w1 | c2 : w2 | ... . + + Inductive t (a b : u) (d : e) : v := + c1 (x y : t) : w1 | c2 (z : r) : w2 | ... . + + As seen in the last example, arguments of the constructors can be +given before the colon. If the type itself is omitted (allowed only in +case the inductive type has no real arguments), this yields an +ML-style notation as follows + + Inductive nat : Set := O | S (n:nat). + Inductive bool : Set := true | false. + + It is even possible to define a syntax at the same time, as follows: + + Inductive or (A B:Prop) : Prop as "A \/ B":= + | or_introl (a:A) : A \/ B + | or_intror (b:B) : A \/ B. + + Inductive and (A B:Prop) : Prop as "A /\ B" := conj (a:A) (b:B). + diff --git a/dev/doc/universes.txt b/dev/doc/universes.txt new file mode 100644 index 00000000..65c1e522 --- /dev/null +++ b/dev/doc/universes.txt @@ -0,0 +1,32 @@ +How to debug universes? + +1. There is a command Dump Universes in Coq toplevel + + Dump Universes. + prints the graph of universes in the form of constraints + + Dump Universes "file". + produces the "file" containing universe constraints in the form + univ1 # univ2 ; + where # can be either > >= or = + + The file produced by the latter command can be transformed using + the script univdot to dot format. + For example + + univdot file | dot -Tps > file.ps + + produces a graph of universes in ps format. + > arrows are red, >= blue, and = black. + + + *) for dot see http://www.research.att.com/sw/tools/graphviz/ + + +2. There is a printing option + + Termast.print_universes : bool ref + + which, when set (in ocaml after Drop), makes all pretty-printed + Type's annotated with the name of the universe. + diff --git a/dev/header b/dev/header deleted file mode 100644 index 57945e47..00000000 --- a/dev/header +++ /dev/null @@ -1,7 +0,0 @@ -(************************************************************************) -(* v * The Coq Proof Assistant / The Coq Development Team *) -(* if i=1 then cache_\\3 o)\\4;") - ) - -(global-set-key [f6] 'repl-open) - -(defun repl-load nil - (interactive) - (query-replace-regexp - "load_function\\([ ]*\\)=\\([ ]*\\)cache_\\([a-zA-Z0-9'_]*\\)\\( *\\);" - "load_function\\1=\\2(fun _ -> cache_\\3)\\4;") - ) - -(global-set-key [f7] 'repl-load) - -(defun repl-decl nil - (interactive) - (query-replace-regexp - "\\(Libobject\.\\)?declare_object[ - ]*([ ]*\\(.*\\)[ - ]*,[ ]* -\\([ ]*\\){\\([ ]*\\)\\([^ ][^}]*\\)}[ ]*)" - - "\\1declare_object {(\\1default_object \\2) with -\\3 \\4\\5}") -; "|$1=\\1|$2=\\2|$3=\\3|$4=\\4|") -) - -(global-set-key [f9] 'repl-decl) - -; eval the above and try f9 f6 f7 on the following: - -let (inThing,outThing) = - declare_object - ("THING", - { load_function = cache_thing; - cache_function = cache_thing; - open_function = cache_thing; - export_function = (function x -> Some x) - }) - - -;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -; functions helping writing non-copying substitutions - -(defun make-subst (name) - (interactive "s") - (defun f (l) - (save-excursion - (query-replace-regexp - (concat "\\([a-zA-z_0-9]*\\)[ ]*:[ ]*" - (car l) - "\\([ ]*;\\|[ -]*\}\\)") - (concat "let \\1\' = " (cdr l) " " name "\\1 in")) - ) - ) - (mapcar 'f '(("constr"."subst_mps subst") - ("Coqast.t"."subst_ast subst") - ("Coqast.t list"."list_smartmap (subst_ast subst)") - ("'pat"."subst_pat subst") - ("'pat unparsing_hunk"."subst_hunk subst_pat subst") - ("'pat unparsing_hunk list"."list_smartmap (subst_hunk subst_pat subst)") - ("'pat syntax_entry"."subst_syntax_entry subst_pat subst") - ("'pat syntax_entry list"."list_smartmap (subst_syntax_entry subst_pat subst)") - ("constr option"."option_smartmap (subst_mps subst)") - ("constr list"."list_smartmap (subst_mps subst)") - ("constr array"."array_smartmap (subst_mps subst)") - ("constr_pattern"."subst_pattern subst") - ("constr_pattern option"."option_smartmap (subst_pattern subst)") - ("constr_pattern array"."array_smartmap (subst_pattern subst)") - ("constr_pattern list"."list_smartmap (subst_pattern subst)") - ("global_reference"."subst_global subst") - ("extended_global_reference"."subst_ext subst") - ("obj_typ"."subst_obj subst") - ) - ) - ) - - -(global-set-key [f2] 'make-subst) - -(defun make-if (name) - (interactive "s") - (save-excursion - (query-replace-regexp - "\\([a-zA-z_0-9]*\\)[ ]*:[ ]*['a-zA-z_. ]*\\(;\\|[ -]*\}\\)" - (concat "&& \\1\' == " name "\\1") - ) - ) - ) - -(global-set-key [f4] 'make-if) - -(defun make-record nil - (interactive) - (save-excursion - (query-replace-regexp - "\\([a-zA-z_0-9]*\\)[ ]*:[ ]*['a-zA-z_. ]*\\(;\\|[ -]*\}\\)" - (concat "\\1 = \\1\' ;") - ) - ) - ) - -(global-set-key [f5] 'make-record) - -(defun make-prim nil - (interactive) - (save-excursion (query-replace-regexp "\\<[a-zA-Z'_0-9]*\\>" "\\&'")) - ) - -(global-set-key [f6] 'make-prim) - - -; eval the above, yank the text below and do -; paste f2 morph. -; paste f4 morph. -; paste f5 - - lem : constr; - profil : bool list; - arg_types : constr list; - lem2 : constr option } - - -; and you almost get Setoid_replace.subst_morph :) - -; and now f5 on this: - - (ref,(c1,c2)) - - - diff --git a/dev/ocamldebug-coq.template b/dev/ocamldebug-coq.template index 30224216..5c4c4475 100644 --- a/dev/ocamldebug-coq.template +++ b/dev/ocamldebug-coq.template @@ -36,7 +36,7 @@ case $coqdebug in -I $COQTOP/contrib/interface -I $COQTOP/contrib/jprover \ -I $COQTOP/contrib/omega -I $COQTOP/contrib/romega \ -I $COQTOP/contrib/ring -I $COQTOP/contrib/xml \ - -I $COQTOP/contrib/subtac \ + -I $COQTOP/contrib/subtac -I $COQTOP/contrib/funind \ $* $args;; *) exec $OCAMLDEBUG $*;; esac diff --git a/dev/ocamlweb-doc/Makefile b/dev/ocamlweb-doc/Makefile new file mode 100644 index 00000000..96491017 --- /dev/null +++ b/dev/ocamlweb-doc/Makefile @@ -0,0 +1,75 @@ + +# Makefile for doc/ + +all:: newparse coq.ps minicop.ps +#newsyntax.dvi minicoq.dvi + + +OBJS=lex.cmo ast.cmo parse.cmo syntax.cmo + +newparse: $(OBJS) syntax.mli lex.ml syntax.ml + ocamlc -o newparse $(OBJS) + +%.cmo: %.ml + ocamlc -c $< + +%.cmi: %.mli + ocamlc -c $< + +%.ml: %.mll + ocamllex $< + +%.ml: %.mly + ocamlyacc -v $< + +%.mli: %.mly + ocamlyacc -v $< + +clean:: + rm -f *.cm* *.output syntax.ml syntax.mli lex.ml newparse + +parse.cmo: ast.cmo +syntax.cmi: parse.cmo +syntax.cmo: lex.cmo parse.cmo syntax.cmi +lex.cmo: syntax.cmi +ast.cmo: ast.ml + +newsyntax.dvi: newsyntax.tex + latex $< + latex $< + +coq.dvi: coq.tex + latex coq + latex coq + +coq.tex:: + ocamlweb -p "\usepackage{epsfig}" \ + macros.tex intro.tex \ + ../../lib/{doc.tex,*.mli} ../../kernel/{doc.tex,*.mli} ../../library/{doc.tex,*.mli} \ + ../../pretyping/{doc.tex,*.mli} ../../interp/{doc.tex,*.mli} \ + ../../parsing/{doc.tex,*.mli} ../../proofs/{doc.tex,*.mli} \ + ../../tactics/{doc.tex,*.mli} ../../toplevel/{doc.tex,*.mli} \ + -o coq.tex + + +depend:: kernel.dep.ps library.dep.ps pretyping.dep.ps parsing.dep.ps \ + proofs.dep.ps tactics.dep.ps toplevel.dep.ps interp.dep.ps + +%.dot: ../% + (cd ../$*; ocamldep *.ml *.mli) | ocamldot -lr > $@ + +%.dep.ps: %.dot + dot -Tps $< -o $@ + +clean:: + rm -f *~ *.log *.aux + +.SUFFIXES: .tex .dvi .ps .cmo .cmi .mli .ml .mll .mly + +%.dvi: %.tex + latex $< && latex $< + +%.ps: %.dvi + dvips $< -o $@ + + diff --git a/dev/ocamlweb-doc/ast.ml b/dev/ocamlweb-doc/ast.ml new file mode 100644 index 00000000..2153ef47 --- /dev/null +++ b/dev/ocamlweb-doc/ast.ml @@ -0,0 +1,47 @@ + +type constr_ast = + Pair of constr_ast * constr_ast +| Prod of binder list * constr_ast +| Lambda of binder list * constr_ast +| Let of string * constr_ast * constr_ast +| LetCase of binder list * constr_ast * constr_ast +| IfCase of constr_ast * constr_ast * constr_ast +| Eval of red_fun * constr_ast +| Infix of string * constr_ast * constr_ast +| Prefix of string * constr_ast +| Postfix of string * constr_ast +| Appl of constr_ast * constr_arg list +| ApplExpl of string list * constr_ast list +| Scope of string * constr_ast +| Qualid of string list +| Prop | Set | Type +| Int of string +| Hole +| Meta of string +| Fixp of fix_kind * + (string * binder list * constr_ast * string option * constr_ast) list * + string +| Match of case_item list * constr_ast option * + (pattern list * constr_ast) list + +and red_fun = Simpl + +and binder = string * constr_ast + +and constr_arg = string option * constr_ast + +and fix_kind = Fix | CoFix + +and case_item = constr_ast * (string option * constr_ast option) + +and pattern = + PatAs of pattern * string +| PatType of pattern * constr_ast +| PatConstr of string * pattern list +| PatVar of string + +let mk_cast c t = + if t=Hole then c else Infix(":",c,t) + +let mk_lambda bl t = + if bl=[] then t else Lambda(bl,t) diff --git a/dev/ocamlweb-doc/interp.dep.ps b/dev/ocamlweb-doc/interp.dep.ps new file mode 100644 index 00000000..b0554481 --- /dev/null +++ b/dev/ocamlweb-doc/interp.dep.ps @@ -0,0 +1,583 @@ +%!PS-Adobe-2.0 +%%Creator: dot version 2.2 (Wed Jan 19 21:09:25 UTC 2005) +%%For: (herbelin) Hugo Herbelin +%%Title: G +%%Pages: (atend) +%%BoundingBox: 35 35 577 160 +%%EndComments +save +%%BeginProlog +/DotDict 200 dict def +DotDict begin + +/setupLatin1 { +mark +/EncodingVector 256 array def + EncodingVector 0 + +ISOLatin1Encoding 0 255 getinterval putinterval + +EncodingVector + dup 306 /AE + dup 301 /Aacute + dup 302 /Acircumflex + dup 304 /Adieresis + dup 300 /Agrave + dup 305 /Aring + dup 303 /Atilde + dup 307 /Ccedilla + dup 311 /Eacute + dup 312 /Ecircumflex + dup 313 /Edieresis + dup 310 /Egrave + dup 315 /Iacute + dup 316 /Icircumflex + dup 317 /Idieresis + dup 314 /Igrave + dup 334 /Udieresis + dup 335 /Yacute + dup 376 /thorn + dup 337 /germandbls + dup 341 /aacute + dup 342 /acircumflex + dup 344 /adieresis + dup 346 /ae + dup 340 /agrave + dup 345 /aring + dup 347 /ccedilla + dup 351 /eacute + dup 352 /ecircumflex + dup 353 /edieresis + dup 350 /egrave + dup 355 /iacute + dup 356 /icircumflex + dup 357 /idieresis + dup 354 /igrave + dup 360 /dcroat + dup 361 /ntilde + dup 363 /oacute + dup 364 /ocircumflex + dup 366 /odieresis + dup 362 /ograve + dup 365 /otilde + dup 370 /oslash + dup 372 /uacute + dup 373 /ucircumflex + dup 374 /udieresis + dup 371 /ugrave + dup 375 /yacute + dup 377 /ydieresis + +% Set up ISO Latin 1 character encoding +/starnetISO { + dup dup findfont dup length dict begin + { 1 index /FID ne { def }{ pop pop } ifelse + } forall + /Encoding EncodingVector def + currentdict end definefont +} def +/Times-Roman starnetISO def +/Times-Italic starnetISO def +/Times-Bold starnetISO def +/Times-BoldItalic starnetISO def +/Helvetica starnetISO def +/Helvetica-Oblique starnetISO def +/Helvetica-Bold starnetISO def +/Helvetica-BoldOblique starnetISO def +/Courier starnetISO def +/Courier-Oblique starnetISO def +/Courier-Bold starnetISO def +/Courier-BoldOblique starnetISO def +cleartomark +} bind def + +%%BeginResource: procset graphviz 0 0 +/coord-font-family /Times-Roman def +/default-font-family /Times-Roman def +/coordfont coord-font-family findfont 8 scalefont def + +/InvScaleFactor 1.0 def +/set_scale { + dup 1 exch div /InvScaleFactor exch def + dup scale +} bind def + +% styles +/solid { [] 0 setdash } bind def +/dashed { [9 InvScaleFactor mul dup ] 0 setdash } bind def +/dotted { [1 InvScaleFactor mul 6 InvScaleFactor mul] 0 setdash } bind def +/invis {/fill {newpath} def /stroke {newpath} def /show {pop newpath} def} bind def +/bold { 2 setlinewidth } bind def +/filled { } bind def +/unfilled { } bind def +/rounded { } bind def +/diagonals { } bind def + +% hooks for setting color +/nodecolor { sethsbcolor } bind def +/edgecolor { sethsbcolor } bind def +/graphcolor { sethsbcolor } bind def +/nopcolor {pop pop pop} bind def + +/beginpage { % i j npages + /npages exch def + /j exch def + /i exch def + /str 10 string def + npages 1 gt { + gsave + coordfont setfont + 0 0 moveto + (\() show i str cvs show (,) show j str cvs show (\)) show + grestore + } if +} bind def + +/set_font { + findfont exch + scalefont setfont +} def + +% draw aligned label in bounding box aligned to current point +/alignedtext { % width adj text + /text exch def + /adj exch def + /width exch def + gsave + width 0 gt { + text stringwidth pop adj mul 0 rmoveto + } if + [] 0 setdash + text show + grestore +} def + +/boxprim { % xcorner ycorner xsize ysize + 4 2 roll + moveto + 2 copy + exch 0 rlineto + 0 exch rlineto + pop neg 0 rlineto + closepath +} bind def + +/ellipse_path { + /ry exch def + /rx exch def + /y exch def + /x exch def + matrix currentmatrix + newpath + x y translate + rx ry scale + 0 0 1 0 360 arc + setmatrix +} bind def + +/endpage { showpage } bind def +/showpage { } def + +/layercolorseq + [ % layer color sequence - darkest to lightest + [0 0 0] + [.2 .8 .8] + [.4 .8 .8] + [.6 .8 .8] + [.8 .8 .8] + ] +def + +/layerlen layercolorseq length def + +/setlayer {/maxlayer exch def /curlayer exch def + layercolorseq curlayer 1 sub layerlen mod get + aload pop sethsbcolor + /nodecolor {nopcolor} def + /edgecolor {nopcolor} def + /graphcolor {nopcolor} def +} bind def + +/onlayer { curlayer ne {invis} if } def + +/onlayers { + /myupper exch def + /mylower exch def + curlayer mylower lt + curlayer myupper gt + or + {invis} if +} def + +/curlayer 0 def + +%%EndResource +%%EndProlog +%%BeginSetup +14 default-font-family set_font +1 setmiterlimit +% /arrowlength 10 def +% /arrowwidth 5 def + +% make sure pdfmark is harmless for PS-interpreters other than Distiller +/pdfmark where {pop} {userdict /pdfmark /cleartomark load put} ifelse +% make '<<' and '>>' safe on PS Level 1 devices +/languagelevel where {pop languagelevel}{1} ifelse +2 lt { + userdict (<<) cvn ([) cvn load put + userdict (>>) cvn ([) cvn load put +} if + +%%EndSetup +%%Page: 1 1 +%%PageBoundingBox: 36 36 577 160 +%%PageOrientation: Portrait +gsave +35 35 542 125 boxprim clip newpath +36 36 translate +0 0 1 beginpage +0.9343 set_scale +0 0 translate 0 rotate +0.000 0.000 0.000 graphcolor +14.00 /Times-Roman set_font + +% Syntax_def +gsave 10 dict begin +303 110 45 18 ellipse_path +stroke +gsave 10 dict begin +271 105 moveto +(Syntax_def) +[7.68 6.96 6.96 4.08 6.24 6.96 6.96 6.96 6.24 4.56] +xshow +end grestore +end grestore + +% Notation +gsave 10 dict begin +422 60 38 18 ellipse_path +stroke +gsave 10 dict begin +397 55 moveto +(Notation) +[9.84 6.72 4.08 6.24 3.84 3.84 6.96 6.96] +xshow +end grestore +end grestore + +% Syntax_def -> Notation +newpath 334 97 moveto +350 90 369 83 385 76 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 386 79 moveto +394 72 lineto +383 73 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 386 79 moveto +394 72 lineto +383 73 lineto +closepath +stroke +end grestore + +% Ppextend +gsave 10 dict begin +537 60 39 18 ellipse_path +stroke +gsave 10 dict begin +511 55 moveto +(Ppextend) +[7.68 6.96 5.76 6.96 3.84 6.24 6.96 6.96] +xshow +end grestore +end grestore + +% Notation -> Ppextend +newpath 460 60 moveto +469 60 478 60 488 60 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 488 64 moveto +498 60 lineto +488 57 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 488 64 moveto +498 60 lineto +488 57 lineto +closepath +stroke +end grestore + +% Topconstr +gsave 10 dict begin +537 114 41 18 ellipse_path +stroke +gsave 10 dict begin +509 109 moveto +(Topconstr) +[7.2 6.96 6.96 6.24 6.96 6.96 5.28 3.84 4.56] +xshow +end grestore +end grestore + +% Notation -> Topconstr +newpath 449 73 moveto +464 80 483 89 500 97 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 498 100 moveto +509 101 lineto +501 94 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 498 100 moveto +509 101 lineto +501 94 lineto +closepath +stroke +end grestore + +% Modintern +gsave 10 dict begin +44 98 43 18 ellipse_path +stroke +gsave 10 dict begin +13 93 moveto +(Modintern) +[12.48 6.96 6.96 3.84 6.96 3.84 6.24 4.8 6.96] +xshow +end grestore +end grestore + +% Constrintern +gsave 10 dict begin +173 98 48 18 ellipse_path +stroke +gsave 10 dict begin +138 93 moveto +(Constrintern) +[9.36 6.96 6.96 5.28 3.84 4.8 3.84 6.96 3.84 6.24 4.8 6.96] +xshow +end grestore +end grestore + +% Modintern -> Constrintern +newpath 88 98 moveto +97 98 106 98 115 98 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 115 102 moveto +125 98 lineto +115 95 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 115 102 moveto +125 98 lineto +115 95 lineto +closepath +stroke +end grestore + +% Constrintern -> Syntax_def +newpath 220 102 moveto +229 103 239 104 249 105 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 249 108 moveto +259 106 lineto +249 102 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 249 108 moveto +259 106 lineto +249 102 lineto +closepath +stroke +end grestore + +% Reserve +gsave 10 dict begin +303 56 35 18 ellipse_path +stroke +gsave 10 dict begin +280 51 moveto +(Reserve) +[9.12 6.24 5.52 6.24 4.8 6.48 6.24] +xshow +end grestore +end grestore + +% Constrintern -> Reserve +newpath 210 86 moveto +227 81 246 75 263 69 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 264 72 moveto +273 66 lineto +262 66 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 264 72 moveto +273 66 lineto +262 66 lineto +closepath +stroke +end grestore + +% Genarg +gsave 10 dict begin +422 114 33 18 ellipse_path +stroke +gsave 10 dict begin +401 109 moveto +(Genarg) +[10.08 6.24 6.96 6.24 4.32 6.96] +xshow +end grestore +end grestore + +% Genarg -> Topconstr +newpath 456 114 moveto +465 114 476 114 486 114 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 486 118 moveto +496 114 lineto +486 111 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 486 118 moveto +496 114 lineto +486 111 lineto +closepath +stroke +end grestore + +% Coqlib +gsave 10 dict begin +44 21 32 18 ellipse_path +stroke +gsave 10 dict begin +24 16 moveto +(Coqlib) +[9.36 6.96 6.96 3.84 3.84 6.96] +xshow +end grestore +end grestore + +% Constrextern +gsave 10 dict begin +173 21 49 18 ellipse_path +stroke +gsave 10 dict begin +137 16 moveto +(Constrextern) +[9.36 6.96 6.96 5.28 3.84 4.56 5.76 6.96 3.84 6.24 4.8 6.96] +xshow +end grestore +end grestore + +% Coqlib -> Constrextern +newpath 77 21 moveto +88 21 101 21 114 21 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 114 25 moveto +124 21 lineto +114 18 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 114 25 moveto +124 21 lineto +114 18 lineto +closepath +stroke +end grestore + +% Constrextern -> Notation +newpath 222 19 moveto +257 18 307 20 348 29 curveto +361 31 375 37 388 42 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 386 45 moveto +397 46 lineto +389 39 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 386 45 moveto +397 46 lineto +389 39 lineto +closepath +stroke +end grestore + +% Constrextern -> Reserve +newpath 213 32 moveto +228 36 246 41 261 45 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 260 48 moveto +271 48 lineto +262 42 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 260 48 moveto +271 48 lineto +262 42 lineto +closepath +stroke +end grestore +endpage +showpage +grestore +%%PageTrailer +%%EndPage: 1 +%%Trailer +%%Pages: 1 +end +restore +%%EOF diff --git a/dev/ocamlweb-doc/intro.tex b/dev/ocamlweb-doc/intro.tex new file mode 100644 index 00000000..4cec8673 --- /dev/null +++ b/dev/ocamlweb-doc/intro.tex @@ -0,0 +1,25 @@ + +\ocwsection This is \Coq, a proof assistant for the \CCI. +This document describes the implementation of \Coq. +It has been automatically generated from the source of +\Coq\ using \textsf{ocamlweb}, a literate programming tool for +\textsf{Objective Caml}\footnote{\Coq, \textsf{Objective Caml} and + \textsf{ocamlweb} are all freely available at + \textsf{http://coq.inria.fr/}, \textsf{http://caml.inria.fr/} and + \textsf{http://www.lri.fr/\~{}filliatr/ocamlweb}.}. +The source files are organized in several directories, which are +described here as separate chapters. + +\begin{center} + \begin{tabular}{p{10cm}rr} + Chapter & section & page \\[0.5em] + \hline\\[0.2em] + Utility libraries \dotfill & \refsec{lib} & \pageref{lib} \\[0.5em] + Kernel \dotfill & \refsec{kernel} & \pageref{kernel} \\[0.5em] + Library \dotfill & \refsec{library} & \pageref{library} \\[0.5em] + Pretyping \dotfill & \refsec{pretyping} & \pageref{pretyping} \\[0.5em] + Proof engine \dotfill & \refsec{proofs} & \pageref{proofs} \\[0.5em] + Tactics \dotfill & \refsec{tactics} & \pageref{tactics} \\[0.5em] + Toplevel \dotfill & \refsec{toplevel}& \pageref{toplevel}\\[0.5em] + \end{tabular} +\end{center} \ No newline at end of file diff --git a/dev/ocamlweb-doc/kernel.dep.ps b/dev/ocamlweb-doc/kernel.dep.ps new file mode 100644 index 00000000..3c00121e --- /dev/null +++ b/dev/ocamlweb-doc/kernel.dep.ps @@ -0,0 +1,1454 @@ +%!PS-Adobe-2.0 +%%Creator: dot version 2.2 (Wed Jan 19 21:09:25 UTC 2005) +%%For: (herbelin) Hugo Herbelin +%%Title: G +%%Pages: (atend) +%%BoundingBox: 35 35 577 127 +%%EndComments +save +%%BeginProlog +/DotDict 200 dict def +DotDict begin + +/setupLatin1 { +mark +/EncodingVector 256 array def + EncodingVector 0 + +ISOLatin1Encoding 0 255 getinterval putinterval + +EncodingVector + dup 306 /AE + dup 301 /Aacute + dup 302 /Acircumflex + dup 304 /Adieresis + dup 300 /Agrave + dup 305 /Aring + dup 303 /Atilde + dup 307 /Ccedilla + dup 311 /Eacute + dup 312 /Ecircumflex + dup 313 /Edieresis + dup 310 /Egrave + dup 315 /Iacute + dup 316 /Icircumflex + dup 317 /Idieresis + dup 314 /Igrave + dup 334 /Udieresis + dup 335 /Yacute + dup 376 /thorn + dup 337 /germandbls + dup 341 /aacute + dup 342 /acircumflex + dup 344 /adieresis + dup 346 /ae + dup 340 /agrave + dup 345 /aring + dup 347 /ccedilla + dup 351 /eacute + dup 352 /ecircumflex + dup 353 /edieresis + dup 350 /egrave + dup 355 /iacute + dup 356 /icircumflex + dup 357 /idieresis + dup 354 /igrave + dup 360 /dcroat + dup 361 /ntilde + dup 363 /oacute + dup 364 /ocircumflex + dup 366 /odieresis + dup 362 /ograve + dup 365 /otilde + dup 370 /oslash + dup 372 /uacute + dup 373 /ucircumflex + dup 374 /udieresis + dup 371 /ugrave + dup 375 /yacute + dup 377 /ydieresis + +% Set up ISO Latin 1 character encoding +/starnetISO { + dup dup findfont dup length dict begin + { 1 index /FID ne { def }{ pop pop } ifelse + } forall + /Encoding EncodingVector def + currentdict end definefont +} def +/Times-Roman starnetISO def +/Times-Italic starnetISO def +/Times-Bold starnetISO def +/Times-BoldItalic starnetISO def +/Helvetica starnetISO def +/Helvetica-Oblique starnetISO def +/Helvetica-Bold starnetISO def +/Helvetica-BoldOblique starnetISO def +/Courier starnetISO def +/Courier-Oblique starnetISO def +/Courier-Bold starnetISO def +/Courier-BoldOblique starnetISO def +cleartomark +} bind def + +%%BeginResource: procset graphviz 0 0 +/coord-font-family /Times-Roman def +/default-font-family /Times-Roman def +/coordfont coord-font-family findfont 8 scalefont def + +/InvScaleFactor 1.0 def +/set_scale { + dup 1 exch div /InvScaleFactor exch def + dup scale +} bind def + +% styles +/solid { [] 0 setdash } bind def +/dashed { [9 InvScaleFactor mul dup ] 0 setdash } bind def +/dotted { [1 InvScaleFactor mul 6 InvScaleFactor mul] 0 setdash } bind def +/invis {/fill {newpath} def /stroke {newpath} def /show {pop newpath} def} bind def +/bold { 2 setlinewidth } bind def +/filled { } bind def +/unfilled { } bind def +/rounded { } bind def +/diagonals { } bind def + +% hooks for setting color +/nodecolor { sethsbcolor } bind def +/edgecolor { sethsbcolor } bind def +/graphcolor { sethsbcolor } bind def +/nopcolor {pop pop pop} bind def + +/beginpage { % i j npages + /npages exch def + /j exch def + /i exch def + /str 10 string def + npages 1 gt { + gsave + coordfont setfont + 0 0 moveto + (\() show i str cvs show (,) show j str cvs show (\)) show + grestore + } if +} bind def + +/set_font { + findfont exch + scalefont setfont +} def + +% draw aligned label in bounding box aligned to current point +/alignedtext { % width adj text + /text exch def + /adj exch def + /width exch def + gsave + width 0 gt { + text stringwidth pop adj mul 0 rmoveto + } if + [] 0 setdash + text show + grestore +} def + +/boxprim { % xcorner ycorner xsize ysize + 4 2 roll + moveto + 2 copy + exch 0 rlineto + 0 exch rlineto + pop neg 0 rlineto + closepath +} bind def + +/ellipse_path { + /ry exch def + /rx exch def + /y exch def + /x exch def + matrix currentmatrix + newpath + x y translate + rx ry scale + 0 0 1 0 360 arc + setmatrix +} bind def + +/endpage { showpage } bind def +/showpage { } def + +/layercolorseq + [ % layer color sequence - darkest to lightest + [0 0 0] + [.2 .8 .8] + [.4 .8 .8] + [.6 .8 .8] + [.8 .8 .8] + ] +def + +/layerlen layercolorseq length def + +/setlayer {/maxlayer exch def /curlayer exch def + layercolorseq curlayer 1 sub layerlen mod get + aload pop sethsbcolor + /nodecolor {nopcolor} def + /edgecolor {nopcolor} def + /graphcolor {nopcolor} def +} bind def + +/onlayer { curlayer ne {invis} if } def + +/onlayers { + /myupper exch def + /mylower exch def + curlayer mylower lt + curlayer myupper gt + or + {invis} if +} def + +/curlayer 0 def + +%%EndResource +%%EndProlog +%%BeginSetup +14 default-font-family set_font +1 setmiterlimit +% /arrowlength 10 def +% /arrowwidth 5 def + +% make sure pdfmark is harmless for PS-interpreters other than Distiller +/pdfmark where {pop} {userdict /pdfmark /cleartomark load put} ifelse +% make '<<' and '>>' safe on PS Level 1 devices +/languagelevel where {pop languagelevel}{1} ifelse +2 lt { + userdict (<<) cvn ([) cvn load put + userdict (>>) cvn ([) cvn load put +} if + +%%EndSetup +%%Page: 1 1 +%%PageBoundingBox: 36 36 577 127 +%%PageOrientation: Portrait +gsave +35 35 542 92 boxprim clip newpath +36 36 translate +0 0 1 beginpage +0.2845 set_scale +0 0 translate 0 rotate +0.000 0.000 0.000 graphcolor +14.00 /Times-Roman set_font + +% Vm +gsave 10 dict begin +801 294 27 18 ellipse_path +stroke +gsave 10 dict begin +789 289 moveto +(Vm) +[10.08 10.8] +xshow +end grestore +end grestore + +% Cemitcodes +gsave 10 dict begin +1427 200 46 18 ellipse_path +stroke +gsave 10 dict begin +1393 195 moveto +(Cemitcodes) +[9.36 6.24 10.8 3.84 3.84 6.24 6.96 6.96 6.24 5.52] +xshow +end grestore +end grestore + +% Vm -> Cemitcodes +newpath 826 287 moveto +871 276 969 254 1053 254 curveto +1053 254 1053 254 1174 254 curveto +1249 254 1332 231 1382 215 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 1383 218 moveto +1392 212 lineto +1381 212 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 1383 218 moveto +1392 212 lineto +1381 212 lineto +closepath +stroke +end grestore + +% Conv_oracle +gsave 10 dict begin +1053 300 48 18 ellipse_path +stroke +gsave 10 dict begin +1017 295 moveto +(Conv_oracle) +[9.36 6.96 6.48 6.96 6.96 6.96 4.56 6.24 6.24 3.84 6.24] +xshow +end grestore +end grestore + +% Vm -> Conv_oracle +newpath 828 295 moveto +868 296 942 298 995 299 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 995 303 moveto +1005 299 lineto +995 296 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 995 303 moveto +1005 299 lineto +995 296 lineto +closepath +stroke +end grestore + +% Mod_subst +gsave 10 dict begin +1556 146 45 18 ellipse_path +stroke +gsave 10 dict begin +1524 141 moveto +(Mod_subst) +[12.48 6.96 6.96 6.96 5.52 6.96 6.96 5.28 3.84] +xshow +end grestore +end grestore + +% Cemitcodes -> Mod_subst +newpath 1459 187 moveto +1476 180 1497 171 1516 163 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 1517 166 moveto +1525 159 lineto +1514 160 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 1517 166 moveto +1525 159 lineto +1514 160 lineto +closepath +stroke +end grestore + +% Cbytecodes +gsave 10 dict begin +1556 200 45 18 ellipse_path +stroke +gsave 10 dict begin +1523 195 moveto +(Cbytecodes) +[9.36 6.48 6.96 3.84 6.24 6.24 6.96 6.96 6.24 5.52] +xshow +end grestore +end grestore + +% Cemitcodes -> Cbytecodes +newpath 1474 200 moveto +1482 200 1491 200 1500 200 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 1500 204 moveto +1510 200 lineto +1500 197 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 1500 204 moveto +1510 200 lineto +1500 197 lineto +closepath +stroke +end grestore + +% Copcodes +gsave 10 dict begin +1556 254 41 18 ellipse_path +stroke +gsave 10 dict begin +1528 249 moveto +(Copcodes) +[9.36 6.96 6.96 6.24 6.96 6.96 6.24 5.52] +xshow +end grestore +end grestore + +% Cemitcodes -> Copcodes +newpath 1459 213 moveto +1476 221 1498 230 1517 237 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 1515 240 moveto +1526 241 lineto +1518 234 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 1515 240 moveto +1526 241 lineto +1518 234 lineto +closepath +stroke +end grestore + +% Names +gsave 10 dict begin +1865 270 33 18 ellipse_path +stroke +gsave 10 dict begin +1845 265 moveto +(Names) +[9.6 6.24 10.8 6.24 5.52] +xshow +end grestore +end grestore + +% Conv_oracle -> Names +newpath 1102 300 moveto +1151 300 1228 300 1295 300 curveto +1295 300 1295 300 1666 300 curveto +1722 300 1785 288 1825 279 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 1826 282 moveto +1835 277 lineto +1825 276 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 1826 282 moveto +1835 277 lineto +1825 276 lineto +closepath +stroke +end grestore + +% Vconv +gsave 10 dict begin +552 202 32 18 ellipse_path +stroke +gsave 10 dict begin +533 197 moveto +(Vconv) +[10.08 6.24 6.96 6.48 6.96] +xshow +end grestore +end grestore + +% Csymtable +gsave 10 dict begin +674 202 43 18 ellipse_path +stroke +gsave 10 dict begin +643 197 moveto +(Csymtable) +[9.36 5.52 6.96 10.8 4.08 6.24 6.96 3.84 6.24] +xshow +end grestore +end grestore + +% Vconv -> Csymtable +newpath 584 202 moveto +595 202 608 202 620 202 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 620 206 moveto +630 202 lineto +620 199 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 620 206 moveto +630 202 lineto +620 199 lineto +closepath +stroke +end grestore + +% Inductive +gsave 10 dict begin +674 110 39 18 ellipse_path +stroke +gsave 10 dict begin +647 105 moveto +(Inductive) +[4.56 6.96 6.96 6.96 6.24 3.84 3.84 6.48 6.24] +xshow +end grestore +end grestore + +% Vconv -> Inductive +newpath 571 187 moveto +591 172 622 149 645 132 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 647 135 moveto +653 126 lineto +643 129 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 647 135 moveto +653 126 lineto +643 129 lineto +closepath +stroke +end grestore + +% Csymtable -> Vm +newpath 696 218 moveto +717 234 751 258 775 275 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 773 278 moveto +783 281 lineto +777 272 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 773 278 moveto +783 281 lineto +777 272 lineto +closepath +stroke +end grestore + +% Cbytegen +gsave 10 dict begin +801 164 39 18 ellipse_path +stroke +gsave 10 dict begin +774 159 moveto +(Cbytegen) +[9.36 6.48 6.96 3.84 6.24 6.72 6.24 6.96] +xshow +end grestore +end grestore + +% Csymtable -> Cbytegen +newpath 709 191 moveto +724 187 742 181 758 177 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 759 180 moveto +768 174 lineto +757 174 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 759 180 moveto +768 174 lineto +757 174 lineto +closepath +stroke +end grestore + +% Type_errors +gsave 10 dict begin +801 110 47 18 ellipse_path +stroke +gsave 10 dict begin +767 105 moveto +(Type_errors) +[6.96 6.96 6.96 6.24 6.96 6.24 5.04 4.56 6.96 4.56 5.52] +xshow +end grestore +end grestore + +% Inductive -> Type_errors +newpath 714 110 moveto +724 110 734 110 744 110 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 744 114 moveto +754 110 lineto +744 107 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 744 114 moveto +754 110 lineto +744 107 lineto +closepath +stroke +end grestore + +% Univ +gsave 10 dict begin +1763 241 27 18 ellipse_path +stroke +gsave 10 dict begin +1748 236 moveto +(Univ) +[9.6 6.96 3.84 6.96] +xshow +end grestore +end grestore + +% Univ -> Names +newpath 1788 248 moveto +1800 251 1814 255 1826 259 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 1825 262 moveto +1836 262 lineto +1827 256 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 1825 262 moveto +1836 262 lineto +1827 256 lineto +closepath +stroke +end grestore + +% Typeops +gsave 10 dict begin +552 110 36 18 ellipse_path +stroke +gsave 10 dict begin +528 105 moveto +(Typeops) +[6.96 6.96 6.96 6.24 6.96 6.96 5.52] +xshow +end grestore +end grestore + +% Typeops -> Inductive +newpath 589 110 moveto +600 110 612 110 624 110 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 624 114 moveto +634 110 lineto +624 107 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 624 114 moveto +634 110 lineto +624 107 lineto +closepath +stroke +end grestore + +% Entries +gsave 10 dict begin +801 56 33 18 ellipse_path +stroke +gsave 10 dict begin +780 51 moveto +(Entries) +[8.4 6.96 3.84 4.8 3.84 6.24 5.52] +xshow +end grestore +end grestore + +% Typeops -> Entries +newpath 581 99 moveto +595 93 614 87 630 83 curveto +673 73 723 66 758 61 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 758 64 moveto +768 60 lineto +758 58 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 758 64 moveto +768 60 lineto +758 58 lineto +closepath +stroke +end grestore + +% Sign +gsave 10 dict begin +1427 100 27 18 ellipse_path +stroke +gsave 10 dict begin +1414 95 moveto +(Sign) +[7.68 3.84 6.96 6.96] +xshow +end grestore +end grestore + +% Entries -> Sign +newpath 834 61 moveto +882 68 974 79 1053 79 curveto +1053 79 1053 79 1174 79 curveto +1251 79 1342 89 1390 95 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 1390 98 moveto +1400 96 lineto +1390 92 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 1390 98 moveto +1400 96 lineto +1390 92 lineto +closepath +stroke +end grestore + +% Reduction +gsave 10 dict begin +926 208 42 18 ellipse_path +stroke +gsave 10 dict begin +897 203 moveto +(Reduction) +[9.12 6.24 6.96 6.96 6.24 3.84 3.84 6.96 6.96] +xshow +end grestore +end grestore + +% Type_errors -> Reduction +newpath 829 125 moveto +836 129 842 133 848 137 curveto +868 151 887 170 902 184 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 900 187 moveto +910 191 lineto +905 182 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 900 187 moveto +910 191 lineto +905 182 lineto +closepath +stroke +end grestore + +% Reduction -> Conv_oracle +newpath 948 224 moveto +968 239 999 261 1023 278 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 1021 281 moveto +1031 284 lineto +1025 275 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 1021 281 moveto +1031 284 lineto +1025 275 lineto +closepath +stroke +end grestore + +% Closure +gsave 10 dict begin +1053 208 35 18 ellipse_path +stroke +gsave 10 dict begin +1031 203 moveto +(Closure) +[9.36 3.84 6.96 5.52 6.96 4.56 6.24] +xshow +end grestore +end grestore + +% Reduction -> Closure +newpath 968 208 moveto +981 208 994 208 1008 208 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 1008 212 moveto +1018 208 lineto +1008 205 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 1008 212 moveto +1018 208 lineto +1008 205 lineto +closepath +stroke +end grestore + +% Term_typing +gsave 10 dict begin +313 110 49 18 ellipse_path +stroke +gsave 10 dict begin +277 105 moveto +(Term_typing) +[7.2 6.24 4.8 10.8 6.96 3.84 6.96 6.96 3.84 6.96 6.96] +xshow +end grestore +end grestore + +% Term_typing -> Cbytegen +newpath 347 123 moveto +363 128 381 134 398 137 curveto +524 161 675 165 752 165 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 752 169 moveto +762 165 lineto +752 162 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 752 169 moveto +762 165 lineto +752 162 lineto +closepath +stroke +end grestore + +% Cooking +gsave 10 dict begin +436 225 37 18 ellipse_path +stroke +gsave 10 dict begin +411 220 moveto +(Cooking) +[9.36 6.96 6.96 6.96 3.84 6.96 6.96] +xshow +end grestore +end grestore + +% Term_typing -> Cooking +newpath 331 127 moveto +352 147 387 179 410 202 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 408 205 moveto +418 209 lineto +413 200 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 408 205 moveto +418 209 lineto +413 200 lineto +closepath +stroke +end grestore + +% Indtypes +gsave 10 dict begin +436 110 37 18 ellipse_path +stroke +gsave 10 dict begin +411 105 moveto +(Indtypes) +[4.56 6.96 6.96 3.84 6.96 6.96 6.24 5.52] +xshow +end grestore +end grestore + +% Term_typing -> Indtypes +newpath 362 110 moveto +370 110 379 110 388 110 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 388 114 moveto +398 110 lineto +388 107 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 388 114 moveto +398 110 lineto +388 107 lineto +closepath +stroke +end grestore + +% Environ +gsave 10 dict begin +1174 181 36 18 ellipse_path +stroke +gsave 10 dict begin +1151 176 moveto +(Environ) +[8.4 6.48 6.96 3.84 4.56 6.96 6.96] +xshow +end grestore +end grestore + +% Cbytegen -> Environ +newpath 841 166 moveto +911 169 1054 175 1128 179 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 1128 183 moveto +1138 179 lineto +1128 176 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 1128 183 moveto +1138 179 lineto +1128 176 lineto +closepath +stroke +end grestore + +% Cooking -> Reduction +newpath 473 227 moveto +485 228 498 229 510 229 curveto +603 231 626 233 718 229 curveto +773 226 834 220 876 214 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 876 217 moveto +886 213 lineto +876 211 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 876 217 moveto +886 213 lineto +876 211 lineto +closepath +stroke +end grestore + +% Indtypes -> Typeops +newpath 474 110 moveto +484 110 495 110 505 110 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 505 114 moveto +515 110 lineto +505 107 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 505 114 moveto +515 110 lineto +505 107 lineto +closepath +stroke +end grestore + +% Term +gsave 10 dict begin +1666 173 28 18 ellipse_path +stroke +gsave 10 dict begin +1651 168 moveto +(Term) +[7.2 6.24 4.8 10.8] +xshow +end grestore +end grestore + +% Term -> Univ +newpath 1685 186 moveto +1699 196 1719 211 1736 222 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 1734 225 moveto +1744 228 lineto +1738 219 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 1734 225 moveto +1744 228 lineto +1738 219 lineto +closepath +stroke +end grestore + +% Esubst +gsave 10 dict begin +1763 173 32 18 ellipse_path +stroke +gsave 10 dict begin +1743 168 moveto +(Esubst) +[8.4 5.52 6.96 6.96 5.28 3.84] +xshow +end grestore +end grestore + +% Term -> Esubst +newpath 1694 173 moveto +1702 173 1711 173 1720 173 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 1720 177 moveto +1730 173 lineto +1720 170 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 1720 177 moveto +1730 173 lineto +1720 170 lineto +closepath +stroke +end grestore + +% Subtyping +gsave 10 dict begin +552 56 42 18 ellipse_path +stroke +gsave 10 dict begin +523 51 moveto +(Subtyping) +[7.68 6.96 6.96 3.84 6.96 6.96 3.84 6.96 6.96] +xshow +end grestore +end grestore + +% Subtyping -> Inductive +newpath 581 69 moveto +597 77 618 86 636 93 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 634 96 moveto +645 97 lineto +637 90 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 634 96 moveto +645 97 lineto +637 90 lineto +closepath +stroke +end grestore + +% Modops +gsave 10 dict begin +674 18 36 18 ellipse_path +stroke +gsave 10 dict begin +650 13 moveto +(Modops) +[12.48 6.96 6.96 6.96 6.96 5.52] +xshow +end grestore +end grestore + +% Subtyping -> Modops +newpath 586 45 moveto +601 41 618 35 633 31 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 634 34 moveto +643 28 lineto +632 28 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 634 34 moveto +643 28 lineto +632 28 lineto +closepath +stroke +end grestore + +% Modops -> Entries +newpath 705 27 moveto +722 32 743 39 761 44 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 760 47 moveto +771 47 lineto +762 41 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 760 47 moveto +771 47 lineto +762 41 lineto +closepath +stroke +end grestore + +% Modops -> Cbytegen +newpath 686 35 moveto +695 48 707 67 718 83 curveto +735 107 733 118 754 137 curveto +757 140 761 143 765 145 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 763 148 moveto +773 151 lineto +767 142 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 763 148 moveto +773 151 lineto +767 142 lineto +closepath +stroke +end grestore + +% Sign -> Term +newpath 1454 99 moveto +1489 98 1553 100 1602 119 curveto +1626 129 1637 135 1649 148 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 1647 151 moveto +1656 156 lineto +1652 146 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 1647 151 moveto +1656 156 lineto +1652 146 lineto +closepath +stroke +end grestore + +% Safe_typing +gsave 10 dict begin +47 85 46 18 ellipse_path +stroke +gsave 10 dict begin +13 80 moveto +(Safe_typing) +[7.68 6.24 4.08 6.24 6.96 3.84 6.96 6.96 3.84 6.96 6.96] +xshow +end grestore +end grestore + +% Mod_typing +gsave 10 dict begin +179 85 48 18 ellipse_path +stroke +gsave 10 dict begin +143 80 moveto +(Mod_typing) +[12.48 6.96 6.96 6.96 3.84 6.96 6.96 3.84 6.96 6.96] +xshow +end grestore +end grestore + +% Safe_typing -> Mod_typing +newpath 94 85 moveto +103 85 111 85 120 85 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 120 89 moveto +130 85 lineto +120 82 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 120 89 moveto +130 85 lineto +120 82 lineto +closepath +stroke +end grestore + +% Mod_typing -> Term_typing +newpath 223 93 moveto +235 95 248 98 260 100 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 260 103 moveto +270 102 lineto +261 97 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 260 103 moveto +270 102 lineto +261 97 lineto +closepath +stroke +end grestore + +% Mod_typing -> Subtyping +newpath 227 81 moveto +297 75 428 65 500 60 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 500 63 moveto +510 59 lineto +500 57 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 500 63 moveto +510 59 lineto +500 57 lineto +closepath +stroke +end grestore + +% Closure -> Environ +newpath 1085 201 moveto +1099 198 1116 194 1131 190 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 1132 193 moveto +1141 188 lineto +1131 187 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 1132 193 moveto +1141 188 lineto +1131 187 lineto +closepath +stroke +end grestore + +% Mod_subst -> Term +newpath 1594 155 moveto +1606 158 1618 161 1630 164 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 1630 167 moveto +1640 166 lineto +1631 161 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 1630 167 moveto +1640 166 lineto +1631 161 lineto +closepath +stroke +end grestore + +% Declarations +gsave 10 dict begin +1295 181 49 18 ellipse_path +stroke +gsave 10 dict begin +1259 176 moveto +(Declarations) +[10.08 6.24 6.24 3.84 6.24 4.56 6.24 3.84 3.84 6.96 6.96 5.52] +xshow +end grestore +end grestore + +% Environ -> Declarations +newpath 1210 181 moveto +1218 181 1227 181 1236 181 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 1236 185 moveto +1246 181 lineto +1236 178 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 1236 185 moveto +1246 181 lineto +1236 178 lineto +closepath +stroke +end grestore + +% Declarations -> Cemitcodes +newpath 1341 188 moveto +1351 189 1363 191 1373 192 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 1373 195 moveto +1383 194 lineto +1374 189 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 1373 195 moveto +1383 194 lineto +1374 189 lineto +closepath +stroke +end grestore + +% Declarations -> Sign +newpath 1320 165 moveto +1343 152 1375 132 1398 118 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 1401 120 moveto +1407 112 lineto +1397 115 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 1401 120 moveto +1407 112 lineto +1397 115 lineto +closepath +stroke +end grestore + +% Cbytecodes -> Term +newpath 1595 190 moveto +1607 188 1619 185 1630 182 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 1631 185 moveto +1640 179 lineto +1629 179 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 1631 185 moveto +1640 179 lineto +1629 179 lineto +closepath +stroke +end grestore +endpage +showpage +grestore +%%PageTrailer +%%EndPage: 1 +%%Trailer +%%Pages: 1 +end +restore +%%EOF diff --git a/dev/ocamlweb-doc/lex.mll b/dev/ocamlweb-doc/lex.mll new file mode 100644 index 00000000..617163e7 --- /dev/null +++ b/dev/ocamlweb-doc/lex.mll @@ -0,0 +1,81 @@ + +{ + open Lexing + open Syntax + + let chan_out = ref stdout + + let comment_depth = ref 0 + let print s = output_string !chan_out s + + exception Fin_fichier + +} + +let space = [' ' '\t' '\n'] +let letter = ['a'-'z' 'A'-'Z'] +let digit = ['0'-'9'] + +let identifier = letter (letter | digit | ['_' '\''])* +let number = digit+ +let oper = ['-' '+' '/' '*' '|' '>' '<' '=' '%' '#' '$' ':' '\\' '?' + '.' '!' '@' ]+ + +rule token = parse + | "let" {LET} + | "in" {IN} + | "match" {MATCH} + | "with" {WITH} + | "end" {END} + | "and" {AND} + | "fun" {FUN} + | "if" {IF} + | "then" {THEN} + | "else" {ELSE} + | "eval" {EVAL} + | "for" {FOR} + | "Prop" {PROP} + | "Set" {SET} + | "Type" {TYPE} + | "fix" {FIX} + | "cofix" {COFIX} + | "struct" {STRUCT} + | "as" {AS} + + | "Simpl" {SIMPL} + + | "_" {WILDCARD} + | "(" {LPAR} + | ")" {RPAR} + | "{" {LBRACE} + | "}" {RBRACE} + | "!" {BANG} + | "@" {AT} + | ":" {COLON} + | ":=" {COLONEQ} + | "." {DOT} + | "," {COMMA} + | "->" {OPER "->"} + | "=>" {RARROW} + | "|" {BAR} + | "%" {PERCENT} + + | '?' { META(ident lexbuf)} + | number { INT(Lexing.lexeme lexbuf) } + | oper { OPER(Lexing.lexeme lexbuf) } + | identifier { IDENT (Lexing.lexeme lexbuf) } + | "(*" (*"*)"*) { comment_depth := 1; + comment lexbuf; + token lexbuf } + | space+ { token lexbuf} + | eof { EOF } + +and ident = parse + | identifier { Lexing.lexeme lexbuf } + +and comment = parse + | "(*" (*"*)"*) { incr comment_depth; comment lexbuf } + | (*"(*"*) "*)" + { decr comment_depth; if !comment_depth > 0 then comment lexbuf } + | eof { raise Fin_fichier } + | _ { comment lexbuf } diff --git a/dev/ocamlweb-doc/library.dep.ps b/dev/ocamlweb-doc/library.dep.ps new file mode 100644 index 00000000..1c68240e --- /dev/null +++ b/dev/ocamlweb-doc/library.dep.ps @@ -0,0 +1,836 @@ +%!PS-Adobe-2.0 +%%Creator: dot version 2.2 (Wed Jan 19 21:09:25 UTC 2005) +%%For: (herbelin) Hugo Herbelin +%%Title: G +%%Pages: (atend) +%%BoundingBox: 35 35 577 207 +%%EndComments +save +%%BeginProlog +/DotDict 200 dict def +DotDict begin + +/setupLatin1 { +mark +/EncodingVector 256 array def + EncodingVector 0 + +ISOLatin1Encoding 0 255 getinterval putinterval + +EncodingVector + dup 306 /AE + dup 301 /Aacute + dup 302 /Acircumflex + dup 304 /Adieresis + dup 300 /Agrave + dup 305 /Aring + dup 303 /Atilde + dup 307 /Ccedilla + dup 311 /Eacute + dup 312 /Ecircumflex + dup 313 /Edieresis + dup 310 /Egrave + dup 315 /Iacute + dup 316 /Icircumflex + dup 317 /Idieresis + dup 314 /Igrave + dup 334 /Udieresis + dup 335 /Yacute + dup 376 /thorn + dup 337 /germandbls + dup 341 /aacute + dup 342 /acircumflex + dup 344 /adieresis + dup 346 /ae + dup 340 /agrave + dup 345 /aring + dup 347 /ccedilla + dup 351 /eacute + dup 352 /ecircumflex + dup 353 /edieresis + dup 350 /egrave + dup 355 /iacute + dup 356 /icircumflex + dup 357 /idieresis + dup 354 /igrave + dup 360 /dcroat + dup 361 /ntilde + dup 363 /oacute + dup 364 /ocircumflex + dup 366 /odieresis + dup 362 /ograve + dup 365 /otilde + dup 370 /oslash + dup 372 /uacute + dup 373 /ucircumflex + dup 374 /udieresis + dup 371 /ugrave + dup 375 /yacute + dup 377 /ydieresis + +% Set up ISO Latin 1 character encoding +/starnetISO { + dup dup findfont dup length dict begin + { 1 index /FID ne { def }{ pop pop } ifelse + } forall + /Encoding EncodingVector def + currentdict end definefont +} def +/Times-Roman starnetISO def +/Times-Italic starnetISO def +/Times-Bold starnetISO def +/Times-BoldItalic starnetISO def +/Helvetica starnetISO def +/Helvetica-Oblique starnetISO def +/Helvetica-Bold starnetISO def +/Helvetica-BoldOblique starnetISO def +/Courier starnetISO def +/Courier-Oblique starnetISO def +/Courier-Bold starnetISO def +/Courier-BoldOblique starnetISO def +cleartomark +} bind def + +%%BeginResource: procset graphviz 0 0 +/coord-font-family /Times-Roman def +/default-font-family /Times-Roman def +/coordfont coord-font-family findfont 8 scalefont def + +/InvScaleFactor 1.0 def +/set_scale { + dup 1 exch div /InvScaleFactor exch def + dup scale +} bind def + +% styles +/solid { [] 0 setdash } bind def +/dashed { [9 InvScaleFactor mul dup ] 0 setdash } bind def +/dotted { [1 InvScaleFactor mul 6 InvScaleFactor mul] 0 setdash } bind def +/invis {/fill {newpath} def /stroke {newpath} def /show {pop newpath} def} bind def +/bold { 2 setlinewidth } bind def +/filled { } bind def +/unfilled { } bind def +/rounded { } bind def +/diagonals { } bind def + +% hooks for setting color +/nodecolor { sethsbcolor } bind def +/edgecolor { sethsbcolor } bind def +/graphcolor { sethsbcolor } bind def +/nopcolor {pop pop pop} bind def + +/beginpage { % i j npages + /npages exch def + /j exch def + /i exch def + /str 10 string def + npages 1 gt { + gsave + coordfont setfont + 0 0 moveto + (\() show i str cvs show (,) show j str cvs show (\)) show + grestore + } if +} bind def + +/set_font { + findfont exch + scalefont setfont +} def + +% draw aligned label in bounding box aligned to current point +/alignedtext { % width adj text + /text exch def + /adj exch def + /width exch def + gsave + width 0 gt { + text stringwidth pop adj mul 0 rmoveto + } if + [] 0 setdash + text show + grestore +} def + +/boxprim { % xcorner ycorner xsize ysize + 4 2 roll + moveto + 2 copy + exch 0 rlineto + 0 exch rlineto + pop neg 0 rlineto + closepath +} bind def + +/ellipse_path { + /ry exch def + /rx exch def + /y exch def + /x exch def + matrix currentmatrix + newpath + x y translate + rx ry scale + 0 0 1 0 360 arc + setmatrix +} bind def + +/endpage { showpage } bind def +/showpage { } def + +/layercolorseq + [ % layer color sequence - darkest to lightest + [0 0 0] + [.2 .8 .8] + [.4 .8 .8] + [.6 .8 .8] + [.8 .8 .8] + ] +def + +/layerlen layercolorseq length def + +/setlayer {/maxlayer exch def /curlayer exch def + layercolorseq curlayer 1 sub layerlen mod get + aload pop sethsbcolor + /nodecolor {nopcolor} def + /edgecolor {nopcolor} def + /graphcolor {nopcolor} def +} bind def + +/onlayer { curlayer ne {invis} if } def + +/onlayers { + /myupper exch def + /mylower exch def + curlayer mylower lt + curlayer myupper gt + or + {invis} if +} def + +/curlayer 0 def + +%%EndResource +%%EndProlog +%%BeginSetup +14 default-font-family set_font +1 setmiterlimit +% /arrowlength 10 def +% /arrowwidth 5 def + +% make sure pdfmark is harmless for PS-interpreters other than Distiller +/pdfmark where {pop} {userdict /pdfmark /cleartomark load put} ifelse +% make '<<' and '>>' safe on PS Level 1 devices +/languagelevel where {pop languagelevel}{1} ifelse +2 lt { + userdict (<<) cvn ([) cvn load put + userdict (>>) cvn ([) cvn load put +} if + +%%EndSetup +%%Page: 1 1 +%%PageBoundingBox: 36 36 577 207 +%%PageOrientation: Portrait +gsave +35 35 542 172 boxprim clip newpath +36 36 translate +0 0 1 beginpage +0.6750 set_scale +0 0 translate 0 rotate +0.000 0.000 0.000 graphcolor +14.00 /Times-Roman set_font + +% States +gsave 10 dict begin +30 18 30 18 ellipse_path +stroke +gsave 10 dict begin +13 13 moveto +(States) +[7.44 4.08 6.24 3.84 6.24 5.52] +xshow +end grestore +end grestore + +% Library +gsave 10 dict begin +132 18 34 18 ellipse_path +stroke +gsave 10 dict begin +110 13 moveto +(Library) +[8.4 3.84 6.96 4.56 6.24 4.8 6.96] +xshow +end grestore +end grestore + +% States -> Library +newpath 60 18 moveto +69 18 78 18 87 18 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 87 22 moveto +97 18 lineto +87 15 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 87 22 moveto +97 18 lineto +87 15 lineto +closepath +stroke +end grestore + +% Declaremods +gsave 10 dict begin +274 18 50 18 ellipse_path +stroke +gsave 10 dict begin +236 13 moveto +(Declaremods) +[10.08 6.24 6.24 3.84 6.24 4.56 6.24 10.8 6.96 6.96 5.52] +xshow +end grestore +end grestore + +% Library -> Declaremods +newpath 167 18 moveto +181 18 197 18 213 18 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 213 22 moveto +223 18 lineto +213 15 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 213 22 moveto +223 18 lineto +213 15 lineto +closepath +stroke +end grestore + +% Nametab +gsave 10 dict begin +523 134 39 18 ellipse_path +stroke +gsave 10 dict begin +497 129 moveto +(Nametab) +[9.6 6.24 10.8 6 4.08 6.24 6.96] +xshow +end grestore +end grestore + +% Libnames +gsave 10 dict begin +642 134 41 18 ellipse_path +stroke +gsave 10 dict begin +613 129 moveto +(Libnames) +[8.4 3.84 6.96 6.96 6.24 10.8 6.24 5.52] +xshow +end grestore +end grestore + +% Nametab -> Libnames +newpath 562 134 moveto +571 134 580 134 590 134 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 590 138 moveto +600 134 lineto +590 131 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 590 138 moveto +600 134 lineto +590 131 lineto +closepath +stroke +end grestore + +% Summary +gsave 10 dict begin +642 65 40 18 ellipse_path +stroke +gsave 10 dict begin +614 60 moveto +(Summary) +[7.68 6.96 10.8 10.8 6.24 4.8 6.96] +xshow +end grestore +end grestore + +% Nametab -> Summary +newpath 547 120 moveto +565 110 589 96 608 84 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 610 87 moveto +617 79 lineto +607 81 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 610 87 moveto +617 79 lineto +607 81 lineto +closepath +stroke +end grestore + +% Nameops +gsave 10 dict begin +760 134 40 18 ellipse_path +stroke +gsave 10 dict begin +733 129 moveto +(Nameops) +[9.6 6.24 10.8 6.24 6.96 6.96 5.52] +xshow +end grestore +end grestore + +% Libnames -> Nameops +newpath 684 134 moveto +693 134 701 134 710 134 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 710 138 moveto +720 134 lineto +710 131 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 710 138 moveto +720 134 lineto +710 131 lineto +closepath +stroke +end grestore + +% Lib +gsave 10 dict begin +413 153 27 18 ellipse_path +stroke +gsave 10 dict begin +402 148 moveto +(Lib) +[8.4 3.84 6.96] +xshow +end grestore +end grestore + +% Declaremods -> Lib +newpath 315 29 moveto +325 33 336 38 344 45 curveto +359 58 383 99 399 127 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 396 129 moveto +404 136 lineto +402 126 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 396 129 moveto +404 136 lineto +402 126 lineto +closepath +stroke +end grestore + +% Global +gsave 10 dict begin +413 65 32 18 ellipse_path +stroke +gsave 10 dict begin +393 60 moveto +(Global) +[10.08 3.84 6.96 6.96 6.24 3.84] +xshow +end grestore +end grestore + +% Declaremods -> Global +newpath 311 30 moveto +331 37 355 45 375 52 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 374 55 moveto +385 55 lineto +376 49 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 374 55 moveto +385 55 lineto +376 49 lineto +closepath +stroke +end grestore + +% Libobject +gsave 10 dict begin +523 188 40 18 ellipse_path +stroke +gsave 10 dict begin +495 183 moveto +(Libobject) +[8.4 3.84 6.96 6.96 6.96 3.84 6.24 6.24 3.84] +xshow +end grestore +end grestore + +% Libobject -> Libnames +newpath 552 175 moveto +567 168 587 159 604 151 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 605 154 moveto +613 147 lineto +602 148 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 605 154 moveto +613 147 lineto +602 148 lineto +closepath +stroke +end grestore + +% Lib -> Nametab +newpath 439 148 moveto +450 146 464 144 476 142 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 477 145 moveto +486 140 lineto +476 139 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 477 145 moveto +486 140 lineto +476 139 lineto +closepath +stroke +end grestore + +% Lib -> Libobject +newpath 437 161 moveto +450 165 466 170 480 174 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 479 177 moveto +490 177 lineto +481 171 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 479 177 moveto +490 177 lineto +481 171 lineto +closepath +stroke +end grestore + +% Impargs +gsave 10 dict begin +274 126 36 18 ellipse_path +stroke +gsave 10 dict begin +251 121 moveto +(Impargs) +[4.56 10.56 6.96 6.24 4.32 6.96 5.52] +xshow +end grestore +end grestore + +% Impargs -> Lib +newpath 308 133 moveto +329 137 355 142 377 146 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 377 149 moveto +387 148 lineto +378 143 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 377 149 moveto +387 148 lineto +378 143 lineto +closepath +stroke +end grestore + +% Impargs -> Global +newpath 304 116 moveto +316 111 331 105 344 99 curveto +357 94 369 88 381 82 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 382 85 moveto +390 78 lineto +379 79 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 382 85 moveto +390 78 lineto +379 79 lineto +closepath +stroke +end grestore + +% Global -> Libnames +newpath 443 73 moveto +473 81 522 94 564 107 curveto +576 111 589 115 600 119 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 599 122 moveto +610 122 lineto +601 116 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 599 122 moveto +610 122 lineto +601 116 lineto +closepath +stroke +end grestore + +% Global -> Summary +newpath 446 65 moveto +484 65 547 65 591 65 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 591 69 moveto +601 65 lineto +591 62 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 591 69 moveto +601 65 lineto +591 62 lineto +closepath +stroke +end grestore + +% Goptions +gsave 10 dict begin +274 180 39 18 ellipse_path +stroke +gsave 10 dict begin +248 175 moveto +(Goptions) +[10.08 6.96 6.96 3.84 3.84 6.96 6.96 5.52] +xshow +end grestore +end grestore + +% Goptions -> Lib +newpath 310 173 moveto +331 169 356 164 377 160 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 378 163 moveto +387 158 lineto +377 157 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 378 163 moveto +387 158 lineto +377 157 lineto +closepath +stroke +end grestore + +% Dischargedhypsmap +gsave 10 dict begin +274 234 70 18 ellipse_path +stroke +gsave 10 dict begin +217 229 moveto +(Dischargedhypsmap) +[10.08 3.84 5.52 6 6.96 6.24 4.32 6.72 6.24 6.96 6.48 6.96 6.96 5.52 10.8 6.24 6.96] +xshow +end grestore +end grestore + +% Dischargedhypsmap -> Lib +newpath 317 220 moveto +326 216 336 212 344 207 curveto +360 197 376 185 389 175 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 392 177 moveto +397 168 lineto +387 172 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 392 177 moveto +397 168 lineto +387 172 lineto +closepath +stroke +end grestore + +% Declare +gsave 10 dict begin +132 126 35 18 ellipse_path +stroke +gsave 10 dict begin +109 121 moveto +(Declare) +[10.08 6.24 6.24 3.84 6.24 4.56 6.24] +xshow +end grestore +end grestore + +% Declare -> Impargs +newpath 168 126 moveto +186 126 208 126 228 126 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 228 130 moveto +238 126 lineto +228 123 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 228 130 moveto +238 126 lineto +228 123 lineto +closepath +stroke +end grestore + +% Declare -> Dischargedhypsmap +newpath 144 143 moveto +157 161 179 189 204 207 curveto +209 210 215 213 221 216 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 219 219 moveto +230 220 lineto +222 213 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 219 219 moveto +230 220 lineto +222 213 lineto +closepath +stroke +end grestore + +% Decl_kinds +gsave 10 dict begin +274 72 45 18 ellipse_path +stroke +gsave 10 dict begin +241 67 moveto +(Decl_kinds) +[10.08 6.24 6.24 3.84 6.96 6.96 3.84 6.96 6.96 5.52] +xshow +end grestore +end grestore + +% Declare -> Decl_kinds +newpath 161 115 moveto +181 107 209 97 232 88 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 233 91 moveto +241 84 lineto +230 85 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 233 91 moveto +241 84 lineto +230 85 lineto +closepath +stroke +end grestore +endpage +showpage +grestore +%%PageTrailer +%%EndPage: 1 +%%Trailer +%%Pages: 1 +end +restore +%%EOF diff --git a/dev/ocamlweb-doc/macros.tex b/dev/ocamlweb-doc/macros.tex new file mode 100644 index 00000000..6beacf7b --- /dev/null +++ b/dev/ocamlweb-doc/macros.tex @@ -0,0 +1,7 @@ + +% macros for coq.tex + +\newcommand{\Coq}{\textsf{Coq}} +\newcommand{\CCI}{Calculus of Inductive Constructions} + +\newcommand{\refsec}[1]{\textbf{\ref{#1}}} \ No newline at end of file diff --git a/dev/ocamlweb-doc/parse.ml b/dev/ocamlweb-doc/parse.ml new file mode 100644 index 00000000..e537b1f2 --- /dev/null +++ b/dev/ocamlweb-doc/parse.ml @@ -0,0 +1,183 @@ + +open Ast + +type assoc = L | R | N + +let level = function + | "--" -> 70,L + | "=" -> 70,N + | "+" -> 60,L + | "++" -> 60,R + | "+++" -> 60,R + | "-" -> 60,L + | "*" -> 50,L + | "/" -> 50,L + | "**" -> 40,R + | ":" -> (100,R) + | "->" -> (90,R) + | s -> failwith ("unknowm operator '"^s^"'") + +let fixity = function + | "--" -> [L] + | "=" -> [N] + | ("+"|"-"|"*"|"/") -> [L;N] + | "++" -> [R] + | _ -> [L;N;R] + +let ground_oper = function + ("-"|"+") -> true + | _ -> false + +let is_prefix op = List.mem L (fixity op) +let is_infix op = List.mem N (fixity op) +let is_postfix op = List.mem R (fixity op) + +let mk_inf op t1 t2 = + if not (is_infix op) then failwith (op^" not infix"); + Infix(op,t1,t2) + +let mk_post op t = + if not (is_postfix op) then failwith (op^" not postfix"); + Postfix(op,t) + + +(* Pb avec ground_oper: pas de diff entre -1 et -(1) *) +let mk_pre op t = + if not (is_prefix op) then failwith (op^" not prefix"); + if ground_oper op then + match t with + | Int i -> Int (op^i) + | _ -> Prefix(op,t) + else Prefix(op,t) + +(* teste si on peut reduire op suivi d'un op de niveau (n,a) + si la reponse est false, c'est que l'op (n,a) doit se reduire + avant *) +let red_left_op (nl,al) (nr,ar) = + if nl < nr then true + else + if nl = nr then + match al,ar with + | (L|N), L -> true + | R, (R|N) -> false + | R, L -> failwith "conflit d'assoc: ambigu" + | (L|N), (R|N) -> failwith "conflit d'assoc: blocage" + else false + + +type level = int * assoc +type stack = + | PrefixOper of string list + | Term of constr_ast * stack + | Oper of string list * string * constr_ast * stack + +let rec str_ast = function + | Infix(op,t1,t2) -> str_ast t1 ^ " " ^ op ^ " " ^ str_ast t2 + | Postfix(op,t) -> str_ast t ^ " " ^ op + | Prefix(op,t) -> op ^ " " ^ str_ast t + | _ -> "_" + +let rec str_stack = function + | PrefixOper ops -> String.concat " " (List.rev ops) + | Term (t,s) -> str_stack s ^ " (" ^ str_ast t ^ ")" + | Oper(ops,lop,t,s) -> + str_stack (Term(t,s)) ^ " " ^ lop ^ " " ^ + String.concat " " (List.rev ops) + +let pps s = prerr_endline (str_stack s) +let err s stk = failwith (s^": "^str_stack stk) + + +let empty = PrefixOper [] + +let check_fixity_term stk = + match stk with + Term _ -> err "2 termes successifs" stk + | _ -> () + +let shift_term t stk = + check_fixity_term stk; + Term(t,stk) + +let shift_oper op stk = + match stk with + | Oper(ops,lop,t,s) -> Oper(op::ops,lop,t,s) + | Term(t,s) -> Oper([],op,t,s) + | PrefixOper ops -> PrefixOper (op::ops) + +let is_reducible lv stk = + match stk with + | Oper([],iop,_,_) -> red_left_op (level iop) lv + | Oper(op::_,_,_,_) -> red_left_op (level op) lv + | PrefixOper(op::_) -> red_left_op (level op) lv + | _ -> false + +let reduce_head (t,stk) = + match stk with + | Oper([],iop,t1,s) -> + (Infix(iop,t1,t), s) + | Oper(op::ops,lop,t',s) -> + (mk_pre op t, Oper(ops,lop,t',s)) + | PrefixOper(op::ops) -> + (Prefix(op,t), PrefixOper ops) + | _ -> assert false + +let rec reduce_level lv (t,s) = + if is_reducible lv s then reduce_level lv (reduce_head (t, s)) + else (t, s) + +let reduce_post op (t,s) = + let (t',s') = reduce_level (level op) (t,s) in + (mk_post op t', s') + +let reduce_posts stk = + match stk with + Oper(ops,iop,t,s) -> + let pts1 = reduce_post iop (t,s) in + List.fold_right reduce_post ops pts1 + | Term(t,s) -> (t,s) + | PrefixOper _ -> failwith "reduce_posts" + + +let shift_infix op stk = + let (t,s) = reduce_level (level op) (reduce_posts stk) in + Oper([],op,t,s) + +let is_better_infix op stk = + match stk with + | Oper(ops,iop,t,s) -> + is_postfix iop && + List.for_all is_postfix ops && + (not (is_prefix op) || red_left_op (level iop) (level op)) + | Term _ -> false + | _ -> assert false + +let parse_oper op stk = + match stk with + | PrefixOper _ -> + if is_prefix op then shift_oper op stk else failwith "prefix_oper" + | Oper _ -> + if is_infix op then + if is_better_infix op stk then shift_infix op stk + else shift_oper op stk + else if is_prefix op then shift_oper op stk + else if is_postfix op then + let (t,s) = reduce_post op (reduce_posts stk) in + Term(t,s) + else assert false + | Term(t,s) -> + if is_infix op then shift_infix op stk + else if is_postfix op then + let (t2,s2) = reduce_post op (t,s) in Term(t2,s2) + else failwith "infix/postfix" + +let parse_term = shift_term + +let rec close_stack stk = + match stk with + Term(t,PrefixOper []) -> t + | PrefixOper _ -> failwith "expression sans atomes" + | _ -> + let (t,s) = reduce_head (reduce_posts stk) in + close_stack (Term(t,s)) + diff --git a/dev/ocamlweb-doc/parsing.dep.ps b/dev/ocamlweb-doc/parsing.dep.ps new file mode 100644 index 00000000..723d8c69 --- /dev/null +++ b/dev/ocamlweb-doc/parsing.dep.ps @@ -0,0 +1,1115 @@ +%!PS-Adobe-2.0 +%%Creator: dot version 2.2 (Wed Jan 19 21:09:25 UTC 2005) +%%For: (herbelin) Hugo Herbelin +%%Title: G +%%Pages: (atend) +%%BoundingBox: 35 35 577 314 +%%EndComments +save +%%BeginProlog +/DotDict 200 dict def +DotDict begin + +/setupLatin1 { +mark +/EncodingVector 256 array def + EncodingVector 0 + +ISOLatin1Encoding 0 255 getinterval putinterval + +EncodingVector + dup 306 /AE + dup 301 /Aacute + dup 302 /Acircumflex + dup 304 /Adieresis + dup 300 /Agrave + dup 305 /Aring + dup 303 /Atilde + dup 307 /Ccedilla + dup 311 /Eacute + dup 312 /Ecircumflex + dup 313 /Edieresis + dup 310 /Egrave + dup 315 /Iacute + dup 316 /Icircumflex + dup 317 /Idieresis + dup 314 /Igrave + dup 334 /Udieresis + dup 335 /Yacute + dup 376 /thorn + dup 337 /germandbls + dup 341 /aacute + dup 342 /acircumflex + dup 344 /adieresis + dup 346 /ae + dup 340 /agrave + dup 345 /aring + dup 347 /ccedilla + dup 351 /eacute + dup 352 /ecircumflex + dup 353 /edieresis + dup 350 /egrave + dup 355 /iacute + dup 356 /icircumflex + dup 357 /idieresis + dup 354 /igrave + dup 360 /dcroat + dup 361 /ntilde + dup 363 /oacute + dup 364 /ocircumflex + dup 366 /odieresis + dup 362 /ograve + dup 365 /otilde + dup 370 /oslash + dup 372 /uacute + dup 373 /ucircumflex + dup 374 /udieresis + dup 371 /ugrave + dup 375 /yacute + dup 377 /ydieresis + +% Set up ISO Latin 1 character encoding +/starnetISO { + dup dup findfont dup length dict begin + { 1 index /FID ne { def }{ pop pop } ifelse + } forall + /Encoding EncodingVector def + currentdict end definefont +} def +/Times-Roman starnetISO def +/Times-Italic starnetISO def +/Times-Bold starnetISO def +/Times-BoldItalic starnetISO def +/Helvetica starnetISO def +/Helvetica-Oblique starnetISO def +/Helvetica-Bold starnetISO def +/Helvetica-BoldOblique starnetISO def +/Courier starnetISO def +/Courier-Oblique starnetISO def +/Courier-Bold starnetISO def +/Courier-BoldOblique starnetISO def +cleartomark +} bind def + +%%BeginResource: procset graphviz 0 0 +/coord-font-family /Times-Roman def +/default-font-family /Times-Roman def +/coordfont coord-font-family findfont 8 scalefont def + +/InvScaleFactor 1.0 def +/set_scale { + dup 1 exch div /InvScaleFactor exch def + dup scale +} bind def + +% styles +/solid { [] 0 setdash } bind def +/dashed { [9 InvScaleFactor mul dup ] 0 setdash } bind def +/dotted { [1 InvScaleFactor mul 6 InvScaleFactor mul] 0 setdash } bind def +/invis {/fill {newpath} def /stroke {newpath} def /show {pop newpath} def} bind def +/bold { 2 setlinewidth } bind def +/filled { } bind def +/unfilled { } bind def +/rounded { } bind def +/diagonals { } bind def + +% hooks for setting color +/nodecolor { sethsbcolor } bind def +/edgecolor { sethsbcolor } bind def +/graphcolor { sethsbcolor } bind def +/nopcolor {pop pop pop} bind def + +/beginpage { % i j npages + /npages exch def + /j exch def + /i exch def + /str 10 string def + npages 1 gt { + gsave + coordfont setfont + 0 0 moveto + (\() show i str cvs show (,) show j str cvs show (\)) show + grestore + } if +} bind def + +/set_font { + findfont exch + scalefont setfont +} def + +% draw aligned label in bounding box aligned to current point +/alignedtext { % width adj text + /text exch def + /adj exch def + /width exch def + gsave + width 0 gt { + text stringwidth pop adj mul 0 rmoveto + } if + [] 0 setdash + text show + grestore +} def + +/boxprim { % xcorner ycorner xsize ysize + 4 2 roll + moveto + 2 copy + exch 0 rlineto + 0 exch rlineto + pop neg 0 rlineto + closepath +} bind def + +/ellipse_path { + /ry exch def + /rx exch def + /y exch def + /x exch def + matrix currentmatrix + newpath + x y translate + rx ry scale + 0 0 1 0 360 arc + setmatrix +} bind def + +/endpage { showpage } bind def +/showpage { } def + +/layercolorseq + [ % layer color sequence - darkest to lightest + [0 0 0] + [.2 .8 .8] + [.4 .8 .8] + [.6 .8 .8] + [.8 .8 .8] + ] +def + +/layerlen layercolorseq length def + +/setlayer {/maxlayer exch def /curlayer exch def + layercolorseq curlayer 1 sub layerlen mod get + aload pop sethsbcolor + /nodecolor {nopcolor} def + /edgecolor {nopcolor} def + /graphcolor {nopcolor} def +} bind def + +/onlayer { curlayer ne {invis} if } def + +/onlayers { + /myupper exch def + /mylower exch def + curlayer mylower lt + curlayer myupper gt + or + {invis} if +} def + +/curlayer 0 def + +%%EndResource +%%EndProlog +%%BeginSetup +14 default-font-family set_font +1 setmiterlimit +% /arrowlength 10 def +% /arrowwidth 5 def + +% make sure pdfmark is harmless for PS-interpreters other than Distiller +/pdfmark where {pop} {userdict /pdfmark /cleartomark load put} ifelse +% make '<<' and '>>' safe on PS Level 1 devices +/languagelevel where {pop languagelevel}{1} ifelse +2 lt { + userdict (<<) cvn ([) cvn load put + userdict (>>) cvn ([) cvn load put +} if + +%%EndSetup +%%Page: 1 1 +%%PageBoundingBox: 36 36 577 314 +%%PageOrientation: Portrait +gsave +35 35 542 279 boxprim clip newpath +36 36 translate +0 0 1 beginpage +0.6027 set_scale +0 0 translate 0 rotate +0.000 0.000 0.000 graphcolor +14.00 /Times-Roman set_font + +% Pcoq +gsave 10 dict begin +557 280 27 18 ellipse_path +stroke +gsave 10 dict begin +543 275 moveto +(Pcoq) +[7.68 6.24 6.96 6.96] +xshow +end grestore +end grestore + +% Extend +gsave 10 dict begin +664 226 33 18 ellipse_path +stroke +gsave 10 dict begin +643 221 moveto +(Extend) +[8.4 6.96 3.84 6.24 6.96 6.96] +xshow +end grestore +end grestore + +% Pcoq -> Extend +newpath 579 269 moveto +593 261 613 252 630 243 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 632 246 moveto +639 238 lineto +629 240 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 632 246 moveto +639 238 lineto +629 240 lineto +closepath +stroke +end grestore + +% Ast +gsave 10 dict begin +764 172 27 18 ellipse_path +stroke +gsave 10 dict begin +753 167 moveto +(Ast) +[10.08 5.28 3.84] +xshow +end grestore +end grestore + +% Extend -> Ast +newpath 688 213 moveto +701 206 719 196 734 188 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 736 191 moveto +743 183 lineto +733 185 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 736 191 moveto +743 183 lineto +733 185 lineto +closepath +stroke +end grestore + +% Lexer +gsave 10 dict begin +764 226 29 18 ellipse_path +stroke +gsave 10 dict begin +747 221 moveto +(Lexer) +[8.4 5.76 6.48 6.24 4.56] +xshow +end grestore +end grestore + +% Extend -> Lexer +newpath 698 226 moveto +706 226 715 226 724 226 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 724 230 moveto +734 226 lineto +724 223 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 724 230 moveto +734 226 lineto +724 223 lineto +closepath +stroke +end grestore + +% Termast +gsave 10 dict begin +557 172 35 18 ellipse_path +stroke +gsave 10 dict begin +534 167 moveto +(Termast) +[7.2 6.24 4.8 10.8 6.24 5.28 3.84] +xshow +end grestore +end grestore + +% Termast -> Ast +newpath 593 172 moveto +630 172 689 172 727 172 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 727 176 moveto +737 172 lineto +727 169 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 727 176 moveto +737 172 lineto +727 169 lineto +closepath +stroke +end grestore + +% Coqast +gsave 10 dict begin +863 172 32 18 ellipse_path +stroke +gsave 10 dict begin +843 167 moveto +(Coqast) +[9.36 6.96 6.96 6.24 5.28 3.84] +xshow +end grestore +end grestore + +% Ast -> Coqast +newpath 791 172 moveto +800 172 810 172 820 172 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 820 176 moveto +830 172 lineto +820 169 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 820 176 moveto +830 172 lineto +820 169 lineto +closepath +stroke +end grestore + +% Tactic_printer +gsave 10 dict begin +53 126 52 18 ellipse_path +stroke +gsave 10 dict begin +13 121 moveto +(Tactic_printer) +[7.44 6.24 6.24 3.84 3.84 6.24 6.96 6.96 4.8 3.84 6.96 3.84 6.24 4.56] +xshow +end grestore +end grestore + +% Pptactic +gsave 10 dict begin +178 126 36 18 ellipse_path +stroke +gsave 10 dict begin +155 121 moveto +(Pptactic) +[7.68 6.96 4.08 6.24 6.24 3.84 3.84 6.24] +xshow +end grestore +end grestore + +% Tactic_printer -> Pptactic +newpath 106 126 moveto +114 126 123 126 132 126 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 132 130 moveto +142 126 lineto +132 123 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 132 130 moveto +142 126 lineto +132 123 lineto +closepath +stroke +end grestore + +% Printer +gsave 10 dict begin +289 72 32 18 ellipse_path +stroke +gsave 10 dict begin +269 67 moveto +(Printer) +[7.68 4.8 3.84 6.96 3.84 6.24 4.56] +xshow +end grestore +end grestore + +% Pptactic -> Printer +newpath 204 113 moveto +219 105 238 96 255 88 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 256 91 moveto +264 84 lineto +253 85 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 256 91 moveto +264 84 lineto +253 85 lineto +closepath +stroke +end grestore + +% Search +gsave 10 dict begin +178 72 32 18 ellipse_path +stroke +gsave 10 dict begin +159 67 moveto +(Search) +[7.68 6.24 6.24 4.56 6 6.96] +xshow +end grestore +end grestore + +% Search -> Printer +newpath 210 72 moveto +221 72 234 72 246 72 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 246 76 moveto +256 72 lineto +246 69 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 246 76 moveto +256 72 lineto +246 69 lineto +closepath +stroke +end grestore + +% Printer -> Termast +newpath 316 62 moveto +355 48 430 30 484 58 curveto +518 77 538 117 548 144 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 545 146 moveto +552 154 lineto +552 143 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 545 146 moveto +552 154 lineto +552 143 lineto +closepath +stroke +end grestore + +% Esyntax +gsave 10 dict begin +557 226 36 18 ellipse_path +stroke +gsave 10 dict begin +533 221 moveto +(Esyntax) +[8.4 5.52 6.96 6.96 4.08 6.24 6.96] +xshow +end grestore +end grestore + +% Printer -> Esyntax +newpath 322 71 moveto +370 70 460 72 484 91 curveto +489 95 516 193 520 197 curveto +527 204 532 203 538 204 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 536 207 moveto +547 208 lineto +539 201 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 536 207 moveto +547 208 lineto +539 201 lineto +closepath +stroke +end grestore + +% Ppconstr +gsave 10 dict begin +424 388 37 18 ellipse_path +stroke +gsave 10 dict begin +399 383 moveto +(Ppconstr) +[7.68 6.96 6.24 6.96 6.96 5.28 3.84 4.56] +xshow +end grestore +end grestore + +% Printer -> Ppconstr +newpath 292 90 moveto +300 147 329 319 364 361 curveto +369 367 375 371 382 375 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 380 378 moveto +391 379 lineto +383 372 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 380 378 moveto +391 379 lineto +383 372 lineto +closepath +stroke +end grestore + +% Esyntax -> Extend +newpath 594 226 moveto +602 226 611 226 620 226 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 620 230 moveto +630 226 lineto +620 223 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 620 230 moveto +630 226 lineto +620 223 lineto +closepath +stroke +end grestore + +% Ppconstr -> Pcoq +newpath 454 377 moveto +464 373 475 368 484 361 curveto +506 345 526 322 540 304 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 543 306 moveto +546 296 lineto +537 302 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 543 306 moveto +546 296 lineto +537 302 lineto +closepath +stroke +end grestore + +% Prettyp +gsave 10 dict begin +178 18 33 18 ellipse_path +stroke +gsave 10 dict begin +158 13 moveto +(Prettyp) +[7.68 4.56 6 3.84 3.84 6.96 6.96] +xshow +end grestore +end grestore + +% Prettyp -> Printer +newpath 203 30 moveto +218 38 238 47 255 55 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 254 58 moveto +264 60 lineto +257 52 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 254 58 moveto +264 60 lineto +257 52 lineto +closepath +stroke +end grestore + +% Printmod +gsave 10 dict begin +289 18 39 18 ellipse_path +stroke +gsave 10 dict begin +263 13 moveto +(Printmod) +[7.68 4.8 3.84 6.96 3.84 10.8 6.96 6.96] +xshow +end grestore +end grestore + +% Prettyp -> Printmod +newpath 211 18 moveto +220 18 230 18 240 18 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 240 22 moveto +250 18 lineto +240 15 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 240 22 moveto +250 18 lineto +240 15 lineto +closepath +stroke +end grestore + +% G_zsyntax +gsave 10 dict begin +424 172 43 18 ellipse_path +stroke +gsave 10 dict begin +393 167 moveto +(G_zsyntax) +[10.08 6.96 6.24 5.52 6.96 6.96 4.08 6.24 6.96] +xshow +end grestore +end grestore + +% G_zsyntax -> Pcoq +newpath 458 183 moveto +467 188 476 193 484 199 curveto +507 218 501 233 520 253 curveto +523 256 526 259 530 261 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 528 264 moveto +538 267 lineto +532 258 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 528 264 moveto +538 267 lineto +532 258 lineto +closepath +stroke +end grestore + +% G_zsyntax -> Termast +newpath 468 172 moveto +482 172 497 172 511 172 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 511 176 moveto +521 172 lineto +511 169 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 511 176 moveto +521 172 lineto +511 169 lineto +closepath +stroke +end grestore + +% G_zsyntax -> Esyntax +newpath 455 185 moveto +474 193 499 203 520 211 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 518 214 moveto +529 215 lineto +521 208 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 518 214 moveto +529 215 lineto +521 208 lineto +closepath +stroke +end grestore + +% G_string_syntax +gsave 10 dict begin +424 280 59 18 ellipse_path +stroke +gsave 10 dict begin +377 275 moveto +(G_string_syntax) +[10.08 6.96 5.28 3.84 4.8 3.84 6.96 6.96 6.96 5.52 6.96 6.96 4.08 6.24 6.96] +xshow +end grestore +end grestore + +% G_string_syntax -> Pcoq +newpath 484 280 moveto +496 280 509 280 520 280 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 520 284 moveto +530 280 lineto +520 277 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 520 284 moveto +530 280 lineto +520 277 lineto +closepath +stroke +end grestore + +% G_string_syntax -> Esyntax +newpath 460 266 moveto +478 258 501 249 520 242 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 521 245 moveto +529 238 lineto +518 239 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 521 245 moveto +529 238 lineto +518 239 lineto +closepath +stroke +end grestore + +% G_rsyntax +gsave 10 dict begin +424 118 42 18 ellipse_path +stroke +gsave 10 dict begin +394 113 moveto +(G_rsyntax) +[10.08 6.96 4.56 5.52 6.96 6.96 4.08 6.24 6.96] +xshow +end grestore +end grestore + +% G_rsyntax -> Pcoq +newpath 459 128 moveto +468 132 477 138 484 145 curveto +518 183 491 213 520 253 curveto +523 256 526 259 529 262 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 527 265 moveto +537 268 lineto +531 259 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 527 265 moveto +537 268 lineto +531 259 lineto +closepath +stroke +end grestore + +% G_rsyntax -> Termast +newpath 455 131 moveto +474 139 499 149 520 157 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 518 160 moveto +529 161 lineto +521 154 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 518 160 moveto +529 161 lineto +521 154 lineto +closepath +stroke +end grestore + +% G_rsyntax -> Esyntax +newpath 457 129 moveto +467 133 476 139 484 145 curveto +507 164 501 179 520 199 curveto +522 201 525 203 527 205 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 525 208 moveto +535 212 lineto +530 203 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 525 208 moveto +535 212 lineto +530 203 lineto +closepath +stroke +end grestore + +% G_natsyntax +gsave 10 dict begin +424 226 48 18 ellipse_path +stroke +gsave 10 dict begin +388 221 moveto +(G_natsyntax) +[10.08 6.96 6.96 6.24 3.84 5.52 6.96 6.96 4.08 6.24 6.96] +xshow +end grestore +end grestore + +% G_natsyntax -> Pcoq +newpath 457 239 moveto +478 248 504 259 525 266 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 523 269 moveto +534 270 lineto +526 263 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 523 269 moveto +534 270 lineto +526 263 lineto +closepath +stroke +end grestore + +% G_natsyntax -> Termast +newpath 457 213 moveto +476 205 500 195 520 187 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 521 190 moveto +529 183 lineto +518 184 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 521 190 moveto +529 183 lineto +518 184 lineto +closepath +stroke +end grestore + +% G_natsyntax -> Esyntax +newpath 473 226 moveto +485 226 498 226 510 226 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 510 230 moveto +520 226 lineto +510 223 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 510 230 moveto +520 226 lineto +510 223 lineto +closepath +stroke +end grestore + +% G_ascii_syntax +gsave 10 dict begin +424 334 56 18 ellipse_path +stroke +gsave 10 dict begin +380 329 moveto +(G_ascii_syntax) +[10.08 6.96 6.24 5.52 6.24 3.84 3.84 6.96 5.52 6.96 6.96 4.08 6.24 6.96] +xshow +end grestore +end grestore + +% G_ascii_syntax -> Pcoq +newpath 459 320 moveto +479 311 504 301 525 293 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 526 296 moveto +534 289 lineto +523 290 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 526 296 moveto +534 289 lineto +523 290 lineto +closepath +stroke +end grestore + +% G_ascii_syntax -> Esyntax +newpath 462 321 moveto +470 317 478 312 484 307 curveto +507 288 501 273 520 253 curveto +522 251 524 249 527 247 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 529 250 moveto +535 241 lineto +525 244 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 529 250 moveto +535 241 lineto +525 244 lineto +closepath +stroke +end grestore + +% Egrammar +gsave 10 dict begin +424 442 43 18 ellipse_path +stroke +gsave 10 dict begin +394 437 moveto +(Egrammar) +[8.4 7.2 4.56 6.24 10.8 10.8 6.24 4.56] +xshow +end grestore +end grestore + +% Egrammar -> Pcoq +newpath 458 431 moveto +467 427 477 422 484 415 curveto +516 385 537 337 548 308 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 551 309 moveto +551 298 lineto +545 307 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 551 309 moveto +551 298 lineto +545 307 lineto +closepath +stroke +end grestore +endpage +showpage +grestore +%%PageTrailer +%%EndPage: 1 +%%Trailer +%%Pages: 1 +end +restore +%%EOF diff --git a/dev/ocamlweb-doc/preamble.tex b/dev/ocamlweb-doc/preamble.tex new file mode 100644 index 00000000..2cd21f02 --- /dev/null +++ b/dev/ocamlweb-doc/preamble.tex @@ -0,0 +1,8 @@ +\documentclass[11pt]{article} +\usepackage[latin1]{inputenc} +\usepackage[T1]{fontenc} +\usepackage{ocamlweb} +\pagestyle{ocamlweb} +\usepackage{fullpage} +\usepackage{epsfig} +\begin{document} diff --git a/dev/ocamlweb-doc/pretyping.dep.ps b/dev/ocamlweb-doc/pretyping.dep.ps new file mode 100644 index 00000000..02d1b8b5 --- /dev/null +++ b/dev/ocamlweb-doc/pretyping.dep.ps @@ -0,0 +1,1259 @@ +%!PS-Adobe-2.0 +%%Creator: dot version 2.2 (Wed Jan 19 21:09:25 UTC 2005) +%%For: (herbelin) Hugo Herbelin +%%Title: G +%%Pages: (atend) +%%BoundingBox: 35 35 577 146 +%%EndComments +save +%%BeginProlog +/DotDict 200 dict def +DotDict begin + +/setupLatin1 { +mark +/EncodingVector 256 array def + EncodingVector 0 + +ISOLatin1Encoding 0 255 getinterval putinterval + +EncodingVector + dup 306 /AE + dup 301 /Aacute + dup 302 /Acircumflex + dup 304 /Adieresis + dup 300 /Agrave + dup 305 /Aring + dup 303 /Atilde + dup 307 /Ccedilla + dup 311 /Eacute + dup 312 /Ecircumflex + dup 313 /Edieresis + dup 310 /Egrave + dup 315 /Iacute + dup 316 /Icircumflex + dup 317 /Idieresis + dup 314 /Igrave + dup 334 /Udieresis + dup 335 /Yacute + dup 376 /thorn + dup 337 /germandbls + dup 341 /aacute + dup 342 /acircumflex + dup 344 /adieresis + dup 346 /ae + dup 340 /agrave + dup 345 /aring + dup 347 /ccedilla + dup 351 /eacute + dup 352 /ecircumflex + dup 353 /edieresis + dup 350 /egrave + dup 355 /iacute + dup 356 /icircumflex + dup 357 /idieresis + dup 354 /igrave + dup 360 /dcroat + dup 361 /ntilde + dup 363 /oacute + dup 364 /ocircumflex + dup 366 /odieresis + dup 362 /ograve + dup 365 /otilde + dup 370 /oslash + dup 372 /uacute + dup 373 /ucircumflex + dup 374 /udieresis + dup 371 /ugrave + dup 375 /yacute + dup 377 /ydieresis + +% Set up ISO Latin 1 character encoding +/starnetISO { + dup dup findfont dup length dict begin + { 1 index /FID ne { def }{ pop pop } ifelse + } forall + /Encoding EncodingVector def + currentdict end definefont +} def +/Times-Roman starnetISO def +/Times-Italic starnetISO def +/Times-Bold starnetISO def +/Times-BoldItalic starnetISO def +/Helvetica starnetISO def +/Helvetica-Oblique starnetISO def +/Helvetica-Bold starnetISO def +/Helvetica-BoldOblique starnetISO def +/Courier starnetISO def +/Courier-Oblique starnetISO def +/Courier-Bold starnetISO def +/Courier-BoldOblique starnetISO def +cleartomark +} bind def + +%%BeginResource: procset graphviz 0 0 +/coord-font-family /Times-Roman def +/default-font-family /Times-Roman def +/coordfont coord-font-family findfont 8 scalefont def + +/InvScaleFactor 1.0 def +/set_scale { + dup 1 exch div /InvScaleFactor exch def + dup scale +} bind def + +% styles +/solid { [] 0 setdash } bind def +/dashed { [9 InvScaleFactor mul dup ] 0 setdash } bind def +/dotted { [1 InvScaleFactor mul 6 InvScaleFactor mul] 0 setdash } bind def +/invis {/fill {newpath} def /stroke {newpath} def /show {pop newpath} def} bind def +/bold { 2 setlinewidth } bind def +/filled { } bind def +/unfilled { } bind def +/rounded { } bind def +/diagonals { } bind def + +% hooks for setting color +/nodecolor { sethsbcolor } bind def +/edgecolor { sethsbcolor } bind def +/graphcolor { sethsbcolor } bind def +/nopcolor {pop pop pop} bind def + +/beginpage { % i j npages + /npages exch def + /j exch def + /i exch def + /str 10 string def + npages 1 gt { + gsave + coordfont setfont + 0 0 moveto + (\() show i str cvs show (,) show j str cvs show (\)) show + grestore + } if +} bind def + +/set_font { + findfont exch + scalefont setfont +} def + +% draw aligned label in bounding box aligned to current point +/alignedtext { % width adj text + /text exch def + /adj exch def + /width exch def + gsave + width 0 gt { + text stringwidth pop adj mul 0 rmoveto + } if + [] 0 setdash + text show + grestore +} def + +/boxprim { % xcorner ycorner xsize ysize + 4 2 roll + moveto + 2 copy + exch 0 rlineto + 0 exch rlineto + pop neg 0 rlineto + closepath +} bind def + +/ellipse_path { + /ry exch def + /rx exch def + /y exch def + /x exch def + matrix currentmatrix + newpath + x y translate + rx ry scale + 0 0 1 0 360 arc + setmatrix +} bind def + +/endpage { showpage } bind def +/showpage { } def + +/layercolorseq + [ % layer color sequence - darkest to lightest + [0 0 0] + [.2 .8 .8] + [.4 .8 .8] + [.6 .8 .8] + [.8 .8 .8] + ] +def + +/layerlen layercolorseq length def + +/setlayer {/maxlayer exch def /curlayer exch def + layercolorseq curlayer 1 sub layerlen mod get + aload pop sethsbcolor + /nodecolor {nopcolor} def + /edgecolor {nopcolor} def + /graphcolor {nopcolor} def +} bind def + +/onlayer { curlayer ne {invis} if } def + +/onlayers { + /myupper exch def + /mylower exch def + curlayer mylower lt + curlayer myupper gt + or + {invis} if +} def + +/curlayer 0 def + +%%EndResource +%%EndProlog +%%BeginSetup +14 default-font-family set_font +1 setmiterlimit +% /arrowlength 10 def +% /arrowwidth 5 def + +% make sure pdfmark is harmless for PS-interpreters other than Distiller +/pdfmark where {pop} {userdict /pdfmark /cleartomark load put} ifelse +% make '<<' and '>>' safe on PS Level 1 devices +/languagelevel where {pop languagelevel}{1} ifelse +2 lt { + userdict (<<) cvn ([) cvn load put + userdict (>>) cvn ([) cvn load put +} if + +%%EndSetup +%%Page: 1 1 +%%PageBoundingBox: 36 36 577 146 +%%PageOrientation: Portrait +gsave +35 35 542 111 boxprim clip newpath +36 36 translate +0 0 1 beginpage +0.3600 set_scale +0 0 translate 0 rotate +0.000 0.000 0.000 graphcolor +14.00 /Times-Roman set_font + +% Unification +gsave 10 dict begin +610 118 45 18 ellipse_path +stroke +gsave 10 dict begin +577 113 moveto +(Unification) +[9.6 6.96 3.84 4.8 3.84 6.24 6.24 3.84 3.84 6.96 6.96] +xshow +end grestore +end grestore + +% Evarutil +gsave 10 dict begin +728 72 36 18 ellipse_path +stroke +gsave 10 dict begin +705 67 moveto +(Evarutil) +[8.4 6.72 6.24 4.8 6.96 3.84 3.84 3.84] +xshow +end grestore +end grestore + +% Unification -> Evarutil +newpath 643 105 moveto +657 99 674 93 689 87 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 691 90 moveto +699 83 lineto +688 83 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 691 90 moveto +699 83 lineto +688 83 lineto +closepath +stroke +end grestore + +% Pattern +gsave 10 dict begin +728 210 33 18 ellipse_path +stroke +gsave 10 dict begin +708 205 moveto +(Pattern) +[7.44 6.24 3.84 3.84 6.24 4.8 6.96] +xshow +end grestore +end grestore + +% Unification -> Pattern +newpath 631 134 moveto +650 150 680 173 701 189 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 699 192 moveto +709 195 lineto +703 186 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 699 192 moveto +709 195 lineto +703 186 lineto +closepath +stroke +end grestore + +% Retyping +gsave 10 dict begin +839 118 38 18 ellipse_path +stroke +gsave 10 dict begin +813 113 moveto +(Retyping) +[9.12 6 3.84 6.96 6.96 3.84 6.96 6.96] +xshow +end grestore +end grestore + +% Unification -> Retyping +newpath 656 118 moveto +695 118 750 118 790 118 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 790 122 moveto +800 118 lineto +790 115 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 790 122 moveto +800 118 lineto +790 115 lineto +closepath +stroke +end grestore + +% Typing +gsave 10 dict begin +839 64 32 18 ellipse_path +stroke +gsave 10 dict begin +819 59 moveto +(Typing) +[6.96 6.96 6.96 3.84 6.96 6.96] +xshow +end grestore +end grestore + +% Evarutil -> Typing +newpath 764 69 moveto +775 68 786 67 797 67 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 797 70 moveto +807 66 lineto +797 64 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 797 70 moveto +807 66 lineto +797 64 lineto +closepath +stroke +end grestore + +% Rawterm +gsave 10 dict begin +1109 110 39 18 ellipse_path +stroke +gsave 10 dict begin +1083 105 moveto +(Rawterm) +[9.36 5.76 10.08 3.84 6.24 4.8 10.8] +xshow +end grestore +end grestore + +% Pattern -> Rawterm +newpath 759 216 moveto +816 226 939 239 1024 191 curveto +1049 176 1038 155 1060 138 curveto +1069 131 1077 130 1084 129 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 1085 132 moveto +1094 127 lineto +1084 126 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 1085 132 moveto +1094 127 lineto +1084 126 lineto +closepath +stroke +end grestore + +% Inductiveops +gsave 10 dict begin +1109 164 49 18 ellipse_path +stroke +gsave 10 dict begin +1073 159 moveto +(Inductiveops) +[4.56 6.96 6.96 6.96 6.24 3.84 3.84 6.48 6.24 6.96 6.96 5.52] +xshow +end grestore +end grestore + +% Retyping -> Inductiveops +newpath 878 120 moveto +915 122 974 126 1024 137 curveto +1037 139 1051 144 1064 148 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 1063 151 moveto +1074 151 lineto +1065 145 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 1063 151 moveto +1074 151 lineto +1065 145 lineto +closepath +stroke +end grestore + +% Pretype_errors +gsave 10 dict begin +969 72 54 18 ellipse_path +stroke +gsave 10 dict begin +927 67 moveto +(Pretype_errors) +[7.68 4.56 6 3.84 6.96 6.96 6.24 6.96 6.24 5.04 4.56 6.96 4.56 5.52] +xshow +end grestore +end grestore + +% Typing -> Pretype_errors +newpath 871 66 moveto +881 67 893 68 905 68 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 905 71 moveto +915 69 lineto +905 65 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 905 71 moveto +915 69 lineto +905 65 lineto +closepath +stroke +end grestore + +% Pretype_errors -> Inductiveops +newpath 998 87 moveto +1007 92 1016 98 1024 104 curveto +1042 116 1043 124 1060 137 curveto +1063 139 1067 142 1071 144 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 1070 147 moveto +1080 149 lineto +1073 141 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 1070 147 moveto +1080 149 lineto +1073 141 lineto +closepath +stroke +end grestore + +% Pretype_errors -> Rawterm +newpath 1011 84 moveto +1029 88 1048 94 1065 98 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 1064 101 moveto +1075 101 lineto +1066 95 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 1064 101 moveto +1075 101 lineto +1066 95 lineto +closepath +stroke +end grestore + +% Tacred +gsave 10 dict begin +728 18 32 18 ellipse_path +stroke +gsave 10 dict begin +709 13 moveto +(Tacred) +[7.44 6.24 6.24 4.56 6.24 6.96] +xshow +end grestore +end grestore + +% Tacred -> Retyping +newpath 748 32 moveto +754 36 759 41 764 45 curveto +783 63 782 73 800 91 curveto +802 93 805 95 808 97 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 806 100 moveto +816 103 lineto +810 94 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 806 100 moveto +816 103 lineto +810 94 lineto +closepath +stroke +end grestore + +% Tacred -> Typing +newpath 754 29 moveto +769 35 787 43 803 49 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 802 53 moveto +813 53 lineto +805 46 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 802 53 moveto +813 53 lineto +805 46 lineto +closepath +stroke +end grestore + +% Cbv +gsave 10 dict begin +1246 41 27 18 ellipse_path +stroke +gsave 10 dict begin +1234 36 moveto +(Cbv) +[9.36 6.48 6.96] +xshow +end grestore +end grestore + +% Tacred -> Cbv +newpath 760 19 moveto +852 23 1111 35 1209 40 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 1209 44 moveto +1219 40 lineto +1209 37 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 1209 44 moveto +1219 40 lineto +1209 37 lineto +closepath +stroke +end grestore + +% Evd +gsave 10 dict begin +1361 110 27 18 ellipse_path +stroke +gsave 10 dict begin +1349 105 moveto +(Evd) +[8.4 6.96 6.96] +xshow +end grestore +end grestore + +% Cbv -> Evd +newpath 1266 53 moveto +1284 64 1312 80 1332 93 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 1331 96 moveto +1341 98 lineto +1334 90 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 1331 96 moveto +1341 98 lineto +1334 90 lineto +closepath +stroke +end grestore + +% Reductionops +gsave 10 dict begin +1246 164 51 18 ellipse_path +stroke +gsave 10 dict begin +1207 159 moveto +(Reductionops) +[9.12 6.24 6.96 6.96 6.24 3.84 3.84 6.96 6.96 6.96 6.96 5.52] +xshow +end grestore +end grestore + +% Inductiveops -> Reductionops +newpath 1158 164 moveto +1167 164 1175 164 1184 164 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 1184 168 moveto +1194 164 lineto +1184 161 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 1184 168 moveto +1194 164 lineto +1184 161 lineto +closepath +stroke +end grestore + +% Reductionops -> Evd +newpath 1277 150 moveto +1294 142 1313 133 1330 125 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 1331 128 moveto +1339 121 lineto +1328 122 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 1331 128 moveto +1339 121 lineto +1328 122 lineto +closepath +stroke +end grestore + +% Termops +gsave 10 dict begin +1462 110 37 18 ellipse_path +stroke +gsave 10 dict begin +1437 105 moveto +(Termops) +[7.2 6.24 4.8 10.8 6.96 6.96 5.52] +xshow +end grestore +end grestore + +% Evd -> Termops +newpath 1388 110 moveto +1396 110 1405 110 1414 110 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 1414 114 moveto +1424 110 lineto +1414 107 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 1414 114 moveto +1424 110 lineto +1414 107 lineto +closepath +stroke +end grestore + +% Recordops +gsave 10 dict begin +485 24 43 18 ellipse_path +stroke +gsave 10 dict begin +455 19 moveto +(Recordops) +[9.12 6.24 6.24 6.96 4.32 6.96 6.96 6.96 5.52] +xshow +end grestore +end grestore + +% Classops +gsave 10 dict begin +610 20 38 18 ellipse_path +stroke +gsave 10 dict begin +584 15 moveto +(Classops) +[9.36 3.84 6.24 5.52 5.52 6.96 6.96 5.52] +xshow +end grestore +end grestore + +% Recordops -> Classops +newpath 528 23 moveto +538 22 550 22 561 22 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 561 25 moveto +571 21 lineto +561 19 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 561 25 moveto +571 21 lineto +561 19 lineto +closepath +stroke +end grestore + +% Classops -> Tacred +newpath 649 19 moveto +661 19 674 19 686 19 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 686 23 moveto +696 19 lineto +686 16 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 686 23 moveto +696 19 lineto +686 16 lineto +closepath +stroke +end grestore + +% Rawterm -> Evd +newpath 1148 110 moveto +1196 110 1277 110 1324 110 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 1324 114 moveto +1334 110 lineto +1324 107 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 1324 114 moveto +1334 110 lineto +1324 107 lineto +closepath +stroke +end grestore + +% Pretyping +gsave 10 dict begin +40 183 40 18 ellipse_path +stroke +gsave 10 dict begin +13 178 moveto +(Pretyping) +[7.68 4.56 6 3.84 6.96 6.96 3.84 6.96 6.96] +xshow +end grestore +end grestore + +% Pretyping -> Pattern +newpath 78 189 moveto +121 194 191 202 251 202 curveto +251 202 251 202 485 202 curveto +556 202 636 205 685 208 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 685 212 moveto +695 208 lineto +685 205 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 685 212 moveto +695 208 lineto +685 205 lineto +closepath +stroke +end grestore + +% Cases +gsave 10 dict begin +146 64 30 18 ellipse_path +stroke +gsave 10 dict begin +129 59 moveto +(Cases) +[9.36 6.24 5.52 6.24 5.52] +xshow +end grestore +end grestore + +% Pretyping -> Cases +newpath 53 166 moveto +68 147 93 115 116 91 curveto +118 89 119 88 121 86 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 124 88 moveto +129 79 lineto +119 83 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 124 88 moveto +129 79 lineto +119 83 lineto +closepath +stroke +end grestore + +% Detyping +gsave 10 dict begin +969 164 39 18 ellipse_path +stroke +gsave 10 dict begin +942 159 moveto +(Detyping) +[10.08 6 3.84 6.96 6.96 3.84 6.96 6.96] +xshow +end grestore +end grestore + +% Pretyping -> Detyping +newpath 78 177 moveto +121 172 191 164 251 164 curveto +251 164 251 164 728 164 curveto +794 164 870 164 919 164 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 919 168 moveto +929 164 lineto +919 161 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 919 168 moveto +929 164 lineto +919 161 lineto +closepath +stroke +end grestore + +% Indrec +gsave 10 dict begin +251 271 31 18 ellipse_path +stroke +gsave 10 dict begin +233 266 moveto +(Indrec) +[4.56 6.96 6.96 4.56 6.24 6.24] +xshow +end grestore +end grestore + +% Pretyping -> Indrec +newpath 69 195 moveto +83 202 101 209 116 216 curveto +150 230 188 246 216 257 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 214 260 moveto +225 261 lineto +217 254 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 214 260 moveto +225 261 lineto +217 254 lineto +closepath +stroke +end grestore + +% Coercion +gsave 10 dict begin +251 67 39 18 ellipse_path +stroke +gsave 10 dict begin +225 62 moveto +(Coercion) +[9.36 6.96 6.24 4.56 6.24 3.84 6.96 6.96] +xshow +end grestore +end grestore + +% Cases -> Coercion +newpath 176 65 moveto +184 65 193 66 202 66 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 202 70 moveto +212 66 lineto +202 63 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 202 70 moveto +212 66 lineto +202 63 lineto +closepath +stroke +end grestore + +% Detyping -> Inductiveops +newpath 1009 164 moveto +1022 164 1036 164 1050 164 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 1050 168 moveto +1060 164 lineto +1050 161 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 1050 168 moveto +1060 164 lineto +1050 161 lineto +closepath +stroke +end grestore + +% Detyping -> Rawterm +newpath 999 152 moveto +1020 144 1047 133 1069 125 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 1070 128 moveto +1079 122 lineto +1068 122 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 1070 128 moveto +1079 122 lineto +1068 122 lineto +closepath +stroke +end grestore + +% Indrec -> Inductiveops +newpath 281 276 moveto +325 283 412 294 485 294 curveto +485 294 485 294 839 294 curveto +937 294 1036 225 1082 188 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 1085 190 moveto +1090 181 lineto +1080 185 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 1085 190 moveto +1090 181 lineto +1080 185 lineto +closepath +stroke +end grestore + +% Matching +gsave 10 dict begin +610 248 40 18 ellipse_path +stroke +gsave 10 dict begin +582 243 moveto +(Matching) +[12.48 6.24 3.84 6 6.96 3.84 6.96 6.96] +xshow +end grestore +end grestore + +% Matching -> Pattern +newpath 643 237 moveto +658 232 675 227 689 222 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 690 225 moveto +699 219 lineto +688 219 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 690 225 moveto +699 219 lineto +688 219 lineto +closepath +stroke +end grestore + +% Matching -> Reductionops +newpath 650 250 moveto +696 253 773 256 839 256 curveto +839 256 839 256 969 256 curveto +1059 256 1159 212 1210 184 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 1212 187 moveto +1219 179 lineto +1209 181 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 1212 187 moveto +1219 179 lineto +1209 181 lineto +closepath +stroke +end grestore + +% Evarconv +gsave 10 dict begin +366 67 40 18 ellipse_path +stroke +gsave 10 dict begin +339 62 moveto +(Evarconv) +[8.4 6.72 6.24 4.56 6.24 6.96 6.48 6.96] +xshow +end grestore +end grestore + +% Evarconv -> Evarutil +newpath 406 68 moveto +474 69 610 71 682 72 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 682 76 moveto +692 72 lineto +682 69 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 682 76 moveto +692 72 lineto +682 69 lineto +closepath +stroke +end grestore + +% Evarconv -> Recordops +newpath 397 56 moveto +411 51 428 45 442 39 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 443 42 moveto +452 36 lineto +441 36 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 443 42 moveto +452 36 lineto +441 36 lineto +closepath +stroke +end grestore + +% Coercion -> Evarconv +newpath 290 67 moveto +299 67 307 67 316 67 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 316 71 moveto +326 67 lineto +316 64 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 316 71 moveto +326 67 lineto +316 64 lineto +closepath +stroke +end grestore + +% Clenv +gsave 10 dict begin +146 118 30 18 ellipse_path +stroke +gsave 10 dict begin +129 113 moveto +(Clenv) +[9.36 3.84 6.24 6.48 6.96] +xshow +end grestore +end grestore + +% Clenv -> Unification +newpath 176 118 moveto +252 118 455 118 554 118 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 554 122 moveto +564 118 lineto +554 115 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 554 122 moveto +564 118 lineto +554 115 lineto +closepath +stroke +end grestore + +% Clenv -> Coercion +newpath 170 107 moveto +183 100 200 93 215 85 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 217 88 moveto +224 80 lineto +214 82 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 217 88 moveto +224 80 lineto +214 82 lineto +closepath +stroke +end grestore +endpage +showpage +grestore +%%PageTrailer +%%EndPage: 1 +%%Trailer +%%Pages: 1 +end +restore +%%EOF diff --git a/dev/ocamlweb-doc/proofs.dep.ps b/dev/ocamlweb-doc/proofs.dep.ps new file mode 100644 index 00000000..0e78f422 --- /dev/null +++ b/dev/ocamlweb-doc/proofs.dep.ps @@ -0,0 +1,638 @@ +%!PS-Adobe-2.0 +%%Creator: dot version 2.2 (Wed Jan 19 21:09:25 UTC 2005) +%%For: (herbelin) Hugo Herbelin +%%Title: G +%%Pages: (atend) +%%BoundingBox: 35 35 577 136 +%%EndComments +save +%%BeginProlog +/DotDict 200 dict def +DotDict begin + +/setupLatin1 { +mark +/EncodingVector 256 array def + EncodingVector 0 + +ISOLatin1Encoding 0 255 getinterval putinterval + +EncodingVector + dup 306 /AE + dup 301 /Aacute + dup 302 /Acircumflex + dup 304 /Adieresis + dup 300 /Agrave + dup 305 /Aring + dup 303 /Atilde + dup 307 /Ccedilla + dup 311 /Eacute + dup 312 /Ecircumflex + dup 313 /Edieresis + dup 310 /Egrave + dup 315 /Iacute + dup 316 /Icircumflex + dup 317 /Idieresis + dup 314 /Igrave + dup 334 /Udieresis + dup 335 /Yacute + dup 376 /thorn + dup 337 /germandbls + dup 341 /aacute + dup 342 /acircumflex + dup 344 /adieresis + dup 346 /ae + dup 340 /agrave + dup 345 /aring + dup 347 /ccedilla + dup 351 /eacute + dup 352 /ecircumflex + dup 353 /edieresis + dup 350 /egrave + dup 355 /iacute + dup 356 /icircumflex + dup 357 /idieresis + dup 354 /igrave + dup 360 /dcroat + dup 361 /ntilde + dup 363 /oacute + dup 364 /ocircumflex + dup 366 /odieresis + dup 362 /ograve + dup 365 /otilde + dup 370 /oslash + dup 372 /uacute + dup 373 /ucircumflex + dup 374 /udieresis + dup 371 /ugrave + dup 375 /yacute + dup 377 /ydieresis + +% Set up ISO Latin 1 character encoding +/starnetISO { + dup dup findfont dup length dict begin + { 1 index /FID ne { def }{ pop pop } ifelse + } forall + /Encoding EncodingVector def + currentdict end definefont +} def +/Times-Roman starnetISO def +/Times-Italic starnetISO def +/Times-Bold starnetISO def +/Times-BoldItalic starnetISO def +/Helvetica starnetISO def +/Helvetica-Oblique starnetISO def +/Helvetica-Bold starnetISO def +/Helvetica-BoldOblique starnetISO def +/Courier starnetISO def +/Courier-Oblique starnetISO def +/Courier-Bold starnetISO def +/Courier-BoldOblique starnetISO def +cleartomark +} bind def + +%%BeginResource: procset graphviz 0 0 +/coord-font-family /Times-Roman def +/default-font-family /Times-Roman def +/coordfont coord-font-family findfont 8 scalefont def + +/InvScaleFactor 1.0 def +/set_scale { + dup 1 exch div /InvScaleFactor exch def + dup scale +} bind def + +% styles +/solid { [] 0 setdash } bind def +/dashed { [9 InvScaleFactor mul dup ] 0 setdash } bind def +/dotted { [1 InvScaleFactor mul 6 InvScaleFactor mul] 0 setdash } bind def +/invis {/fill {newpath} def /stroke {newpath} def /show {pop newpath} def} bind def +/bold { 2 setlinewidth } bind def +/filled { } bind def +/unfilled { } bind def +/rounded { } bind def +/diagonals { } bind def + +% hooks for setting color +/nodecolor { sethsbcolor } bind def +/edgecolor { sethsbcolor } bind def +/graphcolor { sethsbcolor } bind def +/nopcolor {pop pop pop} bind def + +/beginpage { % i j npages + /npages exch def + /j exch def + /i exch def + /str 10 string def + npages 1 gt { + gsave + coordfont setfont + 0 0 moveto + (\() show i str cvs show (,) show j str cvs show (\)) show + grestore + } if +} bind def + +/set_font { + findfont exch + scalefont setfont +} def + +% draw aligned label in bounding box aligned to current point +/alignedtext { % width adj text + /text exch def + /adj exch def + /width exch def + gsave + width 0 gt { + text stringwidth pop adj mul 0 rmoveto + } if + [] 0 setdash + text show + grestore +} def + +/boxprim { % xcorner ycorner xsize ysize + 4 2 roll + moveto + 2 copy + exch 0 rlineto + 0 exch rlineto + pop neg 0 rlineto + closepath +} bind def + +/ellipse_path { + /ry exch def + /rx exch def + /y exch def + /x exch def + matrix currentmatrix + newpath + x y translate + rx ry scale + 0 0 1 0 360 arc + setmatrix +} bind def + +/endpage { showpage } bind def +/showpage { } def + +/layercolorseq + [ % layer color sequence - darkest to lightest + [0 0 0] + [.2 .8 .8] + [.4 .8 .8] + [.6 .8 .8] + [.8 .8 .8] + ] +def + +/layerlen layercolorseq length def + +/setlayer {/maxlayer exch def /curlayer exch def + layercolorseq curlayer 1 sub layerlen mod get + aload pop sethsbcolor + /nodecolor {nopcolor} def + /edgecolor {nopcolor} def + /graphcolor {nopcolor} def +} bind def + +/onlayer { curlayer ne {invis} if } def + +/onlayers { + /myupper exch def + /mylower exch def + curlayer mylower lt + curlayer myupper gt + or + {invis} if +} def + +/curlayer 0 def + +%%EndResource +%%EndProlog +%%BeginSetup +14 default-font-family set_font +1 setmiterlimit +% /arrowlength 10 def +% /arrowwidth 5 def + +% make sure pdfmark is harmless for PS-interpreters other than Distiller +/pdfmark where {pop} {userdict /pdfmark /cleartomark load put} ifelse +% make '<<' and '>>' safe on PS Level 1 devices +/languagelevel where {pop languagelevel}{1} ifelse +2 lt { + userdict (<<) cvn ([) cvn load put + userdict (>>) cvn ([) cvn load put +} if + +%%EndSetup +%%Page: 1 1 +%%PageBoundingBox: 36 36 577 136 +%%PageOrientation: Portrait +gsave +35 35 542 101 boxprim clip newpath +36 36 translate +0 0 1 beginpage +0.6923 set_scale +0 0 translate 0 rotate +0.000 0.000 0.000 graphcolor +14.00 /Times-Roman set_font + +% Tactic_debug +gsave 10 dict begin +163 72 51 18 ellipse_path +stroke +gsave 10 dict begin +125 67 moveto +(Tactic_debug) +[7.44 6.24 6.24 3.84 3.84 6.24 6.96 6.96 6.24 6.96 6.96 6.96] +xshow +end grestore +end grestore + +% Refiner +gsave 10 dict begin +287 72 34 18 ellipse_path +stroke +gsave 10 dict begin +266 67 moveto +(Refiner) +[9.12 6.24 4.8 3.84 6.96 6.24 4.56] +xshow +end grestore +end grestore + +% Tactic_debug -> Refiner +newpath 214 72 moveto +223 72 233 72 243 72 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 243 76 moveto +253 72 lineto +243 69 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 243 76 moveto +253 72 lineto +243 69 lineto +closepath +stroke +end grestore + +% Logic +gsave 10 dict begin +390 72 30 18 ellipse_path +stroke +gsave 10 dict begin +373 67 moveto +(Logic) +[8.4 6.96 6.96 3.84 6.24] +xshow +end grestore +end grestore + +% Refiner -> Logic +newpath 321 72 moveto +330 72 340 72 350 72 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 350 76 moveto +360 72 lineto +350 69 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 350 76 moveto +360 72 lineto +350 69 lineto +closepath +stroke +end grestore + +% Tacmach +gsave 10 dict begin +163 126 38 18 ellipse_path +stroke +gsave 10 dict begin +137 121 moveto +(Tacmach) +[7.44 6.24 6.24 10.8 6.24 6 6.96] +xshow +end grestore +end grestore + +% Tacmach -> Refiner +newpath 191 114 moveto +209 106 232 96 251 88 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 253 91 moveto +261 84 lineto +250 84 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 253 91 moveto +261 84 lineto +250 84 lineto +closepath +stroke +end grestore + +% Redexpr +gsave 10 dict begin +287 126 36 18 ellipse_path +stroke +gsave 10 dict begin +263 121 moveto +(Redexpr) +[9.12 6.24 6.96 5.76 6.96 6.96 4.56] +xshow +end grestore +end grestore + +% Tacmach -> Redexpr +newpath 202 126 moveto +214 126 227 126 240 126 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 240 130 moveto +250 126 lineto +240 123 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 240 130 moveto +250 126 lineto +240 123 lineto +closepath +stroke +end grestore + +% Proof_trees +gsave 10 dict begin +502 72 45 18 ellipse_path +stroke +gsave 10 dict begin +469 67 moveto +(Proof_trees) +[7.68 4.56 6.96 6.96 4.56 6.96 3.84 4.56 6.24 6.24 5.52] +xshow +end grestore +end grestore + +% Logic -> Proof_trees +newpath 420 72 moveto +428 72 437 72 446 72 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 446 76 moveto +456 72 lineto +446 69 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 446 76 moveto +456 72 lineto +446 69 lineto +closepath +stroke +end grestore + +% Proof_type +gsave 10 dict begin +628 72 44 18 ellipse_path +stroke +gsave 10 dict begin +597 67 moveto +(Proof_type) +[7.68 4.56 6.96 6.96 4.56 6.96 3.84 6.96 6.96 6.24] +xshow +end grestore +end grestore + +% Tacexpr +gsave 10 dict begin +744 72 35 18 ellipse_path +stroke +gsave 10 dict begin +721 67 moveto +(Tacexpr) +[7.44 6.24 6.24 5.76 6.96 6.96 4.56] +xshow +end grestore +end grestore + +% Proof_type -> Tacexpr +newpath 672 72 moveto +680 72 689 72 698 72 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 698 76 moveto +708 72 lineto +698 69 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 698 76 moveto +708 72 lineto +698 69 lineto +closepath +stroke +end grestore + +% Proof_trees -> Proof_type +newpath 548 72 moveto +557 72 565 72 574 72 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 574 76 moveto +584 72 lineto +574 69 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 574 76 moveto +584 72 lineto +574 69 lineto +closepath +stroke +end grestore + +% Pfedit +gsave 10 dict begin +38 112 29 18 ellipse_path +stroke +gsave 10 dict begin +21 107 moveto +(Pfedit) +[7.68 4.08 6.24 6.96 3.84 3.84] +xshow +end grestore +end grestore + +% Pfedit -> Tacmach +newpath 67 115 moveto +81 117 99 118 115 120 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 115 123 moveto +125 122 lineto +116 117 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 115 123 moveto +125 122 lineto +116 117 lineto +closepath +stroke +end grestore + +% Evar_refiner +gsave 10 dict begin +163 18 49 18 ellipse_path +stroke +gsave 10 dict begin +127 13 moveto +(Evar_refiner) +[8.4 6.72 6.24 4.56 6.96 4.56 6.24 4.8 3.84 6.96 6.24 4.56] +xshow +end grestore +end grestore + +% Pfedit -> Evar_refiner +newpath 53 96 moveto +67 82 90 60 112 45 curveto +116 42 120 40 124 37 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 126 40 moveto +133 32 lineto +123 34 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 126 40 moveto +133 32 lineto +123 34 lineto +closepath +stroke +end grestore + +% Evar_refiner -> Refiner +newpath 195 32 moveto +212 40 233 49 251 57 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 249 60 moveto +260 61 lineto +252 54 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 249 60 moveto +260 61 lineto +252 54 lineto +closepath +stroke +end grestore + +% Clenvtac +gsave 10 dict begin +38 45 38 18 ellipse_path +stroke +gsave 10 dict begin +13 40 moveto +(Clenvtac) +[9.36 3.84 6.24 6.48 6.96 4.08 6.24 6.24] +xshow +end grestore +end grestore + +% Clenvtac -> Tacmach +newpath 58 61 moveto +73 72 93 87 112 99 curveto +117 102 123 105 128 108 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 127 111 moveto +137 113 lineto +130 105 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 127 111 moveto +137 113 lineto +130 105 lineto +closepath +stroke +end grestore + +% Clenvtac -> Evar_refiner +newpath 73 37 moveto +85 35 98 32 110 29 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 111 32 moveto +120 27 lineto +110 26 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 111 32 moveto +120 27 lineto +110 26 lineto +closepath +stroke +end grestore +endpage +showpage +grestore +%%PageTrailer +%%EndPage: 1 +%%Trailer +%%Pages: 1 +end +restore +%%EOF diff --git a/dev/ocamlweb-doc/syntax.mly b/dev/ocamlweb-doc/syntax.mly new file mode 100644 index 00000000..bfc7d5cc --- /dev/null +++ b/dev/ocamlweb-doc/syntax.mly @@ -0,0 +1,224 @@ +%{ +open Ast +open Parse +%} + +%token META INT IDENT +%token OPER +%token LPAR RPAR BAR COMMA COLON BANG FUN DOT RARROW LET COLONEQ IN IF +%token THEN ELSE EVAL AT FOR PROP SET TYPE WILDCARD FIX +%token COFIX MATCH WITH END AND LBRACE RBRACE STRUCT AS SIMPL PERCENT +%token EOF + +%start main +%type main + +%start constr +%type constr + +%start simple_constr +%type simple_constr + +%% + +main: + constr EOF { $1 } +; + + +paren_constr: + constr COMMA paren_constr { Pair($1,$3) } + | constr { $1 } +; + +constr: + binder_constr { $1 } + | oper_constr { close_stack $1 } +; + +binder_constr: + BANG ne_binders DOT constr { Prod($2, $4) } + | FUN ne_binders type_cstr RARROW constr { Lambda($2,mk_cast $5 $3) } + | LET IDENT binders type_cstr COLONEQ constr IN constr + { Let($2,mk_lambda $3 (mk_cast $6 $4),$8) } + | LET LPAR comma_binders RPAR COLONEQ constr IN constr + { LetCase($3,$6,$8) } + | IF constr THEN constr ELSE constr { IfCase($2,$4,$6) } + | fix_constr { $1 } + | EVAL rfun IN constr { Eval($2,$4) } +; + +comma_binders: + ne_comma_binders { $1 } + | { [] } +; + +ne_comma_binders: + binder COMMA ne_comma_binders { $1 :: $3 } + | binder { [$1] } +; + +rfun: + SIMPL { Simpl } +; + + +/* 2 Conflits shift/reduce */ +oper_constr: + oper_constr oper appl_constr + { parse_term $3 (parse_oper $2 $1) } + | oper_constr oper binder_constr + { parse_term $3 (parse_oper $2 $1) } + | oper_constr oper { parse_oper $2 $1 } + | { empty } + | appl_constr { parse_term $1 empty } +; + +oper: + OPER {$1} + | COLON {":"} +; + +appl_constr: + simple_constr ne_appl_args { Appl($1,$2) } + | AT global simple_constrs { ApplExpl($2,$3) } + | simple_constr { $1 } +; + +appl_arg: + AT INT COLONEQ simple_constr { (Some $2,$4) } + | simple_constr { (None,$1) } +; + +ne_appl_args: + appl_arg { [$1] } + | appl_arg ne_appl_args { $1::$2 } +; + +simple_constr: + atomic_constr { $1 } + | match_constr { $1 } + | LPAR paren_constr RPAR { $2 } + | simple_constr PERCENT IDENT { Scope($3,$1) } +; + +simple_constrs: + simple_constr simple_constrs { $1::$2 } + | { [] } +; + +atomic_constr: + global { Qualid $1 } + | PROP { Prop } + | SET { Set } + | TYPE { Type } + | INT { Int $1 } + | WILDCARD { Hole } + | META { Meta $1 } +; + +global: + IDENT DOT global { $1 :: $3 } + | IDENT { [$1] } +; + +/* Conflit normal */ +fix_constr: + fix_kw fix_decl + { let (id,_,_,_,_ as fx) = $2 in Fixp($1,[fx],id) } + | fix_kw fix_decl fix_decls FOR IDENT { Fixp($1, $2::$3, $5) } +; + +fix_kw: FIX {Fix} | COFIX {CoFix} +; + +fix_decl: + IDENT binders type_cstr annot COLONEQ constr { ($1,$2,$3,$4,$6) } +; + +fix_decls: + AND fix_decl fix_decls { $2::$3 } + | AND fix_decl { [$2] } +; + +annot: + LBRACE STRUCT IDENT RBRACE { Some $3 } + | { None } +; + +match_constr: + MATCH case_items case_type WITH branches END { Match($2,$3,$5) } +; + +case_items: + case_item { [$1] } + | case_item COMMA case_items { $1::$3 } +; + +case_item: + constr pred_pattern { ($1,$2) } +; + +case_type: + RARROW constr { Some $2 } + | { None } +; + +pred_pattern: + AS IDENT COLON constr { (Some $2, Some $4) } + | AS IDENT { (Some $2, None) } + | COLON constr { (None, Some $2) } + | { (None,None) } +; + +branches: + BAR branch_list { $2 } + | branch_list { $1 } + | { [] } +; + +branch_list: + patterns RARROW constr { [$1, $3] } + | patterns RARROW constr BAR branch_list { ($1,$3)::$5 } +; + +patterns: + pattern { [$1] } + | pattern COMMA patterns { $1::$3 } +; + +pattern: + pattern AS IDENT { PatAs($1,$3) } + | pattern COLON constr { PatType($1,$3) } + | IDENT simple_patterns { PatConstr($1,$2) } + | simple_pattern { $1 } +; + +simple_pattern: + IDENT { PatVar $1 } + | LPAR pattern RPAR { $2 } +; + +simple_patterns: + simple_pattern { [$1] } + | simple_pattern simple_patterns { $1::$2 } +; + +binder: + IDENT { ($1,Hole) } + | LPAR IDENT type_cstr RPAR { ($2,$3) } +; + +binders: + ne_binders { $1 } + | { [] } + +ne_binders: + binder { [$1] } + | binder ne_binders { $1::$2 } +; + +type_cstr: + COLON constr { $2 } + | { Hole } +; diff --git a/dev/ocamlweb-doc/tactics.dep.ps b/dev/ocamlweb-doc/tactics.dep.ps new file mode 100644 index 00000000..f4de22b7 --- /dev/null +++ b/dev/ocamlweb-doc/tactics.dep.ps @@ -0,0 +1,991 @@ +%!PS-Adobe-2.0 +%%Creator: dot version 2.2 (Wed Jan 19 21:09:25 UTC 2005) +%%For: (herbelin) Hugo Herbelin +%%Title: G +%%Pages: (atend) +%%BoundingBox: 35 35 577 165 +%%EndComments +save +%%BeginProlog +/DotDict 200 dict def +DotDict begin + +/setupLatin1 { +mark +/EncodingVector 256 array def + EncodingVector 0 + +ISOLatin1Encoding 0 255 getinterval putinterval + +EncodingVector + dup 306 /AE + dup 301 /Aacute + dup 302 /Acircumflex + dup 304 /Adieresis + dup 300 /Agrave + dup 305 /Aring + dup 303 /Atilde + dup 307 /Ccedilla + dup 311 /Eacute + dup 312 /Ecircumflex + dup 313 /Edieresis + dup 310 /Egrave + dup 315 /Iacute + dup 316 /Icircumflex + dup 317 /Idieresis + dup 314 /Igrave + dup 334 /Udieresis + dup 335 /Yacute + dup 376 /thorn + dup 337 /germandbls + dup 341 /aacute + dup 342 /acircumflex + dup 344 /adieresis + dup 346 /ae + dup 340 /agrave + dup 345 /aring + dup 347 /ccedilla + dup 351 /eacute + dup 352 /ecircumflex + dup 353 /edieresis + dup 350 /egrave + dup 355 /iacute + dup 356 /icircumflex + dup 357 /idieresis + dup 354 /igrave + dup 360 /dcroat + dup 361 /ntilde + dup 363 /oacute + dup 364 /ocircumflex + dup 366 /odieresis + dup 362 /ograve + dup 365 /otilde + dup 370 /oslash + dup 372 /uacute + dup 373 /ucircumflex + dup 374 /udieresis + dup 371 /ugrave + dup 375 /yacute + dup 377 /ydieresis + +% Set up ISO Latin 1 character encoding +/starnetISO { + dup dup findfont dup length dict begin + { 1 index /FID ne { def }{ pop pop } ifelse + } forall + /Encoding EncodingVector def + currentdict end definefont +} def +/Times-Roman starnetISO def +/Times-Italic starnetISO def +/Times-Bold starnetISO def +/Times-BoldItalic starnetISO def +/Helvetica starnetISO def +/Helvetica-Oblique starnetISO def +/Helvetica-Bold starnetISO def +/Helvetica-BoldOblique starnetISO def +/Courier starnetISO def +/Courier-Oblique starnetISO def +/Courier-Bold starnetISO def +/Courier-BoldOblique starnetISO def +cleartomark +} bind def + +%%BeginResource: procset graphviz 0 0 +/coord-font-family /Times-Roman def +/default-font-family /Times-Roman def +/coordfont coord-font-family findfont 8 scalefont def + +/InvScaleFactor 1.0 def +/set_scale { + dup 1 exch div /InvScaleFactor exch def + dup scale +} bind def + +% styles +/solid { [] 0 setdash } bind def +/dashed { [9 InvScaleFactor mul dup ] 0 setdash } bind def +/dotted { [1 InvScaleFactor mul 6 InvScaleFactor mul] 0 setdash } bind def +/invis {/fill {newpath} def /stroke {newpath} def /show {pop newpath} def} bind def +/bold { 2 setlinewidth } bind def +/filled { } bind def +/unfilled { } bind def +/rounded { } bind def +/diagonals { } bind def + +% hooks for setting color +/nodecolor { sethsbcolor } bind def +/edgecolor { sethsbcolor } bind def +/graphcolor { sethsbcolor } bind def +/nopcolor {pop pop pop} bind def + +/beginpage { % i j npages + /npages exch def + /j exch def + /i exch def + /str 10 string def + npages 1 gt { + gsave + coordfont setfont + 0 0 moveto + (\() show i str cvs show (,) show j str cvs show (\)) show + grestore + } if +} bind def + +/set_font { + findfont exch + scalefont setfont +} def + +% draw aligned label in bounding box aligned to current point +/alignedtext { % width adj text + /text exch def + /adj exch def + /width exch def + gsave + width 0 gt { + text stringwidth pop adj mul 0 rmoveto + } if + [] 0 setdash + text show + grestore +} def + +/boxprim { % xcorner ycorner xsize ysize + 4 2 roll + moveto + 2 copy + exch 0 rlineto + 0 exch rlineto + pop neg 0 rlineto + closepath +} bind def + +/ellipse_path { + /ry exch def + /rx exch def + /y exch def + /x exch def + matrix currentmatrix + newpath + x y translate + rx ry scale + 0 0 1 0 360 arc + setmatrix +} bind def + +/endpage { showpage } bind def +/showpage { } def + +/layercolorseq + [ % layer color sequence - darkest to lightest + [0 0 0] + [.2 .8 .8] + [.4 .8 .8] + [.6 .8 .8] + [.8 .8 .8] + ] +def + +/layerlen layercolorseq length def + +/setlayer {/maxlayer exch def /curlayer exch def + layercolorseq curlayer 1 sub layerlen mod get + aload pop sethsbcolor + /nodecolor {nopcolor} def + /edgecolor {nopcolor} def + /graphcolor {nopcolor} def +} bind def + +/onlayer { curlayer ne {invis} if } def + +/onlayers { + /myupper exch def + /mylower exch def + curlayer mylower lt + curlayer myupper gt + or + {invis} if +} def + +/curlayer 0 def + +%%EndResource +%%EndProlog +%%BeginSetup +14 default-font-family set_font +1 setmiterlimit +% /arrowlength 10 def +% /arrowwidth 5 def + +% make sure pdfmark is harmless for PS-interpreters other than Distiller +/pdfmark where {pop} {userdict /pdfmark /cleartomark load put} ifelse +% make '<<' and '>>' safe on PS Level 1 devices +/languagelevel where {pop languagelevel}{1} ifelse +2 lt { + userdict (<<) cvn ([) cvn load put + userdict (>>) cvn ([) cvn load put +} if + +%%EndSetup +%%Page: 1 1 +%%PageBoundingBox: 36 36 577 165 +%%PageOrientation: Portrait +gsave +35 35 542 130 boxprim clip newpath +36 36 translate +0 0 1 beginpage +0.4696 set_scale +0 0 translate 0 rotate +0.000 0.000 0.000 graphcolor +14.00 /Times-Roman set_font + +% Extraargs +gsave 10 dict begin +483 110 40 18 ellipse_path +stroke +gsave 10 dict begin +455 105 moveto +(Extraargs) +[8.4 6.96 3.84 4.56 6.24 6.24 4.32 6.96 5.52] +xshow +end grestore +end grestore + +% Setoid_replace +gsave 10 dict begin +615 64 54 18 ellipse_path +stroke +gsave 10 dict begin +573 59 moveto +(Setoid_replace) +[7.68 6 3.84 6.96 3.84 6.96 6.96 4.56 6.24 6.96 3.84 6.24 6.24 6.24] +xshow +end grestore +end grestore + +% Extraargs -> Setoid_replace +newpath 515 99 moveto +531 93 550 87 567 81 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 569 84 moveto +577 77 lineto +566 77 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 569 84 moveto +577 77 lineto +566 77 lineto +closepath +stroke +end grestore + +% Tactics +gsave 10 dict begin +884 110 33 18 ellipse_path +stroke +gsave 10 dict begin +864 105 moveto +(Tactics) +[7.44 6.24 6.24 3.84 3.84 6.24 5.52] +xshow +end grestore +end grestore + +% Setoid_replace -> Tactics +newpath 669 66 moveto +709 68 764 72 810 83 curveto +823 85 837 90 848 94 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 847 98 moveto +858 98 lineto +850 91 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 847 98 moveto +858 98 lineto +850 91 lineto +closepath +stroke +end grestore + +% Termdn +gsave 10 dict begin +998 256 35 18 ellipse_path +stroke +gsave 10 dict begin +976 251 moveto +(Termdn) +[7.2 6.24 4.8 10.8 6.96 6.96] +xshow +end grestore +end grestore + +% Dn +gsave 10 dict begin +1112 256 27 18 ellipse_path +stroke +gsave 10 dict begin +1102 251 moveto +(Dn) +[10.08 6.96] +xshow +end grestore +end grestore + +% Termdn -> Dn +newpath 1033 256 moveto +1047 256 1061 256 1075 256 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 1075 260 moveto +1085 256 lineto +1075 253 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 1075 260 moveto +1085 256 lineto +1075 253 lineto +closepath +stroke +end grestore + +% Hipattern +gsave 10 dict begin +998 110 40 18 ellipse_path +stroke +gsave 10 dict begin +971 105 moveto +(Hipattern) +[10.08 3.84 6.96 6.24 3.84 3.84 6.24 4.8 6.96] +xshow +end grestore +end grestore + +% Tactics -> Hipattern +newpath 917 110 moveto +927 110 938 110 948 110 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 948 114 moveto +958 110 lineto +948 107 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 948 114 moveto +958 110 lineto +948 107 lineto +closepath +stroke +end grestore + +% Tacticals +gsave 10 dict begin +1112 110 38 18 ellipse_path +stroke +gsave 10 dict begin +1087 105 moveto +(Tacticals) +[7.44 6.24 6.24 3.84 3.84 6.24 6.24 3.84 5.52] +xshow +end grestore +end grestore + +% Hipattern -> Tacticals +newpath 1038 110 moveto +1047 110 1055 110 1064 110 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 1064 114 moveto +1074 110 lineto +1064 107 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 1064 114 moveto +1074 110 lineto +1064 107 lineto +closepath +stroke +end grestore + +% Tacinterp +gsave 10 dict begin +170 191 39 18 ellipse_path +stroke +gsave 10 dict begin +143 186 moveto +(Tacinterp) +[7.44 6.24 6.24 3.84 6.96 3.84 6.24 4.8 6.96] +xshow +end grestore +end grestore + +% Auto +gsave 10 dict begin +483 218 27 18 ellipse_path +stroke +gsave 10 dict begin +468 213 moveto +(Auto) +[9.6 6.96 3.84 6.96] +xshow +end grestore +end grestore + +% Tacinterp -> Auto +newpath 209 194 moveto +269 200 386 210 445 215 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 445 218 moveto +455 216 lineto +445 212 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 445 218 moveto +455 216 lineto +445 212 lineto +closepath +stroke +end grestore + +% Leminv +gsave 10 dict begin +281 166 35 18 ellipse_path +stroke +gsave 10 dict begin +259 161 moveto +(Leminv) +[8.4 6.24 10.8 3.84 6.48 6.96] +xshow +end grestore +end grestore + +% Tacinterp -> Leminv +newpath 205 183 moveto +216 181 228 178 239 175 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 240 178 moveto +249 173 lineto +239 172 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 240 178 moveto +249 173 lineto +239 172 lineto +closepath +stroke +end grestore + +% Hiddentac +gsave 10 dict begin +615 164 42 18 ellipse_path +stroke +gsave 10 dict begin +585 159 moveto +(Hiddentac) +[10.08 3.84 6.96 6.96 6.24 6.96 4.08 6.24 6.24] +xshow +end grestore +end grestore + +% Auto -> Hiddentac +newpath 507 208 moveto +526 200 553 189 574 181 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 576 184 moveto +584 177 lineto +573 177 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 576 184 moveto +584 177 lineto +573 177 lineto +closepath +stroke +end grestore + +% Dhyp +gsave 10 dict begin +615 218 29 18 ellipse_path +stroke +gsave 10 dict begin +599 213 moveto +(Dhyp) +[10.08 6.48 6.96 6.96] +xshow +end grestore +end grestore + +% Auto -> Dhyp +newpath 511 218 moveto +530 218 555 218 576 218 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 576 222 moveto +586 218 lineto +576 215 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 576 222 moveto +586 218 lineto +576 215 lineto +closepath +stroke +end grestore + +% Inv +gsave 10 dict begin +379 164 27 18 ellipse_path +stroke +gsave 10 dict begin +369 159 moveto +(Inv) +[4.56 6.48 6.96] +xshow +end grestore +end grestore + +% Leminv -> Inv +newpath 316 165 moveto +324 165 333 165 342 165 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 342 169 moveto +352 165 lineto +342 162 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 342 169 moveto +352 165 lineto +342 162 lineto +closepath +stroke +end grestore + +% Refine +gsave 10 dict begin +758 110 32 18 ellipse_path +stroke +gsave 10 dict begin +739 105 moveto +(Refine) +[9.12 6.24 4.8 3.84 6.96 6.24] +xshow +end grestore +end grestore + +% Refine -> Tactics +newpath 790 110 moveto +805 110 824 110 841 110 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 841 114 moveto +851 110 lineto +841 107 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 841 114 moveto +851 110 lineto +841 107 lineto +closepath +stroke +end grestore + +% Nbtermdn +gsave 10 dict begin +758 256 42 18 ellipse_path +stroke +gsave 10 dict begin +729 251 moveto +(Nbtermdn) +[10.08 6.96 3.84 6.24 4.8 10.8 6.96 6.96] +xshow +end grestore +end grestore + +% Btermdn +gsave 10 dict begin +884 256 38 18 ellipse_path +stroke +gsave 10 dict begin +859 251 moveto +(Btermdn) +[9.36 3.84 6.24 4.8 10.8 6.96 6.96] +xshow +end grestore +end grestore + +% Nbtermdn -> Btermdn +newpath 800 256 moveto +812 256 824 256 836 256 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 836 260 moveto +846 256 lineto +836 253 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 836 260 moveto +846 256 lineto +836 253 lineto +closepath +stroke +end grestore + +% Btermdn -> Termdn +newpath 922 256 moveto +932 256 943 256 953 256 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 953 260 moveto +963 256 lineto +953 253 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 953 260 moveto +963 256 lineto +953 253 lineto +closepath +stroke +end grestore + +% Elim +gsave 10 dict begin +483 164 27 18 ellipse_path +stroke +gsave 10 dict begin +468 159 moveto +(Elim) +[8.4 3.84 3.84 10.8] +xshow +end grestore +end grestore + +% Inv -> Elim +newpath 406 164 moveto +418 164 432 164 445 164 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 445 168 moveto +455 164 lineto +445 161 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 445 168 moveto +455 164 lineto +445 161 lineto +closepath +stroke +end grestore + +% Equality +gsave 10 dict begin +483 56 37 18 ellipse_path +stroke +gsave 10 dict begin +459 51 moveto +(Equality) +[8.4 6.72 6.96 6.24 3.84 3.84 3.84 6.96] +xshow +end grestore +end grestore + +% Inv -> Equality +newpath 390 147 moveto +401 130 421 102 442 83 curveto +445 80 448 78 451 76 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 453 79 moveto +459 70 lineto +449 73 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 453 79 moveto +459 70 lineto +449 73 lineto +closepath +stroke +end grestore + +% Elim -> Hiddentac +newpath 511 164 moveto +526 164 545 164 562 164 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 562 168 moveto +572 164 lineto +562 161 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 562 168 moveto +572 164 lineto +562 161 lineto +closepath +stroke +end grestore + +% Equality -> Setoid_replace +newpath 520 58 moveto +530 59 540 60 551 60 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 551 63 moveto +561 61 lineto +551 57 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 551 63 moveto +561 61 lineto +551 57 lineto +closepath +stroke +end grestore + +% Evar_tactics +gsave 10 dict begin +758 164 48 18 ellipse_path +stroke +gsave 10 dict begin +722 159 moveto +(Evar_tactics) +[8.4 6.72 6.24 4.56 6.96 4.08 6.24 6.24 3.84 3.84 6.24 5.52] +xshow +end grestore +end grestore + +% Hiddentac -> Evar_tactics +newpath 658 164 moveto +671 164 685 164 699 164 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 699 168 moveto +709 164 lineto +699 161 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 699 168 moveto +709 164 lineto +699 161 lineto +closepath +stroke +end grestore + +% Evar_tactics -> Tactics +newpath 790 150 moveto +808 142 830 132 849 125 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 850 128 moveto +858 121 lineto +847 122 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 850 128 moveto +858 121 lineto +847 122 lineto +closepath +stroke +end grestore + +% Dhyp -> Tactics +newpath 644 219 moveto +684 220 756 217 810 191 curveto +844 175 855 163 872 137 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 875 138 moveto +877 128 lineto +869 135 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 875 138 moveto +877 128 lineto +869 135 lineto +closepath +stroke +end grestore + +% Dhyp -> Nbtermdn +newpath 642 225 moveto +662 230 689 238 712 244 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 712 247 moveto +722 246 lineto +713 241 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 712 247 moveto +722 246 lineto +713 241 lineto +closepath +stroke +end grestore + +% Contradiction +gsave 10 dict begin +758 18 51 18 ellipse_path +stroke +gsave 10 dict begin +719 13 moveto +(Contradiction) +[9.36 6.96 6.96 3.84 4.56 6.24 6.96 3.84 6.24 3.84 3.84 6.96 6.96] +xshow +end grestore +end grestore + +% Contradiction -> Tactics +newpath 784 34 moveto +793 39 802 44 810 50 curveto +827 62 845 76 859 88 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 857 91 moveto +867 95 lineto +862 86 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 857 91 moveto +867 95 lineto +862 86 lineto +closepath +stroke +end grestore + +% Autorewrite +gsave 10 dict begin +47 191 47 18 ellipse_path +stroke +gsave 10 dict begin +13 186 moveto +(Autorewrite) +[9.6 6.96 3.84 6.96 4.56 5.76 10.08 4.8 3.84 3.84 6.24] +xshow +end grestore +end grestore + +% Autorewrite -> Tacinterp +newpath 94 191 moveto +102 191 111 191 120 191 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 120 195 moveto +130 191 lineto +120 188 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 120 195 moveto +130 191 lineto +120 188 lineto +closepath +stroke +end grestore +endpage +showpage +grestore +%%PageTrailer +%%EndPage: 1 +%%Trailer +%%Pages: 1 +end +restore +%%EOF diff --git a/dev/ocamlweb-doc/toplevel.dep.ps b/dev/ocamlweb-doc/toplevel.dep.ps new file mode 100644 index 00000000..e0355aac --- /dev/null +++ b/dev/ocamlweb-doc/toplevel.dep.ps @@ -0,0 +1,971 @@ +%!PS-Adobe-2.0 +%%Creator: dot version 2.2 (Wed Jan 19 21:09:25 UTC 2005) +%%For: (herbelin) Hugo Herbelin +%%Title: G +%%Pages: (atend) +%%BoundingBox: 35 35 577 166 +%%EndComments +save +%%BeginProlog +/DotDict 200 dict def +DotDict begin + +/setupLatin1 { +mark +/EncodingVector 256 array def + EncodingVector 0 + +ISOLatin1Encoding 0 255 getinterval putinterval + +EncodingVector + dup 306 /AE + dup 301 /Aacute + dup 302 /Acircumflex + dup 304 /Adieresis + dup 300 /Agrave + dup 305 /Aring + dup 303 /Atilde + dup 307 /Ccedilla + dup 311 /Eacute + dup 312 /Ecircumflex + dup 313 /Edieresis + dup 310 /Egrave + dup 315 /Iacute + dup 316 /Icircumflex + dup 317 /Idieresis + dup 314 /Igrave + dup 334 /Udieresis + dup 335 /Yacute + dup 376 /thorn + dup 337 /germandbls + dup 341 /aacute + dup 342 /acircumflex + dup 344 /adieresis + dup 346 /ae + dup 340 /agrave + dup 345 /aring + dup 347 /ccedilla + dup 351 /eacute + dup 352 /ecircumflex + dup 353 /edieresis + dup 350 /egrave + dup 355 /iacute + dup 356 /icircumflex + dup 357 /idieresis + dup 354 /igrave + dup 360 /dcroat + dup 361 /ntilde + dup 363 /oacute + dup 364 /ocircumflex + dup 366 /odieresis + dup 362 /ograve + dup 365 /otilde + dup 370 /oslash + dup 372 /uacute + dup 373 /ucircumflex + dup 374 /udieresis + dup 371 /ugrave + dup 375 /yacute + dup 377 /ydieresis + +% Set up ISO Latin 1 character encoding +/starnetISO { + dup dup findfont dup length dict begin + { 1 index /FID ne { def }{ pop pop } ifelse + } forall + /Encoding EncodingVector def + currentdict end definefont +} def +/Times-Roman starnetISO def +/Times-Italic starnetISO def +/Times-Bold starnetISO def +/Times-BoldItalic starnetISO def +/Helvetica starnetISO def +/Helvetica-Oblique starnetISO def +/Helvetica-Bold starnetISO def +/Helvetica-BoldOblique starnetISO def +/Courier starnetISO def +/Courier-Oblique starnetISO def +/Courier-Bold starnetISO def +/Courier-BoldOblique starnetISO def +cleartomark +} bind def + +%%BeginResource: procset graphviz 0 0 +/coord-font-family /Times-Roman def +/default-font-family /Times-Roman def +/coordfont coord-font-family findfont 8 scalefont def + +/InvScaleFactor 1.0 def +/set_scale { + dup 1 exch div /InvScaleFactor exch def + dup scale +} bind def + +% styles +/solid { [] 0 setdash } bind def +/dashed { [9 InvScaleFactor mul dup ] 0 setdash } bind def +/dotted { [1 InvScaleFactor mul 6 InvScaleFactor mul] 0 setdash } bind def +/invis {/fill {newpath} def /stroke {newpath} def /show {pop newpath} def} bind def +/bold { 2 setlinewidth } bind def +/filled { } bind def +/unfilled { } bind def +/rounded { } bind def +/diagonals { } bind def + +% hooks for setting color +/nodecolor { sethsbcolor } bind def +/edgecolor { sethsbcolor } bind def +/graphcolor { sethsbcolor } bind def +/nopcolor {pop pop pop} bind def + +/beginpage { % i j npages + /npages exch def + /j exch def + /i exch def + /str 10 string def + npages 1 gt { + gsave + coordfont setfont + 0 0 moveto + (\() show i str cvs show (,) show j str cvs show (\)) show + grestore + } if +} bind def + +/set_font { + findfont exch + scalefont setfont +} def + +% draw aligned label in bounding box aligned to current point +/alignedtext { % width adj text + /text exch def + /adj exch def + /width exch def + gsave + width 0 gt { + text stringwidth pop adj mul 0 rmoveto + } if + [] 0 setdash + text show + grestore +} def + +/boxprim { % xcorner ycorner xsize ysize + 4 2 roll + moveto + 2 copy + exch 0 rlineto + 0 exch rlineto + pop neg 0 rlineto + closepath +} bind def + +/ellipse_path { + /ry exch def + /rx exch def + /y exch def + /x exch def + matrix currentmatrix + newpath + x y translate + rx ry scale + 0 0 1 0 360 arc + setmatrix +} bind def + +/endpage { showpage } bind def +/showpage { } def + +/layercolorseq + [ % layer color sequence - darkest to lightest + [0 0 0] + [.2 .8 .8] + [.4 .8 .8] + [.6 .8 .8] + [.8 .8 .8] + ] +def + +/layerlen layercolorseq length def + +/setlayer {/maxlayer exch def /curlayer exch def + layercolorseq curlayer 1 sub layerlen mod get + aload pop sethsbcolor + /nodecolor {nopcolor} def + /edgecolor {nopcolor} def + /graphcolor {nopcolor} def +} bind def + +/onlayer { curlayer ne {invis} if } def + +/onlayers { + /myupper exch def + /mylower exch def + curlayer mylower lt + curlayer myupper gt + or + {invis} if +} def + +/curlayer 0 def + +%%EndResource +%%EndProlog +%%BeginSetup +14 default-font-family set_font +1 setmiterlimit +% /arrowlength 10 def +% /arrowwidth 5 def + +% make sure pdfmark is harmless for PS-interpreters other than Distiller +/pdfmark where {pop} {userdict /pdfmark /cleartomark load put} ifelse +% make '<<' and '>>' safe on PS Level 1 devices +/languagelevel where {pop languagelevel}{1} ifelse +2 lt { + userdict (<<) cvn ([) cvn load put + userdict (>>) cvn ([) cvn load put +} if + +%%EndSetup +%%Page: 1 1 +%%PageBoundingBox: 36 36 577 166 +%%PageOrientation: Portrait +gsave +35 35 542 131 boxprim clip newpath +36 36 translate +0 0 1 beginpage +0.4180 set_scale +0 0 translate 0 rotate +0.000 0.000 0.000 graphcolor +14.00 /Times-Roman set_font + +% Vernac +gsave 10 dict begin +562 145 33 18 ellipse_path +stroke +gsave 10 dict begin +541 140 moveto +(Vernac) +[8.88 6.24 4.8 6.96 6.24 6.24] +xshow +end grestore +end grestore + +% Vernacentries +gsave 10 dict begin +724 158 52 18 ellipse_path +stroke +gsave 10 dict begin +685 153 moveto +(Vernacentries) +[8.88 6.24 4.8 6.96 6.24 6.24 6.24 6.96 3.84 4.8 3.84 6.24 5.52] +xshow +end grestore +end grestore + +% Vernac -> Vernacentries +newpath 595 148 moveto +615 149 640 151 663 153 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 663 156 moveto +673 154 lineto +663 150 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 663 156 moveto +673 154 lineto +663 150 lineto +closepath +stroke +end grestore + +% Vernacinterp +gsave 10 dict begin +862 158 50 18 ellipse_path +stroke +gsave 10 dict begin +825 153 moveto +(Vernacinterp) +[8.88 6.24 4.8 6.96 6.24 6.24 3.84 6.96 3.84 6.24 4.8 6.96] +xshow +end grestore +end grestore + +% Vernacentries -> Vernacinterp +newpath 776 158 moveto +785 158 793 158 802 158 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 802 162 moveto +812 158 lineto +802 155 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 802 162 moveto +812 158 lineto +802 155 lineto +closepath +stroke +end grestore + +% Discharge +gsave 10 dict begin +862 212 42 18 ellipse_path +stroke +gsave 10 dict begin +833 207 moveto +(Discharge) +[10.08 3.84 5.52 6 6.96 6.24 4.32 6.72 6.24] +xshow +end grestore +end grestore + +% Vernacentries -> Discharge +newpath 758 171 moveto +777 179 801 188 822 196 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 820 199 moveto +831 200 lineto +823 193 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 820 199 moveto +831 200 lineto +823 193 lineto +closepath +stroke +end grestore + +% Mltop +gsave 10 dict begin +862 104 31 18 ellipse_path +stroke +gsave 10 dict begin +844 99 moveto +(Mltop) +[12.48 3.84 3.84 6.96 6.96] +xshow +end grestore +end grestore + +% Vernacentries -> Mltop +newpath 758 145 moveto +779 137 805 126 826 118 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 828 121 moveto +836 114 lineto +825 114 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 828 121 moveto +836 114 lineto +825 114 lineto +closepath +stroke +end grestore + +% Record +gsave 10 dict begin +862 281 33 18 ellipse_path +stroke +gsave 10 dict begin +842 276 moveto +(Record) +[9.12 6.24 6.24 6.96 4.32 6.96] +xshow +end grestore +end grestore + +% Vernacentries -> Record +newpath 742 175 moveto +760 192 788 217 812 239 curveto +819 246 828 253 835 259 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 833 262 moveto +843 266 lineto +838 257 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 833 262 moveto +843 266 lineto +838 257 lineto +closepath +stroke +end grestore + +% Himsg +gsave 10 dict begin +991 85 32 18 ellipse_path +stroke +gsave 10 dict begin +971 80 moveto +(Himsg) +[10.08 3.84 10.8 5.52 6.96] +xshow +end grestore +end grestore + +% Vernacinterp -> Himsg +newpath 890 143 moveto +897 139 905 135 912 131 curveto +929 123 946 112 960 103 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 962 106 moveto +969 98 lineto +959 100 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 962 106 moveto +969 98 lineto +959 100 lineto +closepath +stroke +end grestore + +% Vernacexpr +gsave 10 dict begin +1246 221 45 18 ellipse_path +stroke +gsave 10 dict begin +1213 216 moveto +(Vernacexpr) +[8.88 6.24 4.8 6.96 6.24 6.24 5.76 6.96 6.96 4.56] +xshow +end grestore +end grestore + +% Vernacinterp -> Vernacexpr +newpath 912 159 moveto +947 160 994 163 1034 169 curveto +1092 178 1158 195 1200 207 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 1199 210 moveto +1210 210 lineto +1201 204 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 1199 210 moveto +1210 210 lineto +1201 204 lineto +closepath +stroke +end grestore + +% Class +gsave 10 dict begin +1117 238 28 18 ellipse_path +stroke +gsave 10 dict begin +1101 233 moveto +(Class) +[9.36 3.84 6.24 5.52 5.52] +xshow +end grestore +end grestore + +% Discharge -> Class +newpath 902 217 moveto +917 219 933 221 948 223 curveto +992 228 1044 232 1079 235 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 1079 238 moveto +1089 236 lineto +1079 232 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 1079 238 moveto +1089 236 lineto +1079 232 lineto +closepath +stroke +end grestore + +% Recordobj +gsave 10 dict begin +991 196 42 18 ellipse_path +stroke +gsave 10 dict begin +962 191 moveto +(Recordobj) +[9.12 6.24 6.24 6.96 4.32 6.96 6.96 6.96 3.84] +xshow +end grestore +end grestore + +% Discharge -> Recordobj +newpath 902 207 moveto +914 205 927 204 940 202 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 940 205 moveto +950 201 lineto +940 199 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 940 205 moveto +950 201 lineto +940 199 lineto +closepath +stroke +end grestore + +% Command +gsave 10 dict begin +991 288 42 18 ellipse_path +stroke +gsave 10 dict begin +961 283 moveto +(Command) +[9.36 6.96 10.8 10.8 6.24 6.96 6.96] +xshow +end grestore +end grestore + +% Record -> Command +newpath 895 283 moveto +908 284 923 285 938 285 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 938 288 moveto +948 286 lineto +938 282 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 938 288 moveto +948 286 lineto +938 282 lineto +closepath +stroke +end grestore + +% Toplevel +gsave 10 dict begin +255 72 37 18 ellipse_path +stroke +gsave 10 dict begin +231 67 moveto +(Toplevel) +[7.2 6.96 6.96 3.84 5.76 6.48 6.24 3.84] +xshow +end grestore +end grestore + +% Protectedtoplevel +gsave 10 dict begin +390 72 61 18 ellipse_path +stroke +gsave 10 dict begin +341 67 moveto +(Protectedtoplevel) +[7.68 4.56 6.72 3.84 6.24 6.24 3.84 6.24 6.96 3.84 6.96 6.96 3.84 5.76 6.48 6.24 3.84] +xshow +end grestore +end grestore + +% Toplevel -> Protectedtoplevel +newpath 292 72 moveto +300 72 309 72 318 72 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 318 76 moveto +328 72 lineto +318 69 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 318 76 moveto +328 72 lineto +318 69 lineto +closepath +stroke +end grestore + +% Protectedtoplevel -> Vernac +newpath 425 87 moveto +455 100 497 117 527 130 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 525 133 moveto +536 134 lineto +528 127 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 525 133 moveto +536 134 lineto +528 127 lineto +closepath +stroke +end grestore + +% Cerrors +gsave 10 dict begin +724 65 34 18 ellipse_path +stroke +gsave 10 dict begin +702 60 moveto +(Cerrors) +[9.36 6.24 5.04 4.56 6.96 4.56 5.52] +xshow +end grestore +end grestore + +% Protectedtoplevel -> Cerrors +newpath 452 71 moveto +518 70 621 67 679 66 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 679 70 moveto +689 66 lineto +679 63 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 679 70 moveto +689 66 lineto +679 63 lineto +closepath +stroke +end grestore + +% Line_oriented_parser +gsave 10 dict begin +562 26 73 18 ellipse_path +stroke +gsave 10 dict begin +501 21 moveto +(Line_oriented_parser) +[8.4 3.84 6.96 6.24 6.96 6.96 4.8 3.84 6.24 6.96 3.84 6.24 6.96 6.96 6.96 6.24 4.56 5.52 6.24 4.56] +xshow +end grestore +end grestore + +% Protectedtoplevel -> Line_oriented_parser +newpath 436 60 moveto +457 55 481 48 502 42 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 503 45 moveto +512 39 lineto +501 39 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 503 45 moveto +512 39 lineto +501 39 lineto +closepath +stroke +end grestore + +% Metasyntax +gsave 10 dict begin +1117 292 46 18 ellipse_path +stroke +gsave 10 dict begin +1083 287 moveto +(Metasyntax) +[12.48 6 4.08 6.24 5.52 6.96 6.96 4.08 6.24 6.96] +xshow +end grestore +end grestore + +% Command -> Metasyntax +newpath 1034 289 moveto +1043 290 1052 290 1061 290 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 1061 293 moveto +1071 291 lineto +1061 287 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 1061 293 moveto +1071 291 lineto +1061 287 lineto +closepath +stroke +end grestore + +% Command -> Class +newpath 1022 276 moveto +1041 268 1065 259 1084 252 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 1085 255 moveto +1093 248 lineto +1082 249 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 1085 255 moveto +1093 248 lineto +1082 249 lineto +closepath +stroke +end grestore + +% Cerrors -> Himsg +newpath 758 67 moveto +796 69 859 73 912 77 curveto +924 78 937 79 949 80 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 949 83 moveto +959 81 lineto +949 77 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 949 83 moveto +959 81 lineto +949 77 lineto +closepath +stroke +end grestore + +% Minicoq +gsave 10 dict begin +38 126 37 18 ellipse_path +stroke +gsave 10 dict begin +13 121 moveto +(Minicoq) +[12.48 3.84 6.96 3.84 6.24 6.96 6.96] +xshow +end grestore +end grestore + +% Fhimsg +gsave 10 dict begin +147 126 34 18 ellipse_path +stroke +gsave 10 dict begin +125 121 moveto +(Fhimsg) +[7.68 6.96 3.84 10.8 5.52 6.96] +xshow +end grestore +end grestore + +% Minicoq -> Fhimsg +newpath 76 126 moveto +84 126 93 126 102 126 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 102 130 moveto +112 126 lineto +102 123 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 102 130 moveto +112 126 lineto +102 123 lineto +closepath +stroke +end grestore + +% Metasyntax -> Vernacexpr +newpath 1144 277 moveto +1163 267 1189 252 1210 241 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 1212 244 moveto +1219 236 lineto +1209 238 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 1212 244 moveto +1219 236 lineto +1209 238 lineto +closepath +stroke +end grestore + +% Coqtop +gsave 10 dict begin +38 45 34 18 ellipse_path +stroke +gsave 10 dict begin +17 40 moveto +(Coqtop) +[9.36 6.96 6.96 3.84 6.96 6.96] +xshow +end grestore +end grestore + +% Coqinit +gsave 10 dict begin +147 72 34 18 ellipse_path +stroke +gsave 10 dict begin +126 67 moveto +(Coqinit) +[9.36 6.96 6.96 3.84 6.96 3.84 3.84] +xshow +end grestore +end grestore + +% Coqtop -> Coqinit +newpath 69 53 moveto +81 56 94 59 106 62 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 105 65 moveto +116 65 lineto +107 59 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 105 65 moveto +116 65 lineto +107 59 lineto +closepath +stroke +end grestore + +% Usage +gsave 10 dict begin +147 18 31 18 ellipse_path +stroke +gsave 10 dict begin +129 13 moveto +(Usage) +[10.08 5.52 6.24 6.72 6.24] +xshow +end grestore +end grestore + +% Coqtop -> Usage +newpath 69 37 moveto +81 34 95 31 108 28 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 109 31 moveto +118 25 lineto +107 25 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 109 31 moveto +118 25 lineto +107 25 lineto +closepath +stroke +end grestore + +% Coqinit -> Toplevel +newpath 181 72 moveto +190 72 199 72 208 72 curveto +stroke +gsave 10 dict begin +solid +1 setlinewidth +0.000 0.000 0.000 edgecolor +newpath 208 76 moveto +218 72 lineto +208 69 lineto +closepath +fill +0.000 0.000 0.000 edgecolor +newpath 208 76 moveto +218 72 lineto +208 69 lineto +closepath +stroke +end grestore +endpage +showpage +grestore +%%PageTrailer +%%EndPage: 1 +%%Trailer +%%Pages: 1 +end +restore +%%EOF diff --git a/dev/perf-analysis b/dev/perf-analysis deleted file mode 100644 index 23259156..00000000 --- a/dev/perf-analysis +++ /dev/null @@ -1,47 +0,0 @@ -Performance analysis for V8-0 branch ------------------------------------- - - Dec 29, 2005: new test and use of -vm in Stalmarck - - Dec 27, 2005: contrib Karatsuba added (~ 30s) - -Dec 28, 2005: size decrease - mainly due to Defined moved to Qed in FSets (reduction from 95M to 7Mo) - -Dec 1-14, 2005: benchmarking server down - between the two dates: Godel: -10%, CoRN: -10% - probably due to changes around vm (new informative Cast, - change of equality in named_context_val) - - Oct 6, 2005: contribs IPC and Tait added (~ 22s and ~ 25s) - -Aug 19, 2005: time decrease after application of "Array.length x=0" Xavier's - suggestions for optimisation - (e.g. Nijmegen/QArith: -3%, Nijmegen/CoRN: -7%, Godel: -3%) - - Aug 1, 2005: contrib Kildall added (~ 65s) - -Jul 26-Aug 2, 2005: bench down - -Jul 14-15, 2005: 4 contribs failed including CoRN - -Jul 14, 2005: time increase after activation of "closure optimisation" - (e.g. Nijmegen/QArith: +8%, Nijmegen/CoRN: +3%, Godel: +13%) - - Jul 7, 2005: adding contrib Fermat4 - - Jun 17, 2005: contrib Goodstein extended and moved to CantorOrdinals (~ 30s) - - May 19, 2005: contrib Goodstein and prfx (~ 9s) added - -Apr 21, 2005: strange time decrease - (could it be due to the change of Back and Reset mechanism) - (e.g. Nijmegen/CoRN: -2%, Nijmegen/QARITH: -4%, Godel: -11%) - -Mar 20, 2005: fixed Logic.with_check bug - global time decrease (e.g. Nijmegen/CoRN: -3%, Nijmegen/QARITH: -1.5%) - -Jan 31-Feb 8, 2005: small instability - (e.g. CoRN: ~2015s -> ~1999s -> ~2032s, Godel: ~340s -> ~370s) - - Jan 13, 2005: contrib SumOfTwoSquare added (~ 38s) diff --git a/dev/style.txt b/dev/style.txt deleted file mode 100644 index 2e597dc4..00000000 --- a/dev/style.txt +++ /dev/null @@ -1,49 +0,0 @@ - -<< L'uniformité du style est plus importante que le style lui-même. >> -(Kernigan & Pike, The Practice of Programming) - -Mode Emacs -========== - Tuareg, que l'on trouve ici : http://www.prism.uvsq.fr/~acohen/tuareg/ - - avec le réglage suivant : (setq tuareg-in-indent 2) - -Types récursifs et filtrages -============================ - Une barre de séparation y compris sur le premier constructeur - -type t = - | A - | B of machin - -match expr with - | A -> ... - | B x -> ... - - -Conditionnelles -=============== - if condition then - premier-cas - else - deuxieme-cas - - Si effets de bord dans les branches, utilisez begin ... end et non des - parenthèses i.e. - - if condition then begin - instr1; - instr2 - end else begin - instr3; - instr4 - end - - Si la première branche lève une exception, évitez le else i.e. - - if condition then if condition then error "machin"; - error "machin" -----> suite - else - suite - - diff --git a/dev/tools/Makefile.common b/dev/tools/Makefile.common new file mode 100644 index 00000000..1ff5cf79 --- /dev/null +++ b/dev/tools/Makefile.common @@ -0,0 +1,52 @@ +# this Makefile contains goals common for directory and main devel makefiles + +ifndef TOPDIR +TOPDIR=.. +endif + +ifndef BASEDIR +BASEDIR= +endif + +# the following entries are used to make synchronize two source trees +# (on big computer and on a laptop for example) + +OTHER_FILE=$(TOPDIR)/dev/other +OTHER=$(shell cat $(OTHER_FILE)) + +# this is a directory of useful temporary things +WORKDIR=tmp + +ifneq (,$(findstring n,$(MAKEFLAGS))) +NFLAG=-n +else +NFLAG= +endif + +check_other: + +@(if [ "$(OTHER)" = "" ] ; then \ + echo You must put the ssh path to the other Coq source in $(OTHER_FILE) ; \ + echo For example: chrzaszc@ruta:coq/V7 ; \ + exit 1; \ + fi) + +get: check_other + +rsync -Cauvz $(NFLAG) $(OTHER)/ $(TOPDIR)/ + +@(if [ -d $(TOPDIR)/$(WORKDIR) ]; then \ + rsync -auvz $(NFLAG) $(OTHER)/tmp/ $(TOPDIR)/tmp/ ; \ + fi) + +put: check_other + +rsync -Cauvz $(NFLAG) $(TOPDIR)/ $(OTHER)/ + +@(if [ -d $(TOPDIR)/$(WORKDIR) ]; then \ + rsync -auvz $(NFLAG) $(TOPDIR)/tmp/ $(OTHER)/tmp/ ; \ + fi) + +sync: get put + + +conflicts: + cvs status | grep File | grep conflicts | less + +confl: conflicts + diff --git a/dev/tools/Makefile.devel b/dev/tools/Makefile.devel new file mode 100644 index 00000000..f3abb62d --- /dev/null +++ b/dev/tools/Makefile.devel @@ -0,0 +1,74 @@ +# to be linked to makefile (lowercase - takes precedence over Makefile) +# in main directory +# make devel in main directory should do this for you. + +TOPDIR=. +BASEDIR= + +SOURCEDIRS=lib kernel library pretyping parsing proofs tactics toplevel + +default: usage noargument + +usage:: + @echo Usage: make \ + @echo Targets are: + +usage:: + @echo " setup-devel -- set the devel makefile" +setup-devel: + @ln -sfv dev/Makefile.devel makefile + @(for i in $(SOURCEDIRS); do \ + (cd $(TOPDIR)/$$i; ln -sfv ../dev/Makefile.dir Makefile) \ + done) + + +usage:: + @echo " clean-devel -- clear all devel files" +clean-devel: + echo rm -f makefile .depend.devel + echo rm -f $(foreach dir,$(SOURCEDIRS), $(TOPDIR)/$(dir)/Makefile) + + +usage:: + @echo " coqtop -- make until the bytecode executable, make the link" +coqtop: bin/coqtop.byte + ln -sf bin/coqtop.byte coqtop + + +usage:: + @echo " quick -- make bytecode executable and states" +quick: + $(MAKE) states BEST=byte + +include Makefile + +include $(TOPDIR)/dev/Makefile.common + +# this file is better described in dev/Makefile.dir +include .depend.devel + +#if dev/Makefile.local exists, it is included +ifneq ($(wildcard $(TOPDIR)/dev/Makefile.local),) +include $(TOPDIR)/dev/Makefile.local +endif + + +usage:: + @echo " total -- runs coqtop with all theories required" +total: + ledit ./bin/coqtop.byte $(foreach th,$(THEORIESVO),-require $(notdir $(basename $(th)))) + + +usage:: + @echo " run -- makes and runs bytecode coqtop using ledit and the history file" + @echo " if you want to pass arguments to coqtop, use make run ARG=" +run: $(TOPDIR)/coqtop + ledit -h $(TOPDIR)/dev/debug_history -x $(TOPDIR)/coqtop $(ARG) $(ARGS) + + +usage:: + @echo " vars -- echos commands to set COQTOP and COQBIN variables" +vars: + @(cd $(TOPDIR); \ + echo export COQTOP=`pwd`/ ; \ + echo export COQBIN=`pwd`/bin/ ) \ No newline at end of file diff --git a/dev/tools/Makefile.dir b/dev/tools/Makefile.dir new file mode 100644 index 00000000..68c917ac --- /dev/null +++ b/dev/tools/Makefile.dir @@ -0,0 +1,131 @@ +# make a link to this file if you are working hard in one directory of Coq +# ln -s ../dev/Makefile.dir Makefile +# if you are working in a sub/dir/ make a link to dev/Makefile.subdir instead +# this Makefile provides many useful facilities to develop Coq +# it is not completely compatible with .ml4 files unfortunately + +ifndef TOPDIR +TOPDIR=.. +endif + +# this complicated thing should work for subsubdirs as well +BASEDIR=$(shell (dir=`pwd`; cd $(TOPDIR); top=`pwd`; echo $$dir | sed -e "s|$$top/||")) + +noargs: dir + +test-dir: + @echo TOPDIR=$(TOPDIR) + @echo BASEDIR=$(BASEDIR) + +include $(TOPDIR)/dev/tools/Makefile.common + +# make this directory +dir: + $(MAKE) -C $(TOPDIR) $(notdir $(BASEDIR)) + +# make all cmo's in this directory. Useful in case the main Makefile is not +# up-to-date +all: + @( ( for i in *.ml; do \ + echo -n $(BASEDIR)/`basename $$i .ml`.cmo "" ; \ + done; \ + for i in *.ml4; do \ + echo -n $(BASEDIR)/`basename $$i .ml4`.cmo "" ; \ + done ) \ + | xargs $(MAKE) -C $(TOPDIR) ) + +# lists all files that should be compiled in this directory +list: + @(for i in *.mli; do \ + ls -l `basename $$i .mli`.cmi; \ + done) + @(for i in *.ml; do \ + ls -l `basename $$i .ml`.cmo; \ + done) + @(for i in *.ml4; do \ + ls -l `basename $$i .ml4`.cmo; \ + done) + + +clean:: + rm -f *.cmi *.cmo *.cmx *.o + + +# if grammar.cmo files cannot be compiled and main .depend cannot be +# rebuilt, this is quite useful +depend: + (cd $(TOPDIR); ocamldep -I $(BASEDIR) $(BASEDIR)/*.ml $(BASEDIR)/*.mli > .depend.devel) + + +# displays the dependency graph of the current directory (vertically, +# unlike in doc/) +graph: + (ocamldep *.ml *.mli | ocamldot | dot -Tps | gv -) & + + +# the pretty entry draws a dependency graph marking red those nodes +# which do not have their .cmo files + +.INTERMEDIATE: depend.dot depend.2.dot +.PHONY: depend.ps + +depend.dot: + ocamldep *.ml *.mli | ocamldot > $@ + +depend.2.dot: depend.dot + (i=`cat $< | wc -l`; i=`expr $$i - 1`; head -n $$i $<) > $@ + (for ml in *.ml; do \ + base=`basename $$ml .ml`; \ + fst=`echo $$base | cut -c1 | tr [:lower:] [:upper:]`; \ + rest=`echo $$base | cut -c2-`; \ + name=`echo $$fst $$rest | tr -d " "`; \ + cmo=$$base.cmo; \ + if [ ! -e $$cmo ]; then \ + echo \"$$name\" [color=red]\; >> $@;\ + fi;\ + done;\ + echo } >> $@) + +depend.ps: depend.2.dot + dot -Tps $< > $@ + +clean:: + rm -f depend.ps + +pretty: depend.ps + (gv -spartan $<; rm $<) & +# gv -spartan $< & + + + +# generating file.ml.mli by tricking make to pass -i to ocamlc + +%.ml.mli: FORCE + @(cmo=`basename $@ .ml.mli`.cmo ; \ + mv -f $$cmo $$cmo.tmp ; \ + $(MAKE) -s -C $(TOPDIR) $(BASEDIR)/$$cmo CAMLDEBUG=-i > $@ ; \ + echo Generated interface file $@ ; \ + mv -f $$cmo.tmp $$cmo) + +%.annot: FORCE + @(cmo=`basename $@ .annot`.cmo ; \ + mv -f $$cmo $$cmo.tmp ; \ + $(MAKE) -s -C $(TOPDIR) $(BASEDIR)/$$cmo CAMLDEBUG=-dtypes ; \ + echo Generated annotation file $@ ; \ + mv -f $$cmo.tmp $$cmo) + +FORCE: + +clean:: + rm -f *.ml.mli + +# this is not perfect but mostly WORKS! It just calls the main makefile + +%.cmi: FORCE + $(MAKE) -C $(TOPDIR) $(BASEDIR)/$@ + +%.cmo: FORCE + $(MAKE) -C $(TOPDIR) $(BASEDIR)/$@ + +coqtop: + $(MAKE) -C $(TOPDIR) bin/coqtop.byte diff --git a/dev/tools/Makefile.subdir b/dev/tools/Makefile.subdir new file mode 100644 index 00000000..ff1f3077 --- /dev/null +++ b/dev/tools/Makefile.subdir @@ -0,0 +1,7 @@ +# if you work in a sub/sub-rectory of Coq +# you should make a link to that makefile +# ln -s ../../dev/Makefile.subdir Makefile +# in order to have all the facilities of dev/Makefile.dir + +TOPDIR=../.. +include $(TOPDIR)/dev/tools/Makefile.dir diff --git a/dev/tools/objects.el b/dev/tools/objects.el new file mode 100644 index 00000000..b3a2694d --- /dev/null +++ b/dev/tools/objects.el @@ -0,0 +1,153 @@ +(defun add-survive-module nil + (interactive) + (query-replace-regexp + " +\\([ ]*\\)\\(Summary\.\\)?survive_section" + " +\\1\\2survive_module = false; +\\1\\2survive_section") + ) + +(global-set-key [f2] 'add-survive-module) + +; functions to change old style object declaration to new style + +(defun repl-open nil + (interactive) + (query-replace-regexp + "open_function\\([ ]*\\)=\\([ ]*\\)cache_\\([a-zA-Z0-9'_]*\\)\\( *\\);" + "open_function\\1=\\2(fun i o -> if i=1 then cache_\\3 o)\\4;") + ) + +(global-set-key [f6] 'repl-open) + +(defun repl-load nil + (interactive) + (query-replace-regexp + "load_function\\([ ]*\\)=\\([ ]*\\)cache_\\([a-zA-Z0-9'_]*\\)\\( *\\);" + "load_function\\1=\\2(fun _ -> cache_\\3)\\4;") + ) + +(global-set-key [f7] 'repl-load) + +(defun repl-decl nil + (interactive) + (query-replace-regexp + "\\(Libobject\.\\)?declare_object[ + ]*([ ]*\\(.*\\)[ + ]*,[ ]* +\\([ ]*\\){\\([ ]*\\)\\([^ ][^}]*\\)}[ ]*)" + + "\\1declare_object {(\\1default_object \\2) with +\\3 \\4\\5}") +; "|$1=\\1|$2=\\2|$3=\\3|$4=\\4|") +) + +(global-set-key [f9] 'repl-decl) + +; eval the above and try f9 f6 f7 on the following: + +let (inThing,outThing) = + declare_object + ("THING", + { load_function = cache_thing; + cache_function = cache_thing; + open_function = cache_thing; + export_function = (function x -> Some x) + }) + + +;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +;%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +; functions helping writing non-copying substitutions + +(defun make-subst (name) + (interactive "s") + (defun f (l) + (save-excursion + (query-replace-regexp + (concat "\\([a-zA-z_0-9]*\\)[ ]*:[ ]*" + (car l) + "\\([ ]*;\\|[ +]*\}\\)") + (concat "let \\1\' = " (cdr l) " " name "\\1 in")) + ) + ) + (mapcar 'f '(("constr"."subst_mps subst") + ("Coqast.t"."subst_ast subst") + ("Coqast.t list"."list_smartmap (subst_ast subst)") + ("'pat"."subst_pat subst") + ("'pat unparsing_hunk"."subst_hunk subst_pat subst") + ("'pat unparsing_hunk list"."list_smartmap (subst_hunk subst_pat subst)") + ("'pat syntax_entry"."subst_syntax_entry subst_pat subst") + ("'pat syntax_entry list"."list_smartmap (subst_syntax_entry subst_pat subst)") + ("constr option"."option_smartmap (subst_mps subst)") + ("constr list"."list_smartmap (subst_mps subst)") + ("constr array"."array_smartmap (subst_mps subst)") + ("constr_pattern"."subst_pattern subst") + ("constr_pattern option"."option_smartmap (subst_pattern subst)") + ("constr_pattern array"."array_smartmap (subst_pattern subst)") + ("constr_pattern list"."list_smartmap (subst_pattern subst)") + ("global_reference"."subst_global subst") + ("extended_global_reference"."subst_ext subst") + ("obj_typ"."subst_obj subst") + ) + ) + ) + + +(global-set-key [f2] 'make-subst) + +(defun make-if (name) + (interactive "s") + (save-excursion + (query-replace-regexp + "\\([a-zA-z_0-9]*\\)[ ]*:[ ]*['a-zA-z_. ]*\\(;\\|[ +]*\}\\)" + (concat "&& \\1\' == " name "\\1") + ) + ) + ) + +(global-set-key [f4] 'make-if) + +(defun make-record nil + (interactive) + (save-excursion + (query-replace-regexp + "\\([a-zA-z_0-9]*\\)[ ]*:[ ]*['a-zA-z_. ]*\\(;\\|[ +]*\}\\)" + (concat "\\1 = \\1\' ;") + ) + ) + ) + +(global-set-key [f5] 'make-record) + +(defun make-prim nil + (interactive) + (save-excursion (query-replace-regexp "\\<[a-zA-Z'_0-9]*\\>" "\\&'")) + ) + +(global-set-key [f6] 'make-prim) + + +; eval the above, yank the text below and do +; paste f2 morph. +; paste f4 morph. +; paste f5 + + lem : constr; + profil : bool list; + arg_types : constr list; + lem2 : constr option } + + +; and you almost get Setoid_replace.subst_morph :) + +; and now f5 on this: + + (ref,(c1,c2)) + + + diff --git a/dev/tools/univdot b/dev/tools/univdot new file mode 100755 index 00000000..bb0dd2c8 --- /dev/null +++ b/dev/tools/univdot @@ -0,0 +1,49 @@ +#!/bin/sh + +usage() { + echo "" + echo "usage: univdot [INPUT] [OUTPUT]" + echo "" + echo "takes the output of Dump Universes \"file\" command" + echo "and transforms it to the dot format" + echo "" + echo "Coq> Dump Universes \"univ.raw\"." + echo "" + echo "user@host> univdot univ.raw | dot -Tps > univ.ps" + echo "" +} + + +# these are dot edge attributes to draw arrows corresponding +# to > >= and = edges of the universe graph + +GT="[color=red]" +GE="[color=blue]" +EQ="[color=black]" + + +# input/output redirection +case $# in + 0) ;; + 1) case $1 in + -h|-help|--help) usage + exit 0 ;; + *) exec < $1 ;; + esac ;; + 2) exec < $1 > $2 ;; + *) usage + exit 0;; +esac + + +# dot header +echo 'digraph G {\ + size="7.5,10" ;\ + rankdir = TB ;' + +sed -e "s/^\([^ =>]\+\) > \([^ =>]\+\)/\1 -> \2 $GT/" \ + -e "s/^\([^ =>]\+\) >= \([^ =>]\+\)/\1 -> \2 $GE/" \ + -e "s/^\([^ =>]\+\) = \([^ =>]\+\)/\1 -> \2 $EQ/" \ +| sed -e "s/\./_/g" + +echo "}" \ No newline at end of file diff --git a/dev/translate.txt b/dev/translate.txt deleted file mode 100644 index 5b372c96..00000000 --- a/dev/translate.txt +++ /dev/null @@ -1,495 +0,0 @@ - - How to use the translator - ========================= - - (temporary version to be included in the official - TeX document describing the translator) - -The translator is a smart, robust and powerful tool to improve the -readibility of your script. The current document describes the -possibilities of the translator. - -In case of problem recompiling the translated files, don't waste time -to modify the translated file by hand, read first the following -document telling on how to modify the original files to get a smooth -uniform safe translation. All 60000 lines of Coq lines on our -user-contributions server have been translated without any change -afterwards, and 0,5 % of the lines of the original files (mainly -notations) had to be modified beforehand to get this result. - -Table of contents ------------------ - -I) Implicit Arguments - 1) Strict Implicit Arguments - 2) Implicit Arguments in standard library - -II) Notations - 1) Translating a V7 notation as it was - 2) Translating a V7 notation which conflicts with the new syntax - a) Associativity conflicts - b) Conflicts with other notations - b1) A notation hides another notation - b2) A notation conflicts with the V8 grammar - b3) My notation is already defined at another level - c) How to use V8only with Distfix ? - d) Can I overload a notation in V8, e.g. use "*" and "+" ? - 3) Using the translator to have simplest notations - 4) Setting the translator to automatically use new notations that - wasn't used in old syntax - 5) Defining a construction and its notation simultaneously - -III) Various pitfalls - 1) New keywords - 2) Old "Case" and "Match" - 3) Change of definition or theorem names - 4) Change of tactic names - ---------------------------------------------------------------------- - -I) Implicit Arguments - ------------------ - -1) Strict Implicit Arguments - - "Set Implicit Arguments" changes its meaning in V8: the default is -to turn implicit only the arguments that are _strictly_ implicit (or -rigid), i.e. that remains inferable whatever the other arguments -are. E.g "x" inferable from "P x" is not strictly inferable since it -can disappears if "P" is instanciated by a term which erase "x". - - To respect the old semantics, the default behaviour of the -translator is to replace each occurrence "Set Implicit Arguments" by - - Set Implicit Arguments. - Unset Strict Implicits. - - However, you may wish to adopt the new semantics of "Set Implicit -Arguments" (for instance because you think that the choice of -arguments it setsimplicit is more "natural" for you). In this case, -add the option -strict-implicit to the translator. - - Warning: Changing the number of implicit arguments can break the -notations. Then use the V8only modifier of Notations. - -2) Implicit Arguments in standard library - - Main definitions of standard library have now implicit -arguments. These arguments are dropped in the translated files. This -can exceptionally be a source of incompatibilities which has to be -solved by hand (it typically happens for polymorphic functions applied -to "nil" or "None"). - -II) Notations - --------- - - Grammar (on constr) and Syntax are no longer supported. Replace them by -Notation before translation. - - Precedence levels are now from 0 to 200. In V8, the precedence and -associativity of an operator cannot be redefined. Typical level are -(refer to the chapter on notations in the Reference Manual for the -full list): - - <-> : 95 (no associativity) - -> : 90 (right associativity) - \/ : 85 (right associativity) - /\ : 80 (right associativity) - ~ : 75 (right associativity) - =, <, >, <=, >=, <> : 70 (no associativity) - +, - : 50 (left associativity) - *, / : 40 (left associativity) - ^ : 30 (right associativity) - -1) Translating a V7 notation as it was - - By default, the translator keeps the associativity given in V7 while -the levels are mapped according to the following table: - - the V7 levels [ 0; 1; 2; 3; 4; 5; 6; 7; 8; 9; 10] - are resp. mapped in V8 to [ 0; 20; 30; 40; 50; 70; 80; 85; 90; 95; 100] - with predefined assoc [ No; L; R; L; L; No; R; R; R; No; L] - - If this is OK for you, just simply apply the translator. - -2) Translating a V7 notation which conflicts with the new syntax - -a) Associativity conflict - - Since the associativity of the levels obtained by translating a V7 -level (as shown on table above) cannot be changed, you have to choose -another level with a compatible associativity. - - You can choose any level between 0 and 200, knowing that the -standard operators are already set at the levels shown on the list -above. - -Example 1: Assume you have a notation - -Infix NONA 2 "=_S" my_setoid_eq. - -By default, the translator moves it to level 30 which is right -associative, hence a conflict with the expected no associativity. - -To solve the problem, just add the "V8only" modifier to reset the -level and enforce the associativity as follows: - -Infix NONA 2 "=_S" my_setoid_eq V8only (at level 70, no associativity). - -The translator now knows that it has to translate "=_S" at level 70 -with no associativity. - -Rem: 70 is the "natural" level for relations, hence the choice of 70 -here, but any other level accepting a no-associativity would have been -OK. - -Example 2: Assume you have a notation - -Infix RIGHTA 1 "o" my_comp. - -By default, the translator moves it to level 20 which is left -associative, hence a conflict with the expected right associativity. - -To solve the problem, just add the "V8only" modifier to reset the -level and enforce the associativity as follows: - -Infix RIGHTA 1 "o" my_comp V8only (at level 20, right associativity). - -The translator now knows that it has to translate "o" at level 20 -which has the correct "right associativity". - -Rem: We assumed here that the user wants a strong precedence for -composition, in such a way, say, that "f o g + h" is parsed as -"(f o g) + h". To get "o" binding less than the arithmetical operators, -an appropriated level would have been close of 70, and below, e.g. 65. - -b) Conflicts with other notations - -Since the new syntax comes with new keywords and new predefined -symbols, new conflicts can occur. Again, you can use the option V8only -to inform the translator of the new syntax to use. - -b1) A notation hides another notation - -Rem: use Print Grammar constr in V8 to diagnose the overlap and see the -section on factorization in the chapter on notations of the Reference -Manual for hints on how to factorize. - -Example: - -Notation "{ x }" := (my_embedding x) (at level 1). - -overlaps in V8 with notation "{ x : A & P }" at level 0 and with x at -level 99. The conflicts can be solved by left-factorizing the notation -as follows: - -Notation "{ x }" := (my_embedding x) (at level 1) - V8only (at level 0, x at level 99). - -b2) A notation conflicts with the V8 grammar. - -Again, use the V8only modifier to tell the translator to automatically -take in charge the new syntax. - -Example: - -Infix 3 "@" app. - -Since "@" is used in the new syntax for deactivating the implicit -arguments, another symbol has to be used, e.g. "@@". This is done via -the V8only option as follows: - -Infix 3 "@" app V8only "@@" (at level 40, left associativity). - -or, alternatively by - -Notation "x @ y" := (app x y) (at level 3, left associativity) - V8only "x @@ y" (at level 40, left associativity). - -b3) My notation is already defined at another level (or with another -associativity) - -In V8, the level and associativity of a given notation can no longer -be changed. Then, either you adopt the standard reserved levels and -associativity for this notation (as given on the list above) or you -change your notation. - -- To change the notation, follow the directions in section b2. - -- To adopt the standard level, just use V8only without any argument. - -Example. - -Infix 6 "*" my_mult. - -is not accepted as such in V8. Write - -Infix 6 "*" my_mult V8only. - -to tell the translator to use "*" at the reserved level (i.e. 40 with -left associativity). Even better, use interpretation scopes (look at -the Reference Manual). - -c) How to use V8only with Distfix ? - -You can't, use Notation instead of Distfix. - -d) Can I overload a notation in V8, e.g. use "*" and "+" for my own -algebraic operations ? - -Yes, using interpretation scopes (see the corresponding chapter in the -Reference Manual). - -3) Using the translator to have simplest notations - -Thanks to the new syntax, * has now the expected left associativity, -and the symbols <, >, <= and >= are now available. - -Thanks to the interpretation scopes, you can overload the -interpretation of these operators with the default interpretation -provided in Coq. - -This may be a motivation to use the translator to automatically change -the notations while switching to the new syntax. - -See sections b) and d) above for examples. - -4) Setting the translator to automatically use new notations that -wasn't used in old syntax - -Thanks to the "Notation" mechanism, defining symbolic notations is -simpler than in the previous versions of Coq. - -Thanks to the new syntax and interpretation scopes, new symbols and -overloading is available. - -This may be a motivation for using the translator to automatically change -the notations while switching to the new syntax. - -Use for that the commands V8Notation and V8Infix. - -Examples: - -V8Infix "==>" my_relation (at level 65, right associativity). - -tells the translator to write an infix "==>" instead of my_relation in -the translated files. - -V8Infix ">=" my_ge. - -tells the translator to write an infix ">=" instead of my_ge in the -translated files and that the level and associativity are the standard -one (as defined in the chart above). - -V8Infix ">=" my_ge : my_scope. - -tells the translator to write an infix ">=" instead of my_ge in the -translated files, that the level and associativity are the standard -one (as defined in the chart above), but only if scope my_scope is -open or if a delimiting key is available for "my_scope" (see the -Reference Manual). - -5) Defining a construction and its notation simultaneously - -This is permitted by the new syntax. Look at the Reference Manual for -explanation. The translator is not fully able to take this in charge... - -III) Various pitfalls - ---------------- - -1) New keywords - - The following identifiers are new keywords - - "forall"; "fun"; "match"; "fix"; "cofix"; "for"; "if"; "then"; - "else"; "return"; "mod"; "at"; "let"; "_"; ".(" - - The translator automatically add a "_" to names clashing with a -keyword, except for files. Hence users may need to rename the files -whose name clashes with a keyword. - - Remark: "in"; "with"; "end"; "as"; "Prop"; "Set"; "Type" - were already keywords - -2) Old "Case" and "Match" - - "Case" and "Match" are normally automatically translated into - "match" or "match" and "fix", but sometimes it fails to do so. It - typically fails when the Case or Match is argument of a tactic whose - typing context is unknown because of a preceding Intro/Intros, as e.g. in - - Intros; Exists [m:nat](Case m of t [p:nat](f m) end) - - The solution is then to replace the invocation of the sequence of - tactics into several invocation of the elementary tactics as follows - - Intros. Exists [m:nat](Case m of t [p:nat](f m) end) - ^^^ - -3) Change of definition or theorem names - - Type "entier" from fast_integer.v is renamed into "N" by the -translator. As a consequence, user-defined objects of same name "N" -are systematically qualified even tough it may not be necessary. The -same apply for names "GREATER", "EQUAL", "LESS", etc... [COMPLETE LIST -TO GIVE]. - -4) Change of tactics names - - Since tactics names are now lowercase, this can clash with -user-defined tactic definitions. To pally this, clashing names are -renamed by adding an extra "_" to their name. - -====================================================================== -Main examples for new syntax ----------------------------- - -1) Constructions - - Applicative terms don't any longer require to be surrounded by parentheses as -e.g in - - "x = f y -> S x = S (f y)" - - - Product is written - - "forall x y : T, U" - "forall x y, U" - "forall (x y : T) z (v w : V), U" - etc. - - Abstraction is written - - "fun x y : T, U" - "fun x y, U" - "fun (x y : T) z (v w : V), U" - etc. - - Pattern-matching is written - - "match x with c1 x1 x2 => t | c2 y as z => u end" - "match v1, v2 with c1 x1 x2, _ => t | c2 y, d z => u end" - "match v1 as y in le _ n, v2 as z in I p q return P n y p q z with - c1 x1 x2, _ => t | c2 y, d z => u end" - - The last example is the new form of what was written - - "<[n;y:(le ? n);p;q;z:(I p q)](P n y p q z)>Cases v1 v2 of - (c1 x1 x2) _ => t | (c2 y) (d z) => u end" - - Pattern-matching of type with one constructors and no dependencies -of the arguments in the resulting type can be written - - "let (x,y,z) as u return P u := t in v" - - Local fixpoints are written - - "fix f (n m:nat) z (x : X) {struct m} : nat := ... - with ..." - - and "struct" tells which argument is structurally decreasing. - - Explicitation of implicit arguments is written - - "f @1:=u v @3:=w t" - "@f u v w t" - -2) Tactics - - The main change is that tactics names are now lowercase. Besides -this, the following renaming are applied: - - "NewDestruct" -> "destruct" - "NewInduction" -> "induction" - "Induction" -> "simple induction" - "Destruct" -> "simple destruct" - - For tactics with occurrences, the occurrences now comes after and - repeated use is separated by comma as in - - "Pattern 1 3 c d 4 e" -> "pattern c at 3 1, d, e at 4" - "Unfold 1 3 f 4 g" -> "unfold f at 1 3, g at 4" - "Simpl 1 3 e" -> "simpl e at 1 3" - -3) Tactic language - - Definitions are now introduced with keyword "Ltac" (instead of -"Tactic"/"Meta" "Definition") and are implicitly recursive -("Recursive" is no longer used). - - The new rule for distinguishing terms from ltac expressions is: - - Write "ltac:" in front of any tactic in argument position and - "constr:" in front of any construction in head position - -4) Vernacular language - -a) Assumptions - - The syntax for commands is mainly unchanged. Declaration of -assumptions is now done as follows - - Variable m : t. - Variables m n p : t. - Variables (m n : t) (u v : s) (w : r). - -b) Definitions - - Definitions are done as follows - - Definition f m n : t := ... . - Definition f m n := ... . - Definition f m n := ... : t. - Definition f (m n : u) : t := ... . - Definition f (m n : u) := ... : t. - Definition f (m n : u) := ... . - Definition f a b (p q : v) r s (m n : t) : t := ... . - Definition f a b (p q : v) r s (m n : t) := ... . - Definition f a b (p q : v) r s (m n : t) := ... : t. - -c) Fixpoints - - Fixpoints are done this way - - Fixpoint f x (y : t) z a (b c : u) {struct z} : v := ... with ... . - Fixpoint f x : v := ... . - Fixpoint f (x : t) : v := ... . - - It is possible to give a concrete notation to a fixpoint as follows - - Fixpoint plus (n m:nat) {struct n} : nat as "n + m" := - match n with - | O => m - | S p => S (p + m) - end. - -d) Inductive types - - The syntax for inductive types is as follows - - Inductive t (a b : u) (d : e) : v := - c1 : w1 | c2 : w2 | ... . - - Inductive t (a b : u) (d : e) : v := - c1 : w1 | c2 : w2 | ... . - - Inductive t (a b : u) (d : e) : v := - c1 (x y : t) : w1 | c2 (z : r) : w2 | ... . - - As seen in the last example, arguments of the constructors can be -given before the colon. If the type itself is omitted (allowed only in -case the inductive type has no real arguments), this yields an -ML-style notation as follows - - Inductive nat : Set := O | S (n:nat). - Inductive bool : Set := true | false. - - It is even possible to define a syntax at the same time, as follows: - - Inductive or (A B:Prop) : Prop as "A \/ B":= - | or_introl (a:A) : A \/ B - | or_intror (b:B) : A \/ B. - - Inductive and (A B:Prop) : Prop as "A /\ B" := conj (a:A) (b:B). - diff --git a/dev/univdot b/dev/univdot deleted file mode 100755 index bb0dd2c8..00000000 --- a/dev/univdot +++ /dev/null @@ -1,49 +0,0 @@ -#!/bin/sh - -usage() { - echo "" - echo "usage: univdot [INPUT] [OUTPUT]" - echo "" - echo "takes the output of Dump Universes \"file\" command" - echo "and transforms it to the dot format" - echo "" - echo "Coq> Dump Universes \"univ.raw\"." - echo "" - echo "user@host> univdot univ.raw | dot -Tps > univ.ps" - echo "" -} - - -# these are dot edge attributes to draw arrows corresponding -# to > >= and = edges of the universe graph - -GT="[color=red]" -GE="[color=blue]" -EQ="[color=black]" - - -# input/output redirection -case $# in - 0) ;; - 1) case $1 in - -h|-help|--help) usage - exit 0 ;; - *) exec < $1 ;; - esac ;; - 2) exec < $1 > $2 ;; - *) usage - exit 0;; -esac - - -# dot header -echo 'digraph G {\ - size="7.5,10" ;\ - rankdir = TB ;' - -sed -e "s/^\([^ =>]\+\) > \([^ =>]\+\)/\1 -> \2 $GT/" \ - -e "s/^\([^ =>]\+\) >= \([^ =>]\+\)/\1 -> \2 $GE/" \ - -e "s/^\([^ =>]\+\) = \([^ =>]\+\)/\1 -> \2 $EQ/" \ -| sed -e "s/\./_/g" - -echo "}" \ No newline at end of file diff --git a/dev/universes.txt b/dev/universes.txt deleted file mode 100644 index 65c1e522..00000000 --- a/dev/universes.txt +++ /dev/null @@ -1,32 +0,0 @@ -How to debug universes? - -1. There is a command Dump Universes in Coq toplevel - - Dump Universes. - prints the graph of universes in the form of constraints - - Dump Universes "file". - produces the "file" containing universe constraints in the form - univ1 # univ2 ; - where # can be either > >= or = - - The file produced by the latter command can be transformed using - the script univdot to dot format. - For example - - univdot file | dot -Tps > file.ps - - produces a graph of universes in ps format. - > arrows are red, >= blue, and = black. - - - *) for dot see http://www.research.att.com/sw/tools/graphviz/ - - -2. There is a printing option - - Termast.print_universes : bool ref - - which, when set (in ocaml after Drop), makes all pretty-printed - Type's annotated with the name of the universe. - diff --git a/dev/v8-syntax/check-grammar b/dev/v8-syntax/check-grammar new file mode 100755 index 00000000..67da1bc5 --- /dev/null +++ b/dev/v8-syntax/check-grammar @@ -0,0 +1,50 @@ +#!/bin/bash +# This scripts checks that the new grammar of Coq as defined in syntax-v8.tex +# is consistent in the sense that all invoked non-terminals are defined + +defined-nt() { + grep "\\DEFNT{.*}" syntax-v8.tex | sed -e "s|.*DEFNT{\([^}]*\)}.*|\1|"|\ + sort | sort -u +} + +used-nt() { + cat syntax-v8.tex | tr \\\\ \\n | grep "^NT{.*}" |\ + sed -e "s|^NT{\([^}]*\)}.*|\1|" | egrep -v ^\#1\|non-terminal | sort -u +} + +used-term() { + cat syntax-v8.tex | tr \\\\ \\n | grep "^TERM{.*}" |\ + sed -e "s|^TERM{\([^}]*\)}.*|\1|" -e "s|\\$||g" | egrep -v ^\#1\|terminal | sort -u +} + +used-kwd() { + cat syntax-v8.tex | tr \\\\ \\n | grep "^KWD{.*}" |\ + sed -e "s|^KWD{\([^}]*\)}.*|\1|" -e "s|\\$||g" | egrep -v ^\#1 | sort -u +} + +defined-nt > def +used-nt > use +used-term > use-t +used-kwd > use-k +diff def use > df + +############################### +echo +if grep ^\> df > /dev/null 2>&1 ; then + echo Undefined non-terminals: + echo ======================== + echo + grep ^\> df | sed -e "s|^> ||" + echo +fi +if grep ^\< df > /dev/null 2>&1 ; then + echo Unused non-terminals: + echo ===================== + echo + grep ^\< df | sed -e "s|^< ||" + echo +fi +#echo Used terminals: +#echo =============== +#echo +#cat use-t \ No newline at end of file diff --git a/dev/v8-syntax/memo-v8.tex b/dev/v8-syntax/memo-v8.tex new file mode 100644 index 00000000..8d116de2 --- /dev/null +++ b/dev/v8-syntax/memo-v8.tex @@ -0,0 +1,286 @@ + +\documentclass{article} + +\usepackage{verbatim} +\usepackage{amsmath} +\usepackage{amssymb} +\usepackage{array} +\usepackage{fullpage} + +\author{B.~Barras} +\title{An introduction to syntax of Coq V8} + +%% Le _ est un caractère normal +\catcode`\_=13 +\let\subscr=_ +\def_{\ifmmode\sb\else\subscr\fi} + +\def\NT#1{\langle\textit{#1}\rangle} +\def\NTL#1#2{\langle\textit{#1}\rangle_{#2}} +\def\TERM#1{\textsf{\bf #1}} + +\newenvironment{transbox} + {\begin{center}\tt\begin{tabular}{l|ll} \hfil\textrm{V7} & \hfil\textrm{V8} \\ \hline} + {\end{tabular}\end{center}} +\def\TRANS#1#2 + {\begin{tabular}[t]{@{}l@{}}#1\end{tabular} & + \begin{tabular}[t]{@{}l@{}}#2\end{tabular} \\} +\def\TRANSCOM#1#2#3 + {\begin{tabular}[t]{@{}l@{}}#1\end{tabular} & + \begin{tabular}[t]{@{}l@{}}#2\end{tabular} & #3 \\} + +\begin{document} + +\maketitle + +The goal of this document is to introduce by example to the new syntax of +Coq. It is strongly recommended to read first the definition of the new +syntax, but this document should also be useful for the eager user who wants +to start with the new syntax quickly. + + +\section{Changes in lexical conventions w.r.t. V7} + +\subsection{Identifiers} + +The lexical conventions changed: \TERM{_} is not a regular identifier +anymore. It is used in terms as a placeholder for subterms to be inferred +at type-checking, and in patterns as a non-binding variable. + +Furthermore, only letters (unicode letters), digits, single quotes and +_ are allowed after the first character. + +\subsection{Quoted string} + +Quoted strings are used typically to give a filename (which may not +be a regular identifier). As before they are written between double +quotes ("). Unlike for V7, there is no escape character: characters +are written normaly but the double quote which is doubled. + +\section{Main changes in terms w.r.t. V7} + + +\subsection{Precedence of application} + +In the new syntax, parentheses are not really part of the syntax of +application. The precedence of application (10) is tighter than all +prefix and infix notations. It makes it possible to remove parentheses +in many contexts. + +\begin{transbox} +\TRANS{(A x)->(f x)=(g y)}{A x -> f x = g y} +\TRANS{(f [x]x)}{f (fun x => x)} +\end{transbox} + + +\subsection{Arithmetics and scopes} + +The specialized notation for \TERM{Z} and \TERM{R} (introduced by +symbols \TERM{`} and \TERM{``}) have disappeared. They have been +replaced by the general notion of scope. + +\begin{center} +\begin{tabular}{l|l|l} +type & scope name & delimiter \\ +\hline +types & type_scope & \TERM{T} \\ +\TERM{bool} & bool_scope & \\ +\TERM{nat} & nat_scope & \TERM{nat} \\ +\TERM{Z} & Z_scope & \TERM{Z} \\ +\TERM{R} & R_scope & \TERM{R} \\ +\TERM{positive} & positive_scope & \TERM{P} +\end{tabular} +\end{center} + +In order to use notations of arithmetics on \TERM{Z}, its scope must be opened with command \verb+Open Scope Z_scope.+ Another possibility is using the scope change notation (\TERM{\%}). The latter notation is to be used when notations of several scopes appear in the same expression. + +In examples below, scope changes are not needed if the appropriate scope +has been opened. Scope nat_scope is opened in the initial state of Coq. +\begin{transbox} +\TRANSCOM{`0+x=x+0`}{0+x=x+0}{\textrm{Z_scope}} +\TRANSCOM{``0 + [if b then ``1`` else ``2``]``}{0 + if b then 1 else 2}{\textrm{R_scope}} +\TRANSCOM{(0)}{0}{\textrm{nat_scope}} +\end{transbox} + +Below is a table that tells which notation is available in which +scope. The relative precedences and associativity of operators is the +same as in usual mathematics. See the reference manual for more +details. However, it is important to remember that unlike V7, the type +operators for product and sum are left associative, in order not to +clash with arithmetic operators. + +\begin{center} +\begin{tabular}{l|l} +scope & notations \\ +\hline +nat_scope & $+ ~- ~* ~< ~\leq ~> ~\geq$ \\ +Z_scope & $+ ~- ~* ~/ ~\TERM{mod} ~< ~\leq ~> ~\geq ~?=$ \\ +R_scope & $+ ~- ~* ~/ ~< ~\leq ~> ~\geq$ \\ +type_scope & $* ~+$ \\ +bool_scope & $\TERM{\&\&} ~\TERM{$||$} ~\TERM{-}$ \\ +list_scope & $\TERM{::} ~\TERM{++}$ +\end{tabular} +\end{center} +(Note: $\leq$ is written \TERM{$<=$}) + + + +\subsection{Notation for implicit arguments} + +The explicitation of arguments is closer to the \emph{bindings} notation in +tactics. Argument positions follow the argument names of the head constant. + +\begin{transbox} +\TRANS{f 1!t1 2!t2}{f (x:=t1) (y:=t2)} +\TRANS{!f t1 t2}{@f t1 t2} +\end{transbox} + + +\subsection{Universal quantification} + +The universal quantification and dependent product types are now +materialized with the \TERM{forall} keyword before the binders and a +comma after the binders. + +The syntax of binders also changed significantly. A binder can simply be +a name when its type can be inferred. In other cases, the name and the type +of the variable are put between parentheses. When several consecutive +variables have the same type, they can be grouped. Finally, if all variables +have the same type parentheses can be omitted. + +\begin{transbox} +\TRANS{(x:A)B}{forall (x:~A), B ~~\textrm{or}~~ forall x:~A, B} +\TRANS{(x,y:nat)P}{forall (x y :~nat), P ~~\textrm{or}~~ forall x y :~nat, P} +\TRANS{(x,y:nat;z:A)P}{forall (x y :~nat) (z:A), P} +\TRANS{(x,y,z,t:?)P}{forall x y z t, P} +\TRANS{(x,y:nat;z:?)P}{forall (x y :~nat) z, P} +\end{transbox} + +\subsection{Abstraction} + +The notation for $\lambda$-abstraction follows that of universal +quantification. The binders are surrounded by keyword \TERM{fun} +and $\Rightarrow$ (\verb+=>+ in ascii). + +\begin{transbox} +\TRANS{[x,y:nat; z](f a b c)}{fun (x y:nat) z => f a b c} +\end{transbox} + + +\subsection{Pattern-matching} + +Beside the usage of the keyword pair \TERM{match}/\TERM{with} instead of +\TERM{Cases}/\TERM{of}, the main change is the notation for the type of +branches and return type. It is no longer written between \TERM{$<$ $>$} before +the \TERM{Cases} keyword, but interleaved with the destructured objects. + +The idea is that for each destructured object, one may specify a variable +name to tell how the branches types depend on this destructured objects (case +of a dependent elimination), and also how they depend on the value of the +arguments of the inductive type of the destructured objects. The type of +branches is then given after the keyword \TERM{return}, unless it can be +inferred. + +Moreover, when the destructured object is a variable, one may use this +variable in the return type. + +\begin{transbox} +\TRANS{Cases n of\\~~ O => O \\| (S k) => (1) end}{match n with\\~~ 0 => 0 \\| (S k) => 1 end} +\TRANS{Cases m n of \\~~0 0 => t \\| ... end}{match m, n with \\~~0, 0 => t \\| .. end} +\TRANS{<[n:nat](P n)>Cases T of ... end}{match T as n return P n with ... end} +\TRANS{<[n:nat][p:(even n)]\~{}(odd n)>Cases p of\\~~ ... \\end}{match p in even n return \~{} odd n with\\~~ ...\\end} +\end{transbox} + + +\subsection{Fixpoints and cofixpoints} + +An easier syntax for non-mutual fixpoints is provided, making it very close +to the usual notation for non-recursive functions. The decreasing argument +is now indicated by an annotation between curly braces, regardless of the +binders grouping. The annotation can be omitted if the binders introduce only +one variable. The type of the result can be omitted if inferable. + +\begin{transbox} +\TRANS{Fix plus\{plus [n:nat] : nat -> nat :=\\~~ [m]...\}}{fix plus (n m:nat) \{struct n\}: nat := ...} +\TRANS{Fix fact\{fact [n:nat]: nat :=\\ +~~Cases n of\\~~~~ O => (1) \\~~| (S k) => (mult n (fact k)) end\}}{fix fact + (n:nat) :=\\ +~~match n with \\~~~~0 => 1 \\~~| (S k) => n * fact k end} +\end{transbox} + +There is a syntactic sugar for mutual fixpoints associated to a local +definition: + +\begin{transbox} +\TRANS{let f := Fix f \{f [x:A] : T := M\} in\\(g (f y))}{let fix f (x:A) : T := M in\\g (f x)} +\end{transbox} + +The same applies to cofixpoints, annotations are not allowed in that case. + +\subsection{Notation for type cast} + +\begin{transbox} +\TRANS{O :: nat}{0 : nat} +\end{transbox} + +\section{Main changes in tactics w.r.t. V7} + +The main change is that all tactic names are lowercase. This also holds for +Ltac keywords. + +\subsection{Ltac} + +Definitions of macros are introduced by \TERM{Ltac} instead of +\TERM{Tactic Definition}, \TERM{Meta Definition} or \TERM{Recursive +Definition}. + +Rules of a match command are not between square brackets anymore. + +Context (understand a term with a placeholder) instantiation \TERM{inst} +became \TERM{context}. Syntax is unified with subterm matching. + +\begin{transbox} +\TRANS{match t with [C[x=y]] => inst C[y=x]}{match t with context C[x=y] => context C[y=x]} +\end{transbox} + +\subsection{Named arguments of theorems} + +\begin{transbox} +\TRANS{Apply thm with x:=t 1:=u}{apply thm with (x:=t) (1:=u)} +\end{transbox} + + +\subsection{Occurrences} + +To avoid ambiguity between a numeric literal and the optionnal +occurence numbers of this term, the occurence numbers are put after +the term itself. This applies to tactic \TERM{pattern} and also +\TERM{unfold} +\begin{transbox} +\TRANS{Pattern 1 2 (f x) 3 4 d y z}{pattern (f x at 1 2) (d at 3 4) y z} +\end{transbox} + +\section{Main changes in vernacular commands w.r.t. V7} + + +\subsection{Binders} + +The binders of vernacular commands changed in the same way as those of +fixpoints. This also holds for parameters of inductive definitions. + + +\begin{transbox} +\TRANS{Definition x [a:A] : T := M}{Definition x (a:A) : T := M} +\TRANS{Inductive and [A,B:Prop]: Prop := \\~~conj : A->B->(and A B)}% + {Inductive and (A B:Prop): Prop := \\~~conj : A -> B -> and A B} +\end{transbox} + +\subsection{Hints} + +The syntax of \emph{extern} hints changed: the pattern and the tactic +to be applied are separated by a \TERM{$\Rightarrow$}. +\begin{transbox} +\TRANS{Hint Extern 4 (toto ?) Apply lemma}{Hint Extern 4 (toto _) => apply lemma} +\end{transbox} + +\end{document} diff --git a/dev/v8-syntax/syntax-v8.tex b/dev/v8-syntax/syntax-v8.tex new file mode 100644 index 00000000..97973df2 --- /dev/null +++ b/dev/v8-syntax/syntax-v8.tex @@ -0,0 +1,1268 @@ + +\documentclass{article} + +\usepackage{verbatim} +\usepackage{amsmath} +\usepackage{amssymb} +\usepackage{array} +\usepackage{fullpage} + +\author{B.~Barras} +\title{Syntax of Coq V8} + +%% Le _ est un caractère normal +\catcode`\_=13 +\let\subscr=_ +\def_{\ifmmode\sb\else\subscr\fi} + +\def\bfbar{\ensuremath{|\hskip -0.22em{}|\hskip -0.24em{}|}} +\def\TERMbar{\bfbar} +\def\TERMbarbar{\bfbar\bfbar} +\def\notv{\text{_}} +\def\infx#1{\notv#1\notv} + + +%% Macros pour les grammaires +\def\GR#1{\text{\large(}#1\text{\large)}} +\def\NT#1{\langle\textit{#1}\rangle} +\def\NTL#1#2{\langle\textit{#1}\rangle_{#2}} +\def\TERM#1{{\bf\textrm{\bf #1}}} +%\def\TERM#1{{\bf\textsf{#1}}} +\def\KWD#1{\TERM{#1}} +\def\ETERM#1{\TERM{#1}} +\def\CHAR#1{\TERM{#1}} + +\def\STAR#1{#1*} +\def\STARGR#1{\GR{#1}*} +\def\PLUS#1{#1+} +\def\PLUSGR#1{\GR{#1}+} +\def\OPT#1{#1?} +\def\OPTGR#1{\GR{#1}?} +%% Tableaux de definition de non-terminaux +\newenvironment{cadre} + {\begin{array}{|c|}\hline\\} + {\\\\\hline\end{array}} +\newenvironment{rulebox} + {$$\begin{cadre}\begin{array}{r@{~}c@{~}l@{}l@{}r}} + {\end{array}\end{cadre}$$} +\def\DEFNT#1{\NT{#1} & ::= &} +\def\EXTNT#1{\NT{#1} & ::= & ... \\&|&} +\def\RNAME#1{(\textsc{#1})} +\def\SEPDEF{\\\\} +\def\nlsep{\\&|&} +\def\nlcont{\\&&} +\newenvironment{rules} + {\begin{center}\begin{rulebox}} + {\end{rulebox}\end{center}} + +\begin{document} + +\maketitle + +\section{Meta notations used in this document} + +Non-terminals are printed between angle brackets (e.g. $\NT{non-terminal}$) and +terminal symbols are printed in bold font (e.g. $\ETERM{terminal}$). Lexemes +are displayed as non-terminals. + +The usual operators on regular expressions: +\begin{center} +\begin{tabular}{l|l} +\hfil notation & \hfil meaning \\ +\hline +$\STAR{regexp}$ & repeat $regexp$ 0 or more times \\ +$\PLUS{regexp}$ & repeat $regexp$ 1 or more times \\ +$\OPT{regexp}$ & $regexp$ is optional \\ +$regexp_1~\mid~regexp_2$ & alternative +\end{tabular} +\end{center} + +Parenthesis are used to group regexps. Beware to distinguish this operator +$\GR{~}$ from the terminals $\ETERM{( )}$, and $\mid$ from terminal +\TERMbar. + +Rules are optionaly annotated in the right margin with: +\begin{itemize} +\item a precedence and associativity (L for left, R for right and N for no associativity), indicating how to solve conflicts; + lower levels are tighter; +\item a rule name. +\end{itemize} +In order to solve some conflicts, a non-terminal may be invoked with a +precedence (notation: $\NTL{entry}{prec}$), meaning that rules with higher +precedence do not apply. + +\section{Lexical conventions} + +Lexical categories are: +\begin{rules} +\DEFNT{ident} + \STARGR{\NT{letter}\mid\CHAR{_}} + \STARGR{\NT{letter}\mid \NT{digit} \mid \CHAR{'} \mid \CHAR{_}} +\SEPDEF +\DEFNT{field} \CHAR{.}\NT{ident} +\SEPDEF +\DEFNT{meta-ident} \CHAR{?}\NT{ident} +\SEPDEF +\DEFNT{num} \PLUS{\NT{digit}} +\SEPDEF +\DEFNT{int} \NT{num} \mid \CHAR{-}\NT{num} +\SEPDEF +\DEFNT{digit} \CHAR{0}-\CHAR{9} +\SEPDEF +\DEFNT{letter} \CHAR{a}-\CHAR{z}\mid\CHAR{A}-\CHAR{Z} + \mid\NT{unicode-letter} + +\SEPDEF +\DEFNT{string} \CHAR{"}~\STARGR{\CHAR{""}\mid\NT{unicode-char-but-"}}~\CHAR{"} +\end{rules} + +Reserved identifiers for the core syntax are: +\begin{quote} +\KWD{as}, +\KWD{cofix}, +\KWD{else}, +\KWD{end}, +\KWD{fix}, +\KWD{for}, +\KWD{forall}, +\KWD{fun}, +\KWD{if}, +\KWD{in}, +\KWD{let}, +\KWD{match}, +\KWD{Prop}, +\KWD{return}, +\KWD{Set}, +\KWD{then}, +\KWD{Type}, +\KWD{with} +\end{quote} + +Symbols used in the core syntax: +$$ \KWD{(} +~~ \KWD{)} +~~ \KWD{\{} +~~ \KWD{\}} +~~ \KWD{:} +~~ \KWD{,} +~~ \Rightarrow +~~ \rightarrow +~~ \KWD{:=} +~~ \KWD{_} +~~ \TERMbar +~~ \KWD{@} +~~ \KWD{\%} +~~ \KWD{.(} +$$ + +Note that \TERM{struct} is not a reserved identifier. + +\section{Syntax of terms} + +\subsection{Core syntax} + +The main entry point of the term grammar is $\NTL{constr}{9}$. When no +conflict can appear, $\NTL{constr}{200}$ is also used as entry point. + +\begin{rules} +\DEFNT{constr} + \NT{binder-constr} &200R~~ &\RNAME{binders} +\nlsep \NT{constr}~\KWD{:}~\NT{constr} &100R &\RNAME{cast} +\nlsep \NT{constr}~\KWD{:}~\NT{binder-constr} &100R &\RNAME{cast'} +\nlsep \NT{constr}~\KWD{$\rightarrow$}~\NT{constr} &80R &\RNAME{arrow} +\nlsep \NT{constr}~\KWD{$\rightarrow$}~\NT{binder-constr} &80R &\RNAME{arrow'} +\nlsep \NT{constr}~\PLUS{\NT{appl-arg}} &10L &\RNAME{apply} +\nlsep \KWD{@}~\NT{reference}~\STAR{\NTL{constr}{9}} &10L &\RNAME{expl-apply} +\nlsep \NT{constr}~\KWD{.(} + ~\NT{reference}~\STAR{\NT{appl-arg}}~\TERM{)} &1L & \RNAME{proj} +\nlsep \NT{constr}~\KWD{.(}~\TERM{@} + ~\NT{reference}~\STAR{\NTL{constr}{9}}~\TERM{)} &1L & \RNAME{expl-proj} +\nlsep \NT{constr} ~ \KWD{\%} ~ \NT{ident} &1L &\RNAME{scope-chg} +\nlsep \NT{atomic-constr} &0 +\nlsep \NT{match-expr} &0 +\nlsep \KWD{(}~\NT{constr}~\KWD{)} &0 +\SEPDEF +\DEFNT{binder-constr} + \KWD{forall}~\NT{binder-list}~\KWD{,}~\NTL{constr}{200} + &&\RNAME{prod} +\nlsep \KWD{fun} ~\NT{binder-list} ~\KWD{$\Rightarrow$}~\NTL{constr}{200} + &&\RNAME{lambda} +\nlsep \NT{fix-expr} +\nlsep \KWD{let}~\NT{ident-with-params} ~\KWD{:=}~\NTL{constr}{200} + ~\KWD{in}~\NTL{constr}{200} &&\RNAME{let} +\nlsep \KWD{let}~\NT{single-fix} ~\KWD{in}~\NTL{constr}{200} + &&\RNAME{rec-let} +\nlsep \KWD{let}~\KWD{(}~\OPT{\NT{let-pattern}}~\KWD{)}~\OPT{\NT{return-type}} + ~\KWD{:=}~\NTL{constr}{200}~\KWD{in}~\NTL{constr}{200} + &&\RNAME{let-case} +\nlsep \KWD{if}~\NT{if-item} + ~\KWD{then}~\NTL{constr}{200}~\KWD{else}~\NTL{constr}{200} + &&\RNAME{if-case} +\SEPDEF +\DEFNT{appl-arg} + \KWD{(}~\NT{ident}~\!\KWD{:=}~\NTL{constr}{200}~\KWD{)} + &&\RNAME{impl-arg} +\nlsep \KWD{(}~\NT{num}~\!\KWD{:=}~\NTL{constr}{200}~\KWD{)} + &&\RNAME{impl-arg} +\nlsep \NTL{constr}{9} +\SEPDEF +\DEFNT{atomic-constr} + \NT{reference} && \RNAME{variables} +\nlsep \NT{sort} && \RNAME{CIC-sort} +\nlsep \NT{num} && \RNAME{number} +\nlsep \KWD{_} && \RNAME{hole} +\nlsep \NT{meta-ident} && \RNAME{meta/evar} +\end{rules} + + + +\begin{rules} +\DEFNT{ident-with-params} + \NT{ident}~\STAR{\NT{binder-let}}~\NT{type-cstr} +\SEPDEF +\DEFNT{binder-list} + \NT{binder}~\STAR{\NT{binder-let}} +\nlsep \PLUS{\NT{name}}~\KWD{:}~\NT{constr} +\SEPDEF +\DEFNT{binder} + \NT{name} &&\RNAME{infer} +\nlsep \KWD{(}~\PLUS{\NT{name}}~\KWD{:}~\NT{constr} + ~\KWD{)} &&\RNAME{binder} +\SEPDEF +\DEFNT{binder-let} + \NT{binder} +\nlsep \KWD{(}~\NT{name}~\NT{type-cstr}~\KWD{:=}~\NT{constr}~\KWD{)} +\SEPDEF +\DEFNT{let-pattern} + \NT{name} +\nlsep \NT{name} ~\KWD{,} ~\NT{let-pattern} +\SEPDEF +\DEFNT{type-cstr} + \OPTGR{\KWD{:}~\NT{constr}} +\SEPDEF +\DEFNT{reference} + \NT{ident} && \RNAME{short-ident} +\nlsep \NT{ident}~\PLUS{\NT{field}} && \RNAME{qualid} +\SEPDEF +\DEFNT{sort} + \KWD{Prop} ~\mid~ \KWD{Set} ~\mid~ \KWD{Type} +\SEPDEF +\DEFNT{name} + \NT{ident} ~\mid~ \KWD{_} +\end{rules} + +\begin{rules} +\DEFNT{fix-expr} + \NT{single-fix} +\nlsep \NT{single-fix}~\PLUSGR{\KWD{with}~\NT{fix-decl}} + ~\KWD{for}~\NT{ident} +\SEPDEF +\DEFNT{single-fix} + \NT{fix-kw}~\NT{fix-decl} +\SEPDEF +\DEFNT{fix-kw} \KWD{fix} ~\mid~ \KWD{cofix} +\SEPDEF +\DEFNT{fix-decl} + \NT{ident}~\STAR{\NT{binder-let}}~\OPT{\NT{annot}}~\NT{type-cstr} + ~\KWD{:=}~\NTL{constr}{200} +\SEPDEF +\DEFNT{annot} + \KWD{\{}~\TERM{struct}~\NT{ident}~\KWD{\}} +\end{rules} + + +\begin{rules} +\DEFNT{match-expr} + \KWD{match}~\NT{match-items}~\OPT{\NT{return-type}}~\KWD{with} + ~\OPT{\TERMbar}~\OPT{\NT{branches}}~\KWD{end} &&\RNAME{match} +\SEPDEF +\DEFNT{match-items} + \NT{match-item} ~\KWD{,} ~\NT{match-items} +\nlsep \NT{match-item} +\SEPDEF +\DEFNT{match-item} + \NTL{constr}{100}~\OPTGR{\KWD{as}~\NT{name}} + ~\OPTGR{\KWD{in}~\NTL{constr}{100}} +\SEPDEF +\DEFNT{return-type} + \KWD{return}~\NTL{constr}{100} +\SEPDEF +\DEFNT{if-item} + \NT{constr}~\OPTGR{\OPTGR{\KWD{as}~\NT{name}}~\NT{return-type}} +\SEPDEF +\DEFNT{branches} + \NT{eqn}~\TERMbar~\NT{branches} +\nlsep \NT{eqn} +\SEPDEF +\DEFNT{eqn} + \NT{pattern} ~\STARGR{\KWD{,}~\NT{pattern}} + ~\KWD{$\Rightarrow$}~\NT{constr} +\SEPDEF +\DEFNT{pattern} + \NT{reference}~\PLUS{\NT{pattern}} &1L~~ & \RNAME{constructor} +\nlsep \NT{pattern}~\KWD{as}~\NT{ident} &1L & \RNAME{alias} +\nlsep \NT{pattern}~\KWD{\%}~\NT{ident} &1L & \RNAME{scope-change} +\nlsep \NT{reference} &0 & \RNAME{pattern-var} +\nlsep \KWD{_} &0 & \RNAME{hole} +\nlsep \NT{num} &0 +\nlsep \KWD{(}~\NT{tuple-pattern}~\KWD{)} +\SEPDEF +\DEFNT{tuple-pattern} + \NT{pattern} +\nlsep \NT{tuple-pattern}~\KWD{,}~\NT{pattern} && \RNAME{pair} +\end{rules} + +\subsection{Notations of the prelude (logic and basic arithmetic)} + +Reserved notations: + +$$ +\begin{array}{l|c} +\text{Symbol} & \text{precedence} \\ +\hline +\infx{,} & 250L \\ +\KWD{IF}~\notv~\KWD{then}~\notv~\KWD{else}~\notv + & 200R \\ +\infx{:} & 100R \\ +\infx{\leftrightarrow} & 95N \\ +\infx{\rightarrow} & 90R \\ +\infx{\vee} & 85R \\ +\infx{\wedge} & 80R \\ +\tilde{}\notv & 75R \\ +\begin{array}[c]{@{}l@{}} + \infx{=}\quad \infx{=}\KWD{$:>$}\notv \quad \infx{=}=\notv + \quad \infx{\neq} \quad \infx{\neq}\KWD{$:>$}\notv \\ + \infx{<}\quad\infx{>} \quad \infx{\leq}\quad\infx{\geq} + \quad \infx{<}<\notv \quad \infx{<}\leq\notv + \quad \infx{\leq}<\notv \quad \infx{\leq}\leq\notv +\end{array} & 70N \\ +\infx{+}\quad\infx{-}\quad -\notv & 50L \\ +\infx{*}\quad\infx{/}\quad /\notv & 40L \\ +\end{array} +$$ + +Existential quantifiers follows the \KWD{forall} notation (with same +precedence 200), but only one quantified variable is allowed. + +\begin{rules} +\EXTNT{binder-constr} + \NT{quantifier-kwd}~\NT{name}~\NT{type-cstr}~\KWD{,}~\NTL{constr}{200} \\ +\SEPDEF +\DEFNT{quantifier-kwd} + \TERM{exists} && \RNAME{ex} +\nlsep \TERM{exists2} && \RNAME{ex2} +\end{rules} + +$$ +\begin{array}{l|c|l} +\text{Symbol} & \text{precedence} \\ +\hline +\notv+\{\notv\} & 50 & \RNAME{sumor} \\ +\{\notv:\notv~|~\notv\} & 0 & \RNAME{sig} \\ +\{\notv:\notv~|~\notv \& \notv \} & 0 & \RNAME{sig2} \\ +\{\notv:\notv~\&~\notv \} & 0 & \RNAME{sigS} \\ +\{\notv:\notv~\&~\notv \& \notv \} & 0 & \RNAME{sigS2} \\ +\{\notv\}+\{\notv\} & 0 & \RNAME{sumbool} \\ +\end{array} +$$ + +%% Strange: nat + {x:nat|x=x} * nat == ( + ) * + +\section{Grammar of tactics} + +\def\tacconstr{\NTL{constr}{9}} +\def\taclconstr{\NTL{constr}{200}} + +Additional symbols are: +$$ \TERM{'} +~~ \KWD{;} +~~ \TERM{()} +~~ \TERMbarbar +~~ \TERM{$\vdash$} +~~ \TERM{[} +~~ \TERM{]} +~~ \TERM{$\leftarrow$} +$$ +Additional reserved keywords are: +$$ \KWD{at} +~~ \TERM{using} +$$ + +\subsection{Basic tactics} + +\begin{rules} +\DEFNT{simple-tactic} + \TERM{intros}~\TERM{until}~\NT{quantified-hyp} +\nlsep \TERM{intros}~\NT{intro-patterns} +\nlsep \TERM{intro}~\OPT{\NT{ident}}~\OPTGR{\TERM{after}~\NT{ident}} +%% +\nlsep \TERM{assumption} +\nlsep \TERM{exact}~\tacconstr +%% +\nlsep \TERM{apply}~\NT{constr-with-bindings} +\nlsep \TERM{elim}~\NT{constr-with-bindings}~\OPT{\NT{eliminator}} +\nlsep \TERM{elimtype}~\tacconstr +\nlsep \TERM{case}~\NT{constr-with-bindings} +\nlsep \TERM{casetype}~\tacconstr +\nlsep \KWD{fix}~\OPT{\NT{ident}}~\NT{num} +\nlsep \KWD{fix}~\NT{ident}~\NT{num}~\KWD{with}~\PLUS{\NT{fix-spec}} +\nlsep \KWD{cofix}~\OPT{\NT{ident}} +\nlsep \KWD{cofix}~\NT{ident}~\PLUS{\NT{fix-spec}} +%% +\nlsep \TERM{cut}~\tacconstr +\nlsep \TERM{assert}~\tacconstr +\nlsep \TERM{assert}~ + \TERM{(}~\NT{ident}~\KWD{:}~\taclconstr~\TERM{)} +\nlsep \TERM{assert}~ + \TERM{(}~\NT{ident}~\KWD{:=}~\taclconstr~\TERM{)} +\nlsep \TERM{pose}~\tacconstr +\nlsep \TERM{pose}~ + \TERM{(}~\NT{ident}~\KWD{:=}~\taclconstr~\TERM{)} +\nlsep \TERM{generalize}~\PLUS{\tacconstr} +\nlsep \TERM{generalize}~\TERM{dependent}~\tacconstr +\nlsep \TERM{set}~\tacconstr~\OPT{\NT{clause}} +\nlsep \TERM{set}~ + \TERM{(}~\NT{ident}~\KWD{:=}~\taclconstr~\TERM{)}~\OPT{\NT{clause}} +\nlsep \TERM{instantiate}~ + \TERM{(}~\NT{num}~\TERM{:=}~\taclconstr~\TERM{)}~\OPT{\NT{clause}} +%% +\nlsep \TERM{specialize}~\OPT{\NT{num}}~\NT{constr-with-bindings} +\nlsep \TERM{lapply}~\tacconstr +%% +\nlsep \TERM{simple}~\TERM{induction}~\NT{quantified-hyp} +\nlsep \TERM{induction}~\NT{induction-arg}~\OPT{\NT{with-names}} + ~\OPT{\NT{eliminator}} +\nlsep \TERM{double}~\TERM{induction}~\NT{quantified-hyp}~\NT{quantified-hyp} +\nlsep \TERM{simple}~\TERM{destruct}~\NT{quantified-hyp} +\nlsep \TERM{destruct}~\NT{induction-arg}~\OPT{\NT{with-names}} + ~\OPT{\NT{eliminator}} +\nlsep \TERM{decompose}~\TERM{record}~\tacconstr +\nlsep \TERM{decompose}~\TERM{sum}~\tacconstr +\nlsep \TERM{decompose}~\TERM{[}~\PLUS{\NT{reference}}~\TERM{]} + ~\tacconstr +%% +\nlsep ... +\end{rules} + +\begin{rules} +\EXTNT{simple-tactic} + \TERM{trivial}~\OPT{\NT{hint-bases}} +\nlsep \TERM{auto}~\OPT{\NT{num}}~\OPT{\NT{hint-bases}} +%% +%%\nlsep \TERM{autotdb}~\OPT{\NT{num}} +%%\nlsep \TERM{cdhyp}~\NT{ident} +%%\nlsep \TERM{dhyp}~\NT{ident} +%%\nlsep \TERM{dconcl} +%%\nlsep \TERM{superauto}~\NT{auto-args} +\nlsep \TERM{auto}~\OPT{\NT{num}}~\TERM{decomp}~\OPT{\NT{num}} +%% +\nlsep \TERM{clear}~\PLUS{\NT{ident}} +\nlsep \TERM{clearbody}~\PLUS{\NT{ident}} +\nlsep \TERM{move}~\NT{ident}~\TERM{after}~\NT{ident} +\nlsep \TERM{rename}~\NT{ident}~\TERM{into}~\NT{ident} +%% +\nlsep \TERM{left}~\OPT{\NT{with-binding-list}} +\nlsep \TERM{right}~\OPT{\NT{with-binding-list}} +\nlsep \TERM{split}~\OPT{\NT{with-binding-list}} +\nlsep \TERM{exists}~\OPT{\NT{binding-list}} +\nlsep \TERM{constructor}~\NT{num}~\OPT{\NT{with-binding-list}} +\nlsep \TERM{constructor}~\OPT{\NT{tactic}} +%% +\nlsep \TERM{reflexivity} +\nlsep \TERM{symmetry}~\OPTGR{\KWD{in}~\NT{ident}} +\nlsep \TERM{transitivity}~\tacconstr +%% +\nlsep \NT{inversion-kwd}~\NT{quantified-hyp}~\OPT{\NT{with-names}}~\OPT{\NT{clause}} +\nlsep \TERM{dependent}~\NT{inversion-kwd}~\NT{quantified-hyp} + ~\OPT{\NT{with-names}}~\OPTGR{\KWD{with}~\tacconstr} +\nlsep \TERM{inversion}~\NT{quantified-hyp}~\TERM{using}~\tacconstr~\OPT{\NT{clause}} +%% +\nlsep \NT{red-expr}~\OPT{\NT{clause}} +\nlsep \TERM{change}~\NT{conversion}~\OPT{\NT{clause}} +\SEPDEF +\DEFNT{red-expr} + \TERM{red} ~\mid~ \TERM{hnf} ~\mid~ \TERM{compute} +\nlsep \TERM{simpl}~\OPT{\NT{pattern-occ}} +\nlsep \TERM{cbv}~\PLUS{\NT{red-flag}} +\nlsep \TERM{lazy}~\PLUS{\NT{red-flag}} +\nlsep \TERM{unfold}~\NT{unfold-occ}~\STARGR{\KWD{,}~\NT{unfold-occ}} +\nlsep \TERM{fold}~\PLUS{\tacconstr} +\nlsep \TERM{pattern}~\NT{pattern-occ}~\STARGR{\KWD{,}~\NT{pattern-occ}} +\SEPDEF +\DEFNT{conversion} + \NT{pattern-occ}~\KWD{with}~\tacconstr +\nlsep \tacconstr +\SEPDEF +\DEFNT{inversion-kwd} + \TERM{inversion} ~\mid~ \TERM{invesion_clear} ~\mid~ + \TERM{simple}~\TERM{inversion} +\end{rules} + +Conflicts exists between integers and constrs. + +\begin{rules} +\DEFNT{quantified-hyp} + \NT{int}~\mid~\NT{ident} +\SEPDEF +\DEFNT{induction-arg} + \NT{int}~\mid~\tacconstr +\SEPDEF +\DEFNT{fix-spec} + \KWD{(}~\NT{ident}~\STAR{\NT{binder}}~\OPT{\NT{annot}} + ~\KWD{:}~\taclconstr~\KWD{)} +\SEPDEF +\DEFNT{intro-patterns} + \STAR{\NT{intro-pattern}} +\SEPDEF +\DEFNT{intro-pattern} + \NT{name} +\nlsep \TERM{[}~\NT{intro-patterns}~\STARGR{\TERMbar~\NT{intro-patterns}} + ~\TERM{]} +\nlsep \KWD{(}~\NT{intro-pattern}~\STARGR{\KWD{,}~\NT{intro-pattern}} + ~\KWD{)} +\SEPDEF +\DEFNT{with-names} +% \KWD{as}~\TERM{[}~\STAR{\NT{ident}}~\STARGR{\TERMbar~\STAR{\NT{ident}}} +% ~\TERM{]} + \KWD{as}~\NT{intro-pattern} +\SEPDEF +\DEFNT{eliminator} + \TERM{using}~\NT{constr-with-bindings} +\SEPDEF +\DEFNT{constr-with-bindings} + % dangling ``with'' of ``fix'' can conflict with ``with'' + \tacconstr~\OPT{\NT{with-binding-list}} +\SEPDEF +\DEFNT{with-binding-list} + \KWD{with}~\NT{binding-list} +\SEPDEF +\DEFNT{binding-list} + \PLUS{\tacconstr} +\nlsep \PLUS{\NT{simple-binding}} +\SEPDEF +\DEFNT{simple-binding} + \KWD{(}~\NT{quantified-hyp}~\KWD{:=}~\taclconstr~\KWD{)} +\SEPDEF +\DEFNT{red-flag} + \TERM{beta} ~\mid~ \TERM{iota} ~\mid~ \TERM{zeta} + ~\mid~ \TERM{delta} ~\mid~ + \TERM{delta}~\OPT{\TERM{-}}~\TERM{[}~\PLUS{\NT{reference}}~\TERM{]} +\SEPDEF +\DEFNT{clause} + \KWD{in}~\TERM{*} +\nlsep \KWD{in}~\TERM{*}~\KWD{$\vdash$}~\OPT{\NT{concl-occ}} +\nlsep \KWD{in}~\OPT{\NT{hyp-ident-list}} ~\KWD{$\vdash$} ~\OPT{\NT{concl-occ}} +\nlsep \KWD{in}~\OPT{\NT{hyp-ident-list}} +\SEPDEF +\DEFNT{hyp-ident-list} + \NT{hyp-ident} +\nlsep \NT{hyp-ident}~\KWD{,}~\NT{hyp-ident-list} +\SEPDEF +\DEFNT{hyp-ident} + \NT{ident} +\nlsep \KWD{(}~\TERM{type}~\TERM{of}~\NT{ident}~\KWD{)} +\nlsep \KWD{(}~\TERM{value}~\TERM{of}~\NT{ident}~\KWD{)} +\SEPDEF +\DEFNT{concl-occ} + \TERM{*} ~\NT{occurrences} +\SEPDEF +\DEFNT{pattern-occ} + \tacconstr ~\NT{occurrences} +\SEPDEF +\DEFNT{unfold-occ} + \NT{reference}~\NT{occurrences} +\SEPDEF +\DEFNT{occurrences} + ~\OPTGR{\KWD{at}~\PLUS{\NT{int}}} +\SEPDEF +\DEFNT{hint-bases} + \KWD{with}~\TERM{*} +\nlsep \KWD{with}~\PLUS{\NT{ident}} +\SEPDEF +\DEFNT{auto-args} + \OPT{\NT{num}}~\OPTGR{\TERM{adding}~\TERM{[}~\PLUS{\NT{reference}} + ~\TERM{]}}~\OPT{\TERM{destructuring}}~\OPTGR{\TERM{using}~\TERM{tdb}} +\end{rules} + +\subsection{Ltac} + +%% Currently, there are conflicts with keyword \KWD{in}: in the following, +%% has the keyword to be associated to \KWD{let} or to tactic \TERM{simpl} ? +%% \begin{center} +%% \texttt{let x := simpl in ...} +%% \end{center} + + +\begin{rules} +\DEFNT{tactic} + \NT{tactic} ~\KWD{;} ~\NT{tactic} &5 &\RNAME{Then} +\nlsep \NT{tactic} ~\KWD{;}~\TERM{[} ~\OPT{\NT{tactic-seq}} ~\TERM{]} + &5 &\RNAME{Then-seq} +%% +\nlsep \TERM{try} ~\NT{tactic} &3R &\RNAME{Try} +\nlsep \TERM{do} ~\NT{int-or-var} ~\NT{tactic} +\nlsep \TERM{repeat} ~\NT{tactic} +\nlsep \TERM{progress} ~\NT{tactic} +\nlsep \TERM{info} ~\NT{tactic} +\nlsep \TERM{abstract}~\NTL{tactic}{2}~\OPTGR{\TERM{using}~\NT{ident}} +%% +\nlsep \NT{tactic} ~\TERMbarbar ~\NT{tactic} &2R &\RNAME{Orelse} +%% +\nlsep \KWD{fun} ~\PLUS{\NT{name}} ~\KWD{$\Rightarrow$} + ~\NT{tactic} &1 &\RNAME{Fun-tac} +\nlsep \KWD{let} ~\NT{let-clauses} ~\KWD{in} ~\NT{tactic} +\nlsep \KWD{let} ~\TERM{rec} ~\NT{rec-clauses} ~\KWD{in} ~\NT{tactic} +\nlsep \KWD{match}~\OPT{\TERM{reverse}}~\TERM{goal}~\KWD{with} + ~\OPT{\TERMbar}~\OPT{\NT{match-goal-rules}} ~\KWD{end} +\nlsep \KWD{match} ~\NT{tactic} ~\KWD{with} + ~\OPT{\TERMbar}~\OPT{\NT{match-rules}} ~\KWD{end} +\nlsep \TERM{first}~\TERM{[} ~\NT{tactic-seq} ~\TERM{]} +\nlsep \TERM{solve}~\TERM{[} ~\NT{tactic-seq} ~\TERM{]} +\nlsep \TERM{idtac} +\nlsep \TERM{fail} ~\OPT{\NT{num}} ~\OPT{\NT{string}} +\nlsep \TERM{constr}~\KWD{:}~\tacconstr +\nlsep \TERM{ipattern}~\KWD{:}~\NT{intro-pattern} +\nlsep \NT{term-ltac} +\nlsep \NT{reference}~\STAR{\NT{tactic-arg}} &&\RNAME{call-tactic} +\nlsep \NT{simple-tactic} +%% +\nlsep \NT{tactic-atom} &0 &\RNAME{atomic} +\nlsep \KWD{(} ~\NT{tactic} ~\KWD{)} +\SEPDEF +\DEFNT{tactic-arg} + \TERM{ltac}~\KWD{:}~\NTL{tactic}{0} +\nlsep \TERM{ipattern}~\KWD{:}~\NT{intro-pattern} +\nlsep \NT{term-ltac} +\nlsep \NT{tactic-atom} +\nlsep \tacconstr +\SEPDEF +\DEFNT{term-ltac} + \TERM{fresh} ~\OPT{\NT{string}} +\nlsep \TERM{context} ~\NT{ident} ~\TERM{[} ~\taclconstr ~\TERM{]} +\nlsep \TERM{eval} ~\NT{red-expr} ~\KWD{in} ~\tacconstr +\nlsep \TERM{type} ~\tacconstr +\SEPDEF +\DEFNT{tactic-atom} + \NT{reference} +\nlsep \TERM{()} +\SEPDEF +\DEFNT{tactic-seq} + \NT{tactic} ~\TERMbar ~\NT{tactic-seq} +\nlsep \NT{tactic} +\end{rules} + + + +\begin{rules} +\DEFNT{let-clauses} + \NT{let-clause} ~\STARGR{\KWD{with}~\NT{let-clause}} +\SEPDEF +\DEFNT{let-clause} + \NT{ident} ~\STAR{\NT{name}} ~\KWD{:=} ~\NT{tactic} +\SEPDEF +\DEFNT{rec-clauses} + \NT{rec-clause} ~\KWD{with} ~\NT{rec-clauses} +\nlsep \NT{rec-clause} +\SEPDEF +\DEFNT{rec-clause} + \NT{ident} ~\PLUS{\NT{name}} ~\KWD{:=} ~\NT{tactic} +\SEPDEF +\DEFNT{match-goal-rules} + \NT{match-goal-rule} +\nlsep \NT{match-goal-rule} ~\TERMbar ~\NT{match-goal-rules} +\SEPDEF +\DEFNT{match-goal-rule} + \NT{match-hyps-list} ~\TERM{$\vdash$} ~\NT{match-pattern} + ~\KWD{$\Rightarrow$} ~\NT{tactic} +\nlsep \KWD{[}~\NT{match-hyps-list} ~\TERM{$\vdash$} ~\NT{match-pattern} + ~\KWD{]}~\KWD{$\Rightarrow$} ~\NT{tactic} +\nlsep \KWD{_} ~\KWD{$\Rightarrow$} ~\NT{tactic} +\SEPDEF +\DEFNT{match-hyps-list} + \NT{match-hyps} ~\KWD{,} ~\NT{match-hyps-list} +\nlsep \NT{match-hyps} +\SEPDEF +\DEFNT{match-hyps} + \NT{name} ~\KWD{:} ~\NT{match-pattern} +\SEPDEF +\DEFNT{match-rules} + \NT{match-rule} +\nlsep \NT{match-rule} ~\TERMbar ~\NT{match-rules} +\SEPDEF +\DEFNT{match-rule} + \NT{match-pattern} ~\KWD{$\Rightarrow$} ~\NT{tactic} +\nlsep \KWD{_} ~\KWD{$\Rightarrow$} ~\NT{tactic} +\SEPDEF +\DEFNT{match-pattern} + \TERM{context}~\OPT{\NT{ident}} + ~\TERM{[} ~\NT{constr-pattern} ~\TERM{]} &&\RNAME{subterm} +\nlsep \NT{constr-pattern} +\SEPDEF +\DEFNT{constr-pattern} + \tacconstr +\end{rules} + +\subsection{Other tactics} + +\begin{rules} +\EXTNT{simple-tactic} + \TERM{rewrite} ~\NT{orient} ~\NT{constr-with-bindings} + ~\OPTGR{\KWD{in}~\NT{ident}} +\nlsep \TERM{replace} ~\tacconstr ~\KWD{with} ~\tacconstr + ~\OPTGR{\KWD{in}~\NT{ident}} +\nlsep \TERM{replace} ~\OPT{\NT{orient}} ~\tacconstr + ~\OPTGR{\KWD{in}~\NT{ident}} +\nlsep \TERM{symplify_eq} ~\OPT{\NT{quantified-hyp}} +\nlsep \TERM{discriminate} ~\OPT{\NT{quantified-hyp}} +\nlsep \TERM{injection} ~\OPT{\NT{quantified-hyp}} +\nlsep \TERM{conditional}~\NT{tactic}~\TERM{rewrite}~\NT{orient} + ~\NT{constr-with-bindings}~\OPTGR{\KWD{in}~\NT{ident}} +\nlsep \TERM{dependent}~\TERM{rewrite}~\NT{orient}~\NT{ident} +\nlsep \TERM{cutrewrite}~\NT{orient}~\tacconstr + ~\OPTGR{\KWD{in}~\NT{ident}} +\nlsep \TERM{absurd} ~\tacconstr +\nlsep \TERM{contradiction} +\nlsep \TERM{autorewrite}~\NT{hint-bases}~\OPTGR{\KWD{using}~\NT{tactic}} +\nlsep \TERM{refine}~\tacconstr +\nlsep \TERM{setoid_replace} ~\tacconstr ~\KWD{with} ~\tacconstr +\nlsep \TERM{setoid_rewrite} ~\NT{orient} ~\tacconstr +\nlsep \TERM{subst} ~\STAR{\NT{ident}} +%% eqdecide.ml4 +\nlsep \TERM{decide}~\TERM{equality} ~\OPTGR{\tacconstr~\tacconstr} +\nlsep \TERM{compare}~\tacconstr~\tacconstr +%% eauto +\nlsep \TERM{eexact}~\tacconstr +\nlsep \TERM{eapply}~\NT{constr-with-bindings} +\nlsep \TERM{prolog}~\TERM{[}~\STAR{\tacconstr}~\TERM{]} + ~\NT{quantified-hyp} +\nlsep \TERM{eauto}~\OPT{\NT{quantified-hyp}}~\OPT{\NT{quantified-hyp}} + ~\NT{hint-bases} +\nlsep \TERM{eautod}~\OPT{\NT{quantified-hyp}}~\OPT{\NT{quantified-hyp}} + ~\NT{hint-bases} +%% tauto +\nlsep \TERM{tauto} +\nlsep \TERM{simplif} +\nlsep \TERM{intuition}~\OPT{\NTL{tactic}{0}} +\nlsep \TERM{linearintuition}~\OPT{\NT{num}} +%% contrib/cc +\nlsep \TERM{cc} +%% contrib/field +\nlsep \TERM{field}~\STAR{\tacconstr} +%% contrib/first-order +\nlsep \TERM{ground}~\OPT{\NTL{tactic}{0}} +\nlsep \TERM{ground}~\OPT{\NTL{tactic}{0}}~\KWD{with}~\PLUS{\NT{reference}} +\nlsep \TERM{ground}~\OPT{\NTL{tactic}{0}}~\KWD{using}~\PLUS{\NT{ident}} +%%\nlsep \TERM{gtauto} +\nlsep \TERM{gintuition}~\OPT{\NTL{tactic}{0}} +%% contrib/fourier +\nlsep \TERM{fourierZ} +%% contrib/funind +\nlsep \TERM{functional}~\TERM{induction}~\tacconstr~\PLUS{\tacconstr} +%% contrib/jprover +\nlsep \TERM{jp}~\OPT{\NT{num}} +%% contrib/omega +\nlsep \TERM{omega} +%% contrib/ring +\nlsep \TERM{quote}~\NT{ident}~\OPTGR{\KWD{[}~\PLUS{\NT{ident}}~\KWD{]}} +\nlsep \TERM{ring}~\STAR{\tacconstr} +%% contrib/romega +\nlsep \TERM{romega} +\SEPDEF +\DEFNT{orient} + \KWD{$\rightarrow$}~\mid~\KWD{$\leftarrow$} +\end{rules} + +\section{Grammar of commands} + +New symbols: +$$ \TERM{.} +~~ \TERM{..} +~~ \TERM{\tt >->} +~~ \TERM{:$>$} +~~ \TERM{$<$:} +$$ + +New keyword: +$$ \KWD{where} +$$ + +\subsection{Classification of commands} + +\begin{rules} +\DEFNT{vernac} + \TERM{Time}~\NT{vernac} &2~~ &\RNAME{Timing} +%% +\nlsep \NT{gallina}~\TERM{.} &1 +\nlsep \NT{command}~\TERM{.} +\nlsep \NT{syntax}~\TERM{.} +\nlsep \TERM{[}~\PLUS{\NT{vernac}}~\TERM{]}~\TERM{.} +%% +\nlsep \OPTGR{\NT{num}~\KWD{:}}~\NT{subgoal-command}~\TERM{.} ~~~&0 +\SEPDEF +\DEFNT{subgoal-command} + \NT{check-command} +\nlsep %\OPT{\TERM{By}}~ + \NT{tactic}~\OPT{\KWD{..}} +\end{rules} + +\subsection{Gallina and extensions} + +\begin{rules} +\DEFNT{gallina} + \NT{thm-token}~\NT{ident}~\STAR{\NT{binder-let}}~\KWD{:}~\NT{constr} +\nlsep \NT{def-token}~\NT{ident}~\NT{def-body} +\nlsep \NT{assum-token}~\NT{assum-list} +\nlsep \NT{finite-token}~\NT{inductive-definition} + ~\STARGR{\KWD{with}~\NT{inductive-definition}} +\nlsep \TERM{Fixpoint}~\NT{fix-decl}~\STARGR{\KWD{with}~\NT{fix-decl}} +\nlsep \TERM{CoFixpoint}~\NT{fix-decl}~\STARGR{\KWD{with}~\NT{fix-decl}} +\nlsep \TERM{Scheme}~\NT{scheme}~\STARGR{\KWD{with}~\NT{scheme}} +%% Extension: record +\nlsep \NT{record-tok}~\OPT{\TERM{$>$}}~\NT{ident}~\STAR{\NT{binder-let}} + ~\KWD{:}~\NT{constr}~\KWD{:=} + ~\OPT{\NT{ident}}~\KWD{\{}~\NT{field-list}~\KWD{\}} +\nlsep \TERM{Ltac}~\NT{ltac-def}~\STARGR{~\TERM{with}~\NT{ltac-def}} +\end{rules} + +\begin{rules} +\DEFNT{thm-token} + \TERM{Theorem} ~\mid~ \TERM{Lemma} ~\mid~ \TERM{Fact} ~\mid~ \TERM{Remark} +\SEPDEF +\DEFNT{def-token} + \TERM{Definition} ~\mid~ \TERM{Let} ~\mid~ + \OPT{\TERM{Local}}~\TERM{SubClass} +\SEPDEF +\DEFNT{assum-token} + \TERM{Hypothesis} ~\mid~ \TERM{Variable} ~\mid~ \TERM{Axiom} ~\mid~ + \TERM{Parameter} +\SEPDEF +\DEFNT{finite-token} + \TERM{Inductive} ~\mid~ \TERM{CoInductive} +\SEPDEF +\DEFNT{record-tok} + \TERM{Record} ~\mid~ \TERM{Structure} +\end{rules} + + +\begin{rules} +\DEFNT{def-body} + \STAR{\NT{binder-let}}~\NT{type-cstr}~\KWD{:=} + ~\OPT{\NT{reduce}}~\NT{constr} +\nlsep \STAR{\NT{binder-let}}~\KWD{:}~\NT{constr} +\SEPDEF +\DEFNT{reduce} + \TERM{Eval}~\NT{red-expr}~\KWD{in} +\SEPDEF +\DEFNT{ltac-def} + \NT{ident}~\STAR{\NT{name}}~\KWD{:=}~\NT{tactic} +\SEPDEF +\DEFNT{rec-definition} + \NT{fix-decl}~\OPT{\NT{decl-notation}} +\SEPDEF +\DEFNT{inductive-definition} + \OPT{\NT{string}}~\NT{ident}~\STAR{\NT{binder-let}}~\KWD{:} + ~\NT{constr}~\KWD{:=} + ~\OPT{\TERMbar}~\OPT{\NT{constructor-list}} + ~\OPT{\NT{decl-notation}} +\SEPDEF +\DEFNT{constructor-list} + \NT{constructor}~\TERMbar~\NT{constructor-list} +\nlsep \NT{constructor} +\SEPDEF +\DEFNT{constructor} + \NT{ident}~\STAR{\NT{binder-let}}\OPTGR{\NT{coerce-kwd}~\NT{constr}} +\SEPDEF +\DEFNT{decl-notation} + \TERM{where}~\NT{string}~\TERM{:=}~\NT{constr} +\SEPDEF +\DEFNT{field-list} + \NT{field}~\KWD{;}~\NT{field-list} +\nlsep \NT{field} +\SEPDEF +\DEFNT{field} + \NT{ident}~\OPTGR{\NT{coerce-kwd}~\NT{constr}} +\nlsep \NT{ident}~\NT{type-cstr-coe}~\KWD{:=}~\NT{constr} +\SEPDEF +\DEFNT{assum-list} + \PLUS{\GR{\KWD{(}~\NT{simple-assum-coe}~\KWD{)}}} +\nlsep \NT{simple-assum-coe} +\SEPDEF +\DEFNT{simple-assum-coe} + \PLUS{\NT{ident}}~\NT{coerce-kwd}~\NT{constr} +\SEPDEF +\DEFNT{coerce-kwd} \TERM{:$>$} ~\mid~ \KWD{:} +\SEPDEF +\DEFNT{type-cstr-coe} \OPTGR{\NT{coerce-kwd}~\NT{constr}} +\SEPDEF +\DEFNT{scheme} + \NT{ident}~\KWD{:=}~\NT{dep-scheme}~\KWD{for}~\NT{reference} + ~\TERM{Sort}~\NT{sort} +\SEPDEF +\DEFNT{dep-scheme} + \TERM{Induction}~\mid~\TERM{Minimality} +\end{rules} + +\subsection{Modules and sections} + +\begin{rules} +\DEFNT{gallina} + \TERM{Module}~\NT{ident}~\STAR{\NT{mbinder}}~\OPT{\NT{of-mod-type}} + ~\OPTGR{\KWD{:=}~\NT{mod-expr}} +\nlsep \TERM{Module}~\KWD{Type}~\NT{ident}~\STAR{\NT{mbinder}} + ~\OPTGR{\KWD{:=}~\NT{mod-type}} +\nlsep \TERM{Declare}~\TERM{Module}~\NT{ident}~\STAR{\NT{mbinder}} + ~\OPT{\NT{of-mod-type}} + ~\OPTGR{\KWD{:=}~\NT{mod-expr}} +\nlsep \TERM{Section}~\NT{ident} +\nlsep \TERM{Chapter}~\NT{ident} +\nlsep \TERM{End}~\NT{ident} +%% +\nlsep \TERM{Require}~\OPT{\NT{export-token}}~\OPT{\NT{specif-token}} + ~\PLUS{\NT{reference}} +\nlsep \TERM{Require}~\OPT{\NT{export-token}}~\OPT{\NT{specif-token}} + ~\NT{string} +\nlsep \TERM{Import}~\PLUS{\NT{reference}} +\nlsep \TERM{Export}~\PLUS{\NT{reference}} +\SEPDEF +\DEFNT{export-token} + \TERM{Import} ~\mid~ \TERM{Export} +\SEPDEF +\DEFNT{specif-token} + \TERM{Implementation} ~\mid~ \TERM{Specification} +\SEPDEF +\DEFNT{mod-expr} + \NT{reference} +\nlsep \NT{mod-expr}~\NT{mod-expr} & L +\nlsep \KWD{(}~\NT{mod-expr}~\KWD{)} +\SEPDEF +\DEFNT{mod-type} + \NT{reference} +\nlsep \NT{mod-type}~\KWD{with}~\NT{with-declaration} +\SEPDEF +\DEFNT{with-declaration} + %on forcera les ( ) + %si exceptionnellemt + %un fixpoint ici + \TERM{Definition}~\NT{ident}~\KWD{:=}~\NTL{constr}{} %{100} +\nlsep \TERM{Module}~\NT{ident}~\KWD{:=}~\NT{reference} +\SEPDEF +\DEFNT{of-mod-type} + \KWD{:}~\NT{mod-type} +\nlsep \TERM{$<$:}~\NT{mod-type} +\SEPDEF +\DEFNT{mbinder} + \KWD{(}~\PLUS{\NT{ident}}~\KWD{:}~\NT{mod-type}~\KWD{)} +\end{rules} + +\begin{rules} +\DEFNT{gallina} + \TERM{Transparent}~\PLUS{\NT{reference}} +\nlsep \TERM{Opaque}~\PLUS{\NT{reference}} +\nlsep \TERM{Canonical}~\TERM{Structure}~\NT{reference}~\OPT{\NT{def-body}} +\nlsep \TERM{Coercion}~\OPT{\TERM{Local}}~\NT{reference}~\NT{def-body} +\nlsep \TERM{Coercion}~\OPT{\TERM{Local}}~\NT{reference}~\KWD{:} + ~\NT{class-rawexpr}~\TERM{$>->$}~\NT{class-rawexpr} +\nlsep \TERM{Identity}~\TERM{Coercion}~\OPT{\TERM{Local}}~\NT{ident}~\KWD{:} + ~\NT{class-rawexpr}~\TERM{$>->$}~\NT{class-rawexpr} +\nlsep \TERM{Implicit}~\TERM{Arguments}~\NT{reference}~\TERM{[}~\STAR{\NT{num}}~\TERM{]} +\nlsep \TERM{Implicit}~\TERM{Arguments}~\NT{reference} +\nlsep \TERM{Implicit}~\KWD{Type}~\PLUS{\NT{ident}}~\KWD{:}~\NT{constr} +\SEPDEF +\DEFNT{command} + \TERM{Comments}~\STAR{\NT{comment}} +\nlsep \TERM{Pwd} +\nlsep \TERM{Cd}~\OPT{\NT{string}} +\nlsep \TERM{Drop} ~\mid~ \TERM{ProtectedLoop} ~\mid~\TERM{Quit} +%% +\nlsep \TERM{Load}~\OPT{\TERM{Verbose}}~\NT{ident} +\nlsep \TERM{Load}~\OPT{\TERM{Verbose}}~\NT{string} +\nlsep \TERM{Declare}~\TERM{ML}~\TERM{Module}~\PLUS{\NT{string}} +\nlsep \TERM{Dump}~\TERM{Universes}~\OPT{\NT{string}} +\nlsep \TERM{Locate}~\NT{locatable} +\nlsep \TERM{Add}~\OPT{\TERM{Rec}}~\TERM{LoadPath}~\NT{string}~\OPT{\NT{as-dirpath}} +\nlsep \TERM{Remove}~\TERM{LoadPath}~\NT{string} +\nlsep \TERM{Add}~\OPT{\TERM{Rec}}~\TERM{ML}~\TERM{Path}~\NT{string} +%% +\nlsep \KWD{Type}~\NT{constr} +\nlsep \TERM{Print}~\NT{printable} +\nlsep \TERM{Print}~\NT{reference} +\nlsep \TERM{Inspect}~\NT{num} +\nlsep \TERM{About}~\NT{reference} +%% +\nlsep \TERM{Search}~\NT{reference}~\OPT{\NT{in-out-modules}} +\nlsep \TERM{SearchPattern}~\NT{constr-pattern}~\OPT{\NT{in-out-modules}} +\nlsep \TERM{SearchRewrite}~\NT{constr-pattern}~\OPT{\NT{in-out-modules}} +\nlsep \TERM{SearchAbout}~\NT{reference}~\OPT{\NT{in-out-modules}} +\nlsep \TERM{SearchAbout}~\TERM{[}~\STAR{\NT{ref-or-string}}~\TERM{]}\OPT{\NT{in-out-modules}} +\nlsep \KWD{Set}~\NT{ident}~\OPT{\NT{opt-value}} +\nlsep \TERM{Unset}~\NT{ident} +\nlsep \KWD{Set}~\NT{ident}~\NT{ident}~\OPT{\NT{opt-value}} +\nlsep \KWD{Set}~\NT{ident}~\NT{ident}~\PLUS{\NT{opt-ref-value}} +\nlsep \TERM{Unset}~\NT{ident}~\NT{ident}~\STAR{\NT{opt-ref-value}} +%% +\nlsep \TERM{Print}~\TERM{Table}~\NT{ident}~\NT{ident} +\nlsep \TERM{Print}~\TERM{Table}~\NT{ident} +\nlsep \TERM{Add}~\NT{ident}~\OPT{\NT{ident}}~\PLUS{\NT{opt-ref-value}} +%% +\nlsep \TERM{Test}~\NT{ident}~\OPT{\NT{ident}}~\STAR{\NT{opt-ref-value}} +%% +\nlsep \TERM{Remove}~\NT{ident}~\OPT{\NT{ident}}~\PLUS{\NT{opt-ref-value}} +\SEPDEF +\DEFNT{check-command} + \TERM{Eval}~\NT{red-expr}~\KWD{in}~\NT{constr} +\nlsep \TERM{Check}~\NT{constr} +\SEPDEF +\DEFNT{ref-or-string} + \NT{reference} +\nlsep \NT{string} +\end{rules} + +\begin{rules} +\DEFNT{printable} + \TERM{Term}~\NT{reference} +\nlsep \TERM{All} +\nlsep \TERM{Section}~\NT{reference} +\nlsep \TERM{Grammar}~\NT{ident} +\nlsep \TERM{LoadPath} +\nlsep \TERM{Module}~\OPT{\KWD{Type}}~\NT{reference} +\nlsep \TERM{Modules} +\nlsep \TERM{ML}~\TERM{Path} +\nlsep \TERM{ML}~\TERM{Modules} +\nlsep \TERM{Graph} +\nlsep \TERM{Classes} +\nlsep \TERM{Coercions} +\nlsep \TERM{Coercion}~\TERM{Paths}~\NT{class-rawexpr}~\NT{class-rawexpr} +\nlsep \TERM{Tables} +% \nlsep \TERM{Proof}~\NT{reference} % Obsolete, useful in V6.3 ?? +\nlsep \TERM{Hint}~\OPT{\NT{reference}} +\nlsep \TERM{Hint}~\TERM{*} +\nlsep \TERM{HintDb}~\NT{ident} +\nlsep \TERM{Scopes} +\nlsep \TERM{Scope}~\NT{ident} +\nlsep \TERM{Visibility}~\OPT{\NT{ident}} +\nlsep \TERM{Implicit}~\NT{reference} +\SEPDEF +\DEFNT{class-rawexpr} + \TERM{Funclass}~\mid~\TERM{Sortclass}~\mid~\NT{reference} +\SEPDEF +\DEFNT{locatable} + \NT{reference} +\nlsep \TERM{File}~\NT{string} +\nlsep \TERM{Library}~\NT{reference} +\nlsep \NT{string} +\SEPDEF +\DEFNT{opt-value} + \NT{ident} ~\mid~ \NT{string} +\SEPDEF +\DEFNT{opt-ref-value} + \NT{reference} ~\mid~ \NT{string} +\SEPDEF +\DEFNT{as-dirpath} + \KWD{as}~\NT{reference} +\SEPDEF +\DEFNT{in-out-modules} + \TERM{inside}~\PLUS{\NT{reference}} +\nlsep \TERM{outside}~\PLUS{\NT{reference}} +\SEPDEF +\DEFNT{comment} + \NT{constr} +\nlsep \NT{string} +\end{rules} + +\subsection{Other commands} + +%% TODO: min/maj pas a jour +\begin{rules} +\EXTNT{command} + \TERM{Debug}~\TERM{On} +\nlsep \TERM{Debug}~\TERM{Off} +%% TODO: vernac +\nlsep \TERM{Add}~\TERM{setoid}~\tacconstr~\tacconstr~\tacconstr +\nlsep \TERM{Add}~\TERM{morphism}~\tacconstr~\KWD{:}~\NT{ident} +\nlsep \TERM{Derive}~\TERM{inversion_clear} + ~\OPT{\NT{num}}~\NT{ident}~\NT{ident} +\nlsep \TERM{Derive}~\TERM{inversion_clear} + ~\NT{ident}~\KWD{with}~\tacconstr~\OPTGR{\TERM{Sort}~\NT{sort}} +\nlsep \TERM{Derive}~\TERM{inversion} + ~\OPT{\NT{num}}~\NT{ident}~\NT{ident} +\nlsep \TERM{Derive}~\TERM{inversion} + ~\NT{ident}~\KWD{with}~\tacconstr~\OPTGR{\TERM{Sort}~\NT{sort}} +\nlsep \TERM{Derive}~\TERM{dependent}~\TERM{inversion_clear} + ~\NT{ident}~\KWD{with}~\tacconstr~\OPTGR{\TERM{Sort}~\NT{sort}} +\nlsep \TERM{Derive}~\TERM{dependent}~\TERM{inversion} + ~\NT{ident}~\KWD{with}~\tacconstr~\OPTGR{\TERM{Sort}~\NT{sort}} +%% Correctness: obsolete ? +%\nlsep Correctness +%\nlsep Global Variable +%% TODO: extraction +\nlsep Extraction ... +%% field +\nlsep \TERM{Add}~\TERM{Field}~\tacconstr~\tacconstr~\tacconstr + ~\tacconstr~\tacconstr~\tacconstr +\nlcont~~~~\tacconstr~\tacconstr~\OPT{\NT{minus-div}} +%% funind +\nlsep \TERM{Functional}~\TERM{Scheme}~\NT{ident}~\KWD{:=} + ~\TERM{Induction}~\KWD{for}~\tacconstr + ~\OPTGR{\KWD{with}~\PLUS{\tacconstr}} +%% ring +\nlsep \TERM{Add}~\TERM{Ring}~\tacconstr~\tacconstr~\tacconstr + ~\tacconstr~\tacconstr~\tacconstr +\nlcont~~~~\tacconstr~\tacconstr~\KWD{[}~\PLUS{\tacconstr}~\KWD{]} +\nlsep \TERM{Add}~\TERM{Semi}~\TERM{Ring}~\tacconstr~\tacconstr~\tacconstr + ~\tacconstr~\tacconstr~\tacconstr +\nlcont~~~~\tacconstr~\KWD{[}~\PLUS{\tacconstr}~\KWD{]} +\nlsep \TERM{Add}~\TERM{Abstract}~\TERM{Ring}~\tacconstr~\tacconstr~\tacconstr + ~\tacconstr~\tacconstr~\tacconstr +\nlcont~~~~\tacconstr~\tacconstr +\nlsep \TERM{Add}~\TERM{Abstract}~\TERM{Semi}~\TERM{Ring}~\tacconstr + ~\tacconstr~\tacconstr~\tacconstr~\tacconstr~\tacconstr +\nlcont~~~~\tacconstr +\nlsep \TERM{Add}~\TERM{Setoid}~\TERM{Ring}~\tacconstr~\tacconstr~\tacconstr + ~\tacconstr~\tacconstr~\tacconstr +\nlcont~~~~\tacconstr~\tacconstr~\tacconstr~\tacconstr~\tacconstr~\tacconstr + ~\tacconstr~\KWD{[}~\PLUS{\tacconstr}~\KWD{]} +\nlsep \TERM{Add}~\TERM{Setoid}~\TERM{Semi}~\TERM{Ring}~\tacconstr~\tacconstr + ~\tacconstr~\tacconstr~\tacconstr~\tacconstr +\nlcont~~~~\tacconstr~\tacconstr~\tacconstr~\tacconstr~\tacconstr + ~\KWD{[}~\PLUS{tacconstr}~\KWD{]} +\SEPDEF +\DEFNT{minus-div} + \KWD{with}~\NT{minus-arg}~\NT{div-arg} +\nlsep \KWD{with}~\NT{div-arg}~\NT{minus-arg} +\SEPDEF +\DEFNT{minus-arg} + \TERM{minus}~\KWD{:=}~\tacconstr +\SEPDEF +\DEFNT{div-arg} + \TERM{div}~\KWD{:=}~\tacconstr +\end{rules} + +\begin{rules} +\EXTNT{command} + \TERM{Write}~\TERM{State}~\NT{ident} +\nlsep \TERM{Write}~\TERM{State}~\NT{string} +\nlsep \TERM{Restore}~\TERM{State}~\NT{ident} +\nlsep \TERM{Restore}~\TERM{State}~\NT{string} +\nlsep \TERM{Reset}~\NT{ident} +\nlsep \TERM{Reset}~\TERM{Initial} +\nlsep \TERM{Back}~\OPT{\NT{num}} +\end{rules} + +\subsection{Proof-editing commands} + +\begin{rules} +\EXTNT{command} + \TERM{Goal}~\NT{constr} +\nlsep \TERM{Proof}~\OPT{\NT{constr}} +\nlsep \TERM{Proof}~\KWD{with}~\NT{tactic} +\nlsep \TERM{Abort}~\OPT{\TERM{All}} +\nlsep \TERM{Abort}~\NT{ident} +\nlsep \TERM{Existential}~\NT{num}~\KWD{:=}~\NT{constr-body} +\nlsep \TERM{Qed} +\nlsep \TERM{Save}~\OPTGR{\NT{thm-token}~\NT{ident}} +\nlsep \TERM{Defined}~\OPT{\NT{ident}} +\nlsep \TERM{Suspend} +\nlsep \TERM{Resume}~\OPT{\NT{ident}} +\nlsep \TERM{Restart} +\nlsep \TERM{Undo}~\OPT{\NT{num}} +\nlsep \TERM{Focus}~\OPT{\NT{num}} +\nlsep \TERM{Unfocus} +\nlsep \TERM{Show}~\OPT{\NT{num}} +\nlsep \TERM{Show}~\TERM{Implicit}~\TERM{Arguments}~\OPT{\NT{num}} +\nlsep \TERM{Show}~\TERM{Node} +\nlsep \TERM{Show}~\TERM{Script} +\nlsep \TERM{Show}~\TERM{Existentials} +\nlsep \TERM{Show}~\TERM{Tree} +\nlsep \TERM{Show}~\TERM{Conjecture} +\nlsep \TERM{Show}~\TERM{Proof} +\nlsep \TERM{Show}~\TERM{Intro} +\nlsep \TERM{Show}~\TERM{Intros} +%% Correctness: obsolete ? +%%\nlsep \TERM{Show}~\TERM{Programs} +\nlsep \TERM{Explain}~\TERM{Proof}~\OPT{\TERM{Tree}}~\STAR{\NT{num}} +%% Go not documented +\nlsep \TERM{Hint}~\OPT{\TERM{Local}}~\NT{hint}~\OPT{\NT{inbases}} +%% PrintConstr not documented +\end{rules} + + +\begin{rules} +\DEFNT{constr-body} + \NT{type-cstr}~\KWD{:=}~\NT{constr} +\SEPDEF +\DEFNT{hint} + \TERM{Resolve}~\PLUS{\NTL{constr}{9}} +\nlsep \TERM{Immediate}~\PLUS{\NTL{constr}{9}} +\nlsep \TERM{Unfold}~\PLUS{\NT{reference}} +\nlsep \TERM{Constructors}~\PLUS{\NT{reference}} +\nlsep \TERM{Extern}~\NT{num}~\NT{constr}~\KWD{$\Rightarrow$}~\NT{tactic} +\nlsep \TERM{Destruct}~\NT{ident}~\KWD{:=}~\NT{num}~\NT{destruct-loc} + ~\NT{constr}~\KWD{$\Rightarrow$}~\NT{tactic} +\nlsep \TERM{Rewrite}~\NT{orient}~\PLUS{\NTL{constr}{9}} + ~\OPTGR{\KWD{using}~\NT{tactic}} +\SEPDEF +\DEFNT{inbases} + \KWD{:}~\PLUS{\NT{ident}} +\SEPDEF +\DEFNT{destruct-loc} + \TERM{Conclusion} +\nlsep \OPT{\TERM{Discardable}}~\TERM{Hypothesis} +\end{rules} + + +\subsection{Syntax extensions} + +\begin{rules} +\DEFNT{syntax} + \TERM{Open}~\TERM{Scope}~\NT{ident} +\nlsep \TERM{Close}~\TERM{Scope}~\NT{ident} +\nlsep \TERM{Delimit}~\TERM{Scope}~\NT{ident}~\KWD{with}~\NT{ident} +\nlsep \TERM{Bind}~\TERM{Scope}~\NT{ident}~\KWD{with}~\PLUS{\NT{class-rawexpr}} +\nlsep \TERM{Arguments}~\TERM{Scope}~\NT{reference} + ~\TERM{[}~\PLUS{\NT{name}}~\TERM{]} +\nlsep \TERM{Infix}~\OPT{\TERM{Local}} %%% ~\NT{prec}~\OPT{\NT{num}} + ~\NT{string}~\KWD{:=}~\NT{reference}~\OPT{\NT{modifiers}} + ~\OPT{\NT{in-scope}} +\nlsep \TERM{Notation}~\OPT{\TERM{Local}}~\NT{string}~\KWD{:=}~\NT{constr} + ~\OPT{\NT{modifiers}}~\OPT{\NT{in-scope}} +\nlsep \TERM{Notation}~\OPT{\TERM{Local}}~\NT{ident}~\KWD{:=}~\NT{constr} + ~\OPT{\KWD{(}\TERM{only~\TERM{parsing}\KWD{)}}} +\nlsep \TERM{Reserved}~\TERM{Notation}~\OPT{\TERM{Local}}~\NT{string} + ~\OPT{\NT{modifiers}} +\nlsep \TERM{Tactic}~\TERM{Notation}~\NT{string}~\STAR{\NT{tac-production}} + ~\KWD{:=}~\NT{tactic} +\SEPDEF +\DEFNT{modifiers} + \KWD{(}~\NT{mod-list}~\KWD{)} +\SEPDEF +\DEFNT{mod-list} + \NT{modifier} +\nlsep \NT{modifier}~\KWD{,}~\NT{mod-list} +\SEPDEF +\DEFNT{modifier} + \NT{ident}~\KWD{at}~\NT{num} +\nlsep \NT{ident}~\STARGR{\KWD{,}~\NT{ident}}~\KWD{at}~\NT{num} +\nlsep \KWD{at}~\TERM{next}~\TERM{level} +\nlsep \KWD{at}~\TERM{level}~\NT{num} +\nlsep \TERM{left}~\TERM{associativity} +\nlsep \TERM{right}~\TERM{associativity} +\nlsep \TERM{no}~\TERM{associativity} +\nlsep \NT{ident}~\NT{syntax-entry} +\nlsep \TERM{only}~\TERM{parsing} +\nlsep \TERM{format}~\NT{string} +\SEPDEF +\DEFNT{in-scope} + \KWD{:}~\NT{ident} +\SEPDEF +\DEFNT{syntax-entry} + \TERM{ident}~\mid~\TERM{global}~\mid~\TERM{bigint} +\SEPDEF +\DEFNT{tac-production} + \NT{string} +\nlsep \NT{ident}~\TERM{(}~\NT{ident}~\TERM{)} +%%% \SEPDEF +%%% \DEFNT{prec} +%%% \TERM{LeftA}~\mid~\TERM{RightA}~\mid~\TERM{NonA} +\end{rules} + +\end{document} -- cgit v1.2.3