| newref(r, st), validrefs(str, r ' + refs0, mkarraytype(ty), addarray(r, ty, i, st)), is_valid_ref(str, r, addarray(r, ty, i, st)) ⊦ r = jvmref, ¬ r ∈ refs0 ∧ ¬ dups(refs0) |
⊦ is_array(str, r, st) ∧ st[r -- _type] .type ≤ ty → ( validrefs(str, r ' + refs, ty, st) ↔ refs = [] ∨ (∃ i. 0 ≤ i ∧ i < st[r -- _length] .intval ∧ is_referencevalue(st[r -- i ']) ∧ refs .first = st[r -- i '] .refval ∧ validrefs(str, refs, st[r -- _type] .type .type, st)))
¬ (is_array(str, r, addarray(r, ty, i, st)) ∧ (addarray(r, ty, i, st)[r -- _type]) .type ≤ mkarraytype(ty)), newref(r, st), validrefs(str, r ' + refs0, mkarraytype(ty), addarray(r, ty, i, st)), is_valid_ref(str, r, addarray(r, ty, i, st)) ⊦ r = jvmref, ¬ r ∈ refs0 ∧ ¬ dups(refs0)
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)
[[CONCRETESIMPRULES : ()], [EXTRATERMS : (addarray(r, ty, i, st), mkarraytype(ty), refs0, r, str)]]