pseudo_div(g,n)(h,(m|h(m)/=0))(i): RECURSIVE {DT: DivListType |
(m>n OR i>n-m AND length(DT`reml)=n+1AND DT`rdegl = n) OR
(m=0AND length(DT`reml)=0AND DT`rdegl=0) OR
(m>0AND length(DT`reml)=m+i AND length(DT`reml)=DT`rdegl+1)}= IF m>n OR i>n-m THEN make_divlisttype((::),0,array2list(n+1)(g),n) ELSIF m = 0THEN make_divlisttype(array2list(n+1)(g),n,(::),0) ELSE LET ldt = IF i=n-m THEN make_divlisttype((::),n-m,array2list(n+1)(g),n) ELSE pseudo_div(g,n)(h,m)(i+1) ENDIF,
thisterm = nth(ldt`reml,ldt`rdegl) IN make_divlisttype(cons(thisterm,ldt`quotl),
n-m,array2list(m+i)(LAMBDA (j:nat): IF j>m+i THEN0 ELSIF j<i THEN h(m)*nth(ldt`reml,j) ELSE h(m)*nth(ldt`reml,j)-thisterm*h(j-i) ENDIF),m+i-1) ENDIF MEASURE max(n-m-i+1,0)
pseudo_div_lengths: LEMMA
h(m)/=0IMPLIES LET psd = pseudo_div(g,n)(h,m)(i),
pd = poly_divide(g,n)(h,m)(i),
qlength = length(psd`quotl),
rlength = length(psd`reml) IN psd`qdegl = pd`qdeg AND psd`rdegl = pd`rdeg AND psd`rdegl = max(rlength-1,0) AND
qlength = (IF i>n-m THEN0ELSIF m=0THEN n-m+1ELSE n-m-i+1ENDIF)
R,T : VAR nat
Ka,Kn,Km,Ki: int
Ca,Cn,Cm,Ci: int
GG(k:nat,n,m,i,R,T): int = IF i>n-m THEN0ELSIF m=0OR i = n-m OR k<i THEN1ELSE (1+(n-m-k)) ENDIF
HH(k:nat,n,m,i,R,T): int = IF i>n-m THEN0ELSIF m=0OR i=n-m OR k>=i+m THEN1ELSE1+(n-m-i) ENDIF
HHGGLEM: LEMMAFORALL (k:nat):
(k<=n-m AND i<=n-m) IMPLIES
(GG(k,n,0,i,R,T)=1AND
(n-m>=0IMPLIES GG(k,n,m,n-m,R,T)=1) AND
(k<=n-m AND k>i IMPLIES GG(k,n,m,1+i,R,T)=GG(k,n,m,i,R,T)) AND
HH(k,n,0,i,R,T)=1AND
(n-m>=0IMPLIES HH(k,n,m,n-m,R,T)=1) AND
(m/=0IMPLIES HH(i+m,n,m,1+i,R,T)+1=GG(i,n,m,i,R,T)) AND
(m/=0AND k<i IMPLIES HH(k,n,m,i,R,T) = HH(k,n,m,1+i,R,T)+1) AND
(m/=0AND k>=i AND k<i+m IMPLIES (HH(k,n,m,i,R,T)=HH(k,n,m,1+i,R,T)+1AND
HH(i+m,n,m,1+i,R,T)+1=HH(k,n,m,i,R,T) AND HH(i+m,n,m,1+i,R,T)=HH(k,n,m,1+i,R,T))))
pseudo_div_def: LEMMA
h(m)/=0AND
(FORALL (ii:nat): ii>n IMPLIES g(ii)=0) AND
(FORALL (ii:nat): ii>m IMPLIES h(ii)=0) IMPLIES LET psd = pseudo_div(g,n)(h,m)(i),
pd = poly_divide(g,n)(h,m)(i),
qlength = length(psd`quotl),
rlength = length(psd`reml) IN pd`quot = (LAMBDA (k:nat): (1/h(m))^GG(k,n,m,i,R,T))
*(LAMBDA (k:nat): IF k<=pd`qdeg AND
k>=pd`qdeg-qlength+1 THEN nth(psd`quotl,k-(pd`qdeg-qlength+1)) %n-m-pd`qdeg+j) ELSE0ENDIF) AND
pd`rem = (LAMBDA (k:nat): (1/h(m))^HH(k,n,m,i,R,T))*(LAMBDA (k:nat): IF k<=pd`rdeg AND (i>n-m OR m>0) THEN nth(psd`reml,k) ELSE0ENDIF)
poly_pseudo_remainder_def: LEMMA
h(m)/=0AND n>=m AND
(FORALL (ii:nat): ii>n IMPLIES g(ii)=0) AND
(FORALL (ii:nat): ii>m IMPLIES h(ii)=0) IMPLIES LET psd = pseudo_div(g,n)(h,m)(0),
pd = poly_divide(g,n)(h,m)(0),
qlength = length(psd`quotl),
rlength = length(psd`reml) IN pd`rem = (1/h(m))^(n-m+1) * (LAMBDA (k:nat): IF k<=psd`rdegl AND m>0THEN nth(psd`reml,k) ELSE0ENDIF)
adjusted_remainder(g,n)(h,(m|h(m)/=0)): list[int] = LET ppd = pseudo_div(g,n)(h,m)(0),
thisrem = ppd`reml,
pseudosign:nzint = IF h(m)>0OR mod(n-m+1,2)=0OR m>n THEN1ELSE -1ENDIF IN descalarize_list(nonzero_version(primitize_list(thisrem)),-pseudosign)
adjusted_remainder_def: LEMMA
h(m)/=0AND
(FORALL (ii:nat): ii>n IMPLIES g(ii)=0) AND
(FORALL (ii:nat): ii>m IMPLIES h(ii)=0) IMPLIES LET thisrem = adjusted_remainder(g,n)(h,m),
pd = poly_divide(g,n)(h,m)(0),
thisdeg = length[int](thisrem)-1,
thispoly = (LAMBDA (i:nat): IF i<=thisdeg THEN nth(thisrem,i) ELSE0ENDIF) IN thisdeg>=0IMPLIES ((EXISTS (cp:posreal):
polynomial(thispoly,thisdeg) = polynomial(-cp*pd`rem,pd`rdeg)) AND
thispoly(thisdeg) /= 0)
adjusted_remainder_length: LEMMA
h(m)/=0IMPLIES LET pr = adjusted_remainder(g,n)(h,m) IN
length(pr)<=m
adjusted_remainder_length2: LEMMA
h(m)/=0IMPLIES LET pr = adjusted_remainder(g,n)(h,m) IN
length(pr)<=n+1
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 und die Messung sind noch experimentell.