Declarative language for dynamical properties#

Summary#

In the scope of a BoNesis(dom, data) object, the following methods are defined.

Objects#

Observation#

maps a subset of components to a Boolean value

O = obs({a:0, b:1,..}) Observation from partial mapping of components to 0 or 1 (dict-like object)
O = obs("name") data dictionary

Configuration#

maps each component to a Boolean value

C = cfg() Allocates a fresh configuration
C = +O Fresh configuration matching with the observation O
C = ~O Default configuration matching with the observation O

Variable#

S = Some(max_size=k) Represents a mutation of at most k components.
Use S.assignments() to get satisfying valuations.

Properties#

Constraints on configurations#

C != C' The configurations C and C' differ on at least one component
C[a] == C'[b] | 0 | 1
The state of the component a in the configuration C is equal (resp. different) to the state of the component b in the configuration C' (resp. 0 and 1)
C[a] != C'[b] | 0 | 1
C != O The configuration C does not match with the observation O

Attractor properties#

fixed(C) The configuration C is a fixed point
fixed(O) There exists a trap space where observation O is fixed
in_attractor(C) The configuration C belongs to an attractor

Reachability#

C >= C' or reach(C,C') There exists an MP trajectory from the configuration C to the configuration C'
C >= O ... to a configuration matching with the observation O (equiv to C >= +O)
C >= fixed(O) ... to a configuration in a trap space where the observation O is fixed
Note: can be composed, e.g., C1 >= C2 >= fixed(C3)
C / _ or nonreach(C, _) Absence of MP trajectory from the configuration C to ... (same as reach)

Universal properties#

all_fixpoints({O,O',..}) All the fixed points match with at least one given observation
C >> "fixpoints" ^ {O,O',..} All the fixed points reachable from the configuration C ...

Contexts#

with mutant({a:0,..} | S):
    ...
The properties within the with block are subject to mutation specified by {a:0,..} (resp. S)

Optimizations#

maximize_nodes() Maximize the number of nodes in the Boolean network (to be used in conjunction with option `allow_skipping_nodes=True` of `InfluenceGraph`)
maximize_constants() Maximize the number of nodes having a constant Boolean function
maximize_strong_constants() Maximize the number of nodes having a constant Boolean function and being assigned to this constant in all defined configurations.