132
Kapitel L:V V. Erweiterungen und Anwendungen zur Logik Produktionsregelsysteme Inferenz für Produktionsregelsysteme Produktionsregelsysteme mit Negation Regeln mit Konfidenzen Nicht-monotones Schließen Logik und abstrakte Algebren Verifikation Verifikation mit dem Hoare-Kalkül Hoare-Regeln und partielle Korrektheit Terminierung L:V-129 Erweiterungen und Anwendungen zur Logik © LETTMANN 1996-2020

Kapitel L:V€¦ · Kapitel L:V V.Erweiterungen und Anwendungen zur Logik q Produktionsregelsysteme q Inferenz für Produktionsregelsysteme q Produktionsregelsysteme mit Negation

  • Upload
    others

  • View
    0

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Kapitel L:V€¦ · Kapitel L:V V.Erweiterungen und Anwendungen zur Logik q Produktionsregelsysteme q Inferenz für Produktionsregelsysteme q Produktionsregelsysteme mit Negation

Kapitel L:V

V. Erweiterungen und Anwendungen zur Logikq Produktionsregelsystemeq Inferenz für Produktionsregelsystemeq Produktionsregelsysteme mit Negationq Regeln mit Konfidenzen

q Nicht-monotones Schließen

q Logik und abstrakte Algebren

q Verifikationq Verifikation mit dem Hoare-Kalkülq Hoare-Regeln und partielle Korrektheitq Terminierung

L:V-129 Erweiterungen und Anwendungen zur Logik © LETTMANN 1996-2020

Page 2: Kapitel L:V€¦ · Kapitel L:V V.Erweiterungen und Anwendungen zur Logik q Produktionsregelsysteme q Inferenz für Produktionsregelsysteme q Produktionsregelsysteme mit Negation

Hoare-Regeln und partielle KorrektheitHoare-Regel für Zuweisungen

A : −{N [x/e]} x := e; {N}

(A steht für Assignment.)

q Die Zuweisungsregel legt die Semantik der Zuweisung fest.

q Die Zuweisungsregel ordnet jeder Nachbedingung eine schwächsteVorbedingung (weakest precondition (wp)) zu.

q Die Zuweisungsregel führt die Semantik der Zuweisung auf die Semantik derSubstitution in der Prädikatenlogik zurück.

q Da die Zuweisungsregel keine Voraussetzungen hat, bezeichnet man sieauch als Axiom.

L:V-130 Erweiterungen und Anwendungen zur Logik © LETTMANN 1996-2020

Page 3: Kapitel L:V€¦ · Kapitel L:V V.Erweiterungen und Anwendungen zur Logik q Produktionsregelsysteme q Inferenz für Produktionsregelsysteme q Produktionsregelsysteme mit Negation

Hoare-Regeln und partielle KorrektheitBeispiele für die Anwendung der Zuweisungsregel

Abgeleitete Hoare-Formel für die Anweisung b := y;

{x, y ∈ N und a = x und y = y}b := y;

{x, y ∈ N und a = x und b = y}

Abgeleitete Hoare-Formel für die Anweisung x := x + 1;

{x + 1 = a}x := x + 1;

{x = a}

L:V-131 Erweiterungen und Anwendungen zur Logik © LETTMANN 1996-2020

Page 4: Kapitel L:V€¦ · Kapitel L:V V.Erweiterungen und Anwendungen zur Logik q Produktionsregelsysteme q Inferenz für Produktionsregelsysteme q Produktionsregelsysteme mit Negation

Hoare-Regeln und partielle KorrektheitAbschwächungsregeln

C1 : {P} ⇒ {P ′}{P ′} S {Q}{P} S {Q}

C2 : {P} S {Q′}{Q′} ⇒ {Q}{P} S {Q}

P ′ ist eine Abschwächung der Zusicherung P , so dass ein Zustand, der P erfüllt,auch P ′ erfüllt, d.h. P ′ ist semantische Folgerung von P , P |= P ′.

Q ist eine Abschwächung der Zusicherung Q′, so dass ein Zustand, der Q′ erfüllt,auch Q erfüllt, d.h. Q ist semantische Folgerung von Q′, Q′ |= Q.

q Die Abschwächungsregeln verändern nur die Zusicherungen.

q Die Abschwächungsregeln setzen voraus, dass die Hoare-Formel für dasentsprechende Programmstück bereits hergeleitet wurde.

L:V-132 Erweiterungen und Anwendungen zur Logik © LETTMANN 1996-2020

Page 5: Kapitel L:V€¦ · Kapitel L:V V.Erweiterungen und Anwendungen zur Logik q Produktionsregelsysteme q Inferenz für Produktionsregelsysteme q Produktionsregelsysteme mit Negation

Hoare-Regeln und partielle KorrektheitBeispiele für die Anwendung der Abschwächungsregeln

Herleitung von Hoare-Formeln für die Anweisung b := y;

{x, y ∈ N und a = x}⇒ {x, y ∈ N und a = x und y = y}b := y;

{x, y ∈ N und a = x und b = y}⇒ {x, y ∈ N und a + b = x + y und a ≥ 0}

Weitere Abschwächungen:

q Streichen konjunktiv verknüpfter Teile:{Q1 und Q2} ⇒ {Q1}

q Hinzufügen von Folgerungen:{Q1 und (Q1 ⇒ Q2)} ⇒ {Q1 und (Q1 ⇒ Q2) und Q2}

q Hinzufügen von tautologischen Aussagen:{Q} ⇒ {Q und x = x}

q Hinzufügen disjunktiv verknüpfter Teile:{Q1} ⇒ {Q1 oder Q2}

L:V-133 Erweiterungen und Anwendungen zur Logik © LETTMANN 1996-2020

Page 6: Kapitel L:V€¦ · Kapitel L:V V.Erweiterungen und Anwendungen zur Logik q Produktionsregelsysteme q Inferenz für Produktionsregelsysteme q Produktionsregelsysteme mit Negation

Hoare-Regeln und partielle KorrektheitAnwendung der Zuweisungsregel

A : −{N [x/e]} x := e; {N}

Von der Nachbedingung zur Vorbedingung (rückwärts):

q Nachbedingung N ist bekannt.q Ersetze alle Vorkommen von x in N durch e.q Ergebnis ist die schwächste Vorbedingung N [x/e].

L:V-134 Erweiterungen und Anwendungen zur Logik © LETTMANN 1996-2020

Page 7: Kapitel L:V€¦ · Kapitel L:V V.Erweiterungen und Anwendungen zur Logik q Produktionsregelsysteme q Inferenz für Produktionsregelsysteme q Produktionsregelsysteme mit Negation

Hoare-Regeln und partielle KorrektheitBeispiele zur Anwendung der Zuweisungsregel

{27 ∈ N und y ∈ N und a = 27 und b = y}x := 27;

{x ∈ N und y ∈ N und a = x und b = y}

{x, x ∈ N und a = x und b = x}y := x;

{x, y ∈ N und a = x und b = y}

{x + 1, y ∈ N und a = x + 1 und b = y}x := x + 1;

{x, y ∈ N und a = x und b = y}

{x, x + y ∈ N und a = x und b = x + y}y := x + y;

{x, y ∈ N und a = x und b = y}

L:V-135 Erweiterungen und Anwendungen zur Logik © LETTMANN 1996-2020

Page 8: Kapitel L:V€¦ · Kapitel L:V V.Erweiterungen und Anwendungen zur Logik q Produktionsregelsysteme q Inferenz für Produktionsregelsysteme q Produktionsregelsysteme mit Negation

Hoare-Regeln und partielle KorrektheitBeispiele zur Anwendung der Zuweisungsregel

{27 ∈ N und y ∈ N und a = 27 und b = y}x := 27;

{x ∈ N und y ∈ N und a = x und b = y}

{x, x ∈ N und a = x und b = x}y := x;

{x, y ∈ N und a = x und b = y}

{x + 1, y ∈ N und a = x + 1 und b = y}x := x + 1;

{x, y ∈ N und a = x und b = y}

{x, x + y ∈ N und a = x und b = x + y}y := x + y;

{x, y ∈ N und a = x und b = y}

L:V-136 Erweiterungen und Anwendungen zur Logik © LETTMANN 1996-2020

Page 9: Kapitel L:V€¦ · Kapitel L:V V.Erweiterungen und Anwendungen zur Logik q Produktionsregelsysteme q Inferenz für Produktionsregelsysteme q Produktionsregelsysteme mit Negation

Hoare-Regeln und partielle KorrektheitBeispiele zur Anwendung der Zuweisungsregel

{27 ∈ N und y ∈ N und a = 27 und b = y}x := 27;

{x ∈ N und y ∈ N und a = x und b = y}

{x, x ∈ N und a = x und b = x}y := x;

{x, y ∈ N und a = x und b = y}

{x + 1, y ∈ N und a = x + 1 und b = y}x := x + 1;

{x, y ∈ N und a = x und b = y}

{x, x + y ∈ N und a = x und b = x + y}y := x + y;

{x, y ∈ N und a = x und b = y}

L:V-137 Erweiterungen und Anwendungen zur Logik © LETTMANN 1996-2020

Page 10: Kapitel L:V€¦ · Kapitel L:V V.Erweiterungen und Anwendungen zur Logik q Produktionsregelsysteme q Inferenz für Produktionsregelsysteme q Produktionsregelsysteme mit Negation

Hoare-Regeln und partielle KorrektheitBeispiele zur Anwendung der Zuweisungsregel

{27 ∈ N und y ∈ N und a = 27 und b = y}x := 27;

{x ∈ N und y ∈ N und a = x und b = y}

{x, x ∈ N und a = x und b = x}y := x;

{x, y ∈ N und a = x und b = y}

{x + 1, y ∈ N und a = x + 1 und b = y}x := x + 1;

{x, y ∈ N und a = x und b = y}

{x, x + y ∈ N und a = x und b = x + y}y := x + y;

{x, y ∈ N und a = x und b = y}

L:V-138 Erweiterungen und Anwendungen zur Logik © LETTMANN 1996-2020

Page 11: Kapitel L:V€¦ · Kapitel L:V V.Erweiterungen und Anwendungen zur Logik q Produktionsregelsysteme q Inferenz für Produktionsregelsysteme q Produktionsregelsysteme mit Negation

Hoare-Regeln und partielle KorrektheitBeispiele zur Anwendung der Zuweisungsregel

{27 ∈ N und y ∈ N und a = 27 und b = y}x := 27;

{x ∈ N und y ∈ N und a = x und b = y}

{x, x ∈ N und a = x und b = x}y := x;

{x, y ∈ N und a = x und b = y}

{x + 1, y ∈ N und a = x + 1 und b = y}x := x + 1;

{x, y ∈ N und a = x und b = y}

{x, x + y ∈ N und a = x und b = x + y}y := x + y;

{x, y ∈ N und a = x und b = y}

L:V-139 Erweiterungen und Anwendungen zur Logik © LETTMANN 1996-2020

Page 12: Kapitel L:V€¦ · Kapitel L:V V.Erweiterungen und Anwendungen zur Logik q Produktionsregelsysteme q Inferenz für Produktionsregelsysteme q Produktionsregelsysteme mit Negation

Hoare-Regeln und partielle KorrektheitBeispiele zur Anwendung der Zuweisungsregel

{27 ∈ N und y ∈ N und a = 27 und b = y}x := 27;

{x ∈ N und y ∈ N und a = x und b = y}

{x, x ∈ N und a = x und b = x}y := x;

{x, y ∈ N und a = x und b = y}

{x + 1, y ∈ N und a = x + 1 und b = y}x := x + 1;

{x, y ∈ N und a = x und b = y}

{x, x + y ∈ N und a = x und b = x + y}y := x + y;

{x, y ∈ N und a = x und b = y}

L:V-140 Erweiterungen und Anwendungen zur Logik © LETTMANN 1996-2020

Page 13: Kapitel L:V€¦ · Kapitel L:V V.Erweiterungen und Anwendungen zur Logik q Produktionsregelsysteme q Inferenz für Produktionsregelsysteme q Produktionsregelsysteme mit Negation

Hoare-Regeln und partielle KorrektheitBeispiele zur Anwendung der Zuweisungsregel

{27 ∈ N und y ∈ N und a = 27 und b = y}x := 27;

{x ∈ N und y ∈ N und a = x und b = y}

{x, x ∈ N und a = x und b = x}y := x;

{x, y ∈ N und a = x und b = y}

{x + 1, y ∈ N und a = x + 1 und b = y}x := x + 1;

{x, y ∈ N und a = x und b = y}

{x, x + y ∈ N und a = x und b = x + y}y := x + y;

{x, y ∈ N und a = x und b = y}

L:V-141 Erweiterungen und Anwendungen zur Logik © LETTMANN 1996-2020

Page 14: Kapitel L:V€¦ · Kapitel L:V V.Erweiterungen und Anwendungen zur Logik q Produktionsregelsysteme q Inferenz für Produktionsregelsysteme q Produktionsregelsysteme mit Negation

Hoare-Regeln und partielle KorrektheitAnwendung der Zuweisungsregel (Fortsetzung)

A : −{N [x/e]} x := e; {N}

Von der Vorbedingung zur Nachbedingung (vorwärts):

Fall 1: x kommt in e nicht vor

q Vorbedingung V ist bekanntq Schwäche Vorbedingung V ab:

– Eliminiere alle Vorkommen von x in V .– (Erzeuge neue Vorkommen von e, z.B. e = e.)

Ergebnis ist (abgeschwächte) Vorbedingung V ′.q Ersetze in V ′ manche Vorkommen von e durch x.q Ergebnis ist die Nachbedingung N .

L:V-142 Erweiterungen und Anwendungen zur Logik © LETTMANN 1996-2020

Page 15: Kapitel L:V€¦ · Kapitel L:V V.Erweiterungen und Anwendungen zur Logik q Produktionsregelsysteme q Inferenz für Produktionsregelsysteme q Produktionsregelsysteme mit Negation

Hoare-Regeln und partielle KorrektheitBeispiele zur Anwendung der Zuweisungsregel (Fortsetzung)

{x, y ∈ N und a = x}⇒ {y ∈ N}⇒ {y ∈ N und 27 ∈ N und 27 = 27}x := 27;

{x, y ∈ N und x = 27}

L:V-143 Erweiterungen und Anwendungen zur Logik © LETTMANN 1996-2020

Page 16: Kapitel L:V€¦ · Kapitel L:V V.Erweiterungen und Anwendungen zur Logik q Produktionsregelsysteme q Inferenz für Produktionsregelsysteme q Produktionsregelsysteme mit Negation

Hoare-Regeln und partielle KorrektheitBeispiele zur Anwendung der Zuweisungsregel (Fortsetzung)

{x, y ∈ N und a = x}⇒ {y ∈ N}⇒ {y ∈ N und 27 ∈ N und 27 = 27}x := 27;

{x, y ∈ N und x = 27}

L:V-144 Erweiterungen und Anwendungen zur Logik © LETTMANN 1996-2020

Page 17: Kapitel L:V€¦ · Kapitel L:V V.Erweiterungen und Anwendungen zur Logik q Produktionsregelsysteme q Inferenz für Produktionsregelsysteme q Produktionsregelsysteme mit Negation

Hoare-Regeln und partielle KorrektheitBeispiele zur Anwendung der Zuweisungsregel (Fortsetzung)

{x, y ∈ N und a = x}⇒ {y ∈ N}⇒ {y ∈ N und 27 ∈ N und 27 = 27}x := 27;

{x, y ∈ N und x = 27}

L:V-145 Erweiterungen und Anwendungen zur Logik © LETTMANN 1996-2020

Page 18: Kapitel L:V€¦ · Kapitel L:V V.Erweiterungen und Anwendungen zur Logik q Produktionsregelsysteme q Inferenz für Produktionsregelsysteme q Produktionsregelsysteme mit Negation

Hoare-Regeln und partielle KorrektheitBeispiele zur Anwendung der Zuweisungsregel (Fortsetzung)

{x, y ∈ N und a = x}⇒ {y ∈ N}⇒ {y ∈ N und 27 ∈ N und 27 = 27}x := 27;

{x, y ∈ N und x = 27}

L:V-146 Erweiterungen und Anwendungen zur Logik © LETTMANN 1996-2020

Page 19: Kapitel L:V€¦ · Kapitel L:V V.Erweiterungen und Anwendungen zur Logik q Produktionsregelsysteme q Inferenz für Produktionsregelsysteme q Produktionsregelsysteme mit Negation

Hoare-Regeln und partielle KorrektheitBeispiele zur Anwendung der Zuweisungsregel (Fortsetzung)

{x, y ∈ N und a = x}⇒ {y ∈ N}⇒ {y ∈ N und 27 ∈ N und 27 = 27}x := 27;

{x, y ∈ N und x = 27}

L:V-147 Erweiterungen und Anwendungen zur Logik © LETTMANN 1996-2020

Page 20: Kapitel L:V€¦ · Kapitel L:V V.Erweiterungen und Anwendungen zur Logik q Produktionsregelsysteme q Inferenz für Produktionsregelsysteme q Produktionsregelsysteme mit Negation

Hoare-Regeln und partielle KorrektheitBeispiele zur Anwendung der Zuweisungsregel (Fortsetzung)

{x, y ∈ N und a = x}⇒ {y ∈ N}⇒ {y ∈ N und 27 ∈ N und 27 = 27}x := 27;

{x, y ∈ N und x = 27}

{x, y ∈ N und a = x}⇒ {x ∈ N und a = x}⇒ {x ∈ N und a = x und x = x}y := x;

{x ∈ N und a = x und y = x}

L:V-148 Erweiterungen und Anwendungen zur Logik © LETTMANN 1996-2020

Page 21: Kapitel L:V€¦ · Kapitel L:V V.Erweiterungen und Anwendungen zur Logik q Produktionsregelsysteme q Inferenz für Produktionsregelsysteme q Produktionsregelsysteme mit Negation

