wneuper@59493
|
1 |
(* Title: 700-interSteps.sml
|
wneuper@59493
|
2 |
Author: Walther Neuper 1105
|
wneuper@59493
|
3 |
(c) copyright due to lincense terms.
|
wneuper@59493
|
4 |
*)
|
wneuper@59493
|
5 |
"----------- Minisubplb/700-interSteps.sml -----------------------";
|
wneuper@59493
|
6 |
"----------- Minisubplb/700-interSteps.sml -----------------------";
|
wneuper@59493
|
7 |
"----------- Minisubplb/700-interSteps.sml -----------------------";
|
wneuper@59493
|
8 |
(** adaption from rewtools.sml --- initContext..Thy_, fun context_thm ---,
|
wneuper@59493
|
9 |
*into a functional representation, i.e. we outcomment statements with side-effects:
|
wneuper@59493
|
10 |
** reset_states ();
|
wneuper@59493
|
11 |
** CalcTree [(["equality (x+1=(2::real))", "solveFor x","solutions L"],
|
wneuper@59493
|
12 |
** ("Test", ["sqroot-test","univariate","equation","test"],
|
wneuper@59493
|
13 |
** ["Test","squ-equ-test-subpbl1"]))];
|
wneuper@59493
|
14 |
** Iterator 1; moveActiveRoot 1;
|
wneuper@59493
|
15 |
** autoCalculate 1 CompleteCalc;
|
wneuper@59493
|
16 |
**)
|
wneuper@59493
|
17 |
val (p,_,f,nxt,_,pt) = CalcTreeTEST [(["equality (x+1=(2::real))", "solveFor x","solutions L"],
|
wneuper@59493
|
18 |
("Test", ["sqroot-test","univariate","equation","test"],
|
wneuper@59493
|
19 |
["Test","squ-equ-test-subpbl1"]))];
|
wneuper@59493
|
20 |
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
|
wneuper@59493
|
21 |
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
|
wneuper@59493
|
22 |
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
|
wneuper@59493
|
23 |
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
|
wneuper@59493
|
24 |
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
|
wneuper@59493
|
25 |
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
|
wneuper@59493
|
26 |
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
|
wneuper@59493
|
27 |
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
|
wneuper@59493
|
28 |
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
|
wneuper@59493
|
29 |
val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = ("Subproblem"*)
|
wneuper@59493
|
30 |
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
|
wneuper@59493
|
31 |
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
|
wneuper@59493
|
32 |
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
|
wneuper@59493
|
33 |
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
|
wneuper@59493
|
34 |
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
|
wneuper@59493
|
35 |
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
|
wneuper@59493
|
36 |
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
|
wneuper@59493
|
37 |
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
|
wneuper@59493
|
38 |
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
|
wneuper@59493
|
39 |
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
|
wneuper@59493
|
40 |
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
|
wneuper@59493
|
41 |
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
|
wneuper@59493
|
42 |
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
|
wneuper@59493
|
43 |
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
|
walther@59686
|
44 |
|
walther@59734
|
45 |
(*+*)if p = ([], Res)
|
walther@59749
|
46 |
(*+*)then case nxt of End_Proof' => ()
|
walther@59734
|
47 |
(*+*) | _ => error "calculation not finished correctly 1"
|
walther@59734
|
48 |
(*+*)else error "calculation not finished correctly 2";
|
walther@59734
|
49 |
(*+*)show_pt pt; (* 11 lines with subpbl *)
|
walther@59734
|
50 |
|
wneuper@59493
|
51 |
"----- no thy-context at result -----";
|
wneuper@59493
|
52 |
(** val p = ([], Res);
|
wneuper@59493
|
53 |
** initContext 1 Thy_ p
|
wneuper@59493
|
54 |
*** = <MESSAGE><CALCID>1</CALCID><STRING>no thy-context at result</STRING></MESSAGE>: XML.tree;
|
wneuper@59493
|
55 |
** val ((pt,_),_) = get_calc 1; (* 11 lines with subpbl *)
|
wneuper@59493
|
56 |
**
|
wneuper@59493
|
57 |
** interSteps 1 ([2], Res); (* added [2,1]..[2,6] *)
|
wneuper@59493
|
58 |
**)
|
wneuper@59493
|
59 |
"~~~~~ fun interSteps, args:"; val (cI, ip) = (1, ([2], Res));
|
wneuper@59493
|
60 |
(** val ((pt, p), tacis) = get_calc cI;*)
|
wneuper@59493
|
61 |
val ip' = lev_pred' pt ip;
|
walther@59734
|
62 |
|
walther@59734
|
63 |
(*+*)ip = ([2], Res);
|
walther@59734
|
64 |
(*+*)ip' = ([1], Res);
|
walther@59734
|
65 |
|
walther@59734
|
66 |
(*+*)show_pt pt; (* 11 lines, as produced by autoCalculate CompleteCalc *)
|
walther@59734
|
67 |
|
walther@59833
|
68 |
val ("detailrls", pt''''', _) = (*case*) Detail_Step.go pt ip (*of*);
|
walther@59734
|
69 |
|
walther@59734
|
70 |
(*+*)show_pt pt'''''; (* added [2,1]..[2,6] after ([1], Res)*)
|
walther@59734
|
71 |
|
walther@59734
|
72 |
(*//-------------------------- 1. go down along calls to error ------------------------------\\*)
|
walther@59833
|
73 |
"~~~~~ fun go , args:"; val (pt, (pos as (p, _))) = (pt, ip);
|
walther@59734
|
74 |
(*+*)p = [2];
|
walther@59734
|
75 |
(*+*)pos = ([2], Res);
|
walther@59734
|
76 |
|
walther@59734
|
77 |
val nd = Ctree.get_nd pt p
|
walther@59734
|
78 |
val cn = Ctree.children nd
|
walther@59723
|
79 |
;
|
walther@59734
|
80 |
(*if*) null cn (*then*);
|
walther@59734
|
81 |
(*if*) (Tactic.is_rewset o (Ctree.get_obj Ctree.g_tac nd)) [(*root of nd*)] (*then*);
|
wneuper@59493
|
82 |
|
walther@59833
|
83 |
Detail_Step.detailrls pt pos;
|
walther@59734
|
84 |
"~~~~~ fun detailrls , args:"; val (pt, (pos as (p, _))) = (pt, pos);
|
wneuper@59493
|
85 |
val t = get_obj g_form pt p
|
wneuper@59493
|
86 |
val tac = get_obj g_tac pt p
|
wneuper@59571
|
87 |
val rls = (assoc_rls o Tactic.rls_of) tac
|
walther@59734
|
88 |
val ctxt = get_ctxt pt pos
|
walther@59734
|
89 |
val _ = (*case*) rls (*of*);
|
wneuper@59493
|
90 |
val is = Generate.init_istate tac t
|
walther@59802
|
91 |
|
walther@59851
|
92 |
(*+*)val Rule_Set.Repeat {scr = EmptyProg, ...} = rls; (*this prog is replaced by Auto_Prog.gen on the fly*)
|
walther@59802
|
93 |
|
walther@59898
|
94 |
val tac_ = Tactic.Apply_Method' (Spec.e_metID(*WN0402: see generate1 !?!*), SOME t, is, ctxt)
|
wneuper@59493
|
95 |
val pos' = ((lev_on o lev_dn) p, Frm)
|
walther@59881
|
96 |
val thy = ThyC.get_theory "Isac_Knowledge"
|
walther@59811
|
97 |
val (_, _, _, pt') = Generate.generate1 tac_ (is, ctxt) (pt, pos') (* implicit Take *);
|
wneuper@59493
|
98 |
|
walther@59734
|
99 |
(** )val (_,_, (pt'', _)) =( **)
|
walther@59734
|
100 |
complete_solve CompleteSubpbl [] (pt', pos');
|
walther@59734
|
101 |
"~~~~~ fun complete_solve , args:"; val (auto, c, (ptp as (_, p as (_, p_))))
|
walther@59734
|
102 |
= (CompleteSubpbl, [], (pt', pos'));
|
walther@59734
|
103 |
(*if*) p = ([], Res) (*else*);
|
walther@59734
|
104 |
(*if*) member op = [Pbl,Met] p_ (*else*);
|
walther@59802
|
105 |
|
walther@59802
|
106 |
val (_, ([(Rewrite ("radd_commute", _), _, _)], c', ptp')) =
|
walther@59802
|
107 |
(*case*) Step_Solve.do_next ptp (*of*);
|
wneuper@59493
|
108 |
|
walther@59734
|
109 |
(*+*)c' = [([2], Res), ([3], Pbl), ([3, 1], Frm), ([3, 1], Res), ([3, 2], Res), ([3], Res), ([4], Res), ([], Res)];
|
walther@59734
|
110 |
(*+*)show_pt (fst ptp');(*[
|
walther@59734
|
111 |
(([], Frm), solve (x + 1 = 2, x)),
|
walther@59734
|
112 |
(([1], Frm), x + 1 = 2),
|
walther@59734
|
113 |
(([1], Res), x + 1 + -1 * 2 = 0),
|
walther@59734
|
114 |
(([2,1], Frm), x + 1 + -1 * 2 = 0),
|
walther@59734
|
115 |
(([2,1], Res), 1 + x + -1 * 2 = 0)]*)
|
walther@59686
|
116 |
|
walther@59802
|
117 |
(*+*)val (keep_c', keep_ptp') = (c', ptp');
|
walther@59802
|
118 |
"~~~~~ and Step_Solve.do_next , args:"; val () = ();
|
walther@59802
|
119 |
(*+*)(*STOPPED HERE:
|
walther@59851
|
120 |
NOTE: prog.xxx found by LItool.resume_prog from Rule_Set.Repeat {scr = Prog xxx, ...}*)
|
walther@59802
|
121 |
|
walther@59802
|
122 |
(*+*)val (c', ptp') = (keep_c', keep_ptp');
|
walther@59802
|
123 |
|
walther@59802
|
124 |
(** )val (_, c', ptp') =( **)
|
walther@59734
|
125 |
complete_solve auto (c @ c') ptp';
|
walther@59734
|
126 |
"~~~~~ fun complete_solve , args:"; val (auto, c, (ptp as (_, p as (_, p_))))
|
walther@59734
|
127 |
= (auto, (c @ c'), ptp');
|
walther@59734
|
128 |
(*if*) p = ([], Res) (*else*);
|
walther@59734
|
129 |
(*if*) member op = [Pbl,Met] p_ (*else*);
|
walther@59636
|
130 |
|
walther@59877
|
131 |
val (_, ([(Rewrite ("add.assoc", _), _, _)], c', ptp')) = (*case*)Step_Solve.do_next ptp (*of*);
|
walther@59734
|
132 |
"~~~~~ fun complete_solve , args:"; val (auto, c, (ptp as (_, p as (_, p_))))
|
walther@59734
|
133 |
= (auto, (c @ c'), ptp');
|
walther@59734
|
134 |
(*if*) p = ([], Res) (*else*);
|
walther@59734
|
135 |
(*if*) member op = [Pbl,Met] p_ (*else*);
|
walther@59762
|
136 |
val (_, ([(Calculate "TIMES", _, _)], c', ptp')) = (*case*)Step_Solve.do_next ptp (*of*);
|
walther@59636
|
137 |
|
walther@59734
|
138 |
show_pt (fst ptp'); (* added [2,1]..[2,3], more to come *)
|
walther@59734
|
139 |
(*\\-------------------------- 1. go down along calls to error ------------------------------//*)
|
wneuper@59493
|
140 |
|
walther@59734
|
141 |
(**
|
walther@59734
|
142 |
** interSteps 1 ([3,1], Res);
|
walther@59734
|
143 |
**)
|
walther@59734
|
144 |
"~~~~~ fun interSteps, args:"; val (cI, ip) = (1, ([3,1], Res));
|
walther@59734
|
145 |
(**val ((pt, p), tacis) = get_calc cI;*)
|
walther@59734
|
146 |
val ip' = lev_pred' pt ip;
|
wneuper@59493
|
147 |
|
walther@59734
|
148 |
(*+*)ip = ([3, 1], Res);
|
walther@59734
|
149 |
(*+*)ip' = ([3, 1], Frm);
|
walther@59723
|
150 |
|
walther@59833
|
151 |
val ("detailrls", pt, _) = (*case*) Detail_Step.go pt''''' ip (*of*);
|
walther@59723
|
152 |
|
walther@59734
|
153 |
show_pt pt; (* added ([3,1,1], Frm), ([3,1,1], Res) after ([3,1], Frm)*)
|
walther@59802
|
154 |
|
walther@59802
|
155 |
(*---------- final test ----------------------------------------------------------\\*)
|
walther@59734
|
156 |
if pr_ctree pr_short pt =
|
walther@59734
|
157 |
". ----- pblobj -----\n1" ^
|
walther@59734
|
158 |
". x + 1 = 2\n" ^
|
walther@59734
|
159 |
"2. x + 1 + -1 * 2 = 0\n" ^
|
walther@59734
|
160 |
"2.1. x + 1 + -1 * 2 = 0\n" ^
|
walther@59734
|
161 |
"2.2. 1 + x + -1 * 2 = 0\n" ^
|
walther@59734
|
162 |
"2.3. 1 + (x + -1 * 2) = 0\n" ^
|
walther@59734
|
163 |
"2.4. 1 + (x + -2) = 0\n" ^
|
walther@59734
|
164 |
"2.5. 1 + (-2 + x) = 0\n" ^
|
walther@59734
|
165 |
"2.6. -2 + (1 + x) = 0\n" ^
|
walther@59734
|
166 |
"3. ----- pblobj -----\n" ^
|
walther@59734
|
167 |
"3.1. -1 + x = 0\n" ^
|
walther@59734
|
168 |
"3.1.1. -1 + x = 0\n" ^
|
walther@59734
|
169 |
(*([3,1,1], Res), x = 0 + -1 * -1) only shown by show_pt*)
|
walther@59734
|
170 |
"3.2. x = 0 + -1 * -1\n" ^(* another difference to show_pt*)
|
walther@59734
|
171 |
"4. [x = 1]\n"
|
walther@59734
|
172 |
(*". [x = 1]" only shown by show_pt*)
|
walther@59734
|
173 |
then () else error "intermediate steps CHANGED"; |