src/HOL/Tools/Function/mutual.ML
changeset 41846 b368a7aee46a
parent 41114 f9ae7c2abf7e
child 42361 23f352990944
equal deleted inserted replaced
41845:6611b9cef38b 41846:b368a7aee46a
   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, ...} =