Shift #
THIS FILE IS SYNCHRONIZED WITH MATHLIB4. Any changes to this file require a corresponding PR to mathlib4.
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 #
has_shift
: A typeclass asserting the existence of a shift functor.shift_equiv
: When the indexing monoid is a group, then the functor indexed byn
and-n
forms an self-equivalence ofC
.shift_comm
: When the indexing monoid is commutative, then shifts commute as well.
Implementation Notes #
[has_shift C A]
is implemented using monoidal_functor (discrete A) (C ⥤ C)
.
However, the API of monodial functors is used only internally: one should use the API of
shifts functors which includes shift_functor C a : C ⥤ C
for a : A
,
shift_functor_zero C A : shift_functor C (0 : A) ≅ 𝟭 C
and
shift_functor_add C i j : shift_functor C (i + j) ≅ shift_functor C i ⋙ shift_functor C j
(and its variant shift_functor_add'
). These isomorphisms satisfy some coherence properties
which are stated in lemmas like shift_functor_add'_assoc
, shift_functor_add'_zero_add
and
shift_functor_add'_add_zero
.
- shift : category_theory.monoidal_functor (category_theory.discrete A) (C ⥤ C)
A category has a shift indexed by an additive monoid A
if there is a monoidal functor from A
to C ⥤ C
.
Instances of this typeclass
Instances of other typeclasses for category_theory.has_shift
- category_theory.has_shift.has_sizeof_inst
- F : A → C ⥤ C
- zero : self.F 0 ≅ 𝟭 C
- add : Π (n m : A), self.F (n + m) ≅ self.F n ⋙ self.F m
- assoc_hom_app : ∀ (m₁ m₂ m₃ : A) (X : C), (self.add (m₁ + m₂) m₃).hom.app X ≫ (self.F m₃).map ((self.add m₁ m₂).hom.app X) = category_theory.eq_to_hom _ ≫ (self.add m₁ (m₂ + m₃)).hom.app X ≫ (self.add m₂ m₃).hom.app ((self.F m₁).obj X)
- zero_add_hom_app : ∀ (n : A) (X : C), (self.add 0 n).hom.app X = category_theory.eq_to_hom _ ≫ (self.F n).map (self.zero.inv.app X)
- add_zero_hom_app : ∀ (n : A) (X : C), (self.add n 0).hom.app X = category_theory.eq_to_hom _ ≫ self.zero.inv.app ((self.F n).obj X)
A helper structure to construct the shift functor (discrete A) ⥤ (C ⥤ C)
.
Instances for category_theory.shift_mk_core
- category_theory.shift_mk_core.has_sizeof_inst
Constructs a has_shift C A
instance from shift_mk_core
.
Equations
- category_theory.has_shift_mk C A h = {shift := {to_lax_monoidal_functor := {to_functor := {obj := (category_theory.discrete.functor h.F).obj, map := (category_theory.discrete.functor h.F).map, map_id' := _, map_comp' := _}, ε := h.zero.inv, μ := λ (m n : category_theory.discrete A), (h.add m.as n.as).inv, μ_natural' := _, associativity' := _, left_unitality' := _, right_unitality' := _}, ε_is_iso := _, μ_is_iso := _}}
The monoidal functor from A
to C ⥤ C
given a has_shift
instance.
The shift autoequivalence, moving objects and morphisms 'up'.
Equations
Instances for category_theory.shift_functor
Shifting by i + j
is the same as shifting by i
and then shifting by j
.
Equations
- category_theory.shift_functor_add C i j = ((category_theory.shift_monoidal_functor C A).μ_iso {as := i} {as := j}).symm
When k = i + j
, shifting by k
is the same as shifting by i
and then shifting by j
.
Equations
Shifting by zero is the identity functor.
Equations
Shifting by i + j
is the same as shifting by i
and then shifting by j
.
Shifting by zero is the identity functor.
When i + j = 0
, shifting by i
and by j
gives the identity functor
Equations
- category_theory.shift_functor_comp_iso_id C i j h = (category_theory.shift_functor_add' C i j 0 h).symm ≪≫ category_theory.shift_functor_zero C A
shifting by i
and shifting by j
forms an equivalence when i + j = 0
.
Equations
- category_theory.shift_equiv' C i j h = {functor := category_theory.shift_functor C i, inverse := category_theory.shift_functor C j, unit_iso := (category_theory.shift_functor_comp_iso_id C i j h).symm, counit_iso := category_theory.shift_functor_comp_iso_id C j i _, functor_unit_iso_comp' := _}
shifting by n
and shifting by -n
forms an equivalence.
Shifting by i
is an equivalence.
Shifting by n
is an essentially surjective functor.
Shifting by i
and then shifting by -i
is the identity.
Shifting by -i
and then shifting by i
is the identity.
When shifts are indexed by an additive commutative monoid, then shifts commute.
Equations
- category_theory.shift_functor_comm C i j = (category_theory.shift_functor_add C i j).symm ≪≫ category_theory.shift_functor_add' C j i (i + j) _
When shifts are indexed by an additive commutative monoid, then shifts commute.
When shifts are indexed by an additive commutative monoid, then shifts commute.
auxiliary definition for has_shift_of_fully_faithful
auxiliary definition for has_shift_of_fully_faithful
Equations
- category_theory.has_shift_of_fully_faithful_add F s i a b = category_theory.nat_iso_of_comp_fully_faithful F (i (a + b) ≪≫ category_theory.iso_whisker_left F (category_theory.shift_functor_add D a b) ≪≫ (F.associator (category_theory.shift_functor D a) (category_theory.shift_functor D b)).symm ≪≫ category_theory.iso_whisker_right (i a).symm (category_theory.shift_functor D b) ≪≫ (s a).associator F (category_theory.shift_functor D b) ≪≫ category_theory.iso_whisker_left (s a) (i b).symm ≪≫ ((s a).associator (s b) F).symm)
Given a family of endomorphisms of C
which are interwined by a fully faithful F : C ⥤ D
with shift functors on D
, we can promote that family to shift functors on C
.
Equations
- category_theory.has_shift_of_fully_faithful F s i = category_theory.has_shift_mk C A {F := s, zero := category_theory.has_shift_of_fully_faithful_zero F s i, add := category_theory.has_shift_of_fully_faithful_add F s i, assoc_hom_app := _, zero_add_hom_app := _, add_zero_hom_app := _}