Hoare-Regeln und partielle KorrektheitBeispiele zur Anwendung der Zuweisungsregel (Fortsetzung)

{x, y ∈ N und a = x}⇒ {y ∈ N}⇒ {y ∈ N und 27 ∈ N und 27 = 27}x := 27;

{x, y ∈ N und x = 27}

{x, y ∈ N und a = x}⇒ {x ∈ N und a = x}⇒ {x ∈ N und a = x und x = x}y := x;

{x ∈ N und a = x und y = x}

L:V-149 Erweiterungen und Anwendungen zur Logik © LETTMANN 1996-2020

Page 22: Kapitel L:V€¦ · Kapitel L:V V.Erweiterungen und Anwendungen zur Logik q Produktionsregelsysteme q Inferenz für Produktionsregelsysteme q Produktionsregelsysteme mit Negation

Hoare-Regeln und partielle KorrektheitBeispiele zur Anwendung der Zuweisungsregel (Fortsetzung)

{x, y ∈ N und a = x}⇒ {y ∈ N}⇒ {y ∈ N und 27 ∈ N und 27 = 27}x := 27;

{x, y ∈ N und x = 27}

{x, y ∈ N und a = x}⇒ {x ∈ N und a = x}⇒ {x ∈ N und a = x und x = x}y := x;

{x ∈ N und a = x und y = x}

L:V-150 Erweiterungen und Anwendungen zur Logik © LETTMANN 1996-2020

Page 23: Kapitel L:V€¦ · Kapitel L:V V.Erweiterungen und Anwendungen zur Logik q Produktionsregelsysteme q Inferenz für Produktionsregelsysteme q Produktionsregelsysteme mit Negation

Hoare-Regeln und partielle KorrektheitBeispiele zur Anwendung der Zuweisungsregel (Fortsetzung)

{x, y ∈ N und a = x}⇒ {y ∈ N}⇒ {y ∈ N und 27 ∈ N und 27 = 27}x := 27;

{x, y ∈ N und x = 27}

{x, y ∈ N und a = x}⇒ {x ∈ N und a = x}⇒ {x ∈ N und a = x und x = x}y := x;

{x ∈ N und a = x und y = x}

L:V-151 Erweiterungen und Anwendungen zur Logik © LETTMANN 1996-2020

Page 24: Kapitel L:V€¦ · Kapitel L:V V.Erweiterungen und Anwendungen zur Logik q Produktionsregelsysteme q Inferenz für Produktionsregelsysteme q Produktionsregelsysteme mit Negation

Hoare-Regeln und partielle KorrektheitBeispiele zur Anwendung der Zuweisungsregel (Fortsetzung)

{x, y ∈ N und a = x}⇒ {y ∈ N}⇒ {y ∈ N und 27 ∈ N und 27 = 27}x := 27;

{x, y ∈ N und x = 27}

{x, y ∈ N und a = x}⇒ {x ∈ N und a = x}⇒ {x ∈ N und a = x und x = x}y := x;

{x ∈ N und a = x und y = x}

L:V-152 Erweiterungen und Anwendungen zur Logik © LETTMANN 1996-2020

Page 25: Kapitel L:V€¦ · Kapitel L:V V.Erweiterungen und Anwendungen zur Logik q Produktionsregelsysteme q Inferenz für Produktionsregelsysteme q Produktionsregelsysteme mit Negation

Hoare-Regeln und partielle KorrektheitAnwendung der Zuweisungsregel (Fortsetzung)

A : −{N [x/e]} x := e; {N}

Von der Vorbedingung zur Nachbedingung (vorwärts):

Fall 2: x kommt in e vor

q Vorbedingung V ist bekanntq Schwäche Vorbedingung V ab:

– Wandle alle Vorkommen von x in V in Vorkommen von e um.

Ergebnis ist (abgeschwächte) Vorbedingung V ′.q Ersetze in V ′ alle Vorkommen von e durch x.q Ergebnis ist die Nachbedingung N .

L:V-153 Erweiterungen und Anwendungen zur Logik © LETTMANN 1996-2020

Page 26: Kapitel L:V€¦ · Kapitel L:V V.Erweiterungen und Anwendungen zur Logik q Produktionsregelsysteme q Inferenz für Produktionsregelsysteme q Produktionsregelsysteme mit Negation

Hoare-Regeln und partielle KorrektheitBeispiele zur Anwendung der Zuweisungsregel (Fortsetzung)

{x, y ∈ N und a = x}⇒ {x + 1, y ∈ N und a + 1 = x + 1}x := x + 1;

{x, y ∈ N und a + 1 = x}

L:V-154 Erweiterungen und Anwendungen zur Logik © LETTMANN 1996-2020

Page 27: Kapitel L:V€¦ · Kapitel L:V V.Erweiterungen und Anwendungen zur Logik q Produktionsregelsysteme q Inferenz für Produktionsregelsysteme q Produktionsregelsysteme mit Negation

Hoare-Regeln und partielle KorrektheitBeispiele zur Anwendung der Zuweisungsregel (Fortsetzung)

{x, y ∈ N und a = x}⇒ {x + 1, y ∈ N und a + 1 = x + 1}x := x + 1;

{x, y ∈ N und a + 1 = x}

L:V-155 Erweiterungen und Anwendungen zur Logik © LETTMANN 1996-2020

Page 28: Kapitel L:V€¦ · Kapitel L:V V.Erweiterungen und Anwendungen zur Logik q Produktionsregelsysteme q Inferenz für Produktionsregelsysteme q Produktionsregelsysteme mit Negation

Hoare-Regeln und partielle KorrektheitBeispiele zur Anwendung der Zuweisungsregel (Fortsetzung)

{x, y ∈ N und a = x}⇒ {x + 1, y ∈ N und a + 1 = x + 1}x := x + 1;

{x, y ∈ N und a + 1 = x}

L:V-156 Erweiterungen und Anwendungen zur Logik © LETTMANN 1996-2020

Page 29: Kapitel L:V€¦ · Kapitel L:V V.Erweiterungen und Anwendungen zur Logik q Produktionsregelsysteme q Inferenz für Produktionsregelsysteme q Produktionsregelsysteme mit Negation

Hoare-Regeln und partielle KorrektheitBeispiele zur Anwendung der Zuweisungsregel (Fortsetzung)

{x, y ∈ N und a = x}⇒ {x + 1, y ∈ N und a + 1 = x + 1}x := x + 1;

{x, y ∈ N und a + 1 = x}

L:V-157 Erweiterungen und Anwendungen zur Logik © LETTMANN 1996-2020

Page 30: Kapitel L:V€¦ · Kapitel L:V V.Erweiterungen und Anwendungen zur Logik q Produktionsregelsysteme q Inferenz für Produktionsregelsysteme q Produktionsregelsysteme mit Negation

Hoare-Regeln und partielle KorrektheitBeispiele zur Anwendung der Zuweisungsregel (Fortsetzung)

{x, y ∈ N und a = x}⇒ {x + 1, y ∈ N und a + 1 = x + 1}x := x + 1;

{x, y ∈ N und a + 1 = x}

{x, y ∈ N und a = x}⇒ {x, x + y ∈ N und a = x}y := x + y;

{x, y ∈ N und a = x}

L:V-158 Erweiterungen und Anwendungen zur Logik © LETTMANN 1996-2020

Page 31: Kapitel L:V€¦ · Kapitel L:V V.Erweiterungen und Anwendungen zur Logik q Produktionsregelsysteme q Inferenz für Produktionsregelsysteme q Produktionsregelsysteme mit Negation

Hoare-Regeln und partielle KorrektheitBeispiele zur Anwendung der Zuweisungsregel (Fortsetzung)

{x, y ∈ N und a = x}⇒ {x + 1, y ∈ N und a + 1 = x + 1}x := x + 1;

{x, y ∈ N und a + 1 = x}

{x, y ∈ N und a = x}⇒ {x, x + y ∈ N und a = x}y := x + y;

{x, y ∈ N und a = x}

L:V-159 Erweiterungen und Anwendungen zur Logik © LETTMANN 1996-2020

Page 32: Kapitel L:V€¦ · Kapitel L:V V.Erweiterungen und Anwendungen zur Logik q Produktionsregelsysteme q Inferenz für Produktionsregelsysteme q Produktionsregelsysteme mit Negation

Hoare-Regeln und partielle KorrektheitBeispiele zur Anwendung der Zuweisungsregel (Fortsetzung)

{x, y ∈ N und a = x}⇒ {x + 1, y ∈ N und a + 1 = x + 1}x := x + 1;

{x, y ∈ N und a + 1 = x}

{x, y ∈ N und a = x}⇒ {x, x + y ∈ N und a = x}y := x + y;

{x, y ∈ N und a = x}

L:V-160 Erweiterungen und Anwendungen zur Logik © LETTMANN 1996-2020

Page 33: Kapitel L:V€¦ · Kapitel L:V V.Erweiterungen und Anwendungen zur Logik q Produktionsregelsysteme q Inferenz für Produktionsregelsysteme q Produktionsregelsysteme mit Negation

Hoare-Regeln und partielle KorrektheitBeispiele zur Anwendung der Zuweisungsregel (Fortsetzung)

{x, y ∈ N und a = x}⇒ {x + 1, y ∈ N und a + 1 = x + 1}x := x + 1;

{x, y ∈ N und a + 1 = x}

{x, y ∈ N und a = x}⇒ {x, x + y ∈ N und a = x}y := x + y;

{x, y ∈ N und a = x}

L:V-161 Erweiterungen und Anwendungen zur Logik © LETTMANN 1996-2020

Page 34: Kapitel L:V€¦ · Kapitel L:V V.Erweiterungen und Anwendungen zur Logik q Produktionsregelsysteme q Inferenz für Produktionsregelsysteme q Produktionsregelsysteme mit Negation

Hoare-Regeln und partielle KorrektheitHoare-Regeln für Anweisungsfolgen

S : {P} S1 {Q}{Q} S2 {R}{P} S1S2 {R}

B : {P} S {Q}{P} begin S end {Q}

q Die Regeln legen fest, wie Folgen und Blöcke von Anweisungen ausgeführtwerden.

q Hoare-Formeln für Anweisungsfolgen müssen zusammenpassen.

q Die Strukturierung der Programme durch begin und end sorgt für eineeindeutige Aufteilung eines Programmes in Anweisungen. Aus Sicht derVerifikation wäre sie nicht erforderlich, da die Struktur des Programmes imVerifikationsbeweis festgelegt wäre.

q Die Blockung von Anweisungen erfordert keinen zusätzlichenVerifikationsaufwand.

L:V-162 Erweiterungen und Anwendungen zur Logik © LETTMANN 1996-2020

Page 35: Kapitel L:V€¦ · Kapitel L:V V.Erweiterungen und Anwendungen zur Logik q Produktionsregelsysteme q Inferenz für Produktionsregelsysteme q Produktionsregelsysteme mit Negation

Hoare-Regeln und partielle KorrektheitVorgehen bei der Verifikation eines Programmes

q Gegeben ist eine Spezifikation mit Vorbedingung {V } und Nachbedingung {N} sowie einProgramm P .

q P bestehe nur aus einer Folge von Zuweisungen.

Vorgehen im Hoare-Kalkül

0. Generelle Vereinfachung:Die Nachbedingung einer Anweisung wird durch Abschwächung zur Vorbedingung dernächsten.

1. Ergänze {V } als Vorbedingung vor dem Programmtext.2. Je nach Programmanweisung verfahre folgendermaßen:

(a) begin

Kopiere die Vorbedingung dieser Zeile vor die Anweisungsfolge.(b) end

Kopiere die Nachbedingung der Anweisungsfolge hinter diese Zeile.(c) Zuweisung x := e;

Wende Abschwächungsregeln und Zuweisungsregel auf die Vorbedingung so an, wie esdie Zuweisung erfordert(Fall 1: x kommt in e nicht vor; Fall 2: x kommt in e vor).

3. Wende Abschwächungsregeln auf die Nachbedingung an, um die Nachbedingung {N} derSpezifikation zu erreichen.

L:V-163 Erweiterungen und Anwendungen zur Logik © LETTMANN 1996-2020

Page 36: Kapitel L:V€¦ · Kapitel L:V V.Erweiterungen und Anwendungen zur Logik q Produktionsregelsysteme q Inferenz für Produktionsregelsysteme q Produktionsregelsysteme mit Negation

Hoare-Regeln und partielle KorrektheitBeispiel zur Verifikation eines Programmes

Spezifikation:

Vorbedingung: {x, y ∈ N}Nachbedingung: {b = x+ y}

(A) {x, y ∈ N}(1) begin

(B) {x, y ∈ N}(C) ⇒ {x, y ∈ N und x = x}(2) a := x;

(D) {x, y ∈ N und a = x}(E) ⇒ {x, y ∈ N und a = x und y = y}(3) b := y;

(F) {x, y ∈ N und a = x und b = y}(G) ⇒ {x, y ∈ N und a = x und b+ a = a+ y}(4) b := b+ a;

(H) {x, y ∈ N und a = x und b = a+ y}(5) end

(I) {x, y ∈ N und a = x und b = a+ y}(J) ⇒ {b = x+ y}

L:V-164 Erweiterungen und Anwendungen zur Logik © LETTMANN 1996-2020

Page 37: Kapitel L:V€¦ · Kapitel L:V V.Erweiterungen und Anwendungen zur Logik q Produktionsregelsysteme q Inferenz für Produktionsregelsysteme q Produktionsregelsysteme mit Negation

Hoare-Regeln und partielle KorrektheitBeispiel zur Verifikation eines Programmes

Spezifikation:

Vorbedingung: {x, y ∈ N}Nachbedingung: {b = x+ y}

(A) {x, y ∈ N}(1) begin

(B) {x, y ∈ N}(C) ⇒ {x, y ∈ N und x = x}(2) a := x;

(D) {x, y ∈ N und a = x}(E) ⇒ {x, y ∈ N und a = x und y = y}(3) b := y;

(F) {x, y ∈ N und a = x und b = y}(G) ⇒ {x, y ∈ N und a = x und b+ a = a+ y}(4) b := b+ a;

(H) {x, y ∈ N und a = x und b = a+ y}(5) end

(I) {x, y ∈ N und a = x und b = a+ y}(J) ⇒ {b = x+ y}

L:V-165 Erweiterungen und Anwendungen zur Logik © LETTMANN 1996-2020

Page 38: Kapitel L:V€¦ · Kapitel L:V V.Erweiterungen und Anwendungen zur Logik q Produktionsregelsysteme q Inferenz für Produktionsregelsysteme q Produktionsregelsysteme mit Negation

Hoare-Regeln und partielle KorrektheitBeispiel zur Verifikation eines Programmes

Spezifikation:

Vorbedingung: {x, y ∈ N}Nachbedingung: {b = x+ y}

(A) {x, y ∈ N}(1) begin

(B) {x, y ∈ N}(C) ⇒ {x, y ∈ N und x = x}(2) a := x;

(D) {x, y ∈ N und a = x}(E) ⇒ {x, y ∈ N und a = x und y = y}(3) b := y;

(F) {x, y ∈ N und a = x und b = y}(G) ⇒ {x, y ∈ N und a = x und b+ a = a+ y}(4) b := b+ a;

(H) {x, y ∈ N und a = x und b = a+ y}(5) end

(I) {x, y ∈ N und a = x und b = a+ y}(J) ⇒ {b = x+ y}

L:V-166 Erweiterungen und Anwendungen zur Logik © LETTMANN 1996-2020

Page 39: Kapitel L:V€¦ · Kapitel L:V V.Erweiterungen und Anwendungen zur Logik q Produktionsregelsysteme q Inferenz für Produktionsregelsysteme q Produktionsregelsysteme mit Negation

Hoare-Regeln und partielle KorrektheitBeispiel zur Verifikation eines Programmes

Spezifikation:

Vorbedingung: {x, y ∈ N}Nachbedingung: {b = x+ y}

(A) {x, y ∈ N}(1) begin

(B) {x, y ∈ N}(C) ⇒ {x, y ∈ N und x = x}(2) a := x;

(D) {x, y ∈ N und a = x}(E) ⇒ {x, y ∈ N und a = x und y = y}(3) b := y;

(F) {x, y ∈ N und a = x und b = y}(G) ⇒ {x, y ∈ N und a = x und b+ a = a+ y}(4) b := b+ a;

(H) {x, y ∈ N und a = x und b = a+ y}(5) end

(I) {x, y ∈ N und a = x und b = a+ y}(J) ⇒ {b = x+ y}

L:V-167 Erweiterungen und Anwendungen zur Logik © LETTMANN 1996-2020

Page 40: Kapitel L:V€¦ · Kapitel L:V V.Erweiterungen und Anwendungen zur Logik q Produktionsregelsysteme q Inferenz für Produktionsregelsysteme q Produktionsregelsysteme mit Negation

Hoare-Regeln und partielle KorrektheitBeispiel zur Verifikation eines Programmes

Spezifikation:

Vorbedingung: {x, y ∈ N}Nachbedingung: {b = x+ y}

(A) {x, y ∈ N}(1) begin

(B) {x, y ∈ N}(C) ⇒ {x, y ∈ N und x = x}(2) a := x;

(D) {x, y ∈ N und a = x}(E) ⇒ {x, y ∈ N und a = x und y = y}(3) b := y;

(F) {x, y ∈ N und a = x und b = y}(G) ⇒ {x, y ∈ N und a = x und b+ a = a+ y}(4) b := b+ a;

(H) {x, y ∈ N und a = x und b = a+ y}(5) end

(I) {x, y ∈ N und a = x und b = a+ y}(J) ⇒ {b = x+ y}

L:V-168 Erweiterungen und Anwendungen zur Logik © LETTMANN 1996-2020

Page 41: Kapitel L:V€¦ · Kapitel L:V V.Erweiterungen und Anwendungen zur Logik q Produktionsregelsysteme q Inferenz für Produktionsregelsysteme q Produktionsregelsysteme mit Negation

