test/Tools/isac/Knowledge/diffapp.sml
author wneuper <walther.neuper@jku.at>
Sun, 18 Jul 2021 18:15:27 +0200
changeset 60331 40eb8aa2b0d6
parent 60309 70a1d102660d
parent 60330 e5e9a6c45597
permissions -rw-r--r--
merged
     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 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 ---------------";
    18 
    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 -----------------";
    22 
    23 
    24 
    25 
    26 
    27 " #################################################### ";
    28 "          problemtypes + formalizations               ";
    29 " #################################################### ";
    30 " -------------- [maximum_of,function] --------------- ";
    31 val pbt = 
    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=============================================================*)
    36 val fmz =
    37     ["fixedValues [r=Arbfix]", "maximum A",
    38      "valuesFor [a,b]",
    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)]",
    42 
    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=============================================================*)
    52 val pbt = 
    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;
    57 val fmz12 =
    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;
    62 val fmz3 =
    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] --------- ";
    68 val pbt = 
    69     ["equality e_e", "solveFor v_v", "solutions v_i_i"];
    70 map (the o (parseold thy)) pbt;
    71 val fmz =
    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] ---- ";
    76 val pbt = 
    77     ["functionTerm t_t", "boundVariable v_v", "interval itv_v",
    78      "errorBound err_r", "maxArgument v_0"];
    79 map (the o (parseold thy)) pbt;
    80 val fmz12 =
    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;
    89 val fmz3 =
    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] --------- ";
    97 val pbt = 
    98     ["functionTerm f_f", "boundVariable v_v", "derivative f_f'"];
    99 map (the o (parseold thy)) pbt;
   100 val fmz =
   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)",
   103      "boundVariable a",
   104      (*28.11.00: "derivative (A_0'=Undef)"*)"derivative (Undef)"];
   105 map (the o (parseold thy)) fmz;
   106 " --------- [find_values,tool] --------- ";
   107 val pbt = 
   108     ["maxArgument ma_a", "functionTerm f_f", "boundVariable v_v",
   109      "valuesFor vls_s", "additionalRels r_s"];
   110 map (the o (parseold thy)) pbt;
   111 val fmz1 =
   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)",
   115      "boundVariable a",
   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;
   119 
   120 === inhibit exn 110722=============================================================*)
   121 
   122 
   123 "-------------------- ctree of {(a,b). is-max ... --------------------------";
   124 "-------------------- ctree of {(a,b). is-max ... --------------------------";
   125 "-------------------- ctree of {(a,b). is-max ... --------------------------";
   126 
   127 (* --vvv-- ausgeliehen von test-root-equ/sml *)
   128 val loc = Istate.empty;
   129 val (dI',pI',mI') =
   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)",
   134 	   "solutions L"];
   135 (*
   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
   140 val (pt,_) = 
   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;
   155 (*val pos = ([1])*)
   156 val (pt,_) = append_result pt pos Istate.empty ("[1#]:{(a,b). f_x(a,b) ...",[])
   157     Complete;
   158 
   159 val pos = lev_on pos;
   160 (*val pos = ([2]) *)
   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;
   168 (*pos = ([3,1]) *)
   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;
   172 (*pos = ([3,2]) *)
   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;
   175 
   176 val pos = lev_up pos;
   177 (*pos = ([3]) *)
   178 val (pt,_) = append_result pt pos Istate.empty ("[3#]:{(a,b). f_x ..} cup..",[])
   179     Complete;
   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 = ..." 
   187     Empty_Tac SequenceB;
   188 
   189 
   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;
   210 "--- 1 ---";
   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;
   214 "--- 2 ---";
   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 ...",[])
   218     Complete;
   219 "--- 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;
   224 "--- 4 ---";
   225 writeln (pr_ctree pr_short pt);
   226 
   227 (*
   228 .    ----- pblobj -----
   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 ...
   237 4.1.   set_1 = ...
   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 ...
   244   
   245  use"test-max-surf1.sml";
   246    *)
   247 -------------- 9.6.03 --- cappend_ ... term -------irreparabler test---*)
   248 
   249 
   250 "--------- me .. scripts for maximum-example ---------------------";
   251 "--------- me .. scripts for maximum-example ---------------------";
   252 "--------- me .. scripts for maximum-example ---------------------";
   253 
   254 val fmz =
   255     ["fixedValues [r=Arbfix]", "maximum A",
   256      "valuesFor [a,b]",
   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)]",
   260 
   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))"];
   266 val (dI',pI',mI') =
   267   ("DiffApp",["maximum_of", "function"],
   268    ["DiffApp", "max_by_calculus"]);
   269 
   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";
   283 
   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);
   286 
   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=============================================================*)
   296 
   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";
   306 
   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=============================================================*)
   314 
   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);
   317 
   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=============================================================*)
   326 
   327 (*----since WN050901 (ie. corr. mathengine#nxt_specify_ ..Specify.find_next_step' Pbl->p_
   328 we get at ...
   329 val (p,_,f,nxt,_,pt) = me nxt p c pt;
   330 ...
   331 ### associate: Not_Associated m= Subproblem'  ,
   332  stac= Substitute
   333  [(b, (rhs o hd)
   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
   337 ***  [(b, (rhs o hd)
   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
   341 
   342 ############################################################################
   343 # presumerably didnt work before either, but not detected due to Emtpy_Tac #
   344 ############################################################################
   345 
   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"])*)
   349 
   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);
   352 
   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"])*)
   359 
   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]"))*)
   371 
   372 ------------------------------------------------------------------------*)
   373 
   374 (*val f =
   375 Error' (Error_ "Refine_Tacitly [\"univariate\",\"equation\"] not applicable")*)
   376 
   377 
   378 (*----postponed.15.5.03 run scripts for maximum-example: univariate equation*)
   379 (*=== inhibit exn 110722=============================================================
   380 
   381 val (p,_,f,nxt,_,pt) = (me nxt p c pt) handle e => OldGoals.print_exn e; 
   382 === inhibit exn 110722=============================================================*)
   383 
   384 val oris = fst3 (get_obj g_origin pt (fst p));writeln(O_Model.to_string oris);
   385 
   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);
   388 
   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);
   391 
   392 (*=== inhibit exn 110722=============================================================
   393 arguments_from_model ["DiffApp", "max_by_calculus"] mits;
   394 
   395 val (p,_,f,nxt,_,pt) = me nxt p c pt;
   396 === inhibit exn 110722=============================================================*)
   397 
   398 (*---*)
   399 
   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' ++++++++*)
   404  reset_states ();
   405 val fmz =
   406     ["fixedValues [r=Arbfix]", "maximum A",
   407      "valuesFor [a,b]",
   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)]",
   411 
   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))"];
   417 val (dI',pI',mI') =
   418   ("DiffApp",["maximum_of", "function"],
   419    ["DiffApp", "max_by_calculus"]);
   420 
   421  CalcTree [(fmz, (dI',pI',mI'))];
   422  Iterator 1; moveActiveRoot 1;
   423  autoCalculate 1 CompleteCalcHead;
   424  refFormula 1 (get_pos 1 1); 
   425 
   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*)
   431 
   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;
   439 
   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);
   444 (*
   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";
   447 *)
   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";
   452 *)
   453 
   454 
   455 
   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 ---------";
   459 TermC.str2term
   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])\
   466    \           else (hd 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))";
   473 
   474 val f_ix = (TermC.str2term "f_ix::bool list", 
   475 	    TermC.str2term "[r=Arbfix]");
   476 val m_m   = (TermC.str2term "m_m::real", 
   477 	    TermC.str2term "A");
   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", 
   481 	    TermC.str2term "b");
   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];
   487 
   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;
   491 UnparseC.term s;
   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")];
   499 
   500 (*--- 2.line: condition alone ---*)
   501 val t = TermC.str2term "1 < length_h (r_s::bool list)";
   502 val s = subst_atomic env t;
   503 UnparseC.term s;
   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=============================================================*)
   510 
   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])\
   516    \           else (hd r_s))";
   517 val s = subst_atomic env t;
   518 UnparseC.term s;
   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])\
   521 \      [REAL A, REAL b,\
   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';
   527 if 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")];
   535 
   536 
   537 
   538 "---------------------- 1.5.03: Make_fun_by_explicit ---------------------";
   539 "---------------------- 1.5.03: Make_fun_by_explicit ---------------------";
   540 "---------------------- 1.5.03: Make_fun_by_explicit ---------------------";
   541 TermC.str2term
   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", 
   552 	  TermC.str2term "A");
   553 val v_v = (TermC.str2term "v_v::real", 
   554 	  TermC.str2term "b");
   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];
   558 
   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;
   562 UnparseC.term s;
   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')];
   571 
   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;
   575 UnparseC.term s;
   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')];
   588 
   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;
   592 UnparseC.term s;
   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')];
   600 
   601 (*--- 4.line in script ---*)
   602 val t = TermC.str2term "hd (dropWhile (ident v_v) v_s)";
   603 val s = subst_atomic env t;
   604 UnparseC.term s;
   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')];
   612 
   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;
   617 UnparseC.term s;
   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)]")];
   622 
   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;
   626 UnparseC.term s;
   627 val t = TermC.str2term 
   628 "Substitute [(a = (rhs o hd) [a = 2 * sqrt (r \<up> 2 - (b / 2) \<up> 2)])]\n\
   629 \ (A = a * b)";
   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=============================================================*)
   637 
   638 
   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 -----------------";
   642 TermC.str2term
   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", 
   658 	  TermC.str2term "A");
   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];
   664 
   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;
   668 UnparseC.term s;
   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=============================================================*)
   679 
   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;
   683 UnparseC.term s;
   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')];
   694 
   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;
   698 UnparseC.term s;
   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')];
   706 
   707 (*--- 4.line in script ---*)
   708 val t = TermC.str2term "nth_h 1 v_s";
   709 val s = subst_atomic env t;
   710 UnparseC.term s;
   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')];
   718 
   719 (*--- 5.line in script ---*)
   720 val t = TermC.str2term "nth_h 2 v_s";
   721 val s = subst_atomic env t;
   722 UnparseC.term s;
   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')];
   730 
   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;
   734 UnparseC.term s;
   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')];
   745 
   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;
   749 UnparseC.term s;
   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')];
   759 
   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;
   764 UnparseC.term s;
   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)];
   769 
   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;
   774 UnparseC.term s;
   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)];
   779 
   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;
   784 UnparseC.term s;
   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=============================================================
   790 if s'' = 
   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===========================================================*)
   794