| is_fskey(sk), oktype(val, ty, st), goodfieldandtype(r, sk, st) ⊦ mkfs(class0, ty, fieldvar) ' = _type, r -- sk ∈ st[r0 -- mkfs(class0, ty, fieldvar) ', val] ∧ oktype(st[r0 -- mkfs(class0, ty, fieldvar) ', val][r -- sk], sk .fs .type, st[r0 -- mkfs(class0, ty, fieldvar) ', val]) |
⊦ sk0 ≠ _type → (oktype(val, ty, st[r -- sk0, val0]) ↔ oktype(val, ty, st))
is_fskey(sk), oktype(val, ty, st), goodfieldandtype(r, sk, st) ⊦ mkfs(class0, ty, fieldvar) ' = _type, (r = r0 ∧ sk = mkfs(class0, ty, fieldvar) ' ∨ r -- sk ∈ st) ∧ oktype(((r = r0 ∧ sk = mkfs(class0, ty, fieldvar) ') ⊃ val; st[r -- sk]), sk .fs .type, st)
[[CONCRETESIMPRULES : ([CSIMPSEQ : ⊦ (st[rk0, val][rk]) = ((rk = rk0 ⊃ val; st[rk]))], [CSIMPSEQ : ⊦ r -- sk = r0 -- sk0 ↔ ¬ ¬ (r = r0 ∧ sk = sk0)], [CSIMPSEQ : ⊦ rk ∈ st[rk0, val] ↔ rk = rk0 ∨ rk ∈ st])]]