Biproducts and binary biproducts #
We introduce the notion of (finite) biproducts and binary biproducts.
These are slightly unusual relative to the other shapes in the library, as they are simultaneously limits and colimits. (Zero objects are similar; they are "biterminal".)
For results about biproducts in preadditive categories see
CategoryTheory.Preadditive.Biproducts
.
In a category with zero morphisms, we model the (binary) biproduct of P Q : C
using a BinaryBicone
, which has a cone point X
,
and morphisms fst : X ⟶ P
, snd : X ⟶ Q
, inl : P ⟶ X
and inr : X ⟶ Q
,
such that inl ≫ fst = 𝟙 P
, inl ≫ snd = 0
, inr ≫ fst = 0
, and inr ≫ snd = 𝟙 Q
.
Such a BinaryBicone
is a biproduct if the cone is a limit cone, and the cocone is a colimit
cocone.
For biproducts indexed by a Fintype J
, a bicone
again consists of a cone point X
and morphisms π j : X ⟶ F j
and ι j : F j ⟶ X
for each j
,
such that ι j ≫ π j'
is the identity when j = j'
and zero otherwise.
Notation #
As ⊕
is already taken for the sum of types, we introduce the notation X ⊞ Y
for
a binary biproduct. We introduce ⨁ f
for the indexed biproduct.
Implementation #
Prior to #14046, HasFiniteBiproducts
required a DecidableEq
instance on the indexing type.
As this had no pay-off (everything about limits is non-constructive in mathlib), and occasional cost
(constructing decidability instances appropriate for constructions involving the indexing type),
we made everything classical.
- pt : C
- π : (j : J) → s.pt ⟶ F j
- ι : (j : J) → F j ⟶ s.pt
- ι_π : ∀ (j j' : J), CategoryTheory.CategoryStruct.comp (CategoryTheory.Limits.Bicone.ι s j) (CategoryTheory.Limits.Bicone.π s j') = if h : j = j' then CategoryTheory.eqToHom (_ : F j = F j') else 0
A c : Bicone F
is:
- an object
c.pt
and - morphisms
π j : pt ⟶ F j
andι j : F j ⟶ pt
for eachj
, - such that
ι j ≫ π j'
is the identity whenj = j'
and zero otherwise.
Instances For
- hom : A.pt ⟶ B.pt
A morphism between the two vertex objects of the bicones
- wπ : ∀ (j : J), CategoryTheory.CategoryStruct.comp s.hom (CategoryTheory.Limits.Bicone.π B j) = CategoryTheory.Limits.Bicone.π A j
The triangle consisting of the two natural transformations and
hom
commutes - wι : ∀ (j : J), CategoryTheory.CategoryStruct.comp (CategoryTheory.Limits.Bicone.ι A j) s.hom = CategoryTheory.Limits.Bicone.ι B j
The triangle consisting of the two natural transformations and
hom
commutes
A bicone morphism between two bicones for the same diagram is a morphism of the bicone points which commutes with the cone and cocone legs.
Instances For
The category of bicones on a given diagram.
To give an isomorphism between cocones, it suffices to give an isomorphism between their vertices which commutes with the cocone maps.
Instances For
A functor G : C ⥤ D
sends bicones over F
to bicones over G.obj ∘ F
functorially.
Instances For
Extract the cone from a bicone.
Instances For
A shorthand for toConeFunctor.obj
Instances For
Extract the cocone from a bicone.
Instances For
A shorthand for toCoconeFunctor.obj
Instances For
We can turn any limit cone over a discrete collection of objects into a bicone.
Instances For
We can turn any colimit cocone over a discrete collection of objects into a bicone.
Instances For
Structure witnessing that a bicone is both a limit cone and a colimit cocone.
- isColimit : CategoryTheory.Limits.IsColimit (CategoryTheory.Limits.Bicone.toCocone B)
Structure witnessing that a bicone is both a limit cone and a colimit cocone.
Structure witnessing that a bicone is both a limit cone and a colimit cocone.
Instances For
Whisker a bicone with an equivalence between the indexing types.
Instances For
Taking the cone of a whiskered bicone results in a cone isomorphic to one gained by whiskering the cone and postcomposing with a suitable isomorphism.
Instances For
Taking the cocone of a whiskered bicone results in a cone isomorphic to one gained by whiskering the cocone and precomposing with a suitable isomorphism.
Instances For
Whiskering a bicone with an equivalence between types preserves being a bilimit bicone.
Instances For
- bicone : CategoryTheory.Limits.Bicone F
A bicone over
F : J → C
, which is both a limit cone and a colimit cocone. - isBilimit : CategoryTheory.Limits.Bicone.IsBilimit s.bicone
A bicone over
F : J → C
, which is both a limit cone and a colimit cocone.
A bicone over F : J → C
, which is both a limit cone and a colimit cocone.
Instances For
- mk' :: (
- exists_biproduct : Nonempty (CategoryTheory.Limits.LimitBicone F)
HasBiproduct F
expresses the mere existence of a bicone which is simultaneously a limit and a colimit of the diagramF
. - )
HasBiproduct F
expresses the mere existence of a bicone which is
simultaneously a limit and a colimit of the diagram F
.
Instances
Use the axiom of choice to extract explicit BiproductData F
from HasBiproduct F
.
Instances For
A bicone for F
which is both a limit cone and a colimit cocone.
Instances For
biproduct.bicone F
is a bilimit bicone.
Instances For
biproduct.bicone F
is a limit cone.
Instances For
biproduct.bicone F
is a colimit cocone.
Instances For
- has_biproduct : ∀ (F : J → C), CategoryTheory.Limits.HasBiproduct F
C
has biproducts of shape J
if we have
a limit and a colimit, with the same cone points,
of every function F : J → C
.
Instances
- out : ∀ (n : ℕ), CategoryTheory.Limits.HasBiproductsOfShape (Fin n) C
HasFiniteBiproducts C
represents a choice of biproduct for every family of objects inC
indexed by a finite type.
HasFiniteBiproducts C
represents a choice of biproduct for every family of objects in C
indexed by a finite type.
Instances
The isomorphism between the specified limit and the specified colimit for a functor with a bilimit.
Instances For
biproduct f
computes the biproduct of a family of elements f
. (It is defined as an
abbreviation for limit (Discrete.functor f)
, so for most facts about biproduct f
, you will
just use general facts about limits and colimits.)
Instances For
The projection onto a summand of a biproduct.
Instances For
The inclusion into a summand of a biproduct.
Instances For
Note that as this lemma has an if
in the statement, we include a DecidableEq
argument.
This means you may not be able to simp
using this lemma unless you open Classical
.
Given a collection of maps into the summands, we obtain a map into the biproduct.
Instances For
Given a collection of maps out of the summands, we obtain a map out of the biproduct.
Instances For
Given a collection of maps between corresponding summands of a pair of biproducts indexed by the same type, we obtain a map between the biproducts.
Instances For
An alternative to biproduct.map
constructed via colimits.
This construction only exists in order to show it is equal to biproduct.map
.
Instances For
The canonical isomorphism between the chosen biproduct and the chosen product.
Instances For
The canonical isomorphism between the chosen biproduct and the chosen coproduct.
Instances For
Given a collection of isomorphisms between corresponding summands of a pair of biproducts indexed by the same type, we obtain an isomorphism between the biproducts.
Instances For
Two biproducts which differ by an equivalence in the indexing type, and up to isomorphism in the factors, are isomorphic.
Unfortunately there are two natural ways to define each direction of this isomorphism (because it is true for both products and coproducts separately). We give the alternative definitions as lemmas below.
Instances For
An iterated biproduct is a biproduct over a sigma type.
Instances For
The canonical morphism from the biproduct over a restricted index type to the biproduct of the full index type.
Instances For
The canonical morphism from a biproduct to the biproduct over a restriction of its index type.
Instances For
The kernel of biproduct.π f i
is the inclusion from the biproduct which omits i
from the index set J
into the biproduct over J
.
Instances For
The kernel of biproduct.π f i
is ⨁ Subtype.restrict {i}ᶜ f
.
Instances For
The cokernel of biproduct.ι f i
is the projection from the biproduct over the index set J
onto the biproduct omitting i
.
Instances For
The cokernel of biproduct.ι f i
is ⨁ Subtype.restrict {i}ᶜ f
.
Instances For
The limit cone exhibiting ⨁ Subtype.restrict pᶜ f
as the kernel of
biproduct.toSubtype f p
Instances For
The kernel of biproduct.toSubtype f p
is ⨁ Subtype.restrict pᶜ f
.
Instances For
The colimit cocone exhibiting ⨁ Subtype.restrict pᶜ f
as the cokernel of
biproduct.fromSubtype f p
Instances For
The cokernel of biproduct.fromSubtype f p
is ⨁ Subtype.restrict pᶜ f
.
Instances For
Convert a (dependently typed) matrix to a morphism of biproducts.
Instances For
Extract the matrix components from a morphism of biproducts.
Instances For
Morphisms between direct sums are matrices.
Instances For
Auxiliary lemma for biproduct.uniqueUpToIso
.
Auxiliary lemma for biproduct.uniqueUpToIso
.
Biproducts are unique up to isomorphism. This already follows because bilimits are limits,
but in the case of biproducts we can give an isomorphism with particularly nice definitional
properties, namely that biproduct.lift b.π
and biproduct.desc b.ι
are inverses of each
other.
Instances For
A category with finite biproducts has a zero object.
The limit bicone for the biproduct over an index type with exactly one term.
Instances For
A biproduct over an index type with exactly one term is just the object over that term.
Instances For
- pt : C
- fst : s.pt ⟶ P
- snd : s.pt ⟶ Q
- inl : P ⟶ s.pt
- inr : Q ⟶ s.pt
- inl_fst : CategoryTheory.CategoryStruct.comp s.inl s.fst = CategoryTheory.CategoryStruct.id P
- inl_snd : CategoryTheory.CategoryStruct.comp s.inl s.snd = 0
- inr_fst : CategoryTheory.CategoryStruct.comp s.inr s.fst = 0
- inr_snd : CategoryTheory.CategoryStruct.comp s.inr s.snd = CategoryTheory.CategoryStruct.id Q
A binary bicone for a pair of objects P Q : C
consists of the cone point X
,
maps from X
to both P
and Q
, and maps from both P
and Q
to X
,
so that inl ≫ fst = 𝟙 P
, inl ≫ snd = 0
, inr ≫ fst = 0
, and inr ≫ snd = 𝟙 Q
Instances For
Extract the cone from a binary bicone.
Instances For
Extract the cocone from a binary bicone.
Instances For
Convert a BinaryBicone
into a Bicone
over a pair.
Instances For
A binary bicone is a limit cone if and only if the corresponding bicone is a limit cone.
Instances For
A binary bicone is a colimit cocone if and only if the corresponding bicone is a colimit cocone.
Instances For
Convert a Bicone
over a function on WalkingPair
to a BinaryBicone.
Instances For
A bicone over a pair is a limit cone if and only if the corresponding binary bicone is a limit cone.
Instances For
A bicone over a pair is a colimit cocone if and only if the corresponding binary bicone is a colimit cocone.
Instances For
Structure witnessing that a binary bicone is a limit cone and a limit cocone.
Structure witnessing that a binary bicone is a limit cone and a limit cocone.
Structure witnessing that a binary bicone is a limit cone and a limit cocone.
Instances For
A binary bicone is a bilimit bicone if and only if the corresponding bicone is a bilimit.
Instances For
A bicone over a pair is a bilimit bicone if and only if the corresponding binary bicone is a bilimit.
Instances For
- bicone : CategoryTheory.Limits.BinaryBicone P Q
A bicone over
P Q : C
, which is both a limit cone and a colimit cocone. - isBilimit : CategoryTheory.Limits.BinaryBicone.IsBilimit s.bicone
A bicone over
P Q : C
, which is both a limit cone and a colimit cocone.
A bicone over P Q : C
, which is both a limit cone and a colimit cocone.
Instances For
- mk' :: (
- exists_binary_biproduct : Nonempty (CategoryTheory.Limits.BinaryBiproductData P Q)
HasBinaryBiproduct P Q
expresses the mere existence of a bicone which is simultaneously a limit and a colimit of the diagrampair P Q
. - )
HasBinaryBiproduct P Q
expresses the mere existence of a bicone which is
simultaneously a limit and a colimit of the diagram pair P Q
.
Instances
Use the axiom of choice to extract explicit BinaryBiproductData F
from HasBinaryBiproduct F
.
Instances For
A bicone for P Q
which is both a limit cone and a colimit cocone.
Instances For
BinaryBiproduct.bicone P Q
is a limit bicone.
Instances For
BinaryBiproduct.bicone P Q
is a limit cone.
Instances For
BinaryBiproduct.bicone P Q
is a colimit cocone.
Instances For
- has_binary_biproduct : ∀ (P Q : C), CategoryTheory.Limits.HasBinaryBiproduct P Q
HasBinaryBiproducts C
represents the existence of a bicone which is
simultaneously a limit and a colimit of the diagram pair P Q
, for every P Q : C
.
Instances
A category with finite biproducts has binary biproducts.
This is not an instance as typically in concrete categories there will be an alternative construction with nicer definitional properties.
The isomorphism between the specified binary product and the specified binary coproduct for a pair for a binary biproduct.
Instances For
An arbitrary choice of biproduct of a pair of objects.
Instances For
An arbitrary choice of biproduct of a pair of objects.
Instances For
The projection onto the first summand of a binary biproduct.
Instances For
The projection onto the second summand of a binary biproduct.
Instances For
The inclusion into the first summand of a binary biproduct.
Instances For
The inclusion into the second summand of a binary biproduct.