265 (case topt of |
266 (case topt of |
266 SOME t => |
267 SOME t => |
267 let val (pt, c) = Ctree.cappend_form pt p (is, ctxt) t |
268 let val (pt, c) = Ctree.cappend_form pt p (is, ctxt) t |
268 in (pos, c, Test_Out.EmptyMout, pt) end |
269 in (pos, c, Test_Out.EmptyMout, pt) end |
269 | NONE => (pos, [], Test_Out.EmptyMout, pt)) |
270 | NONE => (pos, [], Test_Out.EmptyMout, pt)) |
270 | add (Tactic.Take' t) l (pt, (p, _)) = (* val (Take' t) = m; *) |
271 | add (Tactic.Take' t) (l as (_, ctxt)) (pt, (p, _)) = (* val (Take' t) = m; *) |
271 let |
272 let |
272 val p = |
273 val p = |
273 let val (ps, p') = split_last p (* no connex to prev.ppobj *) |
274 let val (ps, p') = split_last p (* no connex to prev.ppobj *) |
274 in if p' = 0 then ps @ [1] else p end |
275 in if p' = 0 then ps @ [1] else p end |
275 val (pt, c) = Ctree.cappend_form pt p l t |
276 val (pt, c) = Ctree.cappend_form pt p l t |
276 in |
277 in |
277 ((p, Pos.Frm), c, Test_Out.FormKF (UnparseC.term t), pt) |
278 ((p, Pos.Frm), c, Test_Out.FormKF (UnparseC.term_in_ctxt ctxt t), pt) |
278 end |
279 end |
279 | add (Tactic.Begin_Trans' t) l (pt, (p, Pos.Frm)) = |
280 | add (Tactic.Begin_Trans' t) (l as (_, ctxt)) (pt, (p, Pos.Frm)) = |
280 let |
281 let |
281 val (pt, c) = Ctree.cappend_form pt p l t |
282 val (pt, c) = Ctree.cappend_form pt p l t |
282 val pt = Ctree.update_branch pt p Ctree.TransitiveB (*040312*) |
283 val pt = Ctree.update_branch pt p Ctree.TransitiveB (*040312*) |
283 (* replace the old PrfOjb ~~~~~ *) |
284 (* replace the old PrfOjb ~~~~~ *) |
284 val p = (Pos.lev_on o Pos.lev_dn (* starts with [...,0] *)) p |
285 val p = (Pos.lev_on o Pos.lev_dn (* starts with [...,0] *)) p |
285 val (pt, c') = Ctree.cappend_form pt p l t (*FIXME.0402 same istate ???*) |
286 val (pt, c') = Ctree.cappend_form pt p l t (*FIXME.0402 same istate ???*) |
286 in |
287 in |
287 ((p, Pos.Frm), c @ c', Test_Out.FormKF (UnparseC.term t), pt) |
288 ((p, Pos.Frm), c @ c', Test_Out.FormKF (UnparseC.term_in_ctxt ctxt t), pt) |
288 end |
289 end |
289 | add (Tactic.Begin_Trans' t) l (pt, (p, Pos.Res)) = |
290 | add (Tactic.Begin_Trans' t) l (pt, (p, Pos.Res)) = |
290 (*append after existing PrfObj vvvvvvvvvvvvv*) |
291 (*append after existing PrfObj vvvvvvvvvvvvv*) |
291 add (Tactic.Begin_Trans' t) l (pt, (Pos.lev_on p, Pos.Frm)) |
292 add (Tactic.Begin_Trans' t) l (pt, (Pos.lev_on p, Pos.Frm)) |
292 | add (Tactic.End_Trans' tasm) l (pt, (p, _)) = |
293 | add (Tactic.End_Trans' tasm) (l as (_, ctxt)) (pt, (p, _)) = |
293 let |
294 let |
294 val p' = Pos.lev_up p |
295 val p' = Pos.lev_up p |
295 val (pt, c) = Ctree.append_result pt p' l tasm Ctree.Complete |
296 val (pt, c) = Ctree.append_result pt p' l tasm Ctree.Complete |
296 in |
297 in |
297 ((p', Pos.Res), c, Test_Out.FormKF "DUMMY" (*term2str t ..ERROR (t) has not been declared*), pt) |
298 ((p', Pos.Res), c, Test_Out.FormKF "DUMMY" (*UnparseC.term_in_ctxt ctxt t*), pt) |
298 end |
299 end |
299 | add (Tactic.Rewrite_Inst' (_, _, _, _, subs', thm', f, (f', asm))) (is, ctxt) (pt, (p, _)) = |
300 | add (Tactic.Rewrite_Inst' (_, _, _, _, subs', thm', f, (f', asm))) (is, ctxt) (pt, (p, _)) = |
300 let |
301 let |
301 val (pt, c) = Ctree.cappend_atomic pt p (is, ctxt) f |
302 val (pt, c) = Ctree.cappend_atomic pt p (is, ctxt) f |
302 (Tactic.Rewrite_Inst (Subst.T_to_input subs', thm')) (f',asm) Ctree.Complete; |
303 (Tactic.Rewrite_Inst (Subst.T_to_input subs', thm')) (f',asm) Ctree.Complete; |
303 val pt = Ctree.update_branch pt p Ctree.TransitiveB |
304 val pt = Ctree.update_branch pt p Ctree.TransitiveB |
304 in |
305 in |
305 ((p, Pos.Res), c, Test_Out.FormKF (UnparseC.term f'), pt) |
306 ((p, Pos.Res), c, Test_Out.FormKF (UnparseC.term_in_ctxt ctxt f'), pt) |
306 end |
307 end |
307 | add (Tactic.Rewrite' (_, _, _, _, thm', f, (f', asm))) (is, ctxt) (pt, (p, _)) = |
308 | add (Tactic.Rewrite' (_, _, _, _, thm', f, (f', asm))) (is, ctxt) (pt, (p, _)) = |
308 let |
309 let |
309 val (pt, c) = Ctree.cappend_atomic pt p (is, ctxt) f (Tactic.Rewrite thm') (f', asm) Ctree.Complete |
310 val (pt, c) = Ctree.cappend_atomic pt p (is, ctxt) f (Tactic.Rewrite thm') (f', asm) Ctree.Complete |
310 val pt = Ctree.update_branch pt p Ctree.TransitiveB |
311 val pt = Ctree.update_branch pt p Ctree.TransitiveB |
311 in |
312 in |
312 ((p, Pos.Res), c, Test_Out.FormKF (UnparseC.term f'), pt) |
313 ((p, Pos.Res), c, Test_Out.FormKF (UnparseC.term_in_ctxt ctxt f'), pt) |
313 end |
314 end |
314 | add (Tactic.Rewrite_Set_Inst' (_, _, subs', rls', f, (f', asm))) (is, ctxt) (pt, (p, _)) = |
315 | add (Tactic.Rewrite_Set_Inst' (_, _, subs', rls', f, (f', asm))) (is, ctxt) (pt, (p, _)) = |
315 let |
316 let |
316 val (pt, c) = Ctree.cappend_atomic pt p (is, ctxt) f |
317 val (pt, c) = Ctree.cappend_atomic pt p (is, ctxt) f |
317 (Tactic.Rewrite_Set_Inst (Subst.T_to_input subs', Rule_Set.id rls')) (f', asm) Ctree.Complete |
318 (Tactic.Rewrite_Set_Inst (Subst.T_to_input subs', Rule_Set.id rls')) (f', asm) Ctree.Complete |
318 val pt = Ctree.update_branch pt p Ctree.TransitiveB |
319 val pt = Ctree.update_branch pt p Ctree.TransitiveB |
319 in |
320 in |
320 ((p, Pos.Res), c, Test_Out.FormKF (UnparseC.term f'), pt) |
321 ((p, Pos.Res), c, Test_Out.FormKF (UnparseC.term_in_ctxt ctxt f'), pt) |
321 end |
322 end |
322 | add (Tactic.Rewrite_Set' (_, _, rls', f, (f', asm))) (is, ctxt) (pt, (p, _)) = |
323 | add (Tactic.Rewrite_Set' (_, _, rls', f, (f', asm))) (is, ctxt) (pt, (p, _)) = |
323 let |
324 let |
324 val (pt, c) = Ctree.cappend_atomic pt p (is, ctxt) f |
325 val (pt, c) = Ctree.cappend_atomic pt p (is, ctxt) f |
325 (Tactic.Rewrite_Set (Rule_Set.id rls')) (f', asm) Ctree.Complete |
326 (Tactic.Rewrite_Set (Rule_Set.id rls')) (f', asm) Ctree.Complete |
326 val pt = Ctree.update_branch pt p Ctree.TransitiveB |
327 val pt = Ctree.update_branch pt p Ctree.TransitiveB |
327 in |
328 in |
328 ((p, Pos.Res), c, Test_Out.FormKF (UnparseC.term f'), pt) |
329 ((p, Pos.Res), c, Test_Out.FormKF (UnparseC.term_in_ctxt ctxt f'), pt) |
329 end |
330 end |
330 | add (Tactic.Check_Postcond' (_, scval)) l (pt, (p, _)) = |
331 | add (Tactic.Check_Postcond' (_, scval)) (l as (_, ctxt)) (pt, (p, _)) = |
331 let |
332 let |
332 val (pt, c) = Ctree.append_result pt p l (scval, []) Ctree.Complete |
333 val (pt, c) = Ctree.append_result pt p l (scval, []) Ctree.Complete |
333 in |
334 in |
334 ((p, Pos.Res), c, Test_Out.FormKF (UnparseC.term scval), pt) |
335 ((p, Pos.Res), c, Test_Out.FormKF (UnparseC.term_in_ctxt ctxt scval), pt) |
335 end |
336 end |
336 | add (Tactic.Calculate' (_, op_, f, (f', _))) l (pt, (p, _)) = |
337 | add (Tactic.Calculate' (_, op_, f, (f', _))) (l as (_, ctxt)) (pt, (p, _)) = |
337 let |
338 let |
338 val (pt,c) = Ctree.cappend_atomic pt p l f (Tactic.Calculate op_) (f', []) Ctree.Complete |
339 val (pt,c) = Ctree.cappend_atomic pt p l f (Tactic.Calculate op_) (f', []) Ctree.Complete |
339 in |
340 in |
340 ((p, Pos.Res), c, Test_Out.FormKF (UnparseC.term f'), pt) |
341 ((p, Pos.Res), c, Test_Out.FormKF (UnparseC.term_in_ctxt ctxt f'), pt) |
341 end |
342 end |
342 | add (Tactic.Check_elementwise' (consts, pred, (f', asm))) l (pt, (p, _)) = |
343 | add (Tactic.Check_elementwise' (consts, pred, (f', asm))) (l as (_, ctxt)) (pt, (p, _)) = |
343 let |
344 let |
344 val (pt,c) = Ctree.cappend_atomic pt p l consts (Tactic.Check_elementwise pred) (f', asm) Ctree.Complete |
345 val (pt,c) = Ctree.cappend_atomic pt p l consts (Tactic.Check_elementwise pred) (f', asm) Ctree.Complete |
345 in |
346 in |
346 ((p, Pos.Res), c, Test_Out.FormKF (UnparseC.term f'), pt) |
347 ((p, Pos.Res), c, Test_Out.FormKF (UnparseC.term_in_ctxt ctxt f'), pt) |
347 end |
348 end |
348 | add (Tactic.Or_to_List' (ors, list)) l (pt, (p, _)) = |
349 | add (Tactic.Or_to_List' (ors, list)) (l as (_, ctxt)) (pt, (p, _)) = |
349 let |
350 let |
350 val (pt,c) = Ctree.cappend_atomic pt p l ors Tactic.Or_to_List (list, []) Ctree.Complete |
351 val (pt,c) = Ctree.cappend_atomic pt p l ors Tactic.Or_to_List (list, []) Ctree.Complete |
351 in |
352 in |
352 ((p, Pos.Res), c, Test_Out.FormKF (UnparseC.term list), pt) |
353 ((p, Pos.Res), c, Test_Out.FormKF (UnparseC.term_in_ctxt ctxt list), pt) |
353 end |
354 end |
354 | add (Tactic.Substitute' (_, _, subte, t, t')) l (pt, (p, _)) = |
355 | add (Tactic.Substitute' (_, _, subte, t, t')) (l as (_, ctxt)) (pt, (p, _)) = |
355 let |
356 let |
356 val (pt,c) = |
357 val (pt,c) = |
357 Ctree.cappend_atomic pt p l t (Tactic.Substitute (Subst.eqs_to_input subte)) (t',[]) Ctree.Complete |
358 Ctree.cappend_atomic pt p l t (Tactic.Substitute (Subst.eqs_to_input subte)) (t',[]) Ctree.Complete |
358 in ((p, Pos.Res), c, Test_Out.FormKF (UnparseC.term t'), pt) |
359 in ((p, Pos.Res), c, Test_Out.FormKF (UnparseC.term_in_ctxt ctxt t'), pt) |
359 end |
360 end |
360 | add (Tactic.Tac_ (_, f, id, f')) l (pt, pos as (p, _)) = |
361 | add (Tactic.Tac_ (_, f, id, f')) l (pt, pos as (p, _)) = |
361 let |
362 let |
362 val ctxt = Ctree.get_ctxt pt pos |
363 val ctxt = Ctree.get_ctxt pt pos |
363 val (pt, c) = Ctree.cappend_atomic pt p l |
364 val (pt, c) = Ctree.cappend_atomic pt p l |