This article presents \(\mathsf {Pardinus}\), an extension of the popular \(\mathsf {Kodkod}\) relational model finder with linear temporal logic (including past operators), to simplify the analysis of dynamic systems. \(\mathsf {Pardinus}\) includes a SAT-based bounded-model checking engine and an SMV-based complete model checking engine, both allowing iteration through the different instances (or counter-examples) of a specification. It also supports a decomposed parallel analysis strategy that improves the efficiency of both analysis engines on commodity multi-core machines.
Remark that we use mathematical symbols rather than concrete SMV syntax for better readability. However, future (\({{\,\mathrm{{\mathsf {X}}}\,}}\), \({{\,\mathrm{{\mathsf {G}}}\,}}\), \({{\,\mathrm{{\mathsf {F}}}\,}}\), \(\mathbin {{\mathsf {U}}}\) and \(\mathbin {{\mathsf {R}}}\)) and past (\({{\,\mathrm{{\mathsf {Y}}}\,}}\), \({{\,\mathrm{{\mathsf {H}}}\,}}\), \({{\,\mathrm{{\mathsf {O}}}\,}}\), \(\mathbin {{\mathsf {S}}}\) and \(\mathbin {{\mathsf {T}}}\)) temporal operators follow the standard textual notation also used in \(\mathsf {SMV}\).
For instance, \(\mathsf {Pardinus}\) also implements an operation to change a segment of a path, which is used by the \(\mathsf {Alloy~6}\)\(\mathsf {Analyzer}\) to change the initial state and for forking paths.
Although omitted for simplicity, bounding expressions may also refer to concrete atoms as regular constant bounds. These are ignored during symmetry breaking.
The complete results are available online at https://bit.ly/2YF6hWL, and scripts to reproduce the results available at the \(\mathsf {Pardinus}\) repository.