test/Tools/isac/Interpret/mathengine.sml
author Walther Neuper <wneuper@ist.tugraz.at>
Thu, 22 Dec 2016 11:36:20 +0100
changeset 59279 255c853ea2f0
parent 59262 0ddb3f300cce
child 59357 17bc5920c2fb
permissions -rw-r--r--
renamed Ctree.ptree --> Ctree.ctree
neuper@42279
     1
(* Title:  tests for Interpret/mathengine.sml
neuper@42279
     2
   Author: Walther Neuper 2000, 2006
neuper@37906
     3
   (c) due to copyright terms
neuper@55460
     4
neuper@55460
     5
theory Test_Some imports Build_Thydata begin 
neuper@55460
     6
ML {* KEStore_Elems.set_ref_thy @{theory};
neuper@55460
     7
  fun autoCalculate' cI auto = autoCalculate cI auto |> Future.join *}
neuper@55460
     8
ML_file "~~/test/Tools/isac/Interpret/mathengine.sml"
neuper@37906
     9
*)
neuper@38065
    10
"--------------------------------------------------------";
neuper@38065
    11
"table of contents --------------------------------------";
neuper@38065
    12
"--------------------------------------------------------";
neuper@41940
    13
"----------- change to parse ctxt -----------------------";
neuper@38065
    14
"----------- debugging setContext..pbl_ -----------------";
neuper@38065
    15
"----------- tryrefine ----------------------------------";
neuper@55412
    16
"---------- mini-subpbl isac-java 3992e3bd1948: initial <NEXT> ---------------";
neuper@41982
    17
"----------- fun step: Apply_Method without init_form ---";
neuper@38065
    18
"----------- fun step -----------------------------------";
neuper@38065
    19
"----------- fun autocalc -------------------------------";
wneuper@59248
    20
"----------- fun autoCalculate --------------------------";
neuper@42067
    21
"----------- fun autoCalculate..CompleteCalc ------------";
t@42225
    22
"----------- search for Or_to_List ----------------------";
neuper@42279
    23
"----------- check thy in CalcTreeTEST ------------------";
neuper@55482
    24
"----------- identified error in fun getTactic, string_of_thmI ---------------";
neuper@55486
    25
"----------- improved fun getTactic for interSteps and numeral calculations --";
neuper@38065
    26
"--------------------------------------------------------";
neuper@38065
    27
"--------------------------------------------------------";
neuper@38065
    28
"--------------------------------------------------------";
neuper@37906
    29
neuper@41940
    30
"----------- change to parse ctxt -----------------------";
neuper@41940
    31
"----------- change to parse ctxt -----------------------";
neuper@41940
    32
"----------- change to parse ctxt -----------------------";
neuper@41940
    33
"===== start calculation: from problem description (fmz) to origin";
neuper@41940
    34
val fmz = ["realTestGiven (((1+2)*4/3)^^^2)","realTestFind s"];
neuper@41940
    35
val (thyID, pblID, metID) =
neuper@41940
    36
  ("Test", ["calculate", "test"], ["Test", "test_calculate"]);
wneuper@59116
    37
(*======= Isabelle2013-2 --> Isabelle2014: unclear, why this test ever run ========================
neuper@41940
    38
val (p,_,_,nxt,_,pt) = CalcTreeTEST [(fmz, (thyID, pblID, metID))];
neuper@41940
    39
"----- ";
neuper@41940
    40
(* call sequence: CalcTreeTEST 
neuper@41940
    41
                > nxt_specify_init_calc 
neuper@41940
    42
                > prep_ori
neuper@41940
    43
*)
neuper@41940
    44
val (thy, pbt) = (Thy_Info.get_theory thyID, (#ppc o get_pbt) pblID);
neuper@41940
    45
"----- in  prep_ori";
neuper@48761
    46
val ctxt = Proof_Context.init_global thy;
neuper@41940
    47
bonzai@41952
    48
val ctopts = map (parseNEW ctxt) fmz;
bonzai@41952
    49
val dts = map (split_dts o the) ctopts;
neuper@41940
    50
(*split_dts:
neuper@41940
    51
(term * term list) list
neuper@41940
    52
        formulas: e.g. ((1+2)*4/3)^^^2
neuper@41940
    53
 description: e.g. realTestGiven
neuper@41940
    54
*)
neuper@41940
    55
 prep_ori;
neuper@41940
    56
(* FROM
neuper@41940
    57
val it = fn:
neuper@41940
    58
   string list -> theory -> (string * (term * 'a)) list -> ori list
neuper@41940
    59
TO
neuper@41940
    60
val it = fn:
neuper@41940
    61
   string list -> theory -> (string * (term * 'a)) list -> (ori list * ctxt)
neuper@41940
    62
AND
neuper@41940
    63
FROM val oris = prep_ori...
neuper@41940
    64
TO   val (oris, _) = prep_ori...
neuper@41940
    65
*)
wneuper@59279
    66
"----- insert ctxt in ctree";
neuper@41940
    67
(* datatype ppobj
neuper@41940
    68
FROM loc   : istate option * istate option,
neuper@41940
    69
TO   loc   : (istate * ctxt) option * (istate * ctxt) option,
neuper@41940
    70
e.g.
neuper@41940
    71
FROM val pt = Nd (PblObj
neuper@41940
    72
       {.., loc = (SOME (ScrState ([], [], NONE, Const ("empty", "'a"), Sundef, false)),
neuper@41940
    73
          NONE),
neuper@41940
    74
TO   val pt = Nd (PblObj
neuper@41940
    75
       {.., loc = 
neuper@41940
    76
        ((SOME (ScrState ([], [], NONE, Const ("empty", "'a"), Sundef, false)), ctxt),
neuper@41940
    77
          NONE),
neuper@41940
    78
*)
neuper@41940
    79
neuper@41940
    80
"===== interactive specification: from origin to specification (probl)";
neuper@41940
    81
val (p,_,_,nxt,_,pt) = me nxt p [1] pt; 
neuper@41940
    82
  (*nxt =("Add_Given", Model_Problem)*)
neuper@41940
    83
val (p,_,_,nxt,_,pt) = me nxt p [1] pt;
neuper@41940
    84
  (*nxt = ("Add_Find",Add_Find "realTestFind s") : string * tac*)
neuper@41940
    85
"----- ";
neuper@41940
    86
(* call sequence: me Model_Problem 
neuper@41940
    87
                > me ("Add_Given", Add_Given "realTestGiven (((1 + 2) * 4 / 3) ^^^ 2)")
neuper@41940
    88
                > locatetac tac
neuper@41940
    89
                > loc_specify_
neuper@41940
    90
                > specify          GET ctxt (stored in ctree)
neuper@41940
    91
                > specify_additem
neuper@41940
    92
                > appl_add
neuper@41940
    93
neuper@41940
    94
*)
neuper@41940
    95
"----- in appl_add";
neuper@41940
    96
(* FROM appl_add thy
neuper@41940
    97
   TO   appl_add ctxt
neuper@41940
    98
   FROM parse thy str
neuper@41940
    99
   TO   parseNEW ctxt str
neuper@41940
   100
*)
neuper@41940
   101
val (p,_,_,nxt,_,pt) = me nxt p [1] pt; 
neuper@41940
   102
  (*nxt = ("Specify_Theory",Specify_Theory "Test") : string * tac*)
neuper@41940
   103
val (p,_,_,nxt,_,pt) = me nxt p [1] pt; 
neuper@41940
   104
  (*nxt = ("Specify_Problem",Specify_Problem ["calculate","test"])*)
neuper@41940
   105
neuper@41940
   106
"===== end specify: from specification (probl) to guard (method)";
neuper@41940
   107
val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
neuper@41940
   108
  (*nxt = ("Specify_Method",Specify_Method ("Test","test_calculate"))*)
neuper@41940
   109
neuper@41940
   110
"===== start interpretation: from guard to environment";
neuper@41940
   111
val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
neuper@41940
   112
  (*nxt = ("Apply_Method",Apply_Method ("Test","test_calculate"))*)
neuper@41940
   113
"----- ";
neuper@41940
   114
(* call sequence: me ("Apply_Method",...
neuper@41940
   115
                > locatetac
neuper@41940
   116
                > loc_solve_
neuper@41940
   117
                > solve ("Apply_Method",...
neuper@41940
   118
*)
neuper@41940
   119
val ((_,tac), ptp) = (nxt, (pt, p));
neuper@41940
   120
locatetac tac (pt,p);
neuper@41940
   121
  val (mI, m) = mk_tac'_ tac;
neuper@41940
   122
  val Appl m = applicable_in p pt m;
neuper@41940
   123
  member op = specsteps mI;
neuper@41940
   124
  loc_solve_ (mI,m) ptp;
neuper@41940
   125
    val (m, (pt, pos)) = ((mI,m), ptp);
neuper@41940
   126
    solve m (pt, pos);
bonzai@41949
   127
      val ((_, m as Apply_Method' (mI, _, _, _)), (pt, (pos as (p,_)))) = 
neuper@41940
   128
        (m, (pt, pos));
neuper@41940
   129
      val {srls,...} = get_met mI;
neuper@41940
   130
      val PblObj{meth=itms,...} = get_obj I pt p;
neuper@41940
   131
      val thy' = get_obj g_domID pt p;
neuper@41940
   132
      val thy = assoc_thy thy';
bonzai@41949
   133
      val (is as ScrState (env,_,_,_,_,_), ctxt, sc) = init_scrstate thy itms mI;
neuper@41940
   134
neuper@41940
   135
"----- go on in the calculation";
neuper@41940
   136
val (p,_,f,nxt,_,pt) = me nxt pos [1] pt;
neuper@41940
   137
  (*nxt = ("Calculate",Calculate "PLUS")*)
neuper@41940
   138
val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
neuper@41940
   139
  (*nxt = ("Calculate",Calculate "TIMES")*)
neuper@41940
   140
neuper@41940
   141
"===== input a formula to be derived from previous istate";
neuper@41940
   142
"----- appendFormula TODO: first repair error";
neuper@41940
   143
  val cs = ((pt,p),[]);
neuper@41940
   144
  val ("ok", cs' as (_,_,(pt,p))) = step p cs;
neuper@41943
   145
  val ifo = (* encode "4^^^2" \<longrightarrow>*) "4^2";
neuper@41940
   146
(*
neuper@41943
   147
  val ("no derivation found", (_,_,(pt, p))) = inform cs' ((*encode*) ifo);
neuper@41940
   148
  here ^^^^^^^^^^^^^^^^^^^^^ should be "ok"
neuper@41940
   149
*)
neuper@41940
   150
neuper@41940
   151
val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
neuper@41940
   152
(*nxt = ("Calculate",Calculate "DIVIDE")*)
neuper@41940
   153
val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
neuper@41940
   154
(*nxt = ("Calculate",Calculate "POWER")*)
neuper@41940
   155
val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
neuper@41940
   156
(*nxt = ("Check_Postcond",Check_Postcond ["calculate","test"])*)
neuper@41940
   157
val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
neuper@41940
   158
(*nxt = ("End_Proof'",End_Proof')*)
neuper@41940
   159
if f = Form' (FormKF (~1,EdUndef,0,Nundef,"16")) then ()
neuper@41940
   160
else error "calculate.sml: script test_calculate changed behaviour";
neuper@41940
   161
neuper@41940
   162
"===== tactic Subproblem: from environment to origin";
neuper@41940
   163
"----- TODO";
wneuper@59116
   164
======= Isabelle2013-2 --> Isabelle2014: unclear, why this test ever run ========================*)
neuper@41940
   165
neuper@37906
   166
neuper@38065
   167
"----------- debugging setContext..pbl_ -----------------";
neuper@38065
   168
"----------- debugging setContext..pbl_ -----------------";
neuper@38065
   169
"----------- debugging setContext..pbl_ -----------------";
s1210629013@55445
   170
reset_states ();
neuper@41970
   171
CalcTree [(["equality (x+1=(2::real))", "solveFor x","solutions L"], 
neuper@41970
   172
  ("Test", ["sqroot-test","univariate","equation","test"],
neuper@37906
   173
   ["Test","squ-equ-test-subpbl1"]))];
neuper@37906
   174
Iterator 1;
neuper@37906
   175
moveActiveRoot 1; modelProblem 1;
neuper@37906
   176
neuper@37906
   177
val pos as (p,_) = ([],Pbl);
neuper@37906
   178
val guh = "pbl_equ_univ";
neuper@37906
   179
checkContext 1 pos guh;
neuper@37906
   180
val ((pt,_),_) = get_calc 1;
neuper@37906
   181
val pp = par_pblobj pt p;
neuper@37906
   182
val keID = guh2kestoreID guh;
neuper@37906
   183
case context_pbl keID pt pp of (true,["univariate", "equation"],_,_,_)=>()
neuper@38031
   184
| _ => error "mathengine.sml: context_pbl .. pbl_equ_univ checked";
neuper@37906
   185
neuper@37906
   186
case get_obj g_spec pt p of (_, ["e_pblID"], _) => ()
neuper@38031
   187
| _ => error "mathengine.sml: context_pbl .. pbl still empty";
neuper@37906
   188
setContext 1 pos guh;
neuper@37906
   189
val ((pt,_),_) = get_calc 1;
neuper@37906
   190
case get_obj g_spec pt p of (_, ["univariate", "equation"], _) => ()
neuper@38031
   191
| _ => error "mathengine.sml: context_pbl .. pbl set";
neuper@37906
   192
neuper@37906
   193
neuper@37906
   194
setContext 1 pos "met_eq_lin";
neuper@37906
   195
val ((pt,_),_) = get_calc 1;
neuper@37906
   196
case get_obj g_spec pt p of (_,  _, ["LinEq", "solve_lineq_equation"]) => ()
neuper@38031
   197
| _ => error "mathengine.sml: context_pbl .. pbl set";
neuper@37906
   198
neuper@37906
   199
neuper@38065
   200
"----------- tryrefine ----------------------------------";
neuper@38065
   201
"----------- tryrefine ----------------------------------";
neuper@38065
   202
"----------- tryrefine ----------------------------------";
s1210629013@55445
   203
reset_states ();
neuper@37906
   204
CalcTree [(["equality (x/(x^2 - 6*x+9) - 1/(x^2 - 3*x) =1/x)", 
neuper@37906
   205
	    "solveFor x", "solutions L"],
neuper@38058
   206
	   ("RatEq",["univariate","equation"],["no_met"]))];
neuper@37906
   207
Iterator 1;
wneuper@59248
   208
moveActiveRoot 1; autoCalculate 1 CompleteCalc;
neuper@37906
   209
neuper@37906
   210
refineProblem 1 ([1],Res) "pbl_equ_univ" 
neuper@37906
   211
(*gives "pbl_equ_univ_rat" correct*);
neuper@37906
   212
neuper@55279
   213
refineProblem 1 ([1],Res) (pblID2guh ["LINEAR","univariate","equation"])
neuper@38065
   214
(*gives "pbl_equ_univ_lin" incorrect*);
neuper@38065
   215
neuper@55412
   216
"---------- mini-subpbl isac-java 3992e3bd1948: initial <NEXT> ---------------";
neuper@55412
   217
"---------- mini-subpbl isac-java 3992e3bd1948: initial <NEXT> ---------------";
neuper@55412
   218
"---------- mini-subpbl isac-java 3992e3bd1948: initial <NEXT> ---------------";
s1210629013@55445
   219
reset_states ();
neuper@55412
   220
(*this is the exact sequence of input provided by isac-java 3992e3bd1948;
neuper@55412
   221
  Surrounding ML { * ... * } are omitted.
neuper@55412
   222
  The multiple calls suggest to replicate the CalcTree in the Dialogue.
neuper@55412
   223
*)
neuper@55412
   224
CalcTree [(["equality (x+1=(2::real))", "solveFor x", "solutions L"],
neuper@55412
   225
  ("Test",["sqroot-test","univariate","equation","test"],["Test","squ-equ-test-subpbl1"]))]; 
neuper@55412
   226
Iterator 1; 
neuper@55412
   227
moveActiveRoot 1; 
neuper@55412
   228
getFormulaeFromTo 1 ([],Pbl) ([],Pbl) 0 false; 
neuper@55412
   229
getFormulaeFromTo 1 ([],Pbl) ([],Pbl) 0 false; 
wneuper@59248
   230
(*completeCalcHead*)autoCalculate 1 CompleteCalcHead; 
neuper@55412
   231
(*completeCalcHead*)getActiveFormula 1 ; 
neuper@55412
   232
(*completeCalcHead*)refFormula 1 ([],Met); 
neuper@55412
   233
refFormula 1 ([],Pbl); 
neuper@55412
   234
(*<REFFORMULA>  <CALCID> 1 </CALCID>  <CALCHEAD status = "correct"> *)
neuper@55473
   235
fetchProposedTactic 1; 
neuper@55473
   236
(*-> <STRINGLISTTACTIC name="Apply_Method">
neuper@55473
   237
       <STRINGLIST>
neuper@55473
   238
         <STRING> Test </STRING>
neuper@55473
   239
         <STRING> squ-equ-test-subpbl1 </STRING>
neuper@55473
   240
WAS PREVIOUSLY: <SYSERROR>  <CALCID> 1 </CALCID>  <ERROR> error in kernel </ERROR></SYSERROR>*)
neuper@55412
   241
"~~~~~ fun fetchProposedTactic, args:"; val (cI) = (1);
neuper@55412
   242
val ("ok", (tacis, _, _)) = step (get_pos cI 1) (get_calc cI)
neuper@55412
   243
val _= upd_tacis cI tacis
neuper@55412
   244
	       val (tac,_,_) = last_elem tacis;
neuper@55412
   245
(*fetchproposedtacticOK2xml cI tac (fetchErrorpatterns tac);
neuper@55415
   246
                                    fetchErrorpatterns tac
neuper@55473
   247
WAS PREVIOUSLY ERROR: app_py: not found: ["IsacKnowledge","KEStore","Rulesets","e_rls"]*)
neuper@55415
   248
"~~~~~ fun fetchErrorpatterns, args:"; val (tac) = (tac);
neuper@55415
   249
    val rlsID = "e_rls"
neuper@55415
   250
    val (part, thyID) = thy_containing_rls "Build_Thydata" rlsID;
neuper@55458
   251
if part = "IsacScripts" andalso thyID = "KEStore" then ()
neuper@55415
   252
else error "fetchErrorpatterns .. e_rls changed";
neuper@55473
   253
val Hrls {thy_rls = (_, rls), ...} = get_the [part, thyID, "Rulesets", rlsID];
neuper@55473
   254
(* WAS PREVIOUSLY ERROR app_py: not found: ["IsacKnowledge","KEStore","Rulesets","e_rls"]*)
neuper@55473
   255
case rls of
neuper@55473
   256
  Rls {id = "e_rls", ...} => ()
neuper@55473
   257
| _ => error "thy_containing_rls changed for e_rls"
neuper@38065
   258
neuper@41982
   259
"----------- fun step: Apply_Method without init_form ---";
neuper@41982
   260
"----------- fun step: Apply_Method without init_form ---";
neuper@41982
   261
"----------- fun step: Apply_Method without init_form ---";
neuper@41982
   262
val fmz = ["equality (x+1=(2::real))", "solveFor x","solutions L"];
neuper@41982
   263
val (dI',pI',mI') =
neuper@41982
   264
  ("Test", ["sqroot-test","univariate","equation","test"],
neuper@41982
   265
   ["Test","squ-equ-test-subpbl1"]);
neuper@41982
   266
val (p,_,f,nxt,_,pt) = CalcTreeTEST [(fmz, (dI',pI',mI'))];
neuper@41982
   267
"~~~~~ fun me, args:"; val (_,tac) = nxt;
neuper@41982
   268
val ("ok", (_, _, (pt, p))) = locatetac tac (pt,p);
neuper@41982
   269
"~~~~~ fun step, args:"; val (ip as (_,p_), ptp as (pt,p), tacis) = (p, (pt, e_pos'), []);
neuper@41982
   270
val pIopt = get_pblID (pt,ip);
neuper@41982
   271
ip = ([],Res) (*false*);
neuper@41982
   272
val SOME pI = pIopt;
neuper@55412
   273
member op = [Pbl,Met] p_ andalso is_none (get_obj g_env pt (fst p));
neuper@41982
   274
			                          (*^^^^^^^^: Apply_Method without init_form*)
neuper@38065
   275
neuper@38065
   276
"----------- fun step -----------------------------------";
neuper@38065
   277
"----------- fun step -----------------------------------";
neuper@38065
   278
"----------- fun step -----------------------------------";
neuper@38065
   279
val p = e_pos'; val c = []; 
neuper@38065
   280
val (p,_,f,nxt,_,pt) = 
neuper@38065
   281
    CalcTreeTEST 
neuper@38065
   282
        [(["functionTerm (x^^^2 + 1)", "integrateBy x", "antiDerivative FF"], 
neuper@38065
   283
          ("Integrate", ["integrate","function"], ["diff","integration"]))];
neuper@38065
   284
"----- step 1: returns tac = Model_Problem ---";
neuper@38065
   285
val (str, ([(tac, _, _)], _, (pt, p))) = step p ((pt, e_pos'), []);
neuper@38065
   286
"----- step 2: returns tac =  ---";
neuper@38065
   287
val (str, ([(tac, _, _)], _, (pt, p))) = step p ((pt, e_pos'), []);
neuper@38065
   288
"----- step 3: returns tac =  ---";
neuper@38065
   289
val (str, ([(tac, _, _)], _, (pt, p))) = step p ((pt, e_pos'), []);
neuper@38065
   290
"----- step 4: returns tac =  ---";
neuper@38065
   291
val (str, ([(tac, _, _)], _, (pt, p))) = step p ((pt, e_pos'), []);
neuper@38065
   292
"----- step 5: returns tac =  ---";
neuper@38065
   293
neuper@48895
   294
(*========== inhibit exn AK110718 ==============================================
neuper@38066
   295
2002 stops here as well: TODO review actual arguments:
neuper@38065
   296
val (str, ([(tac, _, _)], _, (pt, p))) = step p ((pt, e_pos'), []);
neuper@38065
   297
"----- step 6: returns tac =  ---";
neuper@38065
   298
val (str, ([(tac, _, _)], _, (pt, p))) = step p ((pt, e_pos'), []);
neuper@38065
   299
"----- step 7: returns tac =  ---";
neuper@38065
   300
val (str, ([(tac, _, _)], _, (pt, p))) = step p ((pt, e_pos'), []);
neuper@38065
   301
"----- step 8: returns tac =  ---";
neuper@38065
   302
val (str, ([(tac, _, _)], _, (pt, p))) = step p ((pt, e_pos'), []);
neuper@48895
   303
========== inhibit exn AK110718 ==============================================*)
neuper@38065
   304
neuper@38065
   305
neuper@38065
   306
"----------- fun autocalc -------------------------------";
neuper@38065
   307
"----------- fun autocalc -------------------------------";
neuper@38065
   308
"----------- fun autocalc -------------------------------";
neuper@38065
   309
val p = e_pos'; val c = []; 
neuper@38065
   310
val (p,_,f,nxt,_,pt) = 
neuper@38065
   311
    CalcTreeTEST 
neuper@38065
   312
        [(["functionTerm (x^^^2 + 1)", "integrateBy x", "antiDerivative FF"], 
neuper@38065
   313
          ("Integrate",["integrate","function"], ["diff","integration"]))];
neuper@38066
   314
(*-----since Model_Problem + complete_mod_ in case cas of SOME-----*
neuper@38066
   315
modeling is skipped FIXME 
neuper@38066
   316
 *-----since Model_Problem + complete_mod_ in case cas of SOME-----*)
neuper@38065
   317
tracing "----- step 1 ---";
neuper@38065
   318
val (str, cut, (pt, p)) = autocalc [] p ((pt, e_pos'),[]) (Step 1); show_pt pt;
neuper@38065
   319
tracing "----- step 2 ---";
neuper@38065
   320
val (str, cut, (pt, p)) = autocalc [] p ((pt, e_pos'),[]) (Step 1); show_pt pt;
neuper@38065
   321
tracing "----- step 3 ---";
neuper@38065
   322
val (str, cut, (pt, p)) = autocalc [] p ((pt, e_pos'),[]) (Step 1); show_pt pt;
neuper@38065
   323
tracing "----- step 4 ---";
neuper@38065
   324
val (str, cut, (pt, p)) = autocalc [] p ((pt, e_pos'),[]) (Step 1); show_pt pt;
neuper@38065
   325
tracing "----- step 5 ---";
neuper@38065
   326
val (str, cut, (pt, p)) = autocalc [] p ((pt, e_pos'),[]) (Step 1); show_pt pt;
neuper@38065
   327
tracing "----- step 6 ---";
neuper@38065
   328
val (str, cut, (pt, p)) = autocalc [] p ((pt, e_pos'),[]) (Step 1); show_pt pt;
neuper@38065
   329
tracing "----- step 7 ---";
neuper@38065
   330
val (str, cut, (pt, p)) = autocalc [] p ((pt, e_pos'),[]) (Step 1); show_pt pt;
neuper@38065
   331
tracing "----- step 8 ---";
neuper@38065
   332
val (str, cut, (pt, p)) = autocalc [] p ((pt, e_pos'),[]) (Step 1); show_pt pt;
neuper@48895
   333
(*========== inhibit exn AK110718 ==============================================
neuper@42067
   334
WN110628: Integration does not work, see Knowledge/integrate.sml
neuper@42067
   335
neuper@41929
   336
if str = "end-of-calculation" andalso 
neuper@41929
   337
   term2str (get_obj g_res pt (fst p)) = "c + x + 1 / 3 * x ^^^ 3" then ()
neuper@38065
   338
else error "mathengine.sml -- fun autocalc -- end";
neuper@48895
   339
========== inhibit exn AK110718 ==============================================*)
neuper@38065
   340
neuper@38065
   341
wneuper@59248
   342
"----------- fun autoCalculate -----------------------------------";
wneuper@59248
   343
"----------- fun autoCalculate -----------------------------------";
wneuper@59248
   344
"----------- fun autoCalculate -----------------------------------";
s1210629013@55445
   345
reset_states ();
neuper@38065
   346
CalcTree (*ATTENTION: encode_fmz ... unlike CalcTreeTEST*)
neuper@38065
   347
    [(["functionTerm (x^2 + 1)", "integrateBy x", "antiDerivative FF"],
neuper@38065
   348
      ("Integrate", ["integrate", "function"], ["diff", "integration"]))];
neuper@38065
   349
Iterator 1;
neuper@38065
   350
moveActiveRoot 1;
neuper@38066
   351
(*-----since Model_Problem + complete_mod_ in case cas of SOME-----*
neuper@38066
   352
modeling is skipped FIXME 
neuper@38066
   353
see test/../interface -- solve_linear as rootpbl FE -- for OTHER expl:
neuper@38066
   354
 setNextTactic 1 (Add_Given "equality (1 + -1 * 2 + x = 0)");
wneuper@59248
   355
 autoCalculate 1 (Step 1); refFormula 1 (get_pos 1 1); (*equality added*);
neuper@38066
   356
neuper@38066
   357
 fetchProposedTactic 1;
neuper@38066
   358
 setNextTactic 1 (Add_Given "solveFor x");
wneuper@59248
   359
 autoCalculate 1 (Step 1); refFormula 1 (get_pos 1 1);
neuper@38066
   360
neuper@38066
   361
 fetchProposedTactic 1;
neuper@38066
   362
 setNextTactic 1 (Add_Find "solutions L");
wneuper@59248
   363
 autoCalculate 1 (Step 1); refFormula 1 (get_pos 1 1);
neuper@38066
   364
neuper@38066
   365
 fetchProposedTactic 1;
neuper@38066
   366
 setNextTactic 1 (Specify_Theory "Test");
wneuper@59248
   367
 autoCalculate 1 (Step 1); refFormula 1 (get_pos 1 1);
neuper@38066
   368
*-----since Model_Problem + complete_mod_ in case cas of SOME-----*)
wneuper@59248
   369
autoCalculate 1 (Step 1); 
neuper@38065
   370
"----- step 1 ---";
wneuper@59248
   371
autoCalculate 1 (Step 1);
neuper@38065
   372
"----- step 2 ---";
wneuper@59248
   373
autoCalculate 1 (Step 1);
neuper@38065
   374
"----- step 3 ---";
wneuper@59248
   375
autoCalculate 1 (Step 1);
neuper@38065
   376
"----- step 4 ---";
wneuper@59248
   377
autoCalculate 1 (Step 1);
neuper@38065
   378
"----- step 5 ---";
wneuper@59248
   379
autoCalculate 1 (Step 1);
neuper@38065
   380
"----- step 6 ---";
wneuper@59248
   381
autoCalculate 1 (Step 1);
neuper@38065
   382
"----- step 7 ---";
wneuper@59248
   383
autoCalculate 1 (Step 1);
neuper@38065
   384
"----- step 8 ---";
wneuper@59248
   385
autoCalculate 1 (Step 1);
neuper@38065
   386
val (ptp as (_, p), _) = get_calc 1;
neuper@38065
   387
val (Form t,_,_) = pt_extract ptp;
akargl@42108
   388
neuper@38065
   389
if term2str t = "c + x + 1 / 3 * x ^^^ 3" andalso p = ([], Res) then ()
wneuper@59248
   390
else error "mathengine.sml -- fun autoCalculate -- end";
neuper@38065
   391
neuper@42067
   392
"----------- fun autoCalculate..CompleteCalc ------------";
neuper@42067
   393
"----------- fun autoCalculate..CompleteCalc ------------";
neuper@42067
   394
"----------- fun autoCalculate..CompleteCalc ------------";
s1210629013@55445
   395
 reset_states ();
neuper@42067
   396
 CalcTree [(["equality (x+1=(2::real))", "solveFor x","solutions L"], 
neuper@42067
   397
   ("Test", ["sqroot-test","univariate","equation","test"],
neuper@42067
   398
    ["Test","squ-equ-test-subpbl1"]))];
neuper@42067
   399
 Iterator 1;
neuper@42103
   400
 moveActiveRoot 1; 
wneuper@59248
   401
(*autoCalculate 1 CompleteCalc; (*WAS <SYSERROR>..<ERROR> error in kernel </ERROR>*)*)
neuper@42103
   402
"~~~~~ fun autoCalculate, args:"; val (cI, auto) = (1, CompleteCalc);
neuper@42103
   403
val pold = get_pos cI 1;
neuper@42103
   404
(*autocalc [] pold (get_calc cI) auto;  (*WAS Type unification failed
neuper@42103
   405
  Type error in application: incompatible operand type
neuper@42103
   406
  Operator:  solveFor :: real \<Rightarrow> una
neuper@42103
   407
  Operand:   x :: 'a *)*)
neuper@42103
   408
"~~~~~ fun autocalc, args:"; val (c, (pos as (_,p_)), ((pt,_), _), auto) 
neuper@42103
   409
                               = ([] : pos' list, pold, (get_calc cI), auto);
neuper@42103
   410
autoord auto > 3 andalso just_created (pt, pos); (*true*)
neuper@42103
   411
val ptp = all_modspec (pt, pos);
neuper@42103
   412
"TODO all_modspec: preconds for rootpbl";
neuper@42103
   413
(*all_solve auto c ptp; (*WAS Type unification failed...*)*)
neuper@42103
   414
"~~~~~ and all_solve, args:"; val (auto, c, (ptp as (pt, pos as (p,_)))) =
neuper@42103
   415
                                                                  (auto, c, ptp);
neuper@42103
   416
    val (_,_,mI) = get_obj g_spec pt p
neuper@42103
   417
    val ctxt = get_ctxt pt pos
neuper@42103
   418
    val (ttt, c', ptp) = nxt_solv (Apply_Method' (mI, NONE, e_istate, ctxt)) (e_istate, ctxt) ptp;
neuper@42103
   419
(* complete_solve auto (c @ c') ptp; (*WAS Type unification failed...*) pos = ([], Met)*)
neuper@42103
   420
"~~~~~ fun complete_solve, args:"; val (auto, c, (ptp as (_, p as (_,p_)))) =
neuper@42103
   421
                                                           (auto, (c @ c'), ptp);
neuper@42103
   422
p = ([], Res) (*false p = ([1], Frm)*);
neuper@42103
   423
member op = [Pbl,Met] p_ (*false*);
neuper@42103
   424
val (ttt, c', ptp') = nxt_solve_ ptp; (*ttt = Rewrite_Set "norm_equation"*)
neuper@42103
   425
(* complete_solve auto (c @ c') ptp'; (*WAS Type unification failed...*) pos = ([], Met)*)
neuper@42103
   426
"~~~~~ fun complete_solve, args:"; val (auto, c, (ptp as (_, p as (_,p_)))) =
neuper@42103
   427
                                                           (auto, (c @ c'), ptp');
neuper@42103
   428
p = ([], Res) (*false p = ([1], Res)*);
neuper@42103
   429
member op = [Pbl,Met] p_ (*false*);
neuper@42103
   430
val (ttt, c', ptp') = nxt_solve_ ptp; (*ttt = Rewrite_Set "Test_simplify"*)
neuper@42103
   431
(* complete_solve auto (c @ c') ptp'; (*WAS Type unification failed...*) pos = ([], Met)*)
neuper@42103
   432
"~~~~~ fun complete_solve, args:"; val (auto, c, (ptp as (_, p as (_,p_)))) =
neuper@42103
   433
                                                           (auto, (c @ c'), ptp');
neuper@42103
   434
p = ([], Res) (*false p = ([2], Res)*);
neuper@42103
   435
member op = [Pbl,Met] p_ (*false*);
neuper@42103
   436
val ((Subproblem _, tac_, (_, is))::_, c', ptp') = nxt_solve_ ptp;
neuper@42103
   437
autoord auto < 5 (*false*);
neuper@42103
   438
(* val ptp = all_modspec ptp' (*WAS Type unification failed...*)*)
neuper@42103
   439
"~~~~~ fun all_modspec, args:"; val (pt, pos as (p,_)) = (ptp');
neuper@42103
   440
    val (PblObj {fmz = (fmz_, _), origin = (pors, spec as (dI,pI,mI), hdl), ...}) = get_obj I pt p;
neuper@42103
   441
    val thy = assoc_thy dI;
neuper@42103
   442
	    val {ppc, ...} = get_met mI;
neuper@42103
   443
(*  val (mors, ctxt) = prep_ori fmz_ thy ppc; WAS Type unification failed because
neuper@48761
   444
val ctxt' = dI |> Thy_Info.get_theory |> Proof_Context.init_global;
neuper@42103
   445
(parseNEW ctxt' "x" |> the |> type_of) = TFree ("'a",[]); 
neuper@42103
   446
                                               ^^^^^ *)
neuper@42103
   447
(*vvv from:  | assod pt _ (Subproblem'...*)
neuper@42103
   448
    val (fmz_, vals) = oris2fmz_vals pors;
neuper@42103
   449
(**)
neuper@48761
   450
    val ctxt = dI |> Thy_Info.get_theory |> Proof_Context.init_global 
neuper@42103
   451
      |> declare_constraints' vals
neuper@42103
   452
(**)
neuper@42103
   453
(*^^^ from:  | assod pt _ (Subproblem'...*)
neuper@42103
   454
val [(1, [1], "#Given", dsc_eq, [equality]),
neuper@42103
   455
     (2, [1], "#Given", dsc_solvefor, [xxx]),
neuper@42103
   456
     (3, [1], "#Find", dsc_solutions, [x_i])] = pors;
neuper@42103
   457
if term2str xxx = "x" andalso type_of xxx = HOLogic.realT then () 
neuper@42103
   458
else error "autoCalculate..CompleteCalc: SubProblem broken 1";
neuper@42103
   459
    val pt = update_pblppc pt p (map (ori2Coritm ppc) pors);
neuper@42103
   460
	    val pt = update_metppc pt p (map (ori2Coritm ppc) pors);
neuper@42103
   461
	    val pt = update_spec pt p (dI,pI,mI);
neuper@42103
   462
    val pt = update_ctxt pt p ctxt;
neuper@42103
   463
"~~~~~ return to complete_solve, args:"; val (ptp) = (pt, (p,Met));
neuper@42103
   464
val (msg, c, (pt, p)) = complete_solve auto (c @ c') ptp;
neuper@42103
   465
if msg = "end-of-calculation" andalso c = [] andalso p = ([], Res) then ()
neuper@42103
   466
else error "autoCalculate..CompleteCalc: final result";
neuper@42103
   467
if terms2strs (get_assumptions_ pt p) = 
neuper@42105
   468
  ["matches (?a = ?b) (-1 + x = 0)", (*precond of submet*) 
neuper@42104
   469
   "x = 1",                          (*result of subpbl and rootpbl*)
neuper@42104
   470
   "precond_rootmet x"]              (*precond of rootmet*)
neuper@42103
   471
then () else error "autoCalculate..CompleteCalc: ctxt at final result";
neuper@42067
   472
 
akargl@42108
   473
neuper@42394
   474
"--------- search for Or_to_List ------------------------";
neuper@42394
   475
"--------- search for Or_to_List ------------------------";
t@42225
   476
"--------- search for Or_to_List ------------------------";
t@42225
   477
val fmz = ["equality (x^^^2 + 4*x + 5 = (2::real))", "solveFor x","solutions L"];
t@42225
   478
val (dI',pI',mI') = ("Isac", ["univariate","equation"], ["no_met"])
t@42225
   479
val (p,_,f,nxt,_,pt) = CalcTreeTEST [(fmz, (dI',pI',mI'))];
t@42225
   480
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
t@42225
   481
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
t@42225
   482
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
t@42225
   483
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
t@42225
   484
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
t@42225
   485
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
t@42225
   486
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
t@42225
   487
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
t@42225
   488
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
t@42225
   489
val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = ("Subproblem"*)
t@42225
   490
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
t@42225
   491
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
t@42225
   492
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
t@42225
   493
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
t@42225
   494
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
t@42225
   495
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
t@42225
   496
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
t@42225
   497
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
t@42225
   498
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
t@42225
   499
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
wneuper@59279
   500
"~~~~~ fun me, args:"; val (((_,tac):tac'_), (p:pos'), (_:NEW(*remove*)), (pt:ctree)) = 
t@42225
   501
                            (nxt, p, [], pt);
t@42225
   502
val ("ok", (_, _, ptp))  = locatetac tac (pt,p)
t@42225
   503
val (pt, p) = ptp;
t@42225
   504
"~~~~~ fun step, args:"; val (((ip as (_,p_)):pos'), ((ptp as (pt,p), tacis):calcstate)) =
t@42225
   505
                          (p, ((pt, e_pos'),[]));
t@42225
   506
val pIopt = get_pblID (pt,ip);
t@42225
   507
ip = ([],Res); (*false*)
t@42225
   508
ip = p; (*false*)
t@42225
   509
member op = [Pbl,Met] p_; (*false*)
t@42225
   510
"~~~~~ fun nxt_solve_, args:"; val (ptp as (pt, pos as (p,p_))) = (pt,ip);
t@42225
   511
e_metID = get_obj g_metID pt (par_pblobj pt p); (*false*)
t@42225
   512
val thy' = get_obj g_domID pt (par_pblobj pt p);
t@42225
   513
val (srls, is, sc) = from_pblobj_or_detail' thy' (p,p_) pt;
t@42225
   514
val (tac_,is,(t,_)) = next_tac (thy',srls) (pt,pos) sc is; (*WAS Empty_Tac_: tac_*)
t@42225
   515
case tac_ of Or_to_List' _ => ()
t@42225
   516
| _ => error "Or_to_List broken ?"
akargl@42108
   517
neuper@42394
   518
neuper@42279
   519
"----------- check thy in CalcTreeTEST ------------------";
neuper@42279
   520
"----------- check thy in CalcTreeTEST ------------------";
neuper@42279
   521
"----------- check thy in CalcTreeTEST ------------------";
neuper@42279
   522
"WN1109 with Inverse_Z_Transform.thy when starting tests with CalcTreeTEST \n" ^
neuper@42279
   523
"we got the message: ME_Isa: thy 'Build_Inverse_Z_Transform' not in system \n" ^
neuper@42279
   524
"Below there are the steps which found out the reason: \n" ^
neuper@42279
   525
"store_pbt mistakenly stored that theory.";
neuper@48761
   526
val ctxt = Proof_Context.init_global @{theory Isac};
neuper@42279
   527
val SOME t = parseNEW ctxt "filterExpression (X  = 3 / (z - 1/4 + -1/8 * (1/(z::real))))";
neuper@42279
   528
val SOME t = parseNEW ctxt "stepResponse (x[n::real]::bool)";
akargl@42108
   529
neuper@42279
   530
val fmz = ["filterExpression (X  = 3 / (z - 1/4 + -1/8 * (1/(z::real))))", 
neuper@42279
   531
  "stepResponse (x[n::real]::bool)"];
neuper@42405
   532
val (dI,pI,mI) = ("Isac", ["Inverse", "Z_Transform", "SignalProcessing"], 
neuper@42405
   533
  ["SignalProcessing","Z_Transform","Inverse"]);
neuper@42279
   534
neuper@42279
   535
val (p,_,fb,nxt,_,pt)  = CalcTreeTEST [(fmz, (dI,pI,mI))]; 
neuper@42279
   536
(*WAS ME_Isa: thy 'Build_Inverse_Z_Transform' not in system*)
neuper@42279
   537
neuper@42279
   538
"~~~~~ T fun CalcTreeTEST, args:"; val [(fmz, sp):fmz] = [(fmz, (dI,pI,mI))];
neuper@42279
   539
"~~~~~ fun nxt_specify_init_calc, args:"; val (fmz, (dI, pI, mI)) = (fmz, sp);
neuper@42279
   540
	      val thy = assoc_thy dI;
neuper@42279
   541
    mI = ["no_met"]; (*false*)
neuper@42279
   542
		      val (pI, (pors, pctxt), mI) = (pI, get_pbt pI |> #ppc |> prep_ori fmz thy, mI)
neuper@42279
   543
	      val {cas, ppc, thy=thy',...} = get_pbt pI; (*take dI from _refined_ pbl*)
neuper@42279
   544
	"tracing bottom up"; Context.theory_name thy' = "Build_Inverse_Z_Transform"; (*WAS true*)
neuper@42279
   545
      val dI = theory2theory' (maxthy thy thy');
neuper@42279
   546
"tracing bottom up"; dI = "Build_Inverse_Z_Transform"; (*WAS true*)
neuper@42279
   547
    cas = NONE; (*true*)
neuper@42279
   548
	      val hdl = pblterm dI pI;
wneuper@59279
   549
        val (pt, _) = cappend_problem e_ctree [] (e_istate, pctxt) (fmz, (dI, pI, mI))
neuper@42279
   550
				  (pors, (dI, pI, mI), hdl)
neuper@42279
   551
        val pt = update_ctxt pt [] pctxt;
neuper@42279
   552
neuper@42279
   553
"~~~~~ fun nxt_specif, args:"; val ((tac as Model_Problem), (pt, pos as (p,p_))) = (Model_Problem, (pt, ([], Pbl)));
neuper@42279
   554
      val PblObj {origin = (oris, ospec, _), probl, spec, ctxt, ...} = get_obj I pt p;
neuper@42279
   555
"tracing bottom up"; #1(ospec) = "Build_Inverse_Z_Transform"; (*WAS true*)
neuper@42279
   556
neuper@42279
   557
"~~~~~ fun some_spec, args:"; val ((odI, opI, omI), (dI, pI, mI)) = (ospec, spec);
neuper@42279
   558
dI = e_domID; (*true*)
neuper@42279
   559
odI = "Build_Inverse_Z_Transform"; (*true*)
neuper@42279
   560
dI = "e_domID"; (*true*)
neuper@42279
   561
"~~~~~ after fun some_spec:";
neuper@42279
   562
      val (dI, pI, mI) = some_spec ospec spec;
neuper@42279
   563
"tracing bottom up"; dI = "Build_Inverse_Z_Transform"; (*WAS true*)
neuper@42279
   564
      val thy = assoc_thy dI; (*caused ME_Isa: thy 'Build_Inverse_Z_Transform' not in system*)
neuper@42279
   565
neuper@55482
   566
"----------- identified error in fun getTactic, string_of_thmI ---------------";
neuper@55482
   567
"----------- identified error in fun getTactic, string_of_thmI ---------------";
neuper@55482
   568
"----------- identified error in fun getTactic, string_of_thmI ---------------";
neuper@55482
   569
reset_states ();
neuper@55482
   570
CalcTree [(["equality (x+1=(2::real))", "solveFor x", "solutions L"],
neuper@55482
   571
  ("Test",["sqroot-test","univariate","equation","test"],["Test","squ-equ-test-subpbl1"]))];
neuper@55482
   572
moveActiveRoot 1;
wneuper@59248
   573
autoCalculate 1 CompleteCalcHead;
wneuper@59248
   574
autoCalculate 1 (Step 1);
wneuper@59248
   575
autoCalculate 1 (Step 1);
wneuper@59248
   576
autoCalculate 1 (Step 1);
neuper@55482
   577
getTactic 1 ([1],Frm); (*<RULESET> norm_equation </RULESET>*)
neuper@55482
   578
interSteps 1 ([1],Res);
neuper@55482
   579
"~~~~~ fun interSteps, args:"; val (cI, ip) = (1, ([1],Res));
neuper@55482
   580
val ((pt,p), tacis) = get_calc cI;
neuper@55482
   581
(not o is_interpos) ip = false;
neuper@55482
   582
val ip' = lev_pred' pt ip;
neuper@55482
   583
"~~~~~ fun detailstep, args:"; val (pt, (pos as (p,p_):pos')) = (pt, ip);
neuper@55482
   584
(*         ^^^^^^^^^ not in test/../ *)
neuper@55482
   585
    val nd = get_nd pt p
neuper@55482
   586
    val cn = children nd;
neuper@55482
   587
null cn = false;
neuper@55482
   588
(is_rewset o (get_obj g_tac nd)) [(*root of nd*)] = true;
neuper@55482
   589
"~~~~~ fun detailrls, args:"; val (pt, (pos as (p,p_):pos')) = (pt, pos);
neuper@55482
   590
(*         ^^^^^^^^^ only once in test/../solve.sml*)
neuper@55482
   591
    val t = get_obj g_form pt p
neuper@55482
   592
	  val tac = get_obj g_tac pt p
neuper@55482
   593
	  val rls = (assoc_rls o rls_of) tac
neuper@55482
   594
    val ctxt = get_ctxt pt pos
neuper@55482
   595
(*rls = Rls {calc = [], erls = ...*)
neuper@55482
   596
          val is = init_istate tac t
neuper@55482
   597
	        (*TODO.WN060602 ScrState (["(t_, Problem (Isac,[equation,univar]))"]
neuper@55482
   598
				    is wrong for simpl, but working ?!? *)
neuper@55482
   599
	        val tac_ = Apply_Method' (e_metID(*WN0402: see generate1 !?!*), SOME t, is, ctxt)
neuper@55482
   600
	        val pos' = ((lev_on o lev_dn) p, Frm)
neuper@55482
   601
	        val thy = assoc_thy "Isac"
neuper@55482
   602
	        val (_,_,_,pt') = (*implicit Take*)generate1 thy tac_ (is, ctxt) pos' pt;
neuper@55482
   603
	        (*val (_,_,(pt'',_)) = *)complete_solve CompleteSubpbl [] (pt',pos');
neuper@55482
   604
	        (*                   ^^^^^^^^^^^^^^ in test/../mathengine.sml*)
neuper@55482
   605
	        (* in pt'': tac = Rewrite ("rnorm_equation_add", "Test.rnorm_equation_add")},
neuper@55482
   606
                                                           ^^^^^^^^^^^^^^^^^^^^^^^^^^^*)
wneuper@59279
   607
"~~~~~ fun complete_solve, args:"; val (auto, c, (ptp as (_, p as (_,p_)): ctree * pos')) =
neuper@55482
   608
  (CompleteSubpbl, [], (pt',pos'));
neuper@55482
   609
p = ([], Res) = false;
neuper@55482
   610
member op = [Pbl,Met] p_ = false;
neuper@55482
   611
val (_, c', ptp') = nxt_solve_ ptp;
neuper@55482
   612
(* in pt': tac = Rewrite ("rnorm_equation_add", "Test.rnorm_equation_add")},
neuper@55482
   613
                                                ^^^^^^^^^^^^^^^^^^^^^^^^^^^*)
neuper@55482
   614
"~~~~~ fun nxt_solve_, args:"; val ((ptp as (pt, pos as (p,p_)))) = (ptp);
neuper@55482
   615
e_metID = get_obj g_metID pt (par_pblobj pt p) = false;
neuper@55482
   616
          val thy' = get_obj g_domID pt (par_pblobj pt p);
neuper@55482
   617
	        val (srls, is, sc) = from_pblobj_or_detail' thy' (p,p_) pt;
neuper@55482
   618
	        val (tac_,is,(t,_)) = next_tac (thy',srls) (pt,pos) sc is;
neuper@55482
   619
(*tac_ = Rewrite' (..., ("rnorm_equation_add", "Test.rnorm_equation_add"), ...) !!!!!!!!!!!!!!!!*)
wneuper@59279
   620
"~~~~~ fun next_tac, args:"; val (thy, (ptp as (pt, pos as (p, _)):ctree * pos'), 
neuper@55482
   621
  (sc as Prog (h $ body)), (ScrState (E,l,a,v,s,b), ctxt)) = ((thy',srls), (pt,pos), sc, is);
neuper@55482
   622
l = [] = false;
neuper@55482
   623
nstep_up thy ptp sc E l Skip_ a v (*--> Appy (Rewrite' (.., (.., "Test.rnorm_equation_add"), ...)
neuper@55482
   624
  BUT WE FIND IN THE CODE ABOVE IN next_tac:*)
neuper@55482
   625
;
neuper@55482
   626
(*----------------------------------------------------------------------------------------------*)
wneuper@59117
   627
if string_of_thmI @{thm rnorm_equation_add} = "~ ?b =!= 0 ==> (?a = ?b) = (?a + - 1 * ?b = 0)"
neuper@55482
   628
then () else error "string_of_thmI changed";
wneuper@59117
   629
if string_of_thm @{thm rnorm_equation_add} = "~ ?b =!= 0 ==> (?a = ?b) = (?a + - 1 * ?b = 0)"
neuper@55482
   630
then () else error "string_of_thm changed";
neuper@55482
   631
(*----------------------------------------------------------------------------------------------*)
neuper@55482
   632
;
neuper@55482
   633
(*SEARCH FOR THE ERROR WENT DOWN TO THE END OF THIS TEST, AND THEN UP TO HERE AGAIN*)
neuper@55482
   634
"~~~~~ fun nxt_solv, args:"; val (tac_, is, (pt, pos as (p,p_))) = (tac_, is, ptp);
neuper@55482
   635
        val pos =
neuper@55482
   636
          case pos of
neuper@55482
   637
		        (p, Met) => ((lev_on o lev_dn) p, Frm)(*begin script*)
neuper@55482
   638
		      | (p, Res) => (lev_on p,Res) (*somewhere in script*)
neuper@55482
   639
		      | _ => pos;
neuper@55482
   640
generate1 (assoc_thy "Isac") tac_ is pos pt;
neuper@55482
   641
(* tac = Rewrite ("rnorm_equation_add", "Test.rnorm_equation_add")},
neuper@55482
   642
                                        ^^^^^^^^^^^^^^^^^^^^^^^^^^^*)
neuper@55482
   643
"~~~~~ fun generate1, args:"; val (thy, (Rewrite' (thy',ord',rls',pa,thm',f,(f',asm))), 
neuper@55482
   644
  (is, ctxt), (p,p_), pt) = ((assoc_thy "Isac"), tac_, is, pos, pt);
neuper@55482
   645
        val (pt,c) = cappend_atomic pt p (is, insert_assumptions asm ctxt) f
wneuper@59253
   646
          (Rewrite thm') (f',asm) Complete;
neuper@55482
   647
(* in pt: tac = Rewrite ("rnorm_equation_add", "Test.rnorm_equation_add")},
neuper@55482
   648
                                               ^^^^^^^^^^^^^^^^^^^^^^^^^^^*)
neuper@55482
   649
"~~~~~ fun cappend_atomic, args:"; val (pt, p, ist_res, f, r, f', s) = 
wneuper@59253
   650
  (pt, p, (is, insert_assumptions asm ctxt), f, (Rewrite thm'), (f',asm), Complete);
wneuper@59253
   651
existpt p pt andalso is_empty_tac (get_obj g_tac pt p) = false;
neuper@55482
   652
apfst (append_atomic p ist_res f r f' s) (cut_tree pt (p,Frm));
neuper@55482
   653
apfst : ('a -> 'b) -> 'a * 'c -> 'b * 'c;
wneuper@59279
   654
(append_atomic p ist_res f r f' s) : ctree -> ctree;
neuper@55482
   655
;
neuper@55482
   656
(* HERE THE ERROR OCCURED IN THE FIRST APPROACH
neuper@55482
   657
  getTactic 1 ([1,1],Frm); <ERROR> syserror in getTactic </ERROR>  <<<<<=========================*)
neuper@55482
   658
"~~~~~ fun getTactic, args:"; val (cI, (p:pos')) = (1, ([1,1],Frm));
neuper@55482
   659
val ((pt,_),_) = get_calc cI
neuper@55482
   660
val (form, tac, asms) = pt_extract (pt, p)
neuper@55482
   661
val SOME ta = tac;
neuper@55482
   662
"~~~~~ fun gettacticOK2xml, args:"; val ((cI:calcID), tac) = (cI, ta);
wneuper@59262
   663
val i = 2;
neuper@55482
   664
"~~~~~ fun tac2xml, args:"; val (j, (Rewrite thm')) = (i, tac);
wneuper@59252
   665
"~~~~~ fun thm'2xml, args:"; val (j, ((ID, form) : thm'')) = ((j+i), thm');
neuper@55482
   666
ID = "rnorm_equation_add";
neuper@55482
   667
@{thm rnorm_equation_add};
wneuper@59253
   668
(term2str o Thm.prop_of) form = "~ ?b =!= 0 ==> (?a = ?b) = (?a + -1 * ?b = 0)"
neuper@55482
   669
  (*?!? should be "\<not> ?b =!= 0 \<Longrightarrow> (?a = ?b) = (?a + -1 * ?b = 0)"*)
neuper@55482
   670
(*thmstr2xml (j+i) form;
neuper@55482
   671
ERROR Undeclared constant: "Test.rnorm_equation_add" ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^*)
neuper@55482
   672
;
neuper@55482
   673
show_pt pt;
neuper@55482
   674
(*[
neuper@55482
   675
(([], Frm), solve (x + 1 = 2, x)),
neuper@55482
   676
(([1], Frm), x + 1 = 2),
neuper@55482
   677
(([1,1], Frm), x + 1 = 2),
neuper@55482
   678
(([1,1], Res), x + 1 + -1 * 2 = 0),
neuper@55482
   679
(([1], Res), x + 1 + -1 * 2 = 0),
neuper@55482
   680
(([2], Res), -1 + x = 0)]
neuper@55482
   681
neuper@55482
   682
pt;   --> tac = Rewrite ("rnorm_equation_add", "Test.rnorm_equation_add")*)
neuper@55482
   683
neuper@55486
   684
"----------- improved fun getTactic for interSteps and numeral calculations --";
neuper@55486
   685
"----------- improved fun getTactic for interSteps and numeral calculations --";
neuper@55486
   686
"----------- improved fun getTactic for interSteps and numeral calculations --";
neuper@55486
   687
reset_states (); val cI = 1;
neuper@55486
   688
CalcTree [(["equality (x+1=(2::real))", "solveFor x", "solutions L"],
neuper@55486
   689
  ("Test",["sqroot-test","univariate","equation","test"],["Test","squ-equ-test-subpbl1"]))];
neuper@55486
   690
moveActiveRoot 1;
wneuper@59248
   691
autoCalculate 1 CompleteCalcHead;
wneuper@59248
   692
autoCalculate 1 (Step 1);
neuper@55486
   693
neuper@55486
   694
    val cs = get_calc cI             (* we improve from the calcstate here [*] *);
neuper@55486
   695
    val pos as (_,p_) = get_pos cI 1 (* we improve from the calcstate here [*] *);
neuper@55486
   696
wneuper@59123
   697
appendFormula 1 "x + 4 + -3 = 2" (*|> Future.join*);
neuper@55486
   698
interSteps 1 ([1],Res); (* already done by appendFormula, now showed to frontend *)
neuper@55486
   699
getTactic 1 ([1,1], Res); 
neuper@55486
   700
  (*<ID> sym_#add_Float ((~3,0), (0,0)) __ ((4,0), (0,0)) </ID>  <<<<<================== to improve
neuper@55486
   701
  <ISA> 1 + x = -3 + (4 + x) </ISA>*)
neuper@55486
   702
neuper@55486
   703
val ((pt''',p'''), tacis''') = get_calc cI;
neuper@55486
   704
show_pt pt'''
neuper@55486
   705
(*[
neuper@55486
   706
(([], Frm), solve (x + 1 = 2, x)),
neuper@55486
   707
(([1], Frm), x + 1 = 2),
neuper@55486
   708
(([1,1], Frm), x + 1 = 2),
neuper@55486
   709
(([1,1], Res), 1 + x = 2),
neuper@55486
   710
(([1,2], Res), -3 + (4 + x) = 2),
neuper@55486
   711
(([1,3], Res), -3 + (x + 4) = 2),
neuper@55486
   712
(([1,4], Res), x + 4 + -3 = 2),
neuper@55486
   713
(([1], Res), x + 4 + -3 = 2)]*)
neuper@55486
   714
;
neuper@55486
   715
"~~~~~ fun appendFormula', args:"; val (cI, ifo) = (1, "x + 4 + -3 = 2");
neuper@55486
   716
(*  val cs = get_calc cI             (* we improve from the calcstate here [*] *);
neuper@55486
   717
    val pos as (_,p_) = get_pos cI 1 (* we improve from the calcstate here [*] *);*)
neuper@55486
   718
val ("ok", cs') = step pos cs;
neuper@55486
   719
(*val ("ok", (_, c, ptp as (_,p))) = *)inform cs' (encode ifo);
neuper@55486
   720
"~~~~~ fun inform, args:"; val (cs as (_, _, ptp as (pt, pos as (p, p_))), istr) =
neuper@55486
   721
  (cs', (encode ifo));
neuper@55486
   722
val SOME f_in = parse (assoc_thy "Isac") istr
wneuper@59188
   723
	      val f_in = Thm.term_of f_in
neuper@55486
   724
	      val f_succ = get_curr_formula (pt, pos);
neuper@55486
   725
f_succ = f_in  = false;
neuper@55486
   726
val NONE = cas_input f_in 
neuper@55486
   727
			          val pos_pred = lev_back' pos
neuper@55486
   728
			          (* f_pred ---"step pos cs"---> f_succ in appendFormula *)
neuper@55486
   729
			          val f_pred = get_curr_formula (pt, pos_pred);
neuper@55486
   730
			          (*val msg_calcstate' = *)compare_step ([], [], (pt, pos_pred)) f_in (*<<=====*);
neuper@55486
   731
"~~~~~ fun compare_step, args:"; val (((tacis, c, ptp as (pt, pos as (p,p_)))), ifo) = 
neuper@55486
   732
  (([], [], (pt, pos_pred)), f_in);
neuper@55486
   733
    val fo =
neuper@55486
   734
      case p_ of
neuper@55486
   735
        Frm => get_obj g_form pt p
neuper@55486
   736
			| Res => (fst o (get_obj g_result pt)) p
neuper@55486
   737
			| _ => e_term (*on PblObj is fo <> ifo*);
neuper@55486
   738
	  val {nrls, ...} = get_met (get_obj g_metID pt (par_pblobj pt p))
neuper@55486
   739
	  val {rew_ord, erls, rules, ...} = rep_rls nrls;
neuper@55486
   740
	  (*val (found, der) = *)concat_deriv rew_ord erls rules fo ifo; (*<---------------*)
neuper@55486
   741
"~~~~~ fun concat_deriv, args:"; val (rew_ord, erls, rules, fo, ifo) =
neuper@55486
   742
  (rew_ord, erls, rules, fo, ifo);
neuper@55486
   743
    fun derivat ([]:(term * rule * (term * term list)) list) = e_term
neuper@55486
   744
      | derivat dt = (#1 o #3 o last_elem) dt
neuper@55486
   745
    fun equal (_,_,(t1, _)) (_,_,(t2, _)) = t1=t2
neuper@55486
   746
    (*val  fod = *)make_deriv (Isac"") erls rules (snd rew_ord) NONE  fo;
neuper@55486
   747
    (*val ifod = *)make_deriv (Isac"") erls rules (snd rew_ord) NONE ifo;
neuper@55486
   748