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 -----------------";
23 (*=== inhibit exn 110722=============================================================
27 " #################################################### ";
28 " problemtypes + formalizations ";
29 " #################################################### ";
30 " -------------- [maximum_of,function] --------------- ";
32 ["fixedValues f_ix","maximum m_","valuesFor v_s","relations r_s"];
33 map (the o (parseold thy)) pbt;
35 ["fixedValues [r=Arbfix]","maximum A",
37 "relations [A=a*b, (a/2)^^^2 + (b/2)^^^2 = r^^^2]",
38 "relations [A=a*b, (a/2)^^^2 + (b/2)^^^2 = r^^^2]",
39 "relations [A=a*b, a/2=r*sin alpha, b/2=r*cos alpha]",
41 "boundVariable a","boundVariable b","boundVariable alpha",
42 "interval {x::real. 0 <= x & x <= 2*r}",
43 "interval {x::real. 0 <= x & x <= 2*r}",
44 "interval {x::real. 0 <= x & x <= pi}",
45 "errorBound (eps=(0::real))"];
46 map (the o (parseold thy)) fmz;
47 " -------------- [make,function] -------------- ";
49 ["functionOf f_f","boundVariable v_v","equalities eqs",
51 map (the o (parseold thy)) pbt;
53 ["functionOf A","boundVariable a","boundVariable b",
54 "equalities [A=a*b, (a/2)^^^2 + (b/2)^^^2 = r^^^2]",
55 (*28.11.00: "functionTerm (A_0=Undef)"*)"functionTerm (Undef)"];
56 map (the o (parseold thy)) fmz12;
58 ["functionOf A","boundVariable a","boundVariable b",
59 "equalities [A=a*b, a/2=r*sin alpha, b/2=r*cos alpha]",
60 (*28.11.00: "functionTerm (A_0=Undef)"*)"functionTerm (Undef)"];
61 map (the o (parseold thy)) fmz3;
62 " --------- [univar,equation] --------- ";
64 ["equality e_e","solveFor v_v","solutions v_i_"];
65 map (the o (parseold thy)) pbt;
67 ["equality ((a/2)^^^2 + (b/2)^^^2 = r^^^2)",
68 "solveFor b","solutions b_i"];
69 map (the o (parseold thy)) fmz;
70 " ---- [on_interval,maximum_of,function] ---- ";
72 ["functionTerm t_","boundVariable v_v","interval itv_",
73 "errorBound err_","maxArgument v_0"];
74 map (the o (parseold thy)) pbt;
76 [(*28.11.00: "functionTerm (A_0 = a*sqrt(#4*r^^^#2 - a^^^#2))",*)
77 "functionTerm (a*sqrt(4*r^^^2 - a^^^2))",
78 (*28.11.00: "functionTerm (A_0 = b*sqrt(#4*r^^^#2 - b^^^#2))",*)
79 "functionTerm (b*sqrt(4*r^^^2 - b^^^2))",
80 "boundVariable a","boundVariable b",
81 "interval {x::real. 0 <= x & x <= 2*r}",
82 "errorBound (eps=0)","maxArgument (a_0=Undef)"];
83 map (the o (parseold thy)) fmz12;
85 [(*28.11.00: "functionTerm (A_0 = (#2*r*sin alpha)*(#2*r*cos alpha))",*)
86 "functionTerm ((2*r*sin alpha)*(2*r*cos alpha))",
87 "boundVariable alpha",
88 "interval {x::real. 0 <= x & x <= pi}",
89 "errorBound (eps=0)","maxArgument (a_0=Undef)"];
90 map (the o (parseold thy)) fmz3;
91 " --------- [derivative_of,function] --------- ";
93 ["functionTerm f_f","boundVariable v_v","derivative f_f'"];
94 map (the o (parseold thy)) pbt;
96 [(*28.11.00: "functionTerm (A_0=a*#2*sqrt r^^^#2 - (a//#2)^^^#2)",*)
97 "functionTerm (a*2*sqrt r^^^2 - (a/2)^^^2)",
99 (*28.11.00: "derivative (A_0'=Undef)"*)"derivative (Undef)"];
100 map (the o (parseold thy)) fmz;
101 " --------- [find_values,tool] --------- ";
103 ["maxArgument ma_","functionTerm f_f","boundVariable v_v",
104 "valuesFor vls_","additionalRels r_s"];
105 map (the o (parseold thy)) pbt;
107 ["maxArgument (a_0=(srqt 2)*r)",
108 (*28.11.00: "functionTerm (A_0=a*#2*sqrt r^^^#2 - (a//#2)^^^#2)",*)
109 "functionTerm (a*2*sqrt r^^^2 - (a/2)^^^2)",
111 "valuesFor [a,b]","maximum A",
112 "additionalRels [(a/2)^^^2 + (b/2)^^^2 = r^^^2]"];
113 map (the o (parseold thy)) fmz1;
115 === inhibit exn 110722=============================================================*)
118 "-------------------- ptree of {(a,b). is-max ... --------------------------";
119 "-------------------- ptree of {(a,b). is-max ... --------------------------";
120 "-------------------- ptree of {(a,b). is-max ... --------------------------";
122 (* Teil von max-on-surface.sml,
123 der nach Init_Proof -> prep_ori wieder l"auft
124 (f"ur tests mit neuer pos')
125 use"test-max-surf1.sml";
127 Compiler.Control.Print.printDepth:=7; (*4 is default*)
128 Compiler.Control.Print.printDepth:=4; (*4 is default*)
131 (* --vvv-- ausgeliehen von test-root-equ/sml *)
134 ("Script",["sqroot-test","univariate","equation"],
135 ["Script","squ-equ-test2"]);
136 val fmz = ["equality (sqrt(9+4*x)=sqrt x + sqrt(5+x))",
137 "solveFor x","errorBound (eps=0)",
140 val (mI,m) = ("Init_Proof",Init_Proof (fmz, (dI',pI',mI')));
141 val ((p,p_),_,_,_,_,(_,pt,_)) = do_ (mI,m) e_pos'[1](e_scr,EmptyPtree,[]);
142 --^^^-- ausgeliehen von test-root-equ/sml *)
143 (*-------------- 9.6.03 --- cappend_ ... term -------irreparabler test
145 cappend_problem EmptyPtree [] loc ([],(dI',pI',mI'));
146 val pos = (lev_on o lev_dn) [];
147 (* val pos = ([1]) *)
148 val (pt,_) = cappend_parent pt pos loc "{(a,b). is-max ..."
149 Empty_Tac TransitiveB;
150 val pos = (lev_on o lev_dn) pos;
151 (*val pos = ([1,1])*)
152 val (pt,_) = cappend_atomic pt pos loc "{(a,b). is-max ..."
153 Empty_Tac ("[1,1]:{(a,b). is-extremum ...",[]) Complete;
154 val pos = lev_on pos;
155 (*val pos = ([1,2])*)
156 val (pt,_) = cappend_atomic pt pos loc "{(a,b). is-extremum ..."
157 Empty_Tac ("[1,2]:{(a,b). f_x(a,b) ...",[]) Complete;
158 val pos = lev_up pos;
160 val (pt,_) = append_result pt pos e_istate ("[1#]:{(a,b). f_x(a,b) ...",[])
163 val pos = lev_on pos;
165 val (pt,_) = cappend_atomic pt pos loc "{(a,b). f_x(a,b) ..."
166 Empty_Tac ("[2]:{(a,b). f_x & f_xx &...",[]) Complete;
167 val pos = lev_on pos;
168 (*al pos = [3] : pos*)
169 val (pt,_) = cappend_parent pt pos loc "{(a,b). f_x & f_xx &..."
170 Empty_Tac TransitiveB;
171 val pos = (lev_on o lev_dn) pos;
173 val (pt,_) = cappend_atomic pt pos loc "{(a,b). f_x & f_xx & ..."
174 Empty_Tac ("[3,1]:{(a,b). f_x & f_xx } cup ...",[]) Complete;
175 val pos = lev_on pos;
177 val (pt,_) = cappend_atomic pt pos loc "{(a,b). f_x & f_xx } cup.."
178 Empty_Tac ("[3,2]:{(a,b). f_x ..} cup ...",[]) Complete;
180 val pos = lev_up pos;
182 val (pt,_) = append_result pt pos e_istate ("[3#]:{(a,b). f_x ..} cup..",[])
184 val pos = lev_on pos;
185 (*val pos = [4] : pos *)
186 val (pt,_) = cappend_parent pt pos loc "{(a,b). f_x ..} cup ..."
187 Empty_Tac IntersectB;
188 val pos = (lev_on o lev_dn) pos;
189 (*val pos = ([4,1]) *)
190 val (pt,_) = cappend_parent pt pos loc "set_1 = ..."
194 val pos = (lev_on o lev_dn) pos;
195 (*val pos = ([4,1,1]) *)
196 val (pt,_) = cappend_parent(*pbl*) pt pos loc"f_x = d/dx x^3 ..."
197 Empty_Tac TransitiveB;
198 val pos = (lev_on o lev_dn) pos;
199 (*val pos = ([4,1,1,1]) *)
200 val (pt,_) = cappend_parent pt pos loc "d/dx x^3 ..."
201 Empty_Tac TransitiveB;
202 val pos = (lev_on o lev_dn) pos;
203 (*val pos = ([4,1,1,1,1]) *)
204 val (pt,_) = cappend_atomic pt pos loc "d/dx x^3 ..."
205 Empty_Tac ("[4,1,1,1,1]:3x^2 + d/dx ...",[]) Complete;
206 val pos = lev_on pos;
207 (*val pos = ([4,1,1,1,2]) *)
208 val (pt,_) = cappend_atomic pt pos loc "3x^2 + d/dx ..."
209 Empty_Tac ("[4,1,1,1,2]:3x^2 + 0 + d/dx ...",[]) Complete;
210 val pos = lev_on pos;
211 (*pos = ([4,1,1,1,3]) *)
212 val (pt,_) = cappend_atomic pt pos loc "3x^2 + 0 + d/dx ..."
213 Empty_Tac ("[4,1,1,1,3]:3x^2 + 0 -3 ...",[]) Complete;
215 val pos = lev_up pos;
216 (*pos = ([4,1,1,1]) *)
217 val (pt,_) = append_result pt pos e_istate ("[4,1,1,1#]:3x^2 -3.",[])Complete;
219 val pos = lev_up pos;
220 (*val pos = ([4,1,1]) *)
221 val (pt,_) = append_result pt pos e_istate ("[4,1,1#]:found 3x^2 -3 ...",[])
224 val pos = lev_on pos;
225 (*val pos = ([4,1,2]+) *)
226 val (pt,_) = cappend_parent(*pbl*) pt pos loc "f_y = d/dy x^3 ..."
227 Empty_Tac TransitiveB;
229 writeln (pr_ptree pr_short pt);
233 1. {(a,b). is-max ...
234 1.1. {(a,b). is-max ...
235 1.2. {(a,b). is-extremum ...
236 2. {(a,b). f_x(a,b) ...
237 3. {(a,b). f_x & f_xx &...
238 3.1. {(a,b). f_x & f_xx & ...
239 3.2. {(a,b). f_x & f_xx } cup..
240 4. {(a,b). f_x ..} cup ...
242 4.1.1. f_x = d/dx x^3 ...
243 4.1.1.1. d/dx x^3 ...
244 4.1.1.1.1. d/dx x^3 ...
245 4.1.1.1.2. 3x^2 + d/dx ...
246 4.1.1.1.3. 3x^2 + 0 + d/dx ...
247 4.1.2. f_y = d/dy x^3 ...
249 use"test-max-surf1.sml";
251 -------------- 9.6.03 --- cappend_ ... term -------irreparabler test---*)
254 "--------- me .. scripts for maximum-example ---------------------";
255 "--------- me .. scripts for maximum-example ---------------------";
256 "--------- me .. scripts for maximum-example ---------------------";
259 ["fixedValues [r=Arbfix]","maximum A",
261 "relations [A=a*b, (a/2)^^^2 + (b/2)^^^2 = r^^^2]",
262 "relations [A=a*b, (a/2)^^^2 + (b/2)^^^2 = r^^^2]",
263 "relations [A=a*b, a/2=r*sin alpha, b/2=r*cos alpha]",
265 "boundVariable a","boundVariable b","boundVariable alpha",
266 "interval {x::real. 0 <= x & x <= 2*r}",
267 "interval {x::real. 0 <= x & x <= 2*r}",
268 "interval {x::real. 0 <= x & x <= pi}",
269 "errorBound (eps=(0::real))"];
271 ("DiffApp",["maximum_of","function"],
272 ["DiffApp","max_by_calculus"]);
274 val (p,_,f,nxt,_,pt) = CalcTreeTEST [(fmz, (dI',pI',mI'))];
275 (*=== inhibit exn 110722=============================================================
276 val (p,_,f,nxt,_,pt) = me nxt p c pt;
277 val (p,_,f,nxt,_,pt) = me nxt p c pt;
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) handle e => OldGoals.print_exn e;
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 case nxt of (_, Specify_Method ["DiffApp","max_by_calculus"]) => ()
286 | _ => error "diffapp.sml: max-exp me, nxt = Specify_Method";
288 val oris = fst3 (get_obj g_origin pt (fst p)); writeln(oris2str oris);
289 val pits = get_obj g_pbl pt (fst p); writeln(itms2str_ ctxt pits);
291 val (p,_,f,nxt,_,pt) = me nxt p c pt;
292 val mits = get_obj g_met pt (fst p); writeln(itms2str_ ctxt mits);
293 val (p,_,f,nxt,_,pt) = me nxt p c pt;
294 val (p,_,f,nxt,_,pt) = me nxt p c pt;
295 val (p,_,f,nxt,_,pt) = me nxt p c pt;
296 case nxt of (_,Apply_Method ["DiffApp","max_by_calculus"] ) => ()
297 | _ => error "diffapp.sml: max-exp me, nxt = Apply_Method";
298 val (p,_,f,nxt,_,pt) = me nxt p c pt;
299 === inhibit exn 110722=============================================================*)
301 (*since 0508 Apply_Method does the 1st step, if NONE init_form -------------
302 (*val nxt = ("Subproblem",Subproblem ("DiffApp",["make","function"]))*)
303 val (p,_,f,nxt,_,pt) = (me nxt p c pt) handle e => print_exn_G e;
304 (*val nxt = ("Refine_Tacitly",Refine_Tacitly ["make","function"])*)
305 val (p,_,f,nxt,_,pt) = me nxt p c pt;
306 (*val nxt = ("Model_Problem",Model_Problem ["by_explicit","make","function"])*)
307 ----------------------------------------------------------------------------*)
308 case nxt of (_, Model_Problem(*["by_explicit", "make", "function"]*)) => ()
309 | _ => error "diffapp.sml: max-exp me, nxt = Model_Problem";
311 (*=== inhibit exn 110722=============================================================
312 val (p,_,f,nxt,_,pt) = me nxt p c pt;
313 val (p,_,f,nxt,_,pt) = me nxt p c pt;
314 val (p,_,f,nxt,_,pt) = me nxt p c pt;
315 val (p,_,f,nxt,_,pt) = me nxt p c pt;
316 val (p,_,f,nxt,_,pt) = me nxt p c pt;
317 === inhibit exn 110722=============================================================*)
319 val oris = fst3 (get_obj g_origin pt (fst p));writeln(oris2str oris);
320 val pits = get_obj g_pbl pt (fst p);writeln(itms2str_ ctxt pits);
322 (*=== inhibit exn 110722=============================================================
323 val (p,_,f,nxt,_,pt) = me nxt p c pt;
324 val (p,_,f,nxt,_,pt) = me nxt p c pt;
325 val (p,_,f,nxt,_,pt) = me nxt p c pt;
326 val (p,_,f,nxt,_,pt) = me nxt p c pt;
327 case nxt of (_, Apply_Method ["DiffApp", "make_fun_by_explicit"]) => ()
328 | _ => error "diffapp.sml: max-exp Apply_Method ([1], Met) ";
329 === inhibit exn 110722=============================================================*)
331 (*----since WN050901 (ie. corr. mathengine#nxt_specify_ ..nxt_spec Pbl->p_
333 val (p,_,f,nxt,_,pt) = me nxt p c pt;
335 ### assod: NotAss m= Subproblem' ,
338 (Subproblem (thy, [normalize, polynomial, univariate, equation])))]
339 (hd (filterVar A [A = a * b, (a / 2) ^^^ 2 + (b / 2) ^^^ 2 = r ^^^ 2]))
340 *** stac2tac_ TODO: no match for Substitute
342 *** (Subproblem (thy, [normalize, polynomial, univariate, equation])))]
343 *** (hd (filterVar A [A = a * b, (a / 2) ^^^ 2 + (b / 2) ^^^ 2 = r ^^^ 2]))
344 Exception- ERROR raised
346 ############################################################################
347 # presumerably didnt work before either, but not detected due to Emtpy_Tac #
348 ############################################################################
350 (*val nxt = Subproblem ("DiffApp",["univariate","equation"])) *)
351 val (p,_,f,nxt,_,pt) = me nxt p c pt;
352 (*val nxt = Refine_Tacitly ["univariate","equation"])*)
354 val oris = fst3 (get_obj g_origin pt (fst p));writeln(oris2str oris);
355 val pits = get_obj g_pbl pt (fst p);writeln(itms2str_ ctxt pits);
357 val (p,_,f,nxt,_,pt) = me nxt p c pt;
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 nxt = ("Apply_Method",Apply_Method ["PolyEq","normalize_poly"])*)
364 val (p,_,f,nxt,_,pt) = me nxt p c pt;
365 (*val f = Form' (FormKF (~1,EdUndef,3,Nundef,"A = a * b"))*)
366 val (p,_,f,nxt,_,pt) = me nxt p c pt;
367 val (p,_,f,nxt,_,pt) = me nxt p c pt;val (p,_,f,nxt,_,pt) = me nxt p c pt;
368 val (p,_,f,nxt,_,pt) = me nxt p c pt;val (p,_,f,nxt,_,pt) = me nxt p c pt;
369 val (p,_,f,nxt,_,pt) = me nxt p c pt;val (p,_,f,nxt,_,pt) = me nxt p c pt;
370 val (p,_,f,nxt,_,pt) = me nxt p c pt;val (p,_,f,nxt,_,pt) = me nxt p c pt;
371 val (p,_,f,nxt,_,pt) = me nxt p c pt;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 f = Form' (FormKF (~1,EdUndef,4,Nundef,"[b = A / a]"))*)
376 ------------------------------------------------------------------------*)
379 Error' (Error_ "Refine_Tacitly [\"univariate\",\"equation\"] not applicable")*)
382 (*----postponed.15.5.03 run scripts for maximum-example: univariate equation*)
383 (*=== inhibit exn 110722=============================================================
385 val (p,_,f,nxt,_,pt) = (me nxt p c pt) handle e => OldGoals.print_exn e;
386 === inhibit exn 110722=============================================================*)
388 val oris = fst3 (get_obj g_origin pt (fst p));writeln(oris2str oris);
390 val pits = get_obj g_pbl pt (fst p);writeln(itms2str_ ctxt pits);
391 val pits = get_obj g_pbl pt [];writeln(itms2str_ ctxt pits);
393 val mits = get_obj g_met pt (fst p);writeln(itms2str_ ctxt mits);
394 val mits = get_obj g_met pt [];writeln(itms2str_ ctxt mits);
396 (*=== inhibit exn 110722=============================================================
397 itms2args thy ["DiffApp","max_by_calculus"] mits;
399 val (p,_,f,nxt,_,pt) = me nxt p c pt;
400 === inhibit exn 110722=============================================================*)
404 "--------- autoCalc .. scripts for maximum-example ---------------";
405 "--------- autoCalc .. scripts for maximum-example ---------------";
406 "--------- autoCalc .. scripts for maximum-example ---------------";
407 (*++++++++ see systest/inform.sml 'complete_metitms' ++++++++*)
410 ["fixedValues [r=Arbfix]","maximum A",
412 "relations [A=a*b, (a/2)^2 + (b/2)^2 = r^2]",
413 "relations [A=a*b, (a/2)^2 + (b/2)^2 = r^2]",
414 "relations [A=a*b, a/2=r*sin alpha, b/2=r*cos alpha]",
416 "boundVariable a","boundVariable b","boundVariable alpha",
417 "interval {x::real. 0 <= x & x <= 2*r}",
418 "interval {x::real. 0 <= x & x <= 2*r}",
419 "interval {x::real. 0 <= x & x <= pi}",
420 "errorBound (eps=(0::real))"];
422 ("DiffApp",["maximum_of","function"],
423 ["DiffApp","max_by_calculus"]);
425 CalcTree [(fmz, (dI',pI',mI'))];
426 Iterator 1; moveActiveRoot 1;
427 autoCalculate 1 CompleteCalcHead;
428 refFormula 1 (get_pos 1 1);
430 fetchProposedTactic 1;
431 autoCalculate 1 (Step 1);
433 fetchProposedTactic 1;
434 autoCalculate 1 (Step 1);
435 (*Subproblem on_interval maximum_of function*)
436 autoCalculate 1 CompleteCalcHead;
438 fetchProposedTactic 1;
439 val ((pt,p),_) = get_calc 1;
440 val mits = get_obj g_met pt (fst p);
441 writeln (itms2str_ ctxt mits);
443 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 ()
444 else error "diffapp.sml: diff.behav. in autoCalc .. scripts for max 1";
446 (*FIXME: the environments contain identifers, and NOT values ?!?!?*)
447 (* WN051209 while extending 'fun step' for initac, this became better ...
448 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 ()
449 else error "diffapp.sml: diff.behav. in autoCalc .. scripts for max 1";
453 (*=== inhibit exn 110722=============================================================
455 "--------------------- 30.4.03: maximum .. rewrite_set_ list_rls ---------";
456 "--------------------- 30.4.03: maximum .. rewrite_set_ list_rls ---------";
457 "--------------------- 30.4.03: maximum .. rewrite_set_ list_rls ---------";
459 "Script Maximum_value(f_ix::bool list)(m_::real) (r_s::bool list)\
460 \ (v_v::real) (itv_v::real set) (err_::bool) = \
461 \ (let e_e = (hd o (filterVar m_)) r_s; \
462 \ t_ = (if 1 < length_ r_s \
463 \ then (SubProblem (Reals_,[make,function],[no_met])\
464 \ [REAL m_, REAL v_v, BOOL_LIST r_s])\
466 \ (mx_::real) = SubProblem (Reals_,[on_interval,max_of,function], \
467 \ [Isac,maximum_on_interval])\
468 \ [BOOL t_, REAL v_v, REAL_SET itv_]\
469 \ in ((SubProblem (Reals_,[find_values,tool],[Isac,find_values]) \
470 \ [REAL mx_, REAL (Rhs t_), REAL v_v, REAL m_, \
471 \ BOOL_LIST (dropWhile (ident e_e) r_s)])::bool list))";
473 val f_ix = (str2term "f_ix::bool list",
474 str2term "[r=Arbfix]");
475 val m_ = (str2term "m_::real",
477 val r_s = (str2term "rs_::bool list",
478 str2term "[A = a*b, (a/2)^^^2 + (b/2)^^^2 = r^^^2]");
479 val v_v = (str2term "v_v::real",
481 val itv_ = (str2term "itv_v::real set",
482 str2term "{x::real. 0 <= x & x <= 2*r}");
483 val err_ = (str2term "err_::bool",
485 val env = [f_ix, m_, r_s ,v_, itv_, err_];
487 (*--- 1.line in script ---*)
488 val t = str2term "(hd o (filterVar m_)) (r_s::bool list)";
489 val s = subst_atomic env t;
491 "(hd o filterVar A) [A = a * b, (a / 2) ^^^ 2 + (b / 2) ^^^ 2 = r ^^^ 2]";
492 val SOME (s',_) = rewrite_set_ thy false list_rls s;
493 val s'' = term2str s';
494 if s''="A = a * b" then () else error "new behaviour with list_rls 1.1.";
495 val env = env @ [(str2term "e_::bool",str2term "A = a * b")];
497 (*--- 2.line: condition alone ---*)
498 val t = str2term "1 < length_ (r_s::bool list)";
499 val s = subst_atomic env t;
501 "1 < length_ [A = a * b, (a / 2) ^^^ 2 + (b / 2) ^^^ 2 = r ^^^ 2]";
502 val SOME (s',_) = rewrite_set_ thy false list_rls s;
503 val s'' = term2str s';
504 if s''="HOL.True" then () else error "new behaviour with list_rls 1.2.";
506 (*--- 2.line in script ---*)
508 "(if 1 < length_ r_s \
509 \ then (SubProblem (Reals_,[make,function],[no_met])\
510 \ [REAL m_, REAL v_v, BOOL_LIST r_s])\
512 val s = subst_atomic env t;
514 "if 1 < length_ [A = a * b, (a / 2) ^^^ 2 + (b / 2) ^^^ 2 = r ^^^ 2]\
515 \then SubProblem (Reals_, [make, function], [no_met])\
517 \ BOOL_LIST [A = a * b, (a / 2) ^^^ 2 + (b / 2) ^^^ 2 = r ^^^ 2]]\
518 \else hd [A = a * b, (a / 2) ^^^ 2 + (b / 2) ^^^ 2 = r ^^^ 2]";
519 val SOME (s',_) = rewrite_set_ thy false list_rls s;
520 val s'' = term2str s';
522 "SubProblem (Reals_, [make, function], [no_met])\n\
523 \ [REAL A, REAL b,\n\
524 \ BOOL_LIST [A = a * b, (a / 2) ^^^ 2 + (b / 2) ^^^ 2 = r ^^^ 2]]" then ()
525 else error "new behaviour with list_rls 1.3.";
526 val env = env @ [(str2term "t_::bool",
527 str2term "A = (2*sqrt(r^^^2-(b/2)^^^2)) * b")];
531 "---------------------- 1.5.03: Make_fun_by_explicit ---------------------";
532 "---------------------- 1.5.03: Make_fun_by_explicit ---------------------";
533 "---------------------- 1.5.03: Make_fun_by_explicit ---------------------";
535 "Script Make_fun_by_explicit (f_f::real) (v_v::real) \
536 \ (eqs::bool list) = \
537 \ (let h_ = (hd o (filterVar f_)) eqs; \
538 \ e_1 = hd (dropWhile (ident h_) eqs); \
539 \ v_s = dropWhile (ident f_) (Vars h_); \
540 \ v_1 = hd (dropWhile (ident v_v) v_s); \
541 \ (s_1::bool list)=(SubProblem(Reals_,[univar,equation],[no_met])\
542 \ [BOOL e_1, REAL v_1])\
543 \ in Substitute [(v_1 = (rhs o hd) s_1)] h_)";
544 val f_ = (str2term "f_f::real",
546 val v_v = (str2term "v_v::real",
548 val eqs=(str2term "eqs::bool list",
549 str2term "[A = a * b, (a / 2) ^^^ 2 + (b / 2) ^^^ 2 = r ^^^ 2]");
550 val env = [f_f, v_v, eqs];
552 (*--- 1.line in script ---*)
553 val t = str2term "(hd o (filterVar v_v)) (eqs::bool list)";
554 val s = subst_atomic env t;
557 "(hd o filterVar b) [A = a * b, (a / 2) ^^^ 2 + (b / 2) ^^^ 2 = r ^^^ 2]";
558 val SOME (t',_) = rewrite_set_ thy false list_rls t;
559 val s' = term2str t';
560 if s' = "A = a * b" then () else error "new behaviour with list_rls 2.1";
561 val env = env @ [(str2term "h_::bool", str2term s')];
563 (*--- 2.line in script ---*)
564 val t = str2term "hd (dropWhile (ident h_) (eqs::bool list))";
565 val s = subst_atomic env t;
568 "hd (dropWhile (ident (A = a * b))\
569 \ [A = a * b, (a / 2) ^^^ 2 + (b / 2) ^^^ 2 = r ^^^ 2])";
570 mem_rls "dropWhile_Cons" list_rls;
571 mem_rls "Atools.ident" list_rls;
572 val SOME (t',_) = rewrite_set_ thy false list_rls t;
573 val s' = term2str t';
574 if s' = "(a / 2) ^^^ 2 + (b / 2) ^^^ 2 = r ^^^ 2" then ()
575 else error "new behaviour with list_rls 2.2";
576 val env = env @ [(str2term "e_1::bool", str2term s')];
578 (*--- 3.line in script ---*)
579 val t = str2term "dropWhile (ident f_) (Vars (h_::bool))";
580 val s = subst_atomic env t;
582 val t = str2term "dropWhile (ident A) (Vars (A = a * b))";
583 val SOME (t',_) = rewrite_set_ thy false list_rls t;
584 val s' = term2str t';
585 if s' = "[a, b]" then () else error "new behaviour with list_rls 2.3";
586 val env = env @ [(str2term "vs_::real list", str2term s')];
588 (*--- 4.line in script ---*)
589 val t = str2term "hd (dropWhile (ident v_v) v_s)";
590 val s = subst_atomic env t;
592 val t = str2term "hd (dropWhile (ident b) [a, b])";
593 val SOME (t',_) = rewrite_set_ thy false list_rls t;
594 val s' = term2str t';
595 if s' = "a" then () else error "new behaviour with list_rls 2.4.";
596 val env = env @ [(str2term "v_1::real", str2term s')];
598 (*--- 5.line in script ---*)
599 val t = str2term "(SubProblem(Reals_,[univar,equation],[no_met])\
600 \ [BOOL e_1, REAL v_1])";
601 val s = subst_atomic env t;
603 "SubProblem (Reals_, [univar, equation], [no_met])\n\
604 \ [BOOL ((a / 2) ^^^ 2 + (b / 2) ^^^ 2 = r ^^^ 2), REAL a]";
605 val env = env @ [(str2term "s_1::bool list",
606 str2term "[a = 2 * sqrt (r^^^2 - (b/2)^^^2)]")];
608 (*--- 6.line in script ---*)
609 val t = str2term "Substitute [(v_1 = (rhs o hd) (s_1::bool list))] (h_::bool)";
610 val s = subst_atomic env t;
613 "Substitute [(a = (rhs o hd) [a = 2 * sqrt (r ^^^ 2 - (b / 2) ^^^ 2)])]\n\
615 mem_rls "Tools.rhs" list_rls;
616 val SOME (t',_) = rewrite_set_ thy false list_rls t;
617 val s' = term2str t';
618 if s' = "Substitute [a = 2 * sqrt (r ^^^ 2 - (b / 2) ^^^ 2)] (A = a * b)"
619 then () else error "new behaviour with list_rls 2.6.";
622 "---------------------- 2.5.03: Make_fun_by_new_variable -----------------";
623 "---------------------- 2.5.03: Make_fun_by_new_variable -----------------";
624 "---------------------- 2.5.03: Make_fun_by_new_variable -----------------";
626 "Script Make_fun_by_new_variable (f_f::real) (v_v::real) \
627 \ (eqs::bool list) = \
628 \(let h_ = (hd o (filterVar f_)) eqs; \
629 \ es_ = dropWhile (ident h_) eqs; \
630 \ v_s = dropWhile (ident f_) (Vars h_); \
631 \ v_1 = nth_ 1 v_s; \
632 \ v_2 = nth_ 2 v_s; \
633 \ e_1 = (hd o (filterVar v_1)) es_; \
634 \ e_2 = (hd o (filterVar v_2)) es_; \
635 \ (s_1::bool list) = (SubProblem (Reals_,[univar,equation],[no_met])\
636 \ [BOOL e_1, REAL v_1]);\
637 \ (s_2::bool list) = (SubProblem (Reals_,[univar,equation],[no_met])\
638 \ [BOOL e_2, REAL v_2])\
639 \in Substitute [(v_1 = (rhs o hd) s_1),(v_2 = (rhs o hd) s_2)] h_)";
640 val f_ = (str2term "f_f::real",
642 val v_v = (str2term "v_v::real",
644 val eqs=(str2term "eqs::bool list",
645 str2term "[A=a*b, a/2=r*sin alpha, b/2=r*cos alpha]");
646 val env = [f_f, v_v, eqs];
648 (*--- 1.line in script ---*)
649 val t = str2term "(hd o (filterVar (f_f::real))) (eqs::bool list)";
650 val s = subst_atomic env t;
653 "(hd o filterVar A) [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 trace_rewrite:=false;
657 val s' = term2str t';
658 if s' = "A = a * b" then() else error "new behaviour with list_rls 3.1.";
659 val env = env @ [(str2term "h_::bool", str2term s')];
661 (*--- 2.line in script ---*)
662 val t = str2term "dropWhile (ident (h_::bool)) (eqs::bool list)";
663 val s = subst_atomic env t;
666 "dropWhile (ident (A = a * b))\
667 \ [A = a * b, a / 2 = r * sin alpha, b / 2 = r * cos alpha]";
668 val SOME (t',_) = rewrite_set_ thy false list_rls t;
669 val s' = term2str t';
670 if s' = "[a / 2 = r * sin alpha, b / 2 = r * cos alpha]"
671 then () else error "new behaviour with list_rls 3.2.";
672 val env = env @ [(str2term "es_::bool list", str2term s')];
674 (*--- 3.line in script ---*)
675 val t = str2term "dropWhile (ident (f_f::real)) (Vars (h_::bool))";
676 val s = subst_atomic env t;
678 val t = str2term "dropWhile (ident A) (Vars (A = a * b))";
679 val SOME (t',_) = rewrite_set_ thy false list_rls t;
680 val s' = term2str t';
681 if s' = "[a, b]" then () else error "new behaviour with list_rls 3.3.";
682 val env = env @ [(str2term "vs_::real list", str2term s')];
684 (*--- 4.line in script ---*)
685 val t = str2term "nth_ 1 v_s";
686 val s = subst_atomic env t;
688 val t = str2term "nth_ 1 [a, b]";
689 val SOME (t',_) = rewrite_set_ thy false list_rls t;
690 val s' = term2str t';
691 if s' = "a" then () else error "new behaviour with list_rls 3.4.";
692 val env = env @ [(str2term "v_1", str2term s')];
694 (*--- 5.line in script ---*)
695 val t = str2term "nth_ 2 v_s";
696 val s = subst_atomic env t;
698 val t = str2term "nth_ 2 [a, b]";
699 val SOME (t',_) = rewrite_set_ thy false list_rls t;
700 val s' = term2str t';
701 if s' = "b" then () else error "new behaviour with list_rls 3.5.";
702 val env = env @ [(str2term "v_2", str2term s')];
704 (*--- 6.line in script ---*)
705 val t = str2term "(hd o (filterVar v_1)) (es_::bool list)";
706 val s = subst_atomic env t;
709 "(hd o filterVar a) [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' = "a / 2 = r * sin alpha" then ()
713 else error "new behaviour with list_rls 3.6.";
714 val e_1 = str2term "e_1::bool";
715 val env = env @ [(e_1, str2term s')];
717 (*--- 7.line in script ---*)
718 val t = str2term "(hd o (filterVar v_2)) (es_::bool list)";
719 val s = subst_atomic env t;
722 "(hd o filterVar b) [a / 2 = r * sin alpha, b / 2 = r * cos alpha]";
723 val SOME (t',_) = rewrite_set_ thy false list_rls t;
724 val s' = term2str t';
725 if s' = "b / 2 = r * cos alpha" then ()
726 else error "new behaviour with list_rls 3.7.";
727 val env = env @ [(str2term "e_2::bool", str2term s')];
729 (*--- 8.line in script ---*)
730 val t = str2term "(SubProblem (Reals_,[univar,equation],[no_met])\
731 \ [BOOL e_1, REAL v_1])";
732 val s = subst_atomic env t;
734 "SubProblem (Reals_, [univar, equation], [no_met])\
735 \ [BOOL (a / 2 = r * sin alpha), REAL a]";
736 val s_1 = str2term "[a = 2*r*sin alpha]";
737 val env = env @ [(str2term "s_1::bool list", s_1)];
739 (*--- 9.line in script ---*)
740 val t = str2term "(SubProblem (Reals_,[univar,equation],[no_met])\
741 \ [BOOL e_2, REAL v_2])";
742 val s = subst_atomic env t;
744 "SubProblem (Reals_, [univar, equation], [no_met])\
745 \ [BOOL (b / 2 = r * cos alpha), REAL b]";
746 val s_2 = str2term "[b = 2*r*cos alpha]";
747 val env = env @ [(str2term "s_2::bool list", s_2)];
749 (*--- 10.line in script ---*)
751 "Substitute [(v_1 = (rhs o hd) s_1),(v_2 = (rhs o hd) s_2)] (h_::bool)";
752 val s = subst_atomic env t;
754 "Substitute\n [(a = (rhs o hd) [a = 2 * r * sin alpha]),\
755 \ (b = (rhs o hd) [b = 2 * r * cos alpha])] (A = a * b)";
756 val SOME (s',_) = rewrite_set_ thy false list_rls s;
757 val s'' = term2str s';
759 "Substitute [a = 2 * r * sin alpha, b = 2 * r * cos alpha] (A = a * b)"
760 then () else error "new behaviour with list_rls 3.10.";
764 ===== inhibit exn 110722===========================================================*)