src/Pure/isac/IsacKnowledge/Biegelinie.ML
author Walther Neuper <neuper@ist.tugraz.at>
Wed, 21 Jul 2010 13:53:39 +0200
branchisac-from-Isabelle2009-2
changeset 37871 875b6efa7ced
permissions -rw-r--r--
added isac-hook in Pure/thm and isac-code
neuper@37871
     1
(* chapter 'Biegelinie' from the textbook: 
neuper@37871
     2
   Timischl, Kaiser. Ingenieur-Mathematik 3. Wien 1999. p.268-271.
neuper@37871
     3
   authors: Walther Neuper 2005
neuper@37871
     4
   (c) due to copyright terms
neuper@37871
     5
neuper@37871
     6
use"IsacKnowledge/Biegelinie.ML";
neuper@37871
     7
use"Biegelinie.ML";
neuper@37871
     8
neuper@37871
     9
remove_thy"Typefix";
neuper@37871
    10
remove_thy"Biegelinie";
neuper@37871
    11
use_thy"IsacKnowledge/Isac";
neuper@37871
    12
*)
neuper@37871
    13
neuper@37871
    14
(** interface isabelle -- isac **)
neuper@37871
    15
neuper@37871
    16
theory' := overwritel (!theory', [("Biegelinie.thy",Biegelinie.thy)]);
neuper@37871
    17
neuper@37871
    18
(** theory elements **)
neuper@37871
    19
neuper@37871
    20
store_isa ["IsacKnowledge"] [];
neuper@37871
    21
store_thy Biegelinie.thy 
neuper@37871
    22
	  ["Walther Neuper 2005 supported by a grant from NMI Austria"];
neuper@37871
    23
store_isa ["IsacKnowledge", theory2thyID Biegelinie.thy, "Theorems"] 
neuper@37871
    24
	  ["Walther Neuper 2005 supported by a grant from NMI Austria"];
neuper@37871
    25
store_thm Biegelinie.thy ("Belastung_Querkraft", Belastung_Querkraft)
neuper@37871
    26
	  ["Walther Neuper 2005 supported by a grant from NMI Austria"];
neuper@37871
    27
store_thm Biegelinie.thy ("Moment_Neigung", Moment_Neigung)
neuper@37871
    28
	  ["Walther Neuper 2005 supported by a grant from NMI Austria"];
neuper@37871
    29
store_thm Biegelinie.thy ("Moment_Querkraft", Moment_Querkraft)
neuper@37871
    30
	  ["Walther Neuper 2005 supported by a grant from NMI Austria"];
neuper@37871
    31
store_thm Biegelinie.thy ("Neigung_Moment", Neigung_Moment)
neuper@37871
    32
	  ["Walther Neuper 2005 supported by a grant from NMI Austria"];
neuper@37871
    33
store_thm Biegelinie.thy ("Querkraft_Belastung", Querkraft_Belastung)
neuper@37871
    34
	  ["Walther Neuper 2005 supported by a grant from NMI Austria"];
neuper@37871
    35
store_thm Biegelinie.thy ("Querkraft_Moment", Querkraft_Moment)
neuper@37871
    36
	  ["Walther Neuper 2005 supported by a grant from NMI Austria"];
neuper@37871
    37
store_thm Biegelinie.thy ("make_fun_explicit", make_fun_explicit)
neuper@37871
    38
	  ["Walther Neuper 2005 supported by a grant from NMI Austria"];
neuper@37871
    39
neuper@37871
    40
neuper@37871
    41
(** problems **)
neuper@37871
    42
neuper@37871
    43
store_pbt
neuper@37871
    44
 (prep_pbt Biegelinie.thy "pbl_bieg" [] e_pblID
neuper@37871
    45
 (["Biegelinien"],
neuper@37871
    46
  [("#Given" ,["Traegerlaenge l_", "Streckenlast q__"]),
neuper@37871
    47
   (*("#Where",["0 < l_"]), ...wait for &lt; and handling Arbfix*)
neuper@37871
    48
   ("#Find"  ,["Biegelinie b_"]),
neuper@37871
    49
   ("#Relate",["Randbedingungen rb_"])
neuper@37871
    50
  ],
neuper@37871
    51
  append_rls "e_rls" e_rls [], 
neuper@37871
    52
  None, 
neuper@37871
    53
  [["IntegrierenUndKonstanteBestimmen2"]]));
neuper@37871
    54
neuper@37871
    55
