src/HOL/Tools/Function/function.ML
changeset 35756 cfde251d03a5
parent 35410 1ea89d2a1bd4
child 36323 655e2d74de3a
equal deleted inserted replaced
35737:19eefc0655b6 35756:cfde251d03a5
    79     val ((goalstate, cont), lthy) =
    79     val ((goalstate, cont), lthy) =
    80       Function_Mutual.prepare_function_mutual config defname fixes eqs lthy
    80       Function_Mutual.prepare_function_mutual config defname fixes eqs lthy
    81 
    81 
    82     fun afterqed [[proof]] lthy =
    82     fun afterqed [[proof]] lthy =
    83       let
    83       let
    84         val FunctionResult {fs, R, psimps, trsimps,  simple_pinducts,
    84         val FunctionResult {fs, R, psimps, trsimps, simple_pinducts,
    85           termination, domintros, cases, ...} =
    85           termination, domintros, cases, ...} =
    86           cont (Thm.close_derivation proof)
    86           cont (Thm.close_derivation proof)
    87 
    87 
    88         val fnames = map (fst o fst) fixes
    88         val fnames = map (fst o fst) fixes
    89         fun qualify n = Binding.name n
    89         fun qualify n = Binding.name n
    95         val (((psimps', pinducts'), (_, [termination'])), lthy) =
    95         val (((psimps', pinducts'), (_, [termination'])), lthy) =
    96           lthy
    96           lthy
    97           |> addsmps (conceal_partial o Binding.qualify false "partial")
    97           |> addsmps (conceal_partial o Binding.qualify false "partial")
    98                "psimps" conceal_partial psimp_attribs psimps
    98                "psimps" conceal_partial psimp_attribs psimps
    99           ||> fold_option (snd oo addsmps I "simps" I simp_attribs) trsimps
    99           ||> fold_option (snd oo addsmps I "simps" I simp_attribs) trsimps
   100           ||> fold_option (Spec_Rules.add Spec_Rules.Equational o (pair fs)) trsimps
   100           ||> fold_option (Spec_Rules.add Spec_Rules.Equational o pair fs) trsimps
   101           ||>> Local_Theory.note ((conceal_partial (qualify "pinduct"),
   101           ||>> Local_Theory.note ((conceal_partial (qualify "pinduct"),
   102                  [Attrib.internal (K (Rule_Cases.case_names cnames)),
   102                  [Attrib.internal (K (Rule_Cases.case_names cnames)),
   103                   Attrib.internal (K (Rule_Cases.consumes 1)),
   103                   Attrib.internal (K (Rule_Cases.consumes 1)),
   104                   Attrib.internal (K (Induct.induct_pred ""))]), simple_pinducts)
   104                   Attrib.internal (K (Induct.induct_pred ""))]), simple_pinducts)
   105           ||>> Local_Theory.note ((Binding.conceal (qualify "termination"), []), [termination])
   105           ||>> Local_Theory.note ((Binding.conceal (qualify "termination"), []), [termination])
   163             let val info' = { is_partial=false, defname=defname, add_simps=add_simps,
   163             let val info' = { is_partial=false, defname=defname, add_simps=add_simps,
   164               case_names=case_names, fs=fs, R=R, psimps=psimps, pinducts=pinducts,
   164               case_names=case_names, fs=fs, R=R, psimps=psimps, pinducts=pinducts,
   165               simps=SOME simps, inducts=SOME inducts, termination=termination }
   165               simps=SOME simps, inducts=SOME inducts, termination=termination }
   166             in
   166             in
   167               Local_Theory.declaration false (add_function_data o morph_function_data info')
   167               Local_Theory.declaration false (add_function_data o morph_function_data info')
   168               #> Spec_Rules.add Spec_Rules.Equational (fs, simps)
   168               #> Spec_Rules.add Spec_Rules.Equational (fs, tsimps)
   169             end)
   169             end)
   170         end
   170         end
   171   in
   171   in
   172     lthy
   172     lthy
   173     |> ProofContext.note_thmss ""
   173     |> ProofContext.note_thmss ""