module Cat.Allegory.Morphism {o β„“ β„“'} (A : Allegory o β„“ β„“') where

Morphisms in an allegoryπŸ”—

This module defines a couple of important classes of morphisms that can be found in an allegory.

Reflexive morphismsπŸ”—

A morphism in an allegory is reflexive if

is-reflexive : Hom x x β†’ Type _
is-reflexive f = id ≀ f

The composition of two reflexive morphisms is reflexive, and the identity morphism is trivially reflexive.

reflexive-id : is-reflexive (id {x})
reflexive-id = ≀-refl

reflexive-∘ : is-reflexive f β†’ is-reflexive g β†’ is-reflexive (f ∘ g)
reflexive-∘ {f = f} {g = g} f-refl g-refl =
  id      =⟨ sym (idl _) ⟩=
  id ∘ id β‰€βŸ¨ f-refl β—† g-refl βŸ©β‰€
  f ∘ g β‰€βˆŽ

The intersection of reflexive morphisms is reflexive.

reflexive-∩ : is-reflexive f β†’ is-reflexive g β†’ is-reflexive (f ∩ g)
reflexive-∩ f-refl g-refl = ∩-univ f-refl g-refl

The dual of a reflexive morphism is also reflexive.

reflexive-dual : is-reflexive f β†’ is-reflexive (f †)
reflexive-dual {f = f} f-refl =
  dual-≀ᡣ A $
  id † =⟨ dual-id A ⟩=
  id   β‰€βŸ¨ f-refl βŸ©β‰€
  f    β‰€βˆŽ

If and is reflexive, then is reflexive.

reflexive-≀ : f ≀ g β†’ is-reflexive f β†’ is-reflexive g
reflexive-≀ w f-refl = ≀-trans f-refl w

If is reflexive, then

reflexive→diagonal
  : is-reflexive f β†’ id ≀ f ∩ f †
reflexiveβ†’diagonal f-refl = ∩-univ f-refl (reflexive-dual f-refl)

Symmetric morphismsπŸ”—

A morphism is symmetric if

is-symmetric : Hom x x β†’ Type _
is-symmetric f = f ≀ f †

The identity morphism is trivially symmetric.

symmetric-id : is-symmetric (id {x})
symmetric-id {x = x} = subst (id {x} ≀_) (sym $ dual-id A) (≀-refl {f = id {x}})

The composition of symmetric morphisms and is symmetric if

symmetric-∘
  : is-symmetric f β†’ is-symmetric g
  β†’ g ∘ f ≀ f ∘ g
  β†’ is-symmetric (f ∘ g)
symmetric-∘ {f = f} {g = g} f-sym g-sym w =
  f ∘ g     β‰€βŸ¨ f-sym β—† g-sym βŸ©β‰€
  f † ∘ g † =⟨ sym dual-∘ ⟩=
  (g ∘ f) † β‰€βŸ¨ dual-≀ w βŸ©β‰€
  (f ∘ g) † β‰€βˆŽ

The dual of a symmetric morphism is symmetric.

symmetric-dual : is-symmetric f β†’ is-symmetric (f †)
symmetric-dual {f = f} f-sym = dual-≀ᡣ A $
  f † † =⟨ dual f ⟩=
  f     β‰€βŸ¨ f-sym βŸ©β‰€
  f †   β‰€βˆŽ

The intersection of symmetric morphisms is symmetric.

symmetric-∩ : is-symmetric f β†’ is-symmetric g β†’ is-symmetric (f ∩ g)
symmetric-∩ {f = f} {g = g} f-sym g-sym =
  f ∩ g     β‰€βŸ¨ ∩-pres f-sym g-sym βŸ©β‰€
  f † ∩ g † =⟨ sym $ dual-∩ A ⟩=
  (f ∩ g) † β‰€βˆŽ

If is symmetric, then it is equal to its dual.

symmetric→self-dual
  : is-symmetric f β†’ f ≑ f †
symmetric→self-dual f-sym =
  ≀-antisym f-sym (dual-≀ₗ A f-sym)

Transitive morphismsπŸ”—

A morphism is transitive if

