store deflation thms for map functions in theory data
authorhuffman
Sun, 28 Feb 2010 18:33:57 -0800
changeset 35479 dffffe36344a
parent 35478 90dd1d63ae54
child 35480 7a1f285cad25
store deflation thms for map functions in theory data
src/HOLCF/Powerdomains.thy
src/HOLCF/Representable.thy
src/HOLCF/Tools/Domain/domain_isomorphism.ML
src/HOLCF/ex/Strict_Fun.thy
--- a/src/HOLCF/Powerdomains.thy	Sun Feb 28 18:12:08 2010 -0800
+++ b/src/HOLCF/Powerdomains.thy	Sun Feb 28 18:33:57 2010 -0800
@@ -298,13 +298,16 @@
 setup {*
   fold Domain_Isomorphism.add_type_constructor
     [(@{type_name "upper_pd"}, @{term upper_defl}, @{const_name upper_map},
-        @{thm REP_upper}, @{thm isodefl_upper}, @{thm upper_map_ID}),
+        @{thm REP_upper}, @{thm isodefl_upper}, @{thm upper_map_ID},
+          @{thm deflation_upper_map}),
 
      (@{type_name "lower_pd"}, @{term lower_defl}, @{const_name lower_map},
-        @{thm REP_lower}, @{thm isodefl_lower}, @{thm lower_map_ID}),
+        @{thm REP_lower}, @{thm isodefl_lower}, @{thm lower_map_ID},
+          @{thm deflation_lower_map}),
 
      (@{type_name "convex_pd"}, @{term convex_defl}, @{const_name convex_map},
-        @{thm REP_convex}, @{thm isodefl_convex}, @{thm convex_map_ID})]
+        @{thm REP_convex}, @{thm isodefl_convex}, @{thm convex_map_ID},
+          @{thm deflation_convex_map})]
 *}
 
 end
--- a/src/HOLCF/Representable.thy	Sun Feb 28 18:12:08 2010 -0800
+++ b/src/HOLCF/Representable.thy	Sun Feb 28 18:33:57 2010 -0800
@@ -755,20 +755,20 @@
 
 setup {*
   fold Domain_Isomorphism.add_type_constructor
-    [(@{type_name "->"}, @{term cfun_defl}, @{const_name cfun_map},
-        @{thm REP_cfun}, @{thm isodefl_cfun}, @{thm cfun_map_ID}),
+    [(@{type_name "->"}, @{term cfun_defl}, @{const_name cfun_map}, @{thm REP_cfun},
+        @{thm isodefl_cfun}, @{thm cfun_map_ID}, @{thm deflation_cfun_map}),
 
-     (@{type_name "++"}, @{term ssum_defl}, @{const_name ssum_map},
-        @{thm REP_ssum}, @{thm isodefl_ssum}, @{thm ssum_map_ID}),
+     (@{type_name "++"}, @{term ssum_defl}, @{const_name ssum_map}, @{thm REP_ssum},
+        @{thm isodefl_ssum}, @{thm ssum_map_ID}, @{thm deflation_ssum_map}),
 
-     (@{type_name "**"}, @{term sprod_defl}, @{const_name sprod_map},
-        @{thm REP_sprod}, @{thm isodefl_sprod}, @{thm sprod_map_ID}),
+     (@{type_name "**"}, @{term sprod_defl}, @{const_name sprod_map}, @{thm REP_sprod},
+        @{thm isodefl_sprod}, @{thm sprod_map_ID}, @{thm deflation_sprod_map}),
 
-     (@{type_name "*"}, @{term cprod_defl}, @{const_name cprod_map},
-        @{thm REP_cprod}, @{thm isodefl_cprod}, @{thm cprod_map_ID}),
+     (@{type_name "*"}, @{term cprod_defl}, @{const_name cprod_map}, @{thm REP_cprod},
+        @{thm isodefl_cprod}, @{thm cprod_map_ID}, @{thm deflation_cprod_map}),
 
-     (@{type_name "u"}, @{term u_defl}, @{const_name u_map},
-        @{thm REP_up}, @{thm isodefl_u}, @{thm u_map_ID})]
+     (@{type_name "u"}, @{term u_defl}, @{const_name u_map}, @{thm REP_up},
+        @{thm isodefl_u}, @{thm u_map_ID}, @{thm deflation_u_map})]
 *}
 
 end
--- a/src/HOLCF/Tools/Domain/domain_isomorphism.ML	Sun Feb 28 18:12:08 2010 -0800
+++ b/src/HOLCF/Tools/Domain/domain_isomorphism.ML	Sun Feb 28 18:33:57 2010 -0800
@@ -22,7 +22,7 @@
     (string list * binding * mixfix * string * (binding * binding) option) list
       -> theory -> theory
   val add_type_constructor:
-    (string * term * string * thm  * thm * thm) -> theory -> theory
+    (string * term * string * thm  * thm * thm * thm) -> theory -> theory
   val get_map_tab:
     theory -> string Symtab.table
 end;
@@ -58,37 +58,31 @@
   fun merge data = Symtab.merge (K true) data;
 );
 
-structure RepData = Theory_Data
-(
-  type T = thm list;
-  val empty = [];
-  val extend = I;
-  val merge = Thm.merge_thms;
-);
-
-structure IsodeflData = Theory_Data
-(
+structure Thm_List : THEORY_DATA_ARGS =
+struct
   type T = thm list;
   val empty = [];
   val extend = I;
   val merge = Thm.merge_thms;
-);
+end;
+
+structure RepData = Theory_Data (Thm_List);
 
-structure MapIdData = Theory_Data
-(
-  type T = thm list;
-  val empty = [];
-  val extend = I;
-  val merge = Thm.merge_thms;
-);
+structure IsodeflData = Theory_Data (Thm_List);
+
+structure MapIdData = Theory_Data (Thm_List);
+
+structure DeflMapData = Theory_Data (Thm_List);
 
 fun add_type_constructor
-  (tname, defl_const, map_name, REP_thm, isodefl_thm, map_ID_thm) =
+  (tname, defl_const, map_name, REP_thm,
+   isodefl_thm, map_ID_thm, defl_map_thm) =
     DeflData.map (Symtab.insert (K true) (tname, defl_const))
     #> MapData.map (Symtab.insert (K true) (tname, map_name))
     #> RepData.map (Thm.add_thm REP_thm)
     #> IsodeflData.map (Thm.add_thm isodefl_thm)
-    #> MapIdData.map (Thm.add_thm map_ID_thm);
+    #> MapIdData.map (Thm.add_thm map_ID_thm)
+    #> DeflMapData.map (Thm.add_thm defl_map_thm);
 
 val get_map_tab = MapData.get;
 
--- a/src/HOLCF/ex/Strict_Fun.thy	Sun Feb 28 18:12:08 2010 -0800
+++ b/src/HOLCF/ex/Strict_Fun.thy	Sun Feb 28 18:33:57 2010 -0800
@@ -232,8 +232,8 @@
 
 setup {*
   Domain_Isomorphism.add_type_constructor
-    (@{type_name "sfun"}, @{term sfun_defl}, @{const_name sfun_map},
-        @{thm REP_sfun}, @{thm isodefl_sfun}, @{thm sfun_map_ID})
+    (@{type_name "sfun"}, @{term sfun_defl}, @{const_name sfun_map}, @{thm REP_sfun},
+       @{thm isodefl_sfun}, @{thm sfun_map_ID}, @{thm deflation_sfun_map})
 *}
 
 end