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
- category_theory.types_grothendieck_topology = {sieves := λ (α : Type u) (S : category_theory.sieve α), ∀ (x : α), ⇑S (λ (_x : punit), x), top_mem' := category_theory.types_grothendieck_topology._proof_1, pullback_stable' := category_theory.types_grothendieck_topology._proof_2, transitive' := category_theory.types_grothendieck_topology._proof_3}
The discrete sieve on a type, which only includes arrows whose image is a subsingleton.
Equations
- category_theory.discrete_sieve α = {arrows := λ (β : Type u) (f : β ⟶ α), ∃ (x : α), ∀ (y : β), f y = x, downward_closed' := _}
The discrete presieve on a type, which only includes arrows whose domain is a singleton.
Equations
- category_theory.discrete_presieve α = λ (β : Type u) (f : β ⟶ α), ∃ (x : β), ∀ (y : β), y = x
The yoneda functor that sends a type to a sheaf over the category of types
Given a presheaf P
on the category of types, construct
a map P(α) → (α → P(*))
for all type α
.
Equations
- category_theory.eval P α s x = P.map (category_theory.as_hom (λ (_x : punit), x)).op s
Given a sheaf S
on the category of types, construct a map
(α → S(*)) → S(α)
that is inverse to eval
.
Equations
- category_theory.types_glue S hs α f = _.amalgamate (λ (β : Type u) (g : β ⟶ α) (hg : category_theory.discrete_presieve α g), S.map (category_theory.as_hom (λ (x : β), punit.star)).op (f (g (classical.some hg)))) _
Given a sheaf S
, construct an equivalence S(α) ≃ (α → S(*))
.
Equations
- category_theory.eval_equiv S hs α = {to_fun := category_theory.eval S α, inv_fun := category_theory.types_glue S hs α, left_inv := _, right_inv := _}
Given a sheaf S
, construct an isomorphism S ≅ [-, S(*)]
.
Equations
- category_theory.equiv_yoneda S hs = category_theory.nat_iso.of_components (λ (α : (Type u)ᵒᵖ), (category_theory.eval_equiv S hs (opposite.unop α)).to_iso) _
Given a sheaf S
, construct an isomorphism S ≅ [-, S(*)]
.
Equations
- category_theory.equiv_yoneda' S = {hom := {val := (category_theory.equiv_yoneda S.val _).hom}, inv := {val := (category_theory.equiv_yoneda S.val _).inv}, hom_inv_id' := _, inv_hom_id' := _}
yoneda'
induces an equivalence of category between Type u
and
Sheaf types_grothendieck_topology
.
Equations
- category_theory.type_equiv = category_theory.equivalence.mk category_theory.yoneda' (category_theory.SheafOfTypes_to_presheaf category_theory.types_grothendieck_topology ⋙ (category_theory.evaluation (Type u)ᵒᵖ (Type u)).obj (opposite.op punit)) (category_theory.nat_iso.of_components (λ (α : Type u), {hom := λ (x : (𝟭 (Type u)).obj α) (_x : opposite.unop (opposite.op punit)), x, inv := λ (f : (category_theory.yoneda' ⋙ category_theory.SheafOfTypes_to_presheaf category_theory.types_grothendieck_topology ⋙ (category_theory.evaluation (Type u)ᵒᵖ (Type u)).obj (opposite.op punit)).obj α), f punit.star, hom_inv_id' := _, inv_hom_id' := _}) category_theory.type_equiv._proof_3) (category_theory.nat_iso.of_components (λ (S : category_theory.SheafOfTypes category_theory.types_grothendieck_topology), category_theory.equiv_yoneda' S) category_theory.type_equiv._proof_4).symm