| compatrefs(str, st), compatstatic(str, st), compatmode(str, st), newref(r, st), is_predefined_class(class) ⊦ ∀ r0. r0 ≠ jvmref ∧ r0 -- _type ∈ addobj(r, class, [], st) ∧ is_typevalue(addobj(r, class, [], st)[r0 -- _type]) → ( is_classtype((addobj(r, class, [], st)[r0 -- _type]) .type) ∧ class+∃(str, (addobj(r, class, [], st)[r0 -- _type]) .type .class) → compatobj(str, r0, addobj(r, class, [], st))) ∧ ( is_arraytype((addobj(r, class, [], st)[r0 -- _type]) .type) ∧ ( ¬ has_classtype((addobj(r, class, [], st)[r0 -- _type]) .type) ∨ tdname+∃(str, (addobj(r, class, [], st)[r0 -- _type]) .type .jtelemtype .class)) → compatarray(str, r0, addobj(r, class, [], st))), r = jvmref |
r0 -- _type ∈ addobj(r, class, [], st), is_typevalue(addobj(r, class, [], st)[r0 -- _type]), compatrefs(str, st), compatstatic(str, st), compatmode(str, st), newref(r, st), is_predefined_class(class), r0 ∈ addobj(r, class, [], st) ⊦ r0 = jvmref, r = jvmref, ( is_classtype((addobj(r, class, [], st)[r0 -- _type]) .type) ∧ class+∃(str, (addobj(r, class, [], st)[r0 -- _type]) .type .class) → compatobj(str, r0, addobj(r, class, [], st))) ∧ ( is_arraytype((addobj(r, class, [], st)[r0 -- _type]) .type) ∧ ( ¬ has_classtype((addobj(r, class, [], st)[r0 -- _type]) .type) ∨ tdname+∃(str, (addobj(r, class, [], st)[r0 -- _type]) .type .type .jtelemtype .class)) → compatarray(str, r0, addobj(r, class, [], st)))
[[CONCRETESIMPRULES : ([CSIMPFORWARD : ⊦ r -- sk ∈ st → r ∈ st], [CSIMPSEQ : ⊦ is_arraytype(ty) → ty .jtelemtype = ty .type .jtelemtype])]]