A forking solver presents an ability to create children with existed parental assertions memory efficiently as possible. Also, it has lazy assertions initialization.
It is draft implementation requiring following reviews.
Notes
Forking solver manager (KForkingSolverManager) provides shared resources for the solvers group. It allows to create KForkingSolver instance that lifetime upper bounded by the manager's life.
KForkingSolver is a solver, which can be branched in assertions and push-levels.
Usage
KZ3ForkingSolverManager(ctx).use { man ->
val parent = man.createForkingSolver()
parent.assert(formula)
val child = parent.fork()
println(child.checkSat())
}
A forking solver presents an ability to create children with existed parental assertions memory efficiently as possible. Also, it has lazy assertions initialization.
It is draft implementation requiring following reviews.
Notes
KForkingSolverManager
) provides shared resources for the solvers group. It allows to createKForkingSolver
instance that lifetime upper bounded by the manager's life.KForkingSolver
is a solver, which can be branched in assertions and push-levels.Usage
Currently implemented:
KForkingSolver
,KForkingSolverManager
TODO: