src/sml/IsacKnowledge/PolyEq.thy
author agriesma
Thu, 17 Apr 2003 18:01:03 +0200
branchgriesmayer
changeset 322 ecd8eb2fb15d
child 703 751332b50cdc
permissions -rw-r--r--
neues cvs-verzeichnis
agriesma@322
     1
(* (c) by Richard Lang
agriesma@322
     2
   theory collecting all knowledge 
agriesma@322
     3
   (predicates 'is_rootEq_in', 'is_sqrt_in', 'is_ratEq_in')
agriesma@322
     4
   for PolynomialEquations.
agriesma@322
     5
   alternative dependencies see Isac.thy
agriesma@322
     6
   created by: rlang 
agriesma@322
     7
         date: 02.07
agriesma@322
     8
   changed by: rlang
agriesma@322
     9
   last change by: rlang
agriesma@322
    10
             date: 02.11.26
agriesma@322
    11
   (c) Richard Lang, 2003
agriesma@322
    12
*)
agriesma@322
    13
agriesma@322
    14
(* remove_thy"PolyEq";
agriesma@322
    15
   use_thy"knowledge/Isac";
agriesma@322
    16
   use_thy"knowledge/PolyEq";
agriesma@322
    17
   
agriesma@322
    18
   remove_thy"PolyEq";
agriesma@322
    19
   use_thy"Isac";
agriesma@322
    20
agriesma@322
    21
   use"ROOT.ML";
agriesma@322
    22
   cd"knowledge";
agriesma@322
    23
   *)
agriesma@322
    24
agriesma@322
    25
PolyEq = LinEq + RootRatEq + 
agriesma@322
    26
(*-------------------- consts ------------------------------------------------*)
agriesma@322
    27
consts
agriesma@322
    28
agriesma@322
    29
(*---------scripts--------------------------*)
agriesma@322
    30
  Complete'_square
agriesma@322
    31
             :: "[bool,real, \
agriesma@322
    32
		  \ bool list] => bool list"
agriesma@322
    33
               ("((Script Complete'_square (_ _ =))// \
agriesma@322
    34
                 \ (_))" 9)
agriesma@322
    35
 (*----- poly ----- *)	 
agriesma@322
    36
  Normalize'_poly
agriesma@322
    37
             :: "[bool,real, \
agriesma@322
    38
		  \ bool list] => bool list"
agriesma@322
    39
               ("((Script Normalize'_poly (_ _=))// \
agriesma@322
    40
                 \ (_))" 9)
agriesma@322
    41
  Solve'_d0'_poly'_equation
agriesma@322
    42
             :: "[bool,real, \
agriesma@322
    43
		  \ bool list] => bool list"
agriesma@322
    44
               ("((Script Solve'_d0'_poly'_equation (_ _ =))// \
agriesma@322
    45
                 \ (_))" 9)
agriesma@322
    46
  Solve'_d1'_poly'_equation
agriesma@322
    47
             :: "[bool,real, \
agriesma@322
    48
		  \ bool list] => bool list"
agriesma@322
    49
               ("((Script Solve'_d1'_poly'_equation (_ _ =))// \
agriesma@322
    50
                 \ (_))" 9)
agriesma@322
    51
  Solve'_d2'_poly'_equation
agriesma@322
    52
             :: "[bool,real, \
agriesma@322
    53
		  \ bool list] => bool list"
agriesma@322
    54
               ("((Script Solve'_d2'_poly'_equation (_ _ =))// \
agriesma@322
    55
                 \ (_))" 9)
agriesma@322
    56
  Solve'_d2'_poly'_sqonly'_equation
agriesma@322
    57
             :: "[bool,real, \
agriesma@322
    58
		  \ bool list] => bool list"
agriesma@322
    59
               ("((Script Solve'_d2'_poly'_sqonly'_equation (_ _ =))// \
agriesma@322
    60
                 \ (_))" 9)
agriesma@322
    61
  Solve'_d2'_poly'_bdvonly'_equation
agriesma@322
    62
             :: "[bool,real, \
agriesma@322
    63
		  \ bool list] => bool list"
