src/HOL/Tools/Function/mutual.ML
changeset 82967 73af47bc277c
parent 81954 6f2bcdfa9a19
equal deleted inserted replaced
82966:55a71dd13ca0 82967:73af47bc277c
   225     val case_exp = Sum_Tree.mk_sumcases HOLogic.boolT Ps
   225     val case_exp = Sum_Tree.mk_sumcases HOLogic.boolT Ps
   226 
   226 
   227     val induct_inst =
   227     val induct_inst =
   228       Thm.forall_elim (Thm.cterm_of ctxt case_exp) induct
   228       Thm.forall_elim (Thm.cterm_of ctxt case_exp) induct
   229       |> full_simplify (put_simpset Sum_Tree.sumcase_split_ss ctxt)
   229       |> full_simplify (put_simpset Sum_Tree.sumcase_split_ss ctxt)
   230       |> full_simplify (put_simpset HOL_basic_ss ctxt addsimps all_f_defs)
   230       |> full_simplify (put_simpset HOL_basic_ss ctxt |> Simplifier.add_simps all_f_defs)
   231 
   231 
   232     fun project rule (MutualPart {cargTs, i, ...}) k =
   232     fun project rule (MutualPart {cargTs, i, ...}) k =
   233       let
   233       let
   234         val afs = map_index (fn (j,T) => Free ("a" ^ string_of_int (j + k), T)) cargTs (* FIXME! *)
   234         val afs = map_index (fn (j,T) => Free ("a" ^ string_of_int (j + k), T)) cargTs (* FIXME! *)
   235         val inj = Sum_Tree.mk_inj ST n i (foldr1 HOLogic.mk_prod afs)
   235         val inj = Sum_Tree.mk_inj ST n i (foldr1 HOLogic.mk_prod afs)
   283       map (fn MutualPart {f_defthm = SOME f_def, ...} => f_def) parts
   283       map (fn MutualPart {f_defthm = SOME f_def, ...} => f_def) parts
   284 
   284 
   285     fun mk_mpsimp fqgar sum_psimp =
   285     fun mk_mpsimp fqgar sum_psimp =
   286       in_context lthy fqgar (recover_mutual_psimp all_orig_fdefs parts) sum_psimp
   286       in_context lthy fqgar (recover_mutual_psimp all_orig_fdefs parts) sum_psimp
   287 
   287 
   288     val rew_simpset = put_simpset HOL_basic_ss lthy addsimps all_f_defs
   288     val rew_simpset = put_simpset HOL_basic_ss lthy |> Simplifier.add_simps all_f_defs
   289     val mpsimps = map2 mk_mpsimp fqgars psimps
   289     val mpsimps = map2 mk_mpsimp fqgars psimps
   290     val minducts = mutual_induct_rules lthy simple_pinduct all_f_defs m
   290     val minducts = mutual_induct_rules lthy simple_pinduct all_f_defs m
   291     val mcases = map (mutual_cases_rule lthy cases_rule n ST) parts
   291     val mcases = map (mutual_cases_rule lthy cases_rule n ST) parts
   292     val mtermination = full_simplify rew_simpset termination
   292     val mtermination = full_simplify rew_simpset termination
   293     val mdomintros = Option.map (map (full_simplify rew_simpset)) domintros
   293     val mdomintros = Option.map (map (full_simplify rew_simpset)) domintros