test/Tools/isac/Knowledge/polyminus.sml
author Walther Neuper <wneuper@ist.tugraz.at>
Wed, 05 Oct 2016 13:09:54 +0200
changeset 59248 5eba5e6d5266
parent 59188 c477d0f79ab9
child 59348 ddfabb53082c
permissions -rw-r--r--
cleaned tests from autoCalculate' (removed ')

Notes
(1) autoCalculate' made Test_Some.thy complicated (had to be redefined)
(2) "fun autoCalculate'" was scattered over several tests -- probably due to (1)
(3) autoCalculate' has been put out of service in 5127be395ea1
(4) M.Lehnfeld finished his work with 8e3f73e1e3a3:
fun autoCalculate (cI:calcID) auto = Future.fork ... in isac/../interface.sml
neuper@37906
     1
(* tests on PolyMinus
neuper@37906
     2
   author: Walther Neuper
neuper@37906
     3
   WN071207,
neuper@37906
     4
   (c) due to copyright terms
neuper@37906
     5
*)
neuper@38037
     6
"--------------------------------------------------------";
neuper@38037
     7
"--------------------------------------------------------";
neuper@38037
     8
"table of contents --------------------------------------";
neuper@38037
     9
"--------------------------------------------------------";
neuper@38037
    10
"----------- fun eval_ist_monom -------------------------";
neuper@38037
    11
"----------- watch order_add_mult  ----------------------";
neuper@38037
    12
"----------- build predicate for +- ordering ------------";
neuper@38037
    13
"----------- build fasse_zusammen -----------------------";
neuper@38037
    14
"----------- build verschoenere -------------------------";
neuper@38037
    15
"----------- met simplification for_polynomials with_minu";
neuper@38080
    16
"----------- me simplification.for_polynomials.with_minus";
neuper@38037
    17
"----------- pbl polynom vereinfachen p.33 --------------";
neuper@38037
    18
"----------- met probe fuer_polynom ---------------------";
neuper@38037
    19
"----------- pbl polynom probe --------------------------";
neuper@38037
    20
"----------- pbl klammer polynom vereinfachen p.34 ------";
neuper@38037
    21
"----------- try fun applyTactics -----------------------";
neuper@38037
    22
"----------- pbl binom polynom vereinfachen p.39 --------";
neuper@38037
    23
"----------- pbl binom polynom vereinfachen: cube -------";
neuper@38037
    24
"----------- refine Vereinfache -------------------------";
neuper@38037
    25
"----------- *** prep_pbt: syntax error in '#Where' of [v";
neuper@38037
    26
"--------------------------------------------------------";
neuper@38037
    27
"--------------------------------------------------------";
neuper@38037
    28
"--------------------------------------------------------";
neuper@38037
    29
neuper@41929
    30
val thy = @{theory "PolyMinus"};
neuper@37906
    31
neuper@37906
    32
"----------- fun eval_ist_monom ----------------------------------";
neuper@37906
    33
"----------- fun eval_ist_monom ----------------------------------";
neuper@37906
    34
"----------- fun eval_ist_monom ----------------------------------";
neuper@37906
    35
ist_monom (str2term "12");
neuper@37906
    36
case eval_ist_monom 0 0 (str2term "12 ist_monom") 0 of
neuper@37926
    37
    SOME ("12 ist_monom = True", _) => ()
neuper@38031
    38
  | _ => error "polyminus.sml: 12 ist_monom = True";
neuper@37906
    39
neuper@37906
    40
case eval_ist_monom 0 0 (str2term "a ist_monom") 0 of
neuper@37926
    41
    SOME ("a ist_monom = True", _) => ()
neuper@38031
    42
  | _ => error "polyminus.sml: a ist_monom = True";
neuper@37906
    43
neuper@37906
    44
case eval_ist_monom 0 0 (str2term "(3*a) ist_monom") 0 of
neuper@37926
    45
    SOME ("3 * a ist_monom = True", _) => ()
neuper@38031
    46
  | _ => error "polyminus.sml: 3 * a ist_monom = True";
neuper@37906
    47
neuper@37906
    48
case eval_ist_monom 0 0 (str2term "(a^^^2) ist_monom") 0 of 
neuper@37926
    49
   SOME ("a ^^^ 2 ist_monom = True", _) => ()
neuper@38031
    50
  | _ => error "polyminus.sml: a^^^2 ist_monom = True";
neuper@37906
    51
neuper@37906
    52
case eval_ist_monom 0 0 (str2term "(3*a^^^2) ist_monom") 0 of
neuper@37926
    53
    SOME ("3 * a ^^^ 2 ist_monom = True", _) => ()
neuper@38031
    54
  | _ => error "polyminus.sml: 3*a^^^2 ist_monom = True";
neuper@37906
    55
neuper@37906
    56
case eval_ist_monom 0 0 (str2term "(a*b) ist_monom") 0 of
neuper@37926
    57
    SOME ("a * b ist_monom = True", _) => ()
neuper@38031
    58
  | _ => error "polyminus.sml: a*b ist_monom = True";
neuper@37906
    59
neuper@37906
    60
case eval_ist_monom 0 0 (str2term "(3*a*b) ist_monom") 0 of
neuper@37926
    61
    SOME ("3 * a * b ist_monom = True", _) => ()
neuper@38031
    62
  | _ => error "polyminus.sml: 3*a*b ist_monom = True";
neuper@37906
    63
neuper@37906
    64
neuper@37906
    65
"----------- watch order_add_mult  -------------------------------";
neuper@37906
    66
"----------- watch order_add_mult  -------------------------------";
neuper@37906
    67
"----------- watch order_add_mult  -------------------------------";
neuper@37906
    68
"----- with these simple variables it works...";
neuper@52070
    69
(*trace_rewrite := true; ..stopped Test_Isac.thy*)
neuper@37906
    70
trace_rewrite:=false;
neuper@37906
    71
val t = str2term "((a + d) + c) + b";
neuper@37926
    72
val SOME (t,_) = rewrite_set_ thy false order_add_mult t; term2str t;
neuper@37906
    73
if term2str t = "a + (b + (c + d))" then ()
neuper@38031
    74
