Computation of Over A
for a presheaf A
#
Let A : Cᵒᵖ ⥤ Type v
be a presheaf. In this file, we construct an equivalence
e : Over A ≌ (CostructuredArrow yoneda A)ᵒᵖ ⥤ Type v
and show that there is a quasi-commutative
diagram
CostructuredArrow yoneda A ⥤ Over A
⇘ ⥥
PSh(CostructuredArrow yoneda A)
where the top arrow is the forgetful functor forgetting the yoneda-costructure, the right arrow is the aforementioned equivalence and the diagonal arrow is the Yoneda embedding.
In the notation of Kashiwara-Schapira, the type of the equivalence is written C^ₐ ≌ Cₐ^
, where
·ₐ
is CostructuredArrow
(with the functor S
being either the identity or the Yoneda
embedding) and ^
is taking presheaves. The equivalence is a key ingredient in various results in
Kashiwara-Schapira.
The proof is somewhat long and technical, in part due to the construction inherently involving a sigma type which comes with the usual DTT issues. However, a user of this result should not need to interact with the actual construction, the mere existence of the equivalence and the commutative triangle should generally be sufficient.
Main results #
overEquivPresheafCostructuredArrow
: the equivalenceOver A ≌ (CostructuredArrow yoneda A)ᵒᵖ ⥤ Type v
CostructuredArrow.toOverCompOverEquivPresheafCostructuredArrow
: the natural isomorphismCostructuredArrow.toOver yoneda A ⋙ (overEquivPresheafCostructuredArrow A).functor ≅ yoneda
Implementation details #
The proof needs to introduce "correction terms" in various places in order to overcome DTT issues,
and these need to be canceled against each other when appropriate. It is important to deal with
these in a structured manner, otherwise you get large goals containing many correction terms which
are very tedious to manipulate. We avoid this blowup by carefully controlling which definitions
(d)simp
is allowed to unfold and stating many lemmas explicitly before they are required. This
leads to manageable goals containing only a small number of correction terms. Generally, we use
the form F.map (eqToHom _)
for these correction terms and try to push them as far outside as
possible.
Future work #
- If needed, it should be possible to show that the equivalence is natural in
A
.
References #
- [M. Kashiwara, P. Schapira, Categories and Sheaves][Kashiwara2006], Lemma 1.4.12
Tags #
presheaf, over category, coyoneda
Construction of the forward functor Over A ⥤ (CostructuredArrow yoneda A)ᵒᵖ ⥤ Type v
#
Via the Yoneda lemma, u : F.obj (op X)
defines a natural transformation yoneda.obj X ⟶ F
and via the element η.app (op X) u
also a morphism yoneda.obj X ⟶ A
. This structure
witnesses the fact that these morphisms from a commutative triangle with η : F ⟶ A
, i.e.,
that yoneda.obj X ⟶ F
lifts to a morphism in Over A
.
- app : η.app (Opposite.op X) u = CategoryTheory.yonedaEquiv s
"Functoriality" of MakesOverArrow η s
in η
.
"Functoriality of MakesOverArrow η s
in s
.
This is equivalent to the type Over.mk s ⟶ Over.mk η
, but that lives in the wrong universe.
However, if F = yoneda.obj Y
for some Y
, then (using that the Yoneda embedding is fully
faithful) we get a good statement, see OverArrow.costructuredArrowIso
.
Since OverArrows η s
can be thought of to contain certain morphisms yoneda.obj X ⟶ F
, the
Yoneda lemma yields elements F.obj (op X)
.
Equations
- CategoryTheory.OverPresheafAux.OverArrows.val = Subtype.val
The defining property of OverArrows.val
.
In the special case F = yoneda.obj Y
, the element p.val
for p : OverArrows η s
is itself
a morphism X ⟶ Y
.
Functoriality of OverArrows η s
in η
.
Equations
- u.map₁ ε hε = ⟨ε.app (Opposite.op X) u.val, ⋯⟩
Functoriality of OverArrows η s
in s
.
Equations
- u.map₂ f hst = ⟨F.map f.op u.val, ⋯⟩
Construct an element of OverArrows η s
with F = yoneda.obj Y
from a suitable morphism
f : X ⟶ Y
.
Equations
If η
is also yoneda
-costructured, then OverArrows η s
is just morphisms of costructured
arrows.
Equations
- One or more equations did not get rendered due to their size.
This is basically just yoneda.obj η : (Over A)ᵒᵖ ⥤ Type (max u v)
restricted along the
forgetful functor CostructuredArrow yoneda A ⥤ Over A
, but done in a way that we land in a
smaller universe.
Equations
- One or more equations did not get rendered due to their size.
Functoriality of restrictedYonedaObj η
in η
.
Equations
- One or more equations did not get rendered due to their size.
This is basically just yoneda : Over A ⥤ (Over A)ᵒᵖ ⥤ Type (max u v)
restricted in the second
argument along the forgetful functor CostructuredArrow yoneda A ⥤ Over A
, but done in a way
that we land in a smaller universe.
This is one direction of the equivalence we're constructing.
Equations
- One or more equations did not get rendered due to their size.
Further restricting the functor
restrictedYoneda : Over A ⥤ (CostructuredArrow yoneda A)ᵒᵖ ⥤ Type v
along the forgetful
functor in the first argument recovers the Yoneda embedding
CostructuredArrow yoneda A ⥤ (CostructuredArrow yoneda A)ᵒᵖ ⥤ Type v
. This basically follows
from the fact that the Yoneda embedding on C
is fully faithful.
Equations
- One or more equations did not get rendered due to their size.
Construction of the backward functor ((CostructuredArrow yoneda A)ᵒᵖ ⥤ Type v) ⥤ Over A
#
This lemma will be key to establishing good simp normal forms.
To give an object of Over A
, we will in particular need a presheaf Cᵒᵖ ⥤ Type v
. This is the
definition of that presheaf on objects.
We would prefer to think of this sigma type to be indexed by natural transformations
yoneda.obj X ⟶ A
instead of A.obj (op X)
. These are equivalent by the Yoneda lemma, but
we cannot use the former because that type lives in the wrong universe. Hence, we will provide
a lot of API that will enable us to pretend that we are really indexing over
yoneda.obj X ⟶ A
.
Equations
- CategoryTheory.OverPresheafAux.YonedaCollection F X = ((s : A.obj (Opposite.op X)) × F.obj (Opposite.op (CategoryTheory.CostructuredArrow.mk (CategoryTheory.yonedaEquiv.symm s))))
Given a costructured arrow s : yoneda.obj X ⟶ A
and an element x : F.obj s
, construct
an element of YonedaCollection F X
.
Equations
- CategoryTheory.OverPresheafAux.YonedaCollection.mk s x = ⟨CategoryTheory.yonedaEquiv s, F.map (CategoryTheory.eqToHom ⋯) x⟩
Access the first component of an element of YonedaCollection F X
.
Equations
- p.fst = CategoryTheory.yonedaEquiv.symm p.fst
Access the second component of an element of YonedaCollection F X
.
Equations
- p.snd = p.snd
This is a definition because it will be helpful to be able to control precisely when this definition is unfolded.
Equations
- p.yonedaEquivFst = CategoryTheory.yonedaEquiv p.fst
Functoriality of YonedaCollection F X
in F
.
Equations
- CategoryTheory.OverPresheafAux.YonedaCollection.map₁ η p = CategoryTheory.OverPresheafAux.YonedaCollection.mk p.fst (η.app (Opposite.op (CategoryTheory.CostructuredArrow.mk p.fst)) p.snd)
Functoriality of YonedaCollection F X
in X
.
Equations
- One or more equations did not get rendered due to their size.
Given F : (CostructuredArrow yoneda A)ᵒᵖ ⥤ Type v
, this is the presheaf that is given by
YonedaCollection F X
on objects.
Equations
- One or more equations did not get rendered due to their size.
Functoriality of yonedaCollectionPresheaf A F
in F
.
Equations
- CategoryTheory.OverPresheafAux.yonedaCollectionPresheafMap₁ η = { app := fun (X : Cᵒᵖ) => CategoryTheory.OverPresheafAux.YonedaCollection.map₁ η, naturality := ⋯ }
This is the functor F ↦ X ↦ YonedaCollection F X
.
Equations
- One or more equations did not get rendered due to their size.
The Yoneda lemma yields a natural transformation yonedaCollectionPresheaf A F ⟶ A
.
Equations
- CategoryTheory.OverPresheafAux.yonedaCollectionPresheafToA F = { app := fun (X : Cᵒᵖ) => CategoryTheory.OverPresheafAux.YonedaCollection.yonedaEquivFst, naturality := ⋯ }
This is the reverse direction of the equivalence we're constructing.
Equations
- One or more equations did not get rendered due to their size.
Construction of the unit #
Forward direction of the unit.
Equations
Backward direction of the unit.
Equations
- CategoryTheory.OverPresheafAux.unitBackward η X x = CategoryTheory.OverPresheafAux.YonedaCollection.mk (CategoryTheory.yonedaEquiv.symm (η.app (Opposite.op X) x)) ⟨x, ⋯⟩
Intermediate stage of assembling the unit.
Equations
- One or more equations did not get rendered due to their size.
Intermediate stage of assembling the unit.
Equations
Intermediate stage of assembling the unit.
The unit of the equivalence we're constructing.
Equations
- CategoryTheory.OverPresheafAux.unit A = (CategoryTheory.NatIso.ofComponents CategoryTheory.OverPresheafAux.unitAux ⋯).symm
Construction of the counit #
Forward direction of the counit.
Equations
Backward direction of the counit.
Equations
Intermediate stage of assembling the counit.
Equations
- One or more equations did not get rendered due to their size.
Intermediate stage of assembling the counit.
Equations
- One or more equations did not get rendered due to their size.
The counit of the equivalence we're constructing.
Equations
- CategoryTheory.OverPresheafAux.counit A = (CategoryTheory.NatIso.ofComponents CategoryTheory.OverPresheafAux.counitAux ⋯).symm
If A : Cᵒᵖ ⥤ Type v
is a presheaf, then we have an equivalence between presheaves lying over
A
and the category of presheaves on CostructuredArrow yoneda A
. There is a quasicommutative
triangle involving this equivalence, see
CostructuredArrow.toOverCompOverEquivPresheafCostructuredArrow
.
This is Lemma 1.4.12 in [Kashiwara2006].
Equations
- One or more equations did not get rendered due to their size.
If A : Cᵒᵖ ⥤ Type v
is a presheaf, then the Yoneda embedding for
CostructuredArrow yoneda A
factors through Over A
via a forgetful functor and an
equivalence.
This is Lemma 1.4.12 in [Kashiwara2006].