Injective maps
Content created by Fredrik Bakke, Egbert Rijke and Jonathan Prieto-Cubides.
Created on 2023-02-01.
Last modified on 2025-08-14.
module foundation-core.injective-maps where
Imports
open import foundation.action-on-identifications-functions open import foundation.dependent-pair-types open import foundation.universe-levels open import foundation-core.contractible-types open import foundation-core.embeddings 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.retractions open import foundation-core.retracts-of-types open import foundation-core.sections
Idea
A map f : A → B
is
injective¶,
also called left cancellable, if f x = f y
implies x = y
.
Warning
The notion of injective map is, however, not homotopically coherent. It is fine to use injectivity for maps between sets, but for maps between general types it is recommended to use the notion of embedding.
Definition
is-injective : {l1 l2 : Level} {A : UU l1} {B : UU l2} → (A → B) → UU (l1 ⊔ l2) is-injective {l1} {l2} {A} {B} f = {x y : A} → f x = f y → x = y injection : {l1 l2 : Level} (A : UU l1) (B : UU l2) → UU (l1 ⊔ l2) injection A B = Σ (A → B) is-injective module _ {l1 l2 : Level} {A : UU l1} {B : UU l2} (f : injection A B) where map-injection : A → B map-injection = pr1 f is-injective-injection : is-injective map-injection is-injective-injection = pr2 f
Examples
The identity function is injective
is-injective-id : {l1 : Level} {A : UU l1} → is-injective (id {A = A}) is-injective-id p = p id-injection : {l1 : Level} {A : UU l1} → injection A A pr1 id-injection = id pr2 id-injection = is-injective-id
Properties
If a composite is injective, then so is its right factor
module _ {l1 l2 l3 : Level} {A : UU l1} {B : UU l2} {C : UU l3} where is-injective-right-factor : (g : B → C) (h : A → B) → is-injective (g ∘ h) → is-injective h is-injective-right-factor g h is-inj-gh p = is-inj-gh (ap g p) is-injective-top-map-triangle : (f : A → C) (g : B → C) (h : A → B) (H : f ~ (g ∘ h)) → is-injective f → is-injective h is-injective-top-map-triangle f g h H is-inj-f {x} {x'} p = is-inj-f {x} {x'} ((H x) ∙ ((ap g p) ∙ (inv (H x'))))
Injective maps are closed under composition
module _ {l1 l2 l3 : Level} {A : UU l1} {B : UU l2} {C : UU l3} where is-injective-comp : {g : B → C} {h : A → B} → is-injective h → is-injective g → is-injective (g ∘ h) is-injective-comp is-inj-h is-inj-g = is-inj-h ∘ is-inj-g comp-injection : injection B C → injection A B → injection A C comp-injection (g , G) (h , H) = (g ∘ h , is-injective-comp H G) is-injective-left-map-triangle : (f : A → C) (g : B → C) (h : A → B) → f ~ (g ∘ h) → is-injective h → is-injective g → is-injective f is-injective-left-map-triangle f g h H is-inj-h is-inj-g {x} {x'} p = is-inj-h (is-inj-g ((inv (H x)) ∙ (p ∙ (H x'))))
Embeddings are injective
module _ {l1 l2 : Level} {A : UU l1} {B : UU l2} where is-injective-is-emb : {f : A → B} → is-emb f → is-injective f is-injective-is-emb is-emb-f {x} {y} = map-inv-is-equiv (is-emb-f x y) is-injective-emb : (e : A ↪ B) → is-injective (map-emb e) is-injective-emb e {x} {y} = map-inv-is-equiv (is-emb-map-emb e x y) injection-emb : A ↪ B → injection A B injection-emb (f , H) = (f , is-injective-is-emb H)
Retracts are injective
module _ {l1 l2 : Level} {A : UU l1} {B : UU l2} where is-injective-inclusion-retract : (R : A retract-of B) → is-injective (inclusion-retract R) is-injective-inclusion-retract (i , R) = is-injective-retraction i R injection-retract : A retract-of B → injection A B injection-retract R = ( inclusion-retract R , is-injective-inclusion-retract R)
Equivalences are injective
module _ {l1 l2 : Level} {A : UU l1} {B : UU l2} where is-injective-is-equiv : {f : A → B} → is-equiv f → is-injective f is-injective-is-equiv {f} H = is-injective-retraction f (retraction-is-equiv H) is-injective-equiv : (e : A ≃ B) → is-injective (map-equiv e) is-injective-equiv e = is-injective-is-equiv (is-equiv-map-equiv e) injection-equiv : A ≃ B → injection A B injection-equiv e = (map-equiv e , is-injective-equiv e) abstract is-injective-map-inv-equiv : {l1 l2 : Level} {A : UU l1} {B : UU l2} (e : A ≃ B) → is-injective (map-inv-equiv e) is-injective-map-inv-equiv e = is-injective-is-equiv (is-equiv-map-inv-equiv e)
Injective maps that have a section are equivalences
module _ {l1 l2 : Level} {A : UU l1} {B : UU l2} where is-equiv-is-injective : {f : A → B} → section f → is-injective f → is-equiv f is-equiv-is-injective {f} (pair g G) H = is-equiv-is-invertible g G (λ x → H (G (f x)))
Any map out of a contractible type is injective
is-injective-is-contr : {l1 l2 : Level} {A : UU l1} {B : UU l2} (f : A → B) → is-contr A → is-injective f is-injective-is-contr f H p = eq-is-contr H
See also
External links
- Injective function at Wikidata
Recent changes
- 2025-08-14. Fredrik Bakke. Dedekind finiteness of various notions of finite type (#1422).
- 2025-08-14. Fredrik Bakke. More logic (#1387).
- 2025-02-10. Fredrik Bakke. Some extensions of the fundamental theorem of identity types (#1243).
- 2024-06-05. Fredrik Bakke. Path-cosplit maps (#1153).
- 2024-04-11. Fredrik Bakke and Egbert Rijke. Propositional operations (#1008).