bsdegmono : VAR DegreeMono
pprod : VAR Polyproduct
a,a1 : VAR real
X,Y : VAR Vars
v : VAR nat
nvars,terms : VAR posnat
cf : VAR Coeff
bspoly,bspolz : VAR MultiBernstein
coeffmono1,
coeffmono2,
coeffmono : VAR CoeffMono
rel : VAR [[real,real]->bool]
intendpts : VAR IntervalEndpoints
relreal : VAR RealOrder
bsproduct_eval(pprod,bsdegmono,nvars)(X) : real =
product(0,nvars-1,LAMBDA (i:nat):sigma(0,bsdegmono(i), LAMBDA (j:nat): IF j > bsdegmono(i) THEN 0 ELSE pprod(i)(j)*Bern(j,bsdegmono(i))(X(i)) ENDIF))
multibs_eval(bspoly,bsdegmono,cf,nvars,terms)(X) : real =
sigma(0,terms-1,LAMBDA (i:nat): cf(i)*bsproduct_eval(bspoly(i),bsdegmono,nvars)(X))
%%% Another version of evaluation for Bernstein Polynomials is needed to prove the main theorems %%%
multibs_eval_mono(bspoly,bsdegmono,cf,nvars,terms)(coeffmono) : real =
sigma(0,terms-1,LAMBDA (i:nat): cf(i)*product(0,nvars-1,LAMBDA (j:nat): bspoly(i)(j)(coeffmono(j))))
multibs_eval_rec(bspoly,bsdegmono,cf,nvars,terms,v)
(f:CoeffMono)(X) : RECURSIVE real = IF v = 0 THEN multibs_eval_mono(bspoly,bsdegmono,cf,nvars,terms)(f)*
product(0,nvars-1,LAMBDA (k:nat): IF f(k)<=bsdegmono(k) THEN
Bern(f(k),bsdegmono(k))(X(k)) ELSE 1 ENDIF) ELSE sigma(0,bsdegmono(v-1),LAMBDA (d:nat): LET nf = f WITH [(v-1) := d] IN
multibs_eval_rec(bspoly,bsdegmono,cf,nvars,terms,v-1)(nf)(X)) ENDIFMEASURE v
Bern_coeffs_rel_rec(bspoly,bsdegmono,cf,nvars,terms,v)
(f:CoeffMono,rel:[[real,real]->bool],a:real) : RECURSIVE bool = IF v = 0 THEN rel(multibscoeff(bspoly,bsdegmono,cf,nvars,terms)(f),a) ELSEFORALL (d:upto(bsdegmono(v-1))): LET nf = f WITH [(v-1) := d] IN
Bern_coeffs_rel_rec(bspoly,bsdegmono,cf,nvars,terms,v-1)(nf,rel,a) ENDIFMEASURE v
multibs_cornerpoint_coeff: LEMMA LET X = LAMBDA (i:nat): IF coeffmono(i)=0 THEN 0 ELSE 1 ENDIF IN
corner_point?(nvars,bsdegmono)(coeffmono) IMPLIES
multibs_eval(bspoly,bsdegmono,cf,nvars,terms)(X) =
multibscoeff(bspoly,bsdegmono,cf,nvars,terms)(coeffmono)
Bern_coeffs_endpoints_rel_rec(bspoly,bsdegmono,cf,nvars,terms,v)
(f:CoeffMono,rel:[[real,real]->bool],a:real) : RECURSIVE {l : list[real] | cons?(l) IMPLIES unitbox?(nvars)(list2array(0)(l)) AND
length(l)=nvars} = IF v = 0 THEN IF rel(multibscoeff(bspoly,bsdegmono,cf,nvars,terms)(f),a) THEN null ELSE corner_to_point(f,nvars) ENDIF ELSE LET nf0 = f WITH [(v-1):=0],
list0 = Bern_coeffs_endpoints_rel_rec(bspoly,bsdegmono,cf,nvars,terms,v-1)
(nf0,rel,a) IN IF cons?(list0) THEN list0 ELSE LET nfd = f WITH [(v-1):=bsdegmono(v-1)] IN
Bern_coeffs_endpoints_rel_rec(bspoly,bsdegmono,cf,nvars,terms,v-1)(nfd,rel,a) ENDIF ENDIF MEASURE v
Bern_coeffs_endpoints_rel(bspoly,bsdegmono,cf,nvars,terms,intendpts)(rel,a) :
{l : list[real] | cons?(l) IMPLIES unitbox?(nvars)(list2array(0)(l)) AND length(l)=nvars} = IF (FORALL (j:below(nvars)): intendpts(j)`1 AND intendpts(j)`2) THEN
Bern_coeffs_endpoints_rel_rec(bspoly,bsdegmono,cf,nvars,terms,nvars)(zeroes,rel,a) ELSE null ENDIF
Bern_coeffs_counterexample: LEMMA LET listex = Bern_coeffs_endpoints_rel(bspoly,bsdegmono,cf,nvars,terms,intendpts)(rel,a) IN
cons?(listex) IMPLIES
length(listex) = nvars AND NOT rel(multibs_eval(bspoly,bsdegmono,cf,nvars,terms)(list2array(0)(listex)),a)
% i is degree for splitting, r is variable of the product, % and j is the coeff index
Bern_split_left_mono(pprod,bsdegmono)(i:nat)(r:nat)(j:nat): real = IF i/=r THEN pprod(r)(j) ELSIF j>bsdegmono(i) THEN 0 ELSE (1/2^j)*sigma(0,j, LAMBDA (k:nat): IF k>j THEN 0 ELSE C(j,k)*pprod(i)(k) ENDIF) ENDIF
Bern_split_right_mono(pprod,bsdegmono)(i:nat)(r:nat)(j:nat): real = IF i/=r THEN pprod(r)(j) ELSIF j>bsdegmono(i) THEN 0 ELSE
(1/2^(bsdegmono(i)-j))*sigma(0,bsdegmono(i)-j, LAMBDA (k:nat): IF k>bsdegmono(i)-j THEN 0 ELSE C(bsdegmono(i)-j,k)*pprod(i)(bsdegmono(i)-k) ENDIF) ENDIF
% Bern_split_left_mpoly(bspoly,bsdegmono)(i) is a MultiBernstein
Bern_eval_left: LEMMA
rel(multibs_eval(bspoly, bsdegmono, cf, nvars, terms)(X),a) IMPLIES LET Xmid = X WITH [(v) := 2*X(v)] IN
rel(multibs_eval(LAMBDA (k: nat):Bern_split_left_mono(bspoly(k), bsdegmono)(v),
bsdegmono, cf, nvars, terms)(Xmid),a)
Bern_eval_left_def: LEMMA LET Xmid = X WITH [(v) := 2*X(v)] IN
multibs_eval(LAMBDA (k: nat):Bern_split_left_mono(bspoly(k), bsdegmono)(v),
bsdegmono, cf, nvars, terms)(Xmid) =
multibs_eval(bspoly, bsdegmono, cf, nvars, terms)(X)
Bern_eval_right: LEMMA
rel(multibs_eval(bspoly, bsdegmono, cf, nvars, terms)(X),a) IMPLIES LET Xmid = X WITH [(v) := 2*X(v)-1] IN
rel(multibs_eval(LAMBDA (k: nat):Bern_split_right_mono(bspoly(k), bsdegmono)(v),
bsdegmono, cf, nvars, terms)(Xmid),a)
Bern_eval_right_def: LEMMA LET Xmid = X WITH [(v) := 2*X(v)-1] IN
multibs_eval(LAMBDA (k: nat):Bern_split_right_mono(bspoly(k), bsdegmono)(v),
bsdegmono, cf, nvars, terms)(Xmid)=
multibs_eval(bspoly, bsdegmono, cf, nvars, terms)(X)
%%%%%%%%%%% Sweeping on Polyproduct's (NOT MultiBernstein's) %%%%%%%%%%%
% p is the recursive counter, v is the variable to split, % and j is the index for the coefficient of that power (x_r^j)
Bernstein_sweep(pprod,v)(p:nat)(j:nat): RECURSIVE real = IF p = 0 THEN pprod(v)(j) ELSE LET bpm = Bernstein_sweep(pprod,v)(p-1) IN IF j < p THEN bpm(j) ELSE (1/2)*(bpm(j-1) + bpm(j)) ENDIF ENDIF MEASURE p
% Bernstein_sweep(pprod,i)(p) is a Polynomial
Bern_sweep_left(pprod,bsdegmono)(i:nat)(r:nat) : Polynomial = IF i /= r THEN pprod(r) ELSE
Bernstein_sweep(pprod,i)(bsdegmono(i)) ENDIF
Bern_sweep_right(pprod,bsdegmono)(i:nat)(r:nat)(j:nat) : real = IF i /= r THEN pprod(r)(j) ELSIF j <= bsdegmono(r) THEN
Bernstein_sweep(pprod,i)(bsdegmono(i)-j)(bsdegmono(i)) ELSE 0 ENDIF
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.