247 end |
247 end |
248 |
248 |
249 fun mk_partial_rules_mutual lthy inner_cont (m as Mutual {parts, fqgars, ...}) proof = |
249 fun mk_partial_rules_mutual lthy inner_cont (m as Mutual {parts, fqgars, ...}) proof = |
250 let |
250 let |
251 val result = inner_cont proof |
251 val result = inner_cont proof |
252 val FunctionResult {G, R, cases, psimps, trsimps, simple_pinducts=[simple_pinduct], |
252 val FunctionResult {G, R, cases, psimps, simple_pinducts=[simple_pinduct], |
253 termination, domintros, ...} = result |
253 termination, domintros, ...} = result |
254 |
254 |
255 val (all_f_defs, fs) = |
255 val (all_f_defs, fs) = |
256 map (fn MutualPart {f_defthm = SOME f_def, f = SOME f, cargTs, ...} => |
256 map (fn MutualPart {f_defthm = SOME f_def, f = SOME f, cargTs, ...} => |
257 (mk_applied_form lthy cargTs (Thm.symmetric f_def), f)) |
257 (mk_applied_form lthy cargTs (Thm.symmetric f_def), f)) |
264 fun mk_mpsimp fqgar sum_psimp = |
264 fun mk_mpsimp fqgar sum_psimp = |
265 in_context lthy fqgar (recover_mutual_psimp all_orig_fdefs parts) sum_psimp |
265 in_context lthy fqgar (recover_mutual_psimp all_orig_fdefs parts) sum_psimp |
266 |
266 |
267 val rew_ss = HOL_basic_ss addsimps all_f_defs |
267 val rew_ss = HOL_basic_ss addsimps all_f_defs |
268 val mpsimps = map2 mk_mpsimp fqgars psimps |
268 val mpsimps = map2 mk_mpsimp fqgars psimps |
269 val mtrsimps = Option.map (map2 mk_mpsimp fqgars) trsimps |
|
270 val minducts = mutual_induct_rules lthy simple_pinduct all_f_defs m |
269 val minducts = mutual_induct_rules lthy simple_pinduct all_f_defs m |
271 val mtermination = full_simplify rew_ss termination |
270 val mtermination = full_simplify rew_ss termination |
272 val mdomintros = Option.map (map (full_simplify rew_ss)) domintros |
271 val mdomintros = Option.map (map (full_simplify rew_ss)) domintros |
273 in |
272 in |
274 FunctionResult { fs=fs, G=G, R=R, |
273 FunctionResult { fs=fs, G=G, R=R, |
275 psimps=mpsimps, simple_pinducts=minducts, |
274 psimps=mpsimps, simple_pinducts=minducts, |
276 cases=cases, termination=mtermination, |
275 cases=cases, termination=mtermination, |
277 domintros=mdomintros, trsimps=mtrsimps} |
276 domintros=mdomintros} |
278 end |
277 end |
279 |
278 |
280 fun prepare_function_mutual config defname fixes eqss lthy = |
279 fun prepare_function_mutual config defname fixes eqss lthy = |
281 let |
280 let |
282 val mutual as Mutual {fsum_var=(n, T), qglrs, ...} = |
281 val mutual as Mutual {fsum_var=(n, T), qglrs, ...} = |