| ⊦ r = r0, r0 -- mkfs(class, ty0, fieldvar) ' ∈ st ∧ oktype(st[r0 -- mkfs(class, ty0, fieldvar) '], ty0, addarray(r, ty, vals, st)) ↔ goodfieldandtype(r0, mkfs(class, ty0, fieldvar) ', st) |
⊦ is_fskey(sk) → (goodfieldandtype(r, sk, st) ↔ r -- sk ∈ st ∧ oktype(st[r -- sk], sk .fs .type, st))
is_fskey(mkfs(class, ty0, fieldvar) ') ⊦ r = r0, r0 -- mkfs(class, ty0, fieldvar) ' ∈ st ∧ oktype(st[r0 -- mkfs(class, ty0, fieldvar) '], ty0, addarray(r, ty, vals, st)) ↔ r0 -- mkfs(class, ty0, fieldvar) ' ∈ st ∧ oktype(st[r0 -- mkfs(class, ty0, fieldvar) '], mkfs(class, ty0, fieldvar) ' .fs .type, st)
[[CONCRETESIMPRULES : ([CSIMPSEQ : ⊦ is_fskey(fs ')])], [EXTRATERMS : (st, mkfs(class, ty0, fieldvar) ', r0)]]