| compatmode(str, st), compatstatic(str, st), compatrefs(str, st) ⊦ compat(str, refval(r), mkclasstype(class), st[_mode, throw(r, mkclasstype(class))]) ∧ is_subtype(str, mkclasstype(class), mkclasstype(`java.lang.Throwable' .class)) ↔ class ≤ `java.lang.Throwable' .class ∧ compat(str, refval(r), mkclasstype(class), st), r = jvmref |
⊦ is_subtype(str, ty1, ty2) ↔ ty1 ≤ ty2 ∧ (has_classtype(ty1) → tdname+∃(str, ty1 .jtclass)) ∧ (has_classtype(ty2) → tdname+∃(str, ty2 .jtclass))
compatmode(str, st), compatstatic(str, st), compatrefs(str, st) ⊦ compat(str, refval(r), mkclasstype(class), st[_mode, throw(r, mkclasstype(class))]) ∧ mkclasstype(class) ≤ mkclasstype(`java.lang.Throwable' .class) ∧ (has_classtype(mkclasstype(class)) → tdname+∃(str, mkclasstype(class) .jtclass)) ∧ (has_classtype(mkclasstype(`java.lang.Throwable' .class)) → tdname+∃(str, mkclasstype(`java.lang.Throwable' .class) .jtclass)) ↔ class ≤ `java.lang.Throwable' .class ∧ compat(str, refval(r), mkclasstype(class), st), r = jvmref
[[CONCRETESIMPRULES : ()], [EXTRATERMS : (mkclasstype(`java.lang.Throwable' .class), mkclasstype(class), str)]]