else error "polyminus.sml 1 watch order_add_mult";
neuper@37906
    75
trace_rewrite:=false;
neuper@37906
    76
neuper@37906
    77
"----- the same stepwise...";
neuper@41929
    78
val od = ord_make_polynomial true (@{theory "Poly"});
neuper@37906
    79
val t = str2term "((a + d) + c) + b";
neuper@37906
    80
"((a + d) + c) + b"; 
wneuper@59118
    81
val SOME (t,_) = rewrite_ thy od e_rls true @{thm add.commute} t; term2str t;
neuper@37906
    82
"b + ((a + d) + c)";
wneuper@59118
    83
val SOME (t,_) = rewrite_ thy od e_rls true @{thm add.commute} t; term2str t;
neuper@37906
    84
"b + (c + (a + d))";
wneuper@59118
    85
val SOME (t,_) = rewrite_ thy od e_rls true @{thm add.left_commute} t;term2str t;
neuper@37906
    86
"b + (a + (c + d))";
wneuper@59118
    87
val SOME (t,_) = rewrite_ thy od e_rls true @{thm add.left_commute} t;term2str t;
neuper@37906
    88
"a + (b + (c + d))";
neuper@37906
    89
if term2str t = "a + (b + (c + d))" then ()
neuper@38031
    90
else error "polyminus.sml 2 watch order_add_mult";
neuper@37906
    91
neuper@37906
    92
"----- if parentheses are right, left_commute is (almost) sufficient...";
neuper@37906
    93
val t = str2term "a + (d + (c + b))";
neuper@37906
    94
"a + (d + (c + b))";
wneuper@59118
    95
val SOME (t,_) = rewrite_ thy od e_rls true @{thm add.left_commute} t;term2str t;
neuper@37906
    96
"a + (c + (d + b))";
wneuper@59118
    97
val SOME (t,_) = rewrite_ thy od e_rls true @{thm add.commute} t;term2str t;
neuper@37906
    98
"a + (c + (b + d))";
wneuper@59118
    99
val SOME (t,_) = rewrite_ thy od e_rls true @{thm add.left_commute} t;term2str t;
neuper@37906
   100
"a + (b + (c + d))";
neuper@37906
   101
neuper@37906
   102
"----- but we do not want the parentheses at right; thus: cond.rew.";
neuper@37906
   103
"WN0712707 complicated monomials do not yet work ...";
neuper@37906
   104
val t = str2term "((5*a + 4*d) + 3*c) + 2*b";
neuper@37926
   105
val SOME (t,_) = rewrite_set_ thy false order_add_mult t; term2str t;
neuper@37906
   106
if term2str t = "2 * b + (3 * c + (4 * d + 5 * a))" then ()
neuper@38031
   107
else error "polyminus.sml: order_add_mult changed";
neuper@37906
   108
neuper@37906
   109
"----- here we see rew_sub going into subterm with ord.rew....";
neuper@41929
   110
val od = ord_make_polynomial false (@{theory "Poly"});
neuper@37906
   111
val t = str2term "b + a + c + d";
wneuper@59118
   112
val SOME (t,_) = rewrite_ thy od e_rls false @{thm add.commute} t; term2str t;
wneuper@59118
   113
val SOME (t,_) = rewrite_ thy od e_rls false @{thm add.commute} t; term2str t;
neuper@37906
   114
(*@@@ rew_sub gosub: t = d + (b + a + c)
neuper@37906
   115
  @@@ rew_sub begin: t = b + a + c*)
neuper@37906
   116
neuper@37906
   117
neuper@37906
   118
"----------- build predicate for +- ordering ---------------------";
neuper@37906
   119
"----------- build predicate for +- ordering ---------------------";
neuper@37906
   120
"----------- build predicate for +- ordering ---------------------";
neuper@37906
   121
"a" < "b";
neuper@37906
   122
"ba" < "ab";
neuper@37906
   123
"123" < "a"; (*unused due to ---vvv*)
neuper@37906
   124
"12" < "3"; (*true !!!*)
neuper@37906
   125
neuper@37906
   126
" a kleiner b ==> (b + a) = (a + b)";
neuper@37906
   127
str2term "aaa";
neuper@37906
   128
str2term "222 * aaa";
neuper@42390
   129
neuper@37906
   130
case eval_kleiner 0 0 (str2term "123 kleiner 32") 0 of
neuper@42390
   131
    SOME ("123 kleiner 32 = False", _) => ()
neuper@38031
   132
  | _ => error "polyminus.sml: 12 kleiner 9 = False";
neuper@42390
   133
neuper@37906
   134
case eval_kleiner 0 0 (str2term "a kleiner b") 0 of
neuper@37926
   135
    SOME ("a kleiner b = True", _) => ()
neuper@38031
   136
  | _ => error "polyminus.sml: a kleiner b = True";
neuper@37906
   137
neuper@37906
   138
case eval_kleiner 0 0 (str2term "(10*g) kleiner f") 0 of
neuper@37926
   139
    SOME ("10 * g kleiner f = False", _) => ()
neuper@38031
   140
  | _ => error "polyminus.sml: 10 * g kleiner f = False";
neuper@37906
   141
neuper@37906
   142
case eval_kleiner 0 0 (str2term "(a^^^2) kleiner b") 0 of
neuper@37926
   143
    SOME ("a ^^^ 2 kleiner b = True", _) => ()
neuper@38031
   144
  | _ => error "polyminus.sml: a ^^^ 2 kleiner b = True";
neuper@37906
   145
neuper@37906
   146
case eval_kleiner 0 0 (str2term "(3*a^^^2) kleiner b") 0 of
neuper@37926
   147
    SOME ("3 * a ^^^ 2 kleiner b = True", _) => ()
neuper@38031
   148
  | _ => error "polyminus.sml: 3 * a ^^^ 2 kleiner b = True";
neuper@37906
   149
neuper@37906
   150
case eval_kleiner 0 0 (str2term "(a*b) kleiner c") 0 of
neuper@37926
   151
    SOME ("a * b kleiner c = True", _) => ()
neuper@38031
   152
  | _ => error "polyminus.sml: a * b kleiner b = True";
