test/Tools/isac/Minisubpbl/300-init-subpbl.sml
author Walther Neuper <walther.neuper@jku.at>
Sat, 19 Oct 2019 14:59:09 +0200
changeset 59666 f461cae19cd4
parent 59659 f3f0b8d66cc8
child 59676 6c23dc07c454
permissions -rw-r--r--
lucin: assimilate signatures
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";