argotorg / argotorg/hevm

General Solution For Cex Reconstruction

Open
#334 0 comments 0 reactions 0 assignees View on GitHub
enhancement
Dominant language
Haskell
Stars
358
Forks
79
Avg merge
1d 1h
Merged PRs (30d)
6

Description

Right now we have some fairly ad hoc solutions to reconstruct proper Cexs when we have lost information due to simplification.

A more general approach that would work for all cases could look like this:

1. Gather all variables mentioned in the starting state (e.g. calldata, storage, context etc...)
2. During simplification keep track of which rewrites have been applied (e.g. if we rewrote `a == a || b == 6`into `True`, we lost information that `b == 6`).
3. If we get `Sat`, declare all variables from step 1 that are not present in the current query, assert concrete values for any variables mentioned in the cex, assert all facts that were simplified away in step 2.
4. Call `check-sat`, now we should have a full and valid cex for that branch

Contributor guide

No contributing guide indexed for this repository

Research direction

No files, tests, or entry points are named. Start by locating the simplification logic and existing counterexample reconstruction, then trace how rewritten-away facts are handled. Done means the proposed process reconstructs a full, valid counterexample for every affected branch.

Written by the indexing model from the issue text.

Assessment

Tech stack
haskell
Domain
blockchain
Issue type
Feature
Difficulty
5/5
Estimated time
Over a week
Activity status
Stale
Clarity
Needs clarification
Newbie friendliness
30/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.