| r -- mkfs(class, ty, fieldvar) ' ∈ st, r ∈ st, type∃(str, ty), st ⊆ st0, okval(st[r -- mkfs(class, ty, fieldvar) '], ty), is_reftype(ty) → validrefval(str, st[r -- mkfs(class, ty, fieldvar) '], ty, st) ⊦ ty = void_type, goodfieldandtype(r, mkfs(class, ty, fieldvar) ', st0) ∧ (is_reftype(ty) → validrefval(str, st0[r -- mkfs(class, ty, fieldvar) '], ty, st0)) |
⊦ goodfieldandtype(r, sk, st) ↔ is_fskey(sk) ∧ r -- sk ∈ st ∧ okval(st[r -- sk], sk .fs .type)
r -- mkfs(class, ty, fieldvar) ' ∈ st, r ∈ st, type∃(str, ty), st ⊆ st0, okval(st[r -- mkfs(class, ty, fieldvar) '], ty), is_reftype(ty) → validrefval(str, st[r -- mkfs(class, ty, fieldvar) '], ty, st) ⊦ ty = void_type, is_fskey(mkfs(class, ty, fieldvar) ') ∧ r -- mkfs(class, ty, fieldvar) ' ∈ st0 ∧ okval(st0[r -- mkfs(class, ty, fieldvar) '], mkfs(class, ty, fieldvar) ' .fs .type) ∧ (is_reftype(ty) → validrefval(str, st0[r -- mkfs(class, ty, fieldvar) '], ty, st0))
[[CONCRETESIMPRULES : ()], [EXTRATERMS : (st0, mkfs(class, ty, fieldvar) ', r)]]