Documentation

Mathlib.CategoryTheory.Sites.Types

Grothendieck Topology and Sheaves on the Category of Types #

In this file we define a Grothendieck topology on the category of types, and construct the canonical functor that sends a type to a sheaf over the category of types, and make this an equivalence of categories.

Then we prove that the topology defined is the canonical topology.

A Grothendieck topology associated to the category of all types. A sieve is a covering iff it is jointly surjective.

Instances For
    @[simp]
    theorem CategoryTheory.discreteSieve_apply (α : Type u) :
    ∀ (x : Type u) (f : x α), (CategoryTheory.discreteSieve α).arrows f = x_1, ∀ (y : x), f y = x_1

    The discrete sieve on a type, which only includes arrows whose image is a subsingleton.

    Instances For

      The discrete presieve on a type, which only includes arrows whose domain is a singleton.

      Instances For
        @[simp]
        theorem CategoryTheory.yoneda'_map_val :
        ∀ {X Y : Type u} (f : X Y), (CategoryTheory.yoneda'.map f).val = CategoryTheory.yoneda.map f
        @[simp]
        theorem CategoryTheory.yoneda'_obj_val (α : Type u) :
        (CategoryTheory.yoneda'.obj α).val = CategoryTheory.yoneda.obj α

        The yoneda functor that sends a type to a sheaf over the category of types.

        Instances For
          def CategoryTheory.eval (P : CategoryTheory.Functor Type uᵒᵖ (Type u)) (α : Type u) (s : P.obj (Opposite.op α)) (x : α) :

          Given a presheaf P on the category of types, construct a map P(α) → (α → P(*)) for all type α.

          Instances For

            Given a sheaf S on the category of types, construct a map (α → S(*)) → S(α) that is inverse to eval.

            Instances For

              Given a sheaf S, construct an equivalence S(α) ≃ (α → S(*)).

              Instances For
                theorem CategoryTheory.eval_map (S : CategoryTheory.Functor Type uᵒᵖ (Type u)) (α : Type u) (β : Type u) (f : β α) (s : S.obj (Opposite.op α)) (x : β) :
                CategoryTheory.eval S β (Type uᵒᵖ.map CategoryTheory.CategoryStruct.toQuiver (Type u) CategoryTheory.CategoryStruct.toQuiver S.toPrefunctor (Opposite.op α) (Opposite.op β) f.op s) x = CategoryTheory.eval S α s (f x)
                @[simp]
                theorem CategoryTheory.equivYoneda_inv_app (S : CategoryTheory.Functor Type uᵒᵖ (Type u)) (hs : CategoryTheory.Presieve.IsSheaf CategoryTheory.typesGrothendieckTopology S) (X : Type uᵒᵖ) :
                ∀ (a : (CategoryTheory.yoneda.obj (S.obj (Opposite.op PUnit.{u + 1} ))).obj X), Type uᵒᵖ.app CategoryTheory.Category.opposite (Type u) CategoryTheory.types (CategoryTheory.yoneda.obj (S.obj (Opposite.op PUnit.{u + 1} ))) S (CategoryTheory.equivYoneda S hs).inv X a = (CategoryTheory.evalEquiv S hs X.unop).symm a
                @[simp]
                theorem CategoryTheory.equivYoneda_hom_app (S : CategoryTheory.Functor Type uᵒᵖ (Type u)) (hs : CategoryTheory.Presieve.IsSheaf CategoryTheory.typesGrothendieckTopology S) (X : Type uᵒᵖ) :
                ∀ (a : S.obj X), Type uᵒᵖ.app CategoryTheory.Category.opposite (Type u) CategoryTheory.types S (CategoryTheory.yoneda.obj (S.obj (Opposite.op PUnit.{u + 1} ))) (CategoryTheory.equivYoneda S hs).hom X a = ↑(CategoryTheory.evalEquiv S hs X.unop) a

                Given a sheaf S, construct an isomorphism S ≅ [-, S(*)].

                Instances For

                  Given a sheaf S, construct an isomorphism S ≅ [-, S(*)].

                  Instances For
                    theorem CategoryTheory.eval_app (S₁ : CategoryTheory.SheafOfTypes CategoryTheory.typesGrothendieckTopology) (S₂ : CategoryTheory.SheafOfTypes CategoryTheory.typesGrothendieckTopology) (f : S₁ S₂) (α : Type u) (s : S₁.val.obj (Opposite.op α)) (x : α) :
                    CategoryTheory.eval S₂.val α (Type uᵒᵖ.app CategoryTheory.Category.opposite (Type u) CategoryTheory.types S₁.val S₂.val f.val (Opposite.op α) s) x = Type uᵒᵖ.app CategoryTheory.Category.opposite (Type u) CategoryTheory.types S₁.val S₂.val f.val (Opposite.op PUnit.{u + 1} ) (CategoryTheory.eval S₁.val α s x)
                    @[simp]
                    theorem CategoryTheory.typeEquiv_counitIso_inv_app_val_app (X : CategoryTheory.SheafOfTypes CategoryTheory.typesGrothendieckTopology) (X : Type uᵒᵖ) :
                    ∀ (a : X.val.obj X), Type uᵒᵖ.app CategoryTheory.Category.opposite (Type u) CategoryTheory.types X.val (CategoryTheory.yoneda.obj (X.val.obj (Opposite.op PUnit.{u + 1} ))) (CategoryTheory.typeEquiv.counitIso.inv.app X).val X a = ↑(CategoryTheory.evalEquiv X.val (_ : CategoryTheory.Presieve.IsSheaf CategoryTheory.typesGrothendieckTopology X.val) X.unop) a
                    @[simp]
                    theorem CategoryTheory.typeEquiv_functor_obj_val_obj (α : Type u) (Y : Type uᵒᵖ) :
                    (CategoryTheory.typeEquiv.functor.obj α).val.obj Y = (Y.unop α)
                    @[simp]
                    theorem CategoryTheory.typeEquiv_functor_obj_val_map (α : Type u) :
                    ∀ {X Y : Type uᵒᵖ} (f : X Y) (g : X.unop α) (a : Y.unop), Type uᵒᵖ.map CategoryTheory.CategoryStruct.toQuiver (Type u) CategoryTheory.CategoryStruct.toQuiver (CategoryTheory.typeEquiv.functor.obj α).val.toPrefunctor X Y f g a = g (f.unop a)
                    @[simp]
                    theorem CategoryTheory.typeEquiv_functor_map_val_app :
                    ∀ {X Y : Type u} (f : X Y) (Y_1 : Type uᵒᵖ) (g : ((fun X => CategoryTheory.Functor.mk { obj := fun Y => Y.unop X, map := fun {X_1 Y} f g => CategoryTheory.CategoryStruct.comp f.unop g }) X).obj Y_1) (a : Y_1.unop), (CategoryTheory.typeEquiv.functor.map f).val.app Y_1 g a = f (g a)
                    @[simp]
                    theorem CategoryTheory.typeEquiv_counitIso_hom_app_val_app (X : CategoryTheory.SheafOfTypes CategoryTheory.typesGrothendieckTopology) (X : Type uᵒᵖ) :
                    ∀ (a : (CategoryTheory.yoneda.obj (X.val.obj (Opposite.op PUnit.{u + 1} ))).obj X), Type uᵒᵖ.app CategoryTheory.Category.opposite (Type u) CategoryTheory.types (CategoryTheory.yoneda.obj (X.val.obj (Opposite.op PUnit.{u + 1} ))) X.val (CategoryTheory.typeEquiv.counitIso.hom.app X).val X a = (CategoryTheory.evalEquiv X.val (_ : CategoryTheory.Presieve.IsSheaf CategoryTheory.typesGrothendieckTopology X.val) X.unop).symm a

                    yoneda' induces an equivalence of category between Type u and SheafOfTypes typesGrothendieckTopology.

                    Instances For