| sk .fs = mkfs(class, ty, fieldvar), oktype(val, ty, st), goodfieldandtype(r, sk, st) ⊦ sk = _type, goodfieldsandtypes(r0, sks, st[r -- sk, val]) ↔ goodfieldsandtypes(r0, sks, st) |
⊦ goodfieldsandtypes(r, [], st)
∀ sk, class, ty, fieldvar, val, st, r, r0. sk .fs = mkfs(class, ty, fieldvar) ∧ oktype(val, ty, st) ∧ goodfieldandtype(r, sk, st) → sk = _type ∨ (goodfieldsandtypes(r0, sks0, st[r -- sk, val]) ↔ goodfieldsandtypes(r0, sks0, st)), sk .fs = mkfs(class, ty, fieldvar), oktype(val, ty, st), goodfieldandtype(r, sk, st) ⊦ sk = _type, goodfieldsandtypes(r0, sk0 + sks0, st[r -- sk, val]) ↔ goodfieldsandtypes(r0, sk0 + sks0, st)
[[CONCRETESIMPRULES : ([CSIMPGEN : storekeys generated by [], +;])]]