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 |
|