| has_classtype(st[r -- _type] .type), type∃(str0, st[r -- _type] .type), same-subclasses(st[r -- _type] .type .jtelemtype .class, str, str0), is_array(r, st) ⊦ st[r -- _type] .type .jtelemtype = abstract_type, st[r -- _type] .type .jtelemtype = void_type, tdname+∃(str, st[r -- _type] .type .jtelemtype .class) |
⊦ type∃(str, ty) ↔ ¬ has_classtype(ty) ∨ tdname+∃(str, ty .jtclass)
has_classtype(st[r -- _type] .type), ¬ has_classtype(st[r -- _type] .type) ∨ tdname+∃(str0, st[r -- _type] .type .jtclass), same-subclasses(st[r -- _type] .type .jtelemtype .class, str, str0), is_array(r, st) ⊦ st[r -- _type] .type .jtelemtype = abstract_type, st[r -- _type] .type .jtelemtype = void_type, tdname+∃(str, st[r -- _type] .type .jtelemtype .class)
[[CONCRETESIMPRULES : ()], [EXTRATERMS : (st[r -- _type] .type, str0)]]