viperproject / viperproject/silver

Resources can be used on left of implication in assumes

Open
#705 0 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

Dominant language
Scala
Stars
100
Forks
53
Avg merge
8h 10m
Merged PRs (30d)
2

Description

Impure expressions are typically not allowed on the LHS of an implication, except in an assume :

field val: Int

method foo(r: Ref) 
    requires acc(r.val) ==> true
    ensures acc(r.val) ==> true
{
    assume acc(r.val) ==> true
    assert acc(r.val) ==> true 

    inhale acc(r.val) ==> true
    exhale acc(r.val) ==> true
}

In the above example, all uses of acc(r.val) are not allowed except for assume acc(r.val) ==> true. Isn't this a bit inconsistent, especially if you cannot assert something you have assumed?

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 reproducing the issue's example and compare how requires, ensures, assume, assert, inhale, and exhale handle acc(r.val) on the left of implication. Determine the intended consistency rule for these constructs, then verify that the resulting behavior is covered by the relevant existing verification tests or language checks.

Written by the indexing model from the issue text.

Assessment

Tech stack
scala
Domain
compilers
Issue type
Bug
Difficulty
4/5
Estimated time
3-5 days
Activity status
Stale
Clarity
Mostly clear
Newbie friendliness
35/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.