src/HOL/BNF/Tools/bnf_fp_rec_sugar.ML
changeset 54175 83145b857bb9
parent 54174 c6291ae7cd18
child 54176 8039bd7e98b1
equal deleted inserted replaced
54174:c6291ae7cd18 54175:83145b857bb9
  1064                   case_thms_of_term lthy bound_Ts raw_rhs;
  1064                   case_thms_of_term lthy bound_Ts raw_rhs;
  1065 
  1065 
  1066                 val raw_code_thm = mk_primcorec_raw_code_of_ctr_tac lthy distincts discIs sel_splits
  1066                 val raw_code_thm = mk_primcorec_raw_code_of_ctr_tac lthy distincts discIs sel_splits
  1067                     sel_split_asms ms ctr_thms
  1067                     sel_split_asms ms ctr_thms
  1068                   |> K |> Goal.prove lthy [] [] raw_t;
  1068                   |> K |> Goal.prove lthy [] [] raw_t;
  1069 val _ = tracing ("raw code theorem: " ^ Syntax.string_of_term lthy (prop_of raw_code_thm));
       
  1070               in
  1069               in
  1071                 mk_primcorec_code_of_raw_code_tac lthy distincts sel_splits raw_code_thm
  1070                 mk_primcorec_code_of_raw_code_tac lthy distincts sel_splits raw_code_thm
  1072                 |> K |> Goal.prove lthy [] [] t
  1071                 |> K |> Goal.prove lthy [] [] t
  1073 |> tap (tracing o curry (op ^) "code theorem: " o Syntax.string_of_term lthy o prop_of)
       
  1074                 |> single
  1072                 |> single
  1075               end)
  1073               end)
  1076 handle ERROR s => (warning s; []) (*###*)
       
  1077           end;
  1074           end;
  1078 
  1075 
  1079         val disc_alists = map3 (maps oo prove_disc) corec_specs exclssss disc_eqnss;
  1076         val disc_alists = map3 (maps oo prove_disc) corec_specs exclssss disc_eqnss;
  1080         val sel_alists = map4 (map ooo prove_sel) corec_specs disc_eqnss exclssss sel_eqnss;
  1077         val sel_alists = map4 (map ooo prove_sel) corec_specs disc_eqnss exclssss sel_eqnss;
  1081         val disc_thmss = map (map snd) disc_alists;
  1078         val disc_thmss = map (map snd) disc_alists;