1.1 --- a/test/Tools/isac/Test_Isac_Short.thy Tue Aug 16 15:53:20 2022 +0200
1.2 +++ b/test/Tools/isac/Test_Isac_Short.thy Sun Aug 21 11:22:04 2022 +0200
1.3 @@ -251,6 +251,723 @@
1.4 ML_file "Interpret/error-pattern.sml"
1.5 ML_file "Interpret/li-tool.sml"
1.6 ML_file "Interpret/lucas-interpreter.sml"
1.7 +ML \<open>
1.8 +\<close> ML \<open>
1.9 +\<close> ML \<open>
1.10 +(* Title: "Interpret/lucas-interpreter.sml"
1.11 + Author: Walther Neuper
1.12 + (c) due to copyright terms
1.13 +*)
1.14 +
1.15 +"-----------------------------------------------------------------------------------------------";
1.16 +"table of contents -----------------------------------------------------------------------------";
1.17 +"-----------------------------------------------------------------------------------------------";
1.18 +"----------- Take as 1st stac in program -------------------------------------------------------";
1.19 +"----------- re-build: fun locate_input_tactic -------------------------------------------------";
1.20 +"----------- fun locate_input_tactic Helpless, NOT applicable ----------------------------------";
1.21 +"----------- re-build: fun find_next_step, mini ------------------------------------------------";
1.22 +"----------- re-build: fun locate_input_term ---------------------------------------------------";
1.23 +"-----------------------------------------------------------------------------------------------";
1.24 +"-----------------------------------------------------------------------------------------------";
1.25 +"-----------------------------------------------------------------------------------------------";
1.26 +
1.27 +"----------- Take as 1st stac in program -------------------------------------------------------";
1.28 +"----------- Take as 1st stac in program -------------------------------------------------------";
1.29 +"----------- Take as 1st stac in program -------------------------------------------------------";
1.30 +"compare --- Apply_Method with initial Take by Step.do_next --- in test/../step-solve ----------";
1.31 +val p = e_pos'; val c = [];
1.32 +val (p,_,f,nxt,_,pt) =
1.33 + CalcTreeTEST
1.34 + [(["functionTerm (x \<up> 2 + 1)", "integrateBy x", "antiDerivative FF"],
1.35 + ("Integrate", ["integrate", "function"], ["diff", "integration"]))];
1.36 +val (p,_,f,nxt,_,pt) = me nxt p c pt; (*nxt = ("Tac ", ...) --> Add_Given...*)
1.37 +val (p,_,f,nxt,_,pt) = me nxt p c pt;
1.38 +val (p,_,f,nxt,_,pt) = me nxt p c pt;
1.39 +val (p,_,f,nxt,_,pt) = me nxt p c pt;
1.40 +val (p,_,f,nxt,_,pt) = me nxt p c pt;
1.41 +val (p,_,f,nxt,_,pt) = me nxt p c pt;
1.42 +val (p,_,f,nxt,_,pt) = me nxt p c pt;
1.43 +case nxt of (Apply_Method ["diff", "integration"]) => ()
1.44 + | _ => error "integrate.sml -- me method [diff,integration] -- spec";
1.45 +"----- step 8: returns nxt = Rewrite_Set_Inst ([\"(''bdv'', x)\"],\"integration\")";
1.46 +
1.47 +"~~~~~ fun me, args:"; val (tac, (p:pos'), _, (pt:ctree)) = (nxt, p, c, pt);
1.48 +"~~~~~ fun Step.by_tactic, args:"; val (tac, (ptp as (pt, p))) = (tac, (pt,p));
1.49 +val Applicable.Yes m = Step.check tac (pt, p);
1.50 + (*if*) Tactic.for_specify' m; (*false*)
1.51 +"~~~~~ fun loc_solve_ , args:"; val (m, (pt,pos)) = (m, ptp);
1.52 +
1.53 +"~~~~~ fun Step_Solve.by_tactic , args:"; val (m as Apply_Method' (mI, _, _, ctxt), (pt, (pos as (p,_))))
1.54 + = (m, (pt, pos));
1.55 + val {srls, ...} = MethodC.from_store mI;
1.56 + val itms = case get_obj I pt p of
1.57 + PblObj {meth=itms, ...} => itms
1.58 + | _ => error "solve Apply_Method: uncovered case get_obj"
1.59 + val thy' = get_obj g_domID pt p;
1.60 + val thy = ThyC.get_theory thy';
1.61 + val srls = LItool.get_simplifier (pt, pos)
1.62 + val (is, env, ctxt, sc) = case LItool.init_pstate srls ctxt itms mI of
1.63 + (is as Istate.Pstate {env, ...}, ctxt, sc) => (is, env, ctxt, sc)
1.64 + | _ => error "solve Apply_Method: uncovered case init_pstate";
1.65 +(*+*)pstate2str (the_pstate is) = "([\"\n(f_f, x \<up> 2 + 1)\",\"\n(v_v, x)\"], [], empty, NONE, \n??.empty, ORundef, false, true)";
1.66 + val ini = LItool.implicit_take sc env;
1.67 + val p = lev_dn p;
1.68 +
1.69 + val NONE = (*case*) ini (*of*);
1.70 + val Next_Step (is', ctxt', m') =
1.71 + LI.find_next_step sc (pt, (p, Res)) is ctxt;
1.72 +(*+*)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)";
1.73 + val Safe_Step (_, _, Take' _) = (*case*)
1.74 + locate_input_tactic sc (pt, (p, Res)) is' ctxt' m' (*of*);
1.75 +"~~~~~ fun locate_input_tactic , args:"; val ((Prog prog), cstate, istate, ctxt, tac)
1.76 + = (sc, (pt, (p, Res)), is', ctxt', m');
1.77 +
1.78 + (*case*) scan_to_tactic1 (prog, (cstate, ctxt, tac)) istate (*of*);
1.79 +"~~~~~ fun scan_to_tactic1 , args:"; val ((prog, (cctt as ((_, p), _, _))), (Istate.Pstate (ist as {path, ...})))
1.80 + = ((prog, (cstate, ctxt, tac)), istate);
1.81 + (*if*) path = [] orelse ((last_elem o fst) p = 0 andalso snd p = Res) (*then*);
1.82 +
1.83 + val Accept_Tac1 (_, _, Take' _) =
1.84 + scan_dn1 cctt (ist |> set_path [R] |> set_or ORundef) (Program.body_of prog);
1.85 +"~~~~~ fun scan_dn1 , args:"; val (xxx, ist, (Const (\<^const_name>\<open>Let\<close>, _) $ e $ (Abs (id, T, b))))
1.86 + = (cctt, (ist |> set_path [R] |> set_or ORundef), (Program.body_of prog));
1.87 +
1.88 +(*+*) if UnparseC.term e = "Take (Integral f_f D v_v)" then () else error "scan_dn1 Integral changed";
1.89 +
1.90 + (*case*)
1.91 + scan_dn1 xxx (ist |> path_down [L, R]) e (*of*);
1.92 + (*======= end of scanning tacticals, a leaf =======*)
1.93 +"~~~~~ fun scan_dn1 , args:"; val (((pt, p), ctxt, tac), (ist as {eval, or, ...}), t)
1.94 + = (xxx, (ist |> path_down [L, R]), e);
1.95 +val (Program.Tac stac, a') = check_leaf "locate" ctxt eval (get_subst ist) t;
1.96 +
1.97 +
1.98 +
1.99 +"----------- re-build: fun locate_input_tactic -------------------------------------------------";
1.100 +"----------- re-build: fun locate_input_tactic -------------------------------------------------";
1.101 +"----------- re-build: fun locate_input_tactic -------------------------------------------------";
1.102 +val fmz = ["equality (x+1=(2::real))", "solveFor x", "solutions L"];
1.103 +val (dI',pI',mI') = ("Test", ["sqroot-test", "univariate", "equation", "test"],
1.104 + ["Test", "squ-equ-test-subpbl1"]);
1.105 +val (p,_,f,nxt,_,pt) = CalcTreeTEST [(fmz, (dI',pI',mI'))];
1.106 +val (p,_,f,nxt,_,pt) = me nxt p [] pt;
1.107 +val (p,_,f,nxt,_,pt) = me nxt p [] pt;
1.108 +val (p,_,f,nxt,_,pt) = me nxt p [] pt;
1.109 +val (p,_,f,nxt,_,pt) = me nxt p [] pt;
1.110 +val (p,_,f,nxt,_,pt) = me nxt p [] pt;
1.111 +val (p,_,f,nxt,_,pt) = me nxt p [] pt;
1.112 +(*[], Met*)val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = (_, Apply_Method ["Test", "squ-equ-test-subpbl1"])*);
1.113 +(*[1], Frm*)val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = ("Rewrite_Set", Rewrite_Set "norm_equation")*)
1.114 +
1.115 +(*//------------------ begin step into ------------------------------------------------------\\*)
1.116 +(*[1], Res*)val (p'''''_''',_,f,nxt'''''_''',_,pt'''''_''') = me nxt p [] pt; (*nxt = Rewrite_Set "Test_simplify"*)
1.117 +
1.118 +"~~~~~ fun me , args:"; val (tac, p, _(*NEW remove*), pt) = (nxt, p, [], pt);
1.119 +
1.120 + (** )val (***)xxxx(***) ( *("ok", (_, _, (pt, p))) =( **) (*case*)
1.121 + Step.by_tactic tac (pt,p) (*of*);
1.122 +"~~~~~ fun by_tactic , args:"; val (tac, (ptp as (pt, p))) = (tac, (pt,p));
1.123 + val Applicable.Yes m = (*case*) Solve_Step.check tac (pt, p) (*of*);
1.124 + (*if*) Tactic.for_specify' m; (*false*)
1.125 +
1.126 + (** )val (***)xxxxx_x(***) ( *(msg, cs') =( **)
1.127 +Step_Solve.by_tactic m ptp;
1.128 +"~~~~~ fun by_tactic , args:"; val (m, (pt, po as (p, p_))) = (m, ptp);
1.129 +(*+*)val (pt'''''_', (p'''''_', p_'''''_')) = (pt, (p, p_));
1.130 + (*if*) MethodC.id_empty = get_obj g_metID pt (par_pblobj pt p); (*else*)
1.131 + val thy' = get_obj g_domID pt (par_pblobj pt p);
1.132 + val (is, sc) = LItool.resume_prog thy' (p,p_) pt;
1.133 +
1.134 + locate_input_tactic sc (pt, po) (fst is) (snd is) m;
1.135 +"~~~~~ fun locate_input_tactic , args:"; val (Prog prog, cstate, istate, ctxt, tac)
1.136 + = (sc, (pt, po), (fst is), (snd is), m);
1.137 + val srls = get_simplifier cstate;
1.138 +
1.139 + (** )val Accept_Tac1 ((is as (_,_,_,_,_,strong_ass), ctxt, ss as((tac', _, ctree, pos', _) :: _))) =( **)
1.140 + (*case*) scan_to_tactic1 (prog, (cstate, ctxt, tac)) istate (*of*);
1.141 +"~~~~~ fun scan_to_tactic1 , args:"; val ((prog, (cctt as ((_, p), _, _))), (Istate.Pstate (ist as {path, ...})))
1.142 + = ((prog, (cstate, ctxt, tac)), istate);
1.143 + (*if*) path = [] orelse ((last_elem o fst) p = 0 andalso snd p = Res) (*then*);
1.144 +
1.145 + (** )val xxxxx_xx = ( **)
1.146 + scan_dn1 cctt (ist |> set_path [R] |> set_or ORundef) (Program.body_of prog);
1.147 +"~~~~~ fun scan_dn1 , args:"; val (xxx, ist, (Const (\<^const_name>\<open>Let\<close>, _) $ e $ (Abs (id, T, b))))
1.148 + = (cctt, (ist |> set_path [R] |> set_or ORundef), (Program.body_of prog));
1.149 +
1.150 + (*case*) scan_dn1 xxx (ist |> path_down [L, R]) e (*of*);
1.151 +"~~~~~ fun scan_dn1 , args:"; val ((xxx as (cstate, _, _)), ist, (Const (\<^const_name>\<open>Chain\<close>(*1*), _) $ e1 $ e2 $ a))
1.152 + = (xxx, (ist |> path_down [L, R]), e);
1.153 +
1.154 + (*case*) scan_dn1 xxx (ist |> path_down_form ([L, L, R], a)) e1 (*of*);
1.155 +"~~~~~ fun scan_dn1 , args:"; val (xxx, ist, (Const (\<^const_name>\<open>Try\<close>(*2*), _) $ e))
1.156 + = (xxx, (ist |> path_down_form ([L, L, R], a)), e1);
1.157 +
1.158 + (*case*) scan_dn1 xxx (ist |> path_down [R]) e (*of*);
1.159 + (*======= end of scanning tacticals, a leaf =======*)
1.160 +"~~~~~ fun scan_dn1 , args:"; val (((pt, p), ctxt, tac), (ist as {env, eval, or, ...}), t)
1.161 + = (xxx, (ist |> path_down [R]), e);
1.162 + val (Program.Tac stac, a') =
1.163 + (*case*) check_leaf "locate" ctxt eval (get_subst ist) t (*of*);
1.164 + val LItool.Associated (m, v', ctxt) =
1.165 + (*case*) associate pt ctxt (m, stac) (*of*);
1.166 +
1.167 + Accept_Tac1 (ist |> set_subst_true (a', v'), ctxt, m) (*return value*);
1.168 +"~~~~~ from scan_dn1 to scan_to_tactic1 return val:"; val (xxxxx_xx)
1.169 + = (Accept_Tac1 (ist |> set_subst_true (a', v'), ctxt, m));
1.170 +
1.171 +"~~~~~ from scan_to_tactic1 to fun locate_input_tactic return val:"; val Accept_Tac1 ((ist as {assoc, ...}), ctxt, tac')
1.172 + = (Accept_Tac1 (ist |> set_subst_true (a', v'), ctxt, m));
1.173 + (*if*) LibraryC.assoc (*then*);
1.174 +
1.175 + Safe_Step (Istate.Pstate ist, ctxt, tac') (*return value*);
1.176 +"~~~~~ from locate_input_tactic to fun Step_Solve.by_tactic return:"; val Safe_Step (istate, ctxt, tac)
1.177 + = (*xxxxx_xx*)(**)Safe_Step (Istate.Pstate ist, ctxt, tac')(**);
1.178 +
1.179 +(*+*)val (pt, po as (p, p_)) = (pt'''''_', (p'''''_', p_'''''_')); (* from begin of by_tactic *)
1.180 + val (p'', _, _,pt') =
1.181 + Step.add tac (istate, ctxt) (pt, (lev_on p, Pbl));
1.182 + (*in*)
1.183 +
1.184 + ("ok", ([(Tactic.input_from_T tac, tac, (p'', (istate, ctxt)))],
1.185 + [(*ctree NOT cut*)], (pt', p''))) (*return value*);
1.186 +"~~~~~ from Step_Solve.by_tactic \<longrightarrow> Step.by_tactic return:"; val ((msg, cs' : Calc.state_post))
1.187 + = ("ok", ([(Tactic.input_from_T tac, tac, (p'', (istate, ctxt)) )],
1.188 + [(*ctree NOT cut*)], (pt', p'')));
1.189 +
1.190 +"~~~~~ from Step.by_tactic to me return:"; val (("ok", (_, _, (pt, p)))) = (*** )xxxx( ***) ("ok", cs');
1.191 + val (_, ts) =
1.192 + (case Step.do_next p ((pt, Pos.e_pos'), []) of
1.193 + ("ok", (ts as (_, _, _) :: _, _, _)) => ("", ts)
1.194 + | ("helpless", _) => ("helpless: cannot propose tac", [])
1.195 + | ("no-fmz-spec", _) => error "no-fmz-spec"
1.196 + | ("end-of-calculation", (ts, _, _)) => ("", ts)
1.197 + | _ => error "me: uncovered case")
1.198 + handle ERROR msg => raise ERROR msg
1.199 + val tac =
1.200 + case ts of
1.201 + tacis as (_::_) => let val (tac, _, _) = last_elem tacis in tac end
1.202 + | _ => if p = ([], Pos.Res) then Tactic.End_Proof' else Tactic.Empty_Tac;
1.203 +
1.204 + (p, [] : NEW, TESTg_form (pt, p), (Tactic.tac2IDstr tac, tac), Celem.Sundef, pt);
1.205 +"~~~~~ from me to TOOPLEVEL return:"; val (p,_,f,nxt,_,pt)
1.206 + = (*** )xxx( ***) (p, [] : NEW, TESTg_form (pt, p), (Tactic.tac2IDstr tac, tac), Celem.Sundef, pt);
1.207 +
1.208 +(*//--------------------- check results from modified me ----------------------------------\\*)
1.209 +if p = ([2], Res) andalso
1.210 + pr_ctree pr_short pt = ". ----- pblobj -----\n1. x + 1 = 2\n2. x + 1 = 2\n"
1.211 +then
1.212 + (case nxt of ("Rewrite_Set", Rewrite_Set "Test_simplify") => ()
1.213 + | _ => error "")
1.214 +else error "check results from modified me CHANGED";
1.215 +(*\\--------------------- check results from modified me ----------------------------------//*)
1.216 +
1.217 +"~~~~~ from me to TOPLEVEL return:"; val (p,_,f,nxt,_,pt) = (*** )xxx( ***) (**)(p, 000, f, nxt, 000, pt)(**);
1.218 +(*\\------------------ end step into --------------------------------------------------------//*)
1.219 +
1.220 +(*[3], Res*)val (p,_,f,nxt,_,pt) = me nxt'''''_''' p'''''_''' [] pt'''''_'''; (*nxt = Subproblem ("Test", ["LINEAR", "univariate", "equation", "test"])*)
1.221 +(*[3], Pbl*)val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = Model_Problem*)
1.222 +(*[3], Pbl*)val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = Add_Given "equality (- 1 + x = 0)"*)
1.223 +(*[3], Pbl*)val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = Add_Given "solveFor x"*)
1.224 +(*[3], Pbl*)val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = Add_Find "solutions x_i"*)
1.225 +(*[3], Pbl*)val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = Specify_Theory "Test"*)
1.226 +(*[3], Pbl*)val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = Specify_Problem ["LINEAR", "univariate", "equation", "test"]*)
1.227 +(*[3], Pbl*)val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = Specify_Method ["Test", "solve_linear"]*)
1.228 +(*[3], Met*)val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = Apply_Method ["Test", "solve_linear"]*)
1.229 +(*[3, 1], Frm*)val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = Rewrite_Set_Inst (["(''bdv'', x)"], "isolate_bdv")*)
1.230 +(*[3, 1], Res*)val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = Rewrite_Set "Test_simplify"*)
1.231 +(*[3, 2], Res*)val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = Check_Postcond ["LINEAR", "univariate", "equation", "test"]*)
1.232 +(*[3], Res*)val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = Check_elementwise "Assumptions"*)
1.233 +(*[4], Res*)val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = Check_Postcond ["sqroot-test", "univariate", "equation", "test"]*)
1.234 +(*[], Res*)val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = End_Proof'*)
1.235 +
1.236 +(*/--------------------- final test ----------------------------------\\*)
1.237 +if p = ([], Res) andalso f2str f = "[x = 1]" andalso pr_ctree pr_short pt =
1.238 + ". ----- pblobj -----\n" ^
1.239 + "1. x + 1 = 2\n" ^
1.240 + "2. x + 1 + - 1 * 2 = 0\n" ^
1.241 + "3. ----- pblobj -----\n" ^
1.242 + "3.1. - 1 + x = 0\n" ^
1.243 + "3.2. x = 0 + - 1 * - 1\n" ^
1.244 + "4. [x = 1]\n"
1.245 +then case nxt of End_Proof' => () | _ => error "re-build: fun locate_input_tactic changed 1"
1.246 +else error "re-build: fun locate_input_tactic changed 2";
1.247 +
1.248 +
1.249 +"----------- fun locate_input_tactic Helpless, NOT applicable ----------------------------------";
1.250 +"----------- fun locate_input_tactic Helpless, NOT applicable ----------------------------------";
1.251 +"----------- fun locate_input_tactic Helpless, NOT applicable ----------------------------------";
1.252 +(*cp from -- try fun applyTactics ------- *)
1.253 +val (p,_,f,nxt,_,pt) = CalcTreeTEST [(["Term (5*e + 6*f - 8*g - 9 - 7*e - 4*f + 10*g + 12)",
1.254 + "normalform N"],
1.255 + ("PolyMinus",["plus_minus", "polynom", "vereinfachen"],
1.256 + ["simplification", "for_polynomials", "with_minus"]))];
1.257 +val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
1.258 +val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
1.259 +val (p,_,f,nxt,_,pt) = me nxt p [] pt; val (p,_,f,nxt,_,pt) = me nxt p [] pt;
1.260 +(*[1], Frm*)val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = Rewrite_Set "ordne_alphabetisch"*)
1.261 +
1.262 +(*+*)val Test_Out.FormKF "5 * e + 6 * f - 8 * g - 9 - 7 * e - 4 * f + 10 * g + 12" = f
1.263 +
1.264 +(*[1], Res*)val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = Rewrite_Set "fasse_zusammen"*)
1.265 +
1.266 +(*+*)if map Tactic.input_to_string (specific_from_prog pt p) =
1.267 + ["Rewrite (\"subtrahiere_x_plus_minus\", \"\<lbrakk>?l is_num; ?m is_num\<rbrakk>\n\<Longrightarrow> ?x + ?m * ?v - ?l * ?v = ?x + (?m - ?l) * ?v\")",
1.268 + "Rewrite (\"subtrahiere_x_minus_plus\", \"\<lbrakk>?l is_num; ?m is_num\<rbrakk>\n\<Longrightarrow> ?x - ?m * ?v + ?l * ?v = ?x + (- ?m + ?l) * ?v\")",
1.269 +(*this is new since ThmC.numerals_to_Free.-----\\*)
1.270 + "Calculate PLUS"]
1.271 + then () else error "specific_from_prog ([1], Res) 1 CHANGED";
1.272 +(*[2], Res*)val ("ok", (_, _, ptp as (pt, p))) = Step.by_tactic (hd (specific_from_prog pt p)) (pt, p);
1.273 +
1.274 +(*+*)if map Tactic.input_to_string (specific_from_prog pt p) = [
1.275 + "Rewrite (\"tausche_minus\", \"\<lbrakk>?b ist_monom; ?a kleiner ?b\<rbrakk>\n\<Longrightarrow> ?b - ?a = - ?a + ?b\")",
1.276 + "Rewrite (\"subtrahiere_x_plus_minus\", \"\<lbrakk>?l is_num; ?m is_num\<rbrakk>\n\<Longrightarrow> ?x + ?m * ?v - ?l * ?v = ?x + (?m - ?l) * ?v\")",
1.277 + "Rewrite (\"subtrahiere_x_minus_plus\", \"\<lbrakk>?l is_num; ?m is_num\<rbrakk>\n\<Longrightarrow> ?x - ?m * ?v + ?l * ?v = ?x + (- ?m + ?l) * ?v\")",
1.278 + (*this is new since ThmC.numerals_to_Free.-----\\*)
1.279 + "Calculate PLUS",
1.280 + (*this is new since ThmC.numerals_to_Free.-----//*)
1.281 + "Calculate MINUS"]
1.282 + then () else error "specific_from_prog ([1], Res) 2 CHANGED";
1.283 +(* = ([3], Res)*)val ("ok", (_, _, ptp as (pt, p))) = Step.by_tactic (hd (specific_from_prog pt p)) (pt, p);
1.284 +
1.285 +(*//----------------- exception PTREE "get_obj f EmptyPtree" raised --------------------------\\*)
1.286 +(**)val ("ok", ([(Rewrite ("tausche_minus", _), _, _)], _, _)) = (*isa*)
1.287 + Step.by_tactic (hd (specific_from_prog pt p)) (pt, p);
1.288 +"~~~~~ fun by_tactic , args:"; val (tac, (ptp as (pt, p))) = (hd (specific_from_prog pt p), (pt, p));
1.289 + val Applicable.Yes m = (*case*) Solve_Step.check tac (pt, p) (*of*);
1.290 + (*if*) Tactic.for_specify' m; (*false*)
1.291 +
1.292 +(**) val ("ok", ([(Rewrite ("tausche_minus", _), _, _)], _, _)) = (*isa*)
1.293 +Step_Solve.by_tactic m (pt, p);
1.294 +"~~~~~ fun by_tactic , args:"; val (m, (pt, po as (p, p_))) = (m, (pt, p));
1.295 + (*if*) MethodC.id_empty = get_obj g_metID pt (par_pblobj pt p) (*else*);
1.296 + val thy' = get_obj g_domID pt (par_pblobj pt p);
1.297 + val (is, sc) = LItool.resume_prog thy' (p,p_) pt;
1.298 +
1.299 + (*case*) locate_input_tactic sc (pt, po) (fst is) (snd is) m (*of*);
1.300 +"~~~~~ fun locate_input_tactic , args:"; val ((Rule.Prog prog), (cstate as (pt, (*?*)pos(*?*))), istate, ctxt, tac)
1.301 + = (sc, (pt, po), (fst is), (snd is), m);
1.302 + val srls = LItool.get_simplifier cstate (*TODO: shift into Istate.T*);
1.303 +
1.304 + (*case*) scan_to_tactic1 (prog, (cstate, ctxt, tac)) istate (*of*);
1.305 +"~~~~~ fun scan_to_tactic1 , args:"; val ((prog, (cctt as ((_, p), _, _))), (Istate.Pstate (ist as {path, ...})))
1.306 + = ((prog, (cstate, ctxt, tac)), istate);
1.307 + (*if*) path = [] orelse ((last_elem o fst) p = 0 andalso snd p = Res) (*else*);
1.308 +
1.309 + go_scan_up1 (prog, cctt) ist;
1.310 +"~~~~~ fun go_scan_up1 , args:"; val ((pcct as (prog, _)), (ist as {path, ...}))
1.311 + = ((prog, cctt), ist);
1.312 + (*if*) 1 < length path (*then*);
1.313 +
1.314 + scan_up1 pcct (ist |> path_up) (TermC.sub_at (path_up' path) prog);
1.315 +"~~~~~ and scan_up1 , args:"; val (pcct, ist, (Const (\<^const_name>\<open>Try\<close>(*2*), _) $ _))
1.316 + = (pcct, (ist |> path_up), (TermC.sub_at (path_up' path) prog));
1.317 +
1.318 + go_scan_up1 pcct ist;
1.319 +"~~~~~ and go_scan_up1 , args:"; val ((pcct as (prog, _)), (ist as {path, ...}))
1.320 + = (pcct, ist);
1.321 + (*if*) 1 < length path (*then*);
1.322 +
1.323 + scan_up1 pcct (ist |> path_up) (TermC.sub_at (path_up' path) prog);
1.324 +"~~~~~ and scan_up1 , args:"; val ((pcct as (prog, cct as (cstate, _, _))), ist,
1.325 + (Const (\<^const_name>\<open>Chain\<close>(*3*), _) $ _ ))
1.326 + = (pcct, (ist |> path_up), (TermC.sub_at (path_up' path) prog));
1.327 + val e2 = check_Seq_up ist prog
1.328 +;
1.329 + (*case*) scan_dn1 cct (ist |> path_up_down [R] |> set_or ORundef) e2 (*of*);
1.330 +"~~~~~ fun scan_dn1 , args:"; val (yyy, ist, (Const (\<^const_name>\<open>Chain\<close>(*2*), _) $ e1 $ e2))
1.331 + = (cct, (ist |> path_up_down [R] |> set_or ORundef), e2);
1.332 +
1.333 + (*case*) scan_dn1 cct (ist |> path_down [L, R]) e1 (*of*);
1.334 +"~~~~~ fun scan_dn1 , args:"; val (xxx, ist, (Const (\<^const_name>\<open>Try\<close>(*2*), _) $ e))
1.335 + = (cct, (ist |> path_down [L, R]), e1);
1.336 +
1.337 +\<close> ML \<open>
1.338 + (*case*) scan_dn1 cct (ist |> path_down [R]) e (*of*);
1.339 + (*======= end of scanning tacticals, a leaf =======*)
1.340 +"~~~~~ fun scan_dn1 , args:"; val ((cct as (_, ctxt, _)), (ist as {eval, ...}), t)
1.341 + = (cct, (ist |> path_down [R]), e);
1.342 + (*if*) Tactical.contained_in t (*else*);
1.343 + val (Program.Tac prog_tac, form_arg) = (*case*)
1.344 + LItool.check_leaf "locate" ctxt eval (get_subst ist) t (*of*);
1.345 +
1.346 + check_tac1 cct ist (prog_tac, form_arg);
1.347 +"~~~~~ fun check_tac1 , args:"; val (((pt, p), ctxt, tac), (ist as {act_arg, or, ...}), (prog_tac, form_arg)) =
1.348 + (cct, ist, (prog_tac, form_arg));
1.349 +val LItool.Not_Associated = (*case*)
1.350 + LItool.associate pt ctxt (tac, prog_tac) (*of*);
1.351 + val _(*ORundef*) = (*case*) or (*of*);
1.352 +
1.353 +(*+*)Solve_Step.check (LItool.tac_from_prog pt (ThyC.get_theory "Isac_Knowledge") prog_tac) (pt, p);
1.354 +
1.355 + val Applicable.Yes m' =
1.356 + (*case*) Solve_Step.check (LItool.tac_from_prog pt (ThyC.get_theory "Isac_Knowledge") prog_tac) (pt, p) (*of*);
1.357 +
1.358 + Reject_Tac1 (ist |> set_subst_false (form_arg, Tactic.result m'), ctxt, tac)
1.359 + (*return from check_tac1*);
1.360 +"~~~~~ from fun check_tac1 \<longrightarrow>fun scan_dn1 \<longrightarrow>fun scan_dn1 \<longrightarrow>fun locate_input_tactic , return:"; val (Reject_Tac1 _) =
1.361 + (Reject_Tac1 (ist |> set_subst_false (form_arg, Tactic.result m'), ctxt, tac));
1.362 +
1.363 +val Test_Out.FormKF "- 9 + 12 + 5 * e - 7 * e + 6 * f - 4 * f - 8 * g + 10 * g" = f;
1.364 +val ([3], Res) = p;
1.365 +
1.366 +
1.367 +\<close> ML \<open>
1.368 +"----------- re-build: fun find_next_step, mini ------------------------------------------------";
1.369 +"----------- re-build: fun find_next_step, mini ------------------------------------------------";
1.370 +"----------- re-build: fun find_next_step, mini ------------------------------------------------";
1.371 +val fmz = ["Term (a + a ::real)", "normalform n_n"];
1.372 +val (dI',pI',mI') = ("Poly",["polynomial", "simplification"],["simplification", "for_polynomials"]);
1.373 +val (p,_,f,nxt,_,pt) = CalcTreeTEST [(fmz, (dI',pI',mI'))];
1.374 +(*[], Pbl*)val (_, ([(tac, _, _)], _, (pt, p))) = Step.do_next p ((pt, Pos.e_pos'), []);(*Model_Problem*)
1.375 +(*[], Pbl*)val (_, ([(tac, _, _)], _, (pt, p))) = Step.do_next p ((pt, Pos.e_pos'), []);(*Specify_Theory "Poly"*)
1.376 +(*[], Pbl*)val (_, ([(tac, _, _)], _, (pt, p))) = Step.do_next p ((pt, Pos.e_pos'), []);(*Specify_Problem ["polynomial", "simplification"]*)
1.377 +(*[], Met*)val (_, ([(tac, _, _)], _, (pt, p))) = Step.do_next p ((pt, e_pos'), []);(*Specify_Method ["simplification", "for_polynomials"]*)
1.378 +(*1], Frm*)val (_, ([(tac, _, _)], _, (pt, p))) = Step.do_next p ((pt, e_pos'), []);(*Apply_Method ["simplification", "for_polynomials"]*)
1.379 +(*[1], Res*)val (_, ([(tac'''''_', _, _)], _, (pt'''''_', p'''''_'))) =
1.380 +
1.381 + Step.do_next p ((pt, e_pos'), []);(*Rewrite_Set "norm_Poly"*)
1.382 +(*//------------------ go into 1 ------------------------------------------------------------\\*)
1.383 +"~~~~~ fun do_next , args:"; val ((ip as (_, p_)), (ptp as (pt, p), tacis))
1.384 + = (p, ((pt, e_pos'), []));
1.385 + val pIopt = Ctree.get_pblID (pt, ip);
1.386 + (*if*) ip = ([], Res) (*else*);
1.387 + val _ = (*case*) tacis (*of*);
1.388 + val SOME _ = (*case*) pIopt (*of*);
1.389 + (*if*) member op = [Pos.Pbl, Pos.Met] p_ (*else*);
1.390 +
1.391 +val ("ok", ([(Rewrite_Set "norm_Poly", _, _)], _, (_, ([1], Res)))) =
1.392 +Step_Solve.do_next (pt, ip);
1.393 +"~~~~~ and do_next , args:"; val (ptp as (pt, pos as (p, p_))) = (pt, ip);
1.394 + (*if*) MethodC.id_empty = get_obj g_metID pt (par_pblobj pt p) (*else*);
1.395 + val thy' = get_obj g_domID pt (par_pblobj pt p);
1.396 + val ((ist, ctxt), sc) = LItool.resume_prog thy' (p,p_) pt;
1.397 +
1.398 +val Next_Step (_, _, Rewrite_Set' ("Poly", _, Rule_Set.Sequence {id = "norm_Poly", ...}, _, _)) =
1.399 + LI.find_next_step sc (pt, pos) ist ctxt (*of*);
1.400 +"~~~~~ fun find_next_step , args:"; val ((Rule.Prog prog), (ptp as(pt, (p, _))), (Pstate ist), ctxt)
1.401 + = (sc, (pt, pos), ist, ctxt);
1.402 +
1.403 +val Accept_Tac (Rewrite_Set' ("Poly", _, Rule_Set.Sequence {id = "norm_Poly", ...}, _, _), _, _) =
1.404 + (*case*) scan_to_tactic (prog, (ptp, ctxt)) (Pstate ist) (*of*);
1.405 +"~~~~~ fun scan_to_tactic , args:"; val ((prog, cc), (Pstate (ist as {path, ...})))
1.406 + = ((prog, (ptp, ctxt)), (Pstate ist));
1.407 + (*if*) path = [] (*then*);
1.408 +
1.409 +val Accept_Tac (Rewrite_Set' ("Poly", _, Rule_Set.Sequence {id = "norm_Poly", ...}, _, _), _, _) =
1.410 + scan_dn cc (trans_scan_dn ist) (Program.body_of prog);
1.411 +"~~~~~ fun scan_dn , args:"; val ((cc as (_, ctxt)), (ist as {eval, ...}), t)
1.412 + = (cc, (trans_scan_dn ist), (Program.body_of prog));
1.413 + (*if*) Tactical.contained_in t (*else*);
1.414 + val (Program.Tac prog_tac, form_arg) = (*case*) LItool.check_leaf "next " ctxt eval (get_subst ist) t (*of*);
1.415 +
1.416 +val Accept_Tac (Rewrite_Set' ("Poly", _, Rule_Set.Sequence {id = "norm_Poly", ...}, _, _), _, _) =
1.417 + check_tac cc ist (prog_tac, form_arg) (*return from xxx*);
1.418 +"~~~~~ from fun scan_dn\<longrightarrow>fun scan_to_tactic\<longrightarrow>fun find_next_step, return:"; val (Accept_Tac (tac, ist, ctxt))
1.419 + = (check_tac cc ist (prog_tac, form_arg));
1.420 +
1.421 + Next_Step (Pstate ist, Tactic.insert_assumptions tac ctxt, tac) (*return from find_next_step*);
1.422 +"~~~~~ from fun find_next_step\<longrightarrow>and do_next\<longrightarrow>fun zzz, return:"; val (Next_Step (ist, ctxt, tac))
1.423 + = (Next_Step (Pstate ist, Tactic.insert_assumptions tac ctxt, tac));
1.424 +
1.425 + LI.by_tactic tac (ist, Tactic.insert_assumptions tac ctxt) ptp (*return from and do_next*);
1.426 +"~~~~~ from and do_next\<longrightarrow>fun do_next\<longrightarrow>toplevel, return:"; val (_, ([(tac''''', _, _)], _, (pt''''', p''''')))
1.427 + = (LI.by_tactic tac (ist, Tactic.insert_assumptions tac ctxt) ptp);
1.428 +(*\\------------------ end of go into 1 -----------------------------------------------------//*)
1.429 +
1.430 +(*[], Res*)val (_, ([(tac''''', _, _)], _, (pt''''', p'''''))) =
1.431 +
1.432 + Step.do_next p'''''_' ((pt'''''_', Pos.e_pos'), []);(* Check_Postcond ["polynomial", "simplification"]*)
1.433 +(*//------------------ go into 2 ------------------------------------------------------------\\*)
1.434 +"~~~~~ fun do_next , args:"; val ((ip as (_, p_)), (ptp as (pt, p), tacis))
1.435 + = (p''''', ((pt''''', e_pos'), []));
1.436 + val pIopt = Ctree.get_pblID (pt, ip);
1.437 + (*if*) ip = ([], Res) (*else*);
1.438 + val _ = (*case*) tacis (*of*);
1.439 + val SOME _ = (*case*) pIopt (*of*);
1.440 + (*if*) member op = [Pos.Pbl, Pos.Met] p_ (*else*);
1.441 +
1.442 +val ("ok", ([(Check_Postcond ["polynomial", "simplification"], _, _)], _, (_, ([], Res)))) =
1.443 +Step_Solve.do_next (pt, ip);
1.444 +"~~~~~ and do_next , args:"; val (ptp as (pt, pos as (p, p_))) = (pt, ip);
1.445 + (*if*) MethodC.id_empty = get_obj g_metID pt (par_pblobj pt p) (*else*);
1.446 + val thy' = get_obj g_domID pt (par_pblobj pt p);
1.447 + val ((ist, ctxt), sc) = LItool.resume_prog thy' (p,p_) pt;
1.448 +
1.449 + (** )val End_Program (ist, tac) =
1.450 + ( *case*) LI.find_next_step sc (pt, pos) ist ctxt (*of*);
1.451 +"~~~~~ fun find_next_step , args:"; val ((Rule.Prog prog), (ptp as(pt, (p, _))), (Pstate ist), ctxt)
1.452 + = (sc, (pt, pos), ist, ctxt);
1.453 +
1.454 +(* val Term_Val (Const (\<^const_name>\<open>times\<close>, _) $ Free ("2", _) $ Free ("a", _))*)
1.455 + (** )val Term_Val prog_result =
1.456 + ( *case*) scan_to_tactic (prog, (ptp, ctxt)) (Pstate ist) (*of*);
1.457 +"~~~~~ fun scan_to_tactic , args:"; val ((prog, cc), (Pstate (ist as {path, ...})))
1.458 + = ((prog, (ptp, ctxt)), (Pstate ist));
1.459 + (*if*) path = [] (*else*);
1.460 +
1.461 + go_scan_up (prog, cc) (trans_scan_up ist |> set_found);
1.462 +"~~~~~ fun go_scan_up , args:"; val ((pcc as (sc, _)), (ist as {path, act_arg, found_accept, ...}))
1.463 + = ((prog, cc), (trans_scan_up ist(*|> set_found !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! *)));
1.464 + (*if*) path = [R] (*then*);
1.465 + (*if*) found_accept = true (*then*);
1.466 +
1.467 + Term_Val act_arg (*return from go_scan_up*);
1.468 +"~~~~~ from fun go_scan_up\<longrightarrow>fun scan_to_tactic, return:"; val (Term_Val prog_result) = (Term_Val act_arg);
1.469 +
1.470 + Term_Val prog_result (*return from scan_to_tactic*);
1.471 +"~~~~~ from fun scan_to_tactic\<longrightarrow>fun find_next_step, return:"; val (Term_Val prog_result) = (Term_Val prog_result);
1.472 + val (true, p', _) = (*case*) parent_node pt p (*of*);
1.473 + val (_, pblID, _) = get_obj g_spec pt p';
1.474 +
1.475 + End_Program (Pstate ist, Tactic.Check_Postcond' (pblID, prog_result))
1.476 + (*return from find_next_step*);
1.477 +"~~~~~ from fun find_next_step\<longrightarrow>and do_next\<longrightarrow>fun zzz, return:"; val (End_Program (ist, tac))
1.478 + = (End_Program (Pstate ist, Tactic.Check_Postcond' (pblID,prog_result)));
1.479 + val _ = (*case*) tac (*of*);
1.480 +
1.481 +val ("ok", ([(Check_Postcond ["polynomial", "simplification"], _, _)], _, (_, ([], Res))))
1.482 + = LI.by_tactic tac (ist, ctxt) ptp (*return from and do_next*);
1.483 +"~~~~~ from and do_next\<longrightarrow>top level, return:"; val (_, ([(tac''''', _, _)], _, (pt''''', p''''')))
1.484 + = (LI.by_tactic tac (ist, ctxt) ptp);
1.485 +(*\\------------------ end of go into 2 -----------------------------------------------------//*)
1.486 +
1.487 +(*[], Und*)val (msg, ([], _, (pt, p))) = Step.do_next p''''' ((pt''''', Pos.e_pos'), []);(**)
1.488 +
1.489 +Test_Tool.show_pt_tac pt; (*[
1.490 +([], Frm), Simplify (a + a)
1.491 +. . . . . . . . . . Apply_Method ["simplification", "for_polynomials"],
1.492 +([1], Frm), a + a
1.493 +. . . . . . . . . . Rewrite_Set "norm_Poly",
1.494 +([1], Res), 2 * a
1.495 +. . . . . . . . . . Check_Postcond ["polynomial", "simplification"],
1.496 +([], Res), 2 * a]*)
1.497 +
1.498 +(*/--- final test ---------------------------------------------------------------------------\\*)
1.499 +val (res, asm) = (get_obj g_result pt (fst p));
1.500 +if UnparseC.term res = "2 * a" andalso map UnparseC.term asm = []
1.501 +andalso p = ([], Und) andalso msg = "end-of-calculation"
1.502 +andalso pr_ctree pr_short pt = ". ----- pblobj -----\n1. a + a\n"
1.503 +then
1.504 + case tac''''' of Check_Postcond ["polynomial", "simplification"] => ()
1.505 + | _ => error "re-build: fun find_next_step, mini 1"
1.506 +else error "re-build: fun find_next_step, mini 2"
1.507 +
1.508 +
1.509 +"----------- re-build: fun locate_input_term ---------------------------------------------------";
1.510 +"----------- re-build: fun locate_input_term ---------------------------------------------------";
1.511 +"----------- re-build: fun locate_input_term ---------------------------------------------------";
1.512 +(*cp from inform.sml
1.513 + ----------- appendFormula: on Res + late deriv ------------------------------------------------*)
1.514 +val fmz = ["equality (x+1=(2::real))", "solveFor x", "solutions L"];
1.515 +val (dI',pI',mI') = ("Test", ["sqroot-test", "univariate", "equation", "test"],
1.516 + ["Test", "squ-equ-test-subpbl1"]);
1.517 +val (p,_,f,nxt,_,pt) = CalcTreeTEST [(fmz, (dI',pI',mI'))];
1.518 +val (p,_,f,nxt,_,pt) = me nxt p [] pt;
1.519 +val (p,_,f,nxt,_,pt) = me nxt p [] pt;
1.520 +val (p,_,f,nxt,_,pt) = me nxt p [] pt;
1.521 +val (p,_,f,nxt,_,pt) = me nxt p [] pt;
1.522 +val (p,_,f,nxt,_,pt) = me nxt p [] pt;
1.523 +val (p,_,f,nxt,_,pt) = me nxt p [] pt;
1.524 +(*[], Met*)val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*Apply_Method ["Test", "squ-equ-test-subpbl1"]*);
1.525 +
1.526 +(*[1], Frm*)val (p,_,f,nxt,_,pt) = me nxt p [] pt;(*Rewrite_Set "norm_equation"*)
1.527 +(*+*)if f2str f = "x + 1 = 2" then () else error "locate_input_term at ([1], Frm) CHANGED";
1.528 +
1.529 +(*[1], Res*)val (p,_,f,nxt,_,pt) = me nxt p [] pt;(*Rewrite_Set "Test_simplify"*)
1.530 +(*+*)if f2str f = "x + 1 + - 1 * 2 = 0" then () else error "locate_input_term at ([1], Frm) CHANGED";
1.531 +
1.532 +Test_Tool.show_pt_tac pt; (*[
1.533 +([], Frm), solve (x + 1 = 2, x)
1.534 +. . . . . . . . . . Apply_Method ["Test", "squ-equ-test-subpbl1"],
1.535 +([1], Frm), x + 1 = 2
1.536 +. . . . . . . . . . Rewrite_Set "norm_equation",
1.537 +([1], Res), x + 1 + - 1 * 2 = 0 ///Check_Postcond..ERROR*)
1.538 +
1.539 +\<close> ML \<open>
1.540 +(*//---------- appendFormula 1 "x = 1" \<longrightarrow> Step_Solve.inform \<longrightarrow> LI.locate_input_term ----------\\*)
1.541 +"~~~~~ fun appendFormula , args:"; val ((*cI, *) ifo: TermC.as_string) = ((**) "x = 1");
1.542 + val cs = (*get_calc cI*) ((pt, p), [(*nxt, nxt_, (pos, (ist, ctxt))*)])
1.543 + val pos = (*get_pos cI 1*) p
1.544 +
1.545 +(*+*)val ptp''''' = (pt, p);
1.546 +(*+*)if snd ptp''''' = ([1], Res) then () else error "old_cs changed";
1.547 +(*+*)Test_Tool.show_pt_tac pt; (*[
1.548 +(*+*)([], Frm), solve (x + 1 = 2, x)
1.549 +(*+*). . . . . . . . . . Apply_Method ["Test", "squ-equ-test-subpbl1"],
1.550 +(*+*)([1], Frm), x + 1 = 2
1.551 +(*+*). . . . . . . . . . Rewrite_Set "norm_equation",
1.552 +(*+*)([1], Res), x + 1 + - 1 * 2 = 0 ///Check_Postcond*)
1.553 +
1.554 + val ("ok", cs' as (_, _, ptp')) =
1.555 + (*case*) Step.do_next pos cs (*of*);
1.556 +
1.557 +\<close> ML \<open>
1.558 +val ("ok", (_(*use in DG !!!*), [], ptp''''' as (pt''''', p'''''))) = (*case*)
1.559 +Step_Solve.by_term ptp' (encode ifo) (*of*);
1.560 +\<close> ML \<open>
1.561 +"~~~~~ fun by_term , args:"; val ((pt, pos as (p, _)), istr)
1.562 + = (ptp', (encode ifo));
1.563 +\<close> ML \<open>
1.564 + val SOME f_in =
1.565 + (*case*) TermC.parseNEW (get_ctxt pt pos) istr (*of*);
1.566 + val pos_pred = lev_back(*'*) pos
1.567 + val f_pred = Ctree.get_curr_formula (pt, pos_pred);
1.568 + val f_succ = Ctree.get_curr_formula (pt, pos);
1.569 + (*if*) f_succ = f_in (*else*);
1.570 + val NONE =
1.571 + (*case*) CAS_Cmd.input f_in (*of*);
1.572 +
1.573 +\<close> ML \<open>
1.574 +(*NEW*) LI.locate_input_term (pt, pos) f_in (*of*);
1.575 +\<close> ML \<open>
1.576 +"~~~~~ fun locate_input_term , args:"; val ((pt, pos), tm) = ((pt, pos), f_in);
1.577 + val pos_pred = Pos.lev_back' pos (*f_pred ---"step pos cs"---> f_succ in appendFormula*)
1.578 +
1.579 + \<close> ML \<open>
1.580 + val ("ok", (_, _, cstate as (pt', pos'))) =
1.581 + (*case*) compare_step ([], [], (pt, pos_pred)) tm (*of*);
1.582 +\<close> ML \<open>
1.583 +"~~~~~ fun compare_step , args:"; val ((tacis, c, ptp as (pt, pos as (p, _))), ifo) =
1.584 + (([], [], (pt, pos_pred)), tm);
1.585 + val fo = Calc.current_formula ptp
1.586 + val {nrls, ...} = MethodC.from_store (Ctree.get_obj Ctree.g_metID pt (Ctree.par_pblobj pt p))
1.587 + val {rew_ord, erls, rules, ...} = Rule_Set.rep nrls
1.588 +\<close> ML \<open>
1.589 +(*+*)Proof_Context.theory_of (Ctree.get_ctxt pt pos) (*Isac.Test OK!*)
1.590 +\<close> ML \<open>
1.591 + val (found, der) = Derive.steps (Ctree.get_ctxt pt pos) rew_ord erls rules fo ifo; (*<---------------*)
1.592 +\<close> ML \<open>
1.593 + (*if*) found (*else*);
1.594 + (*if*) pos = ([], Pos.Res) (*else*);
1.595 +\<close> ML \<open>
1.596 + val msg_cs' as (_, (tacis, c', ptp)) = LI.do_next ptp; (*<---------------------*)
1.597 +\<close> ML \<open>
1.598 + (*case*) tacis (*of \<longrightarrow> [(Rewrite_Set "Test_simplify",...*) :State_Steps.T;
1.599 +\<close> ML \<open>
1.600 +
1.601 +(*+*) val ((input, tac, (pos, (ist, ctxt))) :: _) = tacis;
1.602 +(*+*) input (*= Tactic.Rewrite_Set "Test_simplify"*);
1.603 +(*+*) tac;
1.604 +(*+*) pos = ([2], Res);
1.605 +(*+*) ist;
1.606 +(*+*) Proof_Context.theory_of ctxt (*.., Isac.Test*);
1.607 +
1.608 +\<close> ML \<open>
1.609 + (*in*) compare_step (tacis, c @ c' (*@ c'' =c'BECAUSE OF | _ => msg_cs'*), ptp) ifo (*end*)
1.610 +\<close> ML \<open>
1.611 +"~~~~~ fun compare_step , args:"; val ((tacis, c, ptp as (pt, pos as (p, _))), ifo) =
1.612 + (([], [], (pt, pos_pred)), tm);
1.613 + val fo = Calc.current_formula ptp
1.614 + val {nrls, ...} = MethodC.from_store (Ctree.get_obj Ctree.g_metID pt (Ctree.par_pblobj pt p))
1.615 + val {rew_ord, erls, rules, ...} = Rule_Set.rep nrls
1.616 +\<close> ML \<open>
1.617 + val (found, der) = Derive.steps (Ctree.get_ctxt pt pos) rew_ord erls rules fo ifo; (*<---------------*)
1.618 +\<close> ML \<open>
1.619 + (*if*) found (*else*);
1.620 + (*if*) pos = ([], Pos.Res) (*else*);
1.621 +\<close> ML \<open>
1.622 + val msg_cs' as (_, (tacis, c', ptp)) = LI.do_next ptp; (*<---------------------*)
1.623 +\<close> ML \<open>
1.624 +
1.625 +(*+*) val ((input, tac, (pos, (ist, ctxt))) :: _) = tacis;
1.626 +(*+*) input (*= Tactic.Rewrite_Set "Test_simplify"*);
1.627 +\<close> ML \<open>
1.628 +(*+*) tac;
1.629 +(*+*) pos = ([2], Res);
1.630 +(*+*) ist;
1.631 +(*+*) Proof_Context.theory_of ctxt (*.., Isac.Test*);
1.632 +
1.633 +\<close> ML \<open>
1.634 +\<close> ML \<open>
1.635 +\<close> ML \<open>
1.636 +Tactic.Apply_Method': MethodC.id * term option * Istate.T * Proof.context -> Tactic.T
1.637 +\<close> ML \<open>
1.638 +\<close> ML \<open>
1.639 +\<close> ML \<open>
1.640 +\<close> ML \<open>
1.641 +\<close> ML \<open>
1.642 +\<close> ML \<open>
1.643 +\<close> ML \<open>
1.644 +
1.645 +\<close> ML \<open> (*----- original..*)
1.646 +(*NEW*) Found_Step cstate (*return from locate_input_term*);
1.647 + (*LI.Found_Step ( *)cstate(*, _(*istate*), _(*ctxt*))( *return from locate_input_term*);
1.648 +"~~~~~ from fun locate_input_term\<longrightarrow>fun Step_Solve.by_term, return:"; val ("ok", (_(*use in DG !!!*), c, ptp as (_, p)))
1.649 + = (("ok" , ([], [], cstate (* already contains istate, ctxt *))));
1.650 +
1.651 + ("ok", ((*_ use in DG !!!,*) c, ptp(* as (_*), p))(*)*)(*return from Step_Solve.by_term*);
1.652 +"~~~~~ from fun Step_Solve.by_term\<longrightarrow>(fun appendFormula)!toplevel, return:"; val ("ok", (_(*use in DG !!!*), [], ptp''''' as (pt''''', p''''')))
1.653 + = ("ok", ([], [], ptp));
1.654 +
1.655 +\<close> ML \<open>
1.656 +(*fun me requires nxt...*)
1.657 + Step.do_next p''''' (ptp''''', []);
1.658 + val ("ok", ([(nxt'''''_' as Check_Postcond ["LINEAR", "univariate", "equation", "test"], _, _)], _,
1.659 + (pt'''''_', p'''''_'))) = Step.do_next p''''' (ptp''''', [])
1.660 +(*\\---------- appendFormula 1 "x = 1" \<longrightarrow> Step_Solve.inform \<longrightarrow> LI.locate_input_term ----------//*)
1.661 +
1.662 +(*//----- REPLACED BY appendFormula 1 "x = 1" \<longrightarrow> Step_Solve.inform \<longrightarrow> LI.locate_input_term -----\\* )
1.663 + (*[2], Res*)val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = Subproblem ("Test", ["LINEAR", "univariate", "equation", "test"])*)
1.664 + (*[3], Pbl*)val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = Model_Problem*)
1.665 + (*[3], Pbl*)val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = Add_Given "equality (- 1 + x = 0)"*)
1.666 + (*[3], Pbl*)val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = Add_Given "solveFor x"*)
1.667 + (*[3], Pbl*)val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = Add_Find "solutions x_i"*)
1.668 + (*[3], Pbl*)val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = Specify_Theory "Test"*)
1.669 + (*[3], Pbl*)val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = Specify_Problem ["LINEAR", "univariate", "equation", "test"]*)
1.670 + (*[3], Pbl*)val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = Specify_Method ["Test", "solve_linear"]*)
1.671 + (*[3], Met*)val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = Apply_Method ["Test", "solve_linear"]*)
1.672 + (*[3, 1], Frm*)val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = Rewrite_Set_Inst (["(''bdv'', x)"], "isolate_bdv")*)
1.673 + (*[3, 1], Res*)val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = Rewrite_Set "Test_simplify"*)
1.674 + (*[3, 2], Res*)val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = Check_Postcond ["LINEAR", "univariate", "equation", "test"]*)
1.675 +( *\\----- REPLACED BY appendFormula 1 "x = 1" \<longrightarrow> Step_Solve.inform \<longrightarrow> LI.locate_input_term -----//*)
1.676 +
1.677 + (*[3], Res*)val (p,_,f,nxt,_,pt) = me nxt'''''_' p'''''_' [] pt'''''_'; (*nxt = Check_elementwise "Assumptions"*)
1.678 + (*[4], Res*)val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = Check_Postcond ["sqroot-test", "univariate", "equation", "test"]*)
1.679 + (*[], Res*)val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = End_Proof'*)
1.680 +
1.681 +\<close> ML \<open>
1.682 +(*/--- final test ---------------------------------------------------------------------------\\*)
1.683 +if p = ([], Res) andalso f2str f = "[x = 1]" andalso pr_ctree pr_short pt =
1.684 + ". ----- pblobj -----\n" ^
1.685 + "1. x + 1 = 2\n" ^
1.686 + "2. x + 1 + - 1 * 2 = 0\n" ^
1.687 + "3. ----- pblobj -----\n" ^
1.688 + "3.1. - 1 + x = 0\n" ^
1.689 + "3.2. x = 0 + - 1 * - 1\n" ^
1.690 + "3.2.1. x = 0 + - 1 * - 1\n" ^
1.691 + "3.2.2. x = 0 + 1\n" (*ATTENTION: see complete Calc below*)
1.692 +then case nxt of End_Proof' => () | _ => error "re-build: fun locate_input_term CHANGED 1"
1.693 +else error "re-build: fun locate_input_term CHANGED 2";
1.694 +
1.695 +Test_Tool.show_pt_tac pt; (*[
1.696 +([], Frm), solve (x + 1 = 2, x)
1.697 +. . . . . . . . . . Apply_Method ["Test", "squ-equ-test-subpbl1"],
1.698 +([1], Frm), x + 1 = 2
1.699 +. . . . . . . . . . Rewrite_Set "norm_equation",
1.700 +([1], Res), x + 1 + - 1 * 2 = 0
1.701 +. . . . . . . . . . Rewrite_Set "Test_simplify",
1.702 +([2], Res), - 1 + x = 0
1.703 +. . . . . . . . . . Subproblem (Test, ["LINEAR", "univariate", "equation", "test"]),
1.704 +([3], Pbl), solve (- 1 + x = 0, x)
1.705 +. . . . . . . . . . Apply_Method ["Test", "solve_linear"],
1.706 +([3,1], Frm), - 1 + x = 0
1.707 +. . . . . . . . . . Rewrite_Set_Inst ([(''bdv'', x)], "isolate_bdv"),
1.708 +([3,1], Res), x = 0 + - 1 * - 1
1.709 +. . . . . . . . . . Derive Test_simplify,
1.710 +([3,2,1], Frm), x = 0 + - 1 * - 1
1.711 +. . . . . . . . . . Rewrite ("#: - 1 * - 1 = 1", "- 1 * - 1 = 1"),
1.712 +([3,2,1], Res), x = 0 + 1
1.713 +. . . . . . . . . . Rewrite ("radd_0", "0 + ?k = ?k"),
1.714 +([3,2,2], Res), x = 1
1.715 +. . . . . . . . . . Tactic.input_to_string not impl. for ?!,
1.716 +([3,2], Res), x = 1
1.717 +. . . . . . . . . . Check_Postcond ["LINEAR", "univariate", "equation", "test"],
1.718 +([3], Res), [x = 1]
1.719 +. . . . . . . . . . Check_Postcond ["sqroot-test", "univariate", "equation", "test"],
1.720 +([], Res), [x = 1]]*)
1.721 +\<close> ML \<open>
1.722 +\<close> ML \<open>
1.723 +\<close>
1.724 ML_file "Interpret/step-solve.sml"
1.725
1.726 ML_file "MathEngine/me-misc.sml"
1.727 @@ -274,6 +991,12 @@
1.728 ML_file "Knowledge/delete.sml"
1.729 ML_file "Knowledge/descript.sml"
1.730 ML_file "Knowledge/simplify.sml"
1.731 +ML \<open>
1.732 +\<close> ML \<open>
1.733 +\<close> ML \<open>
1.734 +\<close> ML \<open>
1.735 +\<close> ML \<open>
1.736 +\<close>
1.737 ML_file "Knowledge/poly-1.sml"
1.738 (*ML_file "Knowledge/poly-2.sml" Test_Isac_Short*)
1.739 ML_file "Knowledge/gcd_poly_ml.sml"