| st[r -- _type] = typeval(mkclasstype(class)), okval(st[r -- mkfs(class0, ty, fieldvar) ', val][r -- mkfs(class1, ty0, fieldvar0) '], ty0), r -- mkfs(class1, ty0, fieldvar0) ' ∈ st[r -- mkfs(class0, ty, fieldvar) ', val], r -- _type ∈ st, r ∈ st, okval(val, ty), okval(st[r -- mkfs(class0, ty, fieldvar) '], ty), r -- mkfs(class0, ty, fieldvar) ' ∈ st, mkfs(class1, ty0, fieldvar0) ' ∈ instfields(class), ¬ okval(st[r -- mkfs(class1, ty0, fieldvar0) '], ty0) ∨ ¬ r -- mkfs(class1, ty0, fieldvar0) ' ∈ st, ∀ sk0. sk0 ∈ instfields(class) → is_fskey(sk0) ∧ r -- sk0 ∈ st[r -- mkfs(class0, ty, fieldvar) ', val] ∧ okval(st[r -- mkfs(class0, ty, fieldvar) ', val][r -- sk0], sk0 .fs .type) ⊦ r = jvmref, mkfs(class0, ty, fieldvar) ' = _type |
⊦ rk ≠ rk0 → (st[rk0, val][rk]) = st[rk]
[[CONCRETESIMPRULES : ([CSIMPSEQ : sk ≠ sk0 ⊦ r -- sk ∈ st[r -- sk0, val] ↔ r -- sk ∈ st], [CSIMPSEQ : ⊦ mkfs(class1, ty, fieldvar) = mkfs(class2, ty0, fieldvar0) ↔ ¬ ¬ ( class1 = class2 ∧ ty = ty0 ∧ fieldvar = fieldvar0)], [CSIMPSEQ : ⊦ r -- sk = r0 -- sk0 ↔ ¬ ¬ (r = r0 ∧ sk = sk0)], [CSIMPSEQ : ⊦ r -- sk = r0 -- sk0 ↔ r = r0 ∧ sk = sk0], [CSIMPSEQ : ⊦ fs ' = fs0 ' ↔ fs = fs0], [CSIMPSEQ : ⊦ mkfs(class, ty, fieldvar) = mkfs(class0, ty0, fieldvar0) ↔ class = class0 ∧ ty = ty0 ∧ fieldvar = fieldvar0], [CSIMPSEQ : ⊦ rk ∈ st[rk, val]], [CSIMPSEQ : ⊦ (st[rk, val][rk]) = val])], [EXTRATERMS : (r -- mkfs(class1, ty0, fieldvar0) ', val, r -- mkfs(class0, ty, fieldvar) ', st)]]