| ⊦ r = jvmref, is_arraytype((st[_mode, val][r -- _type]) .type) ∧ r -- _length ∈ st[_mode, val] ∧ is_integervalue(st[_mode, val][r -- _length]) ∧ 0 ≤ (st[_mode, val][r -- _length]) .intval ∧ is_arrayref(r, (st[_mode, val][r -- _length]) .intval, st[_mode, val]) ∧ (∀ j. 0 ≤ j ∧ j < (st[_mode, val][r -- _length]) .intval → compat(str, st[_mode, val][r -- j '], (st[_mode, val][r -- _type]) .type .type, st[_mode, val])) ↔ compatarray(str, r, st) |
⊦ r = jvmref, is_arraytype(st[r -- _type] .type) ∧ r -- _length ∈ st ∧ is_integervalue(st[r -- _length]) ∧ 0 ≤ st[r -- _length] .intval ∧ is_arrayref(r, st[r -- _length] .intval, st) ∧ (∀ j. ¬ j < 0 ∧ ¬ st[r -- _length] .intval ≤ j → compat(str, st[r -- j '], st[r -- _type] .type .type, st[_mode, val])) ↔ compatarray(str, r, st)
[[CONCRETESIMPRULES : ([CSIMPSEQ : ⊦ ¬ i < j ↔ j ≤ i], [CSIMPSEQ : ⊦ ¬ i ≤ j ↔ j < i], [CSIMPSEQ : ⊦ is_arrayref(r, i, st[_mode, val]) ↔ is_arrayref(r, i, st)], [CSIMPSEQ : ⊦ r ≠ jvmref → ( r -- sk ∈ st[_mode, val] ↔ r -- sk ∈ st)], [CSIMPSEQ : ⊦ r ≠ jvmref → (st[_mode, val][r -- sk]) = st[r -- sk]])]]