\begin{code} {-# OPTIONS --without-K --exact-split --safe #-} module UF-ImageAndSurjection where open import SpartanMLTT open import UF-Base open import UF-Equiv open import UF-EquivalenceExamples open import UF-Embeddings open import UF-Subsingletons open import UF-PropTrunc open import UF-Retracts \end{code} A main application of propositional truncations is to be able to define images and surjections: \begin{code} module ImageAndSurjection (pt : propositional-truncations-exist) where open PropositionalTruncation pt _∈image_ : {X : 𝓤 ̇ } {Y : 𝓥 ̇ } → Y → (X → Y) → 𝓤 ⊔ 𝓥 ̇ y ∈image f = ∃ x ꞉ domain f , f x ≡ y being-in-the-image-is-prop : {X : 𝓤 ̇ } {Y : 𝓥 ̇ } (y : Y) (f : X → Y) → is-prop (y ∈image f) being-in-the-image-is-prop y f = ∃-is-prop image : {X : 𝓤 ̇ } {Y : 𝓥 ̇ } → (X → Y) → 𝓤 ⊔ 𝓥 ̇ image f = Σ y ꞉ codomain f , y ∈image f restriction : {X : 𝓤 ̇ } {Y : 𝓥 ̇ } (f : X → Y) → image f → Y restriction f (y , _) = y restriction-embedding : {X : 𝓤 ̇ } {Y : 𝓥 ̇ } (f : X → Y) → is-embedding (restriction f) restriction-embedding f = pr₁-is-embedding (λ y → ∥∥-is-prop) corestriction : {X : 𝓤 ̇ } {Y : 𝓥 ̇ } (f : X → Y) → X → image f corestriction f x = f x , ∣ x , refl ∣ wconstant-maps-to-sets-have-propositional-images : (X : 𝓤 ̇ ) {Y : 𝓥 ̇ } → is-set Y → (f : X → Y) → wconstant f → is-prop (image f) wconstant-maps-to-sets-have-propositional-images X s f c (y , p) (y' , p') = to-Σ-≡ (∥∥-rec s (λ u → ∥∥-rec s (λ v → h u v) p') p , ∥∥-is-prop _ p') where h : (Σ x ꞉ X , f x ≡ y) → (Σ x' ꞉ X , f x' ≡ y') → y ≡ y' h (x , e) (x' , e') = y ≡⟨ e ⁻¹ ⟩ f x ≡⟨ c x x' ⟩ f x' ≡⟨ e' ⟩ y' ∎ wconstant-map-to-set-truncation-of-domain-map' : (X : 𝓤 ̇ ) {Y : 𝓥 ̇ } → is-set Y → (f : X → Y) → wconstant f → ∥ X ∥ → image f wconstant-map-to-set-truncation-of-domain-map' X s f c = ∥∥-rec (wconstant-maps-to-sets-have-propositional-images X s f c) (corestriction f) wconstant-map-to-set-truncation-of-domain-map : (X : 𝓤 ̇ ) {Y : 𝓥 ̇ } → is-set Y → (f : X → Y) → wconstant f → ∥ X ∥ → Y wconstant-map-to-set-truncation-of-domain-map X s f c = restriction f ∘ wconstant-map-to-set-truncation-of-domain-map' X s f c wconstant-map-to-set-factors-through-truncation-of-domain : (X : 𝓤 ̇ ) {Y : 𝓥 ̇ } (s : is-set Y) (f : X → Y) (c : wconstant f) → f ∼ (wconstant-map-to-set-truncation-of-domain-map X s f c) ∘ ∣_∣ wconstant-map-to-set-factors-through-truncation-of-domain X s f c = γ where g : ∥ X ∥ → image f g = wconstant-map-to-set-truncation-of-domain-map' X s f c p : is-prop (image f) p = wconstant-maps-to-sets-have-propositional-images X s f c γ : (x : X) → f x ≡ restriction f (g ∣ x ∣) γ x = f x ≡⟨ refl ⟩ restriction f (corestriction f x) ≡⟨ ap (restriction f) (p (corestriction f x) (g ∣ x ∣)) ⟩ restriction f (g ∣ x ∣) ∎ is-surjection : {X : 𝓤 ̇ } {Y : 𝓥 ̇ } → (X → Y) → 𝓤 ⊔ 𝓥 ̇ is-surjection f = ∀ y → ∃ x ꞉ domain f , f x ≡ y _↠_ : 𝓤 ̇ → 𝓥 ̇ → 𝓤 ⊔ 𝓥 ̇ X ↠ Y = Σ f ꞉ (X → Y) , is-surjection f image-is-set : {X : 𝓤 ̇ } {Y : 𝓥 ̇ } → (f : X → Y) → is-set Y → is-set (image f) image-is-set f i = subsets-of-sets-are-sets _ (λ y → y ∈image f) i (being-in-the-image-is-prop _ f) vv-equiv-iff-embedding-and-surjection : {X : 𝓤 ̇ } {Y : 𝓥 ̇ } (f : X → Y) → is-vv-equiv f ⇔ is-embedding f × is-surjection f vv-equiv-iff-embedding-and-surjection f = g , h where g : is-vv-equiv f → is-embedding f × is-surjection f g i = (λ y → pr₁ (pr₁ the-singletons-are-the-inhabited-propositions (i y))) , (λ y → pr₂ (pr₁ the-singletons-are-the-inhabited-propositions (i y))) h : is-embedding f × is-surjection f → is-vv-equiv f h (e , s) = λ y → pr₂ the-singletons-are-the-inhabited-propositions (e y , s y) surjective-embeddings-are-vv-equivs : {X : 𝓤 ̇ } {Y : 𝓥 ̇ } (f : X → Y) → is-embedding f → is-surjection f → is-vv-equiv f surjective-embeddings-are-vv-equivs f e s = pr₂ (vv-equiv-iff-embedding-and-surjection f) (e , s) surjective-embeddings-are-equivs : {X : 𝓤 ̇ } {Y : 𝓥 ̇ } (f : X → Y) → is-embedding f → is-surjection f → is-equiv f surjective-embeddings-are-equivs f e s = vv-equivs-are-equivs f (surjective-embeddings-are-vv-equivs f e s) corestriction-is-surjection : {X : 𝓤 ̇ } {Y : 𝓥 ̇ } (f : X → Y) → is-surjection (corestriction f) corestriction-is-surjection f (y , s) = ∥∥-functor g s where g : (Σ x ꞉ domain f , f x ≡ y) → Σ x ꞉ domain f , corestriction f x ≡ (y , s) g (x , p) = x , to-Σ-≡ (p , ∥∥-is-prop _ _) pt-is-surjection : {X : 𝓤 ̇ } → is-surjection (λ (x : X) → ∣ x ∣) pt-is-surjection t = ∥∥-rec ∥∥-is-prop (λ x → ∣ x , ∥∥-is-prop (∣ x ∣) t ∣) t NatΣ-is-surjection : {X : 𝓤 ̇ } (A : X → 𝓥 ̇ ) (B : X → 𝓦 ̇ ) (ζ : Nat A B) → ((x : X) → is-surjection (ζ x)) → is-surjection (NatΣ ζ) NatΣ-is-surjection A B ζ i (x , b) = γ where δ : (Σ a ꞉ A x , ζ x a ≡ b) → Σ (x' , a) ꞉ Σ A , (x' , ζ x' a) ≡ (x , b) δ (a , p) = (x , a) , (ap (x ,_) p) γ : ∃ (x' , a) ꞉ Σ A , (x' , ζ x' a) ≡ (x , b) γ = ∥∥-functor δ (i x b) \end{code} The following was marked as a TODO by Martin: A map is an embedding iff its corestriction is an equivalence. It was done by Tom de Jong on 4 December 2020. \begin{code} corestriction-of-embedding-is-equivalence : {X : 𝓤 ̇ } {Y : 𝓥 ̇ } (f : X → Y) → is-embedding f → is-equiv (corestriction f) corestriction-of-embedding-is-equivalence f e = surjective-embeddings-are-equivs f' e' s' where f' : domain f → image f f' = corestriction f s' : is-surjection f' s' = corestriction-is-surjection f e' : is-embedding f' e' (y , p) = retract-of-prop γ (e y) where γ : fiber f' (y , p) ◁ fiber f y γ = Σ-retract (λ x → f' x ≡ y , p) (λ x → f x ≡ y) ϕ where ϕ : (x : domain f) → (f' x ≡ (y , p)) ◁ (f x ≡ y) ϕ x = ρ , σ , η where ρ : f x ≡ y → f' x ≡ (y , p) ρ q = to-subtype-≡ (λ y' → ∥∥-is-prop) q σ : f' x ≡ (y , p) → f x ≡ y σ q' = ap pr₁ q' η : ρ ∘ σ ∼ id η refl = to-Σ-≡ (refl , q) ≡⟨ ap (λ - → to-Σ-≡ (refl , -)) h ⟩ to-Σ-≡ (refl , refl) ≡⟨ refl ⟩ refl ∎ where q : ∣ x , refl ∣ ≡ ∣ x , refl ∣ q = ∥∥-is-prop ∣ x , refl ∣ ∣ x , refl ∣ h : q ≡ refl h = props-are-sets ∥∥-is-prop q refl embedding-if-corestriction-is-equivalence : {X : 𝓤 ̇ } {Y : 𝓥 ̇ } (f : X → Y) → is-equiv (corestriction f) → is-embedding f embedding-if-corestriction-is-equivalence f i = embedding-closed-under-∼ f' f (∘-is-embedding e₁ e₂) H where f' : domain f → codomain f f' = pr₁ ∘ corestriction f H : f ∼ pr₁ ∘ corestriction f H x = refl e₁ : is-embedding (corestriction f) e₁ = equivs-are-embeddings (corestriction f) i e₂ : is-embedding pr₁ e₂ = pr₁-is-embedding (λ y → ∥∥-is-prop) \end{code} Surjections can be characterized as follows, modulo size: \begin{code} imageInduction : ∀ {𝓦 𝓤 𝓥} {X : 𝓤 ̇ } {Y : 𝓥 ̇ } → (X → Y) → 𝓤 ⊔ 𝓥 ⊔ 𝓦 ⁺ ̇ imageInduction {𝓦} {𝓤} {𝓥} {X} {Y} f = (P : Y → 𝓦 ̇ ) → ((y : Y) → is-prop (P y)) → ((x : X) → P (f x)) → (y : Y) → P y surjection-induction : {X : 𝓤 ̇ } {Y : 𝓥 ̇ } (f : X → Y) → is-surjection f → imageInduction {𝓦} f surjection-induction f is P isp a y = ∥∥-rec (isp y) (λ σ → transport P (pr₂ σ) (a (pr₁ σ))) (is y) image-surjection-converse : {X : 𝓤 ̇ } {Y : 𝓥 ̇ } (f : X → Y) → imageInduction f → is-surjection f image-surjection-converse f is' = is' (λ y → ∥ Σ (λ x → f x ≡ y) ∥) (λ y → ∥∥-is-prop) (λ x → ∣ x , refl ∣) image-induction : ∀ {𝓦} {X : 𝓤 ̇ } {Y : 𝓥 ̇ } (f : X → Y) (P : image f → 𝓦 ̇ ) → (∀ y' → is-prop (P y')) → (∀ x → P (corestriction f x)) → ∀ y' → P y' image-induction f = surjection-induction (corestriction f) (corestriction-is-surjection f) retraction-surjection : {X : 𝓤 ̇ } {Y : 𝓥 ̇ } (f : X → Y) → has-section f → is-surjection f retraction-surjection {𝓤} {𝓥} {X} f φ y = ∣ pr₁ φ y , pr₂ φ y ∣ pr₁-is-surjection : {X : 𝓤 ̇ } (A : X → 𝓥 ̇ ) → ((x : X) → ∥ A x ∥) → is-surjection (λ (σ : Σ A) → pr₁ σ) pr₁-is-surjection A s x = γ where δ : A x → Σ σ ꞉ Σ A , pr₁ σ ≡ x δ a = (x , a) , refl γ : ∃ σ ꞉ Σ A , pr₁ σ ≡ x γ = ∥∥-functor δ (s x) pr₁-is-surjection-converse : {X : 𝓤 ̇ } (A : X → 𝓥 ̇ ) → is-surjection (λ (σ : Σ A) → pr₁ σ) → ((x : X) → ∥ A x ∥) pr₁-is-surjection-converse A s x = γ where δ : (Σ σ ꞉ Σ A , pr₁ σ ≡ x) → A x δ ((.x , a) , refl) = a γ : ∥ A x ∥ γ = ∥∥-functor δ (s x) \end{code} Added 13 February 2020 by Tom de Jong. \begin{code} surjection-≃-image : {X : 𝓤 ̇ } {Y : 𝓥 ̇ } (f : X → Y) → is-surjection f → image f ≃ Y surjection-≃-image {𝓤} {𝓥} {X} {Y} f s = image f ≃⟨ ≃-refl _ ⟩ (Σ y ꞉ Y , ∃ x ꞉ X , f x ≡ y) ≃⟨ Σ-cong γ ⟩ (Σ y ꞉ Y , 𝟙) ≃⟨ ≃-refl _ ⟩ Y × 𝟙 ≃⟨ 𝟙-rneutral {𝓥} {𝓥} ⟩ Y ■ where γ : (y : Y) → (∃ x ꞉ X , f x ≡ y) ≃ 𝟙 γ y = singleton-≃-𝟙 (pointed-props-are-singletons (s y) ∥∥-is-prop) \end{code} Added 18 December 2020 by Tom de Jong. \begin{code} ∘-is-surjection : {X : 𝓤 ̇ } {Y : 𝓥 ̇ } {Z : 𝓦 ̇ } {f : X → Y} {g : Y → Z} → is-surjection f → is-surjection g → is-surjection (g ∘ f) ∘-is-surjection {𝓤} {𝓥} {𝓦} {X} {Y} {Z} {f} {g} σ τ z = ∥∥-rec ∥∥-is-prop γ₁ (τ z) where γ₁ : (Σ y ꞉ Y , g y ≡ z) → ∃ x ꞉ X , (g ∘ f) x ≡ z γ₁ (y , q) = ∥∥-functor γ₂ (σ y) where γ₂ : (Σ x ꞉ X , f x ≡ y) → Σ x ꞉ X , (g ∘ f) x ≡ z γ₂ (x , p) = (x , (g (f x) ≡⟨ ap g p ⟩ g y ≡⟨ q ⟩ z ∎)) equivs-are-surjections : {X : 𝓤 ̇ } {Y : 𝓥 ̇ } {f : X → Y} → is-equiv f → is-surjection f equivs-are-surjections ((ρ , η) , (σ , ε)) y = ∣ ρ y , η y ∣ \end{code}