View Source cure_smt_process (cure v0.1.0)
Cure SMT Solver Process Manager
Manages external SMT solver processes (Z3, CVC5) using Erlang ports. Provides process pooling, timeout enforcement, and resource management.
Features
- Port-based communication with solvers
 - Process pool for performance
 - Timeout enforcement
 - Automatic crash recovery
 - Resource limits
 - Query execution with model extraction
 
Usage
% Start a solver
{ok, Pid} = cure_smt_process:start_solver(z3, 5000).
% Execute a query
Query = \"(set-logic QF_LIA)\\n(check-sat)\\n\",
{sat, Lines} = cure_smt_process:execute_query(Pid, Query).
% Stop solver
cure_smt_process:stop_solver(Pid).
    Summary
Functions
Execute an SMT-LIB query on a solver process.
Get a solver from the pool.
Get solver statistics.
Reset a solver process (clear all assertions).
Return a solver to the pool.
Start a solver process pool.
Start a solver process.
Stop the solver pool.
Stop a solver process.
Functions
Execute an SMT-LIB query on a solver process.
Arguments
Pid- Solver process PIDQuery- SMT-LIB query string or iolist
Returns
{sat, Lines}- Satisfiable with model lines{unsat, []}- Unsatisfiable{unknown, []}- Solver couldn't determine{error, Reason}- Execution error
Get a solver from the pool.
Get solver statistics.
Reset a solver process (clear all assertions).
Return a solver to the pool.
Start a solver process pool.
Start a solver process.
Arguments
Solver- Solver type (z3 or cvc5)Timeout- Query timeout in milliseconds
Returns
{ok, Pid}- Solver process PID{error, Reason}- Error starting solver
-spec stop_pool(pid()) -> ok.
Stop the solver pool.
-spec stop_solver(pid()) -> ok.
Stop a solver process.