| compatmode(str, st), compatstatic(str, st), compatrefs(str, st), class ≤ `java.lang.Throwable' .class ⊦ r = jvmref, okval(refval(r), mkclasstype(class)) ∧ ( is_referencevalue(refval(r)) ∧ refval(r) .refval ≠ jvmref → refval(r) .refval -- _type ∈ st[_mode, throw(r, mkclasstype(class))] ∧ is_typevalue(st[_mode, throw(r, mkclasstype(class))][refval(r) .refval -- _type]) ∧ is_reftype((st[_mode, throw(r, mkclasstype(class))][refval(r) .refval -- _type]) .type) ∧ ( has_classtype((st[_mode, throw(r, mkclasstype(class))][refval(r) .refval -- _type]) .type) → tdname+∃(str, (st[_mode, throw(r, mkclasstype(class))][refval(r) .refval -- _type]) .type .jtelemtype .class)) ∧ ( is_classtype((st[_mode, throw(r, mkclasstype(class))][refval(r) .refval -- _type]) .type) → class+∃(str, (st[_mode, throw(r, mkclasstype(class))][refval(r) .refval -- _type]) .type .class)) ∧ asgcomp(str, refval(r), mkclasstype(class), st[_mode, throw(r, mkclasstype(class))])) ∧ tdname+∃(str, class) ↔ compat(str, refval(r), mkclasstype(class), st) |
compatmode(str, st), compatstatic(str, st), compatrefs(str, st), class ≤ `java.lang.Throwable' .class ⊦ r = jvmref, r -- _type ∈ st ∧ is_typevalue(st[r -- _type]) ∧ is_reftype(st[r -- _type] .type) ∧ (has_classtype(st[r -- _type] .type) → tdname+∃(str, st[r -- _type] .type .jtelemtype .class)) ∧ (is_classtype(st[r -- _type] .type) → class+∃(str, st[r -- _type] .type .class)) ∧ asgcomp(str, refval(r), mkclasstype(class), st[_mode, throw(r, mkclasstype(class))]) ∧ tdname+∃(str, class) ↔ compat(str, refval(r), mkclasstype(class), st)
[[CONCRETESIMPRULES : ([CSIMPSEQ : ⊦ r ≠ jvmref → (st[_mode, val][r -- sk]) = st[r -- sk]], [CSIMPSEQ : ⊦ r -- _type ∈ st[_mode, val] ↔ r -- _type ∈ st], [CSIMPSEQ : ⊦ refval(r) .refval = r], [CSIMPSEQ : ⊦ is_referencevalue(refval(r))], [CSIMPSEQ : ⊦ okval(val, mkclasstype(class1)) ↔ is_referencevalue(val)])]]