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