store_pbt 
neuper@37871
    56
 (prep_pbt Biegelinie.thy "pbl_bieg_mom" [] e_pblID
neuper@37871
    57
 (["MomentBestimmte","Biegelinien"],
neuper@37871
    58
  [("#Given" ,["Traegerlaenge l_", "Streckenlast q__"]),
neuper@37871
    59
   (*("#Where",["0 < l_"]), ...wait for &lt; and handling Arbfix*)
neuper@37871
    60
   ("#Find"  ,["Biegelinie b_"]),
neuper@37871
    61
   ("#Relate",["RandbedingungenBiegung rb_","RandbedingungenMoment rm_"])
neuper@37871
    62
  ],
neuper@37871
    63
  append_rls "e_rls" e_rls [], 
neuper@37871
    64
  None, 
neuper@37871
    65
  [["IntegrierenUndKonstanteBestimmen"]]));
neuper@37871
    66
neuper@37871
    67
store_pbt
neuper@37871
    68
 (prep_pbt Biegelinie.thy "pbl_bieg_momg" [] e_pblID
neuper@37871
    69
 (["MomentGegebene","Biegelinien"],
neuper@37871
    70
  [],
neuper@37871
    71
  append_rls "e_rls" e_rls [], 
neuper@37871
    72
  None, 
neuper@37871
    73
  [["IntegrierenUndKonstanteBestimmen","2xIntegrieren"]]));
neuper@37871
    74
neuper@37871
    75
store_pbt
neuper@37871
    76
 (prep_pbt Biegelinie.thy "pbl_bieg_einf" [] e_pblID
neuper@37871
    77
 (["einfache","Biegelinien"],
neuper@37871
    78
  [],
neuper@37871
    79
  append_rls "e_rls" e_rls [], 
neuper@37871
    80
  None, 
neuper@37871
    81
  [["IntegrierenUndKonstanteBestimmen","4x4System"]]));
neuper@37871
    82
neuper@37871
    83
store_pbt
neuper@37871
    84
 (prep_pbt Biegelinie.thy "pbl_bieg_momquer" [] e_pblID
neuper@37871
    85
 (["QuerkraftUndMomentBestimmte","Biegelinien"],
neuper@37871
    86
  [],
neuper@37871
    87
  append_rls "e_rls" e_rls [], 
neuper@37871
    88
  None, 
neuper@37871
    89
  [["IntegrierenUndKonstanteBestimmen","1xIntegrieren"]]));
neuper@37871
    90
neuper@37871
    91
store_pbt
neuper@37871
    92
 (prep_pbt Biegelinie.thy "pbl_bieg_vonq" [] e_pblID
neuper@37871
    93
 (["vonBelastungZu","Biegelinien"],
neuper@37871
    94
  [("#Given" ,["Streckenlast q__","FunktionsVariable v_"]),
neuper@37871
    95
   ("#Find"  ,["Funktionen funs___"])],
neuper@37871
    96
  append_rls "e_rls" e_rls [], 
neuper@37871
    97
  None, 
neuper@37871
    98
  [["Biegelinien","ausBelastung"]]));
neuper@37871
    99
neuper@37871
   100
store_pbt
neuper@37871
   101
 (prep_pbt Biegelinie.thy "pbl_bieg_randbed" [] e_pblID
neuper@37871
   102
 (["setzeRandbedingungen","Biegelinien"],
neuper@37871
   103
  [("#Given" ,["Funktionen funs_","Randbedingungen rb_"]),
neuper@37871
   104
   ("#Find"  ,["Gleichungen equs___"])],
neuper@37871
   105
  append_rls "e_rls" e_rls [], 
neuper@37871
   106
  None, 
neuper@37871
   107
  [["Biegelinien","setzeRandbedingungenEin"]]));
neuper@37871
   108
neuper@37871
   109
store_pbt
neuper@37871
   110
 (prep_pbt Biegelinie.thy "pbl_equ_fromfun" [] e_pblID
neuper@37871
   111
 (["makeFunctionTo","equation"],
neuper@37871
   112
  [("#Given" ,["functionEq fun_","substitution sub_"]),
neuper@37871
   113
   ("#Find"  ,["equality equ___"])],
neuper@37871
   114
  append_rls "e_rls" e_rls [], 
neuper@37871
   115
  None, 
neuper@37871
   116
  [["Equation","fromFunction"]]));
neuper@37871
   117
neuper@37871
   118
neuper@37871
   119
neuper@37871
   120
(** methods **)
neuper@37871
   121
neuper@37871
   122
