src/smltest/IsacKnowledge/integrate.sml
author wneuper
Sun, 14 Aug 2005 13:42:54 +0200
changeset 2858 d81d7c014996
child 2859 8b31b8b56cd3
permissions -rw-r--r--
added integration
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@2858
     8
wneuper@2858
     9
"-----------------------------------------------------------------";
wneuper@2858
    10
"table of contents -----------------------------------------------";
wneuper@2858
    11
"-----------------------------------------------------------------";
wneuper@2858
    12
"----------- parsing ---------------------------------------------";
wneuper@2858
    13
"----------- set up rewriting ------------------------------------";
wneuper@2858
    14
"----------- integrate by rewriting ------------------------------";
wneuper@2858
    15
"----------- set up ruleset --------------------------------------";
wneuper@2858
    16
"----------- integrate by ruleset --------------------------------";
wneuper@2858
    17
"-----------------------------------------------------------------";
wneuper@2858
    18
"-----------------------------------------------------------------";
wneuper@2858
    19
"-----------------------------------------------------------------";
wneuper@2858
    20
wneuper@2858
    21
"----------- parsing ---------------------------------------------";
wneuper@2858
    22
"----------- parsing ---------------------------------------------";
wneuper@2858
    23
"----------- parsing ---------------------------------------------";
wneuper@2858
    24
fun str2t thy str = (term_of o the o (parse thy )) str;
wneuper@2858
    25
fun term2s thy t = Sign.string_of_term (sign_of thy) t;
wneuper@2858
    26
    
wneuper@2858
    27
val t = str2t Integrate.thy "Integral x D x";
wneuper@2858
    28
val t = str2t Integrate.thy "Integral x^^^2 D x";
wneuper@2858
    29
atomty thy t;
wneuper@2858
    30
wneuper@2858
    31
"----------- set up rewriting ------------------------------------";
wneuper@2858
    32
"----------- set up rewriting ------------------------------------";
wneuper@2858
    33
"----------- set up rewriting ------------------------------------";
wneuper@2858
    34
val conditions_in_integration_rules = 
wneuper@2858
    35
    prep_rls (Rls {id="conditions_in_integration_rules", preconds = [], 
wneuper@2858
    36
		   rew_ord = ("termlessI",termlessI), 
wneuper@2858
    37
		   erls = Erls, 
wneuper@2858
    38
		   srls = Erls, calc = [],
wneuper@2858
    39
		   rules = [Calc ("Atools.occurs'_in", 
wneuper@2858
    40
				  eval_occurs_in "#occurs_in_"),
wneuper@2858
    41
			    Thm ("not_true",num_str not_true),
wneuper@2858
    42
			    Thm ("not_false",not_false)
wneuper@2858
    43
			    ],
wneuper@2858
    44
		   scr = EmptyScr});
wneuper@2858
    45
ruleset' := overwritel (!ruleset', [("conditions_in_integration_rules", 
wneuper@2858
    46
				     conditions_in_integration_rules)]);
wneuper@2858
    47
    
wneuper@2858
    48
"----------- integrate by rewriting ------------------------------";
wneuper@2858
    49
"----------- integrate by rewriting ------------------------------";
wneuper@2858
    50
"----------- integrate by rewriting ------------------------------";
wneuper@2858
    51
fun rewrit subs thm str = 
wneuper@2858
    52
    fst (the (rewrite_inst "Integrate.thy" "tless_true" 
wneuper@2858
    53
			   "conditions_in_integration_rules" 
wneuper@2858
    54
			   true subs thm str));
wneuper@2858
    55
val thm = ("integral_const","");
wneuper@2858
    56
val str = rewrit [("bdv","x::real")] thm "Integral 1 D x";
wneuper@2858
    57
val str = rewrit [("bdv","x::real")] thm "Integral M'/EJ D x";
wneuper@2858
    58
val str = (rewrit [("bdv","x::real")] thm "Integral x D x") 
wneuper@2858
    59
    handle OPTION => "no rewrite -- OK";
wneuper@2858
    60
wneuper@2858
    61
val thm = ("integral_var","");
wneuper@2858
    62
val str = rewrit [("bdv","x::real")] thm "Integral x D x";
wneuper@2858
    63
val str = (rewrit [("bdv","x::real")] thm "Integral a D x")
wneuper@2858
    64
    handle OPTION => "no rewrite -- OK";
wneuper@2858
    65
wneuper@2858
    66
val thm = ("integral_add","");
wneuper@2858
    67
val str = rewrit [("bdv","x::real")] thm "Integral x + 1 D x";
wneuper@2858
    68
wneuper@2858
    69
val thm = ("integral_mult","");
wneuper@2858
    70
val str = rewrit [("bdv","x::real")] thm "Integral M'/EJ * x^^^3 D x";
wneuper@2858
    71
val str = (rewrit [("bdv","x::real")] thm "Integral x * x D x")
wneuper@2858
    72
    handle OPTION => "no rewrite -- OK";
wneuper@2858
    73
wneuper@2858
    74
val thm = ("integral_pow","");
wneuper@2858
    75
val str = rewrit [("bdv","x::real")] thm "Integral x^^^3 D x";
wneuper@2858
    76
wneuper@2858
    77
"----------- set up ruleset --------------------------------------";
wneuper@2858
    78
"----------- set up ruleset --------------------------------------";
wneuper@2858
    79
"----------- set up ruleset --------------------------------------";
wneuper@2858
    80
val integration_rules = 
wneuper@2858
    81
    prep_rls (Rls {id="integration_rules", preconds = [], 
wneuper@2858
    82
		   rew_ord = ("termlessI",termlessI), 
wneuper@2858
    83
		   erls = conditions_in_integration_rules, 
wneuper@2858
    84
		   srls = Erls, calc = [],
wneuper@2858
    85
		   rules = [
wneuper@2858
    86
			    Thm ("integral_const",num_str integral_const),
wneuper@2858
    87
			    Thm ("integral_var",num_str integral_var),
wneuper@2858
    88
			    Thm ("integral_add",num_str integral_add),
wneuper@2858
    89
			    Thm ("integral_mult",num_str integral_mult),
wneuper@2858
    90
			    Thm ("integral_pow",num_str integral_pow),
wneuper@2858
    91
			    Rls_ make_polynomial
wneuper@2858
    92
			    ],
wneuper@2858
    93
		   scr = EmptyScr});
wneuper@2858
    94
ruleset' := overwritel (!ruleset', [("integration_rules", integration_rules)]);
wneuper@2858
    95
wneuper@2858
    96
"----------- integrate by ruleset --------------------------------";
wneuper@2858
    97
"----------- integrate by ruleset --------------------------------";
wneuper@2858
    98
"----------- integrate by ruleset --------------------------------";
wneuper@2858
    99
fun rewrite_se subs rls str = 
wneuper@2858
   100
    fst (the (rewrite_set_inst "Integrate.thy" true subs rls str));
wneuper@2858
   101
val subs = [("bdv","x::real")];
wneuper@2858
   102
val rls = "integration_rules";
wneuper@2858
   103
val str = rewrite_se subs rls "Integral 1 D x";