| sk0 .fs = mkfs(class, ty, fieldvar), r ≠ jvmref ∨ sk ≠ sk0, r ≠ jvmref ∨ sk0 ≠ sk ⊦ goodfieldandtype(r, sk0, st[jvmref -- sk, val]) ∧ type∃(str, ty) ∧ ty ≠ void_type ∧ (is_reftype(ty) → validrefval(str, st[r -- sk0], ty, st)) ↔ goodfieldandtype(r, sk0, st) ∧ type∃(str, sk0 .fs .type) ∧ sk0 .fs .type ≠ void_type ∧ (is_reftype(sk0 .fs .type) → validrefval(str, st[r -- sk0], sk0 .fs .type, st)) |
sk0 .fs = mkfs(class, ty, fieldvar), type∃(str, ty), is_reftype(ty) → validrefval(str, st[jvmref -- sk0], ty, st) ⊦ sk0 = sk, ty = void_type, goodfieldandtype(jvmref, sk0, st[jvmref -- sk, val]) ↔ goodfieldandtype(jvmref, sk0, st)
[[CONCRETESIMPRULES : ([CSIMPSEQ : ⊦ r ≠ r0 → ( goodfieldandtype (r, sk, st[r0 -- sk0, val]) ↔ goodfieldandtype(r, sk, st))], [CSIMPSEQ : ⊦ mkfs(class, ty, fieldvar) .type = ty])]]