| is_fskey(sk), ∀ sk0, r1, st0, r2, val0. ¬ is_indexkey(sk0) → sk0 = _type ∨ sk0 = _length ∨ (okarrays(r1, fis0, st0[r2 -- sk0, val0]) ↔ okarrays(r1, fis0, st0)) ∨ sk0 ∈ fis0 ⊦ sk = _type, sk = _length, okarrays(r, (sk0 × val0) ' + fis0, st[r0 -- sk, val]) ↔ okarrays(r, (sk0 × val0) ' + fis0, st), sk ∈ (sk0 × val0) ', sk ∈ fis0 |
⊦ okarrays(r, (sk × val) ' + fis, st) ↔ ¬ ¬ ( is_integervalue(val) ∧ is_fskey(sk) ∧ is_arraytype(sk .fs .type) ∧ okarray(st[r -- sk], sk .fs .type .type, val .intval, st) ∧ okarrays(r, fis, st))
⊦ sk ≠ _length ∧ sk ≠ _type ∧ is_fskey(sk) → (okarray(val, ty, i, st[r -- sk, val0]) ↔ okarray(val, ty, i, st))
is_fskey(sk), is_integervalue(val0), is_arraytype(sk0 .fs .type), okarray(st[r -- sk0], sk0 .fs .type .type, val0 .intval, st), ∀ sk0, r1, st0, r2, val0. ¬ is_indexkey(sk0) → sk0 = _type ∨ sk0 = _length ∨ (okarrays(r1, fis0, st0[r2 -- sk0, val0]) ↔ okarrays(r1, fis0, st0)) ∨ sk0 ∈ fis0 ⊦ sk = sk0, sk = _type, sk = _length, is_fskey(sk0) ∧ okarrays(r, fis0, st[r0 -- sk, val]) ↔ ¬ is_indexkey(sk0) ∧ okarrays(r, fis0, st), sk ∈ fis0
[[CONCRETESIMPRULES : ([CSIMPSEQ : ⊦ sk ≠ sk0 → (st[r -- sk, val][r0 -- sk0]) = st[r0 -- sk0]], [CSIMPSEQ : ⊦ sk ∈ (sk0 × val) ' ↔ sk = sk0], [CSIMPSEQ : ⊦ ¬ is_fskey(sk) ↔ is_indexkey(sk)], [CSIMPSEQ : ⊦ (fis + fis0) + fis1 = fis + fis0 + fis1])]]