Hoare-Regeln und partielle KorrektheitBeispiel zur Verifikation eines Programmes

Spezifikation:

Vorbedingung: {x, y ∈ N}Nachbedingung: {b = x+ y}

(A) {x, y ∈ N}(1) begin

(B) {x, y ∈ N}(C) ⇒ {x, y ∈ N und x = x}(2) a := x;

(D) {x, y ∈ N und a = x}(E) ⇒ {x, y ∈ N und a = x und y = y}(3) b := y;

(F) {x, y ∈ N und a = x und b = y}(G) ⇒ {x, y ∈ N und a = x und b+ a = a+ y}(4) b := b+ a;

(H) {x, y ∈ N und a = x und b = a+ y}(5) end

(I) {x, y ∈ N und a = x und b = a+ y}(J) ⇒ {b = x+ y}

L:V-169 Erweiterungen und Anwendungen zur Logik © LETTMANN 1996-2020

Page 42: Kapitel L:V€¦ · Kapitel L:V V.Erweiterungen und Anwendungen zur Logik q Produktionsregelsysteme q Inferenz für Produktionsregelsysteme q Produktionsregelsysteme mit Negation

Hoare-Regeln und partielle KorrektheitBeispiel zur Verifikation eines Programmes

Spezifikation:

Vorbedingung: {x, y ∈ N}Nachbedingung: {b = x+ y}

(A) {x, y ∈ N}(1) begin

(B) {x, y ∈ N}(C) ⇒ {x, y ∈ N und x = x}(2) a := x;

(D) {x, y ∈ N und a = x}(E) ⇒ {x, y ∈ N und a = x und y = y}(3) b := y;

(F) {x, y ∈ N und a = x und b = y}(G) ⇒ {x, y ∈ N und a = x und b+ a = a+ y}(4) b := b+ a;

(H) {x, y ∈ N und a = x und b = a+ y}(5) end

(I) {x, y ∈ N und a = x und b = a+ y}(J) ⇒ {b = x+ y}

L:V-170 Erweiterungen und Anwendungen zur Logik © LETTMANN 1996-2020

Page 43: Kapitel L:V€¦ · Kapitel L:V V.Erweiterungen und Anwendungen zur Logik q Produktionsregelsysteme q Inferenz für Produktionsregelsysteme q Produktionsregelsysteme mit Negation

Bemerkungen:

q Beim Aufschreiben eines Programmes wird jede Anweisung in einer neuen Zeile begonnen.

q Die Zeilen im Programm werden so eingerückt, dass die Schachtelung der Anweisungenerkennbar ist.

q Die Zusicherungen werden in das Programm eingefügt.

q Die Einrückung der Zusicherungen erfolgt so, dass sie auf gleicher Höhe mit denzugehörigen Anweisungen stehen.

L:V-171 Erweiterungen und Anwendungen zur Logik © LETTMANN 1996-2020

Page 44: Kapitel L:V€¦ · Kapitel L:V V.Erweiterungen und Anwendungen zur Logik q Produktionsregelsysteme q Inferenz für Produktionsregelsysteme q Produktionsregelsysteme mit Negation

Hoare-Regeln und partielle KorrektheitBeispiel zur Verifikation eines Programmes (Fortsetzung)

Herleitung im Hoare-Kalkül

Nr. Hoare-Formel Regela. (C)(2)(D) nach Zuweisungsregel Ab. (B)(2)(D) nach Abschwächungsregel C1 für ac. (E)(3)(F) nach Zuweisungsregel Ad. (D)(3)(F) nach Abschwächungsregel C1 für ce. (B)(2)(3)(F) nach Sequenzenregel S für b,df. (G)(4)(H) nach Zuweisungsregel A

g. (F)(4)(H) nach Abschwächungsregel C1 für fh. (B)(2)(3)(4)(H) nach Sequenzenregel S für e,gi. (A)(1)(2)(3)(4)(5)(I) nach Blockregel B für hi. (A)(1)(2)(3)(4)(5)(J) nach Abschwächungsregel C2 für i

Dieser Beweis zeigt nur die partielle Korrektheit, d.h. es muss zusätzlich gezeigtwerden, dass das Programm terminiert.

L:V-172 Erweiterungen und Anwendungen zur Logik © LETTMANN 1996-2020

Page 45: Kapitel L:V€¦ · Kapitel L:V V.Erweiterungen und Anwendungen zur Logik q Produktionsregelsysteme q Inferenz für Produktionsregelsysteme q Produktionsregelsysteme mit Negation

Bemerkungen zum Lesen der Tabelle:

q Die Elemente der Herleitung sind in Spalte 1 durchnummeriert (a-z).

q Die Liste der Hoare-Formeln wird untereinander in Spalte 2 der Tabelle angegeben.

q Die Hoare-Formeln werden durch Referenz auf die Zeilennummern in dem durchZusicherungen ergänzten Programm angegeben ((1) - (9999)).

q Es wird in Spalte 3 die angewendete Regel angegeben und eine die Referenzen auf dieHoare-Formeln, die ihre Voraussetzung bilden.

L:V-173 Erweiterungen und Anwendungen zur Logik © LETTMANN 1996-2020

Page 46: Kapitel L:V€¦ · Kapitel L:V V.Erweiterungen und Anwendungen zur Logik q Produktionsregelsysteme q Inferenz für Produktionsregelsysteme q Produktionsregelsysteme mit Negation

Hoare-Regeln und partielle KorrektheitHoare-Regeln für bedingte Anweisungen

I1 : {B und P} S1 {Q}{(nicht B) und P} ⇒ {Q}{P} if (B) then S1 {Q}

I2 : {B und P} S1 {Q}{(nicht B) und P} S2 {Q}

{P} if (B) then S1 else S2 {Q}

q In der Regel für bedingte Anweisungen wird die Bedingung der Anweisung fürzusätzliche Bedingungen in den Zusicherungen verwendet.

q Da die Handlungsfäden des Programmes wieder zusammenlaufen,muss in beiden Alternativen dieselbe Nachbedingung erreicht werden.

q Eine gemeinsame Nachbedingung kann durch Abschwächungsregelnerreicht werden:

– durch Abstraktion wie im Beispiel oder– durch disjunktive Verknüpfung der einzelnen Nachbedingungen.

L:V-174 Erweiterungen und Anwendungen zur Logik © LETTMANN 1996-2020

Page 47: Kapitel L:V€¦ · Kapitel L:V V.Erweiterungen und Anwendungen zur Logik q Produktionsregelsysteme q Inferenz für Produktionsregelsysteme q Produktionsregelsysteme mit Negation

Hoare-Regeln und partielle KorrektheitBeispiele zur Anwendung der Regeln für bedingte Anweisungen

{a ∈ Z}if (a > 0) then

{a ∈ Z und a > 0}⇒ {a ∈ Z und a > 0 und a = a}b := a;

{a ∈ Z und a > 0 und b = a}⇒ {a ∈ Z und b = |a|}

else

{a ∈ Z und (nicht a > 0)}⇒ {a ∈ Z und a ≤ 0 und − a = −a}b := −a;{a ∈ Z und a ≤ 0 und b = −a}⇒ {a ∈ Z und b = |a|}

{a ∈ Z und b = |a|}

L:V-175 Erweiterungen und Anwendungen zur Logik © LETTMANN 1996-2020

Page 48: Kapitel L:V€¦ · Kapitel L:V V.Erweiterungen und Anwendungen zur Logik q Produktionsregelsysteme q Inferenz für Produktionsregelsysteme q Produktionsregelsysteme mit Negation

Hoare-Regeln und partielle KorrektheitBeispiele zur Anwendung der Regeln für bedingte Anweisungen

{a ∈ Z}if (a > 0) then

{a ∈ Z und a > 0}⇒ {a ∈ Z und a > 0 und a = a}b := a;

{a ∈ Z und a > 0 und b = a}⇒ {a ∈ Z und b = |a|}

else

{a ∈ Z und (nicht a > 0)}⇒ {a ∈ Z und a ≤ 0 und − a = −a}b := −a;{a ∈ Z und a ≤ 0 und b = −a}⇒ {a ∈ Z und b = |a|}

{a ∈ Z und b = |a|}

L:V-176 Erweiterungen und Anwendungen zur Logik © LETTMANN 1996-2020

Page 49: Kapitel L:V€¦ · Kapitel L:V V.Erweiterungen und Anwendungen zur Logik q Produktionsregelsysteme q Inferenz für Produktionsregelsysteme q Produktionsregelsysteme mit Negation

Hoare-Regeln und partielle KorrektheitBeispiele zur Anwendung der Regeln für bedingte Anweisungen

{a ∈ Z}if (a > 0) then

{a ∈ Z und a > 0}⇒ {a ∈ Z und a > 0 und a = a}b := a;

{a ∈ Z und a > 0 und b = a}⇒ {a ∈ Z und b = |a|}

else

{a ∈ Z und (nicht a > 0)}⇒ {a ∈ Z und a ≤ 0 und − a = −a}b := −a;{a ∈ Z und a ≤ 0 und b = −a}⇒ {a ∈ Z und b = |a|}

{a ∈ Z und b = |a|}

L:V-177 Erweiterungen und Anwendungen zur Logik © LETTMANN 1996-2020

Page 50: Kapitel L:V€¦ · Kapitel L:V V.Erweiterungen und Anwendungen zur Logik q Produktionsregelsysteme q Inferenz für Produktionsregelsysteme q Produktionsregelsysteme mit Negation

Hoare-Regeln und partielle KorrektheitBeispiele zur Anwendung der Regeln für bedingte Anweisungen

{a ∈ Z}if (a > 0) then

{a ∈ Z und a > 0}⇒ {a ∈ Z und a > 0 und a = a}b := a;

{a ∈ Z und a > 0 und b = a}⇒ {a ∈ Z und b = |a|}

else

{a ∈ Z und (nicht a > 0)}⇒ {a ∈ Z und a ≤ 0 und − a = −a}b := −a;{a ∈ Z und a ≤ 0 und b = −a}⇒ {a ∈ Z und b = |a|}

{a ∈ Z und b = |a|}

L:V-178 Erweiterungen und Anwendungen zur Logik © LETTMANN 1996-2020

Page 51: Kapitel L:V€¦ · Kapitel L:V V.Erweiterungen und Anwendungen zur Logik q Produktionsregelsysteme q Inferenz für Produktionsregelsysteme q Produktionsregelsysteme mit Negation

Hoare-Regeln und partielle KorrektheitBeispiele zur Anwendung der Regeln für bedingte Anweisungen

{a ∈ Z}if (a > 0) then

{a ∈ Z und a > 0}⇒ {a ∈ Z und a > 0 und a = a}b := a;

{a ∈ Z und a > 0 und b = a}⇒ {a ∈ Z und b = |a|}

else

{a ∈ Z und (nicht a > 0)}⇒ {a ∈ Z und a ≤ 0 und − a = −a}b := −a;{a ∈ Z und a ≤ 0 und b = −a}⇒ {a ∈ Z und b = |a|}

{a ∈ Z und b = |a|}

L:V-179 Erweiterungen und Anwendungen zur Logik © LETTMANN 1996-2020

Page 52: Kapitel L:V€¦ · Kapitel L:V V.Erweiterungen und Anwendungen zur Logik q Produktionsregelsysteme q Inferenz für Produktionsregelsysteme q Produktionsregelsysteme mit Negation

Hoare-Regeln und partielle KorrektheitAnwendung der Regeln für bedingte Anweisungen

Vorgehensweise bei bekannter Vorbedingung {P}

q Vorbedingung zu den Vorbedingungen {P und B} im then-Teil und{P und (nicht B)} im else-Teil ergänzen.

q then-Teil und else-Teil verifizieren mit Nachbedingungen {Q1} bzw. {Q2}.

q Nachbedinungen zu gemeinsamer Nachbedingung {Q} abschwächen (z.B.(Q1 oder Q2) für Q wählen).

q Nachbedingung {Q} der bedingten Anweisung einfügen.

L:V-180 Erweiterungen und Anwendungen zur Logik © LETTMANN 1996-2020

Page 53: Kapitel L:V€¦ · Kapitel L:V V.Erweiterungen und Anwendungen zur Logik q Produktionsregelsysteme q Inferenz für Produktionsregelsysteme q Produktionsregelsysteme mit Negation

Hoare-Regeln und partielle KorrektheitBeispiele zur Anwendung der Regeln für bedingte Anweisungen (Fortsetzung)

{a > 0 und b > 0 und a 6= b}if (a > b) then

{a > 0 und b > 0 und a 6= b und a > b}⇒ {a− b + b > 0 und b > 0 und a− b + b 6= b und a− b + b > b}a := a− b;

{a + b > 0 und b > 0 und a + b 6= b und a + b > b}⇒ {b > 0 und a > 0}

else

{a > 0 und b > 0 und a 6= b und a ≤ b}⇒ {a > 0 und b− a + a > 0 und a 6= b− a + a und a ≤ b− a + a}b := b− a;

{a > 0 und b + a > 0 und a 6= b + a und a ≤ b + a}⇒ {a > 0 und a + b > 0 und 0 6= b und 0 ≤ b}⇒ {a > 0 und b > 0}

{a > 0 und b > 0}

L:V-181 Erweiterungen und Anwendungen zur Logik © LETTMANN 1996-2020

Page 54: Kapitel L:V€¦ · Kapitel L:V V.Erweiterungen und Anwendungen zur Logik q Produktionsregelsysteme q Inferenz für Produktionsregelsysteme q Produktionsregelsysteme mit Negation

Hoare-Regeln und partielle KorrektheitBeispiele zur Anwendung der Regeln für bedingte Anweisungen (Fortsetzung)

{a > 0 und b > 0 und a 6= b}if (a > b) then

{a > 0 und b > 0 und a 6= b und a > b}⇒ {a− b + b > 0 und b > 0 und a− b + b 6= b und a− b + b > b}a := a− b;

{a + b > 0 und b > 0 und a + b 6= b und a + b > b}⇒ {b > 0 und a > 0}

else

{a > 0 und b > 0 und a 6= b und a ≤ b}⇒ {a > 0 und b− a + a > 0 und a 6= b− a + a und a ≤ b− a + a}b := b− a;

{a > 0 und b + a > 0 und a 6= b + a und a ≤ b + a}⇒ {a > 0 und a + b > 0 und 0 6= b und 0 ≤ b}⇒ {a > 0 und b > 0}

{a > 0 und b > 0}

L:V-182 Erweiterungen und Anwendungen zur Logik © LETTMANN 1996-2020

Page 55: Kapitel L:V€¦ · Kapitel L:V V.Erweiterungen und Anwendungen zur Logik q Produktionsregelsysteme q Inferenz für Produktionsregelsysteme q Produktionsregelsysteme mit Negation

Hoare-Regeln und partielle KorrektheitBeispiele zur Anwendung der Regeln für bedingte Anweisungen (Fortsetzung)

{a > 0 und b > 0 und a 6= b}if (a > b) then

{a > 0 und b > 0 und a 6= b und a > b}⇒ {a− b + b > 0 und b > 0 und a− b + b 6= b und a− b + b > b}a := a− b;

{a + b > 0 und b > 0 und a + b 6= b und a + b > b}⇒ {b > 0 und a > 0}

else

{a > 0 und b > 0 und a 6= b und a ≤ b}⇒ {a > 0 und b− a + a > 0 und a 6= b− a + a und a ≤ b− a + a}b := b− a;

{a > 0 und b + a > 0 und a 6= b + a und a ≤ b + a}⇒ {a > 0 und a + b > 0 und 0 6= b und 0 ≤ b}⇒ {a > 0 und b > 0}

{a > 0 und b > 0}

L:V-183 Erweiterungen und Anwendungen zur Logik © LETTMANN 1996-2020

Page 56: Kapitel L:V€¦ · Kapitel L:V V.Erweiterungen und Anwendungen zur Logik q Produktionsregelsysteme q Inferenz für Produktionsregelsysteme q Produktionsregelsysteme mit Negation

Hoare-Regeln und partielle KorrektheitBeispiele zur Anwendung der Regeln für bedingte Anweisungen (Fortsetzung)

{a > 0 und b > 0 und a 6= b}if (a > b) then

{a > 0 und b > 0 und a 6= b und a > b}⇒ {a− b + b > 0 und b > 0 und a− b + b 6= b und a− b + b > b}a := a− b;

{a + b > 0 und b > 0 und a + b 6= b und a + b > b}⇒ {b > 0 und a > 0}

else

{a > 0 und b > 0 und a 6= b und a ≤ b}⇒ {a > 0 und b− a + a > 0 und a 6= b− a + a und a ≤ b− a + a}b := b− a;

{a > 0 und b + a > 0 und a 6= b + a und a ≤ b + a}⇒ {a > 0 und a + b > 0 und 0 6= b und 0 ≤ b}⇒ {a > 0 und b > 0}

{a > 0 und b > 0}

L:V-184 Erweiterungen und Anwendungen zur Logik © LETTMANN 1996-2020

Page 57: Kapitel L:V€¦ · Kapitel L:V V.Erweiterungen und Anwendungen zur Logik q Produktionsregelsysteme q Inferenz für Produktionsregelsysteme q Produktionsregelsysteme mit Negation

Hoare-Regeln und partielle KorrektheitBeispiele zur Anwendung der Regeln für bedingte Anweisungen (Fortsetzung)

{a > 0 und b > 0 und a 6= b}if (a > b) then

{a > 0 und b > 0 und a 6= b und a > b}⇒ {a− b + b > 0 und b > 0 und a− b + b 6= b und a− b + b > b}a := a− b;

{a + b > 0 und b > 0 und a + b 6= b und a + b > b}⇒ {b > 0 und a > 0}

else

{a > 0 und b > 0 und a 6= b und a ≤ b}⇒ {a > 0 und b− a + a > 0 und a 6= b− a + a und a ≤ b− a + a}b := b− a;

