

The idea of PCTL is to specify temporal properties on a model while taking into account probabilities.

For instance, the formula P<{0.75}[X {finished}] states that the probability that the next state verify the property "finished" is strictly less than 0.75.

The PCTL formulas accpted by the ProB parser (https://github.com/hhu-stups/probparsers/tree/PCTLparser/ltlparser) are separated onto 2 categories : path formulas and state formulas.

A state formula F is either :
- true
- false
- {property}, with property being an atomic state property
- F1 & F2
- F1 or F2
- F1 => F2
- F1 <=> F2
- not F
- P op {probability} [PF], with op in {<,>,<=,>=}, probability being either a variable or a number between 0 and 1, and PF being a path formula.

A path formula PF is either :
- X F, the next operator, with F being a state formula
- F PF, the eventually operator
- F <= k F with k being an integer different than 0, the bounded eventually operator
- G F, the always operator
- G <= k F the bounded always operator
- F1 U F2, the until operator
- F1 U <= k F2, the bounded until operator

Note that, as in PRISM, the syntax is extented to add = as an operator in a probabilistic path formula. This allow to evaluate the probability of a path from a certain state. Those are the only type of formulas that accept a not grounded probability as an argument. Avoid the negation of such formula.

Example PCTL formulas are:
- P={0.0} [F<=1 {finished}]
- P={1.0} [F {finished}]
- P={0.25} [F<=2 {finished}] & P={0.75} [G<=2 not({finished})]

To evaluate such a formula using ProB, you have to [load a model](https://prob.hhu.de/w/index.php?title=Using_the_Command-Line_Version_of_ProB) into the [REPL](https://prob.hhu.de/w/index.php?title=ProB_REPL) and to enter the formula you want to verify as `:pctl formula`

For an introduction to PCTL and DTMC, look at the PRISM lecture notes (https://www.prismmodelchecker.org/lectures/pmc/).
