# Inhabited subtypes ```agda module foundation.inhabited-subtypes where ``` <details><summary>Imports</summary> ```agda open import foundation.dependent-pair-types open import foundation.inhabited-types open import foundation.propositional-truncations open import foundation.subtype-identity-principle open import foundation.subtypes open import foundation.universe-levels open import foundation-core.equivalences open import foundation-core.identity-types open import foundation-core.propositions open import foundation-core.torsorial-type-families ``` </details> ## Idea An inhabited subtype of a type `A` is a subtype `P` of `A` such that the underlying type of `P` is inhabited. ```agda is-inhabited-subtype-Prop : {l1 l2 : Level} {A : UU l1} → subtype l2 A → Prop (l1 ⊔ l2) is-inhabited-subtype-Prop P = is-inhabited-Prop (type-subtype P) is-inhabited-subtype : {l1 l2 : Level} {A : UU l1} → subtype l2 A → UU (l1 ⊔ l2) is-inhabited-subtype P = type-Prop (is-inhabited-subtype-Prop P) inhabited-subtype : {l1 : Level} (l2 : Level) → UU l1 → UU (l1 ⊔ lsuc l2) inhabited-subtype l2 A = type-subtype (is-inhabited-subtype-Prop {l2 = l2} {A}) module _ {l1 l2 : Level} {A : UU l1} (P : inhabited-subtype l2 A) where subtype-inhabited-subtype : subtype l2 A subtype-inhabited-subtype = pr1 P is-inhabited-subtype-inhabited-subtype : is-inhabited-subtype subtype-inhabited-subtype is-inhabited-subtype-inhabited-subtype = pr2 P type-inhabited-subtype : UU (l1 ⊔ l2) type-inhabited-subtype = type-subtype subtype-inhabited-subtype inhabited-type-inhabited-subtype : Inhabited-Type (l1 ⊔ l2) pr1 inhabited-type-inhabited-subtype = type-inhabited-subtype pr2 inhabited-type-inhabited-subtype = is-inhabited-subtype-inhabited-subtype is-in-inhabited-subtype : A → UU l2 is-in-inhabited-subtype = is-in-subtype subtype-inhabited-subtype is-prop-is-in-inhabited-subtype : (x : A) → is-prop (is-in-inhabited-subtype x) is-prop-is-in-inhabited-subtype = is-prop-is-in-subtype subtype-inhabited-subtype inclusion-inhabited-subtype : type-inhabited-subtype → A inclusion-inhabited-subtype = inclusion-subtype subtype-inhabited-subtype ap-inclusion-inhabited-subtype : (x y : type-inhabited-subtype) → x = y → (inclusion-inhabited-subtype x = inclusion-inhabited-subtype y) ap-inclusion-inhabited-subtype = ap-inclusion-subtype subtype-inhabited-subtype is-in-inhabited-subtype-inclusion-inhabited-subtype : (x : type-inhabited-subtype) → is-in-inhabited-subtype (inclusion-inhabited-subtype x) is-in-inhabited-subtype-inclusion-inhabited-subtype = is-in-subtype-inclusion-subtype subtype-inhabited-subtype ``` ## Properties ### Characterization of equality of inhabited subtypes ```agda has-same-elements-inhabited-subtype-Prop : {l1 l2 l3 : Level} {A : UU l1} → inhabited-subtype l2 A → inhabited-subtype l3 A → Prop (l1 ⊔ l2 ⊔ l3) has-same-elements-inhabited-subtype-Prop P Q = has-same-elements-subtype-Prop ( subtype-inhabited-subtype P) ( subtype-inhabited-subtype Q) has-same-elements-inhabited-subtype : {l1 l2 l3 : Level} {A : UU l1} → inhabited-subtype l2 A → inhabited-subtype l3 A → UU (l1 ⊔ l2 ⊔ l3) has-same-elements-inhabited-subtype P Q = type-Prop (has-same-elements-inhabited-subtype-Prop P Q) is-prop-has-same-elements-inhabited-subtype : {l1 l2 l3 : Level} {A : UU l1} → (P : inhabited-subtype l2 A) (Q : inhabited-subtype l3 A) → is-prop (has-same-elements-inhabited-subtype P Q) is-prop-has-same-elements-inhabited-subtype P Q = is-prop-type-Prop (has-same-elements-inhabited-subtype-Prop P Q) module _ {l1 l2 : Level} {A : UU l1} (P : inhabited-subtype l2 A) where refl-has-same-elements-inhabited-subtype : has-same-elements-inhabited-subtype P P refl-has-same-elements-inhabited-subtype = refl-has-same-elements-subtype (subtype-inhabited-subtype P) is-torsorial-has-same-elements-inhabited-subtype : is-torsorial (has-same-elements-inhabited-subtype P) is-torsorial-has-same-elements-inhabited-subtype = is-torsorial-Eq-subtype ( is-torsorial-has-same-elements-subtype ( subtype-inhabited-subtype P)) ( λ Q → is-prop-type-trunc-Prop) ( subtype-inhabited-subtype P) ( refl-has-same-elements-inhabited-subtype) ( is-inhabited-subtype-inhabited-subtype P) extensionality-inhabited-subtype : (Q : inhabited-subtype l2 A) → (P = Q) ≃ has-same-elements-inhabited-subtype P Q extensionality-inhabited-subtype Q = ( extensionality-subtype ( subtype-inhabited-subtype P) ( subtype-inhabited-subtype Q)) ∘e ( extensionality-type-subtype' is-inhabited-subtype-Prop P Q) has-same-elements-eq-inhabited-subtype : (Q : inhabited-subtype l2 A) → (P = Q) → has-same-elements-inhabited-subtype P Q has-same-elements-eq-inhabited-subtype Q = map-equiv (extensionality-inhabited-subtype Q) eq-has-same-elements-inhabited-subtype : (Q : inhabited-subtype l2 A) → has-same-elements-inhabited-subtype P Q → P = Q eq-has-same-elements-inhabited-subtype Q = map-inv-equiv (extensionality-inhabited-subtype Q) refl-extensionality-inhabited-subtype : map-equiv (extensionality-inhabited-subtype P) refl = refl-has-same-elements-inhabited-subtype refl-extensionality-inhabited-subtype = refl ```