test/Tools/isac/Knowledge/rateq.sml
author Walther Neuper <walther.neuper@jku.at>
Wed, 15 Jan 2020 11:47:38 +0100
changeset 59767 c4acd312bd53
parent 59765 3ac99a5f910b
child 59769 00612574cbfd
permissions -rw-r--r--
preps for IJCAR paper
     1 (* Title:  Test for rational equations
     2    Author: Richard Lang 2009
     3    (c) copyright due to lincense terms.
     4 *)
     5 
     6 "-----------------------------------------------------------------";
     7 "table of contents -----------------------------------------------";
     8 "-----------------------------------------------------------------";
     9 "------------ pbl: rational, univariate, equation ----------------";
    10 "------------ solve (1/x = 5, x) by me ---------------------------";
    11 "------------ S.68, Bsp.: 40, ((x)/(x - 8) + (x - 8)/(x) = 26/5)--";
    12 "------------ x / (x ^ 2 - 6 * x + 9) - 1 / (x ^ 2 - 3 * x) = 1 /x";
    13 "-----------------------------------------------------------------";
    14 "-----------------------------------------------------------------";
    15 
    16 val thy = @{theory "RatEq"};
    17 val ctxt = Proof_Context.init_global thy;
    18 
    19 "------------ pbl: rational, univariate, equation ----------------";
    20 "------------ pbl: rational, univariate, equation ----------------";
    21 "------------ pbl: rational, univariate, equation ----------------";
    22 val t = (Thm.term_of o the o (parse thy)) "(1/b+1/x=1) is_ratequation_in  x";
    23 val SOME (t_, _) = rewrite_set_ thy  false RatEq_prls t;
    24 val result = term2str t_;
    25 if result <>  "True"  then error "rateq.sml: new behaviour 1:" else ();
    26 
    27 val t = (Thm.term_of o the o (parse thy)) "(sqrt(x)=1) is_ratequation_in  x";
    28 val SOME (t_, _) = rewrite_set_ thy  false RatEq_prls t;
    29 val result = term2str t_;
    30 if result <>  "False"  then error "rateq.sml: new behaviour 2:" else ();
    31 
    32 val t = (Thm.term_of o the o (parse thy)) "(x=-1) is_ratequation_in x";
    33 val SOME (t_,_) = rewrite_set_ thy  false RatEq_prls t;
    34 val result = term2str t_;
    35 if result <>  "False"  then error "rateq.sml: new behaviour 3:" else ();
    36 
    37 val t = (Thm.term_of o the o (parse thy)) "(3 + x^^^2 + 1/(x^^^2+3)=1) is_ratequation_in x";
    38 val SOME (t_,_) = rewrite_set_ thy  false RatEq_prls t;
    39 val result = term2str t_;
    40 if result <>  "True"  then error "rateq.sml: new behaviour 4:" else ();
    41 
    42 val result = match_pbl ["equality (x=(1::real))","solveFor x","solutions L"] 
    43   (get_pbt ["rational","univariate","equation"]); 
    44 case result of NoMatch' _  => ()  | _ => error "rateq.sml: new behaviour: 5";
    45 
    46 val result = match_pbl ["equality (3 + x^^^2 + 1/(x^^^2+3)=1)","solveFor x","solutions L"] 
    47   (get_pbt ["rational","univariate","equation"]); 
    48 case result of Matches' _  => ()  | _ => error "rateq.sml: new behaviour: 6";
    49 
    50 "------------ solve (1/x = 5, x) by me ---------------------------";
    51 "------------ solve (1/x = 5, x) by me ---------------------------";
    52 "------------ solve (1/x = 5, x) by me ---------------------------";
    53 val fmz = ["equality (1/x=(5::real))","solveFor x","solutions L"];
    54 val (dI',pI',mI') = ("RatEq",["univariate","equation"],["no_met"]);
    55 val (p,_,f,nxt,_,pt) = CalcTreeTEST [(fmz, (dI',pI',mI'))];
    56 (* val (p,_,f,nxt,_,pt) = me nxt p [1] pt;------------- now Refine_Tacitly*)
    57 (*  nxt = ("Model_Problem",Model_Problem ["rational","univariate","equation"]) *)
    58 val (p,_,f,nxt,_,pt) = me nxt p [1] pt;val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
    59 val (p,_,f,nxt,_,pt) = me nxt p [1] pt;val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
    60 val (p,_,f,nxt,_,pt) = me nxt p [1] pt;val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
    61 val (p,_,f,nxt,_,pt) = me nxt p [1] pt;val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
    62 
    63 case nxt of ("Rewrite_Set", Rewrite_Set "RatEq_eliminate") => () | _ => ((*not checked before*));
    64 val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
    65 (*
    66 WN120317.TODO dropped rateq: here "x ~= 0 should at_location to ctxt, but it does not:
    67  --- repair NO asms from rls RatEq_eliminate --- shows why.
    68 so it needs more effort to find out, how Check_elementwise worked in 2002, see below.
    69 *)
    70 
    71 (* val nxt = (_,Subproblem ("RatEq",["univariate","equation"] ======= *)
    72 val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
    73 (* val (p,_,f,nxt,_,pt) = me nxt p [1] pt;------------- now Refine_Tacitly*)
    74 (*val nxt = ("Model_Problem", Model_Problem ["normalise","polynomial","univariate","equation"])*) 
    75 val (p,_,f,nxt,_,pt) = me nxt p [1] pt;val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
    76 val (p,_,f,nxt,_,pt) = me nxt p [1] pt;val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
    77 val (p,_,f,nxt,_,pt) = me nxt p [1] pt;val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
    78 val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
    79 (*val nxt = Apply_Method ["PolyEq", "normalise_poly"])*)
    80 val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
    81 val (p,_,f,nxt,_,pt) = me nxt p [1] pt;val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
    82 (* val nxt = (_,Subproblem ("PolyEq",["polynomial","univariate","equation"]=======*)
    83 val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
    84 val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
    85 (*  ("Model_Problem", Model_Problem ["degree_1","polynomial","univariate","equation"])*)
    86 val (p,_,f,nxt,_,pt) = me nxt p [1] pt;val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
    87 val (p,_,f,nxt,_,pt) = me nxt p [1] pt;val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
    88 val (p,_,f,nxt,_,pt) = me nxt p [1] pt;val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
    89 val (p,_,f,nxt,_,pt) = me nxt p [1] pt;val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
    90 val (p,_,f,nxt,_,pt) = me nxt p [1] pt;val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
    91 val (p,_,f,nxt,_,pt) = me nxt p [1] pt;val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
    92 val (p''',_,f,nxt''',_,pt''') = me nxt p [1] pt;
    93 f2str f = "[x = 1 / 5]";
    94 case nxt of ("Check_elementwise", Check_elementwise "Assumptions") => () | _ => ((*not checked before*));
    95 "~~~~~ fun me, args:"; val (tac, (p:pos'), _, (pt:ctree)) = (nxt, p, c, pt);
    96 val (pt, p) = case locatetac tac (pt,p) of
    97 ("ok", (_, _, ptp)) => ptp | _ => error "--- solve (1/x = 5.. locatetac";
    98 "~~~~~ fun Step.do_next, args:"; val (ip as (_,p_), (ptp as (pt,p), tacis)) = (p, ((pt, e_pos'), []))
    99 val pIopt = get_pblID (pt,ip); (*= SOME ["rational", "univariate", "equation"]
   100                        1-1 associated to metID ["RatEq", "solve_rat_equation"]*)
   101 tacis; (*= []*)
   102 member op = [Pbl,Met] p_ andalso is_none (get_obj g_env pt (fst p)); (*= false*)
   103 "~~~~~ fun do_next, args:"; val (ptp as (pt, pos as (p, p_))) = (pt, ip);
   104 val thy' = get_obj g_domID pt (par_pblobj pt p);
   105 val (srls, is, sc) = from_pblobj_or_detail' thy' (p,p_) pt; (*is: which ctxt?*)
   106 "~~~~~ fun find_next_tactic, args:"; val () = ();
   107 (*----- outcommented during cleanup of args in lucas-interpreter.sml ------------------------\\* )
   108 "~~~~~ fun go_scan_up2, args:"; val (thy, ptp, (Prog sc), E, l, ay, a, v) =
   109 (thy, ptp, sc, E, l, Skip_, a, v);
   110 1 < length l; (*true*)
   111 val up = drop_last l;
   112 at_location up sc; (* = Const ("HOL.Let", *)
   113 "~~~~~ fun scan_up2, args:"; val (thy, ptp, (scr as (Prog sc)), E, l, ay,
   114  (t as Const ("HOL.Let",_) $ _), a, v) = (thy, ptp, (Prog sc), E, up, ay, (at_location up sc), a, v);
   115 ay = Napp_; (*false*)
   116 val up = drop_last l;
   117 val (Const ("HOL.Let",_) $ e $ (Abs (i,T,body))) = at_location up sc; (*Const ("Prog_Tac.SubProblem",..*)
   118 val i = mk_Free (i, T);
   119 val E = Env.update E (i, v);
   120 "~~~~~ fun scan_dn2, args:"; val ((thy as (th,sr)), (pt, p), E, l, t, a, v) =
   121   (thy, ptp, E, (up@[R,D]), body, a, v);
   122 "~~~~~ fun interpret_leaf, args:"; val (call, thy, srls, (E, (a, v)), t) = ("next ", th, sr, (E, (a, v)), t);
   123 "~~~~~ fun eval_leaf, args:"; val (E, a, v, 
   124 	  (t as (Const ("Prog_Tac.Check'_elementwise",_) $ _ $ _ ))) = (E, a, v, t);
   125 val Program.Tac tm = Program.Tac (subst_atomic E t);
   126 term2str tm = "Check_elementwise [x = 1 / 5] {v_v. Assumptions}";
   127 (*                                     ------ ^^^ ----- ? "x" ?*)
   128 "~~~~~ to interpret_leaf return val:"; val ((Program.Tac stac, a')) = ((Program.Tac (subst_atomic E t), NONE));
   129 val stac' = eval_prog_expr (assoc_thy thy) srls (subst_atomic (upd_env_opt E (a,v)) stac);
   130 term2str stac' = "Check_elementwise [x = 1 / 5] {v_v. Assumptions}";
   131 "~~~~~ to scan_dn2 return val:"; val ((a', Program.Tac stac)) = ((a', Program.Tac stac'));
   132 val (m,m') = stac2tac_ pt (assoc_thy th) stac;
   133 case m of Check_elementwise "Assumptions" => () | _ => (); (*m' = Empty_Tac_ ???!??? *);
   134 val (p''''', pt''''', m''''') = (p, pt, m);
   135 "~~~~~ fun applicable_in, args:"; val ((p,p_), pt, (m as Check_elementwise pred)) = (p, pt, m);
   136 member op = [Pbl,Met] p_; (* = false*)
   137         val pp = par_pblobj pt p; 
   138         val thy' = (get_obj g_domID pt pp):theory';
   139         val thy = assoc_thy thy'
   140         val metID = (get_obj g_metID pt pp)
   141         val {crls,...} =  get_met metID
   142         val (f,asm) = case p_ of Frm => (get_obj g_form pt p , [])
   143                                | Res => get_obj g_result pt p;
   144 term2str f = "[x = 1 / 5]"; (*the current formula*)
   145         val vp = (thy2ctxt thy, pred) |-> parseNEW |> the |> mk_set thy pt p f;
   146 val (bdv, asms) = vp;
   147 
   148 term2str bdv = "x";
   149 terms2str asms = (* asms from rewriting are missing : vvv *)
   150   ("[\"<not> matches (?a = 0) (1 = 5 * x) | ~ lhs (1 = 5 * x) is_poly_in x\",\"x = 1 / 5\"," ^
   151    "\"lhs (1 + -5 * x = 0) is_poly_in x\",\"lhs (1 + -5 * x = 0) has_degree_in x = 1\"," ^
   152    "\"1 / x = 5 is_ratequation_in x\"]");
   153 (*
   154 WN120317.TODO dropped rateq: ctxt should contain "x ~= 0 here, but it does not, see above.
   155 *)
   156 
   157 val Appl (Check_elementwise' (curr_form, pred, (res, asms))) = applicable_in p''''' pt''''' m''''';
   158 term2str curr_form = "[x = 1 / 5]";
   159 pred = "Assumptions";
   160 res = str2term "[]::bool list";
   161 asms = [];
   162 
   163 val (p,_,f,nxt,_,pt) = me nxt''' p''' [] pt'''; (*<<<----- this caused the error*)
   164 f2str f = "[]";
   165 val (p,_,f,nxt,_,pt) = me nxt p [1] pt;val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
   166 
   167 if p = ([], Res) andalso f2str f = "[x = 1 / 5]"
   168 then case nxt of ("End_Proof'", End_Proof') => ()
   169   | _ => error "rateq.sml: new behaviour: [x = 1 / 5] 1"
   170 else error "rateq.sml: new behaviour: [x = 1 / 5] 2";
   171 ( *----- outcommented during cleanup of args in lucas-interpreter.sml ------------------------//*)
   172 
   173 "------------ S.68, Bsp.: 40, ((x)/(x - 8) + (x - 8)/(x) = 26/5)--";
   174 "------------ S.68, Bsp.: 40, ((x)/(x - 8) + (x - 8)/(x) = 26/5)--";
   175 "------------ S.68, Bsp.: 40, ((x)/(x - 8) + (x - 8)/(x) = 26/5)--";
   176 (*EP Schalk_II_p68_n40*)
   177 val fmz = ["equality ((x)/(x - 8) + (x - 8)/(x) = 26/(5::real))","solveFor x","solutions L"];
   178 val (dI',pI',mI') = ("RatEq",["univariate","equation"],["no_met"]);
   179 val (p,_,f,nxt,_,pt) = CalcTreeTEST [(fmz, (dI',pI',mI'))];
   180 val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
   181 (* nxt = ("Model_Problem",Model_Problem ["rational","univariate","equation"])*)
   182 val (p,_,f,nxt,_,pt) = me nxt p [1] pt;val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
   183 val (p,_,f,nxt,_,pt) = me nxt p [1] pt;val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
   184 val (p,_,f,nxt,_,pt) = me nxt p [1] pt;val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
   185 val (p,_,f,nxt,_,pt) = me nxt p [1] pt;val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
   186 val (p,_,f,nxt,_,pt) = me nxt p [1] pt;val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
   187 val (p,_,f,nxt,_,pt) = me nxt p [1] pt;val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
   188 (* nxt = ("Subproblem",Subproblem ("RatEq",["univariate","equation"]))*)
   189 val (p,_,f,nxt,_,pt) = me nxt p [1] pt;val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
   190 (* nxt = ("Model_Problem", Model_Problem ["normalise","polynomial","univariate","equation"])*)
   191 val (p,_,f,nxt,_,pt) = me nxt p [1] pt;val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
   192 val (p,_,f,nxt,_,pt) = me nxt p [1] pt;val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
   193 val (p,_,f,nxt,_,pt) = me nxt p [1] pt;val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
   194 val (p,_,f,nxt,_,pt) = me nxt p [1] pt;val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
   195 val (p,_,f,nxt,_,pt) = me nxt p [1] pt;val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
   196 
   197 if p = ([4, 3], Pbl) then ()
   198 else
   199   (case nxt of
   200     ("Add_Given", Add_Given "solveFor x") =>
   201       (case f of
   202         PpcKF (Problem [], {Given = [Incompl "solveFor", Correct "equality (320 + 128 * x + -16 * x ^^^ 2 = 0)"], ...}) => ()
   203       | _ => error ("S.68, Bsp.: 40 PblObj changed"))
   204   | _ => error ("S.68, Bsp.: 40 changed nxt =" ^ tac2str (snd nxt)));
   205 
   206 val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
   207 (* ("Subproblem", Subproblem ("PolyEq",["polynomial","univariate","equation"])) *)
   208 val (p,_,f,nxt,_,pt) = me nxt p [1] pt;val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
   209 (* nxt = ("Model_Problem", Model_Problem
   210      ["abcFormula","degree_2","polynomial","univariate","equation"])*)
   211 val (p,_,f,nxt,_,pt) = me nxt p [1] pt;val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
   212 val (p,_,f,nxt,_,pt) = me nxt p [1] pt;val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
   213 val (p,_,f,nxt,_,pt) = me nxt p [1] pt;val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
   214 val (p,_,f,nxt,_,pt) = me nxt p [1] pt;val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
   215 val (p,_,f,nxt,_,pt) = me nxt p [1] pt;val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
   216 val (p,_,f,nxt,_,pt) = me nxt p [1] pt;val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
   217 val (p,_,f,nxt,_,pt) = me nxt p [1] pt;val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
   218 if p = ([], Res) andalso f2str f = "[]" then () 
   219 else error "rateq.sml: new behaviour: [x = -2, x = 10]";
   220 
   221 "------------ x / (x ^ 2 - 6 * x + 9) - 1 / (x ^ 2 - 3 * x) = 1 /x";
   222 "------------ x / (x ^ 2 - 6 * x + 9) - 1 / (x ^ 2 - 3 * x) = 1 /x";
   223 "------------ x / (x ^ 2 - 6 * x + 9) - 1 / (x ^ 2 - 3 * x) = 1 /x";
   224 (*ER-7*) (*Schalk I s.87 Bsp 55b*)
   225 val fmz = ["equality (x/(x^^^2 - 6*x+9) - 1/(x^^^2 - 3*x) =1/x)",
   226 	   "solveFor x","solutions L"];
   227 val (dI',pI',mI') = ("RatEq",["univariate","equation"],["no_met"]);
   228 val (p,_,f,nxt,_,pt) = CalcTreeTEST [(fmz, (dI',pI',mI'))];
   229 val (p,_,f,nxt,_,pt) = me nxt p [1] pt; val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
   230 val (p,_,f,nxt,_,pt) = me nxt p [1] pt; val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
   231 val (p,_,f,nxt,_,pt) = me nxt p [1] pt; val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
   232 val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
   233 case nxt of ("Apply_Method", Apply_Method ["RatEq", "solve_rat_equation"]) => ()
   234 | _ => error "55b root specification broken";
   235 val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
   236 val (p,_,f,nxt,_,pt) = me nxt p [1] pt; val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
   237 val (p,_,f,nxt,_,pt) = me nxt p [1] pt; val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
   238 val (p,_,f,nxt,_,pt) = me nxt p [1] pt; val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
   239 val (p,_,f,nxt,_,pt) = me nxt p [1] pt; val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
   240 val (p,_,f,nxt,_,pt) = me nxt p [1] pt; val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
   241 val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
   242 case nxt of ("Apply_Method", Apply_Method ["PolyEq", "normalise_poly"]) => ()
   243 | _ => error "55b normalise_poly specification broken 1";
   244 val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
   245 val (p,_,f,nxt,_,pt) = me nxt p [1] pt; val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
   246 val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
   247 if p = ([4, 3], Res) andalso f2str f = "-6 * x + 5 * x ^^^ 2 = 0"
   248 then
   249   ((case nxt of
   250     ("Subproblem", Subproblem ("PolyEq", ["bdv_only", "degree_2", "polynomial", "univariate", "equation"])) => ()
   251   | _ => error ("S.68, Bsp.: 40 nxt =" ^ tac2str (snd nxt))))
   252 else error "xxx";
   253 val (p,_,f,nxt,_,pt) = me nxt p [1] pt; val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
   254 val (p,_,f,nxt,_,pt) = me nxt p [1] pt; val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
   255 val (p,_,f,nxt,_,pt) = me nxt p [1] pt; val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
   256 val (p,_,f,nxt,_,pt) = me nxt p [1] pt; val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
   257 case nxt of ("Apply_Method", Apply_Method ["PolyEq", "solve_d2_polyeq_bdvonly_equation"]) => ()
   258 | _ => error "55b normalise_poly specification broken 2";
   259 val (p,_,f,nxt,_,pt) = me nxt p [1] pt; val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
   260 val (p,_,f,nxt,_,pt) = me nxt p [1] pt; val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
   261 val (p,_,f,nxt,_,pt) = me nxt p [1] pt; val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
   262 val (p,_,f,nxt,_,pt) = me nxt p [1] pt; val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
   263 
   264 f2str f = "[x = 0, x = 6 / 5]";                                                        (*= GUI*)
   265 case snd nxt of Check_elementwise "Assumptions" => () | _ => ((*not checked before*)); (*= GUI*)
   266 if terms2str (get_assumptions_ pt p) = "[\"x = 6 / 5\"," ^
   267   "\"x = 0\"," ^
   268   "\"lhs (-6 * x + 5 * x ^^^ 2 = 0) is_poly_in x\"," ^
   269   "\"lhs (-6 * x + 5 * x ^^^ 2 = 0) has_degree_in x = 2\"]"
   270 then () else error "rateq.sml: diff.behav. in I s.87 Bsp 55b [x = 6 / 5], asms";
   271 
   272 (*
   273 WN120317.TODO dropped rateq: ctxt should contain "x ~= 0 here, but it does not.
   274 
   275 The step-into-source contains an error; this error can be detected by
   276 test --- 'trace_script' from outside 'fun me '---
   277 *)
   278 val (pt''', p''') = (pt, p);
   279 "~~~~~ fun me, args:"; val (tac, (p:pos'), _, (pt:ctree)) = (nxt, p, c, pt);
   280     val (pt, p) = case locatetac tac (pt,p) of
   281 		      ("ok", (_, _, ptp)) => ptp  | _ => error "error in test setup";
   282 "~~~~~ Step.do_next, args:"; val (((ip as (_,p_)):pos'), ((ptp as (pt,p), tacis):calcstate)) =
   283   (p, ((pt, e_pos'),[]));
   284 val pIopt = get_pblID (pt,ip);
   285 ip = ([],Res); (* = false*)
   286 tacis; (* = []*)
   287 member op = [Pbl,Met] p_ andalso is_none (get_obj g_env pt (fst p)); (* = false*)
   288 "~~~~~ and do_next, args:"; val ((ptp as (pt, pos as (p,p_)))) = ((pt,ip));
   289 e_metID = get_obj g_metID pt (par_pblobj pt p); (* = false*)
   290           val thy' = get_obj g_domID pt (par_pblobj pt p);
   291 	        val (srls, is, sc) = from_pblobj_or_detail' thy' (p,p_) pt;
   292 "~~~~~ fun find_next_tactic, args:"; val (thy, (ptp as (pt, pos as (p, _)):ctree * pos'),
   293   (sc as Prog (h $ body)), (Pstate (E,l,a,v,s,b), ctxt)) = ((thy',srls), (pt,pos), sc, is);
   294 (*----- outcommented during cleanup of args in lucas-interpreter.sml ------------------------\\* )
   295 l = []; (* = false*)
   296 "~~~~~ and go_scan_up2, args:"; val (thy, ptp, (Prog sc), E, l, ay, a, v) =
   297   (thy, ptp, sc, E, l, Skip_, a, v);
   298 1 < length l; (* = true*)
   299 val up = drop_last l; 
   300 (*val (t as Abs (_,_,_)) = *)(at_location up sc); 
   301 "~~~~~ fun scan_up2, args:"; val (thy, ptp, scr, E, l, ay, (t as Abs (_,_,_)), a, v) =
   302   (thy, ptp, (Prog sc), E, up, ay, (at_location up sc), a, v);
   303 term2str t = "%L_La. Check_elementwise L_L {v_v. Assumptions}";
   304 "~~~~~ and go_scan_up2, args:"; val (thy, ptp, (Prog sc), E, l, ay, a, v) =
   305   (thy, ptp, scr, E, l, ay, a, v);
   306 1 < length l; (* = true*)
   307 val up = drop_last l; 
   308 (*val (t as Const ("HOL.Let",_) $ e $ (Abs (i,T,b))) = *)(at_location up sc);
   309 "~~~~~ fun scan_up2, args:"; val (thy, ptp, scr, E, l, ay,
   310     (t as Const ("HOL.Let",_) $ e $ (Abs (i,T,b))), a, v) = (thy, ptp, (Prog sc), E, up, ay, (at_location up sc), a, v);
   311 
   312 term2str t = "let L_La =\n      SubProblem (RatEqX, [univariate, equation], [no_met])\n       [BOOL e_e, REAL v_v]\nin Check_elementwise L_L {v_v. Assumptions}";
   313 
   314 (* comment from BEFORE Isabelle2002 --> 2011:
   315 scan_up2 thy ptp (Prog sc) E up ay (at_location up sc) a v;
   316 go_scan_up2 thy ptp scr E l ay a v;
   317 scan_up2 thy ptp (Prog sc) E up ay (at_location up sc) a v;
   318 go_scan_up2 thy ptp sc E l Skip_ a v;
   319 find_next_tactic sc (pt,pos) is (*is as (ist, ctxt) ---> ist ctxt*);
   320 Step_Solve.do_next (pt,ip);
   321 Step.do_next p ((pt, e_pos'),[]);
   322 *)
   323 val (p,_,f,nxt,_,pt) = me nxt p''' [1] pt''';
   324 val (p,_,f,nxt,_,pt) = me nxt p [1] pt;
   325 
   326   if p = ([], Res) andalso f2str f = "[]"
   327   then case nxt of ("End_Proof'", End_Proof') => ()
   328     | _ => error "rlang.sml: diff.behav. in  Schalk I s.87 Bsp 55b [x = 6 / 5] 1"
   329   else error "rlang.sml: diff.behav. in  Schalk I s.87 Bsp 55b [x = 6 / 5] 2";
   330 ( *----- outcommented during cleanup of args in lucas-interpreter.sml ------------------------//*)
   331