Skip to content

Possible scoping issue #1

Description

@ibnyusuf

Consider the following while program:

func main() {

  Int a = 2;
  if(a > 0){
    Int b = 3;
  }  else {
    skip;
  } 
}

(conjecture
    (= (b main_end) 3) 
)

My assumption is that the variable b should be local to the if block and therefore, the conjecture should not be provable as it refers to b outside of the scope in which it is defined. However, this is not the case. The translation to SMT is:

; {
;    a = 2 @l3
;    if (a > 0) @l4
;    {
;       b = 3 @l5
;    }
;    else
;    {
;       skip @l7
;    }
; }
; 

(set-logic UFDTLIA)

(declare-nat Nat zero s p Sub)
(declare-sort Time 0)
(declare-sort Trace 0)
(declare-fun to-int (Nat) Int)
(declare-fun a (Time) Int)
(declare-fun b (Time) Int)
(declare-const l3 Time)
(declare-const l4 Time)
(declare-const l5 Time)
(declare-const l7 Time)
(declare-const main_end Time)
(declare-const t1 Trace)
(declare-const tp Time)

; Axiom: Semantics of function main
(assert
   ;Semantics of IfElse at location l4
   (and
      ;Semantics of left branch
      (=>
         (> 2 0)
         (= (b main_end) 3)
      )
      ;Semantics of right branch
      (=>
         (not
            (> 2 0)
         )
         (= (b main_end) (b l7))
      )
   )
)

; Conjecture: user-conjecture-0
(assert-not
   (= (b main_end) 3)
)

(check-sat)

Which is easily refutable by Vampire

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

help wantedExtra attention is neededinvalidThis doesn't seem right

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions