| is_fskey(sk) ⊦ r = r0, r0 -- sk ∈ addarray(r, ty, vals, st) ∧ oktype(addarray(r, ty, vals, st)[r0 -- sk], sk .fs .type, addarray(r, ty, vals, st)) ↔ goodfieldandtype(r0, sk, st) |
⊦ r ≠ r0 → (r -- sk ∈ addarray(r0, ty, vals, st) ↔ r -- sk ∈ st)
⊦ r ≠ r0 → (addarray(r, ty, vals, st)[r0 -- sk]) = st[r0 -- sk]
is_fskey(sk) ⊦ r = r0, r0 -- sk ∈ st ∧ oktype(st[r0 -- sk], sk .fs .type, addarray(r, ty, vals, st)) ↔ goodfieldandtype(r0, sk, st)
[[CONCRETESIMPRULES : ()]]