| st[r -- _type] = typeval(ty), compatmode(str, st), compatstatic(str, st), compatrefs(str, st), class ≤ `java.lang.Throwable' .class, r -- _type ∈ st, is_reftype(ty), r ∈ st, is_subtype(str, ty, mkclasstype(class)), is_classtype(ty) → class+∃(str, ty .class), has_classtype(ty) → class∃(str, ty .jtelemtype .class) ∨ interface∃(str, ty .jtelemtype .class) ∨ is_predefined_class(ty .jtelemtype .class) ⊦ r = jvmref, class∃(str, class), interface∃(str, class), is_predefined_class(class) |
⊦ is_subtype(str, ty1, ty2) ↔ ty1 ≤ ty2 ∧ (has_classtype(ty1) → tdname+∃(str, ty1 .jtclass)) ∧ (has_classtype(ty2) → tdname+∃(str, ty2 .jtclass))
[[CONCRETESIMPRULES : ([CSIMPSEQ : ⊦ ty .jtclass = ty .jtelemtype .class], [CSIMPSEQ : ⊦ has_classtype(mkclasstype(class))], [CSIMPSEQ : ⊦ mkclasstype(class) .jtelemtype = mkclasstype(class)], [CSIMPSEQ : ⊦ mkclasstype(class) .class = class], [CSIMPSEQ : ⊦ tdname+∃(str, class) ↔ tdname∃(str, class) ∨ is_predefined_class(class)], [CSIMPSEQ : ⊦ tdname∃(str, class) ↔ class∃(str, class) ∨ interface∃(str, class)])], [EXTRATERMS : (mkclasstype(class), ty, str)]]