runtimeverification / runtimeverification/haskell-backend

Failure to prune branch due to removal of exists in side condition

Open
#3,606 3 comments 0 reactions 0 assignees View on GitHub

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.

report.tar.gz

$ 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

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. 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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.