ProgTutorial/Essential.thy
changeset 418 1d1e4cda8c54
parent 416 c6b5d1e25cdd
child 423 0a25b35178c3
--- a/ProgTutorial/Essential.thy	Thu Feb 11 10:44:50 2010 +0100
+++ b/ProgTutorial/Essential.thy	Sun Mar 07 21:15:05 2010 +0100
@@ -39,7 +39,7 @@
   @{ML_response [display,gray] 
 "@{term \"(a::nat) + b = c\"}" 
 "Const (\"op =\", \<dots>) $ 
-  (Const (\"Algebras.plus_class.plus\", \<dots>) $ \<dots> $ \<dots>) $ \<dots>"}
+  (Const (\"Groups.plus_class.plus\", \<dots>) $ \<dots> $ \<dots>) $ \<dots>"}
 
   constructs the term @{term "(a::nat) + b = c"}. The resulting term is printed using 
   the internal representation corresponding to the datatype @{ML_type_ind "term"}, 
@@ -533,8 +533,8 @@
   \mbox{@{text "(op *)"}}:
 
   @{ML_response [display,gray] "(@{term \"0::nat\"}, @{term \"(op *)\"})" 
- "(Const (\"Algebras.zero_class.zero\", \<dots>), 
- Const (\"Algebras.times_class.times\", \<dots>))"}
+ "(Const (\"Groups.zero_class.zero\", \<dots>), 
+ Const (\"Groups.times_class.times\", \<dots>))"}
 
   While you could use the complete name, for example 
   @{ML "Const (\"List.list.Nil\", some_type)" for some_type}, for referring to or
@@ -770,6 +770,9 @@
   assumption about the sorts, they are incomparable.
 *}
 
+class s1
+class s2 
+
 ML{*val (tyenv, index) = let
   val ty1 = @{typ_pat "?'a::s1"}
   val ty2 = @{typ_pat "?'b::s2"}
@@ -1639,26 +1642,26 @@
   stated using object logic connectives, while theorems using the connectives 
   from the meta logic are more convenient for reasoning. Therefore there are
   some build in functions which help with these transformations. The function 
-  @{ML_ind rulify in ObjectLogic} 
+  @{ML_ind rulify in Object_Logic} 
   replaces all object connectives by equivalents in the meta logic. For example
 
   @{ML_response_fake [display, gray]
-  "ObjectLogic.rulify @{thm foo_test2}"
+  "Object_Logic.rulify @{thm foo_test2}"
   "\<lbrakk>?A; ?B\<rbrakk> \<Longrightarrow> ?C"}
 
   The transformation in the other direction can be achieved with function
-  @{ML_ind atomize in ObjectLogic} and the following code.
+  @{ML_ind atomize in Object_Logic} and the following code.
 
   @{ML_response_fake [display,gray]
   "let
   val thm = @{thm foo_test1}
-  val meta_eq = ObjectLogic.atomize (cprop_of thm)
+  val meta_eq = Object_Logic.atomize (cprop_of thm)
 in
   MetaSimplifier.rewrite_rule [meta_eq] thm
 end"
   "?A \<longrightarrow> ?B \<longrightarrow> ?C"}
 
-  In this code the function @{ML atomize in ObjectLogic} produces 
+  In this code the function @{ML atomize in Object_Logic} produces 
   a meta-equation between the given theorem and the theorem transformed
   into the object logic. The result is the theorem with object logic 
   connectives. However, in order to completely transform a theorem
@@ -1676,7 +1679,7 @@
 ML{*fun atomize_thm thm =
 let
   val thm' = forall_intr_vars thm
-  val thm'' = ObjectLogic.atomize (cprop_of thm')
+  val thm'' = Object_Logic.atomize (cprop_of thm')
 in
   MetaSimplifier.rewrite_rule [thm''] thm'
 end*}
@@ -1688,8 +1691,6 @@
   "atomize_thm @{thm list.induct}"
   "\<forall>P list. P [] \<longrightarrow> (\<forall>a list. P list \<longrightarrow> P (a # list)) \<longrightarrow> P list"}
 
-  \footnote{\bf FIXME: say someting about @{ML_ind standard in Drule}.}
-
   Theorems can also be produced from terms by giving an explicit proof. 
   One way to achieve this is by using the function @{ML_ind prove in Goal}
   in the structure @{ML_struct Goal}. For example below we use this function