neuper@37906
   153
neuper@37906
   154
case eval_kleiner 0 0 (str2term "(3*a*b) kleiner c") 0 of
neuper@37926
   155
    SOME ("3 * a * b kleiner c = True", _) => ()
neuper@38031
   156
  | _ => error "polyminus.sml: 3 * a * b kleiner b = True";
neuper@37906
   157
neuper@42390
   158
"======= compare tausche_plus with real_num_collect";
neuper@37906
   159
val od = dummy_ord;
neuper@37906
   160
neuper@37906
   161
val erls = erls_ordne_alphabetisch;
neuper@37906
   162
val t = str2term "b + a";
neuper@38080
   163
val SOME (t,_) = rewrite_ thy od erls false @{thm tausche_plus} t; term2str t;
neuper@37906
   164
if term2str t = "a + b" then ()
neuper@38031
   165
else error "polyminus.sml: ordne_alphabetisch1 b + a";
neuper@37906
   166
neuper@37906
   167
val erls = Atools_erls;
neuper@37906
   168
val t = str2term "2*a + 3*a";
neuper@38080
   169
val SOME (t,_) = rewrite_ thy od erls false @{thm real_num_collect} t; term2str t;
neuper@37906
   170
neuper@42390
   171
"======= test rewrite_, rewrite_set_";
neuper@52070
   172
(*trace_rewrite := true; ..stopped Test_Isac.thy*)
neuper@37906
   173
val erls = erls_ordne_alphabetisch;
neuper@37906
   174
val t = str2term "b + a";
neuper@37926
   175
val SOME (t,_) = rewrite_set_ thy false ordne_alphabetisch t; term2str t;
neuper@37906
   176
if term2str t = "a + b" then ()
neuper@38031
   177
else error "polyminus.sml: ordne_alphabetisch a + b";
neuper@37906
   178
neuper@37906
   179
val t = str2term "2*b + a";
neuper@37926
   180
val SOME (t,_) = rewrite_set_ thy false ordne_alphabetisch t; term2str t;
neuper@37906
   181
if term2str t = "a + 2 * b" then ()
neuper@38031
   182
else error "polyminus.sml: ordne_alphabetisch a + 2 * b";
neuper@37906
   183
neuper@37906
   184
val t = str2term "a + c + b";
neuper@37926
   185
val SOME (t,_) = rewrite_set_ thy false ordne_alphabetisch t; term2str t;
neuper@37906
   186
if term2str t = "a + b + c" then ()
neuper@38031
   187
else error "polyminus.sml: ordne_alphabetisch a + b + c";
neuper@37906
   188
neuper@42390
   189
"======= rewrite goes into subterms";
neuper@37906
   190
val t = str2term "a + c + b + d";
neuper@38080
   191
val SOME (t,_) = rewrite_ thy od erls false @{thm tausche_plus_plus} t; term2str t;
neuper@37906
   192
if term2str t = "a + b + c + d" then ()
neuper@38031
   193
else error "polyminus.sml: ordne_alphabetisch1 a + b + c + d";
neuper@37906
   194
neuper@37906
   195
val t = str2term "a + c + d + b";
neuper@37926
   196
val SOME (t,_) = rewrite_set_ thy false ordne_alphabetisch t; term2str t;
neuper@37906
   197
if term2str t = "a + b + c + d" then ()
neuper@38031
   198
else error "polyminus.sml: ordne_alphabetisch2 a + b + c + d";
neuper@37906
   199
neuper@42390
   200
"======= here we see rew_sub going into subterm with cond.rew....";
neuper@37906
   201
val t = str2term "b + a + c + d";
neuper@38080
   202
val SOME (t,_) = rewrite_ thy od erls false @{thm tausche_plus} t; term2str t;
neuper@37906
   203
if term2str t = "a + b + c + d" then ()
neuper@38031
   204
else error "polyminus.sml: ordne_alphabetisch3 a + b + c + d";
neuper@37906
   205
neuper@42390
   206
"======= compile rls for the most complicated terms";
neuper@37906
   207
val t = str2term "5*e + 6*f - 8*g - 9 - 7*e - 4*f + 10*g + 12";
neuper@37906
   208
"5 * e + 6 * f - 8 * g - 9 - 7 * e - 4 * f + 10 * g + 12";
neuper@37926
   209
val SOME (t,_) = rewrite_set_ thy false ordne_alphabetisch t; 
neuper@37906
   210
if term2str t = "- 9 + 12 + 5 * e - 7 * e + 6 * f - 4 * f - 8 * g + 10 * g"
neuper@38031
   211
then () else error "polyminus.sml: ordne_alphabetisch finished";
neuper@37906
   212
neuper@37906
   213
neuper@37906
   214
"----------- build fasse_zusammen --------------------------------";
neuper@37906
   215
"----------- build fasse_zusammen --------------------------------";
neuper@37906
   216
"----------- build fasse_zusammen --------------------------------";
neuper@37906
   217
val t = str2term "- 9 + 12 + 5 * e - 7 * e + 6 * f - 4 * f - 8 * g + 10 * g";
neuper@37926
   218
val SOME (t,_) = rewrite_set_ thy false fasse_zusammen t;
neuper@37906
   219
if term2str t = "3 + -2 * e + 2 * f + 2 * g" then ()
neuper@38031
   220
else error "polyminus.sml: fasse_zusammen finished";
neuper@37906
   221
neuper@37906
   222
"----------- build verschoenere ----------------------------------";
neuper@37906
   223
"----------- build verschoenere ----------------------------------";
neuper@37906
   224
"----------- build verschoenere ----------------------------------";
neuper@37906
   225
val t = str2term "3 + -2 * e + 2 * f + 2 * g";
neuper@37926
   226
val SOME (t,_) = rewrite_set_ thy false verschoenere t;
neuper@37906
   227
if term2str t = "3 - 2 * e + 2 * f + 2 * g" then ()
neuper@38031
   228
else error "polyminus.sml: verschoenere 3 + -2 * e ...";
neuper@37906
   229
neuper@52070
   230
(*trace_rewrite := true; ..stopped Test_Isac.thy*)
neuper@37906
   231
