a,b,r : VAR [nat->real]
i,j,k,d,n : VAR nat
sig: VAR real
NSC : TYPE = [# num: nat, lastnz: real #]
number_sign_changes(a,i): RECURSIVE NSC = IF i = 0THEN (# num:= 0, lastnz:= a(0) #) ELSELET prev = number_sign_changes(a,i-1) INIF a(i)/=0AND prev`lastnz/=0AND sign_ext(a(i))/=sign_ext(prev`lastnz) THEN (# num:=prev`num+1,lastnz:=a(i) #) ELSIF a(i)/=0 THEN prev WITH [lastnz:=a(i)] ELSE prev ENDIF ENDIFMEASURE i
num : VAR nat
lastnz : VAR real
sign_changes(a,n,(i:subrange(1,n+1)),num,lastnz) : RECURSIVE
{m: nat | LET nsci = number_sign_changes(a,i-1),
nscn = number_sign_changes(a,n) IN
num = nsci`num AND lastnz = nsci`lastnz IMPLIES
m = nscn`num} = IF i = n+1THEN num ELSIF a(i)/=0AND lastnz/=0AND sign_ext(a(i))/=sign_ext(lastnz) THEN
sign_changes(a,n,i+1,num+1,a(i)) ELSIF a(i)/=0THEN
sign_changes(a,n,i+1,num,a(i)) ELSE
sign_changes(a,n,i+1,num,lastnz) ENDIF MEASURE n-i+1
nsc_regular_swap: LEMMA
k<=d AND
(FORALL (j): j<=k IMPLIES (sign_ext(a(j))=sign_ext(b(j)) OR
(sign_ext(a(j))/=sign_ext(b(j)) AND
a(j+1)/=0AND
(j>0IMPLIES sign_ext(a(j-1))=-sign_ext(a(j+1))) AND
(j>0IMPLIES sign_ext(b(j-1))=-sign_ext(b(j+1))) AND
(j=0IMPLIES sign_ext(a(0)) =-sign_ext(a(1)))))) AND sign_ext(a(k)) = sign_ext(b(k)) AND (FORALL (j:nat): j<k IMPLIES
a(j)/=0AND b(j)/=0) IMPLIES LET nsca = number_sign_changes(a,k),
nscb = number_sign_changes(b,k) IN ((k>=1IMPLIES sign_ext(nsca`lastnz)=sign_ext(nscb`lastnz)) AND
nsca`num = nscb`num +
(IF k>=1AND sign_ext(a(0))=-sign_ext(b(0)) THEN1ELSE0ENDIF))
nsc_edge_diff: LEMMA (sig=-1OR sig=1) AND
k<=d AND
(FORALL (j): j<=k IMPLIES (sign_ext(a(j))=sign_ext(b(j)) OR b(j)=0)) AND (FORALL (j): 0<j AND j<=k AND b(j)=0IMPLIES b(j-1)/=0) AND sign_ext(a(k)) = sign_ext(b(k)) AND (FORALL (j:nat): j<k IMPLIES a(j)/=0) AND (b(0)=0IMPLIES sign_ext(a(0))=sig*sign_ext(a(1))) AND (FORALL (j:nat): 0<j AND j<k AND b(j)=0IMPLIES sign_ext(b(j-1))=-sign_ext(b(j+1))) IMPLIES LET nsca = number_sign_changes(a,k),
nscb = number_sign_changes(b,k) IN ((k>=1IMPLIES sign_ext(nsca`lastnz)=sign_ext(nscb`lastnz)) AND
nsca`num = nscb`num +
(IF k>=1AND b(0)=0AND sig=-1THEN1ELSE0ENDIF))
nsc_multiroot: LEMMA (sig=-1OR sig=1) AND
k<=d AND
(FORALL (j): 0<j AND j<=k IMPLIES sign_ext(a(j))=sig*sign_ext(b(j))) AND
sign_ext(a(0))=-sig*sign_ext(b(0)) AND
sign_ext(a(0))=-sign_ext(a(1)) AND
sign_ext(b(0))= sign_ext(b(1)) AND
(FORALL (j): j<k IMPLIES (a(j)/=0AND b(j)/=0)) IMPLIES LET nsca = number_sign_changes(a,k)`num,
nscb = number_sign_changes(b,k)`num IN nsca = nscb + (IF k>=1THEN1ELSE0ENDIF)
nsc_multiroot_full: LEMMAFORALL (sigfun:[nat->real]):
(sig=-1OR sig=1) AND% The nominal sign
(FORALL (j): sigfun(j)=-1OR sigfun(j)=1) AND
k<=d AND
(FORALL (j): 0<j AND j<=k IMPLIES sign_ext(a(j))=sigfun(j)*sign_ext(b(j))) AND
(FORALL (j): 0<j AND j<=k AND sigfun(j)/=sig IMPLIES (1<j AND j<k AND sigfun(j-1)=sig AND sigfun(j+1)=sig AND sign_ext(a(j-1))=-sign_ext(a(j+1)) AND sign_ext(b(j-1))=-sign_ext(b(j+1)))) AND
sign_ext(a(0))=-sig*sign_ext(b(0)) AND
sign_ext(a(0))=-sign_ext(a(1)) AND
sign_ext(b(0))= sign_ext(b(1)) AND
(FORALL (j): j<=k IMPLIES (a(j)/=0AND b(j)/=0)) IMPLIES LET nsca = number_sign_changes(a,k)`num,
nscb = number_sign_changes(b,k)`num IN nsca = nscb + (IF k>=1THEN1ELSE0ENDIF)
END number_sign_changes
Messung V0.5 in Prozent
¤ Dauer der Verarbeitung: 0.9 Sekunden
(vorverarbeitet am 2026-06-06)
¤
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.