| ∀ r0, sk, st, r, val. # sks0 = 1 ∨ sks0 = [] ∨ (r0 -- sk ∈ st[r -- sks0, val] ↔ r0 -- sk ∈ st ∨ r0 = st[r -- sks0 .butlast] .refval ∧ sk = sks0 .last) ⊦ # (sk0 + sks0) = 1, sk0 + sks0 = [], r0 -- sk ∈ st[r -- (sk0 + sks0), val] ↔ r0 -- sk ∈ st ∨ r0 = st[r -- (sk0 + sks0) .butlast] .refval ∧ sk = (sk0 + sks0) .last |
# sks0 = 1 ∨ (∀ 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[r -- (sk0 ' + sks0), val] ↔ r0 -- sk ∈ st ∨ r0 = st[r -- (sk0 ' + sks0 .butlast)] .refval ∧ sk = sks0 .last
[[CONCRETESIMPRULES : ([CSIMPSEQ : ⊦ sks ≠ [] → (sk ' + sks) .last = sks .last], [CSIMPSEQ : ⊦ sks ≠ [] → (sks0 + sks) .butlast = sks0 + sks .butlast], [CSIMPSEQ : ⊦ sk ' + sks ≠ []], [CSIMPSEQ : ⊦ m + n = n + m], [CSIMPSEQ : ⊦ (m + n0) + n1 = m + n0 + n1], [CSIMPSEQ : ⊦ # sks = 0 ↔ sks = []], [CSIMPSEQ : ⊦ m + n = 1 ↔ m = 0 ∧ n = 1 ∨ n = 0 ∧ m = 1], [CSIMPSEQ : ⊦ (sks + sks0) + sks1 = sks + sks0 + sks1], [CSIMPSEQ : ⊦ # sk ' = 0 +1], [CSIMPSEQ : ⊦ # (sks + sks0) = # sks + # sks0], [CSIMPSEQ : ⊦ sk + sks = sk ' + sks])]]