trace_rewrite:=false;
neuper@37906
   232
neuper@37906
   233
"----------- met simplification for_polynomials with_minus -------";
neuper@37906
   234
"----------- met simplification for_polynomials with_minus -------";
neuper@37906
   235
"----------- met simplification for_polynomials with_minus -------";
neuper@37906
   236
val str = 
neuper@38080
   237
"Script SimplifyScript (t_t::real) =                \
neuper@37906
   238
\  (((Try (Rewrite_Set ordne_alphabetisch False)) @@     \
neuper@37906
   239
\    (Try (Rewrite_Set fasse_zusammen False)) @@     \
neuper@38080
   240
\    (Try (Rewrite_Set verschoenere False))) t_t)"
wneuper@59188
   241
val sc = ((inst_abs thy) o Thm.term_of o the o (parse thy)) str;
neuper@37906
   242
atomty sc;
neuper@37906
   243
neuper@38080
   244
"----------- me simplification.for_polynomials.with_minus";
neuper@38080
   245
"----------- me simplification.for_polynomials.with_minus";
neuper@38080
   246
"----------- me simplification.for_polynomials.with_minus";
neuper@38080
   247
val c = [];
neuper@38080
   248
val (p,_,f,nxt,_,pt) = 
neuper@38080
   249
      CalcTreeTEST 
neuper@38083
   250
        [(["Term (5*e + 6*f - 8*g - 9 - 7*e - 4*f + 10*g + 12)",
neuper@38080
   251
           "normalform N"],
neuper@38080
   252
	          ("PolyMinus",["plus_minus","polynom","vereinfachen"],
neuper@38080
   253
	           ["simplification","for_polynomials","with_minus"]))];
neuper@38080
   254
val (p,_,f,nxt,_,pt) = me nxt p c pt;
neuper@38085
   255
val (p,_,f,nxt,_,pt) = me nxt p c pt;
neuper@38085
   256
val (p,_,f,nxt,_,pt) = me nxt p c pt;
neuper@38085
   257
val (p,_,f,nxt,_,pt) = me nxt p c pt;
neuper@38085
   258
val (p,_,f,nxt,_,pt) = me nxt p c pt;
neuper@38085
   259
val (p,_,f,nxt,_,pt) = me nxt p c pt;
neuper@37906
   260
neuper@38085
   261
val (p,_,f,nxt,_,pt) = me nxt p c pt;
neuper@38085
   262
val (p,_,f,nxt,_,pt) = me nxt p c pt;
neuper@38085
   263
val (p,_,f,nxt,_,pt) = me nxt p c pt;
neuper@38085
   264
val (p,_,f,nxt,_,pt) = me nxt p c pt;
neuper@38085
   265
val (p,_,f,nxt,_,pt) = me nxt p c pt;
neuper@38085
   266
if f2str f = "3 - 2 * e + 2 * f + 2 * g" andalso #1 nxt = "End_Proof'" then ()
neuper@38085
   267
else error "polyminus.sml: me simplification.for_polynomials.with_minus";
neuper@38085
   268
neuper@37906
   269
"----------- pbl polynom vereinfachen p.33 -----------------------";
neuper@37906
   270
"----------- pbl polynom vereinfachen p.33 -----------------------";
neuper@37906
   271
"----------- pbl polynom vereinfachen p.33 -----------------------";
neuper@37906
   272
"----------- 140 c ---";
s1210629013@55445
   273
reset_states ();
neuper@38083
   274
CalcTree [(["Term (5*e + 6*f - 8*g - 9 - 7*e - 4*f + 10*g + 12)",
neuper@37906
   275
	    "normalform N"],
neuper@37991
   276
	   ("PolyMinus",["plus_minus","polynom","vereinfachen"],
neuper@37906
   277
	    ["simplification","for_polynomials","with_minus"]))];
neuper@37906
   278
moveActiveRoot 1;
wneuper@59248
   279
autoCalculate 1 CompleteCalc;
neuper@37906
   280
val ((pt,p),_) = get_calc 1; show_pt pt;
neuper@37906
   281
if p = ([], Res) andalso 
neuper@37906
   282
   term2str (get_obj g_res pt (fst p)) = "3 - 2 * e + 2 * f + 2 * g"
neuper@38031
   283
then () else error "polyminus.sml: Vereinfache (3 - 2 * e + 2 * f...";
neuper@37906
   284
neuper@42390
   285
"======= 140 d ---";
s1210629013@55445
   286
reset_states ();
neuper@38083
   287
CalcTree [(["Term (-r - 2*s - 3*t + 5 + 4*r + 8*s - 5*t - 2)",
neuper@37906
   288
	    "normalform N"],
neuper@37991
   289
	   ("PolyMinus",["plus_minus","polynom","vereinfachen"],
neuper@37906
   290
	    ["simplification","for_polynomials","with_minus"]))];
neuper@37906
   291
moveActiveRoot 1;
wneuper@59248
   292
autoCalculate 1 CompleteCalc;
neuper@37906
   293
val ((pt,p),_) = get_calc 1; show_pt pt;
neuper@37906
   294
if p = ([], Res) andalso 
neuper@37906
   295
   term2str (get_obj g_res pt (fst p)) = "3 + 3 * r + 6 * s - 8 * t"
neuper@38031
   296
then () else error "polyminus.sml: Vereinfache 140 d)";
neuper@37906
   297
neuper@42390
   298
"======= 139 c ---";
s1210629013@55445
   299
reset_states ();
neuper@38083
   300
CalcTree [(["Term (3*e - 6*f - 8*e - 4*f + 5*e + 7*f)",
neuper@37906
   301
	    "normalform N"],
neuper@37991
   302
	   ("PolyMinus",["plus_minus","polynom","vereinfachen"],
neuper@37906
   303
	    ["simplification","for_polynomials","with_minus"]))];
neuper@37906
   304
moveActiveRoot 1;
wneuper@59248
   305
autoCalculate 1 CompleteCalc;
neuper@37906
   306
val ((pt,p),_) = get_calc 1; show_pt pt;
neuper@37906
   307
if p = ([], Res) andalso 
neuper@37906
   308
   term2str (get_obj g_res pt (fst p)) = "- (3 * f)"
