tuning
authorblanchet
Thu, 26 Sep 2013 10:20:23 +0200
changeset 53908 54afdc258272
parent 53907 d177eb989c65
child 53909 7c10e75e62b3
tuning
src/HOL/BNF/Tools/bnf_ctr_sugar.ML
src/HOL/BNF/Tools/bnf_fp_rec_sugar_tactics.ML
--- a/src/HOL/BNF/Tools/bnf_ctr_sugar.ML	Thu Sep 26 10:00:07 2013 +0200
+++ b/src/HOL/BNF/Tools/bnf_ctr_sugar.ML	Thu Sep 26 10:20:23 2013 +0200
@@ -272,13 +272,12 @@
     val sel_defaultss =
       pad_list [] n (map (map (apsnd (prep_term no_defs_lthy))) raw_sel_defaultss);
 
-    val Type (dataT_name, As0) = body_type (fastype_of (hd ctrs0));
-    val data_b_name = Long_Name.base_name dataT_name;
-    val data_b = Binding.name data_b_name;
+    val Type (fcT_name, As0) = body_type (fastype_of (hd ctrs0));
+    val fc_b_name = Long_Name.base_name fcT_name;
+    val fc_b = Binding.name fc_b_name;
 
     fun qualify mandatory =
-      Binding.qualify mandatory data_b_name o
-      (rep_compat ? Binding.qualify false rep_compat_prefix);
+      Binding.qualify mandatory fc_b_name o (rep_compat ? Binding.qualify false rep_compat_prefix);
 
     fun dest_TFree_or_TVar (TFree p) = p
       | dest_TFree_or_TVar (TVar ((s, _), S)) = (s, S)
@@ -291,7 +290,7 @@
 
     val As = map2 (resort_tfree o snd o dest_TFree_or_TVar) As0 unsorted_As;
 
-    val dataT = Type (dataT_name, As);
+    val fcT = Type (fcT_name, As);
     val ctrs = map (mk_ctr As) ctrs0;
     val ctr_Tss = map (binder_types o fastype_of) ctrs;
 
@@ -343,7 +342,7 @@
       ||>> mk_Freess "y" ctr_Tss
       ||>> mk_Frees "f" case_Ts
       ||>> mk_Frees "g" case_Ts
-      ||>> (apfst (map (rpair dataT)) oo Variable.variant_fixes) [data_b_name, data_b_name ^ "'"]
+      ||>> (apfst (map (rpair fcT)) oo Variable.variant_fixes) [fc_b_name, fc_b_name ^ "'"]
       ||>> mk_Frees "z" [B]
       ||>> yield_singleton (apfst (op ~~) oo mk_Frees' "P") HOLogic.boolT;
 
@@ -366,7 +365,7 @@
       qualify false
         (if Binding.is_empty raw_case_binding orelse
             Binding.eq_name (raw_case_binding, standard_binding) then
-           Binding.suffix_name ("_" ^ caseN) data_b
+           Binding.suffix_name ("_" ^ caseN) fc_b
          else
            raw_case_binding);
 
@@ -422,7 +421,7 @@
         (true, [], [], [], [], [], [], [], [], [], lthy)
       else
         let
-          fun disc_free b = Free (Binding.name_of b, mk_pred1T dataT);
+          fun disc_free b = Free (Binding.name_of b, mk_pred1T fcT);
 
           fun disc_spec b exist_xs_u_eq_ctr = mk_Trueprop_eq (disc_free b $ u, exist_xs_u_eq_ctr);
 
@@ -453,7 +452,7 @@
                     quote (Binding.name_of b) ^ ": " ^ quote (Syntax.string_of_typ lthy T) ^ " vs. "
                     ^ quote (Syntax.string_of_typ lthy T')));
             in
-              mk_Trueprop_eq (Free (Binding.name_of b, dataT --> T) $ u,
+              mk_Trueprop_eq (Free (Binding.name_of b, fcT --> T) $ u,
                 Term.list_comb (mk_case As T case0, mk_sel_case_args b proto_sels T) $ u)
             end;
 
@@ -822,7 +821,7 @@
           end;
 
         val exhaust_case_names_attr = Attrib.internal (K (Rule_Cases.case_names exhaust_cases));
-        val cases_type_attr = Attrib.internal (K (Induct.cases_type dataT_name));
+        val cases_type_attr = Attrib.internal (K (Induct.cases_type fcT_name));
 
         val notes =
           [(caseN, case_thms, code_nitpick_simp_simp_attrs),
@@ -866,7 +865,7 @@
                (fn phi => Case_Translation.register
                   (Morphism.term phi casex) (map (Morphism.term phi) ctrs)))
          |> Local_Theory.notes (notes' @ notes) |> snd
-         |> register_ctr_sugar dataT_name ctr_sugar)
+         |> register_ctr_sugar fcT_name ctr_sugar)
       end;
   in
     (goalss, after_qed, lthy')
--- a/src/HOL/BNF/Tools/bnf_fp_rec_sugar_tactics.ML	Thu Sep 26 10:00:07 2013 +0200
+++ b/src/HOL/BNF/Tools/bnf_fp_rec_sugar_tactics.ML	Thu Sep 26 10:20:23 2013 +0200
@@ -80,6 +80,8 @@
     (the_default (K all_tac) (Option.map rtac maybe_disc_f)) THEN' REPEAT_DETERM_N m o atac) THEN
   unfold_thms_tac ctxt sel_fs THEN HEADGOAL (rtac refl);
 
+(* TODO: do we need "collapses"? "distincts"? *)
+(* TODO: reduce code duplication with selector tactic above *)
 fun mk_primcorec_code_of_ctr_single_tac ctxt distincts discIs collapses splits split_asms m f_ctr =
   HEADGOAL (REPEAT o (resolve_tac split_connectI ORELSE' split_tac (split_if :: splits))) THEN
   mk_primcorec_prelude ctxt [] (f_ctr RS trans) THEN