| st[r -- _type] = typeval(mkclasstype(class0)), st[r -- mkfs(class, ty, fieldvar) '] = refval(r0), r ∈ st, class+∃(str, class0), ∀ sk. sk ∈ instfields(class0) → goodfieldandtype(r, sk, st), r -- _type ∈ st, mkfs(class, ty, fieldvar) ' ∈ instfields(class0), junkrefs(str, r0 ' + refs, ty, st) ⊦ ty = abstract_type, r0 = jvmref, r = jvmref, is_reftype(ty), is_abstract(class0) |
[[CONCRETESIMPRULES : ([CSIMPSEQ : ⊦ goodfieldandtype (r, mkfs(class1, ty, fieldvar) ', st) ↔ r -- mkfs(class1, ty, fieldvar) ' ∈ st ∧ okval (st[ r -- mkfs (class1, ty, fieldvar) '], ty)], [CSIMPSEQ : ⊦ okval(refval(r), ty) ↔ ty = void_type ∨ is_reftype(ty)], [CSIMPSEQ : ⊦ void_type ≠ abstract_type], [CSIMPSEQ : ⊦ ¬ mkfs (class0, void_type, fieldvar) ' ∈ instfields(class)])], [EXTRATERMS : (mkfs(class, ty, fieldvar) ')]]