neuper@41985
|
1 |
(* Title: 200-start-method.sml
|
neuper@41985
|
2 |
Author: Walther Neuper 1105
|
neuper@41985
|
3 |
(c) copyright due to lincense terms.
|
neuper@41985
|
4 |
*)
|
neuper@41985
|
5 |
|
neuper@42011
|
6 |
"----------- Minisubplb/200-start-method.sml ---------------------";
|
neuper@42011
|
7 |
"----------- Minisubplb/200-start-method.sml ---------------------";
|
neuper@42011
|
8 |
"----------- Minisubplb/200-start-method.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@41985
|
15 |
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
|
neuper@41985
|
16 |
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
|
neuper@41985
|
17 |
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
|
neuper@41985
|
18 |
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
|
neuper@41985
|
19 |
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
|
neuper@41986
|
20 |
val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = ("Apply_Method"*)
|
neuper@42009
|
21 |
val (pt'''', p'''') = (pt, p);
|
neuper@42009
|
22 |
"~~~~~ fun me, args:"; val (_,tac) = nxt;
|
neuper@42009
|
23 |
"~~~~~ fun locatetac, args:"; val ptp as (pt, p) = (pt, p);
|
neuper@42009
|
24 |
val (mI,m) = mk_tac'_ tac;
|
neuper@42009
|
25 |
val Appl m = applicable_in p pt m;
|
neuper@42009
|
26 |
member op = specsteps mI; (*false*)
|
neuper@42009
|
27 |
"~~~~~ fun loc_solve_, args:"; val (m, (pt, pos) ) = ((mI, m), ptp);
|
neuper@42009
|
28 |
"~~~~~ fun solve, args:"; val (("Apply_Method", Apply_Method' (mI,_,_,_)), pos as (p,_)) = (m, pos);
|
neuper@42009
|
29 |
val PblObj {meth, ctxt, ...} = get_obj I pt p;
|
neuper@42009
|
30 |
val thy' = get_obj g_domID pt p;
|
neuper@42009
|
31 |
val thy = assoc_thy thy';
|
neuper@42009
|
32 |
val {srls, pre, prls, ...} = get_met mI;
|
neuper@42009
|
33 |
val pres = check_preconds thy prls pre meth |> map snd;
|
neuper@42009
|
34 |
val ctxt = ctxt |> insert_assumptions pres;
|
neuper@42015
|
35 |
val (is'''' as ScrState (env'''',_,_,_,_,_), _, sc'''') = init_scrstate thy meth mI;
|
neuper@42015
|
36 |
"~~~~~ fun init_scrstate, args:"; val (thy, itms, metID) = (thy, meth, mI)
|
neuper@42015
|
37 |
val actuals = itms2args thy metID itms
|
neuper@42015
|
38 |
val scr as Script sc = (#scr o get_met) metID
|
neuper@42015
|
39 |
val formals = formal_args sc
|
neuper@42015
|
40 |
(*expects same sequence of (actual) args in itms and (formal) args in met*)
|
neuper@42015
|
41 |
fun relate_args env [] [] = env
|
neuper@42015
|
42 |
| relate_args env _ [] =
|
neuper@42015
|
43 |
error ("ERROR in creating the environment for '" ^
|
neuper@42015
|
44 |
id_of_scr sc ^ "' from \nthe items of the guard of " ^
|
neuper@42015
|
45 |
metID2str metID ^ ",\n" ^
|
neuper@42015
|
46 |
"formal arg(s), from the script, miss actual arg(s), from the guards env:\n" ^
|
neuper@42015
|
47 |
(string_of_int o length) formals ^
|
neuper@42015
|
48 |
" formals: " ^ terms2str formals ^ "\n" ^
|
neuper@42015
|
49 |
(string_of_int o length) actuals ^
|
neuper@42015
|
50 |
" actuals: " ^ terms2str actuals)
|
neuper@42015
|
51 |
| relate_args env [] actual_finds = env (*may drop Find!*)
|
neuper@42015
|
52 |
| relate_args env (a::aa) (f::ff) =
|
neuper@42015
|
53 |
if type_of a = type_of f
|
neuper@42015
|
54 |
then relate_args (env @ [(a, f)]) aa ff
|
neuper@42015
|
55 |
else
|
neuper@42015
|
56 |
error ("ERROR in creating the environment for '" ^
|
neuper@42015
|
57 |
id_of_scr sc ^ "' from \nthe items of the guard of " ^
|
neuper@42015
|
58 |
metID2str metID ^ ",\n" ^
|
neuper@42015
|
59 |
"different types of formal arg, from the script, " ^
|
neuper@42015
|
60 |
"and actual arg, from the guards env:'\n" ^
|
neuper@42015
|
61 |
"formal: '" ^ term2str a ^ "::" ^ (type2str o type_of) a ^ "'\n" ^
|
neuper@42015
|
62 |
"actual: '" ^ term2str f ^ "::" ^ (type2str o type_of) f ^ "'\n" ^
|
neuper@42015
|
63 |
"in\n" ^
|
neuper@42015
|
64 |
"formals: " ^ terms2str formals ^ "\n" ^
|
neuper@42015
|
65 |
"actuals: " ^ terms2str actuals)
|
neuper@42015
|
66 |
val env = relate_args [] formals actuals;
|
neuper@42015
|
67 |
val ctxt = ProofContext.init_global thy |> declare_constraints' actuals
|
neuper@42015
|
68 |
val {pre, prls, ...} = get_met metID;
|
neuper@42015
|
69 |
val pres = check_preconds thy prls pre itms |> map snd;
|
neuper@42015
|
70 |
val ctxt = ctxt |> insert_assumptions pres;
|
neuper@42015
|
71 |
|
neuper@42015
|
72 |
"~~~~~ continue solve";
|
neuper@42015
|
73 |
val ini = init_form thy sc'''' env'''';
|
neuper@42009
|
74 |
val p = lev_dn p;
|
neuper@42009
|
75 |
val SOME t = ini;
|
neuper@42009
|
76 |
val (pos,c,_,pt) =
|
neuper@42015
|
77 |
generate1 thy (Apply_Method' (mI, SOME t, is'''', ctxt))
|
neuper@42015
|
78 |
(is'''', ctxt) (lev_on p, Frm)(*implicit Take*) pt;
|
neuper@42015
|
79 |
("ok",([(Apply_Method mI, Apply_Method' (mI, SOME t, is'''', ctxt),
|
neuper@42015
|
80 |
((lev_on p, Frm), (is'''', ctxt)))], c, (pt,pos)):calcstate');
|
neuper@42015
|
81 |
|
neuper@42015
|
82 |
val ctxt = get_ctxt pt pos;
|
neuper@42015
|
83 |
val SOME known_x = parseNEW ctxt "x+z+z"; (*x has declare_constraints to real*)
|
neuper@42015
|
84 |
val SOME unknown = parseNEW ctxt "a+b+c";
|
neuper@42015
|
85 |
if type_of known_x = Type ("RealDef.real",[]) then ()
|
neuper@42015
|
86 |
else error "x+1=2 after start root-pbl wrong type-inference for known_x";
|
neuper@42015
|
87 |
if type_of unknown = TFree ("'a", ["Groups.plus"]) then ()
|
neuper@42015
|
88 |
else error "x+1=2 after start root-pbl wrong type-inference for unknown";
|
neuper@42009
|
89 |
|
neuper@42009
|
90 |
val (p,_,f,nxt,_,pt) = me nxt p'''' [] pt''''; (*nxt = ("Rewrite_Set"*)
|
neuper@41986
|
91 |
case nxt of ("Rewrite_Set", _) => ()
|
neuper@41986
|
92 |
| _ => error "minisubpbl: Method not started in root-problem";
|