src/Tools/isac/Knowledge/Biegelinie.thy
author Walther Neuper <neuper@ist.tugraz.at>
Thu, 09 Sep 2010 13:31:36 +0200
branchisac-update-Isa09-2
changeset 37999 7d603b7ead73
parent 37984 972a73d7c50b
child 38002 10a171ce75d5
permissions -rw-r--r--
updated Knowledge/Biegelinie.thy
neuper@37906
     1
(* chapter 'Biegelinie' from the textbook: 
neuper@37906
     2
   Timischl, Kaiser. Ingenieur-Mathematik 3. Wien 1999. p.268-271.
neuper@37999
     3
   author: Walther Neuper 050826,
neuper@37906
     4
   (c) due to copyright terms
neuper@37906
     5
*)
neuper@37906
     6
neuper@37954
     7
theory Biegelinie imports Integrate Equation EqSystem begin
neuper@37906
     8
neuper@37906
     9
consts
neuper@37906
    10
neuper@37999
    11
  q_    :: "real => real" ("q'_")     (* Streckenlast               *)
neuper@37999
    12
  Q     :: "real => real"             (* Querkraft                  *)
neuper@37999
    13
  Q'    :: "real => real"             (* Ableitung der Querkraft    *)
neuper@37999
    14
  M'_b  :: "real => real" ("M'_b")    (* Biegemoment                *)
neuper@37999
    15
  M'_b' :: "real => real" ("M'_b'")   (* Ableitung des Biegemoments *)
neuper@37999
    16
  y''   :: "real => real"             (* 2.Ableitung der Biegeline  *)
neuper@37999
    17
  y'    :: "real => real"             (* Neigung der Biegeline      *)
neuper@37999
    18
(*y     :: "real => real"             (* Biegeline                  *)*)
neuper@37999
    19
  EI    :: "real"                     (* Biegesteifigkeit           *)
neuper@37906
    20
neuper@37906
    21
  (*new Descriptions in the related problems*)
neuper@37999
    22
  Traegerlaenge            :: "real => una"
neuper@37999
    23
  Streckenlast             :: "real => una"
neuper@37999
    24
  BiegemomentVerlauf       :: "bool => una"
neuper@37999
    25
  Biegelinie               :: "(real => real) => una"
neuper@37999
    26
  Randbedingungen          :: "bool list => una"
neuper@37999
    27
  RandbedingungenBiegung   :: "bool list => una"
neuper@37999
    28
  RandbedingungenNeigung   :: "bool list => una"
neuper@37999
    29
  RandbedingungenMoment    :: "bool list => una"
neuper@37999
    30
  RandbedingungenQuerkraft :: "bool list => una"
neuper@37999
    31
  FunktionsVariable        :: "real => una"
neuper@37999
    32
  Funktionen               :: "bool list => una"
neuper@37999
    33
  Gleichungen              :: "bool list => una"
neuper@37906
    34
neuper@37906
    35
  (*Script-names*)
neuper@37906
    36
  Biegelinie2Script        :: "[real,real,real,real=>real,bool list,
neuper@37906
    37
				bool] => bool"	
neuper@37906
    38
	("((Script Biegelinie2Script (_ _ _ _ _ =))// (_))" 9)
neuper@37906
    39
  BiegelinieScript         :: "[real,real,real,real=>real,bool list,bool list,
neuper@37906
    40
				bool] => bool"	
neuper@37906
    41
	("((Script BiegelinieScript (_ _ _ _ _ _ =))// (_))" 9)
neuper@37906
    42
  Biege2xIntegrierenScript :: "[real,real,real,bool,real=>real,bool list,
neuper@37906
    43
				bool] => bool"		
neuper@37906
    44
	("((Script Biege2xIntegrierenScript (_ _ _ _ _ _ =))// (_))" 9)
neuper@37906
    45
  Biege4x4SystemScript     :: "[real,real,real,real=>real,bool list,  
neuper@37906
    46
				bool] => bool"	
neuper@37906
    47
	("((Script Biege4x4SystemScript (_ _ _ _ _ =))// (_))" 9)
neuper@37906
    48
  Biege1xIntegrierenScript :: 
neuper@37906
    49
	            "[real,real,real,real=>real,bool list,bool list,bool list,
neuper@37906
    50
		      bool] => bool"	
neuper@37906
    51
	("((Script Biege1xIntegrierenScript (_ _ _ _ _ _ _ =))// (_))" 9)
neuper@37906
    52
  Belastung2BiegelScript   :: "[real,real,
neuper@37906
    53
	                        bool list] => bool list"	
neuper@37906
    54
	("((Script Belastung2BiegelScript (_ _ =))// (_))" 9)
neuper@37906
    55
  SetzeRandbedScript       :: "[bool list,bool list,
neuper@37906
    56
	                        bool list] => bool list"	
neuper@37906
    57
	("((Script SetzeRandbedScript (_ _ =))// (_))" 9)
neuper@37906
    58
neuper@37983
    59
axioms
neuper@37906
    60
neuper@37983
    61
  Querkraft_Belastung:   "Q' x = -q_ x"
neuper@37983
    62
  Belastung_Querkraft:   "-q_ x = Q' x"
neuper@37906
    63
neuper@37983
    64
  Moment_Querkraft:      "M_b' x = Q x"