{a > 0 und b + a > 0 und a 6= b + a und a ≤ b + a}⇒ {a > 0 und a + b > 0 und 0 6= b und 0 ≤ b}⇒ {a > 0 und b > 0}

{a > 0 und b > 0}

L:V-185 Erweiterungen und Anwendungen zur Logik © LETTMANN 1996-2020

Page 58: Kapitel L:V€¦ · Kapitel L:V V.Erweiterungen und Anwendungen zur Logik q Produktionsregelsysteme q Inferenz für Produktionsregelsysteme q Produktionsregelsysteme mit Negation

Hoare-Regeln und partielle KorrektheitBeispiel zur Verifikation von bedingten Anweisungen

{a ∈ Z und a ≥ 0}if (a ungerade) then{a ∈ Z und a ≥ 0 und a ungerade}⇒ {a− 1 ∈ Z und a− 1 ≥ 0 und a− 1 gerade}a := a− 1;

{a ∈ Z und a ≥ 0 und a gerade}// empty else branch

{a ∈ Z und a ≥ 0 und a gerade}{a ∈ Z und a ≥ 0 und a gerade}

L:V-186 Erweiterungen und Anwendungen zur Logik © LETTMANN 1996-2020

Page 59: Kapitel L:V€¦ · Kapitel L:V V.Erweiterungen und Anwendungen zur Logik q Produktionsregelsysteme q Inferenz für Produktionsregelsysteme q Produktionsregelsysteme mit Negation

Hoare-Regeln und partielle KorrektheitBeispiel zur Verifikation von bedingten Anweisungen

{a ∈ Z und a ≥ 0}if (a ungerade) then{a ∈ Z und a ≥ 0 und a ungerade}⇒ {a− 1 ∈ Z und a− 1 ≥ 0 und a− 1 gerade}a := a− 1;

{a ∈ Z und a ≥ 0 und a gerade}// empty else branch

{a ∈ Z und a ≥ 0 und a gerade}{a ∈ Z und a ≥ 0 und a gerade}

L:V-187 Erweiterungen und Anwendungen zur Logik © LETTMANN 1996-2020

Page 60: Kapitel L:V€¦ · Kapitel L:V V.Erweiterungen und Anwendungen zur Logik q Produktionsregelsysteme q Inferenz für Produktionsregelsysteme q Produktionsregelsysteme mit Negation

Hoare-Regeln und partielle KorrektheitBeispiel zur Verifikation von bedingten Anweisungen

{a ∈ Z und a ≥ 0}if (a ungerade) then{a ∈ Z und a ≥ 0 und a ungerade}⇒ {a− 1 ∈ Z und a− 1 ≥ 0 und a− 1 gerade}a := a− 1;

{a ∈ Z und a ≥ 0 und a gerade}// empty else branch

{a ∈ Z und a ≥ 0 und a gerade}{a ∈ Z und a ≥ 0 und a gerade}

L:V-188 Erweiterungen und Anwendungen zur Logik © LETTMANN 1996-2020

Page 61: Kapitel L:V€¦ · Kapitel L:V V.Erweiterungen und Anwendungen zur Logik q Produktionsregelsysteme q Inferenz für Produktionsregelsysteme q Produktionsregelsysteme mit Negation

Hoare-Regeln und partielle KorrektheitBeispiel zur Verifikation von bedingten Anweisungen

{a ∈ Z und a ≥ 0}if (a ungerade) then{a ∈ Z und a ≥ 0 und a ungerade}⇒ {a− 1 ∈ Z und a− 1 ≥ 0 und a− 1 gerade}a := a− 1;

{a ∈ Z und a ≥ 0 und a gerade}// empty else branch

{a ∈ Z und a ≥ 0 und a gerade}{a ∈ Z und a ≥ 0 und a gerade}

L:V-189 Erweiterungen und Anwendungen zur Logik © LETTMANN 1996-2020

Page 62: Kapitel L:V€¦ · Kapitel L:V V.Erweiterungen und Anwendungen zur Logik q Produktionsregelsysteme q Inferenz für Produktionsregelsysteme q Produktionsregelsysteme mit Negation

Hoare-Regeln und partielle KorrektheitBeispiel zur Verifikation von bedingten Anweisungen (Fortsetzung)

{a, b ∈ Z und a ≥ 0 und b ≥ 0}if (a > b) then

{a, b ∈ Z und a ≥ 0 und b ≥ 0 und a > b}⇒ {a− b, b ∈ Z und a− b ≥ 0 und b ≥ 0}a := a− b;

{a, b ∈ Z und a ≥ 0 und b ≥ 0}// empty else branch

{a, b ∈ Z und a ≥ 0 und b ≥ 0 und (nicht a > b)}⇒ {a, b ∈ Z und a ≥ 0 und b ≥ 0}

{a, b ∈ Z und a ≥ 0 und b ≥ 0}

L:V-190 Erweiterungen und Anwendungen zur Logik © LETTMANN 1996-2020

Page 63: Kapitel L:V€¦ · Kapitel L:V V.Erweiterungen und Anwendungen zur Logik q Produktionsregelsysteme q Inferenz für Produktionsregelsysteme q Produktionsregelsysteme mit Negation

Hoare-Regeln und partielle KorrektheitBeispiel zur Verifikation von bedingten Anweisungen (Fortsetzung)

{a, b ∈ Z und a ≥ 0 und b ≥ 0}if (a > b) then

{a, b ∈ Z und a ≥ 0 und b ≥ 0 und a > b}⇒ {a− b, b ∈ Z und a− b ≥ 0 und b ≥ 0}a := a− b;

{a, b ∈ Z und a ≥ 0 und b ≥ 0}// empty else branch

{a, b ∈ Z und a ≥ 0 und b ≥ 0 und (nicht a > b)}⇒ {a, b ∈ Z und a ≥ 0 und b ≥ 0}

{a, b ∈ Z und a ≥ 0 und b ≥ 0}

L:V-191 Erweiterungen und Anwendungen zur Logik © LETTMANN 1996-2020

Page 64: Kapitel L:V€¦ · Kapitel L:V V.Erweiterungen und Anwendungen zur Logik q Produktionsregelsysteme q Inferenz für Produktionsregelsysteme q Produktionsregelsysteme mit Negation

Hoare-Regeln und partielle KorrektheitBeispiel zur Verifikation von bedingten Anweisungen (Fortsetzung)

{a, b ∈ Z und a ≥ 0 und b ≥ 0}if (a > b) then

{a, b ∈ Z und a ≥ 0 und b ≥ 0 und a > b}⇒ {a− b, b ∈ Z und a− b ≥ 0 und b ≥ 0}a := a− b;

{a, b ∈ Z und a ≥ 0 und b ≥ 0}// empty else branch

{a, b ∈ Z und a ≥ 0 und b ≥ 0 und (nicht a > b)}⇒ {a, b ∈ Z und a ≥ 0 und b ≥ 0}

{a, b ∈ Z und a ≥ 0 und b ≥ 0}

L:V-192 Erweiterungen und Anwendungen zur Logik © LETTMANN 1996-2020

Page 65: Kapitel L:V€¦ · Kapitel L:V V.Erweiterungen und Anwendungen zur Logik q Produktionsregelsysteme q Inferenz für Produktionsregelsysteme q Produktionsregelsysteme mit Negation

Hoare-Regeln und partielle KorrektheitBeispiel zur Verifikation von bedingten Anweisungen (Fortsetzung)

{a, b ∈ Z und a ≥ 0 und b ≥ 0}if (a > b) then

{a, b ∈ Z und a ≥ 0 und b ≥ 0 und a > b}⇒ {a− b, b ∈ Z und a− b ≥ 0 und b ≥ 0}a := a− b;

{a, b ∈ Z und a ≥ 0 und b ≥ 0}// empty else branch

{a, b ∈ Z und a ≥ 0 und b ≥ 0 und (nicht a > b)}⇒ {a, b ∈ Z und a ≥ 0 und b ≥ 0}

{a, b ∈ Z und a ≥ 0 und b ≥ 0}

L:V-193 Erweiterungen und Anwendungen zur Logik © LETTMANN 1996-2020

Page 66: Kapitel L:V€¦ · Kapitel L:V V.Erweiterungen und Anwendungen zur Logik q Produktionsregelsysteme q Inferenz für Produktionsregelsysteme q Produktionsregelsysteme mit Negation

Hoare-Regeln und partielle KorrektheitBeispiel zur Verifikation von bedingten Anweisungen (Fortsetzung)

{a 6= 0}if (a > 0) then

{a 6= 0 und a > 0}⇒ {a > 0 und 1 = 1}b := 1;

{a > 0 und b = 1}⇒ {a · b > 0 und a 6= 0}

else

{a 6= 0 und a ≤ 0}⇒ {a < 0 und − 1 = −1}b := −1;{a < 0 und b = −1}⇒ {a · b > 0 und a 6= 0}

{a · b > 0 und a 6= 0}

L:V-194 Erweiterungen und Anwendungen zur Logik © LETTMANN 1996-2020

Page 67: Kapitel L:V€¦ · Kapitel L:V V.Erweiterungen und Anwendungen zur Logik q Produktionsregelsysteme q Inferenz für Produktionsregelsysteme q Produktionsregelsysteme mit Negation

Hoare-Regeln und partielle KorrektheitBeispiel zur Verifikation von bedingten Anweisungen (Fortsetzung)

{a 6= 0}if (a > 0) then

{a 6= 0 und a > 0}⇒ {a > 0 und 1 = 1}b := 1;

{a > 0 und b = 1}⇒ {a · b > 0 und a 6= 0}

else

{a 6= 0 und a ≤ 0}⇒ {a < 0 und − 1 = −1}b := −1;{a < 0 und b = −1}⇒ {a · b > 0 und a 6= 0}

{a · b > 0 und a 6= 0}

L:V-195 Erweiterungen und Anwendungen zur Logik © LETTMANN 1996-2020

Page 68: Kapitel L:V€¦ · Kapitel L:V V.Erweiterungen und Anwendungen zur Logik q Produktionsregelsysteme q Inferenz für Produktionsregelsysteme q Produktionsregelsysteme mit Negation

Hoare-Regeln und partielle KorrektheitBeispiel zur Verifikation von bedingten Anweisungen (Fortsetzung)

{a 6= 0}if (a > 0) then

{a 6= 0 und a > 0}⇒ {a > 0 und 1 = 1}b := 1;

{a > 0 und b = 1}⇒ {a · b > 0 und a 6= 0}

else

{a 6= 0 und a ≤ 0}⇒ {a < 0 und − 1 = −1}b := −1;{a < 0 und b = −1}⇒ {a · b > 0 und a 6= 0}

{a · b > 0 und a 6= 0}

L:V-196 Erweiterungen und Anwendungen zur Logik © LETTMANN 1996-2020

Page 69: Kapitel L:V€¦ · Kapitel L:V V.Erweiterungen und Anwendungen zur Logik q Produktionsregelsysteme q Inferenz für Produktionsregelsysteme q Produktionsregelsysteme mit Negation

Hoare-Regeln und partielle KorrektheitBeispiel zur Verifikation von bedingten Anweisungen (Fortsetzung)

{a 6= 0}if (a > 0) then

{a 6= 0 und a > 0}⇒ {a > 0 und 1 = 1}b := 1;

{a > 0 und b = 1}⇒ {a · b > 0 und a 6= 0}

else

{a 6= 0 und a ≤ 0}⇒ {a < 0 und − 1 = −1}b := −1;{a < 0 und b = −1}⇒ {a · b > 0 und a 6= 0}

{a · b > 0 und a 6= 0}

L:V-197 Erweiterungen und Anwendungen zur Logik © LETTMANN 1996-2020

Page 70: Kapitel L:V€¦ · Kapitel L:V V.Erweiterungen und Anwendungen zur Logik q Produktionsregelsysteme q Inferenz für Produktionsregelsysteme q Produktionsregelsysteme mit Negation

Hoare-Regeln und partielle KorrektheitBeispiel zur Verifikation von bedingten Anweisungen (Fortsetzung)

{a · b ≥ 0}if (a > b) then

{a · b ≥ 0 und a > b}begin

x := a− b;

b := b− a;

a := x;

end

{ ??? }else

{a · b ≥ 0 und a ≤ b}a := b;

{ ??? }{a · b < 0}

Ist die Nachbedingung gültig bei dieser Vorbedingung?

L:V-198 Erweiterungen und Anwendungen zur Logik © LETTMANN 1996-2020

Page 71: Kapitel L:V€¦ · Kapitel L:V V.Erweiterungen und Anwendungen zur Logik q Produktionsregelsysteme q Inferenz für Produktionsregelsysteme q Produktionsregelsysteme mit Negation

Hoare-Regeln und partielle KorrektheitBeispiel zur Verifikation von bedingten Anweisungen (Fortsetzung)

{a · b ≥ 0}if (a > b) then

{a · b ≥ 0 und a > b}begin

x := a− b;

b := b− a;

a := x;

end

{ ??? }else

{a · b ≥ 0 und a ≤ b}a := b;

{ ??? }{a · b < 0}

Ist die Nachbedingung gültig bei dieser Vorbedingung?

L:V-199 Erweiterungen und Anwendungen zur Logik © LETTMANN 1996-2020

Page 72: Kapitel L:V€¦ · Kapitel L:V V.Erweiterungen und Anwendungen zur Logik q Produktionsregelsysteme q Inferenz für Produktionsregelsysteme q Produktionsregelsysteme mit Negation

Hoare-Regeln und partielle KorrektheitBeispiel zur Verifikation von bedingten Anweisungen (Fortsetzung)

{a · b ≥ 0}if (a > b) then

{a · b ≥ 0 und a > b}begin

x := a− b;

b := b− a;

a := x;

end

{ ??? }else

{a · b ≥ 0 und a ≤ b}a := b;

{ ??? }{a · b < 0}

Ist die Nachbedingung gültig bei dieser Vorbedingung?

L:V-200 Erweiterungen und Anwendungen zur Logik © LETTMANN 1996-2020

Page 73: Kapitel L:V€¦ · Kapitel L:V V.Erweiterungen und Anwendungen zur Logik q Produktionsregelsysteme q Inferenz für Produktionsregelsysteme q Produktionsregelsysteme mit Negation

Hoare-Regeln und partielle KorrektheitBeispiele zur Verifikation von bedingten Anweisungen (Fortsetzung)

Then-Zweig

{a · b ≥ 0}if (a > b) then

{a · b ≥ 0 und a > b}begin

{a · b ≥ 0 und a > b}⇒ {a · b ≥ 0 und a > b und a− b = a− b}x := a− b;

{a · b ≥ 0 und a > b und x = a− b}⇒ {a · (b− a+ a) ≥ 0 und 0 > b− a und − x = b− a}b := b− a;

{a · (b+ a) ≥ 0 und 0 > b und − x = b}⇒ {0 > b und − x = b und x = x}a := x;

{0 > b und − x = b und a = x}⇒ {0 > b und a > 0}⇒ {a · b < 0}

end{a · b < 0}

L:V-201 Erweiterungen und Anwendungen zur Logik © LETTMANN 1996-2020

Page 74: Kapitel L:V€¦ · Kapitel L:V V.Erweiterungen und Anwendungen zur Logik q Produktionsregelsysteme q Inferenz für Produktionsregelsysteme q Produktionsregelsysteme mit Negation

Hoare-Regeln und partielle KorrektheitBeispiele zur Verifikation von bedingten Anweisungen (Fortsetzung)

Then-Zweig

{a · b ≥ 0}if (a > b) then

{a · b ≥ 0 und a > b}begin

{a · b ≥ 0 und a > b}⇒ {a · b ≥ 0 und a > b und a− b = a− b}x := a− b;

{a · b ≥ 0 und a > b und x = a− b}⇒ {a · (b− a+ a) ≥ 0 und 0 > b− a und − x = b− a}b := b− a;

{a · (b+ a) ≥ 0 und 0 > b und − x = b}⇒ {0 > b und − x = b und x = x}a := x;

{0 > b und − x = b und a = x}⇒ {0 > b und a > 0}⇒ {a · b < 0}

end{a · b < 0}

L:V-202 Erweiterungen und Anwendungen zur Logik © LETTMANN 1996-2020

Page 75: Kapitel L:V€¦ · Kapitel L:V V.Erweiterungen und Anwendungen zur Logik q Produktionsregelsysteme q Inferenz für Produktionsregelsysteme q Produktionsregelsysteme mit Negation

Hoare-Regeln und partielle KorrektheitBeispiele zur Verifikation von bedingten Anweisungen (Fortsetzung)

Then-Zweig

{a · b ≥ 0}if (a > b) then

{a · b ≥ 0 und a > b}begin

{a · b ≥ 0 und a > b}⇒ {a · b ≥ 0 und a > b und a− b = a− b}x := a− b;

{a · b ≥ 0 und a > b und x = a− b}⇒ {a · (b− a+ a) ≥ 0 und 0 > b− a und − x = b− a}b := b− a;

{a · (b+ a) ≥ 0 und 0 > b und − x = b}⇒ {0 > b und − x = b und x = x}a := x;

{0 > b und − x = b und a = x}⇒ {0 > b und a > 0}⇒ {a · b < 0}

end{a · b < 0}

L:V-203 Erweiterungen und Anwendungen zur Logik © LETTMANN 1996-2020

Page 76: Kapitel L:V€¦ · Kapitel L:V V.Erweiterungen und Anwendungen zur Logik q Produktionsregelsysteme q Inferenz für Produktionsregelsysteme q Produktionsregelsysteme mit Negation

Hoare-Regeln und partielle KorrektheitBeispiele zur Verifikation von bedingten Anweisungen (Fortsetzung)

Then-Zweig

{a · b ≥ 0}if (a > b) then

{a · b ≥ 0 und a > b}begin

{a · b ≥ 0 und a > b}⇒ {a · b ≥ 0 und a > b und a− b = a− b}x := a− b;