is-transitive : Hom x x β†’ Type _
is-transitive f = f ∘ f ≀ f

The identity morphism is transitive.

transitive-id : is-transitive (id {x})
transitive-id = ≀-eliml ≀-refl

The composition of two transitive morphisms and is transitive if

transitive-∘
  : is-transitive f β†’ is-transitive g
  β†’ g ∘ f ≀ f ∘ g
  β†’ is-transitive (f ∘ g)
transitive-∘ {f = f} {g = g} f-trans g-trans w =
  (f ∘ g) ∘ (f ∘ g) β‰€βŸ¨ ≀-extend-inner w βŸ©β‰€
  (f ∘ f) ∘ (g ∘ g)   β‰€βŸ¨ f-trans β—† g-trans βŸ©β‰€
  f ∘ g             β‰€βˆŽ

A useful little lemma is that if is transitive, then

transitive-∩l : is-transitive f β†’ (f ∩ g) ∘ (f ∩ h) ≀ f
transitive-∩l f-trans = ≀-trans (∩-le-l β—† ∩-le-l) f-trans

transitive-∩r : is-transitive h β†’ (f ∩ h) ∘ (g ∩ h) ≀ h
transitive-∩r h-trans = ≀-trans (∩-le-r β—† ∩-le-r) h-trans

We can use these lemmas to show that the intersection of transitive morphisms is transitive.

transitive-∩
  : is-transitive f β†’ is-transitive g β†’ is-transitive (f ∩ g)
transitive-∩ {f = f} {g = g} f-trans g-trans =
  ∩-univ (transitive-∩l f-trans) (transitive-∩r g-trans)

If is transitive, then so is its dual.

transitive-dual : is-transitive f β†’ is-transitive (f †)
transitive-dual {f = f} f-trans =
  f † ∘ f † =⟨ sym dual-∘ ⟩=
  (f ∘ f) † β‰€βŸ¨ dual-≀ f-trans βŸ©β‰€
  f †       β‰€βˆŽ

Cotransitive morphismsπŸ”—

A morphism is cotransitive if

\ Warning

There is another notion of cotransitive relation, which stipulates that for all if then either or This is a poor choice of a name, as it is not a transitive relation in

Other sources call cotransitive morphisms β€œsymmetric idempotents”, though we avoid this terminology, as cotranstive morphisms are not symmetric.

is-cotransitive : Hom x x β†’ Type _
is-cotransitive f = f ≀ f ∘ f

The identity morphism is cotransitive.

cotransitive-id : is-cotransitive (id {x})
cotransitive-id = ≀-introl ≀-refl

The composition of two cotransitive morphisms and is cotransitive if

cotransitive-∘
  : is-cotransitive f β†’ is-cotransitive g
  β†’ f ∘ g ≀ g ∘ f
  β†’ is-cotransitive (f ∘ g)
cotransitive-∘ {f = f} {g = g} f-cotrans g-cotrans w =
  f ∘ g             β‰€βŸ¨ f-cotrans β—† g-cotrans βŸ©β‰€
  (f ∘ f) ∘ (g ∘ g) β‰€βŸ¨ ≀-extend-inner w βŸ©β‰€
  (f ∘ g) ∘ (f ∘ g) β‰€βˆŽ

If the intersection of and is cotransitive, then

cotransitive-∩-∘
  : is-cotransitive (f ∩ g)
  β†’ f ∩ g ≀ f ∘ g
cotransitive-∩-∘ {f = f} {g = g} f∩g-cotrans =
  f ∩ g             β‰€βŸ¨ f∩g-cotrans βŸ©β‰€
  (f ∩ g) ∘ (f ∩ g) β‰€βŸ¨ ∩-le-l β—† ∩-le-r βŸ©β‰€
  f ∘ g β‰€βˆŽ

If is reflexive, then it is cotransitive.

reflexive→cotransitive
  : is-reflexive f β†’ is-cotransitive f
reflexive→cotransitive {f = f} f-refl =
  f      =⟨ sym (idl f) ⟩=
  id ∘ f β‰€βŸ¨ f-refl β—€ f βŸ©β‰€
  f ∘ f β‰€βˆŽ

