| ∃ refs. refs ≠ [] ∧ refs .first = r ∧ junkrefs(str, refs, (addarray(r, ty, vals, st)[r -- _type]) .type, addarray(r, ty, vals, st)), newref(r, st), is_classtype(ty), class∃(str, ty .class), ∀ val. val ∈ vals → ¬ junkref(str, val .refval, st) ∧ is_referencevalue(val) ∧ (val .refval ≠ jvmref → st[val .refval -- _type] .type ≤ ty) ⊦ r = jvmref |
newref(refs .first, st), is_classtype(ty), class∃(str, ty .class), junkrefs(str, refs, mkarraytype(ty), addarray(refs .first, ty, vals, st)), ∀ val. val ∈ vals → ¬ junkref(str, val .refval, st) ∧ is_referencevalue(val) ∧ (val .refval ≠ jvmref → st[val .refval -- _type] .type ≤ ty) ⊦ refs .first = jvmref, refs = []
[[CONCRETESIMPRULES : ([CSIMPFORWARD : ⊦ newref(r, st) → r ≠ jvmref], [CSIMPSEQ : ⊦ typeval(ty) .type = ty], [CSIMPSEQ : ⊦ (addarray(r, ty, vals, st) [r -- _type ] ) = typeval(mkarraytype(ty))])]]