wneuper@59546
|
1 |
(* Title: "Minisubpbl/300-init-subpbl.sml"
|
neuper@41985
|
2 |
Author: Walther Neuper 1105
|
neuper@41985
|
3 |
(c) copyright due to lincense terms.
|
neuper@41985
|
4 |
*)
|
neuper@41985
|
5 |
|
wneuper@59569
|
6 |
"----------- Minisubpbl/300-init-subpbl.sml ----------------------";
|
wneuper@59569
|
7 |
"----------- Minisubpbl/300-init-subpbl.sml ----------------------";
|
wneuper@59569
|
8 |
"----------- Minisubpbl/300-init-subpbl.sml ----------------------";
|
neuper@41985
|
9 |
val fmz = ["equality (x+1=(2::real))", "solveFor x","solutions L"];
|
neuper@41985
|
10 |
val (dI',pI',mI') =
|
neuper@41985
|
11 |
("Test", ["sqroot-test","univariate","equation","test"],
|
neuper@41985
|
12 |
["Test","squ-equ-test-subpbl1"]);
|
neuper@41985
|
13 |
val (p,_,f,nxt,_,pt) = CalcTreeTEST [(fmz, (dI',pI',mI'))];
|
neuper@41985
|
14 |
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
|
neuper@41986
|
15 |
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
|
neuper@41986
|
16 |
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
|
neuper@41986
|
17 |
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
|
neuper@41986
|
18 |
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
|
neuper@41986
|
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@59582
|
22 |
(*[1], Res*)val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = Rewrite_Set "Test_simplify" *)
|
wneuper@59582
|
23 |
(*[2], Res*)val (p''',_,f,nxt''',_,pt''') = me nxt p [] pt; (*nxt = ("Subproblem"*)
|
wneuper@59582
|
24 |
(*//--1 begin step into relevant call -----------^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^-----\\
|
wneuper@59582
|
25 |
1 relevant for updating ctxt *)
|
wneuper@59582
|
26 |
"~~~~~ fun me , args:"; val ((_, tac), p, _(*NEW remove*), pt) = (nxt''', p''', [], pt''');
|
wneuper@59582
|
27 |
|
wneuper@59582
|
28 |
"~~~~~ fun locatetac , args:"; val (tac, ptp as (pt, p)) = (tac, (pt''',p'''));
|
neuper@41986
|
29 |
val (mI,m) = mk_tac'_ tac;
|
neuper@41986
|
30 |
val Appl m = applicable_in p pt m;
|
neuper@42092
|
31 |
member op = specsteps mI; (*false*)
|
neuper@42092
|
32 |
(*val Updated (cs' as (_,_,(_,p'))) = loc_solve_ (mI,m) ptp;*)
|
neuper@42092
|
33 |
"~~~~~ fun loc_solve_, args:"; val (m, (pt,pos)) = ((mI,m), ptp);
|
neuper@42092
|
34 |
(*val (msg, cs') = solve m (pt, pos);*)
|
wneuper@59569
|
35 |
"~~~~~ fun solve , args:"; val ((mI,m), (pt, po as (p,p_))) = (m, (pt, pos));
|
neuper@42092
|
36 |
e_metID = get_obj g_metID pt (par_pblobj pt p) (*false*);
|
neuper@42092
|
37 |
val thy' = get_obj g_domID pt (par_pblobj pt p);
|
neuper@42092
|
38 |
val (srls, is, sc) = from_pblobj_or_detail' thy' (p,p_) pt;
|
wneuper@59569
|
39 |
|
wneuper@59569
|
40 |
locate_input_tactic sc (pt, po) (fst is) (snd is) m;
|
wneuper@59569
|
41 |
"~~~~~ fun locate_input_tactic , args:"; val (progr, cstate, istate, ctxt, tac)
|
wneuper@59569
|
42 |
= (sc, (pt, po), (fst is), (snd is), m);
|
wneuper@59569
|
43 |
val srls = get_simplifier cstate;
|
wneuper@59569
|
44 |
|
wneuper@59569
|
45 |
(*case*) execute_progr_2 srls m cstate (progr, e_rls(*!!!*)) (istate, ctxt)(*of*);
|
wneuper@59583
|
46 |
"~~~~~ 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
|
47 |
= (srls, m, cstate, (progr, e_rls(*!!!*)), (istate, ctxt));
|
wneuper@59569
|
48 |
(*if*)l = [] orelse ((*init.in solve..Apply_Method...*)
|
wneuper@59569
|
49 |
(last_elem o fst) p = 0 andalso snd p = Res) (*else*);
|
neuper@42092
|
50 |
(*val Assoc (iss as (is as (_,_,_,_,_,bb), ss as ((m',f',pt',p',c')::_))) =
|
neuper@42092
|
51 |
(astep_up (thy',srls,scr,d) ((E,l,a,v,S,b), [(m,EmptyMout,pt,p,[])]) );*)
|
walther@59657
|
52 |
"~~~~~ fun astep_up, args:"; val ((ys as (_,_,Prog sc,_)), ((E,l,a,v,S,b),ss))
|
walther@59657
|
53 |
= ((ctxt,srls,scr, (pt, p)), ((E,l,a,v,S,b), m));
|
wneuper@59569
|
54 |
(*if*) 1 < length l (*true*);
|
neuper@42092
|
55 |
val up = drop_last l;
|
wneuper@59582
|
56 |
|
wneuper@59582
|
57 |
ass_up ys ((E,up,a,v,S,b),ss) (go up sc);
|
walther@59603
|
58 |
"~~~~~ fun ass_up, args:"; val (ysa, iss, (Const ("Tactical.Try",_) $ e)) =
|
neuper@42092
|
59 |
(ys, ((E,up,a,v,S,b),ss), (go up sc));
|
wneuper@59582
|
60 |
astep_up ysa iss;
|
wneuper@59582
|
61 |
"~~~~~ and astep_up , args:"; val ((ys as (_,_,Rule.Prog sc,_)), ((E,l,a,v,S,b),ss)) = (ysa, iss);
|
wneuper@59582
|
62 |
(*if*) 1 < length l; (*then*)
|
wneuper@59582
|
63 |
val up = drop_last l;
|
neuper@42092
|
64 |
|
wneuper@59582
|
65 |
ass_up ys ((E,up,a,v,S,b),ss) (go up sc);
|
walther@59603
|
66 |
"~~~~~ fun ass_up , args:"; val (ysa, iss, (Const ("Tactical.Seq",_) $ _ $ _ )) = (ys, ((E,up,a,v,S,b),ss), (go up sc));
|
neuper@41986
|
67 |
|
wneuper@59582
|
68 |
astep_up ysa iss (*2*: comes from e2*);
|
wneuper@59582
|
69 |
"~~~~~ and astep_up , args:"; val ((ys as (_,_,Rule.Prog sc,_)), ((E,l,a,v,S,b),ss)) = (ysa, iss);
|
wneuper@59582
|
70 |
(*if*) 1 < length l; (*then*)
|
wneuper@59582
|
71 |
val up = drop_last l;
|
wneuper@59582
|
72 |
|
wneuper@59582
|
73 |
ass_up ys ((E,up,a,v,S,b),ss) (go up sc);
|
walther@59603
|
74 |
"~~~~~ fun ass_up , args:"; val (ysa, iss, (Const ("Tactical.Seq",_) $ _ $ _ $ _)) = (ys, ((E,up,a,v,S,b),ss), (go up sc));
|
wneuper@59582
|
75 |
|
wneuper@59582
|
76 |
astep_up ysa iss (*all has been done in (*2*) below*);
|
wneuper@59582
|
77 |
"~~~~~ and astep_up , args:"; val ((ys as (_,_,Rule.Prog sc,_)), ((E,l,a,v,S,b),ss)) = (ysa, iss);
|
wneuper@59582
|
78 |
(*if*) 1 < length l; (*then*)
|
wneuper@59582
|
79 |
val up = drop_last l;
|
wneuper@59582
|
80 |
|
wneuper@59582
|
81 |
ass_up ys ((E,up,a,v,S,b),ss) (go up sc);
|
wneuper@59582
|
82 |
"~~~~~ fun ass_up , args:"; val ((ys as (ctxt,s,Rule.Prog sc,d)), ((E,l,a,v,S,b),ss), (Const ("HOL.Let",_) $ _))
|
wneuper@59582
|
83 |
= (ys, ((E,up,a,v,S,b),ss), (go up sc));
|
wneuper@59582
|
84 |
val l = drop_last l; (*comes from e, goes to Abs*)
|
wneuper@59582
|
85 |
val (i, T, body) =
|
wneuper@59582
|
86 |
(case go l sc of
|
wneuper@59582
|
87 |
Const ("HOL.Let",_) $ _ $ (Abs (i, T, body)) => (i, T, body)
|
wneuper@59582
|
88 |
| t => error ("ass_up..HOL.Let $ _ with " ^ Rule.term2str t))
|
wneuper@59582
|
89 |
val i = TermC.mk_Free (i, T);
|
walther@59659
|
90 |
val E = Env.upd_env E (i, v);
|
wneuper@59582
|
91 |
|
wneuper@59582
|
92 |
(*case*) assy (ctxt,s,d,Aundef) ((E, l @ [Celem.R, Celem.D], a,v,S,b),ss) body (*of*);
|
walther@59657
|
93 |
"~~~~~ fun assy , args:"; val (ya, ((E,l,a,v,S,b),ss), (Const ("HOL.Let",_) $ e $ (Abs (id,T,body))))
|
wneuper@59582
|
94 |
= ((ctxt,s,d,Aundef), ((E, l @ [Celem.R, Celem.D], a,v,S,b),ss), body);
|
wneuper@59582
|
95 |
|
wneuper@59582
|
96 |
(*case*) assy ya ((E , l @ [Celem.L, Celem.R], a,v,S,b), ss) e (*of*);
|
walther@59657
|
97 |
(*======= end of scanning tacticals, a leaf =======*)
|
walther@59657
|
98 |
"~~~~~ fun assy , args:"; val ((ctxt,sr,(pt,p),ap), ((E,l,a,v,S,_), m), t)
|
wneuper@59582
|
99 |
= (ya, ((E , l @ [Celem.L, Celem.R], a,v,S,b), ss), e);
|
wneuper@59582
|
100 |
|
walther@59666
|
101 |
(*val (a', STac stac) = ( *case*) Lucin.handle_leaf "locate" "Isac_Knowledge" sr (E, (a, v)) t (*of*);
|
walther@59666
|
102 |
"~~~~~ fun handle_leaf , args:"; val (call, thy, srls, (E, (a, v)), t)
|
walther@59666
|
103 |
= ("locate", "Isac_Knowledge", sr, (E, (a, v)), t);
|
wneuper@59582
|
104 |
|
wneuper@59601
|
105 |
val (a', STac stac) = (*case*) Prog_Tac.subst_stacexpr E a v t (*of*);
|
wneuper@59601
|
106 |
"~~~~~ fun subst_stacexpr , args:"; val (E, _, _, (t as (Const ("Prog_Tac.SubProblem", _) $ _ $ _)))
|
wneuper@59582
|
107 |
= (E, a, v, t);
|
wneuper@59582
|
108 |
|
wneuper@59582
|
109 |
(NONE, STac (subst_atomic E t)); (*return value*)
|
wneuper@59601
|
110 |
"~~~~~ from subst_stacexpr to handle_leaf return val:"; val ((a', STac stac))
|
wneuper@59582
|
111 |
= ((NONE : term option, STac (subst_atomic E t)));
|
wneuper@59582
|
112 |
val stac' =
|
wneuper@59582
|
113 |
Rewrite.eval_listexpr_ (Celem.assoc_thy thy) srls (subst_atomic (upd_env_opt E (a,v)) stac);
|
wneuper@59582
|
114 |
|
wneuper@59601
|
115 |
(*return value*) (a', STac stac');
|
wneuper@59601
|
116 |
"~~~~~ from handle_leaf to assy return val:"; val (a', STac stac)
|
wneuper@59601
|
117 |
= ((a' : term option, STac stac'));
|
walther@59657
|
118 |
val Lucin.Ass (m, v', ctxt) = (*case*) Lucin.associate pt ctxt (m, stac) (*of*);
|
wneuper@59582
|
119 |
|
wneuper@59582
|
120 |
(*+*)if is_e_ctxt ctxt then error "ERROR: assy returns e_ctxt" else ();
|
wneuper@59582
|
121 |
(*\\--1 end step into relevant call ----------------------------------------------------------//*)
|
wneuper@59582
|
122 |
|
wneuper@59582
|
123 |
val (p,_,f,nxt,_,pt) = me nxt''' p''' [1] pt''';
|
wneuper@59582
|
124 |
|
wneuper@59582
|
125 |
if p = ([3], Pbl) andalso not (get_ctxt pt p |> is_e_ctxt)
|
wneuper@59582
|
126 |
then
|
wneuper@59582
|
127 |
case nxt of ("Model_Problem", _) => ()
|
wneuper@59582
|
128 |
| _ => error "minisubpbl: CalcTreeTEST has no nxt = Model_Problem"
|
wneuper@59582
|
129 |
else error "Minisubpbl/300-init-subpbl.sml changed";
|