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.10 Sekunden
(vorverarbeitet am 2026-09-29)
¤
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.
Sekunden
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.