| fs ' .fs = mkfs(class, ty, fieldvar), goodfieldandtype(r, fs ', st), okval(val, ty) ⊦ goodfieldandtype(r0, sk0, st[r -- fs ', val]) ↔ goodfieldandtype(r0, sk0, st), fs ' = _type |
⊦ goodfieldandtype(r, fs ', st) ↔ ¬ ¬ (r -- fs ' ∈ st ∧ okval(st[r -- fs '], fs .type))
r -- mkfs(class, ty, fieldvar) ' ∈ st, okval(val, ty), r ∈ st, okval(st[r -- mkfs(class, ty, fieldvar) '], ty) ⊦ mkfs(class, ty, fieldvar) ' = _type, goodfieldandtype(r0, sk0, st[r -- mkfs(class, ty, fieldvar) ', val]) ↔ goodfieldandtype(r0, sk0, st)
[[CONCRETESIMPRULES : ([CSIMPSEQ : ⊦ mkfs(class, ty, fieldvar) .type = ty], [CSIMPFORWARD : ⊦ r -- sk ∈ st → r ∈ st], [CSIMPSEQ : ⊦ fs ' .fs = fs])]]