agriesma@322
    64
               ("((Script Solve'_d2'_poly'_bdvonly'_equation (_ _ =))// \
agriesma@322
    65
                 \ (_))" 9)
agriesma@322
    66
  Solve'_d2'_poly'_pq'_equation
agriesma@322
    67
             :: "[bool,real, \
agriesma@322
    68
		  \ bool list] => bool list"
agriesma@322
    69
               ("((Script Solve'_d2'_poly'_pq'_equation (_ _ =))// \
agriesma@322
    70
                 \ (_))" 9)
agriesma@322
    71
  Solve'_d2'_poly'_abc'_equation
agriesma@322
    72
             :: "[bool,real, \
agriesma@322
    73
		  \ bool list] => bool list"
agriesma@322
    74
               ("((Script Solve'_d2'_poly'_abc'_equation (_ _ =))// \
agriesma@322
    75
                 \ (_))" 9)
agriesma@322
    76
  Solve'_d3'_poly'_equation
agriesma@322
    77
             :: "[bool,real, \
agriesma@322
    78
		  \ bool list] => bool list"
agriesma@322
    79
               ("((Script Solve'_d3'_poly'_equation (_ _ =))// \
agriesma@322
    80
                 \ (_))" 9)
agriesma@322
    81
  Solve'_d4'_poly'_equation
agriesma@322
    82
             :: "[bool,real, \
agriesma@322
    83
		  \ bool list] => bool list"
agriesma@322
    84
               ("((Script Solve'_d4'_poly'_equation (_ _ =))// \
agriesma@322
    85
                 \ (_))" 9)
agriesma@322
    86
agriesma@322
    87
(*-------------------- rules -------------------------------------------------*)
agriesma@322
    88
rules 
agriesma@322
    89
agriesma@322
    90
  cancel_leading_coeff1 "Not (c =!= 0) ==> (a + b*bdv + c*bdv^^^2 = 0) = \
agriesma@322
    91
			\                  (a/c + b/c*bdv + bdv^^^2 = 0)"
agriesma@322
    92
  cancel_leading_coeff2 "Not (c =!= 0) ==> (a - b*bdv + c*bdv^^^2 = 0) = \
agriesma@322
    93
			\                  (a/c - b/c*bdv + bdv^^^2 = 0)"
agriesma@322
    94
  cancel_leading_coeff3 "Not (c =!= 0) ==> (a + b*bdv - c*bdv^^^2 = 0) = \
agriesma@322
    95
			\                  (a/c + b/c*bdv - bdv^^^2 = 0)"
agriesma@322
    96
agriesma@322
    97
  cancel_leading_coeff4 "Not (c =!= 0) ==> (a +   bdv + c*bdv^^^2 = 0) = \
agriesma@322
    98
			\                  (a/c + 1/c*bdv + bdv^^^2 = 0)"
agriesma@322
    99
  cancel_leading_coeff5 "Not (c =!= 0) ==> (a -   bdv + c*bdv^^^2 = 0) = \
agriesma@322
   100
			\                  (a/c - 1/c*bdv + bdv^^^2 = 0)"
agriesma@322
   101
  cancel_leading_coeff6 "Not (c =!= 0) ==> (a +   bdv - c*bdv^^^2 = 0) = \
agriesma@322
   102
			\                  (a/c + 1/c*bdv - bdv^^^2 = 0)"
agriesma@322
   103
agriesma@322
   104
  cancel_leading_coeff7 "Not (c =!= 0) ==> (    b*bdv + c*bdv^^^2 = 0) = \
agriesma@322
   105
			\                  (    b/c*bdv + bdv^^^2 = 0)"
agriesma@322
   106
  cancel_leading_coeff8 "Not (c =!= 0) ==> (    b*bdv - c*bdv^^^2 = 0) = \
agriesma@322
   107
			\                  (    b/c*bdv - bdv^^^2 = 0)"
agriesma@322
   108
