test/Tools/isac/Knowledge/partial_fractions.sml
author Walther Neuper <neuper@ist.tugraz.at>
Thu, 05 Apr 2012 16:53:43 +0200
changeset 42405 f813ece49902
parent 42386 3aff35f94465
child 42413 a8303098408a
permissions -rwxr-xr-x
renamed ID "inverse" to "Inverse" (Isabelle2002 --> 2011)

reason: "inverse" is occupied by Const ("Rings.inverse_class.inverse", ...
neuper@42289
     1
(* Title:  partial fraction decomposition
neuper@42289
     2
   Author: Jan Rocnik
neuper@42289
     3
   (c) due to copyright terms
neuper@42289
     4
*)
neuper@42289
     5
neuper@42289
     6
"--------------------------------------------------------";
neuper@42289
     7
"table of contents --------------------------------------";
neuper@42289
     8
"--------------------------------------------------------";
neuper@42305
     9
"----------- why helpless here ? ------------------------";
neuper@42310
    10
"----------- why not nxt = Model_Problem here ? ---------";
neuper@42359
    11
"----------- fun factors_from_solution ------------------";
neuper@42359
    12
"----------- Logic.unvarify_global ----------------------";
neuper@42359
    13
"----------- eval_drop_questionmarks --------------------";
neuper@42376
    14
"----------- = me for met_partial_fraction --------------";
neuper@42386
    15
"----------- progr.vers.2: check erls for multiply_ansatz";
neuper@42386
    16
"----------- progr.vers.2: improve program --------------";
neuper@42289
    17
"--------------------------------------------------------";
neuper@42289
    18
"--------------------------------------------------------";
neuper@42289
    19
"--------------------------------------------------------";
neuper@42289
    20
neuper@42289
    21
neuper@42305
    22
"----------- why helpless here ? ------------------------";
neuper@42305
    23
"----------- why helpless here ? ------------------------";
neuper@42305
    24
"----------- why helpless here ? ------------------------";
neuper@42305
    25
val fmz = ["filterExpression (X z = 3 / (z - 1/4 + -1/8 * (1/(z::real))))", 
neuper@42305
    26
  "stepResponse (x[n::real]::bool)"];
neuper@42405
    27
val (dI,pI,mI) = ("Isac", ["Inverse", "Z_Transform", "SignalProcessing"], 
neuper@42405
    28
  ["SignalProcessing","Z_Transform","Inverse"]);
neuper@42305
    29
val (p,_,f,nxt,_,pt)  = CalcTreeTEST [(fmz, (dI,pI,mI))]; 
neuper@42305
    30
val (p,_,f,nxt,_,pt) = me nxt p [] pt; "Add_Given";
neuper@42305
    31
val (p,_,f,nxt,_,pt) = me nxt p [] pt; "Add_Find";
neuper@42305
    32
val (p,_,f,nxt,_,pt) = me nxt p [] pt; "Specify_Theory";
neuper@42305
    33
val (p,_,f,nxt,_,pt) = me nxt p [] pt; "Specify_Problem";
neuper@42305
    34
val (p,_,f,nxt,_,pt) = me nxt p [] pt; "Specify_Method";
neuper@42305
    35
val (p,_,f,nxt,_,pt) = me nxt p [] pt; "nxt = Apply_Method";
neuper@42315
    36
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
    37
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)))";
neuper@42305
    38
