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