Skip to content

[BUG] Fail closed when Z3 returns unknown during satisfiability evidence construction #1114

Description

@doublewhy

Gap claim

The satisfiability solver can return unknown from a bounded check. The current solver path treats that non-answer like a decisive result while reducing an unsatisfiable core or selecting a canonical witness, so published evidence can claim minimality or canonicality that was not established.

Existing surface audit

The service boundary already has a typed operational-error path, but the shared solver-check seam does not classify unknown. Evidence replay detects the divergence only after invalid evidence has already been emitted.

Reproduction

  1. Force one solver.check() call to return unknown during core reduction or witness selection.
  2. Run scenario satisfiability analysis.
  3. Observe that analysis continues instead of reporting an operational failure.

Duplicate clause identifiers also reach Z3 with an opaque exception, and an empty allowed-value intersection relies on implicit zero-argument behavior.

Expected behavior

  • Every unknown result fails closed through the typed operational-error boundary.
  • No evidence claiming minimality or canonicality is emitted after an incomplete check.
  • Duplicate clause identifiers are rejected before solver construction.
  • Empty membership is represented explicitly as false.

Verification

Regression tests must cover incomplete core reduction, incomplete witness selection, duplicate identifiers, and empty membership without changing the governed Z3 version or published schemas.

Related implementation

Proposed in #1083.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workingpythonPull requests that update python code

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions