diff --git a/encodings/subtype.lp b/encodings/subtype.lp
index b978a293b2e6438183c6a5d03ec5136f93772f21..9aabd5a54655ee57d03caec74c3e278dccddad3c 100644
--- a/encodings/subtype.lp
+++ b/encodings/subtype.lp
@@ -1,6 +1,6 @@
 require open personoj.encodings.lhol
-  personoj.encodings.pvs_cert
-  personoj.encodings.booleans
+require open personoj.encodings.pvs_cert
+require open personoj.encodings.bool_hol
 
 set declared "↑"
 set declared "↓"
@@ -26,6 +26,8 @@ rule μ (psub {&T} _) → μ &T
 symbol μ₀: Set ⇒ Set
 rule μ₀ (psub {&T} _) → μ₀ &T
 
+compute λT: Set, μ (μ T)
+
 // Constraints
 symbol upcast {A: Set} {B: Set}: ε (A ⊑ B) ⇒ η A ⇒ η B
 definition ↑ {A} {B} ≔ upcast {A} {B}
@@ -37,11 +39,12 @@ admit
 
 symbol π {T: Set}: η (μ T) ⇒ Bool
 symbol downcast {A: Set} {B: Set} (_: ε (B ⊑ A))
-                (a: η A) (p: ε (π {A} (↑ {A} {μ A} (sub_of_sup A) a))): η B
+                (a: η A) (_: ε (π {A} (↑ {A} {μ A} (sub_of_sup A) a))): η B
 definition ↓ {A} {B} ≔ downcast {A} {B}
 
 set flag "print_implicits" on
 rule π {&T ~> &U} → λx: η &T ⇒ η (μ &U), forall (λy, π {&U} (x y))
+// rule π {psub {&T} &a} → λx: η (μ &T), π {&T} x
 rule π {psub {&T} &a}
-   → λx: η (μ &T), impd {π {&T} x} (λy, &a (↓ {μ &T} {&T} _ x y))
+   → λx: η (μ &T), (π {&T} x) ∧ (λy: ε (π {&T} x), &a (↓ {μ &T} {&T} _ x y))
 // FIXME: does not type check because μ (μ &T) is not reduced to μ &T