src/smltest/IsacKnowledge/integrate.sml
author wneuper
Sat, 20 Aug 2005 21:20:16 +0200
changeset 2918 cac1f942e1a1
parent 2917 2488337fd0dd
child 3741 dae3ad431527
permissions -rw-r--r--
find out why IntegrateScript doesnt work
wneuper@2858
     1
(* tests on integration over the reals
wneuper@2858
     2
   author: Walther Neuper
wneuper@2858
     3
   050814, 08:51
wneuper@2858
     4
   (c) due to copyright terms
wneuper@2858
     5
wneuper@2858
     6
use"~/proto2/isac/src/smltest/IsacKnowledge/integrate.sml";
wneuper@2858
     7
*)
wneuper@2872
     8
val thy = Integrate.thy;
wneuper@2858
     9
wneuper@2858
    10
"-----------------------------------------------------------------";
wneuper@2858
    11
"table of contents -----------------------------------------------";
wneuper@2858
    12
"-----------------------------------------------------------------";
wneuper@2858
    13
"----------- parsing ---------------------------------------------";
wneuper@2858
    14
"----------- integrate by rewriting ------------------------------";
wneuper@2901
    15
"----------- test new_c ------------------------------------------";
wneuper@2858
    16
"----------- integrate by ruleset --------------------------------";
wneuper@2863
    17
"----------- check probem type -----------------------------------";
wneuper@2918
    18
"----------- check Scripts ---------------------------------------";
wneuper@2918
    19
"----------- me method [Diff,integration] ------------------------";
wneuper@2858
    20
"-----------------------------------------------------------------";
wneuper@2858
    21
"-----------------------------------------------------------------";
wneuper@2858
    22
"-----------------------------------------------------------------";
wneuper@2858
    23
wneuper@2858
    24
"----------- parsing ---------------------------------------------";
wneuper@2858
    25
"----------- parsing ---------------------------------------------";
wneuper@2858
    26
"----------- parsing ---------------------------------------------";
wneuper@2863
    27
fun str2t str = (term_of o the o (parse Integrate.thy)) str;
wneuper@2863
    28
fun term2s t = Sign.string_of_term (sign_of Integrate.thy) t;
wneuper@2858
    29
    
wneuper@2863
    30
val t = str2t "Integral x D x";
wneuper@2863
    31
val t = str2t "Integral x^^^2 D x";
wneuper@2858
    32
atomty thy t;
wneuper@2858
    33
wneuper@2917
    34
wneuper@2858
    35
"----------- integrate by rewriting ------------------------------";
wneuper@2858
    36
"----------- integrate by rewriting ------------------------------";
wneuper@2858
    37
"----------- integrate by rewriting ------------------------------";
wneuper@2901
    38
val conditions_in_integration_rules =
wneuper@2901
    39
