
diff -r 070d539ba403 -r ab6f04807005 doc-src/IsarImplementation/Thy/ML.thy
--- a/doc-src/IsarImplementation/Thy/ML.thy	Tue Jul 31 19:26:35 2007 +0200
+++ b/doc-src/IsarImplementation/Thy/ML.thy	Tue Jul 31 19:38:33 2007 +0200
@@ -165,8 +165,8 @@
 
   Any user-code that works relatively to the present background theory
   is already safe.  Contextual data may be easily stored within the
-  theory or proof context, thanks to the generic context data concept
-  of Isabelle/Isar (see \secref{sec:context-data}).  This greatly
+  theory or proof context, thanks to the generic data concept of
+  Isabelle/Isar (see \secref{sec:context-data}).  This greatly
   diminishes the demand for global state information in the first
   place.
 
@@ -194,10 +194,10 @@
   values, without any special precautions for multithreading.  Apart
   from the fully general functors for theory and proof data (see
   \secref{sec:context-data}) there are drop-in replacements that
-  emulate primitive references for the most basic cases of
-  \emph{configuration options} for type @{ML_type "bool"}/@{ML_type
-  "int"}/@{ML_type "string"} (see structure @{ML_struct ConfigOption})
-  and lists of theorems (see functor @{ML_functor NamedThmsFun}).
+  emulate primitive references for common cases of \emph{configuration
+  options} for type @{ML_type "bool"}/@{ML_type "int"}/@{ML_type
+  "string"} (see structure @{ML_struct ConfigOption}) and lists of
+  theorems (see functor @{ML_functor NamedThmsFun}).
 
   \item Keep components with local state information
   \emph{re-entrant}.  Instead of poking initial values into (private)
@@ -214,15 +214,15 @@
   example is the @{ML show_types} flag, which tells the pretty printer
   to output explicit type information for terms.  Such flags usually
   do not affect the functionality of the core system, but only the
-  output being presented to the user.
+  view being presented to the user.
 
   Occasionally, such global process flags are treated like implicit
   arguments to certain operations, by using the @{ML setmp} combinator
-  for safe temporary assignment.  Traditionally its main purpose was
-  to ensure proper recovery of the original value when exceptions are
-  raised in the body.  Now the functionality is extended to enter the
-  \emph{critical section}, with its usual potential of degrading
-  parallelism.
+  for safe temporary assignment.  Its traditional purpose was to
+  ensure proper recovery of the original value when exceptions are
+  raised in the body, now the functionality is extended to enter the
+  \emph{critical section} (with its usual potential of degrading
+  parallelism).
 
   Note that recovery of plain value passing semantics via @{ML
   setmp}~@{text "ref value"} assumes that this @{text "ref"} is
@@ -247,10 +247,10 @@
 
   Recall that in an open ``LCF-style'' system like Isabelle/Isar, the
   user participates in constructing the overall environment.  This
-  means that state-based facilities offered by one component need to
-  be used with caution later on.  Minimizing critical elements, by
-  staying within the plain value-oriented view relative to theory or
-  proof contexts most of the time, will also reduce the chance of
+  means that state-based facilities offered by one component will
+  require special caution later on.  So minimizing critical elements,
+  by staying within the plain value-oriented view relative to theory
+  or proof contexts most of the time, will also reduce the chance of
   mishaps occurring to end-users.
 *}
 
@@ -264,9 +264,10 @@
   \begin{description}
 
   \item @{ML NAMED_CRITICAL}~@{text "name f"} evaluates @{text "f ()"}
-  while staying within the critical section.  The @{text "name"}
-  argument serves for diagnostic output and might help to determine
-  sources of congestion.
+  while staying within the critical section of Isabelle/Isar.  No
+  other thread may do so at the same time, but non-critical parallel
+  execution will continue.  The @{text "name"} argument serves for
+  diagnostic purposes and might help to spot sources of congestion.
 
   \item @{ML CRITICAL} is the same as @{ML NAMED_CRITICAL} with empty
   name argument.




