| okarray(val, ty, i, st) ⊦ okreftype(val, mkarraytype(ty), st0 ∪ st) ∧ val .refval ≠ jvmref ∧ (val .refval -- _length) × intval(i) ∈ st0 ∪ st ∧ 0 ≤ i ∧ is_arrayref(val .refval, i, st0 ∪ st) ∧ (∀ j. 0 ≤ j ∧ j < i → oktype((st0 ∪ st)[val .refval -- j '], ty, st0 ∪ st)) |
⊦ val .refval = jvmref → ¬ okarray(val, ty, i, st)
okarray(val, ty, i, st) ⊦ val .refval = jvmref, (0 ≤ j ∧ j < i → oktype((st0 ∪ st)[val .refval -- j '], ty, st0 ∪ st)) ∧ is_arrayref(val .refval, i, st0 ∪ st) ∧ ¬ i < 0 ∧ (st0 ∪ st)[val .refval -- _length] = intval(i) ∧ (val .refval -- _length ∈ st0 ∨ val .refval -- _length ∈ st) ∧ okreftype(val, mkarraytype(ty), st0 ∪ st)
[[CONCRETESIMPRULES : ([CSIMPSEQ : ⊦ ¬ i ≤ j ↔ j < i], [CSIMPSEQ : ⊦ rk ∈ st ∪ st0 ↔ rk ∈ st ∨ rk ∈ st0], [CSIMPSEQ : ⊦ rk × val ∈ st ↔ ¬ ¬ (rk ∈ st ∧ st[rk] = val)])]]