| fis[mkfs(class0, ty, fieldvar) '] = refval(r), fis .keys = instfields(class), mkfs(class0, ty, fieldvar) ' ∈ fis, mkfs(class0, ty, fieldvar) ' ∈ instfields(class), newref(r, st), is_obj(str, r, addobj(r, class, fis, st)), validfieldinits(fis, st), ∀ fs, r0. fs ' × refval(r0) ∈ fis → ¬ junkref(str, r0, st) ∧ ¬ cyclic(str, r0, st) ⊦ r = jvmref, r = jvmref ∨ r ≠ jvmref ∧ is_valid_ref(str, r, addobj(r, class, fis, st)) ∧ (addobj(r, class, fis, st)[r -- _type]) .type ≤ ty |
fis[mkfs(class0, ty, fieldvar) '] = refval(r), fis .keys = instfields(class), mkfs(class0, ty, fieldvar) ' ∈ fis, mkfs(class0, ty, fieldvar) ' ∈ instfields(class), newref(r, st), is_obj(str, r, addobj(r, class, fis, st)), validfieldinits(fis, st), ∀ fs, r0. fs ' × refval(r0) ∈ fis → ¬ junkref(str, r0, st) ∧ ¬ cyclic(str, r0, st) ⊦ r = jvmref, mkclasstype(class) ≤ ty
[[CONCRETESIMPRULES : ([CSIMPSEQ : ⊦ typeval(ty) .type = ty], [CSIMPSEQ : ¬ _type ∈ fis ⊦ (addobj(r, class1, fis, st) [r -- _type ] ) = typeval(mkclasstype(class1))], [CSIMPSEQ : ⊦ fis .keys = instfields(class) → ¬ _type ∈ fis], [CSIMPSEQ : ⊦ is_obj(str, r, st) → is_valid_ref(str, r, st)])]]