test/Tools/isac/Knowledge/diff.sml
author Walther Neuper <wneuper@ist.tugraz.at>
Thu, 20 Oct 2016 10:26:29 +0200
changeset 59253 f0bb15a046ae
parent 59248 5eba5e6d5266
child 59255 383722bfcff5
permissions -rw-r--r--
simplify handling of theorems

Notes:
# this should complete 727dff4f6b2c
# see comment at "type thm''" (TODO: rename to thm')
# see comment at "type tac " at "| Rewrite"
!!! random errors *only* in test/../use-cases.sml
!!! probably due to "val states = Synchronized.var"
!!! see subsequent changeset for further hints.
neuper@37906
     1
(* 
neuper@37906
     2
neuper@37906
     3
use"../smltest/IsacKnowledge/diff.sml";
neuper@37906
     4
use"diff.sml";
neuper@37906
     5
*)
neuper@37906
     6
neuper@38081
     7
"--------------------------------------------------------";
neuper@38081
     8
"--------------------------------------------------------";
neuper@38081
     9
"table of contents --------------------------------------";
neuper@38081
    10
"--------------------------------------------------------";
neuper@38081
    11
"----------- problemtype --------------------------------";
neuper@38081
    12
"----------- for correction of diff_const ---------------";
neuper@38081
    13
"----------- for correction of diff_quot ----------------";
neuper@38081
    14
"----------- differentiate by rewrite -------------------";
neuper@38081
    15
"----------- differentiate: me (*+ tacs input*) ---------";
neuper@38081
    16
"----------- 1.5.02 me from script ----------------------";
neuper@38081
    17
"----------- primed id ----------------------------------";
neuper@38081
    18
"----------- diff_conv, sym_diff_conv -------------------";
wneuper@59248
    19
"----------- autoCalculate differentiate_on_R 2/x^2 -----";
wneuper@59248
    20
"----------- autoCalculate diff after_simplification ----";
wneuper@59248
    21
"----------- autoCalculate differentiate_equality -------";
neuper@38081
    22
"----------- tests for examples -------------------------";
neuper@38081
    23
"------------inform for x^2+x+1 -------------------------";
neuper@38081
    24
"--------------------------------------------------------";
neuper@38081
    25
"--------------------------------------------------------";
neuper@38081
    26
"--------------------------------------------------------";
neuper@37906
    27
neuper@37906
    28
neuper@41929
    29
val thy = @{theory "Diff"};
neuper@37906
    30
neuper@38081
    31
"----------- problemtype --------------------------------";
neuper@38081
    32
"----------- problemtype --------------------------------";
neuper@38081
    33
"----------- problemtype --------------------------------";
neuper@37994
    34
val pbt = {Given =["functionTerm f_f", "differentiateFor v_v"],
neuper@37906
    35
	   Where =[],
neuper@37994
    36
	   Find  =["derivative f_f'"],
neuper@37906
    37
	   With  =[],
neuper@37906
    38
	   Relate=[]}:string ppc;
neuper@38081
    39
val chkpbt = ((map (the o (parse thy))) o ppc2list) pbt;
neuper@37906
    40
neuper@37906
    41
val org = ["functionTerm (d_d x (x ^^^ 2 + 3 * x + 4))", 
neuper@37994
    42
	   "differentiateFor x","derivative f_f'"];
neuper@38081
    43
val chkorg = map (the o (parse thy)) org;
neuper@37906
    44
neuper@37906
    45
get_pbt ["derivative_of","function"];
neuper@37906
    46
get_met ["diff","differentiate_on_R"];
neuper@37906
    47
neuper@38081
    48
"----------- for correction of diff_const ---------------";
neuper@38081
    49
"----------- for correction of diff_const ---------------";
neuper@38081
    50
"----------- for correction of diff_const ---------------";
neuper@37906
    51
(*re-evaluate this file, otherwise > *** ME_Isa: 'erls' not known*)
neuper@37991
    52
val thy' = "Diff";
neuper@37906
    53
val ct = "Not (x =!= a)";
neuper@52142
    54
rewrite_set thy' false "erls_diff" ct;
neuper@37906
    55
val ct = "2 is_const";
neuper@52142
    56
rewrite_set thy' false "erls_diff" ct;
neuper@37906
    57
neuper@37906
    58
val thm = ("diff_const","");
neuper@37906
    59
val ct = "d_d x x";
neuper@37926
    60
