| validrefs(str, r0 ' + refs, ty1, st -- r), st[r -- mkfs(class, ty1, fieldvar) '] = refval(r0), validrefs(str, r0 ' + refs, ty1, st), mkfs(class, ty1, fieldvar) ' ∈ instfields(st[r -- _type] .type .class), st[r -- _type] .type ≤ ty, # st .refs ≤ # refs, is_obj(str, r, st), validrefs(str, r0 ' + refs, ty1, st -- r) → # refs ≤ # (st .refs -- r) ⊦ r = r0, r = jvmref, r ∈ refs, r0 ∈ refs, dups(refs) |
# st .refs = # refs, st[r -- mkfs(class, ty1, fieldvar) '] = refval(r0), validrefs(str, r0 ' + refs, ty1, st -- r), validrefs(str, r0 ' + refs, ty1, st), mkfs(class, ty1, fieldvar) ' ∈ instfields(st[r -- _type] .type .class), st[r -- _type] .type ≤ ty, is_obj(str, r, st) ⊦ r = r0, r = jvmref, r ∈ st .refs, r ∈ refs, r0 ∈ refs, dups(refs)
[[CONCRETESIMPRULES : ([CSIMPSEQ : ⊦ m ≤ m], [CSIMPSEQ : ⊦ m ≤ n → (n ≤ m ↔ m = n)], [CSIMPSEQ : ⊦ ¬ r ∈ rset → rset -- r = rset], [CSIMPSEQ : ⊦ # rset ≤ # (rset -- r) ↔ ¬ r ∈ rset], [CSIMPFORWARD : ⊦ n ≤ n0 ∧ n0 ≤ n1 → n ≤ n1])]]