neuper@37983
    65
  Querkraft_Moment:      "Q x = M_b' x"
neuper@37906
    66
neuper@37983
    67
  Neigung_Moment:        "y'' x = -M_b x/ EI"
neuper@37983
    68
  Moment_Neigung:        "M_b x = -EI * y'' x"
neuper@37906
    69
neuper@37906
    70
  (*according to rls 'simplify_Integral': .. = 1/a * .. instead .. = ../ a*)
neuper@37983
    71
  make_fun_explicit:     "Not (a =!= 0) ==> (a * (f x) = b) = (f x = 1/a * b)"
neuper@37906
    72
neuper@37954
    73
ML {*
neuper@37972
    74
val thy = @{theory};
neuper@37972
    75
neuper@37954
    76
(** theory elements for transfer into html **)
neuper@37954
    77
neuper@37954
    78
store_isa ["IsacKnowledge"] [];
neuper@37972
    79
store_thy thy 
neuper@37954
    80
	  ["Walther Neuper 2005 supported by a grant from NMI Austria"];
neuper@37972
    81
store_isa ["IsacKnowledge", theory2thyID thy, "Theorems"] 
neuper@37954
    82
	  ["Walther Neuper 2005 supported by a grant from NMI Austria"];
neuper@37999
    83
store_thm thy ("Belastung_Querkraft", @{thm Belastung_Querkraft})
neuper@37954
    84
	  ["Walther Neuper 2005 supported by a grant from NMI Austria"];
neuper@37999
    85
store_thm thy ("Moment_Neigung", @{thm Moment_Neigung})
neuper@37954
    86
	  ["Walther Neuper 2005 supported by a grant from NMI Austria"];
neuper@37999
    87
store_thm thy ("Moment_Querkraft", @{thm Moment_Querkraft})
neuper@37954
    88
	  ["Walther Neuper 2005 supported by a grant from NMI Austria"];
neuper@37999
    89
store_thm thy ("Neigung_Moment", @{thm Neigung_Moment})
neuper@37954
    90
	  ["Walther Neuper 2005 supported by a grant from NMI Austria"];
neuper@37999
    91
store_thm thy ("Querkraft_Belastung", @{thm Querkraft_Belastung})
neuper@37954
    92
	  ["Walther Neuper 2005 supported by a grant from NMI Austria"];
neuper@37999
    93
store_thm thy ("Querkraft_Moment", @{thm Querkraft_Moment})
neuper@37954
    94
	  ["Walther Neuper 2005 supported by a grant from NMI Austria"];
neuper@37999
    95
store_thm thy ("make_fun_explicit", @{thm make_fun_explicit})
neuper@37954
    96
	  ["Walther Neuper 2005 supported by a grant from NMI Austria"];
neuper@37954
    97
neuper@37999
    98
*}
neuper@37999
    99