{a · b ≥ 0 und a > b und x = a− b}⇒ {a · (b− a+ a) ≥ 0 und 0 > b− a und − x = b− a}b := b− a;

{a · (b+ a) ≥ 0 und 0 > b und − x = b}⇒ {0 > b und − x = b und x = x}a := x;

{0 > b und − x = b und a = x}⇒ {0 > b und a > 0}⇒ {a · b < 0}

end{a · b < 0}

L:V-204 Erweiterungen und Anwendungen zur Logik © LETTMANN 1996-2020

Page 77: Kapitel L:V€¦ · Kapitel L:V V.Erweiterungen und Anwendungen zur Logik q Produktionsregelsysteme q Inferenz für Produktionsregelsysteme q Produktionsregelsysteme mit Negation

Hoare-Regeln und partielle KorrektheitBeispiel zur Verifikation von bedingten Anweisungen (Fortsetzung)

Else-Zweig

{a · b ≥ 0}if (a > b) then

...{a · b < 0}

else{a · b ≥ 0 und a ≤ b}⇒ {b = b}a := b;

{a = b}⇒ {a · b = a2}⇒ {a · b ≥ 0}6⇒ {a · b < 0}

{a · b < 0}

Nachbedingung nicht gültig.

L:V-205 Erweiterungen und Anwendungen zur Logik © LETTMANN 1996-2020

Page 78: Kapitel L:V€¦ · Kapitel L:V V.Erweiterungen und Anwendungen zur Logik q Produktionsregelsysteme q Inferenz für Produktionsregelsysteme q Produktionsregelsysteme mit Negation

Hoare-Regeln und partielle KorrektheitBeispiel zur Verifikation von bedingten Anweisungen (Fortsetzung)

Else-Zweig

{a · b ≥ 0}if (a > b) then

...{a · b < 0}

else{a · b ≥ 0 und a ≤ b}⇒ {b = b}a := b;

{a = b}⇒ {a · b = a2}⇒ {a · b ≥ 0}6⇒ {a · b < 0}

{a · b < 0}

Nachbedingung nicht gültig.

L:V-206 Erweiterungen und Anwendungen zur Logik © LETTMANN 1996-2020

Page 79: Kapitel L:V€¦ · Kapitel L:V V.Erweiterungen und Anwendungen zur Logik q Produktionsregelsysteme q Inferenz für Produktionsregelsysteme q Produktionsregelsysteme mit Negation

Hoare-Regeln und partielle KorrektheitBeispiel zur Verifikation von bedingten Anweisungen (Fortsetzung)

Else-Zweig

{a · b ≥ 0}if (a > b) then

...{a · b < 0}

else{a · b ≥ 0 und a ≤ b}⇒ {b = b}a := b;

{a = b}⇒ {a · b = a2}⇒ {a · b ≥ 0}6⇒ {a · b < 0}

{a · b < 0}

Nachbedingung nicht gültig.

L:V-207 Erweiterungen und Anwendungen zur Logik © LETTMANN 1996-2020

Page 80: Kapitel L:V€¦ · Kapitel L:V V.Erweiterungen und Anwendungen zur Logik q Produktionsregelsysteme q Inferenz für Produktionsregelsysteme q Produktionsregelsysteme mit Negation

Hoare-Regeln und partielle KorrektheitBeispiel zur Verifikation von bedingten Anweisungen (Fortsetzung)

Else-Zweig

{a · b ≥ 0}if (a > b) then

...{a · b < 0}

else{a · b ≥ 0 und a ≤ b}⇒ {b = b}a := b;

{a = b}⇒ {a · b = a2}⇒ {a · b ≥ 0}6⇒ {a · b < 0}

{a · b < 0}

Nachbedingung nicht gültig.

L:V-208 Erweiterungen und Anwendungen zur Logik © LETTMANN 1996-2020

Page 81: Kapitel L:V€¦ · Kapitel L:V V.Erweiterungen und Anwendungen zur Logik q Produktionsregelsysteme q Inferenz für Produktionsregelsysteme q Produktionsregelsysteme mit Negation

Hoare-Regeln und partielle KorrektheitHoare-Regel für Schleifen

L : {I und B} S {I}{I} while (B) do S {I und (nicht B)}

q Die Zusicherung I heißt Invariante der Schleife.

q Nach Voraussetzung gilt nach dem Schleifenrumpf S die Zusicherung I, wenn(I und B) vor dem Schleifenrumpf galt. Wenn I vor Ausführung der Schleifegilt, dann gilt I in jedem Zustand nach einer Ausführung desSchleifenrumpfes S.

q Da I nach jeder Ausführung des Schleifenrumpfes gilt, so gilt I nach derSchleife, sofern diese terminiert.

q Die Schleife wird beendet, wenn die Schleifenbedingung nicht mehr gilt. Alsoist (I und nicht B) in diesem Fall die Nachbedingung der Schleife.

q Wenn die Schleifenbedingung von Anfang an nicht gilt, so wird die Schleifenicht durchlaufen. Da I vor der Schleife gilt, so gilt nach der Schleife(I und nicht B).

L:V-209 Erweiterungen und Anwendungen zur Logik © LETTMANN 1996-2020

Page 82: Kapitel L:V€¦ · Kapitel L:V V.Erweiterungen und Anwendungen zur Logik q Produktionsregelsysteme q Inferenz für Produktionsregelsysteme q Produktionsregelsysteme mit Negation

Bemerkungen:

q Die Verifikation mit der Schleifenregel zeigt nicht das Terminieren der Schleife.

q Das Finden der Invarianten stellt in der Programmverifikation i.d.R. den schwierigsten Schrittdar.

q Die Verifikation einer Schleife entspricht einem induktiven Beweis. Die Invariante entsprichtder Induktionsbehauptung.

L:V-210 Erweiterungen und Anwendungen zur Logik © LETTMANN 1996-2020

Page 83: Kapitel L:V€¦ · Kapitel L:V V.Erweiterungen und Anwendungen zur Logik q Produktionsregelsysteme q Inferenz für Produktionsregelsysteme q Produktionsregelsysteme mit Negation

Hoare-Regeln und partielle KorrektheitBeispiel zur Anwendung der Schleifenregel

{x = a und y = b und x ≥ 0}⇒ {x + y = a + b und x ≥ 0} Invariantewhile (x > 0) do

{x + y = a + b und x ≥ 0 und x > 0}begin

{x + y = a + b und x ≥ 0 und x > 0}⇒ {x− 1 + y + 1 = a + b und x− 1 ≥ 0}x := x− 1;

{x + y + 1 = a + b und x ≥ 0}y := y + 1;

{x + y = a + b und x ≥ 0}end

{x + y = a + b und x ≥ 0}{x + y = a + b und x ≥ 0 und (nicht x > 0)}⇒ {x + y = a + b und x = 0}⇒ {y = a + b}

L:V-211 Erweiterungen und Anwendungen zur Logik © LETTMANN 1996-2020

Page 84: Kapitel L:V€¦ · Kapitel L:V V.Erweiterungen und Anwendungen zur Logik q Produktionsregelsysteme q Inferenz für Produktionsregelsysteme q Produktionsregelsysteme mit Negation

Hoare-Regeln und partielle KorrektheitBeispiel zur Anwendung der Schleifenregel

{x = a und y = b und x ≥ 0}⇒ {x + y = a + b und x ≥ 0} Invariantewhile (x > 0) do

{x + y = a + b und x ≥ 0 und x > 0}begin

{x + y = a + b und x ≥ 0 und x > 0}⇒ {x− 1 + y + 1 = a + b und x− 1 ≥ 0}x := x− 1;

{x + y + 1 = a + b und x ≥ 0}y := y + 1;

{x + y = a + b und x ≥ 0}end

{x + y = a + b und x ≥ 0}{x + y = a + b und x ≥ 0 und (nicht x > 0)}⇒ {x + y = a + b und x = 0}⇒ {y = a + b}

L:V-212 Erweiterungen und Anwendungen zur Logik © LETTMANN 1996-2020

Page 85: Kapitel L:V€¦ · Kapitel L:V V.Erweiterungen und Anwendungen zur Logik q Produktionsregelsysteme q Inferenz für Produktionsregelsysteme q Produktionsregelsysteme mit Negation

Hoare-Regeln und partielle KorrektheitBeispiel zur Anwendung der Schleifenregel

{x = a und y = b und x ≥ 0}⇒ {x + y = a + b und x ≥ 0} Invariantewhile (x > 0) do

{x + y = a + b und x ≥ 0 und x > 0}begin

{x + y = a + b und x ≥ 0 und x > 0}⇒ {x− 1 + y + 1 = a + b und x− 1 ≥ 0}x := x− 1;

{x + y + 1 = a + b und x ≥ 0}y := y + 1;

{x + y = a + b und x ≥ 0}end

{x + y = a + b und x ≥ 0}{x + y = a + b und x ≥ 0 und (nicht x > 0)}⇒ {x + y = a + b und x = 0}⇒ {y = a + b}

L:V-213 Erweiterungen und Anwendungen zur Logik © LETTMANN 1996-2020

Page 86: Kapitel L:V€¦ · Kapitel L:V V.Erweiterungen und Anwendungen zur Logik q Produktionsregelsysteme q Inferenz für Produktionsregelsysteme q Produktionsregelsysteme mit Negation

Hoare-Regeln und partielle KorrektheitBeispiel zur Anwendung der Schleifenregel

{x = a und y = b und x ≥ 0}⇒ {x + y = a + b und x ≥ 0} Invariantewhile (x > 0) do

{x + y = a + b und x ≥ 0 und x > 0}begin

{x + y = a + b und x ≥ 0 und x > 0}⇒ {x− 1 + y + 1 = a + b und x− 1 ≥ 0}x := x− 1;

{x + y + 1 = a + b und x ≥ 0}y := y + 1;

{x + y = a + b und x ≥ 0}end

{x + y = a + b und x ≥ 0}{x + y = a + b und x ≥ 0 und (nicht x > 0)}⇒ {x + y = a + b und x = 0}⇒ {y = a + b}

L:V-214 Erweiterungen und Anwendungen zur Logik © LETTMANN 1996-2020

Page 87: Kapitel L:V€¦ · Kapitel L:V V.Erweiterungen und Anwendungen zur Logik q Produktionsregelsysteme q Inferenz für Produktionsregelsysteme q Produktionsregelsysteme mit Negation

Hoare-Regeln und partielle KorrektheitBeispiel zur Anwendung der Schleifenregel

{x = a und y = b und x ≥ 0}⇒ {x + y = a + b und x ≥ 0} Invariantewhile (x > 0) do

{x + y = a + b und x ≥ 0 und x > 0}begin

{x + y = a + b und x ≥ 0 und x > 0}⇒ {x− 1 + y + 1 = a + b und x− 1 ≥ 0}x := x− 1;

{x + y + 1 = a + b und x ≥ 0}y := y + 1;

{x + y = a + b und x ≥ 0}end

{x + y = a + b und x ≥ 0}{x + y = a + b und x ≥ 0 und (nicht x > 0)}⇒ {x + y = a + b und x = 0}⇒ {y = a + b}

L:V-215 Erweiterungen und Anwendungen zur Logik © LETTMANN 1996-2020

Page 88: Kapitel L:V€¦ · Kapitel L:V V.Erweiterungen und Anwendungen zur Logik q Produktionsregelsysteme q Inferenz für Produktionsregelsysteme q Produktionsregelsysteme mit Negation

Hoare-Regeln und partielle KorrektheitAnwendung der Regeln für bedingte Anweisungen

q Wie entdeckt man eine Invariante?

– Bei der Programmerstellung kann eine Invariante zur Verifikationvorgegeben und als Kommentar in den Programmtext eingefügt werden.

– Ansonsten ist die einzige Möglichkeit,

• die Implementation vollständig zu begreifen,• aus Durchläufen durch den Schleifenrumpf mit Beispielwerten ein

Verständnis für die Veränderung der Zustände zu entwickeln und• dieses Verständnis als eine Invariante zu formulieren.

q Invarianten sind nicht eindeutig.

q Invarianten sind häufig konjunktiv verknüpften Aussagen.

L:V-216 Erweiterungen und Anwendungen zur Logik © LETTMANN 1996-2020

Page 89: Kapitel L:V€¦ · Kapitel L:V V.Erweiterungen und Anwendungen zur Logik q Produktionsregelsysteme q Inferenz für Produktionsregelsysteme q Produktionsregelsysteme mit Negation

Hoare-Regeln und partielle KorrektheitBeispiel zur Anwendung der Schleifenregel: Abrollen der Schleife

while (x > 0) do

beginx := x− 1;

y := y + 1;

end

if (x > 0) then

beginx := x− 1;

y := y + 1;

end

if (x > 0) then

beginx := x− 1;

y := y + 1;

end

if (x > 0) then

beginx := x− 1;

y := y + 1;

end

. . .

L:V-217 Erweiterungen und Anwendungen zur Logik © LETTMANN 1996-2020

Page 90: Kapitel L:V€¦ · Kapitel L:V V.Erweiterungen und Anwendungen zur Logik q Produktionsregelsysteme q Inferenz für Produktionsregelsysteme q Produktionsregelsysteme mit Negation

Hoare-Regeln und partielle KorrektheitBeispiel zur Anwendung der Schleifenregel: Abrollen der Schleife (Fortsetzung)

Suche nach einer Invarianten

q Betrachte Werteverlauf in der Schleife für beteiligte Variablen.q Suche invariante Zusammenhänge zwischen Variablen.

{x = a und y = b und x ≥ 0}

while (x > 0) do

begin

x := x− 1;

y := y + 1;

end

Variablenwerte bei Testder Bedingung in while

a b x y

0 a b a b

1 a b a− 1 b + 1

2 a b a− 2 b + 2

3 a b a− 3 b + 3

4 a b a− 4 b + 4

Ü Invariante: {x + y = a + b und x ≥ 0}

L:V-218 Erweiterungen und Anwendungen zur Logik © LETTMANN 1996-2020

Page 91: Kapitel L:V€¦ · Kapitel L:V V.Erweiterungen und Anwendungen zur Logik q Produktionsregelsysteme q Inferenz für Produktionsregelsysteme q Produktionsregelsysteme mit Negation

Hoare-Regeln und partielle KorrektheitBeispiel zur Anwendung der Schleifenregel: Abrollen der Schleife (Fortsetzung)

{x+ y = a und x ≥ 0} Invariante

if (x > 0) then

{x+ y = a und x ≥ 0 und x > 0}begin

{x+ y = a und x ≥ 0 und x > 0}⇒ {x− 1 + y + 1 = a und x− 1 ≥ 0}x := x− 1;

{x+ y + 1 = a und x ≥ 0}y := y + 1;

{x+ y = a und x ≥ 0}end

{x+ y = a und x ≥ 0}// empty else branch

{x+ y = a und x ≥ 0 und (nicht x > 0)} ⇒ {x+ y = a und x ≥ 0}{x+ y = a und x ≥ 0} Invariante

if (x > 0) then

begin

x := x− 1;

y := y + 1;

end

{x+ y = a und x ≥ 0} Invariante

. . .

L:V-219 Erweiterungen und Anwendungen zur Logik © LETTMANN 1996-2020

Page 92: Kapitel L:V€¦ · Kapitel L:V V.Erweiterungen und Anwendungen zur Logik q Produktionsregelsysteme q Inferenz für Produktionsregelsysteme q Produktionsregelsysteme mit Negation

Hoare-Regeln und partielle KorrektheitBeispiel zur Anwendung der Schleifenregel: Abrollen der Schleife (Fortsetzung)

{x+ y = a und x ≥ 0} Invariante

if (x > 0) then

{x+ y = a und x ≥ 0 und x > 0}begin

{x+ y = a und x ≥ 0 und x > 0}⇒ {x− 1 + y + 1 = a und x− 1 ≥ 0}x := x− 1;

{x+ y + 1 = a und x ≥ 0}y := y + 1;

{x+ y = a und x ≥ 0}end

{x+ y = a und x ≥ 0}// empty else branch

{x+ y = a und x ≥ 0 und (nicht x > 0)} ⇒ {x+ y = a und x ≥ 0}{x+ y = a und x ≥ 0} Invariante

if (x > 0) then

begin

x := x− 1;

y := y + 1;

end

{x+ y = a und x ≥ 0} Invariante. . .

Ü Beachte Ähnlichkeit zur Verifikation der Schleife!L:V-220 Erweiterungen und Anwendungen zur Logik © LETTMANN 1996-2020

Page 93: Kapitel L:V€¦ · Kapitel L:V V.Erweiterungen und Anwendungen zur Logik q Produktionsregelsysteme q Inferenz für Produktionsregelsysteme q Produktionsregelsysteme mit Negation

Hoare-Regeln und partielle KorrektheitBeispiel zu Schleifeninvarianten

Programmfragment mit Vor- und Nachbedingungen:

{n ∈ N0}begin

i := 0;

x := 0;

while (i < n) do

begini := i+ 1;

x := x+ i;

endend{n ∈ N0 und x =

∑ni=0 i}

Ist eine Kombination aus drei der folgenden Teilausdrücke als Invariante möglich?

I0 = (n, i ∈ N0), I1 = (n ≥ i), I2 = (2x = i2), I3 = (x =i(i + 1)

2), I4 = (i ≥ n)

L:V-221 Erweiterungen und Anwendungen zur Logik © LETTMANN 1996-2020

Page 94: Kapitel L:V€¦ · Kapitel L:V V.Erweiterungen und Anwendungen zur Logik q Produktionsregelsysteme q Inferenz für Produktionsregelsysteme q Produktionsregelsysteme mit Negation

Hoare-Regeln und partielle KorrektheitBeispiel zu Schleifeninvarianten (Fortsetzung)

Verifikation des Anfangsstückes

{n ∈ N0}begin

{n ∈ N0}⇒ {n ∈ N0 und 0 = 0}i := 0;

