| acc + r ' = r1 ' + refs, st[r0 -- mkfs(class, ty0, fieldvar) '] = refval(r1), acc .first = st[r0 -- mkfs(class0, ty1, fieldvar0) '] .refval, is_obj(str, r0, st), st[r0 -- _type] .type ≤ ty, mkfs(class, ty0, fieldvar) ' ∈ instfields(st[r0 -- _type] .type .class), validrefs(str, r1 ' + refs, ty0, st), mkfs(class0, ty1, fieldvar0) ' ∈ instfields(st[r0 -- _type] .type .class), is_referencevalue(st[r0 -- mkfs(class0, ty1, fieldvar0) ']), validrefs(str, acc, ty1, st), r ∈ refs, r1 ∈ acc, ∀ str0, ty2, st0, r2. validrefs(str0, acc, ty2, st0) ∧ validrefs(str0, acc + r2 ', ty2, st0) → has_reffield(acc .last, st0) ⊦ acc = [], r0 = jvmref, has_reffield(acc .last, st) |
acc = r3 + refs0, acc + r ' = r1 ' + refs, st[r0 -- mkfs(class, ty0, fieldvar) '] = refval(r1), r3 = st[r0 -- mkfs(class0, ty1, fieldvar0) '] .refval, is_obj(str, r0, st), st[r0 -- _type] .type ≤ ty, mkfs(class, ty0, fieldvar) ' ∈ instfields(st[r0 -- _type] .type .class), validrefs(str, r1 ' + refs, ty0, st), mkfs(class0, ty1, fieldvar0) ' ∈ instfields(st[r0 -- _type] .type .class), is_referencevalue(st[r0 -- mkfs(class0, ty1, fieldvar0) ']), validrefs(str, acc, ty1, st), r ∈ refs, r1 ∈ acc, ∀ str0, ty2, st0, r2. validrefs(str0, acc, ty2, st0) ∧ validrefs(str0, acc + r2 ', ty2, st0) → has_reffield(acc .last, st0) ⊦ acc = [], r0 = jvmref, has_reffield(acc .last, st)
[[CONCRETESIMPRULES : ([CSIMPELIM : refs ≠ [] ⊦ r = refs .first ∧ refs0 = refs .rest ↔ refs = r + refs0])], [EXTRATERMS : (acc, r3, refs0)]]