ML {*
neuper@37954
   100
(** problems **)
neuper@37954
   101
neuper@37954
   102
store_pbt
neuper@37972
   103
 (prep_pbt thy "pbl_bieg" [] e_pblID
neuper@37954
   104
 (["Biegelinien"],
neuper@37999
   105
  [("#Given" ,["Traegerlaenge l_l", "Streckenlast q_q"]),
neuper@37999
   106
   (*("#Where",["0 < l_l"]), ...wait for &lt; and handling Arbfix*)
neuper@37999
   107
   ("#Find"  ,["Biegelinie b_b"]),
neuper@37999
   108
   ("#Relate",["Randbedingungen r_b"])
neuper@37954
   109
  ],
neuper@37954
   110
  append_rls "e_rls" e_rls [], 
neuper@37954
   111
  NONE, 
neuper@37954
   112
  [["IntegrierenUndKonstanteBestimmen2"]]));
neuper@37954
   113
neuper@37954
   114
store_pbt 
neuper@37972
   115
 (prep_pbt thy "pbl_bieg_mom" [] e_pblID
neuper@37954
   116
 (["MomentBestimmte","Biegelinien"],
neuper@37999
   117
  [("#Given" ,["Traegerlaenge l_l", "Streckenlast q_q"]),
neuper@37999
   118
   (*("#Where",["0 < l_l"]), ...wait for &lt; and handling Arbfix*)
neuper@37999
   119
   ("#Find"  ,["Biegelinie b_b"]),
neuper@37999
   120
   ("#Relate",["RandbedingungenBiegung r_b","RandbedingungenMoment r_m"])
neuper@37954
   121
  ],
neuper@37954
   122
  append_rls "e_rls" e_rls [], 
neuper@37954
   123
  NONE, 
neuper@37954
   124
  [["IntegrierenUndKonstanteBestimmen"]]));
neuper@37954
   125
neuper@37954
   126
store_pbt
neuper@37972
   127
 (prep_pbt thy "pbl_bieg_momg" [] e_pblID
neuper@37954
   128
 (["MomentGegebene","Biegelinien"],
neuper@37954
   129
  [],
neuper@37954
   130
  append_rls "e_rls" e_rls [], 
neuper@37954
   131
  NONE, 
neuper@37954
   132
  [["IntegrierenUndKonstanteBestimmen","2xIntegrieren"]]));
neuper@37954
   133
neuper@37954
   134
store_pbt
neuper@37972
   135
 (prep_pbt thy "pbl_bieg_einf" [] e_pblID
neuper@37954
   136
 (["einfache","Biegelinien"],
neuper@37954
   137
  [],
neuper@37954
   138
  append_rls "e_rls" e_rls [], 
neuper@37954
   139
  NONE, 
neuper@37954
   140
  [["IntegrierenUndKonstanteBestimmen","4x4System"]]));
neuper@37954
   141
neuper@37954
   142
store_pbt
neuper@37972
   143
 (prep_pbt thy "pbl_bieg_momquer" [] e_pblID
neuper@37954
   144
 (["QuerkraftUndMomentBestimmte","Biegelinien"],
neuper@37954
   145
  [],
neuper@37954
   146
  append_rls "e_rls" e_rls [], 
neuper@37954
   147
  NONE, 
neuper@37954
   148
  [["IntegrierenUndKonstanteBestimmen","1xIntegrieren"]]));
neuper@37954
   149
neuper@37954
   150
store_pbt
neuper@37972
   151
 (prep_pbt thy "pbl_bieg_vonq" [] e_pblID
neuper@37954
   152
 (["vonBelastungZu","Biegelinien"],
neuper@37999
   153
  [("#Given" ,["Streckenlast q_q","FunktionsVariable v_v"]),
neuper@37999
   154
   ("#Find"  ,["Funktionen funs'''"])],
neuper@37954
   155
  append_rls "e_rls" e_rls [], 
neuper@37954
   156
  NONE, 
neuper@37954
   157
  [["Biegelinien","ausBelastung"]]));
neuper@37954
   158
neuper@37954
   159
store_pbt
neuper@37972
   160
 (prep_pbt thy "pbl_bieg_randbed" [] e_pblID
neuper@37954
   161
 (["setzeRandbedingungen","Biegelinien"],
neuper@37999
   162
  [("#Given" ,["Funktionen fun_s","Randbedingungen r_b"]),
neuper@37999
   163
   ("#Find"  ,["Gleichungen equs'''"])],
neuper@37954
   164
  append_rls "e_rls" e_rls [], 
neuper@37954
   165
  NONE, 
neuper@37954
   166
  [["Biegelinien","setzeRandbedingungenEin"]]));
neuper@37954
   167
neuper@37954
   168
store_pbt
neuper@37972
   169
 (prep_pbt thy "pbl_equ_fromfun" [] e_pblID
neuper@37954
   170
 (["makeFunctionTo","equation"],
neuper@37999
   171
  [("#Given" ,["functionEq fu_n","substitution su_b"]),
neuper@37999
   172
   ("#Find"  ,["equality equ'''"])],
neuper@37954
   173
  append_rls "e_rls" e_rls [], 
neuper@37954
   174
  NONE, 
neuper@37954
   175
  [["Equation","fromFunction"]]));
neuper@37954
   176
neuper@37999
   177
*}
neuper@37999
   178
ML {*
neuper@37954
   179
(** methods **)
neuper@37954
   180
neuper@37954
   181
val srls = Rls {id="srls_IntegrierenUnd..", 
neuper@37954
   182
		preconds = [], 
neuper@37954
   183
		rew_ord = ("termlessI",termlessI), 
neuper@37954
   184
		erls = append_rls "erls_in_srls_IntegrierenUnd.." e_rls
neuper@37999
   185
				  [(*for asm in NTH_CONS ...*)
neuper@37954
   186
				   Calc ("op <",eval_equ "#less_"),
neuper@37999
   187
				   (*2nd NTH_CONS pushes n+-1 into asms*)
neuper@37954
   188
				   Calc("op +", eval_binop "#add_")
neuper@37954
   189
				   ], 
neuper@37954
   190
		srls = Erls, calc = [],
neuper@37999
   191
		rules = [Thm ("NTH_CONS",num_str @{thm NTH_CONS}),
neuper@37954
   192
			 Calc("op +", eval_binop "#add_"),
neuper@37999
   193
			 Thm ("NTH_NIL",num_str @{thm NTH_NIL}),
neuper@37954
   194
			 Calc("Tools.lhs", eval_lhs"eval_lhs_"),
neuper@37954
   195
			 Calc("Tools.rhs", eval_rhs"eval_rhs_"),
neuper@37954
   196
			 Calc("Atools.argument'_in",
neuper@37954
   197
			      eval_argument_in "Atools.argument'_in")
neuper@37954
   198
			 ],
neuper@37954
   199
		scr = EmptyScr};
neuper@37954
   200
    
neuper@37954
   201
val srls2 = 
neuper@37954
   202
    Rls {id="srls_IntegrierenUnd..", 
neuper@37954
   203
	 preconds = [], 
neuper@37954
   204
	 rew_ord = ("termlessI",termlessI), 
neuper@37954
   205
	 erls = append_rls "erls_in_srls_IntegrierenUnd.." e_rls
neuper@37999
   206
			   [(*for asm in NTH_CONS ...*)
neuper@37954
   207
			    Calc ("op <",eval_equ "#less_"),
neuper@37999
   208
			    (*2nd NTH_CONS pushes n+-1 into asms*)
neuper@37954
   209
			    Calc("op +", eval_binop "#add_")
neuper@37954
   210
			    ], 
neuper@37954
   211
	 srls = Erls, calc = [],
neuper@37999
   212
	 rules = [Thm ("NTH_CONS",num_str @{thm NTH_CONS}),
neuper@37954
   213
		  Calc("op +", eval_binop "#add_"),
neuper@37999
   214
		  Thm ("NTH_NIL", num_str @{thm NTH_NIL}),
neuper@37954
   215
		  Calc("Tools.lhs", eval_lhs "eval_lhs_"),
neuper@37954
   216
		  Calc("Atools.filter'_sameFunId",
neuper@37954
   217
		       eval_filter_sameFunId "Atools.filter'_sameFunId"),
neuper@37954
   218
		  (*WN070514 just for smltest/../biegelinie.sml ...*)
neuper@37954
   219
		  Calc("Atools.sameFunId", eval_sameFunId "Atools.sameFunId"),
neuper@37969
   220
		  Thm ("filter_Cons", num_str @{thm filter_Cons}),
neuper@37969
   221
		  Thm ("filter_Nil", num_str @{thm filter_Nil}),
neuper@37969
   222
		  Thm ("if_True", num_str @{thm if_True}),
neuper@37969
   223
		  Thm ("if_False", num_str @{thm if_False}),
neuper@37969
   224
		  Thm ("hd_thm", num_str @{thm hd_thm})
neuper@37954
   225
		  ],
neuper@37954
   226
	 scr = EmptyScr};
neuper@37999
   227
*}
neuper@37999
   228
