equal
deleted
inserted
replaced
416 |
416 |
417 val interpret_fp_sugars = FP_Sugar_Plugin.data; |
417 val interpret_fp_sugars = FP_Sugar_Plugin.data; |
418 |
418 |
419 val register_fp_sugars_raw = |
419 val register_fp_sugars_raw = |
420 fold (fn fp_sugar as {T = Type (s, _), ...} => |
420 fold (fn fp_sugar as {T = Type (s, _), ...} => |
421 Local_Theory.declaration {syntax = false, pervasive = true} |
421 Local_Theory.declaration {syntax = false, pervasive = true, pos = \<^here>} |
422 (fn phi => Data.map (Symtab.update (s, morph_fp_sugar phi fp_sugar)))); |
422 (fn phi => Data.map (Symtab.update (s, morph_fp_sugar phi fp_sugar)))); |
423 |
423 |
424 fun register_fp_sugars plugins fp_sugars = |
424 fun register_fp_sugars plugins fp_sugars = |
425 register_fp_sugars_raw fp_sugars #> interpret_fp_sugars plugins fp_sugars; |
425 register_fp_sugars_raw fp_sugars #> interpret_fp_sugars plugins fp_sugars; |
426 |
426 |
1067 mk_set_cases_tac ctxt (Thm.cterm_of ctxt ta) prems exhaust set_thms) |
1067 mk_set_cases_tac ctxt (Thm.cterm_of ctxt ta) prems exhaust set_thms) |
1068 |> Thm.close_derivation \<^here> |
1068 |> Thm.close_derivation \<^here> |
1069 |> rotate_prems ~1; |
1069 |> rotate_prems ~1; |
1070 |
1070 |
1071 val cases_set_attr = |
1071 val cases_set_attr = |
1072 Attrib.internal (K (Induct.cases_pred (name_of_set set))); |
1072 Attrib.internal \<^here> (K (Induct.cases_pred (name_of_set set))); |
1073 |
1073 |
1074 val ctr_names = quasi_unambiguous_case_names (flat |
1074 val ctr_names = quasi_unambiguous_case_names (flat |
1075 (map (uncurry mk_names o map_prod length name_of_ctr) (premss ~~ ctrAs))); |
1075 (map (uncurry mk_names o map_prod length name_of_ctr) (premss ~~ ctrAs))); |
1076 in |
1076 in |
1077 (* TODO: @{attributes [elim?]} *) |
1077 (* TODO: @{attributes [elim?]} *) |
2029 mk_set_induct0_tac ctxt (map (Thm.cterm_of ctxt'') Ps) prems dtor_set_inducts |
2029 mk_set_induct0_tac ctxt (map (Thm.cterm_of ctxt'') Ps) prems dtor_set_inducts |
2030 exhausts set_pre_defs ctor_defs dtor_ctors Abs_pre_inverses) |
2030 exhausts set_pre_defs ctor_defs dtor_ctors Abs_pre_inverses) |
2031 |> Thm.close_derivation \<^here>; |
2031 |> Thm.close_derivation \<^here>; |
2032 |
2032 |
2033 val case_names_attr = Attrib.case_names (quasi_unambiguous_case_names case_names); |
2033 val case_names_attr = Attrib.case_names (quasi_unambiguous_case_names case_names); |
2034 val induct_set_attrs = map (Attrib.internal o K o Induct.induct_pred o name_of_set) sets; |
2034 val induct_set_attrs = map (Attrib.internal \<^here> o K o Induct.induct_pred o name_of_set) sets; |
2035 in |
2035 in |
2036 (thm, case_names_attr :: induct_set_attrs) |
2036 (thm, case_names_attr :: induct_set_attrs) |
2037 end |
2037 end |
2038 val consumes_attr = Attrib.consumes 1; |
2038 val consumes_attr = Attrib.consumes 1; |
2039 in |
2039 in |
2645 type_definitions abs_inverses ctrss ctr_defss recs rec_defs lthy; |
2645 type_definitions abs_inverses ctrss ctr_defss recs rec_defs lthy; |
2646 |
2646 |
2647 val rec_transfer_thmss = |
2647 val rec_transfer_thmss = |
2648 map single (derive_rec_transfer_thms lthy recs rec_defs recs_args_types); |
2648 map single (derive_rec_transfer_thms lthy recs rec_defs recs_args_types); |
2649 |
2649 |
2650 val induct_type_attr = Attrib.internal o K o Induct.induct_type; |
2650 val induct_type_attr = Attrib.internal \<^here> o K o Induct.induct_type; |
2651 val induct_pred_attr = Attrib.internal o K o Induct.induct_pred; |
2651 val induct_pred_attr = Attrib.internal \<^here> o K o Induct.induct_pred; |
2652 |
2652 |
2653 val ((rel_induct_thmss, common_rel_induct_thms), |
2653 val ((rel_induct_thmss, common_rel_induct_thms), |
2654 (rel_induct_attrs, common_rel_induct_attrs)) = |
2654 (rel_induct_attrs, common_rel_induct_attrs)) = |
2655 if live = 0 then |
2655 if live = 0 then |
2656 ((replicate nn [], []), ([], [])) |
2656 ((replicate nn [], []), ([], [])) |
2806 [thm, eq_ifIN ctxt thms])); |
2806 [thm, eq_ifIN ctxt thms])); |
2807 |
2807 |
2808 val corec_code_thms = map (eq_ifIN lthy) corec_thmss; |
2808 val corec_code_thms = map (eq_ifIN lthy) corec_thmss; |
2809 val corec_sel_thmss = map flat corec_sel_thmsss; |
2809 val corec_sel_thmss = map flat corec_sel_thmsss; |
2810 |
2810 |
2811 val coinduct_type_attr = Attrib.internal o K o Induct.coinduct_type; |
2811 val coinduct_type_attr = Attrib.internal \<^here> o K o Induct.coinduct_type; |
2812 val coinduct_pred_attr = Attrib.internal o K o Induct.coinduct_pred; |
2812 val coinduct_pred_attr = Attrib.internal \<^here> o K o Induct.coinduct_pred; |
2813 |
2813 |
2814 val flat_corec_thms = append oo append; |
2814 val flat_corec_thms = append oo append; |
2815 |
2815 |
2816 val corec_transfer_thmss = map single (derive_corec_transfer_thms lthy corecs corec_defs); |
2816 val corec_transfer_thmss = map single (derive_corec_transfer_thms lthy corecs corec_defs); |
2817 |
2817 |