neuper@38031
   309
then () else error "polyminus.sml: Vereinfache 139 c)";
neuper@37906
   310
neuper@42390
   311
"======= 139 b ---";
s1210629013@55445
   312
reset_states ();
neuper@38083
   313
CalcTree [(["Term (8*u - 5*v - 5*u + 7*v - 6*u - 3*v)",
neuper@37906
   314
	    "normalform N"],
neuper@37991
   315
	   ("PolyMinus",["plus_minus","polynom","vereinfachen"],
neuper@37906
   316
	    ["simplification","for_polynomials","with_minus"]))];
neuper@37906
   317
moveActiveRoot 1;
wneuper@59248
   318
autoCalculate 1 CompleteCalc;
neuper@37906
   319
val ((pt,p),_) = get_calc 1; show_pt pt;
neuper@37906
   320
if p = ([], Res) andalso 
neuper@37906
   321
   term2str (get_obj g_res pt (fst p)) = "-3 * u - v"
neuper@38031
   322
then () else error "polyminus.sml: Vereinfache 139 b)";
neuper@37906
   323
neuper@42390
   324
"======= 138 a ---";
s1210629013@55445
   325
reset_states ();
neuper@38083
   326
CalcTree [(["Term (2*u - 3*v - 6*u + 5*v)",
neuper@37906
   327
	    "normalform N"],
neuper@37991
   328
	   ("PolyMinus",["plus_minus","polynom","vereinfachen"],
neuper@37906
   329
	    ["simplification","for_polynomials","with_minus"]))];
neuper@37906
   330
moveActiveRoot 1;
wneuper@59248
   331
autoCalculate 1 CompleteCalc;
neuper@37906
   332
val ((pt,p),_) = get_calc 1; show_pt pt;
neuper@37906
   333
if p = ([], Res) andalso 
neuper@37906
   334
   term2str (get_obj g_res pt (fst p)) = "-4 * u + 2 * v"
neuper@38031
   335
then () else error "polyminus.sml: Vereinfache 138 a)";
neuper@37906
   336
neuper@37906
   337
"----------- met probe fuer_polynom ------------------------------";
neuper@37906
   338
"----------- met probe fuer_polynom ------------------------------";
neuper@37906
   339
"----------- met probe fuer_polynom ------------------------------";
neuper@37906
   340
val str = 
neuper@38085
   341
"Script ProbeScript (e_e::bool) (w_s::bool list) =\
neuper@37991
   342
\ (let e_e = Take e_e;                             \
neuper@38085
   343
\      e_e = Substitute w_s e_e                    \
neuper@37975
   344
\ in (Repeat((Try (Repeat (Calculate TIMES))) @@  \
neuper@37975
   345
\            (Try (Repeat (Calculate PLUS ))) @@  \
neuper@37981
   346
\            (Try (Repeat (Calculate MINUS))))) e_e)"
wneuper@59188
   347
val sc = ((inst_abs thy) o Thm.term_of o the o (parse thy)) str;
neuper@37906
   348
atomty sc;
neuper@37906
   349
neuper@37906
   350
"----------- pbl polynom probe -----------------------------------";
neuper@37906
   351
"----------- pbl polynom probe -----------------------------------";
neuper@37906
   352
"----------- pbl polynom probe -----------------------------------";
s1210629013@55445
   353
reset_states ();
bonzai@41949
   354
CalcTree [(["Pruefe ((5::int)*e + 6*f - 8*g - 9 - 7*e - 4*f + 10*g + 12 =\
neuper@37906
   355
	    \3 - 2 * e + 2 * f + 2 * g)",
neuper@37906
   356
	    "mitWert [e = 1, f = 2, g = 3]",
neuper@37906
   357
	    "Geprueft b"],
neuper@37991
   358
	   ("PolyMinus",["polynom","probe"],
neuper@37906
   359
	    ["probe","fuer_polynom"]))];
neuper@37906
   360
moveActiveRoot 1;
wneuper@59248
   361
autoCalculate 1 CompleteCalc;
wneuper@59248
   362
(* autoCalculate 1 CompleteCalcHead;
wneuper@59248
   363
   autoCalculate 1 (Step 1);
wneuper@59248
   364
   autoCalculate 1 (Step 1);
neuper@37906
   365
   val ((pt,p),_) = get_calc 1; term2str (get_obj g_res pt (fst p));
neuper@37906
   366
@@@@@WN081114 gives "??.empty", all "Pruefe" are the same,
neuper@37906
   367
although analogies work in interface.sml: FIXME.WN081114 in "Pruefe"*)
neuper@37906
   368
val ((pt,p),_) = get_calc 1;
neuper@37906
   369
if p = ([], Res) andalso term2str (get_obj g_res pt (fst p)) = "11 = 11"
neuper@38031
   370
then () else error "polyminus.sml: Probe 11 = 11";
neuper@37906
   371
show_pt pt;
t@42115
   372
neuper@37906
   373
"----------- pbl klammer polynom vereinfachen p.34 ---------------";
neuper@37906
   374
"----------- pbl klammer polynom vereinfachen p.34 ---------------";
neuper@37906
   375
"----------- pbl klammer polynom vereinfachen p.34 ---------------";
s1210629013@55445
   376
reset_states ();
neuper@38083
   377
CalcTree [(["Term (2*u - 5 - (3 - 4*u) + (8*u + 9))",
neuper@37906
   378
	    "normalform N"],
neuper@37991
   379
	   ("PolyMinus",["klammer","polynom","vereinfachen"],
neuper@37906
   380
	    ["simplification","for_polynomials","with_parentheses"]))];
neuper@37906
   381
moveActiveRoot 1;
wneuper@59248
   382
autoCalculate 1 CompleteCalc;
neuper@37906
   383
val ((pt,p),_) = get_calc 1;
neuper@37906
   384
if p = ([], Res) andalso 
neuper@37906
   385
   term2str (get_obj g_res pt (fst p)) = "1 + 14 * u"
neuper@38031
   386
then () else error "polyminus.sml: Vereinfache (2*u - 5 - (3 - ...";
neuper@37906
   387
