| sk .fs = mkfs(class, ty, fieldvar), sk0 .fs .type = mkarraytype(ty0), goodfieldandtype(r0, sk, st), oktype(val, ty, st), ∀ sk, class, ty, fieldvar, val, st, r0, r. sk .fs = mkfs(class, ty, fieldvar) ∧ oktype(val, ty, st) ∧ goodfieldandtype(r0, sk, st) → sk = _type ∨ sk = _length ∨ (okarrays(r, fis0, st[r0 -- sk, val]) ↔ okarrays(r, fis0, st)) ∨ sk ∈ fis0 ⊦ okarrays(r, fis0, st[r0 -- sk, val]) ∧ okarray(st[r -- sk0], ty0, i, st[r0 -- sk, val]) ∧ is_fskey(sk0) ↔ okarray(st[r -- sk0], ty0, i, st) ∧ okarrays(r, fis0, st) ∧ ¬ is_indexkey(sk0), sk = _length, sk = _type, sk = sk0, sk ∈ fis0 |
sk0 .fs = mkfs(class0, ty1, fieldvar0), sk .fs = mkfs(class, ty, fieldvar), ty1 = mkarraytype(ty0), goodfieldandtype(r0, sk, st), oktype(val, ty, st), ∀ sk, class, ty, fieldvar, val, st, r0, r. sk .fs = mkfs(class, ty, fieldvar) ∧ oktype(val, ty, st) ∧ goodfieldandtype(r0, sk, st) → sk = _type ∨ sk = _length ∨ (okarrays(r, fis0, st[r0 -- sk, val]) ↔ okarrays(r, fis0, st)) ∨ sk ∈ fis0 ⊦ okarrays(r, fis0, st[r0 -- sk, val]) ∧ okarray(st[r -- sk0], ty0, i, st[r0 -- sk, val]) ∧ is_fskey(sk0) ↔ okarray(st[r -- sk0], ty0, i, st) ∧ okarrays(r, fis0, st) ∧ ¬ is_indexkey(sk0), sk = _length, sk = _type, sk = sk0, sk ∈ fis0
[[CONCRETESIMPRULES : ([CSIMPELIM : ⊦ class = fs .class ∧ ty = fs .type ∧ fieldvar = fs .field ↔ fs = mkfs(class, ty, fieldvar)])], [EXTRATERMS : (sk0 .fs, class0, ty1, fieldvar0)]]