| st[r -- _type] = typeval(mkclasstype(class)), r ∈ st, ∀ sk. sk ∈ instfields(class) → goodfieldandtype(r, sk, st), r -- _type ∈ st ⊦ r = jvmref, fs ' = _type, fs ' ∈ instfields(class), ∀ sk. sk ∈ instfields(class) → goodfieldandtype(r, sk, st[r -- fs ', val]) |
st[r -- _type] = typeval(mkclasstype(class)), sk ∈ instfields(class), r ∈ st, r -- _type ∈ st, is_indexkey(sk) ∨ ¬ r -- sk ∈ st ∨ ¬ okval(st[r -- fs ', val][r -- sk], sk .fs .type), ∀ sk0. sk0 ∈ instfields(class) → is_fskey(sk0) ∧ r -- sk0 ∈ st ∧ okval(st[r -- sk0], sk0 .fs .type) ⊦ r = jvmref, fs ' = _type, fs ' ∈ instfields(class)
[[CONCRETESIMPRULES : ([CSIMPSEQ : sk ≠ sk0 ⊦ r -- sk ∈ st[r -- sk0, val] ↔ r -- sk ∈ 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))])]]