1 (* tests for IsacKnowledge/DiffApp
2 author Walther Neuper 000301
3 (c) due to copyright terms
5 use"../smltest/IsacKnowledge/diffapp.sml";
9 Rewrite.trace_on := false; (*true false*)
10 "Contents----------------------------------------------";
11 " Specify_Problem (match_itms_oris) ";
12 " test specify, fmz <> [] ";
13 " test specify, fmz = [] ";
14 " problemtypes + formalizations ";
15 "-------------------- ctree of {(a,b). is-max ... ----------------";
16 "--------- me .. scripts for maximum-example ---------------------";
17 "--------- autoCalc .. scripts for maximum-example ---------------";
19 "--------------------- 30.4.03: maximum .. rewrite_set_ prog_expr ---------";
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) \<up> 2 + (b/2) \<up> 2 = r \<up> 2]",
40 "relations [A=a*b, (a/2) \<up> 2 + (b/2) \<up> 2 = r \<up> 2]",
41 "relations [A=a*b, a/2=r*sin alpha, b/2=r*cos (alpha::real)]",
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) \<up> 2 + (b/2) \<up> 2 = r \<up> 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) \<up> 2 + (b/2) \<up> 2 = r \<up> 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 \<up> #2 - a \<up> #2))",*)
82 "functionTerm (a*sqrt(4*r \<up> 2 - a \<up> 2))",
83 (*28.11.00: "functionTerm (A_0 = b*sqrt(#4*r \<up> #2 - b \<up> #2))",*)
84 "functionTerm (b*sqrt(4*r \<up> 2 - b \<up> 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 \<up> #2 - (a//#2) \<up> #2)",*)
102 "functionTerm (a*2*sqrt r \<up> 2 - (a/2) \<up> 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 \<up> #2 - (a//#2) \<up> #2)",*)
114 "functionTerm (a*2*sqrt r \<up> 2 - (a/2) \<up> 2)",
116 "valuesFor [a,b]", "maximum A",
117 "additionalRels [(a/2) \<up> 2 + (b/2) \<up> 2 = r \<up> 2]"];
118 map (the o (parseold thy)) fmz1;
120 === inhibit exn 110722=============================================================*)
123 "-------------------- ctree of {(a,b). is-max ... --------------------------";
124 "-------------------- ctree of {(a,b). is-max ... --------------------------";
125 "-------------------- ctree of {(a,b). is-max ... --------------------------";
127 (* --vvv-- ausgeliehen von test-root-equ/sml *)
128 val loc = Istate.empty;
130 ("Program",["sqroot-test", "univariate", "equation"],
131 ["Program", "squ-equ-test2"]);
132 val fmz = ["equality (sqrt(9+4*x)=sqrt x + sqrt(5+x))",
133 "solveFor x", "errorBound (eps=0)",
136 val (mI,m) = ("Init_Proof",Init_Proof (fmz, (dI',pI',mI')));
137 val ((p,p_),_,_,_,_,(_,pt,_)) = CalcTreeTEST [fmz, (dI',pI',mI')))];
138 -- \<up> -- ausgeliehen von test-root-equ/sml *)
139 (*-------------- 9.6.03 --- cappend_ ... term -------irreparabler test
141 cappend_problem EmptyPtree [] loc ([],(dI',pI',mI'), .....);
142 val pos = (lev_on o lev_dn) [];
143 (* val pos = ([1]) *)
144 val (pt,_) = cappend_parent pt pos loc "{(a,b). is-max ..."
145 Empty_Tac TransitiveB;
146 val pos = (lev_on o lev_dn) pos;
147 (*val pos = ([1,1])*)
148 val (pt,_) = cappend_atomic pt pos loc "{(a,b). is-max ..."
149 Empty_Tac ("[1,1]:{(a,b). is-extremum ...",[]) Complete;
150 val pos = lev_on pos;
151 (*val pos = ([1,2])*)
152 val (pt,_) = cappend_atomic pt pos loc "{(a,b). is-extremum ..."
153 Empty_Tac ("[1,2]:{(a,b). f_x(a,b) ...",[]) Complete;
154 val pos = lev_up pos;
156 val (pt,_) = append_result pt pos Istate.empty ("[1#]:{(a,b). f_x(a,b) ...",[])
159 val pos = lev_on pos;
161 val (pt,_) = cappend_atomic pt pos loc "{(a,b). f_x(a,b) ..."
162 Empty_Tac ("[2]:{(a,b). f_x & f_xx &...",[]) Complete;
163 val pos = lev_on pos;
164 (*al pos = [3] : pos*)
165 val (pt,_) = cappend_parent pt pos loc "{(a,b). f_x & f_xx &..."
166 Empty_Tac TransitiveB;
167 val pos = (lev_on o lev_dn) pos;
169 val (pt,_) = cappend_atomic pt pos loc "{(a,b). f_x & f_xx & ..."
170 Empty_Tac ("[3,1]:{(a,b). f_x & f_xx } cup ...",[]) Complete;
171 val pos = lev_on pos;
173 val (pt,_) = cappend_atomic pt pos loc "{(a,b). f_x & f_xx } cup.."
174 Empty_Tac ("[3,2]:{(a,b). f_x ..} cup ...",[]) Complete;
176 val pos = lev_up pos;
178 val (pt,_) = append_result pt pos Istate.empty ("[3#]:{(a,b). f_x ..} cup..",[])
180 val pos = lev_on pos;
181 (*val pos = [4] : pos *)
182 val (pt,_) = cappend_parent pt pos loc "{(a,b). f_x ..} cup ..."
183 Empty_Tac IntersectB;
184 val pos = (lev_on o lev_dn) pos;
185 (*val pos = ([4,1]) *)
186 val (pt,_) = cappend_parent pt pos loc "set_1 = ..."
190 val pos = (lev_on o lev_dn) pos;
191 (*val pos = ([4,1,1]) *)
192 val (pt,_) = cappend_parent(*pbl*) pt pos loc"f_x = d/dx x \<up> 3 ..."
193 Empty_Tac TransitiveB;
194 val pos = (lev_on o lev_dn) pos;
195 (*val pos = ([4,1,1,1]) *)
196 val (pt,_) = cappend_parent pt pos loc "d/dx x \<up> 3 ..."
197 Empty_Tac TransitiveB;
198 val pos = (lev_on o lev_dn) pos;
199 (*val pos = ([4,1,1,1,1]) *)
200 val (pt,_) = cappend_atomic pt pos loc "d/dx x \<up> 3 ..."
201 Empty_Tac ("[4,1,1,1,1]:3x \<up> 2 + d/dx ...",[]) Complete;
202 val pos = lev_on pos;
203 (*val pos = ([4,1,1,1,2]) *)
204 val (pt,_) = cappend_atomic pt pos loc "3x \<up> 2 + d/dx ..."
205 Empty_Tac ("[4,1,1,1,2]:3x \<up> 2 + 0 + d/dx ...",[]) Complete;
206 val pos = lev_on pos;
207 (*pos = ([4,1,1,1,3]) *)
208 val (pt,_) = cappend_atomic pt pos loc "3x \<up> 2 + 0 + d/dx ..."
209 Empty_Tac ("[4,1,1,1,3]:3x \<up> 2 + 0 -3 ...",[]) Complete;
211 val pos = lev_up pos;
212 (*pos = ([4,1,1,1]) *)
213 val (pt,_) = append_result pt pos Istate.empty ("[4,1,1,1#]:3x \<up> 2 -3.",[])Complete;
215 val pos = lev_up pos;
216 (*val pos = ([4,1,1]) *)
217 val (pt,_) = append_result pt pos Istate.empty ("[4,1,1#]:found 3x \<up> 2 -3 ...",[])
220 val pos = lev_on pos;
221 (*val pos = ([4,1,2]+) *)
222 val (pt,_) = cappend_parent(*pbl*) pt pos loc "f_y = d/dy x \<up> 3 ..."
223 Empty_Tac TransitiveB;
225 writeln (pr_ctree pr_short pt);
229 1. {(a,b). is-max ...
230 1.1. {(a,b). is-max ...
231 1.2. {(a,b). is-extremum ...
232 2. {(a,b). f_x(a,b) ...
233 3. {(a,b). f_x & f_xx &...
234 3.1. {(a,b). f_x & f_xx & ...
235 3.2. {(a,b). f_x & f_xx } cup..
236 4. {(a,b). f_x ..} cup ...
238 4.1.1. f_x = d/dx x \<up> 3 ...
239 4.1.1.1. d/dx x \<up> 3 ...
240 4.1.1.1.1. d/dx x \<up> 3 ...
241 4.1.1.1.2. 3x \<up> 2 + d/dx ...
242 4.1.1.1.3. 3x \<up> 2 + 0 + d/dx ...
243 4.1.2. f_y = d/dy x \<up> 3 ...
245 use"test-max-surf1.sml";
247 -------------- 9.6.03 --- cappend_ ... term -------irreparabler test---*)
250 "--------- me .. scripts for maximum-example ---------------------";
251 "--------- me .. scripts for maximum-example ---------------------";
252 "--------- me .. scripts for maximum-example ---------------------";
255 ["fixedValues [r=Arbfix]", "maximum A",
257 "relations [A=a*b, (a/2) \<up> 2 + (b/2) \<up> 2 = r \<up> 2]",
258 "relations [A=a*b, (a/2) \<up> 2 + (b/2) \<up> 2 = r \<up> 2]",
259 "relations [A=a*b, a/2=r*sin alpha, b/2=r*cos (alpha::real)]",
261 "boundVariable a", "boundVariable b", "boundVariable alpha",
262 "interval {x::real. 0 <= x & x <= 2*r}",
263 "interval {x::real. 0 <= x & x <= 2*r}",
264 "interval {x::real. 0 <= x & x <= pi}",
265 "errorBound (eps=(0::real))"];
267 ("DiffApp",["maximum_of", "function"],
268 ["DiffApp", "max_by_calculus"]);
270 val (p,_,f,nxt,_,pt) = CalcTreeTEST [(fmz, (dI',pI',mI'))];
271 (*=== inhibit exn 110722=============================================================
272 val (p,_,f,nxt,_,pt) = me nxt p c pt;
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) handle e => OldGoals.print_exn e;
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;
281 case nxt of (_, Specify_Method ["DiffApp", "max_by_calculus"]) => ()
282 | _ => error "diffapp.sml: max-exp me, nxt = Specify_Method";
284 val oris = fst3 (get_obj g_origin pt (fst p)); writeln(O_Model.to_string oris);
285 val pits = get_obj g_pbl pt (fst p); writeln(I_Model.to_string ctxt pits);
287 val (p,_,f,nxt,_,pt) = me nxt p c pt;
288 val mits = get_obj g_met pt (fst p); writeln(I_Model.to_string ctxt mits);
289 val (p,_,f,nxt,_,pt) = me nxt p c pt;
290 val (p,_,f,nxt,_,pt) = me nxt p c pt;
291 val (p,_,f,nxt,_,pt) = me nxt p c pt;
292 case nxt of (_,Apply_Method ["DiffApp", "max_by_calculus"] ) => ()
293 | _ => error "diffapp.sml: max-exp me, nxt = Apply_Method";
294 val (p,_,f,nxt,_,pt) = me nxt p c pt;
295 === inhibit exn 110722=============================================================*)
297 (*since 0508 Apply_Method does the 1st step, if NONE implicit_take -------------
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 | _ => error "diffapp.sml: max-exp me, nxt = Model_Problem";
307 (*=== inhibit exn 110722=============================================================
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;
312 val (p,_,f,nxt,_,pt) = me nxt p c pt;
313 === inhibit exn 110722=============================================================*)
315 val oris = fst3 (get_obj g_origin pt (fst p));writeln(O_Model.to_string oris);
316 val pits = get_obj g_pbl pt (fst p);writeln(I_Model.to_string ctxt pits);
318 (*=== inhibit exn 110722=============================================================
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 val (p,_,f,nxt,_,pt) = me nxt p c pt;
323 case nxt of (_, Apply_Method ["DiffApp", "make_fun_by_explicit"]) => ()
324 | _ => error "diffapp.sml: max-exp Apply_Method ([1], Met) ";
325 === inhibit exn 110722=============================================================*)
327 (*----since WN050901 (ie. corr. mathengine#nxt_specify_ ..Specify.find_next_step' Pbl->p_
329 val (p,_,f,nxt,_,pt) = me nxt p c pt;
331 ### associate: Not_Associated m= Subproblem' ,
334 (Subproblem (thy, [normalise, polynomial, univariate, equation])))]
335 (hd (filterVar A [A = a * b, (a / 2) \<up> 2 + (b / 2) \<up> 2 = r \<up> 2]))
336 *** tac_from_prog TODO: no match for Substitute
338 *** (Subproblem (thy, [normalise, polynomial, univariate, equation])))]
339 *** (hd (filterVar A [A = a * b, (a / 2) \<up> 2 + (b / 2) \<up> 2 = r \<up> 2]))
340 Exception- ERROR raised
342 ############################################################################
343 # presumerably didnt work before either, but not detected due to Emtpy_Tac #
344 ############################################################################
346 (*val nxt = Subproblem ("DiffApp",["univariate", "equation"])) *)
347 val (p,_,f,nxt,_,pt) = me nxt p c pt;
348 (*val nxt = Refine_Tacitly ["univariate", "equation"])*)
350 val oris = fst3 (get_obj g_origin pt (fst p));writeln(O_Model.to_string oris);
351 val pits = get_obj g_pbl pt (fst p);writeln(I_Model.to_string ctxt pits);
353 val (p,_,f,nxt,_,pt) = me nxt p c pt;
354 val (p,_,f,nxt,_,pt) = me nxt p c pt;
355 val (p,_,f,nxt,_,pt) = me nxt p c pt;val (p,_,f,nxt,_,pt) = me nxt p c pt;
356 val (p,_,f,nxt,_,pt) = me nxt p c pt;val (p,_,f,nxt,_,pt) = me nxt p c pt;
357 val (p,_,f,nxt,_,pt) = me nxt p c pt;val (p,_,f,nxt,_,pt) = me nxt p c pt;
358 (*val nxt = ("Apply_Method",Apply_Method ["PolyEq", "normalise_poly"])*)
360 val (p,_,f,nxt,_,pt) = me nxt p c pt;
361 (*val f = Form' (Test_Out.FormKF (~1,EdUndef,3,Nundef,"A = a * b"))*)
362 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 (p,_,f,nxt,_,pt) = me nxt p c pt;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 f = Form' (Test_Out.FormKF (~1,EdUndef,4,Nundef,"[b = A / a]"))*)
372 ------------------------------------------------------------------------*)
375 Error' (Error_ "Refine_Tacitly [\"univariate\",\"equation\"] not applicable")*)
378 (*----postponed.15.5.03 run scripts for maximum-example: univariate equation*)
379 (*=== inhibit exn 110722=============================================================
381 val (p,_,f,nxt,_,pt) = (me nxt p c pt) handle e => OldGoals.print_exn e;
382 === inhibit exn 110722=============================================================*)
384 val oris = fst3 (get_obj g_origin pt (fst p));writeln(O_Model.to_string oris);
386 val pits = get_obj g_pbl pt (fst p);writeln(I_Model.to_string ctxt pits);
387 val pits = get_obj g_pbl pt [];writeln(I_Model.to_string ctxt pits);
389 val mits = get_obj g_met pt (fst p);writeln(I_Model.to_string ctxt mits);
390 val mits = get_obj g_met pt [];writeln(I_Model.to_string ctxt mits);
392 (*=== inhibit exn 110722=============================================================
393 arguments_from_model ["DiffApp", "max_by_calculus"] mits;
395 val (p,_,f,nxt,_,pt) = me nxt p c pt;
396 === inhibit exn 110722=============================================================*)
400 "--------- autoCalc .. scripts for maximum-example ---------------";
401 "--------- autoCalc .. scripts for maximum-example ---------------";
402 "--------- autoCalc .. scripts for maximum-example ---------------";
403 (*++++++++ see systest/inform.sml 'I_Model.complete' ++++++++*)
406 ["fixedValues [r=Arbfix]", "maximum A",
408 "relations [A=a*b, (a/2) \<up> 2 + (b/2) \<up> 2 = r \<up> 2]",
409 "relations [A=a*b, (a/2) \<up> 2 + (b/2) \<up> 2 = r \<up> 2]",
410 "relations [A=a*b, a/2=r*sin alpha, b/2=r*cos (alpha::real)]",
412 "boundVariable a", "boundVariable b", "boundVariable alpha",
413 "interval {x::real. 0 <= x & x <= 2*r}",
414 "interval {x::real. 0 <= x & x <= 2*r}",
415 "interval {x::real. 0 <= x & x <= pi}",
416 "errorBound (eps=(0::real))"];
418 ("DiffApp",["maximum_of", "function"],
419 ["DiffApp", "max_by_calculus"]);
421 CalcTree [(fmz, (dI',pI',mI'))];
422 Iterator 1; moveActiveRoot 1;
423 autoCalculate 1 CompleteCalcHead;
424 refFormula 1 (get_pos 1 1);
426 fetchProposedTactic 1;
427 (*autoCalculate 1 (Steps 1);
428 broken in child of.1790e1073acc : eliminate "handle _ => ..." from Rewrite.rewrite
429 this test is not up to date
430 ERROR exception TERM raised (line 359 of "term.ML"): fastype_of: Bound B.0*)
432 fetchProposedTactic 1;
433 (*autoCalculate 1 (Steps 1);
434 broken in child of.1790e1073acc : eliminate "handle _ => ..." from Rewrite.rewrite
435 this test is not up to date
436 ERROR exception TERM raised (line 359 of "term.ML"): fastype_of: Bound B.0*)
437 (*Subproblem on_interval maximum_of function*)
438 autoCalculate 1 CompleteCalcHead;
440 fetchProposedTactic 1;
441 val ((pt,p),_) = get_calc 1;
442 val mits = get_obj g_met pt (fst p);
443 writeln (I_Model.to_string ctxt mits);
445 if I_Model.to_string 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 ()
446 else error "diffapp.sml: diff.behav. in autoCalc .. scripts for max 1";
448 (*FIXME: the environments contain identifers, and NOT values ?!?!?*)
449 (* WN051209 while extending 'fun step' for initac, this became better ...
450 if I_Model.to_string 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) \<up> 2 + (b / 2) \<up> 2 = r \<up> 2] ,(r_s, [[A = a * b],[(a / 2) \<up> 2 + (b / 2) \<up> 2 = r \<up> 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 ()
451 else error "diffapp.sml: diff.behav. in autoCalc .. scripts for max 1";
456 "--------------------- 30.4.03: maximum .. rewrite_set_ prog_expr ---------";
457 "--------------------- 30.4.03: maximum .. rewrite_set_ prog_expr ---------";
458 "--------------------- 30.4.03: maximum .. rewrite_set_ prog_expr ---------";
460 "Program Maximum_value(f_ix::bool list)(m_m::real) (r_s::bool list)\
461 \ (v_v::real) (itv_v::real set) (err_r::bool) = \
462 \ (let e_e = (hd o (filterVar m_m)) r_s; \
463 \ t_t = (if 1 < length_h r_s \
464 \ then (SubProblem (Reals_s,[make,function],[no_met])\
465 \ [REAL m_m, REAL v_v, BOOL_LIST r_s])\
467 \ (mx_x::real) = SubProblem (Reals_s,[on_interval,max_of,function], \
468 \ [Isac,maximum_on_interval])\
469 \ [BOOL t_t, REAL v_v, REAL_SET itv_v]\
470 \ in ((SubProblem (Reals_s,[find_values,tool],[Isac,find_values]) \
471 \ [REAL mx_x, REAL (Rhs t_t), REAL v_v, REAL m_m, \
472 \ BOOL_LIST (dropWhile (ident e_e) r_s)])::bool list))";
474 val f_ix = (TermC.str2term "f_ix::bool list",
475 TermC.str2term "[r=Arbfix]");
476 val m_m = (TermC.str2term "m_m::real",
478 val r_s = (TermC.str2term "rs_s::bool list",
479 TermC.str2term "[A = a*b, (a/2) \<up> 2 + (b/2) \<up> 2 = r \<up> 2]");
480 val v_v = (TermC.str2term "v_v::real",
482 val itv_v = (TermC.str2term "itv_v::real set",
483 TermC.str2term "{x::real. 0 <= x & x <= 2*r}");
484 val err_r = (TermC.str2term "err_r::bool",
485 TermC.str2term "eps=0");
486 val env = [f_ix, m_m, r_s ,v_v, itv_v, err_r];
488 (*--- 1.line in script ---*)
489 val t = TermC.str2term "(hd o (filterVar m_m)) (r_s::bool list)";
490 val s = subst_atomic env t;
492 "(hd o filterVar A) [A = a * b, (a / 2) \<up> 2 + (b / 2) \<up> 2 = r \<up> 2]";
493 (*=== inhibit exn 110726=============================================================
494 val SOME (s',_) = rewrite_set_ thy false prog_expr s;
495 val s'' = UnparseC.term s';
496 if s''="A = a * b" then () else error "new behaviour with prog_expr 1.1.";
497 === inhibit exn 110726=============================================================*)
498 val env = env @ [(TermC.str2term "e_e::bool",TermC.str2term "A = a * b")];
500 (*--- 2.line: condition alone ---*)
501 val t = TermC.str2term "1 < length_h (r_s::bool list)";
502 val s = subst_atomic env t;
504 "1 < length_h [A = a * b, (a / 2) \<up> 2 + (b / 2) \<up> 2 = r \<up> 2]";
505 (*=== inhibit exn 110726=============================================================
506 val SOME (s',_) = rewrite_set_ thy false prog_expr s;
507 val s'' = UnparseC.term s';
508 if s''=\<^const_name>\<open>True\<close> then () else error "new behaviour with prog_expr 1.2.";
509 === inhibit exn 110726=============================================================*)
511 (*--- 2.line in script ---*)
512 val t = TermC.str2term
513 "(if 1 < length_h r_s \
514 \ then (SubProblem (Reals_s,[make,function],[no_met])\
515 \ [REAL m_m, REAL v_v, BOOL_LIST r_s])\
517 val s = subst_atomic env t;
519 "if 1 < length_h [A = a * b, (a / 2) \<up> 2 + (b / 2) \<up> 2 = r \<up> 2]\
520 \then SubProblem (Reals_s, [make, function], [no_met])\
522 \ BOOL_LIST [A = a * b, (a / 2) \<up> 2 + (b / 2) \<up> 2 = r \<up> 2]]\
523 \else hd [A = a * b, (a / 2) \<up> 2 + (b / 2) \<up> 2 = r \<up> 2]";
524 (*=== inhibit exn 110726=============================================================
525 val SOME (s',_) = rewrite_set_ thy false prog_expr s;
526 val s'' = UnparseC.term s';
528 "SubProblem (Reals_s, [make, function], [no_met])\n\
529 \ [REAL A, REAL b,\n\
530 \ BOOL_LIST [A = a * b, (a / 2) \<up> 2 + (b / 2) \<up> 2 = r \<up> 2]]" then ()
531 else error "new behaviour with prog_expr 1.3.";
532 === inhibit exn 110726=============================================================*)
533 val env = env @ [(TermC.str2term "t_t::bool",
534 TermC.str2term "A = (2*sqrt(r \<up> 2-(b/2) \<up> 2)) * b")];
538 "---------------------- 1.5.03: Make_fun_by_explicit ---------------------";
539 "---------------------- 1.5.03: Make_fun_by_explicit ---------------------";
540 "---------------------- 1.5.03: Make_fun_by_explicit ---------------------";
542 "Program Make_fun_by_explicit (f_f::real) (v_v::real) \
543 \ (eqs::bool list) = \
544 \ (let h_h = (hd o (filterVar f_f)) eqs; \
545 \ e_1 = hd (dropWhile (ident h_h) eqs); \
546 \ v_s = dropWhile (ident f_f) (Vars h_h); \
547 \ v_1 = hd (dropWhile (ident v_v) v_s); \
548 \ (s_1::bool list)=(SubProblem(Reals_s,[univar,equation],[no_met])\
549 \ [BOOL e_1, REAL v_1])\
550 \ in Substitute [(v_1 = (rhs o hd) s_1)] h_h)";
551 val f_f = (TermC.str2term "f_f::real",
553 val v_v = (TermC.str2term "v_v::real",
555 val eqs=(TermC.str2term "eqs::bool list",
556 TermC.str2term "[A = a * b, (a / 2) \<up> 2 + (b / 2) \<up> 2 = r \<up> 2]");
557 val env = [f_f, v_v, eqs];
559 (*--- 1.line in script ---*)
560 val t = TermC.str2term "(hd o (filterVar v_v)) (eqs::bool list)";
561 val s = subst_atomic env t;
563 val t = TermC.str2term
564 "(hd o filterVar b) [A = a * b, (a / 2) \<up> 2 + (b / 2) \<up> 2 = r \<up> 2]";
565 val SOME (t',_) = rewrite_set_ thy false prog_expr t;
566 val s' = UnparseC.term t';
567 (*=== inhibit exn 110726=============================================================
568 if s' = "A = a * b" then () else error "new behaviour with prog_expr 2.1";
569 === inhibit exn 110726=============================================================*)
570 val env = env @ [(TermC.str2term "h_h::bool", TermC.str2term s')];
572 (*--- 2.line in script ---*)
573 val t = TermC.str2term "hd (dropWhile (ident h_h) (eqs::bool list))";
574 val s = subst_atomic env t;
576 val t = TermC.str2term
577 "hd (dropWhile (ident (A = a * b))\
578 \ [A = a * b, (a / 2) \<up> 2 + (b / 2) \<up> 2 = r \<up> 2])";
579 (*=== inhibit exn 110726=============================================================
580 mem_rls "dropWhile_Cons" prog_expr;
581 mem_rls "Prog_Expr.ident" prog_expr;
582 val SOME (t',_) = rewrite_set_ thy false prog_expr t;
583 val s' = UnparseC.term t';
584 if s' = "(a / 2) \<up> 2 + (b / 2) \<up> 2 = r \<up> 2" then ()
585 else error "new behaviour with prog_expr 2.2";
586 === inhibit exn 110726=============================================================*)
587 val env = env @ [(TermC.str2term "e_1::bool", TermC.str2term s')];
589 (*--- 3.line in script ---*)
590 val t = TermC.str2term "dropWhile (ident f_f) (Vars (h_h::bool))";
591 val s = subst_atomic env t;
593 val t = TermC.str2term "dropWhile (ident A) (Vars (A = a * b))";
594 (*=== inhibit exn 110726=============================================================
595 val SOME (t',_) = rewrite_set_ thy false prog_expr t;
596 val s' = UnparseC.term t';
597 if s' = "[a, b]" then () else error "new behaviour with prog_expr 2.3";
598 === inhibit exn 110726=============================================================*)
599 val env = env @ [(TermC.str2term "vs_s::real list", TermC.str2term s')];
601 (*--- 4.line in script ---*)
602 val t = TermC.str2term "hd (dropWhile (ident v_v) v_s)";
603 val s = subst_atomic env t;
605 val t = TermC.str2term "hd (dropWhile (ident b) [a, b])";
606 (*=== inhibit exn 110726=============================================================
607 val SOME (t',_) = rewrite_set_ thy false prog_expr t;
608 val s' = UnparseC.term t';
609 if s' = "a" then () else error "new behaviour with prog_expr 2.4.";
610 === inhibit exn 110726=============================================================*)
611 val env = env @ [(TermC.str2term "v_1::real", TermC.str2term s')];
613 (*--- 5.line in script ---*)
614 val t = TermC.str2term "(SubProblem(Reals_s,[univar,equation],[no_met])\
615 \ [BOOL e_1, REAL v_1])";
616 val s = subst_atomic env t;
618 "SubProblem (Reals_s, [univar, equation], [no_met])\n\
619 \ [BOOL ((a / 2) \<up> 2 + (b / 2) \<up> 2 = r \<up> 2), REAL a]";
620 val env = env @ [(TermC.str2term "s_1::bool list",
621 TermC.str2term "[a = 2 * sqrt (r \<up> 2 - (b/2) \<up> 2)]")];
623 (*--- 6.line in script ---*)
624 val t = TermC.str2term "Substitute [(v_1 = (rhs o hd) (s_1::bool list))] (h_h::bool)";
625 val s = subst_atomic env t;
627 val t = TermC.str2term
628 "Substitute [(a = (rhs o hd) [a = 2 * sqrt (r \<up> 2 - (b / 2) \<up> 2)])]\n\
630 (*=== inhibit exn 110726=============================================================
631 mem_rls "Prog_Expr.rhs" prog_expr;
632 val SOME (t',_) = rewrite_set_ thy false prog_expr t;
633 val s' = UnparseC.term t';
634 if s' = "Substitute [a = 2 * sqrt (r \<up> 2 - (b / 2) \<up> 2)] (A = a * b)"
635 then () else error "new behaviour with prog_expr 2.6.";
636 === inhibit exn 110726=============================================================*)
639 "---------------------- 2.5.03: Make_fun_by_new_variable -----------------";
640 "---------------------- 2.5.03: Make_fun_by_new_variable -----------------";
641 "---------------------- 2.5.03: Make_fun_by_new_variable -----------------";
643 "Program Make_fun_by_new_variable (f_f::real) (v_v::real) \
644 \ (eqs::bool list) = \
645 \(let h_h = (hd o (filterVar f_f)) eqs; \
646 \ es_s = dropWhile (ident h_h) eqs; \
647 \ v_s = dropWhile (ident f_f) (Vars h_h); \
648 \ v_1 = nth_h 1 v_s; \
649 \ v_2 = nth_h 2 v_s; \
650 \ e_1 = (hd o (filterVar v_1)) es_s; \
651 \ e_2 = (hd o (filterVar v_2)) es_s; \
652 \ (s_1::bool list) = (SubProblem (Reals_s,[univar,equation],[no_met])\
653 \ [BOOL e_1, REAL v_1]);\
654 \ (s_2::bool list) = (SubProblem (Reals_s,[univar,equation],[no_met])\
655 \ [BOOL e_2, REAL v_2])\
656 \in Substitute [(v_1 = (rhs o hd) s_1),(v_2 = (rhs o hd) s_2)] h_h)";
657 val f_ = (TermC.str2term "f_f::real",
659 val v_v = (TermC.str2term "v_v::real",
660 TermC.str2term "alpha");
661 val eqs=(TermC.str2term "eqs::bool list",
662 TermC.str2term "[A=a*b, a/2=r*sin alpha, b/2=r*cos (alpha::real)]");
663 val env = [f_f, v_v, eqs];
665 (*--- 1.line in script ---*)
666 val t = TermC.str2term "(hd o (filterVar (f_f::real))) (eqs::bool list)";
667 val s = subst_atomic env t;
669 val t = TermC.str2term
670 "(hd o filterVar A) [A = a * b, a / 2 = r * sin alpha, b / 2 = r * cos alpha]";
671 Rewrite.trace_on := false; (*true false*)
672 val SOME (t',_) = rewrite_set_ thy false prog_expr t;
673 Rewrite.trace_on:=false; (*true false*)
674 val s' = UnparseC.term t';
675 (*=== inhibit exn 110726=============================================================
676 if s' = "A = a * b" then() else error "new behaviour with prog_expr 3.1.";
677 val env = env @ [(TermC.str2term "h_h::bool", TermC.str2term s')];
678 === inhibit exn 110726=============================================================*)
680 (*--- 2.line in script ---*)
681 val t = TermC.str2term "dropWhile (ident (h_h::bool)) (eqs::bool list)";
682 val s = subst_atomic env t;
684 val t = TermC.str2term
685 "dropWhile (ident (A = a * b))\
686 \ [A = a * b, a / 2 = r * sin alpha, b / 2 = r * cos alpha]";
687 (*=== inhibit exn 110726=============================================================
688 val SOME (t',_) = rewrite_set_ thy false prog_expr t;
689 val s' = UnparseC.term t';
690 if s' = "[a / 2 = r * sin alpha, b / 2 = r * cos alpha]"
691 then () else error "new behaviour with prog_expr 3.2.";
692 === inhibit exn 110726=============================================================*)
693 val env = env @ [(TermC.str2term "es_s::bool list", TermC.str2term s')];
695 (*--- 3.line in script ---*)
696 val t = TermC.str2term "dropWhile (ident (f_f::real)) (Vars (h_h::bool))";
697 val s = subst_atomic env t;
699 val t = TermC.str2term "dropWhile (ident A) (Vars (A = a * b))";
700 (*=== inhibit exn 110726=============================================================
701 val SOME (t',_) = rewrite_set_ thy false prog_expr t;
702 val s' = UnparseC.term t';
703 if s' = "[a, b]" then () else error "new behaviour with prog_expr 3.3.";
704 === inhibit exn 110726=============================================================*)
705 val env = env @ [(TermC.str2term "vs_s::real list", TermC.str2term s')];
707 (*--- 4.line in script ---*)
708 val t = TermC.str2term "nth_h 1 v_s";
709 val s = subst_atomic env t;
711 val t = TermC.str2term "nth_h 1 [a, b]";
712 (*=== inhibit exn 110726=============================================================
713 val SOME (t',_) = rewrite_set_ thy false prog_expr t;
714 val s' = UnparseC.term t';
715 if s' = "a" then () else error "new behaviour with prog_expr 3.4.";
716 === inhibit exn 110726=============================================================*)
717 val env = env @ [(TermC.str2term "v_1", TermC.str2term s')];
719 (*--- 5.line in script ---*)
720 val t = TermC.str2term "nth_h 2 v_s";
721 val s = subst_atomic env t;
723 val t = TermC.str2term "nth_h 2 [a, b]";
724 (*=== inhibit exn 110726=============================================================
725 val SOME (t',_) = rewrite_set_ thy false prog_expr t;
726 val s' = UnparseC.term t';
727 if s' = "b" then () else error "new behaviour with prog_expr 3.5.";
728 === inhibit exn 110726=============================================================*)
729 val env = env @ [(TermC.str2term "v_2", TermC.str2term s')];
731 (*--- 6.line in script ---*)
732 val t = TermC.str2term "(hd o (filterVar v_1)) (es_s::bool list)";
733 val s = subst_atomic env t;
735 val t = TermC.str2term
736 "(hd o filterVar a) [a / 2 = r * sin alpha, b / 2 = r * cos alpha]";
737 val SOME (t',_) = rewrite_set_ thy false prog_expr t;
738 val s' = UnparseC.term t';
739 (*=== inhibit exn 110726=============================================================
740 if s' = "a / 2 = r * sin alpha" then ()
741 else error "new behaviour with prog_expr 3.6.";
742 === inhibit exn 110726=============================================================*)
743 val e_1 = TermC.str2term "e_1::bool";
744 val env = env @ [(e_1, TermC.str2term s')];
746 (*--- 7.line in script ---*)
747 val t = TermC.str2term "(hd o (filterVar v_2)) (es_s::bool list)";
748 val s = subst_atomic env t;
750 val t = TermC.str2term
751 "(hd o filterVar b) [a / 2 = r * sin alpha, b / 2 = r * cos alpha]";
752 val SOME (t',_) = rewrite_set_ thy false prog_expr t;
753 val s' = UnparseC.term t';
754 (*=== inhibit exn 110726=============================================================
755 if s' = "b / 2 = r * cos alpha" then ()
756 else error "new behaviour with prog_expr 3.7.";
757 === inhibit exn 110726=============================================================*)
758 val env = env @ [(TermC.str2term "e_2::bool", TermC.str2term s')];
760 (*--- 8.line in script ---*)
761 val t = TermC.str2term "(SubProblem (Reals_s,[univar,equation],[no_met])\
762 \ [BOOL e_1, REAL v_1])";
763 val s = subst_atomic env t;
765 "SubProblem (Reals_s, [univar, equation], [no_met])\
766 \ [BOOL (a / 2 = r * sin alpha), REAL a]";
767 val s_1 = TermC.str2term "[a = 2*r*sin alpha]";
768 val env = env @ [(TermC.str2term "s_1::bool list", s_1)];
770 (*--- 9.line in script ---*)
771 val t = TermC.str2term "(SubProblem (Reals_s,[univar,equation],[no_met])\
772 \ [BOOL e_2, REAL v_2])";
773 val s = subst_atomic env t;
775 "SubProblem (Reals_s, [univar, equation], [no_met])\
776 \ [BOOL (b / 2 = r * cos alpha), REAL b]";
777 val s_2 = TermC.str2term "[b = 2*r*cos alpha]";
778 val env = env @ [(TermC.str2term "s_2::bool list", s_2)];
780 (*--- 10.line in script ---*)
781 val t = TermC.str2term
782 "Substitute [(v_1 = (rhs o hd) s_1),(v_2 = (rhs o hd) s_2)] (h_h::bool)";
783 val s = subst_atomic env t;
785 "Substitute\n [(a = (rhs o hd) [a = 2 * r * sin alpha]),\
786 \ (b = (rhs o hd) [b = 2 * r * cos alpha])] (A = a * b)";
787 val SOME (s',_) = rewrite_set_ thy false prog_expr s;
788 val s'' = UnparseC.term s';
789 (*=== inhibit exn 110726=============================================================
791 "Substitute [a = 2 * r * sin alpha, b = 2 * r * cos alpha] (A = a * b)"
792 then () else error "new behaviour with prog_expr 3.10.";
793 ===== inhibit exn 110722===========================================================*)