1 (* Title: "Interpret/lucas-interpreter.sml"
3 (c) due to copyright terms
6 "-----------------------------------------------------------------------------------------------";
7 "table of contents -----------------------------------------------------------------------------";
8 "-----------------------------------------------------------------------------------------------";
9 "----------- Take as 1st stac in program -------------------------------------------------------";
10 "----------- re-build: fun locate_input_tactic -------------------------------------------------";
11 "----------- fun locate_input_tactic Helpless, NOT applicable ----------------------------------";
12 "----------- re-build: fun find_next_step, mini ------------------------------------------------";
13 "----------- re-build: fun locate_input_term ---------------------------------------------------";
14 "-----------------------------------------------------------------------------------------------";
15 "-----------------------------------------------------------------------------------------------";
16 "-----------------------------------------------------------------------------------------------";
18 "----------- Take as 1st stac in program -------------------------------------------------------";
19 "----------- Take as 1st stac in program -------------------------------------------------------";
20 "----------- Take as 1st stac in program -------------------------------------------------------";
21 "compare --- Apply_Method with initial Take by Step.do_next --- in test/../step-solve ----------";
22 val p = e_pos'; val c = [];
23 val (p,_,f,nxt,_,pt) =
24 Test_Code.init_calc @{context}
25 [(["functionTerm (x \<up> 2 + 1)", "integrateBy x", "antiDerivative FF"],
26 ("Integrate", ["integrate", "function"], ["diff", "integration"]))];
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;
29 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;
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''');
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
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);
48 (*case*) tacis (*of*);
49 (*if*) probl_id = Problem.id_empty (*else*);
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*);
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 =
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 {model, ...} = MethodC.from_store ctxt mI;
73 val itms = if itms <> [] then itms else I_Model.complete oris probl [] model
74 val prog_rls = LItool.get_simplifier (pt, pos)
75 val (is, env, ctxt, prog) = case LItool.init_pstate prog_rls ctxt itms mI of
76 (is as Pstate {env, ...}, ctxt, program) => (is, env, ctxt, program)
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
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);
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*);
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));
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*);
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, p) prog_tac
113 (*//------------------ step into tac_from_prog ---------------------------------------------\\*)
114 (*keep for continuing check_tac ----------------------------*)
115 val return_tac_from_prog = m
116 (* args of tac_from_prog: ---------------------------------\*)
117 (*+*)val ([0], Res) = p (*isa == isa2*);
118 (*+*)pt (*Output isa == isa2*);
119 (*+*)val "([\"\n(f_f, x \<up> 2 + 1)\", \"\n(v_v, x)\"], [R, L, R], empty, NONE, \n??.empty, ORundef, false, false)"
120 = Istate.pstate2str ist (*isa == isa2*)
121 (*+*)val "Take (Integral x \<up> 2 + 1 D x)" = UnparseC.term_in_ctxt @{context} prog_tac (*isa == isa2*)
122 (*+*)val NONE = form_arg (*isa == isa2*)
123 (* args of tac_from_prog: ---------------------------------/*)
124 (* return value ------------------------------------------\*)
125 (*+* )val Take "Integral x \<up> 2 + 1 D x" = m ( *isa <> isa2*)
126 (* return value ------------------------------------------/*)
128 "~~~~~ fun tac_from_prog , args:"; val ((pt, pos), intac) =
131 (*+*)val ([0], Res) = pos
133 val pos = Pos.back_from_new pos
134 val ctxt = Ctree.get_ctxt pt pos
135 val thy = Proof_Context.theory_of ctxt
136 (*-------------------- stop step into tac_from_prog ------------------------------------------*)
137 (*\\------------------ step into tac_from_prog ---------------------------------------------//*)
139 val m = return_tac_from_prog (*kept for continuing check_tac*)
145 Solve_Step.check m (pt, p) (*of*);
146 "~~~~~ fun check , args:"; val ((Tactic.Take str), (pt, pos as (p_, p))) = (m, (pt, p));
148 (*+*)val ([0], Res) = pos; (*<<<-------------------------*)
149 (*-------------------- stop step into me Specify_Method ["diff", "integration"] -------------*)
150 (*\\------------------- step into me Specify_Method ["diff", "integration"] ---------------//*)
152 val (p,_,f,nxt,_,pt) = me nxt''' p''' c pt''';
153 case nxt of (Apply_Method ["diff", "integration"]) => ()
154 | _ => error "integrate.sml -- me method [diff,integration] -- spec";
155 "----- step 8: returns nxt = Rewrite_Set_Inst ([\"(''bdv'', x)\"],\"integration\")";
157 "~~~~~ fun me, args:"; val (tac, (p:pos'), _, (pt:ctree)) = (nxt, p, c, pt);
158 "~~~~~ fun Step.by_tactic, args:"; val (tac, (ptp as (pt, p))) = (tac, (pt,p));
159 val Applicable.Yes m = Step.check tac (pt, p);
160 (*if*) Tactic.for_specify' m; (*false*)
161 "~~~~~ fun loc_solve_ , args:"; val (m, (pt,pos)) = (m, ptp);
163 "~~~~~ fun Step_Solve.by_tactic , args:"; val (m as Apply_Method' (mI, _, _, ctxt), (pt, (pos as (p,_))))
165 val {prog_rls, ...} = MethodC.from_store ctxt mI;
166 val itms = case get_obj I pt p of
167 PblObj {meth=itms, ...} => itms
168 | _ => error "solve Apply_Method: uncovered case get_obj"
169 val thy' = get_obj g_domID pt p;
170 val thy = ThyC.get_theory thy';
171 val prog_rls = LItool.get_simplifier (pt, pos)
172 val (is, env, ctxt, sc) = case LItool.init_pstate prog_rls ctxt itms mI of
173 (is as Istate.Pstate {env, ...}, ctxt, sc) => (is, env, ctxt, sc)
174 | _ => error "solve Apply_Method: uncovered case init_pstate";
175 (*+*)pstate2str (the_pstate is) = "([\"\n(f_f, x \<up> 2 + 1)\",\"\n(v_v, x)\"], [], empty, NONE, \n??.empty, ORundef, false, true)";
176 val ini = LItool.implicit_take sc env;
179 val NONE = (*case*) ini (*of*);
180 val Next_Step (is', ctxt', m') =
181 LI.find_next_step sc (pt, (p, Res)) is ctxt;
182 (*+*)pstate2str (the_pstate is') = "([\"\n(f_f, x \<up> 2 + 1)\",\"\n(v_v, x)\"], [R,L,R], empty, NONE, \nIntegral x \<up> 2 + 1 D x, ORundef, false, false)";
183 val Safe_Step (_, _, Take' _) = (*case*)
184 locate_input_tactic sc (pt, (p, Res)) is' ctxt' m' (*of*);
185 "~~~~~ fun locate_input_tactic , args:"; val ((Prog prog), cstate, istate, ctxt, tac)
186 = (sc, (pt, (p, Res)), is', ctxt', m');
188 (*case*) scan_to_tactic1 (prog, (cstate, ctxt, tac)) istate (*of*);
189 "~~~~~ fun scan_to_tactic1 , args:"; val ((prog, (cctt as ((_, p), _, _))), (Istate.Pstate (ist as {path, ...})))
190 = ((prog, (cstate, ctxt, tac)), istate);
191 (*if*) path = [] orelse ((last_elem o fst) p = 0 andalso snd p = Res) (*then*);
193 val Accept_Tac1 (_, _, Take' _) =
194 scan_dn1 cctt (ist |> set_path [R] |> set_or ORundef) (Program.body_of prog);
195 "~~~~~ fun scan_dn1 , args:"; val (xxx, ist, (Const (\<^const_name>\<open>Let\<close>, _) $ e $ (Abs (id, T, b))))
196 = (cctt, (ist |> set_path [R] |> set_or ORundef), (Program.body_of prog));
198 (*+*) if UnparseC.term e = "Take (Integral f_f D v_v)" then () else error "scan_dn1 Integral changed";
201 scan_dn1 xxx (ist |> path_down [L, R]) e (*of*);
202 (*======= end of scanning tacticals, a leaf =======*)
203 "~~~~~ fun scan_dn1 , args:"; val (((pt, p), ctxt, tac), (ist as {eval, or, ...}), t)
204 = (xxx, (ist |> path_down [L, R]), e);
205 val (Program.Tac stac, a') = check_leaf "locate" ctxt eval (get_subst ist) t;
209 "----------- re-build: fun locate_input_tactic -------------------------------------------------";
210 "----------- re-build: fun locate_input_tactic -------------------------------------------------";
211 "----------- re-build: fun locate_input_tactic -------------------------------------------------";
212 val fmz = ["equality (x+1=(2::real))", "solveFor x", "solutions L"];
213 val (dI',pI',mI') = ("Test", ["sqroot-test", "univariate", "equation", "test"],
214 ["Test", "squ-equ-test-subpbl1"]);
215 val (p,_,f,nxt,_,pt) = Test_Code.init_calc @{context} [(fmz, (dI',pI',mI'))];
216 val (p,_,f,nxt,_,pt) = me nxt p [] pt;
217 val (p,_,f,nxt,_,pt) = me nxt p [] pt;
218 val (p,_,f,nxt,_,pt) = me nxt p [] pt;
219 val (p,_,f,nxt,_,pt) = me nxt p [] pt;
220 val (p,_,f,nxt,_,pt) = me nxt p [] pt;
221 val (p,_,f,nxt,_,pt) = me nxt p [] pt;
222 (*[], Met*)val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = (_, Apply_Method ["Test", "squ-equ-test-subpbl1"])*);
223 (*[1], Frm*)val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = ("Rewrite_Set", Rewrite_Set "norm_equation")*)
225 (*//------------------ begin step into ------------------------------------------------------\\*)
226 (*[1], Res*)val (p'''''_''',_,f,nxt'''''_''',_,pt'''''_''') = me nxt p [] pt; (*nxt = Rewrite_Set "Test_simplify"*)
228 "~~~~~ fun me , args:"; val (tac, p, _(*NEW remove*), pt) = (nxt, p, [], pt);
230 (** )val (***)xxxx(***) ( *("ok", (_, _, (pt, p))) =( **) (*case*)
231 Step.by_tactic tac (pt,p) (*of*);
232 "~~~~~ fun by_tactic , args:"; val (tac, (ptp as (pt, p))) = (tac, (pt,p));
233 val Applicable.Yes m = (*case*) Solve_Step.check tac (pt, p) (*of*);
234 (*if*) Tactic.for_specify' m; (*false*)
236 (** )val (***)xxxxx_x(***) ( *(msg, cs') =( **)
237 Step_Solve.by_tactic m ptp;
238 "~~~~~ fun by_tactic , args:"; val (m, (pt, po as (p, p_))) = (m, ptp);
239 (*+*)val (pt'''''_', (p'''''_', p_'''''_')) = (pt, (p, p_));
240 (*if*) MethodC.id_empty = get_obj g_metID pt (par_pblobj pt p); (*else*)
241 val thy' = get_obj g_domID pt (par_pblobj pt p);
242 val (is, sc) = LItool.resume_prog (p,p_) pt;
244 locate_input_tactic sc (pt, po) (fst is) (snd is) m;
245 "~~~~~ fun locate_input_tactic , args:"; val (Prog prog, cstate, istate, ctxt, tac)
246 = (sc, (pt, po), (fst is), (snd is), m);
247 val prog_rls = get_simplifier cstate;
249 (** )val Accept_Tac1 ((is as (_,_,_,_,_,strong_ass), ctxt, ss as((tac', _, ctree, pos', _) :: _))) =( **)
250 (*case*) scan_to_tactic1 (prog, (cstate, ctxt, tac)) istate (*of*);
251 "~~~~~ fun scan_to_tactic1 , args:"; val ((prog, (cctt as ((_, p), _, _))), (Istate.Pstate (ist as {path, ...})))
252 = ((prog, (cstate, ctxt, tac)), istate);
253 (*if*) path = [] orelse ((last_elem o fst) p = 0 andalso snd p = Res) (*then*);
255 (** )val xxxxx_xx = ( **)
256 scan_dn1 cctt (ist |> set_path [R] |> set_or ORundef) (Program.body_of prog);
257 "~~~~~ fun scan_dn1 , args:"; val (xxx, ist, (Const (\<^const_name>\<open>Let\<close>, _) $ e $ (Abs (id, T, b))))
258 = (cctt, (ist |> set_path [R] |> set_or ORundef), (Program.body_of prog));
260 (*case*) scan_dn1 xxx (ist |> path_down [L, R]) e (*of*);
261 "~~~~~ fun scan_dn1 , args:"; val ((xxx as (cstate, _, _)), ist, (Const (\<^const_name>\<open>Chain\<close>(*1*), _) $ e1 $ e2 $ a))
262 = (xxx, (ist |> path_down [L, R]), e);
264 (*case*) scan_dn1 xxx (ist |> path_down_form ([L, L, R], a)) e1 (*of*);
265 "~~~~~ fun scan_dn1 , args:"; val (xxx, ist, (Const (\<^const_name>\<open>Try\<close>(*2*), _) $ e))
266 = (xxx, (ist |> path_down_form ([L, L, R], a)), e1);
268 (*case*) scan_dn1 xxx (ist |> path_down [R]) e (*of*);
269 (*======= end of scanning tacticals, a leaf =======*)
270 "~~~~~ fun scan_dn1 , args:"; val (((pt, p), ctxt, tac), (ist as {env, eval, or, ...}), t)
271 = (xxx, (ist |> path_down [R]), e);
272 val (Program.Tac stac, a') =
273 (*case*) check_leaf "locate" ctxt eval (get_subst ist) t (*of*);
274 val LItool.Associated (m, v', ctxt) =
275 (*case*) associate (pt, p) ctxt (m, stac) (*of*);
277 Accept_Tac1 (ist |> set_subst_true (a', v'), ctxt, m) (*return value*);
278 "~~~~~ from scan_dn1 to scan_to_tactic1 return val:"; val (xxxxx_xx)
279 = (Accept_Tac1 (ist |> set_subst_true (a', v'), ctxt, m));
281 "~~~~~ from scan_to_tactic1 to fun locate_input_tactic return val:"; val Accept_Tac1 ((ist as {assoc, ...}), ctxt, tac')
282 = (Accept_Tac1 (ist |> set_subst_true (a', v'), ctxt, m));
283 (*if*) LibraryC.assoc (*then*);
285 Safe_Step (Istate.Pstate ist, ctxt, tac') (*return value*);
286 "~~~~~ from locate_input_tactic to fun Step_Solve.by_tactic return:"; val Safe_Step (istate, ctxt, tac)
287 = (*xxxxx_xx*)(**)Safe_Step (Istate.Pstate ist, ctxt, tac')(**);
289 (*+*)val (pt, po as (p, p_)) = (pt'''''_', (p'''''_', p_'''''_')); (* from begin of by_tactic *)
290 val (p'', _, _,pt') =
291 Step.add tac (istate, ctxt) (pt, (lev_on p, Pbl));
294 ("ok", ([(Tactic.input_from_T ctxt tac, tac, (p'', (istate, ctxt)))],
295 [(*ctree NOT cut*)], (pt', p''))) (*return value*);
296 "~~~~~ from Step_Solve.by_tactic \<longrightarrow> Step.by_tactic return:"; val ((msg, cs' : Calc.state_post))
297 = ("ok", ([(Tactic.input_from_T ctxt tac, tac, (p'', (istate, ctxt)) )],
298 [(*ctree NOT cut*)], (pt', p'')));
300 "~~~~~ from Step.by_tactic to me return:"; val (("ok", (_, _, (pt, p)))) = (*** )xxxx( ***) ("ok", cs');
302 (case Step.do_next p ((pt, Pos.e_pos'), []) of
303 ("ok", (ts as (_, _, _) :: _, _, _)) => ("", ts)
304 | ("helpless", _) => ("helpless: cannot propose tac", [])
305 | ("no-fmz-spec", _) => error "no-fmz-spec"
306 | ("end-of-calculation", (ts, _, _)) => ("", ts)
307 | _ => error "me: uncovered case")
308 handle ERROR msg => raise ERROR msg
311 tacis as (_::_) => let val (tac, _, _) = last_elem tacis in tac end
312 | _ => if p = ([], Pos.Res) then Tactic.End_Proof' else Tactic.Empty_Tac;
314 (p, [] : NEW, TESTg_form ctxt (pt, p), (Tactic.tac2IDstr tac, tac), Celem.Sundef, pt);
315 "~~~~~ from me to TOOPLEVEL return:"; val (p,_,f,nxt,_,pt)
316 = (*** )xxx( ***) (p, [] : NEW, TESTg_form ctxt (pt, p), (Tactic.tac2IDstr tac, tac), Celem.Sundef, pt);
318 (*//--------------------- check results from modified me ----------------------------------\\*)
319 if p = ([2], Res) andalso
320 pr_ctree ctxt pr_short pt = ". ----- pblobj -----\n1. x + 1 = 2\n2. x + 1 = 2\n"
322 (case nxt of ("Rewrite_Set", Rewrite_Set "Test_simplify") => ()
324 else error "check results from modified me CHANGED";
325 (*\\--------------------- check results from modified me ----------------------------------//*)
327 "~~~~~ from me to TOPLEVEL return:"; val (p,_,f,nxt,_,pt) = (*** )xxx( ***) (**)(p, 000, f, nxt, 000, pt)(**);
328 (*\\------------------ end step into --------------------------------------------------------//*)
330 (*[3], Res*)val (p,_,f,nxt,_,pt) = me nxt'''''_''' p'''''_''' [] pt'''''_'''; (*nxt = Subproblem ("Test", ["LINEAR", "univariate", "equation", "test"])*)
331 (*[3], Pbl*)val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = Model_Problem*)
332 (*[3], Pbl*)val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = Add_Given "equality (- 1 + x = 0)"*)
333 (*[3], Pbl*)val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = Add_Given "solveFor x"*)
334 (*[3], Pbl*)val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = Add_Find "solutions x_i"*)
335 (*[3], Pbl*)val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = Specify_Theory "Test"*)
336 (*[3], Pbl*)val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = Specify_Problem ["LINEAR", "univariate", "equation", "test"]*)
337 (*[3], Pbl*)val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = Specify_Method ["Test", "solve_linear"]*)
338 (*[3], Met*)val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = Apply_Method ["Test", "solve_linear"]*)
339 (*[3, 1], Frm*)val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = Rewrite_Set_Inst (["(''bdv'', x)"], "isolate_bdv")*)
340 (*[3, 1], Res*)val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = Rewrite_Set "Test_simplify"*)
341 (*[3, 2], Res*)val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = Check_Postcond ["LINEAR", "univariate", "equation", "test"]*)
342 (*[3], Res*)val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = Check_elementwise "Assumptions"*)
343 (*[4], Res*)val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = Check_Postcond ["sqroot-test", "univariate", "equation", "test"]*)
344 (*[], Res*)val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = End_Proof'*)
346 (*/--------------------- final test ----------------------------------\\*)
347 if p = ([], Res) andalso f2str f = "[x = 1]" andalso pr_ctree ctxt pr_short pt =
348 ". ----- pblobj -----\n" ^
350 "2. x + 1 + - 1 * 2 = 0\n" ^
351 "3. ----- pblobj -----\n" ^
352 "3.1. - 1 + x = 0\n" ^
353 "3.2. x = 0 + - 1 * - 1\n" ^
355 then case nxt of End_Proof' => () | _ => error "re-build: fun locate_input_tactic changed 1"
356 else error "re-build: fun locate_input_tactic changed 2";
359 "----------- fun locate_input_tactic Helpless, NOT applicable ----------------------------------";
360 "----------- fun locate_input_tactic Helpless, NOT applicable ----------------------------------";
361 "----------- fun locate_input_tactic Helpless, NOT applicable ----------------------------------";
362 (*cp from -- try fun applyTactics ------- *)
363 val (p,_,f,nxt,_,pt) = Test_Code.init_calc @{context} [(["Term (5*e + 6*f - 8*g - 9 - 7*e - 4*f + 10*g + 12)",
365 ("PolyMinus",["plus_minus", "polynom", "vereinfachen"],
366 ["simplification", "for_polynomials", "with_minus"]))];
367 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
368 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
369 val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
370 (*[1], Frm*)val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = Rewrite_Set "ordne_alphabetisch"*)
372 (*+*)val Test_Out.FormKF "5 * e + 6 * f - 8 * g - 9 - 7 * e - 4 * f + 10 * g + 12" = f
374 (*[1], Res*)val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = Rewrite_Set "fasse_zusammen"*)
376 (*+*)if map (Tactic.input_to_string ctxt) (specific_from_prog pt p) =
377 ["Rewrite (\"subtrahiere_x_plus_minus\", \"\<lbrakk>?l is_num; ?m is_num\<rbrakk>\n\<Longrightarrow> ?x + ?m * ?v - ?l * ?v = ?x + (?m - ?l) * ?v\")",
378 "Rewrite (\"subtrahiere_x_minus_plus\", \"\<lbrakk>?l is_num; ?m is_num\<rbrakk>\n\<Longrightarrow> ?x - ?m * ?v + ?l * ?v = ?x + (- ?m + ?l) * ?v\")",
379 (*this is new since ThmC.numerals_to_Free.-----\\*)
381 then () else error "specific_from_prog ([1], Res) 1 CHANGED";
382 (*[2], Res*)val ("ok", (_, _, ptp as (pt, p))) = Step.by_tactic (hd (specific_from_prog pt p)) (pt, p);
384 (*+*)if map (Tactic.input_to_string @{context}) (specific_from_prog pt p) = [
385 "Rewrite (\"tausche_minus\", \"\<lbrakk>?b ist_monom; ?a kleiner ?b\<rbrakk>\n\<Longrightarrow> ?b - ?a = - ?a + ?b\")",
386 "Rewrite (\"subtrahiere_x_plus_minus\", \"\<lbrakk>?l is_num; ?m is_num\<rbrakk>\n\<Longrightarrow> ?x + ?m * ?v - ?l * ?v = ?x + (?m - ?l) * ?v\")",
387 "Rewrite (\"subtrahiere_x_minus_plus\", \"\<lbrakk>?l is_num; ?m is_num\<rbrakk>\n\<Longrightarrow> ?x - ?m * ?v + ?l * ?v = ?x + (- ?m + ?l) * ?v\")",
388 (*this is new since ThmC.numerals_to_Free.-----\\*)
390 (*this is new since ThmC.numerals_to_Free.-----//*)
392 then () else error "specific_from_prog ([1], Res) 2 CHANGED";
393 (* = ([3], Res)*)val ("ok", (_, _, ptp as (pt, p))) = Step.by_tactic (hd (specific_from_prog pt p)) (pt, p);
395 (*//----------------- exception PTREE "get_obj f EmptyPtree" raised --------------------------\\*)
396 (**)val ("ok", ([(Rewrite ("tausche_minus", _), _, _)], _, _)) = (*isa*)
397 Step.by_tactic (hd (specific_from_prog pt p)) (pt, p);
398 "~~~~~ fun by_tactic , args:"; val (tac, (ptp as (pt, p))) = (hd (specific_from_prog pt p), (pt, p));
399 val Applicable.Yes m = (*case*) Solve_Step.check tac (pt, p) (*of*);
400 (*if*) Tactic.for_specify' m; (*false*)
402 (**) val ("ok", ([(Rewrite ("tausche_minus", _), _, _)], _, _)) = (*isa*)
403 Step_Solve.by_tactic m (pt, p);
404 "~~~~~ fun by_tactic , args:"; val (m, (pt, po as (p, p_))) = (m, (pt, p));
405 (*if*) MethodC.id_empty = get_obj g_metID pt (par_pblobj pt p) (*else*);
406 val thy' = get_obj g_domID pt (par_pblobj pt p);
407 val (is, sc) = LItool.resume_prog (p,p_) pt;
409 (*case*) locate_input_tactic sc (pt, po) (fst is) (snd is) m (*of*);
410 "~~~~~ fun locate_input_tactic , args:"; val ((Rule.Prog prog), (cstate as (pt, (*?*)pos(*?*))), istate, ctxt, tac)
411 = (sc, (pt, po), (fst is), (snd is), m);
412 val prog_rls = LItool.get_simplifier cstate (*TODO: shift into Istate.T*);
414 (*case*) scan_to_tactic1 (prog, (cstate, ctxt, tac)) istate (*of*);
415 "~~~~~ fun scan_to_tactic1 , args:"; val ((prog, (cctt as ((_, p), _, _))), (Istate.Pstate (ist as {path, ...})))
416 = ((prog, (cstate, ctxt, tac)), istate);
417 (*if*) path = [] orelse ((last_elem o fst) p = 0 andalso snd p = Res) (*else*);
419 go_scan_up1 (prog, cctt) ist;
420 "~~~~~ fun go_scan_up1 , args:"; val ((pcct as (prog, _)), (ist as {path, ...}))
421 = ((prog, cctt), ist);
422 (*if*) 1 < length path (*then*);
424 scan_up1 pcct (ist |> path_up) (TermC.sub_at (path_up' path) prog);
425 "~~~~~ and scan_up1 , args:"; val (pcct, ist, (Const (\<^const_name>\<open>Try\<close>(*2*), _) $ _))
426 = (pcct, (ist |> path_up), (TermC.sub_at (path_up' path) prog));
428 go_scan_up1 pcct ist;
429 "~~~~~ and go_scan_up1 , args:"; val ((pcct as (prog, _)), (ist as {path, ...}))
431 (*if*) 1 < length path (*then*);
433 scan_up1 pcct (ist |> path_up) (TermC.sub_at (path_up' path) prog);
434 "~~~~~ and scan_up1 , args:"; val ((pcct as (prog, cct as (cstate, _, _))), ist,
435 (Const (\<^const_name>\<open>Chain\<close>(*3*), _) $ _ ))
436 = (pcct, (ist |> path_up), (TermC.sub_at (path_up' path) prog));
437 val e2 = check_Seq_up ctxt ist prog
439 (*case*) scan_dn1 cct (ist |> path_up_down [R] |> set_or ORundef) e2 (*of*);
440 "~~~~~ fun scan_dn1 , args:"; val (yyy, ist, (Const (\<^const_name>\<open>Chain\<close>(*2*), _) $ e1 $ e2))
441 = (cct, (ist |> path_up_down [R] |> set_or ORundef), e2);
443 (*case*) scan_dn1 cct (ist |> path_down [L, R]) e1 (*of*);
444 "~~~~~ fun scan_dn1 , args:"; val (xxx, ist, (Const (\<^const_name>\<open>Try\<close>(*2*), _) $ e))
445 = (cct, (ist |> path_down [L, R]), e1);
447 (*case*) scan_dn1 cct (ist |> path_down [R]) e (*of*);
448 (*======= end of scanning tacticals, a leaf =======*)
449 "~~~~~ fun scan_dn1 , args:"; val ((cct as (_, ctxt, _)), (ist as {eval, ...}), t)
450 = (cct, (ist |> path_down [R]), e);
451 (*if*) Tactical.contained_in t (*else*);
452 val (Program.Tac prog_tac, form_arg) = (*case*)
453 LItool.check_leaf "locate" ctxt eval (get_subst ist) t (*of*);
455 check_tac1 cct ist (prog_tac, form_arg);
456 "~~~~~ fun check_tac1 , args:"; val (((pt, p), ctxt, tac), (ist as {act_arg, or, ...}), (prog_tac, form_arg)) =
457 (cct, ist, (prog_tac, form_arg));
458 val LItool.Not_Associated = (*case*)
459 LItool.associate (pt, p) ctxt (tac, prog_tac) (*of*);
460 val _(*ORundef*) = (*case*) or (*of*);
462 (*+*)Solve_Step.check (LItool.tac_from_prog (pt, p) prog_tac) (pt, p);
464 val Applicable.Yes m' =
465 (*case*) Solve_Step.check (LItool.tac_from_prog (pt, p) prog_tac) (pt, p) (*of*);
467 Reject_Tac1 (ist |> set_subst_false (form_arg, Tactic.result m'), ctxt, tac)
468 (*return from check_tac1*);
469 "~~~~~ from fun check_tac1 \<longrightarrow>fun scan_dn1 \<longrightarrow>fun scan_dn1 \<longrightarrow>fun locate_input_tactic , return:"; val (Reject_Tac1 _) =
470 (Reject_Tac1 (ist |> set_subst_false (form_arg, Tactic.result m'), ctxt, tac));
472 val Test_Out.FormKF "- 9 + 12 + 5 * e - 7 * e + 6 * f - 4 * f - 8 * g + 10 * g" = f;
476 "----------- re-build: fun find_next_step, mini ------------------------------------------------";
477 "----------- re-build: fun find_next_step, mini ------------------------------------------------";
478 "----------- re-build: fun find_next_step, mini ------------------------------------------------";
479 val fmz = ["Term (a + a ::real)", "normalform n_n"];
480 val (dI',pI',mI') = ("Poly",["polynomial", "simplification"],["simplification", "for_polynomials"]);
481 val (p,_,f,nxt,_,pt) = Test_Code.init_calc @{context} [(fmz, (dI',pI',mI'))];
482 (*[], Pbl*)val (_, ([(tac, _, _)], _, (pt, p))) = Step.do_next p ((pt, Pos.e_pos'), []);(*Model_Problem*)
483 (*[], Pbl*)val (_, ([(tac, _, _)], _, (pt, p))) = Step.do_next p ((pt, Pos.e_pos'), []);(*Specify_Theory "Poly"*)
484 (*[], Pbl*)val (_, ([(tac, _, _)], _, (pt, p))) = Step.do_next p ((pt, Pos.e_pos'), []);(*Specify_Problem ["polynomial", "simplification"]*)
485 (*[], Met*)val (_, ([(tac, _, _)], _, (pt, p))) = Step.do_next p ((pt, e_pos'), []);(*Specify_Method ["simplification", "for_polynomials"]*)
486 (*1], Frm*)val (_, ([(tac, _, _)], _, (pt, p))) = Step.do_next p ((pt, e_pos'), []);(*Apply_Method ["simplification", "for_polynomials"]*)
487 (*[1], Res*)val (_, ([(tac'''''_', _, _)], _, (pt'''''_', p'''''_'))) =
489 Step.do_next p ((pt, e_pos'), []);(*Rewrite_Set "norm_Poly"*)
490 (*//------------------ go into 1 ------------------------------------------------------------\\*)
491 "~~~~~ fun do_next , args:"; val ((ip as (_, p_)), (ptp as (pt, p), tacis))
492 = (p, ((pt, e_pos'), []));
493 val pIopt = Ctree.get_pblID (pt, ip);
494 (*if*) ip = ([], Res) (*else*);
495 val _ = (*case*) tacis (*of*);
496 val SOME _ = (*case*) pIopt (*of*);
497 (*if*) member op = [Pos.Pbl, Pos.Met] p_ (*else*);
499 val ("ok", ([(Rewrite_Set "norm_Poly", _, _)], _, (_, ([1], Res)))) =
500 Step_Solve.do_next (pt, ip);
501 "~~~~~ and do_next , args:"; val (ptp as (pt, pos as (p, p_))) = (pt, ip);
502 (*if*) MethodC.id_empty = get_obj g_metID pt (par_pblobj pt p) (*else*);
503 val thy' = get_obj g_domID pt (par_pblobj pt p);
504 val ((ist, ctxt), sc) = LItool.resume_prog (p,p_) pt;
506 val Next_Step (_, _, Rewrite_Set' ("Poly", _, Rule_Set.Sequence {id = "norm_Poly", ...}, _, _)) =
507 LI.find_next_step sc (pt, pos) ist ctxt (*of*);
508 "~~~~~ fun find_next_step , args:"; val ((Rule.Prog prog), (ptp as(pt, (p, _))), (Pstate ist), ctxt)
509 = (sc, (pt, pos), ist, ctxt);
511 val Accept_Tac (Rewrite_Set' ("Poly", _, Rule_Set.Sequence {id = "norm_Poly", ...}, _, _), _, _) =
512 (*case*) scan_to_tactic (prog, (ptp, ctxt)) (Pstate ist) (*of*);
513 "~~~~~ fun scan_to_tactic , args:"; val ((prog, cc), (Pstate (ist as {path, ...})))
514 = ((prog, (ptp, ctxt)), (Pstate ist));
515 (*if*) path = [] (*then*);
517 val Accept_Tac (Rewrite_Set' ("Poly", _, Rule_Set.Sequence {id = "norm_Poly", ...}, _, _), _, _) =
518 scan_dn cc (trans_scan_dn ist) (Program.body_of prog);
519 "~~~~~ fun scan_dn , args:"; val ((cc as (_, ctxt)), (ist as {eval, ...}), t)
520 = (cc, (trans_scan_dn ist), (Program.body_of prog));
521 (*if*) Tactical.contained_in t (*else*);
522 val (Program.Tac prog_tac, form_arg) = (*case*) LItool.check_leaf "next " ctxt eval (get_subst ist) t (*of*);
524 val Accept_Tac (Rewrite_Set' ("Poly", _, Rule_Set.Sequence {id = "norm_Poly", ...}, _, _), _, _) =
525 check_tac cc ist (prog_tac, form_arg) (*return from xxx*);
526 "~~~~~ from fun scan_dn\<longrightarrow>fun scan_to_tactic\<longrightarrow>fun find_next_step, return:"; val (Accept_Tac (tac, ist, ctxt))
527 = (check_tac cc ist (prog_tac, form_arg));
529 Next_Step (Pstate ist, Tactic.insert_assumptions tac ctxt, tac) (*return from find_next_step*);
530 "~~~~~ from fun find_next_step\<longrightarrow>and do_next\<longrightarrow>fun zzz, return:"; val (Next_Step (ist, ctxt, tac))
531 = (Next_Step (Pstate ist, Tactic.insert_assumptions tac ctxt, tac));
533 LI.by_tactic tac (ist, Tactic.insert_assumptions tac ctxt) ptp (*return from and do_next*);
534 "~~~~~ from and do_next\<longrightarrow>fun do_next\<longrightarrow>toplevel, return:"; val (_, ([(tac''''', _, _)], _, (pt''''', p''''')))
535 = (LI.by_tactic tac (ist, Tactic.insert_assumptions tac ctxt) ptp);
536 (*\\------------------ end of go into 1 -----------------------------------------------------//*)
538 (*[], Res*)val (_, ([(tac''''', _, _)], _, (pt''''', p'''''))) =
540 Step.do_next p'''''_' ((pt'''''_', Pos.e_pos'), []);(* Check_Postcond ["polynomial", "simplification"]*)
541 (*//------------------ go into 2 ------------------------------------------------------------\\*)
542 "~~~~~ fun do_next , args:"; val ((ip as (_, p_)), (ptp as (pt, p), tacis))
543 = (p''''', ((pt''''', e_pos'), []));
544 val pIopt = Ctree.get_pblID (pt, ip);
545 (*if*) ip = ([], Res) (*else*);
546 val _ = (*case*) tacis (*of*);
547 val SOME _ = (*case*) pIopt (*of*);
548 (*if*) member op = [Pos.Pbl, Pos.Met] p_ (*else*);
550 val ("ok", ([(Check_Postcond ["polynomial", "simplification"], _, _)], _, (_, ([], Res)))) =
551 Step_Solve.do_next (pt, ip);
552 "~~~~~ and do_next , args:"; val (ptp as (pt, pos as (p, p_))) = (pt, ip);
553 (*if*) MethodC.id_empty = get_obj g_metID pt (par_pblobj pt p) (*else*);
554 val thy' = get_obj g_domID pt (par_pblobj pt p);
555 val ((ist, ctxt), sc) = LItool.resume_prog (p,p_) pt;
557 (** )val End_Program (ist, tac) =
558 ( *case*) LI.find_next_step sc (pt, pos) ist ctxt (*of*);
559 "~~~~~ fun find_next_step , args:"; val ((Rule.Prog prog), (ptp as(pt, (p, _))), (Pstate ist), ctxt)
560 = (sc, (pt, pos), ist, ctxt);
562 (* val Term_Val (Const (\<^const_name>\<open>times\<close>, _) $ Free ("2", _) $ Free ("a", _))*)
563 (**)val Term_Val prog_result =
564 (*case*) scan_to_tactic (prog, (ptp, ctxt)) (Pstate ist) (*of*);
565 "~~~~~ fun scan_to_tactic , args:"; val ((prog, cc), (Pstate (ist as {path, ...})))
566 = ((prog, (ptp, ctxt)), (Pstate ist));
567 (*if*) path = [] (*else*);
569 go_scan_up (prog, cc) (trans_scan_up ist |> set_found);
570 "~~~~~ fun go_scan_up , args:"; val ((pcc as (sc, _)), (ist as {path, act_arg, found_accept, ...}))
571 = ((prog, cc), (trans_scan_up ist(*|> set_found !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! *)));
572 (*if*) path = [R] (*then*);
573 (*if*) found_accept = true (*then*);
575 Term_Val act_arg (*return from go_scan_up*);
576 "~~~~~ from fun go_scan_up\<longrightarrow>fun scan_to_tactic, return:"; val (Term_Val prog_result) = (Term_Val act_arg);
578 Term_Val prog_result (*return from scan_to_tactic*);
579 "~~~~~ from fun scan_to_tactic\<longrightarrow>fun find_next_step, return:"; val (Term_Val prog_result) = (Term_Val prog_result);
580 val (true, p' as [], Rule_Set.Empty, _) = (*case*) parent_node pt pos (*of*);
581 val (_, pblID, _) = get_obj g_spec pt p';
583 End_Program (Pstate ist, Tactic.Check_Postcond' (pblID, prog_result))
584 (*return from find_next_step*);
585 "~~~~~ from fun find_next_step\<longrightarrow>and do_next\<longrightarrow>fun zzz, return:"; val (End_Program (ist, tac))
586 = (End_Program (Pstate ist, Tactic.Check_Postcond' (pblID,prog_result)));
587 val _ = (*case*) tac (*of*);
589 val ("ok", ([(Check_Postcond ["polynomial", "simplification"], _, _)], _, (_, ([], Res))))
590 = LI.by_tactic tac (ist, ctxt) ptp (*return from and do_next*);
591 "~~~~~ from and do_next\<longrightarrow>top level, return:"; val (_, ([(tac''''', _, _)], _, (pt''''', p''''')))
592 = (LI.by_tactic tac (ist, ctxt) ptp);
593 (*\\------------------ end of go into 2 -----------------------------------------------------//*)
595 (*[], Und*)val (msg, ([], _, (pt, p))) = Step.do_next p''''' ((pt''''', Pos.e_pos'), []);(**)
597 Test_Tool.show_pt_tac pt; (*[
598 ([], Frm), Simplify (a + a)
599 . . . . . . . . . . Apply_Method ["simplification", "for_polynomials"],
601 . . . . . . . . . . Rewrite_Set "norm_Poly",
603 . . . . . . . . . . Check_Postcond ["polynomial", "simplification"],
606 (*/--- final test ---------------------------------------------------------------------------\\*)
607 val (res, asm) = (get_obj g_result pt (fst p));
608 if UnparseC.term res = "2 * a" andalso map UnparseC.term asm = []
609 andalso p = ([], Und) andalso msg = "end-of-calculation"
610 andalso pr_ctree ctxt pr_short pt = ". ----- pblobj -----\n1. a + a\n"
612 case tac''''' of Check_Postcond ["polynomial", "simplification"] => ()
613 | _ => error "re-build: fun find_next_step, mini 1"
614 else error "re-build: fun find_next_step, mini 2"
617 "----------- re-build: fun locate_input_term ---------------------------------------------------";
618 "----------- re-build: fun locate_input_term ---------------------------------------------------";
619 "----------- re-build: fun locate_input_term ---------------------------------------------------";
621 ----------- appendFormula: on Res + late deriv ------------------------------------------------*)
622 val fmz = ["equality (x+1=(2::real))", "solveFor x", "solutions L"];
623 val (dI',pI',mI') = ("Test", ["sqroot-test", "univariate", "equation", "test"],
624 ["Test", "squ-equ-test-subpbl1"]);
625 val (p,_,f,nxt,_,pt) = Test_Code.init_calc @{context} [(fmz, (dI',pI',mI'))];
626 val (p,_,f,nxt,_,pt) = me nxt p [] pt;
627 val (p,_,f,nxt,_,pt) = me nxt p [] pt;
628 val (p,_,f,nxt,_,pt) = me nxt p [] pt;
629 val (p,_,f,nxt,_,pt) = me nxt p [] pt;
630 val (p,_,f,nxt,_,pt) = me nxt p [] pt;
631 val (p,_,f,nxt,_,pt) = me nxt p [] pt;
632 (*[], Met*)val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*Apply_Method ["Test", "squ-equ-test-subpbl1"]*);
634 (*[1], Frm*)val (p,_,f,nxt,_,pt) = me nxt p [] pt;(*Rewrite_Set "norm_equation"*)
635 (*+*)if f2str f = "x + 1 = 2" then () else error "locate_input_term at ([1], Frm) CHANGED";
637 (*[1], Res*)val (p,_,f,nxt,_,pt) = me nxt p [] pt;(*Rewrite_Set "Test_simplify"*)
638 (*+*)if f2str f = "x + 1 + - 1 * 2 = 0" then () else error "locate_input_term at ([1], Frm) CHANGED";
640 Test_Tool.show_pt_tac pt; (*[
641 ([], Frm), solve (x + 1 = 2, x)
642 . . . . . . . . . . Apply_Method ["Test", "squ-equ-test-subpbl1"],
643 ([1], Frm), x + 1 = 2
644 . . . . . . . . . . Rewrite_Set "norm_equation",
645 ([1], Res), x + 1 + - 1 * 2 = 0 ///Check_Postcond..ERROR*)
647 (*//---------- appendFormula 1 "x = 1" \<longrightarrow> Step_Solve.inform \<longrightarrow> LI.locate_input_term ----------\\*)
648 "~~~~~ fun appendFormula , args:"; val ((*cI, *) ifo: TermC.as_string) = ((**) "x = 1");
649 val cs = (*States.get_calc cI*) ((pt, p), [(*nxt, nxt_, (pos, (ist, ctxt))*)])
650 val pos = (*States.get_pos cI 1*) p
652 (*+*)val ptp''''' = (pt, p);
653 (*+*)if snd ptp''''' = ([1], Res) then () else error "old_cs changed";
654 (*+*)Test_Tool.show_pt_tac pt; (*[
655 (*+*)([], Frm), solve (x + 1 = 2, x)
656 (*+*). . . . . . . . . . Apply_Method ["Test", "squ-equ-test-subpbl1"],
657 (*+*)([1], Frm), x + 1 = 2
658 (*+*). . . . . . . . . . Rewrite_Set "norm_equation",
659 (*+*)([1], Res), x + 1 + - 1 * 2 = 0 ///Check_Postcond*)
661 val ("ok", cs' as (_, _, ptp')) =
662 (*case*) Step.do_next pos cs (*of*);
664 val ("ok", (_(*use in DG !!!*), [], ptp''''' as (pt''''', p'''''))) = (*case*)
665 Step_Solve.by_term ptp' (encode ifo) (*of*);
666 "~~~~~ fun Step_Solve.by_term , args:"; val ((pt, pos as (p, _)), istr)
667 = (ptp', (encode ifo));
669 (*case*) TermC.parseNEW (get_ctxt pt pos) istr (*of*);
670 val pos_pred = lev_back(*'*) pos
671 val f_pred = Ctree.get_curr_formula (pt, pos_pred);
672 val f_succ = Ctree.get_curr_formula (pt, pos);
673 (*if*) f_succ = f_in (*else*);
675 (*case*) CAS_Cmd.input f_in (*of*);
677 (*NEW*) LI.locate_input_term (pt, pos) f_in (*of*);
678 "~~~~~ fun locate_input_term , args:"; val ((pt, pos), tm) = ((pt, pos), f_in);
679 val pos_pred = Pos.lev_back' pos (*f_pred ---"step pos cs"---> f_succ in appendFormula*)
681 val ("ok", (_, _, cstate as (pt', pos'))) =
682 (*case*) compare_step ([], [], (pt, pos_pred)) tm (*of*);
685 Found_Step (cstate, get_istate_LI pt' pos', get_ctxt pt' pos') (*return from locate_input_term*);
687 (*NEW*) Found_Step cstate (*return from locate_input_term*);
688 (*LI.Found_Step ( *)cstate(*, _(*istate*), _)( *return from locate_input_term*);
689 "~~~~~ from fun locate_input_term\<longrightarrow>fun Step_Solve.by_term, return:"; val ("ok", (_(*use in DG !!!*), c, ptp as (_, p)))
690 = (("ok" , ([], [], cstate (* already contains istate, ctxt *))));
692 ("ok", ((*_ use in DG !!!,*) c, ptp(* as (_*), p))(*)*)(*return from Step_Solve.by_term*);
693 "~~~~~ from fun Step_Solve.by_term\<longrightarrow>(fun appendFormula)!toplevel, return:"; val ("ok", (_(*use in DG !!!*), [], ptp''''' as (pt''''', p''''')))
694 = ("ok", ([], [], ptp));
696 (*fun me requires nxt...*)
697 Step.do_next p''''' (ptp''''', []);
698 val ("ok", ([(nxt'''''_' as Check_Postcond ["LINEAR", "univariate", "equation", "test"], _, _)], _,
699 (pt'''''_', p'''''_'))) = Step.do_next p''''' (ptp''''', [])
700 (*\\---------- appendFormula 1 "x = 1" \<longrightarrow> Step_Solve.inform \<longrightarrow> LI.locate_input_term ----------//*)
702 (*//----- REPLACED BY appendFormula 1 "x = 1" \<longrightarrow> Step_Solve.inform \<longrightarrow> LI.locate_input_term -----\\* )
703 (*[2], Res*)val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = Subproblem ("Test", ["LINEAR", "univariate", "equation", "test"])*)
704 (*[3], Pbl*)val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = Model_Problem*)
705 (*[3], Pbl*)val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = Add_Given "equality (- 1 + x = 0)"*)
706 (*[3], Pbl*)val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = Add_Given "solveFor x"*)
707 (*[3], Pbl*)val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = Add_Find "solutions x_i"*)
708 (*[3], Pbl*)val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = Specify_Theory "Test"*)
709 (*[3], Pbl*)val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = Specify_Problem ["LINEAR", "univariate", "equation", "test"]*)
710 (*[3], Pbl*)val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = Specify_Method ["Test", "solve_linear"]*)
711 (*[3], Met*)val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = Apply_Method ["Test", "solve_linear"]*)
712 (*[3, 1], Frm*)val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = Rewrite_Set_Inst (["(''bdv'', x)"], "isolate_bdv")*)
713 (*[3, 1], Res*)val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = Rewrite_Set "Test_simplify"*)
714 (*[3, 2], Res*)val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = Check_Postcond ["LINEAR", "univariate", "equation", "test"]*)
715 ( *\\----- REPLACED BY appendFormula 1 "x = 1" \<longrightarrow> Step_Solve.inform \<longrightarrow> LI.locate_input_term -----//*)
717 (*[3], Res*)val (p,_,f,nxt,_,pt) = me nxt'''''_' p'''''_' [] pt'''''_'; (*nxt = Check_elementwise "Assumptions"*)
718 (*[4], Res*)val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = Check_Postcond ["sqroot-test", "univariate", "equation", "test"]*)
719 (*[], Res*)val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = End_Proof'*)
721 (*/--- final test ---------------------------------------------------------------------------\\*)
722 if p = ([], Res) andalso f2str f = "[x = 1]" andalso pr_ctree ctxt pr_short pt =
723 ". ----- pblobj -----\n" ^
725 "2. x + 1 + - 1 * 2 = 0\n" ^
726 "3. ----- pblobj -----\n" ^
727 "3.1. - 1 + x = 0\n" ^
728 "3.2. x = 0 + - 1 * - 1\n" ^
729 "3.2.1. x = 0 + - 1 * - 1\n" ^
730 "3.2.2. x = 0 + 1\n" (*ATTENTION: see complete Calc below*)
731 then case nxt of End_Proof' => () | _ => error "re-build: fun locate_input_term CHANGED 1"
732 else error "re-build: fun locate_input_term CHANGED 2";
734 Test_Tool.show_pt_tac pt; (*[
735 ([], Frm), solve (x + 1 = 2, x)
736 . . . . . . . . . . Apply_Method ["Test", "squ-equ-test-subpbl1"],
737 ([1], Frm), x + 1 = 2
738 . . . . . . . . . . Rewrite_Set "norm_equation",
739 ([1], Res), x + 1 + - 1 * 2 = 0
740 . . . . . . . . . . Rewrite_Set "Test_simplify",
741 ([2], Res), - 1 + x = 0
742 . . . . . . . . . . Subproblem (Test, ["LINEAR", "univariate", "equation", "test"]),
743 ([3], Pbl), solve (- 1 + x = 0, x)
744 . . . . . . . . . . Apply_Method ["Test", "solve_linear"],
745 ([3,1], Frm), - 1 + x = 0
746 . . . . . . . . . . Rewrite_Set_Inst ([(''bdv'', x)], "isolate_bdv"),
747 ([3,1], Res), x = 0 + - 1 * - 1
748 . . . . . . . . . . Derive Test_simplify,
749 ([3,2,1], Frm), x = 0 + - 1 * - 1
750 . . . . . . . . . . Rewrite ("#: - 1 * - 1 = 1", "- 1 * - 1 = 1"),
751 ([3,2,1], Res), x = 0 + 1
752 . . . . . . . . . . Rewrite ("radd_0", "0 + ?k = ?k"),
753 ([3,2,2], Res), x = 1
754 . . . . . . . . . . Tactic.input_to_string not impl. for ?!,
756 . . . . . . . . . . Check_Postcond ["LINEAR", "univariate", "equation", "test"],
758 . . . . . . . . . . Check_Postcond ["sqroot-test", "univariate", "equation", "test"],
759 ([], Res), [x = 1]]*)