| st[r -- mkfs(class0, ty1, fieldvar0) '] = refval(r0), validrefs(str, r0 ' + refs, ty1, st), mkfs(class, ty0, fieldvar) ' ∈ instfields(st[r -- _type] .type .class), is_obj(str, r, st), is_reftype(ty0), st[r -- _type] .type ≤ ty, mkfs(class0, ty1, fieldvar0) ' ∈ instfields(st[r -- _type] .type .class) ⊦ _type = mkfs(class, ty0, fieldvar) ', r = jvmref, is_obj(str, r, st[r -- mkfs(class, ty0, fieldvar) ', refval(jvmref)]), validrefs(str, r ' + jvmref ', ty, st[r -- mkfs(class, ty0, fieldvar) ', refval(jvmref)]) |
⊦ is_obj(str, r, st) ∧ oktype(val, fs .type, st) ∧ fs ' ≠ _type → is_obj(str, r, st[r -- fs ', val])
[[CONCRETESIMPRULES : ([CSIMPSEQ : ⊦ mkfs(class, ty, fieldvar) .type = ty], [CSIMPSEQ : ⊦ oktype(val, ty, st) ↔ okval(val, ty)], [CSIMPSEQ : ⊦ okval(refval(r), ty) ↔ ty = void_type ∨ is_reftype(ty)])], [EXTRATERMS : (refval(jvmref), mkfs(class, ty0, fieldvar), st, r, str)]]