test/Tools/isac/Knowledge/diff.sml
author Walther Neuper <wneuper@ist.tugraz.at>
Mon, 18 May 2015 14:08:09 +0200
changeset 59123 5127be395ea1
parent 55446 42c45d1241d7
child 59188 c477d0f79ab9
permissions -rw-r--r--
outcomment parallelism for simplifying integration of libisabelle

parallelism introduced by http://www.ist.tugraz.at/isac/Credits#Mathias_Lehnfeld.
libisabelle is a wrapper around Isabelle/PIDE https://github.com/larsrh/libisabelle.
libisabelle shall replace "isabelle tty", which was dropped in Isabelle2014.
thus the present Isabelle/Isac does not run in Isabelle2014 anymore;
but it still runs in Isabelle2013-2.
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 -------------------";
s1210629013@55446
    19
"----------- autoCalculate' differentiate_on_R 2/x^2 -----";
s1210629013@55446
    20
"----------- autoCalculate' diff after_simplification ----";
s1210629013@55446
    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;
neuper@37906
   218
if nxt = ("End_Proof'",End_Proof') andalso f2str f = "3 + 2 * x" then ()
neuper@38031
   219
else error "diff.sml: new.behav. in me (*+ tacs input*)";
neuper@38031
   220
(*if f = EmptyMout then () else error "new behaviour in + tacs input";
neuper@37906
   221
meNEW extracts Form once more*)
neuper@37906
   222
neuper@38081
   223
"----------- 1.5.02 me from script ----------------------";
neuper@38081
   224
"----------- 1.5.02 me from script ----------------------";
neuper@38081
   225
"----------- 1.5.02 me from script ----------------------";
neuper@37906
   226
(*exp_Diff_No-1.xml*)
neuper@37906
   227
val fmz = ["functionTerm (x ^^^ 2 + 3 * x + 4)", 
neuper@37994
   228
	   "differentiateFor x","derivative f_f'"];
neuper@37906
   229
val (dI',pI',mI') =
neuper@37991
   230
  ("Diff",["derivative_of","function"],
neuper@37906
   231
   ["diff","diff_simpl"]);
neuper@37906
   232
(*val p = e_pos'; val c = []; 
neuper@37906
   233
val (mI,m) = ("Init_Proof",Init_Proof (fmz, (dI',pI',mI')));
neuper@37906
   234
val (p,_,f,nxt,_,pt) = me (mI,m) p c EmptyPtree;*)
neuper@37906
   235
val (p,_,f,nxt,_,pt) = CalcTreeTEST [(fmz, (dI',pI',mI'))];
neuper@37906
   236
val (p,_,f,nxt,_,pt) = me nxt p c pt;
neuper@37906
   237
val (p,_,f,nxt,_,pt) = me nxt p c pt;
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@37991
   243
(*nxt = ("Apply_Method",Apply_Method ("Diff","differentiate_on_R*)
neuper@37906
   244
val (p,_,f,nxt,_,pt) = me nxt p c pt;
neuper@37906
   245
neuper@37906
   246
val (p,_,f,nxt,_,pt) = me nxt p c pt;
neuper@37906
   247
val (p,_,f,nxt,_,pt) = me nxt p c pt;
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
if nxt = ("End_Proof'",End_Proof') then ()
neuper@38031
   255
else error "new behaviour in tests/differentiate, 1.5.02 me from script";
neuper@37906
   256
neuper@38081
   257
"----------- primed id ----------------------------------";
neuper@38081
   258
"----------- primed id ----------------------------------";
neuper@38081
   259
"----------- primed id ----------------------------------";
neuper@37994
   260
val f_ = str2term "f_f::bool";
neuper@37906
   261
val f  = str2term "A = s * (a - s)";
neuper@38081
   262
val v_ = str2term "v_v";
neuper@37906
   263
val v  = str2term "s";
neuper@38081
   264
val screxp0 = str2term "Take ((primed (lhs f_f)) = d_d v_v (rhs f_f))";
neuper@37906
   265
atomty screxp0;
neuper@37906
   266
neuper@38081
   267
val screxp1 = subst_atomic [(f_, f), (v_, v)] screxp0;
neuper@37906
   268
term2str screxp1;
neuper@37906
   269
atomty screxp1;
neuper@37906
   270
neuper@41929
   271
val SOME (f'_,_) = rewrite_set_ (@{theory "Isac"}) false srls_diff screxp1; 
neuper@37906
   272
if term2str f'_= "Take (A' = d_d s (s * (a - s)))" then ()
neuper@38031
   273
else error "diff.sml: diff.behav. in 'primed'";
neuper@37906
   274
atomty f'_;
neuper@37906
   275
neuper@37994
   276
val str = "Script DiffEqScr (f_f::bool) (v_v::real) =                         \
neuper@38081
   277
\ (let f_f' = Take ((primed (lhs f_f)) = d_d v_v (rhs f_f))           \
neuper@37906
   278
\ in (((Try (Repeat (Rewrite frac_conv   False))) @@              \
neuper@37906
   279
 \ (Try (Repeat (Rewrite root_conv   False))) @@                  \
neuper@37906
   280
 \ (Try (Repeat (Rewrite realpow_pow False))) @@                  \
neuper@37906
   281
 \ (Repeat                                                        \
neuper@37991
   282
 \   ((Repeat (Rewrite_Inst [(bdv,v_v)] diff_sum        False)) Or \
neuper@37991
   283
 \    (Repeat (Rewrite_Inst [(bdv,v_v)] diff_prod_const False)) Or \
neuper@37991
   284
 \    (Repeat (Rewrite_Inst [(bdv,v_v)] diff_prod       False)) Or \
neuper@37991
   285
 \    (Repeat (Rewrite_Inst [(bdv,v_v)] diff_quot       True )) Or \
neuper@37991
   286
 \    (Repeat (Rewrite_Inst [(bdv,v_v)] diff_sin        False)) Or \
neuper@37991
   287
 \    (Repeat (Rewrite_Inst [(bdv,v_v)] diff_sin_chain  False)) Or \
neuper@37991
   288
 \    (Repeat (Rewrite_Inst [(bdv,v_v)] diff_cos        False)) Or \
neuper@37991
   289
 \    (Repeat (Rewrite_Inst [(bdv,v_v)] diff_cos_chain  False)) Or \
neuper@37991
   290
 \    (Repeat (Rewrite_Inst [(bdv,v_v)] diff_pow        False)) Or \
neuper@37991
   291
 \    (Repeat (Rewrite_Inst [(bdv,v_v)] diff_pow_chain  False)) Or \
neuper@37991
   292
 \    (Repeat (Rewrite_Inst [(bdv,v_v)] diff_ln         False)) Or \
neuper@37991
   293
 \    (Repeat (Rewrite_Inst [(bdv,v_v)] diff_ln_chain   False)) Or \
neuper@37991
   294
 \    (Repeat (Rewrite_Inst [(bdv,v_v)] diff_exp        False)) Or \
neuper@37991
   295
 \    (Repeat (Rewrite_Inst [(bdv,v_v)] diff_exp_chain  False)) Or \
neuper@37991
   296
 \    (Repeat (Rewrite_Inst [(bdv,v_v)] diff_sqrt       False)) Or \
neuper@37991
   297
 \    (Repeat (Rewrite_Inst [(bdv,v_v)] diff_sqrt_chain False)) Or \
neuper@37991
   298
 \    (Repeat (Rewrite_Inst [(bdv,v_v)] diff_const      False)) Or \
neuper@37991
   299
 \    (Repeat (Rewrite_Inst [(bdv,v_v)] diff_var        False)) Or \
neuper@37906
   300
 \    (Repeat (Rewrite_Set             make_polynomial False)))) @@ \
neuper@37906
   301
 \ (Try (Repeat (Rewrite sym_frac_conv False))) @@              \
neuper@37994
   302
 \ (Try (Repeat (Rewrite sym_root_conv False))))) f_f')"
neuper@37906
   303
;
neuper@37906
   304
val sc = ((inst_abs thy) o term_of o the o (parse thy)) str;
neuper@37906
   305
neuper@37906
   306
neuper@38081
   307
"----------- diff_conv, sym_diff_conv -------------------";
neuper@38081
   308
"----------- diff_conv, sym_diff_conv -------------------";
neuper@38081
   309
"----------- diff_conv, sym_diff_conv -------------------";
neuper@37906
   310
val subs = [(str2term "bdv", str2term "x")];
neuper@37906
   311
val rls = diff_conv;
neuper@37906
   312
neuper@37906
   313
val t = str2term "2/x^^^2"; 
neuper@37926
   314
val SOME (t,_) = rewrite_set_inst_ thy false subs rls t; term2str t;
neuper@38031
   315
if term2str t = "2 * x ^^^ -2" then () else error "diff.sml 1/x";
neuper@37906
   316
neuper@37906
   317
val t = str2term "sqrt (x^^^3)";
neuper@37926
   318
val SOME (t,_) = rewrite_set_inst_ thy false subs rls t; term2str t;
neuper@38031
   319
if term2str t = "x ^^^ (3 / 2)" then () else error "diff.sml x^1/2";
neuper@37906
   320
neuper@37906
   321
val t = str2term "2 / sqrt x^^^3";
neuper@37926
   322
val SOME (t,_) = rewrite_set_inst_ thy false subs rls t; term2str t;
neuper@38031
   323
if term2str t = "2 * x ^^^ (-3 / 2)" then () else error"diff.sml x^-1/2";
neuper@37906
   324
(* trace_rewrite := true;
neuper@37906
   325
   trace_rewrite := false;
neuper@37906
   326
   *)
neuper@37906
   327
val rls = diff_sym_conv; 
neuper@37906
   328
neuper@37906
   329
val t = str2term "2 * x ^^^ -2";
neuper@37926
   330
val SOME (t,_) = rewrite_set_inst_ thy false subs rls t; term2str t;
neuper@38031
   331
if term2str t = "2 / x ^^^ 2" then () else error "diff.sml sym 1/x";
neuper@37906
   332
neuper@37906
   333
neuper@37906
   334
val t = str2term "x ^^^ (3 / 2)";
neuper@37926
   335
val SOME (t,_) = rewrite_set_inst_ thy false subs rls t; term2str t;
neuper@38031
   336
if term2str t = "sqrt (x ^^^ 3)" then () else error"diff.sml sym x^1/x";
neuper@37906
   337
neuper@37906
   338
val t = str2term "2 * x ^^^ (-3 / 2)";
neuper@37926
   339
val SOME (t,_) = rewrite_set_inst_ thy false subs rls t; term2str t;
neuper@38031
   340
if term2str t ="2 / sqrt (x ^^^ 3)"then()else error"diff.sml sym x^-1/x";
neuper@37906
   341
neuper@37906
   342
neuper@37906
   343
(* trace_rewrite:=true;
neuper@37906
   344
   *)
neuper@37906
   345
(* trace_rewrite:=false;
neuper@37906
   346
   *)
neuper@37906
   347
(*@@@@*)
neuper@37906
   348
s1210629013@55446
   349
"----------- autoCalculate' differentiate_on_R 2/x^2 -----";
s1210629013@55446
   350
"----------- autoCalculate' differentiate_on_R 2/x^2 -----";
s1210629013@55446
   351
"----------- autoCalculate' differentiate_on_R 2/x^2 -----";
s1210629013@55445
   352
reset_states ();
neuper@37906
   353
CalcTree
neuper@37906
   354
[(["functionTerm (x^2 + x+ 1/x + 2/x^2)",
neuper@37906
   355
   (*"functionTerm ((x^3)^5)",*)
neuper@37994
   356
   "differentiateFor x", "derivative f_f'"], 
neuper@37991
   357
  ("Isac", ["derivative_of","function"],
neuper@37906
   358
  ["diff","differentiate_on_R"]))];
neuper@37906
   359
Iterator 1;
neuper@37906
   360
moveActiveRoot 1;
s1210629013@55446
   361
autoCalculate' 1 CompleteCalc;
neuper@37906
   362
val ((pt,p),_) = get_calc 1; show_pt pt;
neuper@37906
   363
if p = ([], Res) andalso term2str (get_obj g_res pt (fst p)) = 
neuper@37906
   364
			  "1 + 2 * x + -1 / x ^^^ 2 + -4 / x ^^^ 3" then ()
neuper@38031
   365
else error "diff.sml: differentiate_on_R 2/x^2 changed";
neuper@37906
   366
neuper@38081
   367
"---------------------------------------------------------";
s1210629013@55445
   368
reset_states ();
neuper@37906
   369
CalcTree
neuper@37906
   370
[(["functionTerm (x^3 * x^5)",
neuper@37994
   371
   "differentiateFor x", "derivative f_f'"], 
neuper@37991
   372
  ("Isac", ["derivative_of","function"],
neuper@37906
   373
  ["diff","differentiate_on_R"]))];
neuper@37906
   374
Iterator 1;
neuper@37906
   375
moveActiveRoot 1;
neuper@37906
   376
(* trace_rewrite := true;
neuper@37906
   377
   trace_script := true;
neuper@37906
   378
   *)
s1210629013@55446
   379
autoCalculate' 1 CompleteCalc;
neuper@37906
   380
(* trace_rewrite := false;
neuper@37906
   381
   trace_script := false;
neuper@37906
   382
   *)
neuper@37906
   383
val ((pt,p),_) = get_calc 1; show_pt pt;
neuper@37906
   384
neuper@37906
   385
if p = ([], Res) andalso term2str (get_obj g_res pt (fst p)) = 
neuper@37906
   386
			 "8 * x ^^^ 7" then () 
neuper@38031
   387
else error "diff.sml: differentiate_on_R (x^3 * x^5) changed";
neuper@37906
   388
s1210629013@55446
   389
"----------- autoCalculate' diff after_simplification ----";
s1210629013@55446
   390
"----------- autoCalculate' diff after_simplification ----";
s1210629013@55446
   391
"----------- autoCalculate' diff after_simplification ----";
s1210629013@55445
   392
reset_states ();
neuper@37906
   393
CalcTree
neuper@37906
   394
[(["functionTerm (x^3 * x^5)",
neuper@37994
   395
   "differentiateFor x", "derivative f_f'"], 
neuper@37991
   396
  ("Isac", ["derivative_of","function"],
neuper@37906
   397
  ["diff","after_simplification"]))];
neuper@37906
   398
Iterator 1;
neuper@37906
   399
moveActiveRoot 1;
neuper@37906
   400
(* trace_rewrite := true;
neuper@37906
   401
   trace_script := true;
neuper@37906
   402
   *)
s1210629013@55446
   403
autoCalculate' 1 CompleteCalc;
neuper@37906
   404
(* trace_rewrite := false;
neuper@37906
   405
   trace_script := false;
neuper@37906
   406
   *)
neuper@37906
   407
val ((pt,p),_) = get_calc 1; show_pt pt;
neuper@37906
   408
if p = ([], Res) andalso term2str (get_obj g_res pt (fst p)) =  "8 * x ^^^ 7"
neuper@38031
   409
then () else error "biegelinie.sml: 1st biegelin.7.27 changed";
neuper@37906
   410
neuper@38081
   411
"--------------------------------------------------------";
s1210629013@55445
   412
reset_states ();
neuper@37906
   413
CalcTree
neuper@37906
   414
[(["functionTerm ((x^3)^5)",
neuper@37994
   415
   "differentiateFor x", "derivative f_f'"], 
neuper@37991
   416
  ("Isac", ["derivative_of","function"],
neuper@37906
   417
  ["diff","after_simplification"]))];
neuper@37906
   418
Iterator 1;
neuper@37906
   419
moveActiveRoot 1;
s1210629013@55446
   420
autoCalculate' 1 CompleteCalc;
neuper@37906
   421
val ((pt,p),_) = get_calc 1; show_pt pt;
neuper@37906
   422
if p = ([], Res) andalso term2str (get_obj g_res pt (fst p)) = "15 * x ^^^ 14"
neuper@38031
   423
then () else error "biegelinie.sml: 1st biegelin.7.27 changed";
neuper@37906
   424
s1210629013@55446
   425
"----------- autoCalculate' differentiate_equality -------";
s1210629013@55446
   426
"----------- autoCalculate' differentiate_equality -------";
s1210629013@55446
   427
"----------- autoCalculate' differentiate_equality -------";
s1210629013@55445
   428
reset_states ();
neuper@37906
   429
CalcTree
neuper@42393
   430
[(["functionEq (A = s * (a - (s::real)))", "differentiateFor s", "derivativeEq f_f'"], 
neuper@37991
   431
  ("Isac", ["named","derivative_of","function"],
neuper@37906
   432
  ["diff","differentiate_equality"]))];
neuper@37906
   433
Iterator 1;
neuper@37906
   434
moveActiveRoot 1;
s1210629013@55446
   435
autoCalculate' 1 CompleteCalc;
neuper@37906
   436
val ((pt,p),_) = get_calc 1; show_pt pt;
neuper@37906
   437
neuper@38081
   438
"----------- tests for examples -------------------------";
neuper@38081
   439
"----------- tests for examples -------------------------";
neuper@38081
   440
"----------- tests for examples -------------------------";
neuper@37906
   441
"----- parse errors";
neuper@38081
   442
(*str2term "F  =  sqrt( y^^^2 - O) * (z + O^^^2)";
neuper@38081
   443
str2term "O";
neuper@38081
   444
str2term "OO"; ---errors*)
neuper@38081
   445
str2term "OOO";
neuper@37906
   446
neuper@37906
   447
"----- thm 'diff_prod_const'";
neuper@37906
   448
val subs = [(str2term "bdv", str2term "l")];
neuper@38081
   449
val f = str2term "G' = d_d l (l * sqrt (7 * s ^^^ 2 - l ^^^ 2))";
neuper@37906
   450
neuper@38081
   451
"------------inform for x^2+x+1 -------------------------";
neuper@38081
   452
"------------inform for x^2+x+1 -------------------------";
neuper@38081
   453
"------------inform for x^2+x+1 -------------------------";
s1210629013@55445
   454
reset_states ();
neuper@37906
   455
CalcTree
neuper@37906
   456
[(["functionTerm (x^2 + x + 1)",
neuper@37994
   457
   "differentiateFor x", "derivative f_f'"], 
neuper@37991
   458
  ("Isac", ["derivative_of","function"],
neuper@37906
   459
  ["diff","differentiate_on_R"]))];
neuper@37906
   460
Iterator 1;
neuper@37906
   461
moveActiveRoot 1;
s1210629013@55446
   462
autoCalculate' 1 CompleteCalcHead;
s1210629013@55446
   463
autoCalculate' 1 (Step 1);
s1210629013@55446
   464
autoCalculate' 1 (Step 1);
s1210629013@55446
   465
autoCalculate' 1 (Step 1);
neuper@37906
   466
val ((pt,p),_) = get_calc 1; show_pt pt;
wneuper@59123
   467
appendFormula 1 "2*x + d_d x x + d_d x 1" (*|> Future.join*);
neuper@37906
   468
val ((pt,p),_) = get_calc 1; show_pt pt;
neuper@37906
   469
if existpt' ([3], Res) pt then ()
neuper@38031
   470
else error  "diff.sml: inform d_d x (x^2 + x + 1) doesnt work";
neuper@38081
   471