diff -r fe10da5354a3 -r 5dcad9348e4d CookBook/FirstSteps.thy --- a/CookBook/FirstSteps.thy Sat Feb 07 14:21:33 2009 +0000 +++ b/CookBook/FirstSteps.thy Sun Feb 08 08:45:25 2009 +0000 @@ -116,8 +116,9 @@ @{ML_response_fake [display,gray] "if 0=1 then 1 else (error \"foo\")" "\"foo\""} - See leter on in Section~\ref{sec:printing} for information about printing - out data of type @{ML_type term}, @{ML_type cterm} and @{ML_type thm}. + Section~\ref{sec:printing} will give more information about printing + the main datas tructures of Isabelle, namely @{ML_type term}, @{ML_type cterm} + and @{ML_type thm}. *} @@ -173,7 +174,7 @@ current simpset. We get hold of the current simpset with the antiquotation @{text "@{simpset}"}. The function @{ML rep_ss in MetaSimplifier} returns a record containing all information about the simpset. The rules of a simpset are - stored in a \emph{discrimination net} (a datastructure for fast + stored in a \emph{discrimination net} (a data structure for fast indexing). From this net we can extract the entries using the function @{ML Net.entries}. @@ -244,7 +245,7 @@ Hint: The third term is already quite big, and the pretty printer may omit parts of it by default. If you want to see all of it, you - can use the following ML function to set the limit to a value high + can use the following ML-function to set the limit to a value high enough: @{ML [display,gray] "print_depth 50"} @@ -297,7 +298,7 @@ text {* The reason is that you cannot pass the arguments @{term P}, @{term Q} and - @{term "tau"} into an antiquotation. For example the following does \emph{not} work: + @{term "tau"} into an antiquotation. For example the following does \emph{not} work. *} ML{*fun make_wrong_imp P Q tau = @{prop "\x. P x \ Q x"} *} @@ -344,14 +345,16 @@ (FIXME: Is it useful to explain @{text "@{const_syntax}"}?) - Similarly, you occasionally need to construct types manually. For example - the function returning a function type is as follows: + Although to some extend types of terms can be inferred, there are many + situations where you need to construct types manually, especially + when defining constants. For example the function returning a function + type is as follows: *} ML{*fun make_fun_type tau1 tau2 = Type ("fun",[tau1,tau2]) *} -text {* This can be equally written as *} +text {* This can be equally written as: *} ML{*fun make_fun_type tau1 tau2 = tau1 --> tau2 *} @@ -483,7 +486,6 @@ val Qt = implies_elim Pt_implies_Qt (assume assm2); in - Qt |> implies_intr assm2 |> implies_intr assm1 @@ -520,20 +522,20 @@ section {* Theorem Attributes *} -section {* Printing Terms, CTerms and Theorems\label{sec:printing} *} +section {* Printing Terms and Theorems\label{sec:printing} *} text {* - During development, you will occationally feel the need to inspect terms, cterms - or theorems. Isabelle contains elaborate pretty-printing functions for that, but - for quick-and-dirty solutions they are way too unwieldy. A simple way to transform + During development, you often want to inspect terms, cterms + or theorems. Isabelle contains elaborate pretty-printing functions for printing them, + but for quick-and-dirty solutions they are far too unwieldy. A simple way to transform a term into a string is to use the function @{ML Syntax.string_of_term}. @{ML_response_fake [display,gray] "Syntax.string_of_term @{context} @{term \"1::nat\"}" "\"\\^E\\^Fterm\\^E\\^E\\^Fconst\\^Fname=HOL.one_class.one\\^E1\\^E\\^F\\^E\\^E\\^F\\^E\""} - This produces a string, though with printing directions encoded in it. The string - can be properly printed, when enclosed in a @{ML warning}. + This produces a string with some printing directions encoded in it. The string + can be properly printed by using @{ML warning} foe example. @{ML_response_fake [display,gray] "warning (Syntax.string_of_term @{context} @{term \"1::nat\"})" @@ -608,10 +610,10 @@ \begin{readmore} The most frequently used combinator are defined in the files @{ML_file "Pure/library.ML"} and @{ML_file "Pure/General/basics.ML"}. Also \isccite{sec:ML-linear-trans} - contains further information about them. + contains further information about combinators. \end{readmore} - The simplest combinator is @{ML I}, which is just the identity function. + The simplest combinator is @{ML I}, which is just the identity function defined as *} ML{*fun I x = x*} @@ -623,7 +625,7 @@ text {* @{ML K} ``wraps'' a function around the argument @{text "x"}. However, this function ignores its argument. As a result, @{ML K} defines a constant function - returning @{text x}. + always returning @{text x}. The next combinator is reverse application, @{ML "|>"}, defined as: *} @@ -641,7 +643,7 @@ |> (fn x => x + 4)*} text {* - which increments the argument @{text x} by 5. It does this by first incrementing + which increments its argument @{text x} by 5. It does this by first incrementing the argument by 1 (Line 2); then storing the result in a pair (Line 3); taking the first component of the pair (Line 4) and finally incrementing the first component by 4 (Line 5). This kind of cascading manipulations of values is quite