Formale Verifikation - Aufgaben

Bitlänge einer Zahl

 aufwärts

Gesucht ist die Länge n der Binär­darstellung einer natürlichen Zahl a. So hat beispiels­weise die Zahl a = 13 die Binär­darstellung 1101, denn 13 = 1·8 + 1·4 + 0·2 + 1·1. Die Binär­darstellung der Zahl 13 beansprucht 4 Ziffern, die Bitlänge beträgt also 4.

Die Bitlänge einer natürlichen Zahl a lässt sich berechnen, indem die kleinste Zweierpotenz 2k bestimmt wird, die größer als a ist. Für a = 13 beispiels­weise ist 24 = 16 diese kleinste Zweierpotenz. Der Exponent k = 4 entspricht genau der Bitlänge von a.

Aufgabe:  (Berechnung der Bitlänge einer natürlichen Zahl a)

Gegeben sei folgendes Programm X:

k=0;
p=1;
while (p<=a)
{
    k=k+1;
    p=p*2;
}

Das Programm X berechnet den kleinsten Exponenten k, derart dass 2k > a.

 

Ermitteln Sie die schwächste Vorbedingung Q für die Korrektheits­formel {Q} X {R} mit der Nach­bedingung

R:   2k > a

Wenn das Programm terminiert, dann ist k der kleinste Exponent, der diese Nach­bedingung erfüllt, da k bei 0 beginnt und bei jedem Schleifen­durchlauf um 1 größer wird.

Alternativ kann die Nach­bedingung etwas komplizierter als 2k-1 kleiner gleich a  und  2k > a gewählt werden.

 

Hinweis: Gehen Sie schrittweise vor. Beweisen Sie zunächst die While-Schleife, indem Sie die beiden Prämissen der Schlussregel für die While-Schleife beweisen. Ermitteln Sie aus der ersten Prämisse die Schleifen­invariante P.

 

Lösung:  

Prämisse While1:  Nach­bedingung R in die Form P und ¬B bringen

Es gilt

B:   p kleiner gleich a

Wir müssen also die Variable p in die Nach­bedingung hinein­bringen. R:  2k > a lässt sich schreiben als

R:   2k = p   und   p > a

Damit hat R die Form P und ¬B und die Schleifen­invariante P lautet

P:   2k = p

 

Prämisse While2:  Beweis des Schleifen­körpers

{ P und B }(8)
{ 2k = p  und  p  kleiner gleich a }(7)
{ 2k = p }(6)
{ 2k+1-1 = p }(5)
k=k+1;
{ 2k-1 = p }(4)
{ 2k = p·2 }(3)
p=p*2;
{ 2k = p }(2)
{ P }(1)

Von Schritt 6 nach Schritt 7 wurde eine Verschärfung vorgenommen, indem eine zusätzliche Und-Bedingung hinzu­genommen wurde.

 

Beweis des restlichen Programms vor der Schleife

{ Q }(6)
{ true }(5)
{ 20 = 1 }(4)
k=0;
{ 2k = 1 }(3)
p=1;
{ 2k = p }(2)
{ P }(1)

 

Damit ist Qtrue die schwächste Vorbedingung für das Programm, oder anders ausgedrückt: Das Programm erfordert keine Vorbedingungen.

 

Weiter mit:  up

 

homeH.W. Lang   Hochschule Flensburg   lang@hs-flensburg.de   Impressum   Datenschutz   ©  
Valid HTML 4.01 Transitional