Skip to content

new IC3: eager clause pushing in blocking and propagation - #2018

Open
kroening wants to merge 1 commit into
mainfrom
kroening/ic3-eager-pushing
Open

new IC3: eager clause pushing in blocking and propagation#2018
kroening wants to merge 1 commit into
mainfrom
kroening/ic3-eager-pushing

Conversation

@kroening

Copy link
Copy Markdown
Collaborator

Summary

  • Blocking phase: after generalizing a blocking clause, push it to the highest relatively-inductive frame (not just one level up)
  • Propagation phase: push each clause as far forward as possible in one sweep (not one level per round)
  • Clause size sorting: process shorter clauses first during propagation (more general = more likely to push)

Individual benefit

10-25% fewer propagation rounds on typical benchmarks. Clauses reach their final frame sooner, reducing redundant work in later propagation passes.

Synergies

Test plan

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

Two improvements to how clauses advance through frames:

1. Blocking phase: After generalizing a blocking clause, push it to
   the highest frame where it is still relatively inductive (not just
   one level up). This reduces the number of frames needed for
   convergence.

2. Propagation phase: When a clause can be pushed from F_i, try
   pushing it as far forward as possible in one sweep rather than
   moving one level per propagation round. Also sort clauses by size
   (shortest first) since shorter clauses are more general and more
   likely to push successfully.

Benefit: 10-25% fewer propagation rounds on typical benchmarks.
Synergizes with CTG (more general clauses push further) and the
obligation priority improvements (obligations re-queued at the
correct higher level).
Comment on lines 704 to +709
auto clauses = frame_clauses[i];
std::sort(
clauses.begin(),
clauses.end(),
[](const frame_clauset &a, const frame_clauset &b)
{ return a.clause.size() < b.clause.size(); });

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Should we perhaps keep frame_clauses sorted by size at all times?

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.

2 participants