runtimeverification / runtimeverification/haskell-backend
Failure to prune branch due to removal of exists in side condition
Nobody has claimed this yet.
- Dominant language
- Haskell
- Stars
- 224
- Forks
- 43
- PR merge metrics
- No merged PRs in 30d
Description
See the info for reproducing this issue at the end.
As far as I can tell, what happens is that in a certain case, the backend rewrites config1(X) and not exists y . X == stuff(Y) to config2(stuff(Z)) and not stuff(Z) == stuff(Y), completely dropping the exists y quantifier. With the quantifier, most likely the backend would have been able to evaluate exists y . stuff(Z) == stuff(Y) to top, which would have pruned the branch.
$ kompile --version
K version: v5.6.122-0-g77b76f004a-dirty
Build date: Thu Jun 08 22:29:39 EEST 2023
$ kore-rpc --version
Kore version 0.60.0.0
Git:
revision: f7a90ba41aa98d79f400099e2a27156e07543540
branch: HEAD
last commit: Fri May 5 08:23:49 2023 -0600
Contributor guide
No contributing guide indexed for this repository
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start by unpacking report.tar.gz and reproducing the behavior with the recorded kompile and kore-rpc versions. Trace the backend rewrite from config1(X) and the exists side condition to the resulting config2(stuff(Z)) form. Done means the quantifier is preserved well enough for the branch to be pruned as described.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- haskell
- Domain
- compilers
- Issue type
- Bug
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Stale
- Clarity
- Needs clarification
- Newbie friendliness
- 25/100