#include <sources/headers/Cob.h>
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 zerocobordism (needed by the Eigen Template Library)
 CobMor(int i)
 constructor for the zerocobordism (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 (neckcutting).
 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 cappedoff 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 cappedoff 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: (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 BarNatan algebra (for fourended tangles) or in the free polynomial ring in the variable (for twoended tangles); see BNAlgebra.h.

template<typename New_Coeff>auto to_coeffs() const > CobMor<New_Coeff>
 converts a morphism over the integers 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>:: 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 (neckcutting).
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 cappedoff 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 cappedoff 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.
#include <sources/modules/algHF.cpp>
template<typename Coeff>
CobMor<New_Coeff> CobMor<Coeff>:: to_coeffs() const
implementation of to_
#include <sources/modules/Cob.cpp>
template<typename Coeff>
CobMor<New_Coeff> CobMor<Coeff>:: to_coeffs() const
implementation of to_