If is transitive and symmetric, then it is cotransitive.

transitive+symmetric→cotransitive
  : is-transitive f β†’ is-symmetric f β†’ is-cotransitive f
transitive+symmetric→cotransitive {f = f} f-trans f-sym =
  f           β‰€βŸ¨ ≀-conj f βŸ©β‰€
  f ∘ f † ∘ f β‰€βŸ¨ f β–Ά dual-≀ₗ A f-sym β—€ f βŸ©β‰€
  f ∘ f ∘ f   β‰€βŸ¨ f β–Ά f-trans βŸ©β‰€
  f ∘ f       β‰€βˆŽ

Coreflexive morphismsπŸ”—

is-coreflexive : Hom x x β†’ Type _
is-coreflexive f = f ≀ id

The composition of two coreflexive morphisms is coreflexive, and the identity morphism is trivially coreflexive.

coreflexive-∘ : is-coreflexive f β†’ is-coreflexive g β†’ is-coreflexive (f ∘ g)
coreflexive-∘ {f = f} {g = g} f-corefl g-corefl =
  f ∘ g   β‰€βŸ¨ f-corefl β—† g-corefl βŸ©β‰€
  id ∘ id =⟨ idl _ ⟩=
  id      β‰€βˆŽ

coreflexive-id : is-coreflexive (id {x})
coreflexive-id = ≀-refl

Coreflexive morphisms are closed under intersection.

coreflexive-∩
  : βˆ€ {x} {f g : Hom x x}
  β†’ is-coreflexive f β†’ is-coreflexive g β†’ is-coreflexive (f ∩ g)
coreflexive-∩ {f = f} {g = g} f-corefl g-corefl =
  f ∩ g   β‰€βŸ¨ ∩-pres f-corefl g-corefl βŸ©β‰€
  id ∩ id =⟨ ∩-idempotent ⟩=
  id      β‰€βˆŽ

Coreflexive morphisms are closed under duals.

coreflexive-dual : is-coreflexive f β†’ is-coreflexive (f †)
coreflexive-dual {f = f} f-corefl = dual-≀ₗ A $
  f    β‰€βŸ¨ f-corefl βŸ©β‰€
  id   =⟨ sym $ dual-id A ⟩=
  id † β‰€βˆŽ

If and is coreflexive, then is coreflexive.

coreflexive-≀ : f ≀ g β†’ is-coreflexive g β†’ is-coreflexive f
coreflexive-≀ w g-corefl = ≀-trans w g-corefl

If is coreflexive, then it is transitive, cotransitive, and symmetric. Coreflexive morphisms are also anti-symmetric, see coreflexive→antisymmetric.

coreflexive→transitive
  : is-coreflexive f β†’ is-transitive f
coreflexive→transitive {f = f} f-corefl =
  f ∘ f  β‰€βŸ¨ f-corefl β—€ f βŸ©β‰€
  id ∘ f =⟨ idl _ ⟩=
  f      β‰€βˆŽ

coreflexive→cotransitive
  : is-coreflexive f β†’ is-cotransitive f
coreflexive→cotransitive {f = f} f-corefl =
  f           β‰€βŸ¨ ≀-conj f βŸ©β‰€
  f ∘ f † ∘ f β‰€βŸ¨ f β–Ά ≀-eliml (coreflexive-dual f-corefl) βŸ©β‰€
  f ∘ f       β‰€βˆŽ

coreflexive→symmetric
  : is-coreflexive f β†’ is-symmetric f
coreflexive→symmetric {f = f} f-corefl =
  f             β‰€βŸ¨ ≀-conj f βŸ©β‰€
  f ∘ f † ∘ f   β‰€βŸ¨ f-corefl β—† ≀-refl β—† f-corefl βŸ©β‰€
  id ∘ f † ∘ id =⟨ idl _ βˆ™ idr _ ⟩=
  f † β‰€βˆŽ

