| st[r -- _type] = typeval(mkclasstype(class)), r -- _type ∈ st, goodfieldsandtypes(r, instfields(class), st), r ∈ st ⊦ fs ' = _type, r = jvmref, fs ' ∈ instfields(class), r ≠ jvmref ∧ r -- _type ∈ st[r -- fs ', val] ∧ is_typevalue(st[r -- fs ', val][r -- _type]) ∧ is_classtype((st[r -- fs ', val][r -- _type]) .type) ∧ is_obj(r, (st[r -- fs ', val][r -- _type]) .type .class, st[r -- fs ', val]) |
st[r -- _type] = typeval(mkclasstype(class)), r ∈ st, goodfieldsandtypes(r, instfields(class), st), r -- _type ∈ st ⊦ r = jvmref, fs ' = _type, fs ' ∈ instfields(class), is_obj(r, class, st[r -- fs ', val])
[[CONCRETESIMPRULES : ([CSIMPSEQ : ⊦ mkclasstype(class) .class = class], [CSIMPSEQ : ⊦ is_classtype(mkclasstype(class))], [CSIMPSEQ : ⊦ typeval(ty) .type = ty], [CSIMPSEQ : ⊦ is_typevalue(typeval(ty))], [CSIMPSEQ : ⊦ sk ≠ sk0 → (st[r -- sk, val][r0 -- sk0]) = st[r0 -- sk0]], [CSIMPSEQ : sk ≠ sk0 ⊦ r -- sk ∈ st[r -- sk0, val] ↔ r -- sk ∈ st])]]