src/HOL/Tools/BNF/bnf_fp_def_sugar.ML
changeset 57830 2d0f0d6fdf3e
parent 57824 615223745d4e
child 57882 38bf4de248a6
equal deleted inserted replaced
57829:b1113689622b 57830:2d0f0d6fdf3e
  1235                   mk_half_distinct_tac ctxt ctor_inject abs_inject [def, def']))
  1235                   mk_half_distinct_tac ctxt ctor_inject abs_inject [def, def']))
  1236                 (mk_half_pairss (`I ctr_defs));
  1236                 (mk_half_pairss (`I ctr_defs));
  1237 
  1237 
  1238             val tacss = [exhaust_tac] :: inject_tacss @ half_distinct_tacss;
  1238             val tacss = [exhaust_tac] :: inject_tacss @ half_distinct_tacss;
  1239 
  1239 
  1240             val sel_default_eqs = map (prepare_term lthy) raw_sel_default_eqs;
  1240             val sel_Tss = map (map (curry (op -->) fpT)) ctr_Tss;
       
  1241             val sel_bTs =
       
  1242               flat sel_bindingss ~~ flat sel_Tss
       
  1243               |> filter_out (Binding.is_empty o fst)
       
  1244               |> distinct (Binding.eq_name o pairself fst);
       
  1245             val sel_default_lthy = fake_local_theory_for_sel_defaults sel_bTs lthy;
       
  1246 
       
  1247             val sel_default_eqs = map (prepare_term sel_default_lthy) raw_sel_default_eqs;
  1241 
  1248 
  1242             fun ctr_spec_of disc_b ctr0 sel_bs = ((disc_b, ctr0), sel_bs);
  1249             fun ctr_spec_of disc_b ctr0 sel_bs = ((disc_b, ctr0), sel_bs);
  1243             val ctr_specs = map3 ctr_spec_of disc_bindings ctrs0 sel_bindingss;
  1250             val ctr_specs = map3 ctr_spec_of disc_bindings ctrs0 sel_bindingss;
  1244           in
  1251           in
  1245             free_constructors tacss ((((discs_sels, no_code), standard_binding), ctr_specs),
  1252             free_constructors tacss ((((discs_sels, no_code), standard_binding), ctr_specs),