Shift #
A Shift
on a category C
indexed by a monoid A
is nothing more than a monoidal functor
from A
to C ⥤ C
. A typical example to keep in mind might be the category of
complexes ⋯ → C_{n-1} → C_n → C_{n+1} → ⋯
. It has a shift indexed by ℤ
, where we assign to
each n : ℤ
the functor C ⥤ C
that re-indexes the terms, so the degree i
term of Shift n C
would be the degree i+n
-th term of C
.
Main definitions #
HasShift
: A typeclass asserting the existence of a shift functor.shiftEquiv
: When the indexing monoid is a group, then the functor indexed byn
and-n
forms a self-equivalence ofC
.shiftComm
: When the indexing monoid is commutative, then shifts commute as well.
Implementation Notes #
[HasShift C A]
is implemented using MonoidalFunctor (Discrete A) (C ⥤ C)
.
However, the API of monoidal functors is used only internally: one should use the API of
shifts functors which includes shiftFunctor C a : C ⥤ C
for a : A
,
shiftFunctorZero C A : shiftFunctor C (0 : A) ≅ 𝟭 C
and
shiftFunctorAdd C i j : shiftFunctor C (i + j) ≅ shiftFunctor C i ⋙ shiftFunctor C j
(and its variant shiftFunctorAdd'
). These isomorphisms satisfy some coherence properties
which are stated in lemmas like shiftFunctorAdd'_assoc
, shiftFunctorAdd'_zero_add
and
shiftFunctorAdd'_add_zero
.
A category has a shift indexed by an additive monoid A
if there is a monoidal functor from A
to C ⥤ C
.
- shift : CategoryTheory.MonoidalFunctor (CategoryTheory.Discrete A) (CategoryTheory.Functor C C)
a shift is a monoidal functor from
A
toC ⥤ C
Instances
A helper structure to construct the shift functor (Discrete A) ⥤ (C ⥤ C)
.
- F : A → CategoryTheory.Functor C C
the family of shift functors
- zero : self.F 0 ≅ CategoryTheory.Functor.id C
the shift by 0 identifies to the identity functor
- add : (n m : A) → self.F (n + m) ≅ CategoryTheory.Functor.comp (self.F n) (self.F m)
the composition of shift functors identifies to the shift by the sum
- assoc_hom_app : ∀ (m₁ m₂ m₃ : A) (X : C), CategoryTheory.CategoryStruct.comp ((self.add (m₁ + m₂) m₃).hom.app X) ((self.F m₃).toPrefunctor.map ((self.add m₁ m₂).hom.app X)) = CategoryTheory.CategoryStruct.comp (CategoryTheory.eqToHom (_ : (self.F (m₁ + m₂ + m₃)).toPrefunctor.obj X = (self.F (m₁ + (m₂ + m₃))).toPrefunctor.obj X)) (CategoryTheory.CategoryStruct.comp ((self.add m₁ (m₂ + m₃)).hom.app X) ((self.add m₂ m₃).hom.app ((self.F m₁).toPrefunctor.obj X)))
compatibility with the associativity
- zero_add_hom_app : ∀ (n : A) (X : C), (self.add 0 n).hom.app X = CategoryTheory.CategoryStruct.comp (CategoryTheory.eqToHom (_ : (self.F (0 + n)).toPrefunctor.obj X = (self.F n).toPrefunctor.obj ((CategoryTheory.Functor.id C).toPrefunctor.obj X))) ((self.F n).toPrefunctor.map (self.zero.inv.app X))
compatibility with the left addition with 0
- add_zero_hom_app : ∀ (n : A) (X : C), (self.add n 0).hom.app X = CategoryTheory.CategoryStruct.comp (CategoryTheory.eqToHom (_ : (self.F (n + 0)).toPrefunctor.obj X = (CategoryTheory.Functor.id C).toPrefunctor.obj ((self.F n).toPrefunctor.obj X))) (self.zero.inv.app ((self.F n).toPrefunctor.obj X))
compatibility with the right addition with 0
Instances For
Constructs a HasShift C A
instance from ShiftMkCore
.
Equations
- One or more equations did not get rendered due to their size.
Instances For
The monoidal functor from A
to C ⥤ C
given a HasShift
instance.
Equations
- CategoryTheory.shiftMonoidalFunctor C A = CategoryTheory.HasShift.shift
Instances For
The shift autoequivalence, moving objects and morphisms 'up'.
Equations
- CategoryTheory.shiftFunctor C i = (CategoryTheory.shiftMonoidalFunctor C A).toLaxMonoidalFunctor.toFunctor.toPrefunctor.obj { as := i }
Instances For
Shifting by i + j
is the same as shifting by i
and then shifting by j
.
Equations
- CategoryTheory.shiftFunctorAdd C i j = (CategoryTheory.MonoidalFunctor.μIso (CategoryTheory.shiftMonoidalFunctor C A) { as := i } { as := j }).symm
Instances For
When k = i + j
, shifting by k
is the same as shifting by i
and then shifting by j
.
Equations
- CategoryTheory.shiftFunctorAdd' C i j k h = CategoryTheory.eqToIso (_ : CategoryTheory.shiftFunctor C k = CategoryTheory.shiftFunctor C (i + j)) ≪≫ CategoryTheory.shiftFunctorAdd C i j
Instances For
Shifting by zero is the identity functor.
Equations
Instances For
shifting an object X
by n
is obtained by the notation X⟦n⟧
Equations
- One or more equations did not get rendered due to their size.
Instances For
shifting a morphism f
by n
is obtained by the notation f⟦n⟧'
Equations
- One or more equations did not get rendered due to their size.
Instances For
Shifting by i + j
is the same as shifting by i
and then shifting by j
.
Equations
- CategoryTheory.shiftAdd X i j = (CategoryTheory.shiftFunctorAdd C i j).app X
Instances For
Shifting by zero is the identity functor.
Equations
- CategoryTheory.shiftZero A X = (CategoryTheory.shiftFunctorZero C A).app X
Instances For
When i + j = 0
, shifting by i
and by j
gives the identity functor
Equations
- CategoryTheory.shiftFunctorCompIsoId C i j h = (CategoryTheory.shiftFunctorAdd' C i j 0 h).symm ≪≫ CategoryTheory.shiftFunctorZero C A
Instances For
Shifting by i
and shifting by j
forms an equivalence when i + j = 0
.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Shifting by n
and shifting by -n
forms an equivalence.
Equations
- CategoryTheory.shiftEquiv C n = CategoryTheory.shiftEquiv' C n (-n) (_ : n + -n = 0)
Instances For
Shifting by i
is an equivalence.
Equations
- CategoryTheory.instIsEquivalenceShiftFunctorToAddMonoidToSubNegMonoid C i = let_fun this := inferInstance; this
Shifting by n
is an essentially surjective functor.
Equations
- (_ : CategoryTheory.EssSurj (CategoryTheory.shiftFunctor C i)) = (_ : CategoryTheory.EssSurj (CategoryTheory.shiftFunctor C i))
Shifting by i
and then shifting by -i
is the identity.
Equations
- CategoryTheory.shiftShiftNeg X i = (CategoryTheory.shiftEquiv C i).unitIso.symm.app X
Instances For
Shifting by -i
and then shifting by i
is the identity.
Equations
- CategoryTheory.shiftNegShift X i = (CategoryTheory.shiftEquiv C i).counitIso.app X
Instances For
When shifts are indexed by an additive commutative monoid, then shifts commute.
Equations
- CategoryTheory.shiftFunctorComm C i j = (CategoryTheory.shiftFunctorAdd C i j).symm ≪≫ CategoryTheory.shiftFunctorAdd' C j i (i + j) (_ : j + i = i + j)
Instances For
When shifts are indexed by an additive commutative monoid, then shifts commute.
Equations
- CategoryTheory.shiftComm X i j = (CategoryTheory.shiftFunctorComm C i j).app X
Instances For
When shifts are indexed by an additive commutative monoid, then shifts commute.
auxiliary definition for hasShiftOfFullyFaithful
Equations
- One or more equations did not get rendered due to their size.
Instances For
auxiliary definition for hasShiftOfFullyFaithful
Equations
- One or more equations did not get rendered due to their size.
Instances For
Given a family of endomorphisms of C
which are intertwined by a fully faithful F : C ⥤ D
with shift functors on D
, we can promote that family to shift functors on C
.
Equations
- One or more equations did not get rendered due to their size.