1 (* tests for IsacKnowledge/DiffApp
2 author Walther Neuper 000301
3 (c) due to copyright terms
5 use"../smltest/IsacKnowledge/diffapp.sml";
9 "Contents----------------------------------------------";
10 " Specify_Problem (match_itms_oris) ";
11 " test specify, fmz <> [] ";
12 " test specify, fmz = [] ";
13 " problemtypes + formalizations ";
14 "-------------------- ptree of {(a,b). is-max ... ----------------";
15 "--------- me .. scripts for maximum-example ---------------------";
16 "--------- autoCalc .. scripts for maximum-example ---------------";
18 "--------------------- 30.4.03: maximum .. rewrite_set_ list_rls ---------";
19 "---------------------- 1.5.03: Make_fun_by_explicit ---------------------";
20 "---------------------- 2.5.03: Make_fun_by_new_variable -----------------";
26 " #################################################### ";
27 " problemtypes + formalizations ";
28 " #################################################### ";
29 " -------------- [maximum_of,function] --------------- ";
31 ["fixedValues fix_","maximum m_","valuesFor vs_","relations rs_"];
32 map (the o (parseold thy)) pbt;
34 ["fixedValues [r=Arbfix]","maximum A",
36 "relations [A=a*b, (a/2)^^^2 + (b/2)^^^2 = r^^^2]",
37 "relations [A=a*b, (a/2)^^^2 + (b/2)^^^2 = r^^^2]",
38 "relations [A=a*b, a/2=r*sin alpha, b/2=r*cos alpha]",
40 "boundVariable a","boundVariable b","boundVariable alpha",
41 "interval {x::real. 0 <= x & x <= 2*r}",
42 "interval {x::real. 0 <= x & x <= 2*r}",
43 "interval {x::real. 0 <= x & x <= pi}",
44 "errorBound (eps=(0::real))"];
45 map (the o (parseold thy)) fmz;
46 " -------------- [make,function] -------------- ";
48 ["functionOf f_","boundVariable v_v","equalities eqs_",
50 map (the o (parseold thy)) pbt;
52 ["functionOf A","boundVariable a","boundVariable b",
53 "equalities [A=a*b, (a/2)^^^2 + (b/2)^^^2 = r^^^2]",
54 (*28.11.00: "functionTerm (A_0=Undef)"*)"functionTerm (Undef)"];
55 map (the o (parseold thy)) fmz12;
57 ["functionOf A","boundVariable a","boundVariable b",
58 "equalities [A=a*b, a/2=r*sin alpha, b/2=r*cos alpha]",
59 (*28.11.00: "functionTerm (A_0=Undef)"*)"functionTerm (Undef)"];
60 map (the o (parseold thy)) fmz3;
61 " --------- [univar,equation] --------- ";
63 ["equality e_e","solveFor v_v","solutions v_i_"];
64 map (the o (parseold thy)) pbt;
66 ["equality ((a/2)^^^2 + (b/2)^^^2 = r^^^2)",
67 "solveFor b","solutions b_i"];
68 map (the o (parseold thy)) fmz;
69 " ---- [on_interval,maximum_of,function] ---- ";
71 ["functionTerm t_","boundVariable v_v","interval itv_",
72 "errorBound err_","maxArgument v_0_"];
73 map (the o (parseold thy)) pbt;
75 [(*28.11.00: "functionTerm (A_0 = a*sqrt(#4*r^^^#2 - a^^^#2))",*)
76 "functionTerm (a*sqrt(4*r^^^2 - a^^^2))",
77 (*28.11.00: "functionTerm (A_0 = b*sqrt(#4*r^^^#2 - b^^^#2))",*)
78 "functionTerm (b*sqrt(4*r^^^2 - b^^^2))",
79 "boundVariable a","boundVariable b",
80 "interval {x::real. 0 <= x & x <= 2*r}",
81 "errorBound (eps=0)","maxArgument (a_0=Undef)"];
82 map (the o (parseold thy)) fmz12;
84 [(*28.11.00: "functionTerm (A_0 = (#2*r*sin alpha)*(#2*r*cos alpha))",*)
85 "functionTerm ((2*r*sin alpha)*(2*r*cos alpha))",
86 "boundVariable alpha",
87 "interval {x::real. 0 <= x & x <= pi}",
88 "errorBound (eps=0)","maxArgument (a_0=Undef)"];
89 map (the o (parseold thy)) fmz3;
90 " --------- [derivative_of,function] --------- ";
92 ["functionTerm f_","boundVariable v_v","derivative f_'_"];
93 map (the o (parseold thy)) pbt;
95 [(*28.11.00: "functionTerm (A_0=a*#2*sqrt r^^^#2 - (a//#2)^^^#2)",*)
96 "functionTerm (a*2*sqrt r^^^2 - (a/2)^^^2)",
98 (*28.11.00: "derivative (A_0'=Undef)"*)"derivative (Undef)"];
99 map (the o (parseold thy)) fmz;
100 " --------- [find_values,tool] --------- ";
102 ["maxArgument ma_","functionTerm f_","boundVariable v_v",
103 "valuesFor vls_","additionalRels rs_"];
104 map (the o (parseold thy)) pbt;
106 ["maxArgument (a_0=(srqt 2)*r)",
107 (*28.11.00: "functionTerm (A_0=a*#2*sqrt r^^^#2 - (a//#2)^^^#2)",*)
108 "functionTerm (a*2*sqrt r^^^2 - (a/2)^^^2)",
110 "valuesFor [a,b]","maximum A",
111 "additionalRels [(a/2)^^^2 + (b/2)^^^2 = r^^^2]"];
112 map (the o (parseold thy)) fmz1;
116 "-------------------- ptree of {(a,b). is-max ... --------------------------";
117 "-------------------- ptree of {(a,b). is-max ... --------------------------";
118 "-------------------- ptree of {(a,b). is-max ... --------------------------";
120 (* Teil von max-on-surface.sml,
121 der nach Init_Proof -> prep_ori wieder l"auft
122 (f"ur tests mit neuer pos')
123 use"test-max-surf1.sml";
125 Compiler.Control.Print.printDepth:=7; (*4 is default*)
126 Compiler.Control.Print.printDepth:=4; (*4 is default*)
129 (* --vvv-- ausgeliehen von test-root-equ/sml *)
132 ("Script",["sqroot-test","univariate","equation"],
133 ["Script","squ-equ-test2"]);
134 val fmz = ["equality (sqrt(9+4*x)=sqrt x + sqrt(5+x))",
135 "solveFor x","errorBound (eps=0)",
138 val (mI,m) = ("Init_Proof",Init_Proof (fmz, (dI',pI',mI')));
139 val ((p,p_),_,_,_,_,(_,pt,_)) = do_ (mI,m) e_pos'[1](e_scr,EmptyPtree,[]);
140 --^^^-- ausgeliehen von test-root-equ/sml *)
141 (*-------------- 9.6.03 --- cappend_ ... term -------irreparabler test
143 cappend_problem EmptyPtree [] loc ([],(dI',pI',mI'));
144 val pos = (lev_on o lev_dn) [];
145 (* val pos = ([1]) *)
146 val (pt,_) = cappend_parent pt pos loc "{(a,b). is-max ..."
147 Empty_Tac TransitiveB;
148 val pos = (lev_on o lev_dn) pos;
149 (*val pos = ([1,1])*)
150 val (pt,_) = cappend_atomic pt pos loc "{(a,b). is-max ..."
151 Empty_Tac ("[1,1]:{(a,b). is-extremum ...",[]) Complete;
152 val pos = lev_on pos;
153 (*val pos = ([1,2])*)
154 val (pt,_) = cappend_atomic pt pos loc "{(a,b). is-extremum ..."
155 Empty_Tac ("[1,2]:{(a,b). f_x(a,b) ...",[]) Complete;
156 val pos = lev_up pos;
158 val (pt,_) = append_result pt pos e_istate ("[1#]:{(a,b). f_x(a,b) ...",[])
161 val pos = lev_on pos;
163 val (pt,_) = cappend_atomic pt pos loc "{(a,b). f_x(a,b) ..."
164 Empty_Tac ("[2]:{(a,b). f_x & f_xx &...",[]) Complete;
165 val pos = lev_on pos;
166 (*al pos = [3] : pos*)
167 val (pt,_) = cappend_parent pt pos loc "{(a,b). f_x & f_xx &..."
168 Empty_Tac TransitiveB;
169 val pos = (lev_on o lev_dn) pos;
171 val (pt,_) = cappend_atomic pt pos loc "{(a,b). f_x & f_xx & ..."
172 Empty_Tac ("[3,1]:{(a,b). f_x & f_xx } cup ...",[]) Complete;
173 val pos = lev_on pos;
175 val (pt,_) = cappend_atomic pt pos loc "{(a,b). f_x & f_xx } cup.."
176 Empty_Tac ("[3,2]:{(a,b). f_x ..} cup ...",[]) Complete;
178 val pos = lev_up pos;
180 val (pt,_) = append_result pt pos e_istate ("[3#]:{(a,b). f_x ..} cup..",[])
182 val pos = lev_on pos;
183 (*val pos = [4] : pos *)
184 val (pt,_) = cappend_parent pt pos loc "{(a,b). f_x ..} cup ..."
185 Empty_Tac IntersectB;
186 val pos = (lev_on o lev_dn) pos;
187 (*val pos = ([4,1]) *)
188 val (pt,_) = cappend_parent pt pos loc "set_1 = ..."
192 val pos = (lev_on o lev_dn) pos;
193 (*val pos = ([4,1,1]) *)
194 val (pt,_) = cappend_parent(*pbl*) pt pos loc"f_x = d/dx x^3 ..."
195 Empty_Tac TransitiveB;
196 val pos = (lev_on o lev_dn) pos;
197 (*val pos = ([4,1,1,1]) *)
198 val (pt,_) = cappend_parent pt pos loc "d/dx x^3 ..."
199 Empty_Tac TransitiveB;
200 val pos = (lev_on o lev_dn) pos;
201 (*val pos = ([4,1,1,1,1]) *)
202 val (pt,_) = cappend_atomic pt pos loc "d/dx x^3 ..."
203 Empty_Tac ("[4,1,1,1,1]:3x^2 + d/dx ...",[]) Complete;
204 val pos = lev_on pos;
205 (*val pos = ([4,1,1,1,2]) *)
206 val (pt,_) = cappend_atomic pt pos loc "3x^2 + d/dx ..."
207 Empty_Tac ("[4,1,1,1,2]:3x^2 + 0 + d/dx ...",[]) Complete;
208 val pos = lev_on pos;
209 (*pos = ([4,1,1,1,3]) *)
210 val (pt,_) = cappend_atomic pt pos loc "3x^2 + 0 + d/dx ..."
211 Empty_Tac ("[4,1,1,1,3]:3x^2 + 0 -3 ...",[]) Complete;
213 val pos = lev_up pos;
214 (*pos = ([4,1,1,1]) *)
215 val (pt,_) = append_result pt pos e_istate ("[4,1,1,1#]:3x^2 -3.",[])Complete;
217 val pos = lev_up pos;
218 (*val pos = ([4,1,1]) *)
219 val (pt,_) = append_result pt pos e_istate ("[4,1,1#]:found 3x^2 -3 ...",[])
222 val pos = lev_on pos;
223 (*val pos = ([4,1,2]+) *)
224 val (pt,_) = cappend_parent(*pbl*) pt pos loc "f_y = d/dy x^3 ..."
225 Empty_Tac TransitiveB;
227 writeln (pr_ptree pr_short pt);
231 1. {(a,b). is-max ...
232 1.1. {(a,b). is-max ...
233 1.2. {(a,b). is-extremum ...
234 2. {(a,b). f_x(a,b) ...
235 3. {(a,b). f_x & f_xx &...
236 3.1. {(a,b). f_x & f_xx & ...
237 3.2. {(a,b). f_x & f_xx } cup..
238 4. {(a,b). f_x ..} cup ...
240 4.1.1. f_x = d/dx x^3 ...
241 4.1.1.1. d/dx x^3 ...
242 4.1.1.1.1. d/dx x^3 ...
243 4.1.1.1.2. 3x^2 + d/dx ...
244 4.1.1.1.3. 3x^2 + 0 + d/dx ...
245 4.1.2. f_y = d/dy x^3 ...
247 use"test-max-surf1.sml";
249 -------------- 9.6.03 --- cappend_ ... term -------irreparabler test---*)
252 "--------- me .. scripts for maximum-example ---------------------";
253 "--------- me .. scripts for maximum-example ---------------------";
254 "--------- me .. scripts for maximum-example ---------------------";
257 ["fixedValues [r=Arbfix]","maximum A",
259 "relations [A=a*b, (a/2)^^^2 + (b/2)^^^2 = r^^^2]",
260 "relations [A=a*b, (a/2)^^^2 + (b/2)^^^2 = r^^^2]",
261 "relations [A=a*b, a/2=r*sin alpha, b/2=r*cos alpha]",
263 "boundVariable a","boundVariable b","boundVariable alpha",
264 "interval {x::real. 0 <= x & x <= 2*r}",
265 "interval {x::real. 0 <= x & x <= 2*r}",
266 "interval {x::real. 0 <= x & x <= pi}",
267 "errorBound (eps=(0::real))"];
269 ("DiffApp",["maximum_of","function"],
270 ["DiffApp","max_by_calculus"]);
272 val (p,_,f,nxt,_,pt) = CalcTreeTEST [(fmz, (dI',pI',mI'))];
273 val (p,_,f,nxt,_,pt) = me nxt p c pt;
274 val (p,_,f,nxt,_,pt) = me nxt p c pt;
275 val (p,_,f,nxt,_,pt) = me nxt p c pt;
276 val (p,_,f,nxt,_,pt) = me nxt p c pt;
277 val (p,_,f,nxt,_,pt) = (me nxt p c pt) handle e => print_exn e;
278 val (p,_,f,nxt,_,pt) = me nxt p c pt;
279 val (p,_,f,nxt,_,pt) = me nxt p c pt;
280 val (p,_,f,nxt,_,pt) = me nxt p c pt;
281 val (p,_,f,nxt,_,pt) = me nxt p c pt;
282 case nxt of (_, Specify_Method ["DiffApp","max_by_calculus"]) => ()
283 | _ => raise error "diffapp.sml: max-exp me, nxt = Specify_Method";
285 val oris = fst3 (get_obj g_origin pt (fst p)); writeln(oris2str oris);
286 val pits = get_obj g_pbl pt (fst p); writeln(itms2str_ ctxt pits);
288 val (p,_,f,nxt,_,pt) = me nxt p c pt;
289 val mits = get_obj g_met pt (fst p); writeln(itms2str_ ctxt mits);
290 val (p,_,f,nxt,_,pt) = me nxt p c pt;
291 val (p,_,f,nxt,_,pt) = me nxt p c pt;
292 val (p,_,f,nxt,_,pt) = me nxt p c pt;
293 case nxt of (_,Apply_Method ["DiffApp","max_by_calculus"] ) => ()
294 | _ => raise error "diffapp.sml: max-exp me, nxt = Apply_Method";
295 val (p,_,f,nxt,_,pt) = me nxt p c pt;
297 (*since 0508 Apply_Method does the 1st step, if NONE init_form -------------
298 (*val nxt = ("Subproblem",Subproblem ("DiffApp",["make","function"]))*)
299 val (p,_,f,nxt,_,pt) = (me nxt p c pt) handle e => print_exn_G e;
300 (*val nxt = ("Refine_Tacitly",Refine_Tacitly ["make","function"])*)
301 val (p,_,f,nxt,_,pt) = me nxt p c pt;
302 (*val nxt = ("Model_Problem",Model_Problem ["by_explicit","make","function"])*)
303 ----------------------------------------------------------------------------*)
304 case nxt of (_, Model_Problem(*["by_explicit", "make", "function"]*)) => ()
305 | _ => raise error "diffapp.sml: max-exp me, nxt = Model_Problem";
307 val (p,_,f,nxt,_,pt) = me nxt p c pt;
308 val (p,_,f,nxt,_,pt) = me nxt p c pt;
309 val (p,_,f,nxt,_,pt) = me nxt p c pt;
310 val (p,_,f,nxt,_,pt) = me nxt p c pt;
311 val (p,_,f,nxt,_,pt) = me nxt p c pt;
313 val oris = fst3 (get_obj g_origin pt (fst p));writeln(oris2str oris);
314 val pits = get_obj g_pbl pt (fst p);writeln(itms2str_ ctxt pits);
316 val (p,_,f,nxt,_,pt) = me nxt p c pt;
317 val (p,_,f,nxt,_,pt) = me nxt p c pt;
318 val (p,_,f,nxt,_,pt) = me nxt p c pt;
319 val (p,_,f,nxt,_,pt) = me nxt p c pt;
320 case nxt of (_, Apply_Method ["DiffApp", "make_fun_by_explicit"]) => ()
321 | _ => raise error "diffapp.sml: max-exp Apply_Method ([1], Met) ";
323 (*----since WN050901 (ie. corr. mathengine#nxt_specify_ ..nxt_spec Pbl->p_
325 val (p,_,f,nxt,_,pt) = me nxt p c pt;
327 ### assod: NotAss m= Subproblem' ,
330 (Subproblem (thy, [normalize, polynomial, univariate, equation])))]
331 (hd (filterVar A [A = a * b, (a / 2) ^^^ 2 + (b / 2) ^^^ 2 = r ^^^ 2]))
332 *** stac2tac_ TODO: no match for Substitute
334 *** (Subproblem (thy, [normalize, polynomial, univariate, equation])))]
335 *** (hd (filterVar A [A = a * b, (a / 2) ^^^ 2 + (b / 2) ^^^ 2 = r ^^^ 2]))
336 Exception- ERROR raised
338 ############################################################################
339 # presumerably didnt work before either, but not detected due to Emtpy_Tac #
340 ############################################################################
342 (*val nxt = Subproblem ("DiffApp",["univariate","equation"])) *)
343 val (p,_,f,nxt,_,pt) = me nxt p c pt;
344 (*val nxt = Refine_Tacitly ["univariate","equation"])*)
346 val oris = fst3 (get_obj g_origin pt (fst p));writeln(oris2str oris);
347 val pits = get_obj g_pbl pt (fst p);writeln(itms2str_ ctxt pits);
349 val (p,_,f,nxt,_,pt) = me nxt p c pt;
350 val (p,_,f,nxt,_,pt) = me nxt p c pt;
351 val (p,_,f,nxt,_,pt) = me nxt p c pt;val (p,_,f,nxt,_,pt) = me nxt p c pt;
352 val (p,_,f,nxt,_,pt) = me nxt p c pt;val (p,_,f,nxt,_,pt) = me nxt p c pt;
353 val (p,_,f,nxt,_,pt) = me nxt p c pt;val (p,_,f,nxt,_,pt) = me nxt p c pt;
354 (*val nxt = ("Apply_Method",Apply_Method ["PolyEq","normalize_poly"])*)
356 val (p,_,f,nxt,_,pt) = me nxt p c pt;
357 (*val f = Form' (FormKF (~1,EdUndef,3,Nundef,"A = a * b"))*)
358 val (p,_,f,nxt,_,pt) = me nxt p c pt;
359 val (p,_,f,nxt,_,pt) = me nxt p c pt;val (p,_,f,nxt,_,pt) = me nxt p c pt;
360 val (p,_,f,nxt,_,pt) = me nxt p c pt;val (p,_,f,nxt,_,pt) = me nxt p c pt;
361 val (p,_,f,nxt,_,pt) = me nxt p c pt;val (p,_,f,nxt,_,pt) = me nxt p c pt;
362 val (p,_,f,nxt,_,pt) = me nxt p c pt;val (p,_,f,nxt,_,pt) = me nxt p c pt;
363 val (p,_,f,nxt,_,pt) = me nxt p c pt;val (p,_,f,nxt,_,pt) = me nxt p c pt;
364 val (p,_,f,nxt,_,pt) = me nxt p c pt;val (p,_,f,nxt,_,pt) = me nxt p c pt;
365 val (p,_,f,nxt,_,pt) = me nxt p c pt;val (p,_,f,nxt,_,pt) = me nxt p c pt;
366 (*val f = Form' (FormKF (~1,EdUndef,4,Nundef,"[b = A / a]"))*)
368 ------------------------------------------------------------------------*)
371 Error' (Error_ "Refine_Tacitly [\"univariate\",\"equation\"] not applicable")*)
374 (*----postponed.15.5.03 run scripts for maximum-example: univariate equation
376 val (p,_,f,nxt,_,pt) = (me nxt p c pt) handle e => print_exn e;
378 val oris = fst3 (get_obj g_origin pt (fst p));writeln(oris2str oris);
380 val pits = get_obj g_pbl pt (fst p);writeln(itms2str_ ctxt pits);
381 val pits = get_obj g_pbl pt [];writeln(itms2str_ ctxt pits);
383 val mits = get_obj g_met pt (fst p);writeln(itms2str_ ctxt mits);
384 val mits = get_obj g_met pt [];writeln(itms2str_ ctxt mits);
386 itms2args thy ["DiffApp","max_by_calculus"] mits;
388 val (p,_,f,nxt,_,pt) = me nxt p c pt;
392 "--------- autoCalc .. scripts for maximum-example ---------------";
393 "--------- autoCalc .. scripts for maximum-example ---------------";
394 "--------- autoCalc .. scripts for maximum-example ---------------";
395 (*++++++++ see systest/inform.sml 'complete_metitms' ++++++++*)
398 ["fixedValues [r=Arbfix]","maximum A",
400 "relations [A=a*b, (a/2)^2 + (b/2)^2 = r^2]",
401 "relations [A=a*b, (a/2)^2 + (b/2)^2 = r^2]",
402 "relations [A=a*b, a/2=r*sin alpha, b/2=r*cos alpha]",
404 "boundVariable a","boundVariable b","boundVariable alpha",
405 "interval {x::real. 0 <= x & x <= 2*r}",
406 "interval {x::real. 0 <= x & x <= 2*r}",
407 "interval {x::real. 0 <= x & x <= pi}",
408 "errorBound (eps=(0::real))"];
410 ("DiffApp",["maximum_of","function"],
411 ["DiffApp","max_by_calculus"]);
413 CalcTree [(fmz, (dI',pI',mI'))];
414 Iterator 1; moveActiveRoot 1;
415 autoCalculate 1 CompleteCalcHead;
416 refFormula 1 (get_pos 1 1);
418 fetchProposedTactic 1;
419 autoCalculate 1 (Step 1);
421 fetchProposedTactic 1;
422 autoCalculate 1 (Step 1);
423 (*Subproblem on_interval maximum_of function*)
424 autoCalculate 1 CompleteCalcHead;
426 fetchProposedTactic 1;
427 val ((pt,p),_) = get_calc 1;
428 val mits = get_obj g_met pt (fst p);
429 writeln (itms2str_ ctxt mits);
431 if itms2str_ ctxt mits = "[\n(1 ,[1] ,true ,#Given ,Cor functionEq (hd rs_) ,(t_, [hd rs_])),\n(2 ,[1] ,true ,#Given ,Cor boundVariable v_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 ()
432 else raise error "diffapp.sml: diff.behav. in autoCalc .. scripts for max 1";
434 (*FIXME: the environments contain identifers, and NOT values ?!?!?*)
435 (* WN051209 while extending 'fun step' for initac, this became better ...
436 if itms2str_ ctxt 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 ()
437 else raise error "diffapp.sml: diff.behav. in autoCalc .. scripts for max 1";
442 "--------------------- 30.4.03: maximum .. rewrite_set_ list_rls ---------";
443 "--------------------- 30.4.03: maximum .. rewrite_set_ list_rls ---------";
444 "--------------------- 30.4.03: maximum .. rewrite_set_ list_rls ---------";
446 "Script Maximum_value(fix_::bool list)(m_::real) (rs_::bool list)\
447 \ (v_v::real) (itv_v::real set) (err_::bool) = \
448 \ (let e_e = (hd o (filterVar m_)) rs_; \
449 \ t_ = (if 1 < length_ rs_ \
450 \ then (SubProblem (Reals_,[make,function],[no_met])\
451 \ [REAL m_, REAL v_v, BOOL_LIST rs_])\
453 \ (mx_::real) = SubProblem (Reals_,[on_interval,max_of,function], \
454 \ [Isac,maximum_on_interval])\
455 \ [BOOL t_, REAL v_v, REAL_SET itv_]\
456 \ in ((SubProblem (Reals_,[find_values,tool],[Isac,find_values]) \
457 \ [REAL mx_, REAL (Rhs t_), REAL v_v, REAL m_, \
458 \ BOOL_LIST (dropWhile (ident e_e) rs_)])::bool list))";
460 val fix_ = (str2term "fix_::bool list",
461 str2term "[r=Arbfix]");
462 val m_ = (str2term "m_::real",
464 val rs_ = (str2term "rs_::bool list",
465 str2term "[A = a*b, (a/2)^^^2 + (b/2)^^^2 = r^^^2]");
466 val v_v = (str2term "v_v::real",
468 val itv_ = (str2term "itv_v::real set",
469 str2term "{x::real. 0 <= x & x <= 2*r}");
470 val err_ = (str2term "err_::bool",
472 val env = [fix_, m_, rs_ ,v_, itv_, err_];
474 (*--- 1.line in script ---*)
475 val t = str2term "(hd o (filterVar m_)) (rs_::bool list)";
476 val s = subst_atomic env t;
478 "(hd o filterVar A) [A = a * b, (a / 2) ^^^ 2 + (b / 2) ^^^ 2 = r ^^^ 2]";
479 val SOME (s',_) = rewrite_set_ thy false list_rls s;
480 val s'' = term2str s';
481 if s''="A = a * b" then () else raise error "new behaviour with list_rls 1.1.";
482 val env = env @ [(str2term "e_::bool",str2term "A = a * b")];
484 (*--- 2.line: condition alone ---*)
485 val t = str2term "1 < length_ (rs_::bool list)";
486 val s = subst_atomic env t;
488 "1 < length_ [A = a * b, (a / 2) ^^^ 2 + (b / 2) ^^^ 2 = r ^^^ 2]";
489 val SOME (s',_) = rewrite_set_ thy false list_rls s;
490 val s'' = term2str s';
491 if s''="True" then () else raise error "new behaviour with list_rls 1.2.";
493 (*--- 2.line in script ---*)
495 "(if 1 < length_ rs_ \
496 \ then (SubProblem (Reals_,[make,function],[no_met])\
497 \ [REAL m_, REAL v_v, BOOL_LIST rs_])\
499 val s = subst_atomic env t;
501 "if 1 < length_ [A = a * b, (a / 2) ^^^ 2 + (b / 2) ^^^ 2 = r ^^^ 2]\
502 \then SubProblem (Reals_, [make, function], [no_met])\
504 \ BOOL_LIST [A = a * b, (a / 2) ^^^ 2 + (b / 2) ^^^ 2 = r ^^^ 2]]\
505 \else hd [A = a * b, (a / 2) ^^^ 2 + (b / 2) ^^^ 2 = r ^^^ 2]";
506 val SOME (s',_) = rewrite_set_ thy false list_rls s;
507 val s'' = term2str s';
509 "SubProblem (Reals_, [make, function], [no_met])\n\
510 \ [REAL A, REAL b,\n\
511 \ BOOL_LIST [A = a * b, (a / 2) ^^^ 2 + (b / 2) ^^^ 2 = r ^^^ 2]]" then ()
512 else raise error "new behaviour with list_rls 1.3.";
513 val env = env @ [(str2term "t_::bool",
514 str2term "A = (2*sqrt(r^^^2-(b/2)^^^2)) * b")];
518 "---------------------- 1.5.03: Make_fun_by_explicit ---------------------";
519 "---------------------- 1.5.03: Make_fun_by_explicit ---------------------";
520 "---------------------- 1.5.03: Make_fun_by_explicit ---------------------";
522 "Script Make_fun_by_explicit (f_::real) (v_v::real) \
523 \ (eqs_::bool list) = \
524 \ (let h_ = (hd o (filterVar f_)) eqs_; \
525 \ e_1 = hd (dropWhile (ident h_) eqs_); \
526 \ vs_ = dropWhile (ident f_) (Vars h_); \
527 \ v_1 = hd (dropWhile (ident v_v) vs_); \
528 \ (s_1::bool list)=(SubProblem(Reals_,[univar,equation],[no_met])\
529 \ [BOOL e_1, REAL v_1])\
530 \ in Substitute [(v_1 = (rhs o hd) s_1)] h_)";
531 val f_ = (str2term "f_::real",
533 val v_v = (str2term "v_v::real",
535 val eqs_=(str2term "eqs_::bool list",
536 str2term "[A = a * b, (a / 2) ^^^ 2 + (b / 2) ^^^ 2 = r ^^^ 2]");
537 val env = [f_, v_v, eqs_];
539 (*--- 1.line in script ---*)
540 val t = str2term "(hd o (filterVar v_v)) (eqs_::bool list)";
541 val s = subst_atomic env t;
544 "(hd o filterVar b) [A = a * b, (a / 2) ^^^ 2 + (b / 2) ^^^ 2 = r ^^^ 2]";
545 val SOME (t',_) = rewrite_set_ thy false list_rls t;
546 val s' = term2str t';
547 if s' = "A = a * b" then () else raise error "new behaviour with list_rls 2.1";
548 val env = env @ [(str2term "h_::bool", str2term s')];
550 (*--- 2.line in script ---*)
551 val t = str2term "hd (dropWhile (ident h_) (eqs_::bool list))";
552 val s = subst_atomic env t;
555 "hd (dropWhile (ident (A = a * b))\
556 \ [A = a * b, (a / 2) ^^^ 2 + (b / 2) ^^^ 2 = r ^^^ 2])";
557 mem_rls "dropWhile_Cons" list_rls;
558 mem_rls "Atools.ident" list_rls;
559 val SOME (t',_) = rewrite_set_ thy false list_rls t;
560 val s' = term2str t';
561 if s' = "(a / 2) ^^^ 2 + (b / 2) ^^^ 2 = r ^^^ 2" then ()
562 else raise error "new behaviour with list_rls 2.2";
563 val env = env @ [(str2term "e_1::bool", str2term s')];
565 (*--- 3.line in script ---*)
566 val t = str2term "dropWhile (ident f_) (Vars (h_::bool))";
567 val s = subst_atomic env t;
569 val t = str2term "dropWhile (ident A) (Vars (A = a * b))";
570 val SOME (t',_) = rewrite_set_ thy false list_rls t;
571 val s' = term2str t';
572 if s' = "[a, b]" then () else raise error "new behaviour with list_rls 2.3";
573 val env = env @ [(str2term "vs_::real list", str2term s')];
575 (*--- 4.line in script ---*)
576 val t = str2term "hd (dropWhile (ident v_v) vs_)";
577 val s = subst_atomic env t;
579 val t = str2term "hd (dropWhile (ident b) [a, b])";
580 val SOME (t',_) = rewrite_set_ thy false list_rls t;
581 val s' = term2str t';
582 if s' = "a" then () else raise error "new behaviour with list_rls 2.4.";
583 val env = env @ [(str2term "v_1::real", str2term s')];
585 (*--- 5.line in script ---*)
586 val t = str2term "(SubProblem(Reals_,[univar,equation],[no_met])\
587 \ [BOOL e_1, REAL v_1])";
588 val s = subst_atomic env t;
590 "SubProblem (Reals_, [univar, equation], [no_met])\n\
591 \ [BOOL ((a / 2) ^^^ 2 + (b / 2) ^^^ 2 = r ^^^ 2), REAL a]";
592 val env = env @ [(str2term "s_1::bool list",
593 str2term "[a = 2 * sqrt (r^^^2 - (b/2)^^^2)]")];
595 (*--- 6.line in script ---*)
596 val t = str2term "Substitute [(v_1 = (rhs o hd) (s_1::bool list))] (h_::bool)";
597 val s = subst_atomic env t;
600 "Substitute [(a = (rhs o hd) [a = 2 * sqrt (r ^^^ 2 - (b / 2) ^^^ 2)])]\n\
602 mem_rls "Tools.rhs" list_rls;
603 val SOME (t',_) = rewrite_set_ thy false list_rls t;
604 val s' = term2str t';
605 if s' = "Substitute [a = 2 * sqrt (r ^^^ 2 - (b / 2) ^^^ 2)] (A = a * b)"
606 then () else raise error "new behaviour with list_rls 2.6.";
609 "---------------------- 2.5.03: Make_fun_by_new_variable -----------------";
610 "---------------------- 2.5.03: Make_fun_by_new_variable -----------------";
611 "---------------------- 2.5.03: Make_fun_by_new_variable -----------------";
613 "Script Make_fun_by_new_variable (f_::real) (v_v::real) \
614 \ (eqs_::bool list) = \
615 \(let h_ = (hd o (filterVar f_)) eqs_; \
616 \ es_ = dropWhile (ident h_) eqs_; \
617 \ vs_ = dropWhile (ident f_) (Vars h_); \
618 \ v_1 = nth_ 1 vs_; \
619 \ v_2 = nth_ 2 vs_; \
620 \ e_1 = (hd o (filterVar v_1)) es_; \
621 \ e_2 = (hd o (filterVar v_2)) es_; \
622 \ (s_1::bool list) = (SubProblem (Reals_,[univar,equation],[no_met])\
623 \ [BOOL e_1, REAL v_1]);\
624 \ (s_2::bool list) = (SubProblem (Reals_,[univar,equation],[no_met])\
625 \ [BOOL e_2, REAL v_2])\
626 \in Substitute [(v_1 = (rhs o hd) s_1),(v_2 = (rhs o hd) s_2)] h_)";
627 val f_ = (str2term "f_::real",
629 val v_v = (str2term "v_v::real",
631 val eqs_=(str2term "eqs_::bool list",
632 str2term "[A=a*b, a/2=r*sin alpha, b/2=r*cos alpha]");
633 val env = [f_, v_v, eqs_];
635 (*--- 1.line in script ---*)
636 val t = str2term "(hd o (filterVar (f_::real))) (eqs_::bool list)";
637 val s = subst_atomic env t;
640 "(hd o filterVar A) [A = a * b, a / 2 = r * sin alpha, b / 2 = r * cos alpha]";
642 val SOME (t',_) = rewrite_set_ thy false list_rls t;
643 trace_rewrite:=false;
644 val s' = term2str t';
645 if s' = "A = a * b" then() else raise error "new behaviour with list_rls 3.1.";
646 val env = env @ [(str2term "h_::bool", str2term s')];
648 (*--- 2.line in script ---*)
649 val t = str2term "dropWhile (ident (h_::bool)) (eqs_::bool list)";
650 val s = subst_atomic env t;
653 "dropWhile (ident (A = a * b))\
654 \ [A = a * b, a / 2 = r * sin alpha, b / 2 = r * cos alpha]";
655 val SOME (t',_) = rewrite_set_ thy false list_rls t;
656 val s' = term2str t';
657 if s' = "[a / 2 = r * sin alpha, b / 2 = r * cos alpha]"
658 then () else raise error "new behaviour with list_rls 3.2.";
659 val env = env @ [(str2term "es_::bool list", str2term s')];
661 (*--- 3.line in script ---*)
662 val t = str2term "dropWhile (ident (f_::real)) (Vars (h_::bool))";
663 val s = subst_atomic env t;
665 val t = str2term "dropWhile (ident A) (Vars (A = a * b))";
666 val SOME (t',_) = rewrite_set_ thy false list_rls t;
667 val s' = term2str t';
668 if s' = "[a, b]" then () else raise error "new behaviour with list_rls 3.3.";
669 val env = env @ [(str2term "vs_::real list", str2term s')];
671 (*--- 4.line in script ---*)
672 val t = str2term "nth_ 1 vs_";
673 val s = subst_atomic env t;
675 val t = str2term "nth_ 1 [a, b]";
676 val SOME (t',_) = rewrite_set_ thy false list_rls t;
677 val s' = term2str t';
678 if s' = "a" then () else raise error "new behaviour with list_rls 3.4.";
679 val env = env @ [(str2term "v_1", str2term s')];
681 (*--- 5.line in script ---*)
682 val t = str2term "nth_ 2 vs_";
683 val s = subst_atomic env t;
685 val t = str2term "nth_ 2 [a, b]";
686 val SOME (t',_) = rewrite_set_ thy false list_rls t;
687 val s' = term2str t';
688 if s' = "b" then () else raise error "new behaviour with list_rls 3.5.";
689 val env = env @ [(str2term "v_2", str2term s')];
691 (*--- 6.line in script ---*)
692 val t = str2term "(hd o (filterVar v_1)) (es_::bool list)";
693 val s = subst_atomic env t;
696 "(hd o filterVar a) [a / 2 = r * sin alpha, b / 2 = r * cos alpha]";
697 val SOME (t',_) = rewrite_set_ thy false list_rls t;
698 val s' = term2str t';
699 if s' = "a / 2 = r * sin alpha" then ()
700 else raise error "new behaviour with list_rls 3.6.";
701 val e_1 = str2term "e_1::bool";
702 val env = env @ [(e_1, str2term s')];
704 (*--- 7.line in script ---*)
705 val t = str2term "(hd o (filterVar v_2)) (es_::bool list)";
706 val s = subst_atomic env t;
709 "(hd o filterVar b) [a / 2 = r * sin alpha, b / 2 = r * cos alpha]";
710 val SOME (t',_) = rewrite_set_ thy false list_rls t;
711 val s' = term2str t';
712 if s' = "b / 2 = r * cos alpha" then ()
713 else raise error "new behaviour with list_rls 3.7.";
714 val env = env @ [(str2term "e_2::bool", str2term s')];
716 (*--- 8.line in script ---*)
717 val t = str2term "(SubProblem (Reals_,[univar,equation],[no_met])\
718 \ [BOOL e_1, REAL v_1])";
719 val s = subst_atomic env t;
721 "SubProblem (Reals_, [univar, equation], [no_met])\
722 \ [BOOL (a / 2 = r * sin alpha), REAL a]";
723 val s_1 = str2term "[a = 2*r*sin alpha]";
724 val env = env @ [(str2term "s_1::bool list", s_1)];
726 (*--- 9.line in script ---*)
727 val t = str2term "(SubProblem (Reals_,[univar,equation],[no_met])\
728 \ [BOOL e_2, REAL v_2])";
729 val s = subst_atomic env t;
731 "SubProblem (Reals_, [univar, equation], [no_met])\
732 \ [BOOL (b / 2 = r * cos alpha), REAL b]";
733 val s_2 = str2term "[b = 2*r*cos alpha]";
734 val env = env @ [(str2term "s_2::bool list", s_2)];
736 (*--- 10.line in script ---*)
738 "Substitute [(v_1 = (rhs o hd) s_1),(v_2 = (rhs o hd) s_2)] (h_::bool)";
739 val s = subst_atomic env t;
741 "Substitute\n [(a = (rhs o hd) [a = 2 * r * sin alpha]),\
742 \ (b = (rhs o hd) [b = 2 * r * cos alpha])] (A = a * b)";
743 val SOME (s',_) = rewrite_set_ thy false list_rls s;
744 val s'' = term2str s';
746 "Substitute [a = 2 * r * sin alpha, b = 2 * r * cos alpha] (A = a * b)"
747 then () else raise error "new behaviour with list_rls 3.10.";