test/Tools/isac/Minisubpbl/700-interSteps.sml
author Walther Neuper <walther.neuper@jku.at>
Tue, 21 Apr 2020 15:42:50 +0200
changeset 59898 68883c046963
parent 59881 bdced24f62bf
child 59903 5037ca1b112b
permissions -rw-r--r--
replace Celem. with new struct.s in BaseDefinitions/

Note: the remaining code in calcelems.sml shall be destributed to respective struct.s
wneuper@59493
     1
(* Title:  700-interSteps.sml
wneuper@59493
     2
   Author: Walther Neuper 1105
wneuper@59493
     3
   (c) copyright due to lincense terms.
wneuper@59493
     4
*)
wneuper@59493
     5
"----------- Minisubplb/700-interSteps.sml -----------------------";
wneuper@59493
     6
"----------- Minisubplb/700-interSteps.sml -----------------------";
wneuper@59493
     7
"----------- Minisubplb/700-interSteps.sml -----------------------";
wneuper@59493
     8
(** adaption from rewtools.sml --- initContext..Thy_, fun context_thm ---,
wneuper@59493
     9
  *into a functional representation, i.e. we outcomment statements with side-effects:
wneuper@59493
    10
 ** reset_states ();
wneuper@59493
    11
 ** CalcTree [(["equality (x+1=(2::real))", "solveFor x","solutions L"], 
wneuper@59493
    12
 **   ("Test", ["sqroot-test","univariate","equation","test"],
wneuper@59493
    13
 **    ["Test","squ-equ-test-subpbl1"]))];
wneuper@59493
    14
 ** Iterator 1; moveActiveRoot 1;
wneuper@59493
    15
 ** autoCalculate 1 CompleteCalc;
wneuper@59493
    16
 **)
wneuper@59493
    17
val (p,_,f,nxt,_,pt) = CalcTreeTEST [(["equality (x+1=(2::real))", "solveFor x","solutions L"],
wneuper@59493
    18
  ("Test", ["sqroot-test","univariate","equation","test"],
wneuper@59493
    19
   ["Test","squ-equ-test-subpbl1"]))];
wneuper@59493
    20
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
wneuper@59493
    21
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
wneuper@59493
    22
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
wneuper@59493
    23
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
wneuper@59493
    24
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
wneuper@59493
    25
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
wneuper@59493
    26
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
wneuper@59493
    27
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
wneuper@59493
    28
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
wneuper@59493
    29
val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = ("Subproblem"*)
wneuper@59493
    30
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
wneuper@59493
    31
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
wneuper@59493
    32
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
wneuper@59493
    33
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
wneuper@59493
    34
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
wneuper@59493
    35
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
wneuper@59493
    36
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
wneuper@59493
    37
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
wneuper@59493
    38
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
wneuper@59493
    39
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
wneuper@59493
    40
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
wneuper@59493
    41
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
wneuper@59493
    42
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
wneuper@59493
    43
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
walther@59686
    44
walther@59734
    45
(*+*)if p = ([], Res)
walther@59749
    46
(*+*)then case nxt of End_Proof' => ()
walther@59734
    47
(*+*)  | _ => error "calculation not finished correctly 1"
walther@59734
    48
(*+*)else error "calculation not finished correctly 2";
walther@59734
    49
(*+*)show_pt pt; (* 11 lines with subpbl *)
walther@59734
    50
wneuper@59493
    51
"----- no thy-context at result -----";
wneuper@59493
    52
(** val p = ([], Res);
wneuper@59493
    53
 ** initContext 1 Thy_ p
wneuper@59493
    54
 ***  = <MESSAGE><CALCID>1</CALCID><STRING>no thy-context at result</STRING></MESSAGE>: XML.tree;
wneuper@59493
    55
 ** val ((pt,_),_) = get_calc 1;  (* 11 lines with subpbl *)
wneuper@59493
    56
 **
wneuper@59493
    57
 ** interSteps 1 ([2], Res); (* added [2,1]..[2,6] *)
wneuper@59493
    58
 **)
wneuper@59493
    59
"~~~~~ fun interSteps, args:"; val (cI, ip) = (1, ([2], Res));
wneuper@59493
    60
(** val ((pt, p), tacis) = get_calc cI;*)
wneuper@59493
    61
val ip' = lev_pred' pt ip;
walther@59734
    62
walther@59734
    63
(*+*)ip = ([2], Res);
walther@59734
    64
