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 "" |