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