1 (* "Knowledge/biegelinie-4.sml"
2 author: Walther Neuper 190515
3 (c) due to copyright terms
5 "table of contents ---------------------------------------------------------------------------";
6 "---------------------------------------------------------------------------------------------";
7 "----------- IntegrierenUndKonstanteBestimmen2: Bsp.7.70. auto TODO investigate failure ------";
8 "----------- IntegrierenUndKonstanteBestimmen2: Bsp.7.70. me' with ALL subproblems -----------";
9 "----------- biegel Bsp.7.70. check Problem + MethodC model ----------------------------------";
10 "---------------------------------------------------------------------------------------------";
11 "---------------------------------------------------------------------------------------------";
12 "---------------------------------------------------------------------------------------------";
15 (** -------- IntegrierenUndKonstanteBestimmen2: Bsp.7.70. auto TODO investigate failure ---- **)
16 "----------- IntegrierenUndKonstanteBestimmen2: Bsp.7.70. auto TODO investigate failure ------";
17 "----------- IntegrierenUndKonstanteBestimmen2: Bsp.7.70. auto TODO investigate failure ------";
18 (* the error in this test might be independent from introduction of y, dy
19 as arguments in IntegrierenUndKonstanteBestimmen2,
20 rather due to so far untested use of "auto"
21 ----------------------------------------------------------------------------------------------* )
22 val fmz = ["Traegerlaenge L", "Streckenlast q_0", "Biegelinie y",
23 "Randbedingungen [y 0 = (0::real), y L = 0, M_b 0 = 0, M_b L = 0]",
24 "FunktionsVariable x", "GleichungsVariablen [c, c_2, c_3, c_4]",
25 "AbleitungBiegelinie dy"];
26 val (dI',pI',mI') = ("Biegelinie", ["Biegelinien"], ["IntegrierenUndKonstanteBestimmen2"]);
29 CalcTree @{context} [(fmz, (dI',pI',mI'))];
32 autoCalculate 1 CompleteCalc;
34 val ((pt, p),_) = States.get_calc 1;
35 if p = ([], Pbl) then () else error ""
36 get_obj I pt (fst p); (*TODO investigate failure*)
38 (* NOTE: \<up> \<up> \<up> \<up> \<up> ^^ no progress already in isabisac15, but not noticed \<up> \<up> \<up> \<up> \<up> ^^ * )
39 (*[], Met*)autoCalculate 1 CompleteCalcHead;
40 (*[1], Pbl*)autoCalculate 1 (Steps 1); (* into SubProblem *)
41 (*[1], Res*)autoCalculate 1 CompleteSubpbl; (**)
42 (*[2], Pbl*)autoCalculate 1 (Steps 1); (* out of SubProblem *)
43 (*[2], Res*)autoCalculate 1 CompleteSubpbl;
44 (*[3], Pbl*)autoCalculate 1 (Steps 1); (* out of SubProblem *)
45 (*[3], Met*)autoCalculate 1 CompleteCalcHead;
46 (*[3, 1], Frm*)autoCalculate 1 (Steps 1); (* solve SubProblem *)
47 (*(**)autoCalculate 1 CompleteSubpbl; error in kernel 4: Step.add: not impl.for Empty_Tac_*)
48 (*[3, 1], Res*)autoCalculate 1 (Steps 1); (* solve SubProblem *)
49 (*[3, 2], Res*)autoCalculate 1 (Steps 1); (* solve SubProblem *)
50 (*[3, 3], Res*)autoCalculate 1 (Steps 1); (* solve SubProblem *)
51 (*[3, 4], Res*)autoCalculate 1 (Steps 1); (* solve SubProblem *)
52 (*[3, 5], Res*)autoCalculate 1 (Steps 1); (* solve SubProblem *)
53 (*[3, 6], Res*)autoCalculate 1 (Steps 1); (* solve SubProblem *)
54 (*[3, 7], Res*)autoCalculate 1 (Steps 1); (* solve SubProblem *)
55 (*[3, 8], Pbl*)autoCalculate 1 (Steps 1); (* solve SubProblem *)
56 (*[3, 8], Met*)autoCalculate 1 CompleteCalcHead;
57 (*[3, 8, 1], Frm*)autoCalculate 1 (Steps 1); (* solve SubProblem *)
58 (*[3, 8, 1], Res*)autoCalculate 1 (Steps 1); (* solve SubProblem *)
59 (*(**)autoCalculate 1 (Steps 1);
60 *** Step.add: not impl.for Empty_Tac_
61 val it = <AUTOCALC><CALCID>1</CALCID><CALCMESSAGE>helpless</CALCMESSAGE></AUTOCALC>: XML.tree *)
63 val ((pt,_),_) = States.get_calc 1;
64 val ip = States.get_pos 1 1;
65 val (Form f, tac, asms) = ME_Misc.pt_extract (pt, ip);
67 if ip = ([3, 8, 1], Res) andalso
68 UnparseC.term @{context} f = "[- 1 * c_4 / - 1 = 0,\n (6 * c_4 * EI + 6 * L * c_3 * EI + -3 * L \<up> 2 * c_2 + - 1 * L \<up> 3 * c) /\n (6 * EI) =\n L \<up> 4 * q_0 / (- 24 * EI),\n c_2 = 0, c_2 + L * c = L \<up> 2 * q_0 / 2]"
71 SOME (Check_Postcond ["normalise", "4x4", "LINEAR", "system"]) => ()
72 | _ => error "ERROR biegel.7.70 changed 1"
73 else error "ERROR biegel.7.70 changed 2";
74 ( * NOTE: \<up> \<up> \<up> \<up> \<up> ^^ no progress already in isabisac15, but not noticed \<up> \<up> \<up> \<up> \<up> ^^ *)
75 ----------------------------------------------------------------------------------------------*)
78 (** -------- IntegrierenUndKonstanteBestimmen2: Bsp.7.70. me' with ALL subproblems --------- **)
79 "----------- IntegrierenUndKonstanteBestimmen2: Bsp.7.70. me' with ALL subproblems -----------";
80 "----------- IntegrierenUndKonstanteBestimmen2: Bsp.7.70. me' with ALL subproblems -----------";
82 val (tac as Model_Problem (*["Biegelinien"]*), (pt, p as ([], Pbl))) =
83 Test_Code.init_calc' @{context} [(["Traegerlaenge L", "Streckenlast q_0", "Biegelinie y",
84 "Randbedingungen [y 0 = (0::real), y L = 0, M_b 0 = 0, M_b L = 0]",
86 Now follow items for ALL SubProblems,
87 since ROOT MethodC must provide values for "actuals" of ALL SubProblems.
88 See Biegelinie.thy subsection \<open>Survey on Methods\<close>.
91 Items for MethodC "IntegrierenUndKonstanteBestimmen2"
93 "FunktionsVariable x",
94 (*"Biegelinie y", ..already input for Problem above*)
95 "AbleitungBiegelinie dy",
99 Item for Problem "LINEAR/system", which by [''no_met''] involves refinement
101 "GleichungsVariablen [c, c_2, c_3, c_4]"
103 ("Biegelinie", ["Biegelinien"], ["IntegrierenUndKonstanteBestimmen2"]))]
107 the indentation follows subsection \<open>Survey on Methods\<close> in Biegelinie.thy.
108 The structure of the calculation below is made explicit in the following way:
110 |create I_Model of root Problem from Formalise.model
111 |check 3 Formalise.refs
112 |create I_Model of root MethodC, ending by Apply_Method
114 |create I_Model of SubProblem from arguments, given values by the Program of the root
115 |check 3 Formalise.refs
116 |create I_Model of SubProblem's MethodC, ending either by
117 | Apply_Method of respective SubProblem
119 | Check_Postcond of Problem and return to respective parent
121 Note: Programs immediately calling a SubProblem, does (not yet) indicate
122 this SubProblem as separate Step.
125 val (tac as Apply_Method ["IntegrierenUndKonstanteBestimmen2"], (pt, p as ([], Met))) =
126 (tac, (pt, p)) |> me' |> me' |> me' |> me' |> me' |> me' |> me' |> me' |> me' |> me'
127 (*---broken elementwise input to lists---* ) |> me' ( *---broken elementwise input to lists---*)
130 (*INVISIBLE: tac as SubProblem (''Biegelinie'', [''vonBelastungZu'', ''Biegelinien''])*)
131 val (tac as Apply_Method ["Biegelinien", "ausBelastung"], (pt, p as ([1], Met))) =
132 (tac, (pt, p)) |> me' |> me' |> me' |> me' |> me' |> me' |> me' |> me' |> me' |> me' |> me'
134 val (tac as Subproblem ("Biegelinie", ["named", "integrate", "function"]), (pt, p as ([1, 2], Res))) =
135 (tac, (pt, p)) |> me' |> me' |> me'
137 val (tac as Apply_Method ["diff", "integration", "named"], (pt, p as ([1, 3], Met))) =
138 (tac, (pt, p)) |> me' |> me' |> me' |> me' |> me' |> me' |> me' |> me'
139 val (tac as Check_Postcond ["named", "integrate", "function"], (pt, p)) =
140 (tac, (pt, p)) |> me' |> me' |> me'
142 val (tac as Subproblem ("Biegelinie", ["named", "integrate", "function"]), (pt, p as ([1, 4], Res))) =
143 (tac, (pt, p)) |> me' |> me'
145 val (tac as Apply_Method ["diff", "integration", "named"], (pt, p as ([1, 5], Met))) =
146 (tac, (pt, p)) |> me' |> me' |> me' |> me' |> me' |> me' |> me' |> me'
147 val (tac as Check_Postcond ["named", "integrate", "function"], (pt, p as ([1, 5, 1], Res))) =
148 (tac, (pt, p)) |> me' |> me'
150 val (tac as Subproblem ("Biegelinie", ["named", "integrate", "function"]), (pt, p as ([1, 7], Res))) =
151 (tac, (pt, p)) |> me' |> me' |> me'
153 val (tac as Apply_Method ["diff", "integration", "named"], (pt, p as ([1, 8], Met))) =
154 (tac, (pt, p)) |> me' |> me' |> me' |> me' |> me' |> me' |> me' |> me'
155 val (tac as Check_Postcond ["named", "integrate", "function"], (pt, p as ([1, 8, 2], Res))) =
156 (tac, (pt, p)) |> me' |> me' |> me'
158 val (tac as Subproblem ("Biegelinie", ["named", "integrate", "function"]), (pt, p)) =
159 (tac, (pt, p)) |> me'
161 val (tac as Apply_Method ["diff", "integration", "named"], (pt, p as ([1, 9], Met))) =
162 (tac, (pt, p)) |> me' |> me' |> me' |> me' |> me' |> me' |> me' |> me'
163 val (tac as Check_Postcond ["named", "integrate", "function"], (pt, p)) =
164 (tac, (pt, p)) |> me' |> me'
166 val (tac as Check_Postcond ["vonBelastungZu", "Biegelinien"], (pt, p as ([1, 9], Res))) =
167 (tac, (pt, p)) |> me'
169 val (tac as Subproblem ("Biegelinie", ["setzeRandbedingungen", "Biegelinien"]), (pt, p as ([1], Res))) =
170 (tac, (pt, p)) |> me'
172 val (tac as Apply_Method ["Biegelinien", "setzeRandbedingungenEin"], (pt, p as ([2], Met))) =
173 (tac, (pt, p)) |> me' |> me' |> me' |> me' |> me' |> me' |> me' |> me'
175 (*INVISIBLE: tac as SubProblem (''Biegelinie'', [''makeFunctionTo'', ''equation''])*)
176 val (tac as Apply_Method ["Equation", "fromFunction"], (pt, p as ([2, 1], Met))) =
177 (tac, (pt, p)) |> me' |> me' |> me' |> me' |> me' |> me' |> me' |> me'
178 val (tac as Check_Postcond ["makeFunctionTo", "equation"], (pt, p)) =
179 (tac, (pt, p)) |> me' |> me' |> me' |> me'
181 val (tac as Subproblem ("Biegelinie", ["makeFunctionTo", "equation"]), (pt, p as ([2, 1], Res))) =
182 (tac, (pt, p)) |> me'
183 val "0 = - 1 * c_4 / - 1" = Calc.current_formula (pt, p) |> UnparseC.term @{context};
184 (*--^^^^^^^^^^^^^^^^^^^^^ requires improved simplification*)
186 (** -------- biegel Bsp.7.70. check Problem + MethodC model -------------------------------- **)
187 "----------- biegel Bsp.7.70. check Problem + MethodC model ----------------------------------";
188 "----------- biegel Bsp.7.70. check Problem + MethodC model ----------------------------------";
189 (*this formalisation contains no variants, as opposed to maximum example*)
190 val (tac as Model_Problem (*["Biegelinien"]*), ptp as (pt, p as ([], Pbl))) =
191 Test_Code.init_calc' @{context} [(["Traegerlaenge L", "Streckenlast q_0", "Biegelinie y",
192 "Randbedingungen [y 0 = (0::real), y L = 0, M_b 0 = 0, M_b L = 0]",
194 Now follow items for ALL SubProblems,
195 since ROOT MethodC must provide values for "actuals" of ALL SubProblems.
196 See Biegelinie.thy subsection \<open>Survey on Methods\<close>.
199 Items for MethodC "IntegrierenUndKonstanteBestimmen2"
201 "FunktionsVariable x",
202 (*"Biegelinie y", ..already input for Problem above*)
203 "AbleitungBiegelinie dy",
207 Item for Problem "LINEAR/system", which by [''no_met''] involves refinement
209 "GleichungsVariablen [c, c_2, c_3, c_4]"
211 ("Biegelinie", ["Biegelinien"], ["IntegrierenUndKonstanteBestimmen2"]))]
213 (*** stepwise Specification: Problem model================================================= ***)
214 val ("ok", ([(Model_Problem, _, _)], _, ptp))
215 = Step.specify_do_next ptp;
216 val ("ok", ([(Add_Given "Traegerlaenge L", _, _)], _, ptp))
217 = Step.specify_do_next ptp;
218 val ("ok", ([(Add_Given "Streckenlast q_0", _, _)], _, ptp))
219 = Step.specify_do_next ptp;
220 val ("ok", ([(Add_Find "Biegelinie y", _, _)], _, ptp))
221 = Step.specify_do_next ptp;
222 val ("ok", ([(Add_Relation "Randbedingungen [y 0 = 0]", _, _)], _, ptp))
223 = Step.specify_do_next ptp;
224 val ("ok", ([(Add_Relation "Randbedingungen [y L = 0, M_b 0 = 0, M_b L = 0]", _, _)], _, ptp))
225 = Step.specify_do_next ptp;
227 (*** Problem model is complete ============================================================ ***)
228 val PblObj {probl, ...} = get_obj I (fst ptp) [];
229 (*WN230827 adaptation too time consuming* )
230 if I_Model.to_string @{context} probl = "[\n" ^
231 "(1 ,[1] ,true ,#Given ,Cor Traegerlaenge L ,(l_l, [L])), \n" ^
232 "(2 ,[1] ,true ,#Given ,Cor Streckenlast q_0 ,(q_q, [q_0])), \n" ^
233 "(3 ,[1] ,true ,#Find ,Cor Biegelinie y ,(b_b, [y])), \n" ^
234 "(4 ,[1] ,true ,#Relate ,Cor Randbedingungen [y 0 = 0, y L = 0, M_b 0 = 0, M_b L = 0] ,(r_b, [[y 0 = 0, y L = 0, M_b 0 = 0, M_b L = 0]]))]"
235 then () else error "I_Model.to_string probl CHANGED";
236 ( *WN230827 adaptation too time consuming*)
238 (*** Specification of References ========================================================== ***)
239 val ("ok", ([(Specify_Theory "Biegelinie", _, _)], _, ptp))
240 = Step.specify_do_next ptp;
241 val ("ok", ([(Specify_Problem ["Biegelinien"], _, _)], _, ptp))
242 = Step.specify_do_next ptp;
243 val ("ok", ([(Specify_Method ["IntegrierenUndKonstanteBestimmen2"], _, _)], _, ptp))
244 = Step.specify_do_next ptp;
246 (*** stepwise Specification: MethodC model ================================================ ***)
247 val ("ok", ([(Add_Given "FunktionsVariable x", _, _)], _, ptp))
248 = Step.specify_do_next ptp;
249 val ("ok", ([(Add_Given "AbleitungBiegelinie dy", _, _)], _, ptp))
250 = Step.specify_do_next ptp;
251 val ("ok", ([(Add_Given "Biegemoment M_b", _, _)], _, ptp))
252 = Step.specify_do_next ptp;
253 val ("ok", ([(Add_Given "Querkraft Q", _, _)], _, ptp))
254 = Step.specify_do_next ptp;
255 val ("ok", ([(Add_Given "GleichungsVariablen [c, c_2, c_3, c_4]", _, _)], _, ptp))
256 = Step.specify_do_next ptp;
258 (*** Specification of Problem and MethodC model is completes ============================== ***)
259 val PblObj {meth, ...} = get_obj I (fst ptp) [];
260 if I_Model.to_string @{context} meth = "[\n" ^
261 "(1 ,[1] ,true ,#Given ,Cor Traegerlaenge L , pen2str), \n" ^
262 "(2 ,[1] ,true ,#Given ,Cor Streckenlast q_0 , pen2str), \n" ^
263 "(3 ,[1] ,true ,#Find ,Cor Biegelinie y , pen2str), \n" ^
264 "(4 ,[1] ,true ,#Relate ,Cor Randbedingungen [y 0 = 0, y L = 0, M_b 0 = 0, M_b L = 0] , pen2str), \n" ^
265 "(5 ,[1] ,true ,#Given ,Cor FunktionsVariable x , pen2str), \n" ^
266 "(6 ,[1] ,true ,#Given ,Cor AbleitungBiegelinie dy , pen2str), \n" ^
267 "(7 ,[1] ,true ,#Given ,Cor Biegemoment M_b , pen2str), \n" ^
268 "(8 ,[1] ,true ,#Given ,Cor Querkraft Q , pen2str), \n" ^
269 "(9 ,[1] ,true ,#Given ,Cor GleichungsVariablen [c, c_2, c_3, c_4] , pen2str)]"
270 then () else error "I_Model.to_string meth CHANGED";
272 (*** Solution starts ====================================================================== ***)
273 val ("ok", ([(Apply_Method ["IntegrierenUndKonstanteBestimmen2"], _, _)], _, ptp))
274 = Step.specify_do_next ptp;