wneuper@59549
|
1 |
(* Title: "Knowledge/partial_fractions.sml"
|
wneuper@59549
|
2 |
partial fraction decomposition
|
neuper@42289
|
3 |
Author: Jan Rocnik
|
neuper@42289
|
4 |
(c) due to copyright terms
|
neuper@42289
|
5 |
*)
|
neuper@42289
|
6 |
|
neuper@42289
|
7 |
"--------------------------------------------------------";
|
neuper@42289
|
8 |
"table of contents --------------------------------------";
|
neuper@42289
|
9 |
"--------------------------------------------------------";
|
neuper@42305
|
10 |
"----------- why helpless here ? ------------------------";
|
neuper@42310
|
11 |
"----------- why not nxt = Model_Problem here ? ---------";
|
neuper@42359
|
12 |
"----------- fun factors_from_solution ------------------";
|
neuper@42359
|
13 |
"----------- Logic.unvarify_global ----------------------";
|
neuper@42359
|
14 |
"----------- eval_drop_questionmarks --------------------";
|
neuper@42376
|
15 |
"----------- = me for met_partial_fraction --------------";
|
wneuper@59248
|
16 |
"----------- autoCalculate for met_partial_fraction -----";
|
neuper@42386
|
17 |
"----------- progr.vers.2: check erls for multiply_ansatz";
|
neuper@42386
|
18 |
"----------- progr.vers.2: improve program --------------";
|
neuper@42289
|
19 |
"--------------------------------------------------------";
|
neuper@42289
|
20 |
"--------------------------------------------------------";
|
neuper@42289
|
21 |
"--------------------------------------------------------";
|
neuper@42289
|
22 |
|
neuper@42289
|
23 |
|
neuper@42305
|
24 |
"----------- why helpless here ? ------------------------";
|
neuper@42305
|
25 |
"----------- why helpless here ? ------------------------";
|
neuper@42305
|
26 |
"----------- why helpless here ? ------------------------";
|
neuper@42305
|
27 |
val fmz = ["filterExpression (X z = 3 / (z - 1/4 + -1/8 * (1/(z::real))))",
|
neuper@42305
|
28 |
"stepResponse (x[n::real]::bool)"];
|
neuper@42405
|
29 |
val (dI,pI,mI) = ("Isac", ["Inverse", "Z_Transform", "SignalProcessing"],
|
neuper@42405
|
30 |
["SignalProcessing","Z_Transform","Inverse"]);
|
neuper@42305
|
31 |
val (p,_,f,nxt,_,pt) = CalcTreeTEST [(fmz, (dI,pI,mI))];
|
neuper@42305
|
32 |
val (p,_,f,nxt,_,pt) = me nxt p [] pt; "Add_Given";
|
neuper@42305
|
33 |
val (p,_,f,nxt,_,pt) = me nxt p [] pt; "Add_Find";
|
neuper@42305
|
34 |
val (p,_,f,nxt,_,pt) = me nxt p [] pt; "Specify_Theory";
|
neuper@42305
|
35 |
val (p,_,f,nxt,_,pt) = me nxt p [] pt; "Specify_Problem";
|
neuper@42305
|
36 |
val (p,_,f,nxt,_,pt) = me nxt p [] pt; "Specify_Method";
|
neuper@42305
|
37 |
val (p,_,f,nxt,_,pt) = me nxt p [] pt; "nxt = Apply_Method";
|
neuper@42315
|
38 |
val (p,_,f,nxt,_,pt) = me nxt p [] pt; "nxt = Rewrite (ruleZY, Inverse_Z_Transform.ruleZY) --> X z = 3 / (z - 1 / 4 + -1 / 8 * (1 / z))";
|
neuper@42315
|
39 |
val (p''',_,f,nxt''',_,pt''') = me nxt p [] pt; "nxt = Rewrite_Set norm_Rational --> X' z = 3 / (z * (z - 1 / 4 + -1 / 8 * (1 / z)))";
|
wneuper@59279
|
40 |
"~~~~~ fun me, args:"; val ((_,tac), (p:pos'), _, (pt:ctree)) = (nxt, p, [], pt);
|
neuper@42305
|
41 |
val ("ok", (_, _, ptp)) = locatetac tac (pt,p)
|
neuper@42305
|
42 |
val (pt, p) = ptp;
|
neuper@42305
|
43 |
"~~~~~ fun step, args:"; val (((ip as (_,p_)):pos'), ((ptp as (pt,p), tacis):calcstate)) =
|
neuper@42305
|
44 |
(p, ((pt, e_pos'),[]));
|
neuper@42305
|
45 |
val pIopt = get_pblID (pt,ip);
|
neuper@42305
|
46 |
ip = ([],Res); "false";
|
neuper@42305
|
47 |
tacis; " = []";
|
neuper@42405
|
48 |
pIopt; (* = SOME ["Inverse", "Z_Transform", "SignalProcessing"]*)
|
neuper@42305
|
49 |
member op = [Pbl,Met] p_ andalso is_none (get_obj g_env pt (fst p)); "false";
|
neuper@42305
|
50 |
(*nxt_solve_ (pt,ip); "WAS isalist2list applied to NON-list 'no_meth'"
|
neuper@42305
|
51 |
THIS MEANS: replace no_meth by [no_meth] in Script.*)
|
neuper@42305
|
52 |
(*WAS val ("helpless",_) = step p ((pt, e_pos'),[]) *)
|
neuper@42305
|
53 |
(*WAS val (p,_,f,nxt,_,pt) = me nxt p [] pt; "Empty_Tac instead SubProblem";*)
|
neuper@42289
|
54 |
|
neuper@42310
|
55 |
"----------- why not nxt = Model_Problem here ? ---------";
|
neuper@42310
|
56 |
"----------- why not nxt = Model_Problem here ? ---------";
|
neuper@42310
|
57 |
"----------- why not nxt = Model_Problem here ? ---------";
|
neuper@42313
|
58 |
val (p,_,f,nxt,_,pt) = me nxt''' p''' [] pt''';
|
wneuper@59279
|
59 |
"~~~~~ fun me, args:"; val (((_,tac):tac'_), (p:pos'), _, (pt:ctree)) = (nxt, p, c, pt);
|
neuper@42313
|
60 |
val ("ok", (_, _, ptp)) = locatetac tac (pt,p);
|
neuper@42313
|
61 |
val (pt, p) = ptp;
|
neuper@42313
|
62 |
"~~~~~ fun step, args:"; val (((ip as (_,p_)):pos'), ((ptp as (pt,p), tacis):calcstate)) =
|
neuper@42313
|
63 |
(p, ((pt, e_pos'),[]));
|
neuper@42313
|
64 |
val pIopt = get_pblID (pt,ip);
|
neuper@42313
|
65 |
ip = ([],Res); " = false";
|
neuper@42313
|
66 |
tacis; " = []";
|
neuper@42405
|
67 |
pIopt (* = SOME ["Inverse", "Z_Transform", "SignalProcessing"]*);
|
neuper@42313
|
68 |
member op = [Pbl,Met] p_ andalso is_none (get_obj g_env pt (fst p)); " = false";
|
neuper@42313
|
69 |
(* ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ leads into
|
neuper@42313
|
70 |
nxt_solve_, which is definitely WRONG (should be nxt_specify_ for FIND_ADD).
|
neuper@42313
|
71 |
This ERROR seems to be introduced together with ctxt, concerns Apply_Method without init_form.
|
neuper@42313
|
72 |
See TODO.txt
|
neuper@42313
|
73 |
*)
|
neuper@42310
|
74 |
|
neuper@42359
|
75 |
"----------- fun factors_from_solution ------------------";
|
neuper@42359
|
76 |
"----------- fun factors_from_solution ------------------";
|
neuper@42359
|
77 |
"----------- fun factors_from_solution ------------------";
|
neuper@48761
|
78 |
val ctxt = Proof_Context.init_global @{theory Isac};
|
jan@42352
|
79 |
val SOME t = parseNEW ctxt "factors_from_solution [(z::real) = 1 / 2, z = -1 / 4]";
|
jan@42352
|
80 |
val SOME (_, t') = eval_factors_from_solution "" 0 t thy;
|
jan@42352
|
81 |
if term2str t' =
|
neuper@42376
|
82 |
"factors_from_solution [z = 1 / 2, z = -1 / 4] = (z - 1 / 2) * (z - -1 / 4)"
|
jan@42352
|
83 |
then () else error "factors_from_solution broken";
|
jan@42352
|
84 |
|
neuper@42359
|
85 |
"----------- Logic.unvarify_global ----------------------";
|
neuper@42359
|
86 |
"----------- Logic.unvarify_global ----------------------";
|
neuper@42359
|
87 |
"----------- Logic.unvarify_global ----------------------";
|
neuper@42359
|
88 |
val A_var = parseNEW ctxt "A::real" |> the |> Logic.varify_global
|
neuper@42359
|
89 |
val B_var = parseNEW ctxt "B::real" |> the |> Logic.varify_global
|
jan@42352
|
90 |
|
neuper@42359
|
91 |
val denom1 = parseNEW ctxt "(z + -1 * (1 / 2))::real" |> the;
|
neuper@42359
|
92 |
val denom2 = parseNEW ctxt "(z + -1 * (-1 / 4))::real" |> the;
|
neuper@42359
|
93 |
|
neuper@42359
|
94 |
val test = HOLogic.mk_binop "Groups.plus_class.plus"
|
wneuper@59360
|
95 |
(HOLogic.mk_binop "Rings.divide_class.divide" (A_var, denom1),
|
wneuper@59360
|
96 |
HOLogic.mk_binop "Rings.divide_class.divide" (B_var, denom2));
|
neuper@42359
|
97 |
|
neuper@42359
|
98 |
if term2str test = "?A / (z + -1 * (1 / 2)) + ?B / (z + -1 * (-1 / 4))" then ()
|
neuper@42359
|
99 |
else error "HOLogic.mk_binop broken ?";
|
neuper@42359
|
100 |
|
neuper@42359
|
101 |
(* Logic.unvarify_global test
|
neuper@42359
|
102 |
---> exception TERM raised (line 539 of "logic.ML"): Illegal fixed variable: "z"
|
neuper@42359
|
103 |
thus we need another fun var2free in termC.sml*)
|
neuper@42359
|
104 |
|
neuper@42376
|
105 |
"----------- = me for met_partial_fraction --------------";
|
neuper@42376
|
106 |
"----------- = me for met_partial_fraction --------------";
|
neuper@42376
|
107 |
"----------- = me for met_partial_fraction --------------";
|
wneuper@59534
|
108 |
val fmz =
|
wneuper@59534
|
109 |
["functionTerm (3 / (z * (z - 1 / 4 + -1 / 8 * (1 / z))))",
|
wneuper@59534
|
110 |
"solveFor z", "decomposedFunction p_p"];
|
wneuper@59534
|
111 |
val (dI',pI',mI') =
|
wneuper@59534
|
112 |
("Partial_Fractions",
|
wneuper@59534
|
113 |
["partial_fraction", "rational", "simplification"],
|
wneuper@59534
|
114 |
["simplification","of_rationals","to_partial_fraction"]);
|
wneuper@59534
|
115 |
(*[ ], Pbl*)val (p,_,f,nxt,_,pt) =
|
wneuper@59534
|
116 |
CalcTreeTEST [(fmz, (dI',pI',mI'))]; (*nxt = Model_Problem*)
|
wneuper@59534
|
117 |
(*[ ], Pbl*)val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = Add_Given "functionTerm (3 / (z * (z - 1 / 4 + -1 / 8 * (1 / z))))")*)
|
wneuper@59534
|
118 |
(*[ ], Pbl*)val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = Add_Given "solveFor z")*)
|
wneuper@59534
|
119 |
(*[ ], Pbl*)val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = Add_Find "decomposedFunction p_p")*)
|
wneuper@59534
|
120 |
(*[ ], Pbl*)val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = Specify_Theory "Partial_Fractions")*)
|
wneuper@59534
|
121 |
(*05*)
|
wneuper@59534
|
122 |
(*[ ], Pbl*)val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = Specify_Problem ["partial_fraction", "rational", "simplification"])*)
|
wneuper@59534
|
123 |
(*[ ], Pbl*)val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = Specify_Method ["simplification", "of_rationals", "to_partial_fraction"])*)
|
wneuper@59534
|
124 |
(*[ ], Met*)val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = Apply_Method ["simplification", "of_rationals", "to_partial_fraction"])*)
|
wneuper@59534
|
125 |
(*[1], Frm*)val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = Rewrite_Set "norm_Rational")*)
|
wneuper@59534
|
126 |
(*[1], Res*)val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = Subproblem ("PolyEq", ["abcFormula", "degree_2", "polynomial", "univariate", "equation"]))*)
|
wneuper@59534
|
127 |
(*10*)
|
wneuper@59534
|
128 |
(*[2], Pbl*)val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = Model_Problem)*)
|
wneuper@59534
|
129 |
(*[2], Pbl*)val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = Add_Given "equality (-1 + -2 * z + 8 * z ^^^ 2 = 0)")*)
|
wneuper@59534
|
130 |
(*[2], Pbl*)val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = Add_Given "solveFor z")*)
|
wneuper@59534
|
131 |
(*[2], Pbl*)val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = Add_Find "solutions z_i")*)
|
wneuper@59534
|
132 |
(*[2], Pbl*)val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = Specify_Theory "PolyEq")*)
|
wneuper@59534
|
133 |
(*[2], Pbl*)(*15*)
|
wneuper@59534
|
134 |
(*[2], Pbl*)val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = Specify_Problem ["abcFormula", "degree_2", "polynomial", "univariate", "equation"])*)
|
wneuper@59534
|
135 |
(*[2], Pbl*)val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = Specify_Method ["PolyEq", "solve_d2_polyeq_abc_equation"])*)
|
wneuper@59534
|
136 |
(*[2], Met*)val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = Apply_Method ["PolyEq", "solve_d2_polyeq_abc_equation"])*)
|
wneuper@59534
|
137 |
(*[2, 1], Frm*)val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = Rewrite_Set_Inst (["(''bdv'', z)"], "d2_polyeq_abcFormula_simplify"))*)
|
wneuper@59534
|
138 |
(*[2, 1], Res*)val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = Rewrite_Set "polyeq_simplify")*)
|
wneuper@59534
|
139 |
(*20*)
|
wneuper@59534
|
140 |
(*[2, 2], Res*)val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = Or_to_List)*)
|
wneuper@59534
|
141 |
(*[2, 3], Res*)val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = Check_elementwise "Assumptions")*)
|
wneuper@59534
|
142 |
(*[2, 4], Res*)val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = Check_Postcond ["abcFormula", "degree_2", "polynomial", "univariate", "equation"])*)
|
wneuper@59534
|
143 |
(*[2], Res*)val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = Take "3 / ((z - 1 / 2) * (z - -1 / 4))")*)
|
wneuper@59534
|
144 |
(*[3], Frm*)val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = Rewrite_Set "ansatz_rls")*)
|
wneuper@59534
|
145 |
(*25*)
|
wneuper@59534
|
146 |
(*[3], Res*)val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = Take "3 / ((z - 1 / 2) * (z - -1 / 4)) = ?A / (z - 1 / 2) + ?B / (z - -1 / 4)")*)
|
wneuper@59534
|
147 |
(*[4], Frm*)val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = Rewrite_Set "equival_trans")*)
|
wneuper@59534
|
148 |
(*[4], Res*)val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = Take "3 = AA * (z - -1 / 4) + BB * (z - 1 / 2)"*)
|
wneuper@59534
|
149 |
(*[5], Frm*)val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = Substitute ["z = 1 / 2"])*)
|
wneuper@59534
|
150 |
(*[5], Res*)val (p,_,f,nxt,_,pt) = me nxt p [] pt;(*nxt = Rewrite_Set "norm_Rational"*)
|
wneuper@59534
|
151 |
(*[6], Res*)val (p''',_,f,nxt''',_,pt''') = me nxt p [] pt;(*nxt = Subproblem ("Isac", ["normalise", "polynomial", "univariate", "equation"]*)
|
wneuper@59534
|
152 |
(*30+1*)
|
wneuper@59534
|
153 |
(*[7], Pbl*)val (p'''',_,f,nxt'''',_,pt'''') = me nxt''' p''' [] pt'''; (*nxt = Model_Problem*)
|
wneuper@59534
|
154 |
(*[7], Pbl*)val (p'v,_,f,nxt'v,_,pt'v) = me nxt'''' p'''' [] pt''''; (*nxt = Add_Given "equality (3 = 3 * AA / 4)")*)
|
wneuper@59534
|
155 |
(*[7], Pbl*)val (p'v',_,f,nxt'v',_,pt'v') = me nxt'v p'v [] pt'v; (*nxt = Add_Given "solveFor AA")*)
|
wneuper@59534
|
156 |
(*[7], Pbl*)val (p'v'',_,f,nxt'v'',_,pt'v'') = me nxt'v' p'v' [] pt'v'; (*nxt = Add_Find "solutions AA_i")*)
|
wneuper@59534
|
157 |
(*[7], Pbl*)val (p,_,f,nxt,_,pt) = me nxt'v'' p'v'' [] pt'v''; (*nxt = Specify_Theory "Isac"*)
|
wneuper@59534
|
158 |
(*35*)
|
wneuper@59534
|
159 |
(*[7], Pbl*)val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = Specify_Problem ["normalise", "polynomial", "univariate", "equation"])*)
|
wneuper@59534
|
160 |
(*[7], Pbl*)val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = Specify_Method ["PolyEq", "normalise_poly"])*)
|
wneuper@59534
|
161 |
(*[7], Met*)val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = Apply_Method ["PolyEq", "normalise_poly"])*)
|
wneuper@59534
|
162 |
(*[7, 1], Frm*)val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = Rewrite ("all_left", "\<not> ?b =!= 0 \<Longrightarrow> (?a = ?b) = (?a - ?b = 0)"))*)
|
wneuper@59534
|
163 |
(*[7, 1], Res*)val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = Rewrite_Set_Inst (["(''bdv'', AA)"], "make_ratpoly_in")*)
|
wneuper@59534
|
164 |
(*40*)
|
wneuper@59534
|
165 |
(*[7, 2], Res*)val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = Rewrite_Set "polyeq_simplify"*)
|
wneuper@59534
|
166 |
(*[7, 3], Res*)val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = Subproblem ("Isac", ["degree_1", "polynomial", "univariate", "equation"])*)
|
wneuper@59534
|
167 |
(*[7, 4], Pbl*)val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = Model_Problem*)
|
wneuper@59534
|
168 |
(*[7, 4], Pbl*)val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = Add_Given "equality (3 + -3 / 4 * AA = 0)"*)
|
wneuper@59534
|
169 |
(*[7, 4], Pbl*)val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = Add_Given "solveFor AA"*)
|
wneuper@59534
|
170 |
(*45*)
|
wneuper@59534
|
171 |
(*[7, 4], Pbl*)val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = *)
|
wneuper@59534
|
172 |
(*[7, 4], Pbl*)val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = *)
|
wneuper@59534
|
173 |
(*[7, 4], Pbl*)val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = *)
|
wneuper@59534
|
174 |
(*[7, 4], Pbl*)val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = *)
|
wneuper@59534
|
175 |
(*[7, 4], Pbl*)val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = *)
|
wneuper@59534
|
176 |
(*50*)
|
wneuper@59534
|
177 |
(*[7, 4], Met*)val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = *)
|
wneuper@59534
|
178 |
(*[7, 4, 1], Frm*)val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = *)
|
wneuper@59534
|
179 |
(*[7, 4, 1], Res*)val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = *)
|
wneuper@59534
|
180 |
(*[7, 4, 2], Res*)val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = *)
|
wneuper@59534
|
181 |
(*[7, 4, 3], Res*)val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = *)
|
wneuper@59534
|
182 |
(*55*)
|
wneuper@59534
|
183 |
(*[7, 4, 4], Res*)val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = *)
|
wneuper@59534
|
184 |
(*[7, 4, 5], Res*)val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = *)
|
wneuper@59534
|
185 |
(*[7, 4], Res*)val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = *)
|
wneuper@59534
|
186 |
(*[7], Res*)val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = *)
|
wneuper@59534
|
187 |
(*[8], Frm*)val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = *)
|
wneuper@59534
|
188 |
(*60*)
|
wneuper@59534
|
189 |
(*[8], Res*)val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = *)
|
wneuper@59534
|
190 |
(*[9], Res*)val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = *)
|
wneuper@59534
|
191 |
(*[10], Pbl*)val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = *)
|
wneuper@59534
|
192 |
(*[10], Pbl*)val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = *)
|
wneuper@59534
|
193 |
(*[10], Pbl*)val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = *)
|
wneuper@59534
|
194 |
(*65*)
|
wneuper@59534
|
195 |
(*[10], Pbl*)val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = *)
|
wneuper@59534
|
196 |
(*[10], Pbl*)val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = *)
|
wneuper@59534
|
197 |
(*[10], Pbl*)val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = *)
|
wneuper@59534
|
198 |
(*[10], Pbl*)val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = *)
|
wneuper@59534
|
199 |
(*[10], Met*)val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = *)
|
wneuper@59534
|
200 |
(*70*)
|
wneuper@59534
|
201 |
(*[10, 1], Frm*)val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = *)
|
wneuper@59534
|
202 |
(*[10, 1], Res*)val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = *)
|
wneuper@59534
|
203 |
(*[10, 2], Res*)val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = *)
|
wneuper@59534
|
204 |
(*[10, 3], Res*)val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = *)
|
wneuper@59534
|
205 |
(*[10, 4], Pbl*)val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = *)
|
wneuper@59534
|
206 |
(*75*)
|
wneuper@59534
|
207 |
(*[10, 4], Pbl*)val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = *)
|
wneuper@59534
|
208 |
(*[10, 4], Pbl*)val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = *)
|
wneuper@59534
|
209 |
(*[10, 4], Pbl*)val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = *)
|
wneuper@59534
|
210 |
(*[10, 4], Pbl*)val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = *)
|
wneuper@59534
|
211 |
(*[10, 4], Pbl*)val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = *)
|
wneuper@59534
|
212 |
(*80*)
|
wneuper@59534
|
213 |
(*[10, 4], Pbl*)val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = *)
|
wneuper@59534
|
214 |
(*[10, 4], Met*)val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = *)
|
wneuper@59534
|
215 |
(*[10, 4, 1], Frm*)val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = *)
|
wneuper@59534
|
216 |
(*[10, 4, 1], Res*)val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = *)
|
wneuper@59534
|
217 |
(*[10, 4, 2], Res*)val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = *)
|
wneuper@59534
|
218 |
(*85*)
|
wneuper@59534
|
219 |
(*[10, 4, 3], Res*)val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = *)
|
wneuper@59534
|
220 |
(*[10, 4, 4], Res*)val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = Check_elementwise "Assumptions"*)
|
wneuper@59534
|
221 |
(*[10, 4, 5], Res*)val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = Check_Postcond ["degree_1", "polynomial", "univariate", "equation"*)
|
wneuper@59534
|
222 |
(*[10, 4], Res*)val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = Check_Postcond ["normalise", "polynomial", "univariate", "equation"]*)
|
neuper@42376
|
223 |
|
wneuper@59534
|
224 |
(*[10], Res*)val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = Take "AA / (z - 1 / 2) + BB / (z - -1 / 4)"*)
|
wneuper@59534
|
225 |
(*90*)
|
wneuper@59534
|
226 |
(*[11], Frm*)val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = Substitute ["AA = 4", "BB = -4"]*)
|
wneuper@59534
|
227 |
(*[11], Res*)val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = Check_Postcond ["partial_fraction", "rational", "simplification"]*)
|
wneuper@59534
|
228 |
(*[], Res*)val (p,_,f,nxt,_,pt) = me nxt p [] pt; (*nxt = End_Proof'*)
|
wneuper@59534
|
229 |
|
wneuper@59534
|
230 |
case nxt of
|
wneuper@59534
|
231 |
(_, End_Proof') => if f2str f = "4 / (z - 1 / 2) + -4 / (z - -1 / 4)" then ()
|
wneuper@59534
|
232 |
else error "= me .. met_partial_fraction f changed"
|
wneuper@59534
|
233 |
| _ => error "= me .. met_partial_fraction nxt changed";
|
wneuper@59534
|
234 |
|
wneuper@59534
|
235 |
show_pt_tac pt; (*[
|
wneuper@59534
|
236 |
([], Frm), Problem
|
wneuper@59534
|
237 |
(''Partial_Fractions'',
|
wneuper@59534
|
238 |
??.\<^const>String.char.Char ''partial_fraction'' ''rational''
|
wneuper@59534
|
239 |
''simplification'')
|
wneuper@59534
|
240 |
. . . . . . . . . . Apply_Method ["simplification","of_rationals","to_partial_fraction"],
|
wneuper@59534
|
241 |
([1], Frm), 3 / (z * (z - 1 / 4 + -1 / 8 * (1 / z)))
|
wneuper@59534
|
242 |
. . . . . . . . . . Rewrite_Set "norm_Rational",
|
wneuper@59534
|
243 |
([1], Res), 24 / (-1 + -2 * z + 8 * z ^^^ 2)
|
wneuper@59534
|
244 |
. . . . . . . . . . Subproblem (Isac, ["abcFormula","degree_2","polynomial","univariate","equation"]),
|
wneuper@59534
|
245 |
([2], Pbl), solve (-1 + -2 * z + 8 * z ^^^ 2 = 0, z)
|
wneuper@59534
|
246 |
. . . . . . . . . . Apply_Method ["PolyEq","solve_d2_polyeq_abc_equation"],
|
wneuper@59534
|
247 |
([2,1], Frm), -1 + -2 * z + 8 * z ^^^ 2 = 0
|
wneuper@59534
|
248 |
. . . . . . . . . . Rewrite_Set_Inst ([(''bdv'', z)], "d2_polyeq_abcFormula_simplify"),
|
wneuper@59534
|
249 |
([2,1], Res), z = (- -2 + sqrt (-2 ^^^ 2 - 4 * 8 * -1)) / (2 * 8) \<or>
|
wneuper@59534
|
250 |
z = (- -2 - sqrt (-2 ^^^ 2 - 4 * 8 * -1)) / (2 * 8)
|
wneuper@59534
|
251 |
. . . . . . . . . . Rewrite_Set "polyeq_simplify",
|
wneuper@59534
|
252 |
([2,2], Res), z = 1 / 2 \<or> z = -1 / 4
|
wneuper@59534
|
253 |
. . . . . . . . . . Or_to_List ,
|
wneuper@59534
|
254 |
([2,3], Res), [z = 1 / 2, z = -1 / 4]
|
wneuper@59534
|
255 |
. . . . . . . . . . Check_elementwise "Assumptions",
|
wneuper@59534
|
256 |
([2,4], Res), [z = 1 / 2, z = -1 / 4]
|
wneuper@59534
|
257 |
. . . . . . . . . . Check_Postcond ["abcFormula","degree_2","polynomial","univariate","equation"],
|
wneuper@59534
|
258 |
([2], Res), [z = 1 / 2, z = -1 / 4]
|
wneuper@59534
|
259 |
. . . . . . . . . . Take "3 / ((z - 1 / 2) * (z - -1 / 4))",
|
wneuper@59534
|
260 |
([3], Frm), 3 / ((z - 1 / 2) * (z - -1 / 4))
|
wneuper@59534
|
261 |
. . . . . . . . . . Rewrite_Set "ansatz_rls",
|
wneuper@59534
|
262 |
([3], Res), AA / (z - 1 / 2) + BB / (z - -1 / 4)
|
wneuper@59534
|
263 |
. . . . . . . . . . Take "3 / ((z - 1 / 2) * (z - -1 / 4)) = AA / (z - 1 / 2) + BB / (z - -1 / 4)",
|
wneuper@59534
|
264 |
([4], Frm), 3 / ((z - 1 / 2) * (z - -1 / 4)) = AA / (z - 1 / 2) + BB / (z - -1 / 4)
|
wneuper@59534
|
265 |
. . . . . . . . . . Rewrite_Set "equival_trans",
|
wneuper@59534
|
266 |
([4], Res), 3 = AA * (z - -1 / 4) + BB * (z - 1 / 2)
|
wneuper@59534
|
267 |
. . . . . . . . . . Substitute ["z = 1 / 2"],
|
wneuper@59534
|
268 |
([5], Res), 3 = AA * (1 / 2 - -1 / 4) + BB * (1 / 2 - 1 / 2)
|
wneuper@59534
|
269 |
. . . . . . . . . . Rewrite_Set "norm_Rational",
|
wneuper@59534
|
270 |
([6], Res), 3 = 3 * AA / 4
|
wneuper@59534
|
271 |
. . . . . . . . . . Subproblem (Isac, ["normalise","polynomial","univariate","equation"]),
|
wneuper@59534
|
272 |
([7], Pbl), solve (3 = 3 * AA / 4, AA)
|
wneuper@59534
|
273 |
. . . . . . . . . . Apply_Method ["PolyEq","normalise_poly"],
|
wneuper@59534
|
274 |
([7,1], Frm), 3 = 3 * AA / 4
|
wneuper@59534
|
275 |
. . . . . . . . . . Rewrite ("all_left", "\<not> ?b =!= 0 \<Longrightarrow> (?a = ?b) = (?a - ?b = 0)"),
|
wneuper@59534
|
276 |
([7,1], Res), 3 - 3 * AA / 4 = 0
|
wneuper@59534
|
277 |
. . . . . . . . . . Rewrite_Set_Inst ([(''bdv'', AA)], "make_ratpoly_in"),
|
wneuper@59534
|
278 |
([7,2], Res), 3 / 1 + -3 / 4 * AA = 0
|
wneuper@59534
|
279 |
. . . . . . . . . . Rewrite_Set "polyeq_simplify",
|
wneuper@59534
|
280 |
([7,3], Res), 3 + -3 / 4 * AA = 0
|
wneuper@59534
|
281 |
. . . . . . . . . . Subproblem (Isac, ["degree_1","polynomial","univariate","equation"]),
|
wneuper@59534
|
282 |
([7,4], Pbl), solve (3 + -3 / 4 * AA = 0, AA)
|
wneuper@59534
|
283 |
. . . . . . . . . . Apply_Method ["PolyEq","solve_d1_polyeq_equation"],
|
wneuper@59534
|
284 |
([7,4,1], Frm), 3 + -3 / 4 * AA = 0
|
wneuper@59534
|
285 |
. . . . . . . . . . Rewrite_Set_Inst ([(''bdv'', AA)], "d1_polyeq_simplify"),
|
wneuper@59534
|
286 |
([7,4,1], Res), AA = -1 * 3 / (-3 / 4)
|
wneuper@59534
|
287 |
. . . . . . . . . . Rewrite_Set "polyeq_simplify",
|
wneuper@59534
|
288 |
([7,4,2], Res), AA = -3 / (-3 / 4)
|
wneuper@59534
|
289 |
. . . . . . . . . . Rewrite_Set "norm_Rational_parenthesized",
|
wneuper@59534
|
290 |
([7,4,3], Res), AA = 4
|
wneuper@59534
|
291 |
. . . . . . . . . . Or_to_List ,
|
wneuper@59534
|
292 |
([7,4,4], Res), [AA = 4]
|
wneuper@59534
|
293 |
. . . . . . . . . . Check_elementwise "Assumptions",
|
wneuper@59534
|
294 |
([7,4,5], Res), [AA = 4]
|
wneuper@59534
|
295 |
. . . . . . . . . . Check_Postcond ["degree_1","polynomial","univariate","equation"],
|
wneuper@59534
|
296 |
([7,4], Res), [AA = 4]
|
wneuper@59534
|
297 |
. . . . . . . . . . Check_Postcond ["normalise","polynomial","univariate","equation"],
|
wneuper@59534
|
298 |
([7], Res), [AA = 4]
|
wneuper@59534
|
299 |
. . . . . . . . . . Take "3 = AA * (z - -1 / 4) + BB * (z - 1 / 2)",
|
wneuper@59534
|
300 |
([8], Frm), 3 = AA * (z - -1 / 4) + BB * (z - 1 / 2)
|
wneuper@59534
|
301 |
. . . . . . . . . . Substitute ["z = -1 / 4"],
|
wneuper@59534
|
302 |
([8], Res), 3 = AA * (-1 / 4 - -1 / 4) + BB * (-1 / 4 - 1 / 2)
|
wneuper@59534
|
303 |
. . . . . . . . . . Rewrite_Set "norm_Rational",
|
wneuper@59534
|
304 |
([9], Res), 3 = -3 * BB / 4
|
wneuper@59534
|
305 |
. . . . . . . . . . Subproblem (Isac, ["normalise","polynomial","univariate","equation"]),
|
wneuper@59534
|
306 |
([10], Pbl), solve (3 = -3 * BB / 4, BB)
|
wneuper@59534
|
307 |
. . . . . . . . . . Apply_Method ["PolyEq","normalise_poly"],
|
wneuper@59534
|
308 |
([10,1], Frm), 3 = -3 * BB / 4
|
wneuper@59534
|
309 |
. . . . . . . . . . Rewrite ("all_left", "\<not> ?b =!= 0 \<Longrightarrow> (?a = ?b) = (?a - ?b = 0)"),
|
wneuper@59534
|
310 |
([10,1], Res), 3 - -3 * BB / 4 = 0
|
wneuper@59534
|
311 |
. . . . . . . . . . Rewrite_Set_Inst ([(''bdv'', BB)], "make_ratpoly_in"),
|
wneuper@59534
|
312 |
([10,2], Res), 3 / 1 + 3 / 4 * BB = 0
|
wneuper@59534
|
313 |
. . . . . . . . . . Rewrite_Set "polyeq_simplify",
|
wneuper@59534
|
314 |
([10,3], Res), 3 + 3 / 4 * BB = 0
|
wneuper@59534
|
315 |
. . . . . . . . . . Subproblem (Isac, ["degree_1","polynomial","univariate","equation"]),
|
wneuper@59534
|
316 |
([10,4], Pbl), solve (3 + 3 / 4 * BB = 0, BB)
|
wneuper@59534
|
317 |
. . . . . . . . . . Apply_Method ["PolyEq","solve_d1_polyeq_equation"],
|
wneuper@59534
|
318 |
([10,4,1], Frm), 3 + 3 / 4 * BB = 0
|
wneuper@59534
|
319 |
. . . . . . . . . . Rewrite_Set_Inst ([(''bdv'', BB)], "d1_polyeq_simplify"),
|
wneuper@59534
|
320 |
([10,4,1], Res), BB = -1 * 3 / (3 / 4)
|
wneuper@59534
|
321 |
. . . . . . . . . . Rewrite_Set "polyeq_simplify",
|
wneuper@59534
|
322 |
([10,4,2], Res), BB = -3 / (3 / 4)
|
wneuper@59534
|
323 |
. . . . . . . . . . Rewrite_Set "norm_Rational_parenthesized",
|
wneuper@59534
|
324 |
([10,4,3], Res), BB = -4
|
wneuper@59534
|
325 |
. . . . . . . . . . Or_to_List ,
|
wneuper@59534
|
326 |
([10,4,4], Res), [BB = -4]
|
wneuper@59534
|
327 |
. . . . . . . . . . Check_elementwise "Assumptions",
|
wneuper@59534
|
328 |
([10,4,5], Res), [BB = -4]
|
wneuper@59534
|
329 |
. . . . . . . . . . Check_Postcond ["degree_1","polynomial","univariate","equation"],
|
wneuper@59534
|
330 |
([10,4], Res), [BB = -4]
|
wneuper@59534
|
331 |
. . . . . . . . . . Check_Postcond ["normalise","polynomial","univariate","equation"],
|
wneuper@59534
|
332 |
([10], Res), [BB = -4]
|
wneuper@59534
|
333 |
. . . . . . . . . . Take "AA / (z - 1 / 2) + BB / (z - -1 / 4)",
|
wneuper@59534
|
334 |
([11], Frm), AA / (z - 1 / 2) + BB / (z - -1 / 4)
|
wneuper@59534
|
335 |
. . . . . . . . . . Substitute ["AA = 4","BB = -4"],
|
wneuper@59534
|
336 |
([11], Res), 4 / (z - 1 / 2) + -4 / (z - -1 / 4)
|
wneuper@59534
|
337 |
. . . . . . . . . . Check_Postcond ["partial_fraction","rational","simplification"],
|
wneuper@59534
|
338 |
([], Res), 4 / (z - 1 / 2) + -4 / (z - -1 / 4)]
|
wneuper@59534
|
339 |
val it = (): unit
|
wneuper@59534
|
340 |
*)
|
neuper@42376
|
341 |
|
wneuper@59248
|
342 |
"----------- autoCalculate for met_partial_fraction -----";
|
wneuper@59248
|
343 |
"----------- autoCalculate for met_partial_fraction -----";
|
wneuper@59248
|
344 |
"----------- autoCalculate for met_partial_fraction -----";
|
s1210629013@55445
|
345 |
reset_states ();
|
neuper@42413
|
346 |
val fmz =
|
neuper@42413
|
347 |
["functionTerm (3 / (z * (z - 1 / 4 + -1 / 8 * (1 / z))))",
|
neuper@42413
|
348 |
"solveFor z", "decomposedFunction p_p"];
|
neuper@42413
|
349 |
val (dI', pI', mI') =
|
neuper@42413
|
350 |
("Partial_Fractions",
|
neuper@42413
|
351 |
["partial_fraction", "rational", "simplification"],
|
neuper@42413
|
352 |
["simplification","of_rationals","to_partial_fraction"]);
|
neuper@42413
|
353 |
CalcTree [(fmz, (dI' ,pI' ,mI'))];
|
neuper@42413
|
354 |
Iterator 1;
|
neuper@42413
|
355 |
moveActiveRoot 1;
|
wneuper@59248
|
356 |
autoCalculate 1 CompleteCalc;
|
neuper@42413
|
357 |
|
neuper@42413
|
358 |
val ((pt,p),_) = get_calc 1; val ip = get_pos 1 1;
|
neuper@42413
|
359 |
if p = ip andalso ip = ([], Res) then ()
|
wneuper@59248
|
360 |
else error "autoCalculate for met_partial_fraction changed: final pos'";
|
neuper@42413
|
361 |
|
neuper@42413
|
362 |
val (Form f, tac, asms) = pt_extract (pt, p);
|
neuper@42413
|
363 |
if term2str f = "4 / (z - 1 / 2) + -4 / (z - -1 / 4)" andalso
|
wneuper@59534
|
364 |
terms2str' asms =
|
wneuper@59534
|
365 |
"[BB = -4,BB is_polyexp,AA is_polyexp,AA = 4," ^
|
wneuper@59371
|
366 |
"lhs (-1 + -2 * z + 8 * z ^^^ 2 = 0) has_degree_in z = 2," ^
|
wneuper@59534
|
367 |
"lhs (-1 + -2 * z + 8 * z ^^^ 2 = 0) is_poly_in z,z = 1 / 2,z = -1 / 4,z is_polyexp]"
|
wneuper@59253
|
368 |
then case tac of NONE => ()
|
wneuper@59534
|
369 |
| _ => error "me for met_partial_fraction changed: final result 1"
|
wneuper@59534
|
370 |
else error "me for met_partial_fraction changed: final result 2"
|
neuper@42413
|
371 |
|
neuper@42413
|
372 |
show_pt pt;
|
neuper@42413
|
373 |
(*[
|
neuper@42413
|
374 |
(([], Frm), Problem (Partial_Fractions, [partial_fraction, rational, simplification])),
|
neuper@42413
|
375 |
(([1], Frm), 3 / (z * (z - 1 / 4 + -1 / 8 * (1 / z)))),
|
neuper@42413
|
376 |
(([1], Res), 24 / (-1 + -2 * z + 8 * z ^^^ 2)),
|
neuper@42413
|
377 |
(([2], Pbl), solve (-1 + -2 * z + 8 * z ^^^ 2 = 0, z)),
|
neuper@42413
|
378 |
(([2,1], Frm), -1 + -2 * z + 8 * z ^^^ 2 = 0),
|
neuper@42413
|
379 |
(([2,1], Res), z = (- -2 + sqrt (-2 ^^^ 2 - 4 * 8 * -1)) / (2 * 8) |
|
neuper@42413
|
380 |
z = (- -2 - sqrt (-2 ^^^ 2 - 4 * 8 * -1)) / (2 * 8)),
|
neuper@42413
|
381 |
(([2,2], Res), z = 1 / 2 | z = -1 / 4),
|
neuper@42413
|
382 |
(([2,3], Res), [z = 1 / 2, z = -1 / 4]),
|
neuper@42413
|
383 |
(([2,4], Res), [z = 1 / 2, z = -1 / 4]),
|
neuper@42413
|
384 |
(([2], Res), [z = 1 / 2, z = -1 / 4]),
|
neuper@42413
|
385 |
(([3], Frm), 3 / ((z - 1 / 2) * (z - -1 / 4))),
|
neuper@42413
|
386 |
(([3], Res), ?A / (z - 1 / 2) + ?B / (z - -1 / 4)),
|
neuper@42413
|
387 |
(([4], Frm), 3 / ((z - 1 / 2) * (z - -1 / 4)) = ?A / (z - 1 / 2) + ?B / (z - -1 / 4)),
|
neuper@42413
|
388 |
(([4], Res), 3 = ?A * (z - -1 / 4) + ?B * (z - 1 / 2)),
|
neuper@42413
|
389 |
(([5], Frm), 3 = A * (z - -1 / 4) + B * (z - 1 / 2)),
|
neuper@42413
|
390 |
(([5], Res), 3 = A * (1 / 2 - -1 / 4) + B * (1 / 2 - 1 / 2)),
|
neuper@42413
|
391 |
(([6], Res), 3 = 3 * A / 4),
|
neuper@42413
|
392 |
(([7], Pbl), solve (3 = 3 * A / 4, A)),
|
neuper@42413
|
393 |
(([7,1], Frm), 3 = 3 * A / 4),
|
neuper@42413
|
394 |
(([7,1], Res), 3 - 3 * A / 4 = 0),
|
neuper@42413
|
395 |
(([7,2], Res), 3 / 1 + -3 / 4 * A = 0),
|
neuper@42413
|
396 |
(([7,3], Res), 3 + -3 / 4 * A = 0),
|
neuper@42413
|
397 |
(([7,4], Pbl), solve (3 + -3 / 4 * A = 0, A)),
|
neuper@42413
|
398 |
(([7,4,1], Frm), 3 + -3 / 4 * A = 0),
|
neuper@42413
|
399 |
(([7,4,1], Res), A = -1 * 3 / (-3 / 4)),
|
neuper@42413
|
400 |
(([7,4,2], Res), A = -3 / (-3 / 4)),
|
neuper@42413
|
401 |
(([7,4,3], Res), A = 4),
|
neuper@42413
|
402 |
(([7,4,4], Res), [A = 4]),
|
neuper@42413
|
403 |
(([7,4,5], Res), [A = 4]),
|
neuper@42413
|
404 |
(([7,4], Res), [A = 4]),
|
neuper@42413
|
405 |
(([7], Res), [A = 4]),
|
neuper@42413
|
406 |
(([8], Frm), 3 = A * (z - -1 / 4) + B * (z - 1 / 2)),
|
neuper@42413
|
407 |
(([8], Res), 3 = A * (-1 / 4 - -1 / 4) + B * (-1 / 4 - 1 / 2)),
|
neuper@42413
|
408 |
(([9], Res), 3 = -3 * B / 4),
|
neuper@42413
|
409 |
(([10], Pbl), solve (3 = -3 * B / 4, B)),
|
neuper@42413
|
410 |
(([10,1], Frm), 3 = -3 * B / 4),
|
neuper@42413
|
411 |
(([10,1], Res), 3 - -3 * B / 4 = 0),
|
neuper@42413
|
412 |
(([10,2], Res), 3 / 1 + 3 / 4 * B = 0),
|
neuper@42413
|
413 |
(([10,3], Res), 3 + 3 / 4 * B = 0),
|
neuper@42413
|
414 |
(([10,4], Pbl), solve (3 + 3 / 4 * B = 0, B)),
|
neuper@42413
|
415 |
(([10,4,1], Frm), 3 + 3 / 4 * B = 0),
|
neuper@42413
|
416 |
(([10,4,1], Res), B = -1 * 3 / (3 / 4)),
|
neuper@42413
|
417 |
(([10,4,2], Res), B = -3 / (3 / 4)),
|
neuper@42413
|
418 |
(([10,4,3], Res), B = -4),
|
neuper@42413
|
419 |
(([10,4,4], Res), [B = -4]),
|
neuper@42413
|
420 |
(([10,4,5], Res), [B = -4]),
|
neuper@42413
|
421 |
(([10,4], Res), [B = -4]),
|
neuper@42413
|
422 |
(([10], Res), [B = -4]),
|
neuper@42413
|
423 |
(([11], Frm), A / (z - 1 / 2) + B / (z - -1 / 4)),
|
neuper@42413
|
424 |
(([11], Res), 4 / (z - 1 / 2) + -4 / (z - -1 / 4)),
|
neuper@42413
|
425 |
(([], Res), 4 / (z - 1 / 2) + -4 / (z - -1 / 4))] *)
|
neuper@42413
|
426 |
|
neuper@42386
|
427 |
"----------- progr.vers.2: check erls for multiply_ansatz";
|
neuper@42386
|
428 |
"----------- progr.vers.2: check erls for multiply_ansatz";
|
neuper@42386
|
429 |
"----------- progr.vers.2: check erls for multiply_ansatz";
|
neuper@42386
|
430 |
(*test for outcommented 3 lines in script: is norm_Rational strong enough?*)
|
neuper@42386
|
431 |
val t = str2term "(3 / ((-1 + -2 * z + 8 * z ^^^ 2) *3/24)) = (3 / ((z - 1 / 2) * (z - -1 / 4)))";
|
neuper@42386
|
432 |
val SOME (t', _) = rewrite_set_ @{theory Isac} true ansatz_rls t;
|
neuper@42386
|
433 |
term2str t' = "3 / ((-1 + -2 * z + 8 * z ^^^ 2) * 3 / 24) =\n?A / (z - 1 / 2) + ?B / (z - -1 / 4)";
|
neuper@42386
|
434 |
|
neuper@42386
|
435 |
val SOME (t'', _) = rewrite_set_ @{theory Isac} true multiply_ansatz t'; (*true*)
|
neuper@42386
|
436 |
term2str t'' = "(z - 1 / 2) * (z - -1 / 4) * 3 / ((-1 + -2 * z + 8 * z ^^^ 2) * 3 / 24) =\n" ^
|
neuper@42386
|
437 |
"?A * (z - -1 / 4) + ?B * (z - 1 / 2)"; (*true*)
|
neuper@42386
|
438 |
|
neuper@52103
|
439 |
val SOME (t''', _) = rewrite_set_ @{theory Isac} true norm_Rational t'';
|
wneuper@59534
|
440 |
if term2str t''' = "3 = (AA + -2 * BB + 4 * z * AA + 4 * z * BB) / 4" then ()
|
neuper@52103
|
441 |
else error "ansatz_rls - multiply_ansatz - norm_Rational broken";
|
neuper@42386
|
442 |
|
neuper@42386
|
443 |
(*test for outcommented 3 lines in script: empower erls for x = a*b ==> ...*)
|
neuper@42386
|
444 |
val xxx = append_rls "multiply_ansatz_erls" norm_Rational
|
neuper@42386
|
445 |
[Calc ("HOL.eq",eval_equal "#equal_")];
|
neuper@42386
|
446 |
|
s1210629013@55444
|
447 |
val multiply_ansatz = prep_rls @{theory} (
|
neuper@42386
|
448 |
Rls {id = "multiply_ansatz", preconds = [], rew_ord = ("dummy_ord",dummy_ord),
|
neuper@42386
|
449 |
erls = xxx,
|
neuper@42451
|
450 |
srls = Erls, calc = [], errpatts = [],
|
neuper@42386
|
451 |
rules =
|
neuper@42386
|
452 |
[Thm ("multiply_2nd_order",num_str @{thm multiply_2nd_order})
|
neuper@42386
|
453 |
],
|
neuper@42386
|
454 |
scr = EmptyScr}:rls);
|
neuper@42386
|
455 |
|
neuper@42386
|
456 |
rewrite_set_ thy true xxx @{term "a+b = a+(b::real)"}; (*SOME ok*)
|
wneuper@59514
|
457 |
rewrite_set_ thy true multiply_ansatz @{term "a+b = a+(b::real)"}; (*why NONE?*)
|
neuper@42386
|
458 |
|
neuper@42386
|
459 |
"----------- progr.vers.2: improve program --------------";
|
neuper@42386
|
460 |
"----------- progr.vers.2: improve program --------------";
|
neuper@42386
|
461 |
"----------- progr.vers.2: improve program --------------";
|
neuper@42386
|
462 |
(*WN120318 stopped due to much effort with the test above*)
|
neuper@42386
|
463 |
"Script PartFracScript (f_f::real) (zzz::real) = " ^(*f_f: 3 / (z * (z - 1 / 4 + -1 / 8 * (1 / z)), zzz: z*)
|
neuper@42386
|
464 |
" (let f_f = Take f_f; " ^
|
neuper@42386
|
465 |
" (num_orig::real) = get_numerator f_f; " ^(*num_orig: 3*)
|
neuper@42386
|
466 |
" f_f = (Rewrite_Set norm_Rational False) f_f; " ^(*f_f: 24 / (-1 + -2 * z + 8 * z ^^^ 2)*)
|
neuper@42386
|
467 |
" (numer::real) = get_numerator f_f; " ^(*numer: 24*)
|
neuper@42386
|
468 |
" (denom::real) = get_denominator f_f; " ^(*denom: -1 + -2 * z + 8 * z ^^^ 2*)
|
neuper@42386
|
469 |
" (equ::bool) = (denom = (0::real)); " ^(*equ: -1 + -2 * z + 8 * z ^^^ 2 = 0*)
|
wneuper@59476
|
470 |
" (L_L::bool list) = (SubProblem (PolyEqX, " ^
|
neuper@42386
|
471 |
" [abcFormula, degree_2, polynomial, univariate, equation], " ^
|
neuper@42386
|
472 |
" [no_met]) [BOOL equ, REAL zzz]); " ^(*L_L: [z = 1 / 2, z = -1 / 4]*)
|
neuper@42386
|
473 |
" (facs::real) = factors_from_solution L_L; " ^(*facs: (z - 1 / 2) * (z - -1 / 4)*)
|
neuper@42386
|
474 |
" (eql::real) = Take (num_orig / facs); " ^(*eql: 3 / ((z - 1 / 2) * (z - -1 / 4)) *)
|
neuper@42386
|
475 |
" (eqr::real) = (Try (Rewrite_Set ansatz_rls False)) eql; " ^(*eqr: ?A / (z - 1 / 2) + ?B / (z - -1 / 4)*)
|
neuper@42386
|
476 |
" (eq::bool) = Take (eql = eqr); " ^(*eq: 3 / ((z - 1 / 2) * (z - -1 / 4)) = ?A / (z - 1 / 2) + ?B / (z - -1 / 4)*)
|
neuper@42386
|
477 |
(*this has been tested below by rewrite_set_
|
neuper@42386
|
478 |
" (eeeee::bool) = Take ((num_orig / denom * denom / numer) = (num_orig / facs));" ^(**)
|
neuper@42386
|
479 |
" (eeeee::bool) = (Rewrite_Set ansatz_rls False) eeeee;" ^(**)
|
neuper@42386
|
480 |
" eq = (Try (Rewrite_Set multiply_ansatz False)) eeeee; " ^(*eq: 3 = ?A * (z - -1 / 4) + ?B * (z - 1 / 2)*)
|
neuper@42386
|
481 |
NEXT try to outcomment the very next line..*)
|
neuper@42386
|
482 |
" eq = (Try (Rewrite_Set equival_trans False)) eeeee; " ^(*eq: 3 = ?A * (z - -1 / 4) + ?B * (z - 1 / 2)*)
|
neuper@42386
|
483 |
" eq = drop_questionmarks eq; " ^(*eq: 3 = A * (z - -1 / 4) + B * (z - 1 / 2)*)
|
neuper@42386
|
484 |
" (z1::real) = (rhs (NTH 1 L_L)); " ^(*z1: 1 / 2*)
|
neuper@42386
|
485 |
" (z2::real) = (rhs (NTH 2 L_L)); " ^(*z2: -1 / 4*)
|
neuper@42386
|
486 |
" (eq_a::bool) = Take eq; " ^(*eq_a: 3 = A * (z - -1 / 4) + B * (z - 1 / 2)*)
|
neuper@42386
|
487 |
" eq_a = (Substitute [zzz = z1]) eq; " ^(*eq_a: 3 = A * (1 / 2 - -1 / 4) + B * (1 / 2 - 1 / 2)*)
|
neuper@42386
|
488 |
" eq_a = (Rewrite_Set norm_Rational False) eq_a; " ^(*eq_a: 3 = 3 * A / 4*)
|
neuper@42386
|
489 |
" (sol_a::bool list) = " ^
|
wneuper@59476
|
490 |
" (SubProblem (IsacX, [univariate,equation], [no_met]) " ^
|
neuper@42386
|
491 |
" [BOOL eq_a, REAL (A::real)]); " ^(*sol_a: [A = 4]*)
|
neuper@42386
|
492 |
" (a::real) = (rhs (NTH 1 sol_a)); " ^(*a: 4*)
|
neuper@42386
|
493 |
" (eq_b::bool) = Take eq; " ^(*eq_b: 3 = A * (z - -1 / 4) + B * (z - 1 / 2)*)
|
neuper@42386
|
494 |
" eq_b = (Substitute [zzz = z2]) eq_b; " ^(*eq_b: *)
|
neuper@42386
|
495 |
" eq_b = (Rewrite_Set norm_Rational False) eq_b; " ^(*eq_b: *)
|
neuper@42386
|
496 |
" (sol_b::bool list) = " ^
|
wneuper@59476
|
497 |
" (SubProblem (IsacX, [univariate,equation], [no_met]) " ^
|
neuper@42386
|
498 |
" [BOOL eq_b, REAL (B::real)]); " ^(*sol_b: [B = -4]*)
|
neuper@42386
|
499 |
" (b::real) = (rhs (NTH 1 sol_b)); " ^(*b: -4*)
|
neuper@42386
|
500 |
" eqr = drop_questionmarks eqr; " ^(*eqr: A / (z - 1 / 2) + B / (z - -1 / 4)*)
|
neuper@42386
|
501 |
" (pbz::real) = Take eqr; " ^(*pbz: A / (z - 1 / 2) + B / (z - -1 / 4)*)
|
neuper@42386
|
502 |
" pbz = ((Substitute [A = a, B = b]) pbz) " ^(*pbz: 4 / (z - 1 / 2) + -4 / (z - -1 / 4)*)
|
neuper@42386
|
503 |
" in pbz)"
|
neuper@42386
|
504 |
|