wneuper@59569
|
1 |
(* Title: "Minisubpbl/250-Rewrite_Set-from-method.sml"
|
wneuper@59569
|
2 |
Author: Walther Neuper 1105
|
wneuper@59411
|
3 |
(c) copyright due to lincense terms.
|
wneuper@59411
|
4 |
*)
|
wneuper@59411
|
5 |
|
wneuper@59564
|
6 |
"----------- Minisubpbl/250-Rewrite_Set-from-method.sml ----------";
|
wneuper@59564
|
7 |
"----------- Minisubpbl/250-Rewrite_Set-from-method.sml ----------";
|
wneuper@59564
|
8 |
"----------- Minisubpbl/250-Rewrite_Set-from-method.sml ----------";
|
wneuper@59411
|
9 |
val fmz = ["equality (x+1=(2::real))", "solveFor x","solutions L"];
|
wneuper@59411
|
10 |
val (dI',pI',mI') =
|
wneuper@59411
|
11 |
("Test", ["sqroot-test","univariate","equation","test"],
|
wneuper@59411
|
12 |
["Test","squ-equ-test-subpbl1"]);
|
wneuper@59411
|
13 |
val (p,_,f,nxt,_,pt) = CalcTreeTEST [(fmz, (dI',pI',mI'))];
|
wneuper@59411
|
14 |
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
|
wneuper@59411
|
15 |
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
|
wneuper@59411
|
16 |
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
|
wneuper@59411
|
17 |
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
|
wneuper@59411
|
18 |
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
|
wneuper@59411
|
19 |
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
|
wneuper@59582
|
20 |
(*[], Met*)val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = Apply_Method ["Test", "squ-equ-test-subpbl1"]*);
|
wneuper@59582
|
21 |
(*[1], Frm*)val (p'''',_,f'''',nxt'''',_,pt'''') = me nxt p [] pt; (*nxt = Rewrite_Set "norm_equation"*)
|
wneuper@59411
|
22 |
|
wneuper@59582
|
23 |
(*//--1 begin step into relevant call -----------^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-----\\
|
wneuper@59582
|
24 |
1 relevant for original decomposition *)
|
wneuper@59582
|
25 |
(*[1], Res*)val (p'''_',_,f,nxt'''_',_,pt'''_') = me nxt'''' p'''' [] pt'''';(*nxt = Rewrite_Set "Test_simplify"*)
|
wneuper@59582
|
26 |
|
wneuper@59582
|
27 |
if p'''' = ([1], Frm) andalso f'''' = FormKF "x + 1 = 2" andalso fst nxt'''' = "Rewrite_Set"
|
wneuper@59411
|
28 |
then () else error "250-Rewrite_Set-from-method.sml: start of test CHANGED";
|
wneuper@59411
|
29 |
|
wneuper@59482
|
30 |
(* val (p,_,f,nxt,_,pt) = ERROR WAS: nxt = ("Empty_Tac",..*) me nxt p [] pt;
|
wneuper@59482
|
31 |
(* ERROR WAS: assy: call by ([3], Pbl) *)
|
wneuper@59582
|
32 |
"~~~~~ fun me , args:"; val ((_, tac), p, _(*NEW remove*), pt) = (nxt'''', p'''', [], pt'''');
|
wneuper@59411
|
33 |
|
wneuper@59482
|
34 |
(*ERROR WAS: assy: call by ([3], Pbl)*)
|
wneuper@59482
|
35 |
val ("ok", (_, _, ptp''''')) = (*case*) locatetac tac (pt,p) (*of*);
|
wneuper@59482
|
36 |
"~~~~~ fun locatetac, args:"; val (tac, (ptp as (pt, p))) = (tac, (pt,p));
|
wneuper@59482
|
37 |
val (mI, m) = Solve.mk_tac'_ tac;
|
wneuper@59482
|
38 |
val Chead.Appl m = (*case*) Applicable.applicable_in p pt m (*of*);
|
wneuper@59482
|
39 |
member op = Solve.specsteps mI (* = false*);
|
wneuper@59482
|
40 |
|
wneuper@59482
|
41 |
loc_solve_ (mI,m) ptp ; (* assy: call by ([3], Pbl)*)
|
wneuper@59482
|
42 |
"~~~~~ fun loc_solve_, args:"; val (m, (pt, pos)) = ((mI,m), ptp);
|
wneuper@59482
|
43 |
Solve.solve m (pt, pos); (* assy: call by ([3], Pbl)*)
|
wneuper@59482
|
44 |
(* step somewhere within a calculation *)
|
wneuper@59482
|
45 |
"~~~~~ fun solve, args:"; val ((_, m), (pt, po as (p, p_))) = (m, (pt, pos));
|
wneuper@59482
|
46 |
Celem.e_metID = get_obj g_metID pt (par_pblobj pt p) (* = false*);
|
wneuper@59482
|
47 |
val thy' = get_obj g_domID pt (par_pblobj pt p);
|
wneuper@59482
|
48 |
val (srls, is, sc) = Lucin.from_pblobj_or_detail' thy' (p,p_) pt;
|
wneuper@59482
|
49 |
|
wneuper@59569
|
50 |
locate_input_tactic sc (pt, po) (fst is) (snd is) m; (* assy: call by ([3], Pbl)*)
|
wneuper@59569
|
51 |
"~~~~~ fun locate_input_tactic , args:"; val (progr, cstate, istate, ctxt, tac)
|
wneuper@59569
|
52 |
= (sc, (pt, po), (fst is), (snd is), m);
|
wneuper@59569
|
53 |
val srls = get_simplifier cstate;
|
wneuper@59569
|
54 |
|
wneuper@59569
|
55 |
(*case*) execute_progr_2 srls m cstate (progr, e_rls(*!!!*)) (istate, ctxt)(*of*);
|
wneuper@59583
|
56 |
"~~~~~ fun execute_progr_2 , args:"; val (((*thy',*) srls), m, (pt, p), (scr as Rule.Prog sc, d), (Istate.Pstate (E,l,a,v,S,b), ctxt))
|
wneuper@59569
|
57 |
= (srls, m, cstate, (progr, e_rls(*!!!*)), (istate, ctxt));
|
wneuper@59569
|
58 |
(*if*)l = [] orelse ((last_elem o fst) p = 0 andalso snd p = Res) (*then*);
|
wneuper@59482
|
59 |
|
wneuper@59482
|
60 |
(*val Assoc (scrstate, steps) = in isabisacREP*)
|
wneuper@59482
|
61 |
(*ERROR assy: call by ([3], Pbl) in isabisac*)
|
walther@59618
|
62 |
assy (ctxt,srls,d,Aundef) ((E,[Celem.R],a,v,S,b), [(m,Generate.EmptyMout,pt,p,[])]) (Program.body_of sc);
|
wneuper@59482
|
63 |
|
wneuper@59482
|
64 |
(* checked all arguments of assy for equality: isabisac -- isabisacREP *)
|
wneuper@59578
|
65 |
"~~~~~ fun assy [1], args:"; val (ya, ((E,l,a,v,S,b),ss:step list), (Const ("HOL.Let",_) $ e $ (Abs (id,T,body)))) =
|
walther@59618
|
66 |
(((*thy',*)ctxt,srls,d,Aundef), ((E,[Celem.R],a,v,S,b), [(m,Generate.EmptyMout,pt,p,[])]), (Program.body_of sc));
|
wneuper@59482
|
67 |
|
wneuper@59482
|
68 |
(*val Assoc (scrstate, steps) = in isabisacREP*)
|
wneuper@59482
|
69 |
(*val NasApp ((E',l,a,v,S,_),ss) = in isabisac*) assy ya ((E , l @ [Celem.L, Celem.R], a,v,S,b), ss) e;
|
walther@59603
|
70 |
"~~~~~ fun assy, args:"; val (ya, ((E,l,_,v,S,b),ss:step list), (Const ("Tactical.Seq"(*2[1]*),_) $e1 $ e2 $ a)) =
|
wneuper@59482
|
71 |
(ya, ((E , l @ [Celem.L, Celem.R], a,v,S,b), ss), e);
|
wneuper@59482
|
72 |
|
wneuper@59482
|
73 |
(*val Assoc (scrstate, steps) = in isabisacREP*)
|
wneuper@59482
|
74 |
(*val NasApp ((E,_,_,v,_,_),ss) = in isabisac*)
|
wneuper@59482
|
75 |
(*case*) assy ya ((E, l @ [Celem.L, Celem.L, Celem.R], SOME a,v,S,b),ss) e1 (*of*);
|
walther@59603
|
76 |
"~~~~~ fun assy, args:"; val (ya, ((E,l,a,v,S,b),ss), (Const ("Tactical.Try"(*1*),_) $ e)) =
|
wneuper@59482
|
77 |
( ya, ((E, l @ [Celem.L, Celem.L, Celem.R], SOME a,v,S,b),ss), e1);
|
wneuper@59482
|
78 |
|
walther@59635
|
79 |
term2str e1 = "Try (Rewrite_Set ''norm_equation'')" (*in isabisac*);
|
walther@59635
|
80 |
term2str e1 = "Try (Rewrite_Set norm_equation)" (*in isabisacREP*);
|
wneuper@59482
|
81 |
termopt2str a = "(SOME e_e)" (*in isabisac + isabisacREP*);
|
wneuper@59482
|
82 |
|
wneuper@59482
|
83 |
(*val Assoc (scrstate, steps) = in isabisacREP*)
|
wneuper@59482
|
84 |
(*val NasApp ((E,_,_,v,_,_),ss) = in isabisac*)
|
wneuper@59482
|
85 |
assy ya ((E, l @ [Celem.R], a,v,S,b),ss) e ;
|
wneuper@59482
|
86 |
(*here is not a tactical like TRY etc, but a tactic creating a step in calculation*)
|
wneuper@59578
|
87 |
"~~~~~ fun assy, args:"; val ((ctxt,sr,d,ap), ((E,l,a,v,S,_), (m,_,pt,(p,p_),c)::ss), t) =
|
wneuper@59482
|
88 |
(ya, ((E, l @ [Celem.R], a,v,S,b),ss), e);
|
wneuper@59601
|
89 |
val (a', STac stac) = (*case*) handle_leaf "locate" thy' sr E a v t (*of*)
|
wneuper@59482
|
90 |
val p' =
|
wneuper@59482
|
91 |
case p_ of Frm => p
|
wneuper@59482
|
92 |
| Res => lev_on p
|
wneuper@59482
|
93 |
| _ => error ("assy: call by " ^ pos'2str (p,p_));
|
wneuper@59482
|
94 |
|
wneuper@59482
|
95 |
(*val Ass (m,v') = in isabisacREP*)
|
wneuper@59482
|
96 |
(*val NotAss = in isabisac*)
|
wneuper@59584
|
97 |
(*case*) associate pt ctxt (m, stac) (*of*);
|
wneuper@59578
|
98 |
"~~~~~ fun associate, args:"; val (_, ctxt, (m as Tactic.Rewrite_Set' (_, _, rls, f, (f', _))),
|
walther@59635
|
99 |
(Const ("Prog_Tac.Rewrite'_Set", _) $ rls_ $ f_)) = (pt, d, m, stac);
|
wneuper@59482
|
100 |
|
walther@59603
|
101 |
if Rule.id_rls rls = HOLogic.dest_string rls_ then () else error "Prog_Tac.associate changed";
|
wneuper@59482
|
102 |
|
wneuper@59482
|
103 |
"~~~~~ continue me[1] after locatetac";
|
wneuper@59482
|
104 |
val (pt, p) = ptp''''';
|
wneuper@59411
|
105 |
(* isabisac17: val ("helpless", _) = (*case*) step p ((pt, Ctree.e_pos'),[]) (*of*)*)
|
wneuper@59411
|
106 |
"~~~~~ fun step, args:"; val ((ip as (_, p_)), (ptp as (pt,p), tacis)) = (p, ((pt, e_pos'),[]));
|
wneuper@59411
|
107 |
val pIopt = get_pblID (pt,ip);
|
wneuper@59411
|
108 |
(*if*) ip = ([], Ctree.Res) = false;
|
wneuper@59411
|
109 |
val _ = (*case*) tacis (*of*);
|
wneuper@59411
|
110 |
(*if*) ip = p = false;
|
wneuper@59411
|
111 |
(*if*) member op = [Pbl, Met] p_ = false;
|
wneuper@59411
|
112 |
|
wneuper@59562
|
113 |
"~~~~~ fun do_solve_step, args:"; val (ptp as (pt, pos as (p, p_))) = (pt, ip);
|
wneuper@59411
|
114 |
e_metID = get_obj g_metID pt (par_pblobj pt p) = false;
|
wneuper@59411
|
115 |
val thy' = get_obj g_domID pt (par_pblobj pt p);
|
wneuper@59411
|
116 |
val (srls, is, sc) = Lucin.from_pblobj_or_detail' thy' (p,p_) pt;
|
wneuper@59411
|
117 |
|
wneuper@59559
|
118 |
(* isabisac17: val (tac_, is, (t, _)) = determine_next_tactic (thy', srls) (pt, pos) sc is;
|
wneuper@59411
|
119 |
go: no [L,L,R] *)
|
wneuper@59559
|
120 |
"~~~~~ fun determine_next_tactic, args:"; val (thy, (ptp as (pt, (p, _))), (sc as Prog (_ $ body)),
|
wneuper@59583
|
121 |
(Pstate (E,l,a,v,s,_), ctxt) ) = ((thy', srls), (pt, pos), sc, is);
|
wneuper@59411
|
122 |
(*if*) l = [] = false;
|
wneuper@59411
|
123 |
|
wneuper@59411
|
124 |
(* isabisac17: nstep_up thy ptp sc E l Skip_ a v ERROR go: no [L,L,R] *)
|
wneuper@59411
|
125 |
(* isabisac15: val Appy (tac_, scrstate) = nstep_up thy ptp sc E l Skip_ a v *)
|
wneuper@59411
|
126 |
"~~~~~ fun nstep_up, args:"; val (thy, ptp, (Prog sc), E, l, ay, a, v) =
|
wneuper@59411
|
127 |
(thy, ptp, sc, E, l, Skip_, a, v);
|
wneuper@59411
|
128 |
1 < length l = true;
|
wneuper@59411
|
129 |
val up = drop_last l;
|
wneuper@59411
|
130 |
|
wneuper@59411
|
131 |
if up = [R, L, R, L, L, R] then () else error "250-Rewrite_Set: nstep_up CHANGED";
|
wneuper@59411
|
132 |
(*isabisac17: nxt_up thy ptp (Celem.Prog sc) E up ay (go up sc) a v ERROR go: no [L,L,R]*)
|
wneuper@59411
|
133 |
(*isabisac17: (go up sc) ERROR go: no [L,L,R]*)
|
wneuper@59411
|
134 |
(*isabisac15:*)
|
walther@59635
|
135 |
val ttt as Const ("Tactical.Try", _) $ (Const ("Prog_Tac.Rewrite'_Set", _) $ rls) = (go up sc)
|
walther@59603
|
136 |
val (Const ("Tactical.Try"(*2*), _) $ _) = ttt;
|
walther@59635
|
137 |
if term2str ttt = "Try (Rewrite_Set ''norm_equation'')"
|
wneuper@59411
|
138 |
then () else error "250-Rewrite_Set: (go up sc) CHANGED";
|
wneuper@59411
|
139 |
|
walther@59603
|
140 |
"~~~~~ fun nxt_up, args:"; val (thy, ptp, scr, E, l, _, (Const ("Tactical.Try"(*2*), _) $ _), a, v) =
|
wneuper@59411
|
141 |
(thy, ptp, (Prog sc), E, up, ay, (go up sc), a, v );
|
wneuper@59582
|
142 |
|
wneuper@59582
|
143 |
(*\\--1 end step into relevant call ----------------------------------------------------------//*)
|
wneuper@59582
|
144 |
|
wneuper@59582
|
145 |
(* nxt'''_' = Rewrite_Set "Test_simplify"
|
wneuper@59582
|
146 |
//--2 begin step into relevant call -----------^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-----\\
|
wneuper@59582
|
147 |
2 relevant for exception TERM raised (line 297 of "term.ML"): dest_Free -1 + x = 0 *)
|
wneuper@59582
|
148 |
(**)val (p,_,f,nxt,_,pt) = me nxt'''_' p'''_' [] pt'''_';(**)
|
wneuper@59582
|
149 |
"~~~~~ fun me , args:"; val ((_, tac), p, _(*NEW remove*), pt) = (nxt'''_', p'''_', [], pt'''_');
|
wneuper@59582
|
150 |
val (pt, p) =
|
wneuper@59582
|
151 |
(*locatetac is here for testing by me; step would suffice in me*)
|
wneuper@59582
|
152 |
case locatetac tac (pt, p) of
|
wneuper@59582
|
153 |
("ok", (_, _, ptp)) => ptp
|
wneuper@59582
|
154 |
| ("unsafe-ok", (_, _, ptp)) => ptp
|
wneuper@59582
|
155 |
| ("not-applicable",_) => (pt, p)
|
wneuper@59582
|
156 |
| ("end-of-calculation", (_, _, ptp)) => ptp
|
wneuper@59582
|
157 |
| ("failure", _) => error "sys-error"
|
wneuper@59582
|
158 |
| _ => error "me: uncovered case"
|
wneuper@59582
|
159 |
|
wneuper@59582
|
160 |
(*case*) step p ((pt, Ctree.e_pos'), []) (*of*);
|
wneuper@59582
|
161 |
"~~~~~ fun step , args:"; val ((ip as (_, p_)), (ptp as (pt,p), tacis))
|
wneuper@59582
|
162 |
= (p, ((pt, Ctree.e_pos'), []));
|
wneuper@59582
|
163 |
val pIopt = get_pblID (pt,ip);
|
wneuper@59582
|
164 |
(*if*) ip = ([], Ctree.Res) (*else*);
|
wneuper@59582
|
165 |
val _ = (*case*) tacis (*of*);
|
wneuper@59582
|
166 |
val SOME _ = (*case*) pIopt (*of*);
|
wneuper@59582
|
167 |
(*if*) member op = [Ctree.Pbl, Ctree.Met] p_
|
wneuper@59582
|
168 |
andalso is_none (Ctree.get_obj Ctree.g_env pt (fst p)) (*else*);
|
wneuper@59582
|
169 |
|
wneuper@59582
|
170 |
do_solve_step (pt, ip);
|
wneuper@59582
|
171 |
"~~~~~ and do_solve_step , args:"; val (ptp as (pt, pos as (p, p_))) = (pt, ip);
|
wneuper@59582
|
172 |
(*if*) Celem.e_metID = get_obj g_metID pt (par_pblobj pt p) (*else*);
|
wneuper@59582
|
173 |
val thy' = get_obj g_domID pt (par_pblobj pt p);
|
wneuper@59582
|
174 |
val (srls, is, sc) = Lucin.from_pblobj_or_detail' thy' (p,p_) pt;
|
wneuper@59582
|
175 |
|
wneuper@59582
|
176 |
(*val (tac_, is, (t, _)) =*) determine_next_tactic (thy', srls) (pt, pos) sc is;
|
wneuper@59583
|
177 |
"~~~~~ fun determine_next_tactic , args:"; val (thy, (ptp as (pt, (p, _))), sc, (Istate.Pstate (E,l,a,v,s,_), ctxt))
|
wneuper@59582
|
178 |
= ((thy', srls), (pt, pos), sc, is);
|
wneuper@59582
|
179 |
|
wneuper@59583
|
180 |
(*case*) execute_progr_1 thy ptp sc (Istate.Pstate (E,l,a,v,s,false)) (*of*);
|
wneuper@59583
|
181 |
"~~~~~ fun execute_progr_1 , args:"; val (thy, ptp, (sc as Rule.Prog prog), (Istate.Pstate (E, l, a, v, _, _)))
|
wneuper@59583
|
182 |
= (thy, ptp, sc, (Istate.Pstate (E,l,a,v,s,false)));
|
wneuper@59582
|
183 |
(*if*) l = [] (*else*);
|
wneuper@59582
|
184 |
|
wneuper@59582
|
185 |
nstep_up thy ptp sc E l Skip_ a v;
|
wneuper@59582
|
186 |
"~~~~~ and nstep_up , args:"; val (thy, ptp, (Rule.Prog sc), E, l, ay, a, v)
|
wneuper@59582
|
187 |
= (thy, ptp, sc, E, l, Skip_, a, v);
|
wneuper@59582
|
188 |
(*if*) 1 < length l (*then*);
|
wneuper@59582
|
189 |
val up = drop_last l;
|
wneuper@59582
|
190 |
|
wneuper@59582
|
191 |
nxt_up thy ptp (Rule.Prog sc) E up ay (go up sc) a v;
|
walther@59603
|
192 |
"~~~~~ fun nxt_up , args:"; val (thy, ptp, scr, E, l, _, (Const ("Tactical.Try"(*1*),_) $ _ ), a, v)
|
wneuper@59582
|
193 |
= (thy, ptp, (Rule.Prog sc), E, up, ay, (go up sc), a, v);
|
wneuper@59582
|
194 |
|
wneuper@59582
|
195 |
nstep_up thy ptp scr E l Skip_ a v;
|
wneuper@59582
|
196 |
"~~~~~ and nstep_up , args:"; val (thy, ptp, (Rule.Prog sc), E, l, ay, a, v)
|
wneuper@59582
|
197 |
= (thy, ptp, scr, E, l, Skip_, a, v);
|
wneuper@59582
|
198 |
(*if*) 1 < length l (*then*);
|
wneuper@59582
|
199 |
val up = drop_last l;
|
wneuper@59582
|
200 |
|
wneuper@59582
|
201 |
nxt_up thy ptp (Rule.Prog sc) E up ay (go up sc) a v;
|
walther@59603
|
202 |
"~~~~~ fun nxt_up , args:"; val (thy, ptp, scr, E, l, ay, (Const ("Tactical.Seq"(*2*), _) $ _ $ _), a, v)
|
wneuper@59582
|
203 |
= (thy, ptp, (Rule.Prog sc), E, up, ay, (go up sc), a, v);
|
wneuper@59582
|
204 |
|
wneuper@59582
|
205 |
nstep_up thy ptp scr E l ay a v;
|
wneuper@59582
|
206 |
"~~~~~ and nstep_up , args:"; val (thy, ptp, (Rule.Prog sc), E, l, ay, a, v)
|
wneuper@59582
|
207 |
= (thy, ptp, scr, E, l, ay, a, v);
|
wneuper@59582
|
208 |
(*if*) 1 < length l (*then*);
|
wneuper@59582
|
209 |
val up = drop_last l;
|
wneuper@59582
|
210 |
|
wneuper@59582
|
211 |
nxt_up thy ptp (Rule.Prog sc) E up ay (go up sc) a v;
|
walther@59603
|
212 |
"~~~~~ fun nxt_up , args:"; val (thy, ptp, scr, E, l, ay, (Const ("Tactical.Seq"(*1*), _) $ _ $ _ $ _), a, v)
|
wneuper@59582
|
213 |
= (thy, ptp, (Rule.Prog sc), E, up, ay, (go up sc), a, v);
|
wneuper@59582
|
214 |
|
wneuper@59582
|
215 |
nstep_up thy ptp scr E l ay a v;
|
wneuper@59582
|
216 |
"~~~~~ and nstep_up , args:"; val (thy, ptp, (Rule.Prog sc), E, l, ay, a, v)
|
wneuper@59582
|
217 |
= (thy, ptp, scr, E, l, ay, a, v);
|
wneuper@59582
|
218 |
(*if*) 1 < length l (*then*);
|
wneuper@59582
|
219 |
val up = drop_last l;
|
wneuper@59582
|
220 |
|
wneuper@59582
|
221 |
nxt_up thy ptp (Rule.Prog sc) E up ay (go up sc) a v;
|
wneuper@59582
|
222 |
"~~~~~ fun nxt_up , args:"; val (thy, ptp, scr, E, l, ay, (Const ("HOL.Let", _) $ _), a, v)
|
wneuper@59582
|
223 |
= (thy, ptp, (Rule.Prog sc), E, up, ay, (go up sc), a, v);
|
wneuper@59582
|
224 |
(*if*) ay = Napp_ (*else*);
|
wneuper@59582
|
225 |
val up = drop_last l
|
wneuper@59582
|
226 |
val (i, T, body) =
|
wneuper@59582
|
227 |
(case go up sc of
|
wneuper@59582
|
228 |
Const ("HOL.Let",_) $ _ $ (Abs aa) => aa
|
wneuper@59582
|
229 |
| t => error ("nxt_up..HOL.Let $ _ with " ^ Rule.term2str t))
|
wneuper@59582
|
230 |
val i = TermC.mk_Free (i, T)
|
wneuper@59601
|
231 |
val E = upd_env E (i, v);
|
wneuper@59582
|
232 |
|
wneuper@59582
|
233 |
(*case*) appy thy ptp E (up @ [Celem.R, Celem.D]) body a v (*of*);
|
wneuper@59582
|
234 |
"~~~~~ fun appy , args:"; val (thy, ptp, E, l, (Const ("HOL.Let",_) $ e $ (Abs (i,T,b))), a, v)
|
wneuper@59582
|
235 |
= (thy, ptp, E, (up @ [Celem.R, Celem.D]), body, a, v);
|
wneuper@59582
|
236 |
|
wneuper@59582
|
237 |
(*case*) appy thy ptp E (l @ [Celem.L, Celem.R]) e a v (*of*);
|
wneuper@59582
|
238 |
"~~~~~ fun appy , args:"; val (((th,sr)), (pt, p), E, l, t, a, v)
|
wneuper@59582
|
239 |
= (thy, ptp, E, (l @ [Celem.L, Celem.R]), e, a, v);
|
wneuper@59601
|
240 |
val (a', STac stac) = (*case*) Lucin.handle_leaf "next " th sr E a v t (*of*);
|
wneuper@59582
|
241 |
|
wneuper@59582
|
242 |
(*val (m,m') = Lucin.*) stac2tac_ pt (Celem.assoc_thy th) stac;
|
wneuper@59601
|
243 |
"~~~~~ fun stac2tac_ , args:"; val (pt, _, (stac as Const ("Prog_Tac.SubProblem", _) $ spec' $ ags'))
|
wneuper@59582
|
244 |
= (pt, (Celem.assoc_thy th), stac);
|
walther@59618
|
245 |
val (dI, pI, mI) = Prog_Tac.dest_spec spec'
|
wneuper@59582
|
246 |
val thy = Stool.common_subthy (Celem.assoc_thy dI, rootthy pt);
|
wneuper@59582
|
247 |
val ags = TermC.isalist2list ags';
|
wneuper@59582
|
248 |
(*if*) mI = ["no_met"] (*else*);
|
wneuper@59582
|
249 |
val (pI, pors, mI) =
|
wneuper@59582
|
250 |
(pI, (Chead.match_ags thy ((#ppc o Specify.get_pbt) pI) ags)
|
wneuper@59582
|
251 |
handle ERROR "actual args do not match formal args"
|
wneuper@59582
|
252 |
=> (Chead.match_ags_msg pI stac ags(*raise exn*); []), mI)
|
wneuper@59582
|
253 |
val (fmz_, vals) = Chead.oris2fmz_vals pors;
|
wneuper@59582
|
254 |
val {cas,ppc,thy,...} = Specify.get_pbt pI
|
wneuper@59582
|
255 |
val dI = Rule.theory2theory' thy (*.take dI from _refined_ pbl.*)
|
wneuper@59582
|
256 |
val dI = Rule.theory2theory' (Stool.common_subthy (Celem.assoc_thy dI, rootthy pt));
|
wneuper@59582
|
257 |
val ctxt = ContextC.initialise dI (map TermC.vars vals |> flat |> distinct);
|
wneuper@59582
|
258 |
(*\\--2 end step into relevant call ----------------------------------------------------------//*)
|
wneuper@59582
|
259 |
|
wneuper@59582
|
260 |
if p = ([2], Res) andalso f2str f = "-1 + x = 0" then
|
wneuper@59582
|
261 |
case nxt of
|
wneuper@59582
|
262 |
("Subproblem", Subproblem ("Test", ["LINEAR", "univariate", "equation", "test"])) => ()
|
wneuper@59582
|
263 |
| _ => error "Minisubpbl/250-Rewrite_Set-from-method changed 1"
|
wneuper@59582
|
264 |
else error "Minisubpbl/250-Rewrite_Set-from-method changed 2";
|
wneuper@59582
|
265 |
|
wneuper@59582
|
266 |
(*[3], Pbl*)val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = Model_Problem*) |