test/Tools/isac/Minisubpbl/530-error-Check_Elementwise.sml
author Walther Neuper <walther.neuper@jku.at>
Tue, 26 Nov 2019 17:37:17 +0100
changeset 59721 755a780805f1
parent 59718 bc4b000caa39
child 59722 b73e64a8a329
permissions -rw-r--r--
lucin: improve readability
neuper@42021
     1
(* Title: 530-error-Check_Elementwise.sml
neuper@42021
     2
Author: Walther Neuper 1105
neuper@42021
     3
(c) copyright due to lincense terms.
neuper@42021
     4
*)
neuper@42021
     5
neuper@42021
     6
"----------- Minisubplb/530-error-Check_Elementwise.sml ----------";
neuper@42021
     7
"----------- Minisubplb/530-error-Check_Elementwise.sml ----------";
neuper@42021
     8
"----------- Minisubplb/530-error-Check_Elementwise.sml ----------";
neuper@42394
     9
(*see also --- x / (x ^ 2 - 6 * x + 9) - 1 / (x ^ 2 - 3 * x) = 1 /x" by me ---*)
neuper@42021
    10
val fmz = ["equality (x+1=(2::real))", "solveFor x","solutions L"];
neuper@42021
    11
val (dI',pI',mI') =
neuper@42021
    12
("Test", ["sqroot-test","univariate","equation","test"],
neuper@42021
    13
["Test","squ-equ-test-subpbl1"]);
neuper@42021
    14
val (p,_,f,nxt,_,pt) = CalcTreeTEST [(fmz, (dI',pI',mI'))];
neuper@42021
    15
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
neuper@42021
    16
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
neuper@42021
    17
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
neuper@42021
    18
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
neuper@42021
    19
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
neuper@42021
    20
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
neuper@42021
    21
val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = Apply_Method ["Test", "squ-equ-test-subpbl1"]*)
neuper@42021
    22
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
neuper@42021
    23
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
neuper@55279
    24
val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = Subp ["LINEAR", "univariate", "equation", "test"]*)
neuper@42021
    25
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
neuper@42021
    26
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
neuper@42021
    27
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
neuper@42021
    28
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
neuper@42021
    29
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
neuper@42021
    30
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
neuper@42021
    31
val (p,_,f,nxt,_,pt) = me nxt p [] pt;
neuper@42451
    32
val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*OKnxt = Apply_Method ["Test", "solve_linear"]*)
neuper@42451
    33
val (p'',_,f,nxt,_,pt'') = me nxt p [] pt; (*nxt = Rewrite_Set_Inst..OK isolate_bdv*);
neuper@42451
    34
get_ctxt pt'' p'' |> is_e_ctxt; (*OKfalse*)
neuper@42451
    35
val ctxt = get_ctxt pt'' p'';
neuper@42021
    36
val SOME t = parseNEW ctxt "Check_elementwise [x = 1] {(v_v::real). Assumptions}";
neuper@42451
    37
get_loc pt'' p'' |> snd |> is_e_ctxt; (**OKfalse*)
neuper@42387
    38
neuper@42451
    39
val (p,_,f,nxt,_,pt) = me nxt p'' [] pt''; (*nxt = Rewrite_Set "Test_simplify"*);
neuper@42021
    40
get_ctxt pt p |> is_e_ctxt; (*false*)
neuper@42021
    41
val ctxt = get_ctxt pt p;
neuper@42021
    42
val SOME t = parseNEW ctxt "Check_elementwise [x = 1] {(v_v::real). Assumptions}";
neuper@42021
    43
get_loc pt p |> snd |> is_e_ctxt; (*false*)
neuper@55279
    44
val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = Check_Postcond ["LINEAR","univariate", ...]) *);
neuper@42021
    45
neuper@42021
    46
val (pt'''', p'''') = (pt, p);
neuper@42021
    47
"~~~~~ fun me, args:"; val (_,tac) = nxt;
neuper@42021
    48
val (pt, p) = case locatetac tac (pt,p) of
neuper@42021
    49
("ok", (_, _, ptp)) => ptp | _ => error "script.sml locatetac";
neuper@42021
    50
show_pt pt; (*...(([3], Res), [x = 1])]... back in root, OK *)
neuper@42021
    51
