| # st0 = m + 1, st1[rk] = (update(r0, fis, st0 -- (r0 -- sk))[rk]), rk ∈ st1 ↔ rk ∈ update(r0, fis, st0 -- (r0 -- sk)), validFields(r0, fis, st0 -- (r0 -- sk)), r0 ∈ st0, r0 ∈ st1, onlyModified(r0, st0, st1), r0 -- sk ∈ st0, r0 -- sk ∈ st1, ∀ rk. (rk ∈ st1 -- (r0 -- sk) ↔ rk ∈ update(r0, fis, st0 -- (r0 -- sk))) ∧ (st1 -- (r0 -- sk))[rk] = (update(r0, fis, st0 -- (r0 -- sk))[rk]) ⊦ rk = r0 -- sk, st0 = ∅, st0[r0 -- sk] = st1[r0 -- sk], rk ∈ st1 ↔ rk ∈ update(r0, fis, st0) |
⊦ r -- sk ∈ update(r0, fis, st) ↔ r -- sk ∈ st ∨ r = r0 ∧ sk ∈ fis
⊦ r ≠ r0 → (r -- sk ∈ update(r0, fis, st) ↔ r -- sk ∈ st)
⊦ ¬ sk ∈ fis → (r0 -- sk ∈ update(r, fis, st) ↔ r0 -- sk ∈ st)
[[CONCRETESIMPRULES : ([CSIMPGEN : refkey generated by --;], [CSIMPSEQ : ⊦ r -- sk = r0 -- sk0 ↔ ¬ ¬ (r = r0 ∧ sk = sk0)], [CSIMPSEQ : ⊦ ¬ rk ∈ st ∧ onlyModified(r, st, st0) → ¬ rk ∈ st0], [CSIMPSEQ : ⊦ ¬ rk ∈ st → st[rk] = ∅[rk]], [CSIMPSEQ : ⊦ ∅[rk] = noval], [CSIMPSEQ : ⊦ rk ∈ st -- rk0 ↔ rk ≠ rk0 ∧ rk ∈ st], [CSIMPSEQ : ⊦ r -- sk = r0 -- sk0 ↔ r = r0 ∧ sk = sk0], [CSIMPFORWARD : ⊦ r -- sk ∈ st → r ∈ st], [CSIMPSEQ : ⊦ ¬ rk ∈ st → st -- rk = st])]]