| ∀ st, r, sk, val, r0, val0. (st[r -- sk, val][r0 -- sks, val0]) = (st[r0 -- sks, val0][r -- sk, val]) ∨ sk ∈ sks ⊦ sk = sk0, sks = [], (st[r -- sk, val][st[r0 -- sk0] .refval -- sks, val0]) = (st[r0 -- (sk0 ' + sks), val0][r -- sk, val]), sk ∈ sks |
⊦ sks ≠ [] → st[r -- (sk ' + sks), val] = st[st[r -- sk] .refval -- sks, val]
sks ≠ [], ∀ st, r, sk, val, r0, val0. (st[r -- sk, val][r0 -- sks, val0]) = (st[r0 -- sks, val0][r -- sk, val]) ∨ sk ∈ sks ⊦ sk = sk0, sks = [], (st[r -- sk, val][st[r0 -- sk0] .refval -- sks, val0]) = (st[st[r0 -- sk0] .refval -- sks, val0][r -- sk, val]), sk ∈ sks
[[CONCRETESIMPRULES : ()], [EXTRATERMS : (val0, sks, sk0, r0, st)]]