As coreflexive morphisms are both transitive ( and cotransitive ( they are idempotent.

coreflexive→idempotent : is-coreflexive f → is-idempotent f
coreflexive→idempotent f-corefl =
  ≀-antisym (coreflexiveβ†’transitive f-corefl) (coreflexiveβ†’cotransitive f-corefl)

Furthermore, composition of coreflexive morphisms is equivalent to intersection.

coreflexive-∘-∩
  : βˆ€ {x} {f g : Hom x x}
  β†’ is-coreflexive f β†’ is-coreflexive g
  β†’ f ∘ g ≑ f ∩ g
coreflexive-∘-∩ {f = f} {g = g} f-corefl g-corefl =
  ≀-antisym ≀-to ≀-from
  where
    ≀-to : f ∘ g ≀ f ∩ g
    ≀-to = ∩-univ (≀-elimr g-corefl) (≀-eliml f-corefl)

    ≀-from : f ∩ g ≀ f ∘ g
    ≀-from =
      cotransitive-∩-∘ $
      coreflexive→cotransitive $
      coreflexive-∩ f-corefl g-corefl

This has a useful corollary: coreflexive morphisms always commute!

coreflexive-comm
  : βˆ€ {x} {f g : Hom x x}
  β†’ is-coreflexive f β†’ is-coreflexive g
  β†’ f ∘ g ≑ g ∘ f
coreflexive-comm f-corefl g-corefl =
  coreflexive-∘-∩ f-corefl g-corefl
  ·· ∩-comm
  ·· sym (coreflexive-∘-∩ g-corefl f-corefl)

Functional morphismsπŸ”—

A morphism is functional when In these are the relations such that every is related to at most one To see this, note that is defined as Therefore, means that if there exists any such that and then and must be equal. Put more plainly, every is related to at most one

is-functional : Hom x y β†’ Type _
is-functional f = f ∘ f † ≀ id

First, a useful lemma: coreflexive morphisms are always functional.

coreflexive→functional : is-coreflexive f → is-functional f
coreflexive→functional f-corefl =
  coreflexive-∘ f-corefl (coreflexive-dual f-corefl)

This immediately implies that the identity morphism is functional.

functional-id : is-functional (id {x})
functional-id = coreflexive→functional coreflexive-id

Functional morphisms are closed under composition and intersection.

functional-∘ : is-functional f β†’ is-functional g β†’ is-functional (f ∘ g)
functional-∘ {f = f} {g = g} f-func g-func =
  (f ∘ g) ∘ (f ∘ g) † β‰€βŸ¨ †-cancel-inner g-func βŸ©β‰€
  f ∘ f †             β‰€βŸ¨ f-func βŸ©β‰€
  id                  β‰€βˆŽ

functional-∩ : is-functional f β†’ is-functional g β†’ is-functional (f ∩ g)
functional-∩ {f = f} {g = g} f-func g-func =
  (f ∩ g) ∘ (f ∩ g) †                       =⟨ ap ((f ∩ g) ∘_) (dual-∩ A) ⟩=
  (f ∩ g) ∘ (f † ∩ g †)                     β‰€βŸ¨ ∩-distrib βŸ©β‰€
  (f ∘ f † ∩ g ∘ f †) ∩ (f ∘ g † ∩ g ∘ g †) β‰€βŸ¨ ∩-pres ∩-le-l ∩-le-r βŸ©β‰€
  f ∘ f † ∩ g ∘ g †                         β‰€βŸ¨ ∩-pres f-func g-func βŸ©β‰€
  id ∩ id                                   =⟨ ∩-idempotent ⟩=
  id                                        β‰€βˆŽ

Entire morphismsπŸ”—

A morphism is entire when In these are the relations where each must be related to at least one To see this, recall that is defined as If then we can reduce this statement down to

is-entire : Hom x y β†’ Type _
is-entire f = id ≀ f † ∘ f

Reflexive morphisms are always entire.

reflexive→entire : is-reflexive f → is-entire f
reflexive→entire f-refl =
  reflexive-∘ (reflexive-dual f-refl) f-refl

From this, we can deduce that the identity morphism is entire.

entire-id : is-entire (id {x})
entire-id = reflexive→entire reflexive-id

Entire morphisms are closed under composition.

entire-∘ : is-entire f β†’ is-entire g β†’ is-entire (f ∘ g)
entire-∘ {f = f} {g = g} f-entire g-entire =
  id                  β‰€βŸ¨ g-entire βŸ©β‰€
  g † ∘ g             β‰€βŸ¨ g † β–Ά ≀-introl f-entire βŸ©β‰€
  g † ∘ (f † ∘ f) ∘ g =⟨ extendl (pulll (sym dual-∘)) ⟩=
  (f ∘ g) † ∘ (f ∘ g) β‰€βˆŽ

DomainsπŸ”—

The domain of a morphism is defined as denoted In the domain of a relation is a relation that relates two elements whenever and for some

domain : Hom x y β†’ Hom x x
domain f = id ∩ f † ∘ f

The domain of a morphism is always coreflexive.

domain-coreflexive : βˆ€ (f : Hom x y) β†’ is-coreflexive (domain f)
domain-coreflexive f = ∩-le-l

Furthermore, the domain enjoys the following universal property: Let and such that is coreflexive. Then if and only if

domain-universalr : is-coreflexive g β†’ domain f ≀ g β†’ f ≀ f ∘ g
domain-universalr {g = g} {f = f} g-corefl w =
  f                  β‰€βŸ¨ ∩-univ (≀-intror ≀-refl) ≀-refl βŸ©β‰€
  (f ∘ id) ∩ f       β‰€βŸ¨ modular id f f βŸ©β‰€
  f ∘ (id ∩ f † ∘ f) β‰€βŸ¨ f β–Ά w βŸ©β‰€
  f ∘ g              β‰€βˆŽ

domain-universall : is-coreflexive g β†’ f ≀ f ∘ g β†’ domain f ≀ g
domain-universall {g = g} {f = f} g-corefl w =
  id ∩ (f † ∘ f)           β‰€βŸ¨ ∩-pres-r (≀-pushr w) βŸ©β‰€
  id ∩ ((f † ∘ f) ∘ g)     =⟨ ∩-comm ⟩=
  ((f † ∘ f) ∘ g) ∩ id     β‰€βŸ¨ modular' g (f † ∘ f) id βŸ©β‰€
  (f † ∘ f ∩ id ∘ g †) ∘ g β‰€βŸ¨ ≀-trans ∩-le-r (≀-eliml ≀-refl) β—€ g βŸ©β‰€
  g † ∘ g                  β‰€βŸ¨ ≀-eliml (coreflexive-dual g-corefl) βŸ©β‰€
  g                        β‰€βˆŽ

This has a nice corollary:

domain-absorb : βˆ€ (f : Hom x y) β†’ f ∘ domain f ≑ f
domain-absorb f =
  ≀-antisym
    domain-elimr
    (domain-universalr (domain-coreflexive f) ≀-refl)

We can nicely characterize the domain of an intersection.

domain-∩ : domain (f ∩ g) ≑ id ∩ f † ∘ g
domain-∩ {f = f} {g = g} = ≀-antisym ≀-to ≀-from where
  ≀-to : domain (f ∩ g) ≀ id ∩ f † ∘ g
  ≀-to =
    ∩-univ
      (domain-coreflexive (f ∩ g))
      (≀-trans ∩-le-r (dual-≀ ∩-le-l β—† ∩-le-r))

  ≀-from : id ∩ f † ∘ g ≀ domain (f ∩ g)
  ≀-from =
    id ∩ f † ∘ g                               β‰€βŸ¨ ∩-univ ∩-le-l (∩-univ (∩-univ ∩-le-r ∩-le-l) ∩-le-l ) βŸ©β‰€
    id ∩ (f † ∘ g ∩ id) ∩ id                   β‰€βŸ¨ ∩-pres-r (∩-pres-l (modular g (f †) id)) βŸ©β‰€
    id ∩ (f † ∘ (g ∩ ⌜ f † † ∘ id ⌝)) ∩ id     =⟨ ap! (idr _ βˆ™ dual f) ⟩=
    id ∩ (f † ∘ (g ∩ f)) ∩ id                  β‰€βŸ¨ ∩-pres-r (modular' (g ∩ f) (f †) id) βŸ©β‰€
    id ∩ (f † ∩ ⌜ id ∘ (g ∩ f) † ⌝) ∘ (g ∩ f)  =⟨ ap! (idl _) ⟩=
    id ∩ (f † ∩ ⌜ g ∩ f ⌝ †) ∘ ⌜ g ∩ f ⌝       =⟨ ap! ∩-comm ⟩=
    id ∩ (f † ∩ (f ∩ g) †) ∘ (f ∩ g)           β‰€βŸ¨ ∩-pres-r (∩-le-r β—€ (f ∩ g)) βŸ©β‰€
    id ∩ (f ∩ g) † ∘ (f ∩ g)                   β‰€βˆŽ

Furthermore, the domain of is contained in the domain of

domain-∘ : domain (f ∘ g) ≀ domain g
domain-∘ {f = f} {g = g} =
  domain-universall (domain-coreflexive g) $
  ≀-pushr (domain-universalr (domain-coreflexive g) ≀-refl)

If then

domain-≀ : f ≀ g β†’ domain f ≀ domain g
domain-≀ w = ∩-pres-r (dual-≀ w β—† w)

The domain of the identity morphism is simply the identity morphism.

domain-id : domain (id {x}) ≑ id
domain-id = ≀-antisym ∩-le-l (∩-univ ≀-refl (≀-introl symmetric-id))

Characterizing composition of domains is somewhat more difficult, though it is possible. Namely, we shall show the following:

domain-smashr
  : βˆ€ (f : Hom x z) (g : Hom x y)
  β†’ domain (f ∘ domain g) ≑ domain f ∘ domain g
domain-smashr f g = ≀-antisym ≀-to ≀-from where

We begin by noting that the composition is coreflexive.

  fg-corefl : is-coreflexive (domain f ∘ domain g)
  fg-corefl = coreflexive-∘ (domain-coreflexive f) (domain-coreflexive g)

To show the forward direction, we can apply the universal property of domains to transform the goal into

We can then solve this goal by repeatedly appealing to the fact that domains are coreflexive.

  ≀-to : domain (f ∘ domain g) ≀ domain f ∘ domain g
  ≀-to =
    domain-universall fg-corefl $
    f ∘ domain g                           =˘⟨ apβ‚‚ _∘_ (domain-absorb f) domain-idempotent ⟩=˘
    (f ∘ domain f) ∘ (domain g ∘ domain g) =⟨ extendl (extendr domain-comm) ⟩=
    (f ∘ domain g) ∘ (domain f ∘ domain g) β‰€βˆŽ

To show the reverse direction, we apply the universal property of the intersection, reducing the goal to

We then solve the goal by an extended series of appeals to the coreflexivity of domains.

  ≀-from : domain f ∘ domain g ≀ domain (f ∘ domain g)
  ≀-from = ∩-univ fg-corefl $
    domain f ∘ domain g               =˘⟨ ap (domain f ∘_) domain-idempotent ⟩=˘
    domain f ∘ domain g ∘ domain g    =⟨ extendl domain-comm ⟩=
    domain g ∘ domain f ∘ domain g    =⟨ ap (_∘ domain f ∘ domain g) (sym domain-dual) ⟩=
    domain g † ∘ domain f ∘ domain g  β‰€βŸ¨ domain g † β–Ά ∩-le-r β—€ domain g βŸ©β‰€
    domain g † ∘ (f † ∘ f) ∘ domain g =⟨ extendl (pulll (sym dual-∘)) ⟩=
    (f ∘ domain g) † ∘ f ∘ domain g   β‰€βˆŽ

We can also characterize postcomposition by a domain, though this is restricted to an inequality in the general case.

domain-swapl
  : βˆ€ (f : Hom y z) (g : Hom x y)
  β†’ domain f ∘ g ≀ g ∘ domain (f ∘ g)
domain-swapl f g =
  (id ∩ (f † ∘ f)) ∘ g             β‰€βŸ¨ ∩-distribr βŸ©β‰€
  (id ∘ g ∩ (f † ∘ f) ∘ g)         =⟨ apβ‚‚ _∩_ id-comm-sym (sym (assoc (f †) f g)) ⟩=
  (g ∘ id ∩ f † ∘ f ∘ g)           β‰€βŸ¨ modular id g (f † ∘ f ∘ g) βŸ©β‰€
  g ∘ (id ∩ ⌜ g † ∘ f † ∘ f ∘ g ⌝) =⟨ ap! (pulll (sym dual-∘)) ⟩=
  g ∘ (id ∩ (f ∘ g) † ∘ (f ∘ g))   β‰€βˆŽ

We can strengthen this to an equality when is functional.

domain-swap
  : βˆ€ (f : Hom y z) (g : Hom x y)
  β†’ is-functional g
  β†’ domain f ∘ g ≑ g ∘ domain (f ∘ g)
domain-swap f g w =
  ≀-antisym (domain-swapl f g) $
  g ∘ (id ∩ (f ∘ g) † ∘ (f ∘ g))   β‰€βŸ¨ ∩-distribl βŸ©β‰€
  g ∘ id ∩ g ∘ (f ∘ g) † ∘ (f ∘ g) β‰€βŸ¨ ∩-pres-r (≀-extendl (†-pulll w)) βŸ©β‰€
  g ∘ id ∩ id ∘ f † ∘ f ∘ g        =⟨ apβ‚‚ _∩_ id-comm (idl _) ⟩=
  id ∘ g ∩ f † ∘ f ∘ g             β‰€βŸ¨ modular' g id (f † ∘ f ∘ g) βŸ©β‰€
  (id ∩ (f † ∘ f ∘ g) ∘ g †) ∘ g   β‰€βŸ¨ ∩-pres-r (≀-pullr (≀-cancelr w)) β—€ g βŸ©β‰€
  (id ∩ f † ∘ f) ∘ g β‰€βˆŽ

We also note that domains are always functional.

domain-functional : (f : Hom x y) β†’ is-functional (domain f)
domain-functional f = coreflexive→functional (domain-coreflexive f)

The domain of an entire morphism is the identity.

domain-entire : is-entire f β†’ domain f ≑ id
domain-entire f-entire =
  ≀-antisym
    (domain-coreflexive _)
    (∩-univ ≀-refl f-entire)

Antisymmetric morphismsπŸ”—

A morphism is anti-symmetric if

is-antisymmetric : Hom x x β†’ Type _
is-antisymmetric f = f ∩ f † ≀ id

Identity morphisms are anti-symmetric.

antisymmetric-id
  : is-antisymmetric (id {x})
antisymmetric-id =
  id ∩ ⌜ id † ⌝ =⟨ ap! (dual-id A) ⟩=
  id ∩ id       =⟨ ∩-idempotent ⟩=
  id            β‰€βˆŽ

If and is anti-symmetric, then is anti-symmetric.

antisymmetric-≀
  : f ≀ g β†’ is-antisymmetric g β†’ is-antisymmetric f
antisymmetric-≀ {f = f} {g = g} w g-antisym =
  f ∩ f † β‰€βŸ¨ ∩-pres w (dual-≀ w) βŸ©β‰€
  g ∩ g † β‰€βŸ¨ g-antisym βŸ©β‰€
  id      β‰€βˆŽ

If is anti-symmetric and reflexive, then

reflexive+antisymmetric→diagonal
  : is-reflexive f β†’ is-antisymmetric f β†’ f ∩ f † ≑ id
reflexive+antisymmetric→diagonal f-refl f-antisym =
  ≀-antisym f-antisym (reflexiveβ†’diagonal f-refl)

If is coreflexive, then it is anti-symmetric.

coreflexive→antisymmetric : is-coreflexive f → is-antisymmetric f
coreflexive→antisymmetric {f = f} f-corefl =
  f ∩ f † β‰€βŸ¨ ∩-pres f-corefl (coreflexive-dual f-corefl) βŸ©β‰€
  id ∩ id =⟨ ∩-idempotent ⟩=
  id β‰€βˆŽ