2 (* tests for IsacKnowledge/DiffApp
3 author Walther Neuper 000301
4 (c) due to copyright terms
6 use"../smltest/IsacKnowledge/diffapp.sml";
10 "Contents----------------------------------------------";
11 " Specify_Problem (match_itms_oris) ";
12 " test specify, fmz <> [] ";
13 " test specify, fmz = [] ";
14 " problemtypes + formalizations ";
15 "-------------------- ptree of {(a,b). is-max ... ----------------";
16 "--------- me .. scripts for maximum-example ---------------------";
17 "--------- autoCalc .. scripts for maximum-example ---------------";
19 "--------------------- 30.4.03: maximum .. rewrite_set_ list_rls ---------";
20 "---------------------- 1.5.03: Make_fun_by_explicit ---------------------";
21 "---------------------- 2.5.03: Make_fun_by_new_variable -----------------";
27 " #################################################### ";
28 " problemtypes + formalizations ";
29 " #################################################### ";
30 " -------------- [maximum_of,function] --------------- ";
32 ["fixedValues f_ix","maximum m_m","valuesFor v_s","relations r_s"];
33 (*=== inhibit exn 110722=============================================================
34 map (the o (parseold thy)) pbt;
35 === inhibit exn 110722=============================================================*)
37 ["fixedValues [r=Arbfix]","maximum A",
39 "relations [A=a*b, (a/2)^^^2 + (b/2)^^^2 = r^^^2]",
40 "relations [A=a*b, (a/2)^^^2 + (b/2)^^^2 = r^^^2]",
41 "relations [A=a*b, a/2=r*sin alpha, b/2=r*cos alpha]",
43 "boundVariable a","boundVariable b","boundVariable alpha",
44 "interval {x::real. 0 <= x & x <= 2*r}",
45 "interval {x::real. 0 <= x & x <= 2*r}",
46 "interval {x::real. 0 <= x & x <= pi}",
47 "errorBound (eps=(0::real))"];
48 (*=== inhibit exn 110722=============================================================
49 map (the o (parseold thy)) fmz;
50 " -------------- [make,function] -------------- ";
51 === inhibit exn 110722=============================================================*)
53 ["functionOf f_f","boundVariable v_v","equalities eqs",
54 "functionTerm f_0_0"];
55 (*=== inhibit exn 110722=============================================================
56 map (the o (parseold thy)) pbt;
58 ["functionOf A","boundVariable a","boundVariable b",
59 "equalities [A=a*b, (a/2)^^^2 + (b/2)^^^2 = r^^^2]",
60 (*28.11.00: "functionTerm (A_0=Undef)"*)"functionTerm (Undef)"];
61 map (the o (parseold thy)) fmz12;
63 ["functionOf A","boundVariable a","boundVariable b",
64 "equalities [A=a*b, a/2=r*sin alpha, b/2=r*cos alpha]",
65 (*28.11.00: "functionTerm (A_0=Undef)"*)"functionTerm (Undef)"];
66 map (the o (parseold thy)) fmz3;
67 " --------- [univar,equation] --------- ";
69 ["equality e_e","solveFor v_v","solutions v_i_i"];
70 map (the o (parseold thy)) pbt;
72 ["equality ((a/2)^^^2 + (b/2)^^^2 = r^^^2)",
73 "solveFor b","solutions b_i"];
74 map (the o (parseold thy)) fmz;
75 " ---- [on_interval,maximum_of,function] ---- ";
77 ["functionTerm t_t","boundVariable v_v","interval itv_v",
78 "errorBound err_r","maxArgument v_0"];
79 map (the o (parseold thy)) pbt;
81 [(*28.11.00: "functionTerm (A_0 = a*sqrt(#4*r^^^#2 - a^^^#2))",*)
82 "functionTerm (a*sqrt(4*r^^^2 - a^^^2))",
83 (*28.11.00: "functionTerm (A_0 = b*sqrt(#4*r^^^#2 - b^^^#2))",*)
84 "functionTerm (b*sqrt(4*r^^^2 - b^^^2))",
85 "boundVariable a","boundVariable b",
86 "interval {x::real. 0 <= x & x <= 2*r}",
87 "errorBound (eps=0)","maxArgument (a_0=Undef)"];
88 map (the o (parseold thy)) fmz12;
90 [(*28.11.00: "functionTerm (A_0 = (#2*r*sin alpha)*(#2*r*cos alpha))",*)
91 "functionTerm ((2*r*sin alpha)*(2*r*cos alpha))",
92 "boundVariable alpha",
93 "interval {x::real. 0 <= x & x <= pi}",
94 "errorBound (eps=0)","maxArgument (a_0=Undef)"];
95 map (the o (parseold thy)) fmz3;
96 " --------- [derivative_of,function] --------- ";
98 ["functionTerm f_f","boundVariable v_v","derivative f_f'"];
99 map (the o (parseold thy)) pbt;
101 [(*28.11.00: "functionTerm (A_0=a*#2*sqrt r^^^#2 - (a//#2)^^^#2)",*)
102 "functionTerm (a*2*sqrt r^^^2 - (a/2)^^^2)",
104 (*28.11.00: "derivative (A_0'=Undef)"*)"derivative (Undef)"];
105 map (the o (parseold thy)) fmz;
106 " --------- [find_values,tool] --------- ";
108 ["maxArgument ma_a","functionTerm f_f","boundVariable v_v",
109 "valuesFor vls_s","additionalRels r_s"];
110 map (the o (parseold thy)) pbt;
112 ["maxArgument (a_0=(srqt 2)*r)",
113 (*28.11.00: "functionTerm (A_0=a*#2*sqrt r^^^#2 - (a//#2)^^^#2)",*)
114 "functionTerm (a*2*sqrt r^^^2 - (a/2)^^^2)",
116 "valuesFor [a,b]","maximum A",
117 "additionalRels [(a/2)^^^2 + (b/2)^^^2 = r^^^2]"];
118 map (the o (parseold thy)) fmz1;
120 === inhibit exn 110722=============================================================*)
123 "-------------------- ptree of {(a,b). is-max ... --------------------------";
124 "-------------------- ptree of {(a,b). is-max ... --------------------------";
125 "-------------------- ptree of {(a,b). is-max ... --------------------------";
127 (* Teil von max-on-surface.sml,
128 der nach Init_Proof -> prep_ori wieder l"auft
129 (f"ur tests mit neuer pos')
130 use"test-max-surf1.sml";
132 Compiler.Control.Print.printDepth:=7; (*4 is default*)
133 Compiler.Control.Print.printDepth:=4; (*4 is default*)
136 (* --vvv-- ausgeliehen von test-root-equ/sml *)
139 ("Script",["sqroot-test","univariate","equation"],
140 ["Script","squ-equ-test2"]);
141 val fmz = ["equality (sqrt(9+4*x)=sqrt x + sqrt(5+x))",
142 "solveFor x","errorBound (eps=0)",
145 val (mI,m) = ("Init_Proof",Init_Proof (fmz, (dI',pI',mI')));
146 val ((p,p_),_,_,_,_,(_,pt,_)) = do_ (mI,m) e_pos'[1](e_scr,EmptyPtree,[]);
147 --^^^-- ausgeliehen von test-root-equ/sml *)
148 (*-------------- 9.6.03 --- cappend_ ... term -------irreparabler test
150 cappend_problem EmptyPtree [] loc ([],(dI',pI',mI'));
151 val pos = (lev_on o lev_dn) [];
152 (* val pos = ([1]) *)
153 val (pt,_) = cappend_parent pt pos loc "{(a,b). is-max ..."
154 Empty_Tac TransitiveB;
155 val pos = (lev_on o lev_dn) pos;
156 (*val pos = ([1,1])*)
157 val (pt,_) = cappend_atomic pt pos loc "{(a,b). is-max ..."
158 Empty_Tac ("[1,1]:{(a,b). is-extremum ...",[]) Complete;
159 val pos = lev_on pos;
160 (*val pos = ([1,2])*)
161 val (pt,_) = cappend_atomic pt pos loc "{(a,b). is-extremum ..."
162 Empty_Tac ("[1,2]:{(a,b). f_x(a,b) ...",[]) Complete;
163 val pos = lev_up pos;
165 val (pt,_) = append_result pt pos e_istate ("[1#]:{(a,b). f_x(a,b) ...",[])
168 val pos = lev_on pos;
170 val (pt,_) = cappend_atomic pt pos loc "{(a,b). f_x(a,b) ..."
171 Empty_Tac ("[2]:{(a,b). f_x & f_xx &...",[]) Complete;
172 val pos = lev_on pos;
173 (*al pos = [3] : pos*)
174 val (pt,_) = cappend_parent pt pos loc "{(a,b). f_x & f_xx &..."
175 Empty_Tac TransitiveB;
176 val pos = (lev_on o lev_dn) pos;
178 val (pt,_) = cappend_atomic pt pos loc "{(a,b). f_x & f_xx & ..."
179 Empty_Tac ("[3,1]:{(a,b). f_x & f_xx } cup ...",[]) Complete;
180 val pos = lev_on pos;
182 val (pt,_) = cappend_atomic pt pos loc "{(a,b). f_x & f_xx } cup.."
183 Empty_Tac ("[3,2]:{(a,b). f_x ..} cup ...",[]) Complete;
185 val pos = lev_up pos;
187 val (pt,_) = append_result pt pos e_istate ("[3#]:{(a,b). f_x ..} cup..",[])
189 val pos = lev_on pos;
190 (*val pos = [4] : pos *)
191 val (pt,_) = cappend_parent pt pos loc "{(a,b). f_x ..} cup ..."
192 Empty_Tac IntersectB;
193 val pos = (lev_on o lev_dn) pos;
194 (*val pos = ([4,1]) *)
195 val (pt,_) = cappend_parent pt pos loc "set_1 = ..."
199 val pos = (lev_on o lev_dn) pos;
200 (*val pos = ([4,1,1]) *)
201 val (pt,_) = cappend_parent(*pbl*) pt pos loc"f_x = d/dx x^3 ..."
202 Empty_Tac TransitiveB;
203 val pos = (lev_on o lev_dn) pos;
204 (*val pos = ([4,1,1,1]) *)
205 val (pt,_) = cappend_parent pt pos loc "d/dx x^3 ..."
206 Empty_Tac TransitiveB;
207 val pos = (lev_on o lev_dn) pos;
208 (*val pos = ([4,1,1,1,1]) *)
209 val (pt,_) = cappend_atomic pt pos loc "d/dx x^3 ..."
210 Empty_Tac ("[4,1,1,1,1]:3x^2 + d/dx ...",[]) Complete;
211 val pos = lev_on pos;
212 (*val pos = ([4,1,1,1,2]) *)
213 val (pt,_) = cappend_atomic pt pos loc "3x^2 + d/dx ..."
214 Empty_Tac ("[4,1,1,1,2]:3x^2 + 0 + d/dx ...",[]) Complete;
215 val pos = lev_on pos;
216 (*pos = ([4,1,1,1,3]) *)
217 val (pt,_) = cappend_atomic pt pos loc "3x^2 + 0 + d/dx ..."
218 Empty_Tac ("[4,1,1,1,3]:3x^2 + 0 -3 ...",[]) Complete;
220 val pos = lev_up pos;
221 (*pos = ([4,1,1,1]) *)
222 val (pt,_) = append_result pt pos e_istate ("[4,1,1,1#]:3x^2 -3.",[])Complete;
224 val pos = lev_up pos;
225 (*val pos = ([4,1,1]) *)
226 val (pt,_) = append_result pt pos e_istate ("[4,1,1#]:found 3x^2 -3 ...",[])
229 val pos = lev_on pos;
230 (*val pos = ([4,1,2]+) *)
231 val (pt,_) = cappend_parent(*pbl*) pt pos loc "f_y = d/dy x^3 ..."
232 Empty_Tac TransitiveB;
234 writeln (pr_ptree pr_short pt);
238 1. {(a,b). is-max ...
239 1.1. {(a,b). is-max ...
240 1.2. {(a,b). is-extremum ...
241 2. {(a,b). f_x(a,b) ...
242 3. {(a,b). f_x & f_xx &...
243 3.1. {(a,b). f_x & f_xx & ...
244 3.2. {(a,b). f_x & f_xx } cup..
245 4. {(a,b). f_x ..} cup ...
247 4.1.1. f_x = d/dx x^3 ...
248 4.1.1.1. d/dx x^3 ...
249 4.1.1.1.1. d/dx x^3 ...
250 4.1.1.1.2. 3x^2 + d/dx ...
251 4.1.1.1.3. 3x^2 + 0 + d/dx ...
252 4.1.2. f_y = d/dy x^3 ...
254 use"test-max-surf1.sml";
256 -------------- 9.6.03 --- cappend_ ... term -------irreparabler test---*)
259 "--------- me .. scripts for maximum-example ---------------------";
260 "--------- me .. scripts for maximum-example ---------------------";
261 "--------- me .. scripts for maximum-example ---------------------";
264 ["fixedValues [r=Arbfix]","maximum A",
266 "relations [A=a*b, (a/2)^^^2 + (b/2)^^^2 = r^^^2]",
267 "relations [A=a*b, (a/2)^^^2 + (b/2)^^^2 = r^^^2]",
268 "relations [A=a*b, a/2=r*sin alpha, b/2=r*cos alpha]",
270 "boundVariable a","boundVariable b","boundVariable alpha",
271 "interval {x::real. 0 <= x & x <= 2*r}",
272 "interval {x::real. 0 <= x & x <= 2*r}",
273 "interval {x::real. 0 <= x & x <= pi}",
274 "errorBound (eps=(0::real))"];
276 ("DiffApp",["maximum_of","function"],
277 ["DiffApp","max_by_calculus"]);
279 val (p,_,f,nxt,_,pt) = CalcTreeTEST [(fmz, (dI',pI',mI'))];
280 (*=== inhibit exn 110722=============================================================
281 val (p,_,f,nxt,_,pt) = me nxt p c pt;
282 val (p,_,f,nxt,_,pt) = me nxt p c pt;
283 val (p,_,f,nxt,_,pt) = me nxt p c pt;
284 val (p,_,f,nxt,_,pt) = me nxt p c pt;
285 val (p,_,f,nxt,_,pt) = (me nxt p c pt) handle e => OldGoals.print_exn e;
286 val (p,_,f,nxt,_,pt) = me nxt p c pt;
287 val (p,_,f,nxt,_,pt) = me nxt p c pt;
288 val (p,_,f,nxt,_,pt) = me nxt p c pt;
289 val (p,_,f,nxt,_,pt) = me nxt p c pt;
290 case nxt of (_, Specify_Method ["DiffApp","max_by_calculus"]) => ()
291 | _ => error "diffapp.sml: max-exp me, nxt = Specify_Method";
293 val oris = fst3 (get_obj g_origin pt (fst p)); writeln(oris2str oris);
294 val pits = get_obj g_pbl pt (fst p); writeln(itms2str_ ctxt pits);
296 val (p,_,f,nxt,_,pt) = me nxt p c pt;
297 val mits = get_obj g_met pt (fst p); writeln(itms2str_ ctxt mits);
298 val (p,_,f,nxt,_,pt) = me nxt p c pt;
299 val (p,_,f,nxt,_,pt) = me nxt p c pt;
300 val (p,_,f,nxt,_,pt) = me nxt p c pt;
301 case nxt of (_,Apply_Method ["DiffApp","max_by_calculus"] ) => ()
302 | _ => error "diffapp.sml: max-exp me, nxt = Apply_Method";
303 val (p,_,f,nxt,_,pt) = me nxt p c pt;
304 === inhibit exn 110722=============================================================*)
306 (*since 0508 Apply_Method does the 1st step, if NONE init_form -------------
307 (*val nxt = ("Subproblem",Subproblem ("DiffApp",["make","function"]))*)
308 val (p,_,f,nxt,_,pt) = (me nxt p c pt) handle e => print_exn_G e;
309 (*val nxt = ("Refine_Tacitly",Refine_Tacitly ["make","function"])*)
310 val (p,_,f,nxt,_,pt) = me nxt p c pt;
311 (*val nxt = ("Model_Problem",Model_Problem ["by_explicit","make","function"])*)
312 ----------------------------------------------------------------------------*)
313 case nxt of (_, Model_Problem(*["by_explicit", "make", "function"]*)) => ()
314 | _ => error "diffapp.sml: max-exp me, nxt = Model_Problem";
316 (*=== inhibit exn 110722=============================================================
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 val (p,_,f,nxt,_,pt) = me nxt p c pt;
321 val (p,_,f,nxt,_,pt) = me nxt p c pt;
322 === inhibit exn 110722=============================================================*)
324 val oris = fst3 (get_obj g_origin pt (fst p));writeln(oris2str oris);
325 val pits = get_obj g_pbl pt (fst p);writeln(itms2str_ ctxt pits);
327 (*=== inhibit exn 110722=============================================================
328 val (p,_,f,nxt,_,pt) = me nxt p c pt;
329 val (p,_,f,nxt,_,pt) = me nxt p c pt;
330 val (p,_,f,nxt,_,pt) = me nxt p c pt;
331 val (p,_,f,nxt,_,pt) = me nxt p c pt;
332 case nxt of (_, Apply_Method ["DiffApp", "make_fun_by_explicit"]) => ()
333 | _ => error "diffapp.sml: max-exp Apply_Method ([1], Met) ";
334 === inhibit exn 110722=============================================================*)
336 (*----since WN050901 (ie. corr. mathengine#nxt_specify_ ..nxt_spec Pbl->p_
338 val (p,_,f,nxt,_,pt) = me nxt p c pt;
340 ### assod: NotAss m= Subproblem' ,
343 (Subproblem (thy, [normalize, polynomial, univariate, equation])))]
344 (hd (filterVar A [A = a * b, (a / 2) ^^^ 2 + (b / 2) ^^^ 2 = r ^^^ 2]))
345 *** stac2tac_ TODO: no match for Substitute
347 *** (Subproblem (thy, [normalize, polynomial, univariate, equation])))]
348 *** (hd (filterVar A [A = a * b, (a / 2) ^^^ 2 + (b / 2) ^^^ 2 = r ^^^ 2]))
349 Exception- ERROR raised
351 ############################################################################
352 # presumerably didnt work before either, but not detected due to Emtpy_Tac #
353 ############################################################################
355 (*val nxt = Subproblem ("DiffApp",["univariate","equation"])) *)
356 val (p,_,f,nxt,_,pt) = me nxt p c pt;
357 (*val nxt = Refine_Tacitly ["univariate","equation"])*)
359 val oris = fst3 (get_obj g_origin pt (fst p));writeln(oris2str oris);
360 val pits = get_obj g_pbl pt (fst p);writeln(itms2str_ ctxt pits);
362 val (p,_,f,nxt,_,pt) = me nxt p c pt;
363 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 (p,_,f,nxt,_,pt) = me nxt p c pt;val (p,_,f,nxt,_,pt) = me nxt p c pt;
367 (*val nxt = ("Apply_Method",Apply_Method ["PolyEq","normalize_poly"])*)
369 val (p,_,f,nxt,_,pt) = me nxt p c pt;
370 (*val f = Form' (FormKF (~1,EdUndef,3,Nundef,"A = a * b"))*)
371 val (p,_,f,nxt,_,pt) = me nxt p c pt;
372 val (p,_,f,nxt,_,pt) = me nxt p c pt;val (p,_,f,nxt,_,pt) = me nxt p c pt;
373 val (p,_,f,nxt,_,pt) = me nxt p c pt;val (p,_,f,nxt,_,pt) = me nxt p c pt;
374 val (p,_,f,nxt,_,pt) = me nxt p c pt;val (p,_,f,nxt,_,pt) = me nxt p c pt;
375 val (p,_,f,nxt,_,pt) = me nxt p c pt;val (p,_,f,nxt,_,pt) = me nxt p c pt;
376 val (p,_,f,nxt,_,pt) = me nxt p c pt;val (p,_,f,nxt,_,pt) = me nxt p c pt;
377 val (p,_,f,nxt,_,pt) = me nxt p c pt;val (p,_,f,nxt,_,pt) = me nxt p c pt;
378 val (p,_,f,nxt,_,pt) = me nxt p c pt;val (p,_,f,nxt,_,pt) = me nxt p c pt;
379 (*val f = Form' (FormKF (~1,EdUndef,4,Nundef,"[b = A / a]"))*)
381 ------------------------------------------------------------------------*)
384 Error' (Error_ "Refine_Tacitly [\"univariate\",\"equation\"] not applicable")*)
387 (*----postponed.15.5.03 run scripts for maximum-example: univariate equation*)
388 (*=== inhibit exn 110722=============================================================
390 val (p,_,f,nxt,_,pt) = (me nxt p c pt) handle e => OldGoals.print_exn e;
391 === inhibit exn 110722=============================================================*)
393 val oris = fst3 (get_obj g_origin pt (fst p));writeln(oris2str oris);
395 val pits = get_obj g_pbl pt (fst p);writeln(itms2str_ ctxt pits);
396 val pits = get_obj g_pbl pt [];writeln(itms2str_ ctxt pits);
398 val mits = get_obj g_met pt (fst p);writeln(itms2str_ ctxt mits);
399 val mits = get_obj g_met pt [];writeln(itms2str_ ctxt mits);
401 (*=== inhibit exn 110722=============================================================
402 itms2args thy ["DiffApp","max_by_calculus"] mits;
404 val (p,_,f,nxt,_,pt) = me nxt p c pt;
405 === inhibit exn 110722=============================================================*)
409 "--------- autoCalc .. scripts for maximum-example ---------------";
410 "--------- autoCalc .. scripts for maximum-example ---------------";
411 "--------- autoCalc .. scripts for maximum-example ---------------";
412 (*++++++++ see systest/inform.sml 'complete_metitms' ++++++++*)
415 ["fixedValues [r=Arbfix]","maximum A",
417 "relations [A=a*b, (a/2)^2 + (b/2)^2 = r^2]",
418 "relations [A=a*b, (a/2)^2 + (b/2)^2 = r^2]",
419 "relations [A=a*b, a/2=r*sin alpha, b/2=r*cos alpha]",
421 "boundVariable a","boundVariable b","boundVariable alpha",
422 "interval {x::real. 0 <= x & x <= 2*r}",
423 "interval {x::real. 0 <= x & x <= 2*r}",
424 "interval {x::real. 0 <= x & x <= pi}",
425 "errorBound (eps=(0::real))"];
427 ("DiffApp",["maximum_of","function"],
428 ["DiffApp","max_by_calculus"]);
430 CalcTree [(fmz, (dI',pI',mI'))];
431 Iterator 1; moveActiveRoot 1;
432 autoCalculate 1 CompleteCalcHead;
433 refFormula 1 (get_pos 1 1);
435 fetchProposedTactic 1;
436 autoCalculate 1 (Step 1);
438 fetchProposedTactic 1;
439 autoCalculate 1 (Step 1);
440 (*Subproblem on_interval maximum_of function*)
441 autoCalculate 1 CompleteCalcHead;
443 fetchProposedTactic 1;
444 val ((pt,p),_) = get_calc 1;
445 val mits = get_obj g_met pt (fst p);
446 writeln (itms2str_ ctxt mits);
448 if itms2str_ ctxt mits = "[\n(1 ,[1] ,true ,#Given ,Cor functionEq (hd r_s) ,(t_, [hd r_s])),\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 ()
449 else error "diffapp.sml: diff.behav. in autoCalc .. scripts for max 1";
451 (*FIXME: the environments contain identifers, and NOT values ?!?!?*)
452 (* WN051209 while extending 'fun step' for initac, this became better ...
453 if itms2str_ ctxt mits = "[\n(1 ,[1,2,3] ,true ,#Given ,Cor fixedValues [r = Arbfix] ,(f_ix, [[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] ,(v_s, [[a],[b]])),\n(4 ,[1,2] ,true ,#Relate ,Cor relations [A = a * b, (a / 2) ^^^ 2 + (b / 2) ^^^ 2 = r ^^^ 2] ,(r_s, [[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 ()
454 else error "diffapp.sml: diff.behav. in autoCalc .. scripts for max 1";
458 (*=== inhibit exn 110722=============================================================
460 "--------------------- 30.4.03: maximum .. rewrite_set_ list_rls ---------";
461 "--------------------- 30.4.03: maximum .. rewrite_set_ list_rls ---------";
462 "--------------------- 30.4.03: maximum .. rewrite_set_ list_rls ---------";
464 "Script Maximum_value(f_ix::bool list)(m_::real) (r_s::bool list)\
465 \ (v_v::real) (itv_v::real set) (err_::bool) = \
466 \ (let e_e = (hd o (filterVar m_)) r_s; \
467 \ t_ = (if 1 < length_ r_s \
468 \ then (SubProblem (Reals_,[make,function],[no_met])\
469 \ [REAL m_, REAL v_v, BOOL_LIST r_s])\
471 \ (mx_::real) = SubProblem (Reals_,[on_interval,max_of,function], \
472 \ [Isac,maximum_on_interval])\
473 \ [BOOL t_, REAL v_v, REAL_SET itv_]\
474 \ in ((SubProblem (Reals_,[find_values,tool],[Isac,find_values]) \
475 \ [REAL mx_, REAL (Rhs t_), REAL v_v, REAL m_, \
476 \ BOOL_LIST (dropWhile (ident e_e) r_s)])::bool list))";
478 val f_ix = (str2term "f_ix::bool list",
479 str2term "[r=Arbfix]");
480 val m_ = (str2term "m_::real",
482 val r_s = (str2term "rs_::bool list",
483 str2term "[A = a*b, (a/2)^^^2 + (b/2)^^^2 = r^^^2]");
484 val v_v = (str2term "v_v::real",
486 val itv_ = (str2term "itv_v::real set",
487 str2term "{x::real. 0 <= x & x <= 2*r}");
488 val err_ = (str2term "err_::bool",
490 val env = [f_ix, m_, r_s ,v_, itv_, err_];
492 (*--- 1.line in script ---*)
493 val t = str2term "(hd o (filterVar m_)) (r_s::bool list)";
494 val s = subst_atomic env t;
496 "(hd o filterVar A) [A = a * b, (a / 2) ^^^ 2 + (b / 2) ^^^ 2 = r ^^^ 2]";
497 val SOME (s',_) = rewrite_set_ thy false list_rls s;
498 val s'' = term2str s';
499 if s''="A = a * b" then () else error "new behaviour with list_rls 1.1.";
500 val env = env @ [(str2term "e_::bool",str2term "A = a * b")];
502 (*--- 2.line: condition alone ---*)
503 val t = str2term "1 < length_ (r_s::bool list)";
504 val s = subst_atomic env t;
506 "1 < length_ [A = a * b, (a / 2) ^^^ 2 + (b / 2) ^^^ 2 = r ^^^ 2]";
507 val SOME (s',_) = rewrite_set_ thy false list_rls s;
508 val s'' = term2str s';
509 if s''="HOL.True" then () else error "new behaviour with list_rls 1.2.";
511 (*--- 2.line in script ---*)
513 "(if 1 < length_ r_s \
514 \ then (SubProblem (Reals_,[make,function],[no_met])\
515 \ [REAL m_, REAL v_v, BOOL_LIST r_s])\
517 val s = subst_atomic env t;
519 "if 1 < length_ [A = a * b, (a / 2) ^^^ 2 + (b / 2) ^^^ 2 = r ^^^ 2]\
520 \then SubProblem (Reals_, [make, function], [no_met])\
522 \ BOOL_LIST [A = a * b, (a / 2) ^^^ 2 + (b / 2) ^^^ 2 = r ^^^ 2]]\
523 \else hd [A = a * b, (a / 2) ^^^ 2 + (b / 2) ^^^ 2 = r ^^^ 2]";
524 val SOME (s',_) = rewrite_set_ thy false list_rls s;
525 val s'' = term2str s';
527 "SubProblem (Reals_, [make, function], [no_met])\n\
528 \ [REAL A, REAL b,\n\
529 \ BOOL_LIST [A = a * b, (a / 2) ^^^ 2 + (b / 2) ^^^ 2 = r ^^^ 2]]" then ()
530 else error "new behaviour with list_rls 1.3.";
531 val env = env @ [(str2term "t_::bool",
532 str2term "A = (2*sqrt(r^^^2-(b/2)^^^2)) * b")];
536 "---------------------- 1.5.03: Make_fun_by_explicit ---------------------";
537 "---------------------- 1.5.03: Make_fun_by_explicit ---------------------";
538 "---------------------- 1.5.03: Make_fun_by_explicit ---------------------";
540 "Script Make_fun_by_explicit (f_f::real) (v_v::real) \
541 \ (eqs::bool list) = \
542 \ (let h_ = (hd o (filterVar f_)) eqs; \
543 \ e_1 = hd (dropWhile (ident h_) eqs); \
544 \ v_s = dropWhile (ident f_) (Vars h_); \
545 \ v_1 = hd (dropWhile (ident v_v) v_s); \
546 \ (s_1::bool list)=(SubProblem(Reals_,[univar,equation],[no_met])\
547 \ [BOOL e_1, REAL v_1])\
548 \ in Substitute [(v_1 = (rhs o hd) s_1)] h_)";
549 val f_ = (str2term "f_f::real",
551 val v_v = (str2term "v_v::real",
553 val eqs=(str2term "eqs::bool list",
554 str2term "[A = a * b, (a / 2) ^^^ 2 + (b / 2) ^^^ 2 = r ^^^ 2]");
555 val env = [f_f, v_v, eqs];
557 (*--- 1.line in script ---*)
558 val t = str2term "(hd o (filterVar v_v)) (eqs::bool list)";
559 val s = subst_atomic env t;
562 "(hd o filterVar b) [A = a * b, (a / 2) ^^^ 2 + (b / 2) ^^^ 2 = r ^^^ 2]";
563 val SOME (t',_) = rewrite_set_ thy false list_rls t;
564 val s' = term2str t';
565 if s' = "A = a * b" then () else error "new behaviour with list_rls 2.1";
566 val env = env @ [(str2term "h_::bool", str2term s')];
568 (*--- 2.line in script ---*)
569 val t = str2term "hd (dropWhile (ident h_) (eqs::bool list))";
570 val s = subst_atomic env t;
573 "hd (dropWhile (ident (A = a * b))\
574 \ [A = a * b, (a / 2) ^^^ 2 + (b / 2) ^^^ 2 = r ^^^ 2])";
575 mem_rls "dropWhile_Cons" list_rls;
576 mem_rls "Atools.ident" list_rls;
577 val SOME (t',_) = rewrite_set_ thy false list_rls t;
578 val s' = term2str t';
579 if s' = "(a / 2) ^^^ 2 + (b / 2) ^^^ 2 = r ^^^ 2" then ()
580 else error "new behaviour with list_rls 2.2";
581 val env = env @ [(str2term "e_1::bool", str2term s')];
583 (*--- 3.line in script ---*)
584 val t = str2term "dropWhile (ident f_) (Vars (h_::bool))";
585 val s = subst_atomic env t;
587 val t = str2term "dropWhile (ident A) (Vars (A = a * b))";
588 val SOME (t',_) = rewrite_set_ thy false list_rls t;
589 val s' = term2str t';
590 if s' = "[a, b]" then () else error "new behaviour with list_rls 2.3";
591 val env = env @ [(str2term "vs_::real list", str2term s')];
593 (*--- 4.line in script ---*)
594 val t = str2term "hd (dropWhile (ident v_v) v_s)";
595 val s = subst_atomic env t;
597 val t = str2term "hd (dropWhile (ident b) [a, b])";
598 val SOME (t',_) = rewrite_set_ thy false list_rls t;
599 val s' = term2str t';
600 if s' = "a" then () else error "new behaviour with list_rls 2.4.";
601 val env = env @ [(str2term "v_1::real", str2term s')];
603 (*--- 5.line in script ---*)
604 val t = str2term "(SubProblem(Reals_,[univar,equation],[no_met])\
605 \ [BOOL e_1, REAL v_1])";
606 val s = subst_atomic env t;
608 "SubProblem (Reals_, [univar, equation], [no_met])\n\
609 \ [BOOL ((a / 2) ^^^ 2 + (b / 2) ^^^ 2 = r ^^^ 2), REAL a]";
610 val env = env @ [(str2term "s_1::bool list",
611 str2term "[a = 2 * sqrt (r^^^2 - (b/2)^^^2)]")];
613 (*--- 6.line in script ---*)
614 val t = str2term "Substitute [(v_1 = (rhs o hd) (s_1::bool list))] (h_::bool)";
615 val s = subst_atomic env t;
618 "Substitute [(a = (rhs o hd) [a = 2 * sqrt (r ^^^ 2 - (b / 2) ^^^ 2)])]\n\
620 mem_rls "Tools.rhs" list_rls;
621 val SOME (t',_) = rewrite_set_ thy false list_rls t;
622 val s' = term2str t';
623 if s' = "Substitute [a = 2 * sqrt (r ^^^ 2 - (b / 2) ^^^ 2)] (A = a * b)"
624 then () else error "new behaviour with list_rls 2.6.";
627 "---------------------- 2.5.03: Make_fun_by_new_variable -----------------";
628 "---------------------- 2.5.03: Make_fun_by_new_variable -----------------";
629 "---------------------- 2.5.03: Make_fun_by_new_variable -----------------";
631 "Script Make_fun_by_new_variable (f_f::real) (v_v::real) \
632 \ (eqs::bool list) = \
633 \(let h_ = (hd o (filterVar f_)) eqs; \
634 \ es_ = dropWhile (ident h_) eqs; \
635 \ v_s = dropWhile (ident f_) (Vars h_); \
636 \ v_1 = nth_ 1 v_s; \
637 \ v_2 = nth_ 2 v_s; \
638 \ e_1 = (hd o (filterVar v_1)) es_; \
639 \ e_2 = (hd o (filterVar v_2)) es_; \
640 \ (s_1::bool list) = (SubProblem (Reals_,[univar,equation],[no_met])\
641 \ [BOOL e_1, REAL v_1]);\
642 \ (s_2::bool list) = (SubProblem (Reals_,[univar,equation],[no_met])\
643 \ [BOOL e_2, REAL v_2])\
644 \in Substitute [(v_1 = (rhs o hd) s_1),(v_2 = (rhs o hd) s_2)] h_)";
645 val f_ = (str2term "f_f::real",
647 val v_v = (str2term "v_v::real",
649 val eqs=(str2term "eqs::bool list",
650 str2term "[A=a*b, a/2=r*sin alpha, b/2=r*cos alpha]");
651 val env = [f_f, v_v, eqs];
653 (*--- 1.line in script ---*)
654 val t = str2term "(hd o (filterVar (f_f::real))) (eqs::bool list)";
655 val s = subst_atomic env t;
658 "(hd o filterVar A) [A = a * b, a / 2 = r * sin alpha, b / 2 = r * cos alpha]";
660 val SOME (t',_) = rewrite_set_ thy false list_rls t;
661 trace_rewrite:=false;
662 val s' = term2str t';
663 if s' = "A = a * b" then() else error "new behaviour with list_rls 3.1.";
664 val env = env @ [(str2term "h_::bool", str2term s')];
666 (*--- 2.line in script ---*)
667 val t = str2term "dropWhile (ident (h_::bool)) (eqs::bool list)";
668 val s = subst_atomic env t;
671 "dropWhile (ident (A = a * b))\
672 \ [A = a * b, a / 2 = r * sin alpha, b / 2 = r * cos alpha]";
673 val SOME (t',_) = rewrite_set_ thy false list_rls t;
674 val s' = term2str t';
675 if s' = "[a / 2 = r * sin alpha, b / 2 = r * cos alpha]"
676 then () else error "new behaviour with list_rls 3.2.";
677 val env = env @ [(str2term "es_::bool list", str2term s')];
679 (*--- 3.line in script ---*)
680 val t = str2term "dropWhile (ident (f_f::real)) (Vars (h_::bool))";
681 val s = subst_atomic env t;
683 val t = str2term "dropWhile (ident A) (Vars (A = a * b))";
684 val SOME (t',_) = rewrite_set_ thy false list_rls t;
685 val s' = term2str t';
686 if s' = "[a, b]" then () else error "new behaviour with list_rls 3.3.";
687 val env = env @ [(str2term "vs_::real list", str2term s')];
689 (*--- 4.line in script ---*)
690 val t = str2term "nth_ 1 v_s";
691 val s = subst_atomic env t;
693 val t = str2term "nth_ 1 [a, b]";
694 val SOME (t',_) = rewrite_set_ thy false list_rls t;
695 val s' = term2str t';
696 if s' = "a" then () else error "new behaviour with list_rls 3.4.";
697 val env = env @ [(str2term "v_1", str2term s')];
699 (*--- 5.line in script ---*)
700 val t = str2term "nth_ 2 v_s";
701 val s = subst_atomic env t;
703 val t = str2term "nth_ 2 [a, b]";
704 val SOME (t',_) = rewrite_set_ thy false list_rls t;
705 val s' = term2str t';
706 if s' = "b" then () else error "new behaviour with list_rls 3.5.";
707 val env = env @ [(str2term "v_2", str2term s')];
709 (*--- 6.line in script ---*)
710 val t = str2term "(hd o (filterVar v_1)) (es_::bool list)";
711 val s = subst_atomic env t;
714 "(hd o filterVar a) [a / 2 = r * sin alpha, b / 2 = r * cos alpha]";
715 val SOME (t',_) = rewrite_set_ thy false list_rls t;
716 val s' = term2str t';
717 if s' = "a / 2 = r * sin alpha" then ()
718 else error "new behaviour with list_rls 3.6.";
719 val e_1 = str2term "e_1::bool";
720 val env = env @ [(e_1, str2term s')];
722 (*--- 7.line in script ---*)
723 val t = str2term "(hd o (filterVar v_2)) (es_::bool list)";
724 val s = subst_atomic env t;
727 "(hd o filterVar b) [a / 2 = r * sin alpha, b / 2 = r * cos alpha]";
728 val SOME (t',_) = rewrite_set_ thy false list_rls t;
729 val s' = term2str t';
730 if s' = "b / 2 = r * cos alpha" then ()
731 else error "new behaviour with list_rls 3.7.";
732 val env = env @ [(str2term "e_2::bool", str2term s')];
734 (*--- 8.line in script ---*)
735 val t = str2term "(SubProblem (Reals_,[univar,equation],[no_met])\
736 \ [BOOL e_1, REAL v_1])";
737 val s = subst_atomic env t;
739 "SubProblem (Reals_, [univar, equation], [no_met])\
740 \ [BOOL (a / 2 = r * sin alpha), REAL a]";
741 val s_1 = str2term "[a = 2*r*sin alpha]";
742 val env = env @ [(str2term "s_1::bool list", s_1)];
744 (*--- 9.line in script ---*)
745 val t = str2term "(SubProblem (Reals_,[univar,equation],[no_met])\
746 \ [BOOL e_2, REAL v_2])";
747 val s = subst_atomic env t;
749 "SubProblem (Reals_, [univar, equation], [no_met])\
750 \ [BOOL (b / 2 = r * cos alpha), REAL b]";
751 val s_2 = str2term "[b = 2*r*cos alpha]";
752 val env = env @ [(str2term "s_2::bool list", s_2)];
754 (*--- 10.line in script ---*)
756 "Substitute [(v_1 = (rhs o hd) s_1),(v_2 = (rhs o hd) s_2)] (h_::bool)";
757 val s = subst_atomic env t;
759 "Substitute\n [(a = (rhs o hd) [a = 2 * r * sin alpha]),\
760 \ (b = (rhs o hd) [b = 2 * r * cos alpha])] (A = a * b)";
761 val SOME (s',_) = rewrite_set_ thy false list_rls s;
762 val s'' = term2str s';
764 "Substitute [a = 2 * r * sin alpha, b = 2 * r * cos alpha] (A = a * b)"
765 then () else error "new behaviour with list_rls 3.10.";
769 ===== inhibit exn 110722===========================================================*)