added pred_def, rel_eq_onp tuned
authorkuncar
Tue, 18 Nov 2014 16:19:51 +0100
changeset 60216 ef4f0b5b925e
parent 60215 5fb4990dfc73
child 60217 40c63ffce97f
added pred_def, rel_eq_onp tuned
src/HOL/Tools/Lifting/lifting_bnf.ML
src/HOL/Tools/Transfer/transfer.ML
src/HOL/Tools/Transfer/transfer_bnf.ML
--- a/src/HOL/Tools/Lifting/lifting_bnf.ML	Sun May 03 00:01:10 2015 +0200
+++ b/src/HOL/Tools/Lifting/lifting_bnf.ML	Tue Nov 18 16:19:51 2014 +0100
@@ -87,9 +87,8 @@
 
 fun relator_eq_onp bnf ctxt =
   let
-    val relator_eq_onp_thm = lookup_defined_pred_data ctxt (type_name_of_bnf bnf)
-      |> Transfer.rel_eq_onp |> Conv.fconv_rule (HOLogic.Trueprop_conv (Conv.arg1_conv 
-          (Raw_Simplifier.rewrite ctxt false @{thms eq_onp_top_eq_eq[THEN eq_reflection]})))
+    val relator_eq_onp_thm = lookup_defined_pred_data ctxt (type_name_of_bnf bnf) 
+      |> Transfer.rel_eq_onp
   in
     [((Binding.empty, []), [([relator_eq_onp_thm], @{attributes [relator_eq_onp]})])]    
   end
--- a/src/HOL/Tools/Transfer/transfer.ML	Sun May 03 00:01:10 2015 +0200
+++ b/src/HOL/Tools/Transfer/transfer.ML	Tue Nov 18 16:19:51 2014 +0100
@@ -9,9 +9,12 @@
 sig
   type pred_data
   val rel_eq_onp: pred_data -> thm
+  val rel_eq_onp_with_tops: pred_data -> thm
+  val pred_def: pred_data -> thm
 
   val bottom_rewr_conv: thm list -> conv
   val top_rewr_conv: thm list -> conv
+  val top_sweep_rewr_conv: thm list -> conv
 
   val prep_conv: conv
   val get_transfer_raw: Proof.context -> thm list
@@ -46,15 +49,23 @@
 structure Transfer : TRANSFER =
 struct
 
+fun bottom_rewr_conv rewrs = Conv.bottom_conv (K (Conv.try_conv (Conv.rewrs_conv rewrs))) @{context}
+fun top_rewr_conv rewrs = Conv.top_conv (K (Conv.try_conv (Conv.rewrs_conv rewrs))) @{context}
+fun top_sweep_rewr_conv rewrs = Conv.top_sweep_conv (K (Conv.rewrs_conv rewrs)) @{context}
+
 (** Theory Data **)
 
 val compound_xhs_empty_net = Item_Net.init (Thm.eq_thm_prop o apply2 snd) (single o fst);
 val rewr_rules = Item_Net.init Thm.eq_thm_prop (single o fst o HOLogic.dest_eq
   o HOLogic.dest_Trueprop o Thm.concl_of);
 
-type pred_data = {rel_eq_onp: thm}
+type pred_data = {pred_def:thm, rel_eq_onp: thm}
 
 val rel_eq_onp: pred_data -> thm = #rel_eq_onp
+val rel_eq_onp_with_tops: pred_data -> thm = (Conv.fconv_rule (HOLogic.Trueprop_conv (Conv.arg1_conv
+  (top_sweep_rewr_conv @{thms eq_onp_top_eq_eq[symmetric, THEN eq_reflection]}))))
+  o #rel_eq_onp
+val pred_def: pred_data -> thm = #pred_def
 
 structure Data = Generic_Data
 (
@@ -182,9 +193,6 @@
 
 (** Conversions **)
 
-fun bottom_rewr_conv rewrs = Conv.bottom_conv (K (Conv.try_conv (Conv.rewrs_conv rewrs))) @{context}
-fun top_rewr_conv rewrs = Conv.top_conv (K (Conv.try_conv (Conv.rewrs_conv rewrs))) @{context}
-
 fun transfer_rel_conv conv =
   Conv.concl_conv ~1 (HOLogic.Trueprop_conv (Conv.fun2_conv (Conv.arg_conv conv)))
 
@@ -788,7 +796,9 @@
 val untransferred_attribute_parser =
   Attrib.thms >> untransferred_attribute
 
-fun morph_pred_data phi {rel_eq_onp} = {rel_eq_onp = Morphism.thm phi rel_eq_onp}
+fun morph_pred_data phi {pred_def, rel_eq_onp} = 
+  {pred_def =  Morphism.thm phi pred_def,
+  rel_eq_onp = Morphism.thm phi rel_eq_onp}
 
 fun lookup_pred_data ctxt type_name = Symtab.lookup (get_pred_data ctxt) type_name
   |> Option.map (morph_pred_data (Morphism.transfer_morphism (Proof_Context.theory_of ctxt)))
--- a/src/HOL/Tools/Transfer/transfer_bnf.ML	Sun May 03 00:01:10 2015 +0200
+++ b/src/HOL/Tools/Transfer/transfer_bnf.ML	Tue Nov 18 16:19:51 2014 +0100
@@ -283,10 +283,7 @@
     fun qualify defname suffix = Binding.qualified true suffix defname
     val Domainp_rel_thm_name = qualify (base_name_of_bnf bnf) "Domainp_rel"
     val rel_eq_onp_thm_name = qualify (base_name_of_bnf bnf) "rel_eq_onp"
-    val rel_eq_onp_internal = Conv.fconv_rule (HOLogic.Trueprop_conv (Conv.arg1_conv
-      (Raw_Simplifier.rewrite lthy false @{thms eq_onp_top_eq_eq[symmetric, THEN eq_reflection]})))
-        rel_eq_onp
-    val pred_data = {rel_eq_onp = rel_eq_onp_internal}
+    val pred_data = {pred_def = pred_def, rel_eq_onp = rel_eq_onp}
     val type_name = type_name_of_bnf bnf
     val relator_domain_attr = @{attributes [relator_domain]}
     val notes = [((Domainp_rel_thm_name, []), [([Domainp_rel], relator_domain_attr)]),
@@ -340,7 +337,7 @@
         map type_name_of_bnf (#fp_nesting_bnfs fp_sugar)
       @ map type_name_of_bnf (#live_nesting_bnfs fp_sugar)
       @ map type_name_of_bnf (#bnfs (#fp_res fp_sugar)))
-    val eq_onps = map (Transfer.rel_eq_onp o lookup_defined_pred_data lthy) involved_types
+    val eq_onps = map (Transfer.rel_eq_onp_with_tops o lookup_defined_pred_data lthy) involved_types
     val old_lthy = lthy
     val (As, lthy) = mk_TFrees' (map Type.sort_of_atyp (lives_of_fp fp_sugar)) lthy
     val predTs = map mk_pred1T As