TLA+ (Temporal Logic of Actions) ist eine formale Spezifikationssprache von Leslie Lamport für nebenläufige und verteilte Systeme. Ein System wird als Menge von Zuständen und Aktionen beschrieben; die temporale Logik erfasst, welche Verhaltensabläufe möglich sind. Lamport entwickelte TLA+ in den frühen 1990er-Jahren und dokumentierte es im Buch „Specifying Systems" (Addison-Wesley, 2002).

Grundmuster einer Spezifikation

---- MODULE Counter ----
EXTENDS Naturals
VARIABLE x
Init == x = 0
Next == x' = x + 1
Spec == Init / [][Next]_x
====

Ein Apostroph (x') bezeichnet den Wert der Variablen im nächsten Zustand. [][Next]_x erlaubt Stuttering-Schritte, bei denen sich nichts ändert — wichtig für die Komposition von Systemen.

Operatoren

  • Logik: / (und), / (oder), ~ (nicht), (impliziert), A (für alle), E (es existiert).
  • Temporal: []P (immer P — Sicherheit), <>P (schließlich P — Lebendigkeit), P ~> Q (P führt zu Q), WF_/SF_ (schwache/starke Fairness).
  • System: ENABLED A, UNCHANGED x, [A]_v (Aktion mit Stuttering).

Sicherheit, Lebendigkeit, Verfeinerung

Eine Invariante []Inv drückt eine Sicherheitseigenschaft aus; Lebendigkeitseigenschaften sagen, dass etwas irgendwann eintritt. Mit Verfeinerungs-Abbildungen (Refinement Mappings) zeigt man, dass eine Implementierung eine abstrakte Spezifikation korrekt umsetzt.

Werkzeuge

  • TLC, der Model Checker, durchsucht endliche Modelle systematisch nach verletzten Invarianten und Deadlocks.
  • TLAPS, das TLA+ Proof System, beweist Eigenschaften maschinengeprüft wie ein Proof Assistant — verwandt mit Isabelle.
  • PlusCal (2009) ist eine algorithmenähnliche Sprache, die zu TLA+ kompiliert.
  • Die Toolbox ist die integrierte Entwicklungsumgebung mit Editor, TLC und TLAPS.

TLA+ wird unter anderem bei Amazon Web Services zur Verifikation kritischer Systemkomponenten eingesetzt. Während TLA+ zeitliches Verhalten modelliert, beschreiben Promela mit dem Model Checker SPIN ausführbare Prozessmodelle und Alloy statische Strukturen relational; Zustand und Operationen mengentheoretisch beschreibt die Z-Notation.