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