| ⊦ r ≠ jvmref → okarray(refval(r), byte_type, 1, addarray(r, byte_type, byteval(by) ', st)) |
⊦ okarray(val, ty, i, st) ↔ okreftype(val, mkarraytype(ty), st) ∧ val .refval ≠ jvmref ∧ (val .refval -- _length) × intval(i) ∈ st ∧ 0 ≤ i ∧ is_arrayref(val .refval, i, st) ∧ (∀ j. 0 ≤ j ∧ j < i → oktype(st[val .refval -- j '], ty, st))
⊦ okreftype(refval(r), mkarraytype(ty), addarray(r, ty, vals, st))
⊦ r -- _length ∈ addarray(r, ty, vals, st)
⊦ (addarray(r, ty, vals, st)[r -- _length]) = intval(n→i(# vals))
⊦ r -- j ' ∈ addarray(r, ty, vals, st) ↔ r -- j ' ∈ st ∨ 0 ≤ j ∧ j < n→i(# vals)
⊦ (addarray(r, ty, val ', st)[r -- 0 ']) = val
[[CONCRETESIMPRULES : ([CSIMPSEQ : ⊦ refval(r) .refval = r], [CSIMPSEQ : ⊦ rk × val ∈ st ↔ ¬ ¬ (rk ∈ st ∧ st[rk] = val)], [CSIMPSEQ : ⊦ # val ' = 0 +1], [CSIMPSEQ : ⊦ intval(i) = intval(i0) ↔ i = i0], [CSIMPSEQ : ⊦ is_arrayref(r, 1, st) ↔ r -- 0 ' ∈ st], [CSIMPSEQ : ⊦ 0 ≤ i → (i < 1 ↔ i = 0)], [CSIMPSEQ : ⊦ oktype(val, byte_type, st) ↔ is_bytevalue(val)], [CSIMPSEQ : ⊦ is_bytevalue(byteval(by))])], [EXTRATERMS : (addarray(r, byte_type, byteval(by) ', st), 1, byte_type, refval(r))]]