neuper@37999
   229
ML {*
neuper@37954
   230
store_met
neuper@37972
   231
    (prep_met thy "met_biege" [] e_metID
neuper@37954
   232
	      (["IntegrierenUndKonstanteBestimmen"],
neuper@37999
   233
	       [("#Given" ,["Traegerlaenge l_l", "Streckenlast q_q",
neuper@37981
   234
			    "FunktionsVariable v_v"]),
neuper@37999
   235
		(*("#Where",["0 < l_l"]), ...wait for &lt; and handling Arbfix*)
neuper@37999
   236
		("#Find"  ,["Biegelinie b_b"]),
neuper@37999
   237
		("#Relate",["RandbedingungenBiegung r_b",
neuper@37999
   238
			    "RandbedingungenMoment r_m"])
neuper@37954
   239
		],
neuper@37954
   240
	       {rew_ord'="tless_true", 
neuper@37954
   241
		rls' = append_rls "erls_IntegrierenUndK.." e_rls 
neuper@37954
   242
				  [Calc ("Atools.ident",eval_ident "#ident_"),
neuper@37969
   243
				   Thm ("not_true",num_str @{thm not_true}),
neuper@37969
   244
				   Thm ("not_false",num_str @{thm not_false})], 
neuper@37954
   245
		calc = [], srls = srls, prls = Erls,
neuper@37954
   246
		crls = Atools_erls, nrls = Erls},
neuper@37954
   247
"Script BiegelinieScript                                                  " ^
neuper@37999
   248
"(l_l::real) (q__q::real) (v_v::real) (b_b::real=>real)                   " ^
neuper@37999
   249
"(r_b::bool list) (r_m::bool list) =                                      " ^
neuper@37999
   250
"  (let q___q = Take (q_q v_v = q__q);                                       " ^
neuper@37999
   251
"       q___q = ((Rewrite sym_real_minus_eq_cancel True) @@                " ^
neuper@37999
   252
"              (Rewrite Belastung_Querkraft True)) q___q;                  " ^
neuper@37999
   253
"      (Q__Q:: bool) =                                                     " ^
neuper@37999
   254
"             (SubProblem (Biegelinie',[named,integrate,function],        " ^
neuper@37954
   255
"                          [diff,integration,named])                      " ^
neuper@37999
   256
"                          [REAL (rhs q___q), REAL v_v, REAL_REAL Q]);   " ^
neuper@37999
   257
"       Q__Q = Rewrite Querkraft_Moment True Q__Q;                          " ^
neuper@37999
   258
"      (M__M::bool) =                                                      " ^
neuper@37999
   259
"             (SubProblem (Biegelinie',[named,integrate,function],        " ^
neuper@37954
   260
"                          [diff,integration,named])                      " ^
neuper@37999
   261
"                          [REAL (rhs Q__Q), REAL v_v, REAL_REAL M_b]);  " ^
neuper@37999
   262
"       e__1 = NTH 1 r_m;                                                " ^
neuper@37999
   263
"      (x__1::real) = argument_in (lhs e__1);                             " ^
neuper@37999
   264
"      (M__1::bool) = (Substitute [v_v = x__1]) M__M;                       " ^
neuper@37999
   265
"       M__1        = (Substitute [e__1]) M__1 ;                          " ^
neuper@37999
   266
"       M__2 = Take M__M;                                                  " ^
neuper@37999
   267
(*without this Take 'Substitute [v_v = x__2]' takes _last formula from ctree_*)
neuper@37999
   268
"       e__2 = NTH 2 r_m;                                                " ^
neuper@37999
   269
"      (x__2::real) = argument_in (lhs e__2);                             " ^
neuper@37999
   270
"      (M__2::bool) = ((Substitute [v_v = x__2]) @@                        " ^
neuper@37999
   271
"                      (Substitute [e__2])) M__2;                         " ^
neuper@37999
   272
"      (c_1_2::bool list) =                                             " ^
neuper@37999
   273
"             (SubProblem (Biegelinie',[linear,system],[no_met])          " ^
neuper@37999
   274
"                          [BOOL_LIST [M__1, M__2], REAL_LIST [c,c_2]]);         " ^
neuper@37999
   275
"       M__M = Take  M__M;                                                  " ^
neuper@37999
   276
"       M__M = ((Substitute c_1_2) @@                                    " ^
neuper@37954
   277
"              (Try (Rewrite_Set_Inst [(bdv_1, c),(bdv_2, c_2)]" ^
neuper@37954
   278
"                                   simplify_System False)) @@ " ^
neuper@37954
   279
"              (Rewrite Moment_Neigung False) @@ " ^
neuper@37999
   280
"              (Rewrite make_fun_explicit False)) M__M;                    " ^
neuper@37954
   281
(*----------------------- and the same once more ------------------------*)
neuper@37999
   282
"      (N__N:: bool) =                                                     " ^
neuper@37999
   283
"             (SubProblem (Biegelinie',[named,integrate,function],        " ^
neuper@37954
   284
"                          [diff,integration,named])                      " ^
neuper@37999
   285
"                          [REAL (rhs M__M), REAL v_v, REAL_REAL y']);   " ^
neuper@37999
   286
"      (B__B:: bool) =                                                     " ^
neuper@37999
   287
"             (SubProblem (Biegelinie',[named,integrate,function],        " ^
neuper@37954
   288
"                          [diff,integration,named])                      " ^
neuper@37999
   289
"                          [REAL (rhs N__N), REAL v_v, REAL_REAL y]);    " ^
neuper@37999
   290
"       e__1 = NTH 1 r_b;                                                " ^
neuper@37999
   291
"      (x__1::real) = argument_in (lhs e__1);                             " ^
neuper@37999
   292
"      (B__1::bool) = (Substitute [v_v = x__1]) B__B;                       " ^
neuper@37999
   293
"       B__1        = (Substitute [e__1]) B__1 ;                          " ^
neuper@37999
   294
"       B__2 = Take B__B;                                                  " ^
neuper@37999
   295
"       e__2 = NTH 2 r_b;                                                " ^
neuper@37999
   296
"      (x__2::real) = argument_in (lhs e__2);                             " ^
neuper@37999
   297
"      (B__2::bool) = ((Substitute [v_v = x__2]) @@                        " ^
neuper@37999
   298
"                      (Substitute [e__2])) B__2;                         " ^
neuper@37999
   299
"      (c_1_2::bool list) =                                             " ^
neuper@37999
   300
"             (SubProblem (Biegelinie',[linear,system],[no_met])          " ^
neuper@37999
   301
"                          [BOOL_LIST [B__1, B__2], REAL_LIST [c,c_2]]);         " ^
neuper@37999
   302
"       B__B = Take  B__B;                                                  " ^
neuper@37999
   303
"       B__B = ((Substitute c_1_2) @@                                    " ^
neuper@37999
   304
"              (Rewrite_Set_Inst [(bdv, x)] make_ratpoly_in False)) B__B   " ^
neuper@37999
   305
" in B__B)"
neuper@37954
   306
));
neuper@37999
   307
*}
neuper@37999
   308
