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 |