Injective maps

Content created by Fredrik Bakke, Egbert Rijke and Jonathan Prieto-Cubides.

Created on 2022-01-26.

module foundation.injective-maps where

open import foundation-core.injective-maps public

Imports
open import foundation.dependent-pair-types
open import foundation.logical-equivalences
open import foundation.universe-levels

open import foundation-core.embeddings
open import foundation-core.empty-types
open import foundation-core.identity-types
open import foundation-core.negation
open import foundation-core.propositional-maps
open import foundation-core.propositions
open import foundation-core.sets


Idea

A map f : A → B is injective 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.

Definitions

Noninjective maps

module _
{l1 l2 : Level} {A : UU l1} {B : UU l2}
where

is-not-injective : (A → B) → UU (l1 ⊔ l2)
is-not-injective f = ¬ (is-injective f)


Any map out of an empty type is injective

is-injective-is-empty :
{l1 l2 : Level} {A : UU l1} {B : UU l2} (f : A → B) →
is-empty A → is-injective f
is-injective-is-empty f is-empty-A {x} = ex-falso (is-empty-A x)


Any injective map between sets is an embedding

module _
{l1 l2 : Level} {A : UU l1} {B : UU l2}
where

abstract
is-emb-is-injective' :
(is-set-A : is-set A) (is-set-B : is-set B) (f : A → B) →
is-injective f → is-emb f
is-emb-is-injective' is-set-A is-set-B f is-injective-f x y =
is-equiv-has-converse-is-prop
( is-set-A x y)
( is-set-B (f x) (f y))
( is-injective-f)

is-emb-is-injective :
{f : A → B} → is-set B → is-injective f → is-emb f
is-emb-is-injective {f} H I =
is-emb-is-injective' (is-set-is-injective H I) H f I

is-prop-map-is-injective :
{f : A → B} → is-set B → is-injective f → is-prop-map f
is-prop-map-is-injective {f} H I =
is-prop-map-is-emb (is-emb-is-injective H I)


For a map between sets, being injective is a property

module _
{l1 l2 : Level} {A : UU l1} {B : UU l2}
where

is-prop-is-injective :
is-set A → (f : A → B) → is-prop (is-injective f)
is-prop-is-injective H f =
is-prop-implicit-Π
( λ x →
is-prop-implicit-Π
( λ y → is-prop-function-type (H x y)))

is-injective-Prop : is-set A → (A → B) → Prop (l1 ⊔ l2)
pr1 (is-injective-Prop H f) = is-injective f
pr2 (is-injective-Prop H f) = is-prop-is-injective H f