236 |
236 |
237 fun add (Tactic.Apply_Method' (_, topt, is, _)) (_, ctxt) (pt, pos as (p, _)) = |
237 fun add (Tactic.Apply_Method' (_, topt, is, _)) (_, ctxt) (pt, pos as (p, _)) = |
238 (case topt of |
238 (case topt of |
239 SOME t => |
239 SOME t => |
240 let val (pt, c) = Ctree.cappend_form pt p (is, ctxt) t |
240 let val (pt, c) = Ctree.cappend_form pt p (is, ctxt) t |
241 in (pos, c, Generate.EmptyMout, pt) end |
241 in (pos, c, Test_Out.EmptyMout, pt) end |
242 | NONE => (pos, [], Generate.EmptyMout, pt)) |
242 | NONE => (pos, [], Test_Out.EmptyMout, pt)) |
243 | add (Tactic.Take' t) l (pt, (p, _)) = (* val (Take' t) = m; *) |
243 | add (Tactic.Take' t) l (pt, (p, _)) = (* val (Take' t) = m; *) |
244 let |
244 let |
245 val p = |
245 val p = |
246 let val (ps, p') = split_last p (* no connex to prev.ppobj *) |
246 let val (ps, p') = split_last p (* no connex to prev.ppobj *) |
247 in if p' = 0 then ps @ [1] else p end |
247 in if p' = 0 then ps @ [1] else p end |
248 val (pt, c) = Ctree.cappend_form pt p l t |
248 val (pt, c) = Ctree.cappend_form pt p l t |
249 in |
249 in |
250 ((p, Pos.Frm), c, Generate.FormKF (UnparseC.term t), pt) |
250 ((p, Pos.Frm), c, Test_Out.FormKF (UnparseC.term t), pt) |
251 end |
251 end |
252 | add (Tactic.Begin_Trans' t) l (pt, (p, Pos.Frm)) = |
252 | add (Tactic.Begin_Trans' t) l (pt, (p, Pos.Frm)) = |
253 let |
253 let |
254 val (pt, c) = Ctree.cappend_form pt p l t |
254 val (pt, c) = Ctree.cappend_form pt p l t |
255 val pt = Ctree.update_branch pt p Ctree.TransitiveB (*040312*) |
255 val pt = Ctree.update_branch pt p Ctree.TransitiveB (*040312*) |
256 (* replace the old PrfOjb ~~~~~ *) |
256 (* replace the old PrfOjb ~~~~~ *) |
257 val p = (Pos.lev_on o Pos.lev_dn (* starts with [...,0] *)) p |
257 val p = (Pos.lev_on o Pos.lev_dn (* starts with [...,0] *)) p |
258 val (pt, c') = Ctree.cappend_form pt p l t (*FIXME.0402 same istate ???*) |
258 val (pt, c') = Ctree.cappend_form pt p l t (*FIXME.0402 same istate ???*) |
259 in |
259 in |
260 ((p, Pos.Frm), c @ c', Generate.FormKF (UnparseC.term t), pt) |
260 ((p, Pos.Frm), c @ c', Test_Out.FormKF (UnparseC.term t), pt) |
261 end |
261 end |
262 | add (Tactic.Begin_Trans' t) l (pt, (p, Pos.Res)) = |
262 | add (Tactic.Begin_Trans' t) l (pt, (p, Pos.Res)) = |
263 (*append after existing PrfObj vvvvvvvvvvvvv*) |
263 (*append after existing PrfObj vvvvvvvvvvvvv*) |
264 add (Tactic.Begin_Trans' t) l (pt, (Pos.lev_on p, Pos.Frm)) |
264 add (Tactic.Begin_Trans' t) l (pt, (Pos.lev_on p, Pos.Frm)) |
265 | add (Tactic.End_Trans' tasm) l (pt, (p, _)) = |
265 | add (Tactic.End_Trans' tasm) l (pt, (p, _)) = |
266 let |
266 let |
267 val p' = Pos.lev_up p |
267 val p' = Pos.lev_up p |
268 val (pt, c) = Ctree.append_result pt p' l tasm Ctree.Complete |
268 val (pt, c) = Ctree.append_result pt p' l tasm Ctree.Complete |
269 in |
269 in |
270 ((p', Pos.Res), c, Generate.FormKF "DUMMY" (*term2str t ..ERROR (t) has not been declared*), pt) |
270 ((p', Pos.Res), c, Test_Out.FormKF "DUMMY" (*term2str t ..ERROR (t) has not been declared*), pt) |
271 end |
271 end |
272 | add (Tactic.Rewrite_Inst' (_, _, _, _, subs', thm', f, (f', asm))) (is, ctxt) (pt, (p, _)) = |
272 | add (Tactic.Rewrite_Inst' (_, _, _, _, subs', thm', f, (f', asm))) (is, ctxt) (pt, (p, _)) = |
273 let |
273 let |
274 val (pt, c) = Ctree.cappend_atomic pt p (is, ctxt) f |
274 val (pt, c) = Ctree.cappend_atomic pt p (is, ctxt) f |
275 (Tactic.Rewrite_Inst (Subst.T_to_input subs', thm')) (f',asm) Ctree.Complete; |
275 (Tactic.Rewrite_Inst (Subst.T_to_input subs', thm')) (f',asm) Ctree.Complete; |
276 val pt = Ctree.update_branch pt p Ctree.TransitiveB |
276 val pt = Ctree.update_branch pt p Ctree.TransitiveB |
277 in |
277 in |
278 ((p, Pos.Res), c, Generate.FormKF (UnparseC.term f'), pt) |
278 ((p, Pos.Res), c, Test_Out.FormKF (UnparseC.term f'), pt) |
279 end |
279 end |
280 | add (Tactic.Rewrite' (_, _, _, _, thm', f, (f', asm))) (is, ctxt) (pt, (p, _)) = |
280 | add (Tactic.Rewrite' (_, _, _, _, thm', f, (f', asm))) (is, ctxt) (pt, (p, _)) = |
281 let |
281 let |
282 val (pt, c) = Ctree.cappend_atomic pt p (is, ctxt) f (Tactic.Rewrite thm') (f', asm) Ctree.Complete |
282 val (pt, c) = Ctree.cappend_atomic pt p (is, ctxt) f (Tactic.Rewrite thm') (f', asm) Ctree.Complete |
283 val pt = Ctree.update_branch pt p Ctree.TransitiveB |
283 val pt = Ctree.update_branch pt p Ctree.TransitiveB |
284 in |
284 in |
285 ((p, Pos.Res), c, Generate.FormKF (UnparseC.term f'), pt) |
285 ((p, Pos.Res), c, Test_Out.FormKF (UnparseC.term f'), pt) |
286 end |
286 end |
287 | add (Tactic.Rewrite_Set_Inst' (_, _, subs', rls', f, (f', asm))) (is, ctxt) (pt, (p, _)) = |
287 | add (Tactic.Rewrite_Set_Inst' (_, _, subs', rls', f, (f', asm))) (is, ctxt) (pt, (p, _)) = |
288 let |
288 let |
289 val (pt, c) = Ctree.cappend_atomic pt p (is, ctxt) f |
289 val (pt, c) = Ctree.cappend_atomic pt p (is, ctxt) f |
290 (Tactic.Rewrite_Set_Inst (Subst.T_to_input subs', Rule_Set.id rls')) (f', asm) Ctree.Complete |
290 (Tactic.Rewrite_Set_Inst (Subst.T_to_input subs', Rule_Set.id rls')) (f', asm) Ctree.Complete |
291 val pt = Ctree.update_branch pt p Ctree.TransitiveB |
291 val pt = Ctree.update_branch pt p Ctree.TransitiveB |
292 in |
292 in |
293 ((p, Pos.Res), c, Generate.FormKF (UnparseC.term f'), pt) |
293 ((p, Pos.Res), c, Test_Out.FormKF (UnparseC.term f'), pt) |
294 end |
294 end |
295 | add (Tactic.Rewrite_Set' (_, _, rls', f, (f', asm))) (is, ctxt) (pt, (p, _)) = |
295 | add (Tactic.Rewrite_Set' (_, _, rls', f, (f', asm))) (is, ctxt) (pt, (p, _)) = |
296 let |
296 let |
297 val (pt, c) = Ctree.cappend_atomic pt p (is, ctxt) f |
297 val (pt, c) = Ctree.cappend_atomic pt p (is, ctxt) f |
298 (Tactic.Rewrite_Set (Rule_Set.id rls')) (f', asm) Ctree.Complete |
298 (Tactic.Rewrite_Set (Rule_Set.id rls')) (f', asm) Ctree.Complete |
299 val pt = Ctree.update_branch pt p Ctree.TransitiveB |
299 val pt = Ctree.update_branch pt p Ctree.TransitiveB |
300 in |
300 in |
301 ((p, Pos.Res), c, Generate.FormKF (UnparseC.term f'), pt) |
301 ((p, Pos.Res), c, Test_Out.FormKF (UnparseC.term f'), pt) |
302 end |
302 end |
303 | add (Tactic.Check_Postcond' (_, scval)) l (pt, (p, _)) = |
303 | add (Tactic.Check_Postcond' (_, scval)) l (pt, (p, _)) = |
304 let |
304 let |
305 val (pt, c) = Ctree.append_result pt p l (scval, []) Ctree.Complete |
305 val (pt, c) = Ctree.append_result pt p l (scval, []) Ctree.Complete |
306 in |
306 in |
307 ((p, Pos.Res), c, Generate.FormKF (UnparseC.term scval), pt) |
307 ((p, Pos.Res), c, Test_Out.FormKF (UnparseC.term scval), pt) |
308 end |
308 end |
309 | add (Tactic.Calculate' (_, op_, f, (f', _))) l (pt, (p, _)) = |
309 | add (Tactic.Calculate' (_, op_, f, (f', _))) l (pt, (p, _)) = |
310 let |
310 let |
311 val (pt,c) = Ctree.cappend_atomic pt p l f (Tactic.Calculate op_) (f', []) Ctree.Complete |
311 val (pt,c) = Ctree.cappend_atomic pt p l f (Tactic.Calculate op_) (f', []) Ctree.Complete |
312 in |
312 in |
313 ((p, Pos.Res), c, Generate.FormKF (UnparseC.term f'), pt) |
313 ((p, Pos.Res), c, Test_Out.FormKF (UnparseC.term f'), pt) |
314 end |
314 end |
315 | add (Tactic.Check_elementwise' (consts, pred, (f', asm))) l (pt, (p, _)) = |
315 | add (Tactic.Check_elementwise' (consts, pred, (f', asm))) l (pt, (p, _)) = |
316 let |
316 let |
317 val (pt,c) = Ctree.cappend_atomic pt p l consts (Tactic.Check_elementwise pred) (f', asm) Ctree.Complete |
317 val (pt,c) = Ctree.cappend_atomic pt p l consts (Tactic.Check_elementwise pred) (f', asm) Ctree.Complete |
318 in |
318 in |
319 ((p, Pos.Res), c, Generate.FormKF (UnparseC.term f'), pt) |
319 ((p, Pos.Res), c, Test_Out.FormKF (UnparseC.term f'), pt) |
320 end |
320 end |
321 | add (Tactic.Or_to_List' (ors, list)) l (pt, (p, _)) = |
321 | add (Tactic.Or_to_List' (ors, list)) l (pt, (p, _)) = |
322 let |
322 let |
323 val (pt,c) = Ctree.cappend_atomic pt p l ors Tactic.Or_to_List (list, []) Ctree.Complete |
323 val (pt,c) = Ctree.cappend_atomic pt p l ors Tactic.Or_to_List (list, []) Ctree.Complete |
324 in |
324 in |
325 ((p, Pos.Res), c, Generate.FormKF (UnparseC.term list), pt) |
325 ((p, Pos.Res), c, Test_Out.FormKF (UnparseC.term list), pt) |
326 end |
326 end |
327 | add (Tactic.Substitute' (_, _, subte, t, t')) l (pt, (p, _)) = |
327 | add (Tactic.Substitute' (_, _, subte, t, t')) l (pt, (p, _)) = |
328 let |
328 let |
329 val (pt,c) = |
329 val (pt,c) = |
330 Ctree.cappend_atomic pt p l t (Tactic.Substitute (Subst.eqs_to_input subte)) (t',[]) Ctree.Complete |
330 Ctree.cappend_atomic pt p l t (Tactic.Substitute (Subst.eqs_to_input subte)) (t',[]) Ctree.Complete |
331 in ((p, Pos.Res), c, Generate.FormKF (UnparseC.term t'), pt) |
331 in ((p, Pos.Res), c, Test_Out.FormKF (UnparseC.term t'), pt) |
332 end |
332 end |
333 | add (Tactic.Tac_ (_, f, id, f')) l (pt, (p, _)) = |
333 | add (Tactic.Tac_ (_, f, id, f')) l (pt, (p, _)) = |
334 let |
334 let |
335 val (pt, c) = Ctree.cappend_atomic pt p l (TermC.str2term f) (Tactic.Tac id) (TermC.str2term f', []) Ctree.Complete |
335 val (pt, c) = Ctree.cappend_atomic pt p l (TermC.str2term f) (Tactic.Tac id) (TermC.str2term f', []) Ctree.Complete |
336 in |
336 in |
337 ((p,Pos.Res), c, Generate.FormKF f', pt) |
337 ((p,Pos.Res), c, Test_Out.FormKF f', pt) |
338 end |
338 end |
339 | add (Tactic.Subproblem' ((domID, pblID, metID), oris, hdl, fmz_, ctxt_specify, f)) |
339 | add (Tactic.Subproblem' ((domID, pblID, metID), oris, hdl, fmz_, ctxt_specify, f)) |
340 (l as (_, ctxt)) (pt, (p, _)) = |
340 (l as (_, ctxt)) (pt, (p, _)) = |
341 let |
341 let |
342 val (pt, c) = Ctree.cappend_problem pt p l (fmz_, (domID, pblID, metID)) |
342 val (pt, c) = Ctree.cappend_problem pt p l (fmz_, (domID, pblID, metID)) |
343 (oris, (domID, pblID, metID), hdl, ctxt_specify) |
343 (oris, (domID, pblID, metID), hdl, ctxt_specify) |
344 val f = Syntax.string_of_term (ThyC.to_ctxt (Proof_Context.theory_of ctxt)) f |
344 val f = Syntax.string_of_term (ThyC.to_ctxt (Proof_Context.theory_of ctxt)) f |
345 in |
345 in |
346 ((p, Pos.Pbl), c, Generate.FormKF f, pt) |
346 ((p, Pos.Pbl), c, Test_Out.FormKF f, pt) |
347 end |
347 end |
348 | add m' _ (_, pos) = |
348 | add m' _ (_, pos) = |
349 raise ERROR ("Solve_Step.add: not impl.for " ^ Tactic.string_of m' ^ " at " ^ Pos.pos'2str pos) |
349 raise ERROR ("Solve_Step.add: not impl.for " ^ Tactic.string_of m' ^ " at " ^ Pos.pos'2str pos) |
350 |
350 |
351 (* LI switches between solve-phase and specify-phase *) |
351 (* LI switches between solve-phase and specify-phase *) |