template<typename Coeff>
CobMor class

morphism in the cobordism category

A cobordism consists of two objects, namely front (CobObj) and back (CobObj), and a list of decorations (Deco) together with a list of components.

A component is a list of tangle ends (TE), starting with the lowest, so that components can be compared by their first entry. The components are ordered by their first element, which we will sometimes refer to as their 'name'; this allows us to add them together efficiently, without reordering dots. A component always has an even number of tangle ends. Adjacent entries are connected via arcs in the two tangles (alternatingly front and back); the second entry is the tangle end that is connected to the first via the front tangle.

Constructors, destructors, conversion operators

CobMor()
constructor for the zero-cobordism (needed by the Eigen Template Library)
CobMor(int i)
constructor for the zero-cobordism (needed by the Eigen Template Library)
CobMor(TE strands, TE top, size_t front, size_t back, std::list<Deco<Coeff>> decos)
constructor, which generates the list of components automatically; this is slower than the standard constructor

Public functions

auto AddCap(const size_t& start, const size_t& end, const TE& i) const -> CobMor<Coeff>
add a component [i,i+1] without any dot.
auto AddCup11(const size_t& start, const size_t& end, const TE& i) const -> CobMor<Coeff>
Fourth case of AddCup, in which either two components are joined (and the dots just get added) or a component gets split into two (neck-cutting).
auto AddCup22(const size_t& start, const size_t& end, const TE& i, const bool& from, const bool& to) const -> CobMor<Coeff>
Pre- and postcompose the capped-off morphism with the first delooping isomorphisms from Observation 4.18 in [4], where the top generator in the middle corresponds to the first generator of the pair.
auto AddCupMixed(const size_t& start, const size_t& end, const TE& i, const bool& from, const bool& to) const -> CobMor<Coeff>
Precompose/Postcompose the capped-off morphism with the first delooping isomorphism from Observation 4.18 in [4], where the top generator in the middle corresponds to the first generator of the pair.
auto check() const -> bool
true if the cobordism passes some sanity checks
auto check(const CobObj& obj_from, const CobObj& obj_to) const -> bool
true if the cobordism is zero or goes between the two specified objects
auto get_first_coeff() const -> Coeff
coefficient of the first decoration of the morphism; this is used for extracting the coefficient of cancelled arrows
auto is_0() const -> bool
true iff morphism is zero. We assume that the cobordism is simplified.
auto is_inv() const -> bool
true if the cobordism is invertible, ie an invertible multiple of the identity. We assume that the cobordism is simplified.
auto operator*(const CobMor<Coeff>& cob1) const -> CobMor<Coeff>
compose two morphisms as functions: $\mathrm{Mor}(b,c)\otimes\mathrm{Mor}(a,b)\rightarrow\mathrm{Mor}(a,c)$ (note the order!). The function raises an exception if the morphisms are incomposable.
auto operator*(const Coeff& scalar) const -> CobMor<Coeff>
multiply a morphism by a scalar
void operator*=(const Coeff& coeff)
multiplication assignment: with a scalar
auto operator+(const CobMor<Coeff>& cob2) const -> CobMor<Coeff>
add two morphisms together; no sanity checks are performed.
void operator+=(const CobMor<Coeff>& cob2)
addition assignment with another morphism
auto operator-() const -> CobMor<Coeff>
negative of a morphism
auto operator==(const CobMor<Coeff>& cob2) const -> bool
true if the two morphisms are equal. We assume here that both are simplified (see simplify()).
void print() const
prints string representation of a cobordism in terminal;
auto simplify() -> CobMor<Coeff>
add up all coefficients with same decoration and eliminate decorations with coefficient equal to 0; note that the list of labels might be empty after this operation.
auto to_BNMor(TE special_end = 0) const -> BNMor<Coeff>
corresponding morphism in the Bar-Natan algebra $\mathcal{B}$ (for four-ended tangles) or in the free polynomial ring in the variable $H$ (for two-ended tangles); see BNAlgebra.h.
template<typename New_Coeff>
auto to_coeffs() const -> CobMor<New_Coeff>
converts a morphism over the integers $\mathbb{Z}$ to a morphism over the new ring of coefficients specified by 'New_Coeff'
auto to_coeffs() const -> CobMor<New_Coeff>
implementation of to_coeffs()
auto to_coeffs() const -> CobMor<New_Coeff>
implementation of to_coeffs()
auto to_string() const -> std::string
string representation of a cobordism;

Function documentation

template<typename Coeff>
CobMor<Coeff> CobMor<Coeff>::AddCap(const size_t& start, const size_t& end, const TE& i) const

add a component [i,i+1] without any dot.

When applying this to entries in a complex (Complex.h), 'from' and 'to' should come from the already updated list of objects.

template<typename Coeff>
CobMor<Coeff> CobMor<Coeff>::AddCup11(const size_t& start, const size_t& end, const TE& i) const

Fourth case of AddCup, in which either two components are joined (and the dots just get added) or a component gets split into two (neck-cutting).

The output is not necessarily simplified.

template<typename Coeff>
CobMor<Coeff> CobMor<Coeff>::AddCup22(const size_t& start, const size_t& end, const TE& i, const bool& from, const bool& to) const

Pre- and postcompose the capped-off morphism with the first delooping isomorphisms from Observation 4.18 in [4], where the top generator in the middle corresponds to the first generator of the pair.

The output is not necessarily simplified.

template<typename Coeff>
CobMor<Coeff> CobMor<Coeff>::AddCupMixed(const size_t& start, const size_t& end, const TE& i, const bool& from, const bool& to) const

Precompose/Postcompose the capped-off morphism with the first delooping isomorphism from Observation 4.18 in [4], where the top generator in the middle corresponds to the first generator of the pair.

For CASE 2->1, treat the RHS as 0;

For CASE 1->2, treat the LHS as 1.

Note that 1—>0 is ambiguous, but it is treated identically in the two cases.) The output is not necessarily simplified.

template<typename Coeff>
CobMor<New_Coeff> CobMor<Coeff>::to_coeffs() const

implementation of to_coeffs()

template<typename Coeff>
CobMor<New_Coeff> CobMor<Coeff>::to_coeffs() const

implementation of to_coeffs()