doc-src/Locales/Locales/document/Examples3.tex
changeset 30826 a53f4872400e
parent 30782 38e477e8524f
child 31748 530596c997da
equal deleted inserted replaced
30783:275577cefaa8 30826:a53f4872400e
    66 \isadelimvisible
    66 \isadelimvisible
    67 %
    67 %
    68 \endisadelimvisible
    68 \endisadelimvisible
    69 %
    69 %
    70 \begin{isamarkuptext}%
    70 \begin{isamarkuptext}%
    71 The inner interpretation does not require an
    71 The inner interpretation does not require an elaborate new
    72   elaborate new proof, it is immediate from the preceeding fact and
    72   proof, it is immediate from the preceding fact and proved with
    73   proved with ``.''.  Strict qualifiers are normally not necessary for
    73   ``.''.  It enriches the local proof context by the very theorems
    74   interpretations inside proofs, since these have only limited scope.
    74   also obtained in the interpretation from Section~\ref{sec:po-first},
    75 
    75   and \isa{nat{\isachardot}less{\isacharunderscore}def} may directly be used to unfold the
    76   The above interpretation enriches the local proof context by
    76   definition.  Theorems from the local interpretation disappear after
    77   the very theorems also obtained in the interpretation from
    77   leaving the proof context --- that is, after the closing
    78   Section~\ref{sec:po-first}, and \isa{nat{\isachardot}less{\isacharunderscore}def} may directly be
    78   \isakeyword{qed} --- and are then replaced by those with the desired
    79   used to unfold the definition.  Theorems from the local
    79   substitutions of the strict order.%
    80   interpretation disappear after leaving the proof context --- that
       
    81   is, after the closing \isakeyword{qed} --- and are
       
    82   then replaced by those with the desired substitutions of the strict
       
    83   order.%
       
    84 \end{isamarkuptext}%
    80 \end{isamarkuptext}%
    85 \isamarkuptrue%
    81 \isamarkuptrue%
    86 %
    82 %
    87 \isamarkupsubsection{Further Interpretations%
    83 \isamarkupsubsection{Further Interpretations%
    88 }
    84 }
   137 \isamarkuptrue%
   133 \isamarkuptrue%
   138 \ \ \ \ \isacommand{by}\isamarkupfalse%
   134 \ \ \ \ \isacommand{by}\isamarkupfalse%
   139 \ arith{\isacharplus}%
   135 \ arith{\isacharplus}%
   140 \begin{isamarkuptxt}%
   136 \begin{isamarkuptxt}%
   141 For the first of the equations, we refer to the theorem
   137 For the first of the equations, we refer to the theorem
   142   generated in the previous interpretation.%
   138   shown in the previous interpretation.%
   143 \end{isamarkuptxt}%
   139 \end{isamarkuptxt}%
   144 \isamarkuptrue%
   140 \isamarkuptrue%
   145 \ \ \isacommand{show}\isamarkupfalse%
   141 \ \ \isacommand{show}\isamarkupfalse%
   146 \ {\isachardoublequoteopen}partial{\isacharunderscore}order{\isachardot}less\ op\ {\isasymle}\ {\isacharparenleft}x{\isacharcolon}{\isacharcolon}nat{\isacharparenright}\ y\ {\isacharequal}\ {\isacharparenleft}x\ {\isacharless}\ y{\isacharparenright}{\isachardoublequoteclose}\isanewline
   142 \ {\isachardoublequoteopen}partial{\isacharunderscore}order{\isachardot}less\ op\ {\isasymle}\ {\isacharparenleft}x{\isacharcolon}{\isacharcolon}nat{\isacharparenright}\ y\ {\isacharequal}\ {\isacharparenleft}x\ {\isacharless}\ y{\isacharparenright}{\isachardoublequoteclose}\isanewline
   147 \ \ \ \ \isacommand{by}\isamarkupfalse%
   143 \ \ \ \ \isacommand{by}\isamarkupfalse%
   171 \isadelimvisible
   167 \isadelimvisible
   172 %
   168 %
   173 \endisadelimvisible
   169 \endisadelimvisible
   174 %
   170 %
   175 \begin{isamarkuptext}%
   171 \begin{isamarkuptext}%
   176 The interpretation that the relation \isa{{\isasymle}} is a total
   172 Next follows that \isa{{\isasymle}} is a total order.%
   177   order follows next.%
       
   178 \end{isamarkuptext}%
   173 \end{isamarkuptext}%
   179 \isamarkuptrue%
   174 \isamarkuptrue%
   180 %
   175 %
   181 \isadelimvisible
   176 \isadelimvisible
   182 %
   177 %
   189 \ \ \ \ \isakeyword{and}\ {\isachardoublequoteopen}lattice{\isachardot}meet\ op\ {\isasymle}\ {\isacharparenleft}x{\isacharcolon}{\isacharcolon}nat{\isacharparenright}\ y\ {\isacharequal}\ min\ x\ y{\isachardoublequoteclose}\isanewline
   184 \ \ \ \ \isakeyword{and}\ {\isachardoublequoteopen}lattice{\isachardot}meet\ op\ {\isasymle}\ {\isacharparenleft}x{\isacharcolon}{\isacharcolon}nat{\isacharparenright}\ y\ {\isacharequal}\ min\ x\ y{\isachardoublequoteclose}\isanewline
   190 \ \ \ \ \isakeyword{and}\ {\isachardoublequoteopen}lattice{\isachardot}join\ op\ {\isasymle}\ {\isacharparenleft}x{\isacharcolon}{\isacharcolon}nat{\isacharparenright}\ y\ {\isacharequal}\ max\ x\ y{\isachardoublequoteclose}\isanewline
   185 \ \ \ \ \isakeyword{and}\ {\isachardoublequoteopen}lattice{\isachardot}join\ op\ {\isasymle}\ {\isacharparenleft}x{\isacharcolon}{\isacharcolon}nat{\isacharparenright}\ y\ {\isacharequal}\ max\ x\ y{\isachardoublequoteclose}\isanewline
   191 \isacommand{proof}\isamarkupfalse%
   186 \isacommand{proof}\isamarkupfalse%
   192 \ {\isacharminus}\isanewline
   187 \ {\isacharminus}\isanewline
   193 \ \ \isacommand{show}\isamarkupfalse%
   188 \ \ \isacommand{show}\isamarkupfalse%
   194 \ {\isachardoublequoteopen}total{\isacharunderscore}order\ {\isacharparenleft}op\ {\isasymle}\ {\isacharcolon}{\isacharcolon}\ nat\ {\isasymRightarrow}\ nat\ {\isasymRightarrow}\ bool{\isacharparenright}{\isachardoublequoteclose}\ \isacommand{by}\isamarkupfalse%
   189 \ {\isachardoublequoteopen}total{\isacharunderscore}order\ {\isacharparenleft}op\ {\isasymle}\ {\isacharcolon}{\isacharcolon}\ nat\ {\isasymRightarrow}\ nat\ {\isasymRightarrow}\ bool{\isacharparenright}{\isachardoublequoteclose}\isanewline
       
   190 \ \ \ \ \isacommand{by}\isamarkupfalse%
   195 \ unfold{\isacharunderscore}locales\ arith\isanewline
   191 \ unfold{\isacharunderscore}locales\ arith\isanewline
   196 \isacommand{qed}\isamarkupfalse%
   192 \isacommand{qed}\isamarkupfalse%
   197 \ {\isacharparenleft}rule\ nat{\isacharunderscore}less{\isacharunderscore}eq\ nat{\isacharunderscore}meet{\isacharunderscore}eq\ nat{\isacharunderscore}join{\isacharunderscore}eq{\isacharparenright}{\isacharplus}%
   193 \ {\isacharparenleft}rule\ nat{\isacharunderscore}less{\isacharunderscore}eq\ nat{\isacharunderscore}meet{\isacharunderscore}eq\ nat{\isacharunderscore}join{\isacharunderscore}eq{\isacharparenright}{\isacharplus}%
   198 \endisatagvisible
   194 \endisatagvisible
   199 {\isafoldvisible}%
   195 {\isafoldvisible}%
   201 \isadelimvisible
   197 \isadelimvisible
   202 %
   198 %
   203 \endisadelimvisible
   199 \endisadelimvisible
   204 %
   200 %
   205 \begin{isamarkuptext}%
   201 \begin{isamarkuptext}%
   206 Note that since the locale hierarchy reflects that total
   202 Since the locale hierarchy reflects that total
   207   orders are distributive lattices, an explicit interpretation of
   203   orders are distributive lattices, an explicit interpretation of
   208   distributive lattices for the order relation on natural numbers is
   204   distributive lattices for the order relation on natural numbers is
   209   only necessary for mapping the definitions to the right operators on
   205   only necessary for mapping the definitions to the right operators on
   210   \isa{nat}.%
   206   \isa{nat}.%
   211 \end{isamarkuptext}%
   207 \end{isamarkuptext}%
   266   incrementally.%
   262   incrementally.%
   267 \end{isamarkuptext}%
   263 \end{isamarkuptext}%
   268 \isamarkuptrue%
   264 \isamarkuptrue%
   269 \isacommand{interpretation}\isamarkupfalse%
   265 \isacommand{interpretation}\isamarkupfalse%
   270 \ nat{\isacharunderscore}dvd{\isacharcolon}\ partial{\isacharunderscore}order\ {\isachardoublequoteopen}op\ dvd\ {\isacharcolon}{\isacharcolon}\ nat\ {\isasymRightarrow}\ nat\ {\isasymRightarrow}\ bool{\isachardoublequoteclose}\isanewline
   266 \ nat{\isacharunderscore}dvd{\isacharcolon}\ partial{\isacharunderscore}order\ {\isachardoublequoteopen}op\ dvd\ {\isacharcolon}{\isacharcolon}\ nat\ {\isasymRightarrow}\ nat\ {\isasymRightarrow}\ bool{\isachardoublequoteclose}\isanewline
   271 \ \ \isakeyword{where}\ nat{\isacharunderscore}dvd{\isacharunderscore}less{\isacharunderscore}eq{\isacharcolon}\ {\isachardoublequoteopen}partial{\isacharunderscore}order{\isachardot}less\ op\ dvd\ {\isacharparenleft}x{\isacharcolon}{\isacharcolon}nat{\isacharparenright}\ y\ {\isacharequal}\ {\isacharparenleft}x\ dvd\ y\ {\isasymand}\ x\ {\isasymnoteq}\ y{\isacharparenright}{\isachardoublequoteclose}\isanewline
   267 \ \ \isakeyword{where}\ nat{\isacharunderscore}dvd{\isacharunderscore}less{\isacharunderscore}eq{\isacharcolon}\isanewline
       
   268 \ \ \ \ {\isachardoublequoteopen}partial{\isacharunderscore}order{\isachardot}less\ op\ dvd\ {\isacharparenleft}x{\isacharcolon}{\isacharcolon}nat{\isacharparenright}\ y\ {\isacharequal}\ {\isacharparenleft}x\ dvd\ y\ {\isasymand}\ x\ {\isasymnoteq}\ y{\isacharparenright}{\isachardoublequoteclose}\isanewline
   272 %
   269 %
   273 \isadelimproof
   270 \isadelimproof
   274 %
   271 %
   275 \endisadelimproof
   272 \endisadelimproof
   276 %
   273 %
   376 \isadelimproof
   373 \isadelimproof
   377 %
   374 %
   378 \endisadelimproof
   375 \endisadelimproof
   379 %
   376 %
   380 \begin{isamarkuptext}%
   377 \begin{isamarkuptext}%
   381 Equations \isa{nat{\isacharunderscore}dvd{\isacharunderscore}meet{\isacharunderscore}eq} and \isa{nat{\isacharunderscore}dvd{\isacharunderscore}join{\isacharunderscore}eq} are named since they are handy in the proof of
   378 Equations \isa{nat{\isacharunderscore}dvd{\isacharunderscore}meet{\isacharunderscore}eq} and \isa{nat{\isacharunderscore}dvd{\isacharunderscore}join{\isacharunderscore}eq} are used in the main part the subsequent
   382   the subsequent interpretation.%
   379   interpretation.%
   383 \end{isamarkuptext}%
   380 \end{isamarkuptext}%
   384 \isamarkuptrue%
   381 \isamarkuptrue%
   385 %
   382 %
   386 \isadeliminvisible
   383 \isadeliminvisible
   387 %
   384 %
   471 \end{table}%
   468 \end{table}%
   472 \end{isamarkuptext}%
   469 \end{isamarkuptext}%
   473 \isamarkuptrue%
   470 \isamarkuptrue%
   474 %
   471 %
   475 \begin{isamarkuptext}%
   472 \begin{isamarkuptext}%
   476 The full syntax of the interpretation commands is shown in
   473 The syntax of the interpretation commands is shown in
   477   Table~\ref{tab:commands}.  The grammar refers to
   474   Table~\ref{tab:commands}.  The grammar refers to
   478   \textit{expression}, which stands for a \emph{locale} expression.
   475   \textit{expression}, which stands for a \emph{locale} expression.
   479   Locale expressions are discussed in the following section.%
   476   Locale expressions are discussed in the following section.%
   480 \end{isamarkuptext}%
   477 \end{isamarkuptext}%
   481 \isamarkuptrue%
   478 \isamarkuptrue%
   491   existing locale for both.
   488   existing locale for both.
   492 
   489 
   493   Inspecting the grammar of locale commands in
   490   Inspecting the grammar of locale commands in
   494   Table~\ref{tab:commands} reveals that the import of a locale can be
   491   Table~\ref{tab:commands} reveals that the import of a locale can be
   495   more than just a single locale.  In general, the import is a
   492   more than just a single locale.  In general, the import is a
   496   \emph{locale expression}.  These enable to combine locales
   493   \emph{locale expression}, which enables to combine locales
   497   and instantiate parameters.  A locale expression is a sequence of
   494   and instantiate parameters.  A locale expression is a sequence of
   498   locale \emph{instances} followed by an optional \isakeyword{for}
   495   locale \emph{instances} followed by an optional \isakeyword{for}
   499   clause.  Each instance consists of a locale reference, which may be
   496   clause.  Each instance consists of a locale reference, which may be
   500   preceded by a qualifer and succeeded by instantiations of the
   497   preceded by a qualifer and succeeded by instantiations of the
   501   parameters of that locale.  Instantiations may be either positional
   498   parameters of that locale.  Instantiations may be either positional
   502   or through explicit parameter argument pairs.
   499   or through explicit mappings of parameters to arguments.
   503 
   500 
   504   Using a locale expression, a locale for order
   501   Using a locale expression, a locale for order
   505   preserving maps can be declared in the following way.%
   502   preserving maps can be declared in the following way.%
   506 \end{isamarkuptext}%
   503 \end{isamarkuptext}%
   507 \isamarkuptrue%
   504 \isamarkuptrue%
   511 \ \ \ \ \ \ \isakeyword{for}\ le\ {\isacharparenleft}\isakeyword{infixl}\ {\isachardoublequoteopen}{\isasymsqsubseteq}{\isachardoublequoteclose}\ {\isadigit{5}}{\isadigit{0}}{\isacharparenright}\ \isakeyword{and}\ le{\isacharprime}\ {\isacharparenleft}\isakeyword{infixl}\ {\isachardoublequoteopen}{\isasympreceq}{\isachardoublequoteclose}\ {\isadigit{5}}{\isadigit{0}}{\isacharparenright}\ {\isacharplus}\isanewline
   508 \ \ \ \ \ \ \isakeyword{for}\ le\ {\isacharparenleft}\isakeyword{infixl}\ {\isachardoublequoteopen}{\isasymsqsubseteq}{\isachardoublequoteclose}\ {\isadigit{5}}{\isadigit{0}}{\isacharparenright}\ \isakeyword{and}\ le{\isacharprime}\ {\isacharparenleft}\isakeyword{infixl}\ {\isachardoublequoteopen}{\isasympreceq}{\isachardoublequoteclose}\ {\isadigit{5}}{\isadigit{0}}{\isacharparenright}\ {\isacharplus}\isanewline
   512 \ \ \ \ \isakeyword{fixes}\ {\isasymphi}\ {\isacharcolon}{\isacharcolon}\ {\isachardoublequoteopen}{\isacharprime}a\ {\isasymRightarrow}\ {\isacharprime}b{\isachardoublequoteclose}\isanewline
   509 \ \ \ \ \isakeyword{fixes}\ {\isasymphi}\ {\isacharcolon}{\isacharcolon}\ {\isachardoublequoteopen}{\isacharprime}a\ {\isasymRightarrow}\ {\isacharprime}b{\isachardoublequoteclose}\isanewline
   513 \ \ \ \ \isakeyword{assumes}\ hom{\isacharunderscore}le{\isacharcolon}\ {\isachardoublequoteopen}x\ {\isasymsqsubseteq}\ y\ {\isasymLongrightarrow}\ {\isasymphi}\ x\ {\isasympreceq}\ {\isasymphi}\ y{\isachardoublequoteclose}%
   510 \ \ \ \ \isakeyword{assumes}\ hom{\isacharunderscore}le{\isacharcolon}\ {\isachardoublequoteopen}x\ {\isasymsqsubseteq}\ y\ {\isasymLongrightarrow}\ {\isasymphi}\ x\ {\isasympreceq}\ {\isasymphi}\ y{\isachardoublequoteclose}%
   514 \begin{isamarkuptext}%
   511 \begin{isamarkuptext}%
   515 The second and third line contain the expression --- two
   512 The second and third line contain the expression --- two
   516   instances of the partial order locale with instantiations \isa{le}
   513   instances of the partial order locale where the parameter is
       
   514   instantiated to \isa{le}
   517   and \isa{le{\isacharprime}}, respectively.  The \isakeyword{for} clause consists
   515   and \isa{le{\isacharprime}}, respectively.  The \isakeyword{for} clause consists
   518   of parameter declarations and is similar to the context element
   516   of parameter declarations and is similar to the context element
   519   \isakeyword{fixes}.  The notable difference is that the
   517   \isakeyword{fixes}.  The notable difference is that the
   520   \isakeyword{for} clause is part of the expression, and only
   518   \isakeyword{for} clause is part of the expression, and only
   521   parameters defined in the expression may occur in its instances.
   519   parameters defined in the expression may occur in its instances.
   522 
   520 
   523   Instances are \emph{morphisms} on locales.  Their effect on the
   521   Instances define \emph{morphisms} on locales.  Their effect on the
   524   parameters is naturally lifted to terms, propositions and theorems,
   522   parameters is lifted to terms, propositions and theorems in the
       
   523   canonical way,
   525   and thus to the assumptions and conclusions of a locale.  The
   524   and thus to the assumptions and conclusions of a locale.  The
   526   assumption of a locale expression is the conjunction of the
   525   assumption of a locale expression is the conjunction of the
   527   assumptions of the instances.  The conclusions of a sequence of
   526   assumptions of the instances.  The conclusions of a sequence of
   528   instances are obtained by appending the conclusions of the
   527   instances are obtained by appending the conclusions of the
   529   instances in the order of the sequence.
   528   instances in the order of the sequence.
   582 \isadeliminvisible
   581 \isadeliminvisible
   583 %
   582 %
   584 \endisadeliminvisible
   583 \endisadeliminvisible
   585 %
   584 %
   586 \begin{isamarkuptext}%
   585 \begin{isamarkuptext}%
   587 This example reveals that there is no infix syntax for the strict
   586 This example reveals that there is no infix syntax for the
   588   version of \isa{{\isasympreceq}}!  This can be declared through an abbreviation.%
   587   strict operation associated with \isa{{\isasympreceq}}.  This can be declared
       
   588   through an abbreviation.%
   589 \end{isamarkuptext}%
   589 \end{isamarkuptext}%
   590 \isamarkuptrue%
   590 \isamarkuptrue%
   591 \ \ \isacommand{abbreviation}\isamarkupfalse%
   591 \ \ \isacommand{abbreviation}\isamarkupfalse%
   592 \ {\isacharparenleft}\isakeyword{in}\ order{\isacharunderscore}preserving{\isacharparenright}\isanewline
   592 \ {\isacharparenleft}\isakeyword{in}\ order{\isacharunderscore}preserving{\isacharparenright}\isanewline
   593 \ \ \ \ less{\isacharprime}\ {\isacharparenleft}\isakeyword{infixl}\ {\isachardoublequoteopen}{\isasymprec}{\isachardoublequoteclose}\ {\isadigit{5}}{\isadigit{0}}{\isacharparenright}\ \isakeyword{where}\ {\isachardoublequoteopen}less{\isacharprime}\ {\isasymequiv}\ partial{\isacharunderscore}order{\isachardot}less\ le{\isacharprime}{\isachardoublequoteclose}%
   593 \ \ \ \ less{\isacharprime}\ {\isacharparenleft}\isakeyword{infixl}\ {\isachardoublequoteopen}{\isasymprec}{\isachardoublequoteclose}\ {\isadigit{5}}{\isadigit{0}}{\isacharparenright}\ \isakeyword{where}\ {\isachardoublequoteopen}less{\isacharprime}\ {\isasymequiv}\ partial{\isacharunderscore}order{\isachardot}less\ le{\isacharprime}{\isachardoublequoteclose}%
   594 \begin{isamarkuptext}%
   594 \begin{isamarkuptext}%
   595 Now the theorem is displayed nicely as
   595 Now the theorem is displayed nicely as
   596   \isa{{\isasymlbrakk}{\isacharquery}x\ {\isasymprec}\ {\isacharquery}y{\isacharsemicolon}\ {\isacharquery}y\ {\isasympreceq}\ {\isacharquery}z{\isasymrbrakk}\ {\isasymLongrightarrow}\ {\isacharquery}x\ {\isasymprec}\ {\isacharquery}z}.%
   596   \isa{le{\isacharprime}{\isachardot}less{\isacharunderscore}le{\isacharunderscore}trans}:
       
   597   \begin{isabelle}%
       
   598 \ \ {\isasymlbrakk}{\isacharquery}x\ {\isasymprec}\ {\isacharquery}y{\isacharsemicolon}\ {\isacharquery}y\ {\isasympreceq}\ {\isacharquery}z{\isasymrbrakk}\ {\isasymLongrightarrow}\ {\isacharquery}x\ {\isasymprec}\ {\isacharquery}z%
       
   599 \end{isabelle}%
   597 \end{isamarkuptext}%
   600 \end{isamarkuptext}%
   598 \isamarkuptrue%
   601 \isamarkuptrue%
   599 %
   602 %
   600 \begin{isamarkuptext}%
   603 \begin{isamarkuptext}%
   601 Qualifiers not only apply to theorem names, but also to names
   604 Qualifiers not only apply to theorem names, but also to names
   602   introduced by definitions and abbreviations.  In locale
   605   introduced by definitions and abbreviations.  For example, in \isa{partial{\isacharunderscore}order} the name \isa{less} abbreviates \isa{op\ {\isasymsqsubset}}.  Therefore, in \isa{order{\isacharunderscore}preserving}
   603   \isa{partial{\isacharunderscore}order} the full name of the strict order of \isa{{\isasymsqsubseteq}} is
   606   the qualified name \isa{le{\isachardot}less} abbreviates \isa{op\ {\isasymsqsubset}} and \isa{le{\isacharprime}{\isachardot}less} abbreviates \isa{op\ {\isasymprec}}.  Hence, the equation in the abbreviation
   604   \isa{le{\isachardot}less} and therefore \isa{le{\isacharprime}{\isachardot}less} is the full name of
   607   above could have been written more concisely as \isa{less{\isacharprime}\ {\isasymequiv}\ le{\isacharprime}{\isachardot}less}.%
   605   the strict order of \isa{{\isasympreceq}}.  Hence, the equation in the
       
   606   abbreviation above could have been also written as \isa{less{\isacharprime}\ {\isasymequiv}\ le{\isacharprime}{\isachardot}less}.%
       
   607 \end{isamarkuptext}%
   608 \end{isamarkuptext}%
   608 \isamarkuptrue%
   609 \isamarkuptrue%
   609 %
   610 %
   610 \begin{isamarkuptext}%
   611 \begin{isamarkuptext}%
   611 Readers may find the declaration of locale \isa{order{\isacharunderscore}preserving} a little awkward, because the declaration and
   612 Readers may find the declaration of locale \isa{order{\isacharunderscore}preserving} a little awkward, because the declaration and
   616   provided for it.  In positional instantiations, a parameter position
   617   provided for it.  In positional instantiations, a parameter position
   617   may be skipped with an underscore, and it is allowed to give fewer
   618   may be skipped with an underscore, and it is allowed to give fewer
   618   instantiation terms than the instantiated locale's number of
   619   instantiation terms than the instantiated locale's number of
   619   parameters.  In named instantiations, instantiation pairs for
   620   parameters.  In named instantiations, instantiation pairs for
   620   certain parameters may simply be omitted.  Untouched parameters are
   621   certain parameters may simply be omitted.  Untouched parameters are
   621   declared by the locale expression and with their concrete syntax by
   622   implicitly declared by the locale expression and with their concrete
   622   implicitly adding them to the beginning of the \isakeyword{for}
   623   syntax.  In the sequence of parameters, they appear before the
   623   clause.
   624   parameters from the \isakeyword{for} clause.
   624 
   625 
   625   The following locales illustrate this.  A map \isa{{\isasymphi}} is a
   626   The following locales illustrate this.  A map \isa{{\isasymphi}} is a
   626   lattice homomorphism if it preserves meet and join.%
   627   lattice homomorphism if it preserves meet and join.%
   627 \end{isamarkuptext}%
   628 \end{isamarkuptext}%
   628 \isamarkuptrue%
   629 \isamarkuptrue%
   629 \ \ \isacommand{locale}\isamarkupfalse%
   630 \ \ \isacommand{locale}\isamarkupfalse%
   630 \ lattice{\isacharunderscore}hom\ {\isacharequal}\isanewline
   631 \ lattice{\isacharunderscore}hom\ {\isacharequal}\isanewline
   631 \ \ \ \ le{\isacharcolon}\ lattice\ {\isacharplus}\ le{\isacharprime}{\isacharcolon}\ lattice\ le{\isacharprime}\ \isakeyword{for}\ le{\isacharprime}\ {\isacharparenleft}\isakeyword{infixl}\ {\isachardoublequoteopen}{\isasympreceq}{\isachardoublequoteclose}\ {\isadigit{5}}{\isadigit{0}}{\isacharparenright}\ {\isacharplus}\isanewline
   632 \ \ \ \ le{\isacharcolon}\ lattice\ {\isacharplus}\ le{\isacharprime}{\isacharcolon}\ lattice\ le{\isacharprime}\ \isakeyword{for}\ le{\isacharprime}\ {\isacharparenleft}\isakeyword{infixl}\ {\isachardoublequoteopen}{\isasympreceq}{\isachardoublequoteclose}\ {\isadigit{5}}{\isadigit{0}}{\isacharparenright}\ {\isacharplus}\isanewline
   632 \ \ \ \ \isakeyword{fixes}\ {\isasymphi}\isanewline
   633 \ \ \ \ \isakeyword{fixes}\ {\isasymphi}\isanewline
   633 \ \ \ \ \isakeyword{assumes}\ hom{\isacharunderscore}meet{\isacharcolon}\isanewline
   634 \ \ \ \ \isakeyword{assumes}\ hom{\isacharunderscore}meet{\isacharcolon}\ {\isachardoublequoteopen}{\isasymphi}\ {\isacharparenleft}x\ {\isasymsqinter}\ y{\isacharparenright}\ {\isacharequal}\ le{\isacharprime}{\isachardot}meet\ {\isacharparenleft}{\isasymphi}\ x{\isacharparenright}\ {\isacharparenleft}{\isasymphi}\ y{\isacharparenright}{\isachardoublequoteclose}\isanewline
   634 \ \ \ \ \ \ \ \ {\isachardoublequoteopen}{\isasymphi}\ {\isacharparenleft}x\ {\isasymsqinter}\ y{\isacharparenright}\ {\isacharequal}\ le{\isacharprime}{\isachardot}meet\ {\isacharparenleft}{\isasymphi}\ x{\isacharparenright}\ {\isacharparenleft}{\isasymphi}\ y{\isacharparenright}{\isachardoublequoteclose}\isanewline
   635 \ \ \ \ \ \ \isakeyword{and}\ hom{\isacharunderscore}join{\isacharcolon}\ {\isachardoublequoteopen}{\isasymphi}\ {\isacharparenleft}x\ {\isasymsqunion}\ y{\isacharparenright}\ {\isacharequal}\ le{\isacharprime}{\isachardot}join\ {\isacharparenleft}{\isasymphi}\ x{\isacharparenright}\ {\isacharparenleft}{\isasymphi}\ y{\isacharparenright}{\isachardoublequoteclose}\isanewline
   635 \ \ \ \ \ \ \isakeyword{and}\ hom{\isacharunderscore}join{\isacharcolon}\isanewline
       
   636 \ \ \ \ \ \ \ \ {\isachardoublequoteopen}{\isasymphi}\ {\isacharparenleft}x\ {\isasymsqunion}\ y{\isacharparenright}\ {\isacharequal}\ le{\isacharprime}{\isachardot}join\ {\isacharparenleft}{\isasymphi}\ x{\isacharparenright}\ {\isacharparenleft}{\isasymphi}\ y{\isacharparenright}{\isachardoublequoteclose}\isanewline
       
   637 \isanewline
   636 \isanewline
   638 \ \ \isacommand{abbreviation}\isamarkupfalse%
   637 \ \ \isacommand{abbreviation}\isamarkupfalse%
   639 \ {\isacharparenleft}\isakeyword{in}\ lattice{\isacharunderscore}hom{\isacharparenright}\isanewline
   638 \ {\isacharparenleft}\isakeyword{in}\ lattice{\isacharunderscore}hom{\isacharparenright}\isanewline
   640 \ \ \ \ meet{\isacharprime}\ {\isacharparenleft}\isakeyword{infixl}\ {\isachardoublequoteopen}{\isasymsqinter}{\isacharprime}{\isacharprime}{\isachardoublequoteclose}\ {\isadigit{5}}{\isadigit{0}}{\isacharparenright}\ \isakeyword{where}\ {\isachardoublequoteopen}meet{\isacharprime}\ {\isasymequiv}\ le{\isacharprime}{\isachardot}meet{\isachardoublequoteclose}\isanewline
   639 \ \ \ \ meet{\isacharprime}\ {\isacharparenleft}\isakeyword{infixl}\ {\isachardoublequoteopen}{\isasymsqinter}{\isacharprime}{\isacharprime}{\isachardoublequoteclose}\ {\isadigit{5}}{\isadigit{0}}{\isacharparenright}\ \isakeyword{where}\ {\isachardoublequoteopen}meet{\isacharprime}\ {\isasymequiv}\ le{\isacharprime}{\isachardot}meet{\isachardoublequoteclose}\isanewline
   641 \ \ \isacommand{abbreviation}\isamarkupfalse%
   640 \ \ \isacommand{abbreviation}\isamarkupfalse%
   646 \end{isamarkuptext}%
   645 \end{isamarkuptext}%
   647 \isamarkuptrue%
   646 \isamarkuptrue%
   648 \ \ \isacommand{locale}\isamarkupfalse%
   647 \ \ \isacommand{locale}\isamarkupfalse%
   649 \ lattice{\isacharunderscore}end\ {\isacharequal}\ lattice{\isacharunderscore}hom\ {\isacharunderscore}\ le%
   648 \ lattice{\isacharunderscore}end\ {\isacharequal}\ lattice{\isacharunderscore}hom\ {\isacharunderscore}\ le%
   650 \begin{isamarkuptext}%
   649 \begin{isamarkuptext}%
   651 In this declaration, the first parameter of \isa{lattice{\isacharunderscore}hom}, \isa{le}, is untouched and then used to instantiate
   650 In this declaration, the first parameter of \isa{lattice{\isacharunderscore}hom}, \isa{le}, is untouched and is then used to instantiate
   652   the second parameter.  Its concrete syntax is preserved.%
   651   the second parameter.  Its concrete syntax is preserved.%
   653 \end{isamarkuptext}%
   652 \end{isamarkuptext}%
   654 \isamarkuptrue%
   653 \isamarkuptrue%
   655 %
   654 %
   656 \begin{isamarkuptext}%
   655 \begin{isamarkuptext}%
   738 \endisadelimproof
   737 \endisadelimproof
   739 %
   738 %
   740 \begin{isamarkuptext}%
   739 \begin{isamarkuptext}%
   741 Theorems and other declarations --- syntax, in particular --- from
   740 Theorems and other declarations --- syntax, in particular --- from
   742   the locale \isa{order{\isacharunderscore}preserving} are now active in \isa{lattice{\isacharunderscore}hom}, for example
   741   the locale \isa{order{\isacharunderscore}preserving} are now active in \isa{lattice{\isacharunderscore}hom}, for example
   743 
   742   \isa{hom{\isacharunderscore}le}:
   744   \isa{le{\isacharprime}{\isachardot}less{\isacharunderscore}le{\isacharunderscore}trans}:
   743   \begin{isabelle}%
   745   \isa{{\isasymlbrakk}{\isacharquery}x\ {\isasymprec}\ {\isacharquery}y{\isacharsemicolon}\ {\isacharquery}y\ {\isasympreceq}\ {\isacharquery}z{\isasymrbrakk}\ {\isasymLongrightarrow}\ {\isacharquery}x\ {\isasymprec}\ {\isacharquery}z}%
   744 \ \ {\isacharquery}x\ {\isasymsqsubseteq}\ {\isacharquery}y\ {\isasymLongrightarrow}\ {\isasymphi}\ {\isacharquery}x\ {\isasympreceq}\ {\isasymphi}\ {\isacharquery}y%
       
   745 \end{isabelle}%
   746 \end{isamarkuptext}%
   746 \end{isamarkuptext}%
   747 \isamarkuptrue%
   747 \isamarkuptrue%
   748 %
   748 %
   749 \isamarkupsection{Further Reading%
   749 \isamarkupsection{Further Reading%
   750 }
   750 }
   870   & \textbf{print\_locale} [ ``\textbf{!}'' ] \textit{locale} \\
   870   & \textbf{print\_locale} [ ``\textbf{!}'' ] \textit{locale} \\
   871   & | & \textbf{print\_locales} 
   871   & | & \textbf{print\_locales} 
   872 \end{tabular}
   872 \end{tabular}
   873 \end{center}
   873 \end{center}
   874 \hrule
   874 \hrule
   875 \caption{Syntax of Locale Commands (abridged).}
   875 \caption{Syntax of Locale Commands.}
   876 \label{tab:commands}
   876 \label{tab:commands}
   877 \end{table}%
   877 \end{table}%
   878 \end{isamarkuptext}%
   878 \end{isamarkuptext}%
   879 \isamarkuptrue%
   879 \isamarkuptrue%
   880 %
   880 %