ML {*
neuper@37954
   309
neuper@37954
   310
store_met
neuper@37972
   311
    (prep_met thy "met_biege_2" [] e_metID
neuper@37954
   312
	      (["IntegrierenUndKonstanteBestimmen2"],
neuper@37999
   313
	       [("#Given" ,["Traegerlaenge l_l", "Streckenlast q__q",
neuper@37981
   314
			    "FunktionsVariable v_v"]),
neuper@37999
   315
		(*("#Where",["0 < l_l"]), ...wait for &lt; and handling Arbfix*)
neuper@37999
   316
		("#Find"  ,["Biegelinie b_b"]),
neuper@37999
   317
		("#Relate",["Randbedingungen r_b"])
neuper@37954
   318
		],
neuper@37954
   319
	       {rew_ord'="tless_true", 
neuper@37954
   320
		rls' = append_rls "erls_IntegrierenUndK.." e_rls 
neuper@37954
   321
				  [Calc ("Atools.ident",eval_ident "#ident_"),
neuper@37969
   322
				   Thm ("not_true",num_str @{thm not_true}),
neuper@37969
   323
				   Thm ("not_false",num_str @{thm not_false})], 
neuper@37954
   324
		calc = [], 
neuper@37954
   325
		srls = append_rls "erls_IntegrierenUndK.." e_rls 
neuper@37954
   326
				  [Calc("Tools.rhs", eval_rhs"eval_rhs_"),
neuper@37954
   327
				   Calc ("Atools.ident",eval_ident "#ident_"),
neuper@37969
   328
				   Thm ("last_thmI",num_str @{thm last_thmI}),
neuper@37969
   329
				   Thm ("if_True",num_str @{thm if_True}),
neuper@37969
   330
				   Thm ("if_False",num_str @{thm if_False})
neuper@37954
   331
				   ],
neuper@37954
   332
		prls = Erls, crls = Atools_erls, nrls = Erls},
neuper@37954
   333
"Script Biegelinie2Script                                                 " ^
neuper@37999
   334
"(l_l::real) (q__q::real) (v_v::real) (b_b::real=>real) (r_b::bool list) = " ^
neuper@37954
   335
"  (let                                                                   " ^
neuper@37999
   336
"      (fun_s:: bool list) =                                              " ^
neuper@37999
   337
"             (SubProblem (Biegelinie',[vonBelastungZu,Biegelinien],      " ^
neuper@37954
   338
"                          [Biegelinien,ausBelastung])                    " ^
neuper@37999
   339
"                          [REAL q__q, REAL v_v]);                        " ^
neuper@37999
   340
"      (equ_s::bool list) =                                               " ^
neuper@37999
   341
"             (SubProblem (Biegelinie',[setzeRandbedingungen,Biegelinien]," ^
neuper@37954
   342
"                          [Biegelinien,setzeRandbedingungenEin])         " ^
neuper@37999
   343
"                          [BOOL_LIST fun_s, BOOL_LIST r_b]);              " ^
neuper@37999
   344
"      (con_s::bool list) =                                               " ^
neuper@37999
   345
"             (SubProblem (Biegelinie',[linear,system],[no_met])          " ^
neuper@37999
   346
"                          [BOOL_LIST equ_s, REAL_LIST [c,c_2,c_3,c_4]]);   " ^
neuper@37999
   347
"       B_B = Take (lastI fun_s);                                          " ^
neuper@37999
   348
"       B_B = ((Substitute con_s) @@                                       " ^
neuper@37999
   349
"              (Rewrite_Set_Inst [(bdv, v_v)] make_ratpoly_in False)) B_B   " ^
neuper@37999
   350
" in B_B)"
neuper@37954
   351
));
neuper@37954
   352
neuper@37999
   353
*}
neuper@37999
   354