agriesma@322
   109
  cancel_leading_coeff9 "Not (c =!= 0) ==> (      bdv + c*bdv^^^2 = 0) = \
agriesma@322
   110
			\                  (      1/c*bdv + bdv^^^2 = 0)"
agriesma@322
   111
  cancel_leading_coeff10"Not (c =!= 0) ==> (      bdv - c*bdv^^^2 = 0) = \
agriesma@322
   112
			\                  (      1/c*bdv - bdv^^^2 = 0)"
agriesma@322
   113
agriesma@322
   114
  cancel_leading_coeff11"Not (c =!= 0) ==> (a +      b*bdv^^^2 = 0) = \
agriesma@322
   115
			\                  (a/b +      bdv^^^2 = 0)"
agriesma@322
   116
  cancel_leading_coeff12"Not (c =!= 0) ==> (a -      b*bdv^^^2 = 0) = \
agriesma@322
   117
			\                  (a/b -      bdv^^^2 = 0)"
agriesma@322
   118
  cancel_leading_coeff13"Not (c =!= 0) ==> (         b*bdv^^^2 = 0) = \
agriesma@322
   119
			\                  (           bdv^^^2 = 0/b)"
agriesma@322
   120
agriesma@322
   121
  complete_square1      "(q + p*bdv + bdv^^^2 = 0) = \
agriesma@322
   122
		        \(q + (p/2 + bdv)^^^2 = (p/2)^^^2)"
agriesma@322
   123
  complete_square2      "(    p*bdv + bdv^^^2 = 0) = \
agriesma@322
   124
		        \(    (p/2 + bdv)^^^2 = (p/2)^^^2)"
agriesma@322
   125
  complete_square3      "(      bdv + bdv^^^2 = 0) = \
agriesma@322
   126
		        \(    (1/2 + bdv)^^^2 = (1/2)^^^2)"
agriesma@322
   127
		        
agriesma@322
   128
  complete_square4      "(q - p*bdv + bdv^^^2 = 0) = \
agriesma@322
   129
		        \(q + (p/2 - bdv)^^^2 = (p/2)^^^2)"
agriesma@322
   130
  complete_square5      "(q + p*bdv - bdv^^^2 = 0) = \
agriesma@322
   131
		        \(q + (p/2 - bdv)^^^2 = (p/2)^^^2)"
agriesma@322
   132
agriesma@322
   133
  square_explicit1      "(a + b^^^2 = c) = ( b^^^2 = c - a)"
agriesma@322
   134
  square_explicit2      "(a - b^^^2 = c) = (-(b^^^2) = c - a)"
agriesma@322
   135
agriesma@322
   136
  bdv_explicit1         "(a + bdv = b) = (bdv = - a + b)"
agriesma@322
   137
  bdv_explicit2         "(a - bdv = b) = ((-1)*bdv = - a + b)"
agriesma@322
   138
  bdv_explicit3         "((-1)*bdv = b) = (bdv = (-1)*b)"
agriesma@322
   139
agriesma@322
   140
  plus_leq              "(0 <= a + b) = ((-1)*b <= a)"(*Isa?*)
agriesma@322
   141
  minus_leq             "(0 <= a - b) = (     b <= a)"(*Isa?*)
agriesma@322
   142
agriesma@322
   143
(*-- normalize --*)
agriesma@322
   144
  all_left
agriesma@322
   145
    "[|Not(b=!=0)|] ==> (a = b) = (a - b = 0)"
agriesma@322
   146
  makex1_x
agriesma@322
   147
    "a^^^1  = a"  
agriesma@322
   148
  real_assoc_1
agriesma@322
   149
   "a+(b+c) = a+b+c"
agriesma@322
   150
  real_assoc_2
agriesma@322
   151
   "a*(b*c) = a*b*c"
agriesma@322
   152
agriesma@322
   153
(* ---- degree 0 ----*)
agriesma@322
   154
  d0_true
agriesma@322
   155
  "(0=0) = True"
agriesma@322
   156
  d0_false
agriesma@322
   157
  "[|Not(bdv occurs_in a);Not(a=!=0)|] ==> (a=0) = False"
agriesma@322
   158
