test/Tools/isac/Knowledge/diffapp.sml
author Thomas Leh <t.leh@gmx.at>
Fri, 22 Jul 2011 14:01:09 +0200
branchdecompose-isar
changeset 42166 911c49949ba9
parent 41943 f33f6959948b
child 42195 ac2c5fb8fedd
permissions -rw-r--r--
tuned
     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 (*=== inhibit exn 110722=============================================================
    24 
    25 
    26 
    27 " #################################################### ";
    28 "          problemtypes + formalizations               ";
    29 " #################################################### ";
    30 " -------------- [maximum_of,function] --------------- ";
    31 val pbt = 
    32     ["fixedValues f_ix","maximum m_","valuesFor v_s","relations r_s"];
    33 map (the o (parseold thy)) pbt;
    34 val fmz =
    35     ["fixedValues [r=Arbfix]","maximum A",
    36      "valuesFor [a,b]",
    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]",
    40 
    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] -------------- ";
    48 val pbt = 
    49     ["functionOf f_f","boundVariable v_v","equalities eqs",
    50      "functionTerm f_0_"];
    51 map (the o (parseold thy)) pbt;
    52 val fmz12 =
    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;
    57 val fmz3 =
    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] --------- ";
    63 val pbt = 
    64     ["equality e_e","solveFor v_v","solutions v_i_"];
    65 map (the o (parseold thy)) pbt;
    66 val fmz =
    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] ---- ";
    71 val pbt = 
    72     ["functionTerm t_","boundVariable v_v","interval itv_",
    73      "errorBound err_","maxArgument v_0"];
    74 map (the o (parseold thy)) pbt;
    75 val fmz12 =
    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;
    84 val fmz3 =
    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] --------- ";
    92 val pbt = 
    93     ["functionTerm f_f","boundVariable v_v","derivative f_f'"];
    94 map (the o (parseold thy)) pbt;
    95 val fmz =
    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)",
    98      "boundVariable a",
    99      (*28.11.00: "derivative (A_0'=Undef)"*)"derivative (Undef)"];
   100 map (the o (parseold thy)) fmz;
   101 " --------- [find_values,tool] --------- ";
   102 val pbt = 
   103     ["maxArgument ma_","functionTerm f_f","boundVariable v_v",
   104      "valuesFor vls_","additionalRels r_s"];
   105 map (the o (parseold thy)) pbt;
   106 val fmz1 =
   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)",
   110      "boundVariable a",
   111      "valuesFor [a,b]","maximum A",
   112      "additionalRels [(a/2)^^^2 + (b/2)^^^2 = r^^^2]"];
   113 map (the o (parseold thy)) fmz1;
   114 
   115 === inhibit exn 110722=============================================================*)
   116 
   117 
   118 "-------------------- ptree of {(a,b). is-max ... --------------------------";
   119 "-------------------- ptree of {(a,b). is-max ... --------------------------";
   120 "-------------------- ptree of {(a,b). is-max ... --------------------------";
   121 
   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";
   126 
   127    Compiler.Control.Print.printDepth:=7; (*4 is default*)
   128    Compiler.Control.Print.printDepth:=4; (*4 is default*)
   129    *)
   130 
   131 (* --vvv-- ausgeliehen von test-root-equ/sml *)
   132 val loc = e_istate;
   133 val (dI',pI',mI') =
   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)",
   138 	   "solutions L"];
   139 (*
   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
   144 val (pt,_) = 
   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;
   159 (*val pos = ([1])*)
   160 val (pt,_) = append_result pt pos e_istate ("[1#]:{(a,b). f_x(a,b) ...",[])
   161     Complete;
   162 
   163 val pos = lev_on pos;
   164 (*val pos = ([2]) *)
   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;
   172 (*pos = ([3,1]) *)
   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;
   176 (*pos = ([3,2]) *)
   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;
   179 
   180 val pos = lev_up pos;
   181 (*pos = ([3]) *)
   182 val (pt,_) = append_result pt pos e_istate ("[3#]:{(a,b). f_x ..} cup..",[])
   183     Complete;
   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 = ..." 
   191     Empty_Tac SequenceB;
   192 
   193 
   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;
   214 "--- 1 ---";
   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;
   218 "--- 2 ---";
   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 ...",[])
   222     Complete;
   223 "--- 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;
   228 "--- 4 ---";
   229 writeln (pr_ptree pr_short pt);
   230 
   231 (*
   232 .    ----- pblobj -----
   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 ...
   241 4.1.   set_1 = ...
   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 ...
   248   
   249  use"test-max-surf1.sml";
   250    *)
   251 -------------- 9.6.03 --- cappend_ ... term -------irreparabler test---*)
   252 
   253 
   254 "--------- me .. scripts for maximum-example ---------------------";
   255 "--------- me .. scripts for maximum-example ---------------------";
   256 "--------- me .. scripts for maximum-example ---------------------";
   257 
   258 val fmz =
   259     ["fixedValues [r=Arbfix]","maximum A",
   260      "valuesFor [a,b]",
   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]",
   264 
   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))"];
   270 val (dI',pI',mI') =
   271   ("DiffApp",["maximum_of","function"],
   272    ["DiffApp","max_by_calculus"]);
   273 
   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";
   287 
   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);
   290 
   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=============================================================*)
   300 
   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";
   310 
   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=============================================================*)
   318 
   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);
   321 
   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=============================================================*)
   330 
   331 (*----since WN050901 (ie. corr. mathengine#nxt_specify_ ..nxt_spec Pbl->p_
   332 we get at ...
   333 val (p,_,f,nxt,_,pt) = me nxt p c pt;
   334 ...
   335 ### assod: NotAss m= Subproblem'  ,
   336  stac= Substitute
   337  [(b, (rhs o hd)
   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
   341 ***  [(b, (rhs o hd)
   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
   345 
   346 ############################################################################
   347 # presumerably didnt work before either, but not detected due to Emtpy_Tac #
   348 ############################################################################
   349 
   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"])*)
   353 
   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);
   356 
   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"])*)
   363 
   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]"))*)
   375 
   376 ------------------------------------------------------------------------*)
   377 
   378 (*val f =
   379 Error' (Error_ "Refine_Tacitly [\"univariate\",\"equation\"] not applicable")*)
   380 
   381 
   382 (*----postponed.15.5.03 run scripts for maximum-example: univariate equation*)
   383 (*=== inhibit exn 110722=============================================================
   384 
   385 val (p,_,f,nxt,_,pt) = (me nxt p c pt) handle e => OldGoals.print_exn e; 
   386 === inhibit exn 110722=============================================================*)
   387 
   388 val oris = fst3 (get_obj g_origin pt (fst p));writeln(oris2str oris);
   389 
   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);
   392 
   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);
   395 
   396 (*=== inhibit exn 110722=============================================================
   397 itms2args thy ["DiffApp","max_by_calculus"] mits;
   398 
   399 val (p,_,f,nxt,_,pt) = me nxt p c pt;
   400 === inhibit exn 110722=============================================================*)
   401 
   402 (*---*)
   403 
   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' ++++++++*)
   408  states:=[];
   409 val fmz =
   410     ["fixedValues [r=Arbfix]","maximum A",
   411      "valuesFor [a,b]",
   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]",
   415 
   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))"];
   421 val (dI',pI',mI') =
   422   ("DiffApp",["maximum_of","function"],
   423    ["DiffApp","max_by_calculus"]);
   424 
   425  CalcTree [(fmz, (dI',pI',mI'))];
   426  Iterator 1; moveActiveRoot 1;
   427  autoCalculate 1 CompleteCalcHead;
   428  refFormula 1 (get_pos 1 1); 
   429 
   430  fetchProposedTactic 1;
   431  autoCalculate 1 (Step 1);
   432 
   433  fetchProposedTactic 1;
   434  autoCalculate 1 (Step 1);
   435  (*Subproblem on_interval maximum_of function*)
   436  autoCalculate 1 CompleteCalcHead;
   437 
   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);
   442 (*
   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";
   445 *)
   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";
   450 *)
   451 
   452 
   453 (*=== inhibit exn 110722=============================================================
   454 
   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 ---------";
   458 str2term
   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])\
   465    \           else (hd 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))";
   472 
   473 val f_ix = (str2term "f_ix::bool list", 
   474 	    str2term "[r=Arbfix]");
   475 val m_   = (str2term "m_::real", 
   476 	    str2term "A");
   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", 
   480 	    str2term "b");
   481 val itv_ = (str2term "itv_v::real set", 
   482 	    str2term "{x::real. 0 <= x & x <= 2*r}");
   483 val err_ = (str2term "err_::bool", 
   484 	    str2term "eps=0");
   485 val env = [f_ix, m_, r_s ,v_, itv_, err_];
   486 
   487 (*--- 1.line in script ---*)
   488 val t = str2term "(hd o (filterVar m_)) (r_s::bool list)";
   489 val s = subst_atomic env t;
   490 term2str s;
   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")];
   496 
   497 (*--- 2.line: condition alone ---*)
   498 val t = str2term "1 < length_ (r_s::bool list)";
   499 val s = subst_atomic env t;
   500 term2str s;
   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.";
   505 
   506 (*--- 2.line in script ---*)
   507 val t = str2term 
   508 	    "(if 1 < length_ r_s                            \
   509    \           then (SubProblem (Reals_,[make,function],[no_met])\
   510    \                     [REAL m_, REAL v_v, BOOL_LIST r_s])\
   511    \           else (hd r_s))";
   512 val s = subst_atomic env t;
   513 term2str s;
   514 "if 1 < length_ [A = a * b, (a / 2) ^^^ 2 + (b / 2) ^^^ 2 = r ^^^ 2]\
   515 \then SubProblem (Reals_, [make, function], [no_met])\
   516 \      [REAL A, REAL b,\
   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';
   521 if 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")];
   528 
   529 
   530 
   531 "---------------------- 1.5.03: Make_fun_by_explicit ---------------------";
   532 "---------------------- 1.5.03: Make_fun_by_explicit ---------------------";
   533 "---------------------- 1.5.03: Make_fun_by_explicit ---------------------";
   534 str2term
   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", 
   545 	  str2term "A");
   546 val v_v = (str2term "v_v::real", 
   547 	  str2term "b");
   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];
   551 
   552 (*--- 1.line in script ---*)
   553 val t = str2term "(hd o (filterVar v_v)) (eqs::bool list)";
   554 val s = subst_atomic env t;
   555 term2str s;
   556 val t = str2term 
   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')];
   562 
   563 (*--- 2.line in script ---*)
   564 val t = str2term "hd (dropWhile (ident h_) (eqs::bool list))";
   565 val s = subst_atomic env t;
   566 term2str s;
   567 val t = str2term 
   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')];
   577 
   578 (*--- 3.line in script ---*)
   579 val t = str2term "dropWhile (ident f_) (Vars (h_::bool))";
   580 val s = subst_atomic env t;
   581 term2str s;
   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')];
   587 
   588 (*--- 4.line in script ---*)
   589 val t = str2term "hd (dropWhile (ident v_v) v_s)";
   590 val s = subst_atomic env t;
   591 term2str s;
   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')];
   597 
   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;
   602 term2str s;
   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)]")];
   607 
   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;
   611 term2str s;
   612 val t = str2term 
   613 "Substitute [(a = (rhs o hd) [a = 2 * sqrt (r ^^^ 2 - (b / 2) ^^^ 2)])]\n\
   614 \ (A = a * b)";
   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.";
   620 
   621 
   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 -----------------";
   625 str2term
   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", 
   641 	  str2term "A");
   642 val v_v = (str2term "v_v::real", 
   643 	  str2term "alpha");
   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];
   647 
   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;
   651 term2str s;
   652 val t = str2term 
   653 "(hd o filterVar A) [A = a * b, a / 2 = r * sin alpha, b / 2 = r * cos alpha]";
   654 trace_rewrite:=true;
   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')];
   660 
   661 (*--- 2.line in script ---*)
   662 val t = str2term "dropWhile (ident (h_::bool)) (eqs::bool list)";
   663 val s = subst_atomic env t;
   664 term2str s;
   665 val t = str2term 
   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')];
   673 
   674 (*--- 3.line in script ---*)
   675 val t = str2term "dropWhile (ident (f_f::real)) (Vars (h_::bool))";
   676 val s = subst_atomic env t;
   677 term2str s;
   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')];
   683 
   684 (*--- 4.line in script ---*)
   685 val t = str2term "nth_ 1 v_s";
   686 val s = subst_atomic env t;
   687 term2str s;
   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')];
   693 
   694 (*--- 5.line in script ---*)
   695 val t = str2term "nth_ 2 v_s";
   696 val s = subst_atomic env t;
   697 term2str s;
   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')];
   703 
   704 (*--- 6.line in script ---*)
   705 val t = str2term "(hd o (filterVar v_1)) (es_::bool list)";
   706 val s = subst_atomic env t;
   707 term2str s;
   708 val t = str2term 
   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')];
   716 
   717 (*--- 7.line in script ---*)
   718 val t = str2term "(hd o (filterVar v_2)) (es_::bool list)";
   719 val s = subst_atomic env t;
   720 term2str s;
   721 val t = str2term 
   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')];
   728 
   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;
   733 term2str s;
   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)];
   738 
   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;
   743 term2str s;
   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)];
   748 
   749 (*--- 10.line in script ---*)
   750 val t = str2term 
   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;
   753 term2str s;
   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';
   758 if 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.";
   761 
   762 
   763 
   764 ===== inhibit exn 110722===========================================================*)