| st[r -- sk0] = refval(jvmref), fits(jvmref, sks0, st), is_valid_ref(str, r, st), is_classtype(st[r -- _type] .type) → sk0 ∈ instfields(st[r -- _type] .type .class), is_arraytype(st[r -- _type] .type) → is_indexkey(sk0) ∧ 0 ≤ sk0 .index ∧ sk0 .index < st[r -- _length] .intval, ∀ r, st, sk, val, str. fits(r, sks0, st) → r = jvmref ∨ (st[jvmref -- sk, val][r -- sks0]) = st[r -- sks0] ∨ junkref(str, r, st) ⊦ sks0 = [], (st[jvmref -- sk, val][jvmref -- sks0]) = st[jvmref -- sks0], r = jvmref, junkref(str, r, st) |
∀ st, r, sk0, str, sk, val. st[r -- sk0] = refval(jvmref) ∧ fits(jvmref, sks, st) ∧ is_valid_ref(str, r, st) ∧ (is_classtype(st[r -- _type] .type) → sk0 ∈ instfields(st[r -- _type] .type .class)) ∧ (is_arraytype(st[r -- _type] .type) → is_indexkey(sk0) ∧ 0 ≤ sk0 .index ∧ sk0 .index < st[r -- _length] .intval) ∧ (∀ r, st, sk, val, str. fits(r, sks, st) → r = jvmref ∨ (st[jvmref -- sk, val][r -- sks]) = st[r -- sks] ∨ junkref(str, r, st)) → sks = [] ∨ (st[jvmref -- sk, val][jvmref -- sks]) = st[jvmref -- sks] ∨ r = jvmref ∨ junkref(str, r, st), st[r -- sk0] = refval(jvmref), fits(jvmref, sk1 + sks, st), is_valid_ref(str, r, st), is_classtype(st[r -- _type] .type) → sk0 ∈ instfields(st[r -- _type] .type .class), is_arraytype(st[r -- _type] .type) → is_indexkey(sk0) ∧ 0 ≤ sk0 .index ∧ sk0 .index < st[r -- _length] .intval, ∀ r, st, sk, val, str. fits(r, sk1 + sks, st) → r = jvmref ∨ (st[jvmref -- sk, val][r -- (sk1 + sks)]) = st[r -- (sk1 + sks)] ∨ junkref(str, r, st) ⊦ sk1 + sks = [], (st[jvmref -- sk, val][jvmref -- (sk1 + sks)]) = st[jvmref -- (sk1 + sks)], r = jvmref, junkref(str, r, st)
[[CONCRETESIMPRULES : ([CSIMPGEN : storekeys generated by [], +;])]]