| 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) |
⊦ goodfieldandtype(r, sk, st) ↔ is_fskey(sk) ∧ r -- sk ∈ st ∧ okval(st[r -- sk], sk .fs .type)
[[CONCRETESIMPRULES : ([CSIMPSEQ : sk ≠ sk0 ⊦ r -- sk ∈ st[r -- sk0, val] ↔ r -- sk ∈ st], [CSIMPSEQ : ⊦ sk ≠ sk0 → (st[r -- sk, val][r0 -- sk0]) = st[r0 -- sk0]], [CSIMPSEQ : ⊦ is_fskey(sk) → ( goodfieldandtype(r, sk, st) ↔ r -- sk ∈ st ∧ okval (st[r -- sk], sk .fs .type))], [CSIMPSEQ : ⊦ ¬ is_fskey(sk) ↔ is_indexkey(sk)], [CSIMPSEQ : ⊦ is_indexkey(sk) → ¬ goodfieldandtype(r, sk, st)], [CSIMPSEQ : ⊦ ¬ r -- sk ∈ st → ¬ goodfieldandtype(r, sk, st)], [CSIMPSEQ : ⊦ r -- sk ∈ st → ( goodfieldandtype(r, sk, st) ↔ ¬ ¬ ( is_fskey(sk) ∧ okval (st[r -- sk], sk .fs .type)))])], [EXTRATERMS : (st[jvmref -- sk, val], sk0, jvmref)]]