1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495(** Solver signatures *)openBatteriesopenConstrSys(** A solver is something that can translate a system into a solution (hash-table) *)moduletypeGenericEqSolver=functor(S:EqConstrSys)->functor(H:Hashtbl.Swithtypekey=S.v)->sig(** The hash-map that is the first component of [solve xs vs] is a local solution for interesting variables [vs],
reached from starting values [xs]. *)valsolve:(S.v*S.d)list->S.vlist->S.dH.tend(** A solver is something that can translate a system into a solution (hash-table).
These solver can handle [DemandEqConstrSys] *)moduletypeDemandEqSolver=functor(S:DemandEqConstrSys)->functor(H:Hashtbl.Swithtypekey=S.v)->sig(** The hash-map that is the first component of [solve xs vs] is a local solution for interesting variables [vs],
reached from starting values [xs]. *)valsolve:(S.v*S.d)list->S.vlist->S.dH.tend(** A solver is something that can translate a system into a solution (hash-table).
Incremental solver has data to be marshaled. *)moduletypeGenericEqIncrSolverBase=functor(S:EqConstrSys)->functor(H:Hashtbl.Swithtypekey=S.v)->sigtypemarshalvalcopy_marshal:marshal->marshalvalrelift_marshal:marshal->marshal(** The hash-map that is the first component of [solve xs vs] is a local solution for interesting variables [vs],
reached from starting values [xs].
As a second component the solver returns data structures for incremental serialization. *)valsolve:(S.v*S.d)list->S.vlist->marshaloption->S.dH.t*marshalend(** (Incremental) solver argument, indicating which postsolving should be performed by the solver. *)moduletypeIncrSolverArg=sigvalshould_prune:boolvalshould_verify:boolvalshould_warn:boolvalshould_save_run:boolend(** An incremental solver takes the argument about postsolving. *)moduletypeGenericEqIncrSolver=functor(Arg:IncrSolverArg)->GenericEqIncrSolverBasemoduletypeDemandEqIncrSolverBase=functor(S:DemandEqConstrSys)->functor(H:Hashtbl.Swithtypekey=S.v)->sigtypemarshalvalcopy_marshal:marshal->marshalvalrelift_marshal:marshal->marshal(** The hash-map that is the first component of [solve xs vs] is a local solution for interesting variables [vs],
reached from starting values [xs].
As a second component the solver returns data structures for incremental serialization. *)valsolve:(S.v*S.d)list->S.vlist->marshaloption->S.dH.t*marshalendmoduletypeDemandEqIncrSolver=functor(Arg:IncrSolverArg)->DemandEqIncrSolverBase(** A solver is something that can translate a system into a solution (hash-table)
*)moduletypeDemandGlobIncrSolver=functor(S:DemandGlobConstrSys)->functor(LH:Hashtbl.Swithtypekey=S.LVar.t)->functor(GH:Hashtbl.Swithtypekey=S.GVar.t)->sigtypemarshalvalcopy_marshal:marshal->marshalvalrelift_marshal:marshal->marshal(** The hash-map that is the first component of [solve xs vs] is a local solution for interesting variables [vs],
reached from starting values [xs].
As a second component the solver returns data structures for incremental serialization. *)valsolve:(S.LVar.t*S.D.t)list->(S.GVar.t*S.G.t)list->S.LVar.tlist->marshaloption->(S.D.tLH.t*S.G.tGH.t)*marshalend