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:
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:
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