"~~~~~ fun me, args:"; val ((_,tac), (p:pos'), _, (pt:ptree)) = (nxt, p, [], pt);
neuper@42305
    39
val ("ok", (_, _, ptp)) = locatetac tac (pt,p)
neuper@42305
    40
val (pt, p) = ptp;
neuper@42305
    41
"~~~~~ fun step, args:"; val (((ip as (_,p_)):pos'), ((ptp as (pt,p), tacis):calcstate)) = 
neuper@42305
    42
                           (p, ((pt, e_pos'),[]));
neuper@42305
    43
val pIopt = get_pblID (pt,ip);
neuper@42305
    44
ip = ([],Res); "false";
neuper@42305
    45
tacis; " = []";
neuper@42405
    46
pIopt; (* = SOME ["Inverse", "Z_Transform", "SignalProcessing"]*)
neuper@42305
    47
member op = [Pbl,Met] p_ andalso is_none (get_obj g_env pt (fst p)); "false";
neuper@42305
    48
(*nxt_solve_ (pt,ip); "WAS isalist2list applied to NON-list 'no_meth'"
neuper@42305
    49
   THIS MEANS: replace no_meth by [no_meth] in Script.*)
neuper@42305
    50
(*WAS val ("helpless",_) = step p ((pt, e_pos'),[]) *)
neuper@42305
    51
(*WAS val (p,_,f,nxt,_,pt) = me nxt p [] pt; "Empty_Tac instead SubProblem";*)
neuper@42289
    52
neuper@42310
    53
"----------- why not nxt = Model_Problem here ? ---------";
neuper@42310
    54
"----------- why not nxt = Model_Problem here ? ---------";
neuper@42310
    55
"----------- why not nxt = Model_Problem here ? ---------";
neuper@42313
    56
val (p,_,f,nxt,_,pt) = me nxt''' p''' [] pt'''; 
neuper@42313
    57
"~~~~~ fun me, args:"; val (((_,tac):tac'_), (p:pos'), _, (pt:ptree)) = (nxt, p, c, pt);
neuper@42313
    58
val ("ok", (_, _, ptp)) = locatetac tac (pt,p);
neuper@42313
    59
val (pt, p) = ptp;
neuper@42313
    60
"~~~~~ fun step, args:"; val (((ip as (_,p_)):pos'), ((ptp as (pt,p), tacis):calcstate)) =
neuper@42313
    61
                           (p, ((pt, e_pos'),[]));
neuper@42313
    62
val pIopt = get_pblID (pt,ip);
neuper@42313
    63
ip = ([],Res); " = false";
neuper@42313
    64
tacis; " = []";                                         
neuper@42405
    65
pIopt (* = SOME ["Inverse", "Z_Transform", "SignalProcessing"]*);
neuper@42313
    66
member op = [Pbl,Met] p_ andalso is_none (get_obj g_env pt (fst p)); " = false";
neuper@42313
    67
(*                               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ leads into
neuper@42313
    68
nxt_solve_, which is definitely WRONG (should be nxt_specify_ for FIND_ADD).
neuper@42313
    69
This ERROR seems to be introduced together with ctxt, concerns Apply_Method without init_form.
neuper@42313
    70
See TODO.txt
neuper@42313
    71
*)
neuper@42310
    72
neuper@42359
    73
"----------- fun factors_from_solution ------------------";
neuper@42359
    74
"----------- fun factors_from_solution ------------------";
neuper@42359
    75
"----------- fun factors_from_solution ------------------";
neuper@42359
    76
val ctxt = ProofContext.init_global @{theory Isac};
jan@42352
    77
val SOME t = parseNEW ctxt "factors_from_solution [(z::real) = 1 / 2, z = -1 / 4]";
jan@42352
    78
val SOME (_, t') = eval_factors_from_solution "" 0 t thy;
jan@42352
    79
if term2str t' =
neuper@42376
    80
 "factors_from_solution [z = 1 / 2, z = -1 / 4] = (z - 1 / 2) * (z - -1 / 4)"
jan@42352
    81
then () else error "factors_from_solution broken";
jan@42352
    82
neuper@42359
    83
"----------- Logic.unvarify_global ----------------------";
neuper@42359
    84
"----------- Logic.unvarify_global ----------------------";
neuper@42359
    85
"----------- Logic.unvarify_global ----------------------";
neuper@42359
    86
val A_var = parseNEW ctxt "A::real" |> the |> Logic.varify_global
neuper@42359
    87
val B_var = parseNEW ctxt "B::real" |> the |> Logic.varify_global
jan@42352
    88
neuper@42359
    89
val denom1 = parseNEW ctxt "(z + -1 * (1 / 2))::real" |> the;
neuper@42359
    90
val denom2 = parseNEW ctxt "(z + -1 * (-1 / 4))::real" |> the;
neuper@42359
    91
neuper@42359
    92
val test = HOLogic.mk_binop "Groups.plus_class.plus"
neuper@42359
    93
  (HOLogic.mk_binop "Rings.inverse_class.divide" (A_var, denom1),
neuper@42359
    94
   HOLogic.mk_binop "Rings.inverse_class.divide" (B_var, denom2));
neuper@42359
    95
neuper@42359
    96
if term2str test = "?A / (z + -1 * (1 / 2)) + ?B / (z + -1 * (-1 / 4))" then ()
neuper@42359
    97
  else error "HOLogic.mk_binop broken ?";
neuper@42359
    98
neuper@42359
    99
(* Logic.unvarify_global test
neuper@42359
   100
---> exception TERM raised (line 539 of "logic.ML"): Illegal fixed variable: "z"
neuper@42359
   101
thus we need another fun var2free in termC.sml*)
neuper@42359
   102
neuper@42359
   103
"----------- eval_drop_questionmarks --------------------";
neuper@42359
   104
"----------- eval_drop_questionmarks --------------------";
neuper@42359
   105
"----------- eval_drop_questionmarks --------------------";
neuper@42359
   106
if term2str test = "?A / (z + -1 * (1 / 2)) + ?B / (z + -1 * (-1 / 4))"
neuper@42359
   107
then () else error "test setup (ctxt!) probably changed";
neuper@42359
   108
neuper@42359
   109
val t = Const ("Partial_Fractions.drop_questionmarks", HOLogic.realT --> HOLogic.realT) $ test;
neuper@42359
   110
neuper@42359
   111
val SOME (_, t') = eval_drop_questionmarks "drop_questionmarks" 0 t @{theory Isac};
neuper@42359
   112
if term2str t' = "drop_questionmarks (?A / (z + -1 * (1 / 2)) + ?B / (z + -1 * (-1 / 4))) =" ^
neuper@42359
   113
  "\nA / (z + -1 * (1 / 2)) + B / (z + -1 * (-1 / 4))"
neuper@42359
   114
then () else error "eval_drop_questionmarks broken";
neuper@42359
   115
neuper@42376
   116
"----------- = me for met_partial_fraction --------------";
neuper@42376
   117
"----------- = me for met_partial_fraction --------------";
neuper@42376
   118
"----------- = me for met_partial_fraction --------------";
neuper@42376
   119
  val fmz =                                             
neuper@42376
   120
    ["functionTerm (3 / (z * (z - 1 / 4 + -1 / 8 * (1 / z))))", 
neuper@42376
   121
      "solveFor z", "decomposedFunction p_p"];
neuper@42376
   122
  val (dI',pI',mI') =
neuper@42376
   123
    ("Partial_Fractions", 
neuper@42376
   124
      ["partial_fraction", "rational", "simplification"],
neuper@42376
   125
      ["simplification","of_rationals","to_partial_fraction"]);
neuper@42376
   126
  val (p,_,f,nxt,_,pt) = CalcTreeTEST [(fmz, (dI',pI',mI'))];
neuper@42376
   127
  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
neuper@42376
   128
  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
neuper@42376
   129
  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
neuper@42376
   130
  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
neuper@42376
   131
  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
neuper@42376
   132
  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
neuper@42376
   133
  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
neuper@42376
   134
  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
neuper@42376
   135
  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
neuper@42376
   136
  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
neuper@42376
   137
  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
neuper@42376
   138
  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
neuper@42376
   139
  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
neuper@42376
   140
  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
neuper@42376
   141
  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
neuper@42376
   142
  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
neuper@42376
   143
  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
neuper@42376
   144
  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
neuper@42376
   145
  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
neuper@42376
   146
  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
neuper@42376
   147
  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
neuper@42376
   148
  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
neuper@42376
   149
  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
neuper@42376
   150
  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
neuper@42376
   151
  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
neuper@42376
   152
  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
neuper@42376
   153
  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
neuper@42376
   154
  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
neuper@42376
   155
  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
neuper@42376
   156
  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
neuper@42376
   157
  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
neuper@42376
   158
  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
neuper@42376
   159
  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
neuper@42376
   160
  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
neuper@42376
   161
  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
neuper@42376
   162
  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
neuper@42376
   163
  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
neuper@42376
   164
  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
neuper@42376
   165
  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
neuper@42376
   166
  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
neuper@42376
   167
  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
neuper@42376
   168
  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
neuper@42376
   169
  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
neuper@42376
   170
  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
neuper@42376
   171
  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
neuper@42376
   172
  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
neuper@42376
   173
  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
neuper@42376
   174
  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
neuper@42376
   175
  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
neuper@42376
   176
  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
neuper@42376
   177
  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
neuper@42376
   178
  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
neuper@42376
   179
  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
neuper@42376
   180
  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
neuper@42376
   181
  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
neuper@42376
   182
  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
neuper@42376
   183
  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
neuper@42376
   184
  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
neuper@42376
   185
  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
neuper@42376
   186
  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
neuper@42376
   187
  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
neuper@42376
   188
  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
neuper@42376
   189
  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
neuper@42376
   190
  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
neuper@42376
   191
  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
neuper@42376
   192
  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
neuper@42376
   193
  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
neuper@42376
   194
  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
neuper@42376
   195
  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
neuper@42376
   196
  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
neuper@42376
   197
  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
neuper@42376
   198
  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
neuper@42376
   199
  val (p,_,f,nxt,_,pt) = me nxt p [] pt; 
neuper@42376
   200
  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
neuper@42376
   201
  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
neuper@42376
   202
  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
neuper@42376
   203
  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
neuper@42376
   204
  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
neuper@42376
   205
  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
neuper@42376
   206
  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
neuper@42376
   207
  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
neuper@42376
   208
  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
neuper@42376
   209
  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
neuper@42376
   210
  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
neuper@42376
   211
  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
neuper@42376
   212
  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
neuper@42376
   213
  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
neuper@42376
   214
  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
neuper@42376
   215
  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
neuper@42376
   216
  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
neuper@42376
   217
  val (p,_,f,nxt,_,pt) = me nxt p [] pt;
neuper@42376
   218
  val (p,_,f,nxt,_,pt) = me nxt p [] pt; 
neuper@42376
   219
neuper@42376
   220
show_pt pt;
neuper@42376
   221
if f2str f = "4 / (z - 1 / 2) + -4 / (z - -1 / 4)" then() 
neuper@42376
   222
else error "= me .. met_partial_fraction broken";
neuper@42376
   223
neuper@42386
   224
"----------- progr.vers.2: check erls for multiply_ansatz";
neuper@42386
   225
"----------- progr.vers.2: check erls for multiply_ansatz";
neuper@42386
   226
"----------- progr.vers.2: check erls for multiply_ansatz";
neuper@42386
   227
(*test for outcommented 3 lines in script: is norm_Rational strong enough?*)
neuper@42386
   228
val t = str2term "(3 / ((-1 + -2 * z + 8 * z ^^^ 2) *3/24)) = (3 / ((z - 1 / 2) * (z - -1 / 4)))";
neuper@42386
   229
val SOME (t', _) = rewrite_set_ @{theory Isac} true ansatz_rls t;
neuper@42386
   230
term2str t' = "3 / ((-1 + -2 * z + 8 * z ^^^ 2) * 3 / 24) =\n?A / (z - 1 / 2) + ?B / (z - -1 / 4)";
neuper@42386
   231
neuper@42386
   232
val SOME (t'', _) = rewrite_set_ @{theory Isac} true multiply_ansatz t'; (*true*)
neuper@42386
   233
term2str t'' = "(z - 1 / 2) * (z - -1 / 4) * 3 / ((-1 + -2 * z + 8 * z ^^^ 2) * 3 / 24) =\n" ^
neuper@42386
   234
  "?A * (z - -1 / 4) + ?B * (z - 1 / 2)"; (*true*)
neuper@42386
   235
neuper@42386
   236
val SOME (t''', _) = rewrite_set_ @{theory Isac} true norm_Rational t'';
neuper@42386
   237
if term2str t''' = "3 = ?A * (1 + 4 * z) / 4 + ?B * (-1 + 2 * z) / 2" then ()
neuper@42386
   238
else error "ansatz_rls - multiply_ansatz - norm_Rational broken";
neuper@42386
   239
neuper@42386
   240
(*test for outcommented 3 lines in script: empower erls for x = a*b ==> ...*)
neuper@42386
   241
val xxx = append_rls "multiply_ansatz_erls" norm_Rational 
neuper@42386
   242
  [Calc ("HOL.eq",eval_equal "#equal_")];
neuper@42386
   243
neuper@42386
   244
val multiply_ansatz = prep_rls(
neuper@42386
   245
  Rls {id = "multiply_ansatz", preconds = [], rew_ord = ("dummy_ord",dummy_ord), 
neuper@42386
   246
	  erls = xxx,
neuper@42386
   247
	  srls = Erls, calc = [],
neuper@42386
   248
	  rules = 
neuper@42386
   249
	   [Thm ("multiply_2nd_order",num_str @{thm multiply_2nd_order})
neuper@42386
   250
	   ], 
neuper@42386
   251
	 scr = EmptyScr}:rls);
neuper@42386
   252
neuper@42386
   253
rewrite_set_ thy true xxx @{term "a+b = a+(b::real)"}; (*SOME ok*)
neuper@42386
   254
rewrite_set_ thy true multiply_ansatz @{term "a+b = a+(b::real)"}; (*why NONE?: GOON*)
neuper@42386
   255
neuper@42386
   256
"----------- progr.vers.2: improve program --------------";
neuper@42386
   257
"----------- progr.vers.2: improve program --------------";
neuper@42386
   258
"----------- progr.vers.2: improve program --------------";
neuper@42386
   259
(*WN120318 stopped due to much effort with the test above*)
neuper@42386
   260
     "Script PartFracScript (f_f::real) (zzz::real) =                    " ^(*f_f: 3 / (z * (z - 1 / 4 + -1 / 8 * (1 / z)), zzz: z*)
neuper@42386
   261
     " (let f_f = Take f_f;                                       " ^
neuper@42386
   262
     "   (num_orig::real) = get_numerator f_f;                    " ^(*num_orig: 3*)
neuper@42386
   263
     "   f_f = (Rewrite_Set norm_Rational False) f_f;             " ^(*f_f: 24 / (-1 + -2 * z + 8 * z ^^^ 2)*)
neuper@42386
   264
     "   (numer::real) = get_numerator f_f;                       " ^(*numer: 24*)
neuper@42386
   265
     "   (denom::real) = get_denominator f_f;                     " ^(*denom: -1 + -2 * z + 8 * z ^^^ 2*)
neuper@42386
   266
     "   (equ::bool) = (denom = (0::real));                       " ^(*equ: -1 + -2 * z + 8 * z ^^^ 2 = 0*)
neuper@42386
   267
     "   (L_L::bool list) = (SubProblem (PolyEq',                 " ^
neuper@42386
   268
     "     [abcFormula, degree_2, polynomial, univariate, equation], " ^
neuper@42386
   269
     "     [no_met]) [BOOL equ, REAL zzz]);                       " ^(*L_L: [z = 1 / 2, z = -1 / 4]*)
neuper@42386
   270
     "   (facs::real) = factors_from_solution L_L;                " ^(*facs: (z - 1 / 2) * (z - -1 / 4)*)
neuper@42386
   271
     "   (eql::real) = Take (num_orig / facs);                    " ^(*eql: 3 / ((z - 1 / 2) * (z - -1 / 4)) *) 
neuper@42386
   272
     "   (eqr::real) = (Try (Rewrite_Set ansatz_rls False)) eql;  " ^(*eqr: ?A / (z - 1 / 2) + ?B / (z - -1 / 4)*)
neuper@42386
   273
     "   (eq::bool) = Take (eql = eqr);                           " ^(*eq:  3 / ((z - 1 / 2) * (z - -1 / 4)) = ?A / (z - 1 / 2) + ?B / (z - -1 / 4)*)
neuper@42386
   274
(*this has been tested below by rewrite_set_
neuper@42386
   275
     "   (eeeee::bool) = Take ((num_orig / denom * denom / numer) = (num_orig / facs));" ^(**)
neuper@42386
   276
     "   (eeeee::bool) = (Rewrite_Set ansatz_rls False) eeeee;" ^(**)
neuper@42386
   277
     "   eq = (Try (Rewrite_Set multiply_ansatz False)) eeeee;         " ^(*eq: 3 = ?A * (z - -1 / 4) + ?B * (z - 1 / 2)*) 
neuper@42386
   278
NEXT try to outcomment the very next line..*)
neuper@42386
   279
     "   eq = (Try (Rewrite_Set equival_trans False)) eeeee;         " ^(*eq: 3 = ?A * (z - -1 / 4) + ?B * (z - 1 / 2)*) 
neuper@42386
   280
     "   eq = drop_questionmarks eq;                              " ^(*eq: 3 = A * (z - -1 / 4) + B * (z - 1 / 2)*)
neuper@42386
   281
     "   (z1::real) = (rhs (NTH 1 L_L));                          " ^(*z1: 1 / 2*)
neuper@42386
   282
     "   (z2::real) = (rhs (NTH 2 L_L));                          " ^(*z2: -1 / 4*)
neuper@42386
   283
     "   (eq_a::bool) = Take eq;                                  " ^(*eq_a: 3 = A * (z - -1 / 4) + B * (z - 1 / 2)*)
neuper@42386
   284
     "   eq_a = (Substitute [zzz = z1]) eq;                       " ^(*eq_a: 3 = A * (1 / 2 - -1 / 4) + B * (1 / 2 - 1 / 2)*)
neuper@42386
   285
     "   eq_a = (Rewrite_Set norm_Rational False) eq_a;           " ^(*eq_a: 3 = 3 * A / 4*)
neuper@42386
   286
     "   (sol_a::bool list) =                                     " ^
neuper@42386
   287
     "     (SubProblem (Isac', [univariate,equation], [no_met])   " ^
neuper@42386
   288
     "     [BOOL eq_a, REAL (A::real)]);                          " ^(*sol_a: [A = 4]*)
neuper@42386
   289
     "   (a::real) = (rhs (NTH 1 sol_a));                         " ^(*a: 4*)
neuper@42386
   290
     "   (eq_b::bool) = Take eq;                                  " ^(*eq_b: 3 = A * (z - -1 / 4) + B * (z - 1 / 2)*)
neuper@42386
   291
     "   eq_b = (Substitute [zzz = z2]) eq_b;                     " ^(*eq_b: *)
neuper@42386
   292
     "   eq_b = (Rewrite_Set norm_Rational False) eq_b;           " ^(*eq_b: *)
neuper@42386
   293
     "   (sol_b::bool list) =                                     " ^
neuper@42386
   294
     "     (SubProblem (Isac', [univariate,equation], [no_met])   " ^
neuper@42386
   295
     "     [BOOL eq_b, REAL (B::real)]);                          " ^(*sol_b: [B = -4]*)
neuper@42386
   296
     "   (b::real) = (rhs (NTH 1 sol_b));                         " ^(*b: -4*)
neuper@42386
   297
     "   eqr = drop_questionmarks eqr;                            " ^(*eqr: A / (z - 1 / 2) + B / (z - -1 / 4)*)
neuper@42386
   298
     "   (pbz::real) = Take eqr;                                  " ^(*pbz: A / (z - 1 / 2) + B / (z - -1 / 4)*)
neuper@42386
   299
     "   pbz = ((Substitute [A = a, B = b]) pbz)                  " ^(*pbz: 4 / (z - 1 / 2) + -4 / (z - -1 / 4)*)
neuper@42386
   300
     " in pbz)"
neuper@42386
   301