Bei CTL (Computation Tree Logic) handelt es sich um eine Teillogik von CTL*, und zwar um eine temporale Logik mit zeitlicher Verzweigung, in der die temporalen Operatoren Aussagen über Pfade machen, die von einem gegebenen Zustand aus erreichbar sind.
Syntaktisch folgt in CTL-Formeln unmittelbar auf jeden der temporalen Operatoren X, F, G, U und R einer der beiden PfadquantorenA oder E. Damit entspricht die Syntax der CTL-Zustandsformeln der Syntax der Zustandsformeln in CTL*, während die Syntax der Pfadformeln im Vergleich zu CTL* auf folgende Regel eingeschränkt eingeschränkt wird:
Temporale Operatoren: Wenn f und g Zustandsformeln sind, dann sind auch Xf, Ff, Gf, fUg und fRg Pfadformeln.
Es gibt die folgenden zehn grundlegenden CTL-Operatoren:
AX und EX
AF und EF
AG und EG
AU und EU
AR und ER
Jeder dieser zehn Operatoren kann mit Hilfe der drei Operatoren EX, EG und EU folgendermaßen umschrieben werden:
AX f = ¬EX (¬f)
EF f = E [TrueU f]
AG f = ¬EF (¬f)
AF f = ¬EG (¬f)
A [f U g] ≡ ¬E [¬g U (¬f ∧ ¬g)] ∧ ¬EG (¬g)
A [f R g] ≡ ¬E [¬f U ¬g)]
E [f R g] ≡ ¬A [¬f U ¬g)]
Einige typische Beispiele von CTL-Formeln, die im Zusammenhang mit der Verifikation paralleler Programme auftreten können, sind die folgenden:
EF (Start ∧ ¬Ready): Es ist möglich, einen Zustand zu erreichen, in dem Start erfüllt ist, Ready jedoch nicht.
AG (Req → AFAck): Wenn eine Anfrage auftritt, wird sie irgendwann auch bestätigt.
AG (ARDeviceEnabled): Die Aussage DeviceEnabled wird auf jedem Berechnungspfad unendlich oft erfüllt.
AG (EFRestart): Von jedem Zustand aus ist es möglich, in den Zustand zu gelangen, in dem Restart erfüllt wird.