val srls = Rls {id="srls_IntegrierenUnd..", 
neuper@37871
   123
		preconds = [], 
neuper@37871
   124
		rew_ord = ("termlessI",termlessI), 
neuper@37871
   125
		erls = append_rls "erls_in_srls_IntegrierenUnd.." e_rls
neuper@37871
   126
				  [(*for asm in nth_Cons_ ...*)
neuper@37871
   127
				   Calc ("op <",eval_equ "#less_"),
neuper@37871
   128
				   (*2nd nth_Cons_ pushes n+-1 into asms*)
neuper@37871
   129
				   Calc("op +", eval_binop "#add_")
neuper@37871
   130
				   ], 
neuper@37871
   131
		srls = Erls, calc = [],
neuper@37871
   132
		rules = [Thm ("nth_Cons_",num_str nth_Cons_),
neuper@37871
   133
			 Calc("op +", eval_binop "#add_"),
neuper@37871
   134
			 Thm ("nth_Nil_",num_str nth_Nil_),
neuper@37871
   135
			 Calc("Tools.lhs", eval_lhs"eval_lhs_"),
neuper@37871
   136
			 Calc("Tools.rhs", eval_rhs"eval_rhs_"),
neuper@37871
   137
			 Calc("Atools.argument'_in",
neuper@37871
   138
			      eval_argument_in "Atools.argument'_in")
neuper@37871
   139
			 ],
neuper@37871
   140
		scr = EmptyScr};
neuper@37871
   141
    
neuper@37871
   142
val srls2 = 
neuper@37871
   143
    Rls {id="srls_IntegrierenUnd..", 
neuper@37871
   144
	 preconds = [], 
neuper@37871
   145
	 rew_ord = ("termlessI",termlessI), 
neuper@37871
   146
	 erls = append_rls "erls_in_srls_IntegrierenUnd.." e_rls
neuper@37871
   147
			   [(*for asm in nth_Cons_ ...*)
neuper@37871
   148
			    Calc ("op <",eval_equ "#less_"),
neuper@37871
   149
			    (*2nd nth_Cons_ pushes n+-1 into asms*)
neuper@37871
   150
			    Calc("op +", eval_binop "#add_")
neuper@37871
   151
			    ], 
neuper@37871
   152
	 srls = Erls, calc = [],
neuper@37871
   153
	 rules = [Thm ("nth_Cons_",num_str nth_Cons_),
neuper@37871
   154
		  Calc("op +", eval_binop "#add_"),
neuper@37871
   155
		  Thm ("nth_Nil_", num_str nth_Nil_),
neuper@37871
   156
		  Calc("Tools.lhs", eval_lhs "eval_lhs_"),
neuper@37871
   157
		  Calc("Atools.filter'_sameFunId",
neuper@37871
   158
		       eval_filter_sameFunId "Atools.filter'_sameFunId"),
neuper@37871
   159
		  (*WN070514 just for smltest/../biegelinie.sml ...*)
neuper@37871
   160
		  Calc("Atools.sameFunId", eval_sameFunId "Atools.sameFunId"),
neuper@37871
   161
		  Thm ("filter_Cons", num_str filter_Cons),
neuper@37871
   162
		  Thm ("filter_Nil", num_str filter_Nil),
neuper@37871
   163
		  Thm ("if_True", num_str if_True),
neuper@37871
   164
		  Thm ("if_False", num_str if_False),
neuper@37871
   165
		  Thm ("hd_thm", num_str hd_thm)
neuper@37871
   166
		  ],
neuper@37871
   167
	 scr = EmptyScr};
neuper@37871
   168
(*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*)
neuper@37871
   169
(* use"IsacKnowledge/Biegelinie.ML";
neuper@37871
   170
   *)
neuper@37871
   171
 
neuper@37871
   172
