| ∀ r1, sk1, st0, r2, val0. r1 -- sk1 ∈ st0[r2 -- sks0, val0] ↔ r1 -- sk1 ∈ st0 ∨ r1 = st0[r2 -- sks0 .butlast] .refval ∧ sk1 = sks0 .last ⊦ # sks0 = 1, sks0 = [], r0 -- sk ∈ st[r -- (sk0 ' + sks0), val] ↔ r0 -- sk ∈ st ∨ r0 = st[r -- (sk0 ' + sks0 .butlast)] .refval ∧ sk = sks0 .last |
⊦ sks ≠ [] → st[r -- (sk ' + sks), val] = st[st[r -- sk] .refval -- sks, val]
sks0 ≠ [], ∀ r1, sk1, st0, r2, val0. r1 -- sk1 ∈ st0[r2 -- sks0, val0] ↔ r1 -- sk1 ∈ st0 ∨ r1 = st0[r2 -- sks0 .butlast] .refval ∧ sk1 = sks0 .last ⊦ # sks0 = 1, sks0 = [], r0 -- sk ∈ st[st[r -- sk0] .refval -- sks0, val] ↔ r0 -- sk ∈ st ∨ r0 = st[r -- (sk0 ' + sks0 .butlast)] .refval ∧ sk = sks0 .last
[[CONCRETESIMPRULES : ()], [EXTRATERMS : (val, sks0, sk0, r, st)]]