open import Cat.Morphism.Factorisation.Orthogonal
open import Cat.Functor.Adjoint.Reflective
open import Cat.Functor.WideSubcategory
open import Cat.Functor.Conservative
open import Cat.Direct.Generalized
open import Cat.Functor.Properties
open import Cat.Functor.Adjoint
open import Cat.Morphism.Class
open import Cat.Prelude

open import Data.Wellfounded.Properties
open import Data.Nat.Order
open import Data.Nat.Base

import Cat.Functor.Reasoning.FullyFaithful
import Cat.Functor.Reasoning
import Cat.Reasoning
module Cat.Reedy.Generalized where
module _ {o ℓ} (A : Precategory o ℓ) where
  private module A = Cat.Reasoning A

Generalized Reedy categories🔗

A generalized Reedy structure on a precategory consists of:

  • two classes of morphisms and
  • a function
  record is-generalized-reedy
    {ℓ⁻ ℓ⁺} (Neg : Arrows A ℓ⁻) (Pos : Arrows A ℓ⁺)
    (dim : A.Ob  Nat)
    : Type (o ⊔ ℓ ⊔ ℓ⁺ ⊔ ℓ⁻) where

subject to the following conditions:

  • The pair forms an orthogonal factorisation system. In particular, this means that both and contain all isomorphism of and are closed under composition.
    field
      neg-pos-ofs : is-ofs A Neg Pos

    open is-ofs neg-pos-ofs renaming
      ( is-iso→in-L to is-iso→neg
      ; is-iso→in-R to is-iso→pos
      ; L-is-stable to neg-∘
      ; R-is-stable to pos-∘
      ; L-subcat to Neg-subcat
      ; R-subcat to Pos-subcat
      )
      public
  • If is invertible, then
  • If is non-invertible then
  • If is non-invertible then
    field
      dim-iso :  {x y} {f : A.Hom x y}  A.is-invertible f  dim x ≡ dim y
      dim-neg :  {x y} {f : A.Hom x y}  f ∈ Neg  ¬ (A.is-invertible f)  dim x > dim y
      dim-pos :  {x y} {f : A.Hom x y}  f ∈ Pos  ¬ (A.is-invertible f)  dim x < dim y
  • If is in then must be invertible1.
    field
      neg+pos→invertible
        :  {x y} {f : A.Hom x y}
         f ∈ Neg
         f ∈ Pos
         A.is-invertible f
  • Finally, we require that for every and if then In other words, the stabilizer subgroup of relative to is trivial.
    field
      neg-trivial-stabilizer
        :  {x y} {f : A.Hom y y} {p : A.Hom x y}
         A.is-invertible f
         p ∈ Neg
         f A.∘ p ≡ p
         f ≡ A.id

The purpose of this final axiom is to ensure that isomorphisms in view morphisms in as epimorphisms.

    iso-neg-epic
      :  {x y z} {f₁ f₂ : A.Hom y z} {p : A.Hom x y}
       A.is-invertible f₁
       A.is-invertible f₂
       p ∈ Neg
       f₁ A.∘ p ≡ f₂ A.∘ p
       f₁ ≡ f₂

This follows from some isomorphism shuffling. All isomorphisms are monomorphisms, so it suffices to prove that However, is also an iso, so we can apply our axiom to reduce the goal to showing that which follows from our assumption that

    iso-neg-epic {f₁ = f₁} {f₂ = f₂} {p = p} f₁-inv f₂-inv p∈A⁻ f₁∘p=f₂∘p =
      A.invertible→monic f₂⁻¹-inv f₁ f₂ $
        f₂.inv A.∘ f₁ ≡⟨ f₂⁻¹∘f₁∘p=id ⟩
        A.id          ≡˘⟨ f₂.invr ⟩
        f₂.inv A.∘ f₂ ∎
      where
        module f₁ = A.is-invertible f₁-inv
        module f₂ = A.is-invertible f₂-inv

        f₂⁻¹-inv : A.is-invertible f₂.inv
        f₂⁻¹-inv = A.is-invertible-inverse f₂-inv

        f₂⁻¹∘f₁∘p=id : f₂.inv A.∘ f₁ ≡ A.id
        f₂⁻¹∘f₁∘p=id =
          neg-trivial-stabilizer (A.invertible-∘ f₂⁻¹-inv f₁-inv) p∈A⁻
          $ A.reassocl.from
          $ A.pre-invl.from f₂-inv f₁∘p=f₂∘p

We can also upgrade the stabilizer condition to an equivalence.

    neg-trivial-stabilizer-equiv
      :  {x y} {f : A.Hom y y} {p : A.Hom x y}
       p ∈ Neg
       (A.is-invertible f × f A.∘ p ≡ p)(f ≡ A.id)
    neg-trivial-stabilizer-equiv p∈A⁻ = prop-ext!
       (f-inv , fp=p)  neg-trivial-stabilizer f-inv p∈A⁻ fp=p)
       f=id  (A.subst-is-invertible (sym f=id) A.id-invertible) , A.eliml f=id)
  record Generalized-reedy (ℓ⁻ ℓ⁺ : Level) : Type (o ⊔ ℓ ⊔ lsuc ℓ⁻ ⊔ lsuc ℓ⁺) where
    field
      Neg : Arrows A ℓ⁻
      Pos : Arrows A ℓ⁺
      dim : A.Ob  Nat
      has-generalized-reedy : is-generalized-reedy Neg Pos dim
    open is-generalized-reedy has-generalized-reedy public

