| 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)) |
r -- mkfs(class, ty, fieldvar) ' ∈ st, r ∈ st, type∃(str, ty), st ⊆ st0, okval(st[r -- mkfs(class, ty, fieldvar) '], ty), r -- mkfs(class, ty, fieldvar) ' ∈ st0, r ∈ st0, is_reftype(ty) → validrefval(str, st[r -- mkfs(class, ty, fieldvar) '], ty, st) ⊦ ty = void_type, (is_reftype(ty) → validrefval(str, st0[r -- mkfs(class, ty, fieldvar) '], ty, st0)) ∧ okval(st0[r -- mkfs(class, ty, fieldvar) '], ty)
[[CONCRETESIMPRULES : ([CSIMPFORWARD : ⊦ r -- sk ∈ st → r ∈ st], [CSIMPSEQ : ⊦ rk ∈ st ∧ ¬ rk ∈ st0 → ¬ st ⊆ st0], [CSIMPSEQ : ⊦ mkfs(class, ty, fieldvar) .type = ty], [CSIMPSEQ : ⊦ fs ' .fs = fs], [CSIMPSEQ : ⊦ is_fskey(fs ')])]]