Die Z-Notation (gesprochen „Zed") ist eine formale Spezifikationssprache, die Jean-Raymond Abrial ab den 1970er-Jahren an der Universität Oxford entwickelte. Sie basiert auf der Zermelo-Fraenkel-Mengenlehre und der Prädikatenlogik — daher der Name — und ist seit 2002 als ISO-Standard 13568 genormt. Mit Z beschreibt man den Zustand eines Systems und seine Operationen präzise, ohne sofort implementieren zu müssen.

Schema-Boxen

Konto
────────────────────────
kontostand : Z
────────────────────────
kontostand >= 0

Eine Schema-Box hat einen Namen, einen Deklarationsteil (Variablen mit Typen) und einen Prädikatenteil (Invarianten). Operationen beschreibt man als Schemata mit Δ (Zustand ändert sich) oder Ξ (Zustand bleibt unverändert):

Einzahlen
────────────────────────
ΔKonto
betrag : Z
────────────────────────
betrag > 0
kontostand' = kontostand + betrag

Der Apostroph (') bezeichnet den Variablenwert nach der Operation — dasselbe Muster wie in TLA+.

Mathematische Bausteine

  • Mengen und Relationen: , , , , , ×.
  • Funktionen: totale Funktion , partielle Funktion , Maplet .
  • Sequenzen: seq, Länge #, Verkettung ^, head/tail.
  • Domäne/Range: dom, ran.

Werkzeuge und Einsatz

Werkzeuge sind fuzz (Spivey), Z/EVES, ProofPower-Z und das Open-Source-Framework Community Z Tools (CZT) mit Parser, Typchecker und LaTeX-/Unicode-Ausgabe. Z wurde unter anderem bei der Mondex-Smartcard-Geldbörse und im IBM-CICS-Umfeld eingesetzt. Während Z Struktur und Zustand mathematisch spezifiziert, modellieren Promela mit dem Model Checker SPIN ausführbares Prozessverhalten; Beweisassistenten wie Isabelle verifizieren die so aufgeschriebenen Eigenschaften maschinell.