| junkref(str, r, addarray(r, ty, vals, st)), validreflist(str, vals, ty, st), newref(r, st), type∃(str, ty), is_reftype(ty) ⊦ ty .jtelemtype = void_type, ty .jtelemtype = abstract_type, r = jvmref |
⊦ is_array(str, r, st) → ( junkref(str, r, st) ↔ (∃ i. 0 ≤ i ∧ i < st[r -- _length] .intval ∧ is_referencevalue(st[r -- i ']) ∧ st[r -- i '] .refval ≠ jvmref ∧ (¬ st[st[r -- i '] .refval -- _type] .type ≤ st[r -- _type] .type .type ∨ junkref(str, st[r -- i '] .refval, st))))
¬ is_array(str, r, addarray(r, ty, vals, st)), junkref(str, r, addarray(r, ty, vals, st)), validreflist(str, vals, ty, st), newref(r, st), type∃(str, ty), is_reftype(ty) ⊦ ty .jtelemtype = void_type, ty .jtelemtype = abstract_type, r = jvmref
is_array(str, r, addarray(r, ty, vals, st)), ∃ i. 0 ≤ i ∧ i < (addarray(r, ty, vals, st)[r -- _length]) .intval ∧ is_referencevalue(addarray(r, ty, vals, st)[r -- i ']) ∧ (addarray(r, ty, vals, st)[r -- i ']) .refval ≠ jvmref ∧ ( ¬ (addarray(r, ty, vals, st)[(addarray(r, ty, vals, st)[r -- i ']) .refval -- _type]) .type ≤ (addarray(r, ty, vals, st)[r -- _type]) .type .type ∨ junkref(str, (addarray(r, ty, vals, st)[r -- i ']) .refval, addarray(r, ty, vals, st))), validreflist(str, vals, ty, st), newref(r, st), type∃(str, ty), is_reftype(ty) ⊦ ty .jtelemtype = void_type, ty .jtelemtype = abstract_type, r = jvmref
[[CONCRETESIMPRULES : ()], [EXTRATERMS : (addarray(r, ty, vals, st), r, str)]]