test/Tools/isac/Knowledge/diff.sml
author Walther Neuper <neuper@ist.tugraz.at>
Wed, 14 Mar 2012 17:12:43 +0100
changeset 42393 a393bb9f5e9f
parent 41930 6aa90baf7780
child 42451 bc03b5d60547
permissions -rw-r--r--
uncomment test/../rootrateq.sml (Isabelle 2002 --> 2011)

Could not recover several complicated root-equations;
We drop root-equations completely now, wait for work on equation-solver.
test/../polyeq.sml work, this seems sufficient presently.
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 -------------------";
neuper@38081
    19
"----------- autoCalculate differentiate_on_R 2/x^2 -----";
neuper@38081
    20
"----------- autoCalculate diff after_simplification ----";
neuper@38081
    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@37906
    48
(*erls should not be in ruleset'! Here only for tests*)
neuper@37906
    49
ruleset' := 
neuper@37906
    50
overwritelthy thy
neuper@37906
    51
    (!ruleset',
neuper@37906
    52
     [("erls",
neuper@37906
    53
       Rls {id = "erls",preconds = [], rew_ord = ("termlessI",termlessI), 
neuper@37906
    54
	    erls = e_rls, srls = Erls, calc = [], (*asm_thm = [],*)
neuper@37969
    55
	    rules = [Thm ("refl",num_str @{thm refl}),
neuper@38081
    56
		     Thm ("real_le_refl",num_str @{thm real_le_refl}),
neuper@37969
    57
		     Thm ("radd_left_cancel_le",num_str @{thm radd_left_cancel_le}),
neuper@37969
    58
		     Thm ("not_true",num_str @{thm not_true}),
neuper@37969
    59
		     Thm ("not_false",num_str @{thm not_false}),
neuper@37969
    60
		     Thm ("and_true",num_str @{thm and_true}),
neuper@37969
    61
		     Thm ("and_false",num_str @{thm and_false}),
neuper@37969
    62
		     Thm ("or_true",num_str @{thm or_true}),
neuper@37969
    63
		     Thm ("or_false",num_str @{thm or_false}),
neuper@38081
    64
		     Thm ("and_commute",num_str @{thm and_commute}),
neuper@38081
    65
		     Thm ("or_commute",num_str @{thm or_commute}),
neuper@37906
    66
		     
neuper@37906
    67
		     Calc ("Atools.is'_const",eval_const "#is_const_"),
neuper@37906
    68
		     Calc ("Atools.occurs'_in", eval_occurs_in ""),
neuper@37906
    69
		     Calc ("Tools.matches",eval_matches ""),
neuper@37906
    70
		     
neuper@38014
    71
		     Calc ("Groups.plus_class.plus",eval_binop "#add_"),
neuper@38034
    72
		     Calc ("Groups.times_class.times",eval_binop "#mult_"),
neuper@37906
    73
		     Calc ("Atools.pow" ,eval_binop "#power_"),
neuper@37906
    74
		     
neuper@38045
    75
		     Calc ("Orderings.ord_class.less",eval_equ "#less_"),
neuper@38045
    76
		     Calc ("Orderings.ord_class.less_eq",eval_equ "#less_equal_"),
neuper@37906
    77
		     
neuper@37906
    78
		     Calc ("Atools.ident",eval_ident "#ident_")],
neuper@37906
    79
	    scr = Script ((term_of o the o (parse thy)) 
neuper@37906
    80
			      "empty_script")
neuper@37906
    81
	    }:rls
neuper@37906
    82
	      )]);
neuper@37906
    83
    
neuper@38081
    84
"----------- for correction of diff_const ---------------";
neuper@38081
    85
"----------- for correction of diff_const ---------------";
neuper@38081
    86
"----------- for correction of diff_const ---------------";
neuper@37906
    87
(*re-evaluate this file, otherwise > *** ME_Isa: 'erls' not known*)
neuper@37991
    88
val thy' = "Diff";
neuper@37906
    89
val ct = "Not (x =!= a)";
neuper@37906
    90
rewrite_set thy' false "erls" ct;
neuper@37906
    91
val ct = "2 is_const";
neuper@37906
    92
rewrite_set thy' false "erls" ct;
neuper@37906
    93
neuper@37906
    94
val thm = ("diff_const","");
neuper@37906
    95
val ct = "d_d x x";
neuper@37926
    96
val NONE =
neuper@37906
    97
    (rewrite_inst thy' "tless_true" "erls" false [("bdv","x")] thm ct);
neuper@37906
    98
val ct = "d_d x 2";
neuper@37926
    99
val SOME (ctt,_) =
neuper@37906
   100
    (rewrite_inst thy' "tless_true" "erls" false [("bdv","x")] thm ct);
neuper@37906
   101
"----- for 'd_d s a' we got 'a is_const' --> False --------vvv-----";
neuper@37906
   102
trace_rewrite := true;
neuper@37906
   103
val ct = "d_d s a";
neuper@37906
   104
    (rewrite_inst thy' "tless_true" "erls" false [("bdv","s")] thm ct);
neuper@37926
   105
(*got: NONE instead SOME*)
neuper@41929
   106
eval_true (@{theory "Isac"}) [str2term "a is_const"] (assoc_rls"erls");
neuper@37906
   107
(*got: false instead true;   ~~~~~~~~~~~ replaced by 'is_atom'*)
neuper@37926
   108
val SOME (ctt,_) =
neuper@37906
   109
    (rewrite_inst thy' "tless_true" "erls" false [("bdv","s")] thm ct);
neuper@38031
   110
if ctt = "0" then () else error "diff.sml: thm 'diff_const' diff.behav.";
neuper@37906
   111
trace_rewrite := false;
neuper@37906
   112
"----- for 'd_d s a' we had 'a is_const' --> False --------^^^-----";
neuper@37906
   113
neuper@37906
   114
val thm = ("diff_var","");
neuper@37906
   115
val ct = "d_d x x";
neuper@37926
   116
val SOME (ctt,_) =
neuper@37906
   117
    (rewrite_inst thy' "tless_true" "erls" false [("bdv","x")] thm ct);
neuper@37906
   118
val ct = "d_d x a";
neuper@37926
   119
val NONE =
neuper@37906
   120
    (rewrite_inst thy' "tless_true" "erls" false [("bdv","x")] thm ct);
neuper@37906
   121
val ct = "d_d x (x+x)";
neuper@37926
   122
val NONE =
neuper@37906
   123
(rewrite_inst thy' "tless_true" "erls" false [("bdv","x")] thm ct);
neuper@37906
   124
neuper@37906
   125
neuper@38081
   126
"----------- for correction of diff_quot ----------------";
neuper@38081
   127
"----------- for correction of diff_quot ----------------";
neuper@38081
   128
"----------- for correction of diff_quot ----------------";
neuper@37991
   129
val thy' = "Diff";
neuper@37906
   130
val ct = "Not (x = 0)";
neuper@37906
   131
rewrite_set thy' false "erls" ct;
neuper@37906
   132
neuper@37906
   133
val ct = "d_d x ((x+1) / (x - 1))";
neuper@37906
   134
val thm = ("diff_quot","");
neuper@37926
   135
val SOME (ctt,_) =
neuper@37906
   136
    (rewrite_inst thy' "tless_true" "erls" true [("bdv","x")] thm ct);
neuper@37906
   137
neuper@37906
   138
neuper@38081
   139
"----------- differentiate by rewrite -------------------";
neuper@38081
   140
"----------- differentiate by rewrite -------------------";
neuper@38081
   141
"----------- differentiate by rewrite -------------------";
neuper@37991
   142
val thy' = "Diff";
neuper@37906
   143
val ct = "d_d x (x ^^^ 2 + 3 * x + 4)";
neuper@37906
   144
"--- 1 ---";
neuper@37906
   145
val thm = ("diff_sum","");
neuper@37906
   146
val (ct,_) = the (rewrite_inst thy' "tless_true" "erls" true 
neuper@37906
   147
		  [("bdv","x::real")] thm ct);
neuper@37906
   148
"--- 2 ---";
neuper@37906
   149
val (ct,_) = the (rewrite_inst thy' "tless_true" "erls" true 
neuper@37906
   150
		  [("bdv","x::real")] thm ct);
neuper@37906
   151
"--- 3 ---";
neuper@37906
   152
val thm = ("diff_prod_const","");
neuper@37906
   153
val (ct,_) = the (rewrite_inst thy' "tless_true" "erls" true 
neuper@37906
   154
		  [("bdv","x::real")] thm ct);
neuper@37906
   155
"--- 4 ---";
neuper@37906
   156
val thm = ("diff_pow","");
neuper@37906
   157
val (ct,_) = the (rewrite_inst thy' "tless_true" "erls" true 
neuper@37906
   158
		  [("bdv","x::real")] thm ct);
neuper@37906
   159
"--- 5 ---";
neuper@37906
   160
val thm = ("diff_const","");
neuper@37906
   161
val (ct,_) = the (rewrite_inst thy' "tless_true" "erls" true 
neuper@37906
   162
		  [("bdv","x::real")] thm ct);
neuper@37906
   163
"--- 6 ---";
neuper@37906
   164
val thm = ("diff_var","");
neuper@37906
   165
val (ct,_) = the (rewrite_inst thy' "tless_true" "erls" true 
neuper@37906
   166
		  [("bdv","x::real")] thm ct);
neuper@37906
   167
if ct = "2 * x ^^^ (2 - 1) + 3 * 1 + 0" then ()
neuper@38031
   168
else error "diff.sml diff.behav. in rewrite 1";
neuper@37906
   169
"--- 7 ---";
neuper@37906
   170
val rls = ("Test_simplify");
neuper@37906
   171
val (ct,_) = the (rewrite_set thy' false rls ct);
neuper@38031
   172
if ct="3 + 2 * x" then () else error "new behaviour in test-example";
neuper@37906
   173
neuper@37906
   174
val ct = "2 * x ^^^ (2 - 1) + 3 * 1 + 0";
neuper@37906
   175
val (ct,_) = the (rewrite_set thy' true rls ct);
neuper@37906
   176
neuper@37906
   177
(*---
neuper@37906
   178
val t = str2term "x ^^^ (2 - 1)";
neuper@37926
   179
val SOME (t',_) = rewrite_set_ thy false Test_simplify t;
neuper@37906
   180
term2str t';
neuper@37906
   181
neuper@37906
   182
val t = str2term "-1 * 1";
neuper@37926
   183
val SOME (thmID,thm) = get_calculation_ thy (the(assoc(calclist,"times"))) t;
neuper@37906
   184
*)
neuper@37906
   185
neuper@38081
   186
"----------- differentiate: me (*+ tacs input*) ---------";
neuper@38081
   187
"----------- differentiate: me (*+ tacs input*) ---------";
neuper@38081
   188
"----------- differentiate: me (*+ tacs input*) ---------";
neuper@37906
   189
val fmz = ["functionTerm (x ^^^ 2 + 3 * x + 4)", 
neuper@37994
   190
	   "differentiateFor x","derivative f_f'"];
neuper@37906
   191
val (dI',pI',mI') =
neuper@37991
   192
  ("Diff",["derivative_of","function"],
neuper@37906
   193
   ["diff","diff_simpl"]);
neuper@37906
   194
val p = e_pos'; val c = []; 
neuper@37906
   195
"--- s1 ---";
neuper@37906
   196
val (p,_,f,nxt,_,pt) = CalcTreeTEST [(fmz, (dI',pI',mI'))];
neuper@37906
   197
val (p,_,f,nxt,_,pt) = me nxt p c pt;
neuper@37906
   198
"--- s2 ---";
neuper@37906
   199
(*val nxt = ("Add_Given",
neuper@37906
   200
Add_Given "functionTerm (d_d x (x ^^^ #2 + #3 * x + #4))");*)
neuper@37906
   201
val (p,_,f,nxt,_,pt) = me nxt p c pt;
neuper@37906
   202
"--- s3 ---";
neuper@37906
   203
(*val nxt = ("Add_Given",Add_Given "differentiateFor x");*)
neuper@37906
   204
val (p,_,f,nxt,_,pt) = me nxt p c pt;
neuper@37906
   205
"--- s4 ---";
neuper@37994
   206
(*val nxt = ("Add_Find",Add_Find "derivative f_f'");*)
neuper@37906
   207
val (p,_,f,nxt,_,pt) = me nxt p c pt;
neuper@37906
   208
"--- s5 ---";
neuper@37906
   209
(*val nxt = ("Specify_Theory",Specify_Theory dI');*)
neuper@37906
   210
val (p,_,f,nxt,_,pt) = me nxt p c pt;
neuper@37906
   211
"--- s6 ---";
neuper@37906
   212
(*val nxt = ("Specify_Problem",Specify_Problem pI');*)
neuper@37906
   213
val (p,_,f,nxt,_,pt) = me nxt p c pt;
neuper@37906
   214
"--- s7 ---";
neuper@37906
   215
(*val nxt = ("Specify_Method",Specify_Method mI');*)
neuper@37906
   216
val (p,_,f,nxt,_,pt) = me nxt p c pt;
neuper@37906
   217
"--- s8 ---";
neuper@37906
   218
(*val nxt = ("Apply_Method",Apply_Method mI');*)
neuper@37906
   219
val (p,_,f,nxt,_,pt) = me nxt p c pt;
neuper@37906
   220
"--- 1 ---";
neuper@37906
   221
(*val nxt = ("Rewrite_Inst",Rewrite_Inst (["(bdv,x)"],("diff_sum","")));*)
neuper@37906
   222
val (p,_,f,nxt,_,pt) = me nxt p c pt;
neuper@37906
   223
"--- 2 ---";
neuper@37906
   224
(*val nxt = ("Rewrite_Inst",Rewrite_Inst (["(bdv,x)"],("diff_sum","")));*)
neuper@37906
   225
val (p,_,f,nxt,_,pt) = me nxt p c pt;
neuper@37906
   226
(*val (p,_,f,nxt,_,pt) = me nxt p c pt;
neuper@37906
   227
val (p,_,f,nxt,_,pt) = me nxt p c pt;*)
neuper@37906
   228
"--- 3 ---";
neuper@37906
   229
(*val nxt = ("Rewrite_Inst",Rewrite_Inst (["(bdv,x)"],("diff_prod_const",...;*)
neuper@37906
   230
val (p,_,f,nxt,_,pt) = me nxt p c pt;
neuper@37906
   231
(*val (p,_,f,nxt,_,pt) = me nxt p c pt;*)
neuper@37906
   232
"--- 4 ---";
neuper@37906
   233
(*val nxt = ("Rewrite_Inst",Rewrite_Inst (["(bdv,x)"],("diff_pow","")));*)
neuper@37906
   234
val (p,_,f,nxt,_,pt) = me nxt p c pt;
neuper@37906
   235
(*val (p,_,f,nxt,_,pt) = me nxt p c pt;*)
neuper@37906
   236
"--- 5 ---";
neuper@37906
   237
(*val nxt = ("Rewrite_Inst",Rewrite_Inst (["(bdv,x)"],("diff_prod_const",...;*)
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
"--- 6 ---";
neuper@37906
   241
(*val nxt = ("Rewrite_Inst",Rewrite_Inst (["(bdv,x)"],("diff_var","")));*)
neuper@37906
   242
val (p,_,f,nxt,_,pt) = me nxt p c pt; 
neuper@37906
   243
if f2str f =  "2 * x ^^^ (2 - 1) + 3 * 1 + 0" then () 
neuper@38031
   244
else error "diff.sml: diff.behav. in d_d x ^^^ 2 + 3 * x + 4";
neuper@37906
   245
"--- 7 ---";
neuper@37906
   246
(*val nxt = ("Rewrite_Set",Rewrite_Set "make_polynomial");*)
neuper@37906
   247
val (p,_,f,nxt,_,pt) = me nxt p c pt;
neuper@37906
   248
"--- 8 ---";
neuper@42393
   249
(*val nxt = ("Check_Postcond",Check_Postcond ("Diff","differentiate_on_R"));*)
neuper@37906
   250
val (p,_,f,nxt,_,pt) = me nxt p c pt;
neuper@37906
   251
"--- 9 ---";
neuper@37906
   252
(*val nxt = ("End_Proof'",End_Proof');*)
neuper@37906
   253
val (p,_,f,nxt,_,pt) = me nxt p c pt; f2str f;
neuper@37906
   254
if nxt = ("End_Proof'",End_Proof') andalso f2str f = "3 + 2 * x" then ()
neuper@38031
   255
else error "diff.sml: new.behav. in me (*+ tacs input*)";
neuper@38031
   256
(*if f = EmptyMout then () else error "new behaviour in + tacs input";
neuper@37906
   257
meNEW extracts Form once more*)
neuper@37906
   258
neuper@38081
   259
"----------- 1.5.02 me from script ----------------------";
neuper@38081
   260
"----------- 1.5.02 me from script ----------------------";
neuper@38081
   261
"----------- 1.5.02 me from script ----------------------";
neuper@37906
   262
(*exp_Diff_No-1.xml*)
neuper@37906
   263
val fmz = ["functionTerm (x ^^^ 2 + 3 * x + 4)", 
neuper@37994
   264
	   "differentiateFor x","derivative f_f'"];
neuper@37906
   265
val (dI',pI',mI') =
neuper@37991
   266
  ("Diff",["derivative_of","function"],
neuper@37906
   267
   ["diff","diff_simpl"]);
neuper@37906
   268
(*val p = e_pos'; val c = []; 
neuper@37906
   269
val (mI,m) = ("Init_Proof",Init_Proof (fmz, (dI',pI',mI')));
neuper@37906
   270
val (p,_,f,nxt,_,pt) = me (mI,m) p c EmptyPtree;*)
neuper@37906
   271
val (p,_,f,nxt,_,pt) = CalcTreeTEST [(fmz, (dI',pI',mI'))];
neuper@37906
   272
val (p,_,f,nxt,_,pt) = me nxt p c pt;
neuper@37906
   273
val (p,_,f,nxt,_,pt) = me nxt p c pt;
neuper@37906
   274
val (p,_,f,nxt,_,pt) = me nxt p c pt;
neuper@37906
   275
val (p,_,f,nxt,_,pt) = me nxt p c pt;
neuper@37906
   276
val (p,_,f,nxt,_,pt) = me nxt p c pt;
neuper@37906
   277
val (p,_,f,nxt,_,pt) = me nxt p c pt;
neuper@37906
   278
val (p,_,f,nxt,_,pt) = me nxt p c pt;
neuper@37991
   279
(*nxt = ("Apply_Method",Apply_Method ("Diff","differentiate_on_R*)
neuper@37906
   280
val (p,_,f,nxt,_,pt) = me nxt p c pt;
neuper@37906
   281
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@37906
   285
val (p,_,f,nxt,_,pt) = me nxt p c pt;
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
if nxt = ("End_Proof'",End_Proof') then ()
neuper@38031
   291
else error "new behaviour in tests/differentiate, 1.5.02 me from script";
neuper@37906
   292
neuper@38081
   293
"----------- primed id ----------------------------------";
neuper@38081
   294
"----------- primed id ----------------------------------";
neuper@38081
   295
"----------- primed id ----------------------------------";
neuper@37994
   296
val f_ = str2term "f_f::bool";
neuper@37906
   297
val f  = str2term "A = s * (a - s)";
neuper@38081
   298
val v_ = str2term "v_v";
neuper@37906
   299
val v  = str2term "s";
neuper@38081
   300
val screxp0 = str2term "Take ((primed (lhs f_f)) = d_d v_v (rhs f_f))";
neuper@37906
   301
atomty screxp0;
neuper@37906
   302
neuper@38081
   303
val screxp1 = subst_atomic [(f_, f), (v_, v)] screxp0;
neuper@37906
   304
term2str screxp1;
neuper@37906
   305
atomty screxp1;
neuper@37906
   306
neuper@41929
   307
val SOME (f'_,_) = rewrite_set_ (@{theory "Isac"}) false srls_diff screxp1; 
neuper@37906
   308
if term2str f'_= "Take (A' = d_d s (s * (a - s)))" then ()
neuper@38031
   309
else error "diff.sml: diff.behav. in 'primed'";
neuper@37906
   310
atomty f'_;
neuper@37906
   311
neuper@37994
   312
val str = "Script DiffEqScr (f_f::bool) (v_v::real) =                         \
neuper@38081
   313
\ (let f_f' = Take ((primed (lhs f_f)) = d_d v_v (rhs f_f))           \
neuper@37906
   314
\ in (((Try (Repeat (Rewrite frac_conv   False))) @@              \
neuper@37906
   315
 \ (Try (Repeat (Rewrite root_conv   False))) @@                  \
neuper@37906
   316
 \ (Try (Repeat (Rewrite realpow_pow False))) @@                  \
neuper@37906
   317
 \ (Repeat                                                        \
neuper@37991
   318
 \   ((Repeat (Rewrite_Inst [(bdv,v_v)] diff_sum        False)) Or \
neuper@37991
   319
 \    (Repeat (Rewrite_Inst [(bdv,v_v)] diff_prod_const False)) Or \
neuper@37991
   320
 \    (Repeat (Rewrite_Inst [(bdv,v_v)] diff_prod       False)) Or \
neuper@37991
   321
 \    (Repeat (Rewrite_Inst [(bdv,v_v)] diff_quot       True )) Or \
neuper@37991
   322
 \    (Repeat (Rewrite_Inst [(bdv,v_v)] diff_sin        False)) Or \
neuper@37991
   323
 \    (Repeat (Rewrite_Inst [(bdv,v_v)] diff_sin_chain  False)) Or \
neuper@37991
   324
 \    (Repeat (Rewrite_Inst [(bdv,v_v)] diff_cos        False)) Or \
neuper@37991
   325
 \    (Repeat (Rewrite_Inst [(bdv,v_v)] diff_cos_chain  False)) Or \
neuper@37991
   326
 \    (Repeat (Rewrite_Inst [(bdv,v_v)] diff_pow        False)) Or \
neuper@37991
   327
 \    (Repeat (Rewrite_Inst [(bdv,v_v)] diff_pow_chain  False)) Or \
neuper@37991
   328
 \    (Repeat (Rewrite_Inst [(bdv,v_v)] diff_ln         False)) Or \
neuper@37991
   329
 \    (Repeat (Rewrite_Inst [(bdv,v_v)] diff_ln_chain   False)) Or \
neuper@37991
   330
 \    (Repeat (Rewrite_Inst [(bdv,v_v)] diff_exp        False)) Or \
neuper@37991
   331
 \    (Repeat (Rewrite_Inst [(bdv,v_v)] diff_exp_chain  False)) Or \
neuper@37991
   332
 \    (Repeat (Rewrite_Inst [(bdv,v_v)] diff_sqrt       False)) Or \
neuper@37991
   333
 \    (Repeat (Rewrite_Inst [(bdv,v_v)] diff_sqrt_chain False)) Or \
neuper@37991
   334
 \    (Repeat (Rewrite_Inst [(bdv,v_v)] diff_const      False)) Or \
neuper@37991
   335
 \    (Repeat (Rewrite_Inst [(bdv,v_v)] diff_var        False)) Or \
neuper@37906
   336
 \    (Repeat (Rewrite_Set             make_polynomial False)))) @@ \
neuper@37906
   337
 \ (Try (Repeat (Rewrite sym_frac_conv False))) @@              \
neuper@37994
   338
 \ (Try (Repeat (Rewrite sym_root_conv False))))) f_f')"
neuper@37906
   339
;
neuper@37906
   340
val sc = ((inst_abs thy) o term_of o the o (parse thy)) str;
neuper@37906
   341
neuper@37906
   342
neuper@38081
   343
"----------- diff_conv, sym_diff_conv -------------------";
neuper@38081
   344
"----------- diff_conv, sym_diff_conv -------------------";
neuper@38081
   345
"----------- diff_conv, sym_diff_conv -------------------";
neuper@37906
   346
val subs = [(str2term "bdv", str2term "x")];
neuper@37906
   347
val rls = diff_conv;
neuper@37906
   348
neuper@37906
   349
val t = str2term "2/x^^^2"; 
neuper@37926
   350
val SOME (t,_) = rewrite_set_inst_ thy false subs rls t; term2str t;
neuper@38031
   351
if term2str t = "2 * x ^^^ -2" then () else error "diff.sml 1/x";
neuper@37906
   352
neuper@37906
   353
val t = str2term "sqrt (x^^^3)";
neuper@37926
   354
val SOME (t,_) = rewrite_set_inst_ thy false subs rls t; term2str t;
neuper@38031
   355
if term2str t = "x ^^^ (3 / 2)" then () else error "diff.sml x^1/2";
neuper@37906
   356
neuper@37906
   357
val t = str2term "2 / sqrt x^^^3";
neuper@37926
   358
val SOME (t,_) = rewrite_set_inst_ thy false subs rls t; term2str t;
neuper@38031
   359
if term2str t = "2 * x ^^^ (-3 / 2)" then () else error"diff.sml x^-1/2";
neuper@37906
   360
(* trace_rewrite := true;
neuper@37906
   361
   trace_rewrite := false;
neuper@37906
   362
   *)
neuper@37906
   363
val rls = diff_sym_conv; 
neuper@37906
   364
neuper@37906
   365
val t = str2term "2 * x ^^^ -2";
neuper@37926
   366
val SOME (t,_) = rewrite_set_inst_ thy false subs rls t; term2str t;
neuper@38031
   367
if term2str t = "2 / x ^^^ 2" then () else error "diff.sml sym 1/x";
neuper@37906
   368
neuper@37906
   369
neuper@37906
   370
val t = str2term "x ^^^ (3 / 2)";
neuper@37926
   371
val SOME (t,_) = rewrite_set_inst_ thy false subs rls t; term2str t;
neuper@38031
   372
if term2str t = "sqrt (x ^^^ 3)" then () else error"diff.sml sym x^1/x";
neuper@37906
   373
neuper@37906
   374
val t = str2term "2 * x ^^^ (-3 / 2)";
neuper@37926
   375
val SOME (t,_) = rewrite_set_inst_ thy false subs rls t; term2str t;
neuper@38031
   376
if term2str t ="2 / sqrt (x ^^^ 3)"then()else error"diff.sml sym x^-1/x";
neuper@37906
   377
neuper@37906
   378
neuper@37906
   379
(* trace_rewrite:=true;
neuper@37906
   380
   *)
neuper@37906
   381
(* trace_rewrite:=false;
neuper@37906
   382
   *)
neuper@37906
   383
(*@@@@*)
neuper@37906
   384
neuper@38081
   385
"----------- autoCalculate differentiate_on_R 2/x^2 -----";
neuper@38081
   386
"----------- autoCalculate differentiate_on_R 2/x^2 -----";
neuper@38081
   387
"----------- autoCalculate differentiate_on_R 2/x^2 -----";
neuper@37906
   388
states:=[];
neuper@37906
   389
CalcTree
neuper@37906
   390
[(["functionTerm (x^2 + x+ 1/x + 2/x^2)",
neuper@37906
   391
   (*"functionTerm ((x^3)^5)",*)
neuper@37994
   392
   "differentiateFor x", "derivative f_f'"], 
neuper@37991
   393
  ("Isac", ["derivative_of","function"],
neuper@37906
   394
  ["diff","differentiate_on_R"]))];
neuper@37906
   395
Iterator 1;
neuper@37906
   396
moveActiveRoot 1;
neuper@37906
   397
autoCalculate 1 CompleteCalc;
neuper@37906
   398
val ((pt,p),_) = get_calc 1; show_pt pt;
neuper@37906
   399
if p = ([], Res) andalso term2str (get_obj g_res pt (fst p)) = 
neuper@37906
   400
			  "1 + 2 * x + -1 / x ^^^ 2 + -4 / x ^^^ 3" then ()
neuper@38031
   401
else error "diff.sml: differentiate_on_R 2/x^2 changed";
neuper@37906
   402
neuper@38081
   403
"---------------------------------------------------------";
neuper@37906
   404
states:=[];
neuper@37906
   405
CalcTree
neuper@37906
   406
[(["functionTerm (x^3 * x^5)",
neuper@37994
   407
   "differentiateFor x", "derivative f_f'"], 
neuper@37991
   408
  ("Isac", ["derivative_of","function"],
neuper@37906
   409
  ["diff","differentiate_on_R"]))];
neuper@37906
   410
Iterator 1;
neuper@37906
   411
moveActiveRoot 1;
neuper@37906
   412
(* trace_rewrite := true;
neuper@37906
   413
   trace_script := true;
neuper@37906
   414
   *)
neuper@37906
   415
autoCalculate 1 CompleteCalc;
neuper@37906
   416
(* trace_rewrite := false;
neuper@37906
   417
   trace_script := false;
neuper@37906
   418
   *)
neuper@37906
   419
val ((pt,p),_) = get_calc 1; show_pt pt;
neuper@37906
   420
neuper@37906
   421
if p = ([], Res) andalso term2str (get_obj g_res pt (fst p)) = 
neuper@37906
   422
			 "8 * x ^^^ 7" then () 
neuper@38031
   423
else error "diff.sml: differentiate_on_R (x^3 * x^5) changed";
neuper@37906
   424
neuper@38081
   425
"----------- autoCalculate diff after_simplification ----";
neuper@38081
   426
"----------- autoCalculate diff after_simplification ----";
neuper@38081
   427
"----------- autoCalculate diff after_simplification ----";
neuper@37906
   428
states:=[];
neuper@37906
   429
CalcTree
neuper@37906
   430
[(["functionTerm (x^3 * x^5)",
neuper@37994
   431
   "differentiateFor x", "derivative f_f'"], 
neuper@37991
   432
  ("Isac", ["derivative_of","function"],
neuper@37906
   433
  ["diff","after_simplification"]))];
neuper@37906
   434
Iterator 1;
neuper@37906
   435
moveActiveRoot 1;
neuper@37906
   436
(* trace_rewrite := true;
neuper@37906
   437
   trace_script := true;
neuper@37906
   438
   *)
neuper@37906
   439
autoCalculate 1 CompleteCalc;
neuper@37906
   440
(* trace_rewrite := false;
neuper@37906
   441
   trace_script := false;
neuper@37906
   442
   *)
neuper@37906
   443
val ((pt,p),_) = get_calc 1; show_pt pt;
neuper@37906
   444
if p = ([], Res) andalso term2str (get_obj g_res pt (fst p)) =  "8 * x ^^^ 7"
neuper@38031
   445
then () else error "biegelinie.sml: 1st biegelin.7.27 changed";
neuper@37906
   446
neuper@38081
   447
"--------------------------------------------------------";
neuper@37906
   448
states:=[];
neuper@37906
   449
CalcTree
neuper@37906
   450
[(["functionTerm ((x^3)^5)",
neuper@37994
   451
   "differentiateFor x", "derivative f_f'"], 
neuper@37991
   452
  ("Isac", ["derivative_of","function"],
neuper@37906
   453
  ["diff","after_simplification"]))];
neuper@37906
   454
Iterator 1;
neuper@37906
   455
moveActiveRoot 1;
neuper@37906
   456
autoCalculate 1 CompleteCalc;
neuper@37906
   457
val ((pt,p),_) = get_calc 1; show_pt pt;
neuper@37906
   458
if p = ([], Res) andalso term2str (get_obj g_res pt (fst p)) = "15 * x ^^^ 14"
neuper@38031
   459
then () else error "biegelinie.sml: 1st biegelin.7.27 changed";
neuper@37906
   460
neuper@38081
   461
"----------- autoCalculate differentiate_equality -------";
neuper@38081
   462
"----------- autoCalculate differentiate_equality -------";
neuper@38081
   463
"----------- autoCalculate differentiate_equality -------";
neuper@37906
   464
states:=[];
neuper@37906
   465
CalcTree
neuper@42393
   466
[(["functionEq (A = s * (a - (s::real)))", "differentiateFor s", "derivativeEq f_f'"], 
neuper@37991
   467
  ("Isac", ["named","derivative_of","function"],
neuper@37906
   468
  ["diff","differentiate_equality"]))];
neuper@37906
   469
Iterator 1;
neuper@37906
   470
moveActiveRoot 1;
neuper@37906
   471
autoCalculate 1 CompleteCalc;
neuper@37906
   472
val ((pt,p),_) = get_calc 1; show_pt pt;
neuper@37906
   473
neuper@38081
   474
"----------- tests for examples -------------------------";
neuper@38081
   475
"----------- tests for examples -------------------------";
neuper@38081
   476
"----------- tests for examples -------------------------";
neuper@37906
   477
"----- parse errors";
neuper@38081
   478
(*str2term "F  =  sqrt( y^^^2 - O) * (z + O^^^2)";
neuper@38081
   479
str2term "O";
neuper@38081
   480
str2term "OO"; ---errors*)
neuper@38081
   481
str2term "OOO";
neuper@37906
   482
neuper@37906
   483
"----- thm 'diff_prod_const'";
neuper@37906
   484
val subs = [(str2term "bdv", str2term "l")];
neuper@38081
   485
val f = str2term "G' = d_d l (l * sqrt (7 * s ^^^ 2 - l ^^^ 2))";
neuper@37906
   486
neuper@38081
   487
"------------inform for x^2+x+1 -------------------------";
neuper@38081
   488
"------------inform for x^2+x+1 -------------------------";
neuper@38081
   489
"------------inform for x^2+x+1 -------------------------";
neuper@37906
   490
states:=[];
neuper@37906
   491
CalcTree
neuper@37906
   492
[(["functionTerm (x^2 + x + 1)",
neuper@37994
   493
   "differentiateFor x", "derivative f_f'"], 
neuper@37991
   494
  ("Isac", ["derivative_of","function"],
neuper@37906
   495
  ["diff","differentiate_on_R"]))];
neuper@37906
   496
Iterator 1;
neuper@37906
   497
moveActiveRoot 1;
neuper@37906
   498
autoCalculate 1 CompleteCalcHead;
neuper@37906
   499
autoCalculate 1 (Step 1);
neuper@37906
   500
autoCalculate 1 (Step 1);
neuper@37906
   501
autoCalculate 1 (Step 1);
neuper@37906
   502
val ((pt,p),_) = get_calc 1; show_pt pt;
neuper@37906
   503
appendFormula 1 "2*x + d_d x x + d_d x 1";
neuper@37906
   504
val ((pt,p),_) = get_calc 1; show_pt pt;
neuper@37906
   505
if existpt' ([3], Res) pt then ()
neuper@38031
   506
else error  "diff.sml: inform d_d x (x^2 + x + 1) doesnt work";
neuper@38081
   507