summaryrefslogtreecommitdiff
path: root/dev/changements.txt
diff options
context:
space:
mode:
Diffstat (limited to 'dev/changements.txt')
-rw-r--r--dev/changements.txt455
1 files changed, 455 insertions, 0 deletions
diff --git a/dev/changements.txt b/dev/changements.txt
new file mode 100644
index 00000000..d1df2a81
--- /dev/null
+++ b/dev/changements.txt
@@ -0,0 +1,455 @@
+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 := ... <M>.t ... <N>.O.u ... X.T.b ... L.A.a
+
+ <M> and <N> 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<Datatypes#1>,[],"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 "<Datatypes#1>" |-> 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