(* ---- degree 1 ----*)
agriesma@322
   159
  d1_isolate_add1
agriesma@322
   160
   "[|Not(bdv occurs_in a)|] ==> (a + b*bdv = 0) = (b*bdv = -a)"
agriesma@322
   161
  d1_isolate_add2
agriesma@322
   162
   "[|Not(bdv occurs_in a)|] ==> (a +   bdv = 0) = (  bdv = -a)"
agriesma@322
   163
  d1_isolate_div
agriesma@322
   164
   "[|Not(b=0);Not(bdv occurs_in c)|] ==> (b*bdv = c) = (bdv = c/b)"
agriesma@322
   165
(* ---- degree 2 ----*)
agriesma@322
   166
  d2_isolate_add1
agriesma@322
   167
   "[|Not(bdv occurs_in a)|] ==> (a + b*bdv^^^2=0) = (b*bdv^^^2= -a)"
agriesma@322
   168
  d2_isolate_add2
agriesma@322
   169
   "[|Not(bdv occurs_in a)|] ==> (a +   bdv^^^2=0) = (  bdv^^^2= -a)"
agriesma@322
   170
  d2_isolate_div
agriesma@322
   171
   "[|Not(b=0);Not(bdv occurs_in c)|] ==> (b*bdv^^^2=c) = (bdv^^^2=c/b)"
agriesma@322
   172
  d2_prescind1
agriesma@322
   173
   "(a*bdv + b*bdv^^^2 = 0) = (bdv*(a +b*bdv)=0)"
agriesma@322
   174
  d2_prescind2
agriesma@322
   175
   "(a*bdv +   bdv^^^2 = 0) = (bdv*(a +  bdv)=0)"
agriesma@322
   176
  d2_prescind3
agriesma@322
   177
   "(  bdv + b*bdv^^^2 = 0) = (bdv*(1+b*bdv)=0)"
agriesma@322
   178
  d2_prescind4
agriesma@322
   179
   "(  bdv +   bdv^^^2 = 0) = (bdv*(1+  bdv)=0)"
agriesma@322
   180
  (* eliminate degree 2 *)
agriesma@322
   181
  d2_sqrt_equation1
agriesma@322
   182
  "[|(0<=c)|] ==> (bdv^^^2=c) = ((bdv=sqrt c) | (bdv=-sqrt c ))"
agriesma@322
   183
  d2_sqrt_equation2
agriesma@322
   184
  "(bdv^^^2=0) = (bdv=0)"
agriesma@322
   185
  d2_sqrt_equation3
agriesma@322
   186
  "(b*bdv^^^2=0) = (bdv=0)"
agriesma@322
   187
  d2_reduce_equation1
agriesma@322
   188
  "(bdv*(a +b*bdv)=0) = ((bdv=0)|(a+b*bdv=0))"
agriesma@322
   189
  d2_reduce_equation2
agriesma@322
   190
  "(bdv*(a +  bdv)=0) = ((bdv=0)|(a+  bdv=0))"
agriesma@322
   191
  d2_pqformula1
agriesma@322
   192
   "[|0<=p^^^2 - 4*q|] ==> (q+p*bdv+   bdv^^^2=0) =
agriesma@322
   193
           ((bdv= -(p/2) + sqrt(p^^^2 - 4*q)/2) 
agriesma@322
   194
          | (bdv= -(p/2) - sqrt(p^^^2 - 4*q)/2))"
agriesma@322
   195
  d2_pqformula2
agriesma@322
   196
   "[|0<=p^^^2 - 4*q|] ==> (q+p*bdv+1*bdv^^^2=0) = 
agriesma@322
   197
           ((bdv= -(p/2) + sqrt(p^^^2 - 4*q)/2) 
agriesma@322
   198
          | (bdv= -(p/2) - sqrt(p^^^2 - 4*q)/2))"
agriesma@322
   199
  d2_pqformula3
agriesma@322
   200
   "[|0<=1 - 4*q|] ==> (q+  bdv+   bdv^^^2=0) = 
