| is_array(str, r, addarray(r, ty, i, st)) ∧ (addarray(r, ty, i, st)[r -- _type]) .type ≤ mkarraytype(ty), newref(r, st), refs0 = [] ∨ (∃ i0. 0 ≤ i0 ∧ i0 < (addarray(r, ty, i, st)[r -- _length]) .intval ∧ is_referencevalue(addarray(r, ty, i, st)[r -- i0 ']) ∧ refs0 .first = (addarray(r, ty, i, st)[r -- i0 ']) .refval ∧ validrefs(str, refs0, (addarray(r, ty, i, st)[r -- _type]) .type .type, addarray(r, ty, i, st))), is_valid_ref(str, r, addarray(r, ty, i, st)) ⊦ r = jvmref, ¬ r ∈ refs0 ∧ ¬ dups(refs0) |
newref(r, st), is_valid_ref(str, r, addarray(r, ty, i, st)), type∃(str, ty), 0 ≤ i, refs0 = [] ∨ 0 ≤ i0 ∧ i0 < i ∧ is_referencevalue(initial_value(ty)) ∧ refs0 .first = jvmref ∧ validrefs(str, refs0, ty, addarray(r, ty, i, st)) ⊦ r = jvmref, ty .jtelemtype = void_type, ty .jtelemtype = abstract_type, ¬ r ∈ refs0 ∧ ¬ dups(refs0)
[[CONCRETESIMPRULES : ([CSIMPFORWARD : ⊦ i ≤ j ∧ 0 ≤ i → 0 ≤ j], [CSIMPSEQ : ⊦ mkarraytype(ty) .type = ty], [CSIMPSEQ : ⊦ refval(r) .refval = r], [CSIMPSEQ : ⊦ is_referencevalue (initial_value(ty)) → initial_value(ty) = refval(jvmref)], [CSIMPSEQ : ⊦ 0 ≤ j ∧ j < i → (addarray(r, ty, i, st) [r -- j ' ] ) = initial_value(ty)], [CSIMPSEQ : ⊦ intval(i) .intval = i], [CSIMPSEQ : ⊦ (addarray(r, ty, i, st) [r -- _length ] ) = intval(i)], [CSIMPSEQ : ⊦ ty ≤ ty], [CSIMPSEQ : ⊦ mkarraytype(ty) ≤ mkarraytype(ty0) ↔ ty ≤ ty0], [CSIMPSEQ : ⊦ typeval(ty) .type = ty], [CSIMPSEQ : ⊦ (addarray(r, ty, i, st) [r -- _type ] ) = typeval(mkarraytype(ty))], [CSIMPSEQ : ⊦ is_array (str, r, addarray(r, ty, i, st)) ↔ ¬ ¬ ( type∃(str, ty) ∧ 0 ≤ i ∧ r ≠ jvmref ∧ ty .jtelemtype ≠ void_type ∧ ty .jtelemtype ≠ abstract_type)])]]