| ⊦ sks = [], fits(r, sks, st) ↔ r ≠ jvmref ∧ is_referencevalue(st[r -- sks .first]) ∧ (is_classtype(st[r -- _type] .type) → sks .first ∈ instfields(st[r -- _type] .type .class)) ∧ (is_arraytype(st[r -- _type] .type) → ¬ is_fskey(sks .first) ∧ ¬ sks .first .index < 0 ∧ ¬ st[r -- _length] .intval ≤ sks .first .index) ∧ fits(st[r -- sks .first] .refval, sks .rest, st) |
sks = sk + sks0 ⊦ sks = [], fits(r, sks, st) ↔ r ≠ jvmref ∧ is_referencevalue(st[r -- sk]) ∧ (is_classtype(st[r -- _type] .type) → sk ∈ instfields(st[r -- _type] .type .class)) ∧ (is_arraytype(st[r -- _type] .type) → ¬ is_fskey(sk) ∧ ¬ sk .index < 0 ∧ ¬ st[r -- _length] .intval ≤ sk .index) ∧ fits(st[r -- sk] .refval, sks0, st)
[[CONCRETESIMPRULES : ([CSIMPELIM : sks ≠ [] ⊦ sk = sks .first ∧ sks0 = sks .rest ↔ sks = sk + sks0])], [EXTRATERMS : (sks, sk, sks0)]]