{n ∈ N0 und i = 0}⇒ {n ∈ N0 und i = 0 und 0 = 0}x := 0;

{n ∈ N0 und i = 0 und x = 0}while (i < n) do

begini := i+ 1;

x := x+ i;

endend{n ∈ N0 und x =

∑ni=0 i}

L:V-222 Erweiterungen und Anwendungen zur Logik © LETTMANN 1996-2020

Page 95: Kapitel L:V€¦ · Kapitel L:V V.Erweiterungen und Anwendungen zur Logik q Produktionsregelsysteme q Inferenz für Produktionsregelsysteme q Produktionsregelsysteme mit Negation

Hoare-Regeln und partielle KorrektheitBeispiel zu Schleifeninvarianten (Fortsetzung)

Verifikation des Anfangsstückes

{n ∈ N0}begin

{n ∈ N0}⇒ {n ∈ N0 und 0 = 0}i := 0;

{n ∈ N0 und i = 0}⇒ {n ∈ N0 und i = 0 und 0 = 0}x := 0;

{n ∈ N0 und i = 0 und x = 0}while (i < n) do

begini := i+ 1;

x := x+ i;

endend{n ∈ N0 und x =

∑ni=0 i}

L:V-223 Erweiterungen und Anwendungen zur Logik © LETTMANN 1996-2020

Page 96: Kapitel L:V€¦ · Kapitel L:V V.Erweiterungen und Anwendungen zur Logik q Produktionsregelsysteme q Inferenz für Produktionsregelsysteme q Produktionsregelsysteme mit Negation

Hoare-Regeln und partielle KorrektheitBeispiel zu Schleifeninvarianten (Fortsetzung)

Test der Invarianten n, i ∈ N0 3

Test der Invarianten n ≥ i

{n ∈ N0 und i = 0 und x = 0}⇒ {n, i ∈ N0 und n ≥ i und ...}while (i < n) do

{n, i ∈ N0 und n ≥ i und ... und n > i}begin

{n, i ∈ N0 und n ≥ i und ... und n > i}⇒ {n, i ∈ N0 und n > i und ...} ⇒ {n, (i+ 1) ∈ N0 und n ≥ i+ 1 und ...}i := i+ 1;

{n, i ∈ N0 und n ≥ i und ...}x := x+ i;

{n, i ∈ N0 und n ≥ i und ...}end{n, i ∈ N0 und n ≥ i und ...}

end

Also ist Zusicherung n ≥ i als Invariante geeignet.

L:V-224 Erweiterungen und Anwendungen zur Logik © LETTMANN 1996-2020

Page 97: Kapitel L:V€¦ · Kapitel L:V V.Erweiterungen und Anwendungen zur Logik q Produktionsregelsysteme q Inferenz für Produktionsregelsysteme q Produktionsregelsysteme mit Negation

Hoare-Regeln und partielle KorrektheitBeispiel zu Schleifeninvarianten (Fortsetzung)

Test der Invarianten n, i ∈ N0 3

Test der Invarianten n ≥ i

{n ∈ N0 und i = 0 und x = 0}⇒ {n, i ∈ N0 und n ≥ i und ...}while (i < n) do

{n, i ∈ N0 und n ≥ i und ... und n > i}begin

{n, i ∈ N0 und n ≥ i und ... und n > i}⇒ {n, i ∈ N0 und n > i und ...} ⇒ {n, (i+ 1) ∈ N0 und n ≥ i+ 1 und ...}i := i+ 1;

{n, i ∈ N0 und n ≥ i und ...}x := x+ i;

{n, i ∈ N0 und n ≥ i und ...}end{n, i ∈ N0 und n ≥ i und ...}

end

Also ist Zusicherung n ≥ i als Invariante geeignet.

L:V-225 Erweiterungen und Anwendungen zur Logik © LETTMANN 1996-2020

Page 98: Kapitel L:V€¦ · Kapitel L:V V.Erweiterungen und Anwendungen zur Logik q Produktionsregelsysteme q Inferenz für Produktionsregelsysteme q Produktionsregelsysteme mit Negation

Hoare-Regeln und partielle KorrektheitBeispiel zu Schleifeninvarianten (Fortsetzung)

Test der Invarianten n, i ∈ N0 3

Test der Invarianten n ≥ i

{n ∈ N0 und i = 0 und x = 0}⇒ {n, i ∈ N0 und n ≥ i und ...}while (i < n) do

{n, i ∈ N0 und n ≥ i und ... und n > i}begin

{n, i ∈ N0 und n ≥ i und ... und n > i}⇒ {n, i ∈ N0 und n > i und ...} ⇒ {n, (i+ 1) ∈ N0 und n ≥ i+ 1 und ...}i := i+ 1;

{n, i ∈ N0 und n ≥ i und ...}x := x+ i;

{n, i ∈ N0 und n ≥ i und ...}end{n, i ∈ N0 und n ≥ i und ...}

end

Also ist Zusicherung n ≥ i als Invariante geeignet.

L:V-226 Erweiterungen und Anwendungen zur Logik © LETTMANN 1996-2020

Page 99: Kapitel L:V€¦ · Kapitel L:V V.Erweiterungen und Anwendungen zur Logik q Produktionsregelsysteme q Inferenz für Produktionsregelsysteme q Produktionsregelsysteme mit Negation

Hoare-Regeln und partielle KorrektheitBeispiel zu Schleifeninvarianten (Fortsetzung)

Test der Invarianten 2x = i2

{n ∈ N0 und i = 0 und x = 0} ⇒ {n, i ∈ N0 und 2x = i2 und ...}while (i < n) do

{n, i ∈ N0 und 2x = i2 und ... und n > i}begin

{n, i ∈ N0 und 2x = i2 und ... und n > i}⇒ {n, (i+ 1) ∈ N0 und 2x = (i+ 1− 1)2 und n ≥ i+ 1 und ...}i := i+ 1;

{n, i ∈ N0 und 2x = (i− 1)2 und n ≥ i und ...}⇒ {n ∈ N0 und 2(x+ i− i) = (i− 1)2 und n ≥ i und ...}x := x+ i;

{n, i ∈ N0 und 2(x− i) = (i− 1)2 und n ≥ i und ...}⇒ {n, i ∈ N0 und 2x− 2i = i2 − 2i+ 1 und n ≥ i und ...}6⇒ {n, i ∈ N0 und 2x = i2 und ...}

endend

Also ist Zusicherung 2x = i2 als Invariante nicht geeignet.

L:V-227 Erweiterungen und Anwendungen zur Logik © LETTMANN 1996-2020

Page 100: Kapitel L:V€¦ · Kapitel L:V V.Erweiterungen und Anwendungen zur Logik q Produktionsregelsysteme q Inferenz für Produktionsregelsysteme q Produktionsregelsysteme mit Negation

Hoare-Regeln und partielle KorrektheitBeispiel zu Schleifeninvarianten (Fortsetzung)

Test der Invarianten 2x = i2

{n ∈ N0 und i = 0 und x = 0} ⇒ {n, i ∈ N0 und 2x = i2 und ...}while (i < n) do

{n, i ∈ N0 und 2x = i2 und ... und n > i}begin

{n, i ∈ N0 und 2x = i2 und ... und n > i}⇒ {n, (i+ 1) ∈ N0 und 2x = (i+ 1− 1)2 und n ≥ i+ 1 und ...}i := i+ 1;

{n, i ∈ N0 und 2x = (i− 1)2 und n ≥ i und ...}⇒ {n ∈ N0 und 2(x+ i− i) = (i− 1)2 und n ≥ i und ...}x := x+ i;

{n, i ∈ N0 und 2(x− i) = (i− 1)2 und n ≥ i und ...}⇒ {n, i ∈ N0 und 2x− 2i = i2 − 2i+ 1 und n ≥ i und ...}6⇒ {n, i ∈ N0 und 2x = i2 und ...}

endend

Also ist Zusicherung 2x = i2 als Invariante nicht geeignet.

L:V-228 Erweiterungen und Anwendungen zur Logik © LETTMANN 1996-2020

Page 101: Kapitel L:V€¦ · Kapitel L:V V.Erweiterungen und Anwendungen zur Logik q Produktionsregelsysteme q Inferenz für Produktionsregelsysteme q Produktionsregelsysteme mit Negation

Hoare-Regeln und partielle KorrektheitBeispiel zu Schleifeninvarianten (Fortsetzung)

Test der Invarianten 2x = i2

{n ∈ N0 und i = 0 und x = 0} ⇒ {n, i ∈ N0 und 2x = i2 und ...}while (i < n) do

{n, i ∈ N0 und 2x = i2 und ... und n > i}begin

{n, i ∈ N0 und 2x = i2 und ... und n > i}⇒ {n, (i+ 1) ∈ N0 und 2x = (i+ 1− 1)2 und n ≥ i+ 1 und ...}i := i+ 1;

{n, i ∈ N0 und 2x = (i− 1)2 und n ≥ i und ...}⇒ {n ∈ N0 und 2(x+ i− i) = (i− 1)2 und n ≥ i und ...}x := x+ i;

{n, i ∈ N0 und 2(x− i) = (i− 1)2 und n ≥ i und ...}⇒ {n, i ∈ N0 und 2x− 2i = i2 − 2i+ 1 und n ≥ i und ...}6⇒ {n, i ∈ N0 und 2x = i2 und ...}

endend

Also ist Zusicherung 2x = i2 als Invariante nicht geeignet.

L:V-229 Erweiterungen und Anwendungen zur Logik © LETTMANN 1996-2020

Page 102: Kapitel L:V€¦ · Kapitel L:V V.Erweiterungen und Anwendungen zur Logik q Produktionsregelsysteme q Inferenz für Produktionsregelsysteme q Produktionsregelsysteme mit Negation

Hoare-Regeln und partielle KorrektheitBeispiel zu Schleifeninvarianten (Fortsetzung)

Test der Invarianten 2x = i2

{n ∈ N0 und i = 0 und x = 0} ⇒ {n, i ∈ N0 und 2x = i2 und ...}while (i < n) do

{n, i ∈ N0 und 2x = i2 und ... und n > i}begin

{n, i ∈ N0 und 2x = i2 und ... und n > i}⇒ {n, (i+ 1) ∈ N0 und 2x = (i+ 1− 1)2 und n ≥ i+ 1 und ...}i := i+ 1;

{n, i ∈ N0 und 2x = (i− 1)2 und n ≥ i und ...}⇒ {n ∈ N0 und 2(x+ i− i) = (i− 1)2 und n ≥ i und ...}x := x+ i;

{n, i ∈ N0 und 2(x− i) = (i− 1)2 und n ≥ i und ...}⇒ {n, i ∈ N0 und 2x− 2i = i2 − 2i+ 1 und n ≥ i und ...}6⇒ {n, i ∈ N0 und 2x = i2 und ...}

endend

Also ist Zusicherung 2x = i2 als Invariante nicht geeignet.

L:V-230 Erweiterungen und Anwendungen zur Logik © LETTMANN 1996-2020

Page 103: Kapitel L:V€¦ · Kapitel L:V V.Erweiterungen und Anwendungen zur Logik q Produktionsregelsysteme q Inferenz für Produktionsregelsysteme q Produktionsregelsysteme mit Negation

Hoare-Regeln und partielle KorrektheitBeispiel zu Schleifeninvarianten (Fortsetzung)

Test der Invarianten x = 12i(i + 1)

{n ∈ N0 und i = 0 und x = 0} ⇒ {n, i ∈ N0 und x = 12i(i+ 1) und ...}

while (i < n) do

{n, i ∈ N0 und x = 12i(i+ 1) und ... und n > i}

begin

{n, i ∈ N0 und x = 12i(i+ 1) und ... und n > i}

⇒ {n, (i+ 1) ∈ N0 und x = 12(i+ 1− 1)(i+ 1) und n ≥ i+ 1 und ...}

i := i+ 1;

{n, i ∈ N0 und x = 12(i− 1)i, n ≥ i und ...}

⇒ {n, i ∈ N0 und x+ i− i = 12(i− 1)i und n ≥ i und ...}

x := x+ i;

{n, i ∈ N0 und x− i = 12(i− 1)i und n ≥ i und ...}

⇒ {n, i ∈ N0 und x = 12((i− 1)i+ 2i) und n ≥ i und ...}

⇒ {n, i ∈ N0 und x = 12i(i+ 1) und n ≥ i und ...}

endend

Also ist Zusicherung x = 12i(i + 1) als Invariante geeignet.

L:V-231 Erweiterungen und Anwendungen zur Logik © LETTMANN 1996-2020

Page 104: Kapitel L:V€¦ · Kapitel L:V V.Erweiterungen und Anwendungen zur Logik q Produktionsregelsysteme q Inferenz für Produktionsregelsysteme q Produktionsregelsysteme mit Negation

Hoare-Regeln und partielle KorrektheitBeispiel zu Schleifeninvarianten (Fortsetzung)

Test der Invarianten x = 12i(i + 1)

{n ∈ N0 und i = 0 und x = 0} ⇒ {n, i ∈ N0 und x = 12i(i+ 1) und ...}

while (i < n) do

{n, i ∈ N0 und x = 12i(i+ 1) und ... und n > i}

begin

{n, i ∈ N0 und x = 12i(i+ 1) und ... und n > i}

⇒ {n, (i+ 1) ∈ N0 und x = 12(i+ 1− 1)(i+ 1) und n ≥ i+ 1 und ...}

i := i+ 1;

{n, i ∈ N0 und x = 12(i− 1)i, n ≥ i und ...}

⇒ {n, i ∈ N0 und x+ i− i = 12(i− 1)i und n ≥ i und ...}

x := x+ i;

{n, i ∈ N0 und x− i = 12(i− 1)i und n ≥ i und ...}

⇒ {n, i ∈ N0 und x = 12((i− 1)i+ 2i) und n ≥ i und ...}

⇒ {n, i ∈ N0 und x = 12i(i+ 1) und n ≥ i und ...}

endend

Also ist Zusicherung x = 12i(i + 1) als Invariante geeignet.

L:V-232 Erweiterungen und Anwendungen zur Logik © LETTMANN 1996-2020

Page 105: Kapitel L:V€¦ · Kapitel L:V V.Erweiterungen und Anwendungen zur Logik q Produktionsregelsysteme q Inferenz für Produktionsregelsysteme q Produktionsregelsysteme mit Negation

Hoare-Regeln und partielle KorrektheitBeispiel zu Schleifeninvarianten (Fortsetzung)

Test der Invarianten x = 12i(i + 1)

{n ∈ N0 und i = 0 und x = 0} ⇒ {n, i ∈ N0 und x = 12i(i+ 1) und ...}

while (i < n) do

{n, i ∈ N0 und x = 12i(i+ 1) und ... und n > i}

begin

{n, i ∈ N0 und x = 12i(i+ 1) und ... und n > i}

⇒ {n, (i+ 1) ∈ N0 und x = 12(i+ 1− 1)(i+ 1) und n ≥ i+ 1 und ...}

i := i+ 1;

{n, i ∈ N0 und x = 12(i− 1)i, n ≥ i und ...}

⇒ {n, i ∈ N0 und x+ i− i = 12(i− 1)i und n ≥ i und ...}

x := x+ i;

{n, i ∈ N0 und x− i = 12(i− 1)i und n ≥ i und ...}

⇒ {n, i ∈ N0 und x = 12((i− 1)i+ 2i) und n ≥ i und ...}

⇒ {n, i ∈ N0 und x = 12i(i+ 1) und n ≥ i und ...}

endend

Also ist Zusicherung x = 12i(i + 1) als Invariante geeignet.

L:V-233 Erweiterungen und Anwendungen zur Logik © LETTMANN 1996-2020

Page 106: Kapitel L:V€¦ · Kapitel L:V V.Erweiterungen und Anwendungen zur Logik q Produktionsregelsysteme q Inferenz für Produktionsregelsysteme q Produktionsregelsysteme mit Negation

Hoare-Regeln und partielle KorrektheitBeispiel zu Schleifeninvarianten (Fortsetzung)

Test der Invarianten x = 12i(i + 1)

{n ∈ N0 und i = 0 und x = 0} ⇒ {n, i ∈ N0 und x = 12i(i+ 1) und ...}

while (i < n) do

{n, i ∈ N0 und x = 12i(i+ 1) und ... und n > i}

begin

{n, i ∈ N0 und x = 12i(i+ 1) und ... und n > i}

⇒ {n, (i+ 1) ∈ N0 und x = 12(i+ 1− 1)(i+ 1) und n ≥ i+ 1 und ...}

i := i+ 1;

{n, i ∈ N0 und x = 12(i− 1)i, n ≥ i und ...}

⇒ {n, i ∈ N0 und x+ i− i = 12(i− 1)i und n ≥ i und ...}

x := x+ i;

{n, i ∈ N0 und x− i = 12(i− 1)i und n ≥ i und ...}

⇒ {n, i ∈ N0 und x = 12((i− 1)i+ 2i) und n ≥ i und ...}

⇒ {n, i ∈ N0 und x = 12i(i+ 1) und n ≥ i und ...}

endend

Also ist Zusicherung x = 12i(i + 1) als Invariante geeignet.

L:V-234 Erweiterungen und Anwendungen zur Logik © LETTMANN 1996-2020

Page 107: Kapitel L:V€¦ · Kapitel L:V V.Erweiterungen und Anwendungen zur Logik q Produktionsregelsysteme q Inferenz für Produktionsregelsysteme q Produktionsregelsysteme mit Negation

Hoare-Regeln und partielle KorrektheitBeispiel zu Schleifeninvarianten (Fortsetzung)

Test der Invarianten i ≥ n

{n ∈ N0 und i = 0 und x = 0}6⇒ {n ∈ N0 und i ≥ n und ...}while (i < n) do

begini := i+ 1;

x := x+ i;

endend

Also ist Zusicherung i ≥ n als Invariante nicht geeignet.

L:V-235 Erweiterungen und Anwendungen zur Logik © LETTMANN 1996-2020

