131 val cong_attrs = @{attributes [cong]}; |
131 val cong_attrs = @{attributes [cong]}; |
132 val safe_elim_attrs = @{attributes [elim!]}; |
132 val safe_elim_attrs = @{attributes [elim!]}; |
133 val iff_attrs = @{attributes [iff]}; |
133 val iff_attrs = @{attributes [iff]}; |
134 val induct_simp_attrs = @{attributes [induct_simp]}; |
134 val induct_simp_attrs = @{attributes [induct_simp]}; |
135 val simp_attrs = @{attributes [simp]}; |
135 val simp_attrs = @{attributes [simp]}; |
|
136 val code_simp_attrs = Code.add_default_eqn_attrib :: simp_attrs; |
136 |
137 |
137 fun unflat_lookup eq xs ys = map (fn xs' => permute_like eq xs xs' ys); |
138 fun unflat_lookup eq xs ys = map (fn xs' => permute_like eq xs xs' ys); |
138 |
139 |
139 fun mk_half_pairss' _ ([], []) = [] |
140 fun mk_half_pairss' _ ([], []) = [] |
140 | mk_half_pairss' indent (x :: xs, _ :: ys) = |
141 | mk_half_pairss' indent (x :: xs, _ :: ys) = |
756 |
757 |
757 val exhaust_case_names_attr = Attrib.internal (K (Rule_Cases.case_names exhaust_cases)); |
758 val exhaust_case_names_attr = Attrib.internal (K (Rule_Cases.case_names exhaust_cases)); |
758 val cases_type_attr = Attrib.internal (K (Induct.cases_type dataT_name)); |
759 val cases_type_attr = Attrib.internal (K (Induct.cases_type dataT_name)); |
759 |
760 |
760 val notes = |
761 val notes = |
761 [(caseN, case_thms, simp_attrs), |
762 [(caseN, case_thms, code_simp_attrs), |
762 (case_congN, [case_cong_thm], []), |
763 (case_congN, [case_cong_thm], []), |
763 (case_convN, case_conv_thms, []), |
764 (case_convN, case_conv_thms, []), |
764 (collapseN, safe_collapse_thms, simp_attrs), |
765 (collapseN, safe_collapse_thms, simp_attrs), |
765 (discN, nontriv_disc_thms, simp_attrs), |
766 (discN, nontriv_disc_thms, simp_attrs), |
766 (discIN, nontriv_discI_thms, []), |
767 (discIN, nontriv_discI_thms, []), |