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