For a given morphism <Math>\alpha: A \rightarrow B</Math>, a kernel of <Math>\alpha</Math> consists of three parts:
<List>
<Item>
an object <Math>K</Math>,
</Item>
<Item>
a morphism <Math>\iota: K \rightarrow A</Math> such that <Math>\alpha \circ \iota \sim_{K,B} 0</Math>,
</Item>
<Item>
a dependent function <Math>u</Math> mapping each morphism <Math>\tau: T \rightarrow A</Math> satisfying <Math>\alpha \circ \tau \sim_{T,B} 0</Math> to a morphism <Math>u(\tau): T \rightarrow K</Math> such that <Math>\iota \circ u( \tau ) \sim_{T,A} \tau</Math>.
</Item>
</List>
The triple <Math>( K, \iota, u )</Math> is called a <Emph>kernel</Emph> of <Math>\alpha</Math> if the morphisms <Math>u( \tau )</Math> are uniquely determined up to
congruence of morphisms.
We denote the object <Math>K</Math> of such a triple by <Math>\mathrm{KernelObject}(\alpha)</Math>.
We say that the morphism <Math>u(\tau)</Math> is induced by the
<Emph>universal property of the kernel</Emph>.
<Math>\\ </Math>
<Math>\mathrm{KernelObject}</Math> is a functorial operation. This means:
for <Math>\mu: A \rightarrow A', </Math>,
<Math>\alpha: A \rightarrow B</Math>, <Math>\alpha': A' \rightarrow B' such that } \alpha' \circ \mu,
we obtain a morphism <Math>\mathrm{KernelObject}( \alpha ) \rightarrow \mathrm{KernelObject}( \alpha' ).
<Alt Only="LaTeX"><![CDATA[
\begin{center}
\begin{tikzpicture}
\def\w{2}
\node (K) at (-\w,0) {$K$};
\node (T) at (-\w,\w) {$T$};
\node (A) at (0,0) {$A$};
\node (B) at (\w,0) {$B$};
\draw[-latex] (A) to node[pos=0.45, above] {$\alpha$} (B);
\draw[-latex] (K) to node[pos=0.45, above] {$\iota$} (A);
\draw[-latex] (T) to node[pos=0.45, above right] {$\tau$} (A);
\draw[dashed, -latex] (T) to node[pos=0.45, left] {$\exists ! u( \tau )$} (K);
\draw[-latex, dotted] (T) to [out = 0, in = 90] node[pos=0.45, above right] {$\alpha \circ \tau \sim_{T,B} 0$} (B);
\draw[-latex, dotted] (K) to [out = -45, in = -135] node[pos=0.45, below] {$\alpha \circ \iota \sim_{K,B} 0$} (B);
\end{tikzpicture}
\end{center}
]]></Alt>
<ManSection>
<Attr Arg="alpha" Name="KernelObject" Label="for IsCapCategoryMorphism"/>
<Returns>an object
</Returns>
<Description>
The argument is a morphism <Math>\alpha</Math>.
The output is the kernel <Math>K</Math> of <Math>\alpha</Math>.
</Description>
</ManSection>
<ManSection>
<Attr Arg="alpha" Name="KernelEmbedding" Label="for IsCapCategoryMorphism"/>
<Returns>a morphism in <Math>\mathrm{Hom}(\mathrm{KernelObject}(\alpha),A)</Math>
</Returns>
<Description>
The argument is a morphism <Math>\alpha: A \rightarrow B</Math>.
The output is the kernel embedding <Math>\iota: \mathrm{KernelObject}(\alpha) \rightarrow A</Math>.
</Description>
</ManSection>
<ManSection>
<Oper Arg="alpha, K" Name="KernelEmbeddingWithGivenKernelObject" Label="for IsCapCategoryMorphism, IsCapCategoryObject"/>
<Returns>a morphism in <Math>\mathrm{Hom}(K,A)</Math>
</Returns>
<Description>
The arguments are a morphism <Math>\alpha: A \rightarrow B</Math>
and an object <Math>K = \mathrm{KernelObject}(\alpha)</Math>.
The output is the kernel embedding <Math>\iota: K \rightarrow A</Math>.
</Description>
</ManSection>
<ManSection>
<Oper Arg="alpha" Name="MorphismFromKernelObjectToSink" Label="for IsCapCategoryMorphism"/>
<Returns>the zero morphism in <Math>\mathrm{Hom}( \mathrm{KernelObject}(\alpha), B )</Math>
</Returns>
<Description>
The argument is a morphism <Math>\alpha: A \rightarrow B</Math>.
The output is the zero morphism <Math>0: \mathrm{KernelObject}(\alpha) \rightarrow B</Math>.
</Description>
</ManSection>
<ManSection>
<Oper Arg="alpha, K" Name="MorphismFromKernelObjectToSinkWithGivenKernelObject" Label="for IsCapCategoryMorphism, IsCapCategoryObject"/>
<Returns>the zero morphism in <Math>\mathrm{Hom}( K, B )</Math>
</Returns>
<Description>
The arguments are a morphism <Math>\alpha: A \rightarrow B</Math>
and an object <Math>K = \mathrm{KernelObject}(\alpha)</Math>.
The output is the zero morphism <Math>0: K \rightarrow B</Math>.
</Description>
</ManSection>
<ManSection>
<Oper Arg="alpha, T, tau" Name="KernelLift" Label="for IsCapCategoryMorphism, IsCapCategoryObject, IsCapCategoryMorphism"/>
<Returns>a morphism in <Math>\mathrm{Hom}(T,\mathrm{KernelObject}(\alpha))</Math>
</Returns>
<Description>
The arguments are a morphism <Math>\alpha: A \rightarrow B</Math>, a test object <Math>T</Math>,
and a test morphism <Math>\tau: T \rightarrow A</Math> satisfying <Math>\alpha \circ \tau \sim_{T,B} 0</Math>.
For convenience, the test object <A>T</A> can be omitted and is automatically derived from <A>tau</A> in that case.
The output is the morphism <Math>u(\tau): T \rightarrow \mathrm{KernelObject}(\alpha)</Math>
given by the universal property of the kernel.
</Description>
</ManSection>
<ManSection>
<Oper Arg="alpha, T, tau, K" Name="KernelLiftWithGivenKernelObject" Label="for IsCapCategoryMorphism, IsCapCategoryObject, IsCapCategoryMorphism, IsCapCategoryObject"/>
<Returns>a morphism in <Math>\mathrm{Hom}(T,K)</Math>
</Returns>
<Description>
The arguments are a morphism <Math>\alpha: A \rightarrow B</Math>, a test object <Math>T</Math>,
a test morphism <Math>\tau: T \rightarrow A</Math> satisfying <Math>\alpha \circ \tau \sim_{T,B} 0</Math>,
and an object <Math>K = \mathrm{KernelObject}(\alpha)</Math>.
For convenience, the test object <A>T</A> can be omitted and is automatically derived from <A>tau</A> in that case.
The output is the morphism <Math>u(\tau): T \rightarrow K</Math>
given by the universal property of the kernel.
</Description>
</ManSection>
<ManSection>
<Oper Arg="L" Name="KernelObjectFunctorial" Label="for IsList"/>
<Returns>a morphism in <Math>\mathrm{Hom}( \mathrm{KernelObject}( \alpha ), \mathrm{KernelObject}( \alpha' ) )
</Returns>
<Description>
The argument is a list <Math>L = [ \alpha: A \rightarrow B, [ \mu: A \rightarrow A', \nu: B \rightarrow B' ], \alpha': A' \rightarrow B' ] of morphisms.
The output is the morphism
<Math>\mathrm{KernelObject}( \alpha ) \rightarrow \mathrm{KernelObject}( \alpha' )
given by the functoriality of the kernel.
</Description>
</ManSection>
<ManSection>
<Oper Arg="alpha, mu, alpha_prime" Name="KernelObjectFunctorial" Label="for IsCapCategoryMorphism, IsCapCategoryMorphism, IsCapCategoryMorphism"/>
<Returns>a morphism in <Math>\mathrm{Hom}( \mathrm{KernelObject}( \alpha ), \mathrm{KernelObject}( \alpha' ) )
</Returns>
<Description>
The arguments are three morphisms
<Math>\alpha: A \rightarrow B</Math>, <Math>\mu: A \rightarrow A', : A' \rightarrow B'</Math>.
The output is the morphism
<Math>\mathrm{KernelObject}( \alpha ) \rightarrow \mathrm{KernelObject}( \alpha' )
given by the functoriality of the kernel.
</Description>
</ManSection>
<ManSection>
<Oper Arg="s, alpha, mu, alpha_prime, r" Name="KernelObjectFunctorialWithGivenKernelObjects" Label="for IsCapCategoryObject, IsCapCategoryMorphism, IsCapCategoryMorphism,IsCapCategoryMorphism, IsCapCategoryObject"/>
<Returns>a morphism in <Math>\mathrm{Hom}( s, r )</Math>
</Returns>
<Description>
The arguments are an object <Math>s = \mathrm{KernelObject}( \alpha )</Math>,
three morphisms
<Math>\alpha: A \rightarrow B</Math>, <Math>\mu: A \rightarrow A', : A' \rightarrow B'</Math>,
and an object <Math>r = \mathrm{KernelObject}( \alpha' ).
The output is the morphism
<Math>\mathrm{KernelObject}( \alpha ) \rightarrow \mathrm{KernelObject}( \alpha' )
given by the functoriality of the kernel.
</Description>
</ManSection>
<ManSection>
<Oper Arg="s, alpha, mu, nu, alpha_prime, r" Name="KernelObjectFunctorialWithGivenKernelObjects" Label="for IsCapCategoryObject, IsCapCategoryMorphism, IsCapCategoryMorphism,IsCapCategoryMorphism, IsCapCategoryMorphism, IsCapCategoryObject"/>
<Returns>a morphism in <Math>\mathrm{Hom}( s, r )</Math>
</Returns>
<Description>
The arguments are an object <Math>s = \mathrm{KernelObject}( \alpha )</Math>,
four morphisms
<Math>\alpha: A \rightarrow B</Math>, <Math>\mu: A \rightarrow A', </Math>, <Math>\alpha': A' \rightarrow B',
and an object <Math>r = \mathrm{KernelObject}( \alpha' ).
The output is the morphism
<Math>\mathrm{KernelObject}( \alpha ) \rightarrow \mathrm{KernelObject}( \alpha' )
given by the functoriality of the kernel.
</Description>
</ManSection>
For a given morphism <Math>\alpha: A \rightarrow B</Math>, a cokernel of <Math>\alpha</Math> consists of three parts:
<List>
<Item>
an object <Math>K</Math>,
</Item>
<Item>
a morphism <Math>\epsilon: B \rightarrow K</Math> such that <Math>\epsilon \circ \alpha \sim_{A,K} 0</Math>,
</Item>
<Item>
a dependent function <Math>u</Math> mapping each <Math>\tau: B \rightarrow T</Math> satisfying <Math>\tau \circ \alpha \sim_{A, T} 0</Math> to a morphism <Math>u(\tau):K \rightarrow T</Math> such that <Math>u(\tau) \circ \epsilon \sim_{B,T} \tau</Math>.
</Item>
</List>
The triple <Math>( K, \epsilon, u )</Math> is called a <Emph>cokernel</Emph> of <Math>\alpha</Math> if the morphisms <Math>u( \tau )</Math> are uniquely determined up to
congruence of morphisms.
We denote the object <Math>K</Math> of such a triple by <Math>\mathrm{CokernelObject}(\alpha)</Math>.
We say that the morphism <Math>u(\tau)</Math> is induced by the
<Emph>universal property of the cokernel</Emph>.
<Math>\\ </Math>
<Math>\mathrm{CokernelObject}</Math> is a functorial operation. This means:
for <Math>\mu: A \rightarrow A', </Math>,
<Math>\alpha: A \rightarrow B</Math>, <Math>\alpha': A' \rightarrow B' such that } \alpha' \circ \mu,
we obtain a morphism <Math>\mathrm{CokernelObject}( \alpha ) \rightarrow \mathrm{CokernelObject}( \alpha' ).
<Alt Only="LaTeX"><![CDATA[
\begin{center}
\begin{tikzpicture}
\def\w{2}
\node (A) at (0,0) {$A$};
\node (B) at (\w,0) {$B$};
\node (K) at (2*\w,0) {$K$};
\node (T) at (2*\w,\w) {$T$};
\draw[-latex] (A) to node[pos=0.45, above] {$\alpha$} (B);
\draw[-latex] (B) to node[pos=0.45, above] {$\epsilon$} (K);
\draw[-latex] (B) to node[pos=0.45, above left] {$\tau$} (T);
\draw[dashed, -latex] (K) to node[pos=0.45, right] {$\exists ! u( \tau )$} (T);
\draw[-latex, dotted] (A) to [out = 90, in = 180] node[pos=0.45, above left] {$\tau \circ \alpha \sim_{A, T} 0$} (T);
\draw[-latex, dotted] (A) to [out = -45, in = -135] node[pos=0.45, below] {$\epsilon \circ \alpha \sim_{A,K} 0$} (K);
\end{tikzpicture}
\end{center}
]]></Alt>
<ManSection>
<Attr Arg="alpha" Name="CokernelObject" Label="for IsCapCategoryMorphism"/>
<Returns>an object
</Returns>
<Description>
The argument is a morphism <Math>\alpha: A \rightarrow B</Math>.
The output is the cokernel <Math>K</Math> of <Math>\alpha</Math>.
</Description>
</ManSection>
<ManSection>
<Attr Arg="alpha" Name="CokernelProjection" Label="for IsCapCategoryMorphism"/>
<Returns>a morphism in <Math>\mathrm{Hom}(B, \mathrm{CokernelObject}( \alpha ))</Math>
</Returns>
<Description>
The argument is a morphism <Math>\alpha: A \rightarrow B</Math>.
The output is the cokernel projection <Math>\epsilon: B \rightarrow \mathrm{CokernelObject}( \alpha )</Math>.
</Description>
</ManSection>
<ManSection>
<Oper Arg="alpha, K" Name="CokernelProjectionWithGivenCokernelObject" Label="for IsCapCategoryMorphism, IsCapCategoryObject"/>
<Returns>a morphism in <Math>\mathrm{Hom}(B, K)</Math>
</Returns>
<Description>
The arguments are a morphism <Math>\alpha: A \rightarrow B</Math>
and an object <Math>K = \mathrm{CokernelObject}(\alpha)</Math>.
The output is the cokernel projection <Math>\epsilon: B \rightarrow \mathrm{CokernelObject}( \alpha )</Math>.
</Description>
</ManSection>
<ManSection>
<Oper Arg="alpha" Name="MorphismFromSourceToCokernelObject" Label="for IsCapCategoryMorphism"/>
<Returns>the zero morphism in <Math>\mathrm{Hom}( A, \mathrm{CokernelObject}( \alpha ) )</Math>.
</Returns>
<Description>
The argument is a morphism <Math>\alpha: A \rightarrow B</Math>.
The output is the zero morphism <Math>0: A \rightarrow \mathrm{CokernelObject}(\alpha)</Math>.
</Description>
</ManSection>
<ManSection>
<Oper Arg="alpha, K" Name="MorphismFromSourceToCokernelObjectWithGivenCokernelObject" Label="for IsCapCategoryMorphism, IsCapCategoryObject"/>
<Returns>the zero morphism in <Math>\mathrm{Hom}( A, K )</Math>.
</Returns>
<Description>
The argument is a morphism <Math>\alpha: A \rightarrow B</Math>
and an object <Math>K = \mathrm{CokernelObject}(\alpha)</Math>.
The output is the zero morphism <Math>0: A \rightarrow K</Math>.
</Description>
</ManSection>
<ManSection>
<Oper Arg="alpha, T, tau" Name="CokernelColift" Label="for IsCapCategoryMorphism, IsCapCategoryObject, IsCapCategoryMorphism"/>
<Returns>a morphism in <Math>\mathrm{Hom}(\mathrm{CokernelObject}(\alpha),T)</Math>
</Returns>
<Description>
The arguments are a morphism <Math>\alpha: A \rightarrow B</Math>, a test object <Math>T</Math>,
and a test morphism <Math>\tau: B \rightarrow T</Math> satisfying <Math>\tau \circ \alpha \sim_{A, T} 0</Math>.
For convenience, the test object <A>T</A> can be omitted and is automatically derived from <A>tau</A> in that case.
The output is the morphism <Math>u(\tau): \mathrm{CokernelObject}(\alpha) \rightarrow T</Math>
given by the universal property of the cokernel.
</Description>
</ManSection>
<ManSection>
<Oper Arg="alpha, T, tau, K" Name="CokernelColiftWithGivenCokernelObject" Label="for IsCapCategoryMorphism, IsCapCategoryObject, IsCapCategoryMorphism, IsCapCategoryObject"/>
<Returns>a morphism in <Math>\mathrm{Hom}(K,T)</Math>
</Returns>
<Description>
The arguments are a morphism <Math>\alpha: A \rightarrow B</Math>, a test object <Math>T</Math>,
a test morphism <Math>\tau: B \rightarrow T</Math> satisfying <Math>\tau \circ \alpha \sim_{A, T} 0</Math>,
and an object <Math>K = \mathrm{CokernelObject}(\alpha)</Math>.
For convenience, the test object <A>T</A> can be omitted and is automatically derived from <A>tau</A> in that case.
The output is the morphism <Math>u(\tau): K \rightarrow T</Math>
given by the universal property of the cokernel.
</Description>
</ManSection>
<ManSection>
<Oper Arg="L" Name="CokernelObjectFunctorial" Label="for IsList"/>
<Returns>a morphism in <Math>\mathrm{Hom}(\mathrm{CokernelObject}( \alpha ), \mathrm{CokernelObject}( \alpha' ))
</Returns>
<Description>
The argument is a list <Math>L = [ \alpha: A \rightarrow B, [ \mu:A \rightarrow A', \nu: B \rightarrow B' ], \alpha': A' \rightarrow B' ].
The output is the morphism
<Math>\mathrm{CokernelObject}( \alpha ) \rightarrow \mathrm{CokernelObject}( \alpha' )
given by the functoriality of the cokernel.
</Description>
</ManSection>
<ManSection>
<Oper Arg="alpha, nu, alpha_prime" Name="CokernelObjectFunctorial" Label="for IsCapCategoryMorphism, IsCapCategoryMorphism, IsCapCategoryMorphism"/>
<Returns>a morphism in <Math>\mathrm{Hom}(\mathrm{CokernelObject}( \alpha ), \mathrm{CokernelObject}( \alpha' ))
</Returns>
<Description>
The arguments are three morphisms
<Math>\alpha: A \rightarrow B, \nu: B \rightarrow B', \alpha': A' \rightarrow B'</Math>.
The output is the morphism
<Math>\mathrm{CokernelObject}( \alpha ) \rightarrow \mathrm{CokernelObject}( \alpha' )
given by the functoriality of the cokernel.
</Description>
</ManSection>
<ManSection>
<Oper Arg="s, alpha, nu, alpha_prime, r" Name="CokernelObjectFunctorialWithGivenCokernelObjects" Label="for IsCapCategoryObject, IsCapCategoryMorphism, IsCapCategoryMorphism,IsCapCategoryMorphism, IsCapCategoryObject"/>
<Returns>a morphism in <Math>\mathrm{Hom}(s, r)</Math>
</Returns>
<Description>
The arguments are an object <Math>s = \mathrm{CokernelObject}( \alpha )</Math>,
three morphisms
<Math>\alpha: A \rightarrow B, \nu: B \rightarrow B', \alpha': A' \rightarrow B'</Math>,
and an object <Math>r = \mathrm{CokernelObject}( \alpha' ).
The output is the morphism
<Math>\mathrm{CokernelObject}( \alpha ) \rightarrow \mathrm{CokernelObject}( \alpha' )
given by the functoriality of the cokernel.
</Description>
</ManSection>
<ManSection>
<Oper Arg="s, alpha, mu, nu, alpha_prime, r" Name="CokernelObjectFunctorialWithGivenCokernelObjects" Label="for IsCapCategoryObject, IsCapCategoryMorphism, IsCapCategoryMorphism,IsCapCategoryMorphism, IsCapCategoryMorphism, IsCapCategoryObject"/>
<Returns>a morphism in <Math>\mathrm{Hom}(s, r)</Math>
</Returns>
<Description>
The arguments are an object <Math>s = \mathrm{CokernelObject}( \alpha )</Math>,
four morphisms
<Math>\alpha: A \rightarrow B, \mu: A \rightarrow A', \nu: B \rightarrow B', \alpha': A' \rightarrow B',
and an object <Math>r = \mathrm{CokernelObject}( \alpha' ).
The output is the morphism
<Math>\mathrm{CokernelObject}( \alpha ) \rightarrow \mathrm{CokernelObject}( \alpha' )
given by the functoriality of the cokernel.
</Description>
</ManSection>
A zero object consists of three parts:
<List>
<Item>
an object <Math>Z</Math>,
</Item>
<Item>
a function <Math>u_{\mathrm{in}}</Math> mapping each object <Math>A</Math> to a morphism <Math>u_{\mathrm{in}}(A): A \rightarrow Z</Math>,
</Item>
<Item>
a function <Math>u_{\mathrm{out}}</Math> mapping each object <Math>A</Math> to a morphism <Math>u_{\mathrm{out}}(A): Z \rightarrow A</Math>.
</Item>
</List>
The triple <Math>(Z, u_{\mathrm{in}}, u_{\mathrm{out}})</Math> is called a <Emph>zero object</Emph> if the morphisms
<Math>u_{\mathrm{in}}(A)</Math>, <Math>u_{\mathrm{out}}(A)</Math> are uniquely determined up to congruence of morphisms.
We denote the object <Math>Z</Math> of such a triple by <Math>\mathrm{ZeroObject}</Math>.
We say that the morphisms <Math>u_{\mathrm{in}}(A)</Math> and <Math>u_{\mathrm{out}}(A)</Math> are induced by the
<Emph>universal property of the zero object</Emph>.
<ManSection>
<Attr Arg="C" Name="ZeroObject" Label="for IsCapCategory"/>
<Returns>an object
</Returns>
<Description>
The argument is a category <Math>C</Math>.
The output is a zero object <Math>Z</Math> of <Math>C</Math>.
</Description>
</ManSection>
<ManSection>
<Attr Arg="c" Name="ZeroObject" Label="for IsCapCategoryCell"/>
<Returns>an object
</Returns>
<Description>
This is a convenience method.
The argument is a cell <Math>c</Math>.
The output is a zero object <Math>Z</Math> of the
category <Math>C</Math> for which <Math>c \in C</Math>.
</Description>
</ManSection>
<ManSection>
<Attr Arg="A" Name="UniversalMorphismFromZeroObject" Label="for IsCapCategoryObject"/>
<Returns>a morphism in <Math>\mathrm{Hom}(\mathrm{ZeroObject}, A)</Math>
</Returns>
<Description>
The argument is an object <Math>A</Math>.
The output is the universal morphism <Math>u_{\mathrm{out}}: \mathrm{ZeroObject} \rightarrow A</Math>.
</Description>
</ManSection>
<ManSection>
<Oper Arg="A, Z" Name="UniversalMorphismFromZeroObjectWithGivenZeroObject" Label="for IsCapCategoryObject, IsCapCategoryObject"/>
<Returns>a morphism in <Math>\mathrm{Hom}(Z, A)</Math>
</Returns>
<Description>
The arguments are an object <Math>A</Math>,
and a zero object <Math>Z = \mathrm{ZeroObject}</Math>.
The output is the universal morphism <Math>u_{\mathrm{out}}: Z \rightarrow A</Math>.
</Description>
</ManSection>
<ManSection>
<Attr Arg="A" Name="UniversalMorphismIntoZeroObject" Label="for IsCapCategoryObject"/>
<Returns>a morphism in <Math>\mathrm{Hom}(A, \mathrm{ZeroObject})</Math>
</Returns>
<Description>
The argument is an object <Math>A</Math>.
The output is the universal morphism <Math>u_{\mathrm{in}}: A \rightarrow \mathrm{ZeroObject}</Math>.
</Description>
</ManSection>
<ManSection>
<Oper Arg="A, Z" Name="UniversalMorphismIntoZeroObjectWithGivenZeroObject" Label="for IsCapCategoryObject, IsCapCategoryObject"/>
<Returns>a morphism in <Math>\mathrm{Hom}(A, Z)</Math>
</Returns>
<Description>
The arguments are an object <Math>A</Math>,
and a zero object <Math>Z = \mathrm{ZeroObject}</Math>.
The output is the universal morphism <Math>u_{\mathrm{in}}: A \rightarrow Z</Math>.
</Description>
</ManSection>
<ManSection>
<Attr Arg="A" Name="MorphismFromZeroObject" Label="for IsCapCategoryObject"/>
<Returns>a morphism in <Math>\mathrm{Hom}(\mathrm{ZeroObject}, A)</Math>
</Returns>
<Description>
This is a synonym for <Code>UniversalMorphismFromZeroObject</Code>.
</Description>
</ManSection>
<ManSection>
<Attr Arg="A" Name="MorphismIntoZeroObject" Label="for IsCapCategoryObject"/>
<Returns>a morphism in <Math>\mathrm{Hom}(A, \mathrm{ZeroObject})</Math>
</Returns>
<Description>
This is a synonym for <Code>UniversalMorphismIntoZeroObject</Code>.
</Description>
</ManSection>
<ManSection>
<Attr Arg="C" Name="IsomorphismFromZeroObjectToInitialObject" Label="for IsCapCategory"/>
<Returns>a morphism in <Math>\mathrm{Hom}(\mathrm{ZeroObject}, \mathrm{InitialObject})</Math>
</Returns>
<Description>
The argument is a category <Math>C</Math>.
The output is the unique isomorphism <Math>\mathrm{ZeroObject} \rightarrow \mathrm{InitialObject}</Math>.
</Description>
</ManSection>
<ManSection>
<Attr Arg="C" Name="IsomorphismFromInitialObjectToZeroObject" Label="for IsCapCategory"/>
<Returns>a morphism in <Math>\mathrm{Hom}(\mathrm{InitialObject}, \mathrm{ZeroObject})</Math>
</Returns>
<Description>
The argument is a category <Math>C</Math>.
The output is the unique isomorphism <Math>\mathrm{InitialObject} \rightarrow \mathrm{ZeroObject}</Math>.
</Description>
</ManSection>
<ManSection>
<Attr Arg="C" Name="IsomorphismFromZeroObjectToTerminalObject" Label="for IsCapCategory"/>
<Returns>a morphism in <Math>\mathrm{Hom}(\mathrm{ZeroObject}, \mathrm{TerminalObject})</Math>
</Returns>
<Description>
The argument is a category <Math>C</Math>.
The output is the unique isomorphism <Math>\mathrm{ZeroObject} \rightarrow \mathrm{TerminalObject}</Math>.
</Description>
</ManSection>
<ManSection>
<Attr Arg="C" Name="IsomorphismFromTerminalObjectToZeroObject" Label="for IsCapCategory"/>
<Returns>a morphism in <Math>\mathrm{Hom}(\mathrm{TerminalObject}, \mathrm{ZeroObject})</Math>
</Returns>
<Description>
The argument is a category <Math>C</Math>.
The output is the unique isomorphism <Math>\mathrm{TerminalObject} \rightarrow \mathrm{ZeroObject}</Math>.
</Description>
</ManSection>
<ManSection>
<Attr Arg="C" Name="ZeroObjectFunctorial" Label="for IsCapCategory"/>
<Returns>a morphism in <Math>\mathrm{Hom}(\mathrm{ZeroObject}, \mathrm{ZeroObject} )</Math>
</Returns>
<Description>
The argument is a category <Math>C</Math>.
The output is the unique morphism <Math>\mathrm{ZeroObject} \rightarrow \mathrm{ZeroObject}</Math>.
</Description>
</ManSection>
<ManSection>
<Oper Arg="C, zero_object1, zero_object2" Name="ZeroObjectFunctorialWithGivenZeroObjects" Label="for IsCapCategoryObject, IsCapCategoryObject"/>
<Returns>a morphism in <Math>\mathrm{Hom}(zero_object1, zero_object2)</Math>
</Returns>
<Description>
The argument is a category <Math>C</Math> and a zero object <Math>\mathrm{ZeroObject}(C)</Math> twice (for compatibility with other functorials).
The output is the unique morphism <Math>zero_object1 \rightarrow zero_object2</Math>.
</Description>
</ManSection>
A terminal object consists of two parts:
<List>
<Item>
an object <Math>T</Math>,
</Item>
<Item>
a function <Math>u</Math> mapping each object <Math>A</Math> to a morphism <Math>u( A ): A \rightarrow T</Math>.
</Item>
</List>
The pair <Math>( T, u )</Math> is called a <Emph>terminal object</Emph> if the morphisms <Math>u( A )</Math> are uniquely determined up to
congruence of morphisms.
We denote the object <Math>T</Math> of such a pair by <Math>\mathrm{TerminalObject}</Math>.
We say that the morphism <Math>u( A )</Math> is induced by the
<Emph>universal property of the terminal object</Emph>.
<Math>\\ </Math>
<Math>\mathrm{TerminalObject}</Math> is a functorial operation. This just means:
There exists a unique morphism <Math>T \rightarrow T</Math>.
<ManSection>
<Attr Arg="C" Name="TerminalObject" Label="for IsCapCategory"/>
<Returns>an object
</Returns>
<Description>
The argument is a category <Math>C</Math>.
The output is a terminal object <Math>T</Math> of <Math>C</Math>.
</Description>
</ManSection>
<ManSection>
<Attr Arg="c" Name="TerminalObject" Label="for IsCapCategoryCell"/>
<Returns>an object
</Returns>
<Description>
This is a convenience method.
The argument is a cell <Math>c</Math>.
The output is a terminal object <Math>T</Math> of the
category <Math>C</Math> for which <Math>c \in C</Math>.
</Description>
</ManSection>
<ManSection>
<Attr Arg="A" Name="UniversalMorphismIntoTerminalObject" Label="for IsCapCategoryObject"/>
<Returns>a morphism in <Math>\mathrm{Hom}( A, \mathrm{TerminalObject} )</Math>
</Returns>
<Description>
The argument is an object <Math>A</Math>.
The output is the universal morphism <Math>u(A): A \rightarrow \mathrm{TerminalObject}</Math>.
</Description>
</ManSection>
<ManSection>
<Oper Arg="A, T" Name="UniversalMorphismIntoTerminalObjectWithGivenTerminalObject" Label="for IsCapCategoryObject, IsCapCategoryObject"/>
<Returns>a morphism in <Math>\mathrm{Hom}( A, T )</Math>
</Returns>
<Description>
The argument are an object <Math>A</Math>,
and an object <Math>T = \mathrm{TerminalObject}</Math>.
The output is the universal morphism <Math>u(A): A \rightarrow T</Math>.
</Description>
</ManSection>
<ManSection>
<Attr Arg="C" Name="TerminalObjectFunctorial" Label="for IsCapCategory"/>
<Returns>a morphism in <Math>\mathrm{Hom}(\mathrm{TerminalObject}, \mathrm{TerminalObject} )</Math>
</Returns>
<Description>
The argument is a category <Math>C</Math>.
The output is the unique morphism <Math>\mathrm{TerminalObject} \rightarrow \mathrm{TerminalObject}</Math>.
</Description>
</ManSection>
<ManSection>
<Oper Arg="C, terminal_object1, terminal_object2" Name="TerminalObjectFunctorialWithGivenTerminalObjects" Label="for IsCapCategoryObject, IsCapCategoryObject"/>
<Returns>a morphism in <Math>\mathrm{Hom}(terminal_object1, terminal_object2)</Math>
</Returns>
<Description>
The argument is a category <Math>C</Math> and a terminal object <Math>\mathrm{TerminalObject}(C)</Math> twice (for compatibility with other functorials).
The output is the unique morphism <Math>terminal_object1 \rightarrow terminal_object2</Math>.
</Description>
</ManSection>
An initial object consists of two parts:
<List>
<Item>
an object <Math>I</Math>,
</Item>
<Item>
a function <Math>u</Math> mapping each object <Math>A</Math> to a morphism <Math>u( A ): I \rightarrow A</Math>.
</Item>
</List>
The pair <Math>(I,u)</Math> is called a <Emph>initial object</Emph> if the morphisms <Math>u(A)</Math> are uniquely determined up to
congruence of morphisms.
We denote the object <Math>I</Math> of such a triple by <Math>\mathrm{InitialObject}</Math>.
We say that the morphism <Math>u( A )</Math> is induced by the
<Emph>universal property of the initial object</Emph>.
<Math>\\ </Math>
<Math>\mathrm{InitialObject}</Math> is a functorial operation. This just means:
There exists a unique morphisms <Math>I \rightarrow I</Math>.
<ManSection>
<Attr Arg="C" Name="InitialObject" Label="for IsCapCategory"/>
<Returns>an object
</Returns>
<Description>
The argument is a category <Math>C</Math>.
The output is an initial object <Math>I</Math> of <Math>C</Math>.
</Description>
</ManSection>
<ManSection>
<Attr Arg="c" Name="InitialObject" Label="for IsCapCategoryCell"/>
<Returns>an object
</Returns>
<Description>
This is a convenience method.
The argument is a cell <Math>c</Math>.
The output is an initial object <Math>I</Math> of the category <Math>C</Math>
for which <Math>c \in C</Math>.
</Description>
</ManSection>
<ManSection>
<Attr Arg="A" Name="UniversalMorphismFromInitialObject" Label="for IsCapCategoryObject"/>
<Returns>a morphism in <Math>\mathrm{Hom}(\mathrm{InitialObject}, A)</Math>.
</Returns>
<Description>
The argument is an object <Math>A</Math>.
The output is the universal morphism <Math>u(A): \mathrm{InitialObject} \rightarrow A</Math>.
</Description>
</ManSection>
<ManSection>
<Oper Arg="A, I" Name="UniversalMorphismFromInitialObjectWithGivenInitialObject" Label="for IsCapCategoryObject, IsCapCategoryObject"/>
<Returns>a morphism in <Math>\mathrm{Hom}(I, A)</Math>.
</Returns>
<Description>
The arguments are an object <Math>A</Math>,
and an object <Math>I = \mathrm{InitialObject}</Math>.
The output is the universal morphism <Math>u(A): \mathrm{InitialObject} \rightarrow A</Math>.
</Description>
</ManSection>
<ManSection>
<Attr Arg="C" Name="InitialObjectFunctorial" Label="for IsCapCategory"/>
<Returns>a morphism in <Math>\mathrm{Hom}( \mathrm{InitialObject}, \mathrm{InitialObject} )</Math>
</Returns>
<Description>
The argument is a category <Math>C</Math>.
The output is the unique morphism <Math>\mathrm{InitialObject} \rightarrow \mathrm{InitialObject}</Math>.
</Description>
</ManSection>
<ManSection>
<Oper Arg="C, initial_object1, initial_object2" Name="InitialObjectFunctorialWithGivenInitialObjects" Label="for IsCapCategoryObject, IsCapCategoryObject"/>
<Returns>a morphism in <Math>\mathrm{Hom}(initial_object1, initial_object2)</Math>
</Returns>
<Description>
The argument is a category <Math>C</Math> and an initial object <Math>\mathrm{InitialObject}(C)</Math> twice (for compatibility with other functorials).
The output is the unique morphism <Math>initial_object1 \rightarrow initial_object2</Math>.
</Description>
</ManSection>
For an integer <Math>n \geq 1</Math> and a given list <Math>D = (S_1, \dots, S_n)</Math> in an Ab-category, a direct sum consists of five parts:
<List>
<Item>
an object <Math>S</Math>,
</Item>
<Item>
a list of morphisms <Math>\pi = (\pi_i: S \rightarrow S_i)_{i = 1 \dots n}</Math>,
</Item>
<Item>
a list of morphisms <Math>\iota = (\iota_i: S_i \rightarrow S)_{i = 1 \dots n}</Math>,
</Item>
<Item>
a dependent function <Math>u_{\mathrm{in}}</Math> mapping every list <Math>\tau = ( \tau_i: T \rightarrow S_i )_{i = 1 \dots n}</Math>
to a morphism <Math>u_{\mathrm{in}}(\tau): T \rightarrow S</Math> such that
<Math>\pi_i \circ u_{\mathrm{in}}(\tau) \sim_{T,S_i} \tau_i</Math> for all <Math>i = 1, \dots, n</Math>.
</Item>
<Item>
a dependent function <Math>u_{\mathrm{out}}</Math> mapping every list <Math>\tau = ( \tau_i: S_i \rightarrow T )_{i = 1 \dots n}</Math>
to a morphism <Math>u_{\mathrm{out}}(\tau): S \rightarrow T</Math> such that
<Math>u_{\mathrm{out}}(\tau) \circ \iota_i \sim_{S_i, T} \tau_i</Math> for all <Math>i = 1, \dots, n</Math>,
</Item>
</List>
such that
<List>
<Item>
<Math>\sum_{i=1}^{n} \iota_i \circ \pi_i \sim_{S,S} \mathrm{id}_S</Math>,
</Item>
<Item>
<Math>\pi_j \circ \iota_i \sim_{S_i, S_j} \delta_{i,j}</Math>,
</Item>
</List>
where <Math>\delta_{i,j} \in \mathrm{Hom}( S_i, S_j )</Math> is the identity if <Math>i=j</Math>, and <Math>0</Math> otherwise.
The <Math>5</Math>-tuple <Math>(S, \pi, \iota, u_{\mathrm{in}}, u_{\mathrm{out}})</Math> is called a <Emph>direct sum</Emph> of <Math>D</Math>.
We denote the object <Math>S</Math> of such a <Math>5</Math>-tuple by <Math>\bigoplus_{i=1}^n S_i</Math>.
We say that the morphisms <Math>u_{\mathrm{in}}(\tau), u_{\mathrm{out}}(\tau)</Math> are induced by the
<Emph>universal property of the direct sum</Emph>.
<Math>\\ </Math>
<Math>\mathrm{DirectSum}</Math> is a functorial operation. This means:
For <Math>(\mu_i: S_i \rightarrow S'_i)_{i=1\dots n},
we obtain a morphism <Math>\bigoplus_{i=1}^n S_i \rightarrow \bigoplus_{i=1}^n S_i'.
<Alt Only="LaTeX"><![CDATA[
\begin{center}
\begin{tikzpicture}
\def\w{2}
\def\a{20}
\node (S) at (0,0) {$S$};
\node (S1) at (-\w,0) {$S_1$};
\node (S2) at (\w,0) {$S_2$};
\node (T) at (0,\w) {$T$};
\draw[-latex] (S) to [out = 180-\a, in = \a] node[pos=0.45, above] {$\pi_1$} (S1);
\draw[-latex] (S) to [out = \a, in = 180-\a] node[pos=0.45, above] {$\pi_2$} (S2);
\draw[-latex] (S1) to [out = -\a, in = -180+\a] node[pos=0.45, below] {$\iota_1$} (S);
\draw[-latex] (S2) to [out = -180+\a, in = -\a] node[pos=0.45, below] {$\iota_2$} (S);
\draw[-latex] (T) to [out = -180, in = 90] node[pos=0.45, above left] {$\tau_1$} (S1);
\draw[-latex] (T) to [out = 0, in = 90] node[pos=0.45, above right] {$\tau_2$} (S2);
\draw[dashed, -latex] (T) to node[pos=0.45, left] {$\exists u_{in} ( \tau )$} (S);
\end{tikzpicture}
\end{center}
]]></Alt>
<Alt Only="LaTeX"><![CDATA[
\begin{center}
\begin{tikzpicture}
\def\w{2}
\def\a{20}
\node (S) at (0,0) {$S$};
\node (S1) at (-\w,0) {$S_1$};
\node (S2) at (\w,0) {$S_2$};
\node (T) at (0,\w) {$T$};
\draw[-latex] (S) to [out = 180-\a, in = \a] node[pos=0.45, above] {$\pi_1$} (S1);
\draw[-latex] (S) to [out = \a, in = 180-\a] node[pos=0.45, above] {$\pi_2$} (S2);
\draw[-latex] (S1) to [out = -\a, in = -180+\a] node[pos=0.45, below] {$\iota_1$} (S);
\draw[-latex] (S2) to [out = -180+\a, in = -\a] node[pos=0.45, below] {$\iota_2$} (S);
\draw[-latex] (S1) to [out = 90, in = -180] node[pos=0.45, above left] {$\tau_1$} (T);
\draw[-latex] (S2) to [out = 90, in = 0] node[pos=0.45, above right] {$\tau_2$} (T);
\draw[dashed, -latex] (S) to node[pos=0.45, left] {$\exists u_{out} ( \tau )$} (T);
\end{tikzpicture}
\end{center}
]]></Alt>
<ManSection>
<Func Arg="arg" Name="DirectSum" />
<Returns>an object
</Returns>
<Description>
This is a convenience method.
There are two different ways to use this method:
<List>
<Item>
The argument is a list of objects <Math>D = (S_1, \dots, S_n)</Math>.
</Item>
<Item>
The arguments are objects <Math>S_1, \dots, S_n</Math>.
</Item>
</List>
The output is the direct sum <Math>\bigoplus_{i=1}^n S_i</Math>.
</Description>
</ManSection>
<ManSection>
<Oper Arg="D" Name="DirectSumOp" Label="for IsList"/>
<Returns>an object
</Returns>
<Description>
The argument is a list of objects <Math>D = (S_1, \dots, S_n)</Math>.
The output is the direct sum <Math>\bigoplus_{i=1}^n S_i</Math>.
</Description>
</ManSection>
<ManSection>
<Oper Arg="D,k" Name="ProjectionInFactorOfDirectSum" Label="for IsList, IsInt"/>
<Returns>a morphism in <Math>\mathrm{Hom}( \bigoplus_{i=1}^n S_i, S_k )</Math>
</Returns>
<Description>
The arguments are a list of objects <Math>D = (S_1, \dots, S_n)</Math>
and an integer <Math>k</Math>.
The output is the <Math>k</Math>-th projection
<Math>\pi_k: \bigoplus_{i=1}^n S_i \rightarrow S_k</Math>.
</Description>
</ManSection>
<ManSection>
<Oper Arg="D,k,S" Name="ProjectionInFactorOfDirectSumWithGivenDirectSum" Label="for IsList, IsInt, IsCapCategoryObject"/>
<Returns>a morphism in <Math>\mathrm{Hom}( S, S_k )</Math>
</Returns>
<Description>
The arguments are a list of objects <Math>D = (S_1, \dots, S_n)</Math>,
an integer <Math>k</Math>,
and an object <Math>S = \bigoplus_{i=1}^n S_i</Math>.
The output is the <Math>k</Math>-th projection
<Math>\pi_k: S \rightarrow S_k</Math>.
</Description>
</ManSection>
<ManSection>
<Oper Arg="D,k" Name="InjectionOfCofactorOfDirectSum" Label="for IsList, IsInt"/>
<Returns>a morphism in <Math>\mathrm{Hom}( S_k, \bigoplus_{i=1}^n S_i )</Math>
</Returns>
<Description>
The arguments are a list of objects <Math>D = (S_1, \dots, S_n)</Math>
and an integer <Math>k</Math>.
The output is the <Math>k</Math>-th injection
<Math>\iota_k: S_k \rightarrow \bigoplus_{i=1}^n S_i</Math>.
</Description>
</ManSection>
<ManSection>
<Oper Arg="D,k,S" Name="InjectionOfCofactorOfDirectSumWithGivenDirectSum" Label="for IsList, IsInt, IsCapCategoryObject"/>
<Returns>a morphism in <Math>\mathrm{Hom}( S_k, S )</Math>
</Returns>
<Description>
The arguments are a list of objects <Math>D = (S_1, \dots, S_n)</Math>,
an integer <Math>k</Math>,
and an object <Math>S = \bigoplus_{i=1}^n S_i</Math>.
The output is the <Math>k</Math>-th injection
<Math>\iota_k: S_k \rightarrow S</Math>.
</Description>
</ManSection>
<ManSection>
<Oper Arg="D, T, tau" Name="UniversalMorphismIntoDirectSum" Label="for IsList, IsCapCategoryObject, IsList"/>
<Returns>a morphism in <Math>\mathrm{Hom}(T, \bigoplus_{i=1}^n S_i)</Math>
</Returns>
<Description>
The arguments are a list of objects <Math>D = (S_1, \dots, S_n)</Math>, a test object <Math>T</Math>,
and a list of morphisms <Math>\tau = ( \tau_i: T \rightarrow S_i )_{i = 1 \dots n}</Math>.
For convenience, the diagram <A>D</A> and/or the test object <A>T</A> can be omitted
and are automatically derived from <A>tau</A> in that case.
The output is the morphism
<Math>u_{\mathrm{in}}(\tau): T \rightarrow \bigoplus_{i=1}^n S_i</Math>
given by the universal property of the direct sum.
</Description>
</ManSection>
<ManSection>
<Oper Arg="D, T, tau, S" Name="UniversalMorphismIntoDirectSumWithGivenDirectSum" Label="for IsList, IsCapCategoryObject, IsList, IsCapCategoryObject"/>
<Returns>a morphism in <Math>\mathrm{Hom}(T, S)</Math>
</Returns>
<Description>
The arguments are a list of objects <Math>D = (S_1, \dots, S_n)</Math>, a test object <Math>T</Math>,
a list of morphisms <Math>\tau = ( \tau_i: T \rightarrow S_i )_{i = 1 \dots n}</Math>,
and an object <Math>S = \bigoplus_{i=1}^n S_i</Math>.
For convenience, the test object <A>T</A> can be omitted and is automatically derived from <A>tau</A> in that case.
The output is the morphism
<Math>u_{\mathrm{in}}(\tau): T \rightarrow S</Math>
given by the universal property of the direct sum.
</Description>
</ManSection>
<ManSection>
<Oper Arg="D, T, tau" Name="UniversalMorphismFromDirectSum" Label="for IsList, IsCapCategoryObject, IsList"/>
<Returns>a morphism in <Math>\mathrm{Hom}(\bigoplus_{i=1}^n S_i, T)</Math>
</Returns>
<Description>
The arguments are a list of objects <Math>D = (S_1, \dots, S_n)</Math>, a test object <Math>T</Math>,
and a list of morphisms <Math>\tau = ( \tau_i: S_i \rightarrow T )_{i = 1 \dots n}</Math>.
For convenience, the diagram <A>D</A> and/or the test object <A>T</A> can be omitted
and are automatically derived from <A>tau</A> in that case.
The output is the morphism
<Math>u_{\mathrm{out}}(\tau): \bigoplus_{i=1}^n S_i \rightarrow T</Math>
given by the universal property of the direct sum.
</Description>
</ManSection>
<ManSection>
<Oper Arg="D, T, tau, S" Name="UniversalMorphismFromDirectSumWithGivenDirectSum" Label="for IsList, IsCapCategoryObject, IsList, IsCapCategoryObject"/>
<Returns>a morphism in <Math>\mathrm{Hom}(S, T)</Math>
</Returns>
<Description>
The arguments are a list of objects <Math>D = (S_1, \dots, S_n)</Math>, a test object <Math>T</Math>,
a list of morphisms <Math>\tau = ( \tau_i: S_i \rightarrow T )_{i = 1 \dots n}</Math>,
and an object <Math>S = \bigoplus_{i=1}^n S_i</Math>.
For convenience, the test object <A>T</A> can be omitted and is automatically derived from <A>tau</A> in that case.
The output is the morphism
<Math>u_{\mathrm{out}}(\tau): S \rightarrow T</Math>
given by the universal property of the direct sum.
</Description>
</ManSection>
<ManSection>
<Oper Arg="D" Name="IsomorphismFromDirectSumToDirectProduct" Label="for IsList"/>
<Returns>a morphism in <Math>\mathrm{Hom}( \bigoplus_{i=1}^n S_i, \prod_{i=1}^{n}S_i )</Math>
</Returns>
<Description>
The argument is a list of objects <Math>D = (S_1, \dots, S_n)</Math>.
The output is the canonical isomorphism
<Math>\bigoplus_{i=1}^n S_i \rightarrow \prod_{i=1}^{n}S_i</Math>.
</Description>
</ManSection>
<ManSection>
<Oper Arg="D" Name="IsomorphismFromDirectProductToDirectSum" Label="for IsList"/>
<Returns>a morphism in <Math>\mathrm{Hom}( \prod_{i=1}^{n}S_i, \bigoplus_{i=1}^n S_i )</Math>
</Returns>
<Description>
The argument is a list of objects <Math>D = (S_1, \dots, S_n)</Math>.
The output is the canonical isomorphism
<Math>\prod_{i=1}^{n}S_i \rightarrow \bigoplus_{i=1}^n S_i</Math>.
</Description>
</ManSection>
<ManSection>
<Oper Arg="D" Name="IsomorphismFromDirectSumToCoproduct" Label="for IsList"/>
<Returns>a morphism in <Math>\mathrm{Hom}( \bigoplus_{i=1}^n S_i, \bigsqcup_{i=1}^{n}S_i )</Math>
</Returns>
<Description>
The argument is a list of objects <Math>D = (S_1, \dots, S_n)</Math>.
The output is the canonical isomorphism
<Math>\bigoplus_{i=1}^n S_i \rightarrow \bigsqcup_{i=1}^{n}S_i</Math>.
</Description>
</ManSection>
<ManSection>
<Oper Arg="D" Name="IsomorphismFromCoproductToDirectSum" Label="for IsList"/>
<Returns>a morphism in <Math>\mathrm{Hom}( \bigsqcup_{i=1}^{n}S_i, \bigoplus_{i=1}^n S_i )</Math>
</Returns>
<Description>
The argument is a list of objects <Math>D = (S_1, \dots, S_n)</Math>.
The output is the canonical isomorphism
<Math>\bigsqcup_{i=1}^{n}S_i \rightarrow \bigoplus_{i=1}^n S_i</Math>.
</Description>
</ManSection>
<ManSection>
<Oper Arg="diagram_S, M, diagram_T" Name="MorphismBetweenDirectSums" Label="for IsList, IsList, IsList"/>
<Returns>a morphism in <Math>\mathrm{Hom}(\bigoplus_{i=1}^{m}A_i, \bigoplus_{j=1}^n B_j)</Math>
</Returns>
<Description>
The arguments are given as follows:
<List>
<Item>
<A>diagram_S</A> is a list of objects <Math>(A_i)_{i = 1 \dots m}</Math>,
</Item>
<Item>
<A>diagram_T</A> is a list of objects <Math>(B_j)_{j = 1 \dots n}</Math>,
</Item>
<Item>
<A>M</A> is a list of lists of morphisms <Math>( ( \phi_{i,j}: A_i \rightarrow B_j )_{j = 1 \dots n} )_{i = 1 \dots m}</Math>.
</Item>
</List>
The output is the morphism
<Math>\bigoplus_{i=1}^{m}A_i \rightarrow \bigoplus_{j=1}^n B_j</Math>
defined by the matrix <Math>M</Math>.
</Description>
</ManSection>
<ManSection>
<Oper Arg="M" Name="MorphismBetweenDirectSums" Label="for IsList"/>
<Returns>a morphism in <Math>\mathrm{Hom}(\bigoplus_{i=1}^{m}A_i, \bigoplus_{j=1}^n B_j)</Math>
</Returns>
<Description>
This is a convenience method.
The argument <Math>M = ( ( \phi_{i,j}: A_i \rightarrow B_j )_{j = 1 \dots n} )_{i = 1 \dots m}</Math>
is a (non-empty) list of (non-empty) lists of morphisms.
The output is the morphism
<Math>\bigoplus_{i=1}^{m}A_i \rightarrow \bigoplus_{j=1}^n B_j</Math>
defined by the matrix <Math>M</Math>.
</Description>
</ManSection>
<ManSection>
<Oper Arg="S, diagram_S, M, diagram_T, T" Name="MorphismBetweenDirectSumsWithGivenDirectSums" Label="for IsCapCategoryObject, IsList, IsList, IsList, IsCapCategoryObject"/>
<Returns>a morphism in <Math>\mathrm{Hom}(\bigoplus_{i=1}^{m}A_i, \bigoplus_{j=1}^n B_j)</Math>
</Returns>
<Description>
The arguments are given as follows:
<List>
<Item>
<A>diagram_S</A> is a list of objects <Math>(A_i)_{i = 1 \dots m}</Math>,
</Item>
<Item>
<A>diagram_T</A> is a list of objects <Math>(B_j)_{j = 1 \dots n}</Math>,
</Item>
<Item>
<A>S</A> is the direct sum <Math>\bigoplus_{i=1}^{m}A_i</Math>,
</Item>
<Item>
<A>T</A> is the direct sum <Math>\bigoplus_{j=1}^{n}B_j</Math>,
</Item>
<Item>
<A>M</A> is a list of lists of morphisms <Math>( ( \phi_{i,j}: A_i \rightarrow B_j )_{j = 1 \dots n} )_{i = 1 \dots m}</Math>.
</Item>
</List>
The output is the morphism
<Math>\bigoplus_{i=1}^{m}A_i \rightarrow \bigoplus_{j=1}^n B_j</Math>
defined by the matrix <Math>M</Math>.
</Description>
</ManSection>
<ManSection>
<Oper Arg="alpha, D, k" Name="ComponentOfMorphismIntoDirectSum" Label="for IsCapCategoryMorphism, IsList, IsInt"/>
<Returns>a morphism in <Math>\mathrm{Hom}(A, S_k)</Math>
</Returns>
<Description>
The arguments are a morphism <Math>\alpha: A \rightarrow S</Math>,
a list <Math>D = (S_1, \dots, S_n)</Math> of objects with <Math>S = \bigoplus_{j=1}^n S_j</Math>,
and an integer <Math>k</Math>.
The output is the component morphism
<Math>A \rightarrow S_k</Math>.
</Description>
</ManSection>
<ManSection>
<Oper Arg="alpha, D, k" Name="ComponentOfMorphismFromDirectSum" Label="for IsCapCategoryMorphism, IsList, IsInt"/>
<Returns>a morphism in <Math>\mathrm{Hom}(S_k, A)</Math>
</Returns>
<Description>
The arguments are a morphism <Math>\alpha: S \rightarrow A</Math>,
a list <Math>D = (S_1, \dots, S_n)</Math> of objects with <Math>S = \bigoplus_{j=1}^n S_j</Math>,
and an integer <Math>k</Math>.
The output is the component morphism
<Math>S_k \rightarrow A</Math>.
</Description>
</ManSection>
<ManSection>
<Oper Arg="source_diagram, L, range_diagram" Name="DirectSumFunctorial" Label="for IsList, IsList, IsList"/>
<Returns>a morphism in <Math>\mathrm{Hom}( \bigoplus_{i=1}^n S_i, \bigoplus_{i=1}^n S_i' )
</Returns>
<Description>
The arguments are
a list of objects <Math>(S_i)_{i = 1 \dots n}</Math>,
a list of morphisms <Math>L = ( \mu_1: S_1 \rightarrow S_1', \dots, \mu_n: S_n \rightarrow S_n' )</Math>,
and a list of objects <Math>(S_i')_{i = 1 \dots n}.
For convenience, <A>source_diagram</A> and <A>range_diagram</A> can be omitted
and are automatically derived from <A>L</A> in that case.
The output is a morphism
<Math>\bigoplus_{i=1}^n S_i \rightarrow \bigoplus_{i=1}^n S_i'
given by the functoriality of the direct sum.
</Description>
</ManSection>
<ManSection>
<Oper Arg="d_1, source_diagram, L, range_diagram, d_2" Name="DirectSumFunctorialWithGivenDirectSums" Label="for IsCapCategoryObject, IsList, IsList, IsList, IsCapCategoryObject"/>
<Returns>a morphism in <Math>\mathrm{Hom}( d_1, d_2 )</Math>
</Returns>
<Description>
The arguments are an object <Math>d_1 = \bigoplus_{i=1}^n S_i</Math>,
a list of objects <Math>(S_i)_{i = 1 \dots n}</Math>,
a list of morphisms <Math>L = ( \mu_1: S_1 \rightarrow S_1', \dots, \mu_n: S_n \rightarrow S_n' )</Math>,
a list of objects <Math>(S_i')_{i = 1 \dots n},
and an object <Math>d_2 = \bigoplus_{i=1}^n S_i'.
For convenience, <A>source_diagram</A> and <A>range_diagram</A> can be omitted
and are automatically derived from <A>L</A> in that case.
The output is a morphism
<Math>d_1 \rightarrow d_2</Math>
given by the functoriality of the direct sum.
</Description>
</ManSection>
For an integer <Math>n \geq 1</Math> and a given list of objects <Math>D = ( I_1, \dots, I_n )</Math>, a coproduct of <Math>D</Math> consists of three parts:
<List>
<Item>
an object <Math>I</Math>,
</Item>
<Item>
a list of morphisms <Math>\iota = ( \iota_i: I_i \rightarrow I )_{i = 1 \dots n}</Math>
</Item>
<Item>
a dependent function <Math>u</Math> mapping each list of morphisms <Math>\tau = ( \tau_i: I_i \rightarrow T )</Math>
to a morphism <Math>u( \tau ): I \rightarrow T</Math> such that <Math>u( \tau ) \circ \iota_i \sim_{I_i, T} \tau_i</Math> for all <Math>i = 1, \dots, n</Math>.
</Item>
</List>
The triple <Math>( I, \iota, u )</Math> is called a <Emph>coproduct</Emph> of <Math>D</Math> if the morphisms <Math>u( \tau )</Math> are uniquely determined up to
congruence of morphisms.
We denote the object <Math>I</Math> of such a triple by <Math>\bigsqcup_{i=1}^n I_i</Math>.
We say that the morphism <Math>u( \tau )</Math> is induced by the
<Emph>universal property of the coproduct</Emph>.
<Math>\\ </Math>
<Math>\mathrm{Coproduct}</Math> is a functorial operation. This means:
For <Math>(\mu_i: I_i \rightarrow I'_i)_{i=1\dots n},
we obtain a morphism <Math>\bigsqcup_{i=1}^n I_i \rightarrow \bigsqcup_{i=1}^n I_i'.
<Alt Only="LaTeX"><![CDATA[
\begin{center}
\begin{tikzpicture}
\def\w{2}
\node (I) at (0,0) {$I$};
\node (I1) at (-\w,0) {$I_1$};
\node (I2) at (\w,0) {$I_2$};
\node (T) at (0,\w) {$T$};
\draw[-latex] (S1) to node[pos=0.45, below] {$\iota_1$} (S);
\draw[-latex] (S2) to node[pos=0.45, below] {$\iota_2$} (S);
\draw[-latex] (S1) to [out = 90, in = -180] node[pos=0.45, above left] {$\tau_1$} (T);
\draw[-latex] (S2) to [out = 90, in = 0] node[pos=0.45, above right] {$\tau_2$} (T);
\draw[dashed, -latex] (S) to node[pos=0.45, left] {$\exists ! u ( \tau )$} (T);
\end{tikzpicture}
\end{center}
]]></Alt>
<ManSection>
<Oper Arg="D" Name="Coproduct" Label="for IsList"/>
<Returns>an object
</Returns>
<Description>
The argument is a list of objects <Math>D = ( I_1, \dots, I_n )</Math>.
The output is the coproduct <Math>\bigsqcup_{i=1}^n I_i</Math>.
</Description>
</ManSection>
<ManSection>
<Oper Arg="I1, I2" Name="Coproduct" Label="for IsCapCategoryObject, IsCapCategoryObject"/>
<Returns>an object
</Returns>
<Description>
This is a convenience method.
The arguments are two objects <Math>I_1, I_2</Math>.
The output is the coproduct <Math>I_1 \bigsqcup I_2</Math>.
</Description>
</ManSection>
<ManSection>
<Oper Arg="I1, I2" Name="Coproduct" Label="for IsCapCategoryObject, IsCapCategoryObject, IsCapCategoryObject"/>
<Returns>an object
</Returns>
<Description>
This is a convenience method.
The arguments are three objects <Math>I_1, I_2, I_3</Math>.
The output is the coproduct <Math>I_1 \bigsqcup I_2 \bigsqcup I_3</Math>.
</Description>
</ManSection>
<ManSection>
<Oper Arg="D,k" Name="InjectionOfCofactorOfCoproduct" Label="for IsList, IsInt"/>
<Returns>a morphism in <Math>\mathrm{Hom}(I_k, \bigsqcup_{i=1}^n I_i)</Math>
</Returns>
<Description>
The arguments are a list of objects <Math>D = ( I_1, \dots, I_n )</Math>
and an integer <Math>k</Math>.
The output is the <Math>k</Math>-th injection
<Math>\iota_k: I_k \rightarrow \bigsqcup_{i=1}^n I_i</Math>.
</Description>
</ManSection>
<ManSection>
<Oper Arg="D,k,I" Name="InjectionOfCofactorOfCoproductWithGivenCoproduct" Label="for IsList, IsInt, IsCapCategoryObject"/>
<Returns>a morphism in <Math>\mathrm{Hom}(I_k, I)</Math>
</Returns>
<Description>
The arguments are a list of objects <Math>D = ( I_1, \dots, I_n )</Math>,
an integer <Math>k</Math>,
and an object <Math>I = \bigsqcup_{i=1}^n I_i</Math>.
The output is the <Math>k</Math>-th injection
<Math>\iota_k: I_k \rightarrow I</Math>.
</Description>
</ManSection>
<ManSection>
<Oper Arg="D, T, tau" Name="UniversalMorphismFromCoproduct" Label="for IsList, IsCapCategoryObject, IsList"/>
<Returns>a morphism in <Math>\mathrm{Hom}(\bigsqcup_{i=1}^n I_i, T)</Math>
</Returns>
<Description>
The arguments are a list of objects <Math>D = ( I_1, \dots, I_n )</Math>, a test object <Math>T</Math>,
and a list of morphisms <Math>\tau = ( \tau_i: I_i \rightarrow T )</Math>.
For convenience, the diagram <A>D</A> and/or the test object <A>T</A> can be omitted
and are automatically derived from <A>tau</A> in that case.
The output is the morphism
<Math>u( \tau ): \bigsqcup_{i=1}^n I_i \rightarrow T</Math>
given by the universal property of the coproduct.
</Description>
</ManSection>
<ManSection>
<Oper Arg="D, T, tau, I" Name="UniversalMorphismFromCoproductWithGivenCoproduct" Label="for IsList, IsCapCategoryObject, IsList, IsCapCategoryObject"/>
<Returns>a morphism in <Math>\mathrm{Hom}(I, T)</Math>
</Returns>
<Description>
The arguments are a list of objects <Math>D = ( I_1, \dots, I_n )</Math>, a test object <Math>T</Math>,
a list of morphisms <Math>\tau = ( \tau_i: I_i \rightarrow T )</Math>,
and an object <Math>I = \bigsqcup_{i=1}^n I_i</Math>.
For convenience, the test object <A>T</A> can be omitted and is automatically derived from <A>tau</A> in that case.
The output is the morphism
<Math>u( \tau ): I \rightarrow T</Math>
given by the universal property of the coproduct.
</Description>
</ManSection>
<ManSection>
<Oper Arg="source_diagram, L, range_diagram" Name="CoproductFunctorial" Label="for IsList, IsList, IsList"/>
<Returns>a morphism in <Math>\mathrm{Hom}(\bigsqcup_{i=1}^n I_i, \bigsqcup_{i=1}^n I_i')
</Returns>
<Description>
The arguments are
a list of objects <Math>(I_i)_{i = 1 \dots n}</Math>,
a list <Math>L = ( \mu_1: I_1 \rightarrow I_1', \dots, \mu_n: I_n \rightarrow I_n' )</Math>,
and a list of objects <Math>(I_i')_{i = 1 \dots n}.
For convenience, <A>source_diagram</A> and <A>range_diagram</A> can be omitted
and are automatically derived from <A>L</A> in that case.
The output is a morphism
<Math>\bigsqcup_{i=1}^n I_i \rightarrow \bigsqcup_{i=1}^n I_i'
given by the functoriality of the coproduct.
</Description>
</ManSection>
<ManSection>
<Oper Arg="s, source_diagram, L, range_diagram, r" Name="CoproductFunctorialWithGivenCoproducts" Label="for IsCapCategoryObject, IsList, IsList, IsList, IsCapCategoryObject"/>
<Returns>a morphism in <Math>\mathrm{Hom}(s, r)</Math>
</Returns>
<Description>
The arguments are an object <Math>s = \bigsqcup_{i=1}^n I_i</Math>,
a list of objects <Math>(I_i)_{i = 1 \dots n}</Math>,
a list <Math>L = ( \mu_1: I_1 \rightarrow I_1', \dots, \mu_n: I_n \rightarrow I_n' )</Math>,
a list of objects <Math>(I_i')_{i = 1 \dots n},
and an object <Math>r = \bigsqcup_{i=1}^n I_i'.
For convenience, <A>source_diagram</A> and <A>range_diagram</A> can be omitted
and are automatically derived from <A>L</A> in that case.
The output is a morphism
<Math>\bigsqcup_{i=1}^n I_i \rightarrow \bigsqcup_{i=1}^n I_i'
given by the functoriality of the coproduct.
</Description>
</ManSection>
<ManSection>
<Oper Arg="alpha, D, k" Name="ComponentOfMorphismFromCoproduct" Label="for IsCapCategoryMorphism, IsList, IsInt"/>
<Returns>a morphism in <Math>\mathrm{Hom}(I_k, A)</Math>
</Returns>
<Description>
The arguments are a morphism <Math>\alpha: I \rightarrow A</Math>,
a list <Math>D = (I_1, \dots, I_n)</Math> of objects with <Math>I = \bigsqcup_{j=1}^n I_j</Math>,
and an integer <Math>k</Math>.
The output is the component morphism
<Math>I_k \rightarrow A</Math>.
</Description>
</ManSection>
For an integer <Math>n \geq 1</Math> and a given list of objects <Math>D = ( P_1, \dots, P_n )</Math>, a direct product of <Math>D</Math> consists of three parts:
<List>
<Item>
an object <Math>P</Math>,
</Item>
<Item>
a list of morphisms <Math>\pi = ( \pi_i: P \rightarrow P_i )_{i = 1 \dots n}</Math>
</Item>
<Item>
a dependent function <Math>u</Math> mapping each list of morphisms <Math>\tau = ( \tau_i: T \rightarrow P_i )_{i = 1, \dots, n}</Math>
to a morphism <Math>u(\tau): T \rightarrow P</Math> such that <Math>\pi_i \circ u( \tau ) \sim_{T,P_i} \tau_i</Math> for all <Math>i = 1, \dots, n</Math>.
</Item>
</List>
The triple <Math>( P, \pi, u )</Math> is called a <Emph>direct product</Emph> of <Math>D</Math> if the morphisms <Math>u( \tau )</Math> are uniquely determined up to
congruence of morphisms.
We denote the object <Math>P</Math> of such a triple by <Math>\prod_{i=1}^n P_i</Math>.
We say that the morphism <Math>u( \tau )</Math> is induced by the
<Emph>universal property of the direct product</Emph>.
<Math>\\ </Math>
<Math>\mathrm{DirectProduct}</Math> is a functorial operation. This means:
For <Math>(\mu_i: P_i \rightarrow P'_i)_{i=1\dots n},
we obtain a morphism <Math>\prod_{i=1}^n P_i \rightarrow \prod_{i=1}^n P_i'.
<Alt Only="LaTeX"><![CDATA[
\begin{center}
\begin{tikzpicture}
\def\w{2}
\node (P) at (0,0) {$P$};
\node (P1) at (-\w,0) {$P_1$};
\node (P2) at (\w,0) {$P_2$};
\node (T) at (0,\w) {$T$};
\draw[-latex] (P) to node[pos=0.45, above] {$\pi_1$} (P1);
\draw[-latex] (P) to node[pos=0.45, above] {$\pi_2$} (P2);
\draw[-latex] (T) to [out = -180, in = 90] node[pos=0.45, above left] {$\tau_1$} (P1);
\draw[-latex] (T) to [out = 0, in = 90] node[pos=0.45, above right] {$\tau_2$} (P2);
\draw[dashed, -latex] (T) to node[pos=0.45, left] {$\exists ! u ( \tau )$} (P);
\end{tikzpicture}
\end{center}
]]></Alt>
<ManSection>
<Func Arg="arg" Name="DirectProduct" />
<Returns>an object
</Returns>
<Description>
This is a convenience method.
There are two different ways to use this method:
<List>
<Item>
The argument is a list of objects <Math>D = ( P_1, \dots, P_n )</Math>.
</Item>
<Item>
The arguments are objects <Math>P_1, \dots, P_n</Math>.
</Item>
</List>
The output is the direct product <Math>\prod_{i=1}^n P_i</Math>.
</Description>
</ManSection>
<ManSection>
<Oper Arg="D" Name="DirectProductOp" Label="for IsList"/>
<Returns>an object
</Returns>
<Description>
The argument is a list of objects <Math>D = ( P_1, \dots, P_n )</Math>.
The output is the direct product <Math>\prod_{i=1}^n P_i</Math>.
</Description>
</ManSection>
<ManSection>
<Oper Arg="D,k" Name="ProjectionInFactorOfDirectProduct" Label="for IsList, IsInt"/>
<Returns>a morphism in <Math>\mathrm{Hom}(\prod_{i=1}^n P_i, P_k)</Math>
</Returns>
<Description>
The arguments are a list of objects <Math>D = ( P_1, \dots, P_n )</Math>
and an integer <Math>k</Math>.
The output is the <Math>k</Math>-th projection
<Math>\pi_k: \prod_{i=1}^n P_i \rightarrow P_k</Math>.
</Description>
</ManSection>
<ManSection>
<Oper Arg="D,k,P" Name="ProjectionInFactorOfDirectProductWithGivenDirectProduct" Label="for IsList, IsInt, IsCapCategoryObject"/>
<Returns>a morphism in <Math>\mathrm{Hom}(P, P_k)</Math>
</Returns>
<Description>
The arguments are a list of objects <Math>D = ( P_1, \dots, P_n )</Math>,
an integer <Math>k</Math>,
and an object <Math>P = \prod_{i=1}^n P_i</Math>.
The output is the <Math>k</Math>-th projection
<Math>\pi_k: P \rightarrow P_k</Math>.
</Description>
</ManSection>
<ManSection>
<Oper Arg="D, T, tau" Name="UniversalMorphismIntoDirectProduct" Label="for IsList, IsCapCategoryObject, IsList"/>
<Returns>a morphism in <Math>\mathrm{Hom}(T, \prod_{i=1}^n P_i)</Math>
</Returns>
<Description>
The arguments are a list of objects <Math>D = ( P_1, \dots, P_n )</Math>, a test object <Math>T</Math>,
and a list of morphisms <Math>\tau = ( \tau_i: T \rightarrow P_i )_{i = 1, \dots, n}</Math>.
For convenience, the diagram <A>D</A> and/or the test object <A>T</A> can be omitted
and are automatically derived from <A>tau</A> in that case.
The output is the morphism
<Math>u(\tau): T \rightarrow \prod_{i=1}^n P_i</Math>
given by the universal property of the direct product.
</Description>
</ManSection>
<ManSection>
<Oper Arg="D, T, tau, P" Name="UniversalMorphismIntoDirectProductWithGivenDirectProduct" Label="for IsList, IsCapCategoryObject, IsList, IsCapCategoryObject"/>
<Returns>a morphism in <Math>\mathrm{Hom}(T, \prod_{i=1}^n P_i)</Math>
</Returns>
<Description>
The arguments are a list of objects <Math>D = ( P_1, \dots, P_n )</Math>, a test object <Math>T</Math>,
a list of morphisms <Math>\tau = ( \tau_i: T \rightarrow P_i )_{i = 1, \dots, n}</Math>,
and an object <Math>P = \prod_{i=1}^n P_i</Math>.
For convenience, the test object <A>T</A> can be omitted and is automatically derived from <A>tau</A> in that case.
The output is the morphism
<Math>u(\tau): T \rightarrow \prod_{i=1}^n P_i</Math>
given by the universal property of the direct product.
</Description>
</ManSection>
<ManSection>
<Oper Arg="source_diagram, L, range_diagram" Name="DirectProductFunctorial" Label="for IsList, IsList, IsList"/>
<Returns>a morphism in <Math>\mathrm{Hom}( \prod_{i=1}^n P_i, \prod_{i=1}^n P_i' )
</Returns>
<Description>
The arguments are
a list of objects <Math>(P_i)_{i = 1 \dots n}</Math>,
a list of morphisms <Math>L = (\mu_i: P_i \rightarrow P'_i)_{i=1\dots n},
and a list of objects <Math>(P_i')_{i = 1 \dots n}.
For convenience, <A>source_diagram</A> and <A>range_diagram</A> can be omitted
and are automatically derived from <A>L</A> in that case.
The output is a morphism
<Math>\prod_{i=1}^n P_i \rightarrow \prod_{i=1}^n P_i'
given by the functoriality of the direct product.
</Description>
</ManSection>
<ManSection>
<Oper Arg="s, source_diagram, L, range_diagram r" Name="DirectProductFunctorialWithGivenDirectProducts" Label="for IsCapCategoryObject, IsList, IsList, IsList, IsCapCategoryObject"/>
<Returns>a morphism in <Math>\mathrm{Hom}( s, r )</Math>
</Returns>
<Description>
The arguments are an object <Math>s = \prod_{i=1}^n P_i</Math>,
a list of objects <Math>(P_i)_{i = 1 \dots n}</Math>,
a list of morphisms <Math>L = (\mu_i: P_i \rightarrow P'_i)_{i=1\dots n},
a list of objects <Math>(P_i')_{i = 1 \dots n},
and an object <Math>r = \prod_{i=1}^n P_i'.
For convenience, <A>source_diagram</A> and <A>range_diagram</A> can be omitted
and are automatically derived from <A>L</A> in that case.
The output is a morphism
<Math>\prod_{i=1}^n P_i \rightarrow \prod_{i=1}^n P_i'
given by the functoriality of the direct product.
</Description>
</ManSection>
<ManSection>
<Oper Arg="alpha, D, k" Name="ComponentOfMorphismIntoDirectProduct" Label="for IsCapCategoryMorphism, IsList, IsInt"/>
<Returns>a morphism in <Math>\mathrm{Hom}(A, P_k)</Math>
</Returns>
<Description>
The arguments are a morphism <Math>\alpha: A \rightarrow P</Math>,
a list <Math>D = (P_1, \dots, P_n)</Math> of objects with <Math>P = \prod_{j=1}^n P_j</Math>,
and an integer <Math>k</Math>.
The output is the component morphism
<Math>A \rightarrow P_k</Math>.
</Description>
</ManSection>
For an integer <Math>n \geq 1</Math> and a given list of morphisms <Math>D = ( \beta_i: A \rightarrow B )_{i = 1 \dots n}</Math>,
an equalizer of <Math>D</Math> consists of three parts:
<List>
<Item>
an object <Math>E</Math>,
</Item>
<Item>
a morphism <Math>\iota: E \rightarrow A </Math> such that
<Math>\beta_i \circ \iota \sim_{E, B} \beta_j \circ \iota</Math> for all pairs <Math>i,j</Math>.
</Item>
<Item>
a dependent function <Math>u</Math> mapping each morphism
<Math>\tau = ( \tau: T \rightarrow A )</Math> such that
<Math>\beta_i \circ \tau \sim_{T, B} \beta_j \circ \tau</Math> for all pairs <Math>i,j</Math>
to a morphism <Math>u( \tau ): T \rightarrow E</Math> such that
<Math>\iota \circ u( \tau ) \sim_{T, A} \tau</Math>.
</Item>
</List>
The triple <Math>( E, \iota, u )</Math> is called an <Emph>equalizer</Emph> of <Math>D</Math> if the morphisms <Math>u( \tau )</Math> are uniquely determined up to
congruence of morphisms.
We denote the object <Math>E</Math> of such a triple by <Math>\mathrm{Equalizer}(D)</Math>.
We say that the morphism <Math>u( \tau )</Math> is induced by the
<Emph>universal property of the equalizer</Emph>.
<Math>\\ </Math>
<Math>\mathrm{Equalizer}</Math> is a functorial operation. This means:
For a second diagram <Math>D' = (\beta_i': A' \rightarrow B')_{i = 1 \dots n}</Math> and a natural morphism
between equalizer diagrams (i.e., a collection of morphisms
<Math>\mu: A \rightarrow A' and </Math>
such that <Math>\beta_i' \circ \mu \sim_{A,B'} \beta \circ \beta_i</Math> for <Math>i = 1, \dots, n</Math>)
we obtain a morphism <Math>\mathrm{Equalizer}( D ) \rightarrow \mathrm{Equalizer}( D' ).
<Alt Only="LaTeX"><![CDATA[
\begin{center}
\begin{tikzpicture}
\def\w{2}
\node (E) at (-\w,0) {$E$};
\node (T) at (-\w,\w) {$T$};
\node (A) at (0,0) {$A$};
\node (B) at (\w,0) {$B$};
\draw[-latex] (A) to [out = 20, in = 180-20] node[pos=0.45, above] {$\beta_1$} (B);
\draw[-latex] (A) to [out = -20, in = -180+20] node[pos=0.45, below] {$\beta_2$} (B);
\draw[-latex] (E) to node[pos=0.45, above] {$\iota$} (A);
\draw[-latex] (T) to node[pos=0.45, above right] {$\tau$} (A);
\draw[dashed, -latex] (T) to node[pos=0.45, left] {$\exists ! u( \tau )$} (E);
\draw[-latex, dotted] (T) to [out = 0, in = 90] node[pos=0.45, above right] {$\beta_2 \circ \tau \sim_{T,B} \beta_1 \circ \tau$} (B);
\draw[-latex, dotted] (E) to [out = -45, in = -135] node[pos=0.45, below] {$\beta_2 \circ \iota \sim_{E,B} \beta_1 \circ \iota$} (B);
\end{tikzpicture}
\end{center}
]]></Alt>
<ManSection>
<Func Arg="arg" Name="Equalizer" />
<Returns>an object
</Returns>
<Description>
This is a convenience method.
There are three different ways to use this method:
<List>
<Item>
The arguments are an object <Math>A</Math> and a list of morphisms <Math>D = ( \beta_i: A \rightarrow B )_{i = 1 \dots n}</Math>.
</Item>
<Item>
The argument is a list of morphisms <Math>D = ( \beta_i: A \rightarrow B )_{i = 1 \dots n}</Math>.
</Item>
<Item>
The arguments are morphisms <Math>\beta_1: A \rightarrow B, \dots, \beta_n: A \rightarrow B</Math>.
</Item>
</List>
The output is the equalizer <Math>\mathrm{Equalizer}(D)</Math>.
</Description>
</ManSection>
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung ist noch experimentell.