92 val ((goal_state, cont), lthy') = |
92 val ((goal_state, cont), lthy') = |
93 Function_Mutual.prepare_function_mutual config defname fixes eqs lthy |
93 Function_Mutual.prepare_function_mutual config defname fixes eqs lthy |
94 |
94 |
95 fun afterqed [[proof]] lthy = |
95 fun afterqed [[proof]] lthy = |
96 let |
96 let |
97 val FunctionResult {fs, R, psimps, simple_pinducts, |
97 val FunctionResult {fs, R, dom, psimps, simple_pinducts, |
98 termination, domintros, cases, ...} = |
98 termination, domintros, cases, ...} = |
99 cont (Thm.close_derivation proof) |
99 cont (Thm.close_derivation proof) |
100 |
100 |
101 val fnames = map (fst o fst) fixes |
101 val fnames = map (fst o fst) fixes |
102 fun qualify n = Binding.name n |
102 fun qualify n = Binding.name n |
120 ||> (case domintros of NONE => I | SOME thms => |
120 ||> (case domintros of NONE => I | SOME thms => |
121 Local_Theory.note ((qualify "domintros", []), thms) #> snd) |
121 Local_Theory.note ((qualify "domintros", []), thms) #> snd) |
122 |
122 |
123 val info = { add_simps=addsmps, case_names=cnames, psimps=psimps', |
123 val info = { add_simps=addsmps, case_names=cnames, psimps=psimps', |
124 pinducts=snd pinducts', simps=NONE, inducts=NONE, termination=termination', |
124 pinducts=snd pinducts', simps=NONE, inducts=NONE, termination=termination', |
125 fs=fs, R=R, defname=defname, is_partial=true, cases=cases'} |
125 fs=fs, R=R, dom=dom, defname=defname, is_partial=true, cases=cases'} |
126 |
126 |
127 val _ = Proof_Display.print_consts do_print lthy (K false) (map fst fixes) |
127 val _ = Proof_Display.print_consts do_print lthy (K false) (map fst fixes) |
128 in |
128 in |
129 (info, |
129 (info, |
130 lthy |> Local_Theory.declaration {syntax = false, pervasive = false} |
130 lthy |> Local_Theory.declaration {syntax = false, pervasive = false} |
178 (case import_last_function lthy of |
178 (case import_last_function lthy of |
179 SOME info => info |
179 SOME info => info |
180 | NONE => error "Not a function")) |
180 | NONE => error "Not a function")) |
181 |
181 |
182 val { termination, fs, R, add_simps, case_names, psimps, |
182 val { termination, fs, R, add_simps, case_names, psimps, |
183 pinducts, defname, cases, ...} = info |
183 pinducts, defname, cases, dom, ...} = info |
184 val domT = domain_type (fastype_of R) |
184 val domT = domain_type (fastype_of R) |
185 val goal = HOLogic.mk_Trueprop (HOLogic.mk_all ("x", domT, mk_acc domT R $ Free ("x", domT))) |
185 val goal = HOLogic.mk_Trueprop (HOLogic.mk_all ("x", domT, mk_acc domT R $ Free ("x", domT))) |
186 fun afterqed [[totality]] lthy = |
186 fun afterqed [[totality]] lthy = |
187 let |
187 let |
188 val totality = Thm.close_derivation totality |
188 val totality = Thm.close_derivation totality |
201 ((qualify "induct", |
201 ((qualify "induct", |
202 [Attrib.internal (K (Rule_Cases.case_names case_names))]), |
202 [Attrib.internal (K (Rule_Cases.case_names case_names))]), |
203 tinduct) |
203 tinduct) |
204 |-> (fn (simps, (_, inducts)) => fn lthy => |
204 |-> (fn (simps, (_, inducts)) => fn lthy => |
205 let val info' = { is_partial=false, defname=defname, add_simps=add_simps, |
205 let val info' = { is_partial=false, defname=defname, add_simps=add_simps, |
206 case_names=case_names, fs=fs, R=R, psimps=psimps, pinducts=pinducts, |
206 case_names=case_names, fs=fs, R=R, dom=dom, psimps=psimps, pinducts=pinducts, |
207 simps=SOME simps, inducts=SOME inducts, termination=termination, cases=cases } |
207 simps=SOME simps, inducts=SOME inducts, termination=termination, cases=cases } |
208 in |
208 in |
209 (info', |
209 (info', |
210 lthy |
210 lthy |
211 |> Local_Theory.declaration {syntax = false, pervasive = false} |
211 |> Local_Theory.declaration {syntax = false, pervasive = false} |