Documentation

Mathlib.CategoryTheory.FiberedCategory.HasFibers

Fibers of functors #

In this file we introduce a typeclass HasFibers for a functor p : 𝒳 ⥤ 𝒮, consisting of:

We also provide a canonical HasFibers instance, which uses the standard fibers Fiber p S (see Fiber.lean). This makes it so that any result proven about HasFibers can be used for the standard fibers as well.

The reason for introducing this typeclass is that in practice, when working with (pre)fibered categories one often already has a collection of categories Fib S for every S that are equivalent to the fibers Fiber p S. One would then like to use these categories Fib S directly, instead of working through this equivalence of categories. By developing an API for the HasFibers typeclass, this will be possible.

Here is an example of when this typeclass is useful. Suppose we have a presheaf of types F : 𝒮ᵒᵖ ⥤ Type _. The associated fibered category then has objects (S, a) where S : 𝒮 and a is an element of F(S). The fiber category Fiber p S is then equivalent to the discrete category Fib S with objects a in F(S). In this case, the HasFibers instance is given by the categories F(S) and the functor ι sends a : F(S) to (S, a) in the fibered category.

Main API #

The following API is developed so that the fibers from a HasFibers instance can be used analogously to the standard fibers.

class HasFibers {𝒮 : Type u₁} {𝒳 : Type u₂} [CategoryTheory.Category.{v₁, u₁} 𝒮] [CategoryTheory.Category.{v₂, u₂} 𝒳] (p : CategoryTheory.Functor 𝒳 𝒮) :
Type (max (max (max (max u₁ u₂) (u₃ + 1)) v₂) (v₃ + 1))

HasFibers is an extrinsic notion of fibers on a functor p : 𝒳 ⥤ 𝒮. It is given by a collection of categories Fib S for every S : 𝒮 (the fiber categories), each equipped with a functors ι : Fib S ⥤ 𝒳 which map constantly to S on the base such that the induced functor Fib S ⥤ Fiber p S is an equivalence.

