| path∃(str, r, r1, st[r0 -- i ', val]), path∃(str, r, r0, st), i < st[r0 -- _length] .intval, is_referencevalue(val), validref(str, val .refval, st[r0 -- _type] .type .type, st), is_arraytype(st[r0 -- _type] .type), 0 < st[r0 -- _length] .intval, 0 ≤ i, val .refval = jvmref → is_reftype(st[r0 -- _type] .type .type) ⊦ r0 = jvmref, path∃(str, r, r1, st), path∃(str, val .refval, r1, st) |
val = refval(r2), path∃(str, r, r1, st[r0 -- i ', val]), path∃(str, r, r0, st), i < st[r0 -- _length] .intval, is_referencevalue(val), validref(str, r2, st[r0 -- _type] .type .type, st), is_arraytype(st[r0 -- _type] .type), 0 < st[r0 -- _length] .intval, 0 ≤ i, r2 = jvmref → is_reftype(st[r0 -- _type] .type .type) ⊦ r0 = jvmref, path∃(str, r, r1, st), path∃(str, r2, r1, st)
[[CONCRETESIMPRULES : ([CSIMPELIM : ⊦ is_referencevalue(val) → ( r = val .refval ↔ val = refval(r))])], [EXTRATERMS : (val, r2)]]