To talk about these properties in a way, which would be 'understandable' by an automatic property proofer, one will need a formal language which allows statements about such properties and which can be computed by an automaton. Languages which are commonly used for such tasks are often taken from temporal logic, especially the language CTL (short for Computational Tree Logic).

In CTL you have expressions for properties like those above. But you can also connect properties with logical connectors like (negation), (and, conjunction), (or, disjunction). This generates expressions like . Expressions with properties and logical connectors are called state expressions, because you can describe which properties a state should have. Looking to a path of an execution graph you have a sequence of states which are labled with consecutive numbers from 0 to some in the finite case and to some in the infinite case. If one interpretes these numbers as points in time then one can interprete every path as a time line with an order which allows the definition of functions like predecessor (pred) and successor (succ), where and as long are still part of the sequence .

Based on these assumptions one can introduce further language expressions of CTL which will be called Temporal Operators like X (the successor of some i in a path, ), F ('future': there is some j in the path greater than the actual i), G (global: for all elements of the actual path), and U (until: there is a j in the path and from an actual i until this j there is something else). The temporal operators take as arguments state expressions and generate path expressions. They are talking about a whole path .

For our toy example we could specify questions like the following ones:

- := Is there a state (= vertex) in the whole execution graph which has the property ?
- := Is there a state in the whole execution graph which has the two properties 'K=A' and 'K=B' at the same time?
- := Is there a state in the whole execution graph which has at least one of the properties 'K=A' or 'K=B' or 'K=C'?
- X := is there a path in the whole execution graph which has a position i followed by a position i+1 where we have at i+1 a state which has the property 'K=A'?
- F := is there a path in the whole execution graph which has a position j following the actual position i where we have at j a state which has the property 'K=B'?
- G := is there a path in the whole execution graph which has at all positions states which have the properties 'K=C'?
- U := is there a path in the whole execution graph which has a position j with a state with property 'K=B' and before this j a position i such, that all states from position i until position j-1 have the property 'K=A'?

And CTL has even more operators. Commonly used are E (exist:for at least one path in the whole execution graph ) and A(all: for all pathes in the whole execution graph ). These quantifiers are taking path expressions as arguments and generate again state expressions.

For our toy example we could specify questions like the following ones:

- EX := is there at least one path in the whole execution graph which has a position i followed by a position i+1 where we have at i+1 a state which has the property 'K=A'?
- AX := Does it hold for all pathes in the execution graph that we have a position i followed by a position i+1 where we have at i+1 a state which has the property 'K=A'?
- EF := is there at least one path in the whole execution graph which has a position j following the actual position i where we have at j a state which has the property 'K=B'?
- AF :=Does it hold for all pathes in the execution graph that there is a position j following the actual position i where we have at j a state which has the property 'K=B'?
- EG := is there at least one path in the whole execution graph which has at all positions states which have the properties 'K=C'?
- AG :=Does it hold for all pathes in the execution graph that there are at all positions of each graph states which have the properties 'K=C'?
- E(U):= is there at least one path in the whole execution graph which has a position j with a state with property 'K=B' and before this j a position i such, that all states from position i until position j-1 have the property 'K=A'?
- A(U):= Does it hold for all pathes in the execution graph that there are positions j with a state with property 'K=B' and before this j a position i such, that all states from position i until position j-1 have the property 'K=A'?

These expressions look nice, but CTL has its limits. To express in CTL, that there exist a path in the execution graph whose last three vertices have the properties , this is not possible! One ca say EU or EU, but one cannot repeat temporal operators without an additionl quantifier converting a path expression into a state expression! And to say EU EU is not the same, because each of the expressions EU and EU can describe a different path.

In the toy example it would -luckily- be enough to check whether there is a path with a vertex with property 'K=A' preceeded by a state with property 'K=B' as E((K=B)U(K=A)). If we would introduce the property 'final' related to final states, then the test for a possible solution would become very simple.

Gerd Doeben-Henisch 2010-03-03