Martin Escardo, 26 January 2018.

Moved from the file TotallySeparated 22 August 2024.

\begin{code}

{-# OPTIONS --safe --without-K #-}

module Apartness.Morphisms where

open import Apartness.Definition
open import MLTT.Spartan
open import UF.FunExt
open import UF.Subsingletons
open import UF.Subsingletons-FunExt

\end{code}

A map is called strongly extensional if it reflects apartness. In the
category of apartness types, the morphisms are the strongly
extensional maps.

\begin{code}

is-strongly-extensional : ∀ {𝓣} {X : 𝓤 ̇ } {Y : 𝓥 ̇ }
                        → (X → X → 𝓦 ̇ ) → (Y → Y → 𝓣 ̇ ) → (X → Y) → 𝓤 ⊔ 𝓦 ⊔ 𝓣 ̇
is-strongly-extensional _♯_ _♯'_ f = ∀ x x' → f x ♯' f x' → x ♯ x'

being-strongly-extensional-is-prop : Fun-Ext
                                   → {X : 𝓤 ̇ } {Y : 𝓥 ̇ }
                                   → (_♯_ : X → X → 𝓦 ̇ )
                                   → (_♯'_ : Y → Y → 𝓣 ̇ )
                                   → is-prop-valued _♯_
                                   → (f : X → Y)
                                   → is-prop (is-strongly-extensional _♯_ _♯'_ f)
being-strongly-extensional-is-prop fe _♯_ _♯'_ ♯p f =
 Π₃-is-prop  fe (λ x x' a → ♯p x  x')

preserves : ∀ {𝓣} {X : 𝓤 ̇ } {Y : 𝓥 ̇ }
          → (X → X → 𝓦 ̇ ) → (Y → Y → 𝓣 ̇ ) → (X → Y) → 𝓤 ⊔ 𝓦 ⊔ 𝓣 ̇
preserves R S f = ∀ {x x'} → R x x' → S (f x) (f x')

\end{code}
