src/Tools/isac/Knowledge/Biegelinie.thy
author Walther Neuper <wneuper@ist.tugraz.at>
Fri, 23 Mar 2018 10:14:39 +0100
changeset 59411 3e241a6938ce
parent 59406 509d70b507e5
child 59416 229e5c9cf78b
permissions -rw-r--r--
Celem: Test_Isac partially

"xxxe_rew_ordxxx" has slipped in with last changeset.
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
bonzai@41919
     7
theory Biegelinie imports Integrate Equation EqSystem Atools begin
neuper@37906
     8
neuper@37906
     9
consts
neuper@37906
    10
neuper@42385
    11
  qq    :: "real => real"             (* 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@52148
    59
axiomatization where
neuper@37906
    60
neuper@52148
    61
  Querkraft_Belastung:   "Q' x = -qq x" and
neuper@52148
    62
  Belastung_Querkraft:   "-qq x = Q' x" and
neuper@37906
    63
neuper@52148
    64
  Moment_Querkraft:      "M_b' x = Q x" and
neuper@52148
    65
  Querkraft_Moment:      "Q x = M_b' x" and
neuper@37906
    66
neuper@52148
    67
  Neigung_Moment:        "y'' x = -M_b x/ EI" and
neuper@52148
    68
  Moment_Neigung:        "M_b x = -EI * y'' x" and
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@55425
    73
setup {*
neuper@55425
    74
KEStore_Elems.add_thes
neuper@55425
    75
  [make_thy @{theory}
neuper@55425
    76
    ["Walther Neuper 2005 supported by a grant from NMI Austria"],
neuper@55425
    77
  make_isa @{theory} ("IsacKnowledge", "Theorems")
neuper@55425
    78
    ["Walther Neuper 2005 supported by a grant from NMI Austria"],
neuper@55489
    79
  make_thm @{theory}  "IsacKnowledge" ("Belastung_Querkraft", @{thm Belastung_Querkraft})
neuper@55425
    80
	  ["Walther Neuper 2005 supported by a grant from NMI Austria"],
neuper@55489
    81
  make_thm @{theory}  "IsacKnowledge" ("Moment_Neigung", @{thm Moment_Neigung})
neuper@55425
    82
	  ["Walther Neuper 2005 supported by a grant from NMI Austria"],
neuper@55489
    83
  make_thm @{theory}  "IsacKnowledge" ("Moment_Querkraft", @{thm Moment_Querkraft})
neuper@55425
    84
	  ["Walther Neuper 2005 supported by a grant from NMI Austria"],
neuper@55489
    85
  make_thm @{theory}  "IsacKnowledge" ("Neigung_Moment", @{thm Neigung_Moment})
neuper@55425
    86
	  ["Walther Neuper 2005 supported by a grant from NMI Austria"],
neuper@55489
    87
  make_thm @{theory}  "IsacKnowledge" ("Querkraft_Belastung", @{thm Querkraft_Belastung})
neuper@55425
    88
	  ["Walther Neuper 2005 supported by a grant from NMI Austria"],
neuper@55489
    89
  make_thm @{theory}  "IsacKnowledge" ("Querkraft_Moment", @{thm Querkraft_Moment})
neuper@55425
    90
	  ["Walther Neuper 2005 supported by a grant from NMI Austria"],
neuper@55489
    91
  make_thm @{theory}  "IsacKnowledge" ("make_fun_explicit", @{thm make_fun_explicit})
neuper@55425
    92
	  ["Walther Neuper 2005 supported by a grant from NMI Austria"]]
neuper@55425
    93
*}
neuper@37954
    94
neuper@37954
    95
(** problems **)
s1210629013@55359
    96
setup {* KEStore_Elems.add_pbts
wneuper@59406
    97
  [(Specify.prep_pbt @{theory} "pbl_bieg" [] Celem.e_pblID
s1210629013@55339
    98
      (["Biegelinien"],
s1210629013@55339
    99
        [("#Given" ,["Traegerlaenge l_l", "Streckenlast q_q"]),
s1210629013@55339
   100
          (*("#Where",["0 < l_l"]), ...wait for &lt; and handling Arbfix*)
s1210629013@55339
   101
          ("#Find"  ,["Biegelinie b_b"]),
s1210629013@55339
   102
          ("#Relate",["Randbedingungen r_b"])],
wneuper@59411
   103
        Celem.append_rls "e_rls" Celem.e_rls [], NONE, [["IntegrierenUndKonstanteBestimmen2"]])),
wneuper@59406
   104
    (Specify.prep_pbt @{theory} "pbl_bieg_mom" [] Celem.e_pblID
s1210629013@55339
   105
      (["MomentBestimmte","Biegelinien"],
s1210629013@55339
   106
        [("#Given" ,["Traegerlaenge l_l", "Streckenlast q_q"]),
s1210629013@55339
   107
          (*("#Where",["0 < l_l"]), ...wait for &lt; and handling Arbfix*)
s1210629013@55339
   108
          ("#Find"  ,["Biegelinie b_b"]),
s1210629013@55339
   109
          ("#Relate",["RandbedingungenBiegung r_b","RandbedingungenMoment r_m"])
s1210629013@55339
   110
        ],
wneuper@59411
   111
        Celem.append_rls "e_rls" Celem.e_rls [], NONE, [["IntegrierenUndKonstanteBestimmen"]])),
wneuper@59406
   112
    (Specify.prep_pbt @{theory} "pbl_bieg_momg" [] Celem.e_pblID
wneuper@59411
   113
      (["MomentGegebene","Biegelinien"], [], Celem.append_rls "e_rls" Celem.e_rls [], NONE,
s1210629013@55339
   114
        [["IntegrierenUndKonstanteBestimmen","2xIntegrieren"]])),
wneuper@59406
   115
    (Specify.prep_pbt @{theory} "pbl_bieg_einf" [] Celem.e_pblID
wneuper@59411
   116
      (["einfache","Biegelinien"], [], Celem.append_rls "e_rls" Celem.e_rls [], NONE,
s1210629013@55339
   117
        [["IntegrierenUndKonstanteBestimmen","4x4System"]])),
wneuper@59406
   118
    (Specify.prep_pbt @{theory} "pbl_bieg_momquer" [] Celem.e_pblID
wneuper@59411
   119
      (["QuerkraftUndMomentBestimmte","Biegelinien"], [], Celem.append_rls "e_rls" Celem.e_rls [], NONE,
s1210629013@55339
   120
        [["IntegrierenUndKonstanteBestimmen","1xIntegrieren"]])),
wneuper@59406
   121
    (Specify.prep_pbt @{theory} "pbl_bieg_vonq" [] Celem.e_pblID
s1210629013@55339
   122
      (["vonBelastungZu","Biegelinien"],
s1210629013@55339
   123
          [("#Given" ,["Streckenlast q_q","FunktionsVariable v_v"]),
s1210629013@55339
   124
            ("#Find"  ,["Funktionen funs'''"])],
wneuper@59411
   125
        Celem.append_rls "e_rls" Celem.e_rls [], NONE, [["Biegelinien","ausBelastung"]])),
wneuper@59406
   126
    (Specify.prep_pbt @{theory} "pbl_bieg_randbed" [] Celem.e_pblID
s1210629013@55339
   127
      (["setzeRandbedingungen","Biegelinien"],
s1210629013@55339
   128
          [("#Given" ,["Funktionen fun_s","Randbedingungen r_b"]),
s1210629013@55339
   129
            ("#Find"  ,["Gleichungen equs'''"])],
wneuper@59411
   130
        Celem.append_rls "e_rls" Celem.e_rls [], NONE, [["Biegelinien","setzeRandbedingungenEin"]])),
wneuper@59406
   131
    (Specify.prep_pbt @{theory} "pbl_equ_fromfun" [] Celem.e_pblID
s1210629013@55339
   132
      (["makeFunctionTo","equation"],
s1210629013@55339
   133
          [("#Given" ,["functionEq fu_n","substitution su_b"]),
s1210629013@55339
   134
            ("#Find"  ,["equality equ'''"])],
wneuper@59411
   135
        Celem.append_rls "e_rls" Celem.e_rls [], NONE, [["Equation","fromFunction"]]))] *}
neuper@37999
   136
ML {*
neuper@37954
   137
(** methods **)
neuper@37954
   138
wneuper@59406
   139
val srls = Celem.Rls {id="srls_IntegrierenUnd..", 
neuper@37954
   140
		preconds = [], 
neuper@37954
   141
		rew_ord = ("termlessI",termlessI), 
wneuper@59406
   142
		erls = Celem.append_rls "erls_in_srls_IntegrierenUnd.." Celem.e_rls
neuper@37999
   143
				  [(*for asm in NTH_CONS ...*)
wneuper@59406
   144
				   Celem.Calc ("Orderings.ord_class.less",eval_equ "#less_"),
neuper@37999
   145
				   (*2nd NTH_CONS pushes n+-1 into asms*)
wneuper@59406
   146
				   Celem.Calc("Groups.plus_class.plus", eval_binop "#add_")
neuper@37954
   147
				   ], 
wneuper@59406
   148
		srls = Celem.Erls, calc = [], errpatts = [],
wneuper@59406
   149
		rules = [Celem.Thm ("NTH_CONS",TermC.num_str @{thm NTH_CONS}),
wneuper@59406
   150
			 Celem.Calc("Groups.plus_class.plus", eval_binop "#add_"),
wneuper@59406
   151
			 Celem.Thm ("NTH_NIL",TermC.num_str @{thm NTH_NIL}),
wneuper@59406
   152
			 Celem.Calc("Tools.lhs", eval_lhs"eval_lhs_"),
wneuper@59406
   153
			 Celem.Calc("Tools.rhs", eval_rhs"eval_rhs_"),
wneuper@59406
   154
			 Celem.Calc("Atools.argument'_in",
neuper@37954
   155
			      eval_argument_in "Atools.argument'_in")
neuper@37954
   156
			 ],
wneuper@59406
   157
		scr = Celem.EmptyScr};
neuper@37954
   158
    
neuper@37954
   159
val srls2 = 
wneuper@59406
   160
    Celem.Rls {id="srls_IntegrierenUnd..", 
neuper@37954
   161
	 preconds = [], 
neuper@37954
   162
	 rew_ord = ("termlessI",termlessI), 
wneuper@59406
   163
	 erls = Celem.append_rls "erls_in_srls_IntegrierenUnd.." Celem.e_rls
neuper@37999
   164
			   [(*for asm in NTH_CONS ...*)
wneuper@59406
   165
			    Celem.Calc ("Orderings.ord_class.less",eval_equ "#less_"),
neuper@37999
   166
			    (*2nd NTH_CONS pushes n+-1 into asms*)
wneuper@59406
   167
			    Celem.Calc("Groups.plus_class.plus", eval_binop "#add_")
neuper@37954
   168
			    ], 
wneuper@59406
   169
	 srls = Celem.Erls, calc = [], errpatts = [],
wneuper@59406
   170
	 rules = [Celem.Thm ("NTH_CONS",TermC.num_str @{thm NTH_CONS}),
wneuper@59406
   171
		  Celem.Calc("Groups.plus_class.plus", eval_binop "#add_"),
wneuper@59406
   172
		  Celem.Thm ("NTH_NIL", TermC.num_str @{thm NTH_NIL}),
wneuper@59406
   173
		  Celem.Calc("Tools.lhs", eval_lhs "eval_lhs_"),
wneuper@59406
   174
		  Celem.Calc("Atools.filter'_sameFunId",
neuper@37954
   175
		       eval_filter_sameFunId "Atools.filter'_sameFunId"),
neuper@37954
   176
		  (*WN070514 just for smltest/../biegelinie.sml ...*)
wneuper@59406
   177
		  Celem.Calc("Atools.sameFunId", eval_sameFunId "Atools.sameFunId"),
wneuper@59406
   178
		  Celem.Thm ("filter_Cons", TermC.num_str @{thm filter_Cons}),
wneuper@59406
   179
		  Celem.Thm ("filter_Nil", TermC.num_str @{thm filter_Nil}),
wneuper@59406
   180
		  Celem.Thm ("if_True", TermC.num_str @{thm if_True}),
wneuper@59406
   181
		  Celem.Thm ("if_False", TermC.num_str @{thm if_False}),
wneuper@59406
   182
		  Celem.Thm ("hd_thm", TermC.num_str @{thm hd_thm})
neuper@37954
   183
		  ],
wneuper@59406
   184
	 scr = Celem.EmptyScr};
neuper@37999
   185
*}
neuper@37999
   186
s1210629013@55373
   187
setup {* KEStore_Elems.add_mets
wneuper@59406
   188
  [Specify.prep_met @{theory} "met_biege" [] Celem.e_metID 
s1210629013@55373
   189
	    (["IntegrierenUndKonstanteBestimmen"],
s1210629013@55373
   190
	      [("#Given" ,["Traegerlaenge l_l", "Streckenlast q__q", "FunktionsVariable v_v"]),
s1210629013@55373
   191
		      (*("#Where",["0 < l_l"]), ...wait for &lt; and handling Arbfix*)
s1210629013@55373
   192
		      ("#Find"  ,["Biegelinie b_b"]),
s1210629013@55373
   193
		      ("#Relate",["RandbedingungenBiegung r_b", "RandbedingungenMoment r_m"])],
s1210629013@55373
   194
	    {rew_ord'="tless_true",
wneuper@59406
   195
        rls' = Celem.append_rls "erls_IntegrierenUndK.." Celem.e_rls 
wneuper@59406
   196
				    [Celem.Calc ("Atools.ident",eval_ident "#ident_"),
wneuper@59406
   197
				      Celem.Thm ("not_true",TermC.num_str @{thm not_true}),
wneuper@59406
   198
				      Celem.Thm ("not_false",TermC.num_str @{thm not_false})], 
wneuper@59406
   199
				calc = [], srls = srls, prls = Celem.Erls, crls = Atools_erls, errpats = [], nrls = Celem.Erls},
s1210629013@55373
   200
        "Script BiegelinieScript                                                 " ^
s1210629013@55373
   201
          "(l_l::real) (q__q::real) (v_v::real) (b_b::real=>real)                  " ^
s1210629013@55373
   202
          "(r_b::bool list) (r_m::bool list) =                                     " ^
s1210629013@55373
   203
          "  (let q___q = Take (qq v_v = q__q);                                    " ^
s1210629013@55373
   204
          "       q___q = ((Rewrite sym_neg_equal_iff_equal True) @@               " ^
s1210629013@55373
   205
          "              (Rewrite Belastung_Querkraft True)) q___q;                " ^
s1210629013@55373
   206
          "      (Q__Q:: bool) =                                                   " ^
s1210629013@55373
   207
          "             (SubProblem (Biegelinie',[named,integrate,function],       " ^
s1210629013@55373
   208
          "                          [diff,integration,named])                     " ^
s1210629013@55373
   209
          "                          [REAL (rhs q___q), REAL v_v, REAL_REAL Q]);   " ^
s1210629013@55373
   210
          "       Q__Q = Rewrite Querkraft_Moment True Q__Q;                       " ^
s1210629013@55373
   211
          "      (M__M::bool) =                                                    " ^
s1210629013@55373
   212
          "             (SubProblem (Biegelinie',[named,integrate,function],       " ^
s1210629013@55373
   213
          "                          [diff,integration,named])                     " ^
s1210629013@55373
   214
          "                          [REAL (rhs Q__Q), REAL v_v, REAL_REAL M_b]);  " ^
s1210629013@55373
   215
                                        (*([5], Res), M_b x = c_2 + c * x + -1 * q_0 / 2 * x ^^^ 2*)
s1210629013@55373
   216
          "       e__1 = NTH 1 r_m;                                                " ^
s1210629013@55373
   217
          "      (x__1::real) = argument_in (lhs e__1);                            " ^
s1210629013@55373
   218
          "      (M__1::bool) = (Substitute [v_v = x__1]) M__M;                    " ^
s1210629013@55373
   219
                                        (*([6], Res), M_b 0 = c_2 + c * 0 + -1 * q_0 / 2 * 0 ^^^ 2*)
s1210629013@55373
   220
          "       M__1        = (Substitute [e__1]) M__1;                          " ^
s1210629013@55373
   221
                                            (*([7], Res), 0 = c_2 + c * 0 + -1 * q_0 / 2 * 0 ^^^ 2*)
s1210629013@55373
   222
          "       M__2 = Take M__M;                                                " ^
s1210629013@55373
   223
                                        (*([8], Frm), M_b x = c_2 + c * x + -1 * q_0 / 2 * x ^^^ 2*)
s1210629013@55373
   224
          (*without above Take 'Substitute [v_v = x__2]' takes _last formula from ctree_*)
s1210629013@55373
   225
          "       e__2 = NTH 2 r_m;                                                " ^
s1210629013@55373
   226
          "      (x__2::real) = argument_in (lhs e__2);                            " ^
s1210629013@55373
   227
          "      (M__2::bool) = (Substitute [v_v = x__2]) M__M;                    " ^
s1210629013@55373
   228
                                        (*([8], Res), M_b L = c_2 + c * L + -1 * q_0 / 2 * L ^^^ 2*)
s1210629013@55373
   229
          "       M__2        = (Substitute [e__2]) M__2;                          " ^
s1210629013@55373
   230
          "      (c_1_2::bool list) =                                              " ^
s1210629013@55373
   231
          "             (SubProblem (Biegelinie',[LINEAR,system],[no_met])         " ^
s1210629013@55373
   232
          "                          [BOOL_LIST [M__1, M__2], REAL_LIST [c,c_2]]); " ^
s1210629013@55373
   233
          "       M__M = Take  M__M;                                               " ^
s1210629013@55373
   234
          "       M__M = ((Substitute c_1_2) @@                                    " ^
s1210629013@55373
   235
          "              (Try (Rewrite_Set_Inst [(bdv_1, c),(bdv_2, c_2)]          " ^
s1210629013@55373
   236
          "                                   simplify_System False)) @@           " ^
s1210629013@55373
   237
          "              (Rewrite Moment_Neigung False) @@                         " ^
s1210629013@55373
   238
          "              (Rewrite make_fun_explicit False)) M__M;                  " ^
s1210629013@55373
   239
          (*----------------------- and the same once more ------------------------*)
s1210629013@55373
   240
          "      (N__N:: bool) =                                                   " ^
s1210629013@55373
   241
          "             (SubProblem (Biegelinie',[named,integrate,function],       " ^
s1210629013@55373
   242
          "                          [diff,integration,named])                     " ^
s1210629013@55373
   243
          "                          [REAL (rhs M__M), REAL v_v, REAL_REAL y']);   " ^
s1210629013@55373
   244
          "      (B__B:: bool) =                                                   " ^
s1210629013@55373
   245
          "             (SubProblem (Biegelinie',[named,integrate,function],       " ^
s1210629013@55373
   246
          "                          [diff,integration,named])                     " ^
s1210629013@55373
   247
          "                          [REAL (rhs N__N), REAL v_v, REAL_REAL y]);    " ^
s1210629013@55373
   248
          "       e__1 = NTH 1 r_b;                                                " ^
s1210629013@55373
   249
          "      (x__1::real) = argument_in (lhs e__1);                            " ^
s1210629013@55373
   250
          "      (B__1::bool) = (Substitute [v_v = x__1]) B__B;                    " ^
s1210629013@55373
   251
          "       B__1        = (Substitute [e__1]) B__1 ;                         " ^
s1210629013@55373
   252
          "       B__2 = Take B__B;                                                " ^
s1210629013@55373
   253
          "       e__2 = NTH 2 r_b;                                                " ^
s1210629013@55373
   254
          "      (x__2::real) = argument_in (lhs e__2);                            " ^
s1210629013@55373
   255
          "      (B__2::bool) = (Substitute [v_v = x__2]) B__B;                    " ^
s1210629013@55373
   256
          "       B__2        = (Substitute [e__2]) B__2 ;                         " ^
s1210629013@55373
   257
          "      (c_1_2::bool list) =                                              " ^
s1210629013@55373
   258
          "             (SubProblem (Biegelinie',[LINEAR,system],[no_met])         " ^
s1210629013@55373
   259
          "                          [BOOL_LIST [B__1, B__2], REAL_LIST [c,c_2]]); " ^
s1210629013@55373
   260
          "       B__B = Take  B__B;                                               " ^
s1210629013@55373
   261
          "       B__B = ((Substitute c_1_2) @@                                    " ^
s1210629013@55373
   262
          "              (Rewrite_Set_Inst [(bdv, x)] make_ratpoly_in False)) B__B " ^
s1210629013@55373
   263
          " in B__B)"),
wneuper@59406
   264
    Specify.prep_met @{theory} "met_biege_2" [] Celem.e_metID
s1210629013@55373
   265
	    (["IntegrierenUndKonstanteBestimmen2"],
s1210629013@55373
   266
	      [("#Given" ,["Traegerlaenge l_l", "Streckenlast q__q", "FunktionsVariable v_v"]),
s1210629013@55373
   267
		      (*("#Where",["0 < l_l"]), ...wait for &lt; and handling Arbfix*)
s1210629013@55373
   268
		      ("#Find"  ,["Biegelinie b_b"]),
s1210629013@55373
   269
		      ("#Relate",["Randbedingungen r_b"])],
s1210629013@55373
   270
	      {rew_ord'="tless_true", 
wneuper@59406
   271
	        rls' = Celem.append_rls "erls_IntegrierenUndK.." Celem.e_rls 
wneuper@59406
   272
				      [Celem.Calc ("Atools.ident",eval_ident "#ident_"),
wneuper@59406
   273
				        Celem.Thm ("not_true",TermC.num_str @{thm not_true}),
wneuper@59406
   274
				        Celem.Thm ("not_false",TermC.num_str @{thm not_false})], 
s1210629013@55373
   275
				  calc = [], 
wneuper@59406
   276
				  srls = Celem.append_rls "erls_IntegrierenUndK.." Celem.e_rls 
wneuper@59406
   277
				      [Celem.Calc("Tools.rhs", eval_rhs"eval_rhs_"),
wneuper@59406
   278
				        Celem.Calc ("Atools.ident",eval_ident "#ident_"),
wneuper@59406
   279
				        Celem.Thm ("last_thmI",TermC.num_str @{thm last_thmI}),
wneuper@59406
   280
				        Celem.Thm ("if_True",TermC.num_str @{thm if_True}),
wneuper@59406
   281
				        Celem.Thm ("if_False",TermC.num_str @{thm if_False})],
wneuper@59406
   282
				  prls = Celem.Erls, crls = Atools_erls, errpats = [], nrls = Celem.Erls},
s1210629013@55373
   283
        "Script Biegelinie2Script                                                  " ^
s1210629013@55373
   284
          "(l_l::real) (q__q::real) (v_v::real) (b_b::real=>real) (r_b::bool list) = " ^
s1210629013@55373
   285
          "  (let                                                                    " ^
s1210629013@55373
   286
          "      (fun_s:: bool list) =                                               " ^
s1210629013@55373
   287
          "             (SubProblem (Biegelinie',[vonBelastungZu,Biegelinien],       " ^
s1210629013@55373
   288
          "                          [Biegelinien,ausBelastung])                     " ^
s1210629013@55373
   289
          "                          [REAL q__q, REAL v_v]);                         " ^
s1210629013@55373
   290
          "      (equ_s::bool list) =                                                " ^
s1210629013@55373
   291
          "             (SubProblem (Biegelinie',[setzeRandbedingungen,Biegelinien], " ^
s1210629013@55373
   292
          "                          [Biegelinien,setzeRandbedingungenEin])          " ^
s1210629013@55373
   293
          "                          [BOOL_LIST fun_s, BOOL_LIST r_b]);              " ^
s1210629013@55373
   294
          "      (con_s::bool list) =                                                " ^
s1210629013@55373
   295
          "             (SubProblem (Biegelinie',[LINEAR,system],[no_met])           " ^
s1210629013@55373
   296
          "                          [BOOL_LIST equ_s, REAL_LIST [c,c_2,c_3,c_4]]);  " ^
s1210629013@55373
   297
          "       B_B = Take (lastI fun_s);                                          " ^
s1210629013@55373
   298
          "       B_B = ((Substitute con_s) @@                                       " ^
s1210629013@55373
   299
          "              (Rewrite_Set_Inst [(bdv, v_v)] make_ratpoly_in False)) B_B  " ^
s1210629013@55373
   300
          " in B_B)"),
wneuper@59406
   301
    Specify.prep_met @{theory} "met_biege_intconst_2" [] Celem.e_metID
s1210629013@55373
   302
	    (["IntegrierenUndKonstanteBestimmen","2xIntegrieren"], [],
wneuper@59406
   303
	      {rew_ord'="tless_true", rls'=Celem.Erls, calc = [], srls = Celem.e_rls, prls=Celem.e_rls, crls = Atools_erls,
wneuper@59406
   304
          errpats = [], nrls = Celem.e_rls},
s1210629013@55373
   305
        "empty_script"),
wneuper@59406
   306
    Specify.prep_met @{theory} "met_biege_intconst_4" [] Celem.e_metID
s1210629013@55373
   307
	    (["IntegrierenUndKonstanteBestimmen","4x4System"], [],
wneuper@59406
   308
	      {rew_ord'="tless_true", rls'=Celem.Erls, calc = [], srls = Celem.e_rls, prls=Celem.e_rls, crls = Atools_erls,
wneuper@59406
   309
          errpats = [], nrls = Celem.e_rls},
s1210629013@55373
   310
        "empty_script"),
wneuper@59406
   311
    Specify.prep_met @{theory} "met_biege_intconst_1" [] Celem.e_metID
s1210629013@55373
   312
	    (["IntegrierenUndKonstanteBestimmen","1xIntegrieren"], [],
wneuper@59406
   313
        {rew_ord'="tless_true", rls'=Celem.Erls, calc = [], srls = Celem.e_rls, prls=Celem.e_rls, crls = Atools_erls,
wneuper@59406
   314
          errpats = [], nrls = Celem.e_rls},
s1210629013@55373
   315
        "empty_script"),
wneuper@59406
   316
    Specify.prep_met @{theory} "met_biege2" [] Celem.e_metID
s1210629013@55373
   317
	    (["Biegelinien"], [],
wneuper@59406
   318
	      {rew_ord'="tless_true", rls'=Celem.Erls, calc = [], srls = Celem.e_rls, prls=Celem.e_rls, crls = Atools_erls,
wneuper@59406
   319
          errpats = [], nrls = Celem.e_rls},
s1210629013@55373
   320
        "empty_script"),
wneuper@59406
   321
    Specify.prep_met @{theory} "met_biege_ausbelast" [] Celem.e_metID
s1210629013@55373
   322
	    (["Biegelinien", "ausBelastung"],
s1210629013@55373
   323
	      [("#Given" ,["Streckenlast q__q", "FunktionsVariable v_v"]),
s1210629013@55373
   324
	        ("#Find"  ,["Funktionen fun_s"])],
s1210629013@55373
   325
	      {rew_ord'="tless_true", 
wneuper@59406
   326
	        rls' = Celem.append_rls "erls_ausBelastung" Celem.e_rls 
wneuper@59406
   327
				      [Celem.Calc ("Atools.ident", eval_ident "#ident_"),
wneuper@59406
   328
				        Celem.Thm ("not_true", TermC.num_str @{thm not_true}),
wneuper@59406
   329
				        Celem.Thm ("not_false", TermC.num_str @{thm not_false})], 
s1210629013@55373
   330
				  calc = [], 
wneuper@59406
   331
				  srls = Celem.append_rls "srls_ausBelastung" Celem.e_rls 
wneuper@59406
   332
				      [Celem.Calc ("Tools.rhs", eval_rhs "eval_rhs_")], 
wneuper@59406
   333
				  prls = Celem.e_rls, crls = Atools_erls, errpats = [], nrls = Celem.e_rls},
s1210629013@55373
   334
        "Script Belastung2BiegelScript (q__q::real) (v_v::real) =               " ^
s1210629013@55373
   335
          "  (let q___q = Take (qq v_v = q__q);                                  " ^
s1210629013@55373
   336
          "       q___q = ((Rewrite sym_neg_equal_iff_equal True) @@              " ^
s1210629013@55373
   337
          "              (Rewrite Belastung_Querkraft True)) q___q;               " ^
s1210629013@55373
   338
          "      (Q__Q:: bool) =                                                  " ^
s1210629013@55373
   339
          "             (SubProblem (Biegelinie',[named,integrate,function],      " ^
s1210629013@55373
   340
          "                          [diff,integration,named])                    " ^
s1210629013@55373
   341
          "                          [REAL (rhs q___q), REAL v_v, REAL_REAL Q]);  " ^
s1210629013@55373
   342
          "       M__M = Rewrite Querkraft_Moment True Q__Q;                      " ^
s1210629013@55373
   343
          "      (M__M::bool) =                                                   " ^
s1210629013@55373
   344
          "             (SubProblem (Biegelinie',[named,integrate,function],      " ^
s1210629013@55373
   345
          "                          [diff,integration,named])                    " ^
s1210629013@55373
   346
          "                          [REAL (rhs M__M), REAL v_v, REAL_REAL M_b]); " ^
s1210629013@55373
   347
          "       N__N = ((Rewrite Moment_Neigung False) @@                       " ^
s1210629013@55373
   348
          "              (Rewrite make_fun_explicit False)) M__M;                 " ^
s1210629013@55373
   349
          "      (N__N:: bool) =                                                  " ^
s1210629013@55373
   350
          "             (SubProblem (Biegelinie',[named,integrate,function],      " ^
s1210629013@55373
   351
          "                          [diff,integration,named])                    " ^
s1210629013@55373
   352
          "                          [REAL (rhs N__N), REAL v_v, REAL_REAL y']);  " ^
s1210629013@55373
   353
          "      (B__B:: bool) =                                                  " ^
s1210629013@55373
   354
          "             (SubProblem (Biegelinie',[named,integrate,function],      " ^
s1210629013@55373
   355
          "                          [diff,integration,named])                    " ^
s1210629013@55373
   356
          "                          [REAL (rhs N__N), REAL v_v, REAL_REAL y])    " ^
s1210629013@55373
   357
          " in [Q__Q, M__M, N__N, B__B])"),
wneuper@59406
   358
    Specify.prep_met @{theory} "met_biege_setzrand" [] Celem.e_metID
s1210629013@55373
   359
	    (["Biegelinien", "setzeRandbedingungenEin"],
s1210629013@55373
   360
	      [("#Given" , ["Funktionen fun_s", "Randbedingungen r_b"]),
s1210629013@55373
   361
	        ("#Find"  , ["Gleichungen equs'''"])],
wneuper@59406
   362
	      {rew_ord'="tless_true", rls'=Celem.Erls, calc = [], srls = srls2, prls=Celem.e_rls, crls = Atools_erls,
wneuper@59406
   363
          errpats = [], nrls = Celem.e_rls},
s1210629013@55373
   364
        "Script SetzeRandbedScript (fun_s::bool list) (r_b::bool list) = " ^
s1210629013@55373
   365
          " (let b_1 = NTH 1 r_b;                                         " ^
s1210629013@55373
   366
          "      f_s = filter_sameFunId (lhs b_1) fun_s;                   " ^
s1210629013@55373
   367
          "      (e_1::bool) =                                             " ^
s1210629013@55373
   368
          "             (SubProblem (Biegelinie',[makeFunctionTo,equation]," ^
s1210629013@55373
   369
          "                          [Equation,fromFunction])              " ^
s1210629013@55373
   370
          "                          [BOOL (hd f_s), BOOL b_1]);         " ^
s1210629013@55373
   371
          "      b_2 = NTH 2 r_b;                                         " ^
s1210629013@55373
   372
          "      f_s = filter_sameFunId (lhs b_2) fun_s;                   " ^
s1210629013@55373
   373
          "      (e_2::bool) =                                             " ^
s1210629013@55373
   374
          "             (SubProblem (Biegelinie',[makeFunctionTo,equation]," ^
s1210629013@55373
   375
          "                          [Equation,fromFunction])              " ^
s1210629013@55373
   376
          "                          [BOOL (hd f_s), BOOL b_2]);         " ^
s1210629013@55373
   377
          "      b_3 = NTH 3 r_b;                                         " ^
s1210629013@55373
   378
          "      f_s = filter_sameFunId (lhs b_3) fun_s;                   " ^
s1210629013@55373
   379
          "      (e_3::bool) =                                             " ^
s1210629013@55373
   380
          "             (SubProblem (Biegelinie',[makeFunctionTo,equation]," ^
s1210629013@55373
   381
          "                          [Equation,fromFunction])              " ^
s1210629013@55373
   382
          "                          [BOOL (hd f_s), BOOL b_3]);         " ^
s1210629013@55373
   383
          "      b_4 = NTH 4 r_b;                                         " ^
s1210629013@55373
   384
          "      f_s = filter_sameFunId (lhs b_4) fun_s;                   " ^
s1210629013@55373
   385
          "      (e_4::bool) =                                             " ^
s1210629013@55373
   386
          "             (SubProblem (Biegelinie',[makeFunctionTo,equation]," ^
s1210629013@55373
   387
          "                          [Equation,fromFunction])              " ^
s1210629013@55373
   388
          "                          [BOOL (hd f_s), BOOL b_4])          " ^
s1210629013@55373
   389
          " in [e_1, e_2, e_3, e_4])"
s1210629013@55373
   390
          (* filter requires more than 1 sec !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
s1210629013@55373
   391
          "Script SetzeRandbedScript (fun_s::bool list) (r_b::bool list) = " ^
s1210629013@55373
   392
          " (let b_1 = NTH 1 r_b;                                         " ^
s1210629013@55373
   393
          "      f_s = filter (sameFunId (lhs b_1)) fun_s;                 " ^
s1210629013@55373
   394
          "      (e_1::bool) =                                             " ^
s1210629013@55373
   395
          "             (SubProblem (Biegelinie',[makeFunctionTo,equation]," ^
s1210629013@55373
   396
          "                          [Equation,fromFunction])              " ^
s1210629013@55373
   397
          "                          [BOOL (hd f_s), BOOL b_1]);         " ^
s1210629013@55373
   398
          "      b_2 = NTH 2 r_b;                                         " ^
s1210629013@55373
   399
          "      f_s = filter (sameFunId (lhs b_2)) fun_s;                 " ^
s1210629013@55373
   400
          "      (e_2::bool) =                                             " ^
s1210629013@55373
   401
          "             (SubProblem (Biegelinie',[makeFunctionTo,equation]," ^
s1210629013@55373
   402
          "                          [Equation,fromFunction])              " ^
s1210629013@55373
   403
          "                          [BOOL (hd f_s), BOOL b_2]);         " ^
s1210629013@55373
   404
          "      b_3 = NTH 3 r_b;                                         " ^
s1210629013@55373
   405
          "      f_s = filter (sameFunId (lhs b_3)) fun_s;                 " ^
s1210629013@55373
   406
          "      (e_3::bool) =                                             " ^
s1210629013@55373
   407
          "             (SubProblem (Biegelinie',[makeFunctionTo,equation]," ^
s1210629013@55373
   408
          "                          [Equation,fromFunction])              " ^
s1210629013@55373
   409
          "                          [BOOL (hd f_s), BOOL b_3]);         " ^
s1210629013@55373
   410
          "      b_4 = NTH 4 r_b;                                         " ^
s1210629013@55373
   411
          "      f_s = filter (sameFunId (lhs b_4)) fun_s;                 " ^
s1210629013@55373
   412
          "      (e_4::bool) =                                             " ^
s1210629013@55373
   413
          "             (SubProblem (Biegelinie',[makeFunctionTo,equation]," ^
s1210629013@55373
   414
          "                          [Equation,fromFunction])              " ^
s1210629013@55373
   415
          "                          [BOOL (hd f_s), BOOL b_4])          " ^
s1210629013@55373
   416
          " in [e_1,e_2,e_3,e_4])"*)),
wneuper@59406
   417
    Specify.prep_met @{theory} "met_equ_fromfun" [] Celem.e_metID
s1210629013@55373
   418
	    (["Equation","fromFunction"],
s1210629013@55373
   419
	      [("#Given" ,["functionEq fu_n","substitution su_b"]),
s1210629013@55373
   420
	        ("#Find"  ,["equality equ'''"])],
wneuper@59406
   421
	      {rew_ord'="tless_true", rls'=Celem.Erls, calc = [],
wneuper@59406
   422
          srls = Celem.append_rls "srls_in_EquationfromFunc" Celem.e_rls
wneuper@59406
   423
				      [Celem.Calc("Tools.lhs", eval_lhs"eval_lhs_"),
wneuper@59406
   424
				        Celem.Calc("Atools.argument'_in", eval_argument_in "Atools.argument'_in")], 
wneuper@59406
   425
				  prls=Celem.e_rls, crls = Atools_erls, errpats = [], nrls = Celem.e_rls},
s1210629013@55373
   426
        (*(M_b x = c_2 + c * x + -1 * q_0 / 2 * x ^^^ 2) (M_b L = 0) -->
s1210629013@55373
   427
               0 = c_2 + c * L + -1 * q_0 / 2 * L ^^^ 2*)
s1210629013@55373
   428
        "Script Function2Equality (fu_n::bool) (su_b::bool) =" ^
s1210629013@55373
   429
        " (let fu_n = Take fu_n;                             " ^
s1210629013@55373
   430
        "      bd_v = argument_in (lhs fu_n);                " ^
s1210629013@55373
   431
        "      va_l = argument_in (lhs su_b);                " ^
s1210629013@55373
   432
        "      eq_u = (Substitute [bd_v = va_l]) fu_n;       " ^
s1210629013@55373
   433
                                        (*([1], Res), M_b L = c_2 + c * L + -1 * q_0 / 2 * L ^^^ 2*)
s1210629013@55373
   434
        "      eq_u = (Substitute [su_b]) eq_u               " ^
s1210629013@55373
   435
        " in (Rewrite_Set norm_Rational False) eq_u)         ")]
s1210629013@55373
   436
*}
s1210629013@55373
   437
neuper@37906
   438
end
neuper@37906
   439