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.

Equations
  • One or more equations did not get rendered due to their size.
Instances For

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

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

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

      Equations
      Instances For
        @[deprecated CategoryTheory.Presieve.isSheaf_yoneda' (since := "2024-11-26")]

        Alias of CategoryTheory.Presieve.isSheaf_yoneda'.


        The sheaf condition for yoneda'.

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

        Equations
        • One or more equations did not get rendered due to their size.
        Instances For
          @[simp]
          theorem CategoryTheory.yoneda'_map_val {X✝ Y✝ : Type u} (f : X✝ Y✝) :
          def CategoryTheory.eval (P : 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 α.

          Equations
          Instances For

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

            Equations
            • One or more equations did not get rendered due to their size.
            Instances For

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

              Equations
              Instances For
                @[simp]
                theorem CategoryTheory.evalEquiv_apply (S : Functor Type uᵒᵖ (Type u)) (hs : Presheaf.IsSheaf typesGrothendieckTopology S) (α : Type u) (s : S.obj (Opposite.op α)) (x : α) :
                (evalEquiv S hs α) s x = eval S α s x
                theorem CategoryTheory.eval_map (S : Functor Type uᵒᵖ (Type u)) (α β : Type u) (f : β α) (s : S.obj (Opposite.op α)) (x : β) :
                eval S β (S.map f.op s) x = eval S α s (f x)

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

                Equations
                Instances For

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

                  Equations
                  Instances For
                    theorem CategoryTheory.eval_app (S₁ S₂ : Sheaf typesGrothendieckTopology (Type u)) (f : S₁ S₂) (α : Type u) (s : S₁.val.obj (Opposite.op α)) (x : α) :
                    eval S₂.val α (f.val.app (Opposite.op α) s) x = f.val.app (Opposite.op PUnit.{u + 1}) (eval S₁.val α s x)

                    yoneda' induces an equivalence of category between Type u and Sheaf typesGrothendieckTopology (Type u).

                    Equations
                    • One or more equations did not get rendered due to their size.
                    Instances For
                      @[simp]
                      theorem CategoryTheory.typeEquiv_unitIso_hom_app (X : Type u) (a✝ : (Functor.id (Type u)).obj X) :
                      typeEquiv.unitIso.hom.app X a✝ = fun (x : PUnit.{u + 1}) => a✝
                      @[simp]
                      theorem CategoryTheory.typeEquiv_functor_map_val_app {X✝ Y✝ : Type u} (f : X✝ Y✝) (x✝ : Type uᵒᵖ) (g : ((fun (X : Type u) => { obj := fun (Y : Type uᵒᵖ) => Opposite.unop Y X, map := fun {X_1 Y : Type uᵒᵖ} (f : X_1 Y) (g : (fun (Y : Type uᵒᵖ) => Opposite.unop Y X) X_1) => CategoryStruct.comp f.unop g, map_id := , map_comp := }) X✝).obj x✝) (a✝ : Opposite.unop x✝) :
                      (typeEquiv.functor.map f).val.app x✝ g a✝ = f (g a✝)
                      @[simp]
                      theorem CategoryTheory.typeEquiv_functor_obj_val_map (α : Type u) {X✝ Y✝ : Type uᵒᵖ} (f : X✝ Y✝) (g : Opposite.unop X✝ α) (a✝ : Opposite.unop Y✝) :
                      (typeEquiv.functor.obj α).val.map f g a✝ = g (f.unop a✝)