| is_predefined_class(class), newref(r, st), mkfs(class0, ty, fieldvar) ' ∈ statfields(class0), tdname∃(str, class0), initdone(class0, st), validfield(str, jvmref, mkfs(class0, ty, fieldvar) ', st) ⊦ r = jvmref, goodfieldandtype(jvmref, mkfs(class0, ty, fieldvar) ', addobj(r, class, [], st)[_mode, throw(r, mkclasstype(class))]) ∧ type∃(str, mkfs(class0, ty, fieldvar) ' .fs .type) ∧ mkfs(class0, ty, fieldvar) ' .fs .type ≠ void_type ∧ ( is_reftype(mkfs(class0, ty, fieldvar) ' .fs .type) → validrefval (str, addobj(r, class, [], st)[_mode, throw(r, mkclasstype(class))][jvmref -- mkfs(class0, ty, fieldvar) '], mkfs(class0, ty, fieldvar) ' .fs .type, addobj(r, class, [], st)[_mode, throw(r, mkclasstype(class))])) |
is_predefined_class(class), newref(r, st), mkfs(class0, ty, fieldvar) ' ∈ statfields(class0), tdname∃(str, class0), initdone(class0, st), validfield(str, jvmref, mkfs(class0, ty, fieldvar) ', st) ⊦ r = jvmref, ty = void_type, ( is_reftype(ty) → validrefval (str, addobj(r, class, [], st)[_mode, throw(r, mkclasstype(class))][jvmref -- mkfs(class0, ty, fieldvar) '], ty, addobj(r, class, [], st)[_mode, throw(r, mkclasstype(class))])) ∧ type∃(str, ty) ∧ goodfieldandtype(jvmref, mkfs(class0, ty, fieldvar) ', st)
[[CONCRETESIMPRULES : ([CSIMPSEQ : ⊦ ¬ mkfs (class0, void_type, fieldvar) ' ∈ statfields(class)], [CSIMPSEQ : ⊦ r ≠ r0 → ( goodfieldandtype (r, sk, addobj(r0, class, fis, st)) ↔ goodfieldandtype(r, sk, st))], [CSIMPSEQ : mkfs (`java.lang.Object' .class, void_type, `mode' .field) ' ≠ sk0 ⊦ goodfieldandtype (r0, sk0, st[_mode, val]) ↔ goodfieldandtype(r0, sk0, st)], [CSIMPSEQ : ⊦ fs ' = fs0 ' ↔ fs = fs0], [CSIMPSEQ : ⊦ mkfs(class, ty, fieldvar) = mkfs(class0, ty0, fieldvar0) ↔ class = class0 ∧ ty = ty0 ∧ fieldvar = fieldvar0], [CSIMPSEQ : ⊦ mkfs(class, ty, fieldvar) .type = ty], [CSIMPSEQ : ⊦ fs ' .fs = fs])]]