test/Tools/isac/Knowledge/partial_fractions.sml
author Walther Neuper <wneuper@ist.tugraz.at>
Sat, 01 Jun 2019 11:09:19 +0200
changeset 59549 e0e3d41ef86c
parent 59534 086e38393267
child 59550 2e7631381921
permissions -rwxr-xr-x
[-Test_Isac] funpack: repair errors in test, spot remaining errors

Note: check, whether error is due to "switch from Script to partial_function" 4035ec339062
or due to "failed trial to generalise handling of meths which extend the model of a probl" 98298342fb6d
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