ML {*
neuper@37954
   355
store_met
neuper@37972
   356
    (prep_met thy "met_biege_intconst_2" [] e_metID
neuper@37954
   357
	      (["IntegrierenUndKonstanteBestimmen","2xIntegrieren"],
neuper@37954
   358
	       [],
neuper@37954
   359
	       {rew_ord'="tless_true", rls'=Erls, calc = [], 
neuper@37954
   360
		srls = e_rls, 
neuper@37954
   361
		prls=e_rls,
neuper@37954
   362
	     crls = Atools_erls, nrls = e_rls},
neuper@37954
   363
"empty_script"
neuper@37954
   364
));
neuper@37954
   365
neuper@37954
   366
store_met
neuper@37972
   367
    (prep_met thy "met_biege_intconst_4" [] e_metID
neuper@37954
   368
	      (["IntegrierenUndKonstanteBestimmen","4x4System"],
neuper@37954
   369
	       [],
neuper@37954
   370
	       {rew_ord'="tless_true", rls'=Erls, calc = [], 
neuper@37954
   371
		srls = e_rls, 
neuper@37954
   372
		prls=e_rls,
neuper@37954
   373
	     crls = Atools_erls, nrls = e_rls},
neuper@37954
   374
"empty_script"
neuper@37954
   375
));
neuper@37954
   376
neuper@37954
   377
store_met
neuper@37972
   378
    (prep_met thy "met_biege_intconst_1" [] e_metID
neuper@37954
   379
	      (["IntegrierenUndKonstanteBestimmen","1xIntegrieren"],
neuper@37954
   380
	       [],
neuper@37954
   381
	       {rew_ord'="tless_true", rls'=Erls, calc = [], 
neuper@37954
   382
		srls = e_rls, 
neuper@37954
   383
		prls=e_rls,
neuper@37954
   384
	     crls = Atools_erls, nrls = e_rls},
neuper@37954
   385
"empty_script"
neuper@37954
   386
));
neuper@37954
   387
neuper@37954
   388
store_met
neuper@37972
   389
    (prep_met thy "met_biege2" [] e_metID
neuper@37954
   390
	      (["Biegelinien"],
neuper@37954
   391
	       [],
neuper@37954
   392
	       {rew_ord'="tless_true", rls'=Erls, calc = [], 
neuper@37954
   393
		srls = e_rls, 
neuper@37954
   394
		prls=e_rls,
neuper@37954
   395
	     crls = Atools_erls, nrls = e_rls},
neuper@37954
   396
"empty_script"
neuper@37954
   397
));
neuper@37954
   398
neuper@37999
   399
*}
neuper@37999
   400
