| vals ≠ [], is_fskey(sk), r -- sk ∈ (addarray(r, ty, vals .butlast, st)[r -- n→i((# vals) -1) ', vals .last][r -- _length, intval(n→i(# vals))]), ∀ st, ty, sk, r, vals0. # vals0 < # vals → (r -- sk ∈ addarray(r, ty, vals0, st) ∧ is_fskey(sk) → sk = _length ∨ sk = _type ∨ r -- sk ∈ st) ⊦ sk = _type, sk = _length, r -- sk ∈ st |
⊦ r ∈ addarray(r, ty0, vals, st)
r -- sk ∈ addarray(r, ty, vals .butlast, st), is_fskey(sk), ∀ st, ty, sk, r, vals0. # vals0 < # vals → (r -- sk ∈ addarray(r, ty, vals0, st) ∧ is_fskey(sk) → sk = _length ∨ sk = _type ∨ r -- sk ∈ st) ⊦ vals = [], sk = _length, sk = _type, r -- sk ∈ st
[[CONCRETESIMPRULES : ([CSIMPFORWARD : ⊦ r -- sk ∈ st → r ∈ st], [CSIMPSEQ : ⊦ _length ≠ i '], [CSIMPSEQ : ⊦ _type ≠ i '], [CSIMPSEQ : ⊦ ¬ is_fskey(i ')], [CSIMPSEQ : sk ≠ sk0 ⊦ r -- sk ∈ st[r -- sk0, val] ↔ r -- sk ∈ st], [CSIMPSEQ : ⊦ n -1 = n - 1])]]