store_met
neuper@37871
   173
    (prep_met Biegelinie.thy "met_biege" [] e_metID
neuper@37871
   174
	      (["IntegrierenUndKonstanteBestimmen"],
neuper@37871
   175
	       [("#Given" ,["Traegerlaenge l_", "Streckenlast q__",
neuper@37871
   176
			    "FunktionsVariable v_"]),
neuper@37871
   177
		(*("#Where",["0 < l_"]), ...wait for &lt; and handling Arbfix*)
neuper@37871
   178
		("#Find"  ,["Biegelinie b_"]),
neuper@37871
   179
		("#Relate",["RandbedingungenBiegung rb_",
neuper@37871
   180
			    "RandbedingungenMoment rm_"])
neuper@37871
   181
		],
neuper@37871
   182
	       {rew_ord'="tless_true", 
neuper@37871
   183
		rls' = append_rls "erls_IntegrierenUndK.." e_rls 
neuper@37871
   184
				  [Calc ("Atools.ident",eval_ident "#ident_"),
neuper@37871
   185
				   Thm ("not_true",num_str not_true),
neuper@37871
   186
				   Thm ("not_false",num_str not_false)], 
neuper@37871
   187
		calc = [], srls = srls, prls = Erls,
neuper@37871
   188
		crls = Atools_erls, nrls = Erls},
neuper@37871
   189
"Script BiegelinieScript                                                  \
neuper@37871
   190
\(l_::real) (q__::real) (v_::real) (b_::real=>real)                        \
neuper@37871
   191
\(rb_::bool list) (rm_::bool list) =                                      \
neuper@37871
   192
\  (let q___ = Take (q_ v_ = q__);                                           \
neuper@37871
   193
\       q___ = ((Rewrite sym_real_minus_eq_cancel True) @@                 \
neuper@37871
   194
\              (Rewrite Belastung_Querkraft True)) q___;                   \
neuper@37871
   195
\      (Q__:: bool) =                                                     \
neuper@37871
   196
\             (SubProblem (Biegelinie_,[named,integrate,function],        \
neuper@37871
   197
\                          [diff,integration,named])                      \
neuper@37871
   198
\                          [real_ (rhs q___), real_ v_, real_real_ Q]);    \
neuper@37871
   199
\       Q__ = Rewrite Querkraft_Moment True Q__;                          \
neuper@37871
   200
\      (M__::bool) =                                                      \
neuper@37871
   201
\             (SubProblem (Biegelinie_,[named,integrate,function],        \
neuper@37871
   202
\                          [diff,integration,named])                      \
neuper@37871
   203
\                          [real_ (rhs Q__), real_ v_, real_real_ M_b]);  \
neuper@37871
   204
\       e1__ = nth_ 1 rm_;                                                \
neuper@37871
   205
\      (x1__::real) = argument_in (lhs e1__);                             \
neuper@37871
   206
\      (M1__::bool) = (Substitute [v_ = x1__]) M__;                       \
neuper@37871
   207
\       M1__        = (Substitute [e1__]) M1__ ;                          \
neuper@37871
   208
\       M2__ = Take M__;                                                  "^
neuper@37871
   209
(*without this Take 'Substitute [v_ = x2__]' takes _last formula from ctree_*)
neuper@37871
   210
"       e2__ = nth_ 2 rm_;                                                \
neuper@37871
   211
\      (x2__::real) = argument_in (lhs e2__);                             \
neuper@37871
   212
\      (M2__::bool) = ((Substitute [v_ = x2__]) @@                        \
neuper@37871
   213
\                      (Substitute [e2__])) M2__;                         \
neuper@37871
   214
\      (c_1_2__::bool list) =                                             \
neuper@37871
   215
\             (SubProblem (Biegelinie_,[linear,system],[no_met])          \
neuper@37871
   216
\                          [booll_ [M1__, M2__], reall [c,c_2]]);         \
neuper@37871
   217
\       M__ = Take  M__;                                                  \
neuper@37871
   218
\       M__ = ((Substitute c_1_2__) @@                                    \
neuper@37871
   219
\              (Try (Rewrite_Set_Inst [(bdv_1, c),(bdv_2, c_2)]\
neuper@37871
   220
\                                   simplify_System False)) @@ \
neuper@37871
   221
\              (Rewrite Moment_Neigung False) @@ \
neuper@37871
   222
\              (Rewrite make_fun_explicit False)) M__;                    "^
neuper@37871
   223
(*----------------------- and the same once more ------------------------*)
neuper@37871
   224
"      (N__:: bool) =                                                     \
neuper@37871
   225
\             (SubProblem (Biegelinie_,[named,integrate,function],        \
neuper@37871
   226
\                          [diff,integration,named])                      \
neuper@37871
   227
\                          [real_ (rhs M__), real_ v_, real_real_ y']);   \
neuper@37871
   228
\      (B__:: bool) =                                                     \
neuper@37871
   229
\             (SubProblem (Biegelinie_,[named,integrate,function],        \
neuper@37871
   230
\                          [diff,integration,named])                      \
neuper@37871
   231
\                          [real_ (rhs N__), real_ v_, real_real_ y]);    \
neuper@37871
   232
\       e1__ = nth_ 1 rb_;                                                \
neuper@37871
   233
\      (x1__::real) = argument_in (lhs e1__);                             \
neuper@37871
   234
\      (B1__::bool) = (Substitute [v_ = x1__]) B__;                       \
neuper@37871
   235
\       B1__        = (Substitute [e1__]) B1__ ;                          \
neuper@37871
   236
\       B2__ = Take B__;                                                  \
neuper@37871
   237
\       e2__ = nth_ 2 rb_;                                                \
neuper@37871
   238
\      (x2__::real) = argument_in (lhs e2__);                             \
neuper@37871
   239
\      (B2__::bool) = ((Substitute [v_ = x2__]) @@                        \
neuper@37871
   240
\                      (Substitute [e2__])) B2__;                         \
neuper@37871
   241
\      (c_1_2__::bool list) =                                             \
neuper@37871
   242
\             (SubProblem (Biegelinie_,[linear,system],[no_met])          \
neuper@37871
   243
\                          [booll_ [B1__, B2__], reall [c,c_2]]);         \
neuper@37871
   244
\       B__ = Take  B__;                                                  \
neuper@37871
   245
\       B__ = ((Substitute c_1_2__) @@                                    \
neuper@37871
   246
\              (Rewrite_Set_Inst [(bdv, x)] make_ratpoly_in False)) B__   \
neuper@37871
   247
\ in B__)"
neuper@37871
   248
));
neuper@37871
   249
neuper@37871
   250
store_met
neuper@37871
   251
    (prep_met Biegelinie.thy "met_biege_2" [] e_metID
neuper@37871
   252
	      (["IntegrierenUndKonstanteBestimmen2"],
neuper@37871
   253
	       [("#Given" ,["Traegerlaenge l_", "Streckenlast q__",
neuper@37871
   254
			    "FunktionsVariable v_"]),
neuper@37871
   255
		(*("#Where",["0 < l_"]), ...wait for &lt; and handling Arbfix*)
neuper@37871
   256
		("#Find"  ,["Biegelinie b_"]),
neuper@37871
   257
		("#Relate",["Randbedingungen rb_"])
neuper@37871
   258
		],
neuper@37871
   259
	       {rew_ord'="tless_true", 
neuper@37871
   260
		rls' = append_rls "erls_IntegrierenUndK.." e_rls 
neuper@37871
   261
				  [Calc ("Atools.ident",eval_ident "#ident_"),
neuper@37871
   262
				   Thm ("not_true",num_str not_true),
neuper@37871
   263
				   Thm ("not_false",num_str not_false)], 
neuper@37871
   264
		calc = [], 
neuper@37871
   265
		srls = append_rls "erls_IntegrierenUndK.." e_rls 
neuper@37871
   266
				  [Calc("Tools.rhs", eval_rhs"eval_rhs_"),
neuper@37871
   267
				   Calc ("Atools.ident",eval_ident "#ident_"),
neuper@37871
   268
				   Thm ("last_thmI",num_str last_thmI),
neuper@37871
   269
				   Thm ("if_True",num_str if_True),
neuper@37871
   270
				   Thm ("if_False",num_str if_False)
neuper@37871
   271
				   ],
neuper@37871
   272
		prls = Erls, crls = Atools_erls, nrls = Erls},
neuper@37871
   273
"Script Biegelinie2Script                                                 \
neuper@37871
   274
\(l_::real) (q__::real) (v_::real) (b_::real=>real) (rb_::bool list) =    \
neuper@37871
   275
\  (let                                                                   \
neuper@37871
   276
\      (funs_:: bool list) =                                              \
neuper@37871
   277
\             (SubProblem (Biegelinie_,[vonBelastungZu,Biegelinien],      \
neuper@37871
   278
\                          [Biegelinien,ausBelastung])                    \
neuper@37871
   279
\                          [real_ q__, real_ v_]);                        \
neuper@37871
   280
\      (equs_::bool list) =                                               \
neuper@37871
   281
\             (SubProblem (Biegelinie_,[setzeRandbedingungen,Biegelinien],\
neuper@37871
   282
\                          [Biegelinien,setzeRandbedingungenEin])         \
neuper@37871
   283
\                          [booll_ funs_, booll_ rb_]);                   \
neuper@37871
   284
\      (cons_::bool list) =                                               \
neuper@37871
   285
\             (SubProblem (Biegelinie_,[linear,system],[no_met])          \
neuper@37871
   286
\                          [booll_ equs_, reall [c,c_2,c_3,c_4]]);        \
neuper@37871
   287
\       B_ = Take (lastI funs_);                                          \
neuper@37871
   288
\       B_ = ((Substitute cons_) @@                                       \
neuper@37871
   289
\              (Rewrite_Set_Inst [(bdv, v_)] make_ratpoly_in False)) B_   \
neuper@37871
   290
\ in B_)"
neuper@37871
   291
));
neuper@37871
   292
neuper@37871
   293
store_met
neuper@37871
   294
    (prep_met Biegelinie.thy "met_biege_intconst_2" [] e_metID
neuper@37871
   295
	      (["IntegrierenUndKonstanteBestimmen","2xIntegrieren"],
neuper@37871
   296
	       [],
neuper@37871
   297
	       {rew_ord'="tless_true", rls'=Erls, calc = [], 
neuper@37871
   298
		srls = e_rls, 
neuper@37871
   299
		prls=e_rls,
neuper@37871
   300
	     crls = Atools_erls, nrls = e_rls},
neuper@37871
   301
"empty_script"
neuper@37871
   302
));
neuper@37871
   303
neuper@37871
   304
store_met
neuper@37871
   305
    (prep_met Biegelinie.thy "met_biege_intconst_4" [] e_metID
neuper@37871
   306
	      (["IntegrierenUndKonstanteBestimmen","4x4System"],
neuper@37871
   307
	       [],
neuper@37871
   308
	       {rew_ord'="tless_true", rls'=Erls, calc = [], 
neuper@37871
   309
		srls = e_rls, 
neuper@37871
   310
		prls=e_rls,
neuper@37871
   311
	     crls = Atools_erls, nrls = e_rls},
neuper@37871
   312
"empty_script"
neuper@37871
   313
));
neuper@37871
   314
neuper@37871
   315
store_met
neuper@37871
   316
    (prep_met Biegelinie.thy "met_biege_intconst_1" [] e_metID
neuper@37871
   317
	      (["IntegrierenUndKonstanteBestimmen","1xIntegrieren"],
neuper@37871
   318
	       [],
neuper@37871
   319
	       {rew_ord'="tless_true", rls'=Erls, calc = [], 
neuper@37871
   320
		srls = e_rls, 
neuper@37871
   321
		prls=e_rls,
neuper@37871
   322
	     crls = Atools_erls, nrls = e_rls},
neuper@37871
   323
"empty_script"
neuper@37871
   324
));
neuper@37871
   325
neuper@37871
   326
store_met
neuper@37871
   327
    (prep_met Biegelinie.thy "met_biege2" [] e_metID
neuper@37871
   328
	      (["Biegelinien"],
neuper@37871
   329
	       [],
neuper@37871
   330
	       {rew_ord'="tless_true", rls'=Erls, calc = [], 
neuper@37871
   331
		srls = e_rls, 
neuper@37871
   332
		prls=e_rls,
neuper@37871
   333
	     crls = Atools_erls, nrls = e_rls},
neuper@37871
   334
"empty_script"
neuper@37871
   335
));
neuper@37871
   336
neuper@37871
   337
store_met
neuper@37871
   338
    (prep_met Biegelinie.thy "met_biege_ausbelast" [] e_metID
neuper@37871
   339
	      (["Biegelinien","ausBelastung"],
neuper@37871
   340
	       [("#Given" ,["Streckenlast q__","FunktionsVariable v_"]),
neuper@37871
   341
		("#Find"  ,["Funktionen funs_"])],
neuper@37871
   342
	       {rew_ord'="tless_true", 
neuper@37871
   343
		rls' = append_rls "erls_ausBelastung" e_rls 
neuper@37871
   344
				  [Calc ("Atools.ident",eval_ident "#ident_"),
neuper@37871
   345
				   Thm ("not_true",num_str not_true),
neuper@37871
   346
				   Thm ("not_false",num_str not_false)], 
neuper@37871
   347
		calc = [], 
neuper@37871
   348
		srls = append_rls "srls_ausBelastung" e_rls 
neuper@37871
   349
				  [Calc("Tools.rhs", eval_rhs"eval_rhs_")], 
neuper@37871
   350
		prls = e_rls, crls = Atools_erls, nrls = e_rls},
neuper@37871
   351
"Script Belastung2BiegelScript (q__::real) (v_::real) =                    \
neuper@37871
   352
\  (let q___ = Take (q_ v_ = q__);                                           \
neuper@37871
   353
\       q___ = ((Rewrite sym_real_minus_eq_cancel True) @@                 \
neuper@37871
   354
\              (Rewrite Belastung_Querkraft True)) q___;                   \
neuper@37871
   355
\      (Q__:: bool) =                                                     \
neuper@37871
   356
\             (SubProblem (Biegelinie_,[named,integrate,function],        \
neuper@37871
   357
\                          [diff,integration,named])                      \
neuper@37871
   358
\                          [real_ (rhs q___), real_ v_, real_real_ Q]);    \
neuper@37871
   359
\       M__ = Rewrite Querkraft_Moment True Q__;                          \
neuper@37871
   360
\      (M__::bool) =                                                      \
neuper@37871
   361
\             (SubProblem (Biegelinie_,[named,integrate,function],        \
neuper@37871
   362
\                          [diff,integration,named])                      \
neuper@37871
   363
\                          [real_ (rhs M__), real_ v_, real_real_ M_b]);  \
neuper@37871
   364
\       N__ = ((Rewrite Moment_Neigung False) @@                          \
neuper@37871
   365
\              (Rewrite make_fun_explicit False)) M__;                    \
neuper@37871
   366
\      (N__:: bool) =                                                     \
neuper@37871
   367
\             (SubProblem (Biegelinie_,[named,integrate,function],        \
neuper@37871
   368
\                          [diff,integration,named])                      \
neuper@37871
   369
\                          [real_ (rhs N__), real_ v_, real_real_ y']);   \
neuper@37871
   370
\      (B__:: bool) =                                                     \
neuper@37871
   371
\             (SubProblem (Biegelinie_,[named,integrate,function],        \
neuper@37871
   372
\                          [diff,integration,named])                      \
neuper@37871
   373
\                          [real_ (rhs N__), real_ v_, real_real_ y])    \
neuper@37871
   374
\ in [Q__, M__, N__, B__])"
neuper@37871
   375
));
neuper@37871
   376
neuper@37871
   377
store_met
neuper@37871
   378
    (prep_met Biegelinie.thy "met_biege_setzrand" [] e_metID
neuper@37871
   379
	      (["Biegelinien","setzeRandbedingungenEin"],
neuper@37871
   380
	       [("#Given" ,["Funktionen funs_","Randbedingungen rb_"]),
neuper@37871
   381
		("#Find"  ,["Gleichungen equs___"])],
neuper@37871
   382
	       {rew_ord'="tless_true", rls'=Erls, calc = [], 
neuper@37871
   383
		srls = srls2, 
neuper@37871
   384
		prls=e_rls,
neuper@37871
   385
	     crls = Atools_erls, nrls = e_rls},
neuper@37871
   386
"Script SetzeRandbedScript (funs_::bool list) (rb_::bool list) = \
neuper@37871
   387
\ (let b1_ = nth_ 1 rb_;                                         \
neuper@37871
   388
\      fs_ = filter_sameFunId (lhs b1_) funs_;                   \
neuper@37871
   389
\      (e1_::bool) =                                             \
neuper@37871
   390
\             (SubProblem (Biegelinie_,[makeFunctionTo,equation],\
neuper@37871
   391
\                          [Equation,fromFunction])              \
neuper@37871
   392
\                          [bool_ (hd fs_), bool_ b1_]);         \
neuper@37871
   393
\      b2_ = nth_ 2 rb_;                                         \
neuper@37871
   394
\      fs_ = filter_sameFunId (lhs b2_) funs_;                   \
neuper@37871
   395
\      (e2_::bool) =                                             \
neuper@37871
   396
\             (SubProblem (Biegelinie_,[makeFunctionTo,equation],\
neuper@37871
   397
\                          [Equation,fromFunction])              \
neuper@37871
   398
\                          [bool_ (hd fs_), bool_ b2_]);         \
neuper@37871
   399
\      b3_ = nth_ 3 rb_;                                         \
neuper@37871
   400
\      fs_ = filter_sameFunId (lhs b3_) funs_;                   \
neuper@37871
   401
\      (e3_::bool) =                                             \
neuper@37871
   402
\             (SubProblem (Biegelinie_,[makeFunctionTo,equation],\
neuper@37871
   403
\                          [Equation,fromFunction])              \
neuper@37871
   404
\                          [bool_ (hd fs_), bool_ b3_]);         \
neuper@37871
   405
\      b4_ = nth_ 4 rb_;                                         \
neuper@37871
   406
\      fs_ = filter_sameFunId (lhs b4_) funs_;                   \
neuper@37871
   407
\      (e4_::bool) =                                             \
neuper@37871
   408
\             (SubProblem (Biegelinie_,[makeFunctionTo,equation],\
neuper@37871
   409
\                          [Equation,fromFunction])              \
neuper@37871
   410
\                          [bool_ (hd fs_), bool_ b4_])          \
neuper@37871
   411
\ in [e1_,e2_,e3_,e4_])"
neuper@37871
   412
(* filter requires more than 1 sec !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
neuper@37871
   413
"Script SetzeRandbedScript (funs_::bool list) (rb_::bool list) = \
neuper@37871
   414
\ (let b1_ = nth_ 1 rb_;                                         \
neuper@37871
   415
\      fs_ = filter (sameFunId (lhs b1_)) funs_;                 \
neuper@37871
   416
\      (e1_::bool) =                                             \
neuper@37871
   417
\             (SubProblem (Biegelinie_,[makeFunctionTo,equation],\
neuper@37871
   418
\                          [Equation,fromFunction])              \
neuper@37871
   419
\                          [bool_ (hd fs_), bool_ b1_]);         \
neuper@37871
   420
\      b2_ = nth_ 2 rb_;                                         \
neuper@37871
   421
\      fs_ = filter (sameFunId (lhs b2_)) funs_;                 \
neuper@37871
   422
\      (e2_::bool) =                                             \
neuper@37871
   423
\             (SubProblem (Biegelinie_,[makeFunctionTo,equation],\
neuper@37871
   424
\                          [Equation,fromFunction])              \
neuper@37871
   425
\                          [bool_ (hd fs_), bool_ b2_]);         \
neuper@37871
   426
\      b3_ = nth_ 3 rb_;                                         \
neuper@37871
   427
\      fs_ = filter (sameFunId (lhs b3_)) funs_;                 \
neuper@37871
   428
\      (e3_::bool) =                                             \
neuper@37871
   429
\             (SubProblem (Biegelinie_,[makeFunctionTo,equation],\
neuper@37871
   430
\                          [Equation,fromFunction])              \
neuper@37871
   431
\                          [bool_ (hd fs_), bool_ b3_]);         \
neuper@37871
   432
\      b4_ = nth_ 4 rb_;                                         \
neuper@37871
   433
\      fs_ = filter (sameFunId (lhs b4_)) funs_;                 \
neuper@37871
   434
\      (e4_::bool) =                                             \
neuper@37871
   435
\             (SubProblem (Biegelinie_,[makeFunctionTo,equation],\
neuper@37871
   436
\                          [Equation,fromFunction])              \
neuper@37871
   437
\                          [bool_ (hd fs_), bool_ b4_])          \
neuper@37871
   438
\ in [e1_,e2_,e3_,e4_])"*)
neuper@37871
   439
));
neuper@37871
   440
neuper@37871
   441
store_met
neuper@37871
   442
    (prep_met Biegelinie.thy "met_equ_fromfun" [] e_metID
neuper@37871
   443
	      (["Equation","fromFunction"],
neuper@37871
   444
	       [("#Given" ,["functionEq fun_","substitution sub_"]),
neuper@37871
   445
		("#Find"  ,["equality equ___"])],
neuper@37871
   446
	       {rew_ord'="tless_true", rls'=Erls, calc = [], 
neuper@37871
   447
		srls = append_rls "srls_in_EquationfromFunc" e_rls
neuper@37871
   448
				  [Calc("Tools.lhs", eval_lhs"eval_lhs_"),
neuper@37871
   449
				   Calc("Atools.argument'_in",
neuper@37871
   450
					eval_argument_in
neuper@37871
   451
					    "Atools.argument'_in")], 
neuper@37871
   452
		prls=e_rls,
neuper@37871
   453
	     crls = Atools_erls, nrls = e_rls},
neuper@37871
   454
(*(M_b x = c_2 + c * x + -1 * q_0 / 2 * x ^^^ 2) (M_b L = 0) -->
neuper@37871
   455
       0 = c_2 + c * L + -1 * q_0 / 2 * L ^^^ 2*)
neuper@37871
   456
"Script Function2Equality (fun_::bool) (sub_::bool) =\
neuper@37871
   457
\ (let fun_ = Take fun_;                             \
neuper@37871
   458
\      bdv_ = argument_in (lhs fun_);                \
neuper@37871
   459
\      val_ = argument_in (lhs sub_);                \
neuper@37871
   460
\      equ_ = (Substitute [bdv_ = val_]) fun_;       \
neuper@37871
   461
\      equ_ = (Substitute [sub_]) fun_               \
neuper@37871
   462
\ in (Rewrite_Set norm_Rational False) equ_)             "
neuper@37871
   463
));
neuper@37871
   464
neuper@37871
   465
neuper@37871
   466
neuper@37871
   467
(* use"IsacKnowledge/Biegelinie.ML";
neuper@37871
   468
   *)