diff options
| author | Guillaume Melquiond | 2015-01-08 16:27:45 +0100 |
|---|---|---|
| committer | Guillaume Melquiond | 2015-01-08 16:27:58 +0100 |
| commit | 448bf4529c5766e98367345076d00e64e25db7bf (patch) | |
| tree | e0f52bf0eeeafb0289d0d527eaa4372b0fa71ba5 /doc/refman/AsyncProofs.tex | |
| parent | 7b95055821aab5e6d03a5b17dd6257139181f0a8 (diff) | |
Fix some documentation typos.
Diffstat (limited to 'doc/refman/AsyncProofs.tex')
| -rw-r--r-- | doc/refman/AsyncProofs.tex | 199 |
1 files changed, 102 insertions, 97 deletions
diff --git a/doc/refman/AsyncProofs.tex b/doc/refman/AsyncProofs.tex index bef746729b..797bf24340 100644 --- a/doc/refman/AsyncProofs.tex +++ b/doc/refman/AsyncProofs.tex @@ -6,162 +6,167 @@ This chapter explains how proofs can be asynchronously processed by Coq. This feature improves the reactiveness of the system when used in interactive -mode via CoqIDE. In addition to that it allows Coq to take advantage of +mode via CoqIDE. In addition to that, it allows Coq to take advantage of parallel hardware when used as a batch compiler by decoupling the checking of statements and definitions from the construction and checking of proofs objects. This feature is designed to help dealing with huge libraries of theorems -characterized by long proofs. At the current state it may not be beneficial -on small set of short files. +characterized by long proofs. In the current state, it may not be beneficial +on small sets of short files. This feature has some technical limitations that may make it unsuitable for some use cases. -For example in interactive mode errors coming from the kernel of Coq are -signalled late. The most notable type of errors belonging to this category are -universes inconsistency or unsatisfied guardedness conditions for fixpoints +For example, in interactive mode, errors coming from the kernel of Coq are +signaled late. The most notable type of errors belonging to this category are +universe inconsistencies or unsatisfied guardedness conditions for fixpoints built using tactics. -Last, at the time of writing, only opaque proofs (ending with $Qed$) can be +Last, at the time of writing, only opaque proofs (ending with \texttt{Qed}) can be processed asynchronously. \subsection{Proof annotations} To process a proof asynchronously Coq needs to know the precise statement of the theorem without looking at the proof. This requires some annotations -if the theorem is proved inside a $Section$ (see Section~\ref{Section}). +if the theorem is proved inside a \texttt{Section} (see Section~\ref{Section}). -When a section is ended Coq looks at the proof object to decide which +When a section ends, Coq looks at the proof object to decide which section variables are actually used and hence have to be quantified in the -statement of the theorem. To make the construction of the proofs not -mandatory for ending a section one can start each proof with the -$Proof using$ command~\ref{ProofUsing} that declares the subset of section -variables the theorem uses. +statement of the theorem. To avoid making the construction of proofs +mandatory when ending a section, one can start each proof with the +\texttt{Proof using} command (Section~\ref{ProofUsing}) that declares which +section variables the theorem uses. -The presence of $Proof using$ is mandatory to process proofs asynchronously -in interactive mode. +The presence of \texttt{Proof using} is needed to process proofs +asynchronously in interactive mode. -It is not strictly mandatory in batch mode if it is not the first time the -file is compiled and if the file itself did not change. In case the -proof does not begin with $Proof using$ the system records in an auxiliary -file, produced along with the $.vo$ file, the list of section variable used. +It is not strictly mandatory in batch mode if it is not the first time +the file is compiled and if the file itself did not change. When the +proof does not begin with \texttt{Proof using}, the system records in an +auxiliary file, produced along with the \texttt{.vo} file, the list of +section variables used. \subsubsection{Automatic suggestion of proof annotations} -The command $Set Suggest Proof Using$ makes Coq suggest, when a $Qed$ -command is processed, a correct proof annotation. It is up to the user -to modify the proof script adding the proof annotation. +The command \texttt{Set Suggest Proof Using} makes Coq suggest, when a +\texttt{Qed} command is processed, a correct proof annotation. It is up +to the user to modify the proof script accordingly. \subsection{Interactive mode} At the time of writing the only user interface supporting asynchronous proof -processing is CoqIDE. +processing is CoqIDE. -When CoqIDE is started two Coq processes are created. The master one follows -the user, giving feedback as soon as possible by skipping proofs, that are +When CoqIDE is started, two Coq processes are created. The master one follows +the user, giving feedback as soon as possible by skipping proofs, which are delegated to the worker process. The worker process, whose state can be seen by clicking on the button in the lower right corner of the main CoqIDE window, asynchronously processes the proofs. If a proof contains an error, it is reported in red in the label of the very same button, that can also be used to see the list of errors and jump to the corresponding line. -If a proof is processed asynchronously the corresponding $Qed$ command is -is colored using a color that is lighter than usual. This signals that +If a proof is processed asynchronously the corresponding \texttt{Qed} command +is colored using a lighter color that usual. This signals that the proof has been delegated to a worker process (or will be processed -lazily if the $-async-proofs lazy$ option is used). Once finished the +lazily if the \texttt{-async-proofs lazy} option is used). Once finished, the worker process will provide the proof object, but this will not be -automatically checked by the kernel of the main process. To force -the kernel to check all proof objects one has to click the button -with the gears. - -Only when the gears button is pressed all universe constraints are checked. +automatically checked by the kernel of the main process. To force +the kernel to check all the proof objects, one has to click the button +with the gears. Only then are all the universe constraints checked. \subsubsection{Caveats} + The number of worker processes can be increased by passing CoqIDE the -$-async-proofs-j 2$ flag. Note that the memory consumption increases -too, since each worker has to be an exact copy of the master process -and requires the same amount of memory. Also note that the master process -has to both respond to the user and manage the workers, hence increasing -their number may slow down the master process. +\texttt{-async-proofs-j $n$} flag. Note that the memory consumption +increases too, since each worker requires the same amount of memory as +the master process. Also note that increasing the number of workers may +reduce the reactivity of the master process to user commands. -To disable this feature it is enough to pass the $-async-proofs off$ flag to +To disable this feature, one can pass the \texttt{-async-proofs off} flag to CoqIDE. \subsection{Batch mode} -When Coq is used as a batch compiler by running $coqc$ or $coqtop -compile$ -it produces a $.vo$ file for each $.v$ file. A $.vo$ file contains, among -other things, theorems statements and proofs. Hence to produce a $.vo$ -Coq need to process all the proofs of the $.v$ file. +When Coq is used as a batch compiler by running \texttt{coqc} or +\texttt{coqtop -compile}, it produces a \texttt{.vo} file for each +\texttt{.v} file. A \texttt{.vo} file contains, among other things, +theorems statements and proofs. Hence to produce a \texttt{.vo} Coq need +to process all the proofs of the \texttt{.v} file. The asynchronous processing of proofs can decouple the generation of a -compiled file (like the $.vo$ one) that can be $Required$ from the generation -and checking of the proof objects. The $-quick$ flag can be passed to -$coqc$ or $coqtop$ to produce, quickly, $.vio$ files. Alternatively, if -the $Makefile$ one uses was produced by $coq\_makefile$ the $quick$ -target can be used to compile all files using the $-quick$ flag. - -A $.vio$ file can be $Required$ exactly as a $.vo$ file but: 1) proofs are -not available (the $Print$ command produces an error); 2) some universe -constraints are missing, hence universes inconsistencies may not be -discovered. A $.vio$ file does not contain proof objects, but proof tasks, +compiled file (like the \texttt{.vo} one) that can be loaded by +\texttt{Require} from the generation and checking of the proof objects. +The \texttt{-quick} flag can be passed to \texttt{coqc} or +\texttt{coqtop} to produce, quickly, \texttt{.vio} files. Alternatively, +when using a \texttt{Makefile} produced by \texttt{coq\_makefile}, the +\texttt{quick} target can be used to compile all files using the +\texttt{-quick} flag. + +A \texttt{.vio} file can be loaded using \texttt{Require} exactly as a +\texttt{.vo} file but proofs will not be available (the \texttt{Print} +command produces an error). Moreover, some universe constraints might be +missing, so universes inconsistencies might go unnoticed. A +\texttt{.vio} file does not contain proof objects, but proof tasks, i.e. what a worker process can transform into a proof object. -Compiling a set of files with the $-quick$ flag allows one to work, -interactively, on any file without waiting for all proofs to be checked. - -While one works interactively, he can fully check all $.v$ files by -running $coqc$ as usual. - -Alternatively one can turn each $.vio$ into the corresponding $.vo$. -All $.vio$ files can be processed in parallel, hence this alternative -may be faster. The command $coqtop -schedule-vio2vo 2 a b c$ -can be used to obtain a good scheduling for 2 workers to produce -$a.vo$, $b.vo$ and $c.vo$. If the $Makefile$ one uses was produced -by $coq\_makefile$ the $vio2vo$ target can be used for that. -The variable $J$ should be set to the number of workers, like -in $make vio2vo J=2$. The only caveat is that, while the $.vo$ file -obtained from $.vio$ files are complete (they contain all proof terms -and universe constraints) the satisfiability of all universe constraints -has not been checked globally (they are checked to be consistent for -every single proof). Constraints will be checked when these $.vo$ files -are (recursively) loaded with $Require$. - -There is an extra, possibly even faster, alternative: just check -the proof tasks store in $.vio$ files without producing the $.vo$ files. -This is possibly faster because all proof tasks are independent, hence -one can further partition the job to be done between workers. -The $coqtop -schedule-vio-checking 6 a b c$ command can be used to obtain -a good scheduling for 6 workers to check all proof tasks of $a.vio$, $b.vio$ and -$c.vio$. Auxiliary files are used to predict how long a proof task will take, -assuming it will take the same amount of time it took last time. -If the $Makefile$ one uses was produced by $coq\_makefile$ the $checkproofs$ -target can be used to check all $.vio$ files. The variable $J$ should be -set to the number of workers, like in $make checkproofs J=6$. -Checking all proof tasks does not guarantee the same degree of safety -that producing a $.vo$ file gives. In particular universe constraints -are checked to be consistent for every single proof, but not globally. -Hence this compilation mode is only useful for quick regression testing -and on developments not making heavy use of the $Type$ hierarchy. +Compiling a set of files with the \texttt{-quick} flag allows one to work, +interactively, on any file without waiting for all the proofs to be checked. + +When working interactively, one can fully check all the \texttt{.v} files by +running \texttt{coqc} as usual. + +Alternatively one can turn each \texttt{.vio} into the corresponding +\texttt{.vo}. All \texttt{.vio} files can be processed in parallel, +hence this alternative might be faster. The command \texttt{coqtop + -schedule-vio2vo 2 a b c} can be used to obtain a good scheduling for 2 +workers to produce \texttt{a.vo}, \texttt{b.vo}, and \texttt{c.vo}. When +using a \texttt{Makefile} produced by \texttt{coq\_makefile}, the +\texttt{vio2vo} target can be used for that purpose. Variable \texttt{J} +should be set to the number of workers, e.g. \texttt{make vio2vo J=2}. +The only caveat is that, while the \texttt{.vo} files obtained from +\texttt{.vio} files are complete (they contain all proof terms and +universe constraints), the satisfiability of all universe constraints has +not been checked globally (they are checked to be consistent for every +single proof). Constraints will be checked when these \texttt{.vo} files +are (recursively) loaded with \texttt{Require}. + +There is an extra, possibly even faster, alternative: just check the +proof tasks stored in \texttt{.vio} files without producing the +\texttt{.vo} files. This is possibly faster because all the proof tasks +are independent, hence one can further partition the job to be done +between workers. The \texttt{coqtop -schedule-vio-checking 6 a b c} +command can be used to obtain a good scheduling for 6 workers to check +all the proof tasks of \texttt{a.vio}, \texttt{b.vio}, and +\texttt{c.vio}. Auxiliary files are used to predict how long a proof task +will take, assuming it will take the same amount of time it took last +time. When using a \texttt{Makefile} produced by \texttt{coq\_makefile}, +the \texttt{checkproofs} target can be used to check all \texttt{.vio} +files. Variable \texttt{J} should be set to the number of workers, +e.g. \texttt{make checkproofs J=6}. As when converting \texttt{.vio} +files to \texttt{.vo} files, universe constraints are not checked to be +globally consistent. Hence this compilation mode is only useful for quick +regression testing and on developments not making heavy use of the $Type$ +hierarchy. \subsection{Limiting the number of parallel workers} \label{coqworkmgr} Many Coq processes may run on the same computer, and each of them may start many additional worker processes. -The $coqworkmgr$ utility lets one limit the number of workers, globally. +The \texttt{coqworkmgr} utility lets one limit the number of workers, globally. -The utility accepts the $-j$ argument to specify the maximum number of -workers (defaults to 2). $coqworkmgr$ automatically starts in the +The utility accepts the \texttt{-j} argument to specify the maximum number of +workers (defaults to 2). \texttt{coqworkmgr} automatically starts in the background and prints an environment variable assignment like -$COQWORKMGR\_SOCKET=localhost:45634$. The user must set this variable in -all the shells from which he will start Coq processes. If one uses just -one terminal running the bash shell, then $export `coqworkmgr -j 4`$ will +\texttt{COQWORKMGR\_SOCKET=localhost:45634}. The user must set this variable in +all the shells from which Coq processes will be started. If one uses just +one terminal running the bash shell, then \texttt{export `coqworkmgr -j 4`} will do the job. -After that all Coq processes, like $coqide$ and $coqc$ will honor such -limit, globally. +After that, all Coq processes, e.g. \texttt{coqide} and \texttt{coqc}, +will honor the limit, globally. %%% Local Variables: |
