| acc = r2 + refs0, st[r -- mkfs(class, ty0, fieldvar) '] = refval(r1), acc + r0 ' = r1 ' + refs, validrefs(str, r1 ' + refs, ty0, st[r0 -- sk, val]), mkfs(class, ty0, fieldvar) ' ∈ instfields(st[r -- _type] .type .class), st[r -- _type] .type ≤ ty, is_obj(str, r, st), junkref(str, r2, st), r0 ∈ refs, r1 ∈ acc ⊦ acc = [], r = jvmref, r0 = r, sk = _type, validrefs(str, r1 ' + refs, ty0, st), junkref(str, r, st), r0 ∈ acc |
st[r -- mkfs(class, ty0, fieldvar) '] = refval(r1), junkref(str, r1, st), is_obj(str, r, st), st[r -- _type] .type ≤ ty, mkfs(class, ty0, fieldvar) ' ∈ instfields(st[r -- _type] .type .class), validrefs(str, r1 ' + refs0 + r0 ', ty0, st[r0 -- sk, val]) ⊦ r0 = r1, sk = _type, r0 = r, r = jvmref, r0 ∈ refs0, junkref(str, r, st), validrefs(str, r1 ' + refs0 + r0 ', ty0, st)
[[CONCRETESIMPRULES : ([CSIMPFORWARD : ⊦ refs + r ' = refs0 → r ∈ refs0], [CSIMPSEQ : ⊦ ¬ r ∈ r0 ' + refs ↔ r ≠ r0 ∧ ¬ r ∈ refs], [CSIMPSEQ : ⊦ r ∈ r0 ' ↔ r = r0], [CSIMPSEQ : ⊦ r ∈ refs + refs0 ↔ ¬ ¬ (r ∈ refs ∨ r ∈ refs0)], [CSIMPSEQ : ⊦ r ' + refs ≠ []], [CSIMPSEQ : ⊦ (refs + refs0) + refs1 = refs + refs0 + refs1], [CSIMPSEQ : ⊦ r ' + refs = r0 ' + refs0 ↔ r = r0 ∧ refs = refs0], [CSIMPSEQ : ⊦ r + refs = r ' + refs])]]