# Propositional maps ```agda module foundation-core.propositional-maps where ``` <details><summary>Imports</summary> ```agda open import foundation.action-on-identifications-functions open import foundation.dependent-pair-types open import foundation.fundamental-theorem-of-identity-types open import foundation.universe-levels open import foundation-core.contractible-types open import foundation-core.embeddings open import foundation-core.fibers-of-maps open import foundation-core.identity-types open import foundation-core.propositions ``` </details> ## Idea A map is said to be **propositional** if its [fibers](foundation-core.fibers-of-maps.md) are [propositions](foundation-core.propositions.md). This condition is the same as the condition of being a [`-1`-truncated map](foundation-core.truncated-maps.md), and it is [equivalent](foundation-core.equivalences.md) to being an [embedding](foundation-core.embeddings.md). **Note:** Of the three equivalent conditions mentioned above, propositional maps, `-1`-truncated maps, and embeddings, the central notion of in the agda-unimath library is that of embedding. This means that most infrastructure is available for embeddings, and that it is easy to convert from any of the other two notions to the notion of embedding. ## Definitions ### The predicate of being a propositional map ```agda module _ {l1 l2 : Level} where is-prop-map : {A : UU l1} {B : UU l2} → (A → B) → UU (l1 ⊔ l2) is-prop-map {B = B} f = (b : B) → is-prop (fiber f b) ``` ### The type of propositional maps ```agda module _ {l1 l2 : Level} where prop-map : (A : UU l1) (B : UU l2) → UU (l1 ⊔ l2) prop-map A B = Σ (A → B) is-prop-map module _ {A : UU l1} {B : UU l2} (f : prop-map A B) where map-prop-map : A → B map-prop-map = pr1 f is-prop-map-prop-map : is-prop-map map-prop-map is-prop-map-prop-map = pr2 f ``` ## Properties ### The fibers of a map are propositions if and only if it is an embedding ```agda module _ {l1 l2 : Level} {A : UU l1} {B : UU l2} {f : A → B} where abstract is-emb-is-prop-map : is-prop-map f → is-emb f is-emb-is-prop-map is-prop-map-f x = fundamental-theorem-id ( is-contr-equiv' ( fiber f (f x)) ( equiv-fiber f (f x)) ( is-proof-irrelevant-is-prop (is-prop-map-f (f x)) (x , refl))) ( λ _ → ap f) abstract is-prop-map-is-emb : is-emb f → is-prop-map f is-prop-map-is-emb is-emb-f y = is-prop-is-proof-irrelevant α where α : (t : fiber f y) → is-contr (fiber f y) α (x , refl) = is-contr-equiv ( fiber' f (f x)) ( equiv-fiber f (f x)) ( fundamental-theorem-id' (λ _ → ap f) (is-emb-f x)) module _ {l1 l2 : Level} {A : UU l1} {B : UU l2} where emb-prop-map : prop-map A B → A ↪ B pr1 (emb-prop-map (f , p)) = f pr2 (emb-prop-map (f , p)) = is-emb-is-prop-map p prop-map-emb : A ↪ B → prop-map A B pr1 (prop-map-emb (f , p)) = f pr2 (prop-map-emb (f , p)) = is-prop-map-is-emb p is-prop-map-emb : (f : A ↪ B) → is-prop-map (map-emb f) is-prop-map-emb f = is-prop-map-is-emb (is-emb-map-emb f) is-prop-map-emb' : (f : A ↪ B) → (b : B) → is-prop (fiber' (map-emb f) b) is-prop-map-emb' f y = is-prop-equiv' (equiv-fiber (map-emb f) y) (is-prop-map-emb f y) fiber-emb-Prop : A ↪ B → B → Prop (l1 ⊔ l2) pr1 (fiber-emb-Prop f y) = fiber (map-emb f) y pr2 (fiber-emb-Prop f y) = is-prop-map-emb f y fiber-emb-Prop' : A ↪ B → B → Prop (l1 ⊔ l2) pr1 (fiber-emb-Prop' f y) = fiber' (map-emb f) y pr2 (fiber-emb-Prop' f y) = is-prop-map-emb' f y ```