| 0 ≤ n→i(# vals) + i, 0 ≤ j, 0 ≤ i, i ≤ n→i(# vals0), j ≤ n→i(# vals) + i, ∀ val. val ∈ vals ∨ val ∈ vals0 → is_bytevalue(val) ⊦ r = jvmref, okreftype(refval(r), mkarraytype(byte_type), putArray(vals, r, i, addarray(r, byte_type, vals0, st))[r -- _length, intval(j)]) ∧ (0 ≤ j1 ∧ j1 < j → r -- j1 ' ∈ st ∨ ¬ n→i(# vals0) ≤ j1 ∨ ¬ j1 < i ∧ ¬ i + n→i(# vals) ≤ j1) ∧ (0 ≤ j0 ∧ j0 < j → is_bytevalue(putArray(vals, r, i, addarray(r, byte_type, vals0, st))[r -- j0 '])) |
⊦ okreftype(val, ty, st) ↔ is_referencevalue(val) ∧ (val .refval ≠ jvmref → val .refval -- _type ∈ st ∧ is_typevalue(st[val .refval -- _type]) ∧ st[val .refval -- _type] .type ≤ ty)
0 ≤ n→i(# vals) + i, 0 ≤ j, 0 ≤ i, i ≤ n→i(# vals0), j ≤ n→i(# vals) + i, ∀ val. val ∈ vals ∨ val ∈ vals0 → is_bytevalue(val) ⊦ r = jvmref, is_referencevalue(refval(r)) ∧ ( refval(r) .refval ≠ jvmref → refval(r) .refval -- _type ∈ (putArray(vals, r, i, addarray(r, byte_type, vals0, st))[r -- _length, intval(j)]) ∧ is_typevalue(putArray(vals, r, i, addarray(r, byte_type, vals0, st))[r -- _length, intval(j)][refval(r) .refval -- _type]) ∧ (putArray(vals, r, i, addarray(r, byte_type, vals0, st))[r -- _length, intval(j)][refval(r) .refval -- _type]) .type ≤ mkarraytype(byte_type)) ∧ (0 ≤ j1 ∧ j1 < j → r -- j1 ' ∈ st ∨ ¬ n→i(# vals0) ≤ j1 ∨ ¬ j1 < i ∧ ¬ i + n→i(# vals) ≤ j1) ∧ (0 ≤ j0 ∧ j0 < j → is_bytevalue(putArray(vals, r, i, addarray(r, byte_type, vals0, st))[r -- j0 ']))
[[CONCRETESIMPRULES : ()], [EXTRATERMS : (putArray (vals, r, i, addarray(r, byte_type, vals0, st)) [r -- _length, intval(j) ], mkarraytype(byte_type), refval(r))]]