diff -r 42a1c230daff -r 43df2d59fb98 ProgTutorial/General.thy --- a/ProgTutorial/General.thy Tue Oct 20 12:25:20 2009 +0200 +++ b/ProgTutorial/General.thy Thu Oct 22 02:03:14 2009 +0200 @@ -714,10 +714,11 @@ "let val natT = @{typ \"nat\"} val zero = @{term \"0::nat\"} + val plus = Const (@{const_name plus}, [natT, natT] ---> natT) in - cterm_of @{theory} - (Const (@{const_name plus}, [natT, natT] ---> natT) $ zero $ zero) -end" "0 + 0"} + cterm_of @{theory} (plus $ zero $ zero) +end" + "0 + 0"} In Isabelle not just terms need to be certified, but also types. For example, you obtain the certified type for the Isabelle type @{typ "nat \ bool"} on @@ -899,8 +900,7 @@ (type T = thm list val empty = [] val extend = I - val merge = K (op @) -) + val merge = K (op @)) fun update thm = Context.theory_map (MyThmList.map (fn thms => thm::thms))*} @@ -1254,8 +1254,7 @@ We can now install a the modified theorem style as follows *} -setup %gray {* -let +setup %gray {* let val parser = Scan.repeat Args.name fun action xs = K (rename_allq xs #> strip_allq) in @@ -1288,8 +1287,8 @@ text {* Theorem attributes are @{text "[symmetric]"}, @{text "[THEN \]"}, @{text "[simp]"} and so on. Such attributes are \emph{neither} tags \emph{nor} flags - annotated to theorems, but functions that do further processing once a - theorem is proved. In particular, it is not possible to find out + annotated to theorems, but functions that do further processing of + theorems. In particular, it is not possible to find out what are all theorems that have a given attribute in common, unless of course the function behind the attribute stores the theorems in a retrievable data structure. @@ -1306,9 +1305,9 @@ \end{isabelle} The theorem attributes fall roughly into two categories: the first category manipulates - the proved theorem (for example @{text "[symmetric]"} and @{text "[THEN \]"}), and the second - stores the proved theorem somewhere as data (for example @{text "[simp]"}, which adds - the theorem to the current simpset). + theorems (for example @{text "[symmetric]"} and @{text "[THEN \]"}), and the second + stores theorems somewhere as data (for example @{text "[simp]"}, which adds + theorems to the current simpset). To explain how to write your own attribute, let us start with an extremely simple version of the attribute @{text "[symmetric]"}. The purpose of this attribute is @@ -1330,15 +1329,14 @@ using the Isabelle command \isacommand{attribute\_setup} as follows: *} -attribute_setup %gray my_sym = {* Scan.succeed my_symmetric *} - "applying the sym rule" +attribute_setup %gray my_sym = + {* Scan.succeed my_symmetric *} "applying the sym rule" text {* Inside the @{text "\ \ \"}, we have to specify a parser for the theorem attribute. Since the attribute does not expect any further - arguments (unlike @{text "[THEN \]"}, for example), we use the parser @{ML - Scan.succeed}. Later on we will also consider attributes taking further - arguments. An example for the attribute @{text "[my_sym]"} is the proof + arguments (unlike @{text "[THEN \]"}, for instance), we use the parser @{ML + Scan.succeed}. An example for the attribute @{text "[my_sym]"} is the proof *} lemma test[my_sym]: "2 = Suc (Suc 0)" by simp @@ -1368,17 +1366,17 @@ "applying the sym rule" *} text {* - This gives a function from @{ML_type "Context.theory -> Context.theory"}, which + This gives a function from @{ML_type "theory -> theory"}, which can be used for example with \isacommand{setup}. As an example of a slightly more complicated theorem attribute, we implement our own version of @{text "[THEN \]"}. This attribute will take a list of theorems - as argument and resolve the proved theorem with this list (one theorem + as argument and resolve the theorem with this list (one theorem after another). The code for this attribute is *} ML{*fun MY_THEN thms = - Thm.rule_attribute (fn _ => fn thm => foldl ((op RS) o swap) thm thms)*} + Thm.rule_attribute (fn _ => fn thm => List.foldl ((op RS) o swap) thm thms)*} text {* where @{ML swap} swaps the components of a pair. The setup of this theorem @@ -1387,7 +1385,7 @@ *} attribute_setup %gray MY_THEN = {* Attrib.thms >> MY_THEN *} - "resolving the list of theorems with the proved theorem" + "resolving the list of theorems with the theorem" text {* You can, for example, use this theorem attribute to turn an equation into a @@ -1863,7 +1861,7 @@ a b"} - \footnote{\bf What happens with printing big formulae?} + \footnote{\bf FIXME: What happens with printing big formulae?}