The CSP refinement checker, now with a new
lightning-fast multicore refinement-checking engine.
FDR4 analyses programs written in CSPM, which combines the
operators of Hoare's CSP with a functional programming language. It also has support for analysing timed systems, via tock CSP.
N = 8
PHILNAMES = {0..N-1}
FORKNAMES = {0..N-1}
channel thinks, sits, eats, getsup : PHILNAMES
channel picks, putsdown : PHILNAMES.FORKNAMES
-- A philosopher thinks, sits down, picks up two forks,
-- eats, puts down forks and gets up, in an unending
-- cycle.
PHIL(i) =
thinks.i -> sits!i -> picks!i!i ->
picks!i!((i+1)%N) -> eats!i -> putsdown!i!((i+1)%N) ->
putsdown!i!i -> getsup!i -> PHIL(i)
assert PHIL(0) :[deadlock free [F]]
FDR4 includes a full interactive prompt that allows expressions to be evaluated, new definitions given and new assertions defined. It also includes a powerful debug viewer that allows counterexamples to be understood.
FDR4 includes a parallel refinement-checking engine that achieves a linear speed-up as the number of cores increase. It is able to check processes with billions of states, and is able to make efficient use of on-disk storage to complement memory.
FDR4 also includes a cluster version that achives a linear speedup as more compute nodes are added, thus allowing huge problems to be efficiently tackled.
Featuring an interactive prompt, a more powerful debug viewer, and a built-in version of Probe.
FDR4's new type-checker produces clearer error messages in advance, not at runtime.
FDR3 is now able to use multiple cores to check refinement assertions, resulting in large speed ups.
Typically, refinement checks running on a single core take half the time that FDR2 takes.
FDR4's compiler is now able to compile a number of processes into more efficient forms.
The front-end has been open-sourced, allowing other tools to use the parser, type-checker and evaluator.