22 val p = e_pos'; val c = []; |
22 val p = e_pos'; val c = []; |
23 val (p,_,f,nxt,_,pt) = |
23 val (p,_,f,nxt,_,pt) = |
24 CalcTreeTEST |
24 CalcTreeTEST |
25 [(["functionTerm (x \<up> 2 + 1)", "integrateBy x", "antiDerivative FF"], |
25 [(["functionTerm (x \<up> 2 + 1)", "integrateBy x", "antiDerivative FF"], |
26 ("Integrate", ["integrate", "function"], ["diff", "integration"]))]; |
26 ("Integrate", ["integrate", "function"], ["diff", "integration"]))]; |
27 val (p,_,f,nxt,_,pt) = me nxt p c pt; (*nxt = ("Tac ", ...) --> Add_Given...*) |
27 val (p,_,f,nxt,_,pt) = me nxt p c pt; (*\<rightarrow> Add_Given "functionTerm (x \<up> 2 + 1)"*) |
28 val (p,_,f,nxt,_,pt) = me nxt p c pt; |
28 val (p,_,f,nxt,_,pt) = me nxt p c pt; |
29 val (p,_,f,nxt,_,pt) = me nxt p c pt; |
29 val (p,_,f,nxt,_,pt) = me nxt p c pt; |
30 val (p,_,f,nxt,_,pt) = me nxt p c pt; |
30 val (p,_,f,nxt,_,pt) = me nxt p c pt; |
31 val (p,_,f,nxt,_,pt) = me nxt p c pt; |
31 val (p,_,f,nxt,_,pt) = me nxt p c pt; |
32 val (p,_,f,nxt,_,pt) = me nxt p c pt; |
32 |
33 val (p,_,f,nxt,_,pt) = me nxt p c pt; |
33 val (p''',_,f,nxt''',_,pt''') = me nxt p c pt; (*nxt'''= Specify_Method ["diff", "integration"]*) |
|
34 (*/------------------- step into me Specify_Method ["diff", "integration"] -----------------\*) |
|
35 "~~~~~ fun me , args:"; val (tac, p, _, pt) = (nxt''', p''', c, pt'''); |
|
36 val (pt, p) = |
|
37 (*Step.by_tactic is here for testing by me; do_next would suffice in me*) |
|
38 case Step.by_tactic tac (pt, p) of |
|
39 ("ok", (_, _, ptp)) => ptp |
|
40 |
|
41 val ("ok", ([(Apply_Method ["diff", "integration"], _, _)], _, _)) = (*case*) |
|
42 Step.do_next p ((pt, Pos.e_pos'), []) (*of*); |
|
43 "~~~~~ fun do_next , args:"; val ((ip as (_, p_)), (ptp as (pt, p), tacis)) |
|
44 = (p, ((pt, Pos.e_pos'), [])); |
|
45 (*if*) Pos.on_calc_end ip (*else*); |
|
46 val (_, probl_id, _) = Calc.references (pt, p); |
|
47 val _ = |
|
48 (*case*) tacis (*of*); |
|
49 (*if*) probl_id = Problem.id_empty (*else*); |
|
50 |
|
51 val ("ok", ([(Apply_Method ["diff", "integration"], _, _)], _, _)) = |
|
52 Step.switch_specify_solve p_ (pt, ip); |
|
53 "~~~~~ fun switch_specify_solve , args:"; val (state_pos, (pt, input_pos)) = (p_, (pt, ip)); |
|
54 (*if*) Pos.on_specification ([], state_pos) (*then*); |
|
55 |
|
56 Step.specify_do_next (pt, input_pos); |
|
57 "~~~~~ fun specify_do_next , args:"; val (ptp as (pt, (p, p_))) = (pt, input_pos); |
|
58 val (_, (p_', tac)) = Specify.find_next_step ptp |
|
59 val ist_ctxt = Ctree.get_loc pt (p, p_) |
|
60 val Tactic.Apply_Method mI = |
|
61 (*case*) tac (*of*); |
|
62 |
|
63 val ("ok", ([(Apply_Method ["diff", "integration"], _, _)], _, _)) = |
|
64 LI.by_tactic (Tactic.Apply_Method' (mI, NONE, Istate.empty, ContextC.empty)) |
|
65 ist_ctxt (pt, (p, p_')); |
|
66 "~~~~~ fun by_tactic , args:"; val ((Tactic.Apply_Method' (mI, _, _, _)), (_, ctxt), (pt, pos as (p, _))) |
|
67 = ((Tactic.Apply_Method' (mI, NONE, Istate.empty, ContextC.empty)), |
|
68 ist_ctxt, (pt, (p, p_'))); |
|
69 val (itms, oris, probl) = case get_obj I pt p of (*STILL asms=[]*) |
|
70 PblObj {meth = itms, origin = (oris, _, _), probl, ...} => (itms, oris, probl) |
|
71 | _ => raise ERROR "LI.by_tactic Apply_Method': uncovered case get_obj" |
|
72 val {ppc, ...} = MethodC.from_store ctxt mI; |
|
73 val itms = if itms <> [] then itms else I_Model.complete oris probl [] ppc |
|
74 val srls = LItool.get_simplifier (pt, pos) |
|
75 val (is, env, ctxt, prog) = case LItool.init_pstate srls ctxt itms mI of |
|
76 (is as Pstate {env, ...}, ctxt, scr) => (is, env, ctxt, scr) |
|
77 | _ => raise ERROR "LI.by_tactic Apply_Method': uncovered case init_pstate" |
|
78 val ini = LItool.implicit_take prog env; |
|
79 val pos = start_new_level pos |
|
80 val NONE = |
|
81 (*case*) ini (*of*); |
|
82 |
|
83 val Next_Step (iii, ccc, ttt) = (*case*) |
|
84 LI.find_next_step prog (pt, (lev_dn p, Res)) is ctxt (*of*); |
|
85 "~~~~~ fun find_next_step , args:"; val ((Rule.Prog prog), (ptp as (pt, pos as (p, _))), (Pstate ist), ctxt) |
|
86 = (prog, (pt, (lev_dn p, Res)), is, ctxt); |
|
87 |
|
88 (*case*) |
|
89 scan_to_tactic (prog, (ptp, ctxt)) (Pstate ist) (*of*); |
|
90 "~~~~~ fun scan_to_tactic , args:"; val ((prog, cc), (Pstate (ist as {path, ...}))) |
|
91 = ((prog, (ptp, ctxt)), (Pstate ist)); |
|
92 (*if*) path = [] (*then*); |
|
93 |
|
94 val Accept_Tac (ttt, sss, ccc) = |
|
95 scan_dn cc (trans_scan_dn ist) (Program.body_of prog); |
|
96 "~~~~~ fun scan_dn , args:"; val (cc, ist, (Const (\<^const_name>\<open>Let\<close>(*1*), _) $ e $ (Abs (i, T, b)))) |
|
97 = (cc, (trans_scan_dn ist), (Program.body_of prog)); |
|
98 |
|
99 val Accept_Tac (ttt, sss, ccc) = (*case*) |
|
100 scan_dn cc (ist |> path_down [L, R]) e (*of*); |
|
101 "~~~~~ fun scan_dn , args:"; val ((cc as (_, ctxt)), (ist as {eval, ...}), t) |
|
102 = (cc, (ist |> path_down [L, R]), e); |
|
103 (*if*) Tactical.contained_in t (*else*); |
|
104 val (Program.Tac prog_tac, form_arg) = |
|
105 (*case*) LItool.check_leaf "next " ctxt eval (get_subst ist) t (*of*); |
|
106 |
|
107 val Accept_Tac (ttt, sss, ccc) = |
|
108 check_tac cc ist (prog_tac, form_arg); |
|
109 "~~~~~ fun check_tac , args:"; val (((pt, p), ctxt), ist, (prog_tac, form_arg)) |
|
110 = (cc, ist, (prog_tac, form_arg)); |
|
111 val m = LItool.tac_from_prog pt (Proof_Context.theory_of ctxt) prog_tac |
|
112 val _ = |
|
113 (*case*) m (*of*); |
|
114 |
|
115 (*case*) |
|
116 Solve_Step.check m (pt, p) (*of*); |
|
117 "~~~~~ fun check , args:"; val ((Tactic.Take str), (pt, pos as (p_, p))) = (m, (pt, p)); |
|
118 |
|
119 (*+*)val ([0], Res) = pos; (*<<<-------------------------*) |
|
120 (*-------------------- stop step into me Specify_Method ["diff", "integration"] -------------*) |
|
121 (*\------------------- step into me Specify_Method ["diff", "integration"] -----------------/*) |
|
122 |
|
123 val (p,_,f,nxt,_,pt) = me nxt''' p''' c pt'''; |
34 case nxt of (Apply_Method ["diff", "integration"]) => () |
124 case nxt of (Apply_Method ["diff", "integration"]) => () |
35 | _ => error "integrate.sml -- me method [diff,integration] -- spec"; |
125 | _ => error "integrate.sml -- me method [diff,integration] -- spec"; |
36 "----- step 8: returns nxt = Rewrite_Set_Inst ([\"(''bdv'', x)\"],\"integration\")"; |
126 "----- step 8: returns nxt = Rewrite_Set_Inst ([\"(''bdv'', x)\"],\"integration\")"; |
37 |
127 |
38 "~~~~~ fun me, args:"; val (tac, (p:pos'), _, (pt:ctree)) = (nxt, p, c, pt); |
128 "~~~~~ fun me, args:"; val (tac, (p:pos'), _, (pt:ctree)) = (nxt, p, c, pt); |