| fis[mkfs(class0, ty, fieldvar) '] = refval(r1), fis .keys = instfields(class), validrefs(str, r1 ' + refs, ty, addobj(r, class, fis, st)), mkfs(class0, ty, fieldvar) ' ∈ instfields(class), newref(r, st), is_obj(str, r, addobj(r, class, fis, st)), mkfs(class0, ty, fieldvar) ' ∈ fis, ∀ fs, r0. fs ' × refval(r0) ∈ fis → ¬ junkref(str, r0, st) ∧ ¬ cyclic(str, r0, st), ∀ sk, val. sk × val ∈ fis → is_fskey(sk) ∧ okval(val, sk .fs .type) ∧ ( is_referencevalue(val) → val .refval = jvmref ∨ val .refval -- _type ∈ st ∧ is_typevalue(st[val .refval -- _type]) ∧ st[val .refval -- _type] .type ≤ sk .fs .type) ⊦ r = r1, r = jvmref, junkref(str, r1, st), cyclic(str, r1, st), ¬ dups(refs) ∧ ¬ r1 ∈ refs ∧ ¬ r ∈ refs |
fis[mkfs(class0, ty, fieldvar) '] = refval(r1), fis .keys = instfields(class), validrefs(str, r1 ' + refs, ty, addobj(r, class, fis, st)), mkfs(class0, ty, fieldvar) ' ∈ instfields(class), newref(r, st), is_obj(str, r, addobj(r, class, fis, st)), mkfs(class0, ty, fieldvar) ' ∈ fis, ∀ fs, r0. fs ' × refval(r0) ∈ fis → ¬ junkref(str, r0, st) ∧ ¬ cyclic(str, r0, st), mkfs(class0, ty, fieldvar) ' × refval(r1) ∈ fis → is_fskey(mkfs(class0, ty, fieldvar) ') ∧ okval(refval(r1), mkfs(class0, ty, fieldvar) ' .fs .type) ∧ ( is_referencevalue(refval(r1)) → refval(r1) .refval = jvmref ∨ refval(r1) .refval -- _type ∈ st ∧ is_typevalue(st[refval(r1) .refval -- _type]) ∧ st[refval(r1) .refval -- _type] .type ≤ mkfs(class0, ty, fieldvar) ' .fs .type) ⊦ r = r1, r = jvmref, junkref(str, r1, st), cyclic(str, r1, st), ¬ dups(refs) ∧ ¬ r1 ∈ refs ∧ ¬ r ∈ refs
[[CONCRETESIMPRULES : ()], [EXTRATERMS : (mkfs(class0, ty, fieldvar) ', refval(r1))]]