linear_power_is_differentiable: LEMMA
m>0 IMPLIESEXISTS (a): a(m)=1 AND
(FORALL (i:nat): i>m IMPLIES a(i)=0) AND
(FORALL (x): polynomial(a,m)(x) = (x-y)^m) AND
(FORALL (x): polynomial(poly_deriv(a),m-1)(x)=m*(x-y)^(m-1))
polynomial_prod_degrees: LEMMA FORALL (a,b,g:[nat->real],n,m,p:nat):
(FORALL (x): polynomial(a,n)(x) = polynomial(b,m)(x)*polynomial(g,p)(x)) AND
a(n)/=0 AND b(m)/=0 AND g(p)/=0 IMPLIES
(n=m+p ANDFORALL (i:nat): i<=n IMPLIES a(i) = polynomial_prod(b,m,g,p)(i))
polynomial_div_linear_power_degree: LEMMA FORALL (a,b:[nat->real],n,m,k:nat):
(FORALL (x): polynomial(a,n)(x) = (x-y)^k*polynomial(b,m)(x)) AND
a(n)/=0 AND b(m)/=0 IMPLIES
(a(n)=b(m) AND n=m+k)
poly_deriv_signs_neq_around_root_left: LEMMA n>0 AND
x < y AND
polynomial(a,n)(y) = 0 AND
(FORALL (z:real): x<=z AND z<=y AND
(polynomial(a,n)(z)=0 OR polynomial(poly_deriv(a),n-1)(z)=0) IMPLIES z=y) IMPLIES sign_ext(polynomial(a,n)(x)) = -sign_ext(polynomial(poly_deriv(a),n-1)(x))
poly_deriv_signs_neq_around_root_right: LEMMA n>0 AND
x > y AND
polynomial(a,n)(y) = 0 AND
(FORALL (z:real): y<=z AND z<=x AND
(polynomial(a,n)(z)=0 OR polynomial(poly_deriv(a),n-1)(z)=0) IMPLIES z=y) IMPLIES sign_ext(polynomial(a,n)(x)) = sign_ext(polynomial(poly_deriv(a),n-1)(x))
% Every polynomial is divisible by a maximal power (x-y)^m
max_linear_div_power?(a,n,y)(m:posnat): bool = EXISTS (b,q:[nat->real]): m<=n AND
(FORALL (x): polynomial(a,n)(x)=(x-y)^m*polynomial(b,n-m)(x)) AND
polynomial(b,n-m)(y)/=0 AND
(FORALL (x): polynomial(poly_deriv(a),n-1)(x) = (x-y)^(m-1)*polynomial(q,n-m)(x)) AND
polynomial(q,n-m)(y)/=0
max_linear_div_power_sign_change: LEMMAFORALL (m:posnat):
x < y AND y < z AND
(FORALL (r:real): x<= r AND r<= z AND polynomial(a,n)(r) = 0 IMPLIES r = y) AND
max_linear_div_power?(a,n,y)(m) IMPLIES LET sigx = sign_ext(polynomial(a,n)(x)), sigz = sign_ext(polynomial(a,n)(z)) IN
sigx/=0 AND sigz/=0 AND
((even?(m) AND (NOT odd?(m)) AND sigx = sigz AND sigx/=-sigz) OR
(odd?(m) AND (NOT even?(m)) AND sigx = -sigz AND sigx/=sigz))
poly_eq_except_on_finite_set: LEMMAFORALL (b:[nat->real]): FORALL (N:posnat): (EXISTS (rootseq:[below(N)->real]): FORALL (x): (FORALL (ib:below(N)): x/=rootseq(ib)) IMPLIES
polynomial(a,n)(x)=polynomial(b,m)(x)) IMPLIES ((FORALL (j:nat): j<=n AND j>min(n,m) IMPLIES a(j)=0) AND
(FORALL (j:nat): j<=m AND j>min(n,m) IMPLIES b(j)=0) AND
(FORALL (j:nat): j<=min(n,m) IMPLIES a(j) = b(j)) AND
polynomial(a,n) = polynomial(b,m))
max_div_linear_power_remainder_sign_swaps: LEMMA FORALL (p,q,h,r:[nat->real],pn,qn,hn,rn:nat,m,kp:posnat):
x<y AND y<z AND
(FORALL (xyz:real): polynomial(p,pn)(xyz)=
polynomial(q,qn)(xyz)*polynomial(h,hn)(xyz)
+polynomial(r,rn)(xyz)) AND
(FORALL (xyz:real): x<=xyz AND xyz<=z AND
(polynomial(p,pn)(xyz)=0 OR polynomial(h,hn)(xyz)=0 OR polynomial(r,rn)(xyz)=0) IMPLIES xyz = y) AND
max_linear_div_power?(p,pn,y)(m) AND
max_linear_div_power?(r,rn,y)(m) AND
max_linear_div_power?(h,hn,y)(kp) AND
kp>m IMPLIES
(sign_ext(polynomial(p,pn)(x))*sign_ext(polynomial(-r,rn)(x)) = -1 AND
sign_ext(polynomial(p,pn)(z))*sign_ext(polynomial(-r,rn)(z)) = -1)
at_zero_remainder_sign_swaps: LEMMA FORALL (p,q,h,r:[nat->real],pn,qn,hn,rn:nat):
x<=y AND y<=z AND
(FORALL (xyz:real): polynomial(p,pn)(xyz)=
polynomial(q,qn)(xyz)*polynomial(h,hn)(xyz)
+polynomial(r,rn)(xyz)) AND
(FORALL (xyz:real): x<=xyz AND xyz<=z AND
(polynomial(p,pn)(xyz)=0 OR polynomial(h,hn)(xyz)=0 OR polynomial(r,rn)(xyz)=0) IMPLIES xyz = y) AND
polynomial(h,hn)(y)=0 AND
polynomial(p,pn)(y)/=0 AND
polynomial(r,rn)(y)/=0 AND
polynomial(p,pn)(x)/=0 AND
polynomial(r,rn)(x)/=0 AND
polynomial(p,pn)(z)/=0 AND
polynomial(r,rn)(z)/=0 IMPLIES
(sign_ext(polynomial(p,pn)(x))*sign_ext(polynomial(-r,rn)(x)) = -1 AND
sign_ext(polynomial(p,pn)(z))*sign_ext(polynomial(-r,rn)(z)) = -1)
poly_coeff_bound(a,n): RECURSIVE {kr:posreal | FORALL (i:nat): i<=n IMPLIES abs(a(i))<kr} = IF n = 0 THEN abs(a(0))+1 ELSE max(abs(a(n))+1,poly_coeff_bound(a,n-1)) ENDIFMEASURE n
poly_continuity_const(a,n,x,(epsil:posreal)): posreal = IF n = 0 THEN 1/2 ELSE LET epcon = epsil/(poly_coeff_bound(a,n) *
(sigma(1,n,LAMBDA (i:nat): sigma(1,i,LAMBDA (j:nat): IF (j=0 OR j>i) THEN 0 ELSE C(i,j-1)*abs(x)^(j-1) ENDIF)) + 1)) IN min(epcon,1/2) ENDIF
poly_continuity_const_def: LEMMAFORALL (epsil:posreal): LET delt = poly_continuity_const(a,n,x,epsil) INFORALL (y:real): abs(x-y)<delt IMPLIES
abs(polynomial(a,n)(y)-polynomial(a,n)(x))<epsil
max_nonvanishing_deriv(a,n,x): RECURSIVE {lastn:nat | lastn <= n AND
((EXISTS (ii:upto(n)): a(ii)/=0) IMPLIES (polynomial(poly_n_deriv(a,n-lastn),lastn)(x)/=0 AND FORALL (i:nat): i>lastn AND i<=n IMPLIES
polynomial(poly_n_deriv(a,n-i),i)(x)=0))} = IF n=0 OR polynomial(a,n)(x)/=0 THEN n ELSE max_nonvanishing_deriv(poly_deriv(a),n-1,x) ENDIF MEASURE n
poly_cancel: LEMMA (EXISTS (i:nat):i<=p AND h(i)/=0) AND
(FORALL (x): polynomial(h,p)(x)*polynomial(a,n)(x) =
polynomial(h,p)(x)*polynomial(b,m)(x)) IMPLIES
polynomial(a,n)=polynomial(b,m)
% In order to make Knuth's bound useful, we need a way to comp kth root. % We follow the method of de Moura
Knuth_bound_simple: LEMMAFORALL (r:real):
a(n)=1 AND polynomial(a,n)(r)=0 AND r>0 AND n>0 IMPLIES EXISTS (k:subrange(1,n)): a(n-k)<0 AND r^k <= - 2^k * a(n-k)
Knuth_poly_pos_root_bound(a,(n|a(n)=1 AND n>0)): {K:real| FORALL (x:real):
polynomial(a,n)(x)=0 AND x>0 IMPLIES x <= K} = LET maxKfun = (LAMBDA (k:nat): IF 1<=k AND k<=n AND a(n-k)<0 THENLET aquot = -a(n-k),
log2j = least_pow_2_ge(aquot),
rootexp = floor(log2j/k)+1 IN 2^rootexp ELSE -1 ENDIF) IN 2*max_rec(maxKfun,1,n)
Knuth_poly_root_bound(a,(n|a(n)/=0)): {K:nnreal| FORALL (x:real):
polynomial(a,n)(x)=0 IMPLIES abs(x) <= K} = IF n=0 THEN 0 ELSE LET negsign = (LAMBDA (i:nat): IF even?(i) THEN 1 ELSE -1 ENDIF),
nega = (LAMBDA (i:nat): negsign(i)*negsign(n)*a(i)/a(n)),
newa = (LAMBDA (i:nat): a(i)/a(n)),
negbound = Knuth_poly_pos_root_bound(nega,n),
posbound = Knuth_poly_pos_root_bound(newa,n) IN max(posbound,max(negbound,0)) ENDIF
Knuth_poly_root_strict_bound(a,(n|a(n)/=0)): {K:posreal| FORALL (x:real):
polynomial(a,n)(x)=0 IMPLIES abs(x) < K} = LET Kprb = Knuth_poly_root_bound(a,n) IN IF Kprb=0 THEN 1 ELSIF polynomial(a,n)(Kprb)=0 OR polynomial(a,n)(-Kprb)=0 THEN 1.01*Kprb ELSE Kprb ENDIF
poly_increasing_is_strict: LEMMAFORALL (xlb,yub:real):
xlb < yub AND n > 0 AND a(n)/=0 IMPLIES
((FORALL (c:real): xlb <= c AND c <= yub IMPLIES polynomial(poly_deriv(a),n-1)(c) >= 0) IFF
(FORALL (x,y:real): xlb <= x AND x<y AND y<=yub IMPLIES polynomial(a,n)(x) < polynomial(a,n)(y)))
poly_increasing_is_strict2: LEMMAFORALL (xlb,yub:real):
xlb < yub AND n > 0 AND a(n)/=0 IMPLIES
((FORALL (c:real): xlb <= c AND c <= yub IMPLIES polynomial(poly_deriv(a),n-1)(c) >= 0) IFF
(FORALL (x,y:real): xlb <= x AND x<y AND y<=yub IMPLIES polynomial(a,n)(x) <= polynomial(a,n)(y)))
poly_decreasing_is_strict: LEMMAFORALL (xlb,yub:real):
xlb < yub AND n > 0 AND a(n)/=0 IMPLIES
((FORALL (c:real): xlb <= c AND c <= yub IMPLIES polynomial(poly_deriv(a),n-1)(c) <= 0) IFF
(FORALL (x,y:real): xlb <= x AND x<y AND y<=yub IMPLIES polynomial(a,n)(x) > polynomial(a,n)(y)))
poly_decreasing_is_strict2: LEMMAFORALL (xlb,yub:real):
xlb < yub AND n > 0 AND a(n)/=0 IMPLIES
((FORALL (c:real): xlb <= c AND c <= yub IMPLIES polynomial(poly_deriv(a),n-1)(c) <= 0) IFF
(FORALL (x,y:real): xlb <= x AND x<y AND y<=yub IMPLIES polynomial(a,n)(x) >= polynomial(a,n)(y)))
poly_injective_monotone: LEMMAFORALL (xlb,yub:real):
xlb < yub AND n > 0 AND a(n)/=0 IMPLIES
((FORALL (x,y:real): xlb <= x AND x<y AND y<=yub IMPLIES polynomial(a,n)(x) /= polynomial(a,n)(y)) IFF
((FORALL (x,y:real): xlb <= x AND x<y AND y<=yub IMPLIES polynomial(a,n)(x) > polynomial(a,n)(y)) OR
(FORALL (x,y:real): xlb <= x AND x<y AND y<=yub IMPLIES polynomial(a,n)(x) < polynomial(a,n)(y))))
% Max root is like max_linear_div_power, but more robust.
root_degree(a,n)(y): RECURSIVE {m| m<=n AND (a(n)/=0 IMPLIES
((EXISTS (b:[nat->real]): (FORALL (x): polynomial(a,n)(x)=(x-y)^m*polynomial(b,n-m)(x)) AND
polynomial(b,n-m)(y)/=0 AND b(n-m)/=0) AND
(polynomial(a,n)(y)=0 IMPLIES m>0) AND
((n>0 AND m>0) IMPLIES (EXISTS (q:[nat->real]): (FORALL (x): polynomial(poly_deriv(a),n-1)(x) =
(x-y)^(m-1)*polynomial(q,n-m)(x)) AND
polynomial(q,n-m)(y)/=0))))} = IF polynomial(a,n)(y)/=0 OR n=0 THEN 0 ELSE 1+root_degree(poly_shift(LAMBDA (i:nat): poly_shift(a,n)(y)(i+1),n-1)(-y),n-1)(y) ENDIFMEASURE n
root_degree_max_linear_div_power: LEMMA a(n)/=0 AND
(polynomial(a,n)(y)=0 OR root_degree(a,n)(y)>0) IMPLIES
max_linear_div_power?(a,n,y)(root_degree(a,n)(y))
root_degree_unique: LEMMA
a(n)/=0 AND m<=n AND (EXISTS (b:[nat->real]): (FORALL (x):
polynomial(a,n)(x)=(x-y)^m*polynomial(b,n-m)(x)) AND
polynomial(b,n-m)(y)/=0) IMPLIES
m = root_degree(a,n)(y)
only_root_between?(a,n,x,y)(z): bool =
x<z AND z<y AND
(FORALL (r:real): x<=r AND r<=y AND r/=z IMPLIES
polynomial(a,n)(r)/=0)
root_degree_odd: LEMMA a(n)/=0 AND only_root_between?(a,n,x,y)(z) IMPLIES
(odd?(root_degree(a,n)(z)) IFF sign_ext(polynomial(a,n)(x))=
-sign_ext(polynomial(a,n)(y)))
root_degree_even: LEMMA a(n)/=0 AND only_root_between?(a,n,x,y)(z) IMPLIES
(even?(root_degree(a,n)(z)) IFF sign_ext(polynomial(a,n)(x))=
sign_ext(polynomial(a,n)(y)))
root_degree_deriv: LEMMA a(n)/=0 AND polynomial(a,n)(y)=0 AND n>0 IMPLIES
root_degree(poly_deriv(a),n-1)(y) = root_degree(a,n)(y)-1
root_degree_mult: LEMMA a(n)/=0 AND b(m)/=0 IMPLIES
root_degree(polynomial_prod(a,n,b,m),n+m)(y) = root_degree(a,n)(y)+root_degree(b,m)(y)
root_degree_scal: LEMMA a(n)/=0 AND x/=0 IMPLIES
root_degree(x*a,n)(y) = root_degree(a,n)(y)
root_degree_power_linear: LEMMA
root_degree(power_linear(-y, 1, m),m)(y) = m
root_degree_lower_bound: LEMMAFORALL (k:nat):
a(n)/=0 AND (EXISTS (b:[nat->real]): b(k)/=0 AND (FORALL (x):
polynomial(a,n)(x)=(x-y)^m*polynomial(b,k)(x))) IMPLIES
(k=n-m AND root_degree(a,n)(y)>=m)
root_degree_division: LEMMA FORALL (a,b,g,h:[nat->real],n,m,k,p:nat):
(FORALL (x:real): polynomial(a,n)(x) =
polynomial(g,k)(x)*polynomial(b,m)(x)
+ polynomial(h,p)(x)) AND h(p)/=0 AND
a(n)/=0 AND b(m)/=0 IMPLIES
((root_degree(a,n)(y)<root_degree(b,m)(y) IMPLIES
root_degree(h,p)(y)=root_degree(a,n)(y)) AND
root_degree(h,p)(y)>=
min(root_degree(a,n)(y),root_degree(b,m)(y)))
signs_swap_division: LEMMA FORALL (a,b,g,h:[nat->real],n,m,k,p:nat):
only_root_between?(a,n,x,y)(z) AND
only_root_between?(b,m,x,y)(z) AND
only_root_between?(h,p,x,y)(z) AND
(FORALL (r:real): polynomial(a,n)(r) =
polynomial(g,k)(r)*polynomial(b,m)(r)
+ polynomial(h,p)(r)) AND h(p)/=0 AND
a(n)/=0 AND b(m)/=0 AND
root_degree(a,n)(z)=root_degree(h,p)(z) AND
root_degree(b,m)(z)>=root_degree(h,p)(z) IMPLIES
((sign_ext(polynomial(a,n)(x))*sign_ext(polynomial(h,p)(x))=1 AND
sign_ext(polynomial(a,n)(y))*sign_ext(polynomial(h,p)(y))=1) OR
(EXISTS (sig:Sign): (FORALL (abh:[nat->real],kz:nat):
((abh=a AND kz=n) OR (abh=b AND kz=m) OR (abh=h AND kz=p)) IMPLIES
sign_ext(polynomial(abh,kz)(x)) = sig*sign_ext(polynomial(abh,kz)(y)))))
END more_polynomial_props
¤ Dauer der Verarbeitung: 0.13 Sekunden
(vorverarbeitet)
¤
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung ist noch experimentell.