A Serre functor is unique up to natural isomorphism #
Any two Serre functors on the same k-linear category are naturally isomorphic, and the
isomorphism compatible with both duality isomorphisms is unique. The argument is Yoneda: S A
represents B ↦ Dual (A ⟶ B), representing objects are unique up to unique isomorphism, and
naturality in A promotes the pointwise isomorphisms to a natural isomorphism of functors.
The representability step has its own owner #
isoOfLinearYonedaIso, its mapIso computation and hom_ext_of_linearYoneda are stated on
linearYoneda alone and proved without reference to SerreFunctorData, because a downstream
lane needs them on a functor that is not a Serre functor. They now live in
CategoryTheory/Linear/Yoneda.lean, which this file imports; see that module for why the argument
runs on linearYoneda rather than linearCoyoneda.
Trap: which variable the Yoneda argument runs in #
Hom(A,B) is contravariant in A and covariant in B, and the dual flips both — so
Dual (A ⟶ B) is covariant in A and contravariant in B, matching Hom(B, S A).
The Yoneda argument therefore runs in the B variable with A fixed. Naturality in A is a
separate step, and it is what promotes the pointwise isomorphisms to a natural transformation.
Concretely: yonedaIso below is natural in B by naturality_right, and uniqueIso is natural
in A by naturality_left. Two different fields of SerreFunctorData, for two different reasons.
No shift, no triangulation #
Neither this file nor Basic mentions a shift or a distinguished triangle, which is why both live
under CategoryTheory/Linear/. Ext profiles, shift relations, the Enriques refinement and every
triangulated compatibility stay in CategoryTheory/Triangulated/SerreFunctor/, which imports this
root.
Uniqueness of the Serre functor #
The comparison of the two duality isomorphisms at a fixed pair, as a linear equivalence
(B ⟶ S A) ≃ₗ (B ⟶ S' A).
Instances For
Naturality in B, from naturality_right. This is the step the Yoneda argument runs
on.
The two representing objects have isomorphic linear Yoneda presheaves, at each A.
Equations
- D.yonedaIso D' A = CategoryTheory.NatIso.ofComponents (fun (B : Cᵒᵖ) => (D.compareEquiv D' A (Opposite.unop B)).toModuleIso) ⋯
Instances For
The comparison isomorphism at an object.
Equations
- D.uniqueIsoApp D' A = CategoryTheory.SerreFunctor.isoOfLinearYonedaIso k C (D.yonedaIso D' A)
Instances For
The defining property of uniqueIsoApp: it is what the duality isomorphisms say it is.
Evaluating the defining property at the identity.
Naturality in A, from naturality_left. This is the step that promotes the pointwise
isomorphisms to a natural isomorphism of functors; see the module docstring on why it is a
different field from the one yonedaIso uses.
A Serre functor is unique up to natural isomorphism.
Equations
- D.uniqueIso D' = CategoryTheory.NatIso.ofComponents (fun (A : C) => D.uniqueIsoApp D' A) ⋯
Instances For
The compatibility with the two duality isomorphisms, which is what characterises the comparison.
Uniqueness of the comparison. Any natural transformation compatible with both duality
isomorphisms is uniqueIso. This is the form a downstream coherence argument consumes, so it is
not optional polish.
Coherence #
So a downstream user can move a statement between two chosen Serre functors without re-deriving
the comparison. Each is uniqueIso_unique applied to the obvious candidate.
HasSerreFunctor determines S up to natural isomorphism, so "the" Serre functor is a
well-defined statement about C.