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