ProgTutorial/Solutions.thy
changeset 517 d8c376662bb4
parent 469 7a558c5119b2
child 544 501491d56798
--- a/ProgTutorial/Solutions.thy	Mon Apr 30 12:36:32 2012 +0100
+++ b/ProgTutorial/Solutions.thy	Mon Apr 30 14:43:52 2012 +0100
@@ -2,19 +2,11 @@
 imports First_Steps "Recipes/Timing"
 begin
 
-(*<*)
-setup{*
-open_file_with_prelude 
-  "Solutions_Code.thy"
-  ["theory Solutions", "imports First_Steps", "begin"]
-*}
-(*>*)
-
 chapter {* Solutions to Most Exercises\label{ch:solutions} *}
 
 text {* \solution{fun:revsum} *}
 
-ML{*fun rev_sum 
+ML %grayML{*fun rev_sum 
   ((p as Const (@{const_name plus}, _)) $ t $ u) = p $ u $ rev_sum t
   | rev_sum t = t *}
 
@@ -22,7 +14,7 @@
   An alternative solution using the function @{ML_ind mk_binop in HOLogic} is:
  *}
 
-ML{*fun rev_sum t =
+ML %grayML{*fun rev_sum t =
 let
   fun dest_sum (Const (@{const_name plus}, _) $ u $ u') = u' :: dest_sum u
     | dest_sum u = [u]
@@ -32,7 +24,7 @@
 
 text {* \solution{fun:makesum} *}
 
-ML{*fun make_sum t1 t2 =
+ML %grayML{*fun make_sum t1 t2 =
   HOLogic.mk_nat (HOLogic.dest_nat t1 + HOLogic.dest_nat t2) *}
 
 text {* \solution{fun:killqnt} *}
@@ -75,7 +67,7 @@
 
 text {* \solution{fun:makelist} *}
 
-ML{*fun mk_rev_upto i = 
+ML %grayML{*fun mk_rev_upto i = 
   1 upto i
   |> map (HOLogic.mk_number @{typ int})
   |> HOLogic.mk_list @{typ int}
@@ -83,7 +75,7 @@
 
 text {* \solution{ex:debruijn} *}
 
-ML{*fun P n = @{term "P::nat \<Rightarrow> bool"} $ (HOLogic.mk_number @{typ "nat"} n) 
+ML %grayML{*fun P n = @{term "P::nat \<Rightarrow> bool"} $ (HOLogic.mk_number @{typ "nat"} n) 
 
 fun rhs 1 = P 1
   | rhs n = HOLogic.mk_conj (P n, rhs (n - 1))
@@ -97,7 +89,7 @@
 
 text {* \solution{ex:scancmts} *}
 
-ML{*val any = Scan.one (Symbol.not_eof)
+ML %grayML{*val any = Scan.one (Symbol.not_eof)
 
 val scan_cmt =
 let
@@ -130,7 +122,7 @@
 
 text {* \solution{ex:contextfree} *}
 
-ML{*datatype expr = 
+ML %grayML{*datatype expr = 
    Number of int
  | Mult of expr * expr 
  | Add of expr * expr
@@ -217,7 +209,7 @@
   de Bruijn formulae from Exercise \ref{ex:debruijn}.
 *}
 
-ML{*fun de_bruijn_prove ctxt n =
+ML %grayML{*fun de_bruijn_prove ctxt n =
 let 
   val goal = HOLogic.mk_Trueprop (HOLogic.mk_imp (lhs n n, rhs n))
 in
@@ -229,11 +221,11 @@
   You can use this function to prove de Bruijn formulae.
 *}
 
-ML{*de_bruijn_prove @{context} 3 *}
+ML %grayML{*de_bruijn_prove @{context} 3 *}
 
 text {* \solution{ex:addsimproc} *}
 
-ML{*fun dest_sum term =
+ML %grayML{*fun dest_sum term =
   case term of 
     (@{term "(op +):: nat \<Rightarrow> nat \<Rightarrow> nat"} $ t1 $ t2) =>
         (snd (HOLogic.dest_number t1), snd (HOLogic.dest_number t2))
@@ -279,7 +271,7 @@
   exercise.
 *}
 
-ML{*fun add_simple_conv ctxt ctrm =
+ML %grayML{*fun add_simple_conv ctxt ctrm =
 let
   val trm = Thm.term_of ctrm
 in
@@ -323,7 +315,7 @@
   additions.
 *}
 
-ML{*fun term_tree n =
+ML %grayML{*fun term_tree n =
 let
   val count = Unsynchronized.ref 0; 
 
@@ -347,7 +339,7 @@
   produced by @{ML term_tree} filled in.
 *}
 
-ML{*fun goal n = HOLogic.mk_Trueprop (@{term "P::nat\<Rightarrow> bool"} $ (term_tree n))*}
+ML %grayML{*fun goal n = HOLogic.mk_Trueprop (@{term "P::nat\<Rightarrow> bool"} $ (term_tree n))*}
 
 text {*
   Note that the goal needs to be wrapped in a @{term "Trueprop"}. Next we define
@@ -356,7 +348,7 @@
   then prove the remaining goal using @{ML "cheat_tac" in Skip_Proof}.
 *}
 
-ML{*local
+ML %grayML{*local
   fun mk_tac tac = 
         timing_wrapper (EVERY1 [tac, K (Skip_Proof.cheat_tac @{theory})])
 in
@@ -369,7 +361,7 @@
   This is all we need to let the conversion run against the simproc:
 *}
 
-ML{*val _ = Goal.prove @{context} [] [] (goal 8) (K c_tac)
+ML %grayML{*val _ = Goal.prove @{context} [] [] (goal 8) (K c_tac)
 val _ = Goal.prove @{context} [] [] (goal 8) (K s_tac)*}
 
 text {*