From 61dc740ed1c3780cccaec00d059a28f0d31d0052 Mon Sep 17 00:00:00 2001 From: Stephane Glondu Date: Mon, 4 Jun 2012 12:07:52 +0200 Subject: Imported Upstream version 8.4~gamma0+really8.4beta2 --- doc/refman/RefMan-ext.tex | 41 +++++++++++++++++++++++++++++++++++++---- 1 file changed, 37 insertions(+), 4 deletions(-) (limited to 'doc/refman/RefMan-ext.tex') diff --git a/doc/refman/RefMan-ext.tex b/doc/refman/RefMan-ext.tex index 2da5bec1..2c4985c1 100644 --- a/doc/refman/RefMan-ext.tex +++ b/doc/refman/RefMan-ext.tex @@ -5,6 +5,8 @@ the Gallina's syntax. \section{Record types \comindex{Record} +\comindex{Inductive} +\comindex{CoInductive} \label{Record}} The \verb+Record+ construction is a macro allowing the definition of @@ -20,10 +22,13 @@ construction allows to define ``signatures''. {\sentence} & ++= & {\record}\\ & & \\ {\record} & ::= & - {\tt Record} {\ident} \zeroone{\binders} \zeroone{{\tt :} {\sort}} \verb.:=. \\ + {\recordkw} {\ident} \zeroone{\binders} \zeroone{{\tt :} {\sort}} \verb.:=. \\ && ~~~~\zeroone{\ident} \verb!{! \zeroone{\nelist{\field}{;}} \verb!}! \verb:.:\\ & & \\ +{\recordkw} & ::= & + {\tt Record} $|$ {\tt Inductive} $|$ {\tt CoInductive}\\ + & & \\ {\field} & ::= & {\name} \zeroone{\binders} : {\type} [ {\tt where} {\it notation} ] \\ & $|$ & {\name} \zeroone{\binders} {\typecstr} := {\term} \end{tabular} @@ -149,6 +154,13 @@ Eval compute in half.(Rat_bottom_cond). Reset Initial. \end{coq_eval} +Records defined with the {\tt Record} keyword are not allowed to be +recursive (references to the record's name in the type of its field +raises an error). To define recursive records, one can use the {\tt + Inductive} and {\tt CoInductive} keywords, resulting in an inductive +or co-inductive record. A \emph{caveat}, however, is that records +cannot appear in mutually inductive (or co-inductive) definitions. + \begin{Warnings} \item {\tt Warning: {\ident$_i$} cannot be defined.} @@ -167,10 +179,16 @@ Reset Initial. \begin{ErrMsgs} -\item \errindex{A record cannot be recursive} +\item \errindex{Records declared with the keyword Record or Structure cannot be recursive.} - The record name {\ident} appears in the type of its fields. - + The record name {\ident} appears in the type of its fields, but uses + the keyword {\tt Record}. Use the keyword {\tt Inductive} or {\tt + CoInductive} instead. +\item \errindex{Cannot handle mutually (co)inductive records.} + + Records cannot be defined as part of mutually inductive (or + co-inductive) definitions, whether with records only or mixed with + standard definitions. \item During the definition of the one-constructor inductive definition, all the errors of inductive definitions, as described in Section~\ref{gal_Inductive_Definitions}, may also occur. @@ -1557,8 +1575,23 @@ but succeeds in Check Prop = nat. \end{coq_example*} +\subsection{Deactivation of implicit arguments for parsing} +\comindex{Set Parsing Explicit} +\comindex{Unset Parsing Explicit} +Use of implicit arguments can be deactivated by issuing the command: +\begin{quote} +{\tt Set Parsing Explicit.} +\end{quote} +In this case, all arguments of constants, inductive types, +constructors, etc, including the arguments declared as implicit, have +to be given as if none arguments were implicit. By symmetry, this also +affects printing. To restore parsing and normal printing of implicit +arguments, use: +\begin{quote} +{\tt Set Parsing Explicit.} +\end{quote} \subsection{Canonical structures \comindex{Canonical Structure}} -- cgit v1.2.3