/**
 * src/verify/formal/solver.ts
 *
 * Sprint-587 — Z3 SMT solver wrapper.
 *
 * Strategy : avoid adding `z3-solver` as a hard npm dependency (heavy WASM
 * package, ~5MB) by spawning the `z3` binary as a subprocess and piping
 * SMT-LIB v2 source on stdin. If `z3` is not in PATH, the wrapper degrades
 * gracefully by returning `{ sat: null }` so callers can map that to the
 * UNKNOWN state.
 *
 * This keeps the SDK lean : consumers that want formal verification install
 * `z3` system-wide (apt / brew / scoop). Consumers that do not, get UNKNOWN
 * results and can route them according to their policy.
 *
 * @module verify/formal/solver
 */
/**
 * Options accepted by {@link checkSmt}.
 */
export interface SolverOptions {
    /** Wall-clock timeout in milliseconds. Defaults to 5000ms. */
    timeout_ms?: number;
    /** Optional path to the z3 binary (defaults to `z3` resolved via PATH). */
    z3_path?: string;
}
/**
 * Outcome of a single SMT-LIB check-sat invocation.
 *
 * `sat`     : `true`  → solver returned `sat` (formula is satisfiable, i.e.
 *                       a counterexample exists for a violation query)
 *             `false` → solver returned `unsat` (no counterexample, the
 *                       property holds)
 *             `null`  → solver returned `unknown`, timed out, was not
 *                       installed, or failed to run
 * `model`   : when `sat === true`, the textual SMT-LIB model string emitted
 *             by `(get-model)` — useful as a counterexample witness
 * `time_ms` : wall-clock time spent waiting on the solver subprocess
 * `reason`  : optional human-readable diagnostic for UNKNOWN / null outcomes
 */
export interface SmtCheckResult {
    sat: boolean | null;
    model?: string;
    time_ms: number;
    reason?: string;
}
/**
 * Run a single SMT-LIB v2 formula through Z3 and return the satisfiability
 * outcome.
 *
 * Convention : the caller frames the property as a NEGATION (i.e. asserts the
 * conjunction of preconditions AND the negation of the postcondition). Then :
 *   - `sat`   → counterexample found → property VIOLATED → UNSAFE
 *   - `unsat` → no counterexample exists → property HOLDS → SAFE
 *   - `unknown` / timeout / missing binary → UNKNOWN
 *
 * The function never throws : transport errors and missing binaries are
 * surfaced via `sat: null` with a `reason` string.
 */
export declare function checkSmt(smtFormula: string, options?: SolverOptions): Promise<SmtCheckResult>;
export declare function isZ3Available(z3Path?: string): Promise<boolean>;
/**
 * Test-only helper to reset the cached availability probe.
 * @internal
 */
export declare function __resetZ3AvailabilityCache(): void;
//# sourceMappingURL=solver.d.ts.map