test/Tools/isac/IsacKnowledge/diffapp.sml
branchisac-update-Isa09-2
changeset 37906 e2b23ba9df13
child 37924 6c53fe2519e5
     1.1 --- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2 +++ b/test/Tools/isac/IsacKnowledge/diffapp.sml	Thu Aug 12 11:02:32 2010 +0200
     1.3 @@ -0,0 +1,752 @@
     1.4 +(* tests for IsacKnowledge/DiffApp
     1.5 +   author Walther Neuper 000301
     1.6 +   (c) due to copyright terms
     1.7 +
     1.8 +   use"../smltest/IsacKnowledge/diffapp.sml";
     1.9 +   use"diffapp.sml";
    1.10 +*)
    1.11 +
    1.12 +"Contents----------------------------------------------";
    1.13 +"              Specify_Problem (match_itms_oris)       ";
    1.14 +"              test specify, fmz <> []                  ";
    1.15 +"              test specify, fmz = []                  ";
    1.16 +"          problemtypes + formalizations               ";
    1.17 +"-------------------- ptree of {(a,b). is-max ... ----------------";
    1.18 +"--------- me .. scripts for maximum-example ---------------------";
    1.19 +"--------- autoCalc .. scripts for maximum-example ---------------";
    1.20 +
    1.21 +"--------------------- 30.4.03: maximum .. rewrite_set_ list_rls ---------";
    1.22 +"---------------------- 1.5.03: Make_fun_by_explicit ---------------------";
    1.23 +"---------------------- 2.5.03: Make_fun_by_new_variable -----------------";
    1.24 +
    1.25 +
    1.26 +
    1.27 +
    1.28 +
    1.29 +" #################################################### ";
    1.30 +"          problemtypes + formalizations               ";
    1.31 +" #################################################### ";
    1.32 +" -------------- [maximum_of,function] --------------- ";
    1.33 +val pbt = 
    1.34 +    ["fixedValues fix_","maximum m_","valuesFor vs_","relations rs_"];
    1.35 +map (the o (parseold thy)) pbt;
    1.36 +val fmz =
    1.37 +    ["fixedValues [r=Arbfix]","maximum A",
    1.38 +     "valuesFor [a,b]",
    1.39 +     "relations [A=a*b, (a/2)^^^2 + (b/2)^^^2 = r^^^2]",
    1.40 +     "relations [A=a*b, (a/2)^^^2 + (b/2)^^^2 = r^^^2]",
    1.41 +     "relations [A=a*b, a/2=r*sin alpha, b/2=r*cos alpha]",
    1.42 +
    1.43 +     "boundVariable a","boundVariable b","boundVariable alpha",
    1.44 +     "interval {x::real. 0 <= x & x <= 2*r}",
    1.45 +     "interval {x::real. 0 <= x & x <= 2*r}",
    1.46 +     "interval {x::real. 0 <= x & x <= pi}",
    1.47 +     "errorBound (eps=(0::real))"];
    1.48 +map (the o (parseold thy)) fmz;
    1.49 +" -------------- [make,function] -------------- ";
    1.50 +val pbt = 
    1.51 +    ["functionOf f_","boundVariable v_","equalities eqs_",
    1.52 +     "functionTerm f_0_"];
    1.53 +map (the o (parseold thy)) pbt;
    1.54 +val fmz12 =
    1.55 +    ["functionOf A","boundVariable a","boundVariable b",
    1.56 +     "equalities [A=a*b, (a/2)^^^2 + (b/2)^^^2 = r^^^2]",
    1.57 +     (*28.11.00: "functionTerm (A_0=Undef)"*)"functionTerm (Undef)"];
    1.58 +map (the o (parseold thy)) fmz12;
    1.59 +val fmz3 =
    1.60 +    ["functionOf A","boundVariable a","boundVariable b",
    1.61 +     "equalities [A=a*b, a/2=r*sin alpha, b/2=r*cos alpha]",
    1.62 +     (*28.11.00: "functionTerm (A_0=Undef)"*)"functionTerm (Undef)"];
    1.63 +map (the o (parseold thy)) fmz3;
    1.64 +" --------- [univar,equation] --------- ";
    1.65 +val pbt = 
    1.66 +    ["equality e_","solveFor v_","solutions v_i_"];
    1.67 +map (the o (parseold thy)) pbt;
    1.68 +val fmz =
    1.69 +    ["equality ((a/2)^^^2 + (b/2)^^^2 = r^^^2)",
    1.70 +     "solveFor b","solutions b_i"];
    1.71 +map (the o (parseold thy)) fmz;
    1.72 +" ---- [on_interval,maximum_of,function] ---- ";
    1.73 +val pbt = 
    1.74 +    ["functionTerm t_","boundVariable v_","interval itv_",
    1.75 +     "errorBound err_","maxArgument v_0_"];
    1.76 +map (the o (parseold thy)) pbt;
    1.77 +val fmz12 =
    1.78 +    [(*28.11.00: "functionTerm (A_0 = a*sqrt(#4*r^^^#2 - a^^^#2))",*)
    1.79 +     "functionTerm (a*sqrt(4*r^^^2 - a^^^2))",
    1.80 +     (*28.11.00: "functionTerm (A_0 = b*sqrt(#4*r^^^#2 - b^^^#2))",*)
    1.81 +     "functionTerm (b*sqrt(4*r^^^2 - b^^^2))",
    1.82 +     "boundVariable a","boundVariable b",
    1.83 +     "interval {x::real. 0 <= x & x <= 2*r}",
    1.84 +     "errorBound (eps=0)","maxArgument (a_0=Undef)"];
    1.85 +map (the o (parseold thy)) fmz12;
    1.86 +val fmz3 =
    1.87 +    [(*28.11.00: "functionTerm (A_0 = (#2*r*sin alpha)*(#2*r*cos alpha))",*)
    1.88 +     "functionTerm ((2*r*sin alpha)*(2*r*cos alpha))",
    1.89 +     "boundVariable alpha",
    1.90 +     "interval {x::real. 0 <= x & x <= pi}",
    1.91 +     "errorBound (eps=0)","maxArgument (a_0=Undef)"];
    1.92 +map (the o (parseold thy)) fmz3;
    1.93 +" --------- [derivative_of,function] --------- ";
    1.94 +val pbt = 
    1.95 +    ["functionTerm f_","boundVariable v_","derivative f_'_"];
    1.96 +map (the o (parseold thy)) pbt;
    1.97 +val fmz =
    1.98 +    [(*28.11.00: "functionTerm (A_0=a*#2*sqrt r^^^#2 - (a//#2)^^^#2)",*)
    1.99 +     "functionTerm (a*2*sqrt r^^^2 - (a/2)^^^2)",
   1.100 +     "boundVariable a",
   1.101 +     (*28.11.00: "derivative (A_0'=Undef)"*)"derivative (Undef)"];
   1.102 +map (the o (parseold thy)) fmz;
   1.103 +" --------- [find_values,tool] --------- ";
   1.104 +val pbt = 
   1.105 +    ["maxArgument ma_","functionTerm f_","boundVariable v_",
   1.106 +     "valuesFor vls_","additionalRels rs_"];
   1.107 +map (the o (parseold thy)) pbt;
   1.108 +val fmz1 =
   1.109 +    ["maxArgument (a_0=(srqt 2)*r)",
   1.110 +     (*28.11.00: "functionTerm (A_0=a*#2*sqrt r^^^#2 - (a//#2)^^^#2)",*)
   1.111 +     "functionTerm (a*2*sqrt r^^^2 - (a/2)^^^2)",
   1.112 +     "boundVariable a",
   1.113 +     "valuesFor [a,b]","maximum A",
   1.114 +     "additionalRels [(a/2)^^^2 + (b/2)^^^2 = r^^^2]"];
   1.115 +map (the o (parseold thy)) fmz1;
   1.116 +
   1.117 +
   1.118 +
   1.119 +"-------------------- ptree of {(a,b). is-max ... --------------------------";
   1.120 +"-------------------- ptree of {(a,b). is-max ... --------------------------";
   1.121 +"-------------------- ptree of {(a,b). is-max ... --------------------------";
   1.122 +
   1.123 +(* Teil von max-on-surface.sml,
   1.124 +   der nach Init_Proof -> prep_ori wieder l"auft
   1.125 +   (f"ur tests mit neuer pos')
   1.126 +   use"test-max-surf1.sml";
   1.127 +
   1.128 +   Compiler.Control.Print.printDepth:=7; (*4 is default*)
   1.129 +   Compiler.Control.Print.printDepth:=4; (*4 is default*)
   1.130 +   *)
   1.131 +
   1.132 +(* --vvv-- ausgeliehen von test-root-equ/sml *)
   1.133 +val loc = e_istate;
   1.134 +val (dI',pI',mI') =
   1.135 +  ("Script.thy",["sqroot-test","univariate","equation"],
   1.136 +   ["Script","squ-equ-test2"]);
   1.137 +val fmz = ["equality (sqrt(9+4*x)=sqrt x + sqrt(5+x))",
   1.138 +	   "solveFor x","errorBound (eps=0)",
   1.139 +	   "solutions L"];
   1.140 +(*
   1.141 +val (mI,m) = ("Init_Proof",Init_Proof (fmz, (dI',pI',mI')));
   1.142 +val ((p,p_),_,_,_,_,(_,pt,_)) = do_ (mI,m) e_pos'[1](e_scr,EmptyPtree,[]);
   1.143 + --^^^-- ausgeliehen von test-root-equ/sml *)
   1.144 +(*-------------- 9.6.03 --- cappend_ ... term -------irreparabler test
   1.145 +val (pt,_) = 
   1.146 +  cappend_problem EmptyPtree [] loc ([],(dI',pI',mI'));
   1.147 +val pos = (lev_on o lev_dn) [];
   1.148 +(* val pos = ([1]) *)
   1.149 +val (pt,_) = cappend_parent pt pos loc "{(a,b). is-max ..." 
   1.150 +    Empty_Tac TransitiveB;
   1.151 +val pos = (lev_on o lev_dn) pos;
   1.152 +(*val pos = ([1,1])*)
   1.153 +val (pt,_) = cappend_atomic pt pos loc "{(a,b). is-max ..." 
   1.154 +    Empty_Tac ("[1,1]:{(a,b). is-extremum ...",[]) Complete;
   1.155 +val pos = lev_on pos;
   1.156 +(*val pos = ([1,2])*)
   1.157 +val (pt,_) = cappend_atomic pt pos loc "{(a,b). is-extremum ..." 
   1.158 +    Empty_Tac ("[1,2]:{(a,b). f_x(a,b) ...",[]) Complete;
   1.159 +val pos = lev_up pos;
   1.160 +(*val pos = ([1])*)
   1.161 +val (pt,_) = append_result pt pos e_istate ("[1#]:{(a,b). f_x(a,b) ...",[])
   1.162 +    Complete;
   1.163 +
   1.164 +val pos = lev_on pos;
   1.165 +(*val pos = ([2]) *)
   1.166 +val (pt,_) = cappend_atomic pt pos loc "{(a,b). f_x(a,b) ..." 
   1.167 +    Empty_Tac ("[2]:{(a,b). f_x & f_xx &...",[]) Complete;
   1.168 +val pos = lev_on pos;
   1.169 +(*al pos = [3] : pos*)
   1.170 +val (pt,_) = cappend_parent pt pos loc "{(a,b). f_x & f_xx &..." 
   1.171 +    Empty_Tac TransitiveB;
   1.172 +val pos = (lev_on o lev_dn) pos;
   1.173 +(*pos = ([3,1]) *)
   1.174 +val (pt,_) = cappend_atomic pt pos loc "{(a,b). f_x & f_xx & ..." 
   1.175 +    Empty_Tac ("[3,1]:{(a,b). f_x & f_xx } cup ...",[]) Complete;
   1.176 +val pos = lev_on pos;
   1.177 +(*pos = ([3,2]) *)
   1.178 +val (pt,_) = cappend_atomic pt pos loc "{(a,b). f_x & f_xx } cup.."
   1.179 +    Empty_Tac ("[3,2]:{(a,b). f_x ..} cup ...",[]) Complete;
   1.180 +
   1.181 +val pos = lev_up pos;
   1.182 +(*pos = ([3]) *)
   1.183 +val (pt,_) = append_result pt pos e_istate ("[3#]:{(a,b). f_x ..} cup..",[])
   1.184 +    Complete;
   1.185 +val pos = lev_on pos;
   1.186 +(*val pos = [4] : pos *)
   1.187 +val (pt,_) = cappend_parent pt pos loc "{(a,b). f_x ..} cup ..." 
   1.188 +    Empty_Tac IntersectB;
   1.189 +val pos = (lev_on o lev_dn) pos;
   1.190 +(*val pos = ([4,1]) *)
   1.191 +val (pt,_) = cappend_parent pt pos loc "set_1 = ..." 
   1.192 +    Empty_Tac SequenceB;
   1.193 +
   1.194 +
   1.195 +val pos = (lev_on o lev_dn) pos;
   1.196 +(*val pos = ([4,1,1]) *)
   1.197 +val (pt,_) = cappend_parent(*pbl*) pt pos loc"f_x = d/dx x^3 ..."
   1.198 +    Empty_Tac TransitiveB;
   1.199 +val pos = (lev_on o lev_dn) pos;
   1.200 +(*val pos = ([4,1,1,1]) *)
   1.201 +val (pt,_) = cappend_parent pt pos loc "d/dx x^3 ..." 
   1.202 +    Empty_Tac TransitiveB;
   1.203 +val pos = (lev_on o lev_dn) pos;
   1.204 +(*val pos = ([4,1,1,1,1]) *)
   1.205 +val (pt,_) = cappend_atomic pt pos loc "d/dx x^3 ..." 
   1.206 +    Empty_Tac ("[4,1,1,1,1]:3x^2 + d/dx ...",[]) Complete;
   1.207 +val pos = lev_on pos;
   1.208 +(*val pos = ([4,1,1,1,2]) *)
   1.209 +val (pt,_) = cappend_atomic pt pos loc "3x^2 + d/dx ..." 
   1.210 +    Empty_Tac ("[4,1,1,1,2]:3x^2 + 0 + d/dx ...",[]) Complete;
   1.211 +val pos = lev_on pos;
   1.212 +(*pos = ([4,1,1,1,3]) *)
   1.213 +val (pt,_) = cappend_atomic pt pos loc "3x^2 + 0 + d/dx ..." 
   1.214 +    Empty_Tac ("[4,1,1,1,3]:3x^2 + 0 -3 ...",[]) Complete;
   1.215 +"--- 1 ---";
   1.216 +val pos = lev_up pos;
   1.217 +(*pos = ([4,1,1,1]) *)
   1.218 +val (pt,_) = append_result pt pos e_istate ("[4,1,1,1#]:3x^2 -3.",[])Complete;
   1.219 +"--- 2 ---";
   1.220 +val pos = lev_up pos;
   1.221 +(*val pos = ([4,1,1]) *)
   1.222 +val (pt,_) = append_result pt pos e_istate ("[4,1,1#]:found 3x^2 -3 ...",[])
   1.223 +    Complete;
   1.224 +"--- 3 ---";
   1.225 +val pos = lev_on pos;
   1.226 +(*val pos = ([4,1,2]+) *)
   1.227 +val (pt,_) = cappend_parent(*pbl*) pt pos loc "f_y = d/dy x^3 ..."
   1.228 +    Empty_Tac TransitiveB;
   1.229 +"--- 4 ---";
   1.230 +writeln (pr_ptree pr_short pt);
   1.231 +
   1.232 +(*
   1.233 +.    ----- pblobj -----
   1.234 +1.   {(a,b). is-max ...
   1.235 +1.1.   {(a,b). is-max ...
   1.236 +1.2.   {(a,b). is-extremum ...
   1.237 +2.   {(a,b). f_x(a,b) ...
   1.238 +3.   {(a,b). f_x & f_xx &...
   1.239 +3.1.   {(a,b). f_x & f_xx & ...
   1.240 +3.2.   {(a,b). f_x & f_xx } cup..
   1.241 +4.   {(a,b). f_x ..} cup ...
   1.242 +4.1.   set_1 = ...
   1.243 +4.1.1.   f_x = d/dx x^3 ...
   1.244 +4.1.1.1.   d/dx x^3 ...
   1.245 +4.1.1.1.1.   d/dx x^3 ...
   1.246 +4.1.1.1.2.   3x^2 + d/dx ...
   1.247 +4.1.1.1.3.   3x^2 + 0 + d/dx ...
   1.248 +4.1.2.   f_y = d/dy x^3 ...
   1.249 +  
   1.250 + use"test-max-surf1.sml";
   1.251 +   *)
   1.252 +-------------- 9.6.03 --- cappend_ ... term -------irreparabler test---*)
   1.253 +
   1.254 +
   1.255 +"--------- me .. scripts for maximum-example ---------------------";
   1.256 +"--------- me .. scripts for maximum-example ---------------------";
   1.257 +"--------- me .. scripts for maximum-example ---------------------";
   1.258 +
   1.259 +val fmz =
   1.260 +    ["fixedValues [r=Arbfix]","maximum A",
   1.261 +     "valuesFor [a,b]",
   1.262 +     "relations [A=a*b, (a/2)^^^2 + (b/2)^^^2 = r^^^2]",
   1.263 +     "relations [A=a*b, (a/2)^^^2 + (b/2)^^^2 = r^^^2]",
   1.264 +     "relations [A=a*b, a/2=r*sin alpha, b/2=r*cos alpha]",
   1.265 +
   1.266 +     "boundVariable a","boundVariable b","boundVariable alpha",
   1.267 +     "interval {x::real. 0 <= x & x <= 2*r}",
   1.268 +     "interval {x::real. 0 <= x & x <= 2*r}",
   1.269 +     "interval {x::real. 0 <= x & x <= pi}",
   1.270 +     "errorBound (eps=(0::real))"];
   1.271 +val (dI',pI',mI') =
   1.272 +  ("DiffApp.thy",["maximum_of","function"],
   1.273 +   ["DiffApp","max_by_calculus"]);
   1.274 +
   1.275 +val (p,_,f,nxt,_,pt) = CalcTreeTEST [(fmz, (dI',pI',mI'))];
   1.276 +val (p,_,f,nxt,_,pt) = me nxt p c pt;
   1.277 +val (p,_,f,nxt,_,pt) = me nxt p c pt;
   1.278 +val (p,_,f,nxt,_,pt) = me nxt p c pt;
   1.279 +val (p,_,f,nxt,_,pt) = me nxt p c pt;
   1.280 +val (p,_,f,nxt,_,pt) = (me nxt p c pt) handle e => print_exn e;
   1.281 +val (p,_,f,nxt,_,pt) = me nxt p c pt;
   1.282 +val (p,_,f,nxt,_,pt) = me nxt p c pt;
   1.283 +val (p,_,f,nxt,_,pt) = me nxt p c pt;
   1.284 +val (p,_,f,nxt,_,pt) = me nxt p c pt;
   1.285 +case nxt of (_, Specify_Method ["DiffApp","max_by_calculus"]) => ()
   1.286 +	  | _ => raise error "diffapp.sml: max-exp me, nxt = Specify_Method";
   1.287 +
   1.288 +val oris = fst3 (get_obj g_origin pt (fst p)); writeln(oris2str oris);
   1.289 +val pits = get_obj g_pbl pt (fst p); writeln(itms2str thy pits);
   1.290 +
   1.291 +val (p,_,f,nxt,_,pt) = me nxt p c pt;
   1.292 +val mits = get_obj g_met pt (fst p); writeln(itms2str thy mits);
   1.293 +val (p,_,f,nxt,_,pt) = me nxt p c pt;
   1.294 +val (p,_,f,nxt,_,pt) = me nxt p c pt;
   1.295 +val (p,_,f,nxt,_,pt) = me nxt p c pt;
   1.296 +case nxt of (_,Apply_Method ["DiffApp","max_by_calculus"] ) => ()
   1.297 +	  | _ => raise error "diffapp.sml: max-exp me, nxt = Apply_Method";
   1.298 +val (p,_,f,nxt,_,pt) = me nxt p c pt;
   1.299 +
   1.300 +(*since 0508 Apply_Method does the 1st step, if None init_form -------------
   1.301 +(*val nxt = ("Subproblem",Subproblem ("DiffApp.thy",["make","function"]))*)
   1.302 +val (p,_,f,nxt,_,pt) = (me nxt p c pt) handle e => print_exn_G e;
   1.303 +(*val nxt = ("Refine_Tacitly",Refine_Tacitly ["make","function"])*)
   1.304 +val (p,_,f,nxt,_,pt) = me nxt p c pt;
   1.305 +(*val nxt = ("Model_Problem",Model_Problem ["by_explicit","make","function"])*)
   1.306 +----------------------------------------------------------------------------*)
   1.307 +case nxt of (_, Model_Problem(*["by_explicit", "make", "function"]*)) => ()
   1.308 +	  | _ => raise error "diffapp.sml: max-exp me, nxt = Model_Problem";
   1.309 +
   1.310 +val (p,_,f,nxt,_,pt) = me nxt p c pt;
   1.311 +val (p,_,f,nxt,_,pt) = me nxt p c pt;
   1.312 +val (p,_,f,nxt,_,pt) = me nxt p c pt;
   1.313 +val (p,_,f,nxt,_,pt) = me nxt p c pt;
   1.314 +val (p,_,f,nxt,_,pt) = me nxt p c pt;
   1.315 +
   1.316 +val oris = fst3 (get_obj g_origin pt (fst p));writeln(oris2str oris);
   1.317 +val pits = get_obj g_pbl pt (fst p);writeln(itms2str thy pits);
   1.318 +
   1.319 +val (p,_,f,nxt,_,pt) = me nxt p c pt;
   1.320 +val (p,_,f,nxt,_,pt) = me nxt p c pt;
   1.321 +val (p,_,f,nxt,_,pt) = me nxt p c pt;
   1.322 +val (p,_,f,nxt,_,pt) = me nxt p c pt;
   1.323 +case nxt of (_, Apply_Method ["DiffApp", "make_fun_by_explicit"]) => ()
   1.324 +	  | _ => raise error "diffapp.sml: max-exp Apply_Method ([1], Met) ";
   1.325 +
   1.326 +(*----since WN050901 (ie. corr. mathengine#nxt_specify_ ..nxt_spec Pbl->p_
   1.327 +we get at ...
   1.328 +val (p,_,f,nxt,_,pt) = me nxt p c pt;
   1.329 +...
   1.330 +### assod: NotAss m= Subproblem'  ,
   1.331 + stac= Substitute
   1.332 + [(b, (rhs o hd)
   1.333 +       (Subproblem (thy, [normalize, polynomial, univariate, equation])))]
   1.334 + (hd (filterVar A [A = a * b, (a / 2) ^^^ 2 + (b / 2) ^^^ 2 = r ^^^ 2]))
   1.335 +*** stac2tac_ TODO: no match for Substitute
   1.336 +***  [(b, (rhs o hd)
   1.337 +***        (Subproblem (thy, [normalize, polynomial, univariate, equation])))]
   1.338 +***  (hd (filterVar A [A = a * b, (a / 2) ^^^ 2 + (b / 2) ^^^ 2 = r ^^^ 2]))
   1.339 +Exception- ERROR raised
   1.340 +
   1.341 +############################################################################
   1.342 +# presumerably didnt work before either, but not detected due to Emtpy_Tac #
   1.343 +############################################################################
   1.344 +
   1.345 +(*val nxt = Subproblem ("DiffApp.thy",["univariate","equation"]))   *)
   1.346 +val (p,_,f,nxt,_,pt) = me nxt p c pt;
   1.347 +(*val nxt = Refine_Tacitly ["univariate","equation"])*)
   1.348 +
   1.349 +val oris = fst3 (get_obj g_origin pt (fst p));writeln(oris2str oris);
   1.350 +val pits = get_obj g_pbl pt (fst p);writeln(itms2str thy pits);
   1.351 +
   1.352 +val (p,_,f,nxt,_,pt) = me nxt p c pt;
   1.353 +val (p,_,f,nxt,_,pt) = me nxt p c pt;
   1.354 +val (p,_,f,nxt,_,pt) = me nxt p c pt;val (p,_,f,nxt,_,pt) = me nxt p c pt;
   1.355 +val (p,_,f,nxt,_,pt) = me nxt p c pt;val (p,_,f,nxt,_,pt) = me nxt p c pt;
   1.356 +val (p,_,f,nxt,_,pt) = me nxt p c pt;val (p,_,f,nxt,_,pt) = me nxt p c pt;
   1.357 +(*val nxt = ("Apply_Method",Apply_Method ["PolyEq","normalize_poly"])*)
   1.358 +
   1.359 +val (p,_,f,nxt,_,pt) = me nxt p c pt;
   1.360 +(*val f = Form' (FormKF (~1,EdUndef,3,Nundef,"A = a * b"))*)
   1.361 +val (p,_,f,nxt,_,pt) = me nxt p c pt;
   1.362 +val (p,_,f,nxt,_,pt) = me nxt p c pt;val (p,_,f,nxt,_,pt) = me nxt p c pt;
   1.363 +val (p,_,f,nxt,_,pt) = me nxt p c pt;val (p,_,f,nxt,_,pt) = me nxt p c pt;
   1.364 +val (p,_,f,nxt,_,pt) = me nxt p c pt;val (p,_,f,nxt,_,pt) = me nxt p c pt;
   1.365 +val (p,_,f,nxt,_,pt) = me nxt p c pt;val (p,_,f,nxt,_,pt) = me nxt p c pt;
   1.366 +val (p,_,f,nxt,_,pt) = me nxt p c pt;val (p,_,f,nxt,_,pt) = me nxt p c pt;
   1.367 +val (p,_,f,nxt,_,pt) = me nxt p c pt;val (p,_,f,nxt,_,pt) = me nxt p c pt;
   1.368 +val (p,_,f,nxt,_,pt) = me nxt p c pt;val (p,_,f,nxt,_,pt) = me nxt p c pt;
   1.369 +(*val f = Form' (FormKF (~1,EdUndef,4,Nundef,"[b = A / a]"))*)
   1.370 +
   1.371 +------------------------------------------------------------------------*)
   1.372 +
   1.373 +(*val f =
   1.374 +Error' (Error_ "Refine_Tacitly [\"univariate\",\"equation\"] not applicable")*)
   1.375 +
   1.376 +
   1.377 +(*----postponed.15.5.03 run scripts for maximum-example: univariate equation
   1.378 +
   1.379 +val (p,_,f,nxt,_,pt) = (me nxt p c pt) handle e => print_exn e; 
   1.380 +
   1.381 +val oris = fst3 (get_obj g_origin pt (fst p));writeln(oris2str oris);
   1.382 +
   1.383 +val pits = get_obj g_pbl pt (fst p);writeln(itms2str thy pits);
   1.384 +val pits = get_obj g_pbl pt [];writeln(itms2str thy pits);
   1.385 +
   1.386 +val mits = get_obj g_met pt (fst p);writeln(itms2str thy mits);
   1.387 +val mits = get_obj g_met pt [];writeln(itms2str thy mits);
   1.388 +
   1.389 +itms2args thy ["DiffApp","max_by_calculus"] mits;
   1.390 +
   1.391 +val (p,_,f,nxt,_,pt) = me nxt p c pt;
   1.392 +
   1.393 +---*)
   1.394 +
   1.395 +"--------- autoCalc .. scripts for maximum-example ---------------";
   1.396 +"--------- autoCalc .. scripts for maximum-example ---------------";
   1.397 +"--------- autoCalc .. scripts for maximum-example ---------------";
   1.398 +(*++++++++ see systest/inform.sml 'complete_metitms' ++++++++*)
   1.399 + states:=[];
   1.400 +val fmz =
   1.401 +    ["fixedValues [r=Arbfix]","maximum A",
   1.402 +     "valuesFor [a,b]",
   1.403 +     "relations [A=a*b, (a/2)^2 + (b/2)^2 = r^2]",
   1.404 +     "relations [A=a*b, (a/2)^2 + (b/2)^2 = r^2]",
   1.405 +     "relations [A=a*b, a/2=r*sin alpha, b/2=r*cos alpha]",
   1.406 +
   1.407 +     "boundVariable a","boundVariable b","boundVariable alpha",
   1.408 +     "interval {x::real. 0 <= x & x <= 2*r}",
   1.409 +     "interval {x::real. 0 <= x & x <= 2*r}",
   1.410 +     "interval {x::real. 0 <= x & x <= pi}",
   1.411 +     "errorBound (eps=(0::real))"];
   1.412 +val (dI',pI',mI') =
   1.413 +  ("DiffApp.thy",["maximum_of","function"],
   1.414 +   ["DiffApp","max_by_calculus"]);
   1.415 +
   1.416 + CalcTree [(fmz, (dI',pI',mI'))];
   1.417 + Iterator 1; moveActiveRoot 1;
   1.418 + autoCalculate 1 CompleteCalcHead;
   1.419 + refFormula 1 (get_pos 1 1); 
   1.420 +
   1.421 + fetchProposedTactic 1;
   1.422 + autoCalculate 1 (Step 1);
   1.423 +
   1.424 + fetchProposedTactic 1;
   1.425 + autoCalculate 1 (Step 1);
   1.426 + (*Subproblem on_interval maximum_of function*)
   1.427 + autoCalculate 1 CompleteCalcHead;
   1.428 +
   1.429 + fetchProposedTactic 1;
   1.430 + val ((pt,p),_) = get_calc 1;
   1.431 + val mits = get_obj g_met pt (fst p);
   1.432 + writeln (itms2str thy mits);
   1.433 +(*
   1.434 + if itms2str thy mits = "[\n(1 ,[1] ,true ,#Given ,Cor functionEq (hd rs_) ,(t_, [hd rs_])),\n(2 ,[1] ,true ,#Given ,Cor boundVariable v_ ,(v_, [v_])),\n(3 ,[1] ,true ,#Given ,Cor interval itv_ ,(itv_, [itv_])),\n(4 ,[1] ,true ,#Find ,Cor maxArgument v__0 ,(v_0_, [v__0]))]" then ()
   1.435 + else raise error "diffapp.sml: diff.behav. in autoCalc .. scripts for max 1";
   1.436 +*)
   1.437 + (*FIXME: the environments contain identifers, and NOT values ?!?!?*)
   1.438 +(* WN051209 while extending 'fun step' for initac, this became better ...
   1.439 + if itms2str thy mits = "[\n(1 ,[1,2,3] ,true ,#Given ,Cor fixedValues [r = Arbfix] ,(fix_, [[r = Arbfix]])),\n(2 ,[1,2,3] ,true ,#Find ,Cor maximum A ,(m_, [A])),\n(3 ,[1,2,3] ,true ,#Find ,Cor valuesFor [a, b] ,(vs_, [[a],[b]])),\n(4 ,[1,2] ,true ,#Relate ,Cor relations [A = a * b, (a / 2) ^^^ 2 + (b / 2) ^^^ 2 = r ^^^ 2] ,(rs_, [[A = a * b],[(a / 2) ^^^ 2 + (b / 2) ^^^ 2 = r ^^^ 2]])),\n(6 ,[1] ,true ,#undef ,Cor boundVariable a ,(v_, [a])),\n(9 ,[1,2] ,true ,#undef ,Cor interval {x. 0 <= x & x <= 2 * r} ,(itv_, [{x. 0 <= x & x <= 2 * r}])),\n(11 ,[1,2,3] ,true ,#undef ,Cor errorBound (eps = 0) ,(err_, [eps = 0]))]" then ()
   1.440 + else raise error "diffapp.sml: diff.behav. in autoCalc .. scripts for max 1";
   1.441 +*)
   1.442 +
   1.443 +
   1.444 +
   1.445 +"--------------------- 30.4.03: maximum .. rewrite_set_ list_rls ---------";
   1.446 +"--------------------- 30.4.03: maximum .. rewrite_set_ list_rls ---------";
   1.447 +"--------------------- 30.4.03: maximum .. rewrite_set_ list_rls ---------";
   1.448 +str2term
   1.449 +  "Script Maximum_value(fix_::bool list)(m_::real) (rs_::bool list)\
   1.450 +   \      (v_::real) (itv_::real set) (err_::bool) =          \ 
   1.451 +   \ (let e_ = (hd o (filterVar m_)) rs_;              \
   1.452 +   \      t_ = (if 1 < length_ rs_                            \
   1.453 +   \           then (SubProblem (Reals_,[make,function],[no_met])\
   1.454 +   \                     [real_ m_, real_ v_, bool_list_ rs_])\
   1.455 +   \           else (hd rs_));                                \
   1.456 +   \      (mx_::real) = SubProblem (Reals_,[on_interval,max_of,function], \
   1.457 +   \                                [Isac,maximum_on_interval])\
   1.458 +   \                               [bool_ t_, real_ v_, real_set_ itv_]\
   1.459 +   \ in ((SubProblem (Reals_,[find_values,tool],[Isac,find_values])   \
   1.460 +   \      [real_ mx_, real_ (Rhs t_), real_ v_, real_ m_,     \
   1.461 +   \       bool_list_ (dropWhile (ident e_) rs_)])::bool list))";
   1.462 +
   1.463 +val fix_ = (str2term "fix_::bool list", 
   1.464 +	    str2term "[r=Arbfix]");
   1.465 +val m_   = (str2term "m_::real", 
   1.466 +	    str2term "A");
   1.467 +val rs_  = (str2term "rs_::bool list", 
   1.468 +	    str2term "[A = a*b, (a/2)^^^2 + (b/2)^^^2 = r^^^2]");
   1.469 +val v_   = (str2term "v_::real", 
   1.470 +	    str2term "b");
   1.471 +val itv_ = (str2term "itv_::real set", 
   1.472 +	    str2term "{x::real. 0 <= x & x <= 2*r}");
   1.473 +val err_ = (str2term "err_::bool", 
   1.474 +	    str2term "eps=0");
   1.475 +val env = [fix_, m_, rs_ ,v_, itv_, err_];
   1.476 +
   1.477 +(*--- 1.line in script ---*)
   1.478 +val t = str2term "(hd o (filterVar m_)) (rs_::bool list)";
   1.479 +val s = subst_atomic env t;
   1.480 +term2str s;
   1.481 +"(hd o filterVar A) [A = a * b, (a / 2) ^^^ 2 + (b / 2) ^^^ 2 = r ^^^ 2]";
   1.482 +val Some (s',_) = rewrite_set_ thy false list_rls s;
   1.483 +val s'' = term2str s';
   1.484 +if s''="A = a * b" then () else raise error "new behaviour with list_rls 1.1.";
   1.485 +val env = env @ [(str2term "e_::bool",str2term "A = a * b")];
   1.486 +
   1.487 +(*--- 2.line: condition alone ---*)
   1.488 +val t = str2term "1 < length_ (rs_::bool list)";
   1.489 +val s = subst_atomic env t;
   1.490 +term2str s;
   1.491 +"1 < length_ [A = a * b, (a / 2) ^^^ 2 + (b / 2) ^^^ 2 = r ^^^ 2]";
   1.492 +val Some (s',_) = rewrite_set_ thy false list_rls s;
   1.493 +val s'' = term2str s';
   1.494 +if s''="True" then () else raise error "new behaviour with list_rls 1.2.";
   1.495 +
   1.496 +(*--- 2.line in script ---*)
   1.497 +val t = str2term 
   1.498 +	    "(if 1 < length_ rs_                            \
   1.499 +   \           then (SubProblem (Reals_,[make,function],[no_met])\
   1.500 +   \                     [real_ m_, real_ v_, bool_list_ rs_])\
   1.501 +   \           else (hd rs_))";
   1.502 +val s = subst_atomic env t;
   1.503 +term2str s;
   1.504 +"if 1 < length_ [A = a * b, (a / 2) ^^^ 2 + (b / 2) ^^^ 2 = r ^^^ 2]\
   1.505 +\then SubProblem (Reals_, [make, function], [no_met])\
   1.506 +\      [real_ A, real_ b,\
   1.507 +\       bool_list_ [A = a * b, (a / 2) ^^^ 2 + (b / 2) ^^^ 2 = r ^^^ 2]]\
   1.508 +\else hd [A = a * b, (a / 2) ^^^ 2 + (b / 2) ^^^ 2 = r ^^^ 2]";
   1.509 +val Some (s',_) = rewrite_set_ thy false list_rls s;
   1.510 +val s'' = term2str s';
   1.511 +if s'' = 
   1.512 +"SubProblem (Reals_, [make, function], [no_met])\n\
   1.513 +\ [real_ A, real_ b,\n\
   1.514 +\  bool_list_ [A = a * b, (a / 2) ^^^ 2 + (b / 2) ^^^ 2 = r ^^^ 2]]" then ()
   1.515 +else raise error "new behaviour with list_rls 1.3.";
   1.516 +val env = env @ [(str2term "t_::bool",
   1.517 +		  str2term "A = (2*sqrt(r^^^2-(b/2)^^^2)) * b")];
   1.518 +
   1.519 +
   1.520 +
   1.521 +"---------------------- 1.5.03: Make_fun_by_explicit ---------------------";
   1.522 +"---------------------- 1.5.03: Make_fun_by_explicit ---------------------";
   1.523 +"---------------------- 1.5.03: Make_fun_by_explicit ---------------------";
   1.524 +str2term
   1.525 +   "Script Make_fun_by_explicit (f_::real) (v_::real)         \
   1.526 +   \      (eqs_::bool list) =                                 \
   1.527 +   \ (let h_  = (hd o (filterVar f_)) eqs_;                   \
   1.528 +   \      e_1 = hd (dropWhile (ident h_) eqs_);               \
   1.529 +   \      vs_ = dropWhile (ident f_) (Vars h_);                \
   1.530 +   \      v_1 = hd (dropWhile (ident v_) vs_);                \
   1.531 +   \      (s_1::bool list)=(SubProblem(Reals_,[univar,equation],[no_met])\
   1.532 +   \                          [bool_ e_1, real_ v_1])\
   1.533 +   \ in Substitute [(v_1 = (rhs o hd) s_1)] h_)";
   1.534 +val f_ = (str2term "f_::real", 
   1.535 +	  str2term "A");
   1.536 +val v_ = (str2term "v_::real", 
   1.537 +	  str2term "b");
   1.538 +val eqs_=(str2term "eqs_::bool list", 
   1.539 +	  str2term "[A = a * b, (a / 2) ^^^ 2 + (b / 2) ^^^ 2 = r ^^^ 2]");
   1.540 +val env = [f_, v_, eqs_];
   1.541 +
   1.542 +(*--- 1.line in script ---*)
   1.543 +val t = str2term "(hd o (filterVar v_)) (eqs_::bool list)";
   1.544 +val s = subst_atomic env t;
   1.545 +term2str s;
   1.546 +val t = str2term 
   1.547 +     "(hd o filterVar b) [A = a * b, (a / 2) ^^^ 2 + (b / 2) ^^^ 2 = r ^^^ 2]";
   1.548 +val Some (t',_) = rewrite_set_ thy false list_rls t;
   1.549 +val s' = term2str t';
   1.550 +if s' = "A = a * b" then () else raise error "new behaviour with list_rls 2.1";
   1.551 +val env = env @ [(str2term "h_::bool", str2term s')];
   1.552 +
   1.553 +(*--- 2.line in script ---*)
   1.554 +val t = str2term "hd (dropWhile (ident h_) (eqs_::bool list))";
   1.555 +val s = subst_atomic env t;
   1.556 +term2str s;
   1.557 +val t = str2term 
   1.558 +	    "hd (dropWhile (ident (A = a * b))\
   1.559 +	    \     [A = a * b, (a / 2) ^^^ 2 + (b / 2) ^^^ 2 = r ^^^ 2])";
   1.560 +mem_rls "dropWhile_Cons" list_rls;
   1.561 +mem_rls "Atools.ident" list_rls;
   1.562 +val Some (t',_) = rewrite_set_ thy false list_rls t;
   1.563 +val s' = term2str t';
   1.564 +if s' = "(a / 2) ^^^ 2 + (b / 2) ^^^ 2 = r ^^^ 2" then () 
   1.565 +else raise error "new behaviour with list_rls 2.2";
   1.566 +val env = env @ [(str2term "e_1::bool", str2term s')];
   1.567 +
   1.568 +(*--- 3.line in script ---*)
   1.569 +val t = str2term "dropWhile (ident f_) (Vars (h_::bool))";
   1.570 +val s = subst_atomic env t;
   1.571 +term2str s;
   1.572 +val t = str2term "dropWhile (ident A) (Vars (A = a * b))";
   1.573 +val Some (t',_) = rewrite_set_ thy false list_rls t;
   1.574 +val s' = term2str t';
   1.575 +if s' = "[a, b]" then () else raise error "new behaviour with list_rls 2.3";
   1.576 +val env = env @ [(str2term "vs_::real list", str2term s')];
   1.577 +
   1.578 +(*--- 4.line in script ---*)
   1.579 +val t = str2term "hd (dropWhile (ident v_) vs_)";
   1.580 +val s = subst_atomic env t;
   1.581 +term2str s;
   1.582 +val t = str2term "hd (dropWhile (ident b) [a, b])";
   1.583 +val Some (t',_) = rewrite_set_ thy false list_rls t;
   1.584 +val s' = term2str t';
   1.585 +if s' = "a" then () else raise error "new behaviour with list_rls 2.4.";
   1.586 +val env = env @ [(str2term "v_1::real", str2term s')];
   1.587 +
   1.588 +(*--- 5.line in script ---*)
   1.589 +val t = str2term "(SubProblem(Reals_,[univar,equation],[no_met])\
   1.590 +		 \           [bool_ e_1, real_ v_1])";
   1.591 +val s = subst_atomic env t;
   1.592 +term2str s;
   1.593 +"SubProblem (Reals_, [univar, equation], [no_met])\n\
   1.594 +\ [bool_ ((a / 2) ^^^ 2 + (b / 2) ^^^ 2 = r ^^^ 2), real_ a]";
   1.595 +val env = env @ [(str2term "s_1::bool list", 
   1.596 +		  str2term "[a = 2 * sqrt (r^^^2 - (b/2)^^^2)]")];
   1.597 +
   1.598 +(*--- 6.line in script ---*)
   1.599 +val t = str2term "Substitute [(v_1 = (rhs o hd) (s_1::bool list))] (h_::bool)";
   1.600 +val s = subst_atomic env t;
   1.601 +term2str s;
   1.602 +val t = str2term 
   1.603 +"Substitute [(a = (rhs o hd) [a = 2 * sqrt (r ^^^ 2 - (b / 2) ^^^ 2)])]\n\
   1.604 +\ (A = a * b)";
   1.605 +mem_rls "Tools.rhs" list_rls;
   1.606 +val Some (t',_) = rewrite_set_ thy false list_rls t;
   1.607 +val s' = term2str t';
   1.608 +if s' = "Substitute [a = 2 * sqrt (r ^^^ 2 - (b / 2) ^^^ 2)] (A = a * b)" 
   1.609 +then () else raise error "new behaviour with list_rls 2.6.";
   1.610 +
   1.611 +
   1.612 +"---------------------- 2.5.03: Make_fun_by_new_variable -----------------";
   1.613 +"---------------------- 2.5.03: Make_fun_by_new_variable -----------------";
   1.614 +"---------------------- 2.5.03: Make_fun_by_new_variable -----------------";
   1.615 +str2term
   1.616 +  "Script Make_fun_by_new_variable (f_::real) (v_::real)     \
   1.617 +   \      (eqs_::bool list) =                                 \
   1.618 +   \(let h_ = (hd o (filterVar f_)) eqs_;             \
   1.619 +   \     es_ = dropWhile (ident h_) eqs_;                    \
   1.620 +   \     vs_ = dropWhile (ident f_) (Vars h_);                \
   1.621 +   \     v_1 = nth_ 1 vs_;                                   \
   1.622 +   \     v_2 = nth_ 2 vs_;                                   \
   1.623 +   \     e_1 = (hd o (filterVar v_1)) es_;            \
   1.624 +   \     e_2 = (hd o (filterVar v_2)) es_;            \
   1.625 +   \  (s_1::bool list) = (SubProblem (Reals_,[univar,equation],[no_met])\
   1.626 +   \                    [bool_ e_1, real_ v_1]);\
   1.627 +   \  (s_2::bool list) = (SubProblem (Reals_,[univar,equation],[no_met])\
   1.628 +   \                    [bool_ e_2, real_ v_2])\
   1.629 +   \in Substitute [(v_1 = (rhs o hd) s_1),(v_2 = (rhs o hd) s_2)] h_)";
   1.630 +val f_ = (str2term "f_::real", 
   1.631 +	  str2term "A");
   1.632 +val v_ = (str2term "v_::real", 
   1.633 +	  str2term "alpha");
   1.634 +val eqs_=(str2term "eqs_::bool list", 
   1.635 +	  str2term "[A=a*b, a/2=r*sin alpha, b/2=r*cos alpha]");
   1.636 +val env = [f_, v_, eqs_];
   1.637 +
   1.638 +(*--- 1.line in script ---*)
   1.639 +val t = str2term "(hd o (filterVar (f_::real))) (eqs_::bool list)";
   1.640 +val s = subst_atomic env t;
   1.641 +term2str s;
   1.642 +val t = str2term 
   1.643 +"(hd o filterVar A) [A = a * b, a / 2 = r * sin alpha, b / 2 = r * cos alpha]";
   1.644 +trace_rewrite:=true;
   1.645 +val Some (t',_) = rewrite_set_ thy false list_rls t;
   1.646 +trace_rewrite:=false;
   1.647 +val s' = term2str t';
   1.648 +if s' = "A = a * b" then() else raise error "new behaviour with list_rls 3.1.";
   1.649 +val env = env @ [(str2term "h_::bool", str2term s')];
   1.650 +
   1.651 +(*--- 2.line in script ---*)
   1.652 +val t = str2term "dropWhile (ident (h_::bool)) (eqs_::bool list)";
   1.653 +val s = subst_atomic env t;
   1.654 +term2str s;
   1.655 +val t = str2term 
   1.656 +"dropWhile (ident (A = a * b))\
   1.657 +\ [A = a * b, a / 2 = r * sin alpha, b / 2 = r * cos alpha]";
   1.658 +val Some (t',_) = rewrite_set_ thy false list_rls t;
   1.659 +val s' = term2str t';
   1.660 +if s' = "[a / 2 = r * sin alpha, b / 2 = r * cos alpha]" 
   1.661 +then () else raise error "new behaviour with list_rls 3.2.";
   1.662 +val env = env @ [(str2term "es_::bool list", str2term s')];
   1.663 +
   1.664 +(*--- 3.line in script ---*)
   1.665 +val t = str2term "dropWhile (ident (f_::real)) (Vars (h_::bool))";
   1.666 +val s = subst_atomic env t;
   1.667 +term2str s;
   1.668 +val t = str2term "dropWhile (ident A) (Vars (A = a * b))";
   1.669 +val Some (t',_) = rewrite_set_ thy false list_rls t;
   1.670 +val s' = term2str t';
   1.671 +if s' = "[a, b]" then () else raise error "new behaviour with list_rls 3.3.";
   1.672 +val env = env @ [(str2term "vs_::real list", str2term s')];
   1.673 +
   1.674 +(*--- 4.line in script ---*)
   1.675 +val t = str2term "nth_ 1 vs_";
   1.676 +val s = subst_atomic env t;
   1.677 +term2str s;
   1.678 +val t = str2term "nth_ 1 [a, b]";
   1.679 +val Some (t',_) = rewrite_set_ thy false list_rls t;
   1.680 +val s' = term2str t';
   1.681 +if s' = "a" then () else raise error "new behaviour with list_rls 3.4.";
   1.682 +val env = env @ [(str2term "v_1", str2term s')];
   1.683 +
   1.684 +(*--- 5.line in script ---*)
   1.685 +val t = str2term "nth_ 2 vs_";
   1.686 +val s = subst_atomic env t;
   1.687 +term2str s;
   1.688 +val t = str2term "nth_ 2 [a, b]";
   1.689 +val Some (t',_) = rewrite_set_ thy false list_rls t;
   1.690 +val s' = term2str t';
   1.691 +if s' = "b" then () else raise error "new behaviour with list_rls 3.5.";
   1.692 +val env = env @ [(str2term "v_2", str2term s')];
   1.693 +
   1.694 +(*--- 6.line in script ---*)
   1.695 +val t = str2term "(hd o (filterVar v_1)) (es_::bool list)";
   1.696 +val s = subst_atomic env t;
   1.697 +term2str s;
   1.698 +val t = str2term 
   1.699 +	   "(hd o filterVar a) [a / 2 = r * sin alpha, b / 2 = r * cos alpha]";
   1.700 +val Some (t',_) = rewrite_set_ thy false list_rls t;
   1.701 +val s' = term2str t';
   1.702 +if s' = "a / 2 = r * sin alpha" then () 
   1.703 +else raise error "new behaviour with list_rls 3.6.";
   1.704 +val e_1 = str2term "e_1::bool";
   1.705 +val env = env @ [(e_1, str2term s')];
   1.706 +
   1.707 +(*--- 7.line in script ---*)
   1.708 +val t = str2term "(hd o (filterVar v_2)) (es_::bool list)";
   1.709 +val s = subst_atomic env t;
   1.710 +term2str s;
   1.711 +val t = str2term 
   1.712 +	  "(hd o filterVar b) [a / 2 = r * sin alpha, b / 2 = r * cos alpha]";
   1.713 +val Some (t',_) = rewrite_set_ thy false list_rls t;
   1.714 +val s' = term2str t';
   1.715 +if s' = "b / 2 = r * cos alpha" then () 
   1.716 +else raise error "new behaviour with list_rls 3.7.";
   1.717 +val env = env @ [(str2term "e_2::bool", str2term s')];
   1.718 +
   1.719 +(*--- 8.line in script ---*)
   1.720 +val t = str2term "(SubProblem (Reals_,[univar,equation],[no_met])\
   1.721 +		 \            [bool_ e_1, real_ v_1])";
   1.722 +val s = subst_atomic env t;
   1.723 +term2str s;
   1.724 +"SubProblem (Reals_, [univar, equation], [no_met])\
   1.725 +	    \ [bool_ (a / 2 = r * sin alpha), real_ a]";
   1.726 +val s_1 = str2term "[a = 2*r*sin alpha]";
   1.727 +val env = env @ [(str2term "s_1::bool list", s_1)];
   1.728 +
   1.729 +(*--- 9.line in script ---*)
   1.730 +val t = str2term "(SubProblem (Reals_,[univar,equation],[no_met])\
   1.731 +   \                    [bool_ e_2, real_ v_2])";
   1.732 +val s = subst_atomic env t;
   1.733 +term2str s;
   1.734 +"SubProblem (Reals_, [univar, equation], [no_met])\
   1.735 +	    \ [bool_ (b / 2 = r * cos alpha), real_ b]";
   1.736 +val s_2 = str2term "[b = 2*r*cos alpha]";
   1.737 +val env = env @ [(str2term "s_2::bool list", s_2)];
   1.738 +
   1.739 +(*--- 10.line in script ---*)
   1.740 +val t = str2term 
   1.741 +"Substitute [(v_1 = (rhs o hd) s_1),(v_2 = (rhs o hd) s_2)] (h_::bool)";
   1.742 +val s = subst_atomic env t;
   1.743 +term2str s;
   1.744 +"Substitute\n [(a = (rhs o hd) [a = 2 * r * sin alpha]),\
   1.745 +\              (b = (rhs o hd) [b = 2 * r * cos alpha])] (A = a * b)";
   1.746 +val Some (s',_) = rewrite_set_ thy false list_rls s;
   1.747 +val s'' = term2str s';
   1.748 +if s'' = 
   1.749 +"Substitute [a = 2 * r * sin alpha, b = 2 * r * cos alpha] (A = a * b)"
   1.750 +then () else raise error "new behaviour with list_rls 3.10.";
   1.751 +
   1.752 +
   1.753 +
   1.754 +
   1.755 +