| ty2 .jtelemtype = mkclasstype(`java.lang.Object' .class), ty0 ≤ ty2 ∧ type∃(str, ty2) ∧ type∃(str, ty0) ∨ contains(str, ty2, ty0), type∃(str, ty0), ∀ ty0, str, ty1. i→n(ty1 .jtdims) < i→n(mkarraytype(ty2) .jtdims) → ( contains(str, ty1, ty0) ∧ ty1 .jtelemtype = mkclasstype(`java.lang.Object' .class) → type∃(str, ty0) ∧ (is_classtype(ty0) ∨ is_arraytype(ty0)) ∧ is_arraytype(ty1) ∨ contains(str, mkclasstype(`java.lang.Object' .class), ty0)) ⊦ contains(str, mkclasstype(`java.lang.Object' .class), ty0), is_classtype(ty0), is_arraytype(ty0) |
contains(str, ty2, ty0), ty2 .jtelemtype = mkclasstype(`java.lang.Object' .class), type∃(str, ty0), ∀ ty0, str, ty1. i→n(ty1 .jtdims) < i→n(mkarraytype(ty2) .jtdims) → ( contains(str, ty1, ty0) ∧ ty1 .jtelemtype = mkclasstype(`java.lang.Object' .class) → type∃(str, ty0) ∧ (is_classtype(ty0) ∨ is_arraytype(ty0)) ∧ is_arraytype(ty1) ∨ contains(str, mkclasstype(`java.lang.Object' .class), ty0)) ⊦ contains(str, mkclasstype(`java.lang.Object' .class), ty0), is_classtype(ty0), is_arraytype(ty0)
[[CONCRETESIMPRULES : ([CSIMPSEQ : ⊦ ¬ is_classtype(ty) ∧ ¬ is_arraytype(ty) → (ty ≤ ty0 ↔ ty = ty0)], [CSIMPSEQ : ⊦ ¬ is_arraytype(ty) → ty .jtelemtype = ty], [CSIMPSEQ : ⊦ type∃(str, mkclasstype(class)) ↔ tdname+∃(str, class)], [CSIMPSEQ : ⊦ tdname+∃ (str, `java.lang.Object' .class)], [CSIMPSEQ : ⊦ is_classtype(mkclasstype(class))])]]