Rls {id="conditions_in_integration_rules", 
wneuper@2901
    40
     preconds = [], 
wneuper@2901
    41
     rew_ord = ("termlessI",termlessI), 
wneuper@2901
    42
     erls = Erls, 
wneuper@2901
    43
     srls = Erls, calc = [],
wneuper@2901
    44
     rules = [(*for rewriting conditions in Thm's*)
wneuper@2901
    45
	      Calc ("Atools.occurs'_in", 
wneuper@2901
    46
		    eval_occurs_in "#occurs_in_"),
wneuper@2901
    47
	      Thm ("not_true",num_str not_true),
wneuper@2901
    48
	      Thm ("not_false",not_false)
wneuper@2901
    49
	      ],
wneuper@2901
    50
     scr = EmptyScr};
wneuper@2901
    51
val subs = [(str2t "bdv", str2t "x")];
wneuper@2901
    52
fun rewrit thm str = 
wneuper@2901
    53
    fst (the (rewrite_inst_ Integrate.thy tless_true 
wneuper@2901
    54
			   conditions_in_integration_rules 
wneuper@2858
    55
			   true subs thm str));
wneuper@2901
    56
val str = rewrit integral_const (str2t "Integral 1 D x"); term2s str;
wneuper@2901
    57
val str = rewrit integral_const (str2t  "Integral M'/EJ D x"); term2s str;
wneuper@2901
    58
val str = (rewrit integral_const (str2t "Integral x D x")) 
wneuper@2901
    59
    handle OPTION => str2t "no_rewrite";
wneuper@2858
    60
wneuper@2901
    61
val str = rewrit integral_var (str2t "Integral x D x"); term2s str;
wneuper@2901
    62
val str = (rewrit integral_var (str2t "Integral a D x"))
wneuper@2901
    63
    handle OPTION => str2t "no_rewrite";
wneuper@2858
    64
wneuper@2901
    65
val str = rewrit integral_add (str2t "Integral x + 1 D x"); term2s str;
wneuper@2858
    66
wneuper@2901
    67
val str = rewrit integral_mult (str2t "Integral M'/EJ * x^^^3 D x");term2s str;
wneuper@2901
    68
val str = (rewrit integral_mult (str2t "Integral x * x D x"))
wneuper@2901
    69
    handle OPTION => str2t "no_rewrite";
wneuper@2858
    70
wneuper@2901
    71
val str = rewrit integral_pow (str2t "Integral x^^^3 D x"); term2s str;
wneuper@2901
    72
wneuper@2917
    73
wneuper@2901
    74
"----------- test new_c ------------------------------------------";
wneuper@2901
    75
"----------- test new_c ------------------------------------------";
wneuper@2901
    76
"----------- test new_c ------------------------------------------";
wneuper@2901
    77
val term = str2t "x^^^2*c + c_2";
wneuper@2901
    78
val cc = new_c term;
wneuper@2901
    79
if term2s cc = "c_3" then () else raise error "integrate.sml: new_c ???";
wneuper@2901
    80
wneuper@2901
    81
val term = str2t "new_c (c * x^^^2 + c_2)";
wneuper@2901
    82
val Some (_,t') = eval_new_c 0 0 term 0;
wneuper@2901
    83
if term2s t' = "new_c c * x ^^^ 2 + c_2 = c_3" then ()
wneuper@2901
    84
else raise error "integrate.sml: eval_new_c ???";
wneuper@2901
    85
wneuper@2912
    86
val t = str2t "matches (?u + new_c ?v) (x ^^^ 2 / 2)";
wneuper@2912
    87
val Some (_,t') = eval_matches "" "Tools.matches" t thy; term2s t';
wneuper@2912
    88
if term2s t' = "matches (?u + new_c ?v) (x ^^^ 2 / 2) = False" then ()
wneuper@2912
    89
else raise error "integrate.sml: matches new_c = False";
wneuper@2912
    90
wneuper@2912
    91
val t = str2t "matches (?u + new_c ?v) (x ^^^ 2 / 2 + new_c x ^^^ 2 / 2)";
wneuper@2912
    92
val Some (_,t') = eval_matches "" "Tools.matches" t thy; term2s t';
wneuper@2912
    93
if term2s t'="matches (?u + new_c ?v) (x ^^^ 2 / 2 + new_c x ^^^ 2 / 2) = True"
wneuper@2912
    94
then () else raise error "integrate.sml: matches new_c = True";
wneuper@2901
    95
wneuper@2901
    96
val conditions_in_integration =
wneuper@2901
    97
Rls {id="conditions_in_integration", 
wneuper@2901
    98
			       preconds = [], 
wneuper@2901
    99
			       rew_ord = ("termlessI",termlessI), 
wneuper@2901
   100
			       erls = Erls, 
wneuper@2901
   101
			       srls = Erls, calc = [],
wneuper@2912
   102
			       rules = [Calc ("Tools.matches",eval_matches ""),
wneuper@2901
   103
					Thm ("not_true",num_str not_true),
wneuper@2912
   104
					Thm ("not_false",num_str not_false)
wneuper@2901
   105
					],
wneuper@2901
   106
			       scr = EmptyScr};
wneuper@2901
   107
fun rewrit thm str = 
wneuper@2901
   108
    fst (the (rewrite_inst_ Integrate.thy tless_true 
wneuper@2901
   109
			    conditions_in_integration true subs thm str));
wneuper@2916
   110
val str = rewrit call_for_new_c (str2t "x ^^^ 2 / 2"); term2s str;
wneuper@2916
   111
val str = (rewrit call_for_new_c str)
wneuper@2914
   112
    handle OPTION =>  str2t "no_rewrite";;
wneuper@2901
   113
wneuper@2858
   114
wneuper@2858
   115
"----------- integrate by ruleset --------------------------------";
wneuper@2858
   116
"----------- integrate by ruleset --------------------------------";
wneuper@2858
   117
"----------- integrate by ruleset --------------------------------";
wneuper@2858
   118
fun rewrite_se subs rls str = 
wneuper@2858
   119
    fst (the (rewrite_set_inst "Integrate.thy" true subs rls str));
wneuper@2858
   120
val subs = [("bdv","x::real")];
wneuper@2917
   121
val rls = "integration_rules";
wneuper@2917
   122
val str = rewrite_se subs rls "Integral x D x";
wneuper@2917
   123
val str = rewrite_se subs rls "Integral c * x ^^^ 2 + c_2 D x";
wneuper@2917
   124
if str = "c * (x ^^^ 3 / 3) + c_2 * x"
wneuper@2917
   125
then () else raise error "integrate.sml: diff.behav. in integration_rules";
wneuper@2917
   126
wneuper@2917
   127
val rls = "add_new_c";
wneuper@2917
   128
val str = rewrite_se subs rls "c * (x ^^^ 3 / 3) + c_2 * x";
wneuper@2917
   129
if str = "c * (x ^^^ 3 / 3) + c_2 * x + c_3" then () 
wneuper@2917
   130
else raise error "integrate.sml: diff.behav. in add_new_c";
wneuper@2917
   131
wneuper@2901
   132
val rls = "integration";
wneuper@2901
   133
val str = rewrite_se subs rls "Integral c * x ^^^ 2 + c_2 D x";
wneuper@2901
   134
if str = "c * (x ^^^ 3 / 3) + c_2 * x + c_3"
wneuper@2917
   135
then () else raise error "integrate.sml: diff.behav. in integration";
wneuper@2901
   136
wneuper@2901
   137
wneuper@2863
   138
"----------- check probem type -----------------------------------";
wneuper@2863
   139
"----------- check probem type -----------------------------------";
wneuper@2863
   140
"----------- check probem type -----------------------------------";
wneuper@2863
   141
val model = {Given =["functionTerm f_", "integrateBy v_"],
wneuper@2863
   142
	   Where =[],
wneuper@2863
   143
	   Find  =["antiDerivative F_"],
wneuper@2863
   144
	   With  =[],
wneuper@2863
   145
	   Relate=[]}:string ppc;
wneuper@2863
   146
val chkmodel = ((map (the o (parse Integrate.thy))) o ppc2list) model;
wneuper@2863
   147
val t1 = (term_of o hd) chkmodel;
wneuper@2863
   148
val t2 = (term_of o hd o tl) chkmodel;
wneuper@2863
   149
val t3 = (term_of o hd o tl o tl) chkmodel;
wneuper@2863
   150
case t3 of Const ("Integrate.antiDerivative", _) $ _ => ()
wneuper@2863
   151
	 | _ => raise error "integrate.sml: Integrate.antiDerivative ???";
wneuper@2863
   152
show_ptyps();
wneuper@2863
   153
val pbl = get_pbt ["integrate","function"];
wneuper@2863
   154
case #cas pbl of Some (Const ("Integrate.Integrate",_) $ _) => ()
wneuper@2863
   155
	 | _ => raise error "integrate.sml: Integrate.Integrate ???";
wneuper@2863
   156
wneuper@2918
   157
wneuper@2918
   158
"----------- check Scripts ---------------------------------------";
wneuper@2918
   159
"----------- check Scripts ---------------------------------------";
wneuper@2918
   160
"----------- check Scripts ---------------------------------------";
wneuper@2863
   161
val str = 
wneuper@2917
   162
"Script IntegrationScript (f_::real) (v_::real) =               \
wneuper@2918
   163
\  (let t_ = Integral f_ D v_                                 \
wneuper@2918
   164
\   in (Rewrite_Set_Inst [(bdv,v_)] integration False) (t_::real))";
wneuper@2863
   165
val sc = ((inst_abs thy) o term_of o the o (parse thy)) str;
wneuper@2918
   166
atomty thy sc;
wneuper@2917
   167
wneuper@2917
   168
val str = 
wneuper@2918
   169
"Script NamedIntegrationScript (f_::real) (v_::real) (F_::real) = \
wneuper@2918
   170
\  (let t_ = (F_ = Integral f_ D v_)                                 \
wneuper@2918
   171
\   in (Rewrite_Set_Inst [(bdv,v_)] integration False) t_)";
wneuper@2917
   172
val sc = ((inst_abs thy) o term_of o the o (parse thy)) str;
wneuper@2918
   173
atomty thy sc;
wneuper@2918
   174
show_mets();
wneuper@2917
   175
wneuper@2917
   176
wneuper@2872
   177
"----------- me method [Diff,integration] ---------------------";
wneuper@2872
   178
"----------- me method [Diff,integration] ---------------------";
wneuper@2872
   179
"----------- me method [Diff,integration] ---------------------";
wneuper@2872
   180
val fmz = ["functionTerm (x^^^2 + 1)", 
wneuper@2872
   181
	   "integrateBy x","antiDerivative FF"];
wneuper@2872
   182
val (dI',pI',mI') =
wneuper@2872
   183
  ("Integrate.thy",["integrate","function"],
wneuper@2872
   184
   ["Diff","integration"]);
wneuper@2872
   185
val p = e_pos'; val c = []; 
wneuper@2872
   186
val (p,_,f,nxt,_,pt) = CalcTreeTEST [(fmz, (dI',pI',mI'))];
wneuper@2872
   187
val (p,_,f,nxt,_,pt) = me nxt p c pt;
wneuper@2872
   188
val (p,_,f,nxt,_,pt) = me nxt p c pt;
wneuper@2872
   189
val (p,_,f,nxt,_,pt) = me nxt p c pt;
wneuper@2872
   190
val (p,_,f,nxt,_,pt) = me nxt p c pt;
wneuper@2872
   191
val (p,_,f,nxt,_,pt) = me nxt p c pt;
wneuper@2872
   192
val (p,_,f,nxt,_,pt) = me nxt p c pt;
wneuper@2918
   193
val (p,_,f,nxt,_,pt) = me nxt p c pt;
wneuper@2872
   194
val (p,_,f,nxt,_,pt) = me nxt p c pt;(*---> Empty_Tac*)
wneuper@2872
   195
wneuper@2872
   196
wneuper@2872
   197