One of the most important operations in model checking is the relational product:
In many practical cases, building the BDD for
may
not be feasible. In many cases, however, it is possible to exploit the
structure of the system and build the transition relation as a list of small
BDDs, called clusters, which are implicitly disjoined (e.g., with an
asynchronous model of concurrency) or conjoined (e.g., with synchronous
systems) [9,10,11].
![]() |
disjunctive |
![]() |
conjunctive |
With a disjunctively partitioned transition relation, the relational
product can be computed as follows:
For synchronous systems, NUSMV implements techniques based on early
variable quantifications [59,9,10]. The basic idea is to
find an ordering of the partitions
such that the
quantification can be pushed inside the formula as much as possible,
thus allowing relational products between small BDDs and existential
quantification on a small number of variables, and thus reducing the
complexity of the whole operation:
NUSMV allows the user to perform model checking using the monolithic transition relation or the disjunctively or conjunctively partitioned transition relation. For conjunctive partitioning, the heuristics described in [35] and in [53] are available. They allow the user to compute the clusters for the conjunctively partitioned transition relation.