src/HOL/Tools/Ctr_Sugar/ctr_sugar.ML
changeset 59267 a61257c93d55
parent 59266 776964a0589f
child 59271 c448752e8b9d
equal deleted inserted replaced
59266:776964a0589f 59267:a61257c93d55
   448           else
   448           else
   449             sel)) (1 upto m) o pad_list Binding.empty m) ctrs0 ms raw_sel_bindingss;
   449             sel)) (1 upto m) o pad_list Binding.empty m) ctrs0 ms raw_sel_bindingss;
   450 
   450 
   451     val case_Ts = map (fn Ts => Ts ---> B) ctr_Tss;
   451     val case_Ts = map (fn Ts => Ts ---> B) ctr_Tss;
   452 
   452 
   453     val ((((((((([exh_y], (xss, xss')), yss), fs), gs), [h]), [u', v']), [w]), (p, p')), names_lthy) =
   453     val ((((((((([exh_y], (xss, xss')), yss), fs), gs), [h]), [u', v']), [w]), (p, p')),
       
   454         names_lthy) =
   454       no_defs_lthy
   455       no_defs_lthy
   455       |> mk_Frees "y" [fcT] (* for compatibility with "datatype_realizer.ML" *)
   456       |> mk_Frees "y" [fcT] (* for compatibility with "datatype_realizer.ML" *)
   456       ||>> mk_Freess' "x" ctr_Tss
   457       ||>> mk_Freess' "x" ctr_Tss
   457       ||>> mk_Freess "y" ctr_Tss
   458       ||>> mk_Freess "y" ctr_Tss
   458       ||>> mk_Frees "f" case_Ts
   459       ||>> mk_Frees "f" case_Ts
   667         map (map mk_goal) (mk_half_pairss (`I (xss ~~ xctrs)))
   668         map (map mk_goal) (mk_half_pairss (`I (xss ~~ xctrs)))
   668       end;
   669       end;
   669 
   670 
   670     val goalss = [exhaust_goal] :: inject_goalss @ half_distinct_goalss;
   671     val goalss = [exhaust_goal] :: inject_goalss @ half_distinct_goalss;
   671 
   672 
   672     fun after_qed thmss0 lthy =
   673     fun after_qed (thmss0 as [exhaust_thm] :: thmss) lthy =
   673       let
   674       let
   674         val [exhaust_thm] :: thmss = thmss0
       
   675         val ((inject_thms, inject_thmss), half_distinct_thmss) = chop n thmss |>> `flat;
   675         val ((inject_thms, inject_thmss), half_distinct_thmss) = chop n thmss |>> `flat;
   676 
   676 
   677         val rho_As = map (apply2 (certifyT lthy)) (map Logic.varifyT_global As ~~ As);
   677         val rho_As = map (apply2 (certifyT lthy)) (map Logic.varifyT_global As ~~ As);
   678 
   678 
   679         fun inst_thm t thm =
   679         fun inst_thm t thm =
  1069 
  1069 
  1070         val ctr_sugar =
  1070         val ctr_sugar =
  1071           {kind = kind, T = fcT, ctrs = ctrs, casex = casex, discs = discs, selss = selss,
  1071           {kind = kind, T = fcT, ctrs = ctrs, casex = casex, discs = discs, selss = selss,
  1072            exhaust = exhaust_thm, nchotomy = nchotomy_thm, injects = inject_thms,
  1072            exhaust = exhaust_thm, nchotomy = nchotomy_thm, injects = inject_thms,
  1073            distincts = distinct_thms, case_thms = case_thms, case_cong = case_cong_thm,
  1073            distincts = distinct_thms, case_thms = case_thms, case_cong = case_cong_thm,
  1074            case_cong_weak = case_cong_weak_thm, case_distribs = [case_distrib_thm], split = split_thm,
  1074            case_cong_weak = case_cong_weak_thm, case_distribs = [case_distrib_thm],
  1075            split_asm = split_asm_thm, disc_defs = disc_defs, disc_thmss = disc_thmss,
  1075            split = split_thm, split_asm = split_asm_thm, disc_defs = disc_defs,
  1076            discIs = discI_thms, sel_defs = sel_defs, sel_thmss = sel_thmss,
  1076            disc_thmss = disc_thmss, discIs = discI_thms, sel_defs = sel_defs, sel_thmss = sel_thmss,
  1077            distinct_discsss = distinct_disc_thmsss, exhaust_discs = exhaust_disc_thms,
  1077            distinct_discsss = distinct_disc_thmsss, exhaust_discs = exhaust_disc_thms,
  1078            exhaust_sels = exhaust_sel_thms, collapses = all_collapse_thms, expands = expand_thms,
  1078            exhaust_sels = exhaust_sel_thms, collapses = all_collapse_thms, expands = expand_thms,
  1079            split_sels = split_sel_thms, split_sel_asms = split_sel_asm_thms,
  1079            split_sels = split_sel_thms, split_sel_asms = split_sel_asm_thms,
  1080            case_eq_ifs = case_eq_if_thms}
  1080            case_eq_ifs = case_eq_if_thms}
  1081           |> morph_ctr_sugar (substitute_noted_thm noted);
  1081           |> morph_ctr_sugar (substitute_noted_thm noted);