agriesma@322
   201
           ((bdv= -(1/2) + sqrt(1 - 4*q)/2) 
agriesma@322
   202
          | (bdv= -(1/2) - sqrt(1 - 4*q)/2))"
agriesma@322
   203
  d2_pqformula4
agriesma@322
   204
   "[|0<=1 - 4*q|] ==> (q+  bdv+1*bdv^^^2=0) = 
agriesma@322
   205
           ((bdv= -(1/2) + sqrt(1 - 4*q)/2) 
agriesma@322
   206
          | (bdv= -(1/2) - sqrt(1 - 4*q)/2))"
agriesma@322
   207
  d2_pqformula5
agriesma@322
   208
   "[|0<=p^^^2 - 0|] ==> (  p*bdv+   bdv^^^2=0) =
agriesma@322
   209
           ((bdv= -(p/2) + sqrt(p^^^2 - 0)/2) 
agriesma@322
   210
          | (bdv= -(p/2) - sqrt(p^^^2 - 0)/2))"
agriesma@322
   211
  d2_pqformula6
agriesma@322
   212
   "[|0<=p^^^2 - 0|] ==> (  p*bdv+1*bdv^^^2=0) = 
agriesma@322
   213
           ((bdv= -(p/2) + sqrt(p^^^2 - 0)/2) 
agriesma@322
   214
          | (bdv= -(p/2) - sqrt(p^^^2 - 0)/2))"
agriesma@322
   215
  d2_pqformula7
agriesma@322
   216
   "[|0<=1 - 0|] ==> (    bdv+   bdv^^^2=0) = 
agriesma@322
   217
           ((bdv= -(1/2) + sqrt(1 - 0)/2) 
agriesma@322
   218
          | (bdv= -(1/2) - sqrt(1 - 0)/2))"
agriesma@322
   219
  d2_pqformula8
agriesma@322
   220
   "[|0<=1 - 4*q|] ==> (    bdv+1*bdv^^^2=0) = 
agriesma@322
   221
           ((bdv= -(1/2) + sqrt(1 - 4*q)/2) 
agriesma@322
   222
          | (bdv= -(1/2) - sqrt(1 - 4*q)/2))"
agriesma@322
   223
  d2_pqformula9
agriesma@322
   224
   "[|0<= - 4*q|] ==> (q+      1*bdv^^^2=0) = 
agriesma@322
   225
           ((bdv= 0 + sqrt(0 - 4*q)/2) 
agriesma@322
   226
          | (bdv= 0 - sqrt(0 - 4*q)/2))"
agriesma@322
   227
  d2_pqformula10
agriesma@322
   228
   "[|0<= - 4*q|] ==> (q+        bdv^^^2=0) = 
agriesma@322
   229
           ((bdv= 0 + sqrt(0 - 4*q)/2) 
agriesma@322
   230
          | (bdv= 0 - sqrt(0 - 4*q)/2))"
agriesma@322
   231
  d2_abcformula1
agriesma@322
   232
   "[|0<=b^^^2 - 4*a*c|] ==> (c + b*bdv+a*bdv^^^2=0) =
agriesma@322
   233
           ((bdv=( -b + sqrt(b^^^2 - 4*a*c))/(2*a)) 
agriesma@322
   234
          | (bdv=( -b - sqrt(b^^^2 - 4*a*c))/(2*a)))"
agriesma@322
   235
  d2_abcformula2
agriesma@322
   236
   "[|0<=1 - 4*a*c|]     ==> (c+    bdv+a*bdv^^^2=0) = 
agriesma@322
   237
           ((bdv=( -1 + sqrt(1 - 4*a*c))/(2*a)) 
agriesma@322
   238
          | (bdv=( -1 - sqrt(1 - 4*a*c))/(2*a)))"
agriesma@322
   239
  d2_abcformula3
agriesma@322
   240
   "[|0<=b^^^2 - 4*a*c|] ==> (c + b*bdv+  bdv^^^2=0) =
agriesma@322
   241
           ((bdv=( -b + sqrt(b^^^2 - 4*1*c))/(2*1)) 
agriesma@322
   242
          | (bdv=( -b - sqrt(b^^^2 - 4*1*c))/(2*1)))"
