test/Tools/isac/Knowledge/diffapp.sml
author Walther Neuper <neuper@ist.tugraz.at>
Sun, 21 Jul 2013 15:08:31 +0200
changeset 52065 41f6e90abf36
parent 42204 b6c894902413
child 52101 c3f399ce32af
permissions -rw-r--r--
a bulky chunk of changes

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