| st[r -- _type] = typeval(mkclasstype(class0)), r ∈ st, r -- _type ∈ st, okval(val, ty), sk ∈ instfields(class0), sk ∈ instfields(class0) → goodfieldandtype(r, sk, st) ⊦ r = jvmref, ty = void_type, goodfieldandtype(r, sk, st[r1 -- mkfs(class, ty, fieldvar) ', val]) |
st[r -- _type] = typeval(mkclasstype(class0)), r ∈ st, r -- _type ∈ st, okval(val, ty), sk ∈ instfields(class0), is_fskey(sk), r -- sk ∈ st, okval(st[r -- sk], sk .fs .type) ⊦ r = jvmref, ty = void_type, okval(st[r1 -- mkfs(class, ty, fieldvar) ', val][r -- sk], sk .fs .type)
[[CONCRETESIMPRULES : ([CSIMPSEQ : ⊦ ¬ is_indexkey(sk) ↔ is_fskey(sk)], [CSIMPSEQ : ⊦ is_indexkey(sk) → ¬ is_fskey(sk)], [CSIMPSEQ : ⊦ r -- sk = r0 -- sk0 ↔ ¬ ¬ (r = r0 ∧ sk = sk0)], [CSIMPSEQ : ⊦ rk ∈ st[rk0, val] ↔ rk = rk0 ∨ rk ∈ st], [CSIMPSEQ : ⊦ ¬ is_fskey(sk) ↔ is_indexkey(sk)], [CSIMPSEQ : ⊦ goodfieldandtype(r, sk, st) ↔ ¬ ¬ ( is_fskey(sk) ∧ r -- sk ∈ st ∧ okval (st[r -- sk], sk .fs .type))])]]