| has_classtype(st[r -- _type] .type), same-subclasses(st[r -- _type] .type .jtelemtype .class, str, str0), is_array(r, st), tdname+∃(str0, st[r -- _type] .type .jtelemtype .class) ⊦ st[r -- _type] .type .jtelemtype = abstract_type, st[r -- _type] .type .jtelemtype = void_type, tdname+∃(str, st[r -- _type] .type .jtelemtype .class) |
⊦ same-subclasses(class, str, str0) ↔ (∀ class0. class∃(str0, class0) ∧ class0 ≤ class → class∃(str, class0)) ∧ (∀ class0. interface∃(str0, class0) ∧ class0 ≤ class → interface∃(str, class0))
has_classtype(st[r -- _type] .type), (∀ class0. class∃(str0, class0) ∧ class0 ≤ st[r -- _type] .type .jtelemtype .class → class∃(str, class0)) ∧ (∀ class0. interface∃(str0, class0) ∧ class0 ≤ st[r -- _type] .type .jtelemtype .class → interface∃(str, class0)), is_array(r, st), tdname+∃(str0, st[r -- _type] .type .jtelemtype .class) ⊦ st[r -- _type] .type .jtelemtype = abstract_type, st[r -- _type] .type .jtelemtype = void_type, tdname+∃(str, st[r -- _type] .type .jtelemtype .class)
[[CONCRETESIMPRULES : ()], [EXTRATERMS : (str0, str, st[r -- _type] .type .jtelemtype .class)]]