| okarrays(r, (sk × val) ' + [], 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, [], st), sk .fs = mkfs(class, ty, fieldvar) ⊦ okarrays(r, (sk × val) ', st) ↔ is_integervalue(val) ∧ ¬ is_indexkey(sk) ∧ is_arraytype(ty) ∧ okarray(st[r -- sk], ty .type, val .intval, st) |
⊦ okarrays(r, [], st)
sk .fs = mkfs(class, ty, fieldvar), okarrays(r, (sk × val) ', st) ↔ is_integervalue(val) ∧ is_fskey(sk) ∧ is_arraytype(ty) ∧ okarray(st[r -- sk], ty .type, val .intval, st) ⊦ okarrays(r, (sk × val) ', st) ↔ is_integervalue(val) ∧ ¬ is_indexkey(sk) ∧ is_arraytype(ty) ∧ okarray(st[r -- sk], ty .type, val .intval, st)
[[CONCRETESIMPRULES : ([CSIMPSEQ : ⊦ mkfs(class, ty, fieldvar) .type = ty], [CSIMPSEQ : ⊦ (fis + fis0) + fis1 = fis + fis0 + fis1], [CSIMPSEQ : ⊦ fis + [] = fis])]]