test/Tools/isac/Knowledge/diffapp.sml
author Walther Neuper <neuper@ist.tugraz.at>
Wed, 08 Sep 2010 17:20:03 +0200
branchisac-update-Isa09-2
changeset 37994 eb4c556a525b
parent 37991 028442673981
child 37995 fac82f29f143
permissions -rw-r--r--
tuned

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