agriesma@322
   243
  d2_abcformula4
agriesma@322
   244
   "[|0<=b^^^2 - 4*a*c|] ==> (c +   bdv+  bdv^^^2=0) =
agriesma@322
   245
           ((bdv=( -b + sqrt(1 - 4*1*c))/(2*1)) 
agriesma@322
   246
          | (bdv=( -b - sqrt(1 - 4*1*c))/(2*1)))"
agriesma@322
   247
  d2_abcformula5
agriesma@322
   248
   "[|0<=b^^^2 - 4*a*c|] ==> (c +        a*bdv^^^2=0) =
agriesma@322
   249
           ((bdv=( 0 + sqrt(0 - 4*a*c))/(2*a)) 
agriesma@322
   250
          | (bdv=( 0 - sqrt(0 - 4*a*c))/(2*a)))"
agriesma@322
   251
  d2_abcformula6
agriesma@322
   252
   "[|0<=1 - 4*a*c|]     ==> (c+          bdv^^^2=0) = 
agriesma@322
   253
           ((bdv=( 0 + sqrt(0 - 4*1*c))/(2*1)) 
agriesma@322
   254
          | (bdv=( 0 - sqrt(0 - 4*1*c))/(2*1)))"
agriesma@322
   255
  d2_abcformula7
agriesma@322
   256
   "[|0<=1 - 4*a*c|]     ==> (    b*bdv+a*bdv^^^2=0) = 
agriesma@322
   257
           ((bdv=( -b + sqrt(b^^^2 - 0))/(2*a)) 
agriesma@322
   258
          | (bdv=( -b - sqrt(b^^^2 - 0))/(2*a)))"
agriesma@322
   259
  d2_abcformula8
agriesma@322
   260
   "[|0<=b^^^2 - 4*a*c|] ==> (    b*bdv+  bdv^^^2=0) =
agriesma@322
   261
           ((bdv=( -b + sqrt(b^^^2 - 0))/(2*1)) 
agriesma@322
   262
          | (bdv=( -b - sqrt(b^^^2 - 0))/(2*1)))"
agriesma@322
   263
  d2_abcformula9
agriesma@322
   264
   "[|0<=1 - 4*a*c|]     ==> (      bdv+a*bdv^^^2=0) = 
agriesma@322
   265
           ((bdv=( -1 + sqrt(1 - 0))/(2*a)) 
agriesma@322
   266
          | (bdv=( -1 - sqrt(1 - 0))/(2*a)))"
agriesma@322
   267
  d2_abcformula10
agriesma@322
   268
   "[|0<=b^^^2 - 4*a*c|] ==> (      bdv+  bdv^^^2=0) =
agriesma@322
   269
           ((bdv=( -1 + sqrt(1 - 0))/(2*1)) 
agriesma@322
   270
          | (bdv=( -1 - sqrt(1 - 0))/(2*1)))"
agriesma@322
   271
(* ---- degree 3 ----*)
agriesma@322
   272
  d3_reduce_equation1
agriesma@322
   273
  "(a*bdv + b*bdv^^^2 + c*bdv^^^3=0) = (bdv=0 | (a + b*bdv + c*bdv^^^2=0))"
agriesma@322
   274
  d3_reduce_equation2
agriesma@322
   275
  "(  bdv + b*bdv^^^2 + c*bdv^^^3=0) = (bdv=0 | (1 + b*bdv + c*bdv^^^2=0))"
agriesma@322
   276
  d3_reduce_equation3
agriesma@322
   277
  "(a*bdv +   bdv^^^2 + c*bdv^^^3=0) = (bdv=0 | (a +   bdv + c*bdv^^^2=0))"
agriesma@322
   278
  d3_reduce_equation4
agriesma@322
   279
  "(  bdv +   bdv^^^2 + c*bdv^^^3=0) = (bdv=0 | (1 +   bdv + c*bdv^^^2=0))"
agriesma@322
   280
  d3_reduce_equation5
