| ∃ val, fis2, fis1. fis0 = fis2 + (_type × val) ' + fis1, update(r0, fis, st) = update(r0, fis0, st), ∀ fv. fv ∈ fis0 → fv ∈ fis, path∃(str, r, r0, update(r0, fis0, st)) ⊦ junkref(str, r, st), _type ∈ fis, path∃(str, r, r0, st), dups(fis0 .keys) |
update(r0, fis, st) = update(r0, fis2 + (_type × val) ' + fis1, st), path∃(str, r, r0, update(r0, fis, st)), ∀ fv. fv ∈ fis2 ∨ fv = _type × val ∨ fv ∈ fis1 → fv ∈ fis ⊦ junkref(str, r, st), _type ∈ fis, path∃(str, r, r0, st), _type ∈ fis2 .keys, _type ∈ fis1 .keys, dups(fis2 .keys + fis1 .keys), dups(fis2 .keys), dups(fis1 .keys)
[[CONCRETESIMPRULES : ([CSIMPFORWARD : ⊦ ¬ dups(sks + sks0) → ¬ dups(sks) ∧ ¬ dups(sks0)], [CSIMPSEQ : ⊦ ¬ fv ∈ fv0 ' + fis ↔ fv ≠ fv0 ∧ ¬ fv ∈ fis], [CSIMPSEQ : ⊦ fv ∈ fis + fis0 ↔ ¬ ¬ (fv ∈ fis ∨ fv ∈ fis0)], [CSIMPSEQ : ⊦ (sks + sks0) + sks1 = sks + sks0 + sks1], [CSIMPSEQ : ⊦ dups(sks + sk ' + sks0) ↔ sk ∈ sks ∨ sk ∈ sks0 ∨ dups(sks + sks0)], [CSIMPSEQ : ⊦ (fis + fis0) + fis1 = fis + fis0 + fis1], [CSIMPSEQ : ⊦ ((sk × val) ' + fis) .keys = sk ' + fis .keys], [CSIMPSEQ : ⊦ (fis + fis0) .keys = fis .keys + fis0 .keys])]]