Softwaretechnik 3 SS 2010 Einführung in TLA+
Softwaretechnik 3 SS 2010 Einführung in TLA+
Softwaretechnik 3 SS 2010 Einführung in TLA+
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
<strong>Softwaretechnik</strong> 3 <strong>SS</strong> <strong>2010</strong><br />
E<strong>in</strong>führung <strong>in</strong> TLA +<br />
Stefan Hallerstede<br />
halstefa@cs.uni-duesseldorf.de<br />
Universität Düsseldorf<br />
2. Juni <strong>2010</strong>
Inhalt<br />
Allgeme<strong>in</strong>es<br />
Beispiel e<strong>in</strong>er Spezifikation<br />
Beispiel<br />
Semantik anhand des Beispiels<br />
Kompositionalität<br />
Stottern<br />
Das Beispiel vollständig erklärt<br />
Notation für temporale Formeln<br />
Über Fairness<br />
Mehr Notation und e<strong>in</strong> größeres Beispiel
Inhalt<br />
Allgeme<strong>in</strong>es<br />
Beispiel e<strong>in</strong>er Spezifikation<br />
Beispiel<br />
Semantik anhand des Beispiels<br />
Kompositionalität<br />
Stottern<br />
Das Beispiel vollständig erklärt<br />
Notation für temporale Formeln<br />
Über Fairness<br />
Mehr Notation und e<strong>in</strong> größeres Beispiel
Was ist TLA + <br />
◮ Notation zur Spezifikation von Systemen<br />
◮ Basierend auf temporaler Logik (LTL-{X})<br />
◮<br />
TLA – Temporal Logic of Actions<br />
◮ Mengenlehre<br />
◮ Prädikatenlogik erster Stufe<br />
◮ Modularisierung von Spezifikationen<br />
◮ Komposition von Spezifikationen
Inhalt<br />
Allgeme<strong>in</strong>es<br />
Beispiel e<strong>in</strong>er Spezifikation<br />
Beispiel<br />
Semantik anhand des Beispiels<br />
Kompositionalität<br />
Stottern<br />
Das Beispiel vollständig erklärt<br />
Notation für temporale Formeln<br />
Über Fairness<br />
Mehr Notation und e<strong>in</strong> größeres Beispiel
Inhalt<br />
Allgeme<strong>in</strong>es<br />
Beispiel e<strong>in</strong>er Spezifikation<br />
Beispiel<br />
Semantik anhand des Beispiels<br />
Kompositionalität<br />
Stottern<br />
Das Beispiel vollständig erklärt<br />
Notation für temporale Formeln<br />
Über Fairness<br />
Mehr Notation und e<strong>in</strong> größeres Beispiel
Beispiel e<strong>in</strong>er TLA + -Spezifikation<br />
module HourClock<br />
extends Naturals<br />
variable hr<br />
∆<br />
HC<strong>in</strong>i = hr ∈ (1 . . 12)<br />
∆<br />
HCnxt = hr ′ = if hr ≠ 12 then hr + 1<br />
else 1<br />
HC ∆ = HC<strong>in</strong>i ∧ □[HCnxt] hr<br />
theorem HC ⇒ □HC<strong>in</strong>i
ASCII-Version der TLA + -Spezifikation<br />
---------------------- MODULE HourClock ----------------------<br />
EXTENDS Naturals<br />
VARIABLE hr<br />
HC<strong>in</strong>i == hr \<strong>in</strong> (1 .. 12)<br />
HCnxt == hr’ = IF hr # 12 THEN hr + 1<br />
ELSE 1<br />
HC == HC<strong>in</strong>i /\ [] [HCnxt]_hr<br />
--------------------------------------------------------------<br />
THEOREM HC => []HC<strong>in</strong>i<br />
==============================================================
Bemerkung<br />
◮ TLA + ist untypisiert!<br />
◮ x = true ∨ x = 1 ist e<strong>in</strong>e korrekte TLA + -Formel<br />
◮ Typen werden als Mengene<strong>in</strong>schränkungen explizit spezifiziert<br />
◮<br />
x ∈ boolean zum Beispiel<br />
◮ Theorem Spec ⇒ □x ∈ boolean notwendig
Inhalt<br />
Allgeme<strong>in</strong>es<br />
Beispiel e<strong>in</strong>er Spezifikation<br />
Beispiel<br />
Semantik anhand des Beispiels<br />
Kompositionalität<br />
Stottern<br />
Das Beispiel vollständig erklärt<br />
Notation für temporale Formeln<br />
Über Fairness<br />
Mehr Notation und e<strong>in</strong> größeres Beispiel
Term<strong>in</strong>ologie<br />
◮ Zustand (engl. state)<br />
◮ e<strong>in</strong>e Variablenbelegung (mit Werten des Universums)<br />
◮ Schritt (engl. step)<br />
◮<br />
e<strong>in</strong> Zustandspaar<br />
◮ Verhalten (engl. behavior)<br />
◮ e<strong>in</strong>e Folge von Zuständen<br />
◮ Spezifikation (engl. specification)<br />
◮ e<strong>in</strong>e temporale Formel (oft Spec genannt)<br />
◮ Zustandsprädikat (engl. state predicate)<br />
◮ e<strong>in</strong>e Formel über Zuständen<br />
◮ Aktion (engl. action)<br />
◮ e<strong>in</strong>e Formel über Schritten
Verhalten<br />
◮ Beispiel: HourClock<br />
◮ Sei hr e<strong>in</strong>e Variable (die Uhrzeit)<br />
◮ typisches Verhalten, Sequenz von Zuständen:<br />
[hr = 11] → [hr = 12] → [hr = 1] → [hr = 2] → · · ·<br />
◮ wobei [hr = 11] e<strong>in</strong> Zustand ist, <strong>in</strong> dem hr den Wert 11 hat<br />
◮ und e<strong>in</strong> Paar aufe<strong>in</strong>anderfolgender Zustände<br />
[hr = 1] → [hr = 2]<br />
e<strong>in</strong> Schritt
Inhalt<br />
Allgeme<strong>in</strong>es<br />
Beispiel e<strong>in</strong>er Spezifikation<br />
Beispiel<br />
Semantik anhand des Beispiels<br />
Kompositionalität<br />
Stottern<br />
Das Beispiel vollständig erklärt<br />
Notation für temporale Formeln<br />
Über Fairness<br />
Mehr Notation und e<strong>in</strong> größeres Beispiel
Spezifikation der Uhr<br />
◮ Beschreibung aller möglichen Verhalten mittels<br />
◮<br />
Anfangsprädikat (engl. <strong>in</strong>itial predicate)<br />
HC<strong>in</strong>i<br />
∆<br />
= hr ∈ (1 . . 12)<br />
◮<br />
Folgezustandsrelation (engl. next-state relation)<br />
HCnxt<br />
∆<br />
= hr ′ = if hr ≠ 12 then hr + 1<br />
else 1<br />
◮ hr ist der alte Zustand, hr ′ der neue Zustand<br />
◮ HCnxt wird Aktion genannt<br />
◮ E<strong>in</strong> Schritt, der HCnxt erfüllt, heißt HCnxt-Schritt
Spezifikation der Verhalten der Uhr (1. Versuch)<br />
◮ Die Anfangszustände der Uhr erfüllen HC<strong>in</strong>i<br />
◮ Alle Schritte erfüllen HCnxt<br />
HC ∆ = HC<strong>in</strong>i ∧ □HCnxt<br />
◮ Diese Spezifikation ermöglicht folgenden Schritt nicht:<br />
[hr = 12] → [hr = 12]
Uhr mit Temperaturanzeige<br />
◮ Verhalten e<strong>in</strong>er Temperaturanzeige mit e<strong>in</strong>gebauter Uhr:<br />
[ ]<br />
hr = 11<br />
tmp = 23.5<br />
→<br />
[ ]<br />
hr = 12<br />
tmp = 23.5<br />
→<br />
[ ]<br />
hr = 12<br />
tmp = 22.7<br />
→<br />
[ ]<br />
hr = 1<br />
tmp = 23.4<br />
→ · · ·<br />
◮ Die Uhrspezifikation läßt sich dazu nicht verwenden<br />
◮ Wir würden gerne e<strong>in</strong>e Temperaturanzeigespezifikation<br />
TD ∆ = TD<strong>in</strong>i ∧ □TDnxt<br />
mit der Uhrspezifikation komponieren können<br />
TD ∧ HC<br />
so dass obiges Verhalten möglich ist
Inhalt<br />
Allgeme<strong>in</strong>es<br />
Beispiel e<strong>in</strong>er Spezifikation<br />
Beispiel<br />
Semantik anhand des Beispiels<br />
Kompositionalität<br />
Stottern<br />
Das Beispiel vollständig erklärt<br />
Notation für temporale Formeln<br />
Über Fairness<br />
Mehr Notation und e<strong>in</strong> größeres Beispiel
Lösung des Problems: Stotterschritte<br />
◮ Jeder Schritt e<strong>in</strong>es Uhr-Verhaltens muss<br />
◮<br />
◮<br />
e<strong>in</strong> Stotterschritt hr ′ = hr oder<br />
e<strong>in</strong> HCnxt-Schritt se<strong>in</strong><br />
also HCnxt ∨ hr ′ = hr<br />
◮ Die TLA + -Syntax dafür ist [HCnxt] hr<br />
◮ Spezifikation der Vehalten der Uhr (2. Versuch) 1<br />
HC ∆ = HC<strong>in</strong>i ∧ □[HCnxt] hr<br />
1 Gleichermaßen für die Spezifikation TD
Typ<strong>in</strong>variante<br />
◮ Der Wert der Variablen hr soll<br />
<strong>in</strong> jedem Zustand jedes Verhaltens der Uhr<br />
im Breich 1 . . 12 liegen<br />
◮ Formal:<br />
HC ⇒ □HC<strong>in</strong>i<br />
◮ In dieser e<strong>in</strong>fachen Spezifikation können wir<br />
das Anfangsprädikat auch als Typ<strong>in</strong>variante benutzen
Inhalt<br />
Allgeme<strong>in</strong>es<br />
Beispiel e<strong>in</strong>er Spezifikation<br />
Beispiel<br />
Semantik anhand des Beispiels<br />
Kompositionalität<br />
Stottern<br />
Das Beispiel vollständig erklärt<br />
Notation für temporale Formeln<br />
Über Fairness<br />
Mehr Notation und e<strong>in</strong> größeres Beispiel
Die TLA + -Spezifikation e<strong>in</strong>er Uhr<br />
module HourClock<br />
extends Naturals<br />
variable hr<br />
∆<br />
HC<strong>in</strong>i = hr ∈ (1 . . 12)<br />
∆<br />
HCnxt = hr ′ = if hr ≠ 12 then hr + 1<br />
else 1<br />
HC ∆ = HC<strong>in</strong>i ∧ □[HCnxt] hr<br />
theorem HC ⇒ □HC<strong>in</strong>i
Inhalt<br />
Allgeme<strong>in</strong>es<br />
Beispiel e<strong>in</strong>er Spezifikation<br />
Beispiel<br />
Semantik anhand des Beispiels<br />
Kompositionalität<br />
Stottern<br />
Das Beispiel vollständig erklärt<br />
Notation für temporale Formeln<br />
Über Fairness<br />
Mehr Notation und e<strong>in</strong> größeres Beispiel
Operatoren von TLA +<br />
Operatoren für Aktionen<br />
[A] e steht für A ∨ e ′ = e<br />
〈A〉 e steht für A ∧ e ′ ≠ e<br />
Enabled A steht für E<strong>in</strong> A-Schritt ist möglich (formal)<br />
unchanged e steht für e ′ = e<br />
A · B steht für Komposition von Aktionen (“A, dann B”)<br />
Temporale Operatoren<br />
□F steht für F ist immer wahr<br />
♦F steht für F is irgendwann wahr<br />
F G steht für F führt zu G<br />
WF e (A) steht für Schwache Fairness für Aktion A<br />
SF e (A) steht für Starke Fairness für Aktion A
Inhalt<br />
Allgeme<strong>in</strong>es<br />
Beispiel e<strong>in</strong>er Spezifikation<br />
Beispiel<br />
Semantik anhand des Beispiels<br />
Kompositionalität<br />
Stottern<br />
Das Beispiel vollständig erklärt<br />
Notation für temporale Formeln<br />
Über Fairness<br />
Mehr Notation und e<strong>in</strong> größeres Beispiel
Kategorien von Systemeigenschaften<br />
Grobe Aufteilung <strong>in</strong> zwei Kategorien:<br />
◮ Sicherheit<br />
e<strong>in</strong> unerwünschter Zustand wird nicht erreicht<br />
◮ Lebendigkeit<br />
e<strong>in</strong> erwünschter Zustand wird erreicht
Fairness<br />
◮ WF e (A) bedeutet □(□Enabled 〈A〉 e ⇒ ♦〈A〉 e )<br />
E<strong>in</strong> A-Schritt muss irgendwann e<strong>in</strong>treten,<br />
falls A permanent aktiviert ist.<br />
◮ SF e (A) bedeutet □♦Enabled 〈A〉 e ⇒ □♦〈A〉 e<br />
E<strong>in</strong> A-Schritt muss irgendwann e<strong>in</strong>treten,<br />
falls A immer wieder aktiviert ist.<br />
◮ SF e (A) impliziert WF e (A)
SF e (A) impliziert WF e (A).<br />
Beweis.<br />
SF e (A)<br />
⇔ { Def<strong>in</strong>ition von SF e (A) }<br />
□♦Enabled 〈A〉 e ⇒ □♦〈A〉 e<br />
⇔ { Prädikatenlogik, Distribution von ¬ über □ und ♦ }<br />
♦□¬(Enabled 〈A〉 e ) ∨ □♦〈A〉 e<br />
⇒ { Tautologie ♦□G ⇒ □♦G }<br />
□♦¬(Enabled 〈A〉 e ) ∨ □♦〈A〉 e<br />
⇒ { Tautologie (□F ) ∨ (□G) ⇒ □(F ∨ G) }<br />
□(♦¬(Enabled 〈A〉 e ) ∨ ♦〈A〉 e )<br />
⇔ { Prädikatenlogik, Distribution von ¬ über □ und ♦ }<br />
□(□Enabled 〈A〉 e ⇒ ♦〈A〉 e )<br />
⇔ { Def<strong>in</strong>ition von WF e (A) }<br />
WF e (A)
Inhalt<br />
Allgeme<strong>in</strong>es<br />
Beispiel e<strong>in</strong>er Spezifikation<br />
Beispiel<br />
Semantik anhand des Beispiels<br />
Kompositionalität<br />
Stottern<br />
Das Beispiel vollständig erklärt<br />
Notation für temporale Formeln<br />
Über Fairness<br />
Mehr Notation und e<strong>in</strong> größeres Beispiel
Mehr Notation und e<strong>in</strong> größeres Beispiel<br />
Zusammenfassung “A Summary of TLA + ” von L. Lamport<br />
Onl<strong>in</strong>e (PDF):<br />
http://research.microsoft.com/en-us/um/people/lamport/tla/summary.pdf<br />
Buch “Specify<strong>in</strong>g Systems” von L. Lamport<br />
Seiten 30 und 38<br />
Onl<strong>in</strong>e (PDF):<br />
http://research.microsoft.com/en-us/um/people/lamport/tla/book.html