val NONE =
neuper@52142
    61
    (rewrite_inst thy' "tless_true" "erls_diff" false [("bdv","x")] thm ct);
neuper@37906
    62
val ct = "d_d x 2";
neuper@37926
    63
val SOME (ctt,_) =
neuper@52142
    64
    (rewrite_inst thy' "tless_true" "erls_diff" false [("bdv","x")] thm ct);
neuper@37906
    65
"----- for 'd_d s a' we got 'a is_const' --> False --------vvv-----";
neuper@52101
    66
trace_rewrite := false;
neuper@37906
    67
val ct = "d_d s a";
neuper@52142
    68
    (rewrite_inst thy' "tless_true" "erls_diff" false [("bdv","s")] thm ct);
neuper@37926
    69
(*got: NONE instead SOME*)
neuper@52142
    70
eval_true (@{theory "Isac"}) [str2term "a is_const"] (assoc_rls"erls_diff");
neuper@37906
    71
(*got: false instead true;   ~~~~~~~~~~~ replaced by 'is_atom'*)
neuper@37926
    72
val SOME (ctt,_) =
neuper@52142
    73
    (rewrite_inst thy' "tless_true" "erls_diff" false [("bdv","s")] thm ct);
neuper@38031
    74
if ctt = "0" then () else error "diff.sml: thm 'diff_const' diff.behav.";
neuper@37906
    75
trace_rewrite := false;
neuper@37906
    76
"----- for 'd_d s a' we had 'a is_const' --> False --------^^^-----";
neuper@37906
    77
neuper@37906
    78
val thm = ("diff_var","");
neuper@37906
    79
val ct = "d_d x x";
neuper@37926
    80
val SOME (ctt,_) =
neuper@52142
    81
    (rewrite_inst thy' "tless_true" "erls_diff" false [("bdv","x")] thm ct);
neuper@37906
    82
val ct = "d_d x a";
neuper@37926
    83
val NONE =
neuper@52142
    84
    (rewrite_inst thy' "tless_true" "erls_diff" false [("bdv","x")] thm ct);
neuper@37906
    85
val ct = "d_d x (x+x)";
neuper@37926
    86
val NONE =
neuper@52142
    87
(rewrite_inst thy' "tless_true" "erls_diff" false [("bdv","x")] thm ct);
neuper@37906
    88
neuper@37906
    89
neuper@38081
    90
"----------- for correction of diff_quot ----------------";
neuper@38081
    91
"----------- for correction of diff_quot ----------------";
neuper@38081
    92
"----------- for correction of diff_quot ----------------";
neuper@37991
    93
val thy' = "Diff";
neuper@37906
    94
val ct = "Not (x = 0)";
neuper@52142
    95
rewrite_set thy' false "erls_diff" ct;
neuper@37906
    96
neuper@37906
    97
val ct = "d_d x ((x+1) / (x - 1))";
neuper@37906
    98
val thm = ("diff_quot","");
neuper@37926
    99
val SOME (ctt,_) =
neuper@52142
   100
    (rewrite_inst thy' "tless_true" "erls_diff" true [("bdv","x")] thm ct);
neuper@37906
   101
neuper@37906
   102
neuper@38081
   103
"----------- differentiate by rewrite -------------------";
neuper@38081
   104
"----------- differentiate by rewrite -------------------";
neuper@38081
   105
"----------- differentiate by rewrite -------------------";
neuper@37991
   106
val thy' = "Diff";
neuper@37906
   107
val ct = "d_d x (x ^^^ 2 + 3 * x + 4)";
neuper@37906
   108
"--- 1 ---";
neuper@37906
   109
val thm = ("diff_sum","");
neuper@52142
   110
val (ct,_) = the (rewrite_inst thy' "tless_true" "erls_diff" true 
neuper@37906
   111
		  [("bdv","x::real")] thm ct);
neuper@37906
   112
"--- 2 ---";
neuper@52142
   113
val (ct,_) = the (rewrite_inst thy' "tless_true" "erls_diff" true 
neuper@37906
   114
		  [("bdv","x::real")] thm ct);
neuper@37906
   115
"--- 3 ---";
neuper@37906
   116
val thm = ("diff_prod_const","");
neuper@52142
   117
val (ct,_) = the (rewrite_inst thy' "tless_true" "erls_diff" true 
neuper@37906
   118
		  [("bdv","x::real")] thm ct);
neuper@37906
   119
"--- 4 ---";
neuper@37906
   120
val thm = ("diff_pow","");
neuper@52142
   121
val (ct,_) = the (rewrite_inst thy' "tless_true" "erls_diff" true 
neuper@37906
   122
		  [("bdv","x::real")] thm ct);
neuper@37906
   123
"--- 5 ---";
neuper@37906
   124
val thm = ("diff_const","");
neuper@52142
   125
val (ct,_) = the (rewrite_inst thy' "tless_true" "erls_diff" true 
neuper@37906
   126
		  [("bdv","x::real")] thm ct);
neuper@37906
   127
"--- 6 ---";
neuper@37906
   128
val thm = ("diff_var","");
neuper@52142
   129
val (ct,_) = the (rewrite_inst thy' "tless_true" "erls_diff" true 
neuper@37906
   130
		  [("bdv","x::real")] thm ct);
neuper@37906
   131
if ct = "2 * x ^^^ (2 - 1) + 3 * 1 + 0" then ()
neuper@38031
   132
else error "diff.sml diff.behav. in rewrite 1";
neuper@37906
   133
"--- 7 ---";
neuper@37906
   134
val rls = ("Test_simplify");
neuper@37906
   135
val (ct,_) = the (rewrite_set thy' false rls ct);
neuper@38031
   136
if ct="3 + 2 * x" then () else error "new behaviour in test-example";
neuper@37906
   137
neuper@37906
   138
val ct = "2 * x ^^^ (2 - 1) + 3 * 1 + 0";
neuper@37906
   139
val (ct,_) = the (rewrite_set thy' true rls ct);
neuper@37906
   140
neuper@37906
   141
(*---
neuper@37906
   142
val t = str2term "x ^^^ (2 - 1)";
neuper@37926
   143
val SOME (t',_) = rewrite_set_ thy false Test_simplify t;
neuper@37906
   144
term2str t';
neuper@37906
   145
neuper@37906
   146
val t = str2term "-1 * 1";
neuper@37926
   147
val SOME (thmID,thm) = get_calculation_ thy (the(assoc(calclist,"times"))) t;
neuper@37906
   148
*)
neuper@37906
   149
neuper@38081
   150
"----------- differentiate: me (*+ tacs input*) ---------";
neuper@38081
   151
"----------- differentiate: me (*+ tacs input*) ---------";
neuper@38081
   152
"----------- differentiate: me (*+ tacs input*) ---------";
neuper@37906
   153
val fmz = ["functionTerm (x ^^^ 2 + 3 * x + 4)", 
neuper@37994
   154
	   "differentiateFor x","derivative f_f'"];
neuper@37906
   155
val (dI',pI',mI') =
neuper@37991
   156
  ("Diff",["derivative_of","function"],
neuper@37906
   157
   ["diff","diff_simpl"]);
neuper@37906
   158
val p = e_pos'; val c = []; 
neuper@37906
   159
"--- s1 ---";
neuper@37906
   160
val (p,_,f,nxt,_,pt) = CalcTreeTEST [(fmz, (dI',pI',mI'))];
neuper@37906
   161
val (p,_,f,nxt,_,pt) = me nxt p c pt;
neuper@37906
   162
"--- s2 ---";
neuper@37906
   163
(*val nxt = ("Add_Given",
neuper@37906
   164
Add_Given "functionTerm (d_d x (x ^^^ #2 + #3 * x + #4))");*)
neuper@37906
   165
val (p,_,f,nxt,_,pt) = me nxt p c pt;
neuper@37906
   166
"--- s3 ---";
neuper@37906
   167
(*val nxt = ("Add_Given",Add_Given "differentiateFor x");*)
neuper@37906
   168
val (p,_,f,nxt,_,pt) = me nxt p c pt;
neuper@37906
   169
"--- s4 ---";
neuper@37994
   170
(*val nxt = ("Add_Find",Add_Find "derivative f_f'");*)
neuper@37906
   171
val (p,_,f,nxt,_,pt) = me nxt p c pt;
neuper@37906
   172
"--- s5 ---";
neuper@37906
   173
(*val nxt = ("Specify_Theory",Specify_Theory dI');*)
neuper@37906
   174
val (p,_,f,nxt,_,pt) = me nxt p c pt;
neuper@37906
   175
"--- s6 ---";
neuper@37906
   176
(*val nxt = ("Specify_Problem",Specify_Problem pI');*)
neuper@37906
   177
val (p,_,f,nxt,_,pt) = me nxt p c pt;
neuper@37906
   178
"--- s7 ---";
neuper@37906
   179
(*val nxt = ("Specify_Method",Specify_Method mI');*)
neuper@37906
   180
val (p,_,f,nxt,_,pt) = me nxt p c pt;
neuper@37906
   181
"--- s8 ---";
neuper@37906
   182
(*val nxt = ("Apply_Method",Apply_Method mI');*)
neuper@37906
   183
val (p,_,f,nxt,_,pt) = me nxt p c pt;
neuper@37906
   184
"--- 1 ---";
neuper@37906
   185
(*val nxt = ("Rewrite_Inst",Rewrite_Inst (["(bdv,x)"],("diff_sum","")));*)
neuper@37906
   186
val (p,_,f,nxt,_,pt) = me nxt p c pt;
neuper@37906
   187
"--- 2 ---";
neuper@37906
   188
(*val nxt = ("Rewrite_Inst",Rewrite_Inst (["(bdv,x)"],("diff_sum","")));*)
neuper@37906
   189
val (p,_,f,nxt,_,pt) = me nxt p c pt;
neuper@37906
   190
(*val (p,_,f,nxt,_,pt) = me nxt p c pt;
neuper@37906
   191
val (p,_,f,nxt,_,pt) = me nxt p c pt;*)
neuper@37906
   192
"--- 3 ---";
neuper@37906
   193
(*val nxt = ("Rewrite_Inst",Rewrite_Inst (["(bdv,x)"],("diff_prod_const",...;*)
neuper@37906
   194
val (p,_,f,nxt,_,pt) = me nxt p c pt;
neuper@37906
   195
(*val (p,_,f,nxt,_,pt) = me nxt p c pt;*)
neuper@37906
   196
"--- 4 ---";
neuper@37906
   197
(*val nxt = ("Rewrite_Inst",Rewrite_Inst (["(bdv,x)"],("diff_pow","")));*)
neuper@37906
   198
val (p,_,f,nxt,_,pt) = me nxt p c pt;
neuper@37906
   199
(*val (p,_,f,nxt,_,pt) = me nxt p c pt;*)
neuper@37906
   200
"--- 5 ---";
neuper@37906
   201
(*val nxt = ("Rewrite_Inst",Rewrite_Inst (["(bdv,x)"],("diff_prod_const",...;*)
neuper@37906
   202
val (p,_,f,nxt,_,pt) = me nxt p c pt;
neuper@37906
   203
(*val (p,_,f,nxt,_,pt) = me nxt p c pt;*)
neuper@37906
   204
"--- 6 ---";
neuper@37906
   205
(*val nxt = ("Rewrite_Inst",Rewrite_Inst (["(bdv,x)"],("diff_var","")));*)
neuper@37906
   206
val (p,_,f,nxt,_,pt) = me nxt p c pt; 
neuper@37906
   207
if f2str f =  "2 * x ^^^ (2 - 1) + 3 * 1 + 0" then () 
neuper@38031
   208
else error "diff.sml: diff.behav. in d_d x ^^^ 2 + 3 * x + 4";
neuper@37906
   209
"--- 7 ---";
neuper@37906
   210
(*val nxt = ("Rewrite_Set",Rewrite_Set "make_polynomial");*)
neuper@37906
   211
val (p,_,f,nxt,_,pt) = me nxt p c pt;
neuper@37906
   212
"--- 8 ---";
neuper@42393
   213
(*val nxt = ("Check_Postcond",Check_Postcond ("Diff","differentiate_on_R"));*)
neuper@37906
   214
val (p,_,f,nxt,_,pt) = me nxt p c pt;
neuper@37906
   215
"--- 9 ---";
neuper@37906
   216
(*val nxt = ("End_Proof'",End_Proof');*)
neuper@37906
   217
val (p,_,f,nxt,_,pt) = me nxt p c pt; f2str f;
wneuper@59253
   218
if f2str f = "3 + 2 * x"
wneuper@59253
   219
  then case nxt of ("End_Proof'", End_Proof') => ()
wneuper@59253
   220
  | _ => error "diff.sml: new.behav. in me (*+ tacs input*) 1"
wneuper@59253
   221
else error "diff.sml: new.behav. in me (*+ tacs input*) 2";
neuper@38031
   222
(*if f = EmptyMout then () else error "new behaviour in + tacs input";
neuper@37906
   223
meNEW extracts Form once more*)
neuper@37906
   224
neuper@38081
   225
"----------- 1.5.02 me from script ----------------------";
neuper@38081
   226
"----------- 1.5.02 me from script ----------------------";
neuper@38081
   227
"----------- 1.5.02 me from script ----------------------";
neuper@37906
   228
(*exp_Diff_No-1.xml*)
neuper@37906
   229
val fmz = ["functionTerm (x ^^^ 2 + 3 * x + 4)", 
neuper@37994
   230
	   "differentiateFor x","derivative f_f'"];
neuper@37906
   231
val (dI',pI',mI') =
neuper@37991
   232
  ("Diff",["derivative_of","function"],
neuper@37906
   233
   ["diff","diff_simpl"]);
neuper@37906
   234
(*val p = e_pos'; val c = []; 
neuper@37906
   235
val (mI,m) = ("Init_Proof",Init_Proof (fmz, (dI',pI',mI')));
neuper@37906
   236
val (p,_,f,nxt,_,pt) = me (mI,m) p c EmptyPtree;*)
neuper@37906
   237
val (p,_,f,nxt,_,pt) = CalcTreeTEST [(fmz, (dI',pI',mI'))];
neuper@37906
   238
val (p,_,f,nxt,_,pt) = me nxt p c pt;
neuper@37906
   239
val (p,_,f,nxt,_,pt) = me nxt p c pt;
neuper@37906
   240
val (p,_,f,nxt,_,pt) = me nxt p c pt;
neuper@37906
   241
val (p,_,f,nxt,_,pt) = me nxt p c pt;
neuper@37906
   242
val (p,_,f,nxt,_,pt) = me nxt p c pt;
neuper@37906
   243
val (p,_,f,nxt,_,pt) = me nxt p c pt;
neuper@37906
   244
val (p,_,f,nxt,_,pt) = me nxt p c pt;
neuper@37991
   245
(*nxt = ("Apply_Method",Apply_Method ("Diff","differentiate_on_R*)
neuper@37906
   246
val (p,_,f,nxt,_,pt) = me nxt p c pt;
neuper@37906
   247
neuper@37906
   248
val (p,_,f,nxt,_,pt) = me nxt p c pt;
neuper@37906
   249
val (p,_,f,nxt,_,pt) = me nxt p c pt;
neuper@37906
   250
val (p,_,f,nxt,_,pt) = me nxt p c pt;
neuper@37906
   251
val (p,_,f,nxt,_,pt) = me nxt p c pt;
neuper@37906
   252
val (p,_,f,nxt,_,pt) = me nxt p c pt;
neuper@37906
   253
val (p,_,f,nxt,_,pt) = me nxt p c pt;
neuper@37906
   254
val (p,_,f,nxt,_,pt) = me nxt p c pt;
neuper@37906
   255
val (p,_,f,nxt,_,pt) = me nxt p c pt;
wneuper@59253
   256
case nxt of ("End_Proof'",End_Proof') => ()
wneuper@59253
   257
| _ => error "new behaviour in tests/differentiate, 1.5.02 me from script";
neuper@37906
   258
neuper@38081
   259
"----------- primed id ----------------------------------";
neuper@38081
   260
"----------- primed id ----------------------------------";
neuper@38081
   261
"----------- primed id ----------------------------------";
neuper@37994
   262
val f_ = str2term "f_f::bool";
neuper@37906
   263
val f  = str2term "A = s * (a - s)";
neuper@38081
   264
val v_ = str2term "v_v";
neuper@37906
   265
val v  = str2term "s";
neuper@38081
   266
val screxp0 = str2term "Take ((primed (lhs f_f)) = d_d v_v (rhs f_f))";
neuper@37906
   267
atomty screxp0;
neuper@37906
   268
neuper@38081
   269
val screxp1 = subst_atomic [(f_, f), (v_, v)] screxp0;
neuper@37906
   270
term2str screxp1;
neuper@37906
   271
atomty screxp1;
neuper@37906
   272
neuper@41929
   273
val SOME (f'_,_) = rewrite_set_ (@{theory "Isac"}) false srls_diff screxp1; 
neuper@37906
   274
if term2str f'_= "Take (A' = d_d s (s * (a - s)))" then ()
neuper@38031
   275
else error "diff.sml: diff.behav. in 'primed'";
neuper@37906
   276
atomty f'_;
neuper@37906
   277
neuper@37994
   278
val str = "Script DiffEqScr (f_f::bool) (v_v::real) =                         \
neuper@38081
   279
\ (let f_f' = Take ((primed (lhs f_f)) = d_d v_v (rhs f_f))           \
neuper@37906
   280
\ in (((Try (Repeat (Rewrite frac_conv   False))) @@              \
neuper@37906
   281
 \ (Try (Repeat (Rewrite root_conv   False))) @@                  \
neuper@37906
   282
 \ (Try (Repeat (Rewrite realpow_pow False))) @@                  \
neuper@37906
   283
 \ (Repeat                                                        \
neuper@37991
   284
 \   ((Repeat (Rewrite_Inst [(bdv,v_v)] diff_sum        False)) Or \
neuper@37991
   285
 \    (Repeat (Rewrite_Inst [(bdv,v_v)] diff_prod_const False)) Or \
neuper@37991
   286
 \    (Repeat (Rewrite_Inst [(bdv,v_v)] diff_prod       False)) Or \
neuper@37991
   287
 \    (Repeat (Rewrite_Inst [(bdv,v_v)] diff_quot       True )) Or \
neuper@37991
   288
 \    (Repeat (Rewrite_Inst [(bdv,v_v)] diff_sin        False)) Or \
neuper@37991
   289
 \    (Repeat (Rewrite_Inst [(bdv,v_v)] diff_sin_chain  False)) Or \
neuper@37991
   290
 \    (Repeat (Rewrite_Inst [(bdv,v_v)] diff_cos        False)) Or \
neuper@37991
   291
 \    (Repeat (Rewrite_Inst [(bdv,v_v)] diff_cos_chain  False)) Or \
neuper@37991
   292
 \    (Repeat (Rewrite_Inst [(bdv,v_v)] diff_pow        False)) Or \
neuper@37991
   293
 \    (Repeat (Rewrite_Inst [(bdv,v_v)] diff_pow_chain  False)) Or \
neuper@37991
   294
 \    (Repeat (Rewrite_Inst [(bdv,v_v)] diff_ln         False)) Or \
neuper@37991
   295
 \    (Repeat (Rewrite_Inst [(bdv,v_v)] diff_ln_chain   False)) Or \
neuper@37991
   296
 \    (Repeat (Rewrite_Inst [(bdv,v_v)] diff_exp        False)) Or \
neuper@37991
   297
 \    (Repeat (Rewrite_Inst [(bdv,v_v)] diff_exp_chain  False)) Or \
neuper@37991
   298
 \    (Repeat (Rewrite_Inst [(bdv,v_v)] diff_sqrt       False)) Or \
neuper@37991
   299
 \    (Repeat (Rewrite_Inst [(bdv,v_v)] diff_sqrt_chain False)) Or \
neuper@37991
   300
 \    (Repeat (Rewrite_Inst [(bdv,v_v)] diff_const      False)) Or \
neuper@37991
   301
 \    (Repeat (Rewrite_Inst [(bdv,v_v)] diff_var        False)) Or \
neuper@37906
   302
 \    (Repeat (Rewrite_Set             make_polynomial False)))) @@ \
neuper@37906
   303
 \ (Try (Repeat (Rewrite sym_frac_conv False))) @@              \
neuper@37994
   304
 \ (Try (Repeat (Rewrite sym_root_conv False))))) f_f')"
neuper@37906
   305
;
wneuper@59188
   306
val sc = ((inst_abs thy) o Thm.term_of o the o (parse thy)) str;
neuper@37906
   307
neuper@37906
   308
neuper@38081
   309
"----------- diff_conv, sym_diff_conv -------------------";
neuper@38081
   310
"----------- diff_conv, sym_diff_conv -------------------";
neuper@38081
   311
"----------- diff_conv, sym_diff_conv -------------------";
neuper@37906
   312
val subs = [(str2term "bdv", str2term "x")];
neuper@37906
   313
val rls = diff_conv;
neuper@37906
   314
neuper@37906
   315
val t = str2term "2/x^^^2"; 
neuper@37926
   316
val SOME (t,_) = rewrite_set_inst_ thy false subs rls t; term2str t;
neuper@38031
   317
if term2str t = "2 * x ^^^ -2" then () else error "diff.sml 1/x";
neuper@37906
   318
neuper@37906
   319
val t = str2term "sqrt (x^^^3)";
neuper@37926
   320
val SOME (t,_) = rewrite_set_inst_ thy false subs rls t; term2str t;
neuper@38031
   321
if term2str t = "x ^^^ (3 / 2)" then () else error "diff.sml x^1/2";
neuper@37906
   322
neuper@37906
   323
val t = str2term "2 / sqrt x^^^3";
neuper@37926
   324
val SOME (t,_) = rewrite_set_inst_ thy false subs rls t; term2str t;
neuper@38031
   325
if term2str t = "2 * x ^^^ (-3 / 2)" then () else error"diff.sml x^-1/2";
neuper@37906
   326
(* trace_rewrite := true;
neuper@37906
   327
   trace_rewrite := false;
neuper@37906
   328
   *)
neuper@37906
   329
val rls = diff_sym_conv; 
neuper@37906
   330
neuper@37906
   331
val t = str2term "2 * x ^^^ -2";
neuper@37926
   332
val SOME (t,_) = rewrite_set_inst_ thy false subs rls t; term2str t;
neuper@38031
   333
if term2str t = "2 / x ^^^ 2" then () else error "diff.sml sym 1/x";
neuper@37906
   334
neuper@37906
   335
neuper@37906
   336
val t = str2term "x ^^^ (3 / 2)";
neuper@37926
   337
val SOME (t,_) = rewrite_set_inst_ thy false subs rls t; term2str t;
neuper@38031
   338
if term2str t = "sqrt (x ^^^ 3)" then () else error"diff.sml sym x^1/x";
neuper@37906
   339
neuper@37906
   340
val t = str2term "2 * x ^^^ (-3 / 2)";
neuper@37926
   341
val SOME (t,_) = rewrite_set_inst_ thy false subs rls t; term2str t;
neuper@38031
   342
if term2str t ="2 / sqrt (x ^^^ 3)"then()else error"diff.sml sym x^-1/x";
neuper@37906
   343
neuper@37906
   344
neuper@37906
   345
(* trace_rewrite:=true;
neuper@37906
   346
   *)
neuper@37906
   347
(* trace_rewrite:=false;
neuper@37906
   348
   *)
neuper@37906
   349
(*@@@@*)
neuper@37906
   350
wneuper@59248
   351
"----------- autoCalculate differentiate_on_R 2/x^2 -----";
wneuper@59248
   352
"----------- autoCalculate differentiate_on_R 2/x^2 -----";
wneuper@59248
   353
"----------- autoCalculate differentiate_on_R 2/x^2 -----";
s1210629013@55445
   354
reset_states ();
neuper@37906
   355
CalcTree
neuper@37906
   356
[(["functionTerm (x^2 + x+ 1/x + 2/x^2)",
neuper@37906
   357
   (*"functionTerm ((x^3)^5)",*)
neuper@37994
   358
   "differentiateFor x", "derivative f_f'"], 
neuper@37991
   359
  ("Isac", ["derivative_of","function"],
neuper@37906
   360
  ["diff","differentiate_on_R"]))];
neuper@37906
   361
Iterator 1;
neuper@37906
   362
moveActiveRoot 1;
wneuper@59248
   363
autoCalculate 1 CompleteCalc;
neuper@37906
   364
val ((pt,p),_) = get_calc 1; show_pt pt;
neuper@37906
   365
if p = ([], Res) andalso term2str (get_obj g_res pt (fst p)) = 
neuper@37906
   366
			  "1 + 2 * x + -1 / x ^^^ 2 + -4 / x ^^^ 3" then ()
neuper@38031
   367
else error "diff.sml: differentiate_on_R 2/x^2 changed";
neuper@37906
   368
neuper@38081
   369
"---------------------------------------------------------";
s1210629013@55445
   370
reset_states ();
neuper@37906
   371
CalcTree
neuper@37906
   372
[(["functionTerm (x^3 * x^5)",
neuper@37994
   373
   "differentiateFor x", "derivative f_f'"], 
neuper@37991
   374
  ("Isac", ["derivative_of","function"],
neuper@37906
   375
  ["diff","differentiate_on_R"]))];
neuper@37906
   376
Iterator 1;
neuper@37906
   377
moveActiveRoot 1;
neuper@37906
   378
(* trace_rewrite := true;
neuper@37906
   379
   trace_script := true;
neuper@37906
   380
   *)
wneuper@59248
   381
autoCalculate 1 CompleteCalc;
neuper@37906
   382
(* trace_rewrite := false;
neuper@37906
   383
   trace_script := false;
neuper@37906
   384
   *)
neuper@37906
   385
val ((pt,p),_) = get_calc 1; show_pt pt;
neuper@37906
   386
neuper@37906
   387
if p = ([], Res) andalso term2str (get_obj g_res pt (fst p)) = 
neuper@37906
   388
			 "8 * x ^^^ 7" then () 
neuper@38031
   389
else error "diff.sml: differentiate_on_R (x^3 * x^5) changed";
neuper@37906
   390
wneuper@59248
   391
"----------- autoCalculate diff after_simplification ----";
wneuper@59248
   392
"----------- autoCalculate diff after_simplification ----";
wneuper@59248
   393
"----------- autoCalculate diff after_simplification ----";
s1210629013@55445
   394
reset_states ();
neuper@37906
   395
CalcTree
neuper@37906
   396
[(["functionTerm (x^3 * x^5)",
neuper@37994
   397
   "differentiateFor x", "derivative f_f'"], 
neuper@37991
   398
  ("Isac", ["derivative_of","function"],
neuper@37906
   399
  ["diff","after_simplification"]))];
neuper@37906
   400
Iterator 1;
neuper@37906
   401
moveActiveRoot 1;
neuper@37906
   402
(* trace_rewrite := true;
neuper@37906
   403
   trace_script := true;
neuper@37906
   404
   *)
wneuper@59248
   405
autoCalculate 1 CompleteCalc;
neuper@37906
   406
(* trace_rewrite := false;
neuper@37906
   407
   trace_script := false;
neuper@37906
   408
   *)
neuper@37906
   409
val ((pt,p),_) = get_calc 1; show_pt pt;
neuper@37906
   410
if p = ([], Res) andalso term2str (get_obj g_res pt (fst p)) =  "8 * x ^^^ 7"
neuper@38031
   411
then () else error "biegelinie.sml: 1st biegelin.7.27 changed";
neuper@37906
   412
neuper@38081
   413
"--------------------------------------------------------";
s1210629013@55445
   414
reset_states ();
neuper@37906
   415
CalcTree
neuper@37906
   416
[(["functionTerm ((x^3)^5)",
neuper@37994
   417
   "differentiateFor x", "derivative f_f'"], 
neuper@37991
   418
  ("Isac", ["derivative_of","function"],
neuper@37906
   419
  ["diff","after_simplification"]))];
neuper@37906
   420
Iterator 1;
neuper@37906
   421
moveActiveRoot 1;
wneuper@59248
   422
autoCalculate 1 CompleteCalc;
neuper@37906
   423
val ((pt,p),_) = get_calc 1; show_pt pt;
neuper@37906
   424
if p = ([], Res) andalso term2str (get_obj g_res pt (fst p)) = "15 * x ^^^ 14"
neuper@38031
   425
then () else error "biegelinie.sml: 1st biegelin.7.27 changed";
neuper@37906
   426
wneuper@59248
   427
"----------- autoCalculate differentiate_equality -------";
wneuper@59248
   428
"----------- autoCalculate differentiate_equality -------";
wneuper@59248
   429
"----------- autoCalculate differentiate_equality -------";
s1210629013@55445
   430
reset_states ();
neuper@37906
   431
CalcTree
neuper@42393
   432
[(["functionEq (A = s * (a - (s::real)))", "differentiateFor s", "derivativeEq f_f'"], 
neuper@37991
   433
  ("Isac", ["named","derivative_of","function"],
neuper@37906
   434
  ["diff","differentiate_equality"]))];
neuper@37906
   435
Iterator 1;
neuper@37906
   436
moveActiveRoot 1;
wneuper@59248
   437
autoCalculate 1 CompleteCalc;
neuper@37906
   438
val ((pt,p),_) = get_calc 1; show_pt pt;
neuper@37906
   439
neuper@38081
   440
"----------- tests for examples -------------------------";
neuper@38081
   441
"----------- tests for examples -------------------------";
neuper@38081
   442
"----------- tests for examples -------------------------";
neuper@37906
   443
"----- parse errors";
neuper@38081
   444
(*str2term "F  =  sqrt( y^^^2 - O) * (z + O^^^2)";
neuper@38081
   445
str2term "O";
neuper@38081
   446
str2term "OO"; ---errors*)
neuper@38081
   447
str2term "OOO";
neuper@37906
   448
neuper@37906
   449
"----- thm 'diff_prod_const'";
neuper@37906
   450
val subs = [(str2term "bdv", str2term "l")];
neuper@38081
   451
val f = str2term "G' = d_d l (l * sqrt (7 * s ^^^ 2 - l ^^^ 2))";
neuper@37906
   452
neuper@38081
   453
"------------inform for x^2+x+1 -------------------------";
neuper@38081
   454
"------------inform for x^2+x+1 -------------------------";
neuper@38081
   455
"------------inform for x^2+x+1 -------------------------";
s1210629013@55445
   456
reset_states ();
neuper@37906
   457
CalcTree
neuper@37906
   458
[(["functionTerm (x^2 + x + 1)",
neuper@37994
   459
   "differentiateFor x", "derivative f_f'"], 
neuper@37991
   460
  ("Isac", ["derivative_of","function"],
neuper@37906
   461
  ["diff","differentiate_on_R"]))];
neuper@37906
   462
Iterator 1;
neuper@37906
   463
moveActiveRoot 1;
wneuper@59248
   464
autoCalculate 1 CompleteCalcHead;
wneuper@59248
   465
autoCalculate 1 (Step 1);
wneuper@59248
   466
autoCalculate 1 (Step 1);
wneuper@59248
   467
autoCalculate 1 (Step 1);
neuper@37906
   468
val ((pt,p),_) = get_calc 1; show_pt pt;
wneuper@59123
   469
appendFormula 1 "2*x + d_d x x + d_d x 1" (*|> Future.join*);
neuper@37906
   470
val ((pt,p),_) = get_calc 1; show_pt pt;
neuper@37906
   471
if existpt' ([3], Res) pt then ()
neuper@38031
   472
else error  "diff.sml: inform d_d x (x^2 + x + 1) doesnt work";
neuper@38081
   473