agriesma@322
   281
  "(a*bdv + b*bdv^^^2 +   bdv^^^3=0) = (bdv=0 | (a + b*bdv +   bdv^^^2=0))"
agriesma@322
   282
  d3_reduce_equation6
agriesma@322
   283
  "(  bdv + b*bdv^^^2 +   bdv^^^3=0) = (bdv=0 | (1 + b*bdv +   bdv^^^2=0))"
agriesma@322
   284
  d3_reduce_equation7
agriesma@322
   285
  "(a*bdv +   bdv^^^2 +   bdv^^^3=0) = (bdv=0 | (1 +   bdv +   bdv^^^2=0))"
agriesma@322
   286
  d3_reduce_equation8
agriesma@322
   287
  "(  bdv +   bdv^^^2 +   bdv^^^3=0) = (bdv=0 | (1 +   bdv +   bdv^^^2=0))"
agriesma@322
   288
  d3_reduce_equation9
agriesma@322
   289
  "(a*bdv             + c*bdv^^^3=0) = (bdv=0 | (a         + c*bdv^^^2=0))"
agriesma@322
   290
  d3_reduce_equation10
agriesma@322
   291
  "(  bdv             + c*bdv^^^3=0) = (bdv=0 | (1         + c*bdv^^^2=0))"
agriesma@322
   292
  d3_reduce_equation11
agriesma@322
   293
  "(a*bdv             +   bdv^^^3=0) = (bdv=0 | (a         +   bdv^^^2=0))"
agriesma@322
   294
  d3_reduce_equation12
agriesma@322
   295
  "(  bdv             +   bdv^^^3=0) = (bdv=0 | (1         +   bdv^^^2=0))"
agriesma@322
   296
  d3_reduce_equation13
agriesma@322
   297
  "(        b*bdv^^^2 + c*bdv^^^3=0) = (bdv=0 | (    b*bdv + c*bdv^^^2=0))"
agriesma@322
   298
  d3_reduce_equation14
agriesma@322
   299
  "(          bdv^^^2 + c*bdv^^^3=0) = (bdv=0 | (      bdv + c*bdv^^^2=0))"
agriesma@322
   300
  d3_reduce_equation15
agriesma@322
   301
  "(        b*bdv^^^2 +   bdv^^^3=0) = (bdv=0 | (    b*bdv +   bdv^^^2=0))"
agriesma@322
   302
  d3_reduce_equation16
agriesma@322
   303
  "(          bdv^^^2 +   bdv^^^3=0) = (bdv=0 | (      bdv +   bdv^^^2=0))"
agriesma@322
   304
  d3_isolate_add1
agriesma@322
   305
  "[|Not(bdv occurs_in a)|] ==> (a + b*bdv^^^3=0) = (b*bdv^^^3= (-1)*a)"
agriesma@322
   306
  d3_isolate_add2
agriesma@322
   307
  "[|Not(bdv occurs_in a)|] ==> (a +   bdv^^^3=0) = (  bdv^^^3= (-1)*a)"
agriesma@322
   308
  d3_isolate_div
agriesma@322
   309
   "[|Not(b=0);Not(bdv occurs_in a)|] ==> (b*bdv^^^3=c) = (bdv^^^3=c/b)"
agriesma@322
   310
  d3_root_equation2
agriesma@322
   311
  "(bdv^^^3=0) = (bdv=0)"
agriesma@322
   312
  d3_root_equation1
agriesma@322
   313
  "(bdv^^^3=c) = (bdv = nroot 3 c)"
agriesma@322
   314
agriesma@322
   315
(* ---- degree 4 ----*)
agriesma@322
   316
 (* FIXME es wir nicht getestet ob u>0 *)
agriesma@322
   317
 d4_sub_u1
agriesma@322
   318
 "(c+b*bdv^^^2+a*bdv^^^4=0) =
agriesma@322
   319
   ((a*u^^^2+b*u+c=0) & (bdv^^^2=u))"
agriesma@322
   320
agriesma@322
   321
(* ---- 7.3.02 von Termorder ---- *)
agriesma@322
   322
