src/HOL/Tools/Function/function.ML
changeset 40076 6f012a209dac
parent 39754 150f831ce4a3
child 41114 f9ae7c2abf7e
equal deleted inserted replaced
40075:1c75f3f192ae 40076:6f012a209dac
   106 
   106 
   107         val (((psimps', pinducts'), (_, [termination'])), lthy) =
   107         val (((psimps', pinducts'), (_, [termination'])), lthy) =
   108           lthy
   108           lthy
   109           |> addsmps (conceal_partial o Binding.qualify false "partial")
   109           |> addsmps (conceal_partial o Binding.qualify false "partial")
   110                "psimps" conceal_partial psimp_attribs psimps
   110                "psimps" conceal_partial psimp_attribs psimps
   111           ||> fold_option (snd oo addsmps I "simps" I simp_attribs) trsimps
   111           ||> (case trsimps of NONE => I | SOME thms =>
   112           ||> fold_option (Spec_Rules.add Spec_Rules.Equational o pair fs) trsimps
   112                    addsmps I "simps" I simp_attribs thms #> snd
       
   113                    #> Spec_Rules.add Spec_Rules.Equational (fs, thms))
   113           ||>> Local_Theory.note ((conceal_partial (qualify "pinduct"),
   114           ||>> Local_Theory.note ((conceal_partial (qualify "pinduct"),
   114                  [Attrib.internal (K (Rule_Cases.case_names cnames)),
   115                  [Attrib.internal (K (Rule_Cases.case_names cnames)),
   115                   Attrib.internal (K (Rule_Cases.consumes 1)),
   116                   Attrib.internal (K (Rule_Cases.consumes 1)),
   116                   Attrib.internal (K (Induct.induct_pred ""))]), simple_pinducts)
   117                   Attrib.internal (K (Induct.induct_pred ""))]), simple_pinducts)
   117           ||>> Local_Theory.note ((Binding.conceal (qualify "termination"), []), [termination])
   118           ||>> Local_Theory.note ((Binding.conceal (qualify "termination"), []), [termination])
   118           ||> (snd o Local_Theory.note ((qualify "cases",
   119           ||> (snd o Local_Theory.note ((qualify "cases",
   119                  [Attrib.internal (K (Rule_Cases.case_names cnames))]), [cases]))
   120                  [Attrib.internal (K (Rule_Cases.case_names cnames))]), [cases]))
   120           ||> fold_option (snd oo curry Local_Theory.note (qualify "domintros", [])) domintros
   121           ||> (case domintros of NONE => I | SOME thms => 
       
   122                    Local_Theory.note ((qualify "domintros", []), thms) #> snd)
   121 
   123 
   122         val info = { add_simps=addsmps, case_names=cnames, psimps=psimps',
   124         val info = { add_simps=addsmps, case_names=cnames, psimps=psimps',
   123           pinducts=snd pinducts', simps=NONE, inducts=NONE, termination=termination',
   125           pinducts=snd pinducts', simps=NONE, inducts=NONE, termination=termination',
   124           fs=fs, R=R, defname=defname, is_partial=true }
   126           fs=fs, R=R, defname=defname, is_partial=true }
   125 
   127