Instances

    The HasFibers on p : 𝒳 ⥤ 𝒮 given by the fibers of p

    Equations
    Instances For

      The induced functor from Fib p S to the standard fiber.

      Equations
      Instances For
        @[simp]
        theorem HasFibers.inducedFunctor_map_coe {𝒮 : Type u₁} {𝒳 : Type u₂} [CategoryTheory.Category.{v₁, u₁} 𝒮] [CategoryTheory.Category.{v₂, u₂} 𝒳] (p : CategoryTheory.Functor 𝒳 𝒮) [HasFibers p] (S : 𝒮) {X✝ Y✝ : Fib p S} (φ : X✝ Y✝) :
        ((inducedFunctor p S).map φ) = (ι S).map φ
        @[simp]
        theorem HasFibers.inducedFunctor_obj_coe {𝒮 : Type u₁} {𝒳 : Type u₂} [CategoryTheory.Category.{v₁, u₁} 𝒮] [CategoryTheory.Category.{v₂, u₂} 𝒳] (p : CategoryTheory.Functor 𝒳 𝒮) [HasFibers p] (S : 𝒮) (x : Fib p S) :
        ((inducedFunctor p S).obj x) = (ι S).obj x

        The natural transformation ι S ≅ (inducedFunctor p S) ⋙ (fiberInclusion p S)

        Equations
        Instances For
          @[simp]
          theorem HasFibers.proj_eq {𝒮 : Type u₁} {𝒳 : Type u₂} [CategoryTheory.Category.{v₁, u₁} 𝒮] [CategoryTheory.Category.{v₂, u₂} 𝒳] {p : CategoryTheory.Functor 𝒳 𝒮} [HasFibers p] {S : 𝒮} (a : Fib p S) :
          p.obj ((ι S).obj a) = S
          def HasFibers.projMap {𝒮 : Type u₁} {𝒳 : Type u₂} [CategoryTheory.Category.{v₁, u₁} 𝒮] [CategoryTheory.Category.{v₂, u₂} 𝒳] {p : CategoryTheory.Functor 𝒳 𝒮} [HasFibers p] {R S : 𝒮} {a : Fib p R} {b : Fib p S} (φ : (ι R).obj a (ι S).obj b) :
          R S

          The morphism R ⟶ S in 𝒮 obtained by projecting a morphism φ : (ι R).obj a ⟶ (ι S).obj b.

          Equations
          Instances For
            instance HasFibers.homLift {𝒮 : Type u₁} {𝒳 : Type u₂} [CategoryTheory.Category.{v₁, u₁} 𝒮] [CategoryTheory.Category.{v₂, u₂} 𝒳] {p : CategoryTheory.Functor 𝒳 𝒮} [HasFibers p] {S : 𝒮} {a b : Fib p S} (φ : a b) :

            For any homomorphism φ in a fiber Fib S, its image under ι S lies over 𝟙 S.

            noncomputable def HasFibers.Fib.homMk {𝒮 : Type u₁} {𝒳 : Type u₂} [CategoryTheory.Category.{v₁, u₁} 𝒮] [CategoryTheory.Category.{v₂, u₂} 𝒳] {p : CategoryTheory.Functor 𝒳 𝒮} [HasFibers p] {S : 𝒮} {a b : Fib p S} (φ : (ι S).obj a (ι S).obj b) [p.IsHomLift (CategoryTheory.CategoryStruct.id S) φ] :
            a b

            A version of fullness of the functor Fib S ⥤ Fiber p S that can be used inside the category 𝒳.

            Equations
            Instances For
              @[simp]
              theorem HasFibers.Fib.map_homMk {𝒮 : Type u₁} {𝒳 : Type u₂} [CategoryTheory.Category.{v₁, u₁} 𝒮] [CategoryTheory.Category.{v₂, u₂} 𝒳] {p : CategoryTheory.Functor 𝒳 𝒮} [HasFibers p] {S : 𝒮} {a b : Fib p S} (φ : (ι S).obj a (ι S).obj b) [p.IsHomLift (CategoryTheory.CategoryStruct.id S) φ] :
              (ι S).map (homMk φ) = φ
              theorem HasFibers.Fib.hom_ext {𝒮 : Type u₁} {𝒳 : Type u₂} [CategoryTheory.Category.{v₁, u₁} 𝒮] [CategoryTheory.Category.{v₂, u₂} 𝒳] {p : CategoryTheory.Functor 𝒳 𝒮} [HasFibers p] {S : 𝒮} {a b : Fib p S} {f g : a b} (h : (ι S).map f = (ι S).map g) :
              f = g
              theorem HasFibers.Fib.hom_ext_iff {𝒮 : Type u₁} {𝒳 : Type u₂} [CategoryTheory.Category.{v₁, u₁} 𝒮] [CategoryTheory.Category.{v₂, u₂} 𝒳] {p : CategoryTheory.Functor 𝒳 𝒮} [HasFibers p] {S : 𝒮} {a b : Fib p S} {f g : a b} :
              f = g (ι S).map f = (ι S).map g
              noncomputable def HasFibers.Fib.isoMk {𝒮 : Type u₁} {𝒳 : Type u₂} [CategoryTheory.Category.{v₁, u₁} 𝒮] [CategoryTheory.Category.{v₂, u₂} 𝒳] {p : CategoryTheory.Functor 𝒳 𝒮} [HasFibers p] {S : 𝒮} {a b : Fib p S} (Φ : (ι S).obj a (ι S).obj b) ( : p.IsHomLift (CategoryTheory.CategoryStruct.id S) Φ.hom) :
              a b

              The lift of an isomorphism Φ : (ι S).obj a ≅ (ι S).obj b lying over 𝟙 S to an isomorphism in Fib S.

              Equations
              Instances For
                @[simp]
                theorem HasFibers.Fib.isoMk_hom {𝒮 : Type u₁} {𝒳 : Type u₂} [CategoryTheory.Category.{v₁, u₁} 𝒮] [CategoryTheory.Category.{v₂, u₂} 𝒳] {p : CategoryTheory.Functor 𝒳 𝒮} [HasFibers p] {S : 𝒮} {a b : Fib p S} (Φ : (ι S).obj a (ι S).obj b) ( : p.IsHomLift (CategoryTheory.CategoryStruct.id S) Φ.hom) :
                (isoMk Φ ).hom = homMk Φ.hom
                @[simp]
                theorem HasFibers.Fib.isoMk_inv {𝒮 : Type u₁} {𝒳 : Type u₂} [CategoryTheory.Category.{v₁, u₁} 𝒮] [CategoryTheory.Category.{v₂, u₂} 𝒳] {p : CategoryTheory.Functor 𝒳 𝒮} [HasFibers p] {S : 𝒮} {a b : Fib p S} (Φ : (ι S).obj a (ι S).obj b) ( : p.IsHomLift (CategoryTheory.CategoryStruct.id S) Φ.hom) :
                (isoMk Φ ).inv = homMk Φ.inv
                noncomputable def HasFibers.Fib.mk {𝒮 : Type u₁} {𝒳 : Type u₂} [CategoryTheory.Category.{v₁, u₁} 𝒮] [CategoryTheory.Category.{v₂, u₂} 𝒳] {p : CategoryTheory.Functor 𝒳 𝒮} [HasFibers p] {S : 𝒮} {a : 𝒳} (ha : p.obj a = S) :
                Fib p S

                An object in Fib p S isomorphic in 𝒳 to a given object a : 𝒳 such that p(a) = S.

                Equations
                Instances For
                  noncomputable def HasFibers.Fib.mkIsoSelf {𝒮 : Type u₁} {𝒳 : Type u₂} [CategoryTheory.Category.{v₁, u₁} 𝒮] [CategoryTheory.Category.{v₂, u₂} 𝒳] {p : CategoryTheory.Functor 𝒳 𝒮} [HasFibers p] {S : 𝒮} {a : 𝒳} (ha : p.obj a = S) :
                  (ι S).obj (mk ha) a

                  Applying ι S to the preimage of a : 𝒳 in Fib p S yields an object isomorphic to a.

                  Equations
                  Instances For
                    noncomputable def HasFibers.mkPullback {𝒮 : Type u₁} {𝒳 : Type u₂} [CategoryTheory.Category.{v₁, u₁} 𝒮] [CategoryTheory.Category.{v₂, u₂} 𝒳] {p : CategoryTheory.Functor 𝒳 𝒮} [HasFibers p] [p.IsPreFibered] {R S : 𝒮} {a : 𝒳} (f : R S) (ha : p.obj a = S) :
                    Fib p R

                    The domain, taken in Fib p R, of some cartesian morphism lifting a given f : R ⟶ S in 𝒮

                    Equations
                    Instances For
                      noncomputable def HasFibers.pullbackMap {𝒮 : Type u₁} {𝒳 : Type u₂} [CategoryTheory.Category.{v₁, u₁} 𝒮] [CategoryTheory.Category.{v₂, u₂} 𝒳] {p : CategoryTheory.Functor 𝒳 𝒮} [HasFibers p] [p.IsPreFibered] {R S : 𝒮} {a : 𝒳} (f : R S) (ha : p.obj a = S) :
                      (ι R).obj (mkPullback f ha) a

                      A cartesian morphism lifting f : R ⟶ S with domain in the image of Fib p R

                      Equations
                      Instances For
                        instance HasFibers.pullbackMap.isCartesian {𝒮 : Type u₁} {𝒳 : Type u₂} [CategoryTheory.Category.{v₁, u₁} 𝒮] [CategoryTheory.Category.{v₂, u₂} 𝒳] {p : CategoryTheory.Functor 𝒳 𝒮} [HasFibers p] [p.IsPreFibered] {R S : 𝒮} {a : 𝒳} (f : R S) (ha : p.obj a = S) :
                        noncomputable def HasFibers.inducedMap {𝒮 : Type u₁} {𝒳 : Type u₂} [CategoryTheory.Category.{v₁, u₁} 𝒮] [CategoryTheory.Category.{v₂, u₂} 𝒳] {p : CategoryTheory.Functor 𝒳 𝒮} [HasFibers p] {R S : 𝒮} {a : 𝒳} {b b' : Fib p R} (f : R S) (ψ : (ι R).obj b' a) [p.IsCartesian f ψ] (φ : (ι R).obj b a) [p.IsHomLift f φ] :
                        b b'

                        Given a fibered category p, b' b in Fib R, and a pullback ψ : b ⟶ a in 𝒳, i.e.

                        b'       b --ψ--> a
                        |        |        |
                        v        v        v
                        R ====== R --f--> S
                        

                        Then the induced map τ : b' ⟶ b can be lifted to the fiber over R

                        Equations
                        Instances For
                          theorem HasFibers.inducedMap_comp {𝒮 : Type u₁} {𝒳 : Type u₂} [CategoryTheory.Category.{v₁, u₁} 𝒮] [CategoryTheory.Category.{v₂, u₂} 𝒳] {p : CategoryTheory.Functor 𝒳 𝒮} [HasFibers p] {R S : 𝒮} {a : 𝒳} {b b' : Fib p R} (f : R S) (ψ : (ι R).obj b' a) [p.IsCartesian f ψ] (φ : (ι R).obj b a) [p.IsHomLift f φ] :
                          theorem HasFibers.inducedMap_comp_assoc {𝒮 : Type u₁} {𝒳 : Type u₂} [CategoryTheory.Category.{v₁, u₁} 𝒮] [CategoryTheory.Category.{v₂, u₂} 𝒳] {p : CategoryTheory.Functor 𝒳 𝒮} [HasFibers p] {R S : 𝒮} {a : 𝒳} {b b' : Fib p R} (f : R S) (ψ : (ι R).obj b' a) [p.IsCartesian f ψ] (φ : (ι R).obj b a) [p.IsHomLift f φ] {Z : 𝒳} (h : a Z) :
                          theorem HasFibers.fiber_factorization {𝒮 : Type u₁} {𝒳 : Type u₂} [CategoryTheory.Category.{v₁, u₁} 𝒮] [CategoryTheory.Category.{v₂, u₂} 𝒳] {p : CategoryTheory.Functor 𝒳 𝒮} [HasFibers p] [p.IsFibered] {R S : 𝒮} {a : 𝒳} (ha : p.obj a = S) {b : Fib p R} (f : R S) (φ : (ι R).obj b a) [p.IsHomLift f φ] :
                          (b' : Fib p R), (τ : b b'), (ψ : (ι R).obj b' a), p.IsStronglyCartesian f ψ CategoryTheory.CategoryStruct.comp ((ι R).map τ) ψ = φ

                          Given a : 𝒳, b : Fib p R, and a diagram

                            b --φ--> a
                            -        -
                            |        |
                            v        v
                            R --f--> S
                          

                          It can be factorized as

                            b --τ--> b'--ψ--> a
                            -        -        -
                            |        |        |
                            v        v        v
                            R ====== R --f--> S
                          

                          with ψ cartesian over f and τ a map in Fib p R.