"~~~~~ fun step, args:"; val (ip as (_,p_), (ptp as (pt,p), tacis)) = (p, ((pt, e_pos'), []))
neuper@42021
    52
val pIopt = get_pblID (pt,ip); (*= SOME ["sqroot-test", "univariate", ...]*)
neuper@42021
    53
tacis; (*= []*)
neuper@42021
    54
member op = [Pbl,Met] p_ andalso is_none (get_obj g_env pt (fst p)); (*= false*)
walther@59686
    55
"~~~~~ and do_solve_step , args:"; val (ptp as (pt, pos as (p, p_))) = (pt, ip);
walther@59686
    56
    (*if*) Celem.e_metID = get_obj g_metID pt (par_pblobj pt p) (*else*);
walther@59686
    57
        val thy' = get_obj g_domID pt (par_pblobj pt p);
walther@59686
    58
	      val (srls, is, sc) = Lucin.from_pblobj_or_detail' thy' (p,p_) pt;
walther@59686
    59
walther@59686
    60
    val (Check_elementwise' _, (Pstate _, _), _) =
walther@59686
    61
           determine_next_tactic (thy', srls) (pt, pos) sc is;
walther@59699
    62
"~~~~~ fun determine_next_tactic , args:"; val ((thy, _), (ptp as (pt, (p, _))), (Rule.Prog prog), (Istate.Pstate ist, _(*ctxt*)))
walther@59686
    63
  = ((thy', srls), (pt, pos), sc, is);
walther@59686
    64
walther@59686
    65
      (*case*)
walther@59699
    66
           scan_to_tactic2 (prog, (ptp, thy)) (Istate.Pstate ist) (*of*);
walther@59699
    67
"~~~~~ fun scan_to_tactic2 , args:"; val ((prog, cct), (Istate.Pstate (ist as {path, ...})))
walther@59699
    68
  = ((prog, (ptp, thy)), (Istate.Pstate ist));
walther@59686
    69
  (*if*) 0 = length path (*else*);
walther@59686
    70
walther@59699
    71
       go_scan_up2 (prog, cct) (trans_scan_up2 ist |> set_appy Skip_);
walther@59699
    72
"~~~~~ and go_scan_up2 , args:"; val ((yyy as (prog, _)), (ist as {env, path, finish, ...}))
walther@59699
    73
  = ((prog, cct), (trans_scan_up2 ist |> set_appy Skip_));
walther@59686
    74
    (*if*) 1 < length path (*then*);
walther@59686
    75
walther@59699
    76
           scan_up2 yyy (ist |> path_up) (go_up path prog);
walther@59699
    77
"~~~~~ fun scan_up2 , args:"; val ((yyy as (prog, xxx)), (ist as {finish, ...}), (Const ("HOL.Let"(*1*), _) $ _))
walther@59699
    78
  = (yyy, (ist |> path_up), (go_up path prog));
walther@59686
    79
    (*if*) finish = Napp_ (*else*);
walther@59699
    80
        val (i, body) = check_Let_up ist prog;
walther@59686
    81
walther@59686
    82
        (*case*)
walther@59698
    83
           scan_dn2 xxx (ist |> path_up_down [R, D] |> upd_env i) body (*of*);
walther@59686
    84
    (*========== a leaf has been found ==========*)   
walther@59691
    85
"~~~~~ fun scan_dn2 , args:"; val (((pt, p), ctxt), (ist as {env, eval, ...}), t)
walther@59698
    86
  = (xxx, (ist |> path_up_down [R, D] |> upd_env i), body);
walther@59721
    87
  val (Program.Tac stac, a') = (*case*)
walther@59718
    88
      interpret_leaf "next " ctxt eval (get_subst ist) t;
walther@59686
    89
walther@59686
    90
	      val (Check_elementwise "Assumptions", Empty_Tac_) =
walther@59686
    91
           stac2tac_ pt (Celem.assoc_thy ctxt) stac;
walther@59686
    92
"~~~~~ fun stac2tac_ , args:"; val (pt, thy, (Const("Prog_Tac.Check'_elementwise",_) $ _ $
walther@59686
    93
    (set as Const ("Set.Collect",_) $ Abs (_,_,pred))))
walther@59686
    94
  = (pt, (assoc_thy th), stac);
neuper@42394
    95
neuper@42021
    96
val (p,_,f,nxt,_,pt) = me nxt p'''' [] pt''''; (*WAS nxt = ("Empty_Tac", Empty_Tac)*)
wneuper@59253
    97
case nxt of ("Check_elementwise", Check_elementwise "Assumptions") => ()
wneuper@59253
    98
| _ => error "Check_elementwise changed; after switch sub-->root-method";