| sk .fs = mkfs(class, ty, fieldvar), oktype(val, ty, st), goodfieldandtype(r, sk, 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 = _type, goodfieldandtype(r0, sk0, st[r -- sk, val]) ∧ goodfieldsandtypes(r0, sks0, st[r -- sk, val]) ↔ goodfieldandtype(r0, sk0, st) ∧ goodfieldsandtypes(r0, sks0, st) |
⊦ sk ≠ _type ∧ goodfieldandtype(r, sk, st) ∧ oktype(val, sk .fs .type, st) → (goodfieldandtype(r0, sk0, st[r -- sk, val]) ↔ goodfieldandtype(r0, sk0, st))
sk ≠ _type ∧ goodfieldandtype(r, sk, st) ∧ oktype(val, sk .fs .type, st), sk .fs = mkfs(class, ty, fieldvar), oktype(val, ty, st), goodfieldandtype(r, sk, 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 = _type, goodfieldandtype(r0, sk0, st) ∧ goodfieldsandtypes(r0, sks0, st[r -- sk, val]) ↔ goodfieldandtype(r0, sk0, st) ∧ goodfieldsandtypes(r0, sks0, st)
[[CONCRETESIMPRULES : ([CSIMPSEQ : ⊦ mkfs(class, ty, fieldvar) .type = ty])], [EXTRATERMS : (val, sk, r, st, sk0, r0)]]