From 5737c8a41782ee66e96f4e855b00e396a23e8479 Mon Sep 17 00:00:00 2001 From: Théo Zimmermann Date: Mon, 24 Oct 2016 17:39:06 +0200 Subject: Remove v62 from the refman. --- doc/refman/RefMan-tac.tex | 21 +++++---------------- 1 file changed, 5 insertions(+), 16 deletions(-) (limited to 'doc') diff --git a/doc/refman/RefMan-tac.tex b/doc/refman/RefMan-tac.tex index 2da12c8d69..0aabaf6a87 100644 --- a/doc/refman/RefMan-tac.tex +++ b/doc/refman/RefMan-tac.tex @@ -3493,8 +3493,7 @@ hints of the database named {\tt core}. \item {\tt auto with *} - Uses all existing hint databases, minus the special database - {\tt v62}. See Section~\ref{Hints-databases} + Uses all existing hint databases. See Section~\ref{Hints-databases} \item \texttt{auto using} \nterm{lemma}$_1$ {\tt ,} {\ldots} {\tt ,} \nterm{lemma}$_n$ @@ -3962,8 +3961,8 @@ Several hint databases are defined in the \Coq\ standard library. The actual content of a database is the collection of the hints declared to belong to this database in each of the various modules currently loaded. Especially, requiring new modules potentially extend a -database. At {\Coq} startup, only the {\tt core} and {\tt v62} -databases are non empty and can be used. +database. At {\Coq} startup, only the {\tt core} database is non empty +and can be used. \begin{description} @@ -3998,18 +3997,8 @@ databases are non empty and can be used. from the \texttt{Classes} directory. \end{description} -There is also a special database called {\tt v62}. It collects all -hints that were declared in the versions of {\Coq} prior to version -6.2.4 when the databases {\tt core}, {\tt arith}, and so on were -introduced. The purpose of the database {\tt v62} is to ensure -compatibility with further versions of {\Coq} for developments done in -versions prior to 6.2.4 ({\tt auto} being replaced by {\tt auto with v62}). -The database {\tt v62} is intended not to be extended (!). It is not -included in the hint databases list used in the {\tt auto with *} tactic. - -Furthermore, you are advised not to put your own hints in the -{\tt core} database, but use one or several databases specific to your -development. +You are advised not to put your own hints in the {\tt core} database, +but use one or several databases specific to your development. \subsection{\tt Remove Hints \term$_1$ \mbox{\dots} \term$_n$ :~ \ident$_1$ \mbox{\dots} \ident$_m$} -- cgit v1.2.3 From e807f3407fb19f481dac332e7650eddfa9b5fd5d Mon Sep 17 00:00:00 2001 From: Matthieu Sozeau Date: Fri, 14 Oct 2016 16:53:19 +0200 Subject: Documenting changes in typeclasses --- doc/refman/Classes.tex | 144 +++++++++++++++++++++++++++++++++++++++++++--- doc/refman/RefMan-tac.tex | 2 +- 2 files changed, 138 insertions(+), 8 deletions(-) (limited to 'doc') diff --git a/doc/refman/Classes.tex b/doc/refman/Classes.tex index e8ebb9f995..e90621f046 100644 --- a/doc/refman/Classes.tex +++ b/doc/refman/Classes.tex @@ -9,10 +9,6 @@ \aauthor{Matthieu Sozeau} \label{typeclasses} -\begin{flushleft} - \em The status of Type Classes is experimental. -\end{flushleft} - This chapter presents a quick reference of the commands related to type classes. For an actual introduction to type classes, there is a description of the system \cite{sozeau08} and the literature on type @@ -382,6 +378,55 @@ projections as instances. This is almost equivalent to {\tt Hint Resolve Declares variables according to the given binding context, which might use implicit generalization (see \ref{SectionContext}). +\asubsection{\tt typeclasses eauto} +\tacindex{typeclasseseauto} + +The {\tt typeclasses eauto} tactic uses a different resolution engine +than {\tt eauto} and {\tt auto}. The main differences are the following: +\begin{itemize} +\item Contrary to {\tt eauto} and {\tt auto}, the resolution is done + entirely in the new proof engine (as of Coq v8.6), meaning that + backtracking is available among dependent subgoals, and shelving goals + is supported. It analyses the dependencies between subgoals to avoid + backtracking on subgoals that are entirely independent. +\item When called with no arguments, {\tt typeclasses eauto} uses the + {\tt typeclass\_instances} database by default (instead of {\tt core}) + and will try to solve \emph{only} typeclass goals. Other subgoals are + automatically shelved and \emph{must be} resolved entirely when the + other typeclass subgoals are resolved. +\item The transparency information of databases is used consistently. + When considering the local hypotheses, we use the transparent + state of the first hint database given. Using an empty database + (created with {\tt Create HintDb} for example) with + unfoldable variables and constants as the first argument of + typeclasses eauto hence makes resolution with the local hypotheses use + full conversion during unification. +\end{itemize} + +\begin{Variants} +\item \label{depth} {\tt typeclasses eauto \zeroone{\num}} + \emph{Warning:} The semantics for the limit {\num} is different than + for {\tt auto}. By default, if no limit is given the search is + unbounded. Contrary to {\tt auto}, introduction steps ({\tt intro}) + are counted, which might result in larger limits being necessary + when searching with {\tt typeclasses eauto} than {\tt auto}. + +\item \label{with} {\tt typeclasses eauto with {\ident}$_1$ \ldots {\ident}$_n$}. + This variant runs resolution with the given hint databases. It does + not treat typeclass subgoals differently than others. +\end{Variants} + +\asubsection{\tt autoapply {\term} with {\ident}} +\tacindex{autoapply} + +The tactic {\tt autoapply} applies a term using the transparency +information of the hint database {\ident}, and does \emph{no} typeclass +resolution. This can be used in {\tt Hint Extern}'s for typeclasse +instances (in hint db {\tt typeclass\_instances}) to +allow backtracking on the typeclass subgoals created by the lemma +application, rather than doing type class resolution locally at the hint +application time. + \subsection{\tt Typeclasses Transparent, Opaque {\ident$_1$ \ldots \ident$_n$}} \comindex{Typeclasses Transparent} \comindex{Typeclasses Opaque} @@ -400,18 +445,103 @@ abbreviate a type, like {\tt relation A := A -> A -> Prop}. This is equivalent to {\tt Hint Transparent,Opaque} {\ident} {\tt: typeclass\_instances}. +\subsection{\tt Set Typeclasses Module Eta} +\optindex{Typeclasses Modulo Eta} + +This allows eta-conversion during unification of type-classes. + +\subsection{\tt Set Typeclasses Dependency Order} +\optindex{Typeclasses Dependency Order} + +This option (now on by default) respects the dependency order between +subgoals, meaning that subgoals which are depended on by other subgoals +come first, while the non-dependent subgoals were put before the +dependent ones previously (Coq v8.5 and below). This can result in quite +different performance behaviors of proof search. + +\subsection{\tt Set Typeclasses Legacy Resolution} +\optindex{Typeclasses Legacy Resolution} + +This option (off by default) uses the 8.5 implementation of resolution. +Use for compatibility purposes only (porting and debugging). + +\subsection{\tt Set Typeclasses Limit Intros} +\optindex{Typeclasses Limit Intros} + +This option (on by default in Coq 8.6 and below), controls the ability +to apply hints while avoiding eta-expansions in the proof term +generated. It does so by allowing hints that conclude in an product to +apply to a goal with a matching product directly, avoiding an +introduction. \emph{Warning:} can be expensive as it requires rebuilding +hint clauses dynamically, and does not benefit from the invertibility +status of the product introduction rule, resulting in more expensive +proof-search (i.e. more useless backtracking). + +\subsection{\tt Set Typeclasses Filtered Unification} +\optindex{Typeclasses Filtered Unification} + +This option, available since Coq 8.6, switches the hint application +procedure to a filter-then-unify strategy. To apply a hint, we first +check that it \emph{matches} syntactically the inferred pattern of the +hint, and only then try to \emph{unify} the goal with the conclusion of +the hint. This can drastically improve performance by calling +unification less often, matching syntactic patterns being very +quick. This also provides more control on the triggering of instances. +For example, forcing a constant to explicitely appear in the pattern +will make it never apply on a goal where there is a hole in that place. + +\subsection{\tt Set Typeclass Resolution After Apply} +\optindex{Typeclasses Resolution After Apply} +\emph{Deprecated since 8.6} + +This option (off by default in Coq 8.6 and 8.5) controls the resolution +of typeclass subgoals generated by the {\tt apply} tactic. + +\subsection{\tt Set Typeclass Resolution For Conversion} +\optindex{Typeclasses Resolution For Conversion} + +This option (on by default) controls the use of typeclass resolution +when a unification problem cannot be solved during +elaboration/type-inference. With this option on, when a unification +fails, typeclass resolution is tried before launching unification once again. + +\subsection{\tt Set Typeclasses Strict Resolution} +\optindex{Typeclasses Strict Resolution} + +Typeclass declarations introduced when this option is set have a +stricter resolution behavior (the option is off by default). When +looking for unifications of a goal with an instance of this class, we +``freeze'' all the existentials appearing in the goals, meaning that +they are considered rigid during unification and cannot be instantiated. + +\subsection{\tt Set Typeclasses Unique Solutions} +\optindex{Typeclasses Unique Solutions} + +When a typeclass resolution is launched we ensure that it has a single +solution or fail. This ensures that the resolution is canonical, but can +make proof search much more expensive. + +\subsection{\tt Set Typeclasses Unique Instances} +\optindex{Typeclasses Unique Instances} + +Typeclass declarations introduced when this option is set have a +more efficient resolution behavior (the option is off by default). When +a solution to the typeclass goal of this class is found, we never +backtrack on it, assuming that it is canonical. + \subsection{\tt Typeclasses eauto := [debug] [dfs | bfs] [\emph{depth}]} \comindex{Typeclasses eauto} \label{TypeclassesEauto} -This command allows customization of the type class resolution tactic, -based on a variant of eauto. The flags semantics are: +This command allows more global customization of the type class +resolution tactic. +The semantics of the options are: \begin{itemize} \item {\tt debug} In debug mode, the trace of successfully applied tactics is printed. \item {\tt dfs, bfs} This sets the search strategy to depth-first search (the default) or breadth-first search. -\item {\emph{depth}} This sets the depth of the search (the default is 100). +\item {\emph{depth}} This sets the depth limit of the search. \end{itemize} \subsection{\tt Set Refine Instance Mode} diff --git a/doc/refman/RefMan-tac.tex b/doc/refman/RefMan-tac.tex index dd45feebc6..c659e19e6b 100644 --- a/doc/refman/RefMan-tac.tex +++ b/doc/refman/RefMan-tac.tex @@ -3907,7 +3907,7 @@ Abort. \comindex{Hint Cut} \textit{Warning:} these hints currently only apply to typeclass proof search and - the \texttt{typeclasses eauto} tactic. + the \texttt{typeclasses eauto} tactic (\ref{typeclasseseauto}). This command can be used to cut the proof-search tree according to a regular expression matching paths to be cut. The grammar for regular -- cgit v1.2.3 From 6ec511721efc9235f6c2fa922a21dcb9b041bbfd Mon Sep 17 00:00:00 2001 From: Matthieu Sozeau Date: Thu, 3 Nov 2016 15:51:39 +0100 Subject: Document options of typeclasses (eauto) With update after J. Gross comments --- doc/refman/Classes.tex | 85 +++++++++++++++++++++++++++++++------------------- 1 file changed, 53 insertions(+), 32 deletions(-) (limited to 'doc') diff --git a/doc/refman/Classes.tex b/doc/refman/Classes.tex index e90621f046..144fc22b96 100644 --- a/doc/refman/Classes.tex +++ b/doc/refman/Classes.tex @@ -387,14 +387,16 @@ than {\tt eauto} and {\tt auto}. The main differences are the following: \item Contrary to {\tt eauto} and {\tt auto}, the resolution is done entirely in the new proof engine (as of Coq v8.6), meaning that backtracking is available among dependent subgoals, and shelving goals - is supported. It analyses the dependencies between subgoals to avoid + is supported. {\tt typeclasses eauto} is a multi-goal tactic. + It analyses the dependencies between subgoals to avoid backtracking on subgoals that are entirely independent. \item When called with no arguments, {\tt typeclasses eauto} uses the {\tt typeclass\_instances} database by default (instead of {\tt core}) and will try to solve \emph{only} typeclass goals. Other subgoals are automatically shelved and \emph{must be} resolved entirely when the - other typeclass subgoals are resolved. -\item The transparency information of databases is used consistently. + other typeclass subgoals are resolved or the proof search will fail. +\item The transparency information of databases is used consistently for + all hints declared in them. It is always used when calling the unifier. When considering the local hypotheses, we use the transparent state of the first hint database given. Using an empty database (created with {\tt Create HintDb} for example) with @@ -412,8 +414,9 @@ than {\tt eauto} and {\tt auto}. The main differences are the following: when searching with {\tt typeclasses eauto} than {\tt auto}. \item \label{with} {\tt typeclasses eauto with {\ident}$_1$ \ldots {\ident}$_n$}. - This variant runs resolution with the given hint databases. It does - not treat typeclass subgoals differently than others. + This variant runs resolution with the given hint databases. It treats + typeclass subgoals the same as other subgoals (no shelving of + non-typeclass goals in particular). \end{Variants} \asubsection{\tt autoapply {\term} with {\ident}} @@ -421,7 +424,7 @@ than {\tt eauto} and {\tt auto}. The main differences are the following: The tactic {\tt autoapply} applies a term using the transparency information of the hint database {\ident}, and does \emph{no} typeclass -resolution. This can be used in {\tt Hint Extern}'s for typeclasse +resolution. This can be used in {\tt Hint Extern}'s for typeclass instances (in hint db {\tt typeclass\_instances}) to allow backtracking on the typeclass subgoals created by the lemma application, rather than doing type class resolution locally at the hint @@ -445,50 +448,59 @@ abbreviate a type, like {\tt relation A := A -> A -> Prop}. This is equivalent to {\tt Hint Transparent,Opaque} {\ident} {\tt: typeclass\_instances}. -\subsection{\tt Set Typeclasses Module Eta} -\optindex{Typeclasses Modulo Eta} - -This allows eta-conversion during unification of type-classes. - \subsection{\tt Set Typeclasses Dependency Order} \optindex{Typeclasses Dependency Order} -This option (now on by default) respects the dependency order between +This option (on by default since 8.6) respects the dependency order between subgoals, meaning that subgoals which are depended on by other subgoals come first, while the non-dependent subgoals were put before the dependent ones previously (Coq v8.5 and below). This can result in quite different performance behaviors of proof search. +\subsection{\tt Set Typeclasses Filtered Unification} +\optindex{Typeclasses Filtered Unification} + +This option, available since Coq 8.6 and off by default, switches the +hint application procedure to a filter-then-unify strategy. To apply a +hint, we first check that the goal \emph{matches} syntactically the +inferred or specified pattern of the hint, and only then try to +\emph{unify} the goal with the conclusion of the hint. This can +drastically improve performance by calling unification less often, +matching syntactic patterns being very quick. This also provides more +control on the triggering of instances. For example, forcing a constant +to explicitely appear in the pattern will make it never apply on a goal +where there is a hole in that place. + \subsection{\tt Set Typeclasses Legacy Resolution} \optindex{Typeclasses Legacy Resolution} This option (off by default) uses the 8.5 implementation of resolution. Use for compatibility purposes only (porting and debugging). +\subsection{\tt Set Typeclasses Module Eta} +\optindex{Typeclasses Modulo Eta} + +This option allows eta-conversion for functions and records during +unification of type-classes. This option is now unsupported in 8.6 with +{\tt Typeclasses Filtered Unification} set, but still affects the +default unification strategy, and the one used in {\tt Legacy + Resolution} mode. It is \emph{unset} by default. If {\tt Typeclasses + Filtered Unification} is set, this has no effect and unification will +find solutions up-to eta conversion. Note however that syntactic +pattern-matching is not up-to eta. + \subsection{\tt Set Typeclasses Limit Intros} \optindex{Typeclasses Limit Intros} -This option (on by default in Coq 8.6 and below), controls the ability -to apply hints while avoiding eta-expansions in the proof term -generated. It does so by allowing hints that conclude in an product to +This option (on by default in Coq 8.6 and below) controls the ability to +apply hints while avoiding (functional) eta-expansions in the generated +proof term. It does so by allowing hints that conclude in a product to apply to a goal with a matching product directly, avoiding an -introduction. \emph{Warning:} can be expensive as it requires rebuilding -hint clauses dynamically, and does not benefit from the invertibility -status of the product introduction rule, resulting in more expensive -proof-search (i.e. more useless backtracking). - -\subsection{\tt Set Typeclasses Filtered Unification} -\optindex{Typeclasses Filtered Unification} - -This option, available since Coq 8.6, switches the hint application -procedure to a filter-then-unify strategy. To apply a hint, we first -check that it \emph{matches} syntactically the inferred pattern of the -hint, and only then try to \emph{unify} the goal with the conclusion of -the hint. This can drastically improve performance by calling -unification less often, matching syntactic patterns being very -quick. This also provides more control on the triggering of instances. -For example, forcing a constant to explicitely appear in the pattern -will make it never apply on a goal where there is a hole in that place. +introduction. \emph{Warning:} this can be expensive as it requires +rebuilding hint clauses dynamically, and does not benefit from the +invertibility status of the product introduction rule, resulting in +potentially more expensive proof-search (i.e. more useless +backtracking). \subsection{\tt Set Typeclass Resolution After Apply} \optindex{Typeclasses Resolution After Apply} @@ -544,6 +556,15 @@ The semantics of the options are: \item {\emph{depth}} This sets the depth limit of the search. \end{itemize} +\subsection{\tt Set Typeclasses Debug [Verbosity {\num}]} +\optindex{Typeclasses Debug} +\optindex{Typeclasses Debug Verbosity} + +These options allow to see the resolution steps of typeclasses that are +performed during search. The {\tt Debug} option is synonymous to +{\tt Debug Verbosity 1}, and {\tt Debug Verbosity 2} provides more +information (tried tactics, shelving of goals, etc\ldots). + \subsection{\tt Set Refine Instance Mode} \optindex{Refine Instance Mode} -- cgit v1.2.3 From d6fe6773c959493ed97108e1032b1bd8c1e78081 Mon Sep 17 00:00:00 2001 From: Matthieu Sozeau Date: Mon, 24 Oct 2016 18:18:33 +0200 Subject: Lets Hints/Instances take an optional pattern In addition to a priority, cleanup the interfaces for passing this information as well. The pattern, if given, takes priority over the inferred one. We only allow Existing Instances gr ... gr | pri. for now, without pattern, as before. Make the API compatible to 8.5 as well. --- doc/refman/Classes.tex | 2 +- doc/refman/RefMan-tac.tex | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) (limited to 'doc') diff --git a/doc/refman/Classes.tex b/doc/refman/Classes.tex index 144fc22b96..254fca28f7 100644 --- a/doc/refman/Classes.tex +++ b/doc/refman/Classes.tex @@ -379,7 +379,7 @@ Declares variables according to the given binding context, which might use implicit generalization (see \ref{SectionContext}). \asubsection{\tt typeclasses eauto} -\tacindex{typeclasseseauto} +\tacindex{typeclasses eauto} The {\tt typeclasses eauto} tactic uses a different resolution engine than {\tt eauto} and {\tt auto}. The main differences are the following: diff --git a/doc/refman/RefMan-tac.tex b/doc/refman/RefMan-tac.tex index c659e19e6b..0aa179d627 100644 --- a/doc/refman/RefMan-tac.tex +++ b/doc/refman/RefMan-tac.tex @@ -3718,12 +3718,14 @@ command to add a hint to some databases \ident$_1$, \dots, \ident$_n$ is The {\hintdef} is one of the following expressions: \begin{itemize} -\item {\tt Resolve \term} +\item {\tt Resolve \term {\zeroone{{\tt |} \zeroone{\num} \zeroone{\pattern}}}} \comindex{Hint Resolve} This command adds {\tt simple apply {\term}} to the hint list with the head symbol of the type of \term. The cost of that hint is - the number of subgoals generated by {\tt simple apply {\term}}. + the number of subgoals generated by {\tt simple apply {\term}} or \num + if specified. The associated pattern is inferred from the conclusion + of the type of \term or the given \pattern if specified. %{\tt auto} actually uses a slightly modified variant of {\tt simple apply} with use_metas_eagerly_in_conv_on_closed_terms set to false In case the inferred type of \term\ does not start with a product -- cgit v1.2.3 From 98305374e2fdec4b64d7d086ddca0c4e812b178e Mon Sep 17 00:00:00 2001 From: Matthieu Sozeau Date: Sat, 29 Oct 2016 11:51:38 +0200 Subject: typeclasses eauto Implem/doc of shelving strategy Now [typeclasses eauto] mimicks what happens during resolution faithfully, and the shelving behavior/requirements for a successful proof-search are documented. --- doc/refman/Classes.tex | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) (limited to 'doc') diff --git a/doc/refman/Classes.tex b/doc/refman/Classes.tex index 254fca28f7..d6a553e1a8 100644 --- a/doc/refman/Classes.tex +++ b/doc/refman/Classes.tex @@ -394,7 +394,18 @@ than {\tt eauto} and {\tt auto}. The main differences are the following: {\tt typeclass\_instances} database by default (instead of {\tt core}) and will try to solve \emph{only} typeclass goals. Other subgoals are automatically shelved and \emph{must be} resolved entirely when the - other typeclass subgoals are resolved or the proof search will fail. + other typeclass subgoals are resolved or the proof search will fail + \emph{globally}, \emph{without} the possibility to find another + complete solution with no shelved subgoals. + + \emph{Note: } As of Coq 8.6, {\tt all:once (typeclasses eauto)} + faithfully mimicks what happens during typeclass resolution when it is + called during refinement/type-inference. It might move to {\tt + all:typeclasses eauto} in future versions when the refinement engine + will be able to backtrack. +\item When called with specific databases (e.g. {\tt with}), {\tt + typeclasses eauto} allows shelved goals to remain at any point + during search and treat typeclasses goals like any other. \item The transparency information of databases is used consistently for all hints declared in them. It is always used when calling the unifier. When considering the local hypotheses, we use the transparent -- cgit v1.2.3 From f6916774eea2ecc1262377cb14c2d494a0486358 Mon Sep 17 00:00:00 2001 From: Matthieu Sozeau Date: Sat, 29 Oct 2016 19:07:21 +0200 Subject: Do not shelve non-class subgoals but fail, it should be the instance writer's responsibility to not generated non-dependent non-class subgoals (otherwise we loose compatibility as shown in e.g. MathClasses, which goes into loops because of unexpectedly unconstrained goals). Reflect it in the doc. --- doc/refman/Classes.tex | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) (limited to 'doc') diff --git a/doc/refman/Classes.tex b/doc/refman/Classes.tex index d6a553e1a8..58ae7191f8 100644 --- a/doc/refman/Classes.tex +++ b/doc/refman/Classes.tex @@ -392,11 +392,13 @@ than {\tt eauto} and {\tt auto}. The main differences are the following: backtracking on subgoals that are entirely independent. \item When called with no arguments, {\tt typeclasses eauto} uses the {\tt typeclass\_instances} database by default (instead of {\tt core}) - and will try to solve \emph{only} typeclass goals. Other subgoals are - automatically shelved and \emph{must be} resolved entirely when the - other typeclass subgoals are resolved or the proof search will fail - \emph{globally}, \emph{without} the possibility to find another - complete solution with no shelved subgoals. + and will try to solve \emph{only} typeclass goals. If some subgoal of + a hint/instance is non-dependent and not of class type, that hint + application will fail. Dependent subgoals are automatically shelved + and \emph{must be} resolved entirely when the other typeclass subgoals + are resolved or the proof search will fail \emph{globally}, + \emph{without} the possibility to find another complete solution with + no shelved subgoals. \emph{Note: } As of Coq 8.6, {\tt all:once (typeclasses eauto)} faithfully mimicks what happens during typeclass resolution when it is -- cgit v1.2.3 From 5939d426ac785ec063e66a302f3692b645993c56 Mon Sep 17 00:00:00 2001 From: Cyprien Mangin Date: Wed, 28 Sep 2016 16:56:22 +0200 Subject: Add documentation for [Set Warnings] and the -w option. --- doc/refman/RefMan-com.tex | 6 ++++++ doc/refman/RefMan-oth.tex | 13 +++++++++++++ 2 files changed, 19 insertions(+) (limited to 'doc') diff --git a/doc/refman/RefMan-com.tex b/doc/refman/RefMan-com.tex index 6f85849888..c1e552a5da 100644 --- a/doc/refman/RefMan-com.tex +++ b/doc/refman/RefMan-com.tex @@ -199,6 +199,12 @@ The following command-line options are recognized by the commands {\tt available for {\tt coqc} only; it is the counterpart of {\tt -compile-verbose}. + \item[{\tt -w} (all|none|w$_1$,\ldots,w$_n$)]\ % + + Configure the display of warnings. This option expects {\tt all}, {\tt none} + or a comma-separated list of warning names or categories (see + Section~\ref{SetWarnings}). + %Mostly unused in the code %\item[{\tt -debug}]\ % % diff --git a/doc/refman/RefMan-oth.tex b/doc/refman/RefMan-oth.tex index 919e7b5cdc..3a9db5ead2 100644 --- a/doc/refman/RefMan-oth.tex +++ b/doc/refman/RefMan-oth.tex @@ -914,6 +914,19 @@ This command turns off the normal displaying. \subsection[\tt Unset Silent.]{\tt Unset Silent.\optindex{Silent}} This command turns the normal display on. +\subsection[\tt Set Warnings (\nterm{all}|\nterm{none}|\nterm{w}$_1$,\ldots,% + \nterm{w}$_n$).]{{\tt Set Warnings (\nterm{all}|\nterm{none}|\nterm{w}$_1$,\ldots,% + \nterm{w}$_n$)}.\optindex{Warnings}} +\label{SetWarnings} +This command configures the display of warnings. It is experimental, and expects +\texttt{all}, \texttt{none} or a comma-separated list of warning names or +categories. Adding~\texttt{-} in front of a warning disables it, +adding~\texttt{+} makes it an error. It is possible to use the special categories +\texttt{all} and \texttt{default}, the latter containing the warnings enabled by +default. The flags are interpreted from left to right, so in case of an overlap, +the flags on the right have higher priority, meaning that \texttt{A,-A} is +equivalent to \texttt{-A}. + \subsection[\tt Set Search Output Name Only.]{\tt Set Search Output Name Only.\optindex{Search Output Name Only} \label{Search-Output-Name-Only} \index{Search Output Name Only mode}} -- cgit v1.2.3 From 29ff821da57e35d37b41be34febb275306c4809f Mon Sep 17 00:00:00 2001 From: Matthieu Sozeau Date: Sat, 5 Nov 2016 11:33:42 +0100 Subject: Minor fix in documentation --- doc/refman/RefMan-tac.tex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'doc') diff --git a/doc/refman/RefMan-tac.tex b/doc/refman/RefMan-tac.tex index 656ae57b95..54393e46f6 100644 --- a/doc/refman/RefMan-tac.tex +++ b/doc/refman/RefMan-tac.tex @@ -1278,7 +1278,7 @@ in the list of subgoals remaining to prove. In particular, \texttt{pose proof {\term} as {\ident}} behaves as \texttt{assert ({\ident} := {\term})} and \texttt{pose proof {\term} - as {\intropattern}\tacindex{pose proof}} is the same as applying + as {\intropattern}} is the same as applying the {\intropattern} to {\term}. \item \texttt{enough ({\ident} :\ {\form})}\tacindex{enough} -- cgit v1.2.3 From d6edca2f025574fd84ef7e37a178c42674ff5840 Mon Sep 17 00:00:00 2001 From: Matthieu Sozeau Date: Sat, 5 Nov 2016 11:34:10 +0100 Subject: Credits for 8.6 --- doc/refman/RefMan-pre.tex | 129 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 129 insertions(+) (limited to 'doc') diff --git a/doc/refman/RefMan-pre.tex b/doc/refman/RefMan-pre.tex index cb2ab5dc2f..c7a3c7415a 100644 --- a/doc/refman/RefMan-pre.tex +++ b/doc/refman/RefMan-pre.tex @@ -1087,6 +1087,135 @@ Paris, January 2015, revised December 2015,\\ Hugo Herbelin, Matthieu Sozeau and the {\Coq} development team\\ \end{flushright} +\section*{Credits: version 8.6 (Stronger, Better, Faster Rooster)} + +{\Coq} version 8.6 contains the result of refinements, stabilization of +8.5's features and cleanups of the internals of the system. Over the +year of (now time-based) development, about 450 bugs were resolved and +over 100 contributions integrated. The main user visible changes are: +\begin{itemize} +\item A new, state-of-the-art universe constraint checker that + can outperform the previous version by an order of magnitude, by + Jacques-Henri Jourdan. +\item In CoqIDE and other asynchronous interfaces, more fine-grained + asynchronous processing and error reporting by Enrico Tassi. +\item More access to the proof engine features from Ltac: goal + management primitives, range selectors and a {\tt typeclasses + eauto} engine handling multiple goals and multiple successes, by + Cyprien Mangin, Matthieu Sozeau and Arnaud Spiwack. +\item Tactic behavior uniformization and specification, generalization + of intro-patterns by Hugo Herbelin and others. +\item Update of the beautifier by Hugo Herbelin, useful for switching + between versions. +\item A brand new warning system allowing to control warnings, turn them + into errors or ignore them selectively by Maxime Dénès, Guillaume + Melquiond and others. +\item Irrefutable patterns in abstractions, by Daniel de Rauglaudre. +\item Integration of {\tt ssreflect}'s subterm selection algorithm by + Enrico Tassi. +\item Integration of {\tt LtacProf}, a profiler for {\tt Ltac} by Tobias + Tebbi, Jason Gross and Paul Steckler. +\end{itemize} + +{\Coq} 8.6 also comes with a bunch of smaller-scale changes and +improvements regarding the different components of the system. We shall +only list a few of them. + +The {\tt iota} reduction flag is now a shorthand for {\tt match}, {\tt + fix} and {\tt cofix} flags controlling the corresponding reduction +rules (by Hugo Herbelin and Maxime Dénès). + +Maxime Dénès maintained the native compilation machinery. + +Pierre-Marie Pédrot separated the Ltac code from general purpose +tactics, and generalized and rationalized the handling of generic +arguments, allowing to create new versions of Ltac more easily in the +future. + +Many tactics have now more uniform behavior w.r.t. intro-patterns thanks +to Hugo Herbelin who also improved the basic tactics here and there. + +In patterns and terms, {\tt @}, abbreviations and notations are now +interpreted the same way, by Hugo Herbelin. + +Name handling for universes has been improved by Pierre-Marie Pédrot and +Matthieu Sozeau. The minimization algorithm has been improved by +Matthieu Sozeau. + +The unifier has been improved by Hugo Herbelin and Matthieu Sozeau, +fixing some incompatibilities introduced in Coq 8.5. Unification +constraints can now be left floating around and be seen by the user +thanks to a new option. The {\tt Keyed Unification} mode has been +improved by Matthieu Sozeau. + +The typeclass resolution engine and associated proof-search tactic have +been reimplemented on top of the proof-engine monad, providing better +integration in tactics, and new options have been introduced to control +it, by Matthieu Sozeau with help from Théo Zimmermann. + +The efficiency of the whole system has been significantly improved +thanks to contributions from Pierre-Marie Pédrot, Maxime Dénès and +Matthieu Sozeau and performance issue tracking by Jason Gross and Paul +Steckler. + +Standard library improvements by Jason Gross, Sébastien Hinderer, Pierre +Letouzey and others. + +Emilio Jesús Gallego Arias contributed many cleanups and refactorings of +the pretty-printing and user interface communication components. + +Frédéric Besson maintained the micromega tactic. + +The OPAM repository for {\Coq} packages has been maintained by Guillaume +Claret, Guillaume Melquiond, Matthieu Sozeau, Enrico Tassi and others. A +list of packages is now available at \url{https://coq.inria.fr/opam/www/}. + +Packaging tools were provided by Michael Soegtrop and Enrico Tassi +(Windows), Maxime Dénès and Matthieu Sozeau (MacOS X). Packages are now +regularly built on the continuous integration server. + +Matej Košík maintained and greatly improved the continuous integration +setup and the testing of {\Coq} contributions. He also contributed many +API improvement and code cleanups throughout the system. + +Many power users helped to improve the design of the new features via +the bug tracker, the pull request system, the {\Coq} development mailing +list or the coq-club mailing list. Special thanks to the users who +contributed patches and intensive brain-storming and code reviews, +starting with Cyril Cohen, Jason Gross, Robbert Krebbers, Jonathan +Leivent, Xavier Leroy, Gregory Malecha, Clément Pit-Claudel, Gabriel +Sherer and Beta Ziliani. It would however be impossible to mention with +precision all the names of people who to some extent influenced the +development. + +Version 8.6 is the first release of {\Coq} developed on a time-based +development cycle. Its development spanned 10 months from the release of +{\Coq} 8.5 and was based on a public roadmap. To date, it contains more +external contributions than any previous {\Coq} system. Code reviews +were systematically done before integration of new features, with an +important focus given to compatibility and performance issues, resulting +in a much more robust release than previous ones. + +General maintenance during part or whole of this period has been done by +Pierre Boutillier, Pierre Courtieu, Maxime Dénès, Hugo Herbelin, Pierre +Letouzey, Guillaume Melquiond, Pierre-Marie Pédrot, Matthieu Sozeau, +Arnaud Spiwack, Enrico Tassi as well as Bruno Barras, Yves Bertot, +Frédéric Besson, Assia Mahboubi, Yann Régis-Gianas. The development +process was coordinated by Matthieu Sozeau with the help of Maxime +Dénès, who was also in charge of the release process. + +Coq Enhancement Proposals (CEPs for short) were introduced by Enrico +Tassi to provide more visibility and a discussion period on new +features, they are publicly available \url{https://github.com/coq/ceps}. + +Started during this period, an effort is led by Yves Bertot and Maxime +Dénès to put together a {\Coq} consortium. + +\begin{flushright} +Paris, November 2016,\\ +Matthieu Sozeau and the {\Coq} development team\\ +\end{flushright} + %new Makefile -- cgit v1.2.3 From 25fc9919c6d86fa8119b1f0c8e5ddba156055c9d Mon Sep 17 00:00:00 2001 From: Matthieu Sozeau Date: Sun, 6 Nov 2016 08:54:37 +0100 Subject: Fixes from Enrico's review --- doc/refman/RefMan-pre.tex | 29 +++++++++++++++-------------- 1 file changed, 15 insertions(+), 14 deletions(-) (limited to 'doc') diff --git a/doc/refman/RefMan-pre.tex b/doc/refman/RefMan-pre.tex index c7a3c7415a..669ba11e81 100644 --- a/doc/refman/RefMan-pre.tex +++ b/doc/refman/RefMan-pre.tex @@ -1113,8 +1113,8 @@ over 100 contributions integrated. The main user visible changes are: \item Irrefutable patterns in abstractions, by Daniel de Rauglaudre. \item Integration of {\tt ssreflect}'s subterm selection algorithm by Enrico Tassi. -\item Integration of {\tt LtacProf}, a profiler for {\tt Ltac} by Tobias - Tebbi, Jason Gross and Paul Steckler. +\item Integration of {\tt LtacProf}, a profiler for {\tt Ltac} by Jason + Gross, Paul Steckler, Enrico Tassi and Tobias Tebbi. \end{itemize} {\Coq} 8.6 also comes with a bunch of smaller-scale changes and @@ -1170,14 +1170,23 @@ The OPAM repository for {\Coq} packages has been maintained by Guillaume Claret, Guillaume Melquiond, Matthieu Sozeau, Enrico Tassi and others. A list of packages is now available at \url{https://coq.inria.fr/opam/www/}. -Packaging tools were provided by Michael Soegtrop and Enrico Tassi -(Windows), Maxime Dénès and Matthieu Sozeau (MacOS X). Packages are now -regularly built on the continuous integration server. +Packaging tools and software development kits were prepared by Maxime +Dénès, Michael Soegtrop and Enrico Tassi for Windows, and Maxime Dénès +and Matthieu Sozeau for MacOS X. Packages are now regularly built on the +continuous integration server. Matej Košík maintained and greatly improved the continuous integration setup and the testing of {\Coq} contributions. He also contributed many API improvement and code cleanups throughout the system. +General maintenance during part or whole of this period has been done by +Pierre Boutillier, Pierre Courtieu, Maxime Dénès, Hugo Herbelin, Pierre +Letouzey, Guillaume Melquiond, Pierre-Marie Pédrot, Matthieu Sozeau, +Arnaud Spiwack, Enrico Tassi, Bruno Barras, Yves Bertot, +Frédéric Besson, Assia Mahboubi and Yann Régis-Gianas. The development +process was coordinated by Matthieu Sozeau with the help of Maxime +Dénès, who was also in charge of the release process. + Many power users helped to improve the design of the new features via the bug tracker, the pull request system, the {\Coq} development mailing list or the coq-club mailing list. Special thanks to the users who @@ -1194,15 +1203,7 @@ development cycle. Its development spanned 10 months from the release of external contributions than any previous {\Coq} system. Code reviews were systematically done before integration of new features, with an important focus given to compatibility and performance issues, resulting -in a much more robust release than previous ones. - -General maintenance during part or whole of this period has been done by -Pierre Boutillier, Pierre Courtieu, Maxime Dénès, Hugo Herbelin, Pierre -Letouzey, Guillaume Melquiond, Pierre-Marie Pédrot, Matthieu Sozeau, -Arnaud Spiwack, Enrico Tassi as well as Bruno Barras, Yves Bertot, -Frédéric Besson, Assia Mahboubi, Yann Régis-Gianas. The development -process was coordinated by Matthieu Sozeau with the help of Maxime -Dénès, who was also in charge of the release process. +in a hopefully much more robust release than previous ones. Coq Enhancement Proposals (CEPs for short) were introduced by Enrico Tassi to provide more visibility and a discussion period on new -- cgit v1.2.3 From ceaafcde70e0ba536cae03baa740563aff47f6e8 Mon Sep 17 00:00:00 2001 From: Matthieu Sozeau Date: Sun, 6 Nov 2016 11:22:31 +0100 Subject: Maxime's comments --- doc/refman/RefMan-pre.tex | 36 ++++++++++++++++++++---------------- 1 file changed, 20 insertions(+), 16 deletions(-) (limited to 'doc') diff --git a/doc/refman/RefMan-pre.tex b/doc/refman/RefMan-pre.tex index 669ba11e81..944cd48481 100644 --- a/doc/refman/RefMan-pre.tex +++ b/doc/refman/RefMan-pre.tex @@ -1087,7 +1087,7 @@ Paris, January 2015, revised December 2015,\\ Hugo Herbelin, Matthieu Sozeau and the {\Coq} development team\\ \end{flushright} -\section*{Credits: version 8.6 (Stronger, Better, Faster Rooster)} +\section*{Credits: version 8.6} {\Coq} version 8.6 contains the result of refinements, stabilization of 8.5's features and cleanups of the internals of the system. Over the @@ -1098,7 +1098,8 @@ over 100 contributions integrated. The main user visible changes are: can outperform the previous version by an order of magnitude, by Jacques-Henri Jourdan. \item In CoqIDE and other asynchronous interfaces, more fine-grained - asynchronous processing and error reporting by Enrico Tassi. + asynchronous processing and error reporting by Enrico Tassi (ability + to jump to any error in the document). \item More access to the proof engine features from Ltac: goal management primitives, range selectors and a {\tt typeclasses eauto} engine handling multiple goals and multiple successes, by @@ -1170,22 +1171,25 @@ The OPAM repository for {\Coq} packages has been maintained by Guillaume Claret, Guillaume Melquiond, Matthieu Sozeau, Enrico Tassi and others. A list of packages is now available at \url{https://coq.inria.fr/opam/www/}. -Packaging tools and software development kits were prepared by Maxime -Dénès, Michael Soegtrop and Enrico Tassi for Windows, and Maxime Dénès -and Matthieu Sozeau for MacOS X. Packages are now regularly built on the -continuous integration server. +Packaging tools and software development kits were prepared by Michael +Soegtrop with the help of Maxime Dénès and Enrico Tassi for Windows, and +Maxime Dénès and Matthieu Sozeau for MacOS X. Packages are now regularly +built on the continuous integration server. Matej Košík maintained and greatly improved the continuous integration setup and the testing of {\Coq} contributions. He also contributed many API improvement and code cleanups throughout the system. -General maintenance during part or whole of this period has been done by -Pierre Boutillier, Pierre Courtieu, Maxime Dénès, Hugo Herbelin, Pierre -Letouzey, Guillaume Melquiond, Pierre-Marie Pédrot, Matthieu Sozeau, -Arnaud Spiwack, Enrico Tassi, Bruno Barras, Yves Bertot, -Frédéric Besson, Assia Mahboubi and Yann Régis-Gianas. The development -process was coordinated by Matthieu Sozeau with the help of Maxime -Dénès, who was also in charge of the release process. +The contributors for this version are C.J. Bell, Yves Bertot, Frédéric +Besson, Tej Chajed, Pierre Courtieu, Maxime Dénès, Ricky Elrod, Jason +Gross, Hugo Herbelin, Emilio Jesus Gallego Arias, Jacques-Henri Jourdan, +Matej Košík, Xavier Leroy, Pierre Letouzey, Gregory Malecha, Cyprien +Mangin, Erik Martin-Dorel, Guillaume Melquiond, Pierre-Marie Pédrot, +Lionel Rieg, Gabriel Scherer, Matthieu Sozeau, Arnaud Spiwack, Paul +Steckler, Laurent Théry, Enrico Tassi, Nickolai Zeldovich, Théo +Zimmermann and Daniel de Rauglaudre. The development process was +coordinated by Hugo Herbelin and Matthieu Sozeau with the help of +Maxime Dénès, who was also in charge of the release process. Many power users helped to improve the design of the new features via the bug tracker, the pull request system, the {\Coq} development mailing @@ -1193,8 +1197,8 @@ list or the coq-club mailing list. Special thanks to the users who contributed patches and intensive brain-storming and code reviews, starting with Cyril Cohen, Jason Gross, Robbert Krebbers, Jonathan Leivent, Xavier Leroy, Gregory Malecha, Clément Pit-Claudel, Gabriel -Sherer and Beta Ziliani. It would however be impossible to mention with -precision all the names of people who to some extent influenced the +Sherer and Beta Ziliani. It would however be impossible to mention +exhaustively the names of everybody who to some extent influenced the development. Version 8.6 is the first release of {\Coq} developed on a time-based @@ -1203,7 +1207,7 @@ development cycle. Its development spanned 10 months from the release of external contributions than any previous {\Coq} system. Code reviews were systematically done before integration of new features, with an important focus given to compatibility and performance issues, resulting -in a hopefully much more robust release than previous ones. +in a hopefully more robust release than {\Coq} 8.5. Coq Enhancement Proposals (CEPs for short) were introduced by Enrico Tassi to provide more visibility and a discussion period on new -- cgit v1.2.3 From bf8827788d1d8c0dc96b963d3c35985d8b3725c6 Mon Sep 17 00:00:00 2001 From: Matthieu Sozeau Date: Sun, 6 Nov 2016 11:48:06 +0100 Subject: Hugo's comments --- doc/refman/RefMan-pre.tex | 2 -- 1 file changed, 2 deletions(-) (limited to 'doc') diff --git a/doc/refman/RefMan-pre.tex b/doc/refman/RefMan-pre.tex index 944cd48481..6ba2f850ee 100644 --- a/doc/refman/RefMan-pre.tex +++ b/doc/refman/RefMan-pre.tex @@ -1106,8 +1106,6 @@ over 100 contributions integrated. The main user visible changes are: Cyprien Mangin, Matthieu Sozeau and Arnaud Spiwack. \item Tactic behavior uniformization and specification, generalization of intro-patterns by Hugo Herbelin and others. -\item Update of the beautifier by Hugo Herbelin, useful for switching - between versions. \item A brand new warning system allowing to control warnings, turn them into errors or ignore them selectively by Maxime Dénès, Guillaume Melquiond and others. -- cgit v1.2.3 From a96fed4624d8baaa4bec9bb63676eb1bcb389091 Mon Sep 17 00:00:00 2001 From: Matthieu Sozeau Date: Mon, 7 Nov 2016 09:36:30 +0100 Subject: Hugo and Maxime's 2nd pass of comments --- doc/refman/RefMan-pre.tex | 26 ++++++++++++-------------- 1 file changed, 12 insertions(+), 14 deletions(-) (limited to 'doc') diff --git a/doc/refman/RefMan-pre.tex b/doc/refman/RefMan-pre.tex index 6ba2f850ee..29ae51fea5 100644 --- a/doc/refman/RefMan-pre.tex +++ b/doc/refman/RefMan-pre.tex @@ -1108,7 +1108,7 @@ over 100 contributions integrated. The main user visible changes are: of intro-patterns by Hugo Herbelin and others. \item A brand new warning system allowing to control warnings, turn them into errors or ignore them selectively by Maxime Dénès, Guillaume - Melquiond and others. + Melquiond, Pierre-Marie Pédrot and others. \item Irrefutable patterns in abstractions, by Daniel de Rauglaudre. \item Integration of {\tt ssreflect}'s subterm selection algorithm by Enrico Tassi. @@ -1131,9 +1131,6 @@ tactics, and generalized and rationalized the handling of generic arguments, allowing to create new versions of Ltac more easily in the future. -Many tactics have now more uniform behavior w.r.t. intro-patterns thanks -to Hugo Herbelin who also improved the basic tactics here and there. - In patterns and terms, {\tt @}, abbreviations and notations are now interpreted the same way, by Hugo Herbelin. @@ -1179,15 +1176,16 @@ setup and the testing of {\Coq} contributions. He also contributed many API improvement and code cleanups throughout the system. The contributors for this version are C.J. Bell, Yves Bertot, Frédéric -Besson, Tej Chajed, Pierre Courtieu, Maxime Dénès, Ricky Elrod, Jason -Gross, Hugo Herbelin, Emilio Jesus Gallego Arias, Jacques-Henri Jourdan, -Matej Košík, Xavier Leroy, Pierre Letouzey, Gregory Malecha, Cyprien -Mangin, Erik Martin-Dorel, Guillaume Melquiond, Pierre-Marie Pédrot, -Lionel Rieg, Gabriel Scherer, Matthieu Sozeau, Arnaud Spiwack, Paul -Steckler, Laurent Théry, Enrico Tassi, Nickolai Zeldovich, Théo -Zimmermann and Daniel de Rauglaudre. The development process was -coordinated by Hugo Herbelin and Matthieu Sozeau with the help of -Maxime Dénès, who was also in charge of the release process. +Besson, Pierre Boutillier, Tej Chajed, Pierre Courtieu, Maxime Dénès, +Ricky Elrod, Jason Gross, Hugo Herbelin, Sébastien Hinderer, Emilio +Jesus Gallego Arias, Jacques-Henri Jourdan, Matej Košík, Xavier Leroy, +Pierre Letouzey, Gregory Malecha, Cyprien Mangin, Erik Martin-Dorel, +Guillaume Melquiond, Pierre-Marie Pédrot, Clément Pit-Claudel, Daniel de +Rauglaudre, Lionel Rieg, Gabriel Scherer, Matthieu Sozeau, Arnaud +Spiwack, Paul Steckler, Laurent Théry, Enrico Tassi, Nickolai Zeldovich +and Théo Zimmermann. The development process was coordinated by Hugo +Herbelin and Matthieu Sozeau with the help of Maxime Dénès, who was also +in charge of the release process. Many power users helped to improve the design of the new features via the bug tracker, the pull request system, the {\Coq} development mailing @@ -1195,7 +1193,7 @@ list or the coq-club mailing list. Special thanks to the users who contributed patches and intensive brain-storming and code reviews, starting with Cyril Cohen, Jason Gross, Robbert Krebbers, Jonathan Leivent, Xavier Leroy, Gregory Malecha, Clément Pit-Claudel, Gabriel -Sherer and Beta Ziliani. It would however be impossible to mention +Scherer and Beta Ziliani. It would however be impossible to mention exhaustively the names of everybody who to some extent influenced the development. -- cgit v1.2.3 From 1692b9e8245fbf485c40c9b6dd311f124978e987 Mon Sep 17 00:00:00 2001 From: Matthieu Sozeau Date: Mon, 7 Nov 2016 13:49:57 +0100 Subject: More accurate contributor list. Command used: git log v8.5..HEAD --pretty=format:"%an," | sort -k 2 | uniq with some manual postprocessing for login names, particles and multiple first names. --- doc/refman/RefMan-pre.tex | 23 ++++++++++++----------- 1 file changed, 12 insertions(+), 11 deletions(-) (limited to 'doc') diff --git a/doc/refman/RefMan-pre.tex b/doc/refman/RefMan-pre.tex index 29ae51fea5..4578bee120 100644 --- a/doc/refman/RefMan-pre.tex +++ b/doc/refman/RefMan-pre.tex @@ -1175,24 +1175,25 @@ Matej Košík maintained and greatly improved the continuous integration setup and the testing of {\Coq} contributions. He also contributed many API improvement and code cleanups throughout the system. -The contributors for this version are C.J. Bell, Yves Bertot, Frédéric -Besson, Pierre Boutillier, Tej Chajed, Pierre Courtieu, Maxime Dénès, -Ricky Elrod, Jason Gross, Hugo Herbelin, Sébastien Hinderer, Emilio -Jesus Gallego Arias, Jacques-Henri Jourdan, Matej Košík, Xavier Leroy, +The contributors for this version are Bruno Barras, C.J. Bell, Yves +Bertot, Frédéric Besson, Pierre Boutillier, Tej Chajed, Guillaume +Claret, Xavier Clerc, Pierre Corbineau, Pierre Courtieu, Maxime Dénès, +Ricky Elrod, Emilio Jesus Gallego Arias, Jason Gross, Hugo Herbelin, +Sébastien Hinderer, Jacques-Henri Jourdan, Matej Kosik, Xavier Leroy, Pierre Letouzey, Gregory Malecha, Cyprien Mangin, Erik Martin-Dorel, -Guillaume Melquiond, Pierre-Marie Pédrot, Clément Pit-Claudel, Daniel de -Rauglaudre, Lionel Rieg, Gabriel Scherer, Matthieu Sozeau, Arnaud -Spiwack, Paul Steckler, Laurent Théry, Enrico Tassi, Nickolai Zeldovich -and Théo Zimmermann. The development process was coordinated by Hugo -Herbelin and Matthieu Sozeau with the help of Maxime Dénès, who was also -in charge of the release process. +Guillaume Melquiond, Clément Pit--Claudel, Pierre-Marie Pédrot, Daniel +de Rauglaudre, Lionel Rieg, Gabriel Scherer, Thomas Sibut-Pinote, +Matthieu Sozeau, Arnaud Spiwack, Paul Steckler, Enrico Tassi, Laurent +Théry, Nickolai Zeldovich and Théo Zimmermann. The development process +was coordinated by Hugo Herbelin and Matthieu Sozeau with the help of +Maxime Dénès, who was also in charge of the release process. Many power users helped to improve the design of the new features via the bug tracker, the pull request system, the {\Coq} development mailing list or the coq-club mailing list. Special thanks to the users who contributed patches and intensive brain-storming and code reviews, starting with Cyril Cohen, Jason Gross, Robbert Krebbers, Jonathan -Leivent, Xavier Leroy, Gregory Malecha, Clément Pit-Claudel, Gabriel +Leivent, Xavier Leroy, Gregory Malecha, Clément Pit--Claudel, Gabriel Scherer and Beta Ziliani. It would however be impossible to mention exhaustively the names of everybody who to some extent influenced the development. -- cgit v1.2.3 From 25a60b1fcfa2f6017bedd986b1f90fe923d0f3ad Mon Sep 17 00:00:00 2001 From: Matthieu Sozeau Date: Mon, 7 Nov 2016 14:50:56 +0100 Subject: Document two new variants of refine They allow to call refine without doing typeclass resolution, allowing to use refine in typeclass hints. --- doc/refman/RefMan-tac.tex | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'doc') diff --git a/doc/refman/RefMan-tac.tex b/doc/refman/RefMan-tac.tex index 0aa179d627..695b0b883f 100644 --- a/doc/refman/RefMan-tac.tex +++ b/doc/refman/RefMan-tac.tex @@ -263,6 +263,16 @@ Defined. This tactic behaves like {\tt refine}, but it does not shelve any subgoal. It does not perform any beta-reduction either. +\item {\tt notypeclasses refine \term}\tacindex{notypeclasses refine} + + This tactic behaves like {\tt refine} except it performs typechecking + without resolution of typeclasses. + +\item {\tt simple notypeclasses refine \term}\tacindex{simple + notypeclasses refine} + + This tactic behaves like {\tt simple refine} except it performs typechecking + without resolution of typeclasses. \end{Variants} \subsection{\tt apply \term} -- cgit v1.2.3 From 3bc8d841148da0cf1db5b9b896f28c3285d4f5db Mon Sep 17 00:00:00 2001 From: Matthieu Sozeau Date: Mon, 7 Nov 2016 17:31:48 +0100 Subject: After Emilio's comment. --- doc/refman/RefMan-pre.tex | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'doc') diff --git a/doc/refman/RefMan-pre.tex b/doc/refman/RefMan-pre.tex index 4578bee120..8f75353bb3 100644 --- a/doc/refman/RefMan-pre.tex +++ b/doc/refman/RefMan-pre.tex @@ -1169,7 +1169,9 @@ list of packages is now available at \url{https://coq.inria.fr/opam/www/}. Packaging tools and software development kits were prepared by Michael Soegtrop with the help of Maxime Dénès and Enrico Tassi for Windows, and Maxime Dénès and Matthieu Sozeau for MacOS X. Packages are now regularly -built on the continuous integration server. +built on the continuous integration server. {\Coq} now comes with a {\tt + META} file usable with {\tt ocamlfind}, contributed by Emilio Jesús +Gallego Arias, Gregory Malecha, and Matthieu Sozeau. Matej Košík maintained and greatly improved the continuous integration setup and the testing of {\Coq} contributions. He also contributed many @@ -1178,7 +1180,7 @@ API improvement and code cleanups throughout the system. The contributors for this version are Bruno Barras, C.J. Bell, Yves Bertot, Frédéric Besson, Pierre Boutillier, Tej Chajed, Guillaume Claret, Xavier Clerc, Pierre Corbineau, Pierre Courtieu, Maxime Dénès, -Ricky Elrod, Emilio Jesus Gallego Arias, Jason Gross, Hugo Herbelin, +Ricky Elrod, Emilio Jesús Gallego Arias, Jason Gross, Hugo Herbelin, Sébastien Hinderer, Jacques-Henri Jourdan, Matej Kosik, Xavier Leroy, Pierre Letouzey, Gregory Malecha, Cyprien Mangin, Erik Martin-Dorel, Guillaume Melquiond, Clément Pit--Claudel, Pierre-Marie Pédrot, Daniel -- cgit v1.2.3 From cadb9e6614a1e72bf18f80acf0aabaeed4e9f057 Mon Sep 17 00:00:00 2001 From: Matthieu Sozeau Date: Tue, 8 Nov 2016 09:00:13 +0100 Subject: Rewording from Enrico --- doc/refman/RefMan-pre.tex | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'doc') diff --git a/doc/refman/RefMan-pre.tex b/doc/refman/RefMan-pre.tex index 8f75353bb3..4f4f404422 100644 --- a/doc/refman/RefMan-pre.tex +++ b/doc/refman/RefMan-pre.tex @@ -1098,8 +1098,9 @@ over 100 contributions integrated. The main user visible changes are: can outperform the previous version by an order of magnitude, by Jacques-Henri Jourdan. \item In CoqIDE and other asynchronous interfaces, more fine-grained - asynchronous processing and error reporting by Enrico Tassi (ability - to jump to any error in the document). + asynchronous processing and error reporting by Enrico Tassi. In + asynchronous mode {\Coq} is now capable of recovering from errors + and continue processing the document. \item More access to the proof engine features from Ltac: goal management primitives, range selectors and a {\tt typeclasses eauto} engine handling multiple goals and multiple successes, by -- cgit v1.2.3 From c60d155c2213461b8e4392b729445486086302d9 Mon Sep 17 00:00:00 2001 From: Maxime Dénès Date: Tue, 8 Nov 2016 09:36:42 +0100 Subject: Update documentation of Arguments after recent changes. --- doc/refman/RefMan-ext.tex | 12 ++++++------ doc/refman/RefMan-syn.tex | 14 +++++++------- 2 files changed, 13 insertions(+), 13 deletions(-) (limited to 'doc') diff --git a/doc/refman/RefMan-ext.tex b/doc/refman/RefMan-ext.tex index 51e881bff4..b475a5233c 100644 --- a/doc/refman/RefMan-ext.tex +++ b/doc/refman/RefMan-ext.tex @@ -1315,10 +1315,10 @@ command: \begin{quote} \tt Arguments {\qualid} \nelist{\possiblybracketedident}{} \end{quote} -where the list of {\possiblybracketedident} is the list of all arguments of -{\qualid} where the ones to be declared implicit are surrounded by -square brackets and the ones to be declared as maximally inserted implicits -are surrounded by curly braces. +where the list of {\possiblybracketedident} is a prefix of the list of arguments +of {\qualid} where the ones to be declared implicit are surrounded by square +brackets and the ones to be declared as maximally inserted implicits are +surrounded by curly braces. After the above declaration is issued, implicit arguments can just (and have to) be skipped in any expression involving an application of @@ -1591,7 +1591,7 @@ Implicit arguments names can be redefined using the following syntax: {\tt Arguments {\qualid} \nelist{\name}{} : rename} \end{quote} -Without the {\tt rename} flag, {\tt Arguments} can be used to assert +With the {\tt assert} flag, {\tt Arguments} can be used to assert that a given object has the expected number of arguments and that these arguments are named as expected. @@ -1600,7 +1600,7 @@ these arguments are named as expected. Arguments p [s t] _ [u] _: rename. Check (p r1 (u:=c)). Check (p (s:=a) (t:=b) r1 (u:=c) r2). -Fail Arguments p [s t] _ [w] _. +Fail Arguments p [s t] _ [w] _ : assert. \end{coq_example} diff --git a/doc/refman/RefMan-syn.tex b/doc/refman/RefMan-syn.tex index 92107b750b..1fcc1c0df4 100644 --- a/doc/refman/RefMan-syn.tex +++ b/doc/refman/RefMan-syn.tex @@ -811,13 +811,13 @@ constant have to be interpreted in a given scope. The command is \begin{quote} {\tt Arguments} {\qualid} \nelist{\name {\tt \%}\scope}{} \end{quote} -where the list is the list of the arguments of {\qualid} eventually -annotated with their {\scope}. Grouping round parentheses can -be used to decorate multiple arguments with the same scope. -{\scope} can be either a scope name or its delimiting key. For example -the following command puts the first two arguments of {\tt plus\_fct} -in the scope delimited by the key {\tt F} ({\tt Rfun\_scope}) and the -last argument in the scope delimited by the key {\tt R} ({\tt R\_scope}). +where the list is a prefix of the list of the arguments of {\qualid} eventually +annotated with their {\scope}. Grouping round parentheses can be used to +decorate multiple arguments with the same scope. {\scope} can be either a scope +name or its delimiting key. For example the following command puts the first two +arguments of {\tt plus\_fct} in the scope delimited by the key {\tt F} ({\tt + Rfun\_scope}) and the last argument in the scope delimited by the key {\tt R} +({\tt R\_scope}). \begin{coq_example*} Arguments plus_fct (f1 f2)%F x%R. -- cgit v1.2.3 From 034db0eae27c427a09092c337874c713474f50cb Mon Sep 17 00:00:00 2001 From: Maxime Dénès Date: Wed, 9 Nov 2016 14:15:12 +0100 Subject: Update CHANGES and credits for 8.6beta1. --- doc/refman/RefMan-pre.tex | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) (limited to 'doc') diff --git a/doc/refman/RefMan-pre.tex b/doc/refman/RefMan-pre.tex index 4f4f404422..f36969e821 100644 --- a/doc/refman/RefMan-pre.tex +++ b/doc/refman/RefMan-pre.tex @@ -1094,13 +1094,11 @@ Hugo Herbelin, Matthieu Sozeau and the {\Coq} development team\\ year of (now time-based) development, about 450 bugs were resolved and over 100 contributions integrated. The main user visible changes are: \begin{itemize} -\item A new, state-of-the-art universe constraint checker that - can outperform the previous version by an order of magnitude, by +\item A new, faster state-of-the-art universe constraint checker, by Jacques-Henri Jourdan. \item In CoqIDE and other asynchronous interfaces, more fine-grained - asynchronous processing and error reporting by Enrico Tassi. In - asynchronous mode {\Coq} is now capable of recovering from errors - and continue processing the document. + asynchronous processing and error reporting by Enrico Tassi, making {\Coq} + capable of recovering from errors and continue processing the document. \item More access to the proof engine features from Ltac: goal management primitives, range selectors and a {\tt typeclasses eauto} engine handling multiple goals and multiple successes, by @@ -1111,8 +1109,9 @@ over 100 contributions integrated. The main user visible changes are: into errors or ignore them selectively by Maxime Dénès, Guillaume Melquiond, Pierre-Marie Pédrot and others. \item Irrefutable patterns in abstractions, by Daniel de Rauglaudre. -\item Integration of {\tt ssreflect}'s subterm selection algorithm by - Enrico Tassi. +\item The {\tt ssreflect} subterm selection algorithm by Georges Gonthier and + Enrico Tassi is now accessible to tactic writers through the {\tt ssrmatching} + plugin. \item Integration of {\tt LtacProf}, a profiler for {\tt Ltac} by Jason Gross, Paul Steckler, Enrico Tassi and Tobias Tebbi. \end{itemize} -- cgit v1.2.3 From 30f222b1aad7ec483902b74dfa7dad7aefd5fca3 Mon Sep 17 00:00:00 2001 From: Maxime Dénès Date: Thu, 10 Nov 2016 13:24:28 +0100 Subject: Do not mention "none" in warnings doc, as it is there for compatibility. --- doc/refman/RefMan-oth.tex | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) (limited to 'doc') diff --git a/doc/refman/RefMan-oth.tex b/doc/refman/RefMan-oth.tex index 3a9db5ead2..56ce753cd6 100644 --- a/doc/refman/RefMan-oth.tex +++ b/doc/refman/RefMan-oth.tex @@ -914,18 +914,18 @@ This command turns off the normal displaying. \subsection[\tt Unset Silent.]{\tt Unset Silent.\optindex{Silent}} This command turns the normal display on. -\subsection[\tt Set Warnings (\nterm{all}|\nterm{none}|\nterm{w}$_1$,\ldots,% - \nterm{w}$_n$).]{{\tt Set Warnings (\nterm{all}|\nterm{none}|\nterm{w}$_1$,\ldots,% - \nterm{w}$_n$)}.\optindex{Warnings}} +\subsection[\tt Set Warnings ``(\nterm{w}$_1$,\ldots,% + \nterm{w}$_n$)''.]{{\tt Set Warnings ``(\nterm{w}$_1$,\ldots,% + \nterm{w}$_n$)''}.\optindex{Warnings}} \label{SetWarnings} -This command configures the display of warnings. It is experimental, and expects -\texttt{all}, \texttt{none} or a comma-separated list of warning names or -categories. Adding~\texttt{-} in front of a warning disables it, -adding~\texttt{+} makes it an error. It is possible to use the special categories -\texttt{all} and \texttt{default}, the latter containing the warnings enabled by -default. The flags are interpreted from left to right, so in case of an overlap, -the flags on the right have higher priority, meaning that \texttt{A,-A} is -equivalent to \texttt{-A}. +This command configures the display of warnings. It is experimental, and +expects, between quotes, a comma-separated list of warning names or +categories. Adding~\texttt{-} in front of a warning or category disables it, +adding~\texttt{+} makes it an error. It is possible to use the special +categories \texttt{all} and \texttt{default}, the latter containing the warnings +enabled by default. The flags are interpreted from left to right, so in case of +an overlap, the flags on the right have higher priority, meaning that +\texttt{A,-A} is equivalent to \texttt{-A}. \subsection[\tt Set Search Output Name Only.]{\tt Set Search Output Name Only.\optindex{Search Output Name Only} \label{Search-Output-Name-Only} -- cgit v1.2.3 From 4b8f19c58a2b6cc841db2c011d23aa8106211fd6 Mon Sep 17 00:00:00 2001 From: Matthieu Sozeau Date: Tue, 15 Nov 2016 13:53:57 +0100 Subject: Revert part of a477dc, disallow_shelved In only_classes mode we do not try to implement a stricter semantics for shelved goals in 8.6. Leaving this for 8.7. Update the documentation as well. Remove a spurious printf call as well. Fix test-suite now that shelved goals are allowed --- doc/refman/Classes.tex | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) (limited to 'doc') diff --git a/doc/refman/Classes.tex b/doc/refman/Classes.tex index 58ae7191f8..7c4bd4d201 100644 --- a/doc/refman/Classes.tex +++ b/doc/refman/Classes.tex @@ -392,13 +392,12 @@ than {\tt eauto} and {\tt auto}. The main differences are the following: backtracking on subgoals that are entirely independent. \item When called with no arguments, {\tt typeclasses eauto} uses the {\tt typeclass\_instances} database by default (instead of {\tt core}) - and will try to solve \emph{only} typeclass goals. If some subgoal of - a hint/instance is non-dependent and not of class type, that hint - application will fail. Dependent subgoals are automatically shelved - and \emph{must be} resolved entirely when the other typeclass subgoals - are resolved or the proof search will fail \emph{globally}, - \emph{without} the possibility to find another complete solution with - no shelved subgoals. + and will try to solve \emph{only} typeclass goals, shelving the other + goals. If some subgoal of a hint/instance is non-dependent and not of + class type, the hint application will fail when faced with that + subgoal. Dependent subgoals are automatically shelved, and shelved + goals can remain after resolution ends (following the behavior of + \Coq{} 8.5). \emph{Note: } As of Coq 8.6, {\tt all:once (typeclasses eauto)} faithfully mimicks what happens during typeclass resolution when it is -- cgit v1.2.3 From 09fd1e8b5e810bae0e50ecd4901cd7c8f1464f4a Mon Sep 17 00:00:00 2001 From: Matthieu Sozeau Date: Wed, 16 Nov 2016 10:45:25 +0100 Subject: Revert more of a477dc for good measure We stop failing automatically on non-declared-class nested or toplevel subgoals as in 8.5, instead of the previous a477dc behavior of shelving those goals and failing if shelved goals remained at the end of resolution. It means typeclass resolution during refinement is closer to all:typeclasses eauto. Hints in typeclass_instances for non-declared classes can be used during resolution of _nested_ subgoals when it is fired from type-inference, toplevel goals considered in this case are still only classes (as in 8.5 and before). The code that triggers the restriction to only declared class subgoals is commented. Revert changes to test-suite, adding test for #5203, #5198 is fixed too. Add corresponding tests in the test-suite (that will break if we, e.g. disallow non-class subgoals) and update the refman accordingly. --- doc/refman/Classes.tex | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) (limited to 'doc') diff --git a/doc/refman/Classes.tex b/doc/refman/Classes.tex index 7c4bd4d201..bd8ee450ef 100644 --- a/doc/refman/Classes.tex +++ b/doc/refman/Classes.tex @@ -391,19 +391,19 @@ than {\tt eauto} and {\tt auto}. The main differences are the following: It analyses the dependencies between subgoals to avoid backtracking on subgoals that are entirely independent. \item When called with no arguments, {\tt typeclasses eauto} uses the - {\tt typeclass\_instances} database by default (instead of {\tt core}) - and will try to solve \emph{only} typeclass goals, shelving the other - goals. If some subgoal of a hint/instance is non-dependent and not of - class type, the hint application will fail when faced with that - subgoal. Dependent subgoals are automatically shelved, and shelved + {\tt typeclass\_instances} database by default (instead of {\tt + core}). + Dependent subgoals are automatically shelved, and shelved goals can remain after resolution ends (following the behavior of \Coq{} 8.5). \emph{Note: } As of Coq 8.6, {\tt all:once (typeclasses eauto)} faithfully mimicks what happens during typeclass resolution when it is - called during refinement/type-inference. It might move to {\tt - all:typeclasses eauto} in future versions when the refinement engine - will be able to backtrack. + called during refinement/type-inference, except that \emph{only} + declared class subgoals are considered at the start of resolution + during type inference, while ``all'' can select non-class subgoals as + well. It might move to {\tt all:typeclasses eauto} in future versions + when the refinement engine will be able to backtrack. \item When called with specific databases (e.g. {\tt with}), {\tt typeclasses eauto} allows shelved goals to remain at any point during search and treat typeclasses goals like any other. -- cgit v1.2.3 From 253493355a71c0673b0c10b06e7eb9f0fd0242a9 Mon Sep 17 00:00:00 2001 From: Théo Zimmermann Date: Thu, 17 Nov 2016 16:01:29 +0100 Subject: Add missing label. Fixes broken ref. --- doc/refman/Classes.tex | 1 + 1 file changed, 1 insertion(+) (limited to 'doc') diff --git a/doc/refman/Classes.tex b/doc/refman/Classes.tex index bd8ee450ef..acfc4bea93 100644 --- a/doc/refman/Classes.tex +++ b/doc/refman/Classes.tex @@ -380,6 +380,7 @@ use implicit generalization (see \ref{SectionContext}). \asubsection{\tt typeclasses eauto} \tacindex{typeclasses eauto} +\label{typeclasseseauto} The {\tt typeclasses eauto} tactic uses a different resolution engine than {\tt eauto} and {\tt auto}. The main differences are the following: -- cgit v1.2.3 From a27ac0315dcbb99c64a260bac3988199a26b39cf Mon Sep 17 00:00:00 2001 From: Guillaume Melquiond Date: Thu, 24 Nov 2016 15:14:19 +0100 Subject: Fix some documentation typos. Note: "dependant" does exist, but it is a noun and it means a person that is somehow financially dependent on someone else. --- doc/faq/FAQ.tex | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'doc') diff --git a/doc/faq/FAQ.tex b/doc/faq/FAQ.tex index 48b61827d1..213fb03137 100644 --- a/doc/faq/FAQ.tex +++ b/doc/faq/FAQ.tex @@ -2587,8 +2587,8 @@ It is the language of commands of Gallina i.e. definitions, lemmas, {\ldots} \Question{What is a dependent type?} -A dependant type is a type which depends on some term. For instance -``vector of size n'' is a dependant type representing all the vectors +A dependent type is a type which depends on some term. For instance +``vector of size n'' is a dependent type representing all the vectors of size $n$. Its type depends on $n$ \Question{What is a proof by reflection?} -- cgit v1.2.3 From b6a70501e7ba46d556288abc5c3c81399a280e26 Mon Sep 17 00:00:00 2001 From: Maxime Dénès Date: Tue, 29 Nov 2016 16:29:24 +0100 Subject: Update copyright on documentation cover. --- doc/common/styles/html/coqremote/cover.html | 1 + doc/common/styles/html/simple/cover.html | 1 + 2 files changed, 2 insertions(+) (limited to 'doc') diff --git a/doc/common/styles/html/coqremote/cover.html b/doc/common/styles/html/coqremote/cover.html index 6ec4dc1af0..1c415eca69 100644 --- a/doc/common/styles/html/coqremote/cover.html +++ b/doc/common/styles/html/coqremote/cover.html @@ -61,6 +61,7 @@
  • V8.3 © INRIA 2010-2011
  • V8.4 © INRIA 2012-2014
  • V8.5 © INRIA 2015-2016
  • +
  • V8.6 © INRIA 2016
  • This research was partly supported by IST diff --git a/doc/common/styles/html/simple/cover.html b/doc/common/styles/html/simple/cover.html index 328bd68daf..25fb56320b 100644 --- a/doc/common/styles/html/simple/cover.html +++ b/doc/common/styles/html/simple/cover.html @@ -39,6 +39,7 @@

  • V8.3 © INRIA 2010-2011
  • V8.4 © INRIA 2012-2014
  • V8.5 © INRIA 2015-2016
  • +
  • V8.6 © INRIA 2016
  • This research was partly supported by IST -- cgit v1.2.3 From 08c6e4c3dbe2ae851ef3097cc44618ea82717974 Mon Sep 17 00:00:00 2001 From: Paul Steckler Date: Mon, 5 Dec 2016 17:26:55 -0500 Subject: the -byte option is deprecated --- doc/refman/RefMan-com.tex | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'doc') diff --git a/doc/refman/RefMan-com.tex b/doc/refman/RefMan-com.tex index c1e552a5da..784c9ccbbf 100644 --- a/doc/refman/RefMan-com.tex +++ b/doc/refman/RefMan-com.tex @@ -26,8 +26,8 @@ run by the command {\tt coqtop}. They are two different binary images of \Coq: the byte-code one and the native-code one (if {\ocaml} provides a native-code compiler for your platform, which is supposed in the following). By default, -\verb!coqc! executes the native-code version; this can be overridden -using the \verb!-byte! option. +\verb!coqtop! executes the native-code version; run \verb!coqtop.byte! to +get the byte-code version. The byte-code toplevel is based on an {\ocaml} toplevel (to allow the dynamic link of tactics). You can switch to -- cgit v1.2.3 From 2125949733b631426e955e722d6ca4e1b2eb5b60 Mon Sep 17 00:00:00 2001 From: Paul Steckler Date: Mon, 5 Dec 2016 17:55:15 -0500 Subject: Change module for Coq loop --- doc/refman/RefMan-com.tex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'doc') diff --git a/doc/refman/RefMan-com.tex b/doc/refman/RefMan-com.tex index 784c9ccbbf..bef0a1686f 100644 --- a/doc/refman/RefMan-com.tex +++ b/doc/refman/RefMan-com.tex @@ -32,7 +32,7 @@ get the byte-code version. The byte-code toplevel is based on an {\ocaml} toplevel (to allow the dynamic link of tactics). You can switch to the {\ocaml} toplevel with the command \verb!Drop.!, and come back to the -\Coq~toplevel with the command \verb!Toplevel.loop();;!. +\Coq~toplevel with the command \verb!Coqloop.loop();;!. \section{Batch compilation ({\tt coqc})} The {\tt coqc} command takes a name {\em file} as argument. Then it -- cgit v1.2.3 From 227ff6a46ad511ff2ab0ba1ffb9017bdb0291a58 Mon Sep 17 00:00:00 2001 From: Guillaume Melquiond Date: Tue, 6 Dec 2016 17:52:26 +0100 Subject: Update documentation (bugs #5246 and #5251). --- doc/refman/RefMan-gal.tex | 6 +++--- doc/refman/RefMan-tac.tex | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) (limited to 'doc') diff --git a/doc/refman/RefMan-gal.tex b/doc/refman/RefMan-gal.tex index 99eee44e03..3814e4403a 100644 --- a/doc/refman/RefMan-gal.tex +++ b/doc/refman/RefMan-gal.tex @@ -713,9 +713,9 @@ definition have a special syntax: ``{\tt let fix}~$f$~{\ldots}~{\tt {\tt Inductive} \nelist{\inductivebody}{with} {\tt .} \\ & $|$ & {\tt CoInductive} \nelist{\inductivebody}{with} {\tt .} \\ & & \\ -{\inductivebody} & ::= & - {\ident} \zeroone{\binders} {\tt :} {\term} {\tt :=} \\ - && ~~\zeroone{\zeroone{\tt |} \nelist{$\!${\ident}$\!$ \zeroone{\binders} {\typecstrwithoutblank}}{|}} \\ +{\inductivebody} & ::= & + {\ident} \zeroone{\binders} {\typecstr} {\tt :=} \\ + && ~~\zeroone{\zeroone{\tt |} \nelist{$\!${\ident}$\!$ \zeroone{\binders} {\typecstr}}{|}} \\ & & \\ %% TODO: where ... %% Fixpoints {\fixpoint} & ::= & {\tt Fixpoint} \nelist{\fixpointbody}{with} {\tt .} \\ diff --git a/doc/refman/RefMan-tac.tex b/doc/refman/RefMan-tac.tex index 01dc1dec9b..4b06520314 100644 --- a/doc/refman/RefMan-tac.tex +++ b/doc/refman/RefMan-tac.tex @@ -302,7 +302,7 @@ Section~\ref{pattern} to transform the goal so that it gets the form {\tt (fun $x$ => $Q$)~$u_1$~\ldots~$u_n$}. \begin{ErrMsgs} -\item \errindex{Impossible to unify \dots\ with \dots} +\item \errindex{Unable to unify \dots\ with \dots} The {\tt apply} tactic failed to match the conclusion of {\term} and the current goal. @@ -4621,7 +4621,7 @@ It is equivalent to {\tt apply refl\_equal}. \begin{ErrMsgs} \item \errindex{The conclusion is not a substitutive equation} -\item \errindex{Impossible to unify \dots\ with \dots} +\item \errindex{Unable to unify \dots\ with \dots} \end{ErrMsgs} \subsection{\tt symmetry} -- cgit v1.2.3 From 7af1b3e08452c3bbced6ca7eece2c91c6bf29137 Mon Sep 17 00:00:00 2001 From: Guillaume Melquiond Date: Tue, 6 Dec 2016 18:53:22 +0100 Subject: Fix broken documentation in presence of \zeroone{... \tt ...}. The way \zeroone was defined, the \tt modifier was leaked outside the brackets, thus messing with the following text. There are a bunch of occurrences of this issue in the manual, so rather than turning all the \tt into \texttt, the definition of \zeroone is made more robust. Unfortunately, there is one single occurrence of \zeroone that does not support the more robust version. (Note that this specific usage of \zeroone is morally a bug, since it goes against all the LaTeX conventions.) So the commit also keeps the old leaky version of \zeroone around as \zeroonelax so that it can be used there. --- doc/common/macros.tex | 3 ++- doc/refman/RefMan-tac.tex | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) (limited to 'doc') diff --git a/doc/common/macros.tex b/doc/common/macros.tex index df5ee405f9..5abdecfc18 100644 --- a/doc/common/macros.tex +++ b/doc/common/macros.tex @@ -72,7 +72,8 @@ %\newcommand{\spec}[1]{\{\,#1\,\}} % Building regular expressions -\newcommand{\zeroone}[1]{\mbox{\sl [}#1\mbox{\sl ]}} +\newcommand{\zeroone}[1]{\mbox{\sl [}{#1}\mbox{\sl ]}} +\newcommand{\zeroonelax}[1]{\mbox{\sl [}#1\mbox{\sl ]}} %\newcommand{\zeroonemany}[1]{$\{$#1$\}$*} %\newcommand{\onemany}[1]{$\{$#1$\}$+} \newcommand{\nelistnosep}[1]{{#1} \mbox{\dots} {#1}} diff --git a/doc/refman/RefMan-tac.tex b/doc/refman/RefMan-tac.tex index 4b06520314..3f12411863 100644 --- a/doc/refman/RefMan-tac.tex +++ b/doc/refman/RefMan-tac.tex @@ -114,7 +114,7 @@ following syntax: \begin{tabular}{lcl} {\occclause} & ::= & {\tt in} {\occgoalset} \\ {\occgoalset} & ::= & - \zeroone{{\ident$_1$} \zeroone{\atoccurrences} {\tt ,} \\ + \zeroonelax{{\ident$_1$} \zeroone{\atoccurrences} {\tt ,} \\ & & {\dots} {\tt ,}\\ & & {\ident$_m$} \zeroone{\atoccurrences}}\\ & & \zeroone{{\tt |-} \zeroone{{\tt *} \zeroone{\atoccurrences}}}\\ -- cgit v1.2.3 From 42f27beb63a629dcef514abb0b31dea193f35a38 Mon Sep 17 00:00:00 2001 From: Guillaume Melquiond Date: Fri, 16 Dec 2016 11:27:42 +0100 Subject: Fix incorrect documentation that prevents successful compilation (bug #5265). --- doc/refman/RefMan-syn.tex | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'doc') diff --git a/doc/refman/RefMan-syn.tex b/doc/refman/RefMan-syn.tex index 1fcc1c0df4..21c39de967 100644 --- a/doc/refman/RefMan-syn.tex +++ b/doc/refman/RefMan-syn.tex @@ -649,7 +649,7 @@ A recursive pattern for binders can be used in position of a recursive pattern for terms. Here is an example: \begin{coq_example*} -Notation ``'FUNAPP' x .. y , f'' := +Notation "'FUNAPP' x .. y , f" := (fun x => .. (fun y => (.. (f x) ..) y ) ..) (at level 200, x binder, y binder, right associativity). \end{coq_example*} -- cgit v1.2.3 From ac9b9415e884dc478b1776b8792c690f61efd5ed Mon Sep 17 00:00:00 2001 From: Guillaume Melquiond Date: Wed, 28 Dec 2016 16:57:35 +0100 Subject: Fix some typos in tutorial (bug #5294). This commit uses the proper url for bug reporting, marks urls as such, stops qualifying the Coq'Art book as new, and fix the spacing after the Coq name. --- doc/tutorial/Tutorial.tex | 61 ++++++++++++++++++++++++----------------------- 1 file changed, 31 insertions(+), 30 deletions(-) (limited to 'doc') diff --git a/doc/tutorial/Tutorial.tex b/doc/tutorial/Tutorial.tex index 973a0b75e0..0d537256bb 100644 --- a/doc/tutorial/Tutorial.tex +++ b/doc/tutorial/Tutorial.tex @@ -3,6 +3,7 @@ \usepackage[utf8]{inputenc} \usepackage{textcomp} \usepackage{pslatex} +\usepackage{hyperref} \input{../common/version.tex} \input{../common/macros.tex} @@ -17,7 +18,7 @@ \chapter*{Getting started} -\Coq\ is a Proof Assistant for a Logical Framework known as the Calculus +\Coq{} is a Proof Assistant for a Logical Framework known as the Calculus of Inductive Constructions. It allows the interactive construction of formal proofs, and also the manipulation of functional programs consistently with their specifications. It runs as a computer program @@ -29,7 +30,7 @@ possibilities of \Coq, but rather to present in the most elementary manner a tutorial on the basic specification language, called Gallina, in which formal axiomatisations may be developed, and on the main proof tools. For more advanced information, the reader could refer to -the \Coq{} Reference Manual or the \textit{Coq'Art}, a new book by Y. +the \Coq{} Reference Manual or the \textit{Coq'Art}, a book by Y. Bertot and P. Castéran on practical uses of the \Coq{} system. Coq can be used from a standard teletype-like shell window but @@ -39,9 +40,9 @@ and Pcoq.}. Instructions on installation procedures, as well as more comprehensive documentation, may be found in the standard distribution of \Coq, -which may be obtained from \Coq{} web site \texttt{http://coq.inria.fr}. +which may be obtained from \Coq{} web site \url{https://coq.inria.fr/}. -In the following, we assume that \Coq~ is called from a standard +In the following, we assume that \Coq{} is called from a standard teletype-like shell window. All examples preceded by the prompting sequence \verb:Coq < : represent user input, terminated by a period. @@ -51,10 +52,10 @@ users screen. When used from a graphical user interface such as CoqIde, the prompt is not displayed: user input is given in one window and \Coq's answers are displayed in a different window. -The sequence of such examples is a valid \Coq~ +The sequence of such examples is a valid \Coq{} session, unless otherwise specified. This version of the tutorial has been prepared on a PC workstation running Linux. The standard -invocation of \Coq\ delivers a message such as: +invocation of \Coq{} delivers a message such as: \begin{small} \begin{flushleft} @@ -67,17 +68,17 @@ Coq < \end{flushleft} \end{small} -The first line gives a banner stating the precise version of \Coq~ +The first line gives a banner stating the precise version of \Coq{} used. You should always return this banner when you report an anomaly to our bug-tracking system -\verb|http://logical.futurs.inria.fr/coq-bugs| +\url{https://coq.inria.fr/bugs/}. \chapter{Basic Predicate Calculus} \section{An overview of the specification language Gallina} A formal development in Gallina consists in a sequence of {\sl declarations} -and {\sl definitions}. You may also send \Coq~ {\sl commands} which are +and {\sl definitions}. You may also send \Coq{} {\sl commands} which are not really part of the formal development, but correspond to information requests, or service routine invocations. For instance, the command: \begin{verbatim} @@ -106,7 +107,7 @@ of the system, called respectively \verb:Prop:, \verb:Set:, and Every valid expression $e$ in Gallina is associated with a specification, itself a valid expression, called its {\sl type} $\tau(E)$. We write $e:\tau(E)$ for the judgment that $e$ is of type $E$. -You may request \Coq~ to return to you the type of a valid expression by using +You may request \Coq{} to return to you the type of a valid expression by using the command \verb:Check:: \begin{coq_eval} @@ -130,7 +131,7 @@ Check nat. The specification \verb:Set: is an abstract type, one of the basic sorts of the Gallina language, whereas the notions $nat$ and $O$ are notions which are defined in the arithmetic prelude, -automatically loaded when running the \Coq\ system. +automatically loaded when running the \Coq{} system. We start by introducing a so-called section name. The role of sections is to structure the modelisation by limiting the scope of parameters, @@ -206,7 +207,7 @@ We may optionally indicate the required type: Definition two : nat := S one. \end{coq_example} -Actually \Coq~ allows several possible syntaxes: +Actually \Coq{} allows several possible syntaxes: \begin{coq_example} Definition three := S two : nat. \end{coq_example} @@ -249,7 +250,7 @@ explicitly the type of the quantified variable. We check: Check (forall m:nat, gt m 0). \end{coq_example} We may revert to the clean state of -our initial session using the \Coq~ \verb:Reset: command: +our initial session using the \Coq{} \verb:Reset: command: \begin{coq_example} Reset Initial. \end{coq_example} @@ -340,7 +341,7 @@ assumption. \end{coq_example} The proof is now finished. We may either discard it, by using the -command \verb:Abort: which returns to the standard \Coq~ toplevel loop +command \verb:Abort: which returns to the standard \Coq{} toplevel loop without further ado, or else save it as a lemma in the current context, under name say \verb:trivial_lemma:: \begin{coq_example} @@ -414,7 +415,7 @@ backtrack one step, and more generally \verb:Undo n: to backtrack n steps. We end this section by showing a useful command, \verb:Inspect n.:, -which inspects the global \Coq~ environment, showing the last \verb:n: declared +which inspects the global \Coq{} environment, showing the last \verb:n: declared notions: \begin{coq_example} Inspect 3. @@ -429,7 +430,7 @@ their value (or proof-term) is omitted. \subsection{Conjunction} We have seen how \verb:intro: and \verb:apply: tactics could be combined -in order to prove implicational statements. More generally, \Coq~ favors a style +in order to prove implicational statements. More generally, \Coq{} favors a style of reasoning, called {\sl Natural Deduction}, which decomposes reasoning into so called {\sl introduction rules}, which tell how to prove a goal whose main operator is a given propositional connective, and {\sl elimination rules}, @@ -528,7 +529,7 @@ such a simple tautology. The reason is that we want to keep \subsection{Tauto} A complete tactic for propositional -tautologies is indeed available in \Coq~ as the \verb:tauto: tactic. +tautologies is indeed available in \Coq{} as the \verb:tauto: tactic. \begin{coq_example} Restart. tauto. @@ -555,7 +556,7 @@ The two instantiations are effected automatically by the tactic \verb:apply: when pattern-matching a goal. The specialist will of course recognize our proof term as a $\lambda$-term, used as notation for the natural deduction proof term through the Curry-Howard isomorphism. The -naive user of \Coq~ may safely ignore these formal details. +naive user of \Coq{} may safely ignore these formal details. Let us exercise the \verb:tauto: tactic on a more complex example: \begin{coq_example} @@ -579,7 +580,7 @@ argument fails. This may come as a surprise to someone familiar with classical reasoning. Peirce's lemma is true in Boolean logic, i.e. it evaluates to \verb:true: for every truth-assignment to \verb:A: and \verb:B:. Indeed the double negation -of Peirce's law may be proved in \Coq~ using \verb:tauto:: +of Peirce's law may be proved in \Coq{} using \verb:tauto:: \begin{coq_example} Abort. Lemma NNPeirce : ~ ~ (((A -> B) -> A) -> A). @@ -588,7 +589,7 @@ Qed. \end{coq_example} In classical logic, the double negation of a proposition is equivalent to this -proposition, but in the constructive logic of \Coq~ this is not so. If you +proposition, but in the constructive logic of \Coq{} this is not so. If you want to use classical logic in \Coq, you have to import explicitly the \verb:Classical: module, which will declare the axiom \verb:classic: of excluded middle, and classical tautologies such as de Morgan's laws. @@ -652,7 +653,7 @@ function and predicate symbols. \subsection{Sections and signatures} Usually one works in some domain of discourse, over which range the individual -variables and function symbols. In \Coq~ we speak in a language with a rich +variables and function symbols. In \Coq{} we speak in a language with a rich variety of types, so me may mix several domains of discourse, in our multi-sorted language. For the moment, we just do a few exercises, over a domain of discourse \verb:D: axiomatised as a \verb:Set:, and we consider two @@ -660,7 +661,7 @@ predicate symbols \verb:P: and \verb:R: over \verb:D:, of arities respectively 1 and 2. Such abstract entities may be entered in the context as global variables. But we must be careful about the pollution of our global environment by such declarations. For instance, we have already -polluted our \Coq~ session by declaring the variables +polluted our \Coq{} session by declaring the variables \verb:n:, \verb:Pos_n:, \verb:A:, \verb:B:, and \verb:C:. \begin{coq_example} @@ -714,7 +715,7 @@ Check ex. \end{coq_example} and the notation \verb+(exists x:D, P x)+ is just concrete syntax for the expression \verb+(ex D (fun x:D => P x))+. -Existential quantification is handled in \Coq~ in a similar +Existential quantification is handled in \Coq{} in a similar fashion to the connectives \verb:/\: and \verb:\/: : it is introduced by the proof combinator \verb:ex_intro:, which is invoked by the specific tactic \verb:Exists:, and its elimination provides a witness \verb+a:D+ to @@ -951,7 +952,7 @@ Abort. \subsection{Equality} -The basic equality provided in \Coq~ is Leibniz equality, noted infix like +The basic equality provided in \Coq{} is Leibniz equality, noted infix like \verb+x=y+, when \verb:x: and \verb:y: are two expressions of type the same Set. The replacement of \verb:x: by \verb:y: in any term is effected by a variety of tactics, such as \verb:rewrite: @@ -1208,7 +1209,7 @@ About prim_rec. Oops! Instead of the expected type \verb+nat->(nat->nat->nat)->nat->nat+ we get an apparently more complicated expression. Indeed the type of \verb:prim_rec: is equivalent by rule $\beta$ to its expected type; this may -be checked in \Coq~ by command \verb:Eval Cbv Beta:, which $\beta$-reduces +be checked in \Coq{} by command \verb:Eval Cbv Beta:, which $\beta$-reduces an expression to its {\sl normal form}: \begin{coq_example} Eval cbv beta in @@ -1228,7 +1229,7 @@ That is, we specify that \verb+(addition n m)+ computes by cases on \verb:n: according to its main constructor; when \verb:n = O:, we get \verb:m:; when \verb:n = S p:, we get \verb:(S rec):, where \verb:rec: is the result of the recursive computation \verb+(addition p m)+. Let us verify it by -asking \Coq~to compute for us say $2+3$: +asking \Coq{} to compute for us say $2+3$: \begin{coq_example} Eval compute in (addition (S (S O)) (S (S (S O)))). \end{coq_example} @@ -1275,7 +1276,7 @@ as subgoals the corresponding instantiations of the base case \verb:(P O): , and of the inductive step \verb+forall y:nat, P y -> P (S y)+. In each case we get an instance of function \verb:plus: in which its second argument starts with a constructor, and is thus amenable to simplification -by primitive recursion. The \Coq~tactic \verb:simpl: can be used for +by primitive recursion. The \Coq{} tactic \verb:simpl: can be used for this purpose: \begin{coq_example} simpl. @@ -1488,7 +1489,7 @@ Set Printing Width 60. \section{Opening library modules} -When you start \Coq~ without further requirements in the command line, +When you start \Coq{} without further requirements in the command line, you get a bare system with few libraries loaded. As we saw, a standard prelude module provides the standard logic connectives, and a few arithmetic notions. If you want to load and open other modules from @@ -1503,9 +1504,9 @@ Such a command looks for a (compiled) module file \verb:Arith.vo: in the libraries registered by \Coq. Libraries inherit the structure of the file system of the operating system and are registered with the command \verb:Add LoadPath:. Physical directories are mapped to -logical directories. Especially the standard library of \Coq~ is +logical directories. Especially the standard library of \Coq{} is pre-registered as a library of name \verb=Coq=. Modules have absolute -unique names denoting their place in \Coq~ libraries. An absolute +unique names denoting their place in \Coq{} libraries. An absolute name is a sequence of single identifiers separated by dots. E.g. the module \verb=Arith= has full name \verb=Coq.Arith.Arith= and because it resides in eponym subdirectory \verb=Arith= of the standard -- cgit v1.2.3