src/HOL/Tools/BNF/bnf_fp_n2m_sugar.ML
changeset 62321 1abe81758619
parent 61551 078c9fd2e052
child 62326 3cf7a067599c
equal deleted inserted replaced
62320:dc8374620332 62321:1abe81758619
   142         val phi = Morphism.term_morphism "BNF" (Term.subst_TVars rho);
   142         val phi = Morphism.term_morphism "BNF" (Term.subst_TVars rho);
   143       in
   143       in
   144         morph_ctr_sugar phi ctr_sugar
   144         morph_ctr_sugar phi ctr_sugar
   145       end;
   145       end;
   146 
   146 
       
   147     val ctor_iff_dtors = map (#ctor_iff_dtor o #fp_ctr_sugar) fp_sugars0;
   147     val ctr_defss = map (#ctr_defs o #fp_ctr_sugar) fp_sugars0;
   148     val ctr_defss = map (#ctr_defs o #fp_ctr_sugar) fp_sugars0;
   148     val mapss = map (#map_thms o #fp_bnf_sugar) fp_sugars0;
   149     val mapss = map (#map_thms o #fp_bnf_sugar) fp_sugars0;
   149     val ctr_sugars = map2 target_ctr_sugar_of_fp_sugar fpTs fp_sugars0;
   150     val ctr_sugars = map2 target_ctr_sugar_of_fp_sugar fpTs fp_sugars0;
   150 
   151 
   151     val ctrss = map #ctrs ctr_sugars;
   152     val ctrss = map #ctrs ctr_sugars;
   289             ||> (fn info => (NONE, SOME info));
   290             ||> (fn info => (NONE, SOME info));
   290 
   291 
   291         val names_lthy = lthy |> fold Variable.declare_typ (As @ Cs @ Xs);
   292         val names_lthy = lthy |> fold Variable.declare_typ (As @ Cs @ Xs);
   292         val phi = Proof_Context.export_morphism names_lthy lthy;
   293         val phi = Proof_Context.export_morphism names_lthy lthy;
   293 
   294 
   294         fun mk_target_fp_sugar T X kk pre_bnf absT_info ctrXs_Tss ctr_defs ctr_sugar co_rec
   295         fun mk_target_fp_sugar T X kk pre_bnf absT_info ctrXs_Tss ctor_iff_dtor ctr_defs ctr_sugar
   295             co_rec_def map_thms co_inducts co_rec_thms co_rec_disc_thms co_rec_sel_thmss
   296             co_rec co_rec_def map_thms co_inducts co_rec_thms co_rec_disc_thms co_rec_sel_thmss
   296             ({fp_ctr_sugar = {ctr_transfers, case_transfers, disc_transfers, sel_transfers, ...},
   297             ({fp_ctr_sugar = {ctr_transfers, case_transfers, disc_transfers, sel_transfers, ...},
   297               fp_bnf_sugar = {map_disc_iffs, map_selss, rel_injects, rel_distincts, rel_sels,
   298               fp_bnf_sugar = {map_disc_iffs, map_selss, rel_injects, rel_distincts, rel_sels,
   298                 rel_intros, rel_cases, set_thms, set_selssss, set_introssss, set_cases, ...},
   299                 rel_intros, rel_cases, set_thms, set_selssss, set_introssss, set_cases, ...},
   299               fp_co_induct_sugar = {co_rec_disc_iffs, co_rec_codes, co_rec_transfers,
   300               fp_co_induct_sugar = {co_rec_disc_iffs, co_rec_codes, co_rec_transfers,
   300                 co_rec_o_maps, common_rel_co_inducts, rel_co_inducts, common_set_inducts,
   301                 co_rec_o_maps, common_rel_co_inducts, rel_co_inducts, common_set_inducts,
   303           {T = T, BT = T (*wrong but harmless*), X = X, fp = fp, fp_res = fp_res, fp_res_index = kk,
   304           {T = T, BT = T (*wrong but harmless*), X = X, fp = fp, fp_res = fp_res, fp_res_index = kk,
   304            pre_bnf = pre_bnf, fp_bnf = nth (#bnfs fp_res) kk, absT_info = absT_info,
   305            pre_bnf = pre_bnf, fp_bnf = nth (#bnfs fp_res) kk, absT_info = absT_info,
   305            fp_nesting_bnfs = fp_nesting_bnfs, live_nesting_bnfs = live_nesting_bnfs,
   306            fp_nesting_bnfs = fp_nesting_bnfs, live_nesting_bnfs = live_nesting_bnfs,
   306            fp_ctr_sugar =
   307            fp_ctr_sugar =
   307              {ctrXs_Tss = ctrXs_Tss,
   308              {ctrXs_Tss = ctrXs_Tss,
       
   309               ctor_iff_dtor = ctor_iff_dtor,
   308               ctr_defs = ctr_defs,
   310               ctr_defs = ctr_defs,
   309               ctr_sugar = ctr_sugar,
   311               ctr_sugar = ctr_sugar,
   310               ctr_transfers = ctr_transfers,
   312               ctr_transfers = ctr_transfers,
   311               case_transfers = case_transfers,
   313               case_transfers = case_transfers,
   312               disc_transfers = disc_transfers,
   314               disc_transfers = disc_transfers,
   341               common_set_inducts = common_set_inducts,
   343               common_set_inducts = common_set_inducts,
   342               set_inducts = set_inducts}}
   344               set_inducts = set_inducts}}
   343           |> morph_fp_sugar phi;
   345           |> morph_fp_sugar phi;
   344 
   346 
   345         val target_fp_sugars =
   347         val target_fp_sugars =
   346           @{map 16} mk_target_fp_sugar fpTs Xs kks pre_bnfs absT_infos ctrXs_Tsss ctr_defss
   348           @{map 17} mk_target_fp_sugar fpTs Xs kks pre_bnfs absT_infos ctrXs_Tsss ctor_iff_dtors
   347             ctr_sugars co_recs co_rec_defs mapss (transpose co_inductss') co_rec_thmss
   349             ctr_defss ctr_sugars co_recs co_rec_defs mapss (transpose co_inductss') co_rec_thmss
   348             co_rec_disc_thmss co_rec_sel_thmsss fp_sugars0;
   350             co_rec_disc_thmss co_rec_sel_thmsss fp_sugars0;
   349 
   351 
   350         val n2m_sugar = (target_fp_sugars, fp_sugar_thms);
   352         val n2m_sugar = (target_fp_sugars, fp_sugar_thms);
   351       in
   353       in
   352         (n2m_sugar, lthy |> register_n2m_sugar key n2m_sugar)
   354         (n2m_sugar, lthy |> register_n2m_sugar key n2m_sugar)