| fs = mkfs(class, ty0, fieldvar0), oktype(val, ty, st), goodfieldandtype(r, fs ', st) ⊦ mkfs(class0, ty, fieldvar) ' = _type, (r -- fs ' ∈ st ∨ r = r0 ∧ fs = mkfs(class0, ty, fieldvar)) ∧ oktype(((r = r0 ∧ fs = mkfs(class0, ty, fieldvar)) ⊃ val; st[r -- fs ']), ty0, st) |
⊦ goodfieldandtype(r, mkfs(class1, ty, fieldvar) ', st) ↔ r -- mkfs(class1, ty, fieldvar) ' ∈ st ∧ oktype(st[r -- mkfs(class1, ty, fieldvar) '], ty, st)
oktype(val, ty, st), r -- mkfs(class, ty0, fieldvar0) ' ∈ st, oktype(st[r -- mkfs(class, ty0, fieldvar0) '], ty0, st), r ∈ st ⊦ mkfs(class0, ty, fieldvar) ' = _type, oktype(((r = r0 ∧ class = class0 ∧ ty0 = ty ∧ fieldvar0 = fieldvar) ⊃ val; st[r -- mkfs(class, ty0, fieldvar0) ']), ty0, st)
[[CONCRETESIMPRULES : ([CSIMPFORWARD : ⊦ r -- sk ∈ st → r ∈ st], [CSIMPSEQ : ⊦ mkfs(class1, ty, fieldvar) = mkfs(class2, ty0, fieldvar0) ↔ ¬ ¬ ( class1 = class2 ∧ ty = ty0 ∧ fieldvar = fieldvar0)])]]