1 (* chapter 'Biegelinie' from the textbook:
2 Timischl, Kaiser. Ingenieur-Mathematik 3. Wien 1999. p.268-271.
3 authors: Walther Neuper 2005
4 (c) due to copyright terms
6 use"Knowledge/Biegelinie.ML";
10 remove_thy"Biegelinie";
11 use_thy"Knowledge/Isac";
14 (** interface isabelle -- isac **)
16 theory' := overwritel (!theory', [("Biegelinie.thy",Biegelinie.thy)]);
18 (** theory elements **)
20 store_isa ["IsacKnowledge"] [];
21 store_thy Biegelinie.thy
22 ["Walther Neuper 2005 supported by a grant from NMI Austria"];
23 store_isa ["IsacKnowledge", theory2thyID Biegelinie.thy, "Theorems"]
24 ["Walther Neuper 2005 supported by a grant from NMI Austria"];
25 store_thm Biegelinie.thy ("Belastung_Querkraft", Belastung_Querkraft)
26 ["Walther Neuper 2005 supported by a grant from NMI Austria"];
27 store_thm Biegelinie.thy ("Moment_Neigung", Moment_Neigung)
28 ["Walther Neuper 2005 supported by a grant from NMI Austria"];
29 store_thm Biegelinie.thy ("Moment_Querkraft", Moment_Querkraft)
30 ["Walther Neuper 2005 supported by a grant from NMI Austria"];
31 store_thm Biegelinie.thy ("Neigung_Moment", Neigung_Moment)
32 ["Walther Neuper 2005 supported by a grant from NMI Austria"];
33 store_thm Biegelinie.thy ("Querkraft_Belastung", Querkraft_Belastung)
34 ["Walther Neuper 2005 supported by a grant from NMI Austria"];
35 store_thm Biegelinie.thy ("Querkraft_Moment", Querkraft_Moment)
36 ["Walther Neuper 2005 supported by a grant from NMI Austria"];
37 store_thm Biegelinie.thy ("make_fun_explicit", make_fun_explicit)
38 ["Walther Neuper 2005 supported by a grant from NMI Austria"];
44 (prep_pbt Biegelinie.thy "pbl_bieg" [] e_pblID
46 [("#Given" ,["Traegerlaenge l_", "Streckenlast q__"]),
47 (*("#Where",["0 < l_"]), ...wait for < and handling Arbfix*)
48 ("#Find" ,["Biegelinie b_"]),
49 ("#Relate",["Randbedingungen rb_"])
51 append_rls "e_rls" e_rls [],
53 [["IntegrierenUndKonstanteBestimmen2"]]));
56 (prep_pbt Biegelinie.thy "pbl_bieg_mom" [] e_pblID
57 (["MomentBestimmte","Biegelinien"],
58 [("#Given" ,["Traegerlaenge l_", "Streckenlast q__"]),
59 (*("#Where",["0 < l_"]), ...wait for < and handling Arbfix*)
60 ("#Find" ,["Biegelinie b_"]),
61 ("#Relate",["RandbedingungenBiegung rb_","RandbedingungenMoment rm_"])
63 append_rls "e_rls" e_rls [],
65 [["IntegrierenUndKonstanteBestimmen"]]));
68 (prep_pbt Biegelinie.thy "pbl_bieg_momg" [] e_pblID
69 (["MomentGegebene","Biegelinien"],
71 append_rls "e_rls" e_rls [],
73 [["IntegrierenUndKonstanteBestimmen","2xIntegrieren"]]));
76 (prep_pbt Biegelinie.thy "pbl_bieg_einf" [] e_pblID
77 (["einfache","Biegelinien"],
79 append_rls "e_rls" e_rls [],
81 [["IntegrierenUndKonstanteBestimmen","4x4System"]]));
84 (prep_pbt Biegelinie.thy "pbl_bieg_momquer" [] e_pblID
85 (["QuerkraftUndMomentBestimmte","Biegelinien"],
87 append_rls "e_rls" e_rls [],
89 [["IntegrierenUndKonstanteBestimmen","1xIntegrieren"]]));
92 (prep_pbt Biegelinie.thy "pbl_bieg_vonq" [] e_pblID
93 (["vonBelastungZu","Biegelinien"],
94 [("#Given" ,["Streckenlast q__","FunktionsVariable v_"]),
95 ("#Find" ,["Funktionen funs___"])],
96 append_rls "e_rls" e_rls [],
98 [["Biegelinien","ausBelastung"]]));
101 (prep_pbt Biegelinie.thy "pbl_bieg_randbed" [] e_pblID
102 (["setzeRandbedingungen","Biegelinien"],
103 [("#Given" ,["Funktionen funs_","Randbedingungen rb_"]),
104 ("#Find" ,["Gleichungen equs___"])],
105 append_rls "e_rls" e_rls [],
107 [["Biegelinien","setzeRandbedingungenEin"]]));
110 (prep_pbt Biegelinie.thy "pbl_equ_fromfun" [] e_pblID
111 (["makeFunctionTo","equation"],
112 [("#Given" ,["functionEq fun_","substitution sub_"]),
113 ("#Find" ,["equality equ___"])],
114 append_rls "e_rls" e_rls [],
116 [["Equation","fromFunction"]]));
122 val srls = Rls {id="srls_IntegrierenUnd..",
124 rew_ord = ("termlessI",termlessI),
125 erls = append_rls "erls_in_srls_IntegrierenUnd.." e_rls
126 [(*for asm in nth_Cons_ ...*)
127 Calc ("op <",eval_equ "#less_"),
128 (*2nd nth_Cons_ pushes n+-1 into asms*)
129 Calc("op +", eval_binop "#add_")
131 srls = Erls, calc = [],
132 rules = [Thm ("nth_Cons_",num_str nth_Cons_),
133 Calc("op +", eval_binop "#add_"),
134 Thm ("nth_Nil_",num_str nth_Nil_),
135 Calc("Tools.lhs", eval_lhs"eval_lhs_"),
136 Calc("Tools.rhs", eval_rhs"eval_rhs_"),
137 Calc("Atools.argument'_in",
138 eval_argument_in "Atools.argument'_in")
143 Rls {id="srls_IntegrierenUnd..",
145 rew_ord = ("termlessI",termlessI),
146 erls = append_rls "erls_in_srls_IntegrierenUnd.." e_rls
147 [(*for asm in nth_Cons_ ...*)
148 Calc ("op <",eval_equ "#less_"),
149 (*2nd nth_Cons_ pushes n+-1 into asms*)
150 Calc("op +", eval_binop "#add_")
152 srls = Erls, calc = [],
153 rules = [Thm ("nth_Cons_",num_str nth_Cons_),
154 Calc("op +", eval_binop "#add_"),
155 Thm ("nth_Nil_", num_str nth_Nil_),
156 Calc("Tools.lhs", eval_lhs "eval_lhs_"),
157 Calc("Atools.filter'_sameFunId",
158 eval_filter_sameFunId "Atools.filter'_sameFunId"),
159 (*WN070514 just for smltest/../biegelinie.sml ...*)
160 Calc("Atools.sameFunId", eval_sameFunId "Atools.sameFunId"),
161 Thm ("filter_Cons", num_str filter_Cons),
162 Thm ("filter_Nil", num_str filter_Nil),
163 Thm ("if_True", num_str if_True),
164 Thm ("if_False", num_str if_False),
165 Thm ("hd_thm", num_str hd_thm)
168 (*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*)
169 (* use"Knowledge/Biegelinie.ML";
173 (prep_met Biegelinie.thy "met_biege" [] e_metID
174 (["IntegrierenUndKonstanteBestimmen"],
175 [("#Given" ,["Traegerlaenge l_", "Streckenlast q__",
176 "FunktionsVariable v_"]),
177 (*("#Where",["0 < l_"]), ...wait for < and handling Arbfix*)
178 ("#Find" ,["Biegelinie b_"]),
179 ("#Relate",["RandbedingungenBiegung rb_",
180 "RandbedingungenMoment rm_"])
182 {rew_ord'="tless_true",
183 rls' = append_rls "erls_IntegrierenUndK.." e_rls
184 [Calc ("Atools.ident",eval_ident "#ident_"),
185 Thm ("not_true",num_str not_true),
186 Thm ("not_false",num_str not_false)],
187 calc = [], srls = srls, prls = Erls,
188 crls = Atools_erls, nrls = Erls},
189 "Script BiegelinieScript \
190 \(l_::real) (q__::real) (v_::real) (b_::real=>real) \
191 \(rb_::bool list) (rm_::bool list) = \
192 \ (let q___ = Take (q_ v_ = q__); \
193 \ q___ = ((Rewrite sym_real_minus_eq_cancel True) @@ \
194 \ (Rewrite Belastung_Querkraft True)) q___; \
196 \ (SubProblem (Biegelinie_,[named,integrate,function], \
197 \ [diff,integration,named]) \
198 \ [real_ (rhs q___), real_ v_, real_real_ Q]); \
199 \ Q__ = Rewrite Querkraft_Moment True Q__; \
201 \ (SubProblem (Biegelinie_,[named,integrate,function], \
202 \ [diff,integration,named]) \
203 \ [real_ (rhs Q__), real_ v_, real_real_ M_b]); \
204 \ e1__ = nth_ 1 rm_; \
205 \ (x1__::real) = argument_in (lhs e1__); \
206 \ (M1__::bool) = (Substitute [v_ = x1__]) M__; \
207 \ M1__ = (Substitute [e1__]) M1__ ; \
208 \ M2__ = Take M__; "^
209 (*without this Take 'Substitute [v_ = x2__]' takes _last formula from ctree_*)
210 " e2__ = nth_ 2 rm_; \
211 \ (x2__::real) = argument_in (lhs e2__); \
212 \ (M2__::bool) = ((Substitute [v_ = x2__]) @@ \
213 \ (Substitute [e2__])) M2__; \
214 \ (c_1_2__::bool list) = \
215 \ (SubProblem (Biegelinie_,[linear,system],[no_met]) \
216 \ [booll_ [M1__, M2__], reall [c,c_2]]); \
218 \ M__ = ((Substitute c_1_2__) @@ \
219 \ (Try (Rewrite_Set_Inst [(bdv_1, c),(bdv_2, c_2)]\
220 \ simplify_System False)) @@ \
221 \ (Rewrite Moment_Neigung False) @@ \
222 \ (Rewrite make_fun_explicit False)) M__; "^
223 (*----------------------- and the same once more ------------------------*)
225 \ (SubProblem (Biegelinie_,[named,integrate,function], \
226 \ [diff,integration,named]) \
227 \ [real_ (rhs M__), real_ v_, real_real_ y']); \
229 \ (SubProblem (Biegelinie_,[named,integrate,function], \
230 \ [diff,integration,named]) \
231 \ [real_ (rhs N__), real_ v_, real_real_ y]); \
232 \ e1__ = nth_ 1 rb_; \
233 \ (x1__::real) = argument_in (lhs e1__); \
234 \ (B1__::bool) = (Substitute [v_ = x1__]) B__; \
235 \ B1__ = (Substitute [e1__]) B1__ ; \
237 \ e2__ = nth_ 2 rb_; \
238 \ (x2__::real) = argument_in (lhs e2__); \
239 \ (B2__::bool) = ((Substitute [v_ = x2__]) @@ \
240 \ (Substitute [e2__])) B2__; \
241 \ (c_1_2__::bool list) = \
242 \ (SubProblem (Biegelinie_,[linear,system],[no_met]) \
243 \ [booll_ [B1__, B2__], reall [c,c_2]]); \
245 \ B__ = ((Substitute c_1_2__) @@ \
246 \ (Rewrite_Set_Inst [(bdv, x)] make_ratpoly_in False)) B__ \
251 (prep_met Biegelinie.thy "met_biege_2" [] e_metID
252 (["IntegrierenUndKonstanteBestimmen2"],
253 [("#Given" ,["Traegerlaenge l_", "Streckenlast q__",
254 "FunktionsVariable v_"]),
255 (*("#Where",["0 < l_"]), ...wait for < and handling Arbfix*)
256 ("#Find" ,["Biegelinie b_"]),
257 ("#Relate",["Randbedingungen rb_"])
259 {rew_ord'="tless_true",
260 rls' = append_rls "erls_IntegrierenUndK.." e_rls
261 [Calc ("Atools.ident",eval_ident "#ident_"),
262 Thm ("not_true",num_str not_true),
263 Thm ("not_false",num_str not_false)],
265 srls = append_rls "erls_IntegrierenUndK.." e_rls
266 [Calc("Tools.rhs", eval_rhs"eval_rhs_"),
267 Calc ("Atools.ident",eval_ident "#ident_"),
268 Thm ("last_thmI",num_str last_thmI),
269 Thm ("if_True",num_str if_True),
270 Thm ("if_False",num_str if_False)
272 prls = Erls, crls = Atools_erls, nrls = Erls},
273 "Script Biegelinie2Script \
274 \(l_::real) (q__::real) (v_::real) (b_::real=>real) (rb_::bool list) = \
276 \ (funs_:: bool list) = \
277 \ (SubProblem (Biegelinie_,[vonBelastungZu,Biegelinien], \
278 \ [Biegelinien,ausBelastung]) \
279 \ [real_ q__, real_ v_]); \
280 \ (equs_::bool list) = \
281 \ (SubProblem (Biegelinie_,[setzeRandbedingungen,Biegelinien],\
282 \ [Biegelinien,setzeRandbedingungenEin]) \
283 \ [booll_ funs_, booll_ rb_]); \
284 \ (cons_::bool list) = \
285 \ (SubProblem (Biegelinie_,[linear,system],[no_met]) \
286 \ [booll_ equs_, reall [c,c_2,c_3,c_4]]); \
287 \ B_ = Take (lastI funs_); \
288 \ B_ = ((Substitute cons_) @@ \
289 \ (Rewrite_Set_Inst [(bdv, v_)] make_ratpoly_in False)) B_ \
294 (prep_met Biegelinie.thy "met_biege_intconst_2" [] e_metID
295 (["IntegrierenUndKonstanteBestimmen","2xIntegrieren"],
297 {rew_ord'="tless_true", rls'=Erls, calc = [],
300 crls = Atools_erls, nrls = e_rls},
305 (prep_met Biegelinie.thy "met_biege_intconst_4" [] e_metID
306 (["IntegrierenUndKonstanteBestimmen","4x4System"],
308 {rew_ord'="tless_true", rls'=Erls, calc = [],
311 crls = Atools_erls, nrls = e_rls},
316 (prep_met Biegelinie.thy "met_biege_intconst_1" [] e_metID
317 (["IntegrierenUndKonstanteBestimmen","1xIntegrieren"],
319 {rew_ord'="tless_true", rls'=Erls, calc = [],
322 crls = Atools_erls, nrls = e_rls},
327 (prep_met Biegelinie.thy "met_biege2" [] e_metID
330 {rew_ord'="tless_true", rls'=Erls, calc = [],
333 crls = Atools_erls, nrls = e_rls},
338 (prep_met Biegelinie.thy "met_biege_ausbelast" [] e_metID
339 (["Biegelinien","ausBelastung"],
340 [("#Given" ,["Streckenlast q__","FunktionsVariable v_"]),
341 ("#Find" ,["Funktionen funs_"])],
342 {rew_ord'="tless_true",
343 rls' = append_rls "erls_ausBelastung" e_rls
344 [Calc ("Atools.ident",eval_ident "#ident_"),
345 Thm ("not_true",num_str not_true),
346 Thm ("not_false",num_str not_false)],
348 srls = append_rls "srls_ausBelastung" e_rls
349 [Calc("Tools.rhs", eval_rhs"eval_rhs_")],
350 prls = e_rls, crls = Atools_erls, nrls = e_rls},
351 "Script Belastung2BiegelScript (q__::real) (v_::real) = \
352 \ (let q___ = Take (q_ v_ = q__); \
353 \ q___ = ((Rewrite sym_real_minus_eq_cancel True) @@ \
354 \ (Rewrite Belastung_Querkraft True)) q___; \
356 \ (SubProblem (Biegelinie_,[named,integrate,function], \
357 \ [diff,integration,named]) \
358 \ [real_ (rhs q___), real_ v_, real_real_ Q]); \
359 \ M__ = Rewrite Querkraft_Moment True Q__; \
361 \ (SubProblem (Biegelinie_,[named,integrate,function], \
362 \ [diff,integration,named]) \
363 \ [real_ (rhs M__), real_ v_, real_real_ M_b]); \
364 \ N__ = ((Rewrite Moment_Neigung False) @@ \
365 \ (Rewrite make_fun_explicit False)) M__; \
367 \ (SubProblem (Biegelinie_,[named,integrate,function], \
368 \ [diff,integration,named]) \
369 \ [real_ (rhs N__), real_ v_, real_real_ y']); \
371 \ (SubProblem (Biegelinie_,[named,integrate,function], \
372 \ [diff,integration,named]) \
373 \ [real_ (rhs N__), real_ v_, real_real_ y]) \
374 \ in [Q__, M__, N__, B__])"
378 (prep_met Biegelinie.thy "met_biege_setzrand" [] e_metID
379 (["Biegelinien","setzeRandbedingungenEin"],
380 [("#Given" ,["Funktionen funs_","Randbedingungen rb_"]),
381 ("#Find" ,["Gleichungen equs___"])],
382 {rew_ord'="tless_true", rls'=Erls, calc = [],
385 crls = Atools_erls, nrls = e_rls},
386 "Script SetzeRandbedScript (funs_::bool list) (rb_::bool list) = \
387 \ (let b1_ = nth_ 1 rb_; \
388 \ fs_ = filter_sameFunId (lhs b1_) funs_; \
390 \ (SubProblem (Biegelinie_,[makeFunctionTo,equation],\
391 \ [Equation,fromFunction]) \
392 \ [bool_ (hd fs_), bool_ b1_]); \
393 \ b2_ = nth_ 2 rb_; \
394 \ fs_ = filter_sameFunId (lhs b2_) funs_; \
396 \ (SubProblem (Biegelinie_,[makeFunctionTo,equation],\
397 \ [Equation,fromFunction]) \
398 \ [bool_ (hd fs_), bool_ b2_]); \
399 \ b3_ = nth_ 3 rb_; \
400 \ fs_ = filter_sameFunId (lhs b3_) funs_; \
402 \ (SubProblem (Biegelinie_,[makeFunctionTo,equation],\
403 \ [Equation,fromFunction]) \
404 \ [bool_ (hd fs_), bool_ b3_]); \
405 \ b4_ = nth_ 4 rb_; \
406 \ fs_ = filter_sameFunId (lhs b4_) funs_; \
408 \ (SubProblem (Biegelinie_,[makeFunctionTo,equation],\
409 \ [Equation,fromFunction]) \
410 \ [bool_ (hd fs_), bool_ b4_]) \
411 \ in [e1_,e2_,e3_,e4_])"
412 (* filter requires more than 1 sec !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
413 "Script SetzeRandbedScript (funs_::bool list) (rb_::bool list) = \
414 \ (let b1_ = nth_ 1 rb_; \
415 \ fs_ = filter (sameFunId (lhs b1_)) funs_; \
417 \ (SubProblem (Biegelinie_,[makeFunctionTo,equation],\
418 \ [Equation,fromFunction]) \
419 \ [bool_ (hd fs_), bool_ b1_]); \
420 \ b2_ = nth_ 2 rb_; \
421 \ fs_ = filter (sameFunId (lhs b2_)) funs_; \
423 \ (SubProblem (Biegelinie_,[makeFunctionTo,equation],\
424 \ [Equation,fromFunction]) \
425 \ [bool_ (hd fs_), bool_ b2_]); \
426 \ b3_ = nth_ 3 rb_; \
427 \ fs_ = filter (sameFunId (lhs b3_)) funs_; \
429 \ (SubProblem (Biegelinie_,[makeFunctionTo,equation],\
430 \ [Equation,fromFunction]) \
431 \ [bool_ (hd fs_), bool_ b3_]); \
432 \ b4_ = nth_ 4 rb_; \
433 \ fs_ = filter (sameFunId (lhs b4_)) funs_; \
435 \ (SubProblem (Biegelinie_,[makeFunctionTo,equation],\
436 \ [Equation,fromFunction]) \
437 \ [bool_ (hd fs_), bool_ b4_]) \
438 \ in [e1_,e2_,e3_,e4_])"*)
442 (prep_met Biegelinie.thy "met_equ_fromfun" [] e_metID
443 (["Equation","fromFunction"],
444 [("#Given" ,["functionEq fun_","substitution sub_"]),
445 ("#Find" ,["equality equ___"])],
446 {rew_ord'="tless_true", rls'=Erls, calc = [],
447 srls = append_rls "srls_in_EquationfromFunc" e_rls
448 [Calc("Tools.lhs", eval_lhs"eval_lhs_"),
449 Calc("Atools.argument'_in",
451 "Atools.argument'_in")],
453 crls = Atools_erls, nrls = e_rls},
454 (*(M_b x = c_2 + c * x + -1 * q_0 / 2 * x ^^^ 2) (M_b L = 0) -->
455 0 = c_2 + c * L + -1 * q_0 / 2 * L ^^^ 2*)
456 "Script Function2Equality (fun_::bool) (sub_::bool) =\
457 \ (let fun_ = Take fun_; \
458 \ bdv_ = argument_in (lhs fun_); \
459 \ val_ = argument_in (lhs sub_); \
460 \ equ_ = (Substitute [bdv_ = val_]) fun_; \
461 \ equ_ = (Substitute [sub_]) fun_ \
462 \ in (Rewrite_Set norm_Rational False) equ_) "
467 (* use"Knowledge/Biegelinie.ML";