Computation tree logic

Computation tree logic (CTL) is a branching-time logic, meaning that its model of time is a tree-like structure in which the future is not determined; there are different paths in the future, any one of which might be an actual path that is realized. It is used in formal verification of software or hardware artifacts, typically by software applications known as model checkers, which determine if a given artifact possesses safety or liveness properties. For example, CTL can specify that when some initial condition is satisfied (e.g., all program variables are positive or no cars on a highway straddle two lanes), then all possible executions of a program avoid some undesirable condition (e.g., dividing a number by zero or two cars colliding on a highway). In this example, the safety property could be verified by a model checker that explores all possible transitions out of program states satisfying the initial condition and ensures that all such executions satisfy the property. Computation tree logic belongs to a class of temporal logics that includes linear temporal logic (LTL). Although there are properties expressible only in CTL and properties expressible only in LTL, all properties expressible in either logic can also be expressed in CTL*.
CTL was first proposed by Edmund M. Clarke and E. Allen Emerson in 1981, who used it to synthesize so-called "synchronisation skeletons", "i.e" abstractions of concurrent programs.
Syntax of CTL.
The language of well-formed formulas for CTL is generated by the following grammar:
where formula_2 ranges over a set of atomic formulas. It is not necessary to use all connectives – for example,
formula_3 comprises a complete set of connectives, and the others can be defined using them.
For example, the following is a well-formed CTL formula:
The following is not a well-formed CTL formula:
The problem with this string is that formula_8 can occur only when paired with an formula_9 or an formula_10. 
CTL uses atomic propositions as its building blocks to make statements about the states of a system. These propositions are then combined into formulas using logical operators and temporal operators.
Operators.
Logical operators.
The logical operators are the usual ones: ¬, ∨, ∧, ⇒ and ⇔. Along with these operators CTL formulas can also make use of the boolean constants true and false.
Temporal operators.
The temporal operators are the following:
In CTL*, the temporal operators can be freely mixed. In CTL, the operator must always be grouped in two: one path operator followed by a state operator. See the examples below. CTL* is strictly more expressive than CTL.
Minimal set of operators.
In CTL there are minimal sets of operators. All CTL formulas can be transformed to use only those operators. This is useful in model checking. One minimal set of operators is: {true, ∨, ¬, EG, EU, EX}.
Some of the transformations used for temporal operators are:
Semantics of CTL.
Definition.
CTL formulae are interpreted over transition system. A transition system is a triple formula_11, where formula_12 is a set of states, formula_13 is a transition relation, assumed to be serial, i.e. every state has at least one successor, and formula_14 is a labelling function, assigning propositional letters to states. Let formula_15 be such a transition model
Then the relation of semantic entailment formula_18 is defined recursively on formula_19:
Characterisation of CTL.
Rules 10–15 above refer to computation paths in models and are what ultimately characterise the "Computation Tree";
they are assertions about the nature of the infinitely deep computation tree rooted at the given state formula_35.
Semantic equivalences.
The formulae formula_19 and formula_37 are said to be semantically equivalent if any state in any model that satisfies one also satisfies the other.
This is denoted formula_38
It can be seen that A and E are duals, being universal and existential computation path quantifiers respectively:
formula_39.
Furthermore, so are G and F.
Hence an instance of De Morgan's laws can be formulated in CTL:
It can be shown using such identities that a subset of the CTL temporal connectives is adequate if it contains formula_43, at least one of formula_44 and at least one of formula_45 and the boolean connectives.
The important equivalences below are called the expansion laws; they allow to unfold the verification of a CTL connective towards its successors in time.
Examples.
Let "P" mean "I like chocolate" and Q mean "It's warm outside."
The two following examples show the difference between CTL and CTL*, as they allow for the until operator to not be qualified with any path operator (A or E):
Relations with other logics.
Computation tree logic (CTL) is a subset of CTL* as well as of the modal μ calculus. CTL is also a fragment of Alur, Henzinger and Kupferman's alternating-time temporal logic (ATL).
Computation tree logic (CTL) and linear temporal logic (LTL) are both a subset of CTL*. CTL and LTL are not equivalent and they have a common subset, which is a proper subset of both CTL and LTL.
Extensions.
CTL has been extended with second-order quantification formula_54 and formula_55 to quantified computational tree logic (QCTL). There are two semantics:
A reduction from the model-checking problem of QCTL with the structure semantics, to TQBF (true quantified Boolean formulae) has been proposed, in order to take advantage of the QBF solvers.