| ∀ val, ty, st, r, class0, fieldvar, r0. oktype(val, ty, st) ∧ goodfieldsandtypes(r, sks0, st) → mkfs(class0, ty, fieldvar) ' = _type ∨ goodfieldsandtypes(r, sks0, st[r0 -- mkfs(class0, ty, fieldvar) ', val]), oktype(val, ty, st), goodfieldsandtypes(r, sk + sks0, st) ⊦ mkfs(class0, ty, fieldvar) ' = _type, goodfieldsandtypes(r, sk + sks0, st[r0 -- mkfs(class0, ty, fieldvar) ', val]) |
⊦ goodfieldsandtypes(r, sk ' + sks, st) ↔ goodfieldandtype(r, sk, st) ∧ goodfieldsandtypes(r, sks, st)
⊦ goodfieldsandtypes(r, sk ' + sks, st) ↔ ¬ ¬ (goodfieldandtype(r, sk, st) ∧ goodfieldsandtypes(r, sks, st))
⊦ ¬ goodfieldandtype(r, sk, st[r0 -- mkfs(class0, ty, fieldvar) ', val]) ∧ mkfs(class0, ty, fieldvar) ' ≠ _type ∧ oktype(val, ty, st) → ¬ goodfieldandtype(r, sk, st)
oktype(val, ty, st), goodfieldandtype(r, sk, st), goodfieldsandtypes(r, sks0, st), goodfieldandtype(r, sk, st[r0 -- mkfs(class0, ty, fieldvar) ', val]), ∀ val, ty, st, r, class0, fieldvar, r0. oktype(val, ty, st) ∧ goodfieldsandtypes(r, sks0, st) → mkfs(class0, ty, fieldvar) ' = _type ∨ goodfieldsandtypes(r, sks0, st[r0 -- mkfs(class0, ty, fieldvar) ', val]) ⊦ mkfs(class0, ty, fieldvar) ' = _type, goodfieldsandtypes(r, sks0, st[r0 -- mkfs(class0, ty, fieldvar) ', val])
[[CONCRETESIMPRULES : ([CSIMPSEQ : ⊦ (sks + sks0) + sks1 = sks + sks0 + sks1], [CSIMPSEQ : ⊦ sk + sks = sk ' + sks])]]