agriesma@322
   323
  bdv_collect_1       "l * bdv + m * bdv = (l + m) * bdv"
agriesma@322
   324
  bdv_collect_2       "bdv + m * bdv = (1 + m) * bdv"
agriesma@322
   325
  bdv_collect_3       "l * bdv + bdv = (l + 1) * bdv"
agriesma@322
   326
agriesma@322
   327
(*  bdv_collect_assoc0_1 "l * bdv + m * bdv + k = (l + m) * bdv + k"
agriesma@322
   328
    bdv_collect_assoc0_2 "bdv + m * bdv + k = (1 + m) * bdv + k"
agriesma@322
   329
    bdv_collect_assoc0_3 "l * bdv + bdv + k = (l + 1) * bdv + k"
agriesma@322
   330
*)
agriesma@322
   331
  bdv_collect_assoc1_1 "l * bdv + (m * bdv + k) = (l + m) * bdv + k"
agriesma@322
   332
  bdv_collect_assoc1_2 "bdv + (m * bdv + k) = (1 + m) * bdv + k"
agriesma@322
   333
  bdv_collect_assoc1_3 "l * bdv + (bdv + k) = (l + 1) * bdv + k"
agriesma@322
   334
agriesma@322
   335
  bdv_collect_assoc2_1 "k + l * bdv + m * bdv = k + (l + m) * bdv"
agriesma@322
   336
  bdv_collect_assoc2_2 "k + bdv + m * bdv = k + (1 + m) * bdv"
agriesma@322
   337
  bdv_collect_assoc2_3 "k + l * bdv + bdv = k + (l + 1) * bdv"
agriesma@322
   338
agriesma@322
   339
agriesma@322
   340
  bdv_n_collect_1      "l * bdv^^^n + m * bdv^^^n = (l + m) * bdv^^^n"
agriesma@322
   341
  bdv_n_collect_2      " bdv^^^n + m * bdv^^^n = (1 + m) * bdv^^^n"
agriesma@322
   342
  bdv_n_collect_3      "l * bdv^^^n + bdv^^^n = (l + 1) * bdv^^^n"   (*order!*)
agriesma@322
   343
agriesma@322
   344
  bdv_n_collect_assoc1_1 "l * bdv^^^n + (m * bdv^^^n + k) = (l + m) * bdv^^^n + k"
agriesma@322
   345
  bdv_n_collect_assoc1_2 "bdv^^^n + (m * bdv^^^n + k) = (1 + m) * bdv^^^n + k"
agriesma@322
   346
  bdv_n_collect_assoc1_3 "l * bdv^^^n + (bdv^^^n + k) = (l + 1) * bdv^^^n + k"
agriesma@322
   347
agriesma@322
   348
  bdv_n_collect_assoc2_1 "k + l * bdv^^^n + m * bdv^^^n = k + (l + m) * bdv^^^n"
agriesma@322
   349
  bdv_n_collect_assoc2_2 "k + bdv^^^n + m * bdv^^^n = k + (1 + m) * bdv^^^n"
agriesma@322
   350
  bdv_n_collect_assoc2_3 "k + l * bdv^^^n + bdv^^^n = k + (l + 1) * bdv^^^n"
agriesma@322
   351
agriesma@322
   352
(*WN.14.3.03*)
agriesma@322
   353
  real_minus_div         "- (a / b) = (-1 * a) / b"
agriesma@322
   354
agriesma@322
   355
  separate_bdv           "(a * bdv) / b = (a / b) * bdv"
agriesma@322
   356
  separate_bdv_n         "(a * bdv ^^^ n) / b = (a / b) * bdv ^^^ n"
agriesma@322
   357
  separate_1_bdv         "bdv / b = (1 / b) * bdv"
agriesma@322
   358
  separate_1_bdv_n       "bdv ^^^ n / b = (1 / b) * bdv ^^^ n"
agriesma@322
   359
agriesma@322
   360
end
agriesma@322
   361
agriesma@322
   362
agriesma@322
   363
agriesma@322
   364
agriesma@322
   365
agriesma@322
   366