Parameterised Boolean Equation Systems
This section gives an overview of the classes and algorithms on parameterised
boolean equation systems (PBESs). All classes and algorithms of the PBES Library reside
in the namespace pbes_system
.
PBES equation systems
A Parameterised Boolean Equation System \(\cal{E}\) is a sequence of fixpoint equations, where each equation has the following form:
with \(\sigma \in \{\mu, \nu\}\) a fixpoint symbol, \(X(d:D)\) a predicate variable, and \(\varphi\) a predicate formula.
The following C++ classes are defined for PBESs:
Expression |
C++ class |
---|---|
\(\cal{E}\) |
|
\(\sigma X(d:D)=\varphi\) |
|
\(\sigma\) |
|
\(X(d:D)\) |
|
\(\varphi\) |
|
\(d:D\) |
|
\(e\) |
PBES expressions
PBES expressions (or predicate formulae) are defined using the following grammar
where \(c\) is a data term of sort Bool, \(X(e)\) is a parameterised propositional variable, \(d\) is a variable of sort \(D\) and \(e\) is a data expression.
Note
Both \(d{:}D\) and \(e\) can be multivariate, meaning they are shorthand for \(d_1:D_1, \cdots, d_n:D_n\) and \(e_1, \cdots, e_n\) respectively.
Note
The operators \(\neg\) and \(\implies\) are usually not defined in the theory about PBESs. For practical reasons they are supported in the implementation.
The following C++ classes are defined for PBES expressions:
Expression |
C++ class |
---|---|
\(c\) |
|
\(\neg \varphi\) |
|
\(\varphi \wedge \psi\) |
|
\(\varphi \vee \psi\) |
|
\(\varphi \implies \psi\) |
|
\(\forall d{:}D .\:\varphi\) |
|
\(\exists d{:}D .\:\varphi\) |
|
\(X(e)\) |
Note
PBES expressions must be monotonous: every occurrence of a propositional variable should be in a scope such that the number of \(\neg\) operators plus the number of left-hand sides of the \(\implies\) operator is even.
Note
Some of the class names of the operations have a trailing underscore character.
This is only the case when the name itself (like and
or not
) is a reserved
C++ keyword.
Algorithms
This section gives an overview of the algorithms that are available for PBESs.
Algorithms on PBESs
algorithm |
description |
---|---|
Parses a textual description of a PBES |
|
Generates a PBES from a linear process specification and a state formula |
|
Removes constant parameters from a PBES |
|
Removes unused parameters from a PBES |
|
Rewrites the predicate formulae of a PBES |
|
pbesinst |
Transforms a PBES to a BES by instantiating predicate variables |
Solves a PBES using Gauss elimination |
|
Removes propositional variable parameters |
|
Removes equations that are not (syntactically) reachable from the initial state of a PBES |
|
Returns true if a PBES data type is in BES form |
|
Pushes negations as far as possible inwards towards data expressions |
|
Brings a PBES expression into positive normal form, i.e. without occurrences of \(\neg\) and \(\implies\) |
Search and Replace functions
algorithm |
description |
---|---|
Finds all identifiers occurring in a PBES data type |
|
Finds all sort expressions occurring in a PBES data type |
|
Finds all function symbols occurring in a PBES data type |
|
find_all_variables |
Finds all variables occurring in a PBES data type |
Finds all free variables occurring in a PBES data type |
|
Finds all propositional variable instantiations occurring in a PBES data type |
|
Replaces sort expressions in a PBES data type |
|
Replaces data expressions in a PBES data type |
|
Replaces variables in a PBES data |
|
Replaces variables in a PBES data type, and avoids unwanted capturing |
|
Replaces free variables in a PBES data type |
|
Replaces all variables in a PBES data type, even in declarations |
|
Replaces propositional variables in a PBES data type |
Rewriters for PBES expressions
The following rewriters are available
name |
description |
---|---|
BQNF rewriter |
|
Replaces data library operators to equivalent PBES library operators |
|
Rewrites data expressions that appear as a subterm of the PBES expression |
|
Eliminates quantifiers by enumerating quantifier variables |
|
Applies one point rule to simplify quantifier expressions |
|
Brings PBES expressions into PFNF normal form |
|
Pushes quantifiers inside |
|
Simplifies quantifier expressions |
|
Simplifies logical boolean operators |