| initdone(class, st), tdname∃(str, class), mkfs(class, ty, fieldvar) ' ∈ statfields(class), okval(val, ty), jvmref -- mkfs(class, ty, fieldvar) ' ∈ st, okval(st[jvmref -- mkfs(class, ty, fieldvar) '], ty), type∃(str, ty), jvmref ∈ st ⊦ mkfs(class, ty, fieldvar) ' = _length, ty = void_type, is_referencevalue(val), is_reftype(ty), goodfieldandtype(jvmref, mkfs(class, ty, fieldvar) ', st[jvmref -- mkfs(class, ty, fieldvar) ', val]) |
⊦ goodfieldandtype(r, sk, st) ↔ is_fskey(sk) ∧ r -- sk ∈ st ∧ okval(st[r -- sk], sk .fs .type)
[[CONCRETESIMPRULES : ([CSIMPSEQ : ⊦ is_fskey(fs ')], [CSIMPSEQ : ⊦ rk ∈ st[rk0, val] ↔ rk = rk0 ∨ rk ∈ st], [CSIMPSEQ : ⊦ (st[rk, val][rk]) = val], [CSIMPSEQ : ⊦ fs ' .fs = fs], [CSIMPSEQ : ⊦ mkfs(class, ty, fieldvar) .type = ty])], [EXTRATERMS : (st[jvmref -- mkfs(class, ty, fieldvar) ', val], mkfs(class, ty, fieldvar) ', jvmref)]]