neuper@42021
|
1 |
(* Title: 530-error-Check_Elementwise.sml
|
neuper@42021
|
2 |
Author: Walther Neuper 1105
|
neuper@42021
|
3 |
(c) copyright due to lincense terms.
|
neuper@42021
|
4 |
*)
|
neuper@42021
|
5 |
|
neuper@42021
|
6 |
"----------- Minisubplb/530-error-Check_Elementwise.sml ----------";
|
neuper@42021
|
7 |
"----------- Minisubplb/530-error-Check_Elementwise.sml ----------";
|
neuper@42021
|
8 |
"----------- Minisubplb/530-error-Check_Elementwise.sml ----------";
|
neuper@42394
|
9 |
(*see also --- x / (x ^ 2 - 6 * x + 9) - 1 / (x ^ 2 - 3 * x) = 1 /x" by me ---*)
|
neuper@42021
|
10 |
val fmz = ["equality (x+1=(2::real))", "solveFor x","solutions L"];
|
neuper@42021
|
11 |
val (dI',pI',mI') =
|
neuper@42021
|
12 |
("Test", ["sqroot-test","univariate","equation","test"],
|
neuper@42021
|
13 |
["Test","squ-equ-test-subpbl1"]);
|
neuper@42021
|
14 |
val (p,_,f,nxt,_,pt) = CalcTreeTEST [(fmz, (dI',pI',mI'))];
|
neuper@42021
|
15 |
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
|
neuper@42021
|
16 |
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
|
neuper@42021
|
17 |
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
|
neuper@42021
|
18 |
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
|
neuper@42021
|
19 |
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
|
neuper@42021
|
20 |
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
|
neuper@42021
|
21 |
val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = Apply_Method ["Test", "squ-equ-test-subpbl1"]*)
|
neuper@42021
|
22 |
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
|
neuper@42021
|
23 |
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
|
neuper@55279
|
24 |
val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = Subp ["LINEAR", "univariate", "equation", "test"]*)
|
neuper@42021
|
25 |
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
|
neuper@42021
|
26 |
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
|
neuper@42021
|
27 |
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
|
neuper@42021
|
28 |
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
|
neuper@42021
|
29 |
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
|
neuper@42021
|
30 |
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
|
neuper@42021
|
31 |
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
|
neuper@42451
|
32 |
val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*OKnxt = Apply_Method ["Test", "solve_linear"]*)
|
neuper@42451
|
33 |
val (p'',_,f,nxt,_,pt'') = me nxt p [] pt; (*nxt = Rewrite_Set_Inst..OK isolate_bdv*);
|
neuper@42451
|
34 |
get_ctxt pt'' p'' |> is_e_ctxt; (*OKfalse*)
|
neuper@42451
|
35 |
val ctxt = get_ctxt pt'' p'';
|
neuper@42021
|
36 |
val SOME t = parseNEW ctxt "Check_elementwise [x = 1] {(v_v::real). Assumptions}";
|
neuper@42451
|
37 |
get_loc pt'' p'' |> snd |> is_e_ctxt; (**OKfalse*)
|
neuper@42387
|
38 |
|
neuper@42451
|
39 |
val (p,_,f,nxt,_,pt) = me nxt p'' [] pt''; (*nxt = Rewrite_Set "Test_simplify"*);
|
neuper@42021
|
40 |
get_ctxt pt p |> is_e_ctxt; (*false*)
|
neuper@42021
|
41 |
val ctxt = get_ctxt pt p;
|
neuper@42021
|
42 |
val SOME t = parseNEW ctxt "Check_elementwise [x = 1] {(v_v::real). Assumptions}";
|
neuper@42021
|
43 |
get_loc pt p |> snd |> is_e_ctxt; (*false*)
|
neuper@55279
|
44 |
val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = Check_Postcond ["LINEAR","univariate", ...]) *);
|
neuper@42021
|
45 |
|
neuper@42021
|
46 |
val (pt'''', p'''') = (pt, p);
|
neuper@42021
|
47 |
"~~~~~ fun me, args:"; val (_,tac) = nxt;
|
neuper@42021
|
48 |
val (pt, p) = case locatetac tac (pt,p) of
|
neuper@42021
|
49 |
("ok", (_, _, ptp)) => ptp | _ => error "script.sml locatetac";
|
neuper@42021
|
50 |
show_pt pt; (*...(([3], Res), [x = 1])]... back in root, OK *)
|
neuper@42021
|
51 |
"~~~~~ fun step, args:"; val (ip as (_,p_), (ptp as (pt,p), tacis)) = (p, ((pt, e_pos'), []))
|
neuper@42021
|
52 |
val pIopt = get_pblID (pt,ip); (*= SOME ["sqroot-test", "univariate", ...]*)
|
neuper@42021
|
53 |
tacis; (*= []*)
|
neuper@42021
|
54 |
member op = [Pbl,Met] p_ andalso is_none (get_obj g_env pt (fst p)); (*= false*)
|
walther@59686
|
55 |
"~~~~~ and do_solve_step , args:"; val (ptp as (pt, pos as (p, p_))) = (pt, ip);
|
walther@59686
|
56 |
(*if*) Celem.e_metID = get_obj g_metID pt (par_pblobj pt p) (*else*);
|
walther@59686
|
57 |
val thy' = get_obj g_domID pt (par_pblobj pt p);
|
walther@59686
|
58 |
val (srls, is, sc) = Lucin.from_pblobj_or_detail' thy' (p,p_) pt;
|
walther@59686
|
59 |
|
walther@59686
|
60 |
val (Check_elementwise' _, (Pstate _, _), _) =
|
walther@59686
|
61 |
determine_next_tactic (thy', srls) (pt, pos) sc is;
|
walther@59699
|
62 |
"~~~~~ fun determine_next_tactic , args:"; val ((thy, _), (ptp as (pt, (p, _))), (Rule.Prog prog), (Istate.Pstate ist, _(*ctxt*)))
|
walther@59686
|
63 |
= ((thy', srls), (pt, pos), sc, is);
|
walther@59686
|
64 |
|
walther@59686
|
65 |
(*case*)
|
walther@59699
|
66 |
scan_to_tactic2 (prog, (ptp, thy)) (Istate.Pstate ist) (*of*);
|
walther@59699
|
67 |
"~~~~~ fun scan_to_tactic2 , args:"; val ((prog, cct), (Istate.Pstate (ist as {path, ...})))
|
walther@59699
|
68 |
= ((prog, (ptp, thy)), (Istate.Pstate ist));
|
walther@59686
|
69 |
(*if*) 0 = length path (*else*);
|
walther@59686
|
70 |
|
walther@59699
|
71 |
go_scan_up2 (prog, cct) (trans_scan_up2 ist |> set_appy Skip_);
|
walther@59699
|
72 |
"~~~~~ and go_scan_up2 , args:"; val ((yyy as (prog, _)), (ist as {env, path, finish, ...}))
|
walther@59699
|
73 |
= ((prog, cct), (trans_scan_up2 ist |> set_appy Skip_));
|
walther@59686
|
74 |
(*if*) 1 < length path (*then*);
|
walther@59686
|
75 |
|
walther@59699
|
76 |
scan_up2 yyy (ist |> path_up) (go_up path prog);
|
walther@59699
|
77 |
"~~~~~ fun scan_up2 , args:"; val ((yyy as (prog, xxx)), (ist as {finish, ...}), (Const ("HOL.Let"(*1*), _) $ _))
|
walther@59699
|
78 |
= (yyy, (ist |> path_up), (go_up path prog));
|
walther@59686
|
79 |
(*if*) finish = Napp_ (*else*);
|
walther@59699
|
80 |
val (i, body) = check_Let_up ist prog;
|
walther@59686
|
81 |
|
walther@59686
|
82 |
(*case*)
|
walther@59698
|
83 |
scan_dn2 xxx (ist |> path_up_down [R, D] |> upd_env i) body (*of*);
|
walther@59686
|
84 |
(*========== a leaf has been found ==========*)
|
walther@59691
|
85 |
"~~~~~ fun scan_dn2 , args:"; val (((pt, p), ctxt), (ist as {env, eval, ...}), t)
|
walther@59698
|
86 |
= (xxx, (ist |> path_up_down [R, D] |> upd_env i), body);
|
walther@59721
|
87 |
val (Program.Tac stac, a') = (*case*)
|
walther@59718
|
88 |
interpret_leaf "next " ctxt eval (get_subst ist) t;
|
walther@59686
|
89 |
|
walther@59686
|
90 |
val (Check_elementwise "Assumptions", Empty_Tac_) =
|
walther@59686
|
91 |
stac2tac_ pt (Celem.assoc_thy ctxt) stac;
|
walther@59686
|
92 |
"~~~~~ fun stac2tac_ , args:"; val (pt, thy, (Const("Prog_Tac.Check'_elementwise",_) $ _ $
|
walther@59686
|
93 |
(set as Const ("Set.Collect",_) $ Abs (_,_,pred))))
|
walther@59686
|
94 |
= (pt, (assoc_thy th), stac);
|
neuper@42394
|
95 |
|
neuper@42021
|
96 |
val (p,_,f,nxt,_,pt) = me nxt p'''' [] pt''''; (*WAS nxt = ("Empty_Tac", Empty_Tac)*)
|
wneuper@59253
|
97 |
case nxt of ("Check_elementwise", Check_elementwise "Assumptions") => ()
|
wneuper@59253
|
98 |
| _ => error "Check_elementwise changed; after switch sub-->root-method";
|