show_pt pt;
neuper@37906
   388
neuper@42390
   389
"======= probe p.34 -----";
s1210629013@55445
   390
reset_states ();
neuper@37906
   391
CalcTree [(["Pruefe (2*u - 5 - (3 - 4*u) + (8*u + 9) = 1 + 14 * u)",
neuper@37906
   392
	    "mitWert [u = 2]",
neuper@37906
   393
	    "Geprueft b"],
neuper@37991
   394
	   ("PolyMinus",["polynom","probe"],
neuper@37906
   395
	    ["probe","fuer_polynom"]))];
neuper@37906
   396
moveActiveRoot 1;
wneuper@59248
   397
autoCalculate 1 CompleteCalc;
neuper@37906
   398
val ((pt,p),_) = get_calc 1;
neuper@37906
   399
if p = ([], Res) andalso term2str (get_obj g_res pt (fst p)) = "29 = 29"
neuper@38031
   400
then () else error "polyminus.sml: Probe 29 = 29";
neuper@37906
   401
show_pt pt;
neuper@37906
   402
neuper@37906
   403
"----------- try fun applyTactics --------------------------------";
neuper@37906
   404
"----------- try fun applyTactics --------------------------------";
neuper@37906
   405
"----------- try fun applyTactics --------------------------------";
s1210629013@55445
   406
reset_states ();
neuper@38083
   407
CalcTree [(["Term (5*e + 6*f - 8*g - 9 - 7*e - 4*f + 10*g + 12)",
neuper@37906
   408
	    "normalform N"],
neuper@37991
   409
	   ("PolyMinus",["plus_minus","polynom","vereinfachen"],
neuper@37906
   410
	    ["simplification","for_polynomials","with_minus"]))];
neuper@37906
   411
moveActiveRoot 1;
wneuper@59248
   412
autoCalculate 1 CompleteCalcHead;
wneuper@59248
   413
autoCalculate 1 (Step 1);
wneuper@59248
   414
autoCalculate 1 (Step 1);
neuper@37906
   415
val ((pt,p),_) = get_calc 1; show_pt pt;
neuper@37906
   416
"----- 1 ^^^";
neuper@37906
   417
fetchApplicableTactics 1 0 p;
neuper@37906
   418
val appltacs = sel_appl_atomic_tacs pt p;
neuper@37906
   419
applyTactic 1 p (hd appltacs) (*addiere_x_plus_minus*);
neuper@37906
   420
val ((pt,p),_) = get_calc 1; show_pt pt;
neuper@37906
   421
"----- 2 ^^^";
neuper@52070
   422
(*trace_rewrite := true; ..stopped Test_Isac.thy*)
neuper@37906
   423
val erls = erls_ordne_alphabetisch;
neuper@37906
   424
val t = str2term "- 9 + 12 + 5 * e - 7 * e + (6 - 4) * f - 8 * g + 10 * g";
neuper@37926
   425
