| [b9bfd33f] | 1 |
|
|---|
| 2 | Dyscopes are currently stored in an array in the state.
|
|---|
| 3 | This gives each an ID.
|
|---|
| 4 | Reachable dyscopes: call stacks always have reference to concrete dyscope.
|
|---|
| 5 | Pointers to anywhere:
|
|---|
| 6 | equality of two dyscopes:
|
|---|
| 7 | Type of value associated to a dyscope: struct {int}
|
|---|
| 8 | d1==d2 becomes d1.0==d2.0. This one survives renumbering, but not
|
|---|
| 9 | d1<d2. Sure, that becomes an uninterpreted function.
|
|---|
| 10 | What about
|
|---|
| 11 |
|
|---|
| 12 | d1==d2 --> d1.0==5.
|
|---|
| 13 |
|
|---|
| 14 | Renumbering: Apply permutation to d1.0?
|
|---|
| 15 |
|
|---|
| 16 |
|
|---|
| 17 | f(2)=f(3) ... need that to return false
|
|---|
| 18 |
|
|---|
| 19 | CIVL:evaluation of equality for dyscope types special handling
|
|---|
| 20 | (also inequality, <, >)
|
|---|
| 21 |
|
|---|
| 22 |
|
|---|
| 23 | A concrete state has some concrete ordered list of dyscopes
|
|---|
| 24 | (0,1,2,...,n-1)
|
|---|
| 25 | and values of expressions of dyscope type are integers.
|
|---|
| 26 | Two concrete states are equivalent if there is a permutation
|
|---|
| 27 | of the integers 0..n-1 such that when applied to one state
|
|---|
| 28 | by permuting the dyscopes in the list and the id numbers in the values,
|
|---|
| 29 | you get the other state.
|
|---|
| 30 |
|
|---|
| 31 | A symbolic state represents a set of concrete states.
|
|---|
| 32 | Question is given two symbolic states, are they "equivalent"
|
|---|
| 33 | meaning given any concrete state cs1 in ss1, there is a concrete
|
|---|
| 34 | state cs2 in ss2 such that cs1 and cs2 are equivalent.
|
|---|
| 35 | And vice versa.
|
|---|
| 36 |
|
|---|
| 37 | what is the permutation applied to the symbolic state?
|
|---|
| 38 |
|
|---|
| 39 | var: dyscope ...
|
|---|
| 40 |
|
|---|
| 41 | var: array of T..
|
|---|
| 42 |
|
|---|
| 43 | example: (0 1 2)
|
|---|
| 44 |
|
|---|
| 45 | SS1:
|
|---|
| 46 | d1: X
|
|---|
| 47 | d2: Y
|
|---|
| 48 | d3: <1>
|
|---|
| 49 | d4: Z
|
|---|
| 50 | pc: X<Y && Y<1 && Z=2
|
|---|
| 51 |
|
|---|
| 52 | To show: let f be the permutation
|
|---|
| 53 | X<Y iff f(X)<f(Y)
|
|---|
| 54 | X=Y iff f(X)=f(Y)
|
|---|
| 55 |
|
|---|
| 56 | SS2:
|
|---|
| 57 | d1: X
|
|---|
| 58 | d2: Y
|
|---|
| 59 | d3: <2>
|
|---|
| 60 | d4: Z
|
|---|
| 61 | pc: X<Y && Y<2 && Z=0
|
|---|
| 62 |
|
|---|
| 63 |
|
|---|
| 64 | evaluation of operations on pointers or anything involving
|
|---|
| 65 |
|
|---|
| 66 | f(3)=X
|
|---|
| 67 | f(3)=f(4)
|
|---|
| 68 |
|
|---|
| 69 | X: arbitrary pointer
|
|---|
| 70 | X.0 : dyscope type
|
|---|
| 71 | X.0==f(3)
|
|---|
| 72 |
|
|---|
| 73 | Can we guarantee that f will only be applied to concrete integers?
|
|---|
| 74 |
|
|---|
| 75 | "I never want to see a conrete integer representing a dyscope taken out of f"
|
|---|
| 76 |
|
|---|