1 (* chapter 'Biegelinie' from the textbook:
2 Timischl, Kaiser. Ingenieur-Mathematik 3. Wien 1999. p.268-271.
5 (c) due to copyright terms
8 theory Biegelinie imports Integrate Equation EqSystem begin
12 q_ :: real => real ("q'_") (* Streckenlast *)
13 Q :: real => real (* Querkraft *)
14 Q' :: real => real (* Ableitung der Querkraft *)
15 M'_b :: real => real ("M'_b") (* Biegemoment *)
16 M'_b' :: real => real ("M'_b'") (* Ableitung des Biegemoments *)
17 y'' :: real => real (* 2.Ableitung der Biegeline *)
18 y' :: real => real (* Neigung der Biegeline *)
19 (*y :: real => real (* Biegeline *)*)
20 EI :: real (* Biegesteifigkeit *)
22 (*new Descriptions in the related problems*)
23 Traegerlaenge :: real => una
24 Streckenlast :: real => una
25 BiegemomentVerlauf :: bool => una
26 Biegelinie :: (real => real) => una
27 Randbedingungen :: bool list => una
28 RandbedingungenBiegung :: bool list => una
29 RandbedingungenNeigung :: bool list => una
30 RandbedingungenMoment :: bool list => una
31 RandbedingungenQuerkraft :: bool list => una
32 FunktionsVariable :: real => una
33 Funktionen :: bool list => una
34 Gleichungen :: bool list => una
37 Biegelinie2Script :: "[real,real,real,real=>real,bool list,
39 ("((Script Biegelinie2Script (_ _ _ _ _ =))// (_))" 9)
40 BiegelinieScript :: "[real,real,real,real=>real,bool list,bool list,
42 ("((Script BiegelinieScript (_ _ _ _ _ _ =))// (_))" 9)
43 Biege2xIntegrierenScript :: "[real,real,real,bool,real=>real,bool list,
45 ("((Script Biege2xIntegrierenScript (_ _ _ _ _ _ =))// (_))" 9)
46 Biege4x4SystemScript :: "[real,real,real,real=>real,bool list,
48 ("((Script Biege4x4SystemScript (_ _ _ _ _ =))// (_))" 9)
49 Biege1xIntegrierenScript ::
50 "[real,real,real,real=>real,bool list,bool list,bool list,
52 ("((Script Biege1xIntegrierenScript (_ _ _ _ _ _ _ =))// (_))" 9)
53 Belastung2BiegelScript :: "[real,real,
54 bool list] => bool list"
55 ("((Script Belastung2BiegelScript (_ _ =))// (_))" 9)
56 SetzeRandbedScript :: "[bool list,bool list,
57 bool list] => bool list"
58 ("((Script SetzeRandbedScript (_ _ =))// (_))" 9)
62 Querkraft_Belastung: "Q' x = -q_ x"
63 Belastung_Querkraft: "-q_ x = Q' x"
65 Moment_Querkraft: "M_b' x = Q x"
66 Querkraft_Moment: "Q x = M_b' x"
68 Neigung_Moment: "y'' x = -M_b x/ EI"
69 Moment_Neigung: "M_b x = -EI * y'' x"
71 (*according to rls 'simplify_Integral': .. = 1/a * .. instead .. = ../ a*)
72 make_fun_explicit: "Not (a =!= 0) ==> (a * (f x) = b) = (f x = 1/a * b)"
77 (** theory elements for transfer into html **)
79 store_isa ["IsacKnowledge"] [];
81 ["Walther Neuper 2005 supported by a grant from NMI Austria"];
82 store_isa ["IsacKnowledge", theory2thyID thy, "Theorems"]
83 ["Walther Neuper 2005 supported by a grant from NMI Austria"];
84 store_thm thy ("Belastung_Querkraft", Belastung_Querkraft)
85 ["Walther Neuper 2005 supported by a grant from NMI Austria"];
86 store_thm thy ("Moment_Neigung", Moment_Neigung)
87 ["Walther Neuper 2005 supported by a grant from NMI Austria"];
88 store_thm thy ("Moment_Querkraft", Moment_Querkraft)
89 ["Walther Neuper 2005 supported by a grant from NMI Austria"];
90 store_thm thy ("Neigung_Moment", Neigung_Moment)
91 ["Walther Neuper 2005 supported by a grant from NMI Austria"];
92 store_thm thy ("Querkraft_Belastung", Querkraft_Belastung)
93 ["Walther Neuper 2005 supported by a grant from NMI Austria"];
94 store_thm thy ("Querkraft_Moment", Querkraft_Moment)
95 ["Walther Neuper 2005 supported by a grant from NMI Austria"];
96 store_thm thy ("make_fun_explicit", make_fun_explicit)
97 ["Walther Neuper 2005 supported by a grant from NMI Austria"];
103 (prep_pbt thy "pbl_bieg" [] e_pblID
105 [("#Given" ,["Traegerlaenge l_", "Streckenlast q__"]),
106 (*("#Where",["0 < l_"]), ...wait for < and handling Arbfix*)
107 ("#Find" ,["Biegelinie b_"]),
108 ("#Relate",["Randbedingungen rb_"])
110 append_rls "e_rls" e_rls [],
112 [["IntegrierenUndKonstanteBestimmen2"]]));
115 (prep_pbt thy "pbl_bieg_mom" [] e_pblID
116 (["MomentBestimmte","Biegelinien"],
117 [("#Given" ,["Traegerlaenge l_", "Streckenlast q__"]),
118 (*("#Where",["0 < l_"]), ...wait for < and handling Arbfix*)
119 ("#Find" ,["Biegelinie b_"]),
120 ("#Relate",["RandbedingungenBiegung rb_","RandbedingungenMoment rm_"])
122 append_rls "e_rls" e_rls [],
124 [["IntegrierenUndKonstanteBestimmen"]]));
127 (prep_pbt thy "pbl_bieg_momg" [] e_pblID
128 (["MomentGegebene","Biegelinien"],
130 append_rls "e_rls" e_rls [],
132 [["IntegrierenUndKonstanteBestimmen","2xIntegrieren"]]));
135 (prep_pbt thy "pbl_bieg_einf" [] e_pblID
136 (["einfache","Biegelinien"],
138 append_rls "e_rls" e_rls [],
140 [["IntegrierenUndKonstanteBestimmen","4x4System"]]));
143 (prep_pbt thy "pbl_bieg_momquer" [] e_pblID
144 (["QuerkraftUndMomentBestimmte","Biegelinien"],
146 append_rls "e_rls" e_rls [],
148 [["IntegrierenUndKonstanteBestimmen","1xIntegrieren"]]));
151 (prep_pbt thy "pbl_bieg_vonq" [] e_pblID
152 (["vonBelastungZu","Biegelinien"],
153 [("#Given" ,["Streckenlast q__","FunktionsVariable v_v"]),
154 ("#Find" ,["Funktionen funs___"])],
155 append_rls "e_rls" e_rls [],
157 [["Biegelinien","ausBelastung"]]));
160 (prep_pbt thy "pbl_bieg_randbed" [] e_pblID
161 (["setzeRandbedingungen","Biegelinien"],
162 [("#Given" ,["Funktionen funs_","Randbedingungen rb_"]),
163 ("#Find" ,["Gleichungen equs___"])],
164 append_rls "e_rls" e_rls [],
166 [["Biegelinien","setzeRandbedingungenEin"]]));
169 (prep_pbt thy "pbl_equ_fromfun" [] e_pblID
170 (["makeFunctionTo","equation"],
171 [("#Given" ,["functionEq fun_","substitution sub_"]),
172 ("#Find" ,["equality equ___"])],
173 append_rls "e_rls" e_rls [],
175 [["Equation","fromFunction"]]));
180 val srls = Rls {id="srls_IntegrierenUnd..",
182 rew_ord = ("termlessI",termlessI),
183 erls = append_rls "erls_in_srls_IntegrierenUnd.." e_rls
184 [(*for asm in nth_Cons_ ...*)
185 Calc ("op <",eval_equ "#less_"),
186 (*2nd nth_Cons_ pushes n+-1 into asms*)
187 Calc("op +", eval_binop "#add_")
189 srls = Erls, calc = [],
190 rules = [Thm ("nth_Cons_",num_str @{thm nth_Cons_}),
191 Calc("op +", eval_binop "#add_"),
192 Thm ("nth_Nil_",num_str @{thm nth_Nil_}),
193 Calc("Tools.lhs", eval_lhs"eval_lhs_"),
194 Calc("Tools.rhs", eval_rhs"eval_rhs_"),
195 Calc("Atools.argument'_in",
196 eval_argument_in "Atools.argument'_in")
201 Rls {id="srls_IntegrierenUnd..",
203 rew_ord = ("termlessI",termlessI),
204 erls = append_rls "erls_in_srls_IntegrierenUnd.." e_rls
205 [(*for asm in nth_Cons_ ...*)
206 Calc ("op <",eval_equ "#less_"),
207 (*2nd nth_Cons_ pushes n+-1 into asms*)
208 Calc("op +", eval_binop "#add_")
210 srls = Erls, calc = [],
211 rules = [Thm ("nth_Cons_",num_str @{thm nth_Cons_}),
212 Calc("op +", eval_binop "#add_"),
213 Thm ("nth_Nil_", num_str @{thm nth_Nil_}),
214 Calc("Tools.lhs", eval_lhs "eval_lhs_"),
215 Calc("Atools.filter'_sameFunId",
216 eval_filter_sameFunId "Atools.filter'_sameFunId"),
217 (*WN070514 just for smltest/../biegelinie.sml ...*)
218 Calc("Atools.sameFunId", eval_sameFunId "Atools.sameFunId"),
219 Thm ("filter_Cons", num_str @{thm filter_Cons}),
220 Thm ("filter_Nil", num_str @{thm filter_Nil}),
221 Thm ("if_True", num_str @{thm if_True}),
222 Thm ("if_False", num_str @{thm if_False}),
223 Thm ("hd_thm", num_str @{thm hd_thm})
228 (prep_met thy "met_biege" [] e_metID
229 (["IntegrierenUndKonstanteBestimmen"],
230 [("#Given" ,["Traegerlaenge l_", "Streckenlast q__",
231 "FunktionsVariable v_v"]),
232 (*("#Where",["0 < l_"]), ...wait for < and handling Arbfix*)
233 ("#Find" ,["Biegelinie b_"]),
234 ("#Relate",["RandbedingungenBiegung rb_",
235 "RandbedingungenMoment rm_"])
237 {rew_ord'="tless_true",
238 rls' = append_rls "erls_IntegrierenUndK.." e_rls
239 [Calc ("Atools.ident",eval_ident "#ident_"),
240 Thm ("not_true",num_str @{thm not_true}),
241 Thm ("not_false",num_str @{thm not_false})],
242 calc = [], srls = srls, prls = Erls,
243 crls = Atools_erls, nrls = Erls},
244 "Script BiegelinieScript " ^
245 "(l_::real) (q__::real) (v_v::real) (b_::real=>real) " ^
246 "(rb_::bool list) (rm_::bool list) = " ^
247 " (let q___ = Take (q_ v_v = q__); " ^
248 " q___ = ((Rewrite sym_real_minus_eq_cancel True) @@ " ^
249 " (Rewrite Belastung_Querkraft True)) q___; " ^
251 " (SubProblem (Biegelinie_,[named,integrate,function], " ^
252 " [diff,integration,named]) " ^
253 " [REAL (rhs q___), REAL v_v, real_REAL Q]); " ^
254 " Q__ = Rewrite Querkraft_Moment True Q__; " ^
256 " (SubProblem (Biegelinie_,[named,integrate,function], " ^
257 " [diff,integration,named]) " ^
258 " [REAL (rhs Q__), REAL v_v, real_REAL M_b]); " ^
259 " e1__ = nth_ 1 rm_; " ^
260 " (x1__::real) = argument_in (lhs e1__); " ^
261 " (M1__::bool) = (Substitute [v_ = x1__]) M__; " ^
262 " M1__ = (Substitute [e1__]) M1__ ; " ^
263 " M2__ = Take M__; " ^
264 (*without this Take 'Substitute [v_ = x2__]' takes _last formula from ctree_*)
265 " e2__ = nth_ 2 rm_; " ^
266 " (x2__::real) = argument_in (lhs e2__); " ^
267 " (M2__::bool) = ((Substitute [v_ = x2__]) @@ " ^
268 " (Substitute [e2__])) M2__; " ^
269 " (c_1_2__::bool list) = " ^
270 " (SubProblem (Biegelinie_,[linear,system],[no_met]) " ^
271 " [booll_ [M1__, M2__], reall [c,c_2]]); " ^
272 " M__ = Take M__; " ^
273 " M__ = ((Substitute c_1_2__) @@ " ^
274 " (Try (Rewrite_Set_Inst [(bdv_1, c),(bdv_2, c_2)]" ^
275 " simplify_System False)) @@ " ^
276 " (Rewrite Moment_Neigung False) @@ " ^
277 " (Rewrite make_fun_explicit False)) M__; " ^
278 (*----------------------- and the same once more ------------------------*)
280 " (SubProblem (Biegelinie_,[named,integrate,function], " ^
281 " [diff,integration,named]) " ^
282 " [REAL (rhs M__), REAL v_v, real_REAL y']); " ^
284 " (SubProblem (Biegelinie_,[named,integrate,function], " ^
285 " [diff,integration,named]) " ^
286 " [REAL (rhs N__), REAL v_v, real_REAL y]); " ^
287 " e1__ = nth_ 1 rb_; " ^
288 " (x1__::real) = argument_in (lhs e1__); " ^
289 " (B1__::bool) = (Substitute [v_ = x1__]) B__; " ^
290 " B1__ = (Substitute [e1__]) B1__ ; " ^
291 " B2__ = Take B__; " ^
292 " e2__ = nth_ 2 rb_; " ^
293 " (x2__::real) = argument_in (lhs e2__); " ^
294 " (B2__::bool) = ((Substitute [v_ = x2__]) @@ " ^
295 " (Substitute [e2__])) B2__; " ^
296 " (c_1_2__::bool list) = " ^
297 " (SubProblem (Biegelinie_,[linear,system],[no_met]) " ^
298 " [booll_ [B1__, B2__], reall [c,c_2]]); " ^
299 " B__ = Take B__; " ^
300 " B__ = ((Substitute c_1_2__) @@ " ^
301 " (Rewrite_Set_Inst [(bdv, x)] make_ratpoly_in False)) B__ " ^
306 (prep_met thy "met_biege_2" [] e_metID
307 (["IntegrierenUndKonstanteBestimmen2"],
308 [("#Given" ,["Traegerlaenge l_", "Streckenlast q__",
309 "FunktionsVariable v_v"]),
310 (*("#Where",["0 < l_"]), ...wait for < and handling Arbfix*)
311 ("#Find" ,["Biegelinie b_"]),
312 ("#Relate",["Randbedingungen rb_"])
314 {rew_ord'="tless_true",
315 rls' = append_rls "erls_IntegrierenUndK.." e_rls
316 [Calc ("Atools.ident",eval_ident "#ident_"),
317 Thm ("not_true",num_str @{thm not_true}),
318 Thm ("not_false",num_str @{thm not_false})],
320 srls = append_rls "erls_IntegrierenUndK.." e_rls
321 [Calc("Tools.rhs", eval_rhs"eval_rhs_"),
322 Calc ("Atools.ident",eval_ident "#ident_"),
323 Thm ("last_thmI",num_str @{thm last_thmI}),
324 Thm ("if_True",num_str @{thm if_True}),
325 Thm ("if_False",num_str @{thm if_False})
327 prls = Erls, crls = Atools_erls, nrls = Erls},
328 "Script Biegelinie2Script " ^
329 "(l_::real) (q__::real) (v_v::real) (b_::real=>real) (rb_::bool list) = " ^
331 " (funs_:: bool list) = " ^
332 " (SubProblem (Biegelinie_,[vonBelastungZu,Biegelinien], " ^
333 " [Biegelinien,ausBelastung]) " ^
334 " [REAL q__, REAL v_]); " ^
335 " (equs_::bool list) = " ^
336 " (SubProblem (Biegelinie_,[setzeRandbedingungen,Biegelinien]," ^
337 " [Biegelinien,setzeRandbedingungenEin]) " ^
338 " [booll_ funs_, booll_ rb_]); " ^
339 " (cons_::bool list) = " ^
340 " (SubProblem (Biegelinie_,[linear,system],[no_met]) " ^
341 " [booll_ equs_, reall [c,c_2,c_3,c_4]]); " ^
342 " B_ = Take (lastI funs_); " ^
343 " B_ = ((Substitute cons_) @@ " ^
344 " (Rewrite_Set_Inst [(bdv, v_v)] make_ratpoly_in False)) B_ " ^
349 (prep_met thy "met_biege_intconst_2" [] e_metID
350 (["IntegrierenUndKonstanteBestimmen","2xIntegrieren"],
352 {rew_ord'="tless_true", rls'=Erls, calc = [],
355 crls = Atools_erls, nrls = e_rls},
360 (prep_met thy "met_biege_intconst_4" [] e_metID
361 (["IntegrierenUndKonstanteBestimmen","4x4System"],
363 {rew_ord'="tless_true", rls'=Erls, calc = [],
366 crls = Atools_erls, nrls = e_rls},
371 (prep_met thy "met_biege_intconst_1" [] e_metID
372 (["IntegrierenUndKonstanteBestimmen","1xIntegrieren"],
374 {rew_ord'="tless_true", rls'=Erls, calc = [],
377 crls = Atools_erls, nrls = e_rls},
382 (prep_met thy "met_biege2" [] e_metID
385 {rew_ord'="tless_true", rls'=Erls, calc = [],
388 crls = Atools_erls, nrls = e_rls},
393 (prep_met thy "met_biege_ausbelast" [] e_metID
394 (["Biegelinien","ausBelastung"],
395 [("#Given" ,["Streckenlast q__","FunktionsVariable v_v"]),
396 ("#Find" ,["Funktionen funs_"])],
397 {rew_ord'="tless_true",
398 rls' = append_rls "erls_ausBelastung" e_rls
399 [Calc ("Atools.ident",eval_ident "#ident_"),
400 Thm ("not_true",num_str @{thm not_true}),
401 Thm ("not_false",num_str @{thm not_false})],
403 srls = append_rls "srls_ausBelastung" e_rls
404 [Calc("Tools.rhs", eval_rhs"eval_rhs_")],
405 prls = e_rls, crls = Atools_erls, nrls = e_rls},
406 "Script Belastung2BiegelScript (q__::real) (v_v::real) = " ^
407 " (let q___ = Take (q_ v_v = q__); " ^
408 " q___ = ((Rewrite sym_real_minus_eq_cancel True) @@ " ^
409 " (Rewrite Belastung_Querkraft True)) q___; " ^
411 " (SubProblem (Biegelinie_,[named,integrate,function], " ^
412 " [diff,integration,named]) " ^
413 " [REAL (rhs q___), REAL v_v, real_REAL Q]); " ^
414 " M__ = Rewrite Querkraft_Moment True Q__; " ^
416 " (SubProblem (Biegelinie_,[named,integrate,function], " ^
417 " [diff,integration,named]) " ^
418 " [REAL (rhs M__), REAL v_v, real_REAL M_b]); " ^
419 " N__ = ((Rewrite Moment_Neigung False) @@ " ^
420 " (Rewrite make_fun_explicit False)) M__; " ^
422 " (SubProblem (Biegelinie_,[named,integrate,function], " ^
423 " [diff,integration,named]) " ^
424 " [REAL (rhs N__), REAL v_v, real_REAL y']); " ^
426 " (SubProblem (Biegelinie_,[named,integrate,function], " ^
427 " [diff,integration,named]) " ^
428 " [REAL (rhs N__), REAL v_v, real_REAL y]) " ^
429 " in [Q__, M__, N__, B__])"
433 (prep_met thy "met_biege_setzrand" [] e_metID
434 (["Biegelinien","setzeRandbedingungenEin"],
435 [("#Given" ,["Funktionen funs_","Randbedingungen rb_"]),
436 ("#Find" ,["Gleichungen equs___"])],
437 {rew_ord'="tless_true", rls'=Erls, calc = [],
440 crls = Atools_erls, nrls = e_rls},
441 "Script SetzeRandbedScript (funs_::bool list) (rb_::bool list) = " ^
442 " (let b1_ = nth_ 1 rb_; " ^
443 " fs_ = filter_sameFunId (lhs b1_) funs_; " ^
445 " (SubProblem (Biegelinie_,[makeFunctionTo,equation]," ^
446 " [Equation,fromFunction]) " ^
447 " [BOOL (hd fs_), BOOL b1_]); " ^
448 " b2_ = nth_ 2 rb_; " ^
449 " fs_ = filter_sameFunId (lhs b2_) funs_; " ^
451 " (SubProblem (Biegelinie_,[makeFunctionTo,equation]," ^
452 " [Equation,fromFunction]) " ^
453 " [BOOL (hd fs_), BOOL b2_]); " ^
454 " b3_ = nth_ 3 rb_; " ^
455 " fs_ = filter_sameFunId (lhs b3_) funs_; " ^
457 " (SubProblem (Biegelinie_,[makeFunctionTo,equation]," ^
458 " [Equation,fromFunction]) " ^
459 " [BOOL (hd fs_), BOOL b3_]); " ^
460 " b4_ = nth_ 4 rb_; " ^
461 " fs_ = filter_sameFunId (lhs b4_) funs_; " ^
463 " (SubProblem (Biegelinie_,[makeFunctionTo,equation]," ^
464 " [Equation,fromFunction]) " ^
465 " [BOOL (hd fs_), BOOL b4_]) " ^
466 " in [e1_,e2_,e3_,e4_])"
467 (* filter requires more than 1 sec !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
468 "Script SetzeRandbedScript (funs_::bool list) (rb_::bool list) = " ^
469 " (let b1_ = nth_ 1 rb_; " ^
470 " fs_ = filter (sameFunId (lhs b1_)) funs_; " ^
472 " (SubProblem (Biegelinie_,[makeFunctionTo,equation]," ^
473 " [Equation,fromFunction]) " ^
474 " [BOOL (hd fs_), BOOL b1_]); " ^
475 " b2_ = nth_ 2 rb_; " ^
476 " fs_ = filter (sameFunId (lhs b2_)) funs_; " ^
478 " (SubProblem (Biegelinie_,[makeFunctionTo,equation]," ^
479 " [Equation,fromFunction]) " ^
480 " [BOOL (hd fs_), BOOL b2_]); " ^
481 " b3_ = nth_ 3 rb_; " ^
482 " fs_ = filter (sameFunId (lhs b3_)) funs_; " ^
484 " (SubProblem (Biegelinie_,[makeFunctionTo,equation]," ^
485 " [Equation,fromFunction]) " ^
486 " [BOOL (hd fs_), BOOL b3_]); " ^
487 " b4_ = nth_ 4 rb_; " ^
488 " fs_ = filter (sameFunId (lhs b4_)) funs_; " ^
490 " (SubProblem (Biegelinie_,[makeFunctionTo,equation]," ^
491 " [Equation,fromFunction]) " ^
492 " [BOOL (hd fs_), BOOL b4_]) " ^
493 " in [e1_,e2_,e3_,e4_])"*)
497 (prep_met thy "met_equ_fromfun" [] e_metID
498 (["Equation","fromFunction"],
499 [("#Given" ,["functionEq fun_","substitution sub_"]),
500 ("#Find" ,["equality equ___"])],
501 {rew_ord'="tless_true", rls'=Erls, calc = [],
502 srls = append_rls "srls_in_EquationfromFunc" e_rls
503 [Calc("Tools.lhs", eval_lhs"eval_lhs_"),
504 Calc("Atools.argument'_in",
506 "Atools.argument'_in")],
508 crls = Atools_erls, nrls = e_rls},
509 (*(M_b x = c_2 + c * x + -1 * q_0 / 2 * x ^^^ 2) (M_b L = 0) -->
510 0 = c_2 + c * L + -1 * q_0 / 2 * L ^^^ 2*)
511 "Script Function2Equality (fun_::bool) (sub_::bool) =" ^
512 " (let fun_ = Take fun_; " ^
513 " bdv_ = argument_in (lhs fun_); " ^
514 " val_ = argument_in (lhs sub_); " ^
515 " equ_ = (Substitute [bdv_ = val_]) fun_; " ^
516 " equ_ = (Substitute [sub_]) fun_ " ^
517 " in (Rewrite_Set norm_Rational False) equ_) "