Page 108: Kapitel L:V€¦ · Kapitel L:V V.Erweiterungen und Anwendungen zur Logik q Produktionsregelsysteme q Inferenz für Produktionsregelsysteme q Produktionsregelsysteme mit Negation

Hoare-Regeln und partielle KorrektheitBeispiel zu Schleifeninvarianten (Fortsetzung)

Test der Invarianten i ≥ n

{n ∈ N0 und i = 0 und x = 0}6⇒ {n ∈ N0 und i ≥ n und ...}while (i < n) do

begini := i+ 1;

x := x+ i;

endend

Also ist Zusicherung i ≥ n als Invariante nicht geeignet.

L:V-236 Erweiterungen und Anwendungen zur Logik © LETTMANN 1996-2020

Page 109: Kapitel L:V€¦ · Kapitel L:V V.Erweiterungen und Anwendungen zur Logik q Produktionsregelsysteme q Inferenz für Produktionsregelsysteme q Produktionsregelsysteme mit Negation

Hoare-Regeln und partielle KorrektheitBeispiel zu Schleifeninvarianten (Fortsetzung)

Partielle Korrektheit: Verifikation mit Invariante {n, i ∈ N0 und n ≥ i und x = 12i(i+ 1)}

{n ∈ N0 und i = 0 und x = 0} ⇒ {n, i ∈ N0 und n ≥ i und x = 12i(i+ 1)}

while (i < n) do

{n, i ∈ N0 und n ≥ i und x = 12i(i+ 1) und n > i}

begin

{n, i ∈ N0 und n ≥ i und x = 12i(i+ 1) und n > i}

⇒ {n, (i+ 1) ∈ N0 und x = 12(i+ 1− 1)(i+ 1) und n ≥ i+ 1}

i := i+ 1;

{n, i ∈ N0 und x = 12(i− 1)i und n ≥ i}

⇒ {n, i ∈ N0 und x+ i− i = 12(i− 1)i und n ≥ i}

x := x+ i;

{n, i ∈ N0 und x− i = 12(i− 1)i und n ≥ i}

⇒ {n, i ∈ N0 und x = 12((i− 1)i+ 2i) und n ≥ i} ⇒ {n, i ∈ N0 und x = 1

2i(i+ 1) und n ≥ i}

end

{n, i ∈ N0 und x = 12i(i+ 1) und n ≥ i}

{n, i ∈ N0 und x = 12i(i+ 1) und n ≥ i und i ≥ n}

⇒ {n, i ∈ N0 und x = 12i(i+ 1) und n = i} ⇒ {n, i ∈ N0 und x = 1

2n(n+ 1)}

end

{n ∈ N0 und x = 12n(n+ 1)} ⇒ {n ∈ N0 und x =

∑ni=0 i}

L:V-237 Erweiterungen und Anwendungen zur Logik © LETTMANN 1996-2020

Page 110: Kapitel L:V€¦ · Kapitel L:V V.Erweiterungen und Anwendungen zur Logik q Produktionsregelsysteme q Inferenz für Produktionsregelsysteme q Produktionsregelsysteme mit Negation

Hoare-Regeln und partielle KorrektheitBeispiel Einfaches Potenzieren

Idee des Algorithmus: Rückführung auf die iterierte Multiplikation

Spezifikation: Vorbedingung: {x ∈ R und n ∈ N0}Nachbedingung: {x ∈ R und n ∈ N0 und b = xn}

begin

a := x;

b := 1;

i := n;

while (i > 0) do

begin

b := b ∗ a;i := i− 1;

end

end

Variable x und n sind Eingabewerte, Variable b speichert das Ergebnis.

L:V-238 Erweiterungen und Anwendungen zur Logik © LETTMANN 1996-2020

Page 111: Kapitel L:V€¦ · Kapitel L:V V.Erweiterungen und Anwendungen zur Logik q Produktionsregelsysteme q Inferenz für Produktionsregelsysteme q Produktionsregelsysteme mit Negation

Hoare-Regeln und partielle KorrektheitBeispiel Einfaches Potenzieren (Fortsetzung)

Spezifikation: Vorbedingung: {x ∈ R und n ∈ N0}Nachbedingung: {x ∈ R und n ∈ N0 und b = xn}

{x ∈ R und n ∈ N0}begin

a := x;

b := 1;

i := n;

while (i > 0) do

begin

b := b ∗ a;i := i− 1;

end

end

{x ∈ R und n ∈ N0 und b = xn}

L:V-239 Erweiterungen und Anwendungen zur Logik © LETTMANN 1996-2020

Page 112: Kapitel L:V€¦ · Kapitel L:V V.Erweiterungen und Anwendungen zur Logik q Produktionsregelsysteme q Inferenz für Produktionsregelsysteme q Produktionsregelsysteme mit Negation

Hoare-Regeln und partielle KorrektheitBeispiel Einfaches Potenzieren (Fortsetzung)

Spezifikation: Vorbedingung: {x ∈ R und n ∈ N0}Nachbedingung: {x ∈ R und n ∈ N0 und b = xn}

{x ∈ R und n ∈ N0}begin

{x ∈ R und n ∈ N0}⇒ {x ∈ R und n ∈ N0 und x = x}a := x;

{x ∈ R und n ∈ N0 und a = x}⇒ {x ∈ R und n ∈ N0 und a = x und 1 = 1}b := 1;

{x ∈ R und n ∈ N0 und a = x und b = 1}⇒ {x ∈ R und n ∈ N0 und a = x und b = 1 und n = n}i := n;

{x ∈ R und n ∈ N0 und a = x und b = 1 und i = n}while (i > 0) do

begin

b := b ∗ a;i := i− 1;

endend

L:V-240 Erweiterungen und Anwendungen zur Logik © LETTMANN 1996-2020

Page 113: Kapitel L:V€¦ · Kapitel L:V V.Erweiterungen und Anwendungen zur Logik q Produktionsregelsysteme q Inferenz für Produktionsregelsysteme q Produktionsregelsysteme mit Negation

Hoare-Regeln und partielle KorrektheitBeispiel Einfaches Potenzieren (Fortsetzung)

Spezifikation: Vorbedingung: {x ∈ R und n ∈ N0}Nachbedingung: {x ∈ R und n ∈ N0 und b = xn}

{x ∈ R und n ∈ N0}begin

{x ∈ R und n ∈ N0}⇒ {x ∈ R und n ∈ N0 und x = x}a := x;

{x ∈ R und n ∈ N0 und a = x}⇒ {x ∈ R und n ∈ N0 und a = x und 1 = 1}b := 1;

{x ∈ R und n ∈ N0 und a = x und b = 1}⇒ {x ∈ R und n ∈ N0 und a = x und b = 1 und n = n}i := n;

{x ∈ R und n ∈ N0 und a = x und b = 1 und i = n}while (i > 0) do

begin

b := b ∗ a;i := i− 1;

endend

L:V-241 Erweiterungen und Anwendungen zur Logik © LETTMANN 1996-2020

Page 114: Kapitel L:V€¦ · Kapitel L:V V.Erweiterungen und Anwendungen zur Logik q Produktionsregelsysteme q Inferenz für Produktionsregelsysteme q Produktionsregelsysteme mit Negation

Hoare-Regeln und partielle KorrektheitBeispiel Einfaches Potenzieren (Fortsetzung)

Suche nach einer Invarianten

q Tautologische Aussagen sind immer invariant, aber sie helfen nicht.q Betrachte Werteverlauf in der Schleife für beteiligte Variablen.

begin

a := x; b := 1; i := n;

while (i > 0) do

begin

b := b ∗ a;i := i− 1;

end

end

Variablenwerte bei Testder Bedingung in while

x n a b i

0 x n x x0 n

1 x n x x1 n− 1

2 x n x x2 n− 2

3 x n x x3 n− 3

4 x n x x4 n− 4

Invariante I: {x ∈ R und n, i ∈ N0 und xn = b ∗ ai und i ≥ 0}

L:V-242 Erweiterungen und Anwendungen zur Logik © LETTMANN 1996-2020

Page 115: Kapitel L:V€¦ · Kapitel L:V V.Erweiterungen und Anwendungen zur Logik q Produktionsregelsysteme q Inferenz für Produktionsregelsysteme q Produktionsregelsysteme mit Negation

Hoare-Regeln und partielle KorrektheitBeispiel Einfaches Potenzieren (Fortsetzung)

. . .{x ∈ R und n ∈ N0 und a = x und b = 1 und i = n}⇒ {x ∈ R und n, i ∈ N0 und xn = b ∗ ai und i ≥ 0} Invariantewhile (i > 0) do

{x ∈ R und n, i ∈ N0 und xn = b ∗ ai und i ≥ 0 und i > 0}begin

{x ∈ R und n, i ∈ N0 und xn = b ∗ ai und i ≥ 0 und i > 0}⇒ {x ∈ R und n, i ∈ N0 und xn = b ∗ ai und i > 0}⇒ {x ∈ R und n, i ∈ N0 und xn = b ∗ a ∗ ai−1 und i > 0}b := b ∗ a;{x ∈ R und n, i ∈ N0 und xn = b ∗ ai−1 und i > 0}⇒ {x ∈ R und n, (i− 1) ∈ N0 und xn = b ∗ ai−1 und i− 1 ≥ 0}i := i− 1;

{x ∈ R und n, i ∈ N0 und xn = b ∗ ai und i ≥ 0}end

{x ∈ R und n, i ∈ N0 und xn = b ∗ ai und i ≥ 0}{x ∈ R und n, i ∈ N0 und xn = b ∗ ai und i ≥ 0 und i ≤ 0}⇒ {x ∈ R und n, i ∈ N0 und xn = b ∗ ai und i = 0} ⇒ {x ∈ R und n ∈ N0 und b = xn}

end{x ∈ R und n ∈ N0 und b = xn}

L:V-243 Erweiterungen und Anwendungen zur Logik © LETTMANN 1996-2020

Page 116: Kapitel L:V€¦ · Kapitel L:V V.Erweiterungen und Anwendungen zur Logik q Produktionsregelsysteme q Inferenz für Produktionsregelsysteme q Produktionsregelsysteme mit Negation

Hoare-Regeln und partielle KorrektheitBeispiel Einfaches Potenzieren (Fortsetzung)

. . .{x ∈ R und n ∈ N0 und a = x und b = 1 und i = n}⇒ {x ∈ R und n, i ∈ N0 und xn = b ∗ ai und i ≥ 0} Invariantewhile (i > 0) do

{x ∈ R und n, i ∈ N0 und xn = b ∗ ai und i ≥ 0 und i > 0}begin

{x ∈ R und n, i ∈ N0 und xn = b ∗ ai und i ≥ 0 und i > 0}⇒ {x ∈ R und n, i ∈ N0 und xn = b ∗ ai und i > 0}⇒ {x ∈ R und n, i ∈ N0 und xn = b ∗ a ∗ ai−1 und i > 0}b := b ∗ a;{x ∈ R und n, i ∈ N0 und xn = b ∗ ai−1 und i > 0}⇒ {x ∈ R und n, (i− 1) ∈ N0 und xn = b ∗ ai−1 und i− 1 ≥ 0}i := i− 1;

{x ∈ R und n, i ∈ N0 und xn = b ∗ ai und i ≥ 0}end

{x ∈ R und n, i ∈ N0 und xn = b ∗ ai und i ≥ 0}{x ∈ R und n, i ∈ N0 und xn = b ∗ ai und i ≥ 0 und i ≤ 0}⇒ {x ∈ R und n, i ∈ N0 und xn = b ∗ ai und i = 0} ⇒ {x ∈ R und n ∈ N0 und b = xn}

end{x ∈ R und n ∈ N0 und b = xn}

L:V-244 Erweiterungen und Anwendungen zur Logik © LETTMANN 1996-2020

Page 117: Kapitel L:V€¦ · Kapitel L:V V.Erweiterungen und Anwendungen zur Logik q Produktionsregelsysteme q Inferenz für Produktionsregelsysteme q Produktionsregelsysteme mit Negation

Hoare-Regeln und partielle KorrektheitBeispiel Einfaches Potenzieren (Fortsetzung)

. . .{x ∈ R und n ∈ N0 und a = x und b = 1 und i = n}⇒ {x ∈ R und n, i ∈ N0 und xn = b ∗ ai und i ≥ 0} Invariantewhile (i > 0) do

{x ∈ R und n, i ∈ N0 und xn = b ∗ ai und i ≥ 0 und i > 0}begin

{x ∈ R und n, i ∈ N0 und xn = b ∗ ai und i ≥ 0 und i > 0}⇒ {x ∈ R und n, i ∈ N0 und xn = b ∗ ai und i > 0}⇒ {x ∈ R und n, i ∈ N0 und xn = b ∗ a ∗ ai−1 und i > 0}b := b ∗ a;{x ∈ R und n, i ∈ N0 und xn = b ∗ ai−1 und i > 0}⇒ {x ∈ R und n, (i− 1) ∈ N0 und xn = b ∗ ai−1 und i− 1 ≥ 0}i := i− 1;

{x ∈ R und n, i ∈ N0 und xn = b ∗ ai und i ≥ 0}end

{x ∈ R und n, i ∈ N0 und xn = b ∗ ai und i ≥ 0}{x ∈ R und n, i ∈ N0 und xn = b ∗ ai und i ≥ 0 und i ≤ 0}⇒ {x ∈ R und n, i ∈ N0 und xn = b ∗ ai und i = 0} ⇒ {x ∈ R und n ∈ N0 und b = xn}

end{x ∈ R und n ∈ N0 und b = xn}

L:V-245 Erweiterungen und Anwendungen zur Logik © LETTMANN 1996-2020

Page 118: Kapitel L:V€¦ · Kapitel L:V V.Erweiterungen und Anwendungen zur Logik q Produktionsregelsysteme q Inferenz für Produktionsregelsysteme q Produktionsregelsysteme mit Negation

Hoare-Regeln und partielle KorrektheitBeispiel Einfaches Potenzieren (Fortsetzung)

. . .{x ∈ R und n ∈ N0 und a = x und b = 1 und i = n}⇒ {x ∈ R und n, i ∈ N0 und xn = b ∗ ai und i ≥ 0} Invariantewhile (i > 0) do

{x ∈ R und n, i ∈ N0 und xn = b ∗ ai und i ≥ 0 und i > 0}begin

{x ∈ R und n, i ∈ N0 und xn = b ∗ ai und i ≥ 0 und i > 0}⇒ {x ∈ R und n, i ∈ N0 und xn = b ∗ ai und i > 0}⇒ {x ∈ R und n, i ∈ N0 und xn = b ∗ a ∗ ai−1 und i > 0}b := b ∗ a;{x ∈ R und n, i ∈ N0 und xn = b ∗ ai−1 und i > 0}⇒ {x ∈ R und n, (i− 1) ∈ N0 und xn = b ∗ ai−1 und i− 1 ≥ 0}i := i− 1;

{x ∈ R und n, i ∈ N0 und xn = b ∗ ai und i ≥ 0}end

{x ∈ R und n, i ∈ N0 und xn = b ∗ ai und i ≥ 0}{x ∈ R und n, i ∈ N0 und xn = b ∗ ai und i ≥ 0 und i ≤ 0}⇒ {x ∈ R und n, i ∈ N0 und xn = b ∗ ai und i = 0} ⇒ {x ∈ R und n ∈ N0 und b = xn}

end{x ∈ R und n ∈ N0 und b = xn}

L:V-246 Erweiterungen und Anwendungen zur Logik © LETTMANN 1996-2020

Page 119: Kapitel L:V€¦ · Kapitel L:V V.Erweiterungen und Anwendungen zur Logik q Produktionsregelsysteme q Inferenz für Produktionsregelsysteme q Produktionsregelsysteme mit Negation

Hoare-Regeln und partielle KorrektheitBeispiel Effizientes Potenzieren

Idee des Algorithmus:

Quadrieren von Teilergebnissen spart mehr als die Hälfte der Multiplikationen.

Sei nknk−1 . . . n2n1n0 die Dualdarstellung von n, also

n =

k∑i=0

ni2i mit ni =

