# HG changeset patch # User desharna # Date 1412595329 -7200 # Node ID e66ed9634a74846ce51fa8a10473fe5ad7342bc2 # Parent 04f5d23cd9e51f500b15cb915eea403982a00332 add 'common_rel_co_induct' to 'fp_sugar' diff -r 04f5d23cd9e5 -r e66ed9634a74 src/HOL/Tools/BNF/bnf_fp_def_sugar.ML --- a/src/HOL/Tools/BNF/bnf_fp_def_sugar.ML Mon Oct 06 13:35:15 2014 +0200 +++ b/src/HOL/Tools/BNF/bnf_fp_def_sugar.ML Mon Oct 06 13:35:29 2014 +0200 @@ -40,7 +40,8 @@ co_rec_disc_iffs: thm list, co_rec_selss: thm list list, co_rec_codes: thm list, - co_rec_transfers: thm list} + co_rec_transfers: thm list, + common_rel_co_inducts: thm list} type fp_sugar = {T: typ, @@ -207,7 +208,8 @@ co_rec_disc_iffs: thm list, co_rec_selss: thm list list, co_rec_codes: thm list, - co_rec_transfers: thm list}; + co_rec_transfers: thm list, + common_rel_co_inducts: thm list}; type fp_sugar = {T: typ, @@ -240,8 +242,8 @@ set_cases = map (Morphism.thm phi) set_cases}; fun morph_fp_co_induct_sugar phi ({co_rec, common_co_inducts, co_inducts, co_rec_def, co_rec_thms, - co_rec_discs, co_rec_disc_iffs, co_rec_selss, co_rec_codes, co_rec_transfers - } : fp_co_induct_sugar) = + co_rec_discs, co_rec_disc_iffs, co_rec_selss, co_rec_codes, co_rec_transfers, + common_rel_co_inducts} : fp_co_induct_sugar) = {co_rec = Morphism.term phi co_rec, common_co_inducts = map (Morphism.thm phi) common_co_inducts, co_inducts = map (Morphism.thm phi) co_inducts, @@ -251,7 +253,8 @@ co_rec_disc_iffs = map (Morphism.thm phi) co_rec_disc_iffs, co_rec_selss = map (map (Morphism.thm phi)) co_rec_selss, co_rec_codes = map (Morphism.thm phi) co_rec_codes, - co_rec_transfers = map (Morphism.thm phi) co_rec_transfers}; + co_rec_transfers = map (Morphism.thm phi) co_rec_transfers, + common_rel_co_inducts = map (Morphism.thm phi) common_rel_co_inducts}; fun morph_fp_ctr_sugar phi ({ctrXs_Tss, ctr_defs, ctr_sugar, ctr_transfers, case_transfers, disc_transfers} : fp_ctr_sugar) = @@ -331,7 +334,7 @@ common_co_inducts co_inductss co_rec_thmss co_rec_discss co_rec_selsss rel_injectss rel_distinctss map_disc_iffss map_selss rel_selss rel_intross rel_casess set_thmss set_selss set_intross set_casess ctr_transferss case_transferss disc_transferss co_rec_disc_iffss - co_rec_codess co_rec_transferss noted = + co_rec_codess co_rec_transferss common_rel_co_inducts noted = let val fp_sugars = map_index (fn (kk, T) => @@ -368,7 +371,8 @@ co_rec_disc_iffs = nth co_rec_disc_iffss kk, co_rec_selss = nth co_rec_selsss kk, co_rec_codes = nth co_rec_codess kk, - co_rec_transfers = nth co_rec_transferss kk}} + co_rec_transfers = nth co_rec_transferss kk, + common_rel_co_inducts = common_rel_co_inducts}} |> morph_fp_sugar (substitute_noted_thm noted)) Ts; in register_fp_sugars_raw fp_sugars @@ -2216,6 +2220,7 @@ (replicate nn []) rel_injectss rel_distinctss map_disc_iffss map_selss rel_selss rel_intross rel_casess set_thmss set_selss set_intross set_casess ctr_transferss case_transferss disc_transferss (replicate nn []) (replicate nn []) rec_transfer_thmss + common_rel_induct_thms end; fun derive_corec_transfer_thms lthy corecs corec_defs = @@ -2334,7 +2339,7 @@ corec_sel_thmsss rel_injectss rel_distinctss map_disc_iffss map_selss rel_selss rel_intross rel_casess set_thmss set_selss set_intross set_casess ctr_transferss case_transferss disc_transferss corec_disc_iff_thmss (map single corec_code_thms) - corec_transfer_thmss + corec_transfer_thmss common_rel_coinduct_thms end; val lthy'' = lthy' diff -r 04f5d23cd9e5 -r e66ed9634a74 src/HOL/Tools/BNF/bnf_fp_n2m_sugar.ML --- a/src/HOL/Tools/BNF/bnf_fp_n2m_sugar.ML Mon Oct 06 13:35:15 2014 +0200 +++ b/src/HOL/Tools/BNF/bnf_fp_n2m_sugar.ML Mon Oct 06 13:35:29 2014 +0200 @@ -296,7 +296,8 @@ ({fp_ctr_sugar = {ctr_transfers, case_transfers, disc_transfers, ...}, fp_bnf_sugar = {map_disc_iffs, map_sels, rel_injects, rel_distincts, rel_sels, rel_intros, rel_cases, set_thms, set_sels, set_intros, set_cases, ...}, - fp_co_induct_sugar = {co_rec_disc_iffs, co_rec_codes, co_rec_transfers, ...}, + fp_co_induct_sugar = {co_rec_disc_iffs, co_rec_codes, co_rec_transfers, + common_rel_co_inducts, ...}, ...} : fp_sugar) = {T = T, BT = T (*wrong but harmless*), X = X, fp = fp, fp_res = fp_res, fp_res_index = kk, pre_bnf = pre_bnf, absT_info = absT_info, fp_nesting_bnfs = fp_nesting_bnfs, @@ -331,7 +332,8 @@ co_rec_disc_iffs = co_rec_disc_iffs, co_rec_selss = co_rec_sel_thmss, co_rec_codes = co_rec_codes, - co_rec_transfers = co_rec_transfers}} + co_rec_transfers = co_rec_transfers, + common_rel_co_inducts = common_rel_co_inducts}} |> morph_fp_sugar phi; val target_fp_sugars = diff -r 04f5d23cd9e5 -r e66ed9634a74 src/HOL/Tools/BNF/bnf_lfp_basic_sugar.ML --- a/src/HOL/Tools/BNF/bnf_lfp_basic_sugar.ML Mon Oct 06 13:35:15 2014 +0200 +++ b/src/HOL/Tools/BNF/bnf_lfp_basic_sugar.ML Mon Oct 06 13:35:29 2014 +0200 @@ -106,7 +106,8 @@ co_rec_disc_iffs = [], co_rec_selss = [], co_rec_codes = [], - co_rec_transfers = []}} + co_rec_transfers = [], + common_rel_co_inducts = []}} end; fun fp_sugar_of_prod ctxt = @@ -165,7 +166,8 @@ co_rec_disc_iffs = [], co_rec_selss = [], co_rec_codes = [], - co_rec_transfers = []}} + co_rec_transfers = [], + common_rel_co_inducts = []}} end; val _ = Theory.setup (map_local_theory (fn lthy =>