Closed ailrst closed 5 months ago
by definition Assumes and Asserts cannot contain MemoryStores so I don't think it is necessary to specify that stores(body) == null for them. There also isn't any reason that they can't contain loads and it is possible there may be some reason we use Assumes and Asserts in the future. Any loads in Assumes or Asserts would not count as such for the purposes of the information flow logic though.
Otherwise this seems fine
Assumes and Asserts cannot contain MemoryStores so I don't think it is necessary to specify that stores(body) == null for them
stores(body) == \emptyset
is the definition stating that assumes and asserts cannot contain stores.
I agree on loads, it should be okay for assumes and asserts to reference memory.
Additionally, Global isn't a subclass of Variable, it's a separate trait.
The way it works is:
Global means Memory or Register, which are the things that have a global scope from Boogie/the IR's perspective
Variable means Register or LocalVar, which are things that can be the LHS of a LocalAssign
Maybe to make terminology consistent, we should use shared/non-shared in relation to concurrency, and local/global in relation to IR scoping?
I agree that is the terminology I tend to use, although the new MMM also uses shared to denote variables that are pointed-to from multiple procedures.
Adds a description of the IR to the documentation