Reedy structures and direct categories🔗

module _
  {oc ℓc oa ℓa ℓ⁻ ℓ⁺}
  {C : Precategory oc ℓc} {A : Precategory oa ℓa}
  {Neg : Arrows A ℓ⁻} {Pos : Arrows A ℓ⁺} {dim : Precategory.Ob A  Nat}
  (A-reedy : is-generalized-reedy A Neg Pos dim)
  where
  private
    module A where
      open Cat.Reasoning A public
      open is-generalized-reedy A-reedy public
    open is-generalized-direct

If is a generalized Reedy structure, then the wide subcategory spanned by is a generalized direct category.

  generalized-reedy→pos-direct
    : is-generalized-direct (Wide A.Pos-subcat)

First, note that the inclusion functor is pseudomonic and thus conservative, as contains all isos. This means that if some is non-invertible in then it must also be non-invertible in

In particular, this means that is strictly monotone with respect to the relation

as non-invertible maps in increase dimension. This lets us pull back well-foundedness of to which completes the proof.

  generalized-reedy→pos-direct .≺-wf =
    reflect-wf <-wf dim $ rec! λ f ¬f-inv  A.dim-pos
      (f .witness)
      (¬f-inv ⊙ Forget-conservative)
     where
       Forget-conservative : is-conservative Forget-wide-subcat
       Forget-conservative = pseudomonic→conservative
         (is-pseudomonic-Forget-wide-subcat (A.is-iso→pos _))
         _

Reflecting generalized Reedy structures🔗

Let be a generalized Reedy category, and be a reflective subcategory with reflector and then is a generalized Reedy structure on

module _
  {oc ℓc oa ℓa ℓ⁻ ℓ⁺}
  {C : Precategory oc ℓc} {A : Precategory oa ℓa}
  {Neg : Arrows A ℓ⁻} {Pos : Arrows A ℓ⁺} {dim : Precategory.Ob A  Nat}
  {ι : Functor C A} {r : Functor A C}
  where
  open Functor
  reflect-generalized-reedy
    : (r⊣ι : r ⊣ ι)
     is-reflective r⊣ι
     Neg ⊆ F-restrict-arrows (ι F∘ r) Neg
     Pos ⊆ F-restrict-arrows (ι F∘ r) Pos
     is-generalized-reedy A Neg Pos dim
     is-generalized-reedy C
        (F-restrict-arrows ι Neg)
        (F-restrict-arrows ι Pos)
        (dim ⊙ ι .F₀)
  reflect-generalized-reedy r⊣ι ι-ff ι∘r-pos ι∘r-neg A-reedy = C-reedy where
    module A where
      open Cat.Reasoning A public
      open is-generalized-reedy A-reedy public

    module C = Cat.Reasoning C
    open is-generalized-reedy

    module ι = Cat.Functor.Reasoning.FullyFaithful ι ι-ff

Our first goal is to show that forms an orthogonal factorisation system on This follows from some general results about reflecting OFSs onto reflective subcategories.

    C-reedy : is-generalized-reedy C _ _ _
    C-reedy .neg-pos-ofs =
      reflect-ofs r⊣ι ι-ff ι∘r-pos ι∘r-neg A.neg-pos-ofs

Next, let’s show that the restriction of along is well-behaved. By definition is fully faithful, and thus conservative. This means that we can reflect the (non)-existence of isomorphisms in into which in turn lets us reflect all of the properties of dimensions.

    C-reedy .dim-iso f-inv =
      A.dim-iso (ι.F-map-invertible f-inv)
    C-reedy .dim-neg ι[f]∈A⁻ ¬f-inv =
      A.dim-neg ι[f]∈A⁻ (¬f-inv ⊙ ι.invertible.from)
    C-reedy .dim-pos ι[f]∈A⁺ ¬f-inv =
      A.dim-pos ι[f]∈A⁺ (¬f-inv ⊙ ι.invertible.from)
    C-reedy .neg+pos→invertible ι[f]∈A⁻ ι[f]∈A⁺ =
      ι.invertible.from (A.neg+pos→invertible ι[f]∈A⁻ ι[f]∈A⁺)

Finally, we need to show that the stabilizer subgroups of a with are trivial. First, note that a map is equal to if and only if However, has trivial stabilizers in so this is only true if is invertible and fixes Finally, is fully faithful, so this is true if and only if is invertible and

    C-reedy .neg-trivial-stabilizer {f = f} {p = p} f-inv ι[p]∈A⁻ f∘p=p =
      flip Equiv.from (f-inv , f∘p=p) $
        f ≡ C.id
          ≃⟨ ι.to-id ⟩
        ι.₁ f ≡ A.id
          ≃˘⟨ A.neg-trivial-stabilizer-equiv ι[p]∈A⁻ ⟩
        A.is-invertible (ι.₁ f) × ι.₁ f A.∘ ι.F₁ p ≡ ι.F₁ p
          ≃⟨ Σ-ap (ι.invertible-equiv e⁻¹)  _  ι.triangle-equivl)
        C.is-invertible f × f C.∘ p ≡ p
          ≃∎

  1. In the presence of excluded middle, the previous three axioms imply that every map with must be invertible, as otherwise we’d have However, in constructive foundations the best we can do is show that is not non-invertible, which is why we explicitly require this as an axiom.↩︎