products/sources/formale Sprachen/PVS/groups image not shown  

Quellcode-Bibliothek

© Kompilation durch diese Firma

[Weder Korrektheit noch Funktionsfähigkeit der Software werden zugesichert.]

Datei: number_sign_changes.pvs   Sprache: PVS

Original von: PVS©

number_sign_changes: THEORY
BEGIN

  IMPORTING reals@sign

  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 = 0 THEN (# num:= 0, lastnz:= a(0) #)
    ELSE LET prev = number_sign_changes(a,i-1)
      IN  IF a(i)/=0 AND prev`lastnz/=0 AND 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
    ENDIF MEASURE 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+1 THEN num
    ELSIF a(i)/=0 AND lastnz/=0 AND sign_ext(a(i))/=sign_ext(lastnz) THEN
      sign_changes(a,n,i+1,num+1,a(i))
    ELSIF a(i)/=0 THEN
      sign_changes(a,n,i+1,num,a(i))
    ELSE
      sign_changes(a,n,i+1,num,lastnz)
    ENDIF
  MEASURE n-i+1

  num_sign_changes_def : LEMMA
    number_sign_changes(a,i)`num = sign_changes(a,i,1,0,a(0))

  number_sign_changes_lastnz_nonzero: LEMMA
    number_sign_changes(a,i)`lastnz = 0 IFF
    (FORALL (j:nat): j<=i IMPLIES a(j)=0)

  number_sign_changes_lastnz: LEMMA
    a(i)/=0 IMPLIES number_sign_changes(a,i)`lastnz=a(i)

  number_sign_changes_eq: LEMMA
    (FORALL (j:upto(i)): sign_ext(a(j))=sign_ext(b(j))) IMPLIES
    LET nsca = number_sign_changes(a,i),
        nscb = number_sign_changes(b,i)
    IN (nsca`num = nscb`num AND sign_ext(nsca`lastnz)=sign_ext(nscb`lastnz))

  testseqaa1(i):real = (-1)^i % (1,-1,1,-1,1,-1,1,-1,1,-1,...)
  testseqaa2:sequence[real] = testseqaa1 WITH [6:=-1] % (1,-1,1,-1,1,-1,-1,-1,1,-1,1,...)
  testseqaa3:sequence[real] = testseqaa2 WITH [7:=0] % (1,-1,1,-1,1,-1,-1,0,1,-1,1,...)
  testseqaa4:sequence[real] = testseqaa1 WITH [4:=0] % (1,-1,1,-1,0,-1,1,-1,1,-1,...)
  testseqaa5(i): real = IF i = 5 THEN 3 ELSIF i=6 
     THEN 4 ELSIF i=7 THEN 0 ELSIF i=8 THEN -4 ELSE (-1)^i ENDIF
   % (1,-1,1,-1,1,3,4,0,-4,-1,1,-1,1,...)
  testseqaa6(i):real = IF i = 0 OR i = 1 THEN 0 ELSE testseqaa1(i) ENDIF

  number_sign_changes_easy: LEMMA number_sign_changes(testseqaa2,7 ) = (# num:=5,lastnz:=-1 #)

  number_sign_changes_test1: LEMMA number_sign_changes(testseqaa1,i ) = (# num:=i,lastnz:=(-1)^i #)
  number_sign_changes_test2: LEMMA number_sign_changes(testseqaa2,7 ) = (# num:=5,lastnz:=-1 #)
  number_sign_changes_test3: LEMMA number_sign_changes(testseqaa2,8 ) = (# num:=6,lastnz:= 1 #)
  number_sign_changes_test4: LEMMA number_sign_changes(testseqaa3,7 ) = (# num:=5,lastnz:=-1 #)
  number_sign_changes_test5: LEMMA number_sign_changes(testseqaa3,9 ) = (# num:=7,lastnz:=-1 #)
  number_sign_changes_test6: LEMMA number_sign_changes(testseqaa4,8 ) = (# num:=6,lastnz:= 1 #)
  number_sign_changes_test7: LEMMA number_sign_changes(testseqaa5,10) = (# num:=6,lastnz:= 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)/=0 AND
        (j>0 IMPLIES sign_ext(a(j-1))=-sign_ext(a(j+1))) AND
 (j>0 IMPLIES sign_ext(b(j-1))=-sign_ext(b(j+1))) AND
 (j=0 IMPLIES 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)/=0 AND b(j)/=0)
    IMPLIES
      LET nsca = number_sign_changes(a,k),
         nscb = number_sign_changes(b,k)
      IN  ((k>=1 IMPLIES sign_ext(nsca`lastnz)=sign_ext(nscb`lastnz)) AND
         nsca`num = nscb`num + 
     (IF k>=1 AND sign_ext(a(0))=-sign_ext(b(0)) THEN 1 ELSE 0 ENDIF))

  nsc_edge_diff: LEMMA (sig=-1 OR 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)=0 IMPLIES 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)=0 IMPLIES sign_ext(a(0))=sig*sign_ext(a(1)))
    AND (FORALL (j:nat): 0<j AND j<k AND b(j)=0 IMPLIES 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>=1 IMPLIES sign_ext(nsca`lastnz)=sign_ext(nscb`lastnz)) AND
         nsca`num = nscb`num + 
     (IF k>=1 AND b(0)=0 AND sig=-1 THEN 1 ELSE 0 ENDIF))

  nsc_multiroot: LEMMA (sig=-1 OR 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)/=0 AND b(j)/=0))
    IMPLIES
      LET nsca = number_sign_changes(a,k)`num,
         nscb = number_sign_changes(b,k)`num
      IN  nsca = nscb + (IF k>=1 THEN 1 ELSE 0 ENDIF)

  nsc_multiroot_full: LEMMA FORALL (sigfun:[nat->real]):
    (sig=-1 OR sig=1) AND % The nominal sign
    (FORALL (j): sigfun(j)=-1 OR 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)/=0 AND b(j)/=0))
    IMPLIES
      LET nsca = number_sign_changes(a,k)`num,
         nscb = number_sign_changes(b,k)`num
      IN  nsca = nscb + (IF k>=1 THEN 1 ELSE 0 ENDIF)
  
END number_sign_changes

¤ Dauer der Verarbeitung: 0.0 Sekunden  (vorverarbeitet)  ¤





Download des
Quellennavigators
Download des
sprechenden Kalenders

in der Quellcodebibliothek suchen




Haftungshinweis

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.


Bot Zugriff