| tdname∃(str, class), mkfs(class, ty, fieldvar) ' ∈ statfields(class), initdone(class, st0), goodfieldandtype(jvmref, mkfs(class, ty, fieldvar) ', st0) ∧ type∃(str, mkfs(class, ty, fieldvar) ' .fs .type) ∧ mkfs(class, ty, fieldvar) ' .fs .type ≠ void_type ∧ ( is_reftype(mkfs(class, ty, fieldvar) ' .fs .type) → validrefval(str, st0[jvmref -- mkfs(class, ty, fieldvar) '], mkfs(class, ty, fieldvar) ' .fs .type, st0)) ⊦ ty = void_type, jvmref ∈ st, (is_reftype(ty) → validrefval(str, (st ∪ st0)[jvmref -- mkfs(class, ty, fieldvar) '], ty, st ∪ st0)) ∧ type∃(str, ty) ∧ goodfieldandtype(jvmref, mkfs(class, ty, fieldvar) ', st ∪ st0) |
tdname∃(str, class), mkfs(class, ty, fieldvar) ' ∈ statfields(class), initdone(class, st0), jvmref -- mkfs(class, ty, fieldvar) ' ∈ st0, okval(st0[jvmref -- mkfs(class, ty, fieldvar) '], ty), type∃(str, ty), jvmref ∈ st0, is_reftype(ty) → validrefval(str, st0[jvmref -- mkfs(class, ty, fieldvar) '], ty, st0) ⊦ ty = void_type, jvmref ∈ st, (is_reftype(ty) → validrefval(str, st0[jvmref -- mkfs(class, ty, fieldvar) '], ty, st ∪ st0)) ∧ goodfieldandtype(jvmref, mkfs(class, ty, fieldvar) ', st ∪ st0)
[[CONCRETESIMPRULES : ([CSIMPNAMEDFORWARD : storefuns, , instore-01, ⊦ r -- sk ∈ st → r ∈ st], [CSIMPNAMEDSEQ : storefunsx, , union-at-right-01, ⊦ rk ∈ st0 → (st ∪ st0)[rk] = st0[rk]], [CSIMPNAMEDSEQ : okfuns, , good-field-field-01, ⊦ goodfieldandtype (r, mkfs(class1, ty, fieldvar) ', st) ↔ r -- mkfs (class1, ty, fieldvar) ' ∈ st ∧ okval (st[ r -- mkfs (class1, ty, fieldvar) '], ty)], [CSIMPNAMEDSEQ : fieldspec, , sel-03, ⊦ mkfs(class, ty, fieldvar) .type = ty], [CSIMPNAMEDSEQ : storekey, , sel-05, ⊦ fs ' .fs = fs])]]