ML {*
neuper@37954
   401
store_met
neuper@37972
   402
    (prep_met thy "met_biege_ausbelast" [] e_metID
neuper@37954
   403
	      (["Biegelinien","ausBelastung"],
neuper@37999
   404
	       [("#Given" ,["Streckenlast q__q","FunktionsVariable v_v"]),
neuper@37999
   405
		("#Find"  ,["Funktionen fun_s"])],
neuper@37954
   406
	       {rew_ord'="tless_true", 
neuper@37954
   407
		rls' = append_rls "erls_ausBelastung" e_rls 
neuper@37954
   408
				  [Calc ("Atools.ident",eval_ident "#ident_"),
neuper@37969
   409
				   Thm ("not_true",num_str @{thm not_true}),
neuper@37969
   410
				   Thm ("not_false",num_str @{thm not_false})], 
neuper@37954
   411
		calc = [], 
neuper@37954
   412
		srls = append_rls "srls_ausBelastung" e_rls 
neuper@37954
   413
				  [Calc("Tools.rhs", eval_rhs"eval_rhs_")], 
neuper@37954
   414
		prls = e_rls, crls = Atools_erls, nrls = e_rls},
neuper@37999
   415
"Script Belastung2BiegelScript (q__q::real) (v_v::real) =                   " ^
neuper@37999
   416
"  (let q___q = Take (q_q v_v = q__q);                                        " ^
neuper@37999
   417
"       q___q = ((Rewrite sym_real_minus_eq_cancel True) @@                " ^
neuper@37999
   418
"              (Rewrite Belastung_Querkraft True)) q___q;                  " ^
neuper@37999
   419
"      (Q__Q:: bool) =                                                     " ^
neuper@37999
   420
"             (SubProblem (Biegelinie',[named,integrate,function],        " ^
neuper@37954
   421
"                          [diff,integration,named])                      " ^
neuper@37999
   422
"                          [REAL (rhs q___q), REAL v_v, REAL_REAL Q]);   " ^
neuper@37999
   423
"       M__M = Rewrite Querkraft_Moment True Q__Q;                          " ^
neuper@37999
   424
"      (M__M::bool) =                                                      " ^
neuper@37999
   425
"             (SubProblem (Biegelinie',[named,integrate,function],        " ^
neuper@37954
   426
"                          [diff,integration,named])                      " ^
neuper@37999
   427
"                          [REAL (rhs M__M), REAL v_v, REAL_REAL M_b]);  " ^
neuper@37999
   428
"       N__N = ((Rewrite Moment_Neigung False) @@                          " ^
neuper@37999
   429
"              (Rewrite make_fun_explicit False)) M__M;                    " ^
neuper@37999
   430
"      (N__N:: bool) =                                                     " ^
neuper@37999
   431
"             (SubProblem (Biegelinie',[named,integrate,function],        " ^
neuper@37954
   432
"                          [diff,integration,named])                      " ^
neuper@37999
   433
"                          [REAL (rhs N__N), REAL v_v, REAL_REAL y']);   " ^
neuper@37999
   434
"      (B__B:: bool) =                                                     " ^
neuper@37999
   435
"             (SubProblem (Biegelinie',[named,integrate,function],        " ^
neuper@37954
   436
"                          [diff,integration,named])                      " ^
neuper@37999
   437
"                          [REAL (rhs N__N), REAL v_v, REAL_REAL y])     " ^
neuper@37999
   438
" in [Q__Q, M__M, N__N, B__B])"
neuper@37954
   439
));
neuper@37954
   440
neuper@37999
   441
*}
neuper@37999
   442
