test/Tools/isac/Knowledge/rational-old.sml
author Walther Neuper <neuper@ist.tugraz.at>
Tue, 28 Sep 2010 09:06:56 +0200
branchisac-update-Isa09-2
changeset 38031 460c24a6a6ba
parent 37991 028442673981
child 38043 6a36acec95d9
permissions -rw-r--r--
tuned error and writeln

# raise error --> error
# writeln in atomtyp, atomty, atomt and xmlsrc
neuper@37906
     1
(* tests for rationals
neuper@37906
     2
   Stefan Karnel
neuper@37906
     3
   2002
neuper@37906
     4
   use"../kbtest/rational.sml";
neuper@37906
     5
   use"kbtest/rational.sml";
neuper@37906
     6
   use"rational.sml";
neuper@37906
     7
*)
neuper@37906
     8
neuper@37906
     9
(*--------------------------------15.10.02---
neuper@37906
    10
(* tests*)
neuper@37906
    11
print("\n\n*********************   tests    *************************\n\n");
neuper@37906
    12
print("\n\n***** divide tests *****\n");
neuper@37906
    13
val mv_pquot1 = (#1(mv_division([(1,[1,1,1]),(1,[1,1,0]),(1,[1,0,1]),(1,[0,0,0])],[(1,[1,1,0]),(1,[0,0,0])],LEX_)));
neuper@37906
    14
(* result: [(1,[0,0,1]),(1,[0,0,0])] *)
neuper@38031
    15
if mv_pquot1=[(1,[0,0,1]),(1,[0,0,0])] then () else error ("Test failed");
neuper@37906
    16
neuper@37906
    17
val mv_prest1 = (#2(mv_division([(1,[1,1,1]),(1,[1,1,0]),(1,[1,0,1]),(1,[0,0,0])],[(1,[1,1,0]),(1,[0,0,0])],LEX_)));
neuper@37906
    18
(* result: [(1,[1,0,1]),(~1,[0,0,1])] *)
neuper@38031
    19
if mv_prest1=[(1,[1,0,1]),(~1,[0,0,1])] then () else error ("Test failed");
neuper@37906
    20
neuper@37906
    21
val mv_pquot2 = (#1(mv_division([(4,[2]),(8,[1]),(16,[0])],[(1,[1]),(1,[0])],LEX_)));
neuper@37906
    22
(* result: [(4,[1]),(4,[0])] *)
neuper@38031
    23
if mv_pquot2=[(4,[1]),(4,[0])] then () else error ("Test failed");
neuper@37906
    24
neuper@37906
    25
val mv_prest2 = (#2(mv_division([(4,[2]),(8,[1]),(16,[0])],[(1,[1]),(1,[0])],LEX_))); 
neuper@37906
    26
(* result: [(12,[0]] *)
neuper@38031
    27
if mv_prest2=[(12,[0])] then () else error ("Test failed");
neuper@37906
    28
neuper@37906
    29
val mv_pquot3 = (#1(mv_division([(4,[2]),(~4,[0])],[(2,[1]),(2,[0])],LEX_)));
neuper@37906
    30
(* [(2,[1]),(~2,[0])] *)
neuper@38031
    31
if mv_pquot3=[(2,[1]),(~2,[0])] then () else error ("Test failed");
neuper@37906
    32
neuper@37906
    33
val mv_prest3 = (#2(mv_division([(1,[2]),(~1,[0])],[(2,[1]),(2,[0])],LEX_)));
neuper@37906
    34
(* [(1,[2]),(~1,[0])] *)
neuper@38031
    35
if mv_prest3=[(1,[2]),(~1,[0])] then () else error ("Test failed");
neuper@37906
    36
neuper@37906
    37
val mv_pquot4 = (#1(mv_division([(3,[1,1,1]),(4,[1,0,1]),(3,[0,0,1])],[(2,[1,0,0]),(4,[0,0,1])],LEX_)));
neuper@37906
    38
(* [(1,[0,1,1])] *)
neuper@38031
    39
if mv_pquot4=[(1,[0,1,1])] then () else error ("Test failed");
neuper@37906
    40
neuper@37906
    41
val mv_prest4 = (#2(mv_division([(3,[1,1,1]),(4,[1,0,1]),(3,[0,0,1])],[(2,[1,0,0]),(4,[0,0,1])],GGO_)));
neuper@37906
    42
(* [(1,[1,1,1]),(~4,[0,1,2]),(4,[1,0,1]),(3,[0,0,1])] *)
neuper@38031
    43
if mv_prest4 =[(1,[1,1,1]),(~4,[0,1,2]),(4,[1,0,1]),(3,[0,0,1])] then () else error ("Test failed");
neuper@37906
    44
neuper@37906
    45
val mv_pquot5 = (#1(mv_division([(3,[1,1,1]),(4,[1,0,1]),(3,[0,0,1]),(6,[2,1,3]),(4,[0,4,1]),(1,[2,2,1])],[(1,[0,0,1])],LEX_))); 
neuper@37906
    46
(* [(1,[2,2,0]),(6,[2,1,2]),(3,[1,1,0]),(4,[1,0,0]),(4,[0,4,0]),(3,[0,0,0])]*)
neuper@38031
    47
if mv_pquot5=[(1,[2,2,0]),(6,[2,1,2]),(3,[1,1,0]),(4,[1,0,0]),(4,[0,4,0]),(3,[0,0,0])] then () else error ("Test failed");
neuper@37906
    48
neuper@37906
    49
val mv_prest5 = (#2(mv_division([(3,[1,1,1]),(4,[1,0,1]),(3,[0,0,1]),(6,[2,1,3]),(4,[0,4,1]),(1,[2,2,1])],[(1,[0,0,1])],LEX_)));
neuper@37906
    50
(* [] *)
neuper@38031
    51
if mv_prest5=[] then () else error ("Test failed");
neuper@37906
    52
neuper@37906
    53
(* (x^2 + 2(a+1)x + (a^2+2a+1)) / (x+a+1) = x+a+1 *)
neuper@37906
    54
val mv_pquot6 = (#1(mv_division([(1,[2,0,0]),(2,[1,1,0]),(2,[1,0,0]),(1,[0,2,0]),(2,[0,1,0]),(1,[0,0,0])],[(1,[1,0,0]),(1,[0,1,0]),(1,[0,0,0])],LEX_)));
neuper@38031
    55
if mv_pquot6=[(1,[1,0,0]),(1,[0,1,0]),(1,[0,0,0])] then () else error ("Test failed");
neuper@37906
    56
neuper@37906
    57
val mv_prest6 = (#2(mv_division([(1,[2,0,0]),(2,[1,1,0]),(2,[1,0,0]),(1,[0,2,0]),(2,[0,1,0]),(1,[0,0,0])],[(1,[1,0,0]),(1,[0,1,0]),(1,[0,0,0])],LEX_)));
neuper@38031
    58
if mv_prest6=[] then () else error ("Test failed");
neuper@37906
    59
neuper@37906
    60
(* Exception tests *)
neuper@37906
    61
(* mv_division ([(1,[0,0,0])],[(0,[1,2,3])],LEX_); *)
neuper@37906
    62
neuper@37906
    63
print("\n\n***** MV_CONTENT-TESTS *****\n");
neuper@37906
    64
val mv_cont1=mv_content([(1,[2,1]),(1,[2,0]),(1,[1,1]),(1,[1,0]),(1,[0,1]),(1,[0,0])]); 
neuper@37906
    65
(* [(1,[0,1]),(1,[0,0])] *)
neuper@38031
    66
if  mv_cont1=[(1,[0,1]),(1,[0,0])] then () else error ("Test failed");
neuper@37906
    67
neuper@37906
    68
val mv_pp1=mv_pp([(1,[1,1]),(1,[1,0]),(1,[0,1]),(1,[0,0])]); 
neuper@37906
    69
(*[(1,[1,0]),(1,[0,0])]*)
neuper@38031
    70
if mv_pp1=[(1,[1,0]),(1,[0,0])] then () else error ("Test failed");
neuper@37906
    71
neuper@37906
    72
val mv_cont2=mv_content([(2,[1]),(4,[0])]);
neuper@37906
    73
(* [(2,[0])] *)
neuper@38031
    74
if mv_cont2=[(2,[0])] then () else error ("Test failed");
neuper@37906
    75
neuper@37906
    76
val mv_pp2=mv_pp([(2,[1]),(4,[0])]);
neuper@37906
    77
(* [(1,[1]),(2,[0])] *)
neuper@38031
    78
if mv_pp2=[(1,[1]),(2,[0])] then () else error ("Test failed");
neuper@37906
    79
neuper@37906
    80
val mv_cont3=mv_content[(8,[2,1,1]),(12,[1,0,2]),(10,[2,2,0]),(16,[1,1,1])];
neuper@37906
    81
(* [(2,[0,0,0])] *)
neuper@38031
    82
if mv_cont3=[(2,[0,0,0])] then () else error ("Test failed");
neuper@37906
    83
neuper@37906
    84
val mv_pp3=mv_pp[(8,[2,1,1]),(12,[1,0,2]),(10,[2,2,0]),(16,[1,1,1])];
neuper@37906
    85
(* [(5,[2,2,0]),(4,[2,1,1]),(8,[1,1,1]),(6,[1,0,2])] *)
neuper@38031
    86
if mv_pp3=[(5,[2,2,0]),(4,[2,1,1]),(8,[1,1,1]),(6,[1,0,2])] then () else error ("Test failed");
neuper@37906
    87
neuper@37906
    88
val mv_cont4=mv_content[(2,[2,1,0]),(3,[1,0,1]),(2,[1,1,0]),(3,[0,0,1])];
neuper@37906
    89
(* [(1,[0,0,0])] *)
neuper@38031
    90
if mv_cont4=[(1,[0,0,0])] then () else error ("Test failed");
neuper@37906
    91
neuper@37906
    92
val mv_pp4=mv_pp [(2,[2,1,0]),(3,[1,0,1]),(2,[1,1,0]),(3,[0,0,1])]; 
neuper@37906
    93
(* [(2,[2,1,0]),(2,[1,1,0]),(3,[1,0,1]),(3,[0,0,1])] *)
neuper@38031
    94
if mv_pp4=[(2,[2,1,0]),(2,[1,1,0]),(3,[1,0,1]),(3,[0,0,1])] then () else error ("Test failed");
neuper@37906
    95
neuper@37906
    96
val con1=mv_content([(9,[2,0]),(15,[1,1]),(12,[1,0]),(6,[0,2]),(12,[0,1])]);
neuper@37906
    97
(* [(3,[0,0])] *) 
neuper@38031
    98
if con1=[(3,[0,0])] then () else error ("Test failed");
neuper@37906
    99
neuper@37906
   100
val pp1=mv_pp([(9,[2,0]),(15,[1,1]),(12,[1,0]),(6,[0,2]),(12,[0,1])]);
neuper@37906
   101
(* [(3,[2,0]),(5,[1,1]),(4,[1,0]),(2,[0,2]),(4,[0,1])] *) 
neuper@38031
   102
if pp1=[(3,[2,0]),(5,[1,1]),(4,[1,0]),(2,[0,2]),(4,[0,1])] then () else error ("Test failed");
neuper@37906
   103
neuper@37906
   104
val con2=mv_content([(1,[2,0]),(1,[1,1]),(1,[1,0]),(1,[0,2]),(1,[0,1])]); 
neuper@37906
   105
(* [(1,[0,0])] *)
neuper@38031
   106
if con2=[(1,[0,0])] then () else error ("Test failed");
neuper@37906
   107
neuper@37906
   108
val pp2 =mv_pp([(1,[2,0]),(1,[1,1]),(1,[1,0]),(1,[0,2]),(1,[0,1])]); 
neuper@37906
   109
(* [(1,[2,0]),(1,[1,1]),(1,[1,0]),(1,[0,2]),(1,[0,1])] *)
neuper@38031
   110
if pp2=[(1,[2,0]),(1,[1,1]),(1,[1,0]),(1,[0,2]),(1,[0,1])] then () else error ("Test failed");
neuper@37906
   111
neuper@37906
   112
val cont1 = mv_content [(1,[2,1,0]),(2,[2,1,0])]; 
neuper@37906
   113
(* [(3,[0,1,0])] *)
neuper@38031
   114
if cont1=[(3,[0,1,0])] then () else error ("Test failed");
neuper@37906
   115
neuper@37906
   116
val pp1 = mv_pp [(1,[2,1,0]),(2,[2,1,0])]; 
neuper@37906
   117
(* [(1,[2,0,0])] *)
neuper@38031
   118
if pp1=[(1,[2,0,0])] then () else error ("Test failed");
neuper@37906
   119
neuper@37906
   120
val cont2 = mv_content [(4,[1,2,0]),(2,[2,1,0])]; 
neuper@37906
   121
(* [(2,[0,1,0])] *)
neuper@38031
   122
if cont2=[(2,[0,1,0])] then () else error ("Test failed");
neuper@37906
   123
neuper@37906
   124
val pp2 = mv_pp [(4,[1,2,0]),(2,[2,1,0])];
neuper@37906
   125
(* [(1,[2,0,0]),(2,[1,1,0])] *)
neuper@38031
   126
if pp2=[(1,[2,0,0]),(2,[1,1,0])] then () else error ("Test failed");
neuper@37906
   127
neuper@37906
   128
print("\n\n\n\n********************************************************\n\n");
neuper@37906
   129
val cont3=mv_content [(65,[3,2,2]),(52,[3,2,1]),(26,[3,1,2]),(~95,[2,2,3]),(~76,[2,2,2]),(35,[2,2,1]),(28,[2,2,0]),(~38,[2,1,3]),(14,[2,1,1])];
neuper@38031
   130
(*if cont3=[(1,[0,1,0])] then () else error ("Test failed"); *)
neuper@37906
   131
val pp3=mv_pp [(65,[3,2,2]),(52,[3,2,1]),(26,[3,1,2]),(~95,[2,2,3]),(~76,[2,2,2]),(35,[2,2,1]),(28,[2,2,0]),(~38,[2,1,3]),(14,[2,1,1])];
neuper@37906
   132
neuper@37906
   133
neuper@37906
   134
print("\n\n***** gcd-tests *****\n"); 
neuper@37906
   135
val ggt1 = gcd_poly [(4,[2,2]),(8,[1,1]),(4,[0,0])] [(2,[1,1]),(2,[0,0])]; 
neuper@37906
   136
(* [(2,[1,1]),(2,[0,0])] *)
neuper@38031
   137
if ggt1=[(2,[1,1]),(2,[0,0])] then () else error ("Test failed");
neuper@37906
   138
neuper@37906
   139
val ggt2 = gcd_poly [(8,[2,1,1]),(12,[1,0,2]),(10,[2,2,0]),(15,[1,1,1])] [(2,[2,1,0]),(3,[1,0,1]),(2,[1,1,0]),(3,[0,0,1])];
neuper@37906
   140
(* [(2,[1,1,0]),(3,[0,0,1])] *)
neuper@38031
   141
if ggt2=[(2,[1,1,0]),(3,[0,0,1])] then () else error ("Test failed");
neuper@37906
   142
neuper@37906
   143
val ggt3 = gcd_poly [(1,[2,0,0]),(~2,[1,0,1]),(1,[0,0,2])] [(1,[1,0,0]),(~1,[0,0,1])]; 
neuper@37906
   144
(* [(1,[1,0,0]),(~1,[0,0,1])] *)
neuper@38031
   145
if ggt3=[(1,[1,0,0]),(~1,[0,0,1])] then () else error ("Test failed");
neuper@37906
   146
neuper@37906
   147
val ggt4 = gcd_poly [(1,[2,1,0]),(2,[2,1,0])] [(5,[1,0,0])]; 
neuper@37906
   148
(* [(1,[1,0,0])] *)
neuper@38031
   149
if ggt4=[(1,[1,0,0])] then () else error ("Test failed");
neuper@37906
   150
neuper@37906
   151
val ggt5 = gcd_poly [(4,[2,0,0]),(~8,[1,0,1]),(4,[0,0,2])] [(1,[2,0,0]),(~1,[0,0,2])]; 
neuper@37906
   152
(* [(1,[1,0,0]),(~1,[0,0,1])] *)
neuper@38031
   153
if ggt5=[(1,[1,0,0]),(~1,[0,0,1])] then () else error ("Test failed");
neuper@37906
   154
neuper@37906
   155
val ggt6 = gcd_poly [(10,[2,1,1]),(14,[1,1,0]),(3,[1,0,1]),(20,[1,2,1])] [(5,[1,1,1]),(7,[2,1,1])];
neuper@37906
   156
(* [(1,[0,0,0])] *)
neuper@38031
   157
if ggt6=[(1,[1,0,0])] then () else error ("Test failed");
neuper@37906
   158
neuper@37906
   159
val ggt7 = gcd_poly [(~169,[4,3,3]),(273,[4,2,2]),(247,[3,3,4]),(~91,[3,3,2]),(78,[3,3,1]),(~399,[3,2,3]),(147,[3,2,1]),(~114,[2,3,2]),(42,[2,3,0])]  [(65,[3,2,2]),(52,[3,2,1]),(26,[3,1,2]),(~95,[2,2,3]),(~76,[2,2,2]),(35,[2,2,1]),(28,[2,2,0]),(~38,[2,1,3]),(14,[2,1,1])];
neuper@37906
   160
(* [(13,[3,1,1]),(~19,[2,1,2]),(7,[2,1,0])] *)
neuper@38031
   161
if ggt7=[(13,[3,1,1]),(~19,[2,1,2]),(7,[2,1,0])] then () else error ("Test failed");
neuper@37906
   162
neuper@37906
   163
print("\n\n***** kgv-tests *****\n"); 
neuper@37906
   164
val kgv1=lcm_poly [(10,[])] [(15,[])];
neuper@37906
   165
(* [(30,[])] *)
neuper@38031
   166
if kgv1=[(30,[])] then () else error ("Test failed");
neuper@37906
   167
neuper@37906
   168
val kgv2=lcm_poly [(1,[2,0,0]),(~2,[1,0,1]),(1,[0,0,2])] [(1,[1,0,0]),(~1,[0,0,1])]; 
neuper@37906
   169
(* [(1,[2,0,0]),(~2,[1,0,1]),(1,[0,0,2])] *)
neuper@38031
   170
if kgv2=[(1,[2,0,0]),(~2,[1,0,1]),(1,[0,0,2])] then () else error ("Test failed");
neuper@37906
   171
neuper@37906
   172
val kgv3=lcm_poly [(4,[2,0,0]),(~8,[1,0,1]),(4,[0,0,2])] [(1,[2,0,0]),(~1,[0,0,2])]; 
neuper@37906
   173
(* [(4,[3,0,0]),(~4,[2,0,1]),(~4,[1,0,2]),(4,[0,0,3])] *)
neuper@38031
   174
if kgv3=[(4,[3,0,0]),(~4,[2,0,1]),(~4,[1,0,2]),(4,[0,0,3])] then () else error ("Test failed");
neuper@37906
   175
neuper@37906
   176
(*
neuper@37906
   177
print("***** TERM2POLY-TESTS *****\n"); 
neuper@37906
   178
val t0 = (term_of o the o (parse thy)) "3 * 4";
neuper@37906
   179
val t1 = (term_of o the o (parse thy)) "27";
neuper@37906
   180
val t11= (term_of o the o (parse thy)) "27 * c";
neuper@37906
   181
val t2 = (term_of o the o (parse thy)) "b";
neuper@37906
   182
val t23= (term_of o the o (parse thy)) "c^^^7";
neuper@37906
   183
val t24= (term_of o the o (parse thy)) "5 * c^^^7";
neuper@37906
   184
val t26= (term_of o the o (parse thy)) "a * b"; 
neuper@37906
   185
val t3 = (term_of o the o (parse thy)) "2  +  a";
neuper@37906
   186
val t4 = (term_of o the o (parse thy)) "b  +  a";
neuper@37906
   187
val t5 = (term_of o the o (parse thy)) "2  +  a^^^3";*)
neuper@37906
   188
val t6 = (term_of o the o (parse thy)) "5*a^^^2*b^^^3*c+4*a^^^4*b+2*a*c";
neuper@37906
   189
val t7 = (term_of o the o (parse thy)) "a-b";
neuper@37906
   190
(*
neuper@37906
   191
(the o term2poly) t0;
neuper@37906
   192
(the o term2poly) t1;
neuper@37906
   193
(the o term2poly) t11;
neuper@37906
   194
(the o term2poly) t2;
neuper@37906
   195
(the o term2poly) t23;
neuper@37906
   196
(the o term2poly) t24;
neuper@37906
   197
(the o term2poly) t26;
neuper@37906
   198
(the o term2poly) t3;
neuper@37906
   199
(the o term2poly) t4;
neuper@37906
   200
(the o term2poly) t5;
neuper@37906
   201
(the o term2poly) t6;
neuper@37906
   202
(the o term2poly) t7;*)
neuper@37906
   203
neuper@37906
   204
neuper@37906
   205
print("\n\n***** STEP_CANCEL_TESTS: *****\n");
neuper@37906
   206
(*
neuper@37906
   207
val term2 = (term_of o the o (parse thy)) " (9 * a^^^2 * b) ///  (6 * a * c)";
neuper@37906
   208
val div2   = step_cancel term2;
neuper@37906
   209
atomt div2; 
neuper@37906
   210
*)
neuper@37906
   211
neuper@37906
   212
val term1 = (term_of o the o (parse thy)) "(10 * a^^^2 * b * c + 14 * a * b + 3 * a * c + 20 * a * b^^^2 * c) /// a";
neuper@37906
   213
val div1  = step_cancel term1;
neuper@38031
   214
(*if div1 =  (term_of o the o (parse thy)) "((10 * a * b * c + 14 * b + 3 * c + 20 * b^^^2 * c) * a) /// (1 * a)" then () else raise error ("Test failed");*)
neuper@37906
   215
neuper@37906
   216
val term2 = (term_of o the o (parse thy)) "(10 * a^^^2 * b * c + 14 * a * b + 3 * a * c + 20 * a * b^^^2 * c) /// (5 * a * b * c  +  7 * a^^^2 * b * c) ";
neuper@37906
   217
val div2  = step_cancel term2;
neuper@38031
   218
(*if div2 = ([(10,[1,1,1]),(20,[0,2,1]),(14,[0,1,0]),(3,[0,0,1])],[(1,[1,0,0])],[(7,[1,1,1]),(5,[0,1,1])]) then () else raise error ("Test failed");*)
neuper@37906
   219
neuper@37906
   220
neuper@37906
   221
val term3 = (term_of o the o (parse thy)) "(10 * a^^^2 * b * c) /// (1 * x * y * z) ";
neuper@37906
   222
val div3 = step_cancel term3;
neuper@37906
   223
neuper@37906
   224
neuper@37906
   225
neuper@37906
   226
(*val mul1=(term_of o the o (parse thy)) "(5*a*b*c+4*a*b+2*a*c)"; 
neuper@37906
   227
val mul2=(the (term2poly((term_of o the o (parse thy)) "13*a^^^2*b*c+7*a*b-19*a*b*c^^^2")));
neuper@37906
   228
val mul3=(the (term2poly((term_of o the o (parse thy)) "6*a*b^^^2-13*a^^^2*b^^^2*c^^^2+21*a^^^2*b*c")));
neuper@37906
   229
val t1=mv_mul(mul1,mul2,LEX_);
neuper@37906
   230
val t2=mv_mul(mul3,mul2,LEX_);
neuper@37906
   231
val div3=step_cancel t1 t2;
neuper@38031
   232
if div3=([(5,[0,1,1]),(4,[0,1,0]),(2,[0,0,1])],[(13,[3,1,1]),(~19,[2,1,2]),(7,[2,1,0])],[(~13,[1,2,2]),(21,[1,1,1]),(6,[0,2,0])]) then () else error ("Test failed");*)
neuper@37906
   233
neuper@37906
   234
print("\n\n***** all tests successfull ;-) ******\n\n");
neuper@37906
   235
neuper@37906
   236
neuper@37906
   237
neuper@37906
   238
val thy = Rational.thy;
neuper@37906
   239
val rls = Prls {func=cancel};
neuper@37906
   240
val t = (term_of o the o (parse thy)) 
neuper@37906
   241
	    "(1 + 1 * a ^^^ 1)///(-2 + 2 * a ^^^ 2)";
neuper@37906
   242
val (t,asm) = the (rewrite_set_ thy eval_rls false rls t);
neuper@37906
   243
neuper@37906
   244
neuper@37991
   245
val thy' = "Rational";
neuper@37906
   246
val rls' = "cancel";
neuper@37906
   247
val t' = "(1 + 1 * a ^^^ 1)///(-2 + 2 * a ^^^ 2)";
neuper@37906
   248
val (t',asm') = the (rewrite_set thy' "eval_rls" false rls' t');
neuper@37906
   249
(*if t' = "1 /// (-2 + 2 * a)" then ()
neuper@38031
   250
else error "tests/rationals.sml(1): new behaviour";*)
neuper@37906
   251
neuper@37906
   252
neuper@37991
   253
val thy' = "Rational";
neuper@37906
   254
val rls' = "cancel";
neuper@37906
   255
val t' = "(10 * a^^^2 * b * c + 14 * a * b + 3 * a * c + 20 * a * b^^^2 * c) /// (5 * a * b * c  +  7 * a^^^2 * b * c) ";
neuper@37906
   256
val (t',asm') = the (rewrite_set thy' "eval_rls" false rls' t');
neuper@37906
   257
neuper@37991
   258
val thy' = "Rational";
neuper@37906
   259
val rls' = "cancel";
neuper@37906
   260
val t' = "(a^^^2 * b  + 2 * a * b +  b ) /// ( a^^^2   - 1 )";
neuper@37906
   261
val (t',asm') = the (rewrite_set thy' "eval_rls" false rls' t');
neuper@37906
   262
neuper@37906
   263
(*
neuper@37906
   264
val term2 = (term_of o the o (parse thy))  "(a^^^2 * b  + 2 * a * b +  b ) /// ( a^^^2   - 1 )";
neuper@37906
   265
val div2  = direct_cancel term2;
neuper@37906
   266
val t = (term_of o the o (parse thy)) "(1 + 1 * a ^^^ 1)///(-2 + 2 * a ^^^ 2) = 0";*)
neuper@37906
   267
neuper@37906
   268
neuper@37906
   269
neuper@37906
   270
(*WN folgendes aus examples he"uberkopiert ...*)
neuper@37906
   271
neuper@37906
   272
(* examples from:
neuper@37906
   273
   Mathematik 1
neuper@37906
   274
   Schalk 
neuper@37906
   275
   Reniets Verlag *)
neuper@37906
   276
neuper@37991
   277
val thy' = "Rational";
neuper@37906
   278
val rls' = "cancel";
neuper@37906
   279
val mp = "make_polynomial";
neuper@37906
   280
neuper@37906
   281
(* page 63 *)
neuper@37906
   282
neuper@37906
   283
print("\n\nexample 186:\n");
neuper@37906
   284
print("a)\n");
neuper@37906
   285
val e186a'="(14 * x * y) / ( x * y )";
neuper@37906
   286
val e186a = the (rewrite_set thy' "rational_erls" false rls' e186a');
neuper@37906
   287
print("b)\n");
neuper@37906
   288
val e186b'="(60 * a * b) / ( 15 * a  * b )";
neuper@37906
   289
val e186b = the (rewrite_set thy' "rational_erls" false rls' e186b');
neuper@37906
   290
print("c)\n");
neuper@37906
   291
val e186c'="(144 * a^^^2 * b * c) / (12 * a * b * c )";
neuper@37906
   292
val e186c = (the (rewrite_set thy' "rational_erls" false rls' e186c'))
neuper@37906
   293
    handle e => print_exn e;
neuper@37906
   294
val t = (term_of o the o (parse thy)) e186c';
neuper@37906
   295
atomt t;
neuper@37906
   296
neuper@37906
   297
print("\n\nexample 187:\n");
neuper@37906
   298
print("a)\n");
neuper@37906
   299
val e187a'="(12 * x * y) / (8 * y^^^2 )";
neuper@37906
   300
val e187a = the (rewrite_set thy' "rational_erls" false rls' e187a');
neuper@37906
   301
print("b)\n");
neuper@37906
   302
val e187b'="(8 * x^^^2 * y * z ) / (18 * x * y^^^2 * z )";
neuper@37906
   303
val e187b = the (rewrite_set thy' "rational_erls" false rls' e187b');
neuper@37906
   304
print("c)\n");
neuper@37906
   305
val e187c'="(9 * x^^^5 * y^^^2 * z^^^4) / (15 * x^^^6 * y^^^3 * z )";
neuper@37906
   306
val e187c = the (rewrite_set thy' "rational_erls" false rls' e187c');
neuper@37906
   307
neuper@37906
   308
print("\n\nexample 188:\n");
neuper@37906
   309
print("a)\n");
neuper@37906
   310
val e188a'="(8 * x + -8) / (9 * x + -9 )";
neuper@37906
   311
val e188a = the (rewrite_set thy' "rational_erls" false rls' e188a');
neuper@37926
   312
val SOME (t,_) = rewrite_set thy' "rational_erls" false mp "(8*((-1) + x))/(9*((-1) + x))";
neuper@37906
   313
if t="((-8) + 8 * x) / ((-9) + 9 * x)"then()
neuper@38031
   314
else error "rationals.sml: e188a new behaviour";
neuper@37906
   315
print("b)\n");
neuper@37906
   316
val e188b'="(5 * x + -15) / (6 * x + -18 )";
neuper@37906
   317
val e188b = the (rewrite_set thy' "rational_erls" false rls' e188b');
neuper@37906
   318
print("c)\n");
neuper@37906
   319
val e188c'="( a + -1 * b ) / ( b + -1 * a )";
neuper@37906
   320
val e188c = the (rewrite_set thy' "rational_erls" false rls' e188c');
neuper@37926
   321
val SOME (t,_) = rewrite_set thy' "rational_erls" false mp "((-1)*(b + (-1) * a))/(1*(b + (-1) * a))";
neuper@37906
   322
if t="(a + -1 * b) / (b + -1 * a)"then()
neuper@38031
   323
else error "rationals.sml: e188c new behaviour";
neuper@37906
   324
neuper@37906
   325
print("\n\nexample 190:\n");
neuper@37906
   326
print("c)\n");
neuper@37906
   327
val e190c'="( 27 * a^^^3 + 9 * a^^^2 + 3 * a + 1 ) / ( 27 * a^^^3 + 18 * a^^^2 + 3 * a )";
neuper@37906
   328
val e190c = the (rewrite_set thy' "rational_erls" false rls' e190c');
neuper@37926
   329
val SOME (t,_) = rewrite_set thy' "rational_erls" false mp "((1 + 9 * a ^^^ 2)*(1 + 3 * a))/((3 * a + 9 * a ^^^ 2)*(1 + 3 * a))";
neuper@37906
   330
if t="(1 + (3 * a + (27 * a ^^^ 3 + 9 * a ^^^ 2))) /\n(3 * a + (18 * a ^^^ 2 + 27 * a ^^^ 3))"then()
neuper@37906
   331
(*TERMORDER               ~~~~~~~       ~~~~~~~*)
neuper@38031
   332
else error "rationals.sml: e190c new behaviour";
neuper@37906
   333
neuper@37906
   334
print("\n\nexample 191:\n");
neuper@37906
   335
print("a)\n");
neuper@37906
   336
val e191a'="( x^^^2 + -1 * y^^^2 ) / ( x + y )";
neuper@37906
   337
val e191a = the (rewrite_set thy' "rational_erls" false rls' e191a'); 
neuper@37926
   338
val SOME (t,_) = rewrite_set thy' "rational_erls" false mp "((x + (-1) * y)*(x + y))/((1)*(x + y))";
neuper@37906
   339
if t="(x ^^^ 2 + -1 * y ^^^ 2) / (x + y)"then()
neuper@38031
   340
else error "rationals.sml: e191a new behaviour";
neuper@37906
   341
print("c)\n");
neuper@37906
   342
val e191c'="( 9 * x^^^2 + -30 * x + 25 ) / ( 9 * x^^^2 + -25 )";
neuper@37906
   343
val e191c = the (rewrite_set thy' "rational_erls" false rls' e191c');
neuper@37926
   344
val SOME (t,_) = rewrite_set thy' "rational_erls" false mp "(((-5) + 3 * x)*((-5) + 3 * x))/((5 + 3 * x)*((-5) + 3 * x))";
neuper@37906
   345
if t="(25 + ((-30) * x + 9 * x ^^^ 2)) / ((-25) + 9 * x ^^^ 2)"then()
neuper@38031
   346
else error "rationals.sml: 'e191c' new behaviour";
neuper@37906
   347
neuper@37906
   348
print("\n\nexample 192:\n");
neuper@37906
   349
print("b)\n");
neuper@37906
   350
val e192b'="( 7 * x^^^3 + -1 * x^^^2 * y ) / ( 7 * x * y^^^2 + -1 *  y^^^3 )";
neuper@37906
   351
val e192b = the (rewrite_set thy' "rational_erls" false rls' e192b');
neuper@37926
   352
val SOME (t,_) = rewrite_set thy' "rational_erls" false mp "((x ^^^ 2)*(7 * x + (-1) * y))/((y ^^^ 2)*(7 * x + (-1) * y))";
neuper@37906
   353
if t="(7 * x ^^^ 3 + -1 * (y * x ^^^ 2)) / (-1 * y ^^^ 3 + 7 * (x * y ^^^ 2))"then()
neuper@37906
   354
(*TERMORDER                ~~~~~*)
neuper@38031
   355
else error "rationals.sml: 'e192b' new behaviour";
neuper@37906
   356
neuper@37906
   357
print("\n\nexample 193:\n");
neuper@37906
   358
print("a)\n");
neuper@37906
   359
val e193a'="( x^^^2 + -6 * x + 9 ) / ( x^^^2 + -9 )";
neuper@37906
   360
val e193a = the (rewrite_set thy' "rational_erls" false rls' e193a');
neuper@37906
   361
print("b)\n");
neuper@37906
   362
val e193b'="( x^^^2 + -8 * x + 16 ) / ( 2 * x^^^2 + -32 )";
neuper@37906
   363
val e193b = the (rewrite_set thy' "rational_erls" false rls' e193b');
neuper@37906
   364
print("c)\n");
neuper@37906
   365
val e193c'="( 2 * x + -50 * x^^^3 ) / ( 25 * x^^^2 + -10 * x + 1 )";
neuper@37926
   366
val SOME(t,_) = rewrite_set thy' "rational_erls" false rls' e193c';
neuper@37906
   367
--------------------------------15.10.02---*)
neuper@37906
   368
neuper@37906
   369
neuper@37906
   370
(*---------- WN: 10.9.02:
neuper@37906
   371
ML> val e204a = the (rewrite_set thy' "rational_erls" false rls' e204a');
neuper@37906
   372
*** RATIONALS_STEP_CANCEL_EXCEPTION: Invalid fraction                           
neuper@37906
   373
print("\n\nexample 204:\n");
neuper@37906
   374
print("a)\n");
neuper@37906
   375
val e204a'="((5 * x) / 9) + ((3 * x) / 9) + (x / 9)";
neuper@37906
   376
val e204a = the (rewrite_set thy' "rational_erls" false rls' e204a');
neuper@37906
   377
print("b)\n");
neuper@37906
   378
val e204b'="5 / x + -3 / x + -1 / x";
neuper@37906
   379
val e204b = the (rewrite_set thy' "rational_erls" false rls' e204b');
neuper@37906
   380
neuper@37906
   381
print("\n\nexample 205:\n");
neuper@37906
   382
print("a)\n");
neuper@37906
   383
val e205a'="((4 * x + 7) / 8) + ((4 * x + 3) / 8)";
neuper@37906
   384
val e205a = the (rewrite_set thy' "rational_erls" false rls' e205a');
neuper@37906
   385
print("b)\n");
neuper@37906
   386
val e205b'="((5 * x + 2) / 3) + ((-2 * x + 1) / 3)";
neuper@37906
   387
val e205b = the (rewrite_set thy' "rational_erls" false rls' e205b');
neuper@37906
   388
neuper@37906
   389
print("\n\nexample 206:\n");
neuper@37906
   390
print("a)\n");
neuper@37906
   391
val e206a'="((5 * x + 4) / (2 * x + -1)) + ((9 * x + 5) / (2 * x + -1))";
neuper@37906
   392
val e206a = the (rewrite_set thy' "rational_erls" false rls' e206a'); 
neuper@37906
   393
print("b)\n");
neuper@37906
   394
val e206b'="((17 * x + -23) / (5 * x + 4)) + ((-25 + -17 * x) / (5 * x + 4))";
neuper@37906
   395
val e206b = the (rewrite_set thy' "rational_erls" false rls' e206b');
neuper@37906
   396
neuper@37906
   397
print("\n\nexample 207:\n");
neuper@37906
   398
val e207'="((3 * x * y + 3 * y) / (x * y)) + ((5 * x * y + 7 * y) / (x * y)) + ((9 * x * y + -2 * y) / (x * y)) + ((x * y + 4 * y) / (x * y)) ";
neuper@37906
   399
val e207 = the (rewrite_set thy' "rational_erls" false rls' e207'); 
neuper@37906
   400
neuper@37906
   401
print("\n\nexample 208:\n");
neuper@37906
   402
val e208'="((3 * x + 2) / (x + 2)) + ((5 * x + -1) / (x + 2)) + ((-7 * x + -3) / (x + 2)) + ((-1 * x + -3) / (x + 2)) ";
neuper@37906
   403
val e208 = the (rewrite_set thy' "rational_erls" false rls' e208'); 
neuper@37906
   404
neuper@37906
   405
print("\n\nexample 209:\n");
neuper@37906
   406
val e209'="((3 * x + -7 * y + 3 * z) / (4)) + ((2 * x + 17 * y + 10 * z) / (4)) + ((-1 * x + 2 * y + z) / (4)) ";
neuper@37906
   407
val e209 = the (rewrite_set thy' "rational_erls" false rls' e209'); 
neuper@37906
   408
neuper@37906
   409
print("\n\nexample 210:\n");
neuper@37906
   410
val e210'="((2 * x + 3 +  -1 * x^^^2) / (5 * x)) + ((5 * x^^^2 + -2 * x + 1) / (5 * x)) + ((-3 * x^^^2 + -2 * x + 1) / (5 * x)) + ((-1 * x^^^2 + -3 * x + -5) / (5 * x)) ";
neuper@37906
   411
val e210 = the (rewrite_set thy' "rational_erls" false rls' e210'); 
neuper@37906
   412
neuper@37906
   413
print("\n\nexample 211:\n");
neuper@37906
   414
print("a)\n"); 
neuper@37906
   415
val e211a'="((b) / (a + -1 * b)) + ((-1 * a) / (a + -1 * b))"; 
neuper@37906
   416
val e211a = the (rewrite_set thy' "rational_erls" false rls' e211a'); 
neuper@37906
   417
print("b)\n");
neuper@37906
   418
val e211b'="((b) / (b^^^2 + -1 * a^^^2)) + ((-1 * a) / (b^^^2 + -1 * a^^^2))";
neuper@37906
   419
val e211b = the (rewrite_set thy' "rational_erls" false rls' e211b');
neuper@37906
   420
neuper@37906
   421
print("\n\nexample 212:\n");
neuper@37906
   422
print("a)\n");
neuper@37906
   423
val e212a'="((4) / (x)) + ((-3) / (y)) + -1";
neuper@37906
   424
val e212a = the (rewrite_set thy' "rational_erls" false rls' e212a'); 
neuper@37906
   425
print("b)\n");
neuper@37906
   426
val e212b'="((4) / (x)) + ((-5) / (y)) + ((6) / (x*y))";
neuper@37906
   427
val e212b = the (rewrite_set thy' "rational_erls" false rls' e212b');
neuper@37906
   428
neuper@37906
   429
print("\n\nexample 213:\n");
neuper@37906
   430
print("a)\n"); 
neuper@37906
   431
val e213a'="((5 * x) / (3 * y^^^2)) + ((19 * z) / (6 * x * y)) +  ((-2 * x) / (3 * y^^^2)) + ((7 * y^^^2) / (6 * x^^^2)) ";
neuper@37906
   432
val e213a = the (rewrite_set thy' "rational_erls" false rls' e213a'); 
neuper@37906
   433
print("b)\n"); 
neuper@37906
   434
val e213b'="((2 * b) / (3 * a^^^2)) + ((3 * c) / (7 * a * b)) +  ((4 * b) / (3 * a^^^2)) + ((3 * a) / (7 * b^^^2))";
neuper@37906
   435
val e213b = the (rewrite_set thy' "rational_erls" false rls' e213b');
neuper@37906
   436
neuper@37906
   437
print("\n\nexample 214:\n");
neuper@37906
   438
print("a)\n");
neuper@37906
   439
val e214a'="((3 * x + 2 * y + 2 * z) / (4)) + ((-5 * x + -3 * y) / (3)) + ((x + y + -2 * z) / (2))";
neuper@37906
   440
val e214a = the (rewrite_set thy' "rational_erls" false rls' e214a'); 
neuper@37906
   441
print("b)\n");
neuper@37906
   442
val e214b'="((5 * x + 2 * y + z) / (2)) + ((-7 * x + -3 * y) / (3)) + ((3 * x + 6 * y + -1 * z) / (12))";
neuper@37906
   443
val e214b = the (rewrite_set thy' "rational_erls" false rls' e214b');
neuper@37906
   444
neuper@37906
   445
print("\n\nexample 216:\n");
neuper@37906
   446
print("a)\n"); 
neuper@37906
   447
val e216a'="((2 * b + 3 * c) / (a * c)) + ((3 * a + b) / (a * b)) + ((-2 * b^^^2 + -3 * a * c) / (a * b * c))";
neuper@37906
   448
val e216a = the (rewrite_set thy' "rational_erls" false rls' e216a');  
neuper@37906
   449
print("b)\n");
neuper@37906
   450
val e216b'="((2 * a + 3 * b) / (b * c)) + ((3 * c + a) / (a * c)) + ((-2 * a^^^2 + -3 * b * c) / (a * b * c))";
neuper@37906
   451
val e216b = the (rewrite_set thy' "rational_erls" false rls' e216b');
neuper@37906
   452
neuper@37906
   453
print("\n\nexample 217:\n");
neuper@37906
   454
val e217'="((z + -1) / (z)) + ((3 * z ^^^2 + -6 * z + 5) / (z^^^2)) + ((-4 * z^^^3 + 7 * z^^^2 + -5 * z + 5) / (z^^^3))";
neuper@37906
   455
val e217 = the (rewrite_set thy' "rational_erls" false rls' e217'); 
neuper@37906
   456
neuper@37906
   457
print("\n\nexample 218:\n");
neuper@37906
   458
val e218'="((9 * a^^^3 - 5 * a^^^2 + 2 * a + 8) / (108 * a^^^4)) + ((-5 * a + 3 * a^^^2 + 4) / (8 * a^^^3)) + ((-261 * a^^^3 + 19 * a^^^2 + -112 * a + 16) / (216 * a^^^4))";
neuper@37906
   459
val e218 = the (rewrite_set thy' "rational_erls" false rls' e218'); 
neuper@37906
   460
neuper@37906
   461
print("\n\nexample 219:\n");
neuper@37906
   462
print("a)\n");
neuper@37906
   463
val e219a'="((1) / (y + 1)) + ((1) / (y + 2)) + ((1) / (y + 3))";
neuper@37906
   464
val e219a = the (rewrite_set thy' "rational_erls" false rls' e219a');
neuper@37906
   465
print("b)\n");
neuper@37906
   466
val e219b'="((1) / (x + 1)) + ((1) / (x + 2)) + ((-2) / (x + 3))";
neuper@37906
   467
val e219b = the (rewrite_set thy' "rational_erls" false rls' e219b'); 
neuper@37906
   468
neuper@37906
   469
print("\n\nexample 220:\n");
neuper@37906
   470
print("a)\n");
neuper@37906
   471
val e220a'="((17) / (5 * r + -2)) + ((-13) / (2 * r + 3)) + ((4) / (3 * r + -5))";
neuper@37906
   472
val e220a = the (rewrite_set thy' "rational_erls" false rls' e220a');
neuper@37906
   473
print("b)\n");
neuper@37906
   474
val e220b'="((20 * a) / (a + -3)) + ((-19 * a) / (a + -4)) + ((a) / (a + -5))";
neuper@37906
   475
val e220b = the (rewrite_set thy' "rational_erls" false rls' e220b'); 
neuper@37906
   476
neuper@37906
   477
print("\n\nexample 221:\n");
neuper@37906
   478
print("a)\n");
neuper@37906
   479
val e221a'="((a + b) / (a + -1 * b)) + ((a + -1 * b) / (a + b))";
neuper@37906
   480
val e221a = the (rewrite_set thy' "rational_erls" false rls' e221a');
neuper@37906
   481
print("b)\n");
neuper@37906
   482
val e221b'="((x + -1 * y) / (x + y)) + ((x + y) / (x + -1 * y)) ";
neuper@37906
   483
val e221b = the (rewrite_set thy' "rational_erls" false rls' e221b');
neuper@37906
   484
neuper@37906
   485
print("\n\nexample 222:\n");
neuper@37906
   486
print("a)\n");
neuper@37906
   487
val e222a'="((1 + -1 * x) / (1 + x)) + ((-1 + -1 * x) / (1 + -1 * x)) + ((4 * x) / (1 + -1 * x^^^2))";
neuper@37906
   488
val e222a = the (rewrite_set thy' "rational_erls" false rls' e222a');
neuper@37906
   489
print("b)\n");
neuper@37906
   490
val e222b'="((1 + x ) / (1 + -1 * x)) + ((-1 + x) / (1 + x)) + ((2 * x) / (1 + -1 * x^^^2))";
neuper@37906
   491
val e222b = the (rewrite_set thy' "rational_erls" false rls' e222b'); 
neuper@37906
   492
neuper@37906
   493
print("\n\nexample 225:\n");
neuper@37906
   494
print("a)\n");
neuper@37906
   495
val e225a'="((6 * a) / (a^^^2 + -64)) + ((a + 2) / (2 * a + 16)) + ((-1) / (2))";
neuper@37906
   496
val e225a = the (rewrite_set thy' "rational_erls" false rls' e225a');
neuper@37906
   497
print("b)\n");
neuper@37906
   498
val e225b'="((a + 2 ) / (2 * a + 12)) + ((4 * a) / (a^^^2 + -36)) + ((-1) / (2))";
neuper@37906
   499
val e225b = the (rewrite_set thy' "rational_erls" false rls' e225b'); 
neuper@37906
   500
neuper@37906
   501
print("\n\nexample 226:\n");
neuper@37906
   502
print("a)\n");
neuper@37906
   503
val e226a'="((35 * z) / (49 * z^^^2 + -4)) + -1 + ((14 * z + -1) / (14 * z + 4)) ";
neuper@37906
   504
val e226a = the (rewrite_set thy' "rational_erls" false rls' e226a');
neuper@37906
   505
print("b)\n"); 
neuper@37906
   506
val e226b'="((45 * a * b) / (25 * a^^^2 + -9 * b^^^2)) + ((20 * a + 3 * b) / (10 * a + 6 * b))  + -2";
neuper@37906
   507
val e226b = the (rewrite_set thy' "rational_erls" false rls' e226b');  
neuper@37906
   508
neuper@37906
   509
print("\n\nexample 227:\n");
neuper@37906
   510
print("a)\n");
neuper@37906
   511
val e227a'="((6 * z + 11) / (6 * z + 14)) + ((9 * z ) / (9 * z^^^2 + -49)) + -1 ";
neuper@37906
   512
val e227a = the (rewrite_set thy' "rational_erls" false rls' e227a');
neuper@37906
   513
print("b)\n");
neuper@37906
   514
val e227b'="((16 * a + 37 * b) / (4 * a + 10 * b)) + ((6 * a * b) / (4 * a^^^2 + -25 * b^^^2)) + -4 ";
neuper@37906
   515
val e227b = the (rewrite_set thy' "rational_erls" false rls' e227b'); 
neuper@37906
   516
neuper@37906
   517
print("\n\nexample 228:\n");
neuper@37906
   518
print("a)\n");
neuper@37906
   519
val e228a'="((7 * a + 11) / (3 * a^^^2 + -3)) + ((-2 * a + -1) / (a^^^2 + -1 * a)) + ((-1) / (3 * a + 3))";
neuper@37906
   520
val e228a = the (rewrite_set thy' "rational_erls" false rls' e228a'); 
neuper@37906
   521
print("b)\n");
neuper@37906
   522
val e228b'="((11 * z + 2 * b) / (4 * b * z + -8 * b^^^2)) + ((-8 * z) / (z^^^2 + -4 * b^^^2)) + ((-9 * z + -2 * b) / (4 * b * z + 8 * b^^^2))";
neuper@37906
   523
val e228b = the (rewrite_set thy' "rational_erls" false rls' e228b');  
neuper@37906
   524
neuper@37906
   525
neuper@37906
   526
print("\n\nexample 229:\n");
neuper@37906
   527
print("a)\n");
neuper@37906
   528
val e229a'="((5 * x^^^2 + y) / (x + 2 * y)) + ((-8 * x^^^3 + 4 * x^^^2 * y + 3 * x * y) / (x^^^2 + -4 * y^^^2)) + ((3 * x^^^2 + -4 * y) / (x + -2 * y))";
neuper@37906
   529
val e229a = the (rewrite_set thy' "rational_erls" false rls' e229a'); 
neuper@37906
   530
print("b)\n");
neuper@37906
   531
val e229b'="((7 * x^^^2 + y) / (x + 3 * y)) + ((-24 * x^^^2 * y + 5 * x * y + 21 * y^^^2) / (x^^^2 + -9 * y^^^2)) + ((4 * x^^^2 + -6 * y) / (x + -3 * y))"; 
neuper@37906
   532
val e229b = the (rewrite_set thy' "rational_erls" false rls' e229b'); 
neuper@37906
   533
 
neuper@37906
   534
print("\n\nexample 230:\n");
neuper@37906
   535
print("a)\n"); 
neuper@37906
   536
val e230a'="((5 * x^^^2 + y) / (2 * x + y)) + ((-16 * x^^^3 + 2 * x^^^2 * y + 6 * x * y) / (4 * x^^^2 + -1 * y^^^2)) + ((3 * x^^^2 + -4 * y) / (2 * x + -1 * y))";
neuper@37906
   537
val e230a = the (rewrite_set thy' "rational_erls" false rls' e230a');
neuper@37906
   538
print("b)\n");
neuper@37906
   539
val e230b'="((7 * x^^^2 + y) / (3 * x + y)) + ((-3 * x^^^3  + 15 * x * y + -7 * x^^^2 * y + 7 * y^^^2) / (9 * x^^^2 + -1 * y^^^2)) + ((4 * x^^^2 + -6 * y) / (3 * x + -1 * y))";
neuper@37906
   540
val e230b = the (rewrite_set thy' "rational_erls" false rls' e230b');
neuper@37906
   541
neuper@37906
   542
print("\n\nexample 231:\n");
neuper@37906
   543
print("a)\n");
neuper@37906
   544
val e231a'="((2 * x + 5 * y) / (x)) + ((2 * x^^^3 + -5 * y^^^3 + 3 * x * y^^^2) / (x^^^3 + -2 * x^^^2 * y + x * y^^^2)) + ((-3 * x + -6 * y) / (x + -1 * y))";
neuper@37906
   545
val e231a = the (rewrite_set thy' "rational_erls" false rls' e231a'); 
neuper@37906
   546
print("b)\n");
neuper@37906
   547
val e231b'="((6 * x + 2 * y) / (x)) + ((6 * x^^^2 * y + -4 * x * y^^^2 + -2 * y^^^3) / (x^^^3 + -2 * x^^^2 * y + x * y^^^2)) + ((-5 * x + -3 * y) / (x + -1 * y))";
neuper@37906
   548
val e231b = the (rewrite_set thy' "rational_erls" false rls' e231b');
neuper@37906
   549
neuper@37906
   550
print("\n\nexample 232:\n");
neuper@37906
   551
print("a)\n");
neuper@37906
   552
val e232a'="((2 * x + 3 * y) / (x)) + ((4 * x^^^3 + -1 * x * y^^^2 + -3 * y^^^3) / (x^^^3 + -2 * x^^^2 * y + x * y^^^2)) + ((-5 * x + -6 * y) / (x + -1 * y))";
neuper@37906
   553
val e232a = the (rewrite_set thy' "rational_erls" false rls' e232a'); 
neuper@37906
   554
print("b)\n");
neuper@37906
   555
val e232b'="((5 * x + 2 * y) / (x)) + ((2 * x^^^3 + -3 * x * y^^^2 + 3 * x^^^2 * y + -2 * y^^^3) / (x^^^3 + -2 * x^^^2 * y + x * y^^^2)) + ((-6 * x + -3 * y) / (x + -1 * y))";
neuper@37906
   556
val e232b = the (rewrite_set thy' "rational_erls" false rls' e232b');
neuper@37906
   557
neuper@37906
   558
print("\n\nexample 233:\n");
neuper@37906
   559
print("a)\n");
neuper@37906
   560
val e233a'="((5 * x + 6 * y) / (x)) + ((5 * x * y^^^2 + -6 * y^^^3 + -2 * x^^^3 + 3 * x^^^2 * y) / (x^^^3 + -2 * x^^^2 * y + x * y^^^2)) + ((-2 * x + -3 * y) / (x + -1 * y))";
neuper@37906
   561
val e233a = the (rewrite_set thy' "rational_erls" false rls' e233a'); 
neuper@37906
   562
print("b)\n");
neuper@37906
   563
val e233b'="((6 * x + 5 * y) / (x)) + ((4 * x^^^2 * y + 3 * x * y^^^2 + -5 * y^^^3 + -2 * x^^^3) / (x^^^3 + -2 * x^^^2 * y + x * y^^^2)) + ((-3 * x + -2 * y) / (x + -1 * y))";
neuper@37906
   564
val e233b = the (rewrite_set thy' "rational_erls" false rls' e233b');
neuper@37906
   565
neuper@37906
   566
print("\n\nexample 234:\n");
neuper@37906
   567
print("a)\n");
neuper@37906
   568
val e234a'="((5 * a + b) / (2 * a * b + -2 * b^^^2)) + ((-3 * a + -1 * b) / (2 * a * b + 2 * b^^^2)) + ((-2 * a) / (a^^^2 + -1 * b^^^2))";
neuper@37906
   569
val e234a = the (rewrite_set thy' "rational_erls" false rls' e234a'); 
neuper@37906
   570
print("b)\n"); 
neuper@37906
   571
val e234b'="((5 * a + 3 * b) / (6 * a * b + -18 * b^^^2)) + ((-3 * a + -3 * b) / (6 * a * b + 18 * b^^^2)) + ((-2 * a) / (a^^^2 + -9 * b^^^2)) ";
neuper@37906
   572
val e234b = the (rewrite_set thy' "rational_erls" false rls' e234b');  
neuper@37906
   573
neuper@37906
   574
print("\n\nexample 235:\n");
neuper@37906
   575
print("a)\n");
neuper@37906
   576
val e235a'="((10 * x + 3 * y) / (12 * x * y + -18 * y^^^2)) + ((-6 * x + -3 * y) / (12 * x * y + 18 * y^^^2)) + ((-4 * x) / (4 * x^^^2 + -9 * y^^^2))";
neuper@37906
   577
val e235a = the (rewrite_set thy' "rational_erls" false rls' e235a'); 
neuper@37906
   578
print("b)\n"); 
neuper@37906
   579
val e235b'="((8 * a + b) / (4 * a * b + -2 * b^^^2)) + ((-4 * a + -1 * b) / (4 * a * b + 2 * b^^^2)) + ((-2 * a) / (4 * a^^^2 + -1 * b^^^2)) ";
neuper@37906
   580
val e235b = the (rewrite_set thy' "rational_erls" false rls' e235b');  
neuper@37906
   581
 
neuper@37906
   582
print("\n\nexample 236:\n");
neuper@37906
   583
print("a)\n"); 
neuper@37906
   584
val e236a'="((8 * a + 5 * b) / (20 * a * b + -50 * b^^^2)) + ((-4 * a + -5 * b) / (20 * a * b + 50 * b^^^2)) + ((-2 * a) / (4 * a^^^2 + -25 * b^^^2))";
neuper@37906
   585
val e236a = the (rewrite_set thy' "rational_erls" false rls' e236a');  
neuper@37906
   586
print("b)\n");   
neuper@37906
   587
val e236b'="((24 * x + y) / (6 * x * y + -2 * y^^^2)) + ((-18 * x + -1 * y) / (6 * x * y + 2 * y^^^2)) + ((-15 * x) / (9 * x^^^2 + -1 * y^^^2)) ";
neuper@37906
   588
val e236b = the (rewrite_set thy' "rational_erls" false rls' e236b');  
neuper@37906
   589
neuper@37906
   590
print("\n\nexample heuberger:\n");
neuper@37906
   591
val eheu'="(x^^^4 + x * y + x^^^3 * y + y^^^2) / (x + 5 * x^^^2 + y + 5 * x * y + x^^^2 * y^^^3 + x * y^^^4)";
neuper@37906
   592
val eheu = the (rewrite_set thy' "rational_erls" false rls' eheu');
neuper@37906
   593
neuper@37906
   594
print("\n\nexample stiefel:\n");
neuper@37906
   595
val est1'="(7) / (-14) + (-2) / (4)";
neuper@37906
   596
val est1 = the (rewrite_set thy' "rational_erls" false rls' est1');
neuper@37906
   597
if est1 = ("(-1) / 1",[]) then ()
neuper@38031
   598
else error "new behaviour in rationals.sml: est1'";
neuper@37906
   599
-------------------------------------------------------------------------*)
neuper@37906
   600
neuper@37906
   601
neuper@37906
   602
(*
neuper@37906
   603
   val t = (term_of o the o (parse thy))
neuper@37906
   604
	    "(9 - x ^^^ 2) / (9 - 6 * x + x ^^^ 2)";
neuper@37926
   605
   val SOME (t',_) = factor_expanded_ thy t;
neuper@37906
   606
   term2str t';
neuper@37906
   607
 
neuper@37906
   608
   "((-3) - x) * ((-3) + x) / (((-3) + x) * ((-3) + x))"
neuper@37906
   609
   "(3 + x) * (3 - x) / ((3 - x) * (3 - x))"
neuper@37906
   610
*)
neuper@37906
   611
neuper@37906
   612
neuper@37906
   613
neuper@37906
   614
(*WN.28.8.02: tests for the 'reverse-rewrite' functions:
neuper@37906
   615
  these are defined in Rationals.ML and stored in 
neuper@37906
   616
  the 'reverse-ruleset' cancel*)
neuper@37906
   617
neuper@37906
   618
(*the term for which reverse rewriting is demonstrated*)
neuper@37906
   619
  val t = (term_of o the o (parse thy))
neuper@37906
   620
	      "(9 - x ^^^ 2) / (9 + 6 * x + x ^^^ 2)";
neuper@37906
   621
  val Rrls {scr=Rfuns {init_state=ini,locate_rule=loc,
neuper@37906
   622
  		       next_rule=nex,normal_form=nor,...},...} = cancel;
neuper@37906
   623
neuper@37906
   624
(*normal_form produces the result in ONE step*)
neuper@37926
   625
  val SOME (t',_) = nor t;
neuper@37906
   626
  term2str t';
neuper@37906
   627
neuper@37906
   628
(*initialize the interpreter state used by the 'me'*)
neuper@37906
   629
  val (t,_,revsets,_) = ini t;
neuper@37906
   630
neuper@37906
   631
(*find the rule 'r' to apply to term 't'*)
neuper@37926
   632
  val SOME r = nex revsets t;
neuper@37906
   633
  (*val r = Thm ("sym_#mult_2_3","6 = 2 * 3") : rule*)
neuper@37906
   634
neuper@37906
   635
(*check, if the rule 'r' applied by the user to 't' belongs to the ruleset;
neuper@37906
   636
  if the rule is OK, the term resulting from applying the rule is returned,too;
neuper@37906
   637
  there might be several rule applications inbetween,
neuper@37906
   638
  which are listed after the thead in reverse order*)
neuper@37906
   639
  val (r,(t,asm))::_ = loc revsets t r;
neuper@37906
   640
  term2str t;
neuper@37906
   641
  "(9 - x ^^^ 2) / (3 ^^^ 2 + 6 * x + x ^^^ 2)";
neuper@37906
   642
neuper@37906
   643
(*find the next rule to apply*)
neuper@37926
   644
  val SOME r = nex revsets t;
neuper@37906
   645
  (*val r = Thm ("sym_#power_3_2","9 = 3 ^^^ 2") : rule*)
neuper@37906
   646
neuper@37906
   647
(*check the next rule*)
neuper@37906
   648
  val (r,(t,asm))::_ = loc revsets t r;
neuper@37906
   649
  term2str t;
neuper@37906
   650
  "(3 ^^^ 2 - x ^^^ 2) / (3 ^^^ 2 + 6 * x + x ^^^ 2)";
neuper@37906
   651
neuper@37906
   652
(*find and check the next rules, rewrite*)
neuper@37926
   653
  val SOME r = nex revsets t;
neuper@37906
   654
  val (r,(t,asm))::_ = loc revsets t r;
neuper@37906
   655
  term2str t;
neuper@37906
   656
  "(3 ^^^ 2 - x ^^^ 2) / (3 ^^^ 2 + 2 * 3 * x + x ^^^ 2)";
neuper@37906
   657
neuper@37926
   658
  val SOME r = nex revsets t;
neuper@37906
   659
  val (r,(t,asm))::_ = loc revsets t r;
neuper@37906
   660
  term2str t;
neuper@37906
   661
  "(3 - x) * (3 + x) / (3 ^^^ 2 + 2 * 3 * x + x ^^^ 2)";
neuper@37906
   662
neuper@37926
   663
  val SOME r = nex revsets t;
neuper@37906
   664
  val (r,(t,asm))::_ = loc revsets t r;
neuper@37906
   665
  term2str t;
neuper@37906
   666
  "(3 - x) * (3 + x) / ((3 + x) * (3 + x))";
neuper@37906
   667
neuper@37926
   668
  val SOME r = nex revsets t;
neuper@37906
   669
  val (r,(t,asm))::_ = loc revsets t r;
neuper@37906
   670
  val ss = term2str t;
neuper@37906
   671
  if ss = "(3 - x) / (3 + x)" then ()
neuper@38031
   672
  else error "rational.sml: new behav. in rev-set cancel";
neuper@37906
   673
  terms2str asm; 
neuper@37906
   674
neuper@37906
   675
neuper@37906
   676
neuper@37906
   677
(*WN.11.9.02: the 'reverse-ruleset' cancel*)
neuper@37906
   678
neuper@37906
   679
  (*the term for which reverse rewriting is demonstrated*)
neuper@37906
   680
  val t = (term_of o the o (parse thy))
neuper@37906
   681
	      "(9 + (-1)*x^^^2) / (9 + ((-6)*x + x^^^2))";
neuper@37906
   682
  val Rrls {scr=Rfuns {init_state=ini,locate_rule=loc,
neuper@37906
   683
  		       next_rule=nex,normal_form=nor,...},...} = cancel;
neuper@37906
   684
  (*normal_form produces the result in ONE step*)
neuper@37926
   685
  val SOME (t',_) = nor t;
neuper@37906
   686
  term2str t';
neuper@37906
   687
  (*initialize the interpreter state used by the 'me'*)
neuper@37906
   688
  val (t,_,revsets,_) = ini t;
neuper@37906
   689
(*
neuper@37906
   690
 val [rs] = revsets;
neuper@37906
   691
 filter_out (eq_Thms ["sym_real_add_zero_left",
neuper@37906
   692
		      "sym_real_mult_0",
neuper@37906
   693
		      "sym_real_mult_1"]) rs;
neuper@37906
   694
neuper@37906
   695
 10.10.02: dieser Fall terminiert nicht (make_poly enth"alt zu viele rules)
neuper@37926
   696
  val SOME r = nex revsets t;
neuper@37906
   697
  val (r,(t,asm))::_ = loc revsets t r;
neuper@37906
   698
  term2str t;
neuper@37906
   699
neuper@37926
   700
  val SOME r = nex revsets t;
neuper@37906
   701
  val (r,(t,asm))::_ = loc revsets t r;
neuper@37906
   702
  term2str t;
neuper@37906
   703
neuper@37906
   704
 ------ revset ----------------------------------------------------
neuper@37906
   705
/// [Thm ("sym_real_add_zero_left","?z = 0 + ?z"),
neuper@37906
   706
///  Thm ("sym_real_mult_0","0 = 0 * ?z"),
neuper@37906
   707
!    Thm ("sym_#mult_2_(-3)","(-6) * x = 2 * ((-3) * x)"),
neuper@37906
   708
!    Thm ("sym_#add_(-3)_3","0 = (-3) + 3"),
neuper@37906
   709
 
neuper@37906
   710
?    Thm ("sym_real_num_collect_assoc",
neuper@37906
   711
       "[| ?l is_const; ?m is_const |]
neuper@37906
   712
  	==> (?l + ?m) * ?n + ?k = ?l * ?n + (?m * ?n + ?k)"),
neuper@37906
   713
OK   Thm ("sym_real_mult_2_assoc","2 * ?z1.0 + ?k = ?z1.0 + (?z1.0 + ?k)"),
neuper@37906
   714
OK   Thm ("sym_real_add_left_commute","?y + (?x + ?z) = ?x + (?y + ?z)"),
neuper@37906
   715
///  Thm ("sym_real_mult_1","?z = 1 * ?z"),
neuper@37906
   716
!    Thm ("sym_#power_3_2","9 = 3 ^^^ 2"),
neuper@37906
   717
!    Thm ("sym_#mult_-1_-1","1 * x ^^^ 2 = -1 * (-1 * x ^^^ 2)"),
neuper@37906
   718
!    Thm ("sym_#mult_-1_3","(-3) * x = -1 * (3 * x)"),
neuper@37906
   719
OK   Thm ("realpow_twoI","?r1 ^^^ 2 = ?r1 * ?r1"  [.]),
neuper@37906
   720
OK   Thm ("sym_real_add_assoc",
neuper@37906
   721
      "?z1.0 + (?z2.0 + ?z3.0) = ?z1.0 + ?z2.0 + ?z3.0"),
neuper@37906
   722
OK   Thm
neuper@37906
   723
     ("sym_real_mult_assoc","?z1.0 * (?z2.0 * ?z3.0) = ?z1.0 * ?z2.0 * ?z3.0"),
neuper@37906
   724
OK   Thm ("sym_real_mult_left_commute",
neuper@37906
   725
      "?z2.0 * (?z1.0 * ?z3.0) = ?z1.0 * (?z2.0 * ?z3.0)"),
neuper@37906
   726
OK   Thm ("sym_real_mult_commute","?w * ?z = ?z * ?w"),
neuper@37906
   727
?    Thm ("sym_real_add_mult_distrib2",
neuper@37906
   728
      "?w * ?z1.0 + ?w * ?z2.0 = ?w * (?z1.0 + ?z2.0)"),
neuper@37906
   729
?    Thm ("sym_real_add_mult_distrib",
neuper@37906
   730
      "?z1.0 * ?w + ?z2.0 * ?w = (?z1.0 + ?z2.0) * ?w"),
neuper@37906
   731
OK   Thm ("real_mult_div_cancel2","?k ~= 0 ==> ?m * ?k / (?n * ?k) = ?m / ?n")]
neuper@37906
   732
 -------- revset ---------------------------------------------------- 
neuper@37906
   733
neuper@37906
   734
  val t = (term_of o the o (parse thy)) "(-6) * x";
neuper@37906
   735
  val t = (term_of o the o (parse thy)) 
neuper@37906
   736
	      "(9 + (-1)*x^^^2) / (9 + ((-6)*x + x^^^2))";
neuper@37906
   737
  val thm = (mk_thm thy "(-6) * x = 2 * ((-3) * x)") 
neuper@37906
   738
      handle e => print_exn e;
neuper@37926
   739
  val SOME (t',_) = rewrite_ thy e_rew_ord e_rls false thm t;     
neuper@37906
   740
  term2str t';
neuper@37906
   741
----------------------------------------------------------------------*)
neuper@37906
   742
neuper@37906
   743
neuper@37906
   744
neuper@37906
   745
(* SK: Testbeispiele --- WN kopiert Rational.ML -> rational.sml-----
neuper@37906
   746
neuper@37906
   747
val t1 = (term_of o the o (parse thy)) "((3 * x^^^2 + 6 *x + 3) / (2*x + 2))";
neuper@37926
   748
val SOME (t1',rest)= cancel_ thy t1;
neuper@37926
   749
val SOME (t1'',_)= factor_out_gcd_ thy t1;
neuper@37906
   750
print(term2str t1'^" + Einschr\"ankung: "^term2str (hd(rest)));
neuper@37906
   751
term2str t1'';
neuper@37906
   752
neuper@37906
   753
val t1 = (term_of o the o (parse thy)) "((-3 * x^^^2 + 6 *x - 3) / (2*x - 2))";
neuper@37926
   754
val SOME (t1',_)= cancel_ thy t1;
neuper@37926
   755
val SOME (t1'',_)= factor_expanded_ thy t1;
neuper@37906
   756
term2str t1';
neuper@37906
   757
term2str t1'';
neuper@37906
   758
neuper@37906
   759
val t2 = (term_of o the o (parse thy)) "((x+ (-1)) / (x + 1)) + ((x + 1) / (x + (-1)))";
neuper@37926
   760
val SOME (t2',_) = add_fractions_ thy t2;
neuper@37926
   761
val SOME (t2'',_) = common_nominators_ thy t2; 
neuper@37906
   762
term2str t2';
neuper@37906
   763
term2str t2'';
neuper@37906
   764
neuper@37906
   765
val t2 = (term_of o the o (parse thy)) "((x - 1) / (x + 1)) + ((x + 1) / (x - 1))";
neuper@37926
   766
val SOME (t2',_) = add_expanded_frac_ thy t2;
neuper@37926
   767
val SOME (t2'',_) = common_expanded_nom_ thy t2; 
neuper@37906
   768
term2str t2';
neuper@37906
   769
term2str t2'';
neuper@37906
   770
neuper@37906
   771
neuper@37906
   772
val t3 = (term_of o the o (parse thy)) "((1) / (2*x + 2)) + ((1) / (2*x + (-2))) + ((1) / ( x^^^2 + (-1)))+((1) / (x^^^2 + (-2)*x + 1))";
neuper@37926
   773
val SOME (t3',_) = common_nominators_ thy t3; 
neuper@37926
   774
val SOME (t3'',_) = add_fractions_ thy t3; 
neuper@37906
   775
(term2str t3');
neuper@37906
   776
(term2str t3'');
neuper@37906
   777
neuper@37906
   778
val t3 = (term_of o the o (parse thy)) "((1) / (2*x + 2)) + ((1) / (2*x - 2)) + ((1) / ( x^^^2 - 1))+((1) / (x^^^2 - 2 * x + 1))";
neuper@37926
   779
val SOME (t3',_) = common_expanded_nom_ thy t3; 
neuper@37926
   780
val SOME (t3'',_) = add_expanded_frac_ thy t3; 
neuper@37906
   781
(term2str t3');
neuper@37906
   782
(term2str t3'');
neuper@37906
   783
-------------------------------*)
neuper@37906
   784
neuper@37906
   785
(*
neuper@37926
   786
val SOME(t4,t5) = norm_rational_ thy t3;
neuper@37906
   787
term2str t4;
neuper@37906
   788
term2str (hd(t5));*)
neuper@37906
   789
neuper@37906
   790
(*val test1 = (term_of o the o (parse thy)) "1 - x^^^2 - 5 * x^^^5";
neuper@37906
   791
val test2 = (term_of o the o (parse thy)) "1 + (-1) * x ^^^ 2 + (-5) * x ^^^ 5";
neuper@37906
   792
val test2 = (term_of o the o (parse thy)) "1 - x";
neuper@37906
   793
val test2 = (term_of o the o (parse thy)) "1 + (-1) * x";
neuper@37906
   794
term2str(expanded2term(test1));
neuper@37906
   795
term2str(term2expanded(test2)); *)
neuper@37906
   796
neuper@37906
   797
neuper@37906
   798
neuper@37906
   799
(* WN kopiert 16.10.02 Rational.ML -> rational.sml-----vvv---*)
neuper@37906
   800
neuper@37906
   801
  val t=(term_of o the o (parse thy)) "(9 - x^^^2)/(9 - 6*x + x^^^2)";
neuper@37926
   802
  val SOME (t',_) = factout_ thy t;
neuper@37926
   803
  val SOME (t'',_) = cancel_ thy t;
neuper@37906
   804
  term2str t';
neuper@37906
   805
  term2str t'';
neuper@37906
   806
  "(3 + x) * (3 - x) / ((3 - x) * (3 - x))";
neuper@37906
   807
  "(3 + x) / (3 - x)";
neuper@37906
   808
  			   
neuper@37906
   809
  val t=(term_of o the o(parse thy))
neuper@37906
   810
	    "(9 - x^^^2) / (9 - 6*x + x^^^2) + 1 / (3 - x)";
neuper@37926
   811
  val SOME (t',_) = common_nominator_ thy t;
neuper@37926
   812
  val SOME (t'',_) = add_fraction_ thy t;
neuper@37906
   813
  term2str t';
neuper@37906
   814
  term2str t'';
neuper@37906
   815
  "(9 - x ^^^ 2) / ((3 - x) * (3 - x)) + 1 * (3 - x) / ((3 - x) * (3 - x))";
neuper@37906
   816
  "(4 + x) / (3 - x)";
neuper@37906
   817
neuper@37906
   818
  (*WN.16.10.02 hinzugef"ugt -----vv---*)
neuper@37906
   819
  val t=(term_of o the o(parse thy))
neuper@37906
   820
	    "(9 - x^^^2) / (9 - 6*x + x^^^2) + 1";
neuper@37926
   821
  val SOME (t',_) = common_nominator_ thy t;
neuper@37926
   822
  val SOME (t'',_) = add_fraction_ thy t;
neuper@37906
   823
  term2str t';
neuper@37906
   824
  term2str t'';
neuper@37906
   825
  "(9 - x ^^^ 2) / (9 - 6 * x + x ^^^ 2) +\
neuper@37906
   826
  \1 * (9 - 6 * x + x ^^^ 2) / (9 - 6 * x + x ^^^ 2)";
neuper@37906
   827
  "6 / (3 - x)";
neuper@37906
   828
neuper@37906
   829
  val t=(term_of o the o(parse thy))
neuper@37906
   830
	    "1 + (9 - x^^^2) / (9 - 6*x + x^^^2)";
neuper@37926
   831
  val SOME (t',_) = common_nominator_ thy t;
neuper@37926
   832
  val SOME (t'',_) = add_fraction_ thy t;
neuper@37906
   833
  term2str t';
neuper@37906
   834
  term2str t'';
neuper@37906
   835
  "1 * (9 - 6 * x + x ^^^ 2) / (9 - 6 * x + x ^^^ 2) +\
neuper@37906
   836
  \(9 - x ^^^ 2) / (9 - 6 * x + x ^^^ 2)";
neuper@37906
   837
  "6 / (3 - x)";
neuper@37906
   838
  (*WN.16.10.02 hinzugef"ugt -----^^---*)
neuper@37906
   839
neuper@37906
   840
  val t=(term_of o the o (parse thy)) 
neuper@37906
   841
  	    "(y^^^2 - x^^^2)/(y^^^2 - 2*y*x + x^^^2)";
neuper@37926
   842
  val SOME (t',_) = factout_ thy t;
neuper@37926
   843
  val SOME (t'',_) = cancel_ thy t;
neuper@37906
   844
  term2str t';
neuper@37906
   845
  term2str t'';
neuper@37906
   846
  "(y + x) * (y - x) / ((y - x) * (y - x))";
neuper@37906
   847
  "(y + x) / (y - x)";
neuper@37906
   848
    
neuper@37906
   849
  val t=(term_of o the o (parse thy)) 
neuper@37906
   850
	    "(y^^^2 - x^^^2)/(y^^^2 - 2*y*x + x^^^2) + 1 / (y - x)";
neuper@37926
   851
  val SOME (t',_) = common_nominator_ thy t;
neuper@37926
   852
  val SOME (t'',_) = add_fraction_ thy t;
neuper@37906
   853
  term2str t';
neuper@37906
   854
  term2str t'';
neuper@37906
   855
  "((-1) * x ^^^ 2 + y ^^^ 2) / (((-1) * x + y) * ((-1) * x + y)) +\
neuper@37906
   856
  \1 * ((-1) * x + y) / (((-1) * x + y) * ((-1) * x + y))";
neuper@37906
   857
  "((-1) - x - y) / (x - y)";
neuper@37906
   858
  (*WN.16.10.02     ^^^^^^^ Reihenfolge aus Angabe umgekehrt ?!*)
neuper@37906
   859
neuper@37906
   860
  val t=(term_of o the o (parse thy)) 
neuper@37906
   861
	    "(x^^^2 - y^^^2)/(x^^^2 - 2*x*y + y^^^2) + 1 / (x - y)";
neuper@37926
   862
  val SOME (t',_) = common_nominator_ thy t;
neuper@37926
   863
  val SOME (t'',_) = add_fraction_ thy t;
neuper@37906
   864
  term2str t';
neuper@37906
   865
  term2str t'';
neuper@37906
   866
  "((-1) * y ^^^ 2 + x ^^^ 2) / (((-1) * y + x) * ((-1) * y + x)) +\
neuper@37906
   867
  \1 * ((-1) * y + x) / (((-1) * y + x) * ((-1) * y + x))";
neuper@37906
   868
  "((-1) - y - x) / (y - x)";
neuper@37906
   869
  (*WN.16.10.02     ^^^^^^^ lexicographische Ordnung ?!*)
neuper@37906
   870
neuper@37906
   871
  val t=(term_of o the o (parse thy)) 
neuper@37906
   872
  	    "(y^^^2 - x^^^2)/(y^^^2 - 2*y*x + x^^^2)";
neuper@37926
   873
  val SOME (t',_) = norm_expanded_rat_ thy t;
neuper@37906
   874
  term2str t';
neuper@37906
   875
  "(y + x) / (y - x)";
neuper@37926
   876
(*val SOME (t'',_) = norm_rational_ thy t;
neuper@37906
   877
  term2str t'';
neuper@37906
   878
  *** RATIONALS_TERM2POLY_EXCEPTION: Invalid Polynomial 
neuper@37906
   879
  WN.16.10.02 ?!*)
neuper@37906
   880
 
neuper@37906
   881
  val t=(term_of o the o (parse thy)) 
neuper@37906
   882
	    "(9 - x^^^2)/(9 - 6*x + x^^^2) + (1)/(3 + x)";
neuper@37926
   883
  val SOME (t',_) = norm_expanded_rat_ thy t;
neuper@37906
   884
  term2str t';
neuper@37906
   885
  "(12 + 5 * x + x ^^^ 2) / (9 - x ^^^ 2)";
neuper@37926
   886
(*val SOME (t'',_) = norm_rational_ thy t;
neuper@37906
   887
  term2str t'';
neuper@37906
   888
  *** RATIONALS_TERM2POLY_EXCEPTION: Invalid Polynomial
neuper@37906
   889
  WN.16.10.02 ?!*)
neuper@37906
   890
 
neuper@37906
   891
  val t=(term_of o the o (parse thy)) 
neuper@37906
   892
	    "(9 + (-1)* x^^^2)/(9 + (-1)* 6*x + x^^^2) + (1)/(3 + x)";
neuper@37926
   893
  val SOME (t',_) = norm_expanded_rat_ thy t;
neuper@37926
   894
  val SOME (t'',_) = norm_rational_ thy t;
neuper@37906
   895
  term2str t';
neuper@37906
   896
  term2str t'';
neuper@37906
   897
  "(12 + 5 * x + x ^^^ 2) / (9 - x ^^^ 2)";
neuper@37906
   898
  "(12 + 5 * x + x ^^^ 2) / (9 + (-1) * x ^^^ 2)";
neuper@37906
   899
(* WN kopiert 16.10.02 Rational.ML -> rational.sml-----^^^---*)
neuper@37906
   900
neuper@37906
   901
neuper@37906
   902