Documentation

Mathlib.CategoryTheory.Sites.DenseSubsite.Basic

Dense subsites #

We define IsCoverDense functors into sites as functors such that there exists a covering sieve that factors through images of the functor for each object in D.

Main results #

References #

structure CategoryTheory.Presieve.CoverByImageStructure {C : Type u_1} [Category.{u_4, u_1} C] {D : Type u_2} [Category.{u_5, u_2} D] (G : Functor C D) {V U : D} (f : V U) :
Type (max u_1 u_5)

An auxiliary structure that witnesses the fact that f factors through an image object of G.

Instances For
    @[simp]

    For a functor G : C ⥤ D, and an object U : D, Presieve.coverByImage G U is the presieve of U consisting of those arrows that factor through images of G.

    Equations
      Instances For

        For a functor G : C ⥤ D, and an object U : D, Sieve.coverByImage G U is the sieve of U consisting of those arrows that factor through images of G.

        Equations
          Instances For
            theorem CategoryTheory.Presieve.in_coverByImage {C : Type u_1} [Category.{u_4, u_1} C] {D : Type u_2} [Category.{u_5, u_2} D] (G : Functor C D) {X : D} {Y : C} (f : G.obj Y X) :

            A functor G : (C, J) ⥤ (D, K) is cover dense if for each object in D, there exists a covering sieve in D that factors through images of G.

            This definition can be found in https://ncatlab.org/nlab/show/dense+sub-site Definition 2.2.

            Instances
              theorem CategoryTheory.Functor.IsCoverDense.ext {C : Type u_1} [Category.{u_5, u_1} C] {D : Type u_2} [Category.{u_6, u_2} D] {K : GrothendieckTopology D} (G : Functor C D) [G.IsCoverDense K] ( : Sheaf K (Type u_7)) (X : D) {s t : .val.obj (Opposite.op X)} (h : ∀ ⦃Y : C⦄ (f : G.obj Y X), .val.map f.op s = .val.map f.op t) :
              s = t
              def CategoryTheory.Functor.IsCoverDense.homOver {C : Type u_1} [Category.{u_5, u_1} C] {D : Type u_2} [Category.{u_6, u_2} D] {K : GrothendieckTopology D} {A : Type u_4} [Category.{u_7, u_4} A] {G : Functor C D} { : Functor Dᵒᵖ A} {ℱ' : Sheaf K A} (α : G.op.comp G.op.comp ℱ'.val) (X : A) :

              (Implementation). Given a hom between the pullbacks of two sheaves, we can whisker it with coyoneda to obtain a hom between the pullbacks of the sheaves of maps from X.

              Equations
                Instances For
                  @[simp]
                  theorem CategoryTheory.Functor.IsCoverDense.homOver_app {C : Type u_1} [Category.{u_5, u_1} C] {D : Type u_2} [Category.{u_6, u_2} D] {K : GrothendieckTopology D} {A : Type u_4} [Category.{u_7, u_4} A] {G : Functor C D} { : Functor Dᵒᵖ A} {ℱ' : Sheaf K A} (α : G.op.comp G.op.comp ℱ'.val) (X : A) (X✝ : Cᵒᵖ) (a✝ : (coyoneda.obj (Opposite.op X)).obj ((G.op.comp ).obj X✝)) :
                  (homOver α X).app X✝ a✝ = CategoryStruct.comp a✝ (α.app X✝)
                  def CategoryTheory.Functor.IsCoverDense.isoOver {C : Type u_1} [Category.{u_5, u_1} C] {D : Type u_2} [Category.{u_6, u_2} D] {K : GrothendieckTopology D} {A : Type u_4} [Category.{u_7, u_4} A] {G : Functor C D} {ℱ' : Sheaf K A} (α : G.op.comp .val G.op.comp ℱ'.val) (X : A) :
                  G.op.comp (sheafOver X).val G.op.comp (sheafOver ℱ' X).val

                  (Implementation). Given an iso between the pullbacks of two sheaves, we can whisker it with coyoneda to obtain an iso between the pullbacks of the sheaves of maps from X.

                  Equations
                    Instances For
                      @[simp]
                      theorem CategoryTheory.Functor.IsCoverDense.isoOver_inv_app {C : Type u_1} [Category.{u_5, u_1} C] {D : Type u_2} [Category.{u_6, u_2} D] {K : GrothendieckTopology D} {A : Type u_4} [Category.{u_7, u_4} A] {G : Functor C D} {ℱ' : Sheaf K A} (α : G.op.comp .val G.op.comp ℱ'.val) (X : A) (X✝ : Cᵒᵖ) (a✝ : (coyoneda.obj (Opposite.op X)).obj ((G.op.comp ℱ'.val).obj X✝)) :
                      (isoOver α X).inv.app X✝ a✝ = CategoryStruct.comp a✝ (α.inv.app X✝)
                      @[simp]
                      theorem CategoryTheory.Functor.IsCoverDense.isoOver_hom_app {C : Type u_1} [Category.{u_5, u_1} C] {D : Type u_2} [Category.{u_6, u_2} D] {K : GrothendieckTopology D} {A : Type u_4} [Category.{u_7, u_4} A] {G : Functor C D} {ℱ' : Sheaf K A} (α : G.op.comp .val G.op.comp ℱ'.val) (X : A) (X✝ : Cᵒᵖ) (a✝ : (coyoneda.obj (Opposite.op X)).obj ((G.op.comp .val).obj X✝)) :
                      (isoOver α X).hom.app X✝ a✝ = CategoryStruct.comp a✝ (α.hom.app X✝)
                      theorem CategoryTheory.Functor.IsCoverDense.sheaf_eq_amalgamation {D : Type u_2} [Category.{u_5, u_2} D] {K : GrothendieckTopology D} {A : Type u_4} [Category.{u_6, u_4} A] ( : Sheaf K A) {X : A} {U : D} {T : Sieve U} (hT : T K U) (x : Presieve.FamilyOfElements (.val.comp (coyoneda.obj (Opposite.op X))) T.arrows) (hx : x.Compatible) (t : (.val.comp (coyoneda.obj (Opposite.op X))).obj (Opposite.op U)) (h : x.IsAmalgamation t) :
                      t = .amalgamate x hx
                      theorem CategoryTheory.Functor.IsCoverDense.Types.naturality_apply {C : Type u_1} [Category.{u_5, u_1} C] {D : Type u_2} [Category.{u_6, u_2} D] {K : GrothendieckTopology D} {G : Functor C D} { : Functor Dᵒᵖ (Type v)} {ℱ' : Sheaf K (Type v)} (α : G.op.comp G.op.comp ℱ'.val) [G.IsLocallyFull K] {X Y : C} (i : G.obj X G.obj Y) (x : (G.op.comp ).obj (Opposite.op Y)) :
                      ℱ'.val.map i.op (α.app (Opposite.op Y) x) = α.app (Opposite.op X) (.map i.op x)
                      theorem CategoryTheory.Functor.IsCoverDense.Types.naturality {C : Type u_1} [Category.{u_5, u_1} C] {D : Type u_2} [Category.{u_6, u_2} D] {K : GrothendieckTopology D} {G : Functor C D} { : Functor Dᵒᵖ (Type v)} {ℱ' : Sheaf K (Type v)} (α : G.op.comp G.op.comp ℱ'.val) [G.IsLocallyFull K] {X Y : C} (i : G.obj X G.obj Y) :
                      theorem CategoryTheory.Functor.IsCoverDense.Types.naturality_assoc {C : Type u_1} [Category.{u_5, u_1} C] {D : Type u_2} [Category.{u_6, u_2} D] {K : GrothendieckTopology D} {G : Functor C D} { : Functor Dᵒᵖ (Type v)} {ℱ' : Sheaf K (Type v)} (α : G.op.comp G.op.comp ℱ'.val) [G.IsLocallyFull K] {X Y : C} (i : G.obj X G.obj Y) {Z : Type v} (h : ℱ'.val.obj (Opposite.op (G.obj X)) Z) :
                      noncomputable def CategoryTheory.Functor.IsCoverDense.Types.pushforwardFamily {C : Type u_1} [Category.{u_5, u_1} C] {D : Type u_2} [Category.{u_6, u_2} D] {K : GrothendieckTopology D} {G : Functor C D} { : Functor Dᵒᵖ (Type v)} {ℱ' : Sheaf K (Type v)} (α : G.op.comp G.op.comp ℱ'.val) {X : D} (x : .obj (Opposite.op X)) :

                      (Implementation). Given a section of on X, we can obtain a family of elements valued in ℱ' that is defined on a cover generated by the images of G.

                      Equations
                        Instances For
                          @[simp]
                          theorem CategoryTheory.Functor.IsCoverDense.Types.pushforwardFamily_def {C : Type u_1} [Category.{u_6, u_1} C] {D : Type u_2} [Category.{u_5, u_2} D] {K : GrothendieckTopology D} {G : Functor C D} { : Functor Dᵒᵖ (Type v)} {ℱ' : Sheaf K (Type v)} (α : G.op.comp G.op.comp ℱ'.val) {X : D} (x : .obj (Opposite.op X)) :
                          pushforwardFamily α x = fun (x_1 : D) (x_2 : x_1 X) (hf : Presieve.coverByImage G X x_2) => ℱ'.val.map (Nonempty.some hf).lift.op (α.app (Opposite.op (Nonempty.some hf).1) (.map (Nonempty.some hf).map.op x))
                          @[simp]
                          theorem CategoryTheory.Functor.IsCoverDense.Types.pushforwardFamily_apply {C : Type u_1} [Category.{u_5, u_1} C] {D : Type u_2} [Category.{u_6, u_2} D] {K : GrothendieckTopology D} {G : Functor C D} { : Functor Dᵒᵖ (Type v)} {ℱ' : Sheaf K (Type v)} (α : G.op.comp G.op.comp ℱ'.val) [G.IsLocallyFull K] {X : D} (x : .obj (Opposite.op X)) {Y : C} (f : G.obj Y X) :
                          pushforwardFamily α x f = α.app (Opposite.op Y) (.map f.op x)

                          (Implementation). The pushforwardFamily defined is compatible.

                          noncomputable def CategoryTheory.Functor.IsCoverDense.Types.appHom {C : Type u_1} [Category.{u_5, u_1} C] {D : Type u_2} [Category.{u_6, u_2} D] {K : GrothendieckTopology D} {G : Functor C D} { : Functor Dᵒᵖ (Type v)} {ℱ' : Sheaf K (Type v)} (α : G.op.comp G.op.comp ℱ'.val) [G.IsCoverDense K] [G.IsLocallyFull K] (X : D) :

                          (Implementation). The morphism ℱ(X) ⟶ ℱ'(X) given by gluing the pushforwardFamily.

                          Equations
                            Instances For
                              @[simp]
                              theorem CategoryTheory.Functor.IsCoverDense.Types.appHom_restrict {C : Type u_1} [Category.{u_6, u_1} C] {D : Type u_2} [Category.{u_5, u_2} D] {K : GrothendieckTopology D} {G : Functor C D} { : Functor Dᵒᵖ (Type v)} {ℱ' : Sheaf K (Type v)} (α : G.op.comp G.op.comp ℱ'.val) [G.IsCoverDense K] [G.IsLocallyFull K] {X : D} {Y : C} (f : Opposite.op X Opposite.op (G.obj Y)) (x : .obj (Opposite.op X)) :
                              ℱ'.val.map f (appHom α X x) = α.app (Opposite.op Y) (.map f x)
                              @[simp]
                              theorem CategoryTheory.Functor.IsCoverDense.Types.appHom_valid_glue {C : Type u_1} [Category.{u_6, u_1} C] {D : Type u_2} [Category.{u_5, u_2} D] {K : GrothendieckTopology D} {G : Functor C D} { : Functor Dᵒᵖ (Type v)} {ℱ' : Sheaf K (Type v)} (α : G.op.comp G.op.comp ℱ'.val) [G.IsCoverDense K] [G.IsLocallyFull K] {X : D} {Y : C} (f : Opposite.op X Opposite.op (G.obj Y)) :
                              noncomputable def CategoryTheory.Functor.IsCoverDense.Types.appIso {C : Type u_1} [Category.{u_5, u_1} C] {D : Type u_2} [Category.{u_6, u_2} D] {K : GrothendieckTopology D} {G : Functor C D} [G.IsCoverDense K] [G.IsLocallyFull K] {ℱ' : Sheaf K (Type v)} (i : G.op.comp .val G.op.comp ℱ'.val) (X : D) :

                              (Implementation). The maps given in appIso is inverse to each other and gives a ℱ(X) ≅ ℱ'(X).

                              Equations
                                Instances For
                                  @[simp]
                                  theorem CategoryTheory.Functor.IsCoverDense.Types.appIso_inv {C : Type u_1} [Category.{u_5, u_1} C] {D : Type u_2} [Category.{u_6, u_2} D] {K : GrothendieckTopology D} {G : Functor C D} [G.IsCoverDense K] [G.IsLocallyFull K] {ℱ' : Sheaf K (Type v)} (i : G.op.comp .val G.op.comp ℱ'.val) (X : D) (a✝ : ℱ'.val.obj (Opposite.op X)) :
                                  (appIso i X).inv a✝ = appHom i.inv X a✝
                                  @[simp]
                                  theorem CategoryTheory.Functor.IsCoverDense.Types.appIso_hom {C : Type u_1} [Category.{u_5, u_1} C] {D : Type u_2} [Category.{u_6, u_2} D] {K : GrothendieckTopology D} {G : Functor C D} [G.IsCoverDense K] [G.IsLocallyFull K] {ℱ' : Sheaf K (Type v)} (i : G.op.comp .val G.op.comp ℱ'.val) (X : D) (a✝ : .val.obj (Opposite.op X)) :
                                  (appIso i X).hom a✝ = appHom i.hom X a✝
                                  noncomputable def CategoryTheory.Functor.IsCoverDense.Types.presheafHom {C : Type u_1} [Category.{u_5, u_1} C] {D : Type u_2} [Category.{u_6, u_2} D] {K : GrothendieckTopology D} {G : Functor C D} { : Functor Dᵒᵖ (Type v)} {ℱ' : Sheaf K (Type v)} [G.IsCoverDense K] [G.IsLocallyFull K] (α : G.op.comp G.op.comp ℱ'.val) :
                                  ℱ'.val

                                  Given a natural transformation G ⋙ ℱ ⟶ G ⋙ ℱ' between presheaves of types, where G is locally-full and cover-dense, and ℱ' is a sheaf, we may obtain a natural transformation between sheaves.

                                  Equations
                                    Instances For
                                      @[simp]
                                      theorem CategoryTheory.Functor.IsCoverDense.Types.presheafHom_app {C : Type u_1} [Category.{u_5, u_1} C] {D : Type u_2} [Category.{u_6, u_2} D] {K : GrothendieckTopology D} {G : Functor C D} { : Functor Dᵒᵖ (Type v)} {ℱ' : Sheaf K (Type v)} [G.IsCoverDense K] [G.IsLocallyFull K] (α : G.op.comp G.op.comp ℱ'.val) (X : Dᵒᵖ) (a✝ : .obj (Opposite.op (Opposite.unop X))) :
                                      (presheafHom α).app X a✝ = appHom α (Opposite.unop X) a✝
                                      noncomputable def CategoryTheory.Functor.IsCoverDense.Types.presheafIso {C : Type u_1} [Category.{u_5, u_1} C] {D : Type u_2} [Category.{u_6, u_2} D] {K : GrothendieckTopology D} {G : Functor C D} [G.IsCoverDense K] [G.IsLocallyFull K] {ℱ' : Sheaf K (Type v)} (i : G.op.comp .val G.op.comp ℱ'.val) :
                                      .val ℱ'.val

                                      Given a natural isomorphism G ⋙ ℱ ≅ G ⋙ ℱ' between presheaves of types, where G is locally-full and cover-dense, and ℱ, ℱ' are sheaves, we may obtain a natural isomorphism between presheaves.

                                      Equations
                                        Instances For
                                          @[simp]
                                          theorem CategoryTheory.Functor.IsCoverDense.Types.presheafIso_hom_app {C : Type u_1} [Category.{u_5, u_1} C] {D : Type u_2} [Category.{u_6, u_2} D] {K : GrothendieckTopology D} {G : Functor C D} [G.IsCoverDense K] [G.IsLocallyFull K] {ℱ' : Sheaf K (Type v)} (i : G.op.comp .val G.op.comp ℱ'.val) (X : Dᵒᵖ) (a✝ : .val.obj X) :
                                          (presheafIso i).hom.app X a✝ = appHom i.hom (Opposite.unop X) a✝
                                          @[simp]
                                          theorem CategoryTheory.Functor.IsCoverDense.Types.presheafIso_inv_app {C : Type u_1} [Category.{u_5, u_1} C] {D : Type u_2} [Category.{u_6, u_2} D] {K : GrothendieckTopology D} {G : Functor C D} [G.IsCoverDense K] [G.IsLocallyFull K] {ℱ' : Sheaf K (Type v)} (i : G.op.comp .val G.op.comp ℱ'.val) (X : Dᵒᵖ) (a✝ : ℱ'.val.obj X) :
                                          (presheafIso i).inv.app X a✝ = appHom i.inv (Opposite.unop X) a✝
                                          noncomputable def CategoryTheory.Functor.IsCoverDense.Types.sheafIso {C : Type u_1} [Category.{u_5, u_1} C] {D : Type u_2} [Category.{u_6, u_2} D] {K : GrothendieckTopology D} {G : Functor C D} [G.IsCoverDense K] [G.IsLocallyFull K] {ℱ' : Sheaf K (Type v)} (i : G.op.comp .val G.op.comp ℱ'.val) :
                                          ℱ'

                                          Given a natural isomorphism G ⋙ ℱ ≅ G ⋙ ℱ' between presheaves of types, where G is locally-full and cover-dense, and ℱ, ℱ' are sheaves, we may obtain a natural isomorphism between sheaves.

                                          Equations
                                            Instances For
                                              noncomputable def CategoryTheory.Functor.IsCoverDense.sheafCoyonedaHom {C : Type u_1} [Category.{u_5, u_1} C] {D : Type u_2} [Category.{u_6, u_2} D] {K : GrothendieckTopology D} {A : Type u_4} [Category.{u_7, u_4} A] {G : Functor C D} [G.IsCoverDense K] [G.IsLocallyFull K] { : Functor Dᵒᵖ A} {ℱ' : Sheaf K A} (α : G.op.comp G.op.comp ℱ'.val) :

                                              (Implementation). The sheaf map given in types.sheaf_hom is natural in terms of X.

                                              Equations
                                                Instances For
                                                  noncomputable def CategoryTheory.Functor.IsCoverDense.sheafYonedaHom {C : Type u_1} [Category.{u_5, u_1} C] {D : Type u_2} [Category.{u_6, u_2} D] {K : GrothendieckTopology D} {A : Type u_4} [Category.{u_7, u_4} A] {G : Functor C D} [G.IsCoverDense K] [G.IsLocallyFull K] { : Functor Dᵒᵖ A} {ℱ' : Sheaf K A} (α : G.op.comp G.op.comp ℱ'.val) :

                                                  (Implementation). sheafCoyonedaHom but the order of the arguments of the functor are swapped.

                                                  Equations
                                                    Instances For
                                                      noncomputable def CategoryTheory.Functor.IsCoverDense.sheafHom {C : Type u_1} [Category.{u_5, u_1} C] {D : Type u_2} [Category.{u_6, u_2} D] {K : GrothendieckTopology D} {A : Type u_4} [Category.{u_7, u_4} A] {G : Functor C D} [G.IsCoverDense K] [G.IsLocallyFull K] { : Functor Dᵒᵖ A} {ℱ' : Sheaf K A} (α : G.op.comp G.op.comp ℱ'.val) :
                                                      ℱ'.val

                                                      Given a natural transformation G ⋙ ℱ ⟶ G ⋙ ℱ' between presheaves of arbitrary category, where G is locally-full and cover-dense, and ℱ' is a sheaf, we may obtain a natural transformation between presheaves.

                                                      Equations
                                                        Instances For
                                                          noncomputable def CategoryTheory.Functor.IsCoverDense.presheafIso {C : Type u_1} [Category.{u_5, u_1} C] {D : Type u_2} [Category.{u_6, u_2} D] {K : GrothendieckTopology D} {A : Type u_4} [Category.{u_7, u_4} A] {G : Functor C D} [G.IsCoverDense K] [G.IsLocallyFull K] {ℱ' : Sheaf K A} (i : G.op.comp .val G.op.comp ℱ'.val) :
                                                          .val ℱ'.val

                                                          Given a natural isomorphism G ⋙ ℱ ≅ G ⋙ ℱ' between presheaves of arbitrary category, where G is locally-full and cover-dense, and ℱ', ℱ are sheaves, we may obtain a natural isomorphism between presheaves.

                                                          Equations
                                                            Instances For
                                                              noncomputable def CategoryTheory.Functor.IsCoverDense.sheafIso {C : Type u_1} [Category.{u_5, u_1} C] {D : Type u_2} [Category.{u_6, u_2} D] {K : GrothendieckTopology D} {A : Type u_4} [Category.{u_7, u_4} A] {G : Functor C D} [G.IsCoverDense K] [G.IsLocallyFull K] {ℱ' : Sheaf K A} (i : G.op.comp .val G.op.comp ℱ'.val) :
                                                              ℱ'

                                                              Given a natural isomorphism G ⋙ ℱ ≅ G ⋙ ℱ' between presheaves of arbitrary category, where G is locally-full and cover-dense, and ℱ', ℱ are sheaves, we may obtain a natural isomorphism between presheaves.

                                                              Equations
                                                                Instances For
                                                                  @[simp]
                                                                  @[simp]
                                                                  theorem CategoryTheory.Functor.IsCoverDense.sheafHom_restrict_eq {C : Type u_1} [Category.{u_6, u_1} C] {D : Type u_2} [Category.{u_7, u_2} D] {K : GrothendieckTopology D} {A : Type u_4} [Category.{u_5, u_4} A] {G : Functor C D} [G.IsCoverDense K] [G.IsLocallyFull K] { : Functor Dᵒᵖ A} {ℱ' : Sheaf K A} (α : G.op.comp G.op.comp ℱ'.val) :

                                                                  The constructed sheafHom α is equal to α when restricted onto C.

                                                                  theorem CategoryTheory.Functor.IsCoverDense.sheafHom_eq {C : Type u_1} [Category.{u_7, u_1} C] {D : Type u_2} [Category.{u_6, u_2} D] {K : GrothendieckTopology D} {A : Type u_4} [Category.{u_5, u_4} A] (G : Functor C D) [G.IsCoverDense K] [G.IsLocallyFull K] { : Functor Dᵒᵖ A} {ℱ' : Sheaf K A} (α : ℱ'.val) :

                                                                  If the pullback map is obtained via whiskering, then the result sheaf_hom (whisker_left G.op α) is equal to α.

                                                                  noncomputable def CategoryTheory.Functor.IsCoverDense.restrictHomEquivHom {C : Type u_1} [Category.{u_5, u_1} C] {D : Type u_2} [Category.{u_6, u_2} D] {K : GrothendieckTopology D} {A : Type u_4} [Category.{u_7, u_4} A] {G : Functor C D} [G.IsCoverDense K] [G.IsLocallyFull K] { : Functor Dᵒᵖ A} {ℱ' : Sheaf K A} :
                                                                  (G.op.comp G.op.comp ℱ'.val) ( ℱ'.val)

                                                                  A locally-full and cover-dense functor G induces an equivalence between morphisms into a sheaf and morphisms over the restrictions via G.

                                                                  Equations
                                                                    Instances For
                                                                      theorem CategoryTheory.Functor.IsCoverDense.iso_of_restrict_iso {C : Type u_1} [Category.{u_7, u_1} C] {D : Type u_2} [Category.{u_5, u_2} D] {K : GrothendieckTopology D} {A : Type u_4} [Category.{u_6, u_4} A] {G : Functor C D} [G.IsCoverDense K] [G.IsLocallyFull K] {ℱ' : Sheaf K A} (α : ℱ') (i : IsIso (G.op.whiskerLeft α.val)) :

                                                                      Given a locally-full and cover-dense functor G and a natural transformation of sheaves α : ℱ ⟶ ℱ', if the pullback of α along G is iso, then α is also iso.

                                                                      A locally-fully-faithful and cover-dense functor preserves compatible families.

                                                                      If G : C ⥤ D is cover dense and full, then the map (P ⟶ Q) → (G.op ⋙ P ⟶ G.op ⋙ Q) is bijective when Q is a sheaf`.

                                                                      The functor G : C ⥤ D exhibits (C, J) as a dense subsite of (D, K) if G is cover-dense, locally fully-faithful, and S is a cover of C if and only if the image of S in D is a cover.

                                                                      Instances
                                                                        theorem CategoryTheory.Functor.IsDenseSubsite.equalizer_mem {C : Type u_1} [Category.{u_5, u_1} C] {D : Type u_2} [Category.{u_6, u_2} D] (J : GrothendieckTopology C) (K : GrothendieckTopology D) (G : Functor C D) [IsDenseSubsite J K G] {U V : C} (f₁ f₂ : U V) (e : G.map f₁ = G.map f₂) :
                                                                        Sieve.equalizer f₁ f₂ J U