(*+*)ip' = ([1], Res);
walther@59734
    65
walther@59734
    66
(*+*)show_pt pt;                  (* 11 lines, as produced by autoCalculate CompleteCalc *)
walther@59734
    67
walther@59833
    68
val ("detailrls", pt''''', _) = (*case*) Detail_Step.go pt ip (*of*);
walther@59734
    69
walther@59734
    70
(*+*)show_pt pt''''';                  (* added [2,1]..[2,6] after ([1], Res)*)
walther@59734
    71
walther@59734
    72
(*//-------------------------- 1. go down along calls to error ------------------------------\\*)
walther@59833
    73
"~~~~~ fun go , args:"; val (pt, (pos as (p, _))) = (pt, ip);
walther@59734
    74
(*+*)p = [2];
walther@59734
    75
(*+*)pos = ([2], Res);
walther@59734
    76
walther@59734
    77
    val nd = Ctree.get_nd pt p
walther@59734
    78
    val cn = Ctree.children nd
walther@59723
    79
;
walther@59734
    80
    (*if*) null cn (*then*);
walther@59734
    81
      (*if*) (Tactic.is_rewset o (Ctree.get_obj Ctree.g_tac nd)) [(*root of nd*)] (*then*);
wneuper@59493
    82
walther@59833
    83
     Detail_Step.detailrls pt pos;
walther@59734
    84
"~~~~~ fun detailrls , args:"; val (pt, (pos as (p, _))) = (pt, pos);
wneuper@59493
    85
    val t = get_obj g_form pt p
wneuper@59493
    86
	  val tac = get_obj g_tac pt p
wneuper@59571
    87
	  val rls = (assoc_rls o Tactic.rls_of) tac
walther@59734
    88
    val ctxt = get_ctxt pt pos
walther@59734
    89
  val _ = (*case*) rls (*of*);
wneuper@59493
    90
        val is = Generate.init_istate tac t
walther@59802
    91
walther@59851
    92
(*+*)val Rule_Set.Repeat {scr = EmptyProg, ...} = rls; (*this prog is replaced by Auto_Prog.gen on the fly*)
walther@59802
    93
walther@59898
    94
	      val tac_ = Tactic.Apply_Method' (Spec.e_metID(*WN0402: see generate1 !?!*), SOME t, is, ctxt)
wneuper@59493
    95
	      val pos' = ((lev_on o lev_dn) p, Frm)
walther@59881
    96
	      val thy = ThyC.get_theory "Isac_Knowledge"
walther@59811
    97
	      val (_, _, _, pt') = Generate.generate1 tac_ (is, ctxt) (pt, pos') (* implicit Take *);
wneuper@59493
    98
walther@59734
    99
	   (** )val (_,_, (pt'', _)) =( **)
walther@59734
   100
           complete_solve CompleteSubpbl [] (pt', pos');
walther@59734
   101
"~~~~~ fun complete_solve , args:"; val (auto, c, (ptp as (_, p as (_, p_))))
walther@59734
   102
  = (CompleteSubpbl, [], (pt', pos'));
walther@59734
   103
    (*if*) p = ([], Res) (*else*);
walther@59734
   104
      (*if*) member op = [Pbl,Met] p_ (*else*);
walther@59802
   105
walther@59802
   106
   val (_, ([(Rewrite ("radd_commute", _), _, _)], c', ptp')) =
walther@59802
   107
      (*case*) Step_Solve.do_next ptp (*of*);
wneuper@59493
   108
walther@59734
   109
(*+*)c' = [([2], Res), ([3], Pbl), ([3, 1], Frm), ([3, 1], Res), ([3, 2], Res), ([3], Res), ([4], Res), ([], Res)];
walther@59734
   110
(*+*)show_pt (fst ptp');(*[
walther@59734
   111
(([], Frm), solve (x + 1 = 2, x)),
walther@59734
   112
(([1], Frm), x + 1 = 2),
walther@59734
   113
(([1], Res), x + 1 + -1 * 2 = 0),
walther@59734
   114
(([2,1], Frm), x + 1 + -1 * 2 = 0),
walther@59734
   115
(([2,1], Res), 1 + x + -1 * 2 = 0)]*)
walther@59686
   116
walther@59802
   117
(*+*)val (keep_c', keep_ptp') = (c', ptp');
walther@59802
   118
"~~~~~ and Step_Solve.do_next , args:"; val () = ();
walther@59802
   119
(*+*)(*STOPPED HERE:
walther@59851
   120
  NOTE: prog.xxx found by LItool.resume_prog from  Rule_Set.Repeat {scr = Prog xxx, ...}*)
walther@59802
   121
walther@59802
   122
(*+*)val (c', ptp') = (keep_c', keep_ptp');
walther@59802
   123
walther@59802
   124
	   (** )val (_, c', ptp') =( **)
walther@59734
   125
           complete_solve auto (c @ c') ptp';
walther@59734
   126
"~~~~~ fun complete_solve , args:"; val (auto, c, (ptp as (_, p as (_, p_))))
walther@59734
   127
  = (auto, (c @ c'), ptp');
walther@59734
   128
    (*if*) p = ([], Res) (*else*);
walther@59734
   129
      (*if*) member op = [Pbl,Met] p_ (*else*);
walther@59636
   130
walther@59877
   131
   val (_, ([(Rewrite ("add.assoc", _), _, _)], c', ptp')) = (*case*)Step_Solve.do_next ptp (*of*);
walther@59734
   132
"~~~~~ fun complete_solve , args:"; val (auto, c, (ptp as (_, p as (_, p_))))
walther@59734
   133
  = (auto, (c @ c'), ptp');
walther@59734
   134
    (*if*) p = ([], Res) (*else*);
walther@59734
   135
      (*if*) member op = [Pbl,Met] p_ (*else*);
walther@59762
   136
   val (_, ([(Calculate "TIMES", _, _)], c', ptp')) = (*case*)Step_Solve.do_next ptp (*of*);
walther@59636
   137
walther@59734
   138
show_pt (fst ptp');          (* added  [2,1]..[2,3], more to come *)
walther@59734
   139
(*\\-------------------------- 1. go down along calls to error ------------------------------//*)
wneuper@59493
   140
walther@59734
   141
(**
walther@59734
   142
 ** interSteps 1 ([3,1], Res);
walther@59734
   143
 **)
walther@59734
   144
"~~~~~ fun interSteps, args:"; val (cI, ip) = (1, ([3,1], Res));
walther@59734
   145
(**val ((pt, p), tacis) = get_calc cI;*)
walther@59734
   146
val ip' = lev_pred' pt ip;
wneuper@59493
   147
walther@59734
   148
(*+*)ip = ([3, 1], Res);
walther@59734
   149
(*+*)ip' = ([3, 1], Frm);
walther@59723
   150
walther@59833
   151
val ("detailrls", pt, _) = (*case*) Detail_Step.go pt''''' ip (*of*);
walther@59723
   152
walther@59734
   153
show_pt pt;                  (* added ([3,1,1], Frm), ([3,1,1], Res) after ([3,1], Frm)*)
walther@59802
   154
walther@59802
   155
(*---------- final test ----------------------------------------------------------\\*)
walther@59734
   156
if pr_ctree pr_short pt =
walther@59734
   157
  ".    ----- pblobj -----\n1" ^
walther@59734
   158
  ".   x + 1 = 2\n" ^
walther@59734
   159
  "2.   x + 1 + -1 * 2 = 0\n" ^
walther@59734
   160
  "2.1.   x + 1 + -1 * 2 = 0\n" ^
walther@59734
   161
  "2.2.   1 + x + -1 * 2 = 0\n" ^
walther@59734
   162
  "2.3.   1 + (x + -1 * 2) = 0\n" ^
walther@59734
   163
  "2.4.   1 + (x + -2) = 0\n" ^
walther@59734
   164
  "2.5.   1 + (-2 + x) = 0\n" ^
walther@59734
   165
  "2.6.   -2 + (1 + x) = 0\n" ^
walther@59734
   166
  "3.    ----- pblobj -----\n" ^
walther@59734
   167
  "3.1.   -1 + x = 0\n" ^
walther@59734
   168
  "3.1.1.   -1 + x = 0\n" ^
walther@59734
   169
(*([3,1,1], Res), x = 0 + -1 * -1)       only shown by show_pt*)
walther@59734
   170
  "3.2.   x = 0 + -1 * -1\n" ^(* another difference to show_pt*)
walther@59734
   171
  "4.   [x = 1]\n"
walther@59734
   172
(*".  [x = 1]"                           only shown by show_pt*)
walther@59734
   173
then () else error "intermediate steps CHANGED";