| ∀ r, r0, st, sk0, val. r = r0 ∨ (goodfieldsandtypes(r, sks0, st[r0 -- sk0, val]) ↔ goodfieldsandtypes(r, sks0, st)) ⊦ r = r0, goodfieldsandtypes(r, sk + sks0, st[r0 -- sk0, val]) ↔ goodfieldsandtypes(r, sk + sks0, st) |
⊦ 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))
∀ r, r0, st, sk0, val. r = r0 ∨ (goodfieldsandtypes(r, sks0, st[r0 -- sk0, val]) ↔ goodfieldsandtypes(r, sks0, st)) ⊦ r = r0, goodfieldandtype(r, sk, st[r0 -- sk0, val]) ∧ goodfieldsandtypes(r, sks0, st[r0 -- sk0, val]) ↔ goodfieldandtype(r, sk, st) ∧ goodfieldsandtypes(r, sks0, st)
[[CONCRETESIMPRULES : ([CSIMPSEQ : ⊦ (sks + sks0) + sks1 = sks + sks0 + sks1], [CSIMPSEQ : ⊦ sk + sks = sk ' + sks])]]