| oktype(val, ty, st), goodfieldandtype(r, sk, st) ⊦ mkfs(class0, ty, fieldvar) ' = _type, goodfieldandtype(r, sk, st[r0 -- mkfs(class0, ty, fieldvar) ', val]) |
⊦ is_fskey(sk) → (goodfieldandtype(r, sk, st) ↔ r -- sk ∈ st ∧ oktype(st[r -- sk], sk .fs .type, st))
¬ is_fskey(sk), oktype(val, ty, st), goodfieldandtype(r, sk, st) ⊦ mkfs(class0, ty, fieldvar) ' = _type, goodfieldandtype(r, sk, st[r0 -- mkfs(class0, ty, fieldvar) ', val])
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])
[[CONCRETESIMPRULES : ()], [EXTRATERMS : (st[r0 -- mkfs(class0, ty, fieldvar) ', val], sk, r)]]