| ∀ r, st. okarrays(r, fis0, st) ↔ (∀ sk, val. sk × val ∈ fis0 → is_integervalue(val) ∧ is_fskey(sk) ∧ is_arraytype(sk .fs .type) ∧ okarray(st[r -- sk], sk .fs .type .type, val .intval, st)) ⊦ okarrays(r, fv + fis0, st) ↔ (∀ sk, val. sk × val ∈ fv + fis0 → is_integervalue(val) ∧ is_fskey(sk) ∧ is_arraytype(sk .fs .type) ∧ okarray(st[r -- sk], sk .fs .type .type, val .intval, st)) |
∀ r, st. okarrays(r, fis0, st) ↔ (∀ sk, val. sk × val ∈ fis0 → is_integervalue(val) ∧ is_fskey(sk) ∧ is_arraytype(sk .fs .type) ∧ okarray(st[r -- sk], sk .fs .type .type, val .intval, st)) ⊦ okarrays(r, fv ' + fis0, st) ↔ (∀ sk, val. sk × val = fv ∨ sk × val ∈ fis0 → is_integervalue(val) ∧ ¬ is_indexkey(sk) ∧ is_arraytype(sk .fs .type) ∧ okarray(st[r -- sk], sk .fs .type .type, val .intval, st))
[[CONCRETESIMPRULES : ([CSIMPSEQ : ⊦ ¬ is_fskey(sk) ↔ is_indexkey(sk)], [CSIMPSEQ : ⊦ (fis + fis0) + fis1 = fis + fis0 + fis1], [CSIMPSEQ : ⊦ fv ∈ fv0 ' ↔ fv = fv0], [CSIMPSEQ : ⊦ fv ∈ fis + fis0 ↔ ¬ ¬ (fv ∈ fis ∨ fv ∈ fis0)], [CSIMPSEQ : ⊦ fv + fis = fv ' + fis])]]