{1 falls n/2i ungerade0 sonst

Dann gilt

xn = x∑k

i=0 ni2i=

k∏i=0

(x2i)ni

L:V-247 Erweiterungen und Anwendungen zur Logik © LETTMANN 1996-2020

Page 120: Kapitel L:V€¦ · Kapitel L:V V.Erweiterungen und Anwendungen zur Logik q Produktionsregelsysteme q Inferenz für Produktionsregelsysteme q Produktionsregelsysteme mit Negation

Hoare-Regeln und partielle KorrektheitBeispiel Effizientes Potenzieren (Fortsetzung)

Spezifikation: Vorbedingung: {x ∈ R und n ∈ N0}Nachbedingung: {x ∈ R und n ∈ N0 und b = xn}

begin

a := x;

b := 1;

i := n;

while (i > 0) do

begin

if (i ungerade) thenb := b ∗ a;

a := a2;

i := i/2;

end

end

L:V-248 Erweiterungen und Anwendungen zur Logik © LETTMANN 1996-2020

Page 121: Kapitel L:V€¦ · Kapitel L:V V.Erweiterungen und Anwendungen zur Logik q Produktionsregelsysteme q Inferenz für Produktionsregelsysteme q Produktionsregelsysteme mit Negation

Hoare-Regeln und partielle KorrektheitBeispiel Effizientes Potenzieren (Fortsetzung)

Spezifikation: Vorbedingung: {x ∈ R und n ∈ N0}Nachbedingung: {x ∈ R und n ∈ N0 und b = xn}

{x ∈ R und n ∈ N0}begin

{x ∈ R und n ∈ N0}⇒ {x ∈ R und n ∈ N0 und x = x}a := x;

{x ∈ R und n ∈ N0 und a = x}⇒ {x ∈ R und n ∈ N0 und a = x und 1 = 1}b := 1;

{x ∈ R und n ∈ N0 und a = x und b = 1}⇒ {x ∈ R und n ∈ N0 und a = x und b = 1 und n = n}i := n;

{x ∈ R und n ∈ N0 und a = x und b = 1 und i = n}. . .

L:V-249 Erweiterungen und Anwendungen zur Logik © LETTMANN 1996-2020

Page 122: Kapitel L:V€¦ · Kapitel L:V V.Erweiterungen und Anwendungen zur Logik q Produktionsregelsysteme q Inferenz für Produktionsregelsysteme q Produktionsregelsysteme mit Negation

Hoare-Regeln und partielle KorrektheitBeispiel Effizientes Potenzieren (Fortsetzung)

Spezifikation: Vorbedingung: {x ∈ R und n ∈ N0}Nachbedingung: {x ∈ R und n ∈ N0 und b = xn}

{x ∈ R und n ∈ N0}begin

{x ∈ R und n ∈ N0}⇒ {x ∈ R und n ∈ N0 und x = x}a := x;

{x ∈ R und n ∈ N0 und a = x}⇒ {x ∈ R und n ∈ N0 und a = x und 1 = 1}b := 1;

{x ∈ R und n ∈ N0 und a = x und b = 1}⇒ {x ∈ R und n ∈ N0 und a = x und b = 1 und n = n}i := n;

{x ∈ R und n ∈ N0 und a = x und b = 1 und i = n}. . .

L:V-250 Erweiterungen und Anwendungen zur Logik © LETTMANN 1996-2020

Page 123: Kapitel L:V€¦ · Kapitel L:V V.Erweiterungen und Anwendungen zur Logik q Produktionsregelsysteme q Inferenz für Produktionsregelsysteme q Produktionsregelsysteme mit Negation

Hoare-Regeln und partielle KorrektheitBeispiel Effizientes Potenzieren (Fortsetzung)

Suche nach einer Invarianten

q Betrachte Werteverlauf in der Schleife für beteiligte Variablen.q nknk−1...n2n1n0 sei Dualzahldarstellung von n.

a := x; b := 1; i := n;

while (i > 0) do

begin

if (i ungerade) thenb := b ∗ a;

a := a2;

i := i/2;

end

Variablenwerte bei Testder Bedingung in while

x n a b i

0 x n x1 1 nknk−1...n2n1n0

1 x n x2 xn0 nknk−1...n2n1

2 x n x4 xn1n0 nknk−1...n2

3 x n x8 xn2n1n0 nknk−1...n3

4 x n x16 xn3n2n1n0 nknk−1...n4

Invariante: {x ∈ R und n, i ∈ N0 und xn = b ∗ ai und i ≥ 0}

L:V-251 Erweiterungen und Anwendungen zur Logik © LETTMANN 1996-2020

Page 124: Kapitel L:V€¦ · Kapitel L:V V.Erweiterungen und Anwendungen zur Logik q Produktionsregelsysteme q Inferenz für Produktionsregelsysteme q Produktionsregelsysteme mit Negation

Hoare-Regeln und partielle KorrektheitBeispiel Effizientes Potenzieren (Fortsetzung)

. . .{x ∈ R und n ∈ N0 und a = x und b = 1 und i = n} ⇒ {x ∈ R und n, i ∈ N0 und xn = b ∗ ai und i ≥ 0} Inv.

while (i > 0) do

begin

{x∈R und n, i∈N0 und xn = b ∗ ai und i ≥ 0 und i > 0}⇒{x∈R und n, i∈N0 und xn = b ∗ ai und i > 0}if (i ungerade) then

{x ∈ R und n, i ∈ N0 und xn = b ∗ ai und i > 0 und i ungerade}⇒ {x ∈ R und n, i ∈ N0 und xn = b ∗ a ∗ (a2)[i/2] und i > 0 und i ungerade}b := b ∗ a;{x ∈ R und n, i ∈ N0 und xn = b ∗ (a2)[i/2] und i > 0 und i ungerade}⇒ {x ∈ R und n, i ∈ N0 und xn = b ∗ (a2)[i/2] und i > 0}{x ∈ R und n, i ∈ N0 und xn = b ∗ ai und i > 0 und i gerade} // leere Alternative

⇒ {x ∈ R und n, i ∈ N0 und xn = b ∗ (a2)[i/2] und i > 0 und i gerade}⇒ {x ∈ R und n, i ∈ N0 und xn = b ∗ (a2)[i/2] und i > 0}

{x ∈ R und n, i ∈ N0 und xn = b ∗ (a2)[i/2] und i > 0}a := a2;

{x∈R und n, i∈N0 und xn = b ∗ a[i/2] und i > 0}⇒{x∈R und n, [i/2]∈N0 und xn = b ∗ a[i/2] und [i/2] ≥ 0}i := i/2;

{x ∈ R und n, i ∈ N0 und xn = b ∗ ai und i ≥ 0}end

{x ∈ R und n, i ∈ N0 und xn = b ∗ ai und i ≥ 0 und i ≤ 0}

. . .L:V-252 Erweiterungen und Anwendungen zur Logik © LETTMANN 1996-2020

Page 125: Kapitel L:V€¦ · Kapitel L:V V.Erweiterungen und Anwendungen zur Logik q Produktionsregelsysteme q Inferenz für Produktionsregelsysteme q Produktionsregelsysteme mit Negation

Hoare-Regeln und partielle KorrektheitBeispiel Effizientes Potenzieren (Fortsetzung)

. . .{x ∈ R und n ∈ N0 und a = x und b = 1 und i = n} ⇒ {x ∈ R und n, i ∈ N0 und xn = b ∗ ai und i ≥ 0} Inv.

while (i > 0) do

begin

{x∈R und n, i∈N0 und xn = b ∗ ai und i ≥ 0 und i > 0}⇒{x∈R und n, i∈N0 und xn = b ∗ ai und i > 0}if (i ungerade) then

{x ∈ R und n, i ∈ N0 und xn = b ∗ ai und i > 0 und i ungerade}⇒ {x ∈ R und n, i ∈ N0 und xn = b ∗ a ∗ (a2)[i/2] und i > 0 und i ungerade}b := b ∗ a;{x ∈ R und n, i ∈ N0 und xn = b ∗ (a2)[i/2] und i > 0 und i ungerade}⇒ {x ∈ R und n, i ∈ N0 und xn = b ∗ (a2)[i/2] und i > 0}{x ∈ R und n, i ∈ N0 und xn = b ∗ ai und i > 0 und i gerade} // leere Alternative

⇒ {x ∈ R und n, i ∈ N0 und xn = b ∗ (a2)[i/2] und i > 0 und i gerade}⇒ {x ∈ R und n, i ∈ N0 und xn = b ∗ (a2)[i/2] und i > 0}

{x ∈ R und n, i ∈ N0 und xn = b ∗ (a2)[i/2] und i > 0}a := a2;

{x∈R und n, i∈N0 und xn = b ∗ a[i/2] und i > 0}⇒{x∈R und n, [i/2]∈N0 und xn = b ∗ a[i/2] und [i/2] ≥ 0}i := i/2;

{x ∈ R und n, i ∈ N0 und xn = b ∗ ai und i ≥ 0}end

{x ∈ R und n, i ∈ N0 und xn = b ∗ ai und i ≥ 0 und i ≤ 0}

. . .L:V-253 Erweiterungen und Anwendungen zur Logik © LETTMANN 1996-2020

Page 126: Kapitel L:V€¦ · Kapitel L:V V.Erweiterungen und Anwendungen zur Logik q Produktionsregelsysteme q Inferenz für Produktionsregelsysteme q Produktionsregelsysteme mit Negation

Hoare-Regeln und partielle KorrektheitBeispiel Effizientes Potenzieren (Fortsetzung)

. . .{x ∈ R und n ∈ N0 und a = x und b = 1 und i = n} ⇒ {x ∈ R und n, i ∈ N0 und xn = b ∗ ai und i ≥ 0} Inv.

while (i > 0) do

begin

{x∈R und n, i∈N0 und xn = b ∗ ai und i ≥ 0 und i > 0}⇒{x∈R und n, i∈N0 und xn = b ∗ ai und i > 0}if (i ungerade) then

{x ∈ R und n, i ∈ N0 und xn = b ∗ ai und i > 0 und i ungerade}⇒ {x ∈ R und n, i ∈ N0 und xn = b ∗ a ∗ (a2)[i/2] und i > 0 und i ungerade}b := b ∗ a;{x ∈ R und n, i ∈ N0 und xn = b ∗ (a2)[i/2] und i > 0 und i ungerade}⇒ {x ∈ R und n, i ∈ N0 und xn = b ∗ (a2)[i/2] und i > 0}{x ∈ R und n, i ∈ N0 und xn = b ∗ ai und i > 0 und i gerade} // leere Alternative

⇒ {x ∈ R und n, i ∈ N0 und xn = b ∗ (a2)[i/2] und i > 0 und i gerade}⇒ {x ∈ R und n, i ∈ N0 und xn = b ∗ (a2)[i/2] und i > 0}

{x ∈ R und n, i ∈ N0 und xn = b ∗ (a2)[i/2] und i > 0}a := a2;

{x∈R und n, i∈N0 und xn = b ∗ a[i/2] und i > 0}⇒{x∈R und n, [i/2]∈N0 und xn = b ∗ a[i/2] und [i/2] ≥ 0}i := i/2;

{x ∈ R und n, i ∈ N0 und xn = b ∗ ai und i ≥ 0}end

{x ∈ R und n, i ∈ N0 und xn = b ∗ ai und i ≥ 0 und i ≤ 0}

. . .L:V-254 Erweiterungen und Anwendungen zur Logik © LETTMANN 1996-2020

Page 127: Kapitel L:V€¦ · Kapitel L:V V.Erweiterungen und Anwendungen zur Logik q Produktionsregelsysteme q Inferenz für Produktionsregelsysteme q Produktionsregelsysteme mit Negation

Hoare-Regeln und partielle KorrektheitBeispiel Effizientes Potenzieren (Fortsetzung)

. . .{x ∈ R und n ∈ N0 und a = x und b = 1 und i = n} ⇒ {x ∈ R und n, i ∈ N0 und xn = b ∗ ai und i ≥ 0} Inv.

while (i > 0) do

begin

{x∈R und n, i∈N0 und xn = b ∗ ai und i ≥ 0 und i > 0}⇒{x∈R und n, i∈N0 und xn = b ∗ ai und i > 0}if (i ungerade) then

{x ∈ R und n, i ∈ N0 und xn = b ∗ ai und i > 0 und i ungerade}⇒ {x ∈ R und n, i ∈ N0 und xn = b ∗ a ∗ (a2)[i/2] und i > 0 und i ungerade}b := b ∗ a;{x ∈ R und n, i ∈ N0 und xn = b ∗ (a2)[i/2] und i > 0 und i ungerade}⇒ {x ∈ R und n, i ∈ N0 und xn = b ∗ (a2)[i/2] und i > 0}{x ∈ R und n, i ∈ N0 und xn = b ∗ ai und i > 0 und i gerade} // leere Alternative

⇒ {x ∈ R und n, i ∈ N0 und xn = b ∗ (a2)[i/2] und i > 0 und i gerade}⇒ {x ∈ R und n, i ∈ N0 und xn = b ∗ (a2)[i/2] und i > 0}

{x ∈ R und n, i ∈ N0 und xn = b ∗ (a2)[i/2] und i > 0}a := a2;

{x∈R und n, i∈N0 und xn = b ∗ a[i/2] und i > 0}⇒{x∈R und n, [i/2]∈N0 und xn = b ∗ a[i/2] und [i/2] ≥ 0}i := i/2;

{x ∈ R und n, i ∈ N0 und xn = b ∗ ai und i ≥ 0}end

{x ∈ R und n, i ∈ N0 und xn = b ∗ ai und i ≥ 0 und i ≤ 0}

. . .L:V-255 Erweiterungen und Anwendungen zur Logik © LETTMANN 1996-2020

Page 128: Kapitel L:V€¦ · Kapitel L:V V.Erweiterungen und Anwendungen zur Logik q Produktionsregelsysteme q Inferenz für Produktionsregelsysteme q Produktionsregelsysteme mit Negation

Hoare-Regeln und partielle KorrektheitBeispiel Effizientes Potenzieren (Fortsetzung)

. . .{x ∈ R und n ∈ N0 und a = x und b = 1 und i = n} ⇒ {x ∈ R und n, i ∈ N0 und xn = b ∗ ai und i ≥ 0} Inv.

while (i > 0) do

begin

{x∈R und n, i∈N0 und xn = b ∗ ai und i ≥ 0 und i > 0}⇒{x∈R und n, i∈N0 und xn = b ∗ ai und i > 0}if (i ungerade) then

{x ∈ R und n, i ∈ N0 und xn = b ∗ ai und i > 0 und i ungerade}⇒ {x ∈ R und n, i ∈ N0 und xn = b ∗ a ∗ (a2)[i/2] und i > 0 und i ungerade}b := b ∗ a;{x ∈ R und n, i ∈ N0 und xn = b ∗ (a2)[i/2] und i > 0 und i ungerade}⇒ {x ∈ R und n, i ∈ N0 und xn = b ∗ (a2)[i/2] und i > 0}{x ∈ R und n, i ∈ N0 und xn = b ∗ ai und i > 0 und i gerade} // leere Alternative

⇒ {x ∈ R und n, i ∈ N0 und xn = b ∗ (a2)[i/2] und i > 0 und i gerade}⇒ {x ∈ R und n, i ∈ N0 und xn = b ∗ (a2)[i/2] und i > 0}

{x ∈ R und n, i ∈ N0 und xn = b ∗ (a2)[i/2] und i > 0}a := a2;

{x∈R und n, i∈N0 und xn = b ∗ a[i/2] und i > 0}⇒{x∈R und n, [i/2]∈N0 und xn = b ∗ a[i/2] und [i/2] ≥ 0}i := i/2;

{x ∈ R und n, i ∈ N0 und xn = b ∗ ai und i ≥ 0}end

{x ∈ R und n, i ∈ N0 und xn = b ∗ ai und i ≥ 0 und i ≤ 0}

. . .L:V-256 Erweiterungen und Anwendungen zur Logik © LETTMANN 1996-2020

Page 129: Kapitel L:V€¦ · Kapitel L:V V.Erweiterungen und Anwendungen zur Logik q Produktionsregelsysteme q Inferenz für Produktionsregelsysteme q Produktionsregelsysteme mit Negation

Hoare-Regeln und partielle KorrektheitBeispiel Effizientes Potenzieren (Fortsetzung)

. . .{x ∈ R und n ∈ N0 und xn = b ∗ ai und i ≥ 0 und i ≤ 0}⇒ {x ∈ R und n ∈ N0 und xn = b ∗ ai und i = 0}⇒ {x ∈ R und n ∈ N0 und xn = b}

end{x ∈ R und n ∈ N0 und b = xn}

L:V-257 Erweiterungen und Anwendungen zur Logik © LETTMANN 1996-2020

Page 130: Kapitel L:V€¦ · Kapitel L:V V.Erweiterungen und Anwendungen zur Logik q Produktionsregelsysteme q Inferenz für Produktionsregelsysteme q Produktionsregelsysteme mit Negation

Hoare-Regeln und partielle KorrektheitBeispiel Effizientes Potenzieren (Fortsetzung)

. . .{x ∈ R und n ∈ N0 und xn = b ∗ ai und i ≥ 0 und i ≤ 0}⇒ {x ∈ R und n ∈ N0 und xn = b ∗ ai und i = 0}⇒ {x ∈ R und n ∈ N0 und xn = b}

end{x ∈ R und n ∈ N0 und b = xn}

L:V-258 Erweiterungen und Anwendungen zur Logik © LETTMANN 1996-2020

Page 131: Kapitel L:V€¦ · Kapitel L:V V.Erweiterungen und Anwendungen zur Logik q Produktionsregelsysteme q Inferenz für Produktionsregelsysteme q Produktionsregelsysteme mit Negation

Bemerkungen:

q Schleifeninvarianten sind Zusicherungen, d.h. sie beschreiben Zusammenhänge vonProgrammgrößen.

q Eine Invariante muss vor der Schleife gültig sein.

q Eine Invariante muss nach Durchlauf durch den Schleifenrumpf gültig sein, wenn sie vor demSchleifenrumpf gültig war (zusammen mit der Schleifenbedingung).

q Invarianten sind zum Zeitpunkt der Implementierung leichter zu bestimmen.

L:V-259 Erweiterungen und Anwendungen zur Logik © LETTMANN 1996-2020

Page 132: Kapitel L:V€¦ · Kapitel L:V V.Erweiterungen und Anwendungen zur Logik q Produktionsregelsysteme q Inferenz für Produktionsregelsysteme q Produktionsregelsysteme mit Negation

Hoare-Regeln und partielle KorrektheitMöglichkeiten zum Einsparen von Schreibarbeit

q Festlegungen des Grundbereiches wie x ∈ R oder n ∈ N werden in derSpezifikation für die Eingabevariablen benötigt. Da nach Vereinbarung dieEingabevariablen im Programm nicht verändert werden, können dieseFestlegungen in alle Zusicherungen aufgenommen werden, ohne derenGültigkeit zu verändern. Da sie aber nur sehr selten wirklich benötigt werden,kann man auf sie in kleinen Beispielen aus Gründen der Übersichtlichkeitverzichten.

Ü Festlegungen der Grundbereiche für Eingabevariablen könnte man in denZusicherungen als bekannt voraussetzen.

q Alle einzelnen Bedingungen in den Zusicherungen sind konjunktiv verknüpft.Nur selten muss man Disjunktionen oder Negationen verwenden.

Ü Als Kurzform für die konjunktive Verknüpfung von Bedingungen könnteman ein Komma verwenden.

Beispiel: {xn = b ∗ (a2)[i/2], i > 0}

L:V-260 Erweiterungen und Anwendungen zur Logik © LETTMANN 1996-2020