| ⊦ r = r0, goodfieldandtype(r0, sk, addarray(r, ty, vals, st)) ↔ goodfieldandtype(r0, sk, st) |
⊦ is_fskey(sk) → (goodfieldandtype(r, sk, st) ↔ r -- sk ∈ st ∧ oktype(st[r -- sk], sk .fs .type, st))
¬ is_fskey(sk) ⊦ r = r0, goodfieldandtype(r0, sk, addarray(r, ty, vals, st)) ↔ goodfieldandtype(r0, sk, st)
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)
[[CONCRETESIMPRULES : ()], [EXTRATERMS : (addarray(r, ty, vals, st), sk, r0)]]