# Subtypes
```agda
module foundation.subtypes where
open import foundation-core.subtypes public
```
<details><summary>Imports</summary>
```agda
open import foundation.dependent-pair-types
open import foundation.embeddings
open import foundation.equality-dependent-function-types
open import foundation.fundamental-theorem-of-identity-types
open import foundation.logical-equivalences
open import foundation.propositional-extensionality
open import foundation.universe-levels
open import foundation-core.cartesian-product-types
open import foundation-core.equivalences
open import foundation-core.function-types
open import foundation-core.homotopies
open import foundation-core.identity-types
open import foundation-core.injective-maps
open import foundation-core.propositions
open import foundation-core.sets
open import foundation-core.torsorial-type-families
```
</details>
## Definition
### A second definition of the type of subtypes
```agda
Subtype : {l1 : Level} (l2 l3 : Level) (A : UU l1) → UU (l1 ⊔ lsuc l2 ⊔ lsuc l3)
Subtype l2 l3 A =
Σ ( A → Prop l2)
( λ P →
Σ ( Σ (UU l3) (λ X → X ↪ A))
( λ i →
Σ ( pr1 i ≃ Σ A (type-Prop ∘ P))
( λ e → map-emb (pr2 i) ~ (pr1 ∘ map-equiv e))))
```
## Properties
### The inclusion of a subtype into the ambient type is injective
```agda
module _
{l1 l2 : Level} {A : UU l1} (B : subtype l2 A)
where
is-injective-inclusion-subtype : is-injective (inclusion-subtype B)
is-injective-inclusion-subtype =
is-injective-is-emb (is-emb-inclusion-subtype B)
```
### Equality in the type of all subtypes
```agda
module _
{l1 l2 : Level} {A : UU l1} (P : subtype l2 A)
where
has-same-elements-subtype-Prop :
{l3 : Level} → subtype l3 A → Prop (l1 ⊔ l2 ⊔ l3)
has-same-elements-subtype-Prop Q =
Π-Prop A (λ x → iff-Prop (P x) (Q x))
has-same-elements-subtype : {l3 : Level} → subtype l3 A → UU (l1 ⊔ l2 ⊔ l3)
has-same-elements-subtype Q = type-Prop (has-same-elements-subtype-Prop Q)
is-prop-has-same-elements-subtype :
{l3 : Level} (Q : subtype l3 A) →
is-prop (has-same-elements-subtype Q)
is-prop-has-same-elements-subtype Q =
is-prop-type-Prop (has-same-elements-subtype-Prop Q)
refl-has-same-elements-subtype : has-same-elements-subtype P
pr1 (refl-has-same-elements-subtype x) = id
pr2 (refl-has-same-elements-subtype x) = id
is-torsorial-has-same-elements-subtype :
is-torsorial has-same-elements-subtype
is-torsorial-has-same-elements-subtype =
is-torsorial-Eq-Π (λ x → is-torsorial-iff (P x))
has-same-elements-eq-subtype :
(Q : subtype l2 A) → (P = Q) → has-same-elements-subtype Q
has-same-elements-eq-subtype .P refl =
refl-has-same-elements-subtype
is-equiv-has-same-elements-eq-subtype :
(Q : subtype l2 A) → is-equiv (has-same-elements-eq-subtype Q)
is-equiv-has-same-elements-eq-subtype =
fundamental-theorem-id
is-torsorial-has-same-elements-subtype
has-same-elements-eq-subtype
extensionality-subtype :
(Q : subtype l2 A) → (P = Q) ≃ has-same-elements-subtype Q
pr1 (extensionality-subtype Q) = has-same-elements-eq-subtype Q
pr2 (extensionality-subtype Q) = is-equiv-has-same-elements-eq-subtype Q
eq-has-same-elements-subtype :
(Q : subtype l2 A) → has-same-elements-subtype Q → P = Q
eq-has-same-elements-subtype Q =
map-inv-equiv (extensionality-subtype Q)
```
### Similarity of subtypes
```agda
module _
{l1 : Level} {A : UU l1}
where
sim-subtype :
{l2 l3 : Level} → subtype l2 A → subtype l3 A → UU (l1 ⊔ l2 ⊔ l3)
sim-subtype P Q = (P ⊆ Q) × (Q ⊆ P)
has-same-elements-sim-subtype :
{l2 l3 : Level} (P : subtype l2 A) (Q : subtype l3 A) →
sim-subtype P Q → has-same-elements-subtype P Q
pr1 (has-same-elements-sim-subtype P Q s x) = pr1 s x
pr2 (has-same-elements-sim-subtype P Q s x) = pr2 s x
sim-has-same-elements-subtype :
{l2 l3 : Level} (P : subtype l2 A) (Q : subtype l3 A) →
has-same-elements-subtype P Q → sim-subtype P Q
pr1 (sim-has-same-elements-subtype P Q s) x = forward-implication (s x)
pr2 (sim-has-same-elements-subtype P Q s) x = backward-implication (s x)
```
### The containment relation is antisymmetric
```agda
module _
{l1 : Level} {A : UU l1}
where
equiv-antisymmetric-leq-subtype :
{l2 l3 : Level} (P : subtype l2 A) (Q : subtype l3 A) → P ⊆ Q → Q ⊆ P →
(x : A) → is-in-subtype P x ≃ is-in-subtype Q x
equiv-antisymmetric-leq-subtype P Q H K x =
equiv-iff-is-prop
( is-prop-is-in-subtype P x)
( is-prop-is-in-subtype Q x)
( H x)
( K x)
antisymmetric-leq-subtype :
{l2 : Level} (P Q : subtype l2 A) → P ⊆ Q → Q ⊆ P → P = Q
antisymmetric-leq-subtype P Q H K =
eq-has-same-elements-subtype P Q (λ x → (H x , K x))
```
### The type of all subtypes of a type is a set
```agda
is-set-subtype :
{l1 l2 : Level} {A : UU l1} → is-set (subtype l2 A)
is-set-subtype P Q =
is-prop-equiv
( extensionality-subtype P Q)
( is-prop-has-same-elements-subtype P Q)
subtype-Set : {l1 : Level} (l2 : Level) → UU l1 → Set (l1 ⊔ lsuc l2)
pr1 (subtype-Set l2 A) = subtype l2 A
pr2 (subtype-Set l2 A) = is-set-subtype
```
### Characterisation of embeddings into subtypes
```agda
module _
{l1 l2 l3 : Level} {A : UU l1} (B : subtype l2 A) {X : UU l3}
where
inv-emb-into-subtype :
(g : X ↪ type-subtype B) →
Σ (X ↪ A) (λ f → (x : X) → is-in-subtype B (map-emb f x))
pr1 (pr1 (inv-emb-into-subtype g)) =
inclusion-subtype B ∘ map-emb g
pr2 (pr1 (inv-emb-into-subtype g)) =
is-emb-comp _ _ (is-emb-inclusion-subtype B) (is-emb-map-emb g)
pr2 (inv-emb-into-subtype g) x =
pr2 (map-emb g x)
issec-map-inv-emb-into-subtype :
( ind-Σ (emb-into-subtype B) ∘ inv-emb-into-subtype) ~ id
issec-map-inv-emb-into-subtype g =
eq-type-subtype
is-emb-Prop
refl
isretr-map-inv-emb-into-subtype :
( inv-emb-into-subtype ∘ ind-Σ (emb-into-subtype B)) ~ id
isretr-map-inv-emb-into-subtype (f , b) =
eq-type-subtype
(λ f → Π-Prop X (λ x → B (map-emb f x)))
(eq-type-subtype
is-emb-Prop
refl)
equiv-emb-into-subtype :
Σ (X ↪ A) (λ f →
(x : X) → is-in-subtype B (map-emb f x)) ≃ (X ↪ type-subtype B)
pr1 equiv-emb-into-subtype = ind-Σ (emb-into-subtype B)
pr2 equiv-emb-into-subtype =
is-equiv-is-invertible
inv-emb-into-subtype
issec-map-inv-emb-into-subtype
isretr-map-inv-emb-into-subtype
```
## See also
- [Images of subtypes](foundation.images-subtypes.md)
- [Large locale of subtypes](foundation.large-locale-of-subtypes.md)
- [Powersets](foundation.powersets.md)
- [Pullbacks of subtypes](foundation.pullbacks-subtypes.md)