module Cat.Morphism.Orthogonal where
Orthogonal maps🔗
A pair of maps and are called orthogonal, written 1, if for every fitting into a commutative diagram like
the space of arrows
(dashed) which commute with everything is contractible. We refer to the
type of these dashed arrows as a Lifting
, and this type is parametrised
over all maps in the square.
module _ {o ℓ} (C : Precategory o ℓ) where
private
module C = Cr C
variable
: ⌞ C ⌟
a b c d : C.Hom a b
f g h u v open C using (Ob ; Hom ; _∘_ ; _≅_)
Lifting: (f : Hom a b) (g : Hom c d) (u : Hom a c) (v : Hom b d)
→ Type _
= Σ[ w ∈ Hom _ _ ] w ∘ f ≡ u × g ∘ w ≡ v
Lifting f g u v
: Hom a b → Hom c d → Type _
m⊥m {b = b} {c = c} f g =
m⊥m ∀ {u v} → v ∘ f ≡ g ∘ u
→ is-contr (Lifting f g u v)
In some of the proofs below, we’ll also need a name for a weakening of orthogonality, where the requirement that lifts are unique is dropped. We say lifts against if there is a map assigning lifts to every commutative squares with opposing and faces, as above.
: (f : Hom a b) (g : Hom c d) → Type _
lifts-against = ∀ {u v} → v ∘ f ≡ g ∘ u → Lifting f g u v lifts-against f g
We also outline concepts of a map being orthogonal to an object, which is informally written and an object being orthogonal to a map
: Hom a b → ⌞ C ⌟ → Type _
m⊥o {a} {b} f X = (a : Hom a X) → is-contr (Σ[ b ∈ Hom b X ] (b ∘ f ≡ a))
m⊥o
: ⌞ C ⌟ → Hom a b → Type _
o⊥m {a} {b} Y f = (c : Hom Y b) → is-contr (Σ[ d ∈ Hom Y a ] (f ∘ d ≡ c)) o⊥m
In the formalisation, we don’t write
infix, since it must be explicitly applied to the category in which the
morphisms live. Thus, we define three distinct predicates expressing
orthogonality: m⊥m
(“map-map”),
m⊥o
(“map-object”), and
o⊥m
(“object-map”). If the ambient category
has enough co/limits, being orthogonal to an object is equivalent to
being orthogonal to an object. For example,
iff.
where
is the unique map from
into the terminal
object.
open Terminal
open is-iso
The proof is mostly a calculation, so we present it without a lot of comment.
object-orthogonal-!-orthogonal: ∀ {X} (T : Terminal C) (f : Hom a b) → m⊥o f X ≃ m⊥m f (! T)
{X = X} T f =
object-orthogonal-!-orthogonal (hlevel 1) (hlevel 1) to from
prop-ext where
to : m⊥o f X → m⊥m f (! T)
to f⊥X {u} {v} sq =
(f⊥X u .centre .fst , f⊥X u .centre .snd , !-unique₂ T _ _) λ m →
contr (ap fst (f⊥X u .paths (m .fst , m .snd .fst)))
Σ-prop-path!
: m⊥m f (! T) → m⊥o f X
from = contr
from f⊥! a ( f⊥! {v = ! T} (!-unique₂ T _ _) .centre .fst
(!-unique₂ T _ _) .centre .snd .fst ) λ x → Σ-prop-path!
, f⊥! (ap fst (f⊥! _ .paths (x .fst , x .snd , !-unique₂ T _ _)))
As a passing observation we note that if and then Of course, this is immediate in categories, but it holds in the generality of precategories.
: ∀ {a b} {X Y} (f : Hom a b) → X ≅ Y → m⊥o f X → m⊥o f Y m⊥-iso
=
m⊥-iso f x≅y f⊥X a
contr( g.to ∘ contr' .centre .fst
.pullr (contr' .centre .snd) ∙ C.cancell g.invl )
, Cλ x → Σ-prop-path! $
_∘_ refl (ap fst (contr' .paths (g.from ∘ x .fst , C.pullr (x .snd))))
ap₂ .cancell g.invl
∙ Cwhere
module g = C._≅_ x≅y
= f⊥X (g.from ∘ a) contr'
A slightly more interesting lemma is that, if is orthogonal to itself, then it is an isomorphism:
: ∀ {a b} (f : Hom a b) → m⊥m f f → C.is-invertible f
self-orthogonal→invertible =
self-orthogonal→invertible f f⊥f .make-invertible (gpq .fst) (gpq .snd .snd) (gpq .snd .fst)
Cwhere
= f⊥f (C.idl _ ∙ C.intror refl) .centre gpq
For the next few lemmas, consider a square of the following form, where and are both lifts of the outer square.
If is an epimorphism, then In more succinct terms, the type of lifts of such a square is a proposition.
left-epic→lift-is-prop: C.is-epic f → v C.∘ f ≡ g C.∘ u → is-prop (Lifting f g u v)
(l , lf=u , _) (k , kf=u , _) =
left-epic→lift-is-prop f-epi vf=gu (f-epi l k (lf=u ∙ sym kf=u)) Σ-prop-path!
Dually, if is a monomorphism, then we the type of lifts is also a propostion.
right-monic→lift-is-prop: C.is-monic g → v C.∘ f ≡ g C.∘ u → is-prop (Lifting f g u v)
(l , _ , gl=v) (k , _ , gk=v) =
right-monic→lift-is-prop g-mono vf=gu (g-mono l k (gl=v ∙ sym gk=v)) Σ-prop-path!
As a corollary, if is an epi or is a mono, then it is sufficient to find any lift to establish that
left-epic-lift→orthogonal: (g : C.Hom c d)
→ C.is-epic f → lifts-against f g → m⊥m f g
=
left-epic-lift→orthogonal g f-epi lifts vf=gu (left-epic→lift-is-prop f-epi vf=gu) (lifts vf=gu)
is-prop∙→is-contr
right-monic-lift→orthogonal: (f : C.Hom a b)
→ C.is-monic g → lifts-against f g → m⊥m f g
=
right-monic-lift→orthogonal f g-mono lifts vf=gu (right-monic→lift-is-prop g-mono vf=gu) (lifts vf=gu) is-prop∙→is-contr
Isomorphisms are left and right orthogonal to every other morphism.
: (g : C.Hom c d) → C.is-invertible f → m⊥m f g
invertible→left-orthogonal : (f : C.Hom a b) → C.is-invertible g → m⊥m f g invertible→right-orthogonal
We will focus our attention on the left orthogonal case, as the proof for right orthogonality is completely dual. Suppose that is invertible, and is an arbitrary morphism. Invertible morphisms are epis, so it suffices to establish the existence of lifts to prove that is orthogonal to Luckily, these lifts are easy to find: if we have some square then fits perfectly along the diagonal:
A short calculation verifies that is indeed a lift.
{f = f} g f-inv =
invertible→left-orthogonal (C.invertible→epic f-inv) λ {u} {v} vf=gu →
left-epic-lift→orthogonal g .inv ,
u ∘ f.cancelr f.invr ,
C.from
Equiv(g ∘ u ∘ f.inv ≡ v ≃⟨ C.reassocl e⁻¹ ∙e C.pre-invr f-inv ⟩
g ∘ u ≡ v ∘ f ≃⟨ sym-equiv ⟩)
v ∘ f ≡ g ∘ u ≃∎
vf=guwhere module f = C.is-invertible f-inv
The proof of right orthogonality follows the exact same plan, so we omit the details.
{g = g} f g-inv =
invertible→right-orthogonal (C.invertible→monic g-inv) λ {u} {v} vf=gu →
right-monic-lift→orthogonal f .inv ∘ v ,
g.from
Equiv((g.inv ∘ v) ∘ f ≡ u ≃⟨ C.reassocl ∙e C.pre-invl g-inv ⟩
)
v ∘ f ≡ g ∘ u ≃∎
vf=gu ,.cancell g.invl
Cwhere module g = C.is-invertible g-inv
: m⊥m f g → lifts-against f g
orthogonal→lifts-against = o p .centre orthogonal→lifts-against o p
We also have the following two properties, which state that “lifting against” is, as a property of morphisms, closed under composition on both the left and the right. To understand the proof, it’s helpful to visualise the inputs in a diagram. Suppose we have and assume that both and lift against Showing that lifts against amounts to finding a diagonal for the rectangle
under the assumption that We’ll populate this diagram a bit by observing that, by composing the and edges together, we have a commutative square with faces and — and since lifts against this implies that we have a diagonal map which appears dashed in
This map satisfies and, importantly, This latter equation implies that we can now treat the right half of the diagram as another square, with faces and Since also lifts against this implies that we can find the dotted map in the diagram
satisfying and The map fits the type of fillers for our original rectangle, but we must still show that it makes both triangles commute. But this is easy: we have by a short calculation and immediately.
: lifts-against f h → lifts-against g h → lifts-against (f ∘ g) h
∘l-lifts-against =
∘l-lifts-against f-lifts g-lifts vfg=hu let (w , wg=u , hw=vf) = g-lifts (C.reassocl.from vfg=hu)
(t , tf=w , ht=v) = f-lifts (sym hw=vf)
in t , C.pulll tf=w ∙ wg=u , ht=v
This proof dualises almost term-for-term the case where we’re composing on the bottom face, i.e., when we have some which lifts against both and and we want to show lifts against
: lifts-against f g → lifts-against f h → lifts-against f (g ∘ h)
∘r-lifts-against =
∘r-lifts-against f-lifts g-lifts ve=fgu let (w , we=gu , fw=v) = f-lifts (C.reassocr.to ve=fgu)
(t , te=u , gt=w) = g-lifts we=gu
in t , te=u , C.pullr gt=w ∙ fw=v
Regarding reflections🔗
module
_ {o ℓ o' ℓ'} {C : Precategory o ℓ} {D : Precategory o' ℓ'}
{r : Functor C D} {ι : Functor D C}
(r⊣ι : r ⊣ ι) (ι-ff : is-fully-faithful ι)
where
private
module C = Cr C
module D = Cr D
module ι = Func ι
module r = Func r
module rι = Func (r F∘ ι)
module ιr = Func (ι F∘ r)
open _⊣_ r⊣ι
Let be an arbitrary reflective subcategory. Speaking abstractly, there is a “universal” choice of test for whether an object is “in” the subcategory: Whether the adjunction unit: is an isomorphism. The theory of orthogonality gives a second way to detect this situation. The proof here is from (Borceux 1994, vol. 1, sec. 5.4).
The first thing we observe is that any map such that is an isomorphism is orthogonal to every object in the subcategory: Let be inverted by and be the object. Given a map
in-subcategory→orthogonal-to-inverted: ∀ {X} {a b} {f : C.Hom a b} → D.is-invertible (r.₁ f) → m⊥o C f (ι.₀ X)
{X} {A} {B} {f} rf-inv a→x =
in-subcategory→orthogonal-to-inverted (fact , factors) λ { (g , factors') →
contr (h≡k factors factors') }
Σ-prop-path! where
module rf = D.is-invertible rf-inv
module η⁻¹ {a} = C.is-invertible (is-reflective→unit-G-is-iso r⊣ι ι-ff {a})
Observe that, since is a reflective subcategory, every unit morphism is an isomorphism; We define a morphism as the composite
: C.Hom (ι.₀ (r.₀ A)) (ι.₀ X)
b = η⁻¹.inv C.∘ ι.₁ (r.₁ a→x) b
satisfying (by naturality of the unit map) the property that This is an intermediate step in what we have to do: construct a map
: a→x ≡ b C.∘ unit.η _
p = sym (C.pullr (sym (unit.is-natural _ _ _)) ∙ C.cancell zag) p
We define that using the map we just constructed. It’s the composite
and a calculation shows us that this map is indeed a factorisation of through
: C.Hom B (ι.₀ X)
fact = b C.∘ ι.₁ rf.inv C.∘ unit.η _
fact
=
factors (b C.∘ ι.₁ rf.inv C.∘ unit.η B) C.∘ f ≡⟨ C.pullr (C.pullr (unit.is-natural _ _ _)) ⟩
.∘ ι.₁ rf.inv C.∘ (ιr.₁ f) C.∘ unit.η A ≡⟨ C.refl⟩∘⟨ C.cancell (ι.annihilate rf.invr) ⟩
b C.∘ unit.η A ≡˘⟨ p ⟩
b C a→x ∎
The proof that this factorisation is unique is surprisingly totally independent of the actual map we just constructed: If note that we must have (since is invertible, it is epic); But then we have
and since is an isomorphism, thus monic, we have
module _ {h k : C.Hom B (ι.₀ X)} (p : h C.∘ f ≡ a→x) (q : k C.∘ f ≡ a→x) where
: r.₁ h ≡ r.₁ k
rh≡rk = D.invertible→epic rf-inv (r.₁ h) (r.₁ k) (r.weave (p ∙ sym q))
rh≡rk
= C.invertible→monic (is-reflective→unit-G-is-iso r⊣ι ι-ff) _ _ $
h≡k .η (ι.₀ X) C.∘ h ≡⟨ unit.is-natural _ _ _ ⟩
unit.₁ h C.∘ unit.η B ≡⟨ ap ι.₁ rh≡rk C.⟩∘⟨refl ⟩
ιr.₁ k C.∘ unit.η B ≡˘⟨ unit.is-natural _ _ _ ⟩
ιr.η (ι.₀ X) C.∘ k ∎ unit
As a partial converse, if an object is orthogonal to every unit map (it suffices to be orthogonal to its own unit map), then it lies in the subcategory:
orthogonal-to-ηs→in-subcategory: ∀ {X} → (∀ B → m⊥o C (unit.η B) X) → C.is-invertible (unit.η X)
{X} ortho =
orthogonal-to-ηs→in-subcategory .make-invertible x lemma (ortho X C.id .centre .snd)
Cwhere
= ortho X C.id .centre .fst
x = unit.η _ C.∘ x ≡⟨ unit.is-natural _ _ _ ⟩
lemma .₁ x C.∘ unit.η (ιr.₀ X) ≡⟨ C.refl⟩∘⟨ η-comonad-commute r⊣ι ι-ff ⟩
ιr.₁ x C.∘ ιr.₁ (unit.η X) ≡⟨ ιr.annihilate (ortho X C.id .centre .snd) ⟩
ιr.id ∎ C
And the converse to that is a specialisation of the first thing we proved: We established that if is invertible by the reflection functor, and we know that is invertible by the reflection functor; It remains to replace with any object for which is an isomorphism.
in-subcategory→orthogonal-to-ηs: ∀ {X B} → C.is-invertible (unit.η X) → m⊥o C (unit.η B) X
=
in-subcategory→orthogonal-to-ηs inv (unit.η _) (C.invertible→iso _ (C.is-invertible-inverse inv))
m⊥-iso C (in-subcategory→orthogonal-to-inverted
(is-reflective→F-unit-is-iso r⊣ι ι-ff))
Though hang tight for a note on formalised notation↩︎
References
- Borceux, Francis. 1994. Handbook of Categorical Algebra. Vol. 1. Encyclopedia of Mathematics and Its Applications. Cambridge University Press. https://doi.org/10.1017/CBO9780511525858.