Skip to content

Temporal Property Specification

Why It Matters

Many critical properties are inherently temporal and can't be captured in static specifications. "The system never deadlocks" (safety), "every request eventually receives a response" (liveness), "if A happens, then B happens before C" (ordering). Temporal specification catches bugs that single-state checks miss.

The Key Move

When specifying system behavior, distinguish temporal modalities. Does this property hold in every state (always) or just eventually (finally)? Must it hold starting now (globally) or from some future point (eventually-always)? Express complex properties as combinations: "always (if request then eventually response)."

Classic Application

Protocol verification. A mutual exclusion protocol must satisfy: "always (at most one process in critical section)" (safety) and "always (if process requests critical section, eventually it enters)" (liveness). Both are essential; testing might catch safety violations but often misses liveness failures (starvation).

Surprising Application

Relationship commitment. "We'll never fight" (safety) is unrealistic and unnecessary. Better: "Always (if conflict arises, eventually we address it constructively)" (liveness with safety). This admits conflict (realistic) while guaranteeing resolution (essential). The temporal structure clarifies what commitment means.

Failure Modes

Vacuous satisfaction - a liveness property "eventually X" is satisfied if the system terminates (eventually nothing happens). Conflating safety and liveness - confusing "never bad" with "always good." Untestable properties - temporal properties over infinite time can't be tested, only verified formally. Specification complexity - complex temporal properties become unreadable.

Go Deeper

Lamport, "Proving the Correctness of Multiprocess Programs" (1977); Pnueli, "The Temporal Logic of Programs" (1977)