finite_bij_real_remove_two: LEMMA FORALL (m:nat,A:set[real],bij:[below(m)->(A)]):
bijective?(bij) AND A(x) AND A(y) AND x/=y IMPLIES
m-2>=0 ANDEXISTS (bijec:[below(m-2)->{r:(A)|r/=x AND r/=y}]):
bijective?(bijec)
computed_sturm_spec: LEMMA a(n)/=0 AND (FORALL (i:nat): i>n IMPLIES a(i)=0) IMPLIES LET sl = sturm_chain(a,n),
P: [nat->[nat->int]] = (LAMBDA (j:nat): IF j<length(sl) THEN list2array[int](0)(nth(sl,length(sl)-1-j)) ELSE (LAMBDA (i:nat): 0) ENDIF),
N: [nat->nat] = (LAMBDA (j:nat): IF j<length(sl) THEN max(length(nth(sl,length(sl)-1-j))-1,0) ELSE 0 ENDIF),
M: nat = length(sl)-1 IN constructed_sturm_sequence?(P,N,M) AND P(0)=a AND N(0)=n
Eq_computed_remainder?(a,(n|a(n)/=0))(sl:list[list[int]]): bool =
sl = sturm_chain(LAMBDA (i:nat): IF i<=n THEN a(i) ELSE 0 ENDIF,n)
% Standard but possibly unbounded interval %
lower_bound,upper_bound: VAR bool
% Formalizatin brings in complications with evaluating at infinity
roots_closed_int(a,(n|a(n)/=0),low:real,(high:real|low<high),lower_bound,upper_bound:bool,
sl:(Eq_computed_remainder?(a,n))):
int = LET newa = (LAMBDA (i:nat): IF i<=n THEN a(i) ELSE 0 ENDIF),
P: [nat->[nat->int]] = (LAMBDA (j:nat): IF j<length(sl) THEN list2array[int](0)(nth(sl,length(sl)-1-j)) ELSE (LAMBDA (i:nat): 0) ENDIF),
N: [nat->nat] = (LAMBDA (j:nat): IF j<length(sl) THEN max(length(nth(sl,length(sl)-1-j))-1,0) ELSE 0 ENDIF),
M: nat = length(sl)-1,
nscnorm = LAMBDA (xyz:real): number_sign_changes( LAMBDA (i:nat): polynomial(P(i),N(i))(xyz),M-1),
nschighlow = LAMBDA (b:bool): IF b THEN number_sign_changes(LAMBDA (i:nat): P(i)(N(i)),M-1) ELSE number_sign_changes(LAMBDA (i:nat): (-1)^N(i)*P(i)(N(i)),M-1) ENDIF,
newlow = IF ((NOT lower_bound) OR polynomial(P(0),N(0))(low)/=0 OR polynomial(P(1),N(1))(low)/=0) THEN low ELSE low-poly_rootless_width(a,n,low,TRUE)/2 ENDIF,
newhigh = IF ((NOT upper_bound) OR polynomial(P(0),N(0))(high)/=0 OR polynomial(P(1),N(1))(high)/=0) THEN high ELSE high+poly_rootless_width(a,n,high,TRUE)/2 ENDIF,
Nroots = IF lower_bound and upper_bound THEN nscnorm(newlow)`num-nscnorm(newhigh)`num ELSIF upper_bound THEN nschighlow(FALSE)`num-nscnorm(newhigh)`num ELSIF lower_bound THEN nscnorm(newlow)`num-nschighlow(TRUE)`num ELSE nschighlow(FALSE)`num-nschighlow(TRUE)`num ENDIF,
adjlow = IF lower_bound AND polynomial(P(0),N(0))(low)=0 AND polynomial(P(1),N(1))(low)/=0 THEN 1 ELSE 0 ENDIF IN Nroots + adjlow
roots_closed_int_def_truetrue: LEMMAFORALL (sl:(Eq_computed_remainder?(a,n))): a(n)/=0 AND x<y IMPLIES LET rootnum = roots_closed_int(a,n,x,y,true,true,sl),
Aset = {z:real|x<=z AND z<=y AND polynomial(a,n)(z)=0} IN rootnum>=0 ANDEXISTS (bij: [below(rootnum)->(Aset)]): bijective?(bij)
roots_closed_int_def_falsetrue: LEMMAFORALL (sl:(Eq_computed_remainder?(a,n))): a(n)/=0 AND x<y IMPLIES LET rootnum = roots_closed_int(a,n,x,y,false,true,sl),
Aset = {z:real|z<=y AND polynomial(a,n)(z)=0} IN rootnum>=0 ANDEXISTS (bij: [below(rootnum)->(Aset)]): bijective?(bij)
roots_closed_int_def_truefalse: LEMMAFORALL (sl:(Eq_computed_remainder?(a,n))): a(n)/=0 AND x<y IMPLIES LET rootnum = roots_closed_int(a,n,x,y,true,false,sl),
Aset = {z:real|x<=z AND polynomial(a,n)(z)=0} IN rootnum>=0 ANDEXISTS (bij: [below(rootnum)->(Aset)]): bijective?(bij)
roots_closed_int_def_falsefalse: LEMMAFORALL (sl:(Eq_computed_remainder?(a,n))): a(n)/=0 AND x<y IMPLIES LET rootnum = roots_closed_int(a,n,x,y,false,false,sl),
Aset = {z:real| polynomial(a,n)(z)=0} IN rootnum>=0 ANDEXISTS (bij: [below(rootnum)->(Aset)]): bijective?(bij)
roots_closed_int_def: LEMMAFORALL (sl:(Eq_computed_remainder?(a,n))): a(n)/=0 AND x<y IMPLIES LET rootnum = roots_closed_int(a,n,x,y,lower_bound,upper_bound,sl),
Aset = {z:real|(lower_bound IMPLIES x<=z) AND (upper_bound IMPLIES z<=y) AND polynomial(a,n)(z)=0} IN rootnum>=0 ANDEXISTS (bij: [below(rootnum)->(Aset)]): bijective?(bij)
number_roots_interval(a,(n|a(n)/=0),I,(sl:(Eq_computed_remainder?(a,n)))): nat = IF I`lb >= I`ub THEN 0 ELSE LET rootstotal = roots_closed_int(a,n,I`lb,I`ub,I`bounded_below,I`bounded_above,sl),
adjlow = IF I`bounded_below AND (NOT I`closed_below) AND polynomial(a,n)(I`lb)=0 THEN -1 ELSE 0 ENDIF,
adjhigh = IF I`bounded_above AND (NOT I`closed_above) AND polynomial(a,n)(I`ub)=0 THEN -1 ELSE 0 ENDIF IN rootstotal + adjlow + adjhigh ENDIF
number_roots_interval_def: LEMMAFORALL (sl:(Eq_computed_remainder?(a,n))): a(n)/=0 AND I`lb<I`ub IMPLIES LET rootnum = number_roots_interval(a,n,I,sl),
Aset = {z:real|contains?(I)(z) AND polynomial(a,n)(z)=0} IN rootnum>=0 ANDEXISTS (bij: [below(rootnum)->(Aset)]): bijective?(bij)
always_nonnegative_int(a,(n|a(n)/=0),x,y:real,(sl:(Eq_computed_remainder?(a,n)))): RECURSIVE {bb:bool|
bb IFFFORALL (z:real): x<=z AND z<=y IMPLIES polynomial(a,n)(z)>=0} = IF x>y THENTRUE ELSIF x=y THEN polynomial(a,n)(x)>=0 ELSIF roots_closed_int(a,n,x,y,TRUE,TRUE,sl) <= 1 THEN
polynomial(a,n)(x)>=0 AND polynomial(a,n)(y)>=0 ELSE
always_nonnegative_int(a,n,x,(x+y)/2,sl) AND
always_nonnegative_int(a,n,(x+y)/2,y,sl) ENDIF MEASURE meas_fun_alw_nonneg BY real_ord_ep(min_poly_root_dist(a,n))
always_nonnegative(a,(n|a(n)/=0),(I|I`lb<I`ub)): bool = LET newa = (LAMBDA (i:nat): IF i<=n THEN a(i) ELSE 0 ENDIF),
sl = sturm_chain(newa,n) IN IF I`bounded_below AND I`bounded_above THEN always_nonnegative_int(a,n,I`lb,I`ub,sl) ELSE LET M = Knuth_poly_root_strict_bound(a,n) IN IF I`bounded_above THEN
always_nonnegative_int(a,n,min(-M,I`ub-1),I`ub,sl) ELSIF I`bounded_below THEN
always_nonnegative_int(a,n,I`lb,max(M,I`lb+1),sl) ELSE always_nonnegative_int(a,n,-M,M,sl) ENDIF ENDIF
compute_poly_sat(a,(n|a(n)/=0),(I|I`lb<I`ub),realord): bool = IF realord = (>=) THEN always_nonnegative(a,n,I) ELSIF realord = (<=) THEN always_nonnegative(-a,n,I) ELSE LET newa = (LAMBDA (i:nat): IF i<=n THEN a(i) ELSE 0 ENDIF),
sl = sturm_chain(newa,n) IN number_roots_interval(a,n,I,sl)=0 AND realord(polynomial(a,n)((I`lb+I`ub)/2),0) ENDIF
compute_poly_mono_basic(aq,(n|aq(n)/=0),(I|I`lb<I`ub),realord): bool = IF n = 1 THEN realord(sign(aq(1))*I`lb,sign(aq(1))*I`ub) ELSIF (realord = (/=[real])) THEN
compute_poly_sat_rational(poly_deriv(aq),n-1,I,>=) OR
compute_poly_sat_rational(poly_deriv(aq),n-1,I,<=) ELSIF realord(I`lb,I`ub) THEN
compute_poly_sat_rational(poly_deriv(aq),n-1,I,>=) ELSE
compute_poly_sat_rational(poly_deriv(aq),n-1,I,<=) ENDIF
compute_poly_mono_basic_def: LEMMA aq(n)/=0 AND I`lb<I`ub IMPLIES
((FORALL (x,y:real): x<y AND contains?(I)(x) AND contains?(I)(y) IMPLIES
realord(polynomial(aq,n)(x),polynomial(aq,n)(y))) IFF
compute_poly_mono_basic(aq,n,I,realord))
mono(aq,(n|aq(n)/=0),(I|I`lb<I`ub),ro,realord): bool = IF ro(1,1) ANDNOT realord(1,1) THENFALSE ELSIF (ro=(<)) OR (ro=(<=)) THEN compute_poly_mono_basic(aq,n,I,realord) ELSIF (ro=(>)) OR (ro=(>=)) THEN compute_poly_mono_basic(aq,n,I,swap(realord)) ELSIFNOT (realord=(/=[real])) THENFALSE ELSE compute_poly_mono_basic(aq,n,I,realord) OR compute_poly_mono_basic(aq,n,I,swap(realord)) ENDIF
poly_non_constant_real_int: LEMMA aq(n)/=0 AND I`lb<I`ub IMPLIES EXISTS (x,y:real): x<y AND contains?(I)(x) AND contains?(I)(y) AND
polynomial(aq,n)(x)/=polynomial(aq,n)(y)
mono_def: LEMMA aq(n)/=0 AND I`lb<I`ub IMPLIES
((FORALL (x,y:real): ro(x,y) AND contains?(I)(x) AND contains?(I)(y) IMPLIES
realord(polynomial(aq,n)(x),polynomial(aq,n)(y))) IFF
mono(aq,n,I,ro,realord))
END compute_sturm
¤ Dauer der Verarbeitung: 0.15 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.