| ∀ st0, r0, val0. (st0[r0 -- sks0, val0][r0 -- sks0]) = val0 ⊦ sks0 = [], (st[st[r -- sk] .refval -- sks0, val][(st[st[r -- sk] .refval -- sks0, val][r -- sk]) .refval -- sks0]) = val, dups(sks0), sk ∈ sks0 |
⊦ sk0 ≠ sks .last ∧ sks ≠ [] → (st[r -- sks, val][r0 -- sk0]) = st[r0 -- sk0]
sk ≠ sks0 .last ∧ sks0 ≠ [], ∀ st0, r0, val0. (st0[r0 -- sks0, val0][r0 -- sks0]) = val0 ⊦ sks0 = [], (st[st[r -- sk] .refval -- sks0, val][st[r -- sk] .refval -- sks0]) = val, dups(sks0), sk ∈ sks0
[[CONCRETESIMPRULES : ([CSIMPSEQ : ⊦ sks .last = sk ∧ sks ≠ [] → sk ∈ sks])], [EXTRATERMS : (sk, r, val, sks0, st[r -- sk] .refval, st)]]