LTL und Spin Stefan Radomski [email protected] Gliederung • Wiederholung Grundlagen • Vorstellung LTL – Syntax – Semantik – Beispiele • Model Checking mit Spin – Fallbeispiele – Einführung in Promela – Vorführung • Zusammenfassung Stefan Radomski: LTL und Spin 2 Wiederholung Grundlagen • Modellierung des Systems als Kripke Struktur – Transitionsgraph – Labelfunktion • Ordnet den Zuständen atomare Formeln zu • Modellierung einer Spezifikation in einer temporalen Logik – Bislang kennengelernt: CTL (Computation Tree Logic) • Aussagen über Teilbäume in der Kripkestruktur – Es gibt einen Pfad für den gilt – Für alle Pfade gilt – Heute: LTL (Linear-time Temporal Logic) • Erlaubt kompliziertere Aussagen • Allerdings nur über alle Pfade der Struktur Stefan Radomski: LTL und Spin 3 Unterschiede CTL / LTL • CTL – – – – beschreibt Eigenschaften ganzer Berechnungsbäume Effizientes Verfahren für Model Checking vier temporale Operatoren {X, F, G, U} Zwei Pfadquantoren {E, A} • LTL – macht Aussagen über einzelne unendliche Berechnungspfade – Eine Kripkestruktur erfüllt eine LTL Formel, wenn alle Pfade im Transitionsgraphen die LTL Formel erfüllen • Pfadquantoren E und A aus CTL Syntax überflüssig – Neuer temporaler Operator R Stefan Radomski: LTL und Spin 4 LTL Syntax • Induktive Definition über p1, .. ,pn – p1, .. , pn sind Eigenschaften eines Zustandes • Atomare Formeln – pi ist eine LTL Formel • Boolsche Junktoren – ϕ, ψ LTL Formeln, so auch ¬ϕ, ϕ∨ψ, ϕ∧ψ, ϕ⇒ψ • Temporale Verknüpfungen – ϕ, ψ LTL Formeln, so auch Xϕ, Fϕ , Gϕ , ψUϕ , ψRϕ – Beliebig verschachtelt Stefan Radomski: LTL und Spin 5 LTL Semantik • Für eine valide LTL Formel ϕ bedeuten wie folgt – Gϕ (ϕ gilt immer) • Entspricht dem Allquantor – Fϕ (zukünftig gilt irgendwann ϕ) • Zukunft beginnt jetzt • Entspricht dem Existenzquantor – Xϕ (im nächsten Zustand gilt ϕ) – ϕUψ (ϕ gilt mindestens bis irgendwann ψ gilt) • Mag auch der aktuelle Zustand sein • Es gibt einen solchen Zustand • ϕ kann auch weiterhin gelten – ϕRψ (ϕ wird von ψ abgelöst) • Für alle zukünftigen Zustände gilt ψ • Oder in einen zukünftigen Zustand, wird ϕ von ψ abgelöst Stefan Radomski: LTL und Spin 6 LTL Beispiele • Gp1 – Überall auf dem Pfad trifft p1 zu • p1 ∧ X¬p1 ∧ XX¬p1 ∧ G(p1 ⇒ XXXp1) – Anfangs gilt p1 und dann genau zu jedem dritten Zeitpunkt • Fp1 ∧ ¬Fp2 – Irgendwann gilt p1, aber p2 trifft nie zu • GFp1 – Immer wieder wird p1 gelten • G(p1 ⇒ XFp2) – Request/Response Bedingung – Immer wenn p1 zutrifft gilt später irgendwann p2 • G(p1 ⇒ X(p2 U p1)) – Immer wenn p1 gilt, gilt im nächsten Zeitpunkt p2 bis wieder p1 gilt Stefan Radomski: LTL und Spin 7 Model Checking mit LTL • Kripkestruktur beschreibt System – Kann als ω-Automat aufgefasst werden – Erzeugt alle mögliche Pfade durch die Kripkestruktur • Ein Zustand wird durch Bitvektor der atomaren Formeln kodiert • Ein Pfad als Reihe von Bitvektoren der Zustände • LTL-Formel kann in ω-Automaten überführt werden – Erweiterung der Turing Maschine für nichtendende Systeme – ω-Automaten der negierten Formel bilden • Durchschnitt der beiden Automaten bilden – Liefert valide Zustandsfolgen aus der Kripkestruktur – Zustandsfolgen verletzen LTL-Formel – Auf Leerheit prüfen oder Folge ausgeben, die akzeptiert wird • Dies ist die Arbeitsweise von SPIN Stefan Radomski: LTL und Spin 8 Der SPIN Model Checker • • Seit 1980 bei Bell Labs entwickwelt Freie Software seit 1991 – Ausgeprägte User Community • • • Systembeschreibung in einer Hochsprache (Promela) Implementiert LTL vollständig Kann mit grossen Zustandsräumen arbeiten – Nutzt partial order reduction Techniken – On-the-Fly Interpretation • Es wird keine explizite Kripkestruktur erstelt • Kann direkt C-Quellcode einbetten – Nutzen als “Driver” über der tatsächlichen Implementierung! • Drei Modi der Nutzung – Interaktiver Simulator – Exhaustive Verifier – Proof Approximation System Stefan Radomski: LTL und Spin 9 SPIN Fallbeispiel • Einsatz beim Maselantkering (Sturmflutwehr bei Rotterdam) – Falsifikation einer Schnittstellenspezifikation – Einsatz als Proof Approximation System • Vorgestellter Prozess für eine Integration – Grundlegender Entwurf • Zergliederung in Teilsysteme – “Function Failure Analysis” • Identifizieren kritischer Funktionen – Detailierter Entwurf der Teilsysteme • • • • Spezifikationen in Promela und Z Validierung der kritischen Teilsysteme durch Spin Selektives Prototyping Designreviews – Implementation in C++ und Testen durch unabhängige Team Stefan Radomski: LTL und Spin 10 Erfahrungen aus Fallbeispiel • • • Der überwiegende Teil der Fehler wurde beim Spezifizieren selber festgestellt Einige Fehler noch bei der Simlaution Nur noch wenige Fehler bei der Validierung selber – Grösstenteils durch eine Kombination von Ereignissen • Einsatz als Proof Approximation Werkzeug erlaubt inkrementelle Arbeitsweise – Prozess ähnlich dem Spiralmodell – Inkrementelle Entwicklung und gerichtete Verfeinerung des Modells • Problem: – Behobene Fehler mussten im Modell nachgepflegt oder umgangen werden • Nachbessern aufwendig • Schnell unübersichtlich • Problemstellung kann unterschiedlich modelliert werden – Register als 8Bit oder 1Byte – Modellierung bedingt erheblich die Laufzeiteigenschaften Stefan Radomski: LTL und Spin 11 Einführung PROMELA • Promela (Process Meta Language) – Modellierung eines Problems als Menge von Prozessen • • • • Process namens init startet weitere Prozesse Asynchron Verteilt Globale Sichtbarkeit – Nachrichtenkanäle zwischen den Prozessen • Asynchron (rendez-vous) / Synchron (buffered) • Globale / Lokale Sichtbarkeit – Variablen • Globale / Lokale Sichtbarkeit – SPIN erzeugt aus PROMELA Programm Kripkestruktur • nicht explizit Stefan Radomski: LTL und Spin 12 Zusammenfassung • LTL – erlaubt Aussagen über alle Pfade in einer Kripkestruktur – Pfadquantoren überflüssig – Weiterer temporaler Operator Release • SPIN erlaubt Model Checking mit LTL – Modellierung des Problems mit Promela • Ergibt die Kripkestruktur – Drei Möglichkeiten für Korrektheitsforderungen • Assertions • Special Labels • Never Claims – Bilden LTL Formeln ab (spin -f) Stefan Radomski: LTL und Spin 13