| st[r0 -- _type] .type = mkarraytype(ty), is_referencevalue(st[r0 -- i ', refval(r2)][r0 -- i0 ']), i0 < st[r0 -- _length] .intval, is_array(str, r0, st[r0 -- i ', refval(r2)]), is_array(str, r0, st), i < st[r0 -- _length] .intval, validref(str, r2, ty, st), 0 < st[r0 -- _length] .intval, 0 ≤ i, 0 ≤ i0, validrefs(str, (st[r0 -- i ', refval(r2)][r0 -- i0 ']) .refval ' + refs, ty, st), r2 = jvmref → is_reftype(ty) ⊦ r0 = jvmref, r0 = ((st[r0 -- i ', refval(r2)][r0 -- i0 ']) .refval ' + refs) .last, r0 = (st[r0 -- i ', refval(r2)][r0 -- i0 ']) .refval, path∃(str, r0, ((st[r0 -- i ', refval(r2)][r0 -- i0 ']) .refval ' + refs) .last, st), path∃(str, r2, ((st[r0 -- i ', refval(r2)][r0 -- i0 ']) .refval ' + refs) .last, st), r0 ∈ refs, dups(refs), (st[r0 -- i ', refval(r2)][r0 -- i0 ']) .refval ∈ refs |
(st[r0 -- i ', refval(r2)][r0 -- i0 ']) = refval(r), st[r0 -- _type] .type = mkarraytype(ty), is_referencevalue(st[r0 -- i ', refval(r2)][r0 -- i0 ']), i0 < st[r0 -- _length] .intval, is_array(str, r0, st[r0 -- i ', refval(r2)]), is_array(str, r0, st), i < st[r0 -- _length] .intval, validref(str, r2, ty, st), 0 < st[r0 -- _length] .intval, 0 ≤ i, 0 ≤ i0, validrefs(str, r ' + refs, ty, st), r2 = jvmref → is_reftype(ty) ⊦ r0 = jvmref, r0 = (r ' + refs) .last, r0 = r, path∃(str, r0, (r ' + refs) .last, st), path∃(str, r2, (r ' + refs) .last, st), r0 ∈ refs, dups(refs), r ∈ refs
[[CONCRETESIMPRULES : ([CSIMPELIM : ⊦ is_referencevalue(val) → ( r = val .refval ↔ val = refval(r))])], [EXTRATERMS : (st[r0 -- i ', refval(r2)][r0 -- i0 '], r)]]