| 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 |
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, okval(refval(r1), ty), ∀ fs, r0. fs ' × refval(r0) ∈ fis → ¬ junkref(str, r0, st) ∧ ¬ cyclic(str, r0, st), r1 = jvmref ∨ r1 -- _type ∈ st ∧ is_typevalue(st[r1 -- _type]) ∧ st[r1 -- _type] .type ≤ ty ⊦ r = r1, r = jvmref, junkref(str, r1, st), cyclic(str, r1, st), ¬ dups(refs) ∧ ¬ r1 ∈ refs ∧ ¬ r ∈ refs
[[CONCRETESIMPRULES : ([CSIMPSEQ : ⊦ refval(r) .refval = r], [CSIMPSEQ : ⊦ is_referencevalue(refval(r))], [CSIMPSEQ : ⊦ mkfs(class, ty, fieldvar) .type = ty], [CSIMPSEQ : ⊦ fs ' .fs = fs], [CSIMPSEQ : ⊦ is_fskey(fs ')], [CSIMPSEQ : ⊦ sk ∈ fis ∧ fis[sk] = val → (¬ sk × val ∈ fis ↔ false)])]]