test/Tools/isac/Minisubpbl/200-start-method.sml
author Walther Neuper <neuper@ist.tugraz.at>
Fri, 20 May 2011 09:12:40 +0200
branchdecompose-isar
changeset 42015 e9af6f1bc0fc
parent 42011 6a9ba30ab6bc
child 48761 4162c4f6f897
permissions -rw-r--r--
intermed. ctxt ..: init_scrstate without precond work

just uncommenting (*val ctxt = ctxt |> insert_assumptions pres;*)
causes errors
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";