diff --git a/crates/erg_compiler/context/compare.rs b/crates/erg_compiler/context/compare.rs
index 1d4e7080..a6b0ce94 100644
--- a/crates/erg_compiler/context/compare.rs
+++ b/crates/erg_compiler/context/compare.rs
@@ -482,7 +482,7 @@ impl Context {
// ?T(:> Int, <: Eq) :> ?U(:> Nat, <: Eq)
(FreeVar(lfv), FreeVar(rfv)) => match (lfv.get_subsup(), rfv.get_subsup()) {
(Some((l_sub, l_supe)), Some((r_sub, _))) => {
- self.related(&l_sub, &r_sub) && self.supertype_of(&l_supe, &r_sub)
+ self.supertype_of(&l_supe, &r_sub) && self.related(&l_sub, &r_sub)
}
(Some((l_sub, _)), None) if &l_sub == rhs => true,
(None, Some((_, r_sup))) if lhs == &r_sup => true,
diff --git a/crates/erg_compiler/context/eval.rs b/crates/erg_compiler/context/eval.rs
index b3d7a654..9907a856 100644
--- a/crates/erg_compiler/context/eval.rs
+++ b/crates/erg_compiler/context/eval.rs
@@ -177,18 +177,34 @@ impl<'c> Substituter<'c> {
qt: &Type,
st: &Type,
) -> EvalResult