val SOME (t',_) = 
neuper@41929
   426
    rewrite_ (@{theory "Isac"}) e_rew_ord erls false @{thm tausche_minus} t;
neuper@37906
   427
term2str t';     "- 9 + 12 + 5 * e - 7 * e + (- 4 + 6) * f - 8 * g + 10 * g";
neuper@37906
   428
neuper@37906
   429
val t = str2term "- 9 + 12 + 5 * e - 7 * e + (6 - 4) * f - 8 * g + 10 * g";
neuper@37926
   430
val NONE = 
neuper@41929
   431
    rewrite_ (@{theory "Isac"}) e_rew_ord erls false @{thm tausche_minus_plus} t;
neuper@37906
   432
neuper@37906
   433
val t = str2term "- 9 + 12 + 5 * e - 7 * e + (6 - 4) * f - 8 * g + 10 * g";
neuper@37926
   434
val SOME (t',_) = 
neuper@41929
   435
    rewrite_set_ (@{theory "Isac"}) false ordne_alphabetisch t;
neuper@37906
   436
term2str t';     "- 9 + 12 + 5 * e - 7 * e - 8 * g + 10 * g + (- 4 + 6) * f";
neuper@37906
   437
trace_rewrite := false;
neuper@37906
   438
neuper@37906
   439
neuper@37906
   440
applyTactic 1 p (hd (sel_appl_atomic_tacs pt p)) (*tausche_minus*);
neuper@37906
   441
val ((pt,p),_) = get_calc 1; show_pt pt;
neuper@37906
   442
"----- 3 ^^^";
neuper@37906
   443
applyTactic 1 p (hd (sel_appl_atomic_tacs pt p)) (**);
neuper@37906
   444
val ((pt,p),_) = get_calc 1; show_pt pt;
neuper@37906
   445
"----- 4 ^^^";
neuper@37906
   446
applyTactic 1 p (hd (sel_appl_atomic_tacs pt p)) (**);
neuper@37906
   447
val ((pt,p),_) = get_calc 1; show_pt pt;
neuper@37906
   448
"----- 5 ^^^";
neuper@37906
   449
applyTactic 1 p (hd (sel_appl_atomic_tacs pt p)) (**);
neuper@37906
   450
val ((pt,p),_) = get_calc 1; show_pt pt;
neuper@37906
   451
"----- 6 ^^^";
neuper@37906
   452
neuper@37906
   453
(*<CALCMESSAGE> failure </CALCMESSAGE>
neuper@37906
   454
applyTactic 1 p (hd (sel_appl_atomic_tacs pt p)) (**);
neuper@37906
   455
val ((pt,p),_) = get_calc 1; show_pt pt;
neuper@37906
   456
"----- 7 ^^^";
neuper@37906
   457
*)
wneuper@59248
   458
autoCalculate 1 CompleteCalc;
neuper@37906
   459
val ((pt,p),_) = get_calc 1; show_pt pt;
neuper@37906
   460
(*independent from failure above: met_simp_poly_minus not confluent:
neuper@37906
   461
(([9], Res), - (8 * g) + 10 * g + (3 - 2 * e + 2 * f)),
neuper@37906
   462
(([], Res), - (8 * g) + 10 * g + (3 - 2 * e + 2 * f))]
neuper@37906
   463
~~~~~~~~~~~###~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*)
t@42115
   464
neuper@37906
   465
neuper@42107
   466
"#############################################################################";
s1210629013@55445
   467
reset_states ();
neuper@38083
   468
CalcTree [(["Term (- (8 * g) + 10 * g + h)",
neuper@37906
   469
	    "normalform N"],
neuper@37991
   470
	   ("PolyMinus",["plus_minus","polynom","vereinfachen"],
neuper@37906
   471
	    ["simplification","for_polynomials","with_minus"]))];
neuper@37906
   472
moveActiveRoot 1;
wneuper@59248
   473
autoCalculate 1 CompleteCalc;
neuper@37906
   474
val ((pt,p),_) = get_calc 1; show_pt pt;
neuper@37906
   475
if p = ([], Res) andalso term2str (get_obj g_res pt (fst p)) = "2 * g + h"
neuper@38031
   476
then () else error "polyminus.sml: addiere_vor_minus";
neuper@37906
   477
neuper@37906
   478
neuper@42107
   479
"#############################################################################";
s1210629013@55445
   480
reset_states ();
neuper@38083
   481
CalcTree [(["Term (- (8 * g) + 10 * g + f)",
neuper@37906
   482
	    "normalform N"],
neuper@37991
   483
	   ("PolyMinus",["plus_minus","polynom","vereinfachen"],
neuper@37906
   484
	    ["simplification","for_polynomials","with_minus"]))];
neuper@37906
   485
moveActiveRoot 1;
wneuper@59248
   486
autoCalculate 1 CompleteCalc;
neuper@37906
   487
val ((pt,p),_) = get_calc 1; show_pt pt;
neuper@37906
   488
if p = ([], Res) andalso term2str (get_obj g_res pt (fst p)) = "f + 2 * g"
neuper@38031
   489
then () else error "polyminus.sml: tausche_vor_plus";
neuper@37906
   490
neuper@37906
   491
"----------- pbl binom polynom vereinfachen p.39 -----------------";
neuper@37906
   492
"----------- pbl binom polynom vereinfachen p.39 -----------------";
neuper@37906
   493
"----------- pbl binom polynom vereinfachen p.39 -----------------";
neuper@37906
   494
val rls = klammern_ausmultiplizieren;
neuper@37906
   495
val t = str2term "(3 * a + 2) * (4 * a - 1)";
neuper@37926
   496
val SOME (t,_) = rewrite_set_ thy false rls t; term2str t;
neuper@37906
   497
"3 * a * (4 * a) - 3 * a * 1 + (2 * (4 * a) - 2 * 1)";
neuper@37906
   498
val rls = discard_parentheses;
neuper@37926
   499
val SOME (t,_) = rewrite_set_ thy false rls t; term2str t;
neuper@37906
   500
"3 * a * 4 * a - 3 * a * 1 + (2 * 4 * a - 2 * 1)";
neuper@37906
   501
val rls = ordne_monome;
neuper@37926
   502
val SOME (t,_) = rewrite_set_ thy false rls t; term2str t;
neuper@37906
   503
"3 * 4 * a * a - 1 * 3 * a + (2 * 4 * a - 1 * 2)";
neuper@37906
   504
(*
neuper@37906
   505
val t = str2term "3 * a * 4 * a";
neuper@37906
   506
val rls = ordne_monome;
neuper@37926
   507
val SOME (t,_) = rewrite_set_ thy false rls t; term2str t;
neuper@37906
   508
*)
neuper@37906
   509
val rls = klammern_aufloesen;
neuper@37926
   510
val SOME (t,_) = rewrite_set_ thy false rls t; term2str t;
neuper@37906
   511
"3 * 4 * a * a - 1 * 3 * a + 2 * 4 * a - 1 * 2";
neuper@37906
   512
val rls = ordne_alphabetisch;
neuper@37906
   513
(*TODO: make is_monom more general, a*a=a^2, ...*)
neuper@37926
   514
val SOME (t,_) = rewrite_set_ thy false rls t; term2str t;
neuper@37906
   515
"3 * 4 * a * a - 1 * 2 - 1 * 3 * a + 2 * 4 * a";
neuper@41977
   516
(*STOPPED.WN080104
neuper@37906
   517
val rls = fasse_zusammen;
neuper@37926
   518
val SOME (t,_) = rewrite_set_ thy false rls t; term2str t;
neuper@37906
   519
val rls = verschoenere;
neuper@37926
   520
val SOME (t,_) = rewrite_set_ thy false rls t; term2str t;
neuper@37906
   521
*)
neuper@37906
   522
neuper@37906
   523
(*@@@@@@@*)
s1210629013@55445
   524
reset_states ();
neuper@38083
   525
CalcTree [(["Term ((3*a + 2) * (4*a - 1))",
neuper@37906
   526
	    "normalform N"],
neuper@37991
   527
	   ("PolyMinus",["binom_klammer","polynom","vereinfachen"],
neuper@37906
   528
	    ["simplification","for_polynomials","with_parentheses_mult"]))];
neuper@37906
   529
moveActiveRoot 1;
wneuper@59248
   530
autoCalculate 1 CompleteCalc;
neuper@37906
   531
val ((pt,p),_) = get_calc 1; show_pt pt;
neuper@37906
   532
if p = ([], Res) andalso 
t@42111
   533
   term2str (get_obj g_res pt (fst p)) = "-2 + 12 * a ^^^ 2 + 5 * a"
neuper@38031
   534
then () else error "polyminus.sml: Vereinfache (2*u - 5 - (3 - ...";
t@42111
   535
neuper@37906
   536
"----------- pbl binom polynom vereinfachen: cube ----------------";
neuper@37906
   537
"----------- pbl binom polynom vereinfachen: cube ----------------";
neuper@37906
   538
"----------- pbl binom polynom vereinfachen: cube ----------------";
s1210629013@55445
   539
reset_states ();
neuper@38083
   540
CalcTree [(["Term (8*(a - q) + a - 2*q + 3*(a - 2*q))", "normalform N"],
neuper@37991
   541
	   ("PolyMinus",["binom_klammer","polynom","vereinfachen"],
neuper@37906
   542
	    ["simplification","for_polynomials","with_parentheses_mult"]))];
neuper@37906
   543
moveActiveRoot 1;
wneuper@59248
   544
autoCalculate 1 CompleteCalc;
neuper@37906
   545
val ((pt,p),_) = get_calc 1; show_pt pt;
neuper@42107
   546
if p = ([], Res) andalso term2str (get_obj g_res pt (fst p)) = "12 * a - 16 * q" 
neuper@42107
   547
then () else error "pbl binom polynom vereinfachen: cube";
neuper@37906
   548
neuper@37906
   549
"----------- refine Vereinfache ----------------------------------";
neuper@37906
   550
"----------- refine Vereinfache ----------------------------------";
neuper@37906
   551
"----------- refine Vereinfache ----------------------------------";
neuper@42390
   552
val fmz = ["Term (8*(a - q) + a - 2*q + 3*(a - 2*(q::real)))", "normalform (N::real)"];
wneuper@59111
   553
default_print_depth 11;
neuper@37906
   554
val matches = refine fmz ["vereinfachen"];
wneuper@59111
   555
default_print_depth 3;
neuper@37906
   556
neuper@37906
   557
"----- go into details, if it seems not to work -----";
neuper@37906
   558
"--- does the predicate evaluate correctly ?";
neuper@37906
   559
val t = str2term 
neuper@42390
   560
	    "matchsub (?a * (?b - ?c)) (8 * (a - q) + a - 2 * q + 3 * (a - 2 * (q::real)))";
neuper@37906
   561
val ma = eval_matchsub "" "Tools.matchsub" t thy;
neuper@37906
   562
case ma of
neuper@37926
   563
    SOME ("matchsub (?a * (?b - ?c)) (8 * (a - q) + \
neuper@37906
   564
	  \a - 2 * q + 3 * (a - 2 * q)) = True", _) => ()
neuper@38031
   565
  | _ => error "polyminus.sml matchsub (?a * (?b - ?c)...A";
neuper@37906
   566
neuper@37906
   567
"--- does the respective prls rewrite ?";
neuper@37906
   568
val prls = append_rls "prls_pbl_vereinf_poly" e_rls 
neuper@37906
   569
	     [Calc ("Poly.is'_polyexp", eval_is_polyexp ""),
neuper@37906
   570
	      Calc ("Tools.matchsub", eval_matchsub ""),
neuper@38085
   571
	      Thm ("or_true",@{thm or_true}),
neuper@37906
   572
	      (*"(?a | True) = True"*)
neuper@38085
   573
	      Thm ("or_false",@{thm or_false}),
neuper@37906
   574
	      (*"(?a | False) = ?a"*)
neuper@37970
   575
	      Thm ("not_true",num_str @{thm not_true}),
neuper@37906
   576
	      (*"(~ True) = False"*)
neuper@37970
   577
	      Thm ("not_false",num_str @{thm not_false})
neuper@37906
   578
	      (*"(~ False) = True"*)];
neuper@52070
   579
(*trace_rewrite := true; ..stopped Test_Isac.thy*)
neuper@37926
   580
val SOME (t', _) = rewrite_set_ thy false prls t;
neuper@37906
   581
trace_rewrite := false;
neuper@37906
   582
neuper@37906
   583
"--- does the respective prls rewrite the whole predicate ?";
neuper@37906
   584
val t = str2term 
neuper@37906
   585
	    "Not (matchsub (?a * (?b + ?c)) (8 * (a - q) + a - 2 * q) | \
neuper@37906
   586
	    \     matchsub (?a * (?b - ?c)) (8 * (a - q) + a - 2 * q) | \
neuper@37906
   587
	    \     matchsub ((?b + ?c) * ?a) (8 * (a - q) + a - 2 * q) | \
neuper@37906
   588
	    \     matchsub ((?b - ?c) * ?a) (8 * (a - q) + a - 2 * q) )";
neuper@52070
   589
(*trace_rewrite := true; ..stopped Test_Isac.thy*)
neuper@37926
   590
val SOME (t', _) = rewrite_set_ thy false prls t;
neuper@37906
   591
trace_rewrite := false;
neuper@42390
   592
if term2str t' = "False" then ()
neuper@38031
   593
else error "polyminus.sml Not (matchsub (?a * (?b + ?c)) (8 ...";
neuper@37906
   594
neuper@38037
   595
"----------- *** prep_pbt: syntax error in '#Where' of [v";
neuper@38037
   596
"----------- *** prep_pbt: syntax error in '#Where' of [v";
neuper@38037
   597
"----------- *** prep_pbt: syntax error in '#Where' of [v";
neuper@38037
   598
(*see test/../termC.sml for details*)
neuper@38037
   599
val t = parse_patt thy "t_t is_polyexp";
neuper@38037
   600
val t = parse_patt thy ("Not (matchsub (?a + (?b + ?c)) t_t | " ^
neuper@38037
   601
	                "     matchsub (?a + (?b - ?c)) t_t | " ^
neuper@38037
   602
	                "     matchsub (?a - (?b + ?c)) t_t | " ^
neuper@38037
   603
	                "     matchsub (?a + (?b - ?c)) t_t )");
neuper@42390
   604
(*show_types := true;
neuper@38037
   605
if term2str t = "~ (matchsub ((?a::real) + ((?b::real) + (?c::real))) (t_t::real) |\n   matchsub (?a + (?b - ?c)) t_t |\n   matchsub (?a - (?b + ?c)) t_t | matchsub (?a + (?b - ?c)) t_t)"
neuper@38038
   606
then () else error "polyminus.sml type-structure of \"?a :: real\" changed 1";
neuper@42390
   607
show_types := false;*)
neuper@42390
   608
if term2str t = "~ (matchsub (?a + (?b + ?c)) t_t |\n   matchsub (?a + (?b - ?c)) t_t |\n" ^
neuper@42390
   609
"   matchsub (?a - (?b + ?c)) t_t | matchsub (?a + (?b - ?c)) t_t)"
neuper@42390
   610
then () else error "polyminus.sml type-structure of \"?a :: real\" changed 1";
neuper@37906
   611