| r2 ∈ st0, 0 ≤ i2, 0 ≤ i3, okarray(r2, ty, st0), i2 + i3 ≤ st0[r2 -- _length] .intval, ∀ j. ¬ j < 0 ∧ ¬ i3 ≤ j → st0[r1 -- (i1 + j) '] = st0[r2 -- (i2 + j) '] ⊦ r2 = jvmref, (r2 -- i ' ∈ arraycopy(r1, i1, r2, i2, i3, st0) ↔ r2 -- i ' ∈ st0) ∧ (arraycopy(r1, i1, r2, i2, i3, st0)[r2 -- i ']) = st0[r2 -- i '] |
⊦ okarray(r, ty, st) ↔ okreftype(refval(r), mkarraytype(ty), st) ∧ r ≠ jvmref ∧ r -- _length ∈ st ∧ is_integervalue(st[r -- _length]) ∧ 0 ≤ st[r -- _length] .intval ∧ is_arrayref(r, st[r -- _length] .intval, st) ∧ (∀ j. 0 ≤ j ∧ j < st[r -- _length] .intval → oktype(st[r -- j '], ty, st))
r2 ∈ st0, 0 ≤ i2, 0 ≤ i3, okreftype(refval(r2), mkarraytype(ty), st0) ∧ r2 ≠ jvmref ∧ r2 -- _length ∈ st0 ∧ is_integervalue(st0[r2 -- _length]) ∧ 0 ≤ st0[r2 -- _length] .intval ∧ is_arrayref(r2, st0[r2 -- _length] .intval, st0) ∧ (∀ j. 0 ≤ j ∧ j < st0[r2 -- _length] .intval → oktype(st0[r2 -- j '], ty, st0)), i2 + i3 ≤ st0[r2 -- _length] .intval, ∀ j. ¬ j < 0 ∧ ¬ i3 ≤ j → st0[r1 -- (i1 + j) '] = st0[r2 -- (i2 + j) '] ⊦ r2 = jvmref, (r2 -- i ' ∈ arraycopy(r1, i1, r2, i2, i3, st0) ↔ r2 -- i ' ∈ st0) ∧ (arraycopy(r1, i1, r2, i2, i3, st0)[r2 -- i ']) = st0[r2 -- i ']
[[CONCRETESIMPRULES : ()], [EXTRATERMS : (st0, ty, r2)]]