ML {*
neuper@37954
   443
store_met
neuper@37972
   444
    (prep_met thy "met_biege_setzrand" [] e_metID
neuper@37954
   445
	      (["Biegelinien","setzeRandbedingungenEin"],
neuper@37999
   446
	       [("#Given" ,["Funktionen fun_s","Randbedingungen r_b"]),
neuper@37999
   447
		("#Find"  ,["Gleichungen equs'''"])],
neuper@37954
   448
	       {rew_ord'="tless_true", rls'=Erls, calc = [], 
neuper@37954
   449
		srls = srls2, 
neuper@37954
   450
		prls=e_rls,
neuper@37954
   451
	     crls = Atools_erls, nrls = e_rls},
neuper@37999
   452
"Script SetzeRandbedScript (fun_s::bool list) (r_b::bool list) = " ^
neuper@37999
   453
" (let b_1 = NTH 1 r_b;                                         " ^
neuper@37999
   454
"      f_s = filter_sameFunId (lhs b_1) fun_s;                   " ^
neuper@37999
   455
"      (e_1::bool) =                                             " ^
neuper@37999
   456
"             (SubProblem (Biegelinie',[makeFunctionTo,equation]," ^
neuper@37954
   457
"                          [Equation,fromFunction])              " ^
neuper@37999
   458
"                          [BOOL (hd f_s), BOOL b_1]);         " ^
neuper@37999
   459
"      b_2 = NTH 2 r_b;                                         " ^
neuper@37999
   460
"      f_s = filter_sameFunId (lhs b_2) fun_s;                   " ^
neuper@37999
   461
"      (e_2::bool) =                                             " ^
neuper@37999
   462
"             (SubProblem (Biegelinie',[makeFunctionTo,equation]," ^
neuper@37954
   463
"                          [Equation,fromFunction])              " ^
neuper@37999
   464
"                          [BOOL (hd f_s), BOOL b_2]);         " ^
neuper@37999
   465
"      b_3 = NTH 3 r_b;                                         " ^
neuper@37999
   466
"      f_s = filter_sameFunId (lhs b_3) fun_s;                   " ^
neuper@37999
   467
"      (e_3::bool) =                                             " ^
neuper@37999
   468
"             (SubProblem (Biegelinie',[makeFunctionTo,equation]," ^
neuper@37954
   469
"                          [Equation,fromFunction])              " ^
neuper@37999
   470
"                          [BOOL (hd f_s), BOOL b_3]);         " ^
neuper@37999
   471
"      b_4 = NTH 4 r_b;                                         " ^
neuper@37999
   472
"      f_s = filter_sameFunId (lhs b_4) fun_s;                   " ^
neuper@37999
   473
"      (e_4::bool) =                                             " ^
neuper@37999
   474
"             (SubProblem (Biegelinie',[makeFunctionTo,equation]," ^
neuper@37954
   475
"                          [Equation,fromFunction])              " ^
neuper@37999
   476
"                          [BOOL (hd f_s), BOOL b_4])          " ^
neuper@37999
   477
" in [e_1,e_2,e_3,e_4])"
neuper@37954
   478
(* filter requires more than 1 sec !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
neuper@37999
   479
"Script SetzeRandbedScript (fun_s::bool list) (r_b::bool list) = " ^
neuper@37999
   480
" (let b_1 = NTH 1 r_b;                                         " ^
neuper@37999
   481
"      f_s = filter (sameFunId (lhs b_1)) fun_s;                 " ^
neuper@37999
   482
"      (e_1::bool) =                                             " ^
neuper@37999
   483
"             (SubProblem (Biegelinie',[makeFunctionTo,equation]," ^
neuper@37954
   484
"                          [Equation,fromFunction])              " ^
neuper@37999
   485
"                          [BOOL (hd f_s), BOOL b_1]);         " ^
neuper@37999
   486
"      b_2 = NTH 2 r_b;                                         " ^
neuper@37999
   487
"      f_s = filter (sameFunId (lhs b_2)) fun_s;                 " ^
neuper@37999
   488
"      (e_2::bool) =                                             " ^
neuper@37999
   489
"             (SubProblem (Biegelinie',[makeFunctionTo,equation]," ^
neuper@37954
   490
"                          [Equation,fromFunction])              " ^
neuper@37999
   491
"                          [BOOL (hd f_s), BOOL b_2]);         " ^
neuper@37999
   492
"      b_3 = NTH 3 r_b;                                         " ^
neuper@37999
   493
"      f_s = filter (sameFunId (lhs b_3)) fun_s;                 " ^
neuper@37999
   494
"      (e_3::bool) =                                             " ^
neuper@37999
   495
"             (SubProblem (Biegelinie',[makeFunctionTo,equation]," ^
neuper@37954
   496
"                          [Equation,fromFunction])              " ^
neuper@37999
   497
"                          [BOOL (hd f_s), BOOL b_3]);         " ^
neuper@37999
   498
"      b_4 = NTH 4 r_b;                                         " ^
neuper@37999
   499
"      f_s = filter (sameFunId (lhs b_4)) fun_s;                 " ^
neuper@37999
   500
"      (e_4::bool) =                                             " ^
neuper@37999
   501
"             (SubProblem (Biegelinie',[makeFunctionTo,equation]," ^
neuper@37954
   502
"                          [Equation,fromFunction])              " ^
neuper@37999
   503
"                          [BOOL (hd f_s), BOOL b_4])          " ^
neuper@37999
   504
" in [e_1,e_2,e_3,e_4])"*)
neuper@37954
   505
));
neuper@37954
   506
neuper@37999
   507
*}
neuper@37999
   508
ML {*
neuper@37954
   509
store_met
neuper@37972
   510
    (prep_met thy "met_equ_fromfun" [] e_metID
neuper@37954
   511
	      (["Equation","fromFunction"],
neuper@37999
   512
	       [("#Given" ,["functionEq fu_n","substitution su_b"]),
neuper@37999
   513
		("#Find"  ,["equality equ'''"])],
neuper@37954
   514
	       {rew_ord'="tless_true", rls'=Erls, calc = [], 
neuper@37954
   515
		srls = append_rls "srls_in_EquationfromFunc" e_rls
neuper@37954
   516
				  [Calc("Tools.lhs", eval_lhs"eval_lhs_"),
neuper@37954
   517
				   Calc("Atools.argument'_in",
neuper@37954
   518
					eval_argument_in
neuper@37954
   519
					    "Atools.argument'_in")], 
neuper@37999
   520
		prls=e_rls, crls = Atools_erls, nrls = e_rls},
neuper@37954
   521
(*(M_b x = c_2 + c * x + -1 * q_0 / 2 * x ^^^ 2) (M_b L = 0) -->
neuper@37954
   522
       0 = c_2 + c * L + -1 * q_0 / 2 * L ^^^ 2*)
neuper@37999
   523
"Script Function2Equality (fu_n::bool) (su_b::bool) =" ^
neuper@37999
   524
" (let fu_n = Take fu_n;                             " ^
neuper@37999
   525
"      bd_v = argument_in (lhs fu_n);                " ^
neuper@37999
   526
"      va_l = argument_in (lhs su_b);                " ^
neuper@37999
   527
"      eq_u = (Substitute [bd_v = va_l]) fu_n;       " ^
neuper@37999
   528
"      eq_u = (Substitute [su_b]) fu_n               " ^
neuper@37999
   529
" in (Rewrite_Set norm_Rational False) eq_u)             "
neuper@37954
   530
));
neuper@37954
   531
*}
neuper@37954
   532
neuper@37906
   533
end
neuper@37906
   534