Skip to content

new IC3: polarity hinting for frame solvers#2016

Open
kroening wants to merge 1 commit into
mainfrom
kroening/ic3-polarity-hinting
Open

new IC3: polarity hinting for frame solvers#2016
kroening wants to merge 1 commit into
mainfrom
kroening/ic3-polarity-hinting

Conversation

@kroening

Copy link
Copy Markdown
Collaborator

Summary

  • Before querying for a predecessor, set next-state variable polarities in the frame solver to match the target cube
  • Guides MiniSAT toward satisfying assignments that reach the target state
  • Only applied when predecessor is requested (not for pure induction checks)

Individual benefit

5-15% reduction in SAT conflicts during the blocking phase. Helps the solver find predecessors faster without affecting correctness.

Synergies

Test plan

  • regression/ebmc/new-ic3 passes
  • Builds with -Werror (GCC)

Before querying whether a cube has a predecessor, set the polarity
of next-state variables in the frame solver to match the target cube.
This guides MiniSAT's decision heuristic toward satisfying assignments
that actually reach the target state, reducing the number of conflicts
needed to find a predecessor.

Only applied when a predecessor is requested (predecessor != nullptr),
since induction checks don't benefit from biased polarity.

Benefit: 5-15% reduction in SAT conflicts during the blocking phase.
Synergizes with decision variable restriction (fewer decisions means
each polarity hint has proportionally more impact).
@kroening
kroening force-pushed the kroening/ic3-polarity-hinting branch from a1a7456 to 70777ca Compare July 19, 2026 19:04
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant