module Instantiation:`sig`

..`end`

Exhaustive Instantiation features

Because the SMT solver only takes as input ground formulas, we need to do the instantiation of quantifiers inside the model checker. The simplest (and complete) way to do this is to saturate exhaustively with the process varialbles (skolems).

`val relevant : ``of_cube:Cube.t -> to_cube:Cube.t -> Variable.subst list`

`relevant ~of_cube:a ~to_cube:b `

returns the list of relevant
instantiations of the quantifiers of `b`

for the test
`exists i1,... b => exists z1,... a`

. Eliminates trivial useless
(because they make the goal inconsistent) instantiations with simple
checks.

Quadratic in the size of the largest contiguous subset of `a`

and `b`

of atoms with terms of the same type.

`val exhaustive : ``of_cube:Cube.t -> to_cube:Cube.t -> Variable.subst list`

Same as `Instantiation.relevant`

but does not performs any checks