| type∃(str, ty1), contains(str, ty0 ' + tys0), type∃(str, ty), is_arraytype(ty1), ty1 .type ≤ ty, ty0 ≤ ty1 .type, ty0 ≤ ty ⊦ contains(str, ty ' + tys0) |
ty1 = mkarraytype(ty2), type∃(str, ty1), contains(str, ty0 ' + tys0), type∃(str, ty), is_arraytype(ty1), ty2 ≤ ty, ty0 ≤ ty2, ty0 ≤ ty ⊦ contains(str, ty ' + tys0)
[[CONCRETESIMPRULES : ([CSIMPELIM : ⊦ is_arraytype(ty) → ( ty0 = ty .type ↔ ty = mkarraytype(ty0))])], [EXTRATERMS : (ty1, ty2)]]