<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="/default.xsl"?>
<fr:tree xmlns:fr="http://www.forester-notes.org" xmlns:html="http://www.w3.org/1999/xhtml" xmlns:xml="http://www.w3.org/XML/1998/namespace" root="true" base-url="/">
  <fr:frontmatter>
    <fr:authors>
      <fr:author>
        <fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link>
      </fr:author>
    </fr:authors>
    <fr:uri>https://forest.nickx.hu/index/</fr:uri>
    <fr:display-uri>index</fr:display-uri>
    <fr:route>/index/</fr:route>
    <fr:title text="The root of my forest">The root of my forest</fr:title>
  </fr:frontmatter>
  <fr:mainmatter>
    <html:p>Welcome to my forest! Here are my work-in-progress public notes.</html:p>
    <html:p><fr:link href="/coherent-inverses/" title="Coherent inverses in higher-categorical string diagrams" uri="https://forest.nickx.hu/coherent-inverses/" display-uri="coherent-inverses" type="local">My thesis</fr:link> is also written in Forester.
</html:p>
    <html:p>
  I am currently running a <fr:link href="/double-categories-reading-group/" title="Double Categories Reading Group" uri="https://forest.nickx.hu/double-categories-reading-group/" display-uri="double-categories-reading-group" type="local">reading group on double categories</fr:link>.
</html:p>
    <fr:link href="https://forest.nickx.hu/journal/" type="external">journal</fr:link>
  </fr:mainmatter>
  <fr:backmatter>
    <fr:tree show-metadata="false" hidden-when-empty="true">
      <fr:frontmatter>
        <fr:authors />
        <fr:title text="References">References</fr:title>
      </fr:frontmatter>
      <fr:mainmatter />
    </fr:tree>
    <fr:tree show-metadata="false" hidden-when-empty="true">
      <fr:frontmatter>
        <fr:authors />
        <fr:title text="Context">Context</fr:title>
      </fr:frontmatter>
      <fr:mainmatter />
    </fr:tree>
    <fr:tree show-metadata="false" hidden-when-empty="true">
      <fr:frontmatter>
        <fr:authors />
        <fr:title text="Backlinks">Backlinks</fr:title>
      </fr:frontmatter>
      <fr:mainmatter />
    </fr:tree>
    <fr:tree show-metadata="false" hidden-when-empty="true">
      <fr:frontmatter>
        <fr:authors />
        <fr:title text="Related">Related</fr:title>
      </fr:frontmatter>
      <fr:mainmatter>
        <fr:tree show-metadata="true" expanded="false" toc="false" numbered="false">
          <fr:frontmatter>
            <fr:authors>
              <fr:author>
                <fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link>
              </fr:author>
            </fr:authors>
            <fr:date>
              <fr:year>2023</fr:year>
              <fr:month>12</fr:month>
              <fr:day>3</fr:day>
            </fr:date>
            <fr:uri>https://forest.nickx.hu/coherent-inverses/</fr:uri>
            <fr:display-uri>coherent-inverses</fr:display-uri>
            <fr:route>/coherent-inverses/</fr:route>
            <fr:title text="Coherent inverses in higher-categorical string diagrams">Coherent inverses in higher-categorical string diagrams</fr:title>
            <fr:taxon>project</fr:taxon>
          </fr:frontmatter>
          <fr:mainmatter>
  
  
  <fr:tree show-metadata="false" toc="false" numbered="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2023</fr:year><fr:month>12</fr:month><fr:day>3</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-abstract/</fr:uri><fr:display-uri>coherent-inverses-abstract</fr:display-uri><fr:route>/coherent-inverses-abstract/</fr:route><fr:taxon>abstract</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
      The proof assistant <html:span tex="\homotopyio{}"><fr:link href="/homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories/" title="homotopy.io: a proof assistant for finitely-presented globular $n$-categories" uri="https://forest.nickx.hu/homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories/" display-uri="homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories" type="local"><html:code>homotopy.io</html:code></fr:link></html:span> serves as a combinatorial model for finitely presented globular higher categories in the form of a computer implementation, based on the theory of <fr:link href="/coherent-inverses-UGIR/" title="zigzag category" uri="https://forest.nickx.hu/coherent-inverses-UGIR/" display-uri="coherent-inverses-UGIR" type="local">zigzag categories</fr:link>, presented as a calculus of <fr:tex display="inline"><![CDATA[n]]></fr:tex>-dimensional string diagrams.
      However, the theory lacks a notion of inverse, which would require the existence of cancellation moves along with an infinite collection of higher-dimensional coherence data.
    </html:p><html:p>
      We generalise the theory to support invertibility by equipping algebraic <fr:link href="/coherent-inverses-US67/" title="signature and framing" uri="https://forest.nickx.hu/coherent-inverses-US67/" display-uri="coherent-inverses-US67" type="local">generators</fr:link> with ‘<fr:link href="/coherent-inverses-US67/" title="signature and framing" uri="https://forest.nickx.hu/coherent-inverses-US67/" display-uri="coherent-inverses-US67" type="local">framing</fr:link>’ data, allowing for a natural representation of the inverse.
      Using this ‘<fr:link href="/coherent-inverses-XQVM/" title="framed zigzag enriched category" uri="https://forest.nickx.hu/coherent-inverses-XQVM/" display-uri="coherent-inverses-XQVM" type="local">framed zigzags</fr:link>’ approach, we show that the required cancellation moves and coherence data arise uniformly via a colimit mechanism.
      We use tools from enriched category theory to justify correctness of our constructions, and exhibit an enhanced version of our proof assistant that implements our generalised theory.
    </html:p><html:p>
      We give an account of the design and implementation of <html:span tex="\homotopyio{}"><fr:link href="/homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories/" title="homotopy.io: a proof assistant for finitely-presented globular $n$-categories" uri="https://forest.nickx.hu/homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories/" display-uri="homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories" type="local"><html:code>homotopy.io</html:code></fr:link></html:span> from a programming perspective, and demonstrate how it can be used to formalise higher-categorical arguments using this new notion of coherent inverse, presented as <fr:tex display="inline"><![CDATA[n]]></fr:tex>-dimensional string diagrams, for the first time.
    </html:p></fr:mainmatter></fr:tree>
  <fr:tree show-metadata="false" toc="false" numbered="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2023</fr:year><fr:month>12</fr:month><fr:day>3</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-acknowledgements/</fr:uri><fr:display-uri>coherent-inverses-acknowledgements</fr:display-uri><fr:route>/coherent-inverses-acknowledgements/</fr:route><fr:taxon>acknowledgements</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
      Firstly, I would like to thank my supervisors Sam Staton and Jamie Vicary for years of generous support and guidance.
      Jamie has been a constant source of both professional and personal advice, and I am especially grateful for his patience and encouragement to pursue my own ideas independently.
    </html:p><html:p>
      I am grateful to Aleks Kissinger, Dan Marsden, and Amar Hadzihasanovic for volunteering their time in various examinations of this thesis.
    </html:p><html:p>
      Over the years, I am privileged to have had the opportunity to meet and befriend many talented people across the world.
      I am lucky to have been active in two vibrant research groups: the Quantum Group at the University of Oxford, and the Theory Group at the University of Cambridge.
      In no particular order, I would like to thank my friends with whom I shared fond memories, which will surely come to define the experience of my PhD, in Oxford, Cambridge, and various conferences: Vincent Wang, Lukas Heidemann, Cole Comfort, Nihil Shah, Amin Karamlou, Alex Rice, Calin Tataru, Ioannis Markakis, Chiara Sarti, Manuel Araújo, Meven Lennon-Bertrand, Thibaut Benjamin, Wilf Offord, and Jesse Sigal.
    </html:p><html:p>
      I wrote half of this thesis far away from home, on a series of academic visits in Australia and Japan in the summer of 2024, partly thanks to the support of JS Lemay, Masahito Hasegawa, and Ichiro Hasuo.
      During my travels, I learned a lot as a category theorist, and I would like to thank the following additional people for their hospitality in spending time with me, whether that was in teaching me category theory, showing me around, or procrastinating from thesis writing together: Richard Garner, Eli Hazel, Nicola Di Vittorio, Vincent Moreau, Jean Zablocki, Hayato Nasu, and Keisuke Hoshino.
    </html:p><html:p>
      Lastly, and most importantly, I would like to thank my partner Amy Chang for her unwavering love and selflessness — without her, I would not have had any chance of making it this far — and Sesame the Cat for being a constant distraction in the best of ways.
    </html:p></fr:mainmatter></fr:tree>
<fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2023</fr:year><fr:month>12</fr:month><fr:day>3</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-introduction/</fr:uri><fr:display-uri>coherent-inverses-introduction</fr:display-uri><fr:route>/coherent-inverses-introduction/</fr:route><fr:title text="Introduction">Introduction</fr:title><fr:taxon>chapter</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
    This thesis studies the theory and implementation of the proof assistant <html:span tex="\homotopyio{}"><fr:link href="/homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories/" title="homotopy.io: a proof assistant for finitely-presented globular $n$-categories" uri="https://forest.nickx.hu/homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories/" display-uri="homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories" type="local"><html:code>homotopy.io</html:code></fr:link></html:span> for finitely presented globular <fr:tex display="inline"><![CDATA[n]]></fr:tex>-categories, viewed through the lens of <fr:tex display="inline"><![CDATA[n]]></fr:tex>-dimensional string diagrams (also known as <fr:link href="/manifold-diagrams-and-tame-tangles/" title="Manifold diagrams and tame tangles" uri="https://forest.nickx.hu/manifold-diagrams-and-tame-tangles/" display-uri="manifold-diagrams-and-tame-tangles" type="local"><html:em>manifold</html:em> diagrams</fr:link>, generalising <fr:link href="/low-dimensional-topology-and-higher-order-categories/" title="Low-dimensional topology and higher-order categories" uri="https://forest.nickx.hu/low-dimensional-topology-and-higher-order-categories/" display-uri="low-dimensional-topology-and-higher-order-categories" type="local">surface diagrams</fr:link> where <fr:tex display="inline"><![CDATA[n = 3]]></fr:tex> and string diagrams where <fr:tex display="inline"><![CDATA[n = 2]]></fr:tex>).
    <html:span tex="\homotopyio{}"><fr:link href="/homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories/" title="homotopy.io: a proof assistant for finitely-presented globular $n$-categories" uri="https://forest.nickx.hu/homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories/" display-uri="homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories" type="local"><html:code>homotopy.io</html:code></fr:link></html:span> is based on the semistrict model of higher categories called <fr:link href="/associative-n-categories/" title="Associative n-categories" uri="https://forest.nickx.hu/associative-n-categories/" display-uri="associative-n-categories" type="local"><html:em>associative <fr:tex display="inline"><![CDATA[n]]></fr:tex>-categories</html:em> (ANCs)</fr:link>, which is conjecturally equivalent to weak models of higher categories.
  </html:p><html:p>
    We focus on <html:em>coherent inverses</html:em> within <html:span tex="\homotopyio{}"><fr:link href="/homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories/" title="homotopy.io: a proof assistant for finitely-presented globular $n$-categories" uri="https://forest.nickx.hu/homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories/" display-uri="homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories" type="local"><html:code>homotopy.io</html:code></fr:link></html:span>, a new feature that enables more expressivity, allowing one to study not just <fr:tex display="inline"><![CDATA[n]]></fr:tex>-categories, but also <fr:tex display="inline"><![CDATA[n]]></fr:tex>-<html:em>groupoids</html:em>, and necessitating new theory development.
  </html:p><html:p>
    Additionally, we give an account of the implementation of <html:span tex="\homotopyio{}"><fr:link href="/homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories/" title="homotopy.io: a proof assistant for finitely-presented globular $n$-categories" uri="https://forest.nickx.hu/homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories/" display-uri="homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories" type="local"><html:code>homotopy.io</html:code></fr:link></html:span>, and explore its applications in deriving new, previously inaccessible, proofs of higher-dimensional phenomena arising from coherent inverses in higher categories.
  </html:p><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2023</fr:year><fr:month>12</fr:month><fr:day>3</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-higher-categories/</fr:uri><fr:display-uri>coherent-inverses-higher-categories</fr:display-uri><fr:route>/coherent-inverses-higher-categories/</fr:route><fr:title text="What is a ‘higher category’?">What is a ‘higher category’?</fr:title><fr:taxon>section</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
      Unfortunately, even the term ‘higher category’ as it appears in the literature is ambiguous, in more than one way.
      A precise lexicon for one axis of this ambiguity is the notion of <fr:tex display="inline"><![CDATA[(n, r)]]></fr:tex>-category, where <fr:tex display="inline"><![CDATA[0 < r \leq  n \in  \mathbb {N}]]></fr:tex>; this refers to a mathematical structure (like a category) in which there are <fr:tex display="inline"><![CDATA[n]]></fr:tex> dimensions of composition, but every <fr:tex display="inline"><![CDATA[k]]></fr:tex>-morphism, for <fr:tex display="inline"><![CDATA[r < k \leq  n]]></fr:tex>, is invertible.
      Often, the term ‘<fr:tex display="inline"><![CDATA[\infty ]]></fr:tex>-category’ is taken to mean a notion of higher category that has infinitely many dimensions of composition, but for which each <fr:tex display="inline"><![CDATA[k]]></fr:tex>-morphism for <fr:tex display="inline"><![CDATA[k \geq  2]]></fr:tex> is invertible.
      Such structures are more precisely called <fr:tex display="inline"><![CDATA[(\infty , 1)]]></fr:tex>-categories, and are designed to model a more homotopy-invariant version of mathematics, with <fr:tex display="inline"><![CDATA[(\infty , 1)]]></fr:tex>-groupoids providing a foundation for studying ‘spaces up to homotopy’ via the <fr:link href="/pursuing-stacks/" title="Pursuing Stacks" uri="https://forest.nickx.hu/pursuing-stacks/" display-uri="pursuing-stacks" type="local">homotopy hypothesis</fr:link>.
      Another frequently used term is ‘<fr:tex display="inline"><![CDATA[\omega ]]></fr:tex>-category’, which can be taken to be a shorthand for <fr:tex display="inline"><![CDATA[(\infty , \infty )]]></fr:tex>-category; this is closer to what we mean by ‘higher category’ in this thesis, and by ‘<fr:tex display="inline"><![CDATA[n]]></fr:tex>-category’ we mean <fr:tex display="inline"><![CDATA[(n, n)]]></fr:tex>-category in this sense.
    </html:p><html:p>
      The second axis of ambiguity is that of <html:em>strictness</html:em>.
      The basic idea of ‘strict vs weak’ is whether equations regarding composition must hold up to equality, or if instead it is permissible for them to hold up to some good notion of ‘equivalence’.
      A relatively simple example of this is strict vs weak 2-categories (which are commonly referred to as simply ‘2-categories’ and <fr:link href="/introduction-to-bicategories/" title="Introduction to bicategories" uri="https://forest.nickx.hu/introduction-to-bicategories/" display-uri="introduction-to-bicategories" type="local">‘bicategories’</fr:link> respectively).
      In a bicategory, composition and unit laws are allowed to hold up to invertible 2-morphism, as opposed to <html:em>strict</html:em> 2-categories where such laws hold <html:em>on the nose</html:em> up to equality.
      In dimensions <fr:tex display="inline"><![CDATA[n > 2]]></fr:tex>, it is known that weak notions of <fr:tex display="inline"><![CDATA[n]]></fr:tex>-category are properly more expressive than strict notions of <fr:tex display="inline"><![CDATA[n]]></fr:tex>-category, meaning that they model more mathematical structures.
      For instance, for some suitable notion of equivalence, not every tricategory (a <html:em>weak</html:em> 3-category) is equivalent to some strict 3-category (however, the converse is trivially true).
      While models for weak notions of 3-category have been described as <fr:link href="/coherence-for-tricategories/" title="Coherence for tricategories" uri="https://forest.nickx.hu/coherence-for-tricategories/" display-uri="coherence-for-tricategories" type="local">Gray categories</fr:link>, there is no generally accepted model of weak <fr:tex display="inline"><![CDATA[n]]></fr:tex>-category for arbitrary <fr:tex display="inline"><![CDATA[n \in  \mathbb {N}]]></fr:tex>; however, it is widely accepted that, just as a category is a mathematical structure that has fundamental support for a single ‘composition’ operation, a weak <fr:tex display="inline"><![CDATA[n]]></fr:tex>-category should be a mathematical structure that has <fr:tex display="inline"><![CDATA[n]]></fr:tex> different dimensions of composition that should <fr:link href="/higher-dimensional-algebra-and-topological-quantum-field-theory/" title="Higher-dimensional Algebra and Topological Quantum Field Theory" uri="https://forest.nickx.hu/higher-dimensional-algebra-and-topological-quantum-field-theory/" display-uri="higher-dimensional-algebra-and-topological-quantum-field-theory" type="local">cohere nicely together in some way</fr:link>.
    </html:p><html:p>
      Fully weak models of <fr:tex display="inline"><![CDATA[n]]></fr:tex>-categories are difficult to work with, as their explicit description is intractably large for even <fr:tex display="inline"><![CDATA[n > 2]]></fr:tex>, so in practice it is convenient to instead use a so-called <html:em>semistrict</html:em> model.
      Such a model has some of its structure holding <html:em>strictly</html:em>, e.g. the unit law for composition holds up to equality, but crucially retains some weak aspects to preserve equivalence with the fully weak notion.
      In this sense, a Gray category can be considered a semistrict model of tricategories, which has strict associativity and unit laws, but weak interchange.
      The idea of ‘Gray semistrictness’ is the conjecture that this extends past tricategories to arbitrary weak <fr:tex display="inline"><![CDATA[n]]></fr:tex>-categories.
      In a nutshell, this is the flavour of ANCs — strict associativity and unit laws for composition in all <fr:tex display="inline"><![CDATA[n]]></fr:tex>-dimensions, but with weak interchange.
    </html:p><html:p>
      One of the tenets of category theory, which is historically rooted in algebraic topology, is that there is a deep connection between the algebraic and the geometric; algebraic structures are usually mathematically tractable to both define and manipulate, being the typical foundation for computer-based mathematics systems, but topological structures are, although wilder in this regard, in some sense more intuitive and provide a more semanticlly meaningful form of mathematical argumentation.
      Any concept arising in one aspect should have meaning in the other, especially in the study of higher categories where the space-like aspects enter the fore.
      The other motivating principle for ANCs is that instead of defining a model of semistrict <fr:tex display="inline"><![CDATA[n]]></fr:tex>-category in an algebraic vein, as is done for Gray categories, which is inextricably difficult for arbitrary <fr:tex display="inline"><![CDATA[n]]></fr:tex>, it is more fruitful to approach it from the other end <html:em>geometrically</html:em> — via higher-dimensional string diagrams.
      A simple extension of the usual (2D) string diagrammatic calculus with coloured regions is a mathematical language for strict 2-categories, where 2-morphisms are represented by string diagrams <html:span tid="§ 8" uid="a-survey-of-graphical-languages-for-monoidal-categories"><fr:link href="/a-survey-of-graphical-languages-for-monoidal-categories/" title="A survey of graphical languages for monoidal categories" uri="https://forest.nickx.hu/a-survey-of-graphical-languages-for-monoidal-categories/" display-uri="a-survey-of-graphical-languages-for-monoidal-categories" type="local">[§ 8, a-survey-of-graphical-languages-for-monoidal-categories]</fr:link></html:span>.
      Implicit in this construction is the idea that every bicategory can be strictified
  <html:sl-tooltip content="
        Technically speaking, string-diagrammatic calculi are not predicated on strictification, but rather a related notion of coherence, which is a statement asserting that all formal diagrams made from structural morphisms (e.g. unitors, associators, etc.) arising ambiently in the categorical structure commute.
        It is possible to consider some notion of string diagram for non-strict categorical structures, see e.g. [string-diagrams-for-strictification-and-coherence] for the case of string diagrams in non-strict monoidal categories.
        However, for the sake of simplicity, whenever we discuss ‘string diagrams’ in some categorical structure, we are implicitly talking about those in the strictified version of said structure.
      ">
    <html:sup>​</html:sup>
  </html:sl-tooltip>
, so such a string diagrammatic calculus completely captures the language of 2-categories.
      Indeed, the idea that string diagrams may be juxtaposed to represent composites is essentially a realisation of the strictness of associativity, while the length-invariance of wires in a string diagram realises the strictness of unitality.
      Weak interchange can be represented in a string-diagrammatic way by replacing equations of string diagrams with ‘homotopies’: i.e., a string diagram of higher dimension that admits the left side of the equation as a face and the right side as the opposing face.
      In other words, mere equality is replaced by a proof-relevant equality.
      In this sense, ANCs stem from the idea that formally distilling this higher-dimensional string diagram calculus is easier, and from this we can reverse-engineer a model of Gray semistrict higher <fr:tex display="inline"><![CDATA[n]]></fr:tex>-category.
    </html:p><html:p>
      Finally, the last adjective ‘globular’, which we use to describe our notion of higher category, refers to the shape of the cells from which higher morphisms are constructed, in this case as ‘globes’, which are discs generalised to arbitrary dimension.
      For example, in the definition of a natural transformation between two functors, one must assume that both functors have matching domain and codomain (hence the usual diagram that one draws has the shape of a disc, a 2-globe).
      Just as space can be decomposed into a variety of shapes, there are different combinatorial notions of higher category based on choosing different fundamental shapes, and moreover these may model globular higher categories.
      <fr:link href="/higher-topos-theory/" title="Higher Topos Theory" uri="https://forest.nickx.hu/higher-topos-theory/" display-uri="higher-topos-theory" type="local">Quasicategories</fr:link>, a popular model of (globular) <fr:tex display="inline"><![CDATA[(\infty , 1)]]></fr:tex>-category, are based on choosing simplices as the primitive shapes.
      Other choices of shapes include <fr:link href="/multiple-categories-the-equivalence-of-a-globular-and-a-cubical-approach/" title="Multiple categories: the equivalence of a globular and a cubical approach" uri="https://forest.nickx.hu/multiple-categories-the-equivalence-of-a-globular-and-a-cubical-approach/" display-uri="multiple-categories-the-equivalence-of-a-globular-and-a-cubical-approach" type="local">cubes</fr:link>, <fr:link href="/higher-dimensional-algebra-iii-n-categories-and-the-algebra-of-opetopes/" title="Higher-Dimensional Algebra III: n-Categories and the Algebra of Opetopes" uri="https://forest.nickx.hu/higher-dimensional-algebra-iii-n-categories-and-the-algebra-of-opetopes/" display-uri="higher-dimensional-algebra-iii-n-categories-and-the-algebra-of-opetopes" type="local">opetopes</fr:link>, and <fr:link href="/diagrammatic-sets-as-a-model-of-homotopy-types/" title="Diagrammatic sets as a model of homotopy types" uri="https://forest.nickx.hu/diagrammatic-sets-as-a-model-of-homotopy-types/" display-uri="diagrammatic-sets-as-a-model-of-homotopy-types" type="local">diagrammatic sets</fr:link>, all of which would replace the role of ANCs in this thesis to model globular higher categories.
      Globes are fundamental to higher categories (based on iterated enrichment) due to the previous observation about natural transformations, which extends to their higher-dimensional analogues (so-called <html:em><fr:tex display="inline"><![CDATA[n]]></fr:tex>-transfors</html:em>): modifications, pertubations, etc.
      By non-globular higher category, we mean a notion of ‘higher category’ which is not based on iterated enrichment, e.g. the <fr:tex display="inline"><![CDATA[n]]></fr:tex>-fold or ‘multiple’ categories obtained by iterated internalisation.
      While there do exist string diagrammatic calculi for some forms of non-globular higher categories based on other shapes (e.g. for <fr:link href="/string-diagrams-for-double-categories-and-equipments/" title="String Diagrams For Double Categories and Equipments" uri="https://forest.nickx.hu/string-diagrams-for-double-categories-and-equipments/" display-uri="string-diagrams-for-double-categories-and-equipments" type="local">double categories</fr:link>), those based on <html:em>globular</html:em> higher categories are by far the most well-studied (as these generalise most traditional string diagrammatic calculi of various types of monoidal category), so in this thesis every <fr:tex display="inline"><![CDATA[n]]></fr:tex>-category is implicitly globular, as opposed to <fr:tex display="inline"><![CDATA[n]]></fr:tex>-fold or ‘multiple’ categories.
    </html:p></fr:mainmatter></fr:tree><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2023</fr:year><fr:month>12</fr:month><fr:day>3</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-combinatorial-foundation/</fr:uri><fr:display-uri>coherent-inverses-combinatorial-foundation</fr:display-uri><fr:route>/coherent-inverses-combinatorial-foundation/</fr:route><fr:title text="Combinatorial foundation">Combinatorial foundation</fr:title><fr:taxon>section</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
      Although we have established our appropriate notion of ‘higher category’, it is still not clear in which mathematical arena our work takes place.
      Because our work focuses on the proof assistant <html:span tex="\homotopyio{}"><fr:link href="/homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories/" title="homotopy.io: a proof assistant for finitely-presented globular $n$-categories" uri="https://forest.nickx.hu/homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories/" display-uri="homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories" type="local"><html:code>homotopy.io</html:code></fr:link></html:span>, which in some sense implements the theory of ANCs, we seek to have a combinatorial description of this theory along with a categorical semantics of our implementation.
    </html:p><html:p>
      This foundation is given by <fr:link href="/coherent-inverses-UGIR/" title="zigzag category" uri="https://forest.nickx.hu/coherent-inverses-UGIR/" display-uri="coherent-inverses-UGIR" type="local">zigzag categories</fr:link>, introduced in <html:span class="textual" tid="§ 2" uid="high-level-methods-for-homotopy-construction-in-associative-n-categories"><fr:link href="/high-level-methods-for-homotopy-construction-in-associative-n-categories/" title="High-level methods for homotopy construction in associative $n$-categories" uri="https://forest.nickx.hu/high-level-methods-for-homotopy-construction-in-associative-n-categories/" display-uri="high-level-methods-for-homotopy-construction-in-associative-n-categories" type="local">[§ 2, high-level-methods-for-homotopy-construction-in-associative-n-categories]</fr:link></html:span>:
      
        
        
        <fr:tree show-metadata="false" toc="false" numbered="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>8</fr:month><fr:day>12</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-UGIR/</fr:uri><fr:display-uri>coherent-inverses-UGIR</fr:display-uri><fr:route>/coherent-inverses-UGIR/</fr:route><fr:title text="zigzag category"><fr:link href="/coherent-inverses-UGIR/" title="zigzag category" uri="https://forest.nickx.hu/coherent-inverses-UGIR/" display-uri="coherent-inverses-UGIR" type="local">zigzag category</fr:link></fr:title><fr:taxon>definition</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
  For a category <fr:tex display="inline"><![CDATA[\mathcal {C}]]></fr:tex>, we define the <fr:link href="/coherent-inverses-UGIR/" title="zigzag category" uri="https://forest.nickx.hu/coherent-inverses-UGIR/" display-uri="coherent-inverses-UGIR" type="local">zigzag category</fr:link> <fr:tex display="inline"><![CDATA[\operatorname {Zig}(\mathcal {C})]]></fr:tex> as the category with:
  <html:dl>
    <html:dt>objects (<fr:link href="/coherent-inverses-UGIR/" title="zigzag category" uri="https://forest.nickx.hu/coherent-inverses-UGIR/" display-uri="coherent-inverses-UGIR" type="local">zigzags</fr:link>)</html:dt>
    <html:dd>
      iterated cospans of <fr:tex display="inline"><![CDATA[\mathcal {C}]]></fr:tex>; e.g. for objects <fr:tex display="inline"><![CDATA[r_i, s_i \in  \mathcal {C}]]></fr:tex>, and morphisms <fr:tex display="inline"><![CDATA[f_i, b_i]]></fr:tex> of <fr:tex display="inline"><![CDATA[\mathcal {C}]]></fr:tex> for <fr:tex display="inline"><![CDATA[i \in  \mathbb {N}]]></fr:tex>,
      <fr:tex display="block"><![CDATA[
        r_0 \xrightarrow {f_0} s_0 \xleftarrow {b_0} r_1 \xrightarrow {f_1} \cdots  \xleftarrow {b_n} r_{n+1}.
      ]]></fr:tex>
      The feet of the iterated cospan are called <html:em>regular levels</html:em>, while the tips are <html:em>singular levels</html:em>.
      Every <fr:link href="/coherent-inverses-UGIR/" title="zigzag category" uri="https://forest.nickx.hu/coherent-inverses-UGIR/" display-uri="coherent-inverses-UGIR" type="local">zigzag</fr:link> has an <fr:link href="/coherent-inverses-9V13/" title="singular projection" uri="https://forest.nickx.hu/coherent-inverses-9V13/" display-uri="coherent-inverses-9V13" type="local">associated <html:em>length</html:em></fr:link>, which is its number of singular levels.
    </html:dd>
    <html:dt>morphisms (<fr:link href="/coherent-inverses-UGIR/" title="zigzag category" uri="https://forest.nickx.hu/coherent-inverses-UGIR/" display-uri="coherent-inverses-UGIR" type="local">zigzag maps</fr:link>)</html:dt>
    <html:dd>
      a collection of morphisms of <fr:tex display="inline"><![CDATA[\mathcal {C}]]></fr:tex> arranging into a (<html:em>singular</html:em>) monotone map of singular levels, combined with a <fr:link href="/coherent-inverses-WFIU/" title="Singular/regular monotone duality" uri="https://forest.nickx.hu/coherent-inverses-WFIU/" display-uri="coherent-inverses-WFIU" type="local">dually determined</fr:link> antiparallel (<html:em>regular</html:em>) monotone map of regular levels, such that the induced planar diagram in <fr:tex display="inline"><![CDATA[\mathcal {C}]]></fr:tex> commutes.
      E.g. a commuting diagram in <fr:tex display="inline"><![CDATA[\mathcal {C}]]></fr:tex> of the form:
      
  
  
  <html:figure><fr:resource hash="228080b5e02bd033ec32e336116519b2"><fr:resource-content><html:img src="/228080b5e02bd033ec32e336116519b2.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[
       \usepackage{amsmath,amssymb}
  \usepackage{mathtools}
  \usepackage{stmaryrd}
  \newcommand{\set}[1]{\left\{#1\right\}}
     \usepackage {tikz}
     \usetikzlibrary {cd}
     \usetikzlibrary {}
     
  \definecolor {green}{RGB}{27,158,119}
  \definecolor {orange}{RGB}{217,95,2}
  \definecolor {purple}{RGB}{117,112,179}

     
    ]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
      \begin {tikzcd}[]
        r^\prime _0 \ar [r, "f^\prime _0"] \ar [d, leftarrow, color=orange, "\hat {\alpha }_0"] & s^\prime _0 & r^\prime _1 \ar [r, "f^\prime _1"] \ar [l, "b^\prime _0"'] \ar [d, leftarrow, color=orange, "\hat {\alpha }_1"] & s^\prime _1 & r^\prime _2 \ar [r, "f^\prime _2"] \ar [l, "b^\prime _1"'] \ar [lld, leftarrow, color=orange, "\hat {\alpha }_2"] & s^\prime _2 & r^\prime _3 \ar [l, "b^\prime _2"'] \ar [lld, leftarrow, color=orange, "\hat {\alpha }_3"] \\
        r_0 \ar [r, "f_0"'] & s_0 \ar [u, color=green, "\alpha _0"] & r_1 \ar [r, "f_1"'] \ar [l, "b_0"] & s_1 \ar [urr, color=green, "\alpha _1"] & r_2, \ar [l, "b_1"]
      \end {tikzcd}
    ]]></fr:resource-source></fr:resource></html:figure>



      where the <html:span style=" color: #1b9e77;">morphisms labelled <fr:tex display="inline"><![CDATA[\alpha ]]></fr:tex></html:span> arrange into the <html:span style=" color: #1b9e77;">singular monotone map <fr:tex display="inline"><![CDATA[s_0 \mapsto  s^\prime _0, s_1 \mapsto  s^\prime _2]]></fr:tex></html:span>, and the <html:span style=" color: #d95f02;">morphisms labelled <fr:tex display="inline"><![CDATA[\hat {\alpha }]]></fr:tex></html:span> arrange into the <html:span style=" color: #d95f02;">(antiparallel) regular monotone map <fr:tex display="inline"><![CDATA[r^\prime _0 \mapsto  r_0, r^\prime _1 \mapsto  r_1, r^\prime _2 \mapsto  r_1, r^\prime _3, \mapsto  r_2]]></fr:tex></html:span>.
      Monotonicity is essentially the condition that the induced diagram is planar, i.e. that no arrows cross.
    </html:dd>
  </html:dl></html:p><html:p>
  Composition of <fr:link href="/coherent-inverses-UGIR/" title="zigzag category" uri="https://forest.nickx.hu/coherent-inverses-UGIR/" display-uri="coherent-inverses-UGIR" type="local">zigzag maps</fr:link> is given by taking the composition of <fr:tex display="inline"><![CDATA[\mathcal {C}]]></fr:tex> along composition of monotone maps (as in <fr:tex display="inline"><![CDATA[{\mathbf {\Delta }_+}]]></fr:tex>).
  The identity <fr:link href="/coherent-inverses-UGIR/" title="zigzag category" uri="https://forest.nickx.hu/coherent-inverses-UGIR/" display-uri="coherent-inverses-UGIR" type="local">zigzag map</fr:link> is given by the identity morphisms of <fr:tex display="inline"><![CDATA[\mathcal {C}]]></fr:tex> equipped with the identity monotone map.
</html:p></fr:mainmatter></fr:tree>
      
      <fr:tex display="inline"><![CDATA[\operatorname {Zig}(-)]]></fr:tex> is actually a <fr:link href="/coherent-inverses-2H06/" title="parametric right adjoint" uri="https://forest.nickx.hu/coherent-inverses-2H06/" display-uri="coherent-inverses-2H06" type="local">parametric right adjoint</fr:link> functor <fr:tex display="inline"><![CDATA[\mathbf {Cat} \to  \mathbf {Cat}]]></fr:tex>, which has some interesting consequences that we will explore in due course.
    </html:p><html:p>
      Informally, an <fr:tex display="inline"><![CDATA[n]]></fr:tex>-fold <fr:link href="/coherent-inverses-UGIR/" title="zigzag category" uri="https://forest.nickx.hu/coherent-inverses-UGIR/" display-uri="coherent-inverses-UGIR" type="local">zigzag category</fr:link> over <fr:tex display="inline"><![CDATA[\mathcal {C}]]></fr:tex>, <fr:tex display="inline"><![CDATA[\operatorname {Zig}^{n}(\mathcal {C})]]></fr:tex>, is supposed to be a ‘space’ containing (at least) all the combinatorial encodings of <fr:tex display="inline"><![CDATA[n]]></fr:tex>-dimensional string diagrams with respect to some algebraic <fr:link href="/coherent-inverses-US67/" title="signature and framing" uri="https://forest.nickx.hu/coherent-inverses-US67/" display-uri="coherent-inverses-US67" type="local">signature</fr:link> encoded by <fr:tex display="inline"><![CDATA[\mathcal {C}]]></fr:tex>, whose objects are certain diagrams obtained by stratifying a string diagram into ‘regular’ and ‘singular’ levels (as in the right side of <fr:link href="/coherent-inverses-HTXY/" title="Combinatorialised string diagram" uri="https://forest.nickx.hu/coherent-inverses-HTXY/" display-uri="coherent-inverses-HTXY" type="local">figure <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-HTXY/" display-uri="coherent-inverses-HTXY" /></fr:link>).
      <html:span class="textual" tid="§ 3" uid="high-level-methods-for-homotopy-construction-in-associative-n-categories"><fr:link href="/high-level-methods-for-homotopy-construction-in-associative-n-categories/" title="High-level methods for homotopy construction in associative $n$-categories" uri="https://forest.nickx.hu/high-level-methods-for-homotopy-construction-in-associative-n-categories/" display-uri="high-level-methods-for-homotopy-construction-in-associative-n-categories" type="local">[§ 3, high-level-methods-for-homotopy-construction-in-associative-n-categories]</fr:link></html:span> then goes on to show a method for the construction of complex homotopies by means of a colimit procedure in <fr:link href="/coherent-inverses-UGIR/" title="zigzag category" uri="https://forest.nickx.hu/coherent-inverses-UGIR/" display-uri="coherent-inverses-UGIR" type="local">zigzag categories</fr:link>, as illustrated by <fr:link href="/coherent-inverses-E4GF/" title="Contraction example" uri="https://forest.nickx.hu/coherent-inverses-E4GF/" display-uri="coherent-inverses-E4GF" type="local">figure <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-E4GF/" display-uri="coherent-inverses-E4GF" /></fr:link>.
      This thesis can be summarised as an extension of this construction to <fr:link href="/coherent-inverses-XQVM/" title="framed zigzag enriched category" uri="https://forest.nickx.hu/coherent-inverses-XQVM/" display-uri="coherent-inverses-XQVM" type="local">framed zigzag enriched categories</fr:link> to equip to the theory a built-in notion of coherently invertible cell, and an enhancement of this procedure to properly support the additional structure.
    </html:p><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2025</fr:year><fr:month>1</fr:month><fr:day>9</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-HTXY/</fr:uri><fr:display-uri>coherent-inverses-HTXY</fr:display-uri><fr:route>/coherent-inverses-HTXY/</fr:route><fr:title text="Combinatorialised string diagram">Combinatorialised string diagram</fr:title><fr:taxon>figure</fr:taxon></fr:frontmatter><fr:mainmatter><html:figure><fr:resource hash="d8dee00599594f40a7d10a2d04f73603"><fr:resource-content><html:img src="/d8dee00599594f40a7d10a2d04f73603.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[\usepackage {adjustbox,tikz}]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
        \begin{adjustbox}{max width=0.45\textwidth}
    \begin{tikzpicture}
    \definecolor{generator-3-2-0-pos}{RGB}{142, 68, 173}
    \definecolor{generator-1-1-0-pos}{RGB}{192, 57, 43}
    \definecolor{generator-2-2-0-pos}{RGB}{243, 156, 18}
    \definecolor{generator-0-0-0-pos}{RGB}{41, 128, 185}
    \begin{scope}
    % Background surfaces
    \fill[generator-0-0-0-pos] (0,0) -- (8,0) -- (8,6) -- (0,6) -- (0,0);
    % Wire layers
    \draw[color=generator-1-1-0-pos, line width=2.5pt](2,0) -- (2,3) .. controls (2,3.8) and (2.4,4) .. (3,4) -- (3,6)(5,0) -- (5,2) .. controls (4.4,2) and (4,2.2) .. (4,3) .. controls (4,3.8) and (3.6,4) .. (3,4)(5,2) .. controls (5.6,2) and (6,2.2) .. (6,3) -- (6,6);
    \end{scope}
    \fill[generator-3-2-0-pos] (5,2) circle (0.14);
    \fill[generator-2-2-0-pos] (3,4) circle (0.14);
    \end{tikzpicture}
    \end{adjustbox}
    \begin{adjustbox}{max width=0.45\textwidth}
    \begin{tikzpicture}
    \node (R0R0) at (0, 0) {$x$};
    \node (R0S0) at (1, 0) {$f$};
    \node (R0R1) at (2, 0) {$x$};
    \node (R0S1) at (4, 0) {$f$};
    \node (R0R2) at (6, 0) {$x$};

    \node (S0R0) at (0, 1) {$x$};
    \node (S0S0) at (1, 1) {$f$};
    \node (S0R1) at (2, 1) {$x$};
    \node (S0S1) at (4, 1) {$\beta$};
    \node (S0R2) at (6, 1) {$x$};

    \node (R1R0) at (0, 2) {$x$};
    \node (R1S0) at (1, 2) {$f$};
    \node (R1R1) at (2, 2) {$x$};
    \node (R1S1) at (3, 2) {$f$};
    \node (R1R2) at (4, 2) {$x$};
    \node (R1S2) at (5, 2) {$f$};
    \node (R1R3) at (6, 2) {$x$};

    \node (S1R0) at (0, 3) {$x$};
    \node (S1S0) at (2, 3) {$\alpha$};
    \node (S1R1) at (4, 3) {$x$};
    \node (S1S1) at (5, 3) {$f$};
    \node (S1R2) at (6, 3) {$x$};
    \node (R2R0) at (0, 4) {$x$};
    \node (R2S0) at (2, 4) {$f$};
    \node (R2R1) at (4, 4) {$x$};
    \node (R2S1) at (5, 4) {$f$};
    \node (R2R2) at (6, 4) {$x$};

    {
    \draw[->] (R0R0) to (R0S0);
    \draw[->] (R0R1) to (R0S0);
    \draw[->] (R0R1) to (R0S1);
    \draw[->] (R0R2) to (R0S1);

    \draw[->] (S0R0) to (S0S0);
    \draw[->] (S0R1) to (S0S0);
    \draw[->] (S0R1) to (S0S1);
    \draw[->] (S0R2) to (S0S1);

    \draw[->] (R1R0) to (R1S0);
    \draw[->] (R1R1) to (R1S0);
    \draw[->] (R1R1) to (R1S1);
    \draw[->] (R1R2) to (R1S1);
    \draw[->] (R1R2) to (R1S2);
    \draw[->] (R1R3) to (R1S2);

    \draw[->] (S1R0) to (S1S0);
    \draw[->] (S1R1) to (S1S0);
    \draw[->] (S1R1) to (S1S1);
    \draw[->] (S1R2) to (S1S1);

    \draw[->] (R2R0) to (R2S0);
    \draw[->] (R2R1) to (R2S0);
    \draw[->] (R2R1) to (R2S1);
    \draw[->] (R2R2) to (R2S1);

    \draw[->] (R0R0) to (S0R0);
    \draw[->] (R0R1) to (S0R1);
    \draw[->] (R0R2) to (S0R2);

    \draw[->] (R0S0) to (S0S0);
    \draw[->] (R0S1) to (S0S1);

    \draw[->] (R1R0) to (S0R0);
    \draw[->] (R1R1) to (S0R1);
    \draw[->] (R1R3) to (S0R2);

    \draw[->] (R1S0) to (S0S0);
    \draw[->] (R1S1) to (S0S1);
    \draw[->] (R1S2) to (S0S1);

    \draw[->] (R1R0) to (S1R0);
    \draw[->] (R1R2) to (S1R1);
    \draw[->] (R1R3) to (S1R2);

    \draw[->] (R1S0) to (S1S0);
    \draw[->] (R1S1) to (S1S0);
    \draw[->] (R1S2) to (S1S1);

    \draw[->] (R2R0) to (S1R0);
    \draw[->] (R2R1) to (S1R1);
    \draw[->] (R2R2) to (S1R2);

    \draw[->] (R2S0) to (S1S0);
    \draw[->] (R2S1) to (S1S1);
    }
    \end{tikzpicture}
    \end{adjustbox}
  ]]></fr:resource-source></fr:resource>
  <html:figcaption>A 2D string diagram and its combinatorial encoding as an object of <fr:tex display="inline"><![CDATA[\operatorname {Zig}^{2}(\mathcal {C})]]></fr:tex>.</html:figcaption></html:figure></fr:mainmatter></fr:tree><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2025</fr:year><fr:month>1</fr:month><fr:day>9</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-E4GF/</fr:uri><fr:display-uri>coherent-inverses-E4GF</fr:display-uri><fr:route>/coherent-inverses-E4GF/</fr:route><fr:title text="Contraction example">Contraction example</fr:title><fr:taxon>figure</fr:taxon></fr:frontmatter><fr:mainmatter><html:figure><fr:resource hash="329f07bcacf3e31a972b1c40fa35b5fa"><fr:resource-content><html:img src="/329f07bcacf3e31a972b1c40fa35b5fa.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[
    \usepackage {adjustbox}
    \usepackage {amsmath,amssymb}
    \usepackage {tikz}
    \usetikzlibrary {cd}
  ]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
    $
        \begin{aligned}
      \adjustbox{max width=0.25\textwidth}{
        \begin{tikzpicture}
          \definecolor{generator-1-1-0-pos}{RGB}{192, 57, 43}
          \definecolor{generator-2-2-0-pos}{RGB}{243, 156, 18}
          \definecolor{generator-0-0-0-pos}{RGB}{41, 128, 185}
          \begin{scope}
            % Background surfaces
            \fill[generator-0-0-0-pos] (0,0) -- (6,0) -- (6,6) -- (0,6) -- (0,0);
            % Wire layers
            \draw[color=generator-1-1-0-pos, line width=5pt](2,0) -- (2,6)(4,0) -- (4,6);
          \end{scope}
          \fill[generator-2-2-0-pos] (2,2) circle (0.14);
          \fill[generator-2-2-0-pos] (4,4) circle (0.14);
        \end{tikzpicture}
      }
    \end{aligned}
    \quad
    \leadsto
    \quad
    \begin{aligned}
      \adjustbox{max width=0.25\textwidth}{
        \begin{tikzpicture}
          \definecolor{generator-1-1-0-pos}{RGB}{192, 57, 43}
          \definecolor{generator-2-2-0-pos}{RGB}{243, 156, 18}
          \definecolor{generator-0-0-0-pos}{RGB}{41, 128, 185}
          \begin{scope}
            % Background surfaces
            \fill[generator-0-0-0-pos] (0,0) -- (6,0) -- (6,4) -- (0,4) -- (0,0);
            % Wire layers
            \draw[color=generator-1-1-0-pos, line width=5pt](2,0) -- (2,4)(4,0) -- (4,4);
          \end{scope}
          \fill[generator-2-2-0-pos] (2,2) circle (0.14);
          \fill[generator-2-2-0-pos] (4,2) circle (0.14);
        \end{tikzpicture}
      }
    \end{aligned}
    \hspace{1cm}
    \begin{aligned}
      \begin{tikzcd}[sep=tiny]
        x \ar[r] \ar[d] & f \ar[d] & x \ar[l] \ar[r] \ar[d] & f \ar[d] & x \ar[l] \ar[d] \\
        x \ar[r] & f & x \ar[l] \ar[r] & e & x \ar[l]
        &&
        x \ar[r] & f & x \ar[l] \ar[r] & f & x \ar[l]
        \\
        x \ar[r] \ar[d] \ar[u] & f \ar[d] \ar[u] & x \ar[l] \ar[r] \ar[d] \ar[u] & f \ar[d] \ar[u] & x \ar[l] \ar[d] \ar[u]
        \ar[rr, phantom, "\leadsto"]
        &&
        x \ar[r] \ar[d] \ar[u] & e \ar[d] \ar[u] & x \ar[l] \ar[r] \ar[d] \ar[u] & e \ar[d] \ar[u] & x \ar[l] \ar[d] \ar[u]
        \\
        x \ar[r] & e & x \ar[l] \ar[r] & f & x \ar[l]
        &&
        x \ar[r] & f & x \ar[l] \ar[r] & f & x \ar[l]
        \\
        x \ar[r] \ar[u] & f \ar[u] & x \ar[l] \ar[r] \ar[u] & f \ar[u] & x \ar[l] \ar[u]
      \end{tikzcd}
    \end{aligned}
  $
  ]]></fr:resource-source></fr:resource>
  <html:figcaption>Example of a contraction.</html:figcaption></html:figure></fr:mainmatter></fr:tree><html:p>
      The nature of this work is particularly exploratory, as there is no existing model with which we can construct a correspondence in the traditional mathematical sense of correctness via a soundness-and-completeness style of argument.
      However, there are certain nice properties that we would expect to hold, and we can show using the theory we have developed, which provides the basis for an argument of ‘correctness’.
      This is the subject of <fr:link href="/coherent-inverses-collapse/" title="Coherent inverses in higher-categorical string diagrams › Collapsing framed zigzags" uri="https://forest.nickx.hu/coherent-inverses-collapse/" display-uri="coherent-inverses-collapse" type="local">chapter <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-collapse/" display-uri="coherent-inverses-collapse" /></fr:link>.
    </html:p><html:p>
      Moreover, as is often the case with formalisation work, the process of formalising higher-dimensional string diagrammatic arguments that are expected to hold (given that they are higher-dimensional variants of known results) additionally provides a means to test the utility of the theory and tooling we develop, which we explore in <fr:link href="/coherent-inverses-applications/" title="Coherent inverses in higher-categorical string diagrams › Applications" uri="https://forest.nickx.hu/coherent-inverses-applications/" display-uri="coherent-inverses-applications" type="local">chapter <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-applications/" display-uri="coherent-inverses-applications" /></fr:link>.
    </html:p></fr:mainmatter></fr:tree><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2023</fr:year><fr:month>12</fr:month><fr:day>3</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-invertibility/</fr:uri><fr:display-uri>coherent-inverses-invertibility</fr:display-uri><fr:route>/coherent-inverses-invertibility/</fr:route><fr:title text="Coherent invertibility">Coherent invertibility</fr:title><fr:taxon>section</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
      In a category, we say that objects <fr:tex display="inline"><![CDATA[x]]></fr:tex> and <fr:tex display="inline"><![CDATA[y]]></fr:tex> are <html:em>isomorphic</html:em> when there exists a morphism <fr:tex display="inline"><![CDATA[{x \xrightarrow {f} y}]]></fr:tex> and an <html:em>inverse</html:em> morphism <fr:tex display="inline"><![CDATA[{y \xrightarrow {{f}^{-1}} x}]]></fr:tex> satisfying:
      <fr:tex display="block"><![CDATA[
        {f}^{-1} \circ  f = 
  \text {id}_{x}
, \qquad  f \circ  {f}^{-1} = 
  \text {id}_{y}
.
      ]]></fr:tex>
      In this case, we say that <fr:tex display="inline"><![CDATA[f]]></fr:tex> and <fr:tex display="inline"><![CDATA[{f}^{-1}]]></fr:tex> are an inverse pair, <html:em>witnessing</html:em> the isomorphism <fr:tex display="inline"><![CDATA[x \cong  y]]></fr:tex>.
    </html:p><html:p>
      This is a proof-relevant notion of ‘sameness’ for <fr:tex display="inline"><![CDATA[x]]></fr:tex> and <fr:tex display="inline"><![CDATA[y]]></fr:tex>, as there may be other inverse pairs that witness <fr:tex display="inline"><![CDATA[x \cong  y]]></fr:tex>, and is one of the distinguishing aspects between set-theoretic mathematics and category-theoretic mathematics.
      In other words, a set is a mathematical structure that is fundamentally equipped with an equality predicate on its members; categories build on this, allowing one to express isomorphism between objects, but not ‘isomorphism’ between morphisms.
      Higher categories address this by allowing for 2-morphisms between (1-)morphisms, 3-morphisms between 2-morphisms, and so on.
    </html:p><html:p>
      Naturally, this leads to a generalisation of what it means for a morphism to admit an inverse.
      In a 2-category, such an inverse <fr:tex display="inline"><![CDATA[x \cong  y]]></fr:tex> arises from replacing the above equalities with <html:em>directed</html:em> 2-morphisms that perform pair cancellations or introductions:
      <fr:tex display="block"><![CDATA[
        \begin {alignedat}{2}
        {f}^{-1} \circ  f &\Rightarrow  
  \text {id}_{x}
, \qquad  &f \circ  {f}^{-1} &\Rightarrow  
  \text {id}_{y}
, \\
        {f}^{-1} \circ  f &\Leftarrow  
  \text {id}_{x}
, \qquad  &f \circ  {f}^{-1} &\Leftarrow  
  \text {id}_{y}
.
        \end {alignedat}
      ]]></fr:tex>
      We may ask that these 2-morphisms themselves form inverse pairs, leading to a <fr:link href="/coinductive-invertibility-in-higher-categories/" title="Coinductive Invertibility in Higher Categories" uri="https://forest.nickx.hu/coinductive-invertibility-in-higher-categories/" display-uri="coinductive-invertibility-in-higher-categories" type="local">coinductive definition of inverse</fr:link>, generating structure in all dimensions.
    </html:p><html:p>
      In string diagrams, these 2-morphisms are drawn as ‘cups’ and ‘caps’, representing the introductions and cancellations respectively as in <fr:link href="/coherent-inverses-B4SI/" title="Cups and caps" uri="https://forest.nickx.hu/coherent-inverses-B4SI/" display-uri="coherent-inverses-B4SI" type="local">figure <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-B4SI/" display-uri="coherent-inverses-B4SI" /></fr:link>.
    </html:p><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2025</fr:year><fr:month>1</fr:month><fr:day>14</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-B4SI/</fr:uri><fr:display-uri>coherent-inverses-B4SI</fr:display-uri><fr:route>/coherent-inverses-B4SI/</fr:route><fr:title text="Cups and caps">Cups and caps</fr:title><fr:taxon>figure</fr:taxon></fr:frontmatter><fr:mainmatter><html:figure><html:figure><fr:resource hash="b84d9ae1f9e7934e1ac2be653c5ef58e"><fr:resource-content><html:img src="/b84d9ae1f9e7934e1ac2be653c5ef58e.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[\usepackage {tikz}]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
            \begin{tikzpicture}
      \definecolor{generator-1-0-0-pos}{RGB}{192, 57, 43}
      \definecolor{generator-2-1-0-neg}{RGB}{166, 105, 8}
      \definecolor{generator-2-1-0-pos}{RGB}{243, 156, 18}
      \definecolor{generator-0-0-0-pos}{RGB}{41, 128, 185}
      \definecolor{generator-2-1-1-zer}{RGB}{251, 221, 173}
      \begin{scope}
      % Background surfaces
      \fill[generator-0-0-0-pos] (0,0) -- (6,0) -- (6,4) -- (4,4) -- (4,3) .. controls (4,2.2) and (3.6,2) .. (3,2) .. controls (2.4,2) and (2,2.2) .. (2,3) -- (2,4) -- (0,4) -- (0,0);
      \fill[generator-1-0-0-pos] (2,3) .. controls (2,2.2) and (2.4,2) .. (3,2) .. controls (3.6,2) and (4,2.2) .. (4,3) -- (4,4) -- (2,4) -- (2,3);
      % Wire layers
      \draw[color=generator-2-1-0-neg, line width=5pt](3,2) .. controls (3.6,2) and (4,2.2) .. (4,3) -- (4,4);
      \draw[color=generator-2-1-0-pos, line width=5pt](3,2) .. controls (2.4,2) and (2,2.2) .. (2,3) -- (2,4);
      \end{scope}
      \fill[generator-2-1-1-zer] (3,2) circle (0.14);
      \end{tikzpicture}
    ]]></fr:resource-source></fr:resource>
    <html:figcaption><fr:tex display="inline"><![CDATA[{f}^{-1} \circ  f \Leftarrow  
  \text {id}_{x}
]]></fr:tex></html:figcaption></html:figure>
  <html:figure><fr:resource hash="ca04a0cfd405a02b289bfcb901ddda71"><fr:resource-content><html:img src="/ca04a0cfd405a02b289bfcb901ddda71.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[\usepackage {tikz}]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
            \begin{tikzpicture}
      \definecolor{generator-1-0-0-pos}{RGB}{192, 57, 43}
      \definecolor{generator-2-1-0-neg}{RGB}{166, 105, 8}
      \definecolor{generator-2-1-0-pos}{RGB}{243, 156, 18}
      \definecolor{generator-0-0-0-pos}{RGB}{41, 128, 185}
      \definecolor{generator-2-1-1-zer}{RGB}{251, 221, 173}
      \begin{scope}
      % Background surfaces
      \fill[generator-0-0-0-pos] (0,0) -- (2,0) -- (2,1) .. controls (2,1.8) and (2.4,2) .. (3,2) .. controls (3.6,2) and (4,1.8) .. (4,1) -- (4,0) -- (6,0) -- (6,4) -- (0,4) -- (0,0);
      \fill[generator-1-0-0-pos] (2,0) -- (4,0) -- (4,1) .. controls (4,1.8) and (3.6,2) .. (3,2) .. controls (2.4,2) and (2,1.8) .. (2,1) -- (2,0);
      % Wire layers
      \draw[color=generator-2-1-0-neg, line width=5pt](4,0) -- (4,1) .. controls (4,1.8) and (3.6,2) .. (3,2);
      \draw[color=generator-2-1-0-pos, line width=5pt](2,0) -- (2,1) .. controls (2,1.8) and (2.4,2) .. (3,2);
      \end{scope}
      \fill[generator-2-1-1-zer] (3,2) circle (0.14);
      \end{tikzpicture}
    ]]></fr:resource-source></fr:resource>
    <html:figcaption><fr:tex display="inline"><![CDATA[{f}^{-1} \circ  f \Rightarrow  
  \text {id}_{x}
]]></fr:tex></html:figcaption></html:figure>
  <html:figure><fr:resource hash="059c5844401b4af2083a6d936af20210"><fr:resource-content><html:img src="/059c5844401b4af2083a6d936af20210.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[\usepackage {tikz}]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
            \begin{tikzpicture}
      \definecolor{generator-1-0-0-pos}{RGB}{192, 57, 43}
      \definecolor{generator-2-1-0-neg}{RGB}{166, 105, 8}
      \definecolor{generator-2-1-0-pos}{RGB}{243, 156, 18}
      \definecolor{generator-0-0-0-pos}{RGB}{41, 128, 185}
      \definecolor{generator-2-1-1-zer}{RGB}{251, 221, 173}
      \begin{scope}
      % Background surfaces
      \fill[generator-0-0-0-pos] (2,3) .. controls (2,2.2) and (2.4,2) .. (3,2) .. controls (3.6,2) and (4,2.2) .. (4,3) -- (4,4) -- (2,4) -- (2,3);
      \fill[generator-1-0-0-pos] (0,0) -- (6,0) -- (6,4) -- (4,4) -- (4,3) .. controls (4,2.2) and (3.6,2) .. (3,2) .. controls (2.4,2) and (2,2.2) .. (2,3) -- (2,4) -- (0,4) -- (0,0);
      % Wire layers
      \draw[color=generator-2-1-0-neg, line width=5pt](3,2) .. controls (2.4,2) and (2,2.2) .. (2,3) -- (2,4);
      \draw[color=generator-2-1-0-pos, line width=5pt](3,2) .. controls (3.6,2) and (4,2.2) .. (4,3) -- (4,4);
      \end{scope}
      \fill[generator-2-1-1-zer] (3,2) circle (0.14);
      \end{tikzpicture}
    ]]></fr:resource-source></fr:resource>
    <html:figcaption><fr:tex display="inline"><![CDATA[f \circ  {f}^{-1} \Leftarrow  
  \text {id}_{y}
]]></fr:tex></html:figcaption></html:figure>
  <html:figure><fr:resource hash="1a96d62abf78bfd36a7671d80fc4a043"><fr:resource-content><html:img src="/1a96d62abf78bfd36a7671d80fc4a043.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[\usepackage {tikz}]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
            \begin{tikzpicture}
      \definecolor{generator-1-0-0-pos}{RGB}{192, 57, 43}
      \definecolor{generator-2-1-0-neg}{RGB}{166, 105, 8}
      \definecolor{generator-2-1-0-pos}{RGB}{243, 156, 18}
      \definecolor{generator-0-0-0-pos}{RGB}{41, 128, 185}
      \definecolor{generator-2-1-1-zer}{RGB}{251, 221, 173}
      \begin{scope}
      % Background surfaces
      \fill[generator-0-0-0-pos] (2,0) -- (4,0) -- (4,1) .. controls (4,1.8) and (3.6,2) .. (3,2) .. controls (2.4,2) and (2,1.8) .. (2,1) -- (2,0);
      \fill[generator-1-0-0-pos] (0,0) -- (2,0) -- (2,1) .. controls (2,1.8) and (2.4,2) .. (3,2) .. controls (3.6,2) and (4,1.8) .. (4,1) -- (4,0) -- (6,0) -- (6,4) -- (0,4) -- (0,0);
      % Wire layers
      \draw[color=generator-2-1-0-neg, line width=5pt](2,0) -- (2,1) .. controls (2,1.8) and (2.4,2) .. (3,2);
      \draw[color=generator-2-1-0-pos, line width=5pt](4,0) -- (4,1) .. controls (4,1.8) and (3.6,2) .. (3,2);
      \end{scope}
      \fill[generator-2-1-1-zer] (3,2) circle (0.14);
      \end{tikzpicture}
    ]]></fr:resource-source></fr:resource>
    <html:figcaption><fr:tex display="inline"><![CDATA[f \circ  {f}^{-1} \Rightarrow  
  \text {id}_{y}
]]></fr:tex></html:figcaption></html:figure></html:figure></fr:mainmatter></fr:tree><html:p>
      The resulting notion of inverse has poor algebraic properties.
      To see why, consider the following 2-morphism, obtained as a composite of the 2-morphisms above:
      <fr:tex display="block"><![CDATA[
        f = \underline {
  \text {id}_{y}
} \circ  f \Rightarrow  (f \circ  {f}^{-1}) \circ  f = f \circ  \underline {({f}^{-1} \circ  f)} \Rightarrow  f \circ  
  \text {id}_{x}
 = f.
      ]]></fr:tex>
      Here we underline the redex applying in each case, and assume for simplicity our theory is definitionally unital and associative.
      This 2-morphism is an instance of a <html:em>snake composite</html:em> (see <fr:link href="/coherent-inverses-applications-catastrophes-snake/" title="Coherent inverses in higher-categorical string diagrams › Applications › Higher-dimensional catastrophes arising from a dualisable 1-morphism › Snake coherence" uri="https://forest.nickx.hu/coherent-inverses-applications-catastrophes-snake/" display-uri="coherent-inverses-applications-catastrophes-snake" type="local">section <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-applications-catastrophes-snake/" display-uri="coherent-inverses-applications-catastrophes-snake" /></fr:link> for another), named as such for its string diagrammatic representation in <fr:link href="/coherent-inverses-R49Y/" title="Snake composite" uri="https://forest.nickx.hu/coherent-inverses-R49Y/" display-uri="coherent-inverses-R49Y" type="local">figure <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-R49Y/" display-uri="coherent-inverses-R49Y" /></fr:link>, and has type <fr:tex display="inline"><![CDATA[f \Rightarrow  f]]></fr:tex>.
      We might expect it to be equivalent to <fr:tex display="inline"><![CDATA[
  \text {id}_{f}
]]></fr:tex>; this must certainly be the case if we desire the free <fr:tex display="inline"><![CDATA[\infty ]]></fr:tex>-category generated by an invertible <fr:tex display="inline"><![CDATA[{x \xrightarrow {f} y}]]></fr:tex> to itself be equivalent to the free <fr:tex display="inline"><![CDATA[\infty ]]></fr:tex>-category generated by a single object, where parallel morphisms are always equivalent.
      However, under the coinductive definition of inverse presented before, this will not be the case; we say that this notion of inverse is <html:em>incoherent</html:em>.
    </html:p><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2025</fr:year><fr:month>1</fr:month><fr:day>14</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-R49Y/</fr:uri><fr:display-uri>coherent-inverses-R49Y</fr:display-uri><fr:route>/coherent-inverses-R49Y/</fr:route><fr:title text="Snake composite">Snake composite</fr:title><fr:taxon>figure</fr:taxon></fr:frontmatter><fr:mainmatter><html:figure><fr:resource hash="f594c00962b01fe9d4a33a0d786f6706"><fr:resource-content><html:img src="/f594c00962b01fe9d4a33a0d786f6706.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[\usepackage {tikz}]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
        \begin{tikzpicture}
    \definecolor{generator-1-0-0-pos}{RGB}{192, 57, 43}
    \definecolor{generator-2-1-0-neg}{RGB}{166, 105, 8}
    \definecolor{generator-2-1-0-pos}{RGB}{243, 156, 18}
    \definecolor{generator-0-0-0-pos}{RGB}{41, 128, 185}
    \definecolor{generator-2-1-1-zer}{RGB}{251, 221, 173}
    \begin{scope}
    % Background surfaces
    \fill[generator-0-0-0-pos] (0,0) -- (2,0) -- (2,3) .. controls (2,3.8) and (2.4,4) .. (3,4) .. controls (3.6,4) and (4,3.8) .. (4,3) .. controls (4,2.2) and (4.4,2) .. (5,2) .. controls (5.6,2) and (6,2.2) .. (6,3) -- (6,6) -- (0,6) -- (0,0);
    \fill[generator-1-0-0-pos] (2,0) -- (8,0) -- (8,6) -- (6,6) -- (6,3) .. controls (6,2.2) and (5.6,2) .. (5,2) .. controls (4.4,2) and (4,2.2) .. (4,3) .. controls (4,3.8) and (3.6,4) .. (3,4) .. controls (2.4,4) and (2,3.8) .. (2,3) -- (2,0);
    % Wire layers
    \draw[color=generator-2-1-0-neg, line width=5pt](5,2) .. controls (4.4,2) and (4,2.2) .. (4,3) .. controls (4,3.8) and (3.6,4) .. (3,4);
    \draw[color=generator-2-1-0-pos, line width=5pt](2,0) -- (2,3) .. controls (2,3.8) and (2.4,4) .. (3,4)(5,2) .. controls (5.6,2) and (6,2.2) .. (6,3) -- (6,6);
    \end{scope}
    \fill[generator-2-1-1-zer] (5,2) circle (0.14);
    \fill[generator-2-1-1-zer] (3,4) circle (0.14);
    \end{tikzpicture}
  ]]></fr:resource-source></fr:resource>
  <html:figcaption>Snake composite</html:figcaption></html:figure></fr:mainmatter></fr:tree><html:p>
      In order to have a <html:em>coherent</html:em> notion of invertibility, this snake composite must be equivalent to the identity (i.e. the picture in <fr:link href="/coherent-inverses-R49Y/" title="Snake composite" uri="https://forest.nickx.hu/coherent-inverses-R49Y/" display-uri="coherent-inverses-R49Y" type="local">figure <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-R49Y/" display-uri="coherent-inverses-R49Y" /></fr:link> should admit a ‘straightening’), via a 3-morphism arising ambiently from the structure of the higher category itself, which we call a higher-dimensional coherence.
      There is an infinite sequence of such phenomena, in all dimensions, known as <html:em>catastrophes</html:em> from their study in manifold theory.
      <fr:link href="/coherent-inverses-applications-catastrophes/" title="Coherent inverses in higher-categorical string diagrams › Applications › Higher-dimensional catastrophes arising from a dualisable 1-morphism" uri="https://forest.nickx.hu/coherent-inverses-applications-catastrophes/" display-uri="coherent-inverses-applications-catastrophes" type="local">section <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-applications-catastrophes/" display-uri="coherent-inverses-applications-catastrophes" /></fr:link> explores some of higher-dimensional coherences in low dimensions in more detail.
      Any higher-dimensional computer algebra system must have a solution to this problem in order to implement a satisfactory theory of inverses.
    </html:p><html:p>
      We approach this in <html:span tex="\homotopyio{}"><fr:link href="/homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories/" title="homotopy.io: a proof assistant for finitely-presented globular $n$-categories" uri="https://forest.nickx.hu/homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories/" display-uri="homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories" type="local"><html:code>homotopy.io</html:code></fr:link></html:span> by considering what the inverse of a morphism (or more generally: an <fr:tex display="inline"><![CDATA[n]]></fr:tex>-dimensional string diagram) should look like and deducing what its combinatorial representation, as alluded to in <fr:link href="/coherent-inverses-combinatorial-foundation/" title="Coherent inverses in higher-categorical string diagrams › Introduction › Combinatorial foundation" uri="https://forest.nickx.hu/coherent-inverses-combinatorial-foundation/" display-uri="coherent-inverses-combinatorial-foundation" type="local">section <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-combinatorial-foundation/" display-uri="coherent-inverses-combinatorial-foundation" /></fr:link>, should be.
      Diagrammatically, at the level of <fr:tex display="inline"><![CDATA[1]]></fr:tex>-morphisms, <fr:tex display="inline"><![CDATA[f]]></fr:tex> and <fr:tex display="inline"><![CDATA[{f}^{-1}]]></fr:tex> admit string diagrammatic representations in a 1D diagrammatic calculus as in <fr:link href="/coherent-inverses-ILG4/" title="Morphisms as 1D string diagrams" uri="https://forest.nickx.hu/coherent-inverses-ILG4/" display-uri="coherent-inverses-ILG4" type="local">figure <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-ILG4/" display-uri="coherent-inverses-ILG4" /></fr:link>, where the <fr:tex display="inline"><![CDATA[f]]></fr:tex> is represented by the yellow point, <fr:tex display="inline"><![CDATA[x]]></fr:tex> is represented by the blue wire, and <fr:tex display="inline"><![CDATA[y]]></fr:tex> is represented by the red wire.
      Composition in this diagrammatic calculus is given by juxtaposition along the vertical axis.
    </html:p><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2025</fr:year><fr:month>1</fr:month><fr:day>15</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-ILG4/</fr:uri><fr:display-uri>coherent-inverses-ILG4</fr:display-uri><fr:route>/coherent-inverses-ILG4/</fr:route><fr:title text="Morphisms as 1D string diagrams">Morphisms as 1D string diagrams</fr:title><fr:taxon>figure</fr:taxon></fr:frontmatter><fr:mainmatter><html:figure><html:figure><fr:resource hash="3f6536277188f5a71749cc6679c8bf7e"><fr:resource-content><html:img src="/3f6536277188f5a71749cc6679c8bf7e.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[\usepackage {adjustbox,tikz}]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
            \begin{adjustbox}{max width=0.3\textwidth}
      \begin{tikzpicture}[baseline=(current bounding box.center)]
      \definecolor{generator-2-1-0-pos}{RGB}{243, 156, 18}
      \definecolor{generator-0-0-0-pos}{RGB}{41, 128, 185}
      \definecolor{generator-1-0-0-pos}{RGB}{192, 57, 43}
      \begin{scope}
      % Background surfaces
      % Wire layers
      \draw[color=generator-0-0-0-pos, line width=5pt](0.5,0) -- (0.5,2);
      \draw[color=generator-1-0-0-pos, line width=5pt](0.5,2) -- (0.5,4);
      \end{scope}
      \fill[generator-2-1-0-pos] (0.5,2) circle (0.14);
      \end{tikzpicture}
      \end{adjustbox}
    ]]></fr:resource-source></fr:resource>
    <html:figcaption><fr:tex display="inline"><![CDATA[{x \xrightarrow {f} y}]]></fr:tex></html:figcaption></html:figure>
  <html:figure><fr:resource hash="b61cd9332fd01c47261580fbbd2ca7c3"><fr:resource-content><html:img src="/b61cd9332fd01c47261580fbbd2ca7c3.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[\usepackage {adjustbox,tikz}]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
            \begin{adjustbox}{max width=0.3\textwidth}
      \begin{tikzpicture}[baseline=(current bounding box.center)]
      \definecolor{generator-2-1-0-neg}{RGB}{166, 105, 8}
      \definecolor{generator-0-0-0-pos}{RGB}{41, 128, 185}
      \definecolor{generator-1-0-0-pos}{RGB}{192, 57, 43}
      \begin{scope}
      % Background surfaces
      % Wire layers
      \draw[color=generator-0-0-0-pos, line width=5pt](0.5,2) -- (0.5,4);
      \draw[color=generator-1-0-0-pos, line width=5pt](0.5,0) -- (0.5,2);
      \end{scope}
      \fill[generator-2-1-0-neg] (0.5,2) circle (0.14);
      \end{tikzpicture}
      \end{adjustbox}
    ]]></fr:resource-source></fr:resource>
    <html:figcaption><fr:tex display="inline"><![CDATA[{y \xrightarrow {{f}^{-1}} x}]]></fr:tex></html:figcaption></html:figure></html:figure></fr:mainmatter></fr:tree><html:p>
      This suggests that the inverse of <fr:tex display="inline"><![CDATA[f]]></fr:tex> should look like a ‘reflection’ of <fr:tex display="inline"><![CDATA[f]]></fr:tex>, with respect to that axis.
      When we consider the combinatorial encodings of <fr:tex display="inline"><![CDATA[f]]></fr:tex>, which is given by
      <fr:tex display="block"><![CDATA[
        x \to  f \leftarrow  y,
      ]]></fr:tex>
      the natural analogue for <fr:tex display="inline"><![CDATA[{f}^{-1}]]></fr:tex> is
      <fr:tex display="block"><![CDATA[
        y \to  f \leftarrow  x,
      ]]></fr:tex>
      distinguishing the left leg of the cospan from the right (we have rotated the axis of composition with respect to <fr:link href="/coherent-inverses-ILG4/" title="Morphisms as 1D string diagrams" uri="https://forest.nickx.hu/coherent-inverses-ILG4/" display-uri="coherent-inverses-ILG4" type="local">figure <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-ILG4/" display-uri="coherent-inverses-ILG4" /></fr:link> to save space).
      Crucially, we do not use a formal ‘<fr:tex display="inline"><![CDATA[{f}^{-1}]]></fr:tex>’ token here: we know that infinitely many higher morphisms are required to witness that this inverse is coherent, but the structure of any such coherence is arbitrarily complex and it seems intractible to encode this in this way.
    </html:p><html:p>
      A problem arises if instead we had taken some endomorphism <fr:tex display="inline"><![CDATA[{x \xrightarrow {e} x}]]></fr:tex>, a perfectly valid 1-morphism algebraically, instead of <fr:tex display="inline"><![CDATA[f]]></fr:tex> (i.e. forcing <fr:tex display="inline"><![CDATA[y = x]]></fr:tex>): in this instance, both <fr:tex display="inline"><![CDATA[e]]></fr:tex> and its inverse <fr:tex display="inline"><![CDATA[{x \xrightarrow {{e}^{-1}} x}]]></fr:tex> would admit combinatorial representations that coincide as
      <fr:tex display="block"><![CDATA[
        x \to  e \leftarrow  x.
      ]]></fr:tex>
      We solve this by equipping to each arrow <fr:tex display="inline"><![CDATA[x \to  e]]></fr:tex> some data that carries its intrinsic direction, which we call a <fr:link href="/coherent-inverses-US67/" title="signature and framing" uri="https://forest.nickx.hu/coherent-inverses-US67/" display-uri="coherent-inverses-US67" type="local">frame</fr:link>:
      <fr:tex display="block"><![CDATA[
        x \xrightarrow {e_{r_0}} e \xleftarrow {e_{r_1}} x,
        \quad  \text {versus} \quad 
        x \xrightarrow {e_{r_1}} e \xleftarrow {e_{r_0}} x,
      ]]></fr:tex>
      encoding <fr:tex display="inline"><![CDATA[e]]></fr:tex> and <fr:tex display="inline"><![CDATA[{e}^{-1}]]></fr:tex> respectively, using formal tokens <fr:tex display="inline"><![CDATA[e_{r_0}]]></fr:tex> and <fr:tex display="inline"><![CDATA[e_{r_1}]]></fr:tex>.
      We call this extended structure a <fr:link href="/coherent-inverses-XQVM/" title="framed zigzag enriched category" uri="https://forest.nickx.hu/coherent-inverses-XQVM/" display-uri="coherent-inverses-XQVM" type="local">framed zigzag</fr:link>, and <fr:link href="/coherent-inverses-framed-zigzags/" title="Coherent inverses in higher-categorical string diagrams › Framed zigzag enriched categories" uri="https://forest.nickx.hu/coherent-inverses-framed-zigzags/" display-uri="coherent-inverses-framed-zigzags" type="local">chapter <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-framed-zigzags/" display-uri="coherent-inverses-framed-zigzags" /></fr:link> constructs this categorically using techniques from enriched category theory.
    </html:p></fr:mainmatter></fr:tree><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2023</fr:year><fr:month>12</fr:month><fr:day>3</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-overview/</fr:uri><fr:display-uri>coherent-inverses-overview</fr:display-uri><fr:route>/coherent-inverses-overview/</fr:route><fr:title text="Overview">Overview</fr:title><fr:taxon>section</fr:taxon></fr:frontmatter><fr:mainmatter><html:p><fr:link href="/coherent-inverses-background/" title="Coherent inverses in higher-categorical string diagrams › Background" uri="https://forest.nickx.hu/coherent-inverses-background/" display-uri="coherent-inverses-background" type="local">chapter <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-background/" display-uri="coherent-inverses-background" /></fr:link> presents some general category theory required to understand this thesis, although more specialist topics are introduced within their respective chapters when called upon.
      Basic category theory, along with some enriched category theory, is assumed throughout.
      A good reference can be found in <html:span class="textual" uid="basic-category-theory"><fr:link href="/basic-category-theory/" title="Basic Category Theory" uri="https://forest.nickx.hu/basic-category-theory/" display-uri="basic-category-theory" type="local">[basic-category-theory]</fr:link></html:span> for the former, and <html:span class="textual" uid="basic-concepts-of-enriched-category-theory"><fr:link href="/basic-concepts-of-enriched-category-theory/" title="Basic concepts of enriched category theory" uri="https://forest.nickx.hu/basic-concepts-of-enriched-category-theory/" display-uri="basic-concepts-of-enriched-category-theory" type="local">[basic-concepts-of-enriched-category-theory]</fr:link></html:span> for the latter.
      Familiarity with string diagrams (e.g. for monoidal categories) will also be helpful; see <html:span class="textual" uid="a-survey-of-graphical-languages-for-monoidal-categories"><fr:link href="/a-survey-of-graphical-languages-for-monoidal-categories/" title="A survey of graphical languages for monoidal categories" uri="https://forest.nickx.hu/a-survey-of-graphical-languages-for-monoidal-categories/" display-uri="a-survey-of-graphical-languages-for-monoidal-categories" type="local">[a-survey-of-graphical-languages-for-monoidal-categories]</fr:link></html:span>, or <html:span class="textual" uid="categories-for-quantum-theory-an-introduction"><fr:link href="/categories-for-quantum-theory-an-introduction/" title="Categories for Quantum Theory: An Introduction" uri="https://forest.nickx.hu/categories-for-quantum-theory-an-introduction/" display-uri="categories-for-quantum-theory-an-introduction" type="local">[categories-for-quantum-theory-an-introduction]</fr:link></html:span> for a textbook account.
    </html:p><html:p><fr:link href="/coherent-inverses-framed-zigzags/" title="Coherent inverses in higher-categorical string diagrams › Framed zigzag enriched categories" uri="https://forest.nickx.hu/coherent-inverses-framed-zigzags/" display-uri="coherent-inverses-framed-zigzags" type="local">chapter <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-framed-zigzags/" display-uri="coherent-inverses-framed-zigzags" /></fr:link> presents <fr:link href="/coherent-inverses-UGIR/" title="zigzag category" uri="https://forest.nickx.hu/coherent-inverses-UGIR/" display-uri="coherent-inverses-UGIR" type="local">zigzag categories</fr:link>, and their enhancement as <fr:link href="/coherent-inverses-XQVM/" title="framed zigzag enriched category" uri="https://forest.nickx.hu/coherent-inverses-XQVM/" display-uri="coherent-inverses-XQVM" type="local">framed zigzag enriched categories</fr:link>, which is our main categorical arena of study in this thesis.
      This begins with a review of the basic notion already present in the literature (<html:span uid="high-level-methods-for-homotopy-construction-in-associative-n-categories"><fr:link href="/high-level-methods-for-homotopy-construction-in-associative-n-categories/" title="High-level methods for homotopy construction in associative $n$-categories" uri="https://forest.nickx.hu/high-level-methods-for-homotopy-construction-in-associative-n-categories/" display-uri="high-level-methods-for-homotopy-construction-in-associative-n-categories" type="local">[high-level-methods-for-homotopy-construction-in-associative-n-categories]</fr:link></html:span>, <html:span uid="zigzag-normalisation-for-associative-n-categories"><fr:link href="/zigzag-normalisation-for-associative-n-categories/" title="Zigzag normalisation for associative $n$-categories" uri="https://forest.nickx.hu/zigzag-normalisation-for-associative-n-categories/" display-uri="zigzag-normalisation-for-associative-n-categories" type="local">[zigzag-normalisation-for-associative-n-categories]</fr:link></html:span>, <html:span uid="a-layout-algorithm-for-higher-dimensional-string-diagrams"><fr:link href="/a-layout-algorithm-for-higher-dimensional-string-diagrams/" title="A layout algorithm for higher-dimensional string diagrams" uri="https://forest.nickx.hu/a-layout-algorithm-for-higher-dimensional-string-diagrams/" display-uri="a-layout-algorithm-for-higher-dimensional-string-diagrams" type="local">[a-layout-algorithm-for-higher-dimensional-string-diagrams]</fr:link></html:span>), and goes on to develop their extension into <fr:link href="/coherent-inverses-XQVM/" title="framed zigzag enriched category" uri="https://forest.nickx.hu/coherent-inverses-XQVM/" display-uri="coherent-inverses-XQVM" type="local">framed zigzag enriched categories</fr:link>.
      We do this by capturing the notion as a <fr:link href="/coherent-inverses-2H06/" title="parametric right adjoint" uri="https://forest.nickx.hu/coherent-inverses-2H06/" display-uri="coherent-inverses-2H06" type="local">parametric right adjoint</fr:link> arising from an <fr:link href="/coherent-inverses-XIP0/" title="essentially algebraic theory" uri="https://forest.nickx.hu/coherent-inverses-XIP0/" display-uri="coherent-inverses-XIP0" type="local">essentially algebraic theory</fr:link>, which we interpret in <fr:tex display="inline"><![CDATA[\wedge \mathbf {Lat}]]></fr:tex>-enriched categories, in turn determining its universal properties.
    </html:p><html:p><fr:link href="/coherent-inverses-collapse/" title="Coherent inverses in higher-categorical string diagrams › Collapsing framed zigzags" uri="https://forest.nickx.hu/coherent-inverses-collapse/" display-uri="coherent-inverses-collapse" type="local">chapter <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-collapse/" display-uri="coherent-inverses-collapse" /></fr:link> shows how to extend the <fr:link href="/coherent-inverses-FHS4/" title="contraction" uri="https://forest.nickx.hu/coherent-inverses-FHS4/" display-uri="coherent-inverses-FHS4" type="local">contraction algorithm</fr:link> <html:span tid="§ 3" uid="high-level-methods-for-homotopy-construction-in-associative-n-categories"><fr:link href="/high-level-methods-for-homotopy-construction-in-associative-n-categories/" title="High-level methods for homotopy construction in associative $n$-categories" uri="https://forest.nickx.hu/high-level-methods-for-homotopy-construction-in-associative-n-categories/" display-uri="high-level-methods-for-homotopy-construction-in-associative-n-categories" type="local">[§ 3, high-level-methods-for-homotopy-construction-in-associative-n-categories]</fr:link></html:span> to <fr:link href="/coherent-inverses-XQVM/" title="framed zigzag enriched category" uri="https://forest.nickx.hu/coherent-inverses-XQVM/" display-uri="coherent-inverses-XQVM" type="local">framed zigzag enriched categories</fr:link>, and determines its base case as a kind of <fr:link href="/coherent-inverses-KV1B/" title="weighted colimit" uri="https://forest.nickx.hu/coherent-inverses-KV1B/" display-uri="coherent-inverses-KV1B" type="local">weighted colimit</fr:link> procedure that uses the additional structure afforded to us by enrichment.
      We use this to present a correctness argument for our extended <fr:link href="/coherent-inverses-FHS4/" title="contraction" uri="https://forest.nickx.hu/coherent-inverses-FHS4/" display-uri="coherent-inverses-FHS4" type="local">algorithm</fr:link>.
    </html:p><html:p><fr:link href="/coherent-inverses-implementation/" title="Coherent inverses in higher-categorical string diagrams › Implementation" uri="https://forest.nickx.hu/coherent-inverses-implementation/" display-uri="coherent-inverses-implementation" type="local">chapter <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-implementation/" display-uri="coherent-inverses-implementation" /></fr:link> provides an overview of the implementation of <html:span tex="\homotopyio{}"><fr:link href="/homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories/" title="homotopy.io: a proof assistant for finitely-presented globular $n$-categories" uri="https://forest.nickx.hu/homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories/" display-uri="homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories" type="local"><html:code>homotopy.io</html:code></fr:link></html:span>, which implements the theory as a web-based graphical proof assistant.
      We describe some of the practical engineering considerations that went into the design of the system, and some of the other mechanisms necessary to provide a usable tool for <fr:tex display="inline"><![CDATA[n]]></fr:tex>-dimensional string diagrammatic reasoning.
    </html:p><html:p><fr:link href="/coherent-inverses-applications/" title="Coherent inverses in higher-categorical string diagrams › Applications" uri="https://forest.nickx.hu/coherent-inverses-applications/" display-uri="coherent-inverses-applications" type="local">chapter <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-applications/" display-uri="coherent-inverses-applications" /></fr:link> presents several case studies that demonstrate the utility of coherently invertible generators within <html:span tex="\homotopyio{}"><fr:link href="/homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories/" title="homotopy.io: a proof assistant for finitely-presented globular $n$-categories" uri="https://forest.nickx.hu/homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories/" display-uri="homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories" type="local"><html:code>homotopy.io</html:code></fr:link></html:span>, showcasing newly formalised results that leverage this additional functionality.
      Additionally, this presents empirical evidence that our construction has good properties.
    </html:p></fr:mainmatter></fr:tree><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2023</fr:year><fr:month>12</fr:month><fr:day>3</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-related/</fr:uri><fr:display-uri>coherent-inverses-related</fr:display-uri><fr:route>/coherent-inverses-related/</fr:route><fr:title text="Related work">Related work</fr:title><fr:taxon>section</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
      The topic of this thesis is part of a larger research programme regarding <html:span tex="\homotopyio{}"><fr:link href="/homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories/" title="homotopy.io: a proof assistant for finitely-presented globular $n$-categories" uri="https://forest.nickx.hu/homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories/" display-uri="homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories" type="local"><html:code>homotopy.io</html:code></fr:link></html:span> as a proof assistant for higher-categorical string diagrams, initiated in <html:span class="textual" uid="associative-n-categories"><fr:link href="/associative-n-categories/" title="Associative n-categories" uri="https://forest.nickx.hu/associative-n-categories/" display-uri="associative-n-categories" type="local">[associative-n-categories]</fr:link></html:span> and <html:span class="textual" uid="high-level-methods-for-homotopy-construction-in-associative-n-categories"><fr:link href="/high-level-methods-for-homotopy-construction-in-associative-n-categories/" title="High-level methods for homotopy construction in associative $n$-categories" uri="https://forest.nickx.hu/high-level-methods-for-homotopy-construction-in-associative-n-categories/" display-uri="high-level-methods-for-homotopy-construction-in-associative-n-categories" type="local">[high-level-methods-for-homotopy-construction-in-associative-n-categories]</fr:link></html:span>, a successor project to the <fr:link href="/globular-an-online-proof-assistant-for-higher-dimensional-rewriting/" title="Globular: an online proof assistant for higher-dimensional rewriting" uri="https://forest.nickx.hu/globular-an-online-proof-assistant-for-higher-dimensional-rewriting/" display-uri="globular-an-online-proof-assistant-for-higher-dimensional-rewriting" type="local"><html:em>Globular</html:em> proof assistant</fr:link>.
      The foundational mechanism underlying <html:em>Globular</html:em> is that of manually encoding coherences for a semistrict version of tetracategories, so it is fundamentally limited to <fr:tex display="inline"><![CDATA[n]]></fr:tex>-categories for <fr:tex display="inline"><![CDATA[n \leq  4]]></fr:tex>, as opposed to <html:span tex="\homotopyio{}"><fr:link href="/homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories/" title="homotopy.io: a proof assistant for finitely-presented globular $n$-categories" uri="https://forest.nickx.hu/homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories/" display-uri="homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories" type="local"><html:code>homotopy.io</html:code></fr:link></html:span>, which works for arbitrary <fr:tex display="inline"><![CDATA[n]]></fr:tex>.
      Moreover, <html:em>Globular</html:em> possessed invertibility functionality, which <html:span tex="\homotopyio{}"><fr:link href="/homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories/" title="homotopy.io: a proof assistant for finitely-presented globular $n$-categories" uri="https://forest.nickx.hu/homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories/" display-uri="homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories" type="local"><html:code>homotopy.io</html:code></fr:link></html:span> lacked prior to this work; however, this was based on a coinductive but <html:strong>incoherent</html:strong> notion, so lacked the good properties of <fr:link href="/coherent-inverses-invertibility/" title="Coherent inverses in higher-categorical string diagrams › Introduction › Coherent invertibility" uri="https://forest.nickx.hu/coherent-inverses-invertibility/" display-uri="coherent-inverses-invertibility" type="local">section <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-invertibility/" display-uri="coherent-inverses-invertibility" /></fr:link>.
    </html:p><html:p>
      A complement to this thesis is the work of <html:span class="textual" uid="a-computational-approach-to-higher-categories"><fr:link href="/a-computational-approach-to-higher-categories/" title="A computational approach to higher categories" uri="https://forest.nickx.hu/a-computational-approach-to-higher-categories/" display-uri="a-computational-approach-to-higher-categories" type="local">[a-computational-approach-to-higher-categories]</fr:link></html:span>, which details the underlying theory and implementation of separate aspects of <html:span tex="\homotopyio{}"><fr:link href="/homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories/" title="homotopy.io: a proof assistant for finitely-presented globular $n$-categories" uri="https://forest.nickx.hu/homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories/" display-uri="homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories" type="local"><html:code>homotopy.io</html:code></fr:link></html:span>.
      This includes the rendering subsystem for <fr:link href="/a-layout-algorithm-for-higher-dimensional-string-diagrams/" title="A layout algorithm for higher-dimensional string diagrams" uri="https://forest.nickx.hu/a-layout-algorithm-for-higher-dimensional-string-diagrams/" display-uri="a-layout-algorithm-for-higher-dimensional-string-diagrams" type="local">drawing higher-dimensional string diagrams</fr:link>, and some <fr:link href="/the-theory-and-applications-of-anticolimits/" title="The theory and applications of anticolimits" uri="https://forest.nickx.hu/the-theory-and-applications-of-anticolimits/" display-uri="the-theory-and-applications-of-anticolimits" type="local">theory</fr:link> underlying an extended expansion algorithm dual to our <fr:link href="/coherent-inverses-FHS4/" title="contraction" uri="https://forest.nickx.hu/coherent-inverses-FHS4/" display-uri="coherent-inverses-FHS4" type="local">contraction algorithm</fr:link>.
      <html:span class="textual" uid="homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories"><fr:link href="/homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories/" title="homotopy.io: a proof assistant for finitely-presented globular $n$-categories" uri="https://forest.nickx.hu/homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories/" display-uri="homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories" type="local">[homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories]</fr:link></html:span> is an implementation paper that gives an overview of <html:span tex="\homotopyio{}"><fr:link href="/homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories/" title="homotopy.io: a proof assistant for finitely-presented globular $n$-categories" uri="https://forest.nickx.hu/homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories/" display-uri="homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories" type="local"><html:code>homotopy.io</html:code></fr:link></html:span> from a practical perspective.
    </html:p><html:p>
      On the side of theory, the notion of <fr:link href="/coherent-inverses-UGIR/" title="zigzag category" uri="https://forest.nickx.hu/coherent-inverses-UGIR/" display-uri="coherent-inverses-UGIR" type="local">zigzag category</fr:link> was introduced in <html:span class="textual" uid="high-level-methods-for-homotopy-construction-in-associative-n-categories"><fr:link href="/high-level-methods-for-homotopy-construction-in-associative-n-categories/" title="High-level methods for homotopy construction in associative $n$-categories" uri="https://forest.nickx.hu/high-level-methods-for-homotopy-construction-in-associative-n-categories/" display-uri="high-level-methods-for-homotopy-construction-in-associative-n-categories" type="local">[high-level-methods-for-homotopy-construction-in-associative-n-categories]</fr:link></html:span>.
      <html:span class="textual" uid="zigzag-normalisation-for-associative-n-categories"><fr:link href="/zigzag-normalisation-for-associative-n-categories/" title="Zigzag normalisation for associative $n$-categories" uri="https://forest.nickx.hu/zigzag-normalisation-for-associative-n-categories/" display-uri="zigzag-normalisation-for-associative-n-categories" type="local">[zigzag-normalisation-for-associative-n-categories]</fr:link></html:span> outlines a (now defunct) procedure for normalisation of <fr:link href="/coherent-inverses-UGIR/" title="zigzag category" uri="https://forest.nickx.hu/coherent-inverses-UGIR/" display-uri="coherent-inverses-UGIR" type="local">zigzags</fr:link>, which was formerly used for typechecking.
      <html:span class="textual" uid="posetal-diagrams-for-logically-structured-semistrict-higher-categories"><fr:link href="/posetal-diagrams-for-logically-structured-semistrict-higher-categories/" title="Posetal Diagrams for Logically-Structured Semistrict Higher Categories" uri="https://forest.nickx.hu/posetal-diagrams-for-logically-structured-semistrict-higher-categories/" display-uri="posetal-diagrams-for-logically-structured-semistrict-higher-categories" type="local">[posetal-diagrams-for-logically-structured-semistrict-higher-categories]</fr:link></html:span> presents a generalisation of the <fr:link href="/coherent-inverses-UGIR/" title="zigzag category" uri="https://forest.nickx.hu/coherent-inverses-UGIR/" display-uri="coherent-inverses-UGIR" type="local">zigzag</fr:link> construction, orthogonal to ours, to posets in place of the finite linear orders (the augmented simplex category <fr:tex display="inline"><![CDATA[{\mathbf {\Delta }_+}]]></fr:tex>), with an eye toward providing behaviour to support categorical limit constructions in <html:span tex="\homotopyio{}"><fr:link href="/homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories/" title="homotopy.io: a proof assistant for finitely-presented globular $n$-categories" uri="https://forest.nickx.hu/homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories/" display-uri="homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories" type="local"><html:code>homotopy.io</html:code></fr:link></html:span> — although such a theory models something that is necessarily much more general than a string diagram.
      <html:span class="textual" uid="manifold-diagrams-for-higher-categories"><fr:link href="/manifold-diagrams-for-higher-categories/" title="Manifold Diagrams for Higher Categories" uri="https://forest.nickx.hu/manifold-diagrams-for-higher-categories/" display-uri="manifold-diagrams-for-higher-categories" type="local">[manifold-diagrams-for-higher-categories]</fr:link></html:span> is a recasting of this theory into more <fr:tex display="inline"><![CDATA[(\infty , 1)]]></fr:tex>-categorical language in order to formalise the connection between our notions of ‘diagram’ and ‘homotopy’ to their mathematical analogues — in essence, providing a kind of <fr:link href="/the-geometry-of-tensor-calculus-i/" title="The geometry of tensor calculus, I" uri="https://forest.nickx.hu/the-geometry-of-tensor-calculus-i/" display-uri="the-geometry-of-tensor-calculus-i" type="local">Joyal-Street-esque</fr:link> result establishing the connection between this work and models of <fr:tex display="inline"><![CDATA[(\infty , n)]]></fr:tex>-categories.
    </html:p><html:p>
      With respect to string-diagrammatic tooling, most tools exist to support various theories of monoidal categories, rather than adopting the higher-categorical perspective that <html:span tex="\homotopyio{}"><fr:link href="/homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories/" title="homotopy.io: a proof assistant for finitely-presented globular $n$-categories" uri="https://forest.nickx.hu/homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories/" display-uri="homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories" type="local"><html:code>homotopy.io</html:code></fr:link></html:span> and <html:em>Globular</html:em> take.
      A notable exception is the <fr:link href="/data-structures-for-topologically-sound-higher-dimensional-diagram-rewriting/" title="Data Structures for Topologically Sound Higher-Dimensional Diagram Rewriting" uri="https://forest.nickx.hu/data-structures-for-topologically-sound-higher-dimensional-diagram-rewriting/" display-uri="data-structures-for-topologically-sound-higher-dimensional-diagram-rewriting" type="local"><html:em>rewalt</html:em> toolkit</fr:link>, which is built on the theory of <fr:link href="/diagrammatic-sets-and-rewriting-in-weak-higher-categories/" title="Diagrammatic sets and rewriting in weak higher categories" uri="https://forest.nickx.hu/diagrammatic-sets-and-rewriting-in-weak-higher-categories/" display-uri="diagrammatic-sets-and-rewriting-in-weak-higher-categories" type="local">diagrammatic sets</fr:link>.
      This uses a different approach for semistrictness: rather than Gray semistrictness with strict associators and unitors and weak interchange, which <html:span tex="\homotopyio{}"><fr:link href="/homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories/" title="homotopy.io: a proof assistant for finitely-presented globular $n$-categories" uri="https://forest.nickx.hu/homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories/" display-uri="homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories" type="local"><html:code>homotopy.io</html:code></fr:link></html:span> is based on, <html:em>rewalt</html:em> is based on so-called ‘Simpson semistrictness’, which has strict interchange and weak unitors instead.
      As a result of this difference, the resulting theory of string diagrams is quite different in each tool.
      Another difference is that <html:em>rewalt</html:em> is more like a software library than an interactive graphical program, where user interaction is code-based as opposed to clicking-and-dragging on various pictures.
      A further summary of tools for string diagrams can be found in <html:span class="textual" tid="§ 1.2" uid="homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories"><fr:link href="/homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories/" title="homotopy.io: a proof assistant for finitely-presented globular $n$-categories" uri="https://forest.nickx.hu/homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories/" display-uri="homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories" type="local">[§ 1.2, homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories]</fr:link></html:span>.
    </html:p><html:p>
      Yet another approach to computational methods for higher categories is via a type-theoretic presentation, in the form of the type theory <fr:link href="/a-type-theoretical-definition-of-weak-%CF%89-categories/" title="A Type-Theoretical Definition of Weak \omega -Categories" uri="https://forest.nickx.hu/a-type-theoretical-definition-of-weak-ω-categories/" display-uri="a-type-theoretical-definition-of-weak-ω-categories" type="local">CaTT</fr:link>.
      Semistrict variations of CaTT, which are more closely related to the kind of higher category presented by <html:span tex="\homotopyio{}"><fr:link href="/homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories/" title="homotopy.io: a proof assistant for finitely-presented globular $n$-categories" uri="https://forest.nickx.hu/homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories/" display-uri="homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories" type="local"><html:code>homotopy.io</html:code></fr:link></html:span>, have also been studied in <html:span class="textual" uid="a-type-theory-for-strictly-unital-∞-categories"><fr:link href="/a-type-theory-for-strictly-unital-%E2%88%9E-categories/" title="A Type Theory for Strictly Unital \infty -Categories" uri="https://forest.nickx.hu/a-type-theory-for-strictly-unital-∞-categories/" display-uri="a-type-theory-for-strictly-unital-∞-categories" type="local">[a-type-theory-for-strictly-unital-∞-categories]</fr:link></html:span> and <html:span class="textual" uid="a-syntax-for-strictly-associative-and-unital-∞-categories"><fr:link href="/a-syntax-for-strictly-associative-and-unital-%E2%88%9E-categories/" title="A Syntax for Strictly Associative and Unital \infty -Categories" uri="https://forest.nickx.hu/a-syntax-for-strictly-associative-and-unital-∞-categories/" display-uri="a-syntax-for-strictly-associative-and-unital-∞-categories" type="local">[a-syntax-for-strictly-associative-and-unital-∞-categories]</fr:link></html:span>, and further elaborated in the thesis <html:span class="textual" uid="a-type-theoretic-approach-to-semistrict-higher-categories"><fr:link href="https://forest.nickx.hu/a-type-theoretic-approach-to-semistrict-higher-categories/" type="external">[a-type-theoretic-approach-to-semistrict-higher-categories]</fr:link></html:span>.
      A definition for what it means for a cell to be invertible in this framework is given by <html:span class="textual" uid="invertible-cells-in-ω-categories"><fr:link href="/invertible-cells-in-%CF%89-categories/" title="Invertible cells in \omega -categories" uri="https://forest.nickx.hu/invertible-cells-in-ω-categories/" display-uri="invertible-cells-in-ω-categories" type="local">[invertible-cells-in-ω-categories]</fr:link></html:span>, but higher coherences are not addressed.
    </html:p></fr:mainmatter></fr:tree><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2023</fr:year><fr:month>12</fr:month><fr:day>3</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-meta/</fr:uri><fr:display-uri>coherent-inverses-meta</fr:display-uri><fr:route>/coherent-inverses-meta/</fr:route><fr:title text="Meta">Meta</fr:title><fr:taxon>section</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
      This document is available in two formats: an online version, available at <fr:link href="https://nickx.hu/thesis" type="external">https://nickx.hu/thesis</fr:link>, and in PDF form.
      Throughout, many technical terms are hyperlinked to their definitions.
    </html:p><html:p>
      The source code for the accompanying software, <html:span tex="\homotopyio{}"><fr:link href="/homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories/" title="homotopy.io: a proof assistant for finitely-presented globular $n$-categories" uri="https://forest.nickx.hu/homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories/" display-uri="homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories" type="local"><html:code>homotopy.io</html:code></fr:link></html:span>, is available at <fr:link href="https://github.com/homotopy-io/homotopy-rs" type="external">https://github.com/homotopy-io/homotopy-rs</fr:link>.
    </html:p></fr:mainmatter></fr:tree></fr:mainmatter></fr:tree><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2023</fr:year><fr:month>12</fr:month><fr:day>3</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-background/</fr:uri><fr:display-uri>coherent-inverses-background</fr:display-uri><fr:route>/coherent-inverses-background/</fr:route><fr:title text="Background">Background</fr:title><fr:taxon>chapter</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
    Throughout this thesis, we assume a basic understanding of category theory and familiarity with string diagrams as a means to present morphisms of some kind of higher category, especially for <fr:link href="/coherent-inverses-framed-zigzags/" title="Coherent inverses in higher-categorical string diagrams › Framed zigzag enriched categories" uri="https://forest.nickx.hu/coherent-inverses-framed-zigzags/" display-uri="coherent-inverses-framed-zigzags" type="local">chapter <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-framed-zigzags/" display-uri="coherent-inverses-framed-zigzags" /></fr:link> and <fr:link href="/coherent-inverses-collapse/" title="Coherent inverses in higher-categorical string diagrams › Collapsing framed zigzags" uri="https://forest.nickx.hu/coherent-inverses-collapse/" display-uri="coherent-inverses-collapse" type="local">chapter <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-collapse/" display-uri="coherent-inverses-collapse" /></fr:link>.
    <fr:link href="/coherent-inverses-implementation/" title="Coherent inverses in higher-categorical string diagrams › Implementation" uri="https://forest.nickx.hu/coherent-inverses-implementation/" display-uri="coherent-inverses-implementation" type="local">chapter <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-implementation/" display-uri="coherent-inverses-implementation" /></fr:link> is best appreciated with some understanding of programming, but no specialist knowledge is required.
    A similar sentiment holds for <fr:link href="/coherent-inverses-applications/" title="Coherent inverses in higher-categorical string diagrams › Applications" uri="https://forest.nickx.hu/coherent-inverses-applications/" display-uri="coherent-inverses-applications" type="local">chapter <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-applications/" display-uri="coherent-inverses-applications" /></fr:link>, but for low-dimensional topology instead.
    These chapters can be read fairly independently from the rest of the thesis, for the reader who is more interested in the implementation of a proof assistant or using <html:span tex="\homotopyio{}"><fr:link href="/homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories/" title="homotopy.io: a proof assistant for finitely-presented globular $n$-categories" uri="https://forest.nickx.hu/homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories/" display-uri="homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories" type="local"><html:code>homotopy.io</html:code></fr:link></html:span> as a string diagram tool than its underlying theory.
  </html:p>
    
    
    <fr:tree show-metadata="false" toc="false" numbered="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2023</fr:year><fr:month>12</fr:month><fr:day>3</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-notation/</fr:uri><fr:display-uri>coherent-inverses-notation</fr:display-uri><fr:route>/coherent-inverses-notation/</fr:route><fr:taxon>notation</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
        Every (enriched) category is assumed to be strict and small (often finite), unless otherwise specified, which means that its objects form a set and can be compared for equality.
        As such, we will deemphasise size issues, as is typical; in our constructions, the usual considerations apply without needing to be explicit, and thus distracting from the technical point to be made.
        Categories (and enriched categories) are typically denoted by calligraphic script, e.g. <fr:tex display="inline"><![CDATA[\mathcal {C}]]></fr:tex>, and objects and morphisms are typically denoted by lowercase script, e.g. <fr:tex display="inline"><![CDATA[x]]></fr:tex> and <fr:tex display="inline"><![CDATA[f]]></fr:tex> respectively, with uppercase script (e.g. <fr:tex display="inline"><![CDATA[F]]></fr:tex>) denoting (enriched) functors.
        A notable exception is we will often use <fr:tex display="inline"><![CDATA[J]]></fr:tex> in ordinary script to denote the (enriched) category which is the index of a diagram, an (enriched) functor, to connote that it is built out of a small (usually finite) amount of generating data.
        
        Morphisms are given diagrammatically as <fr:tex display="inline"><![CDATA[{x \xrightarrow {f} y}]]></fr:tex>, and our string diagrams are to be read bottom-up, left-to-right.
        In the context of higher categorical concepts, we use the terms ‘<fr:tex display="inline"><![CDATA[n]]></fr:tex>-cell’ and ‘<fr:tex display="inline"><![CDATA[n]]></fr:tex>-morphism’ interchangeably, although the former with slightly more emphasis on the <html:em>model</html:em> of the higher category (e.g. in <html:span tex="\homotopyio{}"><fr:link href="/homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories/" title="homotopy.io: a proof assistant for finitely-presented globular $n$-categories" uri="https://forest.nickx.hu/homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories/" display-uri="homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories" type="local"><html:code>homotopy.io</html:code></fr:link></html:span>) as opposed to the higher category itself, and the double-tailed arrow <fr:tex display="inline"><![CDATA[\Rightarrow ]]></fr:tex> is used for 2-morphisms.
        <fr:tex display="inline"><![CDATA[\mathbf {0}]]></fr:tex> and <fr:tex display="inline"><![CDATA[\mathbf {1}]]></fr:tex> denote initial and terminal objects, and (sometimes with some overlap) <fr:tex display="inline"><![CDATA[[n]]]></fr:tex> denotes the <fr:tex display="inline"><![CDATA[n]]></fr:tex>-simplex: the finite linear order <fr:tex display="inline"><![CDATA[\set {i \in  \mathbb {N} \mid  0 \leq  i \leq  n}]]></fr:tex>; by confusing convention, this means that <fr:tex display="inline"><![CDATA[n \in  [n]]]></fr:tex> and <fr:tex display="inline"><![CDATA[\lvert  [n] \rvert  = n + 1]]></fr:tex> in contrast to the von Neumann ordinals, and the <fr:tex display="inline"><![CDATA[(-1)]]></fr:tex>-simplex <fr:tex display="inline"><![CDATA[[-1]]]></fr:tex> denotes the empty set.
        Whenever we index over the natural numbers, we begin at 0.
      </html:p></fr:mainmatter></fr:tree>
  <html:p>
    The rest of the categorical preliminaries follow.
  </html:p><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>9</fr:month><fr:day>26</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-AOTF/</fr:uri><fr:display-uri>coherent-inverses-AOTF</fr:display-uri><fr:route>/coherent-inverses-AOTF/</fr:route><fr:title text="Sliced adjunctions">Sliced adjunctions</fr:title><fr:taxon>lemma</fr:taxon><fr:meta name="source"><fr:link href="https://ncatlab.org/nlab/show/adjoint+functorOnSlices" type="external">nLab</fr:link></fr:meta></fr:frontmatter><fr:mainmatter><html:p>
  Let
  
  
  
  <html:figure><fr:resource hash="3da84e233e71005bd3766e9c37455511"><fr:resource-content><html:img src="/3da84e233e71005bd3766e9c37455511.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[
       \usepackage{amsmath,amssymb}
  \usepackage{mathtools}
  \usepackage{stmaryrd}
  \newcommand{\set}[1]{\left\{#1\right\}}
     \usepackage {tikz}
     \usetikzlibrary {cd}
     \usetikzlibrary {}
     
  \definecolor {green}{RGB}{27,158,119}
  \definecolor {orange}{RGB}{217,95,2}
  \definecolor {purple}{RGB}{117,112,179}

     
    ]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
      \begin {tikzcd}[]
         \mathcal {D}
          \ar [r, shift left=1ex, phantom, "", ""'{name=UL}]
          \ar [r, shift right=1ex, , "R"', ""{name=UR}]
        & \mathcal {C}
          \ar [l, shift left=1ex, phantom, "", ""'{name=DL}]
          \ar [l, shift right=1ex, , "L"', ""{name=DR}]
        \ar [from=UL, to=DL, "", phantom]
        \ar [from=UR, to=DR, "\dashv ", phantom, sloped] 
      \end {tikzcd}
    ]]></fr:resource-source></fr:resource></html:figure>



  be an adjunction.
</html:p><html:p>
  Then for any object <fr:tex display="inline"><![CDATA[d \in  \mathcal {D}]]></fr:tex>, there is an adjunction
  
  
  
  <html:figure><fr:resource hash="320a4cc755886e43f37550a500e4f10a"><fr:resource-content><html:img src="/320a4cc755886e43f37550a500e4f10a.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[
       \usepackage{amsmath,amssymb}
  \usepackage{mathtools}
  \usepackage{stmaryrd}
  \newcommand{\set}[1]{\left\{#1\right\}}
     \usepackage {tikz}
     \usetikzlibrary {cd}
     \usetikzlibrary {}
     
  \definecolor {green}{RGB}{27,158,119}
  \definecolor {orange}{RGB}{217,95,2}
  \definecolor {purple}{RGB}{117,112,179}

     
    ]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
      \begin {tikzcd}[]
         \mathcal {D} / d
          \ar [r, shift left=1ex, phantom, "", ""'{name=UL}]
          \ar [r, shift right=1ex, , "R / d"', ""{name=UR}]
        & \mathcal {C} / R d
          \ar [l, shift left=1ex, phantom, "", ""'{name=DL}]
          \ar [l, shift right=1ex, , "L / d"', ""{name=DR}]
        \ar [from=UL, to=DL, "", phantom]
        \ar [from=UR, to=DR, "\dashv ", phantom, sloped] 
      \end {tikzcd}
    ]]></fr:resource-source></fr:resource></html:figure>



  where <fr:tex display="inline"><![CDATA[R / d]]></fr:tex> is given by applying <fr:tex display="inline"><![CDATA[R]]></fr:tex>, and
  <fr:tex display="block"><![CDATA[
    L / d \left ( \substack {c\\\downarrow  p\\R d} \right ) \coloneqq  L c \xrightarrow {L p} L R d \xrightarrow {\varepsilon _d} d.
  ]]></fr:tex></html:p><html:p>
  Dually, in the case that <fr:tex display="inline"><![CDATA[\mathcal {C}]]></fr:tex> has pullbacks, for any object <fr:tex display="inline"><![CDATA[c \in  \mathcal {C}]]></fr:tex>, there is an adjunction
  
  
  
  <html:figure><fr:resource hash="a88c78e9e89b37fb61be48feddfcfec3"><fr:resource-content><html:img src="/a88c78e9e89b37fb61be48feddfcfec3.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[
       \usepackage{amsmath,amssymb}
  \usepackage{mathtools}
  \usepackage{stmaryrd}
  \newcommand{\set}[1]{\left\{#1\right\}}
     \usepackage {tikz}
     \usetikzlibrary {cd}
     \usetikzlibrary {}
     
  \definecolor {green}{RGB}{27,158,119}
  \definecolor {orange}{RGB}{217,95,2}
  \definecolor {purple}{RGB}{117,112,179}

     
    ]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
      \begin {tikzcd}[]
         \mathcal {D} / L c
          \ar [r, shift left=1ex, phantom, "", ""'{name=UL}]
          \ar [r, shift right=1ex, , "R / c"', ""{name=UR}]
        & \mathcal {C} / c
          \ar [l, shift left=1ex, phantom, "", ""'{name=DL}]
          \ar [l, shift right=1ex, , "L / c"', ""{name=DR}]
        \ar [from=UL, to=DL, "", phantom]
        \ar [from=UR, to=DR, "\dashv ", phantom, sloped] 
      \end {tikzcd}
    ]]></fr:resource-source></fr:resource></html:figure>



  where <fr:tex display="inline"><![CDATA[L / c]]></fr:tex> is given by applying <fr:tex display="inline"><![CDATA[L]]></fr:tex>, and
  <fr:tex display="block"><![CDATA[
    R / c \left ( \substack {d\\\downarrow  q\\L c} \right ) \coloneqq  \eta _c^* \left ( R d \xrightarrow {R q} R L c \right ) ,
  ]]></fr:tex>
  given by pullback along the unit of the adjunction.
</html:p></fr:mainmatter></fr:tree><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>6</fr:month><fr:day>11</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-JCFF/</fr:uri><fr:display-uri>coherent-inverses-JCFF</fr:display-uri><fr:route>/coherent-inverses-JCFF/</fr:route><fr:title text="Terminal object of a slice category">Terminal object of a slice category</fr:title><fr:taxon>lemma</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
  In a slice category <fr:tex display="inline"><![CDATA[\mathcal {C} / X]]></fr:tex>, the terminal object is <fr:tex display="inline"><![CDATA[X]]></fr:tex> equipped with the identity on <fr:tex display="inline"><![CDATA[X]]></fr:tex>.
</html:p>
 
   
   <fr:tree show-metadata="false" toc="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>6</fr:month><fr:day>11</fr:day></fr:date><fr:taxon>proof</fr:taxon></fr:frontmatter><fr:mainmatter>
  Every object <fr:tex display="inline"><![CDATA[{Y \xrightarrow {f} X}]]></fr:tex> of <fr:tex display="inline"><![CDATA[\mathcal {C} / X]]></fr:tex> is in bijection with a commuting triangle
  
  
  
  <html:figure><fr:resource hash="1c365efd6b12785a5d1b2357ab587aa0"><fr:resource-content><html:img src="/1c365efd6b12785a5d1b2357ab587aa0.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[
       \usepackage{amsmath,amssymb}
  \usepackage{mathtools}
  \usepackage{stmaryrd}
  \newcommand{\set}[1]{\left\{#1\right\}}
     \usepackage {tikz}
     \usetikzlibrary {cd}
     \usetikzlibrary {}
     
  \definecolor {green}{RGB}{27,158,119}
  \definecolor {orange}{RGB}{217,95,2}
  \definecolor {purple}{RGB}{117,112,179}

     
    ]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
      \begin {tikzcd}[]
    Y \ar [rd, "f"'] \ar [r, "f"] & X \ar [d, equals] \\
    & X.
  \end {tikzcd}
    ]]></fr:resource-source></fr:resource></html:figure>



</fr:mainmatter></fr:tree>
 
</fr:mainmatter></fr:tree><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2025</fr:year><fr:month>5</fr:month><fr:day>23</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-ATG5/</fr:uri><fr:display-uri>coherent-inverses-ATG5</fr:display-uri><fr:route>/coherent-inverses-ATG5/</fr:route><fr:title text="category of elements"><fr:link href="/coherent-inverses-ATG5/" title="category of elements" uri="https://forest.nickx.hu/coherent-inverses-ATG5/" display-uri="coherent-inverses-ATG5" type="local">category of elements</fr:link></fr:title><fr:taxon>definition</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
  Let <fr:tex display="inline"><![CDATA[{{\mathcal {C}}^\mathrm {op} \xrightarrow {X} \mathbf {Set}}]]></fr:tex> be a presheaf.
  The <fr:link href="/coherent-inverses-ATG5/" title="category of elements" uri="https://forest.nickx.hu/coherent-inverses-ATG5/" display-uri="coherent-inverses-ATG5" type="local">category of elements</fr:link> <fr:tex display="inline"><![CDATA[{\textstyle  \int  X}]]></fr:tex> is defined by
  <html:dl>
    <html:dt>objects</html:dt>
    <html:dd>
      <html:p>
        for objects <fr:tex display="inline"><![CDATA[c]]></fr:tex> of <fr:tex display="inline"><![CDATA[\mathcal {C}]]></fr:tex>, pairs <fr:tex display="inline"><![CDATA[(c, x \in  X (c))]]></fr:tex>;
      </html:p>
    </html:dd>
    <html:dt>morphisms</html:dt>
    <html:dd>
      <html:p>
        
        morphisms <fr:tex display="inline"><![CDATA[{c \xrightarrow {f} c^\prime }]]></fr:tex> of <fr:tex display="inline"><![CDATA[\mathcal {C}]]></fr:tex> satisfying <fr:tex display="inline"><![CDATA[X (f) (x) = x^\prime ]]></fr:tex> for <fr:tex display="inline"><![CDATA[(c, x \in  X (c)) \to  (c^\prime , x^\prime  \in  X (c^\prime ))]]></fr:tex>,
      </html:p>
    </html:dd>
    with composition inherited from <fr:tex display="inline"><![CDATA[\mathcal {C}]]></fr:tex>.
  </html:dl>
  
  This gives rise to a forgetful functor <fr:tex display="inline"><![CDATA[{{\textstyle  \int  X} \xrightarrow {\pi _{X}} {\mathcal {C}}^\mathrm {op}}]]></fr:tex> onto the first component of the pair.
</html:p></fr:mainmatter></fr:tree><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>6</fr:month><fr:day>11</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-8OTN/</fr:uri><fr:display-uri>coherent-inverses-8OTN</fr:display-uri><fr:route>/coherent-inverses-8OTN/</fr:route><fr:title text="Slice of a presheaf category is a presheaf category">Slice of a presheaf category is a presheaf category</fr:title><fr:taxon>lemma</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
  Let <fr:tex display="inline"><![CDATA[{{\mathcal {C}}^\mathrm {op} \xrightarrow {X} \mathbf {Set}}]]></fr:tex> be a presheaf in <fr:tex display="inline"><![CDATA[\hat {\mathcal {C}}]]></fr:tex>.
  There is an equivalence of categories
  <fr:tex display="block"><![CDATA[
    \hat {\mathcal {C}} / X \cong  \hat {{\textstyle  \int  X}},
  ]]></fr:tex>
  where <fr:tex display="inline"><![CDATA[{\textstyle  \int  X}]]></fr:tex> denotes the <fr:link href="/coherent-inverses-ATG5/" title="category of elements" uri="https://forest.nickx.hu/coherent-inverses-ATG5/" display-uri="coherent-inverses-ATG5" type="local">category of elements</fr:link> of <fr:tex display="inline"><![CDATA[X]]></fr:tex>.
</html:p></fr:mainmatter></fr:tree><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2023</fr:year><fr:month>12</fr:month><fr:day>3</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-enriched-category-theory/</fr:uri><fr:display-uri>coherent-inverses-enriched-category-theory</fr:display-uri><fr:route>/coherent-inverses-enriched-category-theory/</fr:route><fr:title text="Enriched category theory">Enriched category theory</fr:title><fr:taxon>section</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
      Here, we will introduce some basic concepts of enriched category theory.
      The standard reference is <html:span class="textual" uid="basic-concepts-of-enriched-category-theory"><fr:link href="/basic-concepts-of-enriched-category-theory/" title="Basic concepts of enriched category theory" uri="https://forest.nickx.hu/basic-concepts-of-enriched-category-theory/" display-uri="basic-concepts-of-enriched-category-theory" type="local">[basic-concepts-of-enriched-category-theory]</fr:link></html:span>, for the case of enriching over <fr:tex display="inline"><![CDATA[\mathcal {V}]]></fr:tex> symmetric monoidal closed, but a more modern and condensed treatment (specialised to enriching over <fr:tex display="inline"><![CDATA[\mathcal {V}]]></fr:tex> cartesian closed, with which we are mostly concerned) can be found in <html:span class="textual" tid="Appendix A" uid="elements-of-∞-category-theory"><fr:link href="/elements-of-%E2%88%9E-category-theory/" title="Elements of ∞-Category Theory" uri="https://forest.nickx.hu/elements-of-∞-category-theory/" display-uri="elements-of-∞-category-theory" type="local">[Appendix A, elements-of-∞-category-theory]</fr:link></html:span>.
      A slight generalisation of this notion, which we occasionally make use of, is enrichment over an arbitrary symmetric monoidal category (which is not required to be closed); an account of this can be found in <html:span class="textual" tid="Chapter 3" uid="categorical-homotopy-theory"><fr:link href="/categorical-homotopy-theory/" title="Categorical Homotopy Theory" uri="https://forest.nickx.hu/categorical-homotopy-theory/" display-uri="categorical-homotopy-theory" type="local">[Chapter 3, categorical-homotopy-theory]</fr:link></html:span>.
      We will mostly ignore the technical details of this generalisation, as everything works as one might expect, and they are not relevant to the main thrust of this work.
    </html:p><html:p>
      Some attention is required for the notion of a <fr:link href="/coherent-inverses-4OUN/" title="change of base" uri="https://forest.nickx.hu/coherent-inverses-4OUN/" display-uri="coherent-inverses-4OUN" type="local">change of base</fr:link> for enriched categories, as we frequently make use of the idea that <fr:tex display="inline"><![CDATA[\mathbf {Pos}]]></fr:tex>-enriched categories are a ‘shadow’ of 2-categories (<fr:tex display="inline"><![CDATA[\mathbf {Cat}]]></fr:tex>-enriched categories).
    </html:p><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>9</fr:month><fr:day>1</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-4OUN/</fr:uri><fr:display-uri>coherent-inverses-4OUN</fr:display-uri><fr:route>/coherent-inverses-4OUN/</fr:route><fr:title text="change of base"><fr:link href="/coherent-inverses-4OUN/" title="change of base" uri="https://forest.nickx.hu/coherent-inverses-4OUN/" display-uri="coherent-inverses-4OUN" type="local">change of base</fr:link></fr:title><fr:taxon>lemma</fr:taxon><fr:meta name="source"><html:span tid="Lemma 3.4.3" uid="categorical-homotopy-theory"><fr:link href="/categorical-homotopy-theory/" title="Categorical Homotopy Theory" uri="https://forest.nickx.hu/categorical-homotopy-theory/" display-uri="categorical-homotopy-theory" type="local">[Lemma 3.4.3, categorical-homotopy-theory]</fr:link></html:span></fr:meta></fr:frontmatter><fr:mainmatter><html:p>
  Let <fr:tex display="inline"><![CDATA[{\mathcal {V} \xrightarrow {N} \mathcal {W}}]]></fr:tex> be a lax monoidal functor.
  There is an induced 2-functor <fr:tex display="inline"><![CDATA[{\mathcal {V}{-}\mathbf {Cat} \xrightarrow {N_*} \mathcal {W}{-}\mathbf {Cat}}]]></fr:tex>, called <fr:link href="/coherent-inverses-4OUN/" title="change of base" uri="https://forest.nickx.hu/coherent-inverses-4OUN/" display-uri="coherent-inverses-4OUN" type="local">change of base</fr:link> (along <fr:tex display="inline"><![CDATA[N]]></fr:tex>), which takes a <fr:tex display="inline"><![CDATA[\mathcal {V}]]></fr:tex>-category <fr:tex display="inline"><![CDATA[\mathcal {C}]]></fr:tex> to a <fr:tex display="inline"><![CDATA[\mathcal {W}]]></fr:tex>-category <fr:tex display="inline"><![CDATA[N_* (\mathcal {C})]]></fr:tex>.
</html:p><html:p>
  Moreover, <fr:tex display="inline"><![CDATA[N_*]]></fr:tex> is an adjunction of 2-categories if and only if <fr:tex display="inline"><![CDATA[N]]></fr:tex> is a monoidal adjunction, if and only if it is strong monoidal, and admits a right adjoint as a functor.
</html:p><html:p>
  Explicitly, the objects of <fr:tex display="inline"><![CDATA[N_* (\mathcal {C})]]></fr:tex> are the same as those of <fr:tex display="inline"><![CDATA[\mathcal {C}]]></fr:tex>, and the morphisms are given by
  <fr:tex display="block"><![CDATA[
    N_* (\mathcal {C}) (X, Y) \coloneqq  N (\mathcal {C} (X, Y)),
  ]]></fr:tex>
  where the composition, identity, and associator and unitor morphisms are inherited from the monoidal structure of <fr:tex display="inline"><![CDATA[N]]></fr:tex>.
</html:p>
 
   
   <fr:tree show-metadata="false" toc="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>9</fr:month><fr:day>1</fr:day></fr:date><fr:taxon>proof</fr:taxon></fr:frontmatter><fr:mainmatter>
  <html:p>
    The idea that such an assignment extends to a 2-functor is alluded to by <html:span class="textual" tid="Remark 3.5.11" uid="categorical-homotopy-theory"><fr:link href="/categorical-homotopy-theory/" title="Categorical Homotopy Theory" uri="https://forest.nickx.hu/categorical-homotopy-theory/" display-uri="categorical-homotopy-theory" type="local">[Remark 3.5.11, categorical-homotopy-theory]</fr:link></html:span>, but a detailed proof can be found in <html:span class="textual" uid="normed-spaces-and-the-change-of-base-for-enriched-categories"><fr:link href="/normed-spaces-and-the-change-of-base-for-enriched-categories/" title="Normed Spaces and the Change of Base for Enriched Categories" uri="https://forest.nickx.hu/normed-spaces-and-the-change-of-base-for-enriched-categories/" display-uri="normed-spaces-and-the-change-of-base-for-enriched-categories" type="local">[normed-spaces-and-the-change-of-base-for-enriched-categories]</fr:link></html:span>.
  </html:p>
</fr:mainmatter></fr:tree>
 
</fr:mainmatter></fr:tree><html:p>
      Among other things, this allows us to create more elaborate enriched categorical structure from functors in ordinary category theory.
    </html:p><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2023</fr:year><fr:month>12</fr:month><fr:day>3</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-2-categorical-reflections/</fr:uri><fr:display-uri>coherent-inverses-2-categorical-reflections</fr:display-uri><fr:route>/coherent-inverses-2-categorical-reflections/</fr:route><fr:title text="Reflections of 2-categorical structure">Reflections of 2-categorical structure</fr:title><fr:taxon>section</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
        First, we examine the relationship between categories and partially ordered sets, which themselves can be seen as a special case of categories.
      </html:p><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>9</fr:month><fr:day>1</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-22AL/</fr:uri><fr:display-uri>coherent-inverses-22AL</fr:display-uri><fr:route>/coherent-inverses-22AL/</fr:route><fr:title text="\mathbf {Pos}, the category of partially ordered sets (posets) and monotone functions"><fr:tex display="inline"><![CDATA[\mathbf {Pos}]]></fr:tex>, the category of partially ordered sets (posets) and monotone functions</fr:title><fr:taxon>definition</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
  The locally small category <fr:tex display="inline"><![CDATA[\mathbf {Pos}]]></fr:tex> has small posets as objects and monotone functions as morphisms.
</html:p></fr:mainmatter></fr:tree><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>9</fr:month><fr:day>1</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-ZC3N/</fr:uri><fr:display-uri>coherent-inverses-ZC3N</fr:display-uri><fr:route>/coherent-inverses-ZC3N/</fr:route><fr:title text="\mathbf {Pos} is cartesian closed"><fr:tex display="inline"><![CDATA[\mathbf {Pos}]]></fr:tex> is cartesian closed</fr:title><fr:taxon>lemma</fr:taxon></fr:frontmatter><fr:mainmatter><html:p><fr:tex display="inline"><![CDATA[\mathbf {Pos}]]></fr:tex> is a cartesian closed category, where the cartesian product of two posets is their cartesian product as sets, with the product order:
  <fr:tex display="block"><![CDATA[
    (P, \leq _P) \times  (Q, \leq _Q) \coloneqq  (P \times  Q, (p, q) \leq _{P \times  Q} (p^\prime , q^\prime ) \iff  p \leq _P p^\prime  \land  q \leq _Q q^\prime ).
  ]]></fr:tex></html:p><html:p>
  The exponential object of two posets is their exponential object as sets, with the pointwise order:
  <fr:tex display="block"><![CDATA[
    [(P, \leq _P), (Q, \leq _Q)] \coloneqq  ([P, Q], f \leq _{[P, Q]} g \iff  \forall  p \in  P, f(p) \leq _Q g(p)).
  ]]></fr:tex></html:p>
 
   
   <fr:tree show-metadata="false" toc="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>9</fr:month><fr:day>1</fr:day></fr:date><fr:taxon>proof</fr:taxon></fr:frontmatter><fr:mainmatter>
  
  
  
  <html:p>
    For the closure, we must establish an adjunction
    
  
  
  <html:figure><fr:resource hash="b5bdd2c0308177f33f8d23db3dd7e609"><fr:resource-content><html:img src="/b5bdd2c0308177f33f8d23db3dd7e609.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[
       \usepackage{amsmath,amssymb}
  \usepackage{mathtools}
  \usepackage{stmaryrd}
  \newcommand{\set}[1]{\left\{#1\right\}}
     \usepackage {tikz}
     \usetikzlibrary {cd}
     \usetikzlibrary {}
     
  \definecolor {green}{RGB}{27,158,119}
  \definecolor {orange}{RGB}{217,95,2}
  \definecolor {purple}{RGB}{117,112,179}

     
    ]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
      \begin {tikzcd}[]
         \mathbf {Pos}
          \ar [r, shift left=1ex, , "- \times  P", ""'{name=UL}]
          \ar [r, shift right=1ex, phantom, ""', ""{name=UR}]
        & \mathbf {Pos}.
          \ar [l, shift left=1ex, , "{[P, -]}", ""'{name=DL}]
          \ar [l, shift right=1ex, phantom, ""', ""{name=DR}]
        \ar [from=UL, to=DL, "", phantom]
        \ar [from=UR, to=DR, "\vdash ", phantom, sloped] 
      \end {tikzcd}
    ]]></fr:resource-source></fr:resource></html:figure>



    That is, a bijection of Hom sets:
    <fr:tex display="block"><![CDATA[
      \mathbf {Pos} (R \times  P, Q) \cong  \mathbf {Pos} (R, [P, Q]).
    ]]></fr:tex></html:p>
  <html:p>
    We can work out the structure of what <fr:tex display="inline"><![CDATA[[P, Q]]]></fr:tex> must be by letting <fr:tex display="inline"><![CDATA[R = \mathbf {1}]]></fr:tex>, the terminal object of <fr:tex display="inline"><![CDATA[\mathbf {Pos}]]></fr:tex>, to probe its elements, and <fr:tex display="inline"><![CDATA[R = \mathbf {2}]]></fr:tex>, the poset <fr:tex display="inline"><![CDATA[\set {0 \leq  1}]]></fr:tex>, to probe its order.
    Then deduce that
    <fr:tex display="block"><![CDATA[
      \mathbf {Pos} (P, Q) \cong  \mathbf {Pos} (\mathbf {1} \times  P, Q) \cong  \mathbf {Pos} (\mathbf {1}, [P, Q]) \cong  \mathbf {Pos} (P, Q),
    ]]></fr:tex>
    and hence the elements of the poset <fr:tex display="inline"><![CDATA[[P, Q]]]></fr:tex> are monotone functions <fr:tex display="inline"><![CDATA[P \to  Q]]></fr:tex>.
    Finally,
    <fr:tex display="block"><![CDATA[
       \mathbf {Pos} (\mathbf {2} \times  P, Q) \cong  \mathbf {Pos} (\mathbf {2}, [P, Q])
    ]]></fr:tex>
    tells us that for <fr:tex display="inline"><![CDATA[f, g \in  [P, Q]]]></fr:tex>, <fr:tex display="inline"><![CDATA[f \leq  g]]></fr:tex> if and only if <fr:tex display="inline"><![CDATA[\forall  p \in  P, f(p) \leq  g(p)]]></fr:tex>.
  </html:p>
</fr:mainmatter></fr:tree>
 
</fr:mainmatter></fr:tree><html:p>
        We note that <fr:tex display="inline"><![CDATA[\mathbf {Pos}]]></fr:tex> is a Bénabou cosmos: in addition to <fr:link href="/coherent-inverses-ZC3N/" title="\mathbf {Pos} is cartesian closed" uri="https://forest.nickx.hu/coherent-inverses-ZC3N/" display-uri="coherent-inverses-ZC3N" type="local">being cartesian closed</fr:link>, it is also complete and cocomplete.
        This makes <fr:tex display="inline"><![CDATA[\mathbf {Pos}]]></fr:tex> a good category to enrich over, and due to closure every poset can be naturally seen as a <fr:tex display="inline"><![CDATA[\mathbf {Pos}]]></fr:tex>-category, i.e. the category <fr:tex display="inline"><![CDATA[\mathbf {Pos}]]></fr:tex> is enriched over itself.
      </html:p><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>9</fr:month><fr:day>1</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-0X39/</fr:uri><fr:display-uri>coherent-inverses-0X39</fr:display-uri><fr:route>/coherent-inverses-0X39/</fr:route><fr:title text="\mathbf {Pos} is self-enriched"><fr:tex display="inline"><![CDATA[\mathbf {Pos}]]></fr:tex> is self-enriched</fr:title><fr:taxon>lemma</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
  The set of monotone maps between two posets is itself a poset.
</html:p>
 
   
   <fr:tree show-metadata="false" toc="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>9</fr:month><fr:day>1</fr:day></fr:date><fr:taxon>proof</fr:taxon></fr:frontmatter><fr:mainmatter>
  <html:p>
    This is true for any cartesian closed category <html:span tid="§ 1.6" uid="basic-concepts-of-enriched-category-theory"><fr:link href="/basic-concepts-of-enriched-category-theory/" title="Basic concepts of enriched category theory" uri="https://forest.nickx.hu/basic-concepts-of-enriched-category-theory/" display-uri="basic-concepts-of-enriched-category-theory" type="local">[§ 1.6, basic-concepts-of-enriched-category-theory]</fr:link></html:span>, and in particular for <fr:tex display="inline"><![CDATA[\mathbf {Pos}]]></fr:tex> (<fr:link href="/coherent-inverses-ZC3N/" title="\mathbf {Pos} is cartesian closed" uri="https://forest.nickx.hu/coherent-inverses-ZC3N/" display-uri="coherent-inverses-ZC3N" type="local">lemma <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-ZC3N/" display-uri="coherent-inverses-ZC3N" /></fr:link>).
  </html:p>
  <html:p>
    Explicitly, the set <fr:tex display="inline"><![CDATA[\mathbf {Pos} (P, Q)]]></fr:tex> of monotone maps between two posets <fr:tex display="inline"><![CDATA[P]]></fr:tex> and <fr:tex display="inline"><![CDATA[Q]]></fr:tex> is equipped with the pointwise order: <fr:tex display="inline"><![CDATA[f \leq  g \in  \mathbf {Pos} (P, Q)]]></fr:tex> whenever <fr:tex display="inline"><![CDATA[f(x) \leq  g(x)]]></fr:tex> for all <fr:tex display="inline"><![CDATA[p \in  P]]></fr:tex>.
  </html:p>
</fr:mainmatter></fr:tree>
 
</fr:mainmatter></fr:tree><html:p>
        We also note that there is a precise sense in which a poset is a special kind of category, characterised by the following universal property.
      </html:p><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>9</fr:month><fr:day>1</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-ZEVP/</fr:uri><fr:display-uri>coherent-inverses-ZEVP</fr:display-uri><fr:route>/coherent-inverses-ZEVP/</fr:route><fr:title text="\mathbf {Pos} is a reflective subcategory of \mathbf {Cat}"><fr:tex display="inline"><![CDATA[\mathbf {Pos}]]></fr:tex> is a reflective subcategory of <fr:tex display="inline"><![CDATA[\mathbf {Cat}]]></fr:tex></fr:title><fr:taxon>proposition</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
  The inclusion functor <fr:tex display="inline"><![CDATA[{\mathbf {Pos} \overset {i}{\hookrightarrow } \mathbf {Cat}}]]></fr:tex>, which takes every poset to a thin category, admits a left adjoint
  
  
  
  <html:figure><fr:resource hash="75afa54bc4d0520f8136d6bcc34a6935"><fr:resource-content><html:img src="/75afa54bc4d0520f8136d6bcc34a6935.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[
       \usepackage{amsmath,amssymb}
  \usepackage{mathtools}
  \usepackage{stmaryrd}
  \newcommand{\set}[1]{\left\{#1\right\}}
     \usepackage {tikz}
     \usetikzlibrary {cd}
     \usetikzlibrary {}
     
  \definecolor {green}{RGB}{27,158,119}
  \definecolor {orange}{RGB}{217,95,2}
  \definecolor {purple}{RGB}{117,112,179}

     
    ]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
      \begin {tikzcd}[]
         \mathbf {Pos}
          \ar [r, shift left=1ex, phantom, "", ""'{name=UL}]
          \ar [r, shift right=1ex, hookrightarrow, "i"', ""{name=UR}]
        & \mathbf {Cat}.
          \ar [l, shift left=1ex, phantom, "", ""'{name=DL}]
          \ar [l, shift right=1ex, , "F"', ""{name=DR}]
        \ar [from=UL, to=DL, "", phantom]
        \ar [from=UR, to=DR, "\dashv ", phantom, sloped] 
      \end {tikzcd}
    ]]></fr:resource-source></fr:resource></html:figure></html:p>
 
   
   <fr:tree show-metadata="false" toc="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>9</fr:month><fr:day>1</fr:day></fr:date><fr:taxon>proof</fr:taxon></fr:frontmatter><fr:mainmatter>
  <html:p>
    Define the functor <fr:tex display="inline"><![CDATA[F]]></fr:tex> by its action on small categories <fr:tex display="inline"><![CDATA[\mathcal {C}]]></fr:tex>, with <fr:tex display="inline"><![CDATA[F (\mathcal {C})]]></fr:tex> being the poset of bidirected cliques of objects in <fr:tex display="inline"><![CDATA[\mathcal {C}]]></fr:tex>: maximal subsets of objects with the property that there is a morphism between every object, in both directions.
    In other words, the elements of <fr:tex display="inline"><![CDATA[F (\mathcal {C})]]></fr:tex> are the objects of <fr:tex display="inline"><![CDATA[\mathcal {C}]]></fr:tex>, and the order relation is given by the existence of a morphism between them.
  </html:p>
  <html:p>
    This determines a bijection of Hom sets
    <fr:tex display="block"><![CDATA[
      \mathbf {Pos} (F (\mathcal {C}), P) \cong  \mathbf {Cat} (\mathcal {C}, i (P))
    ]]></fr:tex>
    because a functor <fr:tex display="inline"><![CDATA[\mathcal {C} \to  i (P)]]></fr:tex> is determined by its object map, which maps objects of <fr:tex display="inline"><![CDATA[\mathcal {C}]]></fr:tex> to elements of <fr:tex display="inline"><![CDATA[P]]></fr:tex> (the morphism map is uniquely determined by thinness); this is precisely the data of a monotone map between bidirected cliques of objects of <fr:tex display="inline"><![CDATA[\mathcal {C}]]></fr:tex> and elements of <fr:tex display="inline"><![CDATA[P]]></fr:tex>.
  </html:p>
</fr:mainmatter></fr:tree>
 
</fr:mainmatter></fr:tree><html:p>
        It is precisely the fact that <fr:tex display="inline"><![CDATA[F]]></fr:tex> in <fr:link href="/coherent-inverses-ZEVP/" title="\mathbf {Pos} is a reflective subcategory of \mathbf {Cat}" uri="https://forest.nickx.hu/coherent-inverses-ZEVP/" display-uri="coherent-inverses-ZEVP" type="local">proposition <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-ZEVP/" display-uri="coherent-inverses-ZEVP" /></fr:link> is a strong monoidal (in this case, finite-product-preserving) functor that allows us to see a <fr:tex display="inline"><![CDATA[\mathbf {Pos}]]></fr:tex>-category as some kind of posetal reflection of a 2-category.
      </html:p><html:p>
        This also formally presents the sense in which a poset is a ‘shadow’ of a category.
        We can also think about the concept of ‘localisation’ in a poset, which is more explicit than its categorical analogue (because morphisms are <html:em>property</html:em> not <html:em>structure</html:em>).
      </html:p><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>9</fr:month><fr:day>5</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-72BQ/</fr:uri><fr:display-uri>coherent-inverses-72BQ</fr:display-uri><fr:route>/coherent-inverses-72BQ/</fr:route><fr:title text="Localisation of a poset"><fr:link href="/coherent-inverses-72BQ/" title="Localisation of a poset" uri="https://forest.nickx.hu/coherent-inverses-72BQ/" display-uri="coherent-inverses-72BQ" type="local">Localisation of a poset</fr:link></fr:title><fr:taxon>definition</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
  Given some poset <fr:tex display="inline"><![CDATA[P]]></fr:tex> and elements <fr:tex display="inline"><![CDATA[p \leq  p^\prime  \in  P]]></fr:tex>, the <fr:link href="/coherent-inverses-72BQ/" title="Localisation of a poset" uri="https://forest.nickx.hu/coherent-inverses-72BQ/" display-uri="coherent-inverses-72BQ" type="local">poset localisation</fr:link> of <fr:tex display="inline"><![CDATA[P]]></fr:tex> at <fr:tex display="inline"><![CDATA[p \leq  p^\prime ]]></fr:tex> is the poset <fr:tex display="inline"><![CDATA[P [{\set {p \leq  p^\prime }}^{-1}]]]></fr:tex> induced by adjoining <fr:tex display="inline"><![CDATA[p^\prime  \leq  p]]></fr:tex> to <fr:tex display="inline"><![CDATA[P]]></fr:tex>.
  Explicitly, <fr:tex display="inline"><![CDATA[P [{\set {p \leq  p^\prime }}^{-1}]]]></fr:tex> is a quotient of <fr:tex display="inline"><![CDATA[P]]></fr:tex> where every <fr:tex display="inline"><![CDATA[q \in  P]]></fr:tex> such that <fr:tex display="inline"><![CDATA[p \leq  q \leq  p^\prime ]]></fr:tex> is identified.
</html:p><html:p>
  This notion naturally extends to a class of orderings <fr:tex display="inline"><![CDATA[W]]></fr:tex> for which we write <fr:tex display="inline"><![CDATA[P [{W}^{-1}]]]></fr:tex>.
</html:p></fr:mainmatter></fr:tree><html:p>
        Moreover, we have two ways to turn a <fr:tex display="inline"><![CDATA[\mathbf {Pos}]]></fr:tex>-category into a category.
      </html:p><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>11</fr:month><fr:day>2</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-ZGDQ/</fr:uri><fr:display-uri>coherent-inverses-ZGDQ</fr:display-uri><fr:route>/coherent-inverses-ZGDQ/</fr:route><fr:title text="The free \mathbf {Pos}-category functor \mathbf {Cat} \xrightarrow {i} \mathbf {PosCat} is left and right adjoint">The free <fr:tex display="inline"><![CDATA[\mathbf {Pos}]]></fr:tex>-category functor <fr:tex display="inline"><![CDATA[\mathbf {Cat} \xrightarrow {i} \mathbf {PosCat}]]></fr:tex> is left and right adjoint</fr:title><fr:taxon>lemma</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
  There is an adjunction
  
  
  
  <html:figure><fr:resource hash="dca5a2390bffb84f4015cfe42c4056fa"><fr:resource-content><html:img src="/dca5a2390bffb84f4015cfe42c4056fa.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[
       \usepackage{amsmath,amssymb}
  \usepackage{mathtools}
  \usepackage{stmaryrd}
  \newcommand{\set}[1]{\left\{#1\right\}}
     \usepackage {tikz}
     \usetikzlibrary {cd}
     \usetikzlibrary {}
     
  \definecolor {green}{RGB}{27,158,119}
  \definecolor {orange}{RGB}{217,95,2}
  \definecolor {purple}{RGB}{117,112,179}

     
    ]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
      \begin {tikzcd}[]
    \mathbf {Cat} \ar [r, hookrightarrow, "i"{name=i, description}] & \mathbf {PosCat} \ar [l, "\pi _0"', ""{name=L}, shift right=3ex] \ar [l, ""'{name=R}, "U", shift left=3ex] ,
    \ar [from=R, to=i, phantom, "\vdash " sloped]
    \ar [from=i, to=L, phantom, "\vdash " sloped]
  \end {tikzcd}
    ]]></fr:resource-source></fr:resource></html:figure>



  where <fr:tex display="inline"><![CDATA[i]]></fr:tex> sends a category to a <fr:tex display="inline"><![CDATA[\mathbf {Pos}]]></fr:tex>-category with only trivial 2-cell filler (i.e. <fr:tex display="inline"><![CDATA[f \leq  g \iff  f = g]]></fr:tex>), <fr:tex display="inline"><![CDATA[\pi _0]]></fr:tex> sends a <fr:tex display="inline"><![CDATA[\mathbf {Pos}]]></fr:tex>-category to a category, quotienting morphisms by connected components in Hom posets, and <fr:tex display="inline"><![CDATA[U]]></fr:tex> does so similarly by forgetting all 2-cell fillers.
</html:p>
 
   
   <fr:tree show-metadata="false" toc="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>11</fr:month><fr:day>2</fr:day></fr:date><fr:taxon>proof</fr:taxon></fr:frontmatter><fr:mainmatter>
  <html:p>
    This arises as due to the adjoint triple
    
  
  
  <html:figure><fr:resource hash="c2da4f5632c5a44d46c6c34ed9c806a6"><fr:resource-content><html:img src="/c2da4f5632c5a44d46c6c34ed9c806a6.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[
       \usepackage{amsmath,amssymb}
  \usepackage{mathtools}
  \usepackage{stmaryrd}
  \newcommand{\set}[1]{\left\{#1\right\}}
     \usepackage {tikz}
     \usetikzlibrary {cd}
     \usetikzlibrary {}
     
  \definecolor {green}{RGB}{27,158,119}
  \definecolor {orange}{RGB}{217,95,2}
  \definecolor {purple}{RGB}{117,112,179}

     
    ]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
      \begin {tikzcd}[]
      \mathbf {Set} \ar [r, hookrightarrow, "i^\prime "{name=i, description}] & \mathbf {Pos} \ar [l, "\pi _0^\prime "', ""{name=L}, shift right=3ex] \ar [l, ""'{name=R}, "U^\prime ", shift left=3ex] ,
      \ar [from=R, to=i, phantom, "\vdash " sloped]
      \ar [from=i, to=L, phantom, "\vdash " sloped]
    \end {tikzcd}
    ]]></fr:resource-source></fr:resource></html:figure>



    where <fr:tex display="inline"><![CDATA[i^\prime ]]></fr:tex> equips a set with the trivial order, <fr:tex display="inline"><![CDATA[\pi _0^\prime ]]></fr:tex> sends a poset to its set of connected components, and <fr:tex display="inline"><![CDATA[U^\prime ]]></fr:tex> forgets ordering.
    Because both left-adjoint functors <fr:tex display="inline"><![CDATA[\pi _0^\prime ]]></fr:tex> and <fr:tex display="inline"><![CDATA[i^\prime ]]></fr:tex> are strong monoidal functors (both preserve cartesian products), they are automatically monoidally adjoint, and hence induce an adjunction in <fr:tex display="inline"><![CDATA[\mathbf {2Cat}]]></fr:tex> between categories of <fr:tex display="inline"><![CDATA[\mathcal {V}]]></fr:tex>-enriched categories.
  </html:p>
  <html:p>
    This is analogous to the adjoint triple between <fr:tex display="inline"><![CDATA[\mathbf {Top}]]></fr:tex> and <fr:tex display="inline"><![CDATA[\mathbf {Set}]]></fr:tex> induced by the forgetful functor, against equipping a set with the discrete or indiscrete topology (recall that, for finite sets, <fr:tex display="inline"><![CDATA[\mathbf {Pos}]]></fr:tex> behaves like the category of spaces: <fr:tex display="inline"><![CDATA[\mathbf {Pos}]]></fr:tex> is equivalent to the full subcategory of <fr:tex display="inline"><![CDATA[\mathbf {Top}]]></fr:tex> consisting of Alexandroff spaces via the specialisation topology, and every finite topological space is Alexandroff).
  </html:p>
</fr:mainmatter></fr:tree>
 
</fr:mainmatter></fr:tree></fr:mainmatter></fr:tree><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2023</fr:year><fr:month>12</fr:month><fr:day>3</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-poset-completion/</fr:uri><fr:display-uri>coherent-inverses-poset-completion</fr:display-uri><fr:route>/coherent-inverses-poset-completion/</fr:route><fr:title text="The finite non-empty meet completion of a poset">The finite non-empty meet completion of a poset</fr:title><fr:taxon>section</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
        An important property that a poset may possess is that of ‘having (finite, non-empty) meets’, i.e. being a <fr:link href="/coherent-inverses-BR3I/" title="Meet \wedge " uri="https://forest.nickx.hu/coherent-inverses-BR3I/" display-uri="coherent-inverses-BR3I" type="local"><fr:tex display="inline"><![CDATA[\wedge ]]></fr:tex>-semilattice</fr:link>.
      </html:p><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>9</fr:month><fr:day>1</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-BR3I/</fr:uri><fr:display-uri>coherent-inverses-BR3I</fr:display-uri><fr:route>/coherent-inverses-BR3I/</fr:route><fr:title text="Meet \wedge ">Meet <fr:tex display="inline"><![CDATA[\wedge ]]></fr:tex></fr:title><fr:taxon>definition</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
  Given a poset <fr:tex display="inline"><![CDATA[P]]></fr:tex>, the meet of two elements <fr:tex display="inline"><![CDATA[p, q \in  P]]></fr:tex>, when it exists, is the element of <fr:tex display="inline"><![CDATA[P]]></fr:tex> which is the greatest lower bound of <fr:tex display="inline"><![CDATA[p]]></fr:tex> and <fr:tex display="inline"><![CDATA[q]]></fr:tex>, denoted by <fr:tex display="inline"><![CDATA[p \wedge  q]]></fr:tex>.
  It is characterised by the following properties:
  <html:ol><html:li><fr:tex display="inline"><![CDATA[p \wedge  q \leq  p]]></fr:tex> and <fr:tex display="inline"><![CDATA[p \wedge  q \leq  q]]></fr:tex>;
    </html:li>
    <html:li>
      if <fr:tex display="inline"><![CDATA[r \leq  p]]></fr:tex> and <fr:tex display="inline"><![CDATA[r \leq  q]]></fr:tex>, then <fr:tex display="inline"><![CDATA[r \leq  p \wedge  q]]></fr:tex>.
    </html:li></html:ol></html:p><html:p>
  When <fr:tex display="inline"><![CDATA[P]]></fr:tex> is closed under <fr:tex display="inline"><![CDATA[\wedge ]]></fr:tex> as a binary operation, <fr:tex display="inline"><![CDATA[\wedge ]]></fr:tex> is associative, commutative, and idempotent.
  In this case, we describe <fr:tex display="inline"><![CDATA[P]]></fr:tex> as a <fr:tex display="inline"><![CDATA[\wedge ]]></fr:tex>-semilattice.
  Note that in a <fr:tex display="inline"><![CDATA[\wedge ]]></fr:tex>-semilattice <fr:tex display="inline"><![CDATA[P]]></fr:tex>, the partial order relation <fr:tex display="inline"><![CDATA[\leq ]]></fr:tex> is completely determined algebraically by <fr:tex display="inline"><![CDATA[p \leq  q \iff  p \wedge  q = p]]></fr:tex> — that is, a <fr:tex display="inline"><![CDATA[\wedge ]]></fr:tex>-semilattice is equivalently described by a set equipped with a commutative idempotent semigroup structure.
</html:p><html:p>
  For any non-empty finite subset <fr:tex display="inline"><![CDATA[S \subseteq  P]]></fr:tex>, the meet of <fr:tex display="inline"><![CDATA[S]]></fr:tex> is the greatest lower bound of all elements in <fr:tex display="inline"><![CDATA[S]]></fr:tex>, denoted by <fr:tex display="inline"><![CDATA[\bigwedge  S]]></fr:tex>.
</html:p><html:p>
  The dual operation, the join <fr:tex display="inline"><![CDATA[\vee ]]></fr:tex>, is defined similarly.
</html:p></fr:mainmatter></fr:tree><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>9</fr:month><fr:day>1</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-4UFD/</fr:uri><fr:display-uri>coherent-inverses-4UFD</fr:display-uri><fr:route>/coherent-inverses-4UFD/</fr:route><fr:title text="Poset with some but not all meets">Poset with some but not all meets</fr:title><fr:taxon>example</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
  Consider the poset with elements
  
  <html:figure><fr:resource hash="39017aefdf87f69ecfce5cc6bd251beb"><fr:resource-content><html:img src="/39017aefdf87f69ecfce5cc6bd251beb.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[
        \usepackage{amsmath,amssymb}
  \usepackage{mathtools}
  \usepackage{stmaryrd}
  \newcommand{\set}[1]{\left\{#1\right\}}
      \usepackage {tikz}
      \usetikzlibrary {graphs,graphdrawing}
      
  \definecolor {green}{RGB}{27,158,119}
  \definecolor {orange}{RGB}{217,95,2}
  \definecolor {purple}{RGB}{117,112,179}

      
    \usegdlibrary {layered}
  
    ]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
      \begin {tikzpicture}[layered layout]
        
    \path  graph[math nodes, grow'=up]{
      "p \wedge  q" -- {p, q},
      "p \wedge  r" -- {p, r},
      "q \wedge  r." -- {q, r},
    };
  
      \end {tikzpicture}
    ]]></fr:resource-source></fr:resource></html:figure>

  Each pair in <fr:tex display="inline"><![CDATA[\set {p, q, r}]]></fr:tex> has a meet, but there is no meet <fr:tex display="inline"><![CDATA[p \wedge  q \wedge  r]]></fr:tex> of all three elements; adding this would make this poset a <fr:link href="/coherent-inverses-BR3I/" title="Meet \wedge " uri="https://forest.nickx.hu/coherent-inverses-BR3I/" display-uri="coherent-inverses-BR3I" type="local"><fr:tex display="inline"><![CDATA[\wedge ]]></fr:tex>-semilattice</fr:link>.
</html:p></fr:mainmatter></fr:tree><html:p>
        These <fr:link href="/coherent-inverses-BR3I/" title="Meet \wedge " uri="https://forest.nickx.hu/coherent-inverses-BR3I/" display-uri="coherent-inverses-BR3I" type="local"><fr:tex display="inline"><![CDATA[\wedge ]]></fr:tex>-semilattices</fr:link> arrange themselves into a cartesian (and thus symmetric monoidal) category.
      </html:p><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>9</fr:month><fr:day>1</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-QIKX/</fr:uri><fr:display-uri>coherent-inverses-QIKX</fr:display-uri><fr:route>/coherent-inverses-QIKX/</fr:route><fr:title text="\wedge \mathbf {Lat}, the category of semilattices with finite non-empty meets"><fr:tex display="inline"><![CDATA[\wedge \mathbf {Lat}]]></fr:tex>, the category of semilattices with finite non-empty meets</fr:title><fr:taxon>definition</fr:taxon></fr:frontmatter><fr:mainmatter><html:p><fr:tex display="inline"><![CDATA[\wedge \mathbf {Lat}]]></fr:tex> is the category of <fr:link href="/coherent-inverses-BR3I/" title="Meet \wedge " uri="https://forest.nickx.hu/coherent-inverses-BR3I/" display-uri="coherent-inverses-BR3I" type="local"><fr:tex display="inline"><![CDATA[\wedge ]]></fr:tex>-semilattices</fr:link> where morphisms preserve meets: for <fr:tex display="inline"><![CDATA[{P \xrightarrow {f} Q}]]></fr:tex>
  <fr:tex display="block"><![CDATA[
    \forall  p, p^\prime  \in  P. f(p \wedge  p^\prime ) = f(p) \wedge  f(p^\prime ).
  ]]></fr:tex>
  Note that <fr:tex display="inline"><![CDATA[f]]></fr:tex> is automatically monotone with respect to the partial order on <fr:tex display="inline"><![CDATA[P]]></fr:tex> and <fr:tex display="inline"><![CDATA[Q]]></fr:tex>.
</html:p></fr:mainmatter></fr:tree><html:p>
        Similarly, there is a category <fr:tex display="inline"><![CDATA[\vee \mathbf {Lat}]]></fr:tex> of <fr:tex display="inline"><![CDATA[\vee ]]></fr:tex>-semilattices with finite non-empty joins.
      </html:p><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>9</fr:month><fr:day>1</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-JM4B/</fr:uri><fr:display-uri>coherent-inverses-JM4B</fr:display-uri><fr:route>/coherent-inverses-JM4B/</fr:route><fr:title text="\wedge \mathbf {Lat} is cartesian"><fr:tex display="inline"><![CDATA[\wedge \mathbf {Lat}]]></fr:tex> is cartesian</fr:title><fr:taxon>lemma</fr:taxon></fr:frontmatter><fr:mainmatter><html:p><fr:tex display="inline"><![CDATA[\wedge \mathbf {Lat}]]></fr:tex> is cartesian, with the product <fr:link href="/coherent-inverses-BR3I/" title="Meet \wedge " uri="https://forest.nickx.hu/coherent-inverses-BR3I/" display-uri="coherent-inverses-BR3I" type="local"><fr:tex display="inline"><![CDATA[\wedge ]]></fr:tex>-semilattice</fr:link> of <fr:tex display="inline"><![CDATA[(P, \wedge _P)]]></fr:tex> and <fr:tex display="inline"><![CDATA[(Q, \wedge _Q)]]></fr:tex> given by their cartesian product on underlying sets, equipped with the product meet:
  <fr:tex display="block"><![CDATA[
    (P, \wedge _P) \times  (Q, \wedge _Q) \coloneqq  \left ( P \times  Q, (p, q) \wedge _{P \times  Q} (p^\prime , q^\prime ) = (p \wedge _P p^\prime , q \wedge _Q q^\prime ) \right ).
  ]]></fr:tex></html:p></fr:mainmatter></fr:tree><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>12</fr:month><fr:day>12</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-L0QU/</fr:uri><fr:display-uri>coherent-inverses-L0QU</fr:display-uri><fr:route>/coherent-inverses-L0QU/</fr:route><fr:title text="Free \vee -completion of a poset">Free <fr:tex display="inline"><![CDATA[\vee ]]></fr:tex>-completion of a poset</fr:title><fr:taxon>lemma</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
  The functor <fr:tex display="inline"><![CDATA[{\mathbf {Pos} \xrightarrow {\downarrow } \vee \mathbf {Lat}}]]></fr:tex> which sends a poset to its set of non-empty downwards-closed subsets, ordered by inclusion, with joins given by union, is left adjoint to the forgetful functor <fr:tex display="inline"><![CDATA[\vee \mathbf {Lat} \to  \mathbf {Pos}]]></fr:tex>.
</html:p></fr:mainmatter></fr:tree><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>12</fr:month><fr:day>12</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-F8LS/</fr:uri><fr:display-uri>coherent-inverses-F8LS</fr:display-uri><fr:route>/coherent-inverses-F8LS/</fr:route><fr:title text="\downarrow  is strong monoidal"><fr:tex display="inline"><![CDATA[\downarrow ]]></fr:tex> is strong monoidal</fr:title><fr:taxon>lemma</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
  The functor <fr:tex display="inline"><![CDATA[{\mathbf {Pos} \xrightarrow {\downarrow } \vee \mathbf {Lat}}]]></fr:tex> is strong monoidal (i.e. preserves finite products).
</html:p>
 
   
   <fr:tree show-metadata="false" toc="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>12</fr:month><fr:day>12</fr:day></fr:date><fr:taxon>proof</fr:taxon></fr:frontmatter><fr:mainmatter>
  <html:p>
    Here, it is crucial that the action of <fr:tex display="inline"><![CDATA[\downarrow ]]></fr:tex> takes <html:em>non-empty</html:em> downwards-closed subsets, or else the terminal poset <fr:tex display="inline"><![CDATA[\set {*}]]></fr:tex> would not be preserved.
  </html:p>
  <html:p>
    The necessary isomorphisms are easy to check.
  </html:p>
</fr:mainmatter></fr:tree>
 
</fr:mainmatter></fr:tree><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>12</fr:month><fr:day>12</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-QRFA/</fr:uri><fr:display-uri>coherent-inverses-QRFA</fr:display-uri><fr:route>/coherent-inverses-QRFA/</fr:route><fr:title text="\vee \mathbf {Lat} \cong  \wedge \mathbf {Lat}"><fr:tex display="inline"><![CDATA[\vee \mathbf {Lat} \cong  \wedge \mathbf {Lat}]]></fr:tex></fr:title><fr:taxon>lemma</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
  There is a categorical equivalence <fr:tex display="inline"><![CDATA[\vee \mathbf {Lat} \cong  \wedge \mathbf {Lat}]]></fr:tex> given by reversing ordering.
</html:p></fr:mainmatter></fr:tree><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>12</fr:month><fr:day>12</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-7AXW/</fr:uri><fr:display-uri>coherent-inverses-7AXW</fr:display-uri><fr:route>/coherent-inverses-7AXW/</fr:route><fr:title text="Adjunction \mathbf {PosCat} \to  \wedge \mathbf {LatCat}">Adjunction <fr:tex display="inline"><![CDATA[\mathbf {PosCat} \to  \wedge \mathbf {LatCat}]]></fr:tex></fr:title><fr:taxon>corollary</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
  There is an adjunction
  
  
  
  <html:figure><fr:resource hash="5142b59cf26f89cf2d53f3c2dc6f4af6"><fr:resource-content><html:img src="/5142b59cf26f89cf2d53f3c2dc6f4af6.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[
       \usepackage{amsmath,amssymb}
  \usepackage{mathtools}
  \usepackage{stmaryrd}
  \newcommand{\set}[1]{\left\{#1\right\}}
     \usepackage {tikz}
     \usetikzlibrary {cd}
     \usetikzlibrary {}
     
  \definecolor {green}{RGB}{27,158,119}
  \definecolor {orange}{RGB}{217,95,2}
  \definecolor {purple}{RGB}{117,112,179}

     
    ]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
      \begin {tikzcd}[]
         \mathbf {PosCat}
          \ar [r, shift left=1ex, , "L", ""'{name=UL}]
          \ar [r, shift right=1ex, phantom, ""', ""{name=UR}]
        & \wedge \mathbf {LatCat}.
          \ar [l, shift left=1ex, , "R", ""'{name=DL}]
          \ar [l, shift right=1ex, phantom, ""', ""{name=DR}]
        \ar [from=UL, to=DL, "", phantom]
        \ar [from=UR, to=DR, "\vdash ", phantom, sloped] 
      \end {tikzcd}
    ]]></fr:resource-source></fr:resource></html:figure></html:p><html:p>
  Explicitly, <fr:tex display="inline"><![CDATA[L]]></fr:tex> sends a <fr:tex display="inline"><![CDATA[\mathbf {Pos}]]></fr:tex>-category to an <fr:tex display="inline"><![CDATA[\wedge \mathbf {Lat}]]></fr:tex>-category with the same objects, but every Hom poset is replaced by a <fr:tex display="inline"><![CDATA[\wedge ]]></fr:tex>-semilattice given by non-empty downwards-closed subsets, reverse-ordered by inclusion.
  <fr:tex display="inline"><![CDATA[R]]></fr:tex> sends an <fr:tex display="inline"><![CDATA[\wedge \mathbf {Lat}]]></fr:tex>-category to a <fr:tex display="inline"><![CDATA[\mathbf {Pos}]]></fr:tex>-category with the same objects, but every Hom lattice forgets its meet and reverses its order.
</html:p>
 
   
   <fr:tree show-metadata="false" toc="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>12</fr:month><fr:day>12</fr:day></fr:date><fr:taxon>proof</fr:taxon></fr:frontmatter><fr:mainmatter>
  <html:p>
    Use <fr:link href="/coherent-inverses-4OUN/" title="change of base" uri="https://forest.nickx.hu/coherent-inverses-4OUN/" display-uri="coherent-inverses-4OUN" type="local">lemma <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-4OUN/" display-uri="coherent-inverses-4OUN" /></fr:link> with <fr:link href="/coherent-inverses-L0QU/" title="Free \vee -completion of a poset" uri="https://forest.nickx.hu/coherent-inverses-L0QU/" display-uri="coherent-inverses-L0QU" type="local">lemma <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-L0QU/" display-uri="coherent-inverses-L0QU" /></fr:link>, <fr:link href="/coherent-inverses-F8LS/" title="\downarrow  is strong monoidal" uri="https://forest.nickx.hu/coherent-inverses-F8LS/" display-uri="coherent-inverses-F8LS" type="local">lemma <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-F8LS/" display-uri="coherent-inverses-F8LS" /></fr:link>, and <fr:link href="/coherent-inverses-QRFA/" title="\vee \mathbf {Lat} \cong  \wedge \mathbf {Lat}" uri="https://forest.nickx.hu/coherent-inverses-QRFA/" display-uri="coherent-inverses-QRFA" type="local">lemma <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-QRFA/" display-uri="coherent-inverses-QRFA" /></fr:link>.
  </html:p>
</fr:mainmatter></fr:tree>
 
</fr:mainmatter></fr:tree><html:p><fr:link href="/coherent-inverses-7AXW/" title="Adjunction \mathbf {PosCat} \to  \wedge \mathbf {LatCat}" uri="https://forest.nickx.hu/coherent-inverses-7AXW/" display-uri="coherent-inverses-7AXW" type="local">corollary <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-7AXW/" display-uri="coherent-inverses-7AXW" /></fr:link> is useful in particular because it provides a formal way to treat a <fr:tex display="inline"><![CDATA[\wedge \mathbf {Lat}]]></fr:tex>-category as a <fr:tex display="inline"><![CDATA[\mathbf {Pos}]]></fr:tex>-category, which we make use of extensively in <fr:link href="/coherent-inverses-collapse/" title="Coherent inverses in higher-categorical string diagrams › Collapsing framed zigzags" uri="https://forest.nickx.hu/coherent-inverses-collapse/" display-uri="coherent-inverses-collapse" type="local">chapter <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-collapse/" display-uri="coherent-inverses-collapse" /></fr:link>.
      </html:p></fr:mainmatter></fr:tree></fr:mainmatter></fr:tree><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2023</fr:year><fr:month>12</fr:month><fr:day>3</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-graphs/</fr:uri><fr:display-uri>coherent-inverses-graphs</fr:display-uri><fr:route>/coherent-inverses-graphs/</fr:route><fr:title text="Category theory via graphs">Category theory via graphs</fr:title><fr:taxon>section</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
      This thesis, being both about category theory and its representation in a computer proof assistant, is naturally concerned with the representation of (enriched) categories and functors.
      Graphs are a natural way to represent category theoretic concepts (e.g. whenever one comes across a commutative <html:em>diagram</html:em>), and moreover they are a fundamental data structure in computer science, so they are a natural tool to use for this purpose.
      Thus, in this section, we introduce a graph-theoretic language to capture (enriched) functors as <html:em>data</html:em>, using a notion of ‘weighted graph’ that is to be made precise.
    </html:p><html:p>
      For us, all graphs are directed, and not necessarily simple (meaning that the edge relation is boolean), nor loop-free (meaning the edge relation is irreflexive), unless otherwise stated (i.e. these correspond to ‘multigraphs’ in the literature).
    </html:p><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2023</fr:year><fr:month>12</fr:month><fr:day>3</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-graphs-presheaf-topoi/</fr:uri><fr:display-uri>coherent-inverses-graphs-presheaf-topoi</fr:display-uri><fr:route>/coherent-inverses-graphs-presheaf-topoi/</fr:route><fr:title text="Graphs as presheaf topoi">Graphs as presheaf topoi</fr:title><fr:taxon>section</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
        There is a correspondence between graphs and categories, which we first sketch here.
      </html:p><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>6</fr:month><fr:day>10</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-D66F/</fr:uri><fr:display-uri>coherent-inverses-D66F</fr:display-uri><fr:route>/coherent-inverses-D66F/</fr:route><fr:title text="Topos of reflexive graphs">Topos of <fr:link href="/coherent-inverses-D66F/" title="Topos of reflexive graphs" uri="https://forest.nickx.hu/coherent-inverses-D66F/" display-uri="coherent-inverses-D66F" type="local">reflexive graphs</fr:link></fr:title><fr:taxon>definition</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
  Let <fr:tex display="inline"><![CDATA[\mathcal {Q}]]></fr:tex> denote the category generated by
  
  
  
  <html:figure><fr:resource hash="933dcf0fedbead8914698f3938424d3f"><fr:resource-content><html:img src="/933dcf0fedbead8914698f3938424d3f.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[
       \usepackage{amsmath,amssymb}
  \usepackage{mathtools}
  \usepackage{stmaryrd}
  \newcommand{\set}[1]{\left\{#1\right\}}
     \usepackage {tikz}
     \usetikzlibrary {cd}
     \usetikzlibrary {}
     
  \definecolor {green}{RGB}{27,158,119}
  \definecolor {orange}{RGB}{217,95,2}
  \definecolor {purple}{RGB}{117,112,179}

     
    ]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
      \begin {tikzcd}[]
    V
    \ar [r, shift left=5px, "s"]
    \ar [r, shift right=5px, "t"']
    & E,
    \ar [l, "r" description]
  \end {tikzcd}
    ]]></fr:resource-source></fr:resource></html:figure>



  where <fr:tex display="inline"><![CDATA[r]]></fr:tex> is a common retract of <fr:tex display="inline"><![CDATA[s]]></fr:tex> and <fr:tex display="inline"><![CDATA[s]]></fr:tex>, i.e. <fr:tex display="inline"><![CDATA[r \circ  s = 
  \text {id}_{V}
 = r \circ  t]]></fr:tex>.
</html:p><html:p>
  The topos of <fr:link href="/coherent-inverses-D66F/" title="Topos of reflexive graphs" uri="https://forest.nickx.hu/coherent-inverses-D66F/" display-uri="coherent-inverses-D66F" type="local">reflexive graphs</fr:link> is the category of presheaves (functors <fr:tex display="inline"><![CDATA[{\mathcal {Q}}^\mathrm {op} \to  \mathbf {Set}]]></fr:tex>):
  <fr:tex display="block"><![CDATA[
    \mathbf {RGrph} \coloneqq  \hat {\mathcal {Q}}.
  ]]></fr:tex></html:p></fr:mainmatter></fr:tree><html:p>
        Reflexivity means that for every vertex <fr:tex display="inline"><![CDATA[v]]></fr:tex>, there is a distinguished loop
        
  
  
  <html:figure><fr:resource hash="b2b0ac83cb05d4d513ddde355d8b208e"><fr:resource-content><html:img src="/b2b0ac83cb05d4d513ddde355d8b208e.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[
       \usepackage{amsmath,amssymb}
  \usepackage{mathtools}
  \usepackage{stmaryrd}
  \newcommand{\set}[1]{\left\{#1\right\}}
     \usepackage {tikz}
     \usetikzlibrary {cd}
     \usetikzlibrary {}
     
  \definecolor {green}{RGB}{27,158,119}
  \definecolor {orange}{RGB}{217,95,2}
  \definecolor {purple}{RGB}{117,112,179}

     
    ]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
      \begin {tikzcd}[cramped]
          v, \ar [loop above, "
  \text {id}_{v}
"]
        \end {tikzcd}
    ]]></fr:resource-source></fr:resource></html:figure>



        although there will be possibly more self-loops at <fr:tex display="inline"><![CDATA[v]]></fr:tex>.
        Typically, we will elide these distinguished loops from diagrams, but note that they allow for a <fr:link href="/coherent-inverses-D66F/" title="Topos of reflexive graphs" uri="https://forest.nickx.hu/coherent-inverses-D66F/" display-uri="coherent-inverses-D66F" type="local">reflexive graph</fr:link> homomorphism to notionally map edges to vertices.
        We will also normally number vertices to distinguish them, and represent edge names as a pair of numbers when disambiguation is required.
      </html:p><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>6</fr:month><fr:day>10</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-7H54/</fr:uri><fr:display-uri>coherent-inverses-7H54</fr:display-uri><fr:route>/coherent-inverses-7H54/</fr:route><fr:taxon>example</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
  Consider the <fr:link href="/coherent-inverses-D66F/" title="Topos of reflexive graphs" uri="https://forest.nickx.hu/coherent-inverses-D66F/" display-uri="coherent-inverses-D66F" type="local">reflexive graph</fr:link>
  
  
  
  <html:figure><fr:resource hash="658602002259488e6151820a5b980257"><fr:resource-content><html:img src="/658602002259488e6151820a5b980257.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[
       \usepackage{amsmath,amssymb}
  \usepackage{mathtools}
  \usepackage{stmaryrd}
  \newcommand{\set}[1]{\left\{#1\right\}}
     \usepackage {tikz}
     \usetikzlibrary {cd}
     \usetikzlibrary {}
     
  \definecolor {green}{RGB}{27,158,119}
  \definecolor {orange}{RGB}{217,95,2}
  \definecolor {purple}{RGB}{117,112,179}

     
    ]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
      \begin {tikzcd}[]
    0 \ar [loop above] & 1 \ar [r, shift left] \ar [r, shift right] & 2 \ar [r] & 3. \ar [loop above]
  \end {tikzcd}
    ]]></fr:resource-source></fr:resource></html:figure>



  It has two loops on <fr:tex display="inline"><![CDATA[0]]></fr:tex>; the reflexive loop, and the loop shown.
  There are two distinct edges from <fr:tex display="inline"><![CDATA[1]]></fr:tex> to <fr:tex display="inline"><![CDATA[2]]></fr:tex>, and no edges between <fr:tex display="inline"><![CDATA[0]]></fr:tex> and any other vertex.
</html:p><html:p>
  It corresponds to a functor <fr:tex display="inline"><![CDATA[{{\mathcal {Q}}^\mathrm {op} \xrightarrow {G} \mathbf {Set}}]]></fr:tex> in the following way:
  <fr:tex display="block"><![CDATA[
    \begin {aligned}
      V &\longmapsto  \set {0, 1, 2, 3}, \\
      E &\longmapsto  \set {r_0, r_1, r_2, r_3, (0, 0), (1, 2), {(1, 2)}^\prime , (2, 3), (3, 3)}, \\
    \end {aligned}
  ]]></fr:tex>
  such that <fr:tex display="inline"><![CDATA[G s (1, 2) = 1, G t (1, 2) = 2, G r 0 = r_0]]></fr:tex>, etc.
</html:p></fr:mainmatter></fr:tree><html:p>
        As a presheaf topos, <fr:tex display="inline"><![CDATA[\mathbf {RGrph}]]></fr:tex> enjoys many nice properties, including the existence of all small limits and colimits (which are computed pointwise).
        In general, for a <fr:link href="/coherent-inverses-D66F/" title="Topos of reflexive graphs" uri="https://forest.nickx.hu/coherent-inverses-D66F/" display-uri="coherent-inverses-D66F" type="local">reflexive graph</fr:link> <fr:tex display="inline"><![CDATA[G]]></fr:tex> presented in this way, <fr:tex display="inline"><![CDATA[G V]]></fr:tex> is its set of vertices and <fr:tex display="inline"><![CDATA[G E]]></fr:tex> its set of edges.
      </html:p><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>6</fr:month><fr:day>12</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-NL0N/</fr:uri><fr:display-uri>coherent-inverses-NL0N</fr:display-uri><fr:route>/coherent-inverses-NL0N/</fr:route><fr:title text="Representable presheaves of \mathbf {RGrph}">Representable presheaves of <fr:tex display="inline"><![CDATA[\mathbf {RGrph}]]></fr:tex></fr:title><fr:taxon>remark</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
   The two representables of <fr:tex display="inline"><![CDATA[\mathbf {RGrph}]]></fr:tex> are:
  <html:dl>
    <html:dt><fr:tex display="inline"><![CDATA[\mathcal {Q} (-, V)]]></fr:tex></html:dt>
    <html:dd>
      The trivial <fr:link href="/coherent-inverses-D66F/" title="Topos of reflexive graphs" uri="https://forest.nickx.hu/coherent-inverses-D66F/" display-uri="coherent-inverses-D66F" type="local">reflexive graph</fr:link> with a single node
      
  
  
  <html:figure><fr:resource hash="fecf7b7f10fc234560ec87340361e803"><fr:resource-content><html:img src="/fecf7b7f10fc234560ec87340361e803.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[
       \usepackage{amsmath,amssymb}
  \usepackage{mathtools}
  \usepackage{stmaryrd}
  \newcommand{\set}[1]{\left\{#1\right\}}
     \usepackage {tikz}
     \usetikzlibrary {cd}
     \usetikzlibrary {}
     
  \definecolor {green}{RGB}{27,158,119}
  \definecolor {orange}{RGB}{217,95,2}
  \definecolor {purple}{RGB}{117,112,179}

     
    ]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
      \begin {tikzcd}[]
        {
  \text {id}_{V}
}, \ar [loop above, "r"]
      \end {tikzcd}
    ]]></fr:resource-source></fr:resource></html:figure>



      because <fr:tex display="inline"><![CDATA[\mathcal {Q} (V, V) = \set {
  \text {id}_{V}
 = r \circ  s = r \circ  t}]]></fr:tex> and <fr:tex display="inline"><![CDATA[\mathcal {Q} (E, V) = \set {r}]]></fr:tex>.
    </html:dd>
    <html:dt><fr:tex display="inline"><![CDATA[\mathcal {Q} (-, E)]]></fr:tex></html:dt>
    <html:dd>
      The smallest <fr:link href="/coherent-inverses-D66F/" title="Topos of reflexive graphs" uri="https://forest.nickx.hu/coherent-inverses-D66F/" display-uri="coherent-inverses-D66F" type="local">reflexive graph</fr:link> consisting of a single edge (and reflexive loops for its endpoints)
      
  
  
  <html:figure><fr:resource hash="b72120d8fa0d8f7aa465d218bdd0d700"><fr:resource-content><html:img src="/b72120d8fa0d8f7aa465d218bdd0d700.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[
       \usepackage{amsmath,amssymb}
  \usepackage{mathtools}
  \usepackage{stmaryrd}
  \newcommand{\set}[1]{\left\{#1\right\}}
     \usepackage {tikz}
     \usetikzlibrary {cd}
     \usetikzlibrary {}
     
  \definecolor {green}{RGB}{27,158,119}
  \definecolor {orange}{RGB}{217,95,2}
  \definecolor {purple}{RGB}{117,112,179}

     
    ]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
      \begin {tikzcd}[]
        s \ar [loop above, "s \circ  r"] \ar [r, "
  \text {id}_{E}
"] & t \ar [loop above, "t \circ  r"]
      \end {tikzcd}
    ]]></fr:resource-source></fr:resource></html:figure>



      because <fr:tex display="inline"><![CDATA[\mathcal {Q} (V, E) = \set {s, t}]]></fr:tex> and <fr:tex display="inline"><![CDATA[\mathcal {Q} (E, E) = \set {
  \text {id}_{E}
, s \circ  r, t \circ  r}]]></fr:tex>.
    </html:dd>
  </html:dl>
   That every presheaf is a colimit of representable presheaves says that every <fr:link href="/coherent-inverses-D66F/" title="Topos of reflexive graphs" uri="https://forest.nickx.hu/coherent-inverses-D66F/" display-uri="coherent-inverses-D66F" type="local">reflexive graph</fr:link> is obtained by gluing together vertices and edges.
</html:p></fr:mainmatter></fr:tree><html:p>
        Homomorphisms between these <fr:link href="/coherent-inverses-D66F/" title="Topos of reflexive graphs" uri="https://forest.nickx.hu/coherent-inverses-D66F/" display-uri="coherent-inverses-D66F" type="local">reflexive graphs</fr:link> are defined by a pair of functions that map vertices to vertices, and edges to edges, in a way that respects the source, target, and reflexivity maps.
        This is encoded by what it means to be a natural transformation between functors <fr:tex display="inline"><![CDATA[{\mathcal {Q}}^\mathrm {op} \to  \mathbf {Set}]]></fr:tex>.
      </html:p><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>6</fr:month><fr:day>10</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-JTJ4/</fr:uri><fr:display-uri>coherent-inverses-JTJ4</fr:display-uri><fr:route>/coherent-inverses-JTJ4/</fr:route><fr:taxon>example</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
  Consider the <fr:link href="/coherent-inverses-D66F/" title="Topos of reflexive graphs" uri="https://forest.nickx.hu/coherent-inverses-D66F/" display-uri="coherent-inverses-D66F" type="local">reflexive graphs</fr:link>
  <fr:resource hash="1341fbc10b2f4f9fcb0bb9cb5163ae0f"><fr:resource-content><html:img src="/1341fbc10b2f4f9fcb0bb9cb5163ae0f.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[
    \usepackage {amsmath}
    \usepackage {mathtools}
    \usepackage {tikz}
    \usetikzlibrary {cd}
  ]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[$\displaystyle 
    G_1 \coloneqq 
    \begin {tikzcd}
    0 \arrow [r] & 1,
    \end {tikzcd}
    \qquad 
    G_2 \coloneqq 
    \begin {tikzcd}
    2 \arrow [r, shift left] \arrow [r, shift right] & 3,
    \end {tikzcd}
    \qquad 
    G_3 \coloneqq 
    \begin {tikzcd}
    4 \arrow [r] & 6 \\
    & 5. \arrow [u]
    \end {tikzcd}
  $]]></fr:resource-source></fr:resource></html:p><html:p>
  There are two distinct <fr:link href="/coherent-inverses-D66F/" title="Topos of reflexive graphs" uri="https://forest.nickx.hu/coherent-inverses-D66F/" display-uri="coherent-inverses-D66F" type="local">reflexive graph</fr:link> homomorphisms <fr:tex display="inline"><![CDATA[G_1 \to  G_2]]></fr:tex>, respectively sending the edge <fr:tex display="inline"><![CDATA[(0, 1)]]></fr:tex> to the upper and lower edges between <fr:tex display="inline"><![CDATA[2]]></fr:tex> and <fr:tex display="inline"><![CDATA[3]]></fr:tex> (both of which induce a vertex mapping <fr:tex display="inline"><![CDATA[0 \mapsto  2, 1 \mapsto  3]]></fr:tex>), and yet another two distinct <fr:link href="/coherent-inverses-D66F/" title="Topos of reflexive graphs" uri="https://forest.nickx.hu/coherent-inverses-D66F/" display-uri="coherent-inverses-D66F" type="local">reflexive graph</fr:link> homomorphisms which send the edge <fr:tex display="inline"><![CDATA[(0, 1)]]></fr:tex> to the reflexive edges (elided) on <fr:tex display="inline"><![CDATA[2]]></fr:tex> and <fr:tex display="inline"><![CDATA[3]]></fr:tex> respectively (thus forcing the vertex mapping to be the constant map on <fr:tex display="inline"><![CDATA[2]]></fr:tex> or <fr:tex display="inline"><![CDATA[3]]></fr:tex> as appropriate).
</html:p><html:p>
  Any surjective mapping of edges <fr:tex display="inline"><![CDATA[G_2 \to  G_3]]></fr:tex> fails to be part of a <fr:link href="/coherent-inverses-D66F/" title="Topos of reflexive graphs" uri="https://forest.nickx.hu/coherent-inverses-D66F/" display-uri="coherent-inverses-D66F" type="local">reflexive graph</fr:link> homomorphism, as <fr:tex display="inline"><![CDATA[4 \neq  5]]></fr:tex> and hence there is no consistent mapping for the vertex <fr:tex display="inline"><![CDATA[2]]></fr:tex>.
</html:p></fr:mainmatter></fr:tree><html:p><fr:tex display="inline"><![CDATA[\mathbf {RGrph}]]></fr:tex> is intrinsically related to <fr:tex display="inline"><![CDATA[\mathbf {Cat}]]></fr:tex>, the category of small categories, by a monadic adjunction.
      </html:p><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>6</fr:month><fr:day>11</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-G1TF/</fr:uri><fr:display-uri>coherent-inverses-G1TF</fr:display-uri><fr:route>/coherent-inverses-G1TF/</fr:route><fr:title text="Adjunction between \mathbf {RGrph} and \mathbf {Cat}">Adjunction between <fr:tex display="inline"><![CDATA[\mathbf {RGrph}]]></fr:tex> and <fr:tex display="inline"><![CDATA[\mathbf {Cat}]]></fr:tex></fr:title><fr:taxon>proposition</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
  There is a monadic free-forgetful adjunction
  
  
  
  <html:figure><fr:resource hash="04029dbae3dcbc0580a226c0058267fb"><fr:resource-content><html:img src="/04029dbae3dcbc0580a226c0058267fb.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[
       \usepackage{amsmath,amssymb}
  \usepackage{mathtools}
  \usepackage{stmaryrd}
  \newcommand{\set}[1]{\left\{#1\right\}}
     \usepackage {tikz}
     \usetikzlibrary {cd}
     \usetikzlibrary {}
     
  \definecolor {green}{RGB}{27,158,119}
  \definecolor {orange}{RGB}{217,95,2}
  \definecolor {purple}{RGB}{117,112,179}

     
    ]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
      \begin {tikzcd}[]
    \mathbf {RGrph} \ar [r, shift left=1ex, "F", ""'{name=U}]
    & \mathbf {Cat}. \ar [l, shift left=1ex, "U", ""'{name=D}]
    \ar [from=U, to=D, phantom, "\vdash ", sloped]
  \end {tikzcd}
    ]]></fr:resource-source></fr:resource></html:figure></html:p><html:p>
  For a category <fr:tex display="inline"><![CDATA[\mathcal {C}]]></fr:tex>, its underlying <fr:link href="/coherent-inverses-D66F/" title="Topos of reflexive graphs" uri="https://forest.nickx.hu/coherent-inverses-D66F/" display-uri="coherent-inverses-D66F" type="local">reflexive graph</fr:link> is denoted by <fr:tex display="inline"><![CDATA[U (\mathcal {C})]]></fr:tex> with vertices and edges given by objects and morphisms of <fr:tex display="inline"><![CDATA[\mathcal {C}]]></fr:tex> (reflexive edges are determined by identity morphisms).
</html:p><html:p>
  Conversely, any <fr:link href="/coherent-inverses-D66F/" title="Topos of reflexive graphs" uri="https://forest.nickx.hu/coherent-inverses-D66F/" display-uri="coherent-inverses-D66F" type="local">reflexive graph</fr:link> <fr:tex display="inline"><![CDATA[G]]></fr:tex> admits a free category <fr:tex display="inline"><![CDATA[F (\mathcal {C})]]></fr:tex> with objects corresponding to vertices of <fr:tex display="inline"><![CDATA[G]]></fr:tex>, and morphisms given by <html:em>paths</html:em> in <fr:tex display="inline"><![CDATA[G]]></fr:tex>.
</html:p></fr:mainmatter></fr:tree><html:p>
        That this adjunction is monadic (i.e. that <fr:tex display="inline"><![CDATA[\mathbf {Cat}]]></fr:tex> is monadic over <fr:tex display="inline"><![CDATA[\mathbf {RGrph}]]></fr:tex>) says the following: the data of a category is given precisely by an algebra over the monad induced by this adjunction; in other words, every category is presented by its underlying <fr:link href="/coherent-inverses-D66F/" title="Topos of reflexive graphs" uri="https://forest.nickx.hu/coherent-inverses-D66F/" display-uri="coherent-inverses-D66F" type="local">reflexive graph</fr:link> (generators) equipped with a collection of identifications between parallel paths (relations, which determine equality in each Hom set).
        This is analogous to <fr:tex display="inline"><![CDATA[\mathbf {Group}]]></fr:tex> being monadic over <fr:tex display="inline"><![CDATA[\mathbf {Set}]]></fr:tex>, which says that groups can be presented by generators and relations.
      </html:p><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>6</fr:month><fr:day>11</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-T5F8/</fr:uri><fr:display-uri>coherent-inverses-T5F8</fr:display-uri><fr:route>/coherent-inverses-T5F8/</fr:route><fr:title text="Nerves, truncated simplicial/globular sets">Nerves, truncated simplicial/globular sets</fr:title><fr:taxon>remark</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
  Readers familiar with combinatorial models of higher category theory may recognise <fr:tex display="inline"><![CDATA[\mathcal {Q}]]></fr:tex> as the 1-truncated simplex category <fr:tex display="inline"><![CDATA[\Delta _{\leq  1}]]></fr:tex>, or equivalently the 1-truncated reflexive globe category <fr:tex display="inline"><![CDATA[\mathbb {G}_{\leq  1}]]></fr:tex>.
  This makes <fr:tex display="inline"><![CDATA[\mathbf {RGrph}]]></fr:tex> equivalent to 1-truncated simplicial/reflexive globular sets.
</html:p><html:p>
  Additionally, the adjunction observed in <fr:link href="/coherent-inverses-G1TF/" title="Adjunction between \mathbf {RGrph} and \mathbf {Cat}" uri="https://forest.nickx.hu/coherent-inverses-G1TF/" display-uri="coherent-inverses-G1TF" type="local">proposition <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-G1TF/" display-uri="coherent-inverses-G1TF" /></fr:link> can be seen as a restriction of the nerve/realisation adjunction between <fr:tex display="inline"><![CDATA[\mathbf {Cat}]]></fr:tex> and <fr:tex display="inline"><![CDATA[\mathbf {sSet}]]></fr:tex>.
</html:p></fr:mainmatter></fr:tree><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>11</fr:month><fr:day>13</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-DDD6/</fr:uri><fr:display-uri>coherent-inverses-DDD6</fr:display-uri><fr:route>/coherent-inverses-DDD6/</fr:route><fr:title text="Variants of \mathbf {RGrph}">Variants of <fr:tex display="inline"><![CDATA[\mathbf {RGrph}]]></fr:tex></fr:title><fr:taxon>remark</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
  If instead of <fr:tex display="inline"><![CDATA[\mathcal {Q}]]></fr:tex>, we considered presheaves over <fr:tex display="inline"><![CDATA[\mathcal {Q}^- \coloneqq  V \overset {s}{\underset {t}{\rightrightarrows }} E]]></fr:tex>, we would obtain the category <fr:tex display="inline"><![CDATA[\mathbf {Grph}]]></fr:tex> of (not necessarily reflexive) <fr:link href="/coherent-inverses-DDD6/" title="Variants of \mathbf {RGrph}" uri="https://forest.nickx.hu/coherent-inverses-DDD6/" display-uri="coherent-inverses-DDD6" type="local">graphs</fr:link>.
  These can be seen as 1-truncated <html:em>semi</html:em>-simplicial sets.
</html:p><html:p><html:em>Irreflexive</html:em> (loop-free) <fr:link href="/coherent-inverses-DDD6/" title="Variants of \mathbf {RGrph}" uri="https://forest.nickx.hu/coherent-inverses-DDD6/" display-uri="coherent-inverses-DDD6" type="local">graphs</fr:link> can be obtained from this category by taking the full subcategory <fr:tex display="inline"><![CDATA[\mathbf {IrGrph}]]></fr:tex> containing only the presheaves <fr:tex display="inline"><![CDATA[{{\mathcal {Q}^-}^\mathrm {op} \xrightarrow {G} \mathbf {Set}}]]></fr:tex> such that
  <fr:tex display="block"><![CDATA[
    \forall  e \in  G E. G s (e) \neq  G t (e).
  ]]></fr:tex></html:p><html:p>
  Moreover, we can isolate a category of <html:em>simple</html:em> (having at most one edge between any pair of vertices) <fr:link href="/coherent-inverses-DDD6/" title="Variants of \mathbf {RGrph}" uri="https://forest.nickx.hu/coherent-inverses-DDD6/" display-uri="coherent-inverses-DDD6" type="local">graphs</fr:link> of these categories <fr:tex display="inline"><![CDATA[\mathbf {SimpGrph}]]></fr:tex> by taking the full subcategory containing only the presheaves <fr:tex display="inline"><![CDATA[G]]></fr:tex> such that
  <fr:tex display="block"><![CDATA[
    G E \xrightarrow {\langle  G s, G t \rangle } G V \times  G V
  ]]></fr:tex>
  is a monomorphism in <fr:tex display="inline"><![CDATA[\mathbf {Set}]]></fr:tex>.
</html:p><html:p>
  We will use the notation <fr:tex display="inline"><![CDATA[\mathbf {Graph}]]></fr:tex> to talk agnostically about any of these categories, making it clear from context to which one we are referring.
  Moreover, without additional qualification, a <fr:link href="/coherent-inverses-DDD6/" title="Variants of \mathbf {RGrph}" uri="https://forest.nickx.hu/coherent-inverses-DDD6/" display-uri="coherent-inverses-DDD6" type="local">simple graph</fr:link> is understood to be irreflexive.
</html:p></fr:mainmatter></fr:tree><html:p>
        We are interested in <fr:link href="/coherent-inverses-DDD6/" title="Variants of \mathbf {RGrph}" uri="https://forest.nickx.hu/coherent-inverses-DDD6/" display-uri="coherent-inverses-DDD6" type="local">graphs</fr:link> that present functors, carrying ‘typed’ information.
        This can be modelled by equipping to a <fr:link href="/coherent-inverses-DDD6/" title="Variants of \mathbf {RGrph}" uri="https://forest.nickx.hu/coherent-inverses-DDD6/" display-uri="coherent-inverses-DDD6" type="local">graph</fr:link> a <fr:link href="/coherent-inverses-OBWC/" title="graph weighting" uri="https://forest.nickx.hu/coherent-inverses-OBWC/" display-uri="coherent-inverses-OBWC" type="local">graph weighting</fr:link>, assigning to each edge and vertex a label.
      </html:p><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>6</fr:month><fr:day>10</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-OBWC/</fr:uri><fr:display-uri>coherent-inverses-OBWC</fr:display-uri><fr:route>/coherent-inverses-OBWC/</fr:route><fr:title text="graph weighting"><fr:link href="/coherent-inverses-OBWC/" title="graph weighting" uri="https://forest.nickx.hu/coherent-inverses-OBWC/" display-uri="coherent-inverses-OBWC" type="local">graph weighting</fr:link></fr:title><fr:taxon>definition</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
  A <fr:link href="/coherent-inverses-OBWC/" title="graph weighting" uri="https://forest.nickx.hu/coherent-inverses-OBWC/" display-uri="coherent-inverses-OBWC" type="local">graph weighting</fr:link> <fr:tex display="inline"><![CDATA[W]]></fr:tex> is a set of vertex <fr:link href="/coherent-inverses-OBWC/" title="graph weighting" uri="https://forest.nickx.hu/coherent-inverses-OBWC/" display-uri="coherent-inverses-OBWC" type="local">weights</fr:link> <fr:tex display="inline"><![CDATA[W_v]]></fr:tex>, and a set of edge <fr:link href="/coherent-inverses-OBWC/" title="graph weighting" uri="https://forest.nickx.hu/coherent-inverses-OBWC/" display-uri="coherent-inverses-OBWC" type="local">weights</fr:link> <fr:tex display="inline"><![CDATA[W_e]]></fr:tex>, such that edge <fr:link href="/coherent-inverses-OBWC/" title="graph weighting" uri="https://forest.nickx.hu/coherent-inverses-OBWC/" display-uri="coherent-inverses-OBWC" type="local">weights</fr:link> have both a source and target vertex <fr:link href="/coherent-inverses-OBWC/" title="graph weighting" uri="https://forest.nickx.hu/coherent-inverses-OBWC/" display-uri="coherent-inverses-OBWC" type="local">weight</fr:link> associated to them, and in the <fr:link href="/coherent-inverses-D66F/" title="Topos of reflexive graphs" uri="https://forest.nickx.hu/coherent-inverses-D66F/" display-uri="coherent-inverses-D66F" type="local">reflexive</fr:link> case vertex <fr:link href="/coherent-inverses-OBWC/" title="graph weighting" uri="https://forest.nickx.hu/coherent-inverses-OBWC/" display-uri="coherent-inverses-OBWC" type="local">weights</fr:link> have an associated self-loop edge <fr:link href="/coherent-inverses-OBWC/" title="graph weighting" uri="https://forest.nickx.hu/coherent-inverses-OBWC/" display-uri="coherent-inverses-OBWC" type="local">weight</fr:link>.
</html:p><html:p>
  We write <fr:tex display="inline"><![CDATA[f\colon  a \to  b \in  W_e]]></fr:tex> to denote that the edge label <fr:tex display="inline"><![CDATA[f]]></fr:tex> has source vertex label <fr:tex display="inline"><![CDATA[a \in  W_v]]></fr:tex> and target vertex label <fr:tex display="inline"><![CDATA[b \in  W_v]]></fr:tex>, and <fr:tex display="inline"><![CDATA[
  \text {id}_{a}
 \in  W_e]]></fr:tex> to denote the distinguished self-loop edge label associated to the vertex label <fr:tex display="inline"><![CDATA[a \in  W_v]]></fr:tex>.
</html:p><html:p>
  Every <fr:link href="/coherent-inverses-OBWC/" title="graph weighting" uri="https://forest.nickx.hu/coherent-inverses-OBWC/" display-uri="coherent-inverses-OBWC" type="local">graph weighting</fr:link> <fr:tex display="inline"><![CDATA[W]]></fr:tex> admits a canonical <fr:link href="/coherent-inverses-DDD6/" title="Variants of \mathbf {RGrph}" uri="https://forest.nickx.hu/coherent-inverses-DDD6/" display-uri="coherent-inverses-DDD6" type="local">graph</fr:link>, where <fr:tex display="inline"><![CDATA[V]]></fr:tex> is given by <fr:tex display="inline"><![CDATA[W_v]]></fr:tex> and <fr:tex display="inline"><![CDATA[E]]></fr:tex> is given by <fr:tex display="inline"><![CDATA[W_e]]></fr:tex>, which we also denote by <fr:tex display="inline"><![CDATA[W]]></fr:tex>.
  In the case of <fr:link href="/coherent-inverses-DDD6/" title="Variants of \mathbf {RGrph}" uri="https://forest.nickx.hu/coherent-inverses-DDD6/" display-uri="coherent-inverses-DDD6" type="local">simple graphs</fr:link>, the canonical <fr:link href="/coherent-inverses-DDD6/" title="Variants of \mathbf {RGrph}" uri="https://forest.nickx.hu/coherent-inverses-DDD6/" display-uri="coherent-inverses-DDD6" type="local">graph</fr:link> is not necessarily simple: instead, we let <fr:tex display="inline"><![CDATA[E]]></fr:tex> be given by the set of subsets of <fr:tex display="inline"><![CDATA[W_e]]></fr:tex> which ‘match-up’ on source and targets:
  <fr:tex display="block"><![CDATA[
    E \coloneqq  \set { S \subseteq  W_e \mid  \exists  a, b \in  W_v. \forall  f \in  S. f\colon  a \to  b }.
  ]]></fr:tex></html:p></fr:mainmatter></fr:tree><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>6</fr:month><fr:day>10</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-JGG7/</fr:uri><fr:display-uri>coherent-inverses-JGG7</fr:display-uri><fr:route>/coherent-inverses-JGG7/</fr:route><fr:title text="weighted graphs"><fr:link href="/coherent-inverses-JGG7/" title="weighted graphs" uri="https://forest.nickx.hu/coherent-inverses-JGG7/" display-uri="coherent-inverses-JGG7" type="local">weighted graphs</fr:link></fr:title><fr:taxon>definition</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
  A <fr:link href="/coherent-inverses-OBWC/" title="graph weighting" uri="https://forest.nickx.hu/coherent-inverses-OBWC/" display-uri="coherent-inverses-OBWC" type="local">graph weighting</fr:link> in <fr:tex display="inline"><![CDATA[W]]></fr:tex> is a <fr:link href="/coherent-inverses-DDD6/" title="Variants of \mathbf {RGrph}" uri="https://forest.nickx.hu/coherent-inverses-DDD6/" display-uri="coherent-inverses-DDD6" type="local">graph</fr:link> homomorphism <fr:tex display="inline"><![CDATA[G \to  W]]></fr:tex>.
  Moreover, the slice category <fr:tex display="inline"><![CDATA[\mathbf {Graph} / W]]></fr:tex> is the category of <fr:link href="/coherent-inverses-DDD6/" title="Variants of \mathbf {RGrph}" uri="https://forest.nickx.hu/coherent-inverses-DDD6/" display-uri="coherent-inverses-DDD6" type="local">graphs</fr:link> equipped with a <fr:link href="/coherent-inverses-OBWC/" title="graph weighting" uri="https://forest.nickx.hu/coherent-inverses-OBWC/" display-uri="coherent-inverses-OBWC" type="local">graph weighting</fr:link> in <fr:tex display="inline"><![CDATA[W]]></fr:tex> (<fr:link href="/coherent-inverses-JGG7/" title="weighted graphs" uri="https://forest.nickx.hu/coherent-inverses-JGG7/" display-uri="coherent-inverses-JGG7" type="local"><fr:tex display="inline"><![CDATA[W]]></fr:tex>-graphs</fr:link>), with morphisms being homomorphisms of <fr:link href="/coherent-inverses-JGG7/" title="weighted graphs" uri="https://forest.nickx.hu/coherent-inverses-JGG7/" display-uri="coherent-inverses-JGG7" type="local"><fr:tex display="inline"><![CDATA[W]]></fr:tex>-graphs</fr:link> which respect the <fr:link href="/coherent-inverses-OBWC/" title="graph weighting" uri="https://forest.nickx.hu/coherent-inverses-OBWC/" display-uri="coherent-inverses-OBWC" type="local">graph weighting</fr:link> <fr:tex display="inline"><![CDATA[W]]></fr:tex>, of which <fr:link href="/coherent-inverses-JCFF/" title="Terminal object of a slice category" uri="https://forest.nickx.hu/coherent-inverses-JCFF/" display-uri="coherent-inverses-JCFF" type="local"><fr:tex display="inline"><![CDATA[W]]></fr:tex> is the terminal object</fr:link>.
</html:p><html:p>
  In the case of <fr:link href="/coherent-inverses-DDD6/" title="Variants of \mathbf {RGrph}" uri="https://forest.nickx.hu/coherent-inverses-DDD6/" display-uri="coherent-inverses-DDD6" type="local">simple graphs</fr:link>, we instead consider the full subcategory of the slice over the non-simple category of <fr:link href="/coherent-inverses-DDD6/" title="Variants of \mathbf {RGrph}" uri="https://forest.nickx.hu/coherent-inverses-DDD6/" display-uri="coherent-inverses-DDD6" type="local">graphs</fr:link> <fr:tex display="inline"><![CDATA[\mathbf {Graph} / W]]></fr:tex> whose projection onto domain is a <fr:link href="/coherent-inverses-DDD6/" title="Variants of \mathbf {RGrph}" uri="https://forest.nickx.hu/coherent-inverses-DDD6/" display-uri="coherent-inverses-DDD6" type="local">simple graph</fr:link>.
</html:p></fr:mainmatter></fr:tree><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>6</fr:month><fr:day>24</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-IF61/</fr:uri><fr:display-uri>coherent-inverses-IF61</fr:display-uri><fr:route>/coherent-inverses-IF61/</fr:route><fr:title text="Reflexively weighted edges">Reflexively <fr:link href="/coherent-inverses-OBWC/" title="graph weighting" uri="https://forest.nickx.hu/coherent-inverses-OBWC/" display-uri="coherent-inverses-OBWC" type="local">weighted</fr:link> edges</fr:title><fr:taxon>remark</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
  Note that in a <fr:link href="/coherent-inverses-JGG7/" title="weighted graphs" uri="https://forest.nickx.hu/coherent-inverses-JGG7/" display-uri="coherent-inverses-JGG7" type="local"><fr:tex display="inline"><![CDATA[W]]></fr:tex>-reflexive-graph</fr:link>, every vertex has a self-loop which has the reflexive <fr:link href="/coherent-inverses-OBWC/" title="graph weighting" uri="https://forest.nickx.hu/coherent-inverses-OBWC/" display-uri="coherent-inverses-OBWC" type="local">weight</fr:link> on its vertex <fr:link href="/coherent-inverses-OBWC/" title="graph weighting" uri="https://forest.nickx.hu/coherent-inverses-OBWC/" display-uri="coherent-inverses-OBWC" type="local">weight</fr:link>; however, there may be other edges which also have this <fr:link href="/coherent-inverses-OBWC/" title="graph weighting" uri="https://forest.nickx.hu/coherent-inverses-OBWC/" display-uri="coherent-inverses-OBWC" type="local">weight</fr:link>.
</html:p><html:p>
  For example, the <fr:link href="/coherent-inverses-JGG7/" title="weighted graphs" uri="https://forest.nickx.hu/coherent-inverses-JGG7/" display-uri="coherent-inverses-JGG7" type="local"><fr:tex display="inline"><![CDATA[W]]></fr:tex>-reflexive-graphs</fr:link>
  <fr:tex display="block"><![CDATA[
    a, \qquad  \text {and} \qquad  a \xrightarrow {
  \text {id}_{a}
} a,
  ]]></fr:tex>
  are distinct (the first has one vertex and the second has two).
</html:p><html:p>
  As before, we elide the distinguished reflexive self-loop on each vertex.
</html:p></fr:mainmatter></fr:tree><html:p>
        We use subscripts to denote the vertex indices of <fr:link href="/coherent-inverses-JGG7/" title="weighted graphs" uri="https://forest.nickx.hu/coherent-inverses-JGG7/" display-uri="coherent-inverses-JGG7" type="local"><fr:tex display="inline"><![CDATA[W]]></fr:tex>-graphs</fr:link>.
      </html:p><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>6</fr:month><fr:day>11</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-X0XS/</fr:uri><fr:display-uri>coherent-inverses-X0XS</fr:display-uri><fr:route>/coherent-inverses-X0XS/</fr:route><fr:title text="Explicit W-reflexive-graph">Explicit <fr:link href="/coherent-inverses-JGG7/" title="weighted graphs" uri="https://forest.nickx.hu/coherent-inverses-JGG7/" display-uri="coherent-inverses-JGG7" type="local"><fr:tex display="inline"><![CDATA[W]]></fr:tex>-reflexive-graph</fr:link></fr:title><fr:taxon>example</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
  Let <fr:tex display="inline"><![CDATA[W_v \coloneqq  \set {a, b}]]></fr:tex>, and <fr:tex display="inline"><![CDATA[W_e \coloneqq  \set {
  \text {id}_{a}
, 
  \text {id}_{b}
, \alpha \colon  a \to  b, \beta \colon  b \to  b}]]></fr:tex> constitute a <fr:link href="/coherent-inverses-OBWC/" title="graph weighting" uri="https://forest.nickx.hu/coherent-inverses-OBWC/" display-uri="coherent-inverses-OBWC" type="local">graph weighting</fr:link>.
</html:p><html:p>
  As a <fr:link href="/coherent-inverses-D66F/" title="Topos of reflexive graphs" uri="https://forest.nickx.hu/coherent-inverses-D66F/" display-uri="coherent-inverses-D66F" type="local">reflexive graph</fr:link>, <fr:tex display="inline"><![CDATA[W]]></fr:tex> looks like:
  
  
  
  <html:figure><fr:resource hash="625ff01bfd8cf3592ed57653efa5acda"><fr:resource-content><html:img src="/625ff01bfd8cf3592ed57653efa5acda.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[
       \usepackage{amsmath,amssymb}
  \usepackage{mathtools}
  \usepackage{stmaryrd}
  \newcommand{\set}[1]{\left\{#1\right\}}
     \usepackage {tikz}
     \usetikzlibrary {cd}
     \usetikzlibrary {}
     
  \definecolor {green}{RGB}{27,158,119}
  \definecolor {orange}{RGB}{217,95,2}
  \definecolor {purple}{RGB}{117,112,179}

     
    ]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
      \begin {tikzcd}[]
    a \ar [r, "\alpha "] & b. \ar [loop above, "\beta "]
  \end {tikzcd}
    ]]></fr:resource-source></fr:resource></html:figure></html:p><html:p>
  An example <fr:link href="/coherent-inverses-JGG7/" title="weighted graphs" uri="https://forest.nickx.hu/coherent-inverses-JGG7/" display-uri="coherent-inverses-JGG7" type="local"><fr:tex display="inline"><![CDATA[W]]></fr:tex>-reflexive-graph</fr:link> is the following:
  
  
  
  <html:figure><fr:resource hash="b43604e872a4fbd87c4f6ecb87c7379f"><fr:resource-content><html:img src="/b43604e872a4fbd87c4f6ecb87c7379f.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[
       \usepackage{amsmath,amssymb}
  \usepackage{mathtools}
  \usepackage{stmaryrd}
  \newcommand{\set}[1]{\left\{#1\right\}}
     \usepackage {tikz}
     \usetikzlibrary {cd}
     \usetikzlibrary {}
     
  \definecolor {green}{RGB}{27,158,119}
  \definecolor {orange}{RGB}{217,95,2}
  \definecolor {purple}{RGB}{117,112,179}

     
    ]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
      \begin {tikzcd}[]
    a_0 \ar [r, "\alpha "] \ar [d, "
  \text {id}_{a}
"'] & b_1 \\
    a_2, \ar [ru, "\alpha "']
  \end {tikzcd}
    ]]></fr:resource-source></fr:resource></html:figure>



  where the implied homomorphism
  <fr:tex display="block"><![CDATA[
    \begin {aligned}
    G &\longrightarrow  W \\
    0 &\longmapsto  a \\
    1 &\longmapsto  b \\
    2 &\longmapsto  a \\
    (0, 1) &\longmapsto  \alpha  \\
    (0, 2) &\longmapsto  
  \text {id}_{a}
 \\
    (2, 1) &\longmapsto  \alpha ,
    \end {aligned}
  ]]></fr:tex>
  is made evident by our notation.
</html:p></fr:mainmatter></fr:tree></fr:mainmatter></fr:tree><html:p>
      Now we apply the theory we have developed, in order to provide a concrete graph-theoretic presentation of <fr:tex display="inline"><![CDATA[\mathbf {Pos}]]></fr:tex>-functors.
      We focus on <fr:tex display="inline"><![CDATA[\mathbf {Pos}]]></fr:tex>-functors for ease of presentation, but the theory works equally well for ordinary functors in the obvious way.
    </html:p><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>10</fr:month><fr:day>6</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-RISV/</fr:uri><fr:display-uri>coherent-inverses-RISV</fr:display-uri><fr:route>/coherent-inverses-RISV/</fr:route><fr:title text="W-graph of a \mathbf {Pos}-functor"><fr:link href="/coherent-inverses-JGG7/" title="weighted graphs" uri="https://forest.nickx.hu/coherent-inverses-JGG7/" display-uri="coherent-inverses-JGG7" type="local"><fr:tex display="inline"><![CDATA[W]]></fr:tex>-graph</fr:link> of a <fr:tex display="inline"><![CDATA[\mathbf {Pos}]]></fr:tex>-functor</fr:title><fr:taxon>definition</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
  Let <fr:tex display="inline"><![CDATA[{J \xrightarrow {D} \mathcal {C}}]]></fr:tex> be a <fr:tex display="inline"><![CDATA[\mathbf {Pos}]]></fr:tex>-functor between small <fr:tex display="inline"><![CDATA[\mathbf {Pos}]]></fr:tex>-categories, i.e. a morphism of <fr:tex display="inline"><![CDATA[\mathbf {PosCat}]]></fr:tex>.
  <fr:tex display="inline"><![CDATA[D]]></fr:tex> is an object of the slice category <fr:tex display="inline"><![CDATA[\mathbf {PosCat} / \mathcal {C}]]></fr:tex>, which by <fr:link href="/coherent-inverses-AOTF/" title="Sliced adjunctions" uri="https://forest.nickx.hu/coherent-inverses-AOTF/" display-uri="coherent-inverses-AOTF" type="local">lemma <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-AOTF/" display-uri="coherent-inverses-AOTF" /></fr:link>, <fr:link href="/coherent-inverses-ZGDQ/" title="The free \mathbf {Pos}-category functor \mathbf {Cat} \xrightarrow {i} \mathbf {PosCat} is left and right adjoint" uri="https://forest.nickx.hu/coherent-inverses-ZGDQ/" display-uri="coherent-inverses-ZGDQ" type="local">lemma <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-ZGDQ/" display-uri="coherent-inverses-ZGDQ" /></fr:link>, and <fr:link href="/coherent-inverses-G1TF/" title="Adjunction between \mathbf {RGrph} and \mathbf {Cat}" uri="https://forest.nickx.hu/coherent-inverses-G1TF/" display-uri="coherent-inverses-G1TF" type="local">proposition <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-G1TF/" display-uri="coherent-inverses-G1TF" /></fr:link> is part of an adjunction
  
  
  
  <html:figure><fr:resource hash="5c62ef7bd75fe3c6f2ea92335cbfd309"><fr:resource-content><html:img src="/5c62ef7bd75fe3c6f2ea92335cbfd309.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[
       \usepackage{amsmath,amssymb}
  \usepackage{mathtools}
  \usepackage{stmaryrd}
  \newcommand{\set}[1]{\left\{#1\right\}}
     \usepackage {tikz}
     \usetikzlibrary {cd}
     \usetikzlibrary {}
     
  \definecolor {green}{RGB}{27,158,119}
  \definecolor {orange}{RGB}{217,95,2}
  \definecolor {purple}{RGB}{117,112,179}

     
    ]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
      \begin {tikzcd}[]
         \mathbf {RGrph} / U ( S (\mathcal {C}))
          \ar  [r, shift left=1ex, "", ""'{name=UL}]
          \ar  [r, shift right=1ex, phantom, ""', ""{name=UR}]
        & \mathbf {Cat} / S (\mathcal {C})
          \ar  [l, shift left=1ex, "", ""'{name=DL}]
          \ar  [l, shift right=1ex, phantom, ""', ""{name=DR}]
          \ar  [r, shift left=1ex, "", ""'{name=UL1}]
          \ar  [r, shift right=1ex, phantom, ""', ""{name=UR1}]
        \ar  [from=UL, to=DL, "", phantom]
        \ar  [from=UR, to=DR, "\vdash  ", phantom, sloped]
      & \mathbf {PosCat} / \mathcal {C} .
          \ar  [l, shift left=1ex, "", ""'{name=DL1}]
          \ar  [l, shift right=1ex, phantom, ""', ""{name=DR1}]
        \ar  [from=UL1, to=DL1, "", phantom]
        \ar  [from=UR1, to=DR1, "\vdash  ", phantom, sloped]
  \end {tikzcd}
    ]]></fr:resource-source></fr:resource></html:figure></html:p><html:p><fr:tex display="inline"><![CDATA[\mathbf {RGrph} / U ( S (\mathcal {C}))]]></fr:tex> is the category of <fr:link href="/coherent-inverses-JGG7/" title="weighted graphs" uri="https://forest.nickx.hu/coherent-inverses-JGG7/" display-uri="coherent-inverses-JGG7" type="local"><fr:tex display="inline"><![CDATA[W]]></fr:tex>-reflexive-graphs</fr:link>, where <fr:tex display="inline"><![CDATA[W]]></fr:tex> is the <fr:link href="/coherent-inverses-OBWC/" title="graph weighting" uri="https://forest.nickx.hu/coherent-inverses-OBWC/" display-uri="coherent-inverses-OBWC" type="local">graph weighting</fr:link> given by vertices and edges of the underlying <fr:link href="/coherent-inverses-DDD6/" title="Variants of \mathbf {RGrph}" uri="https://forest.nickx.hu/coherent-inverses-DDD6/" display-uri="coherent-inverses-DDD6" type="local">graph</fr:link> of the underlying category of <fr:tex display="inline"><![CDATA[\mathcal {C}]]></fr:tex>, i.e. the objects and morphisms of <fr:tex display="inline"><![CDATA[\mathcal {C}]]></fr:tex>, forgetting 2-cell fillers.
  The image of <fr:tex display="inline"><![CDATA[D]]></fr:tex> is a particular <fr:link href="/coherent-inverses-JGG7/" title="weighted graphs" uri="https://forest.nickx.hu/coherent-inverses-JGG7/" display-uri="coherent-inverses-JGG7" type="local"><fr:tex display="inline"><![CDATA[W]]></fr:tex>-reflexive-graph</fr:link> in <fr:tex display="inline"><![CDATA[\mathbf {RGrph} / U ( S (\mathcal {C}))]]></fr:tex>, which we call the <fr:link href="/coherent-inverses-JGG7/" title="weighted graphs" uri="https://forest.nickx.hu/coherent-inverses-JGG7/" display-uri="coherent-inverses-JGG7" type="local"><fr:tex display="inline"><![CDATA[W]]></fr:tex>-reflexive-graph</fr:link> of <fr:tex display="inline"><![CDATA[D]]></fr:tex>.
</html:p><html:p>
  By not explicitly representing distinguished self-loops, we can instead work in a slice category of <fr:tex display="inline"><![CDATA[\mathbf {Grph}]]></fr:tex>, and additionally if we know that <fr:tex display="inline"><![CDATA[\mathcal {C}]]></fr:tex> has no non-trivial endomorphisms then we can simplify further to <fr:tex display="inline"><![CDATA[\mathbf {IrGrph}]]></fr:tex>.
</html:p><html:p>
  By additionally identifying two <fr:tex display="inline"><![CDATA[\mathbf {Pos}]]></fr:tex>-functors <fr:tex display="inline"><![CDATA[{J \xrightarrow {D} \mathcal {C}} \sim  {J^\prime  \xrightarrow {D^\prime } \mathcal {C}}]]></fr:tex>, where <fr:tex display="inline"><![CDATA[J]]></fr:tex> is a wide sub-<fr:tex display="inline"><![CDATA[\mathbf {Pos}]]></fr:tex>-category of <fr:tex display="inline"><![CDATA[J^\prime ]]></fr:tex>, whenever
  <fr:tex display="block"><![CDATA[
    \operatorname {im}(D_{j, j^\prime }) = \operatorname {im}(D^\prime _{j, j^\prime }),
  ]]></fr:tex>
  i.e. <fr:tex display="inline"><![CDATA[J^\prime ]]></fr:tex> may have more morphisms than <fr:tex display="inline"><![CDATA[J]]></fr:tex>, but not in a way that is detectable by applying <fr:tex display="inline"><![CDATA[D^\prime ]]></fr:tex> (equivalently: <fr:tex display="inline"><![CDATA[D]]></fr:tex> is a retract of <fr:tex display="inline"><![CDATA[D^\prime ]]></fr:tex> in <fr:tex display="inline"><![CDATA[\mathbf {PosCat} / \mathcal {C}]]></fr:tex>), we can represent this class as a <fr:link href="/coherent-inverses-JGG7/" title="weighted graphs" uri="https://forest.nickx.hu/coherent-inverses-JGG7/" display-uri="coherent-inverses-JGG7" type="local"><fr:tex display="inline"><![CDATA[W]]></fr:tex>-simple-graph</fr:link>, where the vertices are given by objects of <fr:tex display="inline"><![CDATA[J]]></fr:tex>, <fr:link href="/coherent-inverses-OBWC/" title="graph weighting" uri="https://forest.nickx.hu/coherent-inverses-OBWC/" display-uri="coherent-inverses-OBWC" type="local">weighted</fr:link> by objects of <fr:tex display="inline"><![CDATA[\mathcal {C}]]></fr:tex>, and the edge <fr:link href="/coherent-inverses-OBWC/" title="graph weighting" uri="https://forest.nickx.hu/coherent-inverses-OBWC/" display-uri="coherent-inverses-OBWC" type="local">weights</fr:link> are given by
  <fr:tex display="block"><![CDATA[
    x_j \xrightarrow {\operatorname {im}(D_{j, j^\prime }) \subseteq  \mathcal {C} (x, y)} y_{j^\prime },
  ]]></fr:tex>
  with edges existing whenever such a set is non-empty.
</html:p></fr:mainmatter></fr:tree></fr:mainmatter></fr:tree></fr:mainmatter></fr:tree><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2023</fr:year><fr:month>12</fr:month><fr:day>3</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-framed-zigzags/</fr:uri><fr:display-uri>coherent-inverses-framed-zigzags</fr:display-uri><fr:route>/coherent-inverses-framed-zigzags/</fr:route><fr:title text="Framed zigzag enriched categories"><fr:link href="/coherent-inverses-XQVM/" title="framed zigzag enriched category" uri="https://forest.nickx.hu/coherent-inverses-XQVM/" display-uri="coherent-inverses-XQVM" type="local">Framed zigzag enriched categories</fr:link></fr:title><fr:taxon>chapter</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
    In this chapter, we first review the <fr:link href="/coherent-inverses-UGIR/" title="zigzag category" uri="https://forest.nickx.hu/coherent-inverses-UGIR/" display-uri="coherent-inverses-UGIR" type="local">zigzag construction</fr:link> as described by <html:span class="textual" uid="high-level-methods-for-homotopy-construction-in-associative-n-categories"><fr:link href="/high-level-methods-for-homotopy-construction-in-associative-n-categories/" title="High-level methods for homotopy construction in associative $n$-categories" uri="https://forest.nickx.hu/high-level-methods-for-homotopy-construction-in-associative-n-categories/" display-uri="high-level-methods-for-homotopy-construction-in-associative-n-categories" type="local">[high-level-methods-for-homotopy-construction-in-associative-n-categories]</fr:link></html:span>, and <html:span class="textual" uid="zigzag-normalisation-for-associative-n-categories"><fr:link href="/zigzag-normalisation-for-associative-n-categories/" title="Zigzag normalisation for associative $n$-categories" uri="https://forest.nickx.hu/zigzag-normalisation-for-associative-n-categories/" display-uri="zigzag-normalisation-for-associative-n-categories" type="local">[zigzag-normalisation-for-associative-n-categories]</fr:link></html:span>.
    Subsequently, we recast it in the abstract setting of <fr:link href="/coherent-inverses-2H06/" title="parametric right adjoint" uri="https://forest.nickx.hu/coherent-inverses-2H06/" display-uri="coherent-inverses-2H06" type="local">parametric right adjoint</fr:link> functors, making it amenable for enrichment so that it can support a theory of coherently invertible generators.
  </html:p><html:p>
    The description of the <fr:link href="/coherent-inverses-7TQX/" title="zigzag polynomial functor" uri="https://forest.nickx.hu/coherent-inverses-7TQX/" display-uri="coherent-inverses-7TQX" type="local">zigzag functor as a polynomial functor</fr:link> is due to <html:span class="textual" uid="manifold-diagrams-for-higher-categories"><fr:link href="/manifold-diagrams-for-higher-categories/" title="Manifold Diagrams for Higher Categories" uri="https://forest.nickx.hu/manifold-diagrams-for-higher-categories/" display-uri="manifold-diagrams-for-higher-categories" type="local">[manifold-diagrams-for-higher-categories]</fr:link></html:span>, but otherwise all the material after the first section is new — to appear in <html:span class="textual" uid="coherent-invertibility-in-associative-n-categories"><fr:link href="/coherent-invertibility-in-associative-n-categories/" title="Coherent invertibility in associative n-categories" uri="https://forest.nickx.hu/coherent-invertibility-in-associative-n-categories/" display-uri="coherent-invertibility-in-associative-n-categories" type="local">[coherent-invertibility-in-associative-n-categories]</fr:link></html:span>.
  </html:p><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2023</fr:year><fr:month>12</fr:month><fr:day>3</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-zigzags-explicitly/</fr:uri><fr:display-uri>coherent-inverses-zigzags-explicitly</fr:display-uri><fr:route>/coherent-inverses-zigzags-explicitly/</fr:route><fr:title text="The zigzag category, explicitly">The <fr:link href="/coherent-inverses-UGIR/" title="zigzag category" uri="https://forest.nickx.hu/coherent-inverses-UGIR/" display-uri="coherent-inverses-UGIR" type="local">zigzag category</fr:link>, explicitly</fr:title><fr:taxon>section</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
      In this section, we recall the basic definitions required to construct the <fr:link href="/coherent-inverses-UGIR/" title="zigzag category" uri="https://forest.nickx.hu/coherent-inverses-UGIR/" display-uri="coherent-inverses-UGIR" type="local">zigzag category</fr:link> explicitly.
      Many of these definitions can be found in <html:span class="textual" uid="high-level-methods-for-homotopy-construction-in-associative-n-categories"><fr:link href="/high-level-methods-for-homotopy-construction-in-associative-n-categories/" title="High-level methods for homotopy construction in associative $n$-categories" uri="https://forest.nickx.hu/high-level-methods-for-homotopy-construction-in-associative-n-categories/" display-uri="high-level-methods-for-homotopy-construction-in-associative-n-categories" type="local">[high-level-methods-for-homotopy-construction-in-associative-n-categories]</fr:link></html:span>, but we follow <html:span class="textual" uid="zigzag-normalisation-for-associative-n-categories"><fr:link href="/zigzag-normalisation-for-associative-n-categories/" title="Zigzag normalisation for associative $n$-categories" uri="https://forest.nickx.hu/zigzag-normalisation-for-associative-n-categories/" display-uri="zigzag-normalisation-for-associative-n-categories" type="local">[zigzag-normalisation-for-associative-n-categories]</fr:link></html:span> in that we slightly generalise to the case where the annotations on regular monotone maps are not required to be identity morphisms (<fr:link href="/coherent-inverses-LFED/" title="globular zigzag" uri="https://forest.nickx.hu/coherent-inverses-LFED/" display-uri="coherent-inverses-LFED" type="local">globularity</fr:link>).
      The combinatorics of these gadgets are heavily related to the <fr:link href="/coherent-inverses-2U9F/" title="augmented simplex category" uri="https://forest.nickx.hu/coherent-inverses-2U9F/" display-uri="coherent-inverses-2U9F" type="local">augmented simplex category</fr:link>, which is commonly seen in shape-based models of higher categories.
    </html:p><html:p>
      First, we recall <fr:link href="/using-the-generic-interval/" title="Using the generic interval" uri="https://forest.nickx.hu/using-the-generic-interval/" display-uri="using-the-generic-interval" type="local">Wraith's duality</fr:link> between <fr:link href="/coherent-inverses-2U9F/" title="augmented simplex category" uri="https://forest.nickx.hu/coherent-inverses-2U9F/" display-uri="coherent-inverses-2U9F" type="local">finite linear orders</fr:link> and the opposite category of <fr:link href="/coherent-inverses-5OOR/" title="finite interval category" uri="https://forest.nickx.hu/coherent-inverses-5OOR/" display-uri="coherent-inverses-5OOR" type="local">finite intervals</fr:link>.
    </html:p><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>8</fr:month><fr:day>12</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-2U9F/</fr:uri><fr:display-uri>coherent-inverses-2U9F</fr:display-uri><fr:route>/coherent-inverses-2U9F/</fr:route><fr:title text="augmented simplex category"><fr:link href="/coherent-inverses-2U9F/" title="augmented simplex category" uri="https://forest.nickx.hu/coherent-inverses-2U9F/" display-uri="coherent-inverses-2U9F" type="local">augmented simplex category</fr:link></fr:title><fr:taxon>definition</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
  The <fr:link href="/coherent-inverses-2U9F/" title="augmented simplex category" uri="https://forest.nickx.hu/coherent-inverses-2U9F/" display-uri="coherent-inverses-2U9F" type="local">augmented simplex category</fr:link> <fr:tex display="inline"><![CDATA[{\mathbf {\Delta }_+}]]></fr:tex> is the category with:
  <html:dl>
    <html:dt>objects</html:dt>
    <html:dd>finite ordinals, denoted by <fr:tex display="inline"><![CDATA[[n]]]></fr:tex> for <fr:tex display="inline"><![CDATA[n \in  \mathbb {N} \cup  \set {-1}]]></fr:tex>, or sometimes pictorially:
      e.g. as
      <fr:tex display="block"><![CDATA[
        [3] = 0 \to  1 \to  2,
      ]]></fr:tex>
      or
      <fr:tex display="block"><![CDATA[
        [3] = \times  \to  \bullet  \leftarrow  \times  \to  \bullet  \leftarrow  \times  \to  \bullet  \leftarrow  \times ,
      ]]></fr:tex>
      etc.
    </html:dd>
    <html:dt>morphisms</html:dt>
    <html:dd>monotone maps.</html:dd>
  </html:dl></html:p></fr:mainmatter></fr:tree><html:p>
      Such a category is ‘augmented’ as it includes an initial object <fr:tex display="inline"><![CDATA[[-1] = \emptyset ]]></fr:tex> (the empty ordinal).
    </html:p><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>8</fr:month><fr:day>12</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-5OOR/</fr:uri><fr:display-uri>coherent-inverses-5OOR</fr:display-uri><fr:route>/coherent-inverses-5OOR/</fr:route><fr:title text="finite interval category"><fr:link href="/coherent-inverses-5OOR/" title="finite interval category" uri="https://forest.nickx.hu/coherent-inverses-5OOR/" display-uri="coherent-inverses-5OOR" type="local">finite interval category</fr:link></fr:title><fr:taxon>definition</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
  The <fr:link href="/coherent-inverses-5OOR/" title="finite interval category" uri="https://forest.nickx.hu/coherent-inverses-5OOR/" display-uri="coherent-inverses-5OOR" type="local">finite interval category</fr:link> <fr:tex display="inline"><![CDATA[\mathbf {\Delta }_=]]></fr:tex> is the category with:
  <html:dl>
    <html:dt>objects</html:dt>
    <html:dd>finite ordinals <fr:tex display="inline"><![CDATA[[n]]]></fr:tex> for <fr:tex display="inline"><![CDATA[n \in  \mathbb {N}]]></fr:tex>, or equivalently, finite ordinals which admit top and bottom elements.</html:dd>
    <html:dt>morphisms</html:dt>
    <html:dd>top-and-bottom-preserving monotone maps.</html:dd>
  </html:dl></html:p></fr:mainmatter></fr:tree><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>8</fr:month><fr:day>12</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-WFIU/</fr:uri><fr:display-uri>coherent-inverses-WFIU</fr:display-uri><fr:route>/coherent-inverses-WFIU/</fr:route><fr:title text="Singular/regular monotone duality">Singular/regular monotone duality</fr:title><fr:taxon>lemma</fr:taxon><fr:meta name="source"><html:span uid="using-the-generic-interval"><fr:link href="/using-the-generic-interval/" title="Using the generic interval" uri="https://forest.nickx.hu/using-the-generic-interval/" display-uri="using-the-generic-interval" type="local">[using-the-generic-interval]</fr:link></html:span></fr:meta></fr:frontmatter><fr:mainmatter><html:p>
  There is an equivalence of categories between the category of <fr:link href="/coherent-inverses-2U9F/" title="augmented simplex category" uri="https://forest.nickx.hu/coherent-inverses-2U9F/" display-uri="coherent-inverses-2U9F" type="local">augmented simplices</fr:link> and the opposite category of <fr:link href="/coherent-inverses-5OOR/" title="finite interval category" uri="https://forest.nickx.hu/coherent-inverses-5OOR/" display-uri="coherent-inverses-5OOR" type="local">finite intervals</fr:link>:
  <fr:tex display="block"><![CDATA[
    {\mathbf {\Delta }_+} \cong  {\mathbf {\Delta }_=}^\mathrm {op}.
  ]]></fr:tex></html:p>
 
   
   <fr:tree show-metadata="false" toc="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>8</fr:month><fr:day>12</fr:day></fr:date><fr:taxon>proof</fr:taxon></fr:frontmatter><fr:mainmatter>
  
  <html:p>
    We will establish that the functor <fr:tex display="inline"><![CDATA[{{\mathbf {\Delta }_+} \xrightarrow {{\mathbf {\Delta }_+} (-, [2])} {\mathbf {\Delta }_=}^\mathrm {op}}]]></fr:tex> is an equivalence of categories, where <fr:tex display="inline"><![CDATA[{\mathbf {\Delta }_+} (-, [2])]]></fr:tex> is a reinterpretation of the contravariant Hom functor on <fr:tex display="inline"><![CDATA[{\mathbf {\Delta }_+}]]></fr:tex>.
  </html:p>
  <html:p>
    First, <fr:tex display="inline"><![CDATA[{\mathbf {\Delta }_+} (-, [2])]]></fr:tex> can be given that type because, for any <fr:tex display="inline"><![CDATA[[n]]]></fr:tex>, the set of monotone maps <fr:tex display="inline"><![CDATA[[n] \to  [2]]]></fr:tex> can be identified with <fr:tex display="inline"><![CDATA[[n+1]]]></fr:tex>.
    This is because any such monotone map <fr:tex display="inline"><![CDATA[\alpha ]]></fr:tex> into
    <fr:tex display="block"><![CDATA[
      [2] = 0 \to  1
    ]]></fr:tex>
    is fully determined by the (unique by monotonicity) <fr:tex display="inline"><![CDATA[i \in  [n+1]]]></fr:tex> such that <fr:tex display="inline"><![CDATA[\forall  j \leq  i. \alpha  (j) = 0]]></fr:tex>.
    Pictorially, drawing
    <fr:tex display="block"><![CDATA[
      [n] = \times  \to  \underbrace {\bullet  \leftarrow  \times  \to  \cdots  \leftarrow  \times  \to  \bullet }_\text {$n$ $\bullet $s} \leftarrow  \times ,
    ]]></fr:tex>
    this is choosing <fr:tex display="inline"><![CDATA[i]]></fr:tex> as one of the <fr:tex display="inline"><![CDATA[\times ]]></fr:tex>, of which there are <fr:tex display="inline"><![CDATA[n+1]]></fr:tex> possibilities.
    This also determines that <fr:tex display="inline"><![CDATA[{\mathbf {\Delta }_+} (-, [2])]]></fr:tex> is (essentially) surjective.
  </html:p>
  <html:p>
    It remains to show that it is also fully faithful.
    Its action on a <html:span style=" color: #1b9e77;">monotone map <fr:tex display="inline"><![CDATA[[m] \xrightarrow {\alpha } [n]]]></fr:tex></html:span> is precomposition: that is, given some encoding of a monotone map <fr:tex display="inline"><![CDATA[[n] \Rightarrow  [2]]]></fr:tex>, we can obtain some encoding of a monotone map <fr:tex display="inline"><![CDATA[[m] \Rightarrow  [2]]]></fr:tex>.
    As we have made an identification between encodings of monotone maps <fr:tex display="inline"><![CDATA[[n] \Rightarrow  [2]]]></fr:tex> and simplices <fr:tex display="inline"><![CDATA[[n+1]]]></fr:tex>, we can describe this action graphically — e.g. for <fr:tex display="inline"><![CDATA[m = 2, n = 3]]></fr:tex> and <fr:tex display="inline"><![CDATA[\alpha ]]></fr:tex> given below:
    
  
  
  <html:figure><fr:resource hash="d805332c8c746d8c7830eab1b8795d6d"><fr:resource-content><html:img src="/d805332c8c746d8c7830eab1b8795d6d.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[
       \usepackage{amsmath,amssymb}
  \usepackage{mathtools}
  \usepackage{stmaryrd}
  \newcommand{\set}[1]{\left\{#1\right\}}
     \usepackage {tikz}
     \usetikzlibrary {cd}
     \usetikzlibrary {}
     
  \definecolor {green}{RGB}{27,158,119}
  \definecolor {orange}{RGB}{217,95,2}
  \definecolor {purple}{RGB}{117,112,179}

     
    ]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
      \begin {tikzcd}[]
      \times _0 \ar [r] \ar [d, color=orange] & \bullet _0 & \times _1 \ar [l] \ar [d, color=orange]
      \ar [r] & \bullet _1 & \times _2 \ar [l] \ar [lld, color=orange]
      \ar [r] & \bullet _2 & \times _3 \ar [l] \ar [lld, color=orange]
      \\
      \times _0 \ar [r] & \bullet _0 \ar [u, color=green, "\alpha _0"] & \times _1 \ar [l]
      \ar [r] & \bullet _1 \ar [urr, color=green, "\alpha _1"] & \times _2; \ar [l]
    \end {tikzcd}
    ]]></fr:resource-source></fr:resource></html:figure>



    that is, the mapping on Hom sets induced by <fr:tex display="inline"><![CDATA[{\mathbf {\Delta }_+} (-, [2])]]></fr:tex>,
    <fr:tex display="block"><![CDATA[
      \begin {aligned}
      {\mathbf {\Delta }_+} ([m], [n]) &\to  {\mathbf {\Delta }_=}^\mathrm {op} \left ( {\mathbf {\Delta }_+} ([m], [2]), {\mathbf {\Delta }_+} ([n], [2]) \right ) \\
      &= \mathbf {\Delta }_= \left ( {\mathbf {\Delta }_+} ([n], [2]), {\mathbf {\Delta }_+} ([m], [2]) \right ) \\
      &\cong  \mathbf {\Delta }_= \left ( [n+1], [m+1] \right )
      \end {aligned}
    ]]></fr:tex>
    is bijective, as the <html:span style=" color: #1b9e77;">monotone map upwards between <fr:tex display="inline"><![CDATA[\bullet ]]></fr:tex>s</html:span> determines (and is equivalently determined by) the <html:span style=" color: #d95f02;">monotone map downwards between <fr:tex display="inline"><![CDATA[\times ]]></fr:tex>s</html:span>.
  </html:p>
</fr:mainmatter></fr:tree>
 
</fr:mainmatter></fr:tree><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>8</fr:month><fr:day>12</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-MQNI/</fr:uri><fr:display-uri>coherent-inverses-MQNI</fr:display-uri><fr:route>/coherent-inverses-MQNI/</fr:route><fr:title text="Wraith's duality as a simplified Stone duality">Wraith's duality as a simplified Stone duality</fr:title><fr:taxon>remark</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
  As described by <html:span class="textual" uid="using-the-generic-interval"><fr:link href="/using-the-generic-interval/" title="Using the generic interval" uri="https://forest.nickx.hu/using-the-generic-interval/" display-uri="using-the-generic-interval" type="local">[using-the-generic-interval]</fr:link></html:span>, <fr:link href="/coherent-inverses-WFIU/" title="Singular/regular monotone duality" uri="https://forest.nickx.hu/coherent-inverses-WFIU/" display-uri="coherent-inverses-WFIU" type="local">lemma <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-WFIU/" display-uri="coherent-inverses-WFIU" /></fr:link> can be seen as the restriction of Stone duality to the case of <fr:link href="/coherent-inverses-2U9F/" title="augmented simplex category" uri="https://forest.nickx.hu/coherent-inverses-2U9F/" display-uri="coherent-inverses-2U9F" type="local">finite linear orders</fr:link>.
</html:p></fr:mainmatter></fr:tree><html:p>
      Next, we recall the most explicit definition of the ordinary (unenriched) <fr:link href="/coherent-inverses-UGIR/" title="zigzag category" uri="https://forest.nickx.hu/coherent-inverses-UGIR/" display-uri="coherent-inverses-UGIR" type="local">zigzag category</fr:link>.
    </html:p><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>8</fr:month><fr:day>12</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-UGIR/</fr:uri><fr:display-uri>coherent-inverses-UGIR</fr:display-uri><fr:route>/coherent-inverses-UGIR/</fr:route><fr:title text="zigzag category"><fr:link href="/coherent-inverses-UGIR/" title="zigzag category" uri="https://forest.nickx.hu/coherent-inverses-UGIR/" display-uri="coherent-inverses-UGIR" type="local">zigzag category</fr:link></fr:title><fr:taxon>definition</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
  For a category <fr:tex display="inline"><![CDATA[\mathcal {C}]]></fr:tex>, we define the <fr:link href="/coherent-inverses-UGIR/" title="zigzag category" uri="https://forest.nickx.hu/coherent-inverses-UGIR/" display-uri="coherent-inverses-UGIR" type="local">zigzag category</fr:link> <fr:tex display="inline"><![CDATA[\operatorname {Zig}(\mathcal {C})]]></fr:tex> as the category with:
  <html:dl>
    <html:dt>objects (<fr:link href="/coherent-inverses-UGIR/" title="zigzag category" uri="https://forest.nickx.hu/coherent-inverses-UGIR/" display-uri="coherent-inverses-UGIR" type="local">zigzags</fr:link>)</html:dt>
    <html:dd>
      iterated cospans of <fr:tex display="inline"><![CDATA[\mathcal {C}]]></fr:tex>; e.g. for objects <fr:tex display="inline"><![CDATA[r_i, s_i \in  \mathcal {C}]]></fr:tex>, and morphisms <fr:tex display="inline"><![CDATA[f_i, b_i]]></fr:tex> of <fr:tex display="inline"><![CDATA[\mathcal {C}]]></fr:tex> for <fr:tex display="inline"><![CDATA[i \in  \mathbb {N}]]></fr:tex>,
      <fr:tex display="block"><![CDATA[
        r_0 \xrightarrow {f_0} s_0 \xleftarrow {b_0} r_1 \xrightarrow {f_1} \cdots  \xleftarrow {b_n} r_{n+1}.
      ]]></fr:tex>
      The feet of the iterated cospan are called <html:em>regular levels</html:em>, while the tips are <html:em>singular levels</html:em>.
      Every <fr:link href="/coherent-inverses-UGIR/" title="zigzag category" uri="https://forest.nickx.hu/coherent-inverses-UGIR/" display-uri="coherent-inverses-UGIR" type="local">zigzag</fr:link> has an <fr:link href="/coherent-inverses-9V13/" title="singular projection" uri="https://forest.nickx.hu/coherent-inverses-9V13/" display-uri="coherent-inverses-9V13" type="local">associated <html:em>length</html:em></fr:link>, which is its number of singular levels.
    </html:dd>
    <html:dt>morphisms (<fr:link href="/coherent-inverses-UGIR/" title="zigzag category" uri="https://forest.nickx.hu/coherent-inverses-UGIR/" display-uri="coherent-inverses-UGIR" type="local">zigzag maps</fr:link>)</html:dt>
    <html:dd>
      a collection of morphisms of <fr:tex display="inline"><![CDATA[\mathcal {C}]]></fr:tex> arranging into a (<html:em>singular</html:em>) monotone map of singular levels, combined with a <fr:link href="/coherent-inverses-WFIU/" title="Singular/regular monotone duality" uri="https://forest.nickx.hu/coherent-inverses-WFIU/" display-uri="coherent-inverses-WFIU" type="local">dually determined</fr:link> antiparallel (<html:em>regular</html:em>) monotone map of regular levels, such that the induced planar diagram in <fr:tex display="inline"><![CDATA[\mathcal {C}]]></fr:tex> commutes.
      E.g. a commuting diagram in <fr:tex display="inline"><![CDATA[\mathcal {C}]]></fr:tex> of the form:
      
  
  
  <html:figure><fr:resource hash="228080b5e02bd033ec32e336116519b2"><fr:resource-content><html:img src="/228080b5e02bd033ec32e336116519b2.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[
       \usepackage{amsmath,amssymb}
  \usepackage{mathtools}
  \usepackage{stmaryrd}
  \newcommand{\set}[1]{\left\{#1\right\}}
     \usepackage {tikz}
     \usetikzlibrary {cd}
     \usetikzlibrary {}
     
  \definecolor {green}{RGB}{27,158,119}
  \definecolor {orange}{RGB}{217,95,2}
  \definecolor {purple}{RGB}{117,112,179}

     
    ]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
      \begin {tikzcd}[]
        r^\prime _0 \ar [r, "f^\prime _0"] \ar [d, leftarrow, color=orange, "\hat {\alpha }_0"] & s^\prime _0 & r^\prime _1 \ar [r, "f^\prime _1"] \ar [l, "b^\prime _0"'] \ar [d, leftarrow, color=orange, "\hat {\alpha }_1"] & s^\prime _1 & r^\prime _2 \ar [r, "f^\prime _2"] \ar [l, "b^\prime _1"'] \ar [lld, leftarrow, color=orange, "\hat {\alpha }_2"] & s^\prime _2 & r^\prime _3 \ar [l, "b^\prime _2"'] \ar [lld, leftarrow, color=orange, "\hat {\alpha }_3"] \\
        r_0 \ar [r, "f_0"'] & s_0 \ar [u, color=green, "\alpha _0"] & r_1 \ar [r, "f_1"'] \ar [l, "b_0"] & s_1 \ar [urr, color=green, "\alpha _1"] & r_2, \ar [l, "b_1"]
      \end {tikzcd}
    ]]></fr:resource-source></fr:resource></html:figure>



      where the <html:span style=" color: #1b9e77;">morphisms labelled <fr:tex display="inline"><![CDATA[\alpha ]]></fr:tex></html:span> arrange into the <html:span style=" color: #1b9e77;">singular monotone map <fr:tex display="inline"><![CDATA[s_0 \mapsto  s^\prime _0, s_1 \mapsto  s^\prime _2]]></fr:tex></html:span>, and the <html:span style=" color: #d95f02;">morphisms labelled <fr:tex display="inline"><![CDATA[\hat {\alpha }]]></fr:tex></html:span> arrange into the <html:span style=" color: #d95f02;">(antiparallel) regular monotone map <fr:tex display="inline"><![CDATA[r^\prime _0 \mapsto  r_0, r^\prime _1 \mapsto  r_1, r^\prime _2 \mapsto  r_1, r^\prime _3, \mapsto  r_2]]></fr:tex></html:span>.
      Monotonicity is essentially the condition that the induced diagram is planar, i.e. that no arrows cross.
    </html:dd>
  </html:dl></html:p><html:p>
  Composition of <fr:link href="/coherent-inverses-UGIR/" title="zigzag category" uri="https://forest.nickx.hu/coherent-inverses-UGIR/" display-uri="coherent-inverses-UGIR" type="local">zigzag maps</fr:link> is given by taking the composition of <fr:tex display="inline"><![CDATA[\mathcal {C}]]></fr:tex> along composition of monotone maps (as in <fr:tex display="inline"><![CDATA[{\mathbf {\Delta }_+}]]></fr:tex>).
  The identity <fr:link href="/coherent-inverses-UGIR/" title="zigzag category" uri="https://forest.nickx.hu/coherent-inverses-UGIR/" display-uri="coherent-inverses-UGIR" type="local">zigzag map</fr:link> is given by the identity morphisms of <fr:tex display="inline"><![CDATA[\mathcal {C}]]></fr:tex> equipped with the identity monotone map.
</html:p></fr:mainmatter></fr:tree><html:p>
      It will transpire that the action <fr:tex display="inline"><![CDATA[\operatorname {Zig}(-)]]></fr:tex> of taking a category to its <fr:link href="/coherent-inverses-UGIR/" title="zigzag category" uri="https://forest.nickx.hu/coherent-inverses-UGIR/" display-uri="coherent-inverses-UGIR" type="local">category of zigzags</fr:link> is functorial, but we will prove this more abstractly later rather than with the explicit definition of <fr:link href="/coherent-inverses-UGIR/" title="zigzag category" uri="https://forest.nickx.hu/coherent-inverses-UGIR/" display-uri="coherent-inverses-UGIR" type="local">definition <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-UGIR/" display-uri="coherent-inverses-UGIR" /></fr:link>.
    </html:p><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>8</fr:month><fr:day>12</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-BWBW/</fr:uri><fr:display-uri>coherent-inverses-BWBW</fr:display-uri><fr:route>/coherent-inverses-BWBW/</fr:route><fr:title text="Unlabelled zigzag category">Unlabelled <fr:link href="/coherent-inverses-UGIR/" title="zigzag category" uri="https://forest.nickx.hu/coherent-inverses-UGIR/" display-uri="coherent-inverses-UGIR" type="local">zigzag category</fr:link></fr:title><fr:taxon>example</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
  For the terminal category <fr:tex display="inline"><![CDATA[\mathbf {1} \coloneqq  \set {\cdot }]]></fr:tex>, the category <fr:tex display="inline"><![CDATA[\operatorname {Zig}(\mathbf {1})]]></fr:tex> is the category with objects:
  <fr:tex display="block"><![CDATA[
    \cdot  \to  \underbrace {\cdot  \leftarrow  \cdot  \to  \cdots  \leftarrow  \cdot  \to  \cdot }_{\text {$n \in  \mathbb {N}$ singular levels}} \leftarrow  \cdot ,
  ]]></fr:tex>
  where every morphism is the identity.
</html:p><html:p><fr:link href="/coherent-inverses-UGIR/" title="zigzag category" uri="https://forest.nickx.hu/coherent-inverses-UGIR/" display-uri="coherent-inverses-UGIR" type="local">Zigzag maps</fr:link> are given by a monotone map between singular levels, trivially equipped with a collection of morphisms of <fr:tex display="inline"><![CDATA[\mathbf {1}]]></fr:tex>.
</html:p><html:p>
  In other words, there is an equivalence of categories
  <fr:tex display="block"><![CDATA[
    \operatorname {Zig}(\mathbf {1}) \cong  {\mathbf {\Delta }_+}.
  ]]></fr:tex></html:p></fr:mainmatter></fr:tree><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>8</fr:month><fr:day>12</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-9V13/</fr:uri><fr:display-uri>coherent-inverses-9V13</fr:display-uri><fr:route>/coherent-inverses-9V13/</fr:route><fr:title text="singular projection"><fr:link href="/coherent-inverses-9V13/" title="singular projection" uri="https://forest.nickx.hu/coherent-inverses-9V13/" display-uri="coherent-inverses-9V13" type="local">singular projection</fr:link></fr:title><fr:taxon>definition</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
  Every <fr:link href="/coherent-inverses-UGIR/" title="zigzag category" uri="https://forest.nickx.hu/coherent-inverses-UGIR/" display-uri="coherent-inverses-UGIR" type="local">zigzag category</fr:link> <fr:tex display="inline"><![CDATA[\operatorname {Zig}(\mathcal {C})]]></fr:tex> is naturally equipped with a <fr:link href="/coherent-inverses-9V13/" title="singular projection" uri="https://forest.nickx.hu/coherent-inverses-9V13/" display-uri="coherent-inverses-9V13" type="local">singular projection</fr:link> functor <fr:tex display="inline"><![CDATA[{\operatorname {Zig}(\mathcal {C}) \xrightarrow {\pi } {\mathbf {\Delta }_+}}]]></fr:tex>, which sends each <fr:link href="/coherent-inverses-UGIR/" title="zigzag category" uri="https://forest.nickx.hu/coherent-inverses-UGIR/" display-uri="coherent-inverses-UGIR" type="local">zigzag</fr:link> <fr:tex display="inline"><![CDATA[Z]]></fr:tex> to <fr:tex display="inline"><![CDATA[[n-1]]]></fr:tex> where <fr:tex display="inline"><![CDATA[n]]></fr:tex> is the number of singular levels of <fr:tex display="inline"><![CDATA[Z]]></fr:tex> (its <html:em>length</html:em>).
</html:p><html:p>
  Each <fr:link href="/coherent-inverses-UGIR/" title="zigzag category" uri="https://forest.nickx.hu/coherent-inverses-UGIR/" display-uri="coherent-inverses-UGIR" type="local">zigzag map</fr:link> <fr:tex display="inline"><![CDATA[Z \to  Z^\prime ]]></fr:tex> is sent to its underlying monotone map between singular levels.
</html:p></fr:mainmatter></fr:tree><html:p>
      Again, it will later become apparent that the <fr:link href="/coherent-inverses-9V13/" title="singular projection" uri="https://forest.nickx.hu/coherent-inverses-9V13/" display-uri="coherent-inverses-9V13" type="local">singular projection</fr:link> functor is the image of the terminal functor <fr:tex display="inline"><![CDATA[\mathcal {C} \xrightarrow {!} \mathbf {1}]]></fr:tex> in the functor <fr:tex display="inline"><![CDATA[\operatorname {Zig}(-)]]></fr:tex>, along the equivalence observed in <fr:link href="/coherent-inverses-BWBW/" title="Unlabelled zigzag category" uri="https://forest.nickx.hu/coherent-inverses-BWBW/" display-uri="coherent-inverses-BWBW" type="local">example <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-BWBW/" display-uri="coherent-inverses-BWBW" /></fr:link>.
    </html:p><html:p>
      Under certain conditions, the <fr:link href="/coherent-inverses-9V13/" title="singular projection" uri="https://forest.nickx.hu/coherent-inverses-9V13/" display-uri="coherent-inverses-9V13" type="local">singular projection</fr:link> admits certain opcartesian lifts: informally, this allows us to compute colimits in a <fr:link href="/coherent-inverses-UGIR/" title="zigzag category" uri="https://forest.nickx.hu/coherent-inverses-UGIR/" display-uri="coherent-inverses-UGIR" type="local">zigzag category</fr:link> by computing them in <fr:tex display="inline"><![CDATA[{\mathbf {\Delta }_+}]]></fr:tex> and lifting each fibre <html:span tid="§ 3" uid="high-level-methods-for-homotopy-construction-in-associative-n-categories"><fr:link href="/high-level-methods-for-homotopy-construction-in-associative-n-categories/" title="High-level methods for homotopy construction in associative $n$-categories" uri="https://forest.nickx.hu/high-level-methods-for-homotopy-construction-in-associative-n-categories/" display-uri="high-level-methods-for-homotopy-construction-in-associative-n-categories" type="local">[§ 3, high-level-methods-for-homotopy-construction-in-associative-n-categories]</fr:link></html:span>, although we shall derive an alternative means to realise this fact in <fr:link href="/coherent-inverses-zigzag-colimits/" title="Coherent inverses in higher-categorical string diagrams › Framed zigzag enriched categories › The zigzag category, abstractly › Colimits in the zigzag category" uri="https://forest.nickx.hu/coherent-inverses-zigzag-colimits/" display-uri="coherent-inverses-zigzag-colimits" type="local">section <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-zigzag-colimits/" display-uri="coherent-inverses-zigzag-colimits" /></fr:link>.
    </html:p></fr:mainmatter></fr:tree><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2023</fr:year><fr:month>12</fr:month><fr:day>3</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-zigzags-abstractly/</fr:uri><fr:display-uri>coherent-inverses-zigzags-abstractly</fr:display-uri><fr:route>/coherent-inverses-zigzags-abstractly/</fr:route><fr:title text="The zigzag category, abstractly">The <fr:link href="/coherent-inverses-UGIR/" title="zigzag category" uri="https://forest.nickx.hu/coherent-inverses-UGIR/" display-uri="coherent-inverses-UGIR" type="local">zigzag category</fr:link>, abstractly</fr:title><fr:taxon>section</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
      The <fr:link href="/coherent-inverses-UGIR/" title="zigzag category" uri="https://forest.nickx.hu/coherent-inverses-UGIR/" display-uri="coherent-inverses-UGIR" type="local">zigzag category</fr:link> described explicitly is nice for the purposes of implementing a proof assistant, but it leaves much to be desired from a theoretical perspective.
      For instance, we did not show that <fr:tex display="inline"><![CDATA[\operatorname {Zig}(-)]]></fr:tex> is a functor, nor did we establish what the universal property of <fr:tex display="inline"><![CDATA[\operatorname {Zig}(\mathcal {C})]]></fr:tex> is, if any.
    </html:p><html:p>
      In order to do this, we first recast the ordinary <fr:link href="/coherent-inverses-UGIR/" title="zigzag category" uri="https://forest.nickx.hu/coherent-inverses-UGIR/" display-uri="coherent-inverses-UGIR" type="local">zigzag category</fr:link> construction in a more abstract way, which simultaneously addresses these concerns and moreover provides a foundation that will generalise more readily to the enriched setting.
    </html:p><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2023</fr:year><fr:month>12</fr:month><fr:day>3</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-zigzags-polynomial/</fr:uri><fr:display-uri>coherent-inverses-zigzags-polynomial</fr:display-uri><fr:route>/coherent-inverses-zigzags-polynomial/</fr:route><fr:title text="Via polynomial functors">Via polynomial functors</fr:title><fr:taxon>section</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
        A first observation is that all the combinatorics of the <fr:link href="/coherent-inverses-UGIR/" title="zigzag category" uri="https://forest.nickx.hu/coherent-inverses-UGIR/" display-uri="coherent-inverses-UGIR" type="local">zigzag category</fr:link> can be packaged into a single gadget, which we can do equivalently in two ways: firstly, as a polynomial functor, and then more generally as a <fr:link href="/coherent-inverses-2H06/" title="parametric right adjoint" uri="https://forest.nickx.hu/coherent-inverses-2H06/" display-uri="coherent-inverses-2H06" type="local">parametric right adjoint</fr:link>.
      </html:p><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>8</fr:month><fr:day>9</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-2H06/</fr:uri><fr:display-uri>coherent-inverses-2H06</fr:display-uri><fr:route>/coherent-inverses-2H06/</fr:route><fr:title text="parametric right adjoint"><fr:link href="/coherent-inverses-2H06/" title="parametric right adjoint" uri="https://forest.nickx.hu/coherent-inverses-2H06/" display-uri="coherent-inverses-2H06" type="local">parametric right adjoint</fr:link></fr:title><fr:taxon>definition</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
  Let <fr:tex display="inline"><![CDATA[{\mathcal {C} \xrightarrow {F} \mathcal {D}}]]></fr:tex> be a functor, such that <fr:tex display="inline"><![CDATA[\mathcal {C}]]></fr:tex> admits a terminal object <fr:tex display="inline"><![CDATA[\mathbf {1} \in  \mathcal {C}]]></fr:tex>.
<fr:tex display="inline"><![CDATA[F]]></fr:tex> factors as a composite
  <fr:tex display="block"><![CDATA[
    {\mathcal {C} \xrightarrow {R} \mathcal {D} / F \mathbf {1}} \xrightarrow {\Sigma _{F \mathbf {1}}} \mathcal {D},
  ]]></fr:tex>
  where the second functor is the forgetful projection onto the domain.
</html:p><html:p>
  When <fr:tex display="inline"><![CDATA[R]]></fr:tex> is a right-adjoint functor:
  
  
  
  <html:figure><fr:resource hash="6661a4a83a5c704618e57da9c075cda3"><fr:resource-content><html:img src="/6661a4a83a5c704618e57da9c075cda3.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[
       \usepackage{amsmath,amssymb}
  \usepackage{mathtools}
  \usepackage{stmaryrd}
  \newcommand{\set}[1]{\left\{#1\right\}}
     \usepackage {tikz}
     \usetikzlibrary {cd}
     \usetikzlibrary {}
     
  \definecolor {green}{RGB}{27,158,119}
  \definecolor {orange}{RGB}{217,95,2}
  \definecolor {purple}{RGB}{117,112,179}

     
    ]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
      \begin {tikzcd}[]
         \mathcal {C}
          \ar [r, shift left=1ex, phantom, "", ""'{name=UL}]
          \ar [r, shift right=1ex, , "R"', ""{name=UR}]
        & \mathcal {D} / F \mathbf {1}
          \ar [l, shift left=1ex, phantom, "", ""'{name=DL}]
          \ar [l, shift right=1ex, , "L"', ""{name=DR}]
        \ar [from=UL, to=DL, "", phantom]
        \ar [from=UR, to=DR, "\dashv ", phantom, sloped] \ar [r, "\Sigma _{F \mathbf {1}}"] & \mathcal {D}
      \end {tikzcd}
    ]]></fr:resource-source></fr:resource></html:figure>



  then we say that <fr:tex display="inline"><![CDATA[F]]></fr:tex> is a <fr:link href="/coherent-inverses-2H06/" title="parametric right adjoint" uri="https://forest.nickx.hu/coherent-inverses-2H06/" display-uri="coherent-inverses-2H06" type="local">parametric right adjoint</fr:link>.
</html:p></fr:mainmatter></fr:tree><html:p>
        By using the <fr:link href="/coherent-inverses-BWBW/" title="Unlabelled zigzag category" uri="https://forest.nickx.hu/coherent-inverses-BWBW/" display-uri="coherent-inverses-BWBW" type="local">observation that <fr:tex display="inline"><![CDATA[\operatorname {Zig}(\mathbf {1}) \cong  {\mathbf {\Delta }_+}]]></fr:tex></fr:link>, one can realise the <fr:link href="/coherent-inverses-SKZ7/" title="zigzag functor as a parametric right adjoint" uri="https://forest.nickx.hu/coherent-inverses-SKZ7/" display-uri="coherent-inverses-SKZ7" type="local">zigzag functor</fr:link> as an instance of a <fr:link href="/coherent-inverses-2H06/" title="parametric right adjoint" uri="https://forest.nickx.hu/coherent-inverses-2H06/" display-uri="coherent-inverses-2H06" type="local">parametric right adjoint</fr:link>.
      </html:p><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>8</fr:month><fr:day>11</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-SKZ7/</fr:uri><fr:display-uri>coherent-inverses-SKZ7</fr:display-uri><fr:route>/coherent-inverses-SKZ7/</fr:route><fr:title text="zigzag functor as a parametric right adjoint"><fr:link href="/coherent-inverses-SKZ7/" title="zigzag functor as a parametric right adjoint" uri="https://forest.nickx.hu/coherent-inverses-SKZ7/" display-uri="coherent-inverses-SKZ7" type="local">zigzag functor</fr:link> as a <fr:link href="/coherent-inverses-2H06/" title="parametric right adjoint" uri="https://forest.nickx.hu/coherent-inverses-2H06/" display-uri="coherent-inverses-2H06" type="local">parametric right adjoint</fr:link></fr:title><fr:taxon>definition</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
  The <fr:link href="/coherent-inverses-SKZ7/" title="zigzag functor as a parametric right adjoint" uri="https://forest.nickx.hu/coherent-inverses-SKZ7/" display-uri="coherent-inverses-SKZ7" type="local">zigzag functor</fr:link> is the <fr:link href="/coherent-inverses-2H06/" title="parametric right adjoint" uri="https://forest.nickx.hu/coherent-inverses-2H06/" display-uri="coherent-inverses-2H06" type="local">parametric right adjoint</fr:link> given by
  
  
  
  <html:figure><fr:resource hash="71f3b023b7608836345f88545a67996e"><fr:resource-content><html:img src="/71f3b023b7608836345f88545a67996e.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[
       \usepackage{amsmath,amssymb}
  \usepackage{mathtools}
  \usepackage{stmaryrd}
  \newcommand{\set}[1]{\left\{#1\right\}}
     \usepackage {tikz}
     \usetikzlibrary {cd}
     \usetikzlibrary {}
     
  \definecolor {green}{RGB}{27,158,119}
  \definecolor {orange}{RGB}{217,95,2}
  \definecolor {purple}{RGB}{117,112,179}

     
    ]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
      \begin {tikzcd}[
      execute at end picture={
        \node [anchor=east] at (current bounding box.west) {$\operatorname {Zig}(-) \colon $};
      }
    ]
         \mathbf {Cat}
          \ar [r, shift left=1ex, phantom, "", ""'{name=UL}]
          \ar [r, shift right=1ex, , "\mathsf {Zig}"', ""{name=UR}]
        & \mathbf {Cat} / {\mathbf {\Delta }_+}
          \ar [l, shift left=1ex, phantom, "", ""'{name=DL}]
          \ar [l, shift right=1ex, , "\mathsf {Expl}"', ""{name=DR}]
        \ar [from=UL, to=DL, "", phantom]
        \ar [from=UR, to=DR, "\dashv ", phantom, sloped] \ar [r, "\Sigma _{!_{\mathbf {\Delta }_+}}"] & \mathbf {Cat} ,
      \end {tikzcd}
    ]]></fr:resource-source></fr:resource></html:figure>



  where <fr:tex display="inline"><![CDATA[\mathsf {Zig}]]></fr:tex> is essentially given by the <fr:link href="/coherent-inverses-UGIR/" title="zigzag category" uri="https://forest.nickx.hu/coherent-inverses-UGIR/" display-uri="coherent-inverses-UGIR" type="local">zigzag category</fr:link>, equipped with the <fr:link href="/coherent-inverses-9V13/" title="singular projection" uri="https://forest.nickx.hu/coherent-inverses-9V13/" display-uri="coherent-inverses-9V13" type="local">singular projection</fr:link>.
</html:p></fr:mainmatter></fr:tree><html:p>
        We have a proof obligation: we must show that <fr:tex display="inline"><![CDATA[{\mathbf {Cat} \xrightarrow {\mathsf {Zig}} \mathbf {Cat} / {\mathbf {\Delta }_+}}]]></fr:tex> indeed is a right adjoint.
        One way to do this is to observe that, in <fr:link href="/coherent-inverses-UGIR/" title="zigzag category" uri="https://forest.nickx.hu/coherent-inverses-UGIR/" display-uri="coherent-inverses-UGIR" type="local">definition <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-UGIR/" display-uri="coherent-inverses-UGIR" /></fr:link>, a <fr:link href="/coherent-inverses-UGIR/" title="zigzag category" uri="https://forest.nickx.hu/coherent-inverses-UGIR/" display-uri="coherent-inverses-UGIR" type="local">zigzag map</fr:link> has two constituents: its underlying monotone map between singular levels (<html:em>shape</html:em>) and a collection of morphisms in the category over which <fr:link href="/coherent-inverses-UGIR/" title="zigzag category" uri="https://forest.nickx.hu/coherent-inverses-UGIR/" display-uri="coherent-inverses-UGIR" type="local">zigzags</fr:link> are taken (<html:em>type</html:em>).
        We can formally separate the two by defining a ‘<fr:link href="/coherent-inverses-V0EG/" title="universal zigzag bundle" uri="https://forest.nickx.hu/coherent-inverses-V0EG/" display-uri="coherent-inverses-V0EG" type="local">universal bundle</fr:link>’ for <fr:link href="/coherent-inverses-UGIR/" title="zigzag category" uri="https://forest.nickx.hu/coherent-inverses-UGIR/" display-uri="coherent-inverses-UGIR" type="local">zigzags</fr:link> (providing the shape) and ‘taking pullbacks’ to combine this with information expressing type.
      </html:p><html:p>
        
        
        
        By analogy, taking the category <fr:tex display="inline"><![CDATA[\mathbf {Set}]]></fr:tex> as a kind of ‘classifying space’, the ‘universal <fr:tex display="inline"><![CDATA[\mathbf {Set}]]></fr:tex>-bundle’ is given by the forgetful functor <fr:tex display="inline"><![CDATA[{\mathbf {Set}_* \xrightarrow {U} \mathbf {Set}}]]></fr:tex> from pointed sets to sets, through which we find a bijective correspondence between discrete fibrations <fr:tex display="inline"><![CDATA[{{\textstyle  \int  F} \xrightarrow {\pi _{F}} {\mathcal {C}}^\mathrm {op}}]]></fr:tex> and presheaves <fr:tex display="inline"><![CDATA[{{\mathcal {C}}^\mathrm {op} \xrightarrow {F} \mathbf {Set}}]]></fr:tex> by pullback along <fr:tex display="inline"><![CDATA[U]]></fr:tex>:
        
  
  
  <html:figure><fr:resource hash="e826dc5c2138fc6b3048bd2eba15ccfd"><fr:resource-content><html:img src="/e826dc5c2138fc6b3048bd2eba15ccfd.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[
       \usepackage{amsmath,amssymb}
  \usepackage{mathtools}
  \usepackage{stmaryrd}
  \newcommand{\set}[1]{\left\{#1\right\}}
     \usepackage {tikz}
     \usetikzlibrary {cd}
     \usetikzlibrary {}
     
  \definecolor {green}{RGB}{27,158,119}
  \definecolor {orange}{RGB}{217,95,2}
  \definecolor {purple}{RGB}{117,112,179}

     
    ]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
      \begin {tikzcd}[]
          {\textstyle  \int  F} \ar [r] \ar [d, "\pi _{F}"'] \ar [dr, phantom, "\lrcorner ", very near start] & \mathbf {Set}_* \ar [d, "U"] \\
          {\mathcal {C}}^\mathrm {op} \ar [r, "F"'] & \mathbf {Set} .
        \end {tikzcd}
    ]]></fr:resource-source></fr:resource></html:figure>



        Any discrete fibration can be identified (up to isomorphism) as a pullback along <fr:tex display="inline"><![CDATA[U]]></fr:tex> of some presheaf, so in this sense the universal <fr:tex display="inline"><![CDATA[\mathbf {Set}]]></fr:tex>-bundle classifies the discrete fibrations.
        The categorification of this, replacing <fr:tex display="inline"><![CDATA[\mathbf {Set}]]></fr:tex> with <fr:tex display="inline"><![CDATA[\mathbf {Cat}]]></fr:tex>, is called the Grothendieck construction, which classifies the (not necessarily discrete) fibrations through a bicategorical equivalence with <fr:tex display="inline"><![CDATA[\mathbf {Cat}]]></fr:tex>-valued presheaves.
        For us, the idea is that <fr:tex display="inline"><![CDATA[{\mathbf {\Delta }_+}]]></fr:tex> will act as the classifying space below the <fr:link href="/coherent-inverses-V0EG/" title="universal zigzag bundle" uri="https://forest.nickx.hu/coherent-inverses-V0EG/" display-uri="coherent-inverses-V0EG" type="local">universal zigzag bundle</fr:link>, allowing us to classify the <fr:link href="/coherent-inverses-UGIR/" title="zigzag category" uri="https://forest.nickx.hu/coherent-inverses-UGIR/" display-uri="coherent-inverses-UGIR" type="local">zigzag categories</fr:link>, albeit with more machinery than a mere pullback.
      </html:p><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>7</fr:month><fr:day>6</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-V0EG/</fr:uri><fr:display-uri>coherent-inverses-V0EG</fr:display-uri><fr:route>/coherent-inverses-V0EG/</fr:route><fr:title text="universal zigzag bundle"><fr:link href="/coherent-inverses-V0EG/" title="universal zigzag bundle" uri="https://forest.nickx.hu/coherent-inverses-V0EG/" display-uri="coherent-inverses-V0EG" type="local">universal zigzag bundle</fr:link></fr:title><fr:taxon>definition</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
  Let <fr:tex display="inline"><![CDATA[\mathsf {Z}]]></fr:tex> be the category with:
  <html:dl>
    <html:dt>objects</html:dt>
    <html:dd>
      <fr:tex display="inline"><![CDATA[\set {r_i^n \mid  i \leq  n \in  \mathbb {N}} \cup  \set {s_i^n \mid  i < n \in  \mathbb {N}}]]></fr:tex>
    </html:dd>
    <html:dt>morphisms</html:dt>
    <html:dd>
      sets of monotone maps
      <fr:tex display="block"><![CDATA[
        \begin {aligned}
          \mathsf {Z} (s_i^m, s_j^n) &\coloneqq  \set { {[m-1] \xrightarrow {\alpha } [n-1]} \mid  \alpha  (i) = j }, \\
          \mathsf {Z} (r_i^m, r_j^n) &\coloneqq  \set { {[m-1] \xrightarrow {\alpha } [n-1]} \mid  \mathsf {R} \alpha  (j) = i }, \\
          \mathsf {Z} (r_i^m, s_j^n) &\coloneqq  \set { {[m-1] \xrightarrow {\alpha } [n-1]} \mid  \mathsf {R} \alpha  (j) \leq  i \leq  \mathsf {R} \alpha  (j+1) }, \\
          \mathsf {Z} (s_i^m, r_j^n) &\coloneqq  \emptyset ,
        \end {aligned}
      ]]></fr:tex>
      where <fr:tex display="inline"><![CDATA[\mathsf {R}]]></fr:tex> is the map which sends a monotone map <fr:tex display="inline"><![CDATA[[m] \to  [n]]]></fr:tex> to its dual monotone map <fr:tex display="inline"><![CDATA[[n+1] \to  [m+1]]]></fr:tex>, as in <fr:link href="/coherent-inverses-WFIU/" title="Singular/regular monotone duality" uri="https://forest.nickx.hu/coherent-inverses-WFIU/" display-uri="coherent-inverses-WFIU" type="local">lemma <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-WFIU/" display-uri="coherent-inverses-WFIU" /></fr:link>.
    </html:dd>
  </html:dl>
  Composition is given by composition of monotone maps.
</html:p><html:p>
  There is a canonical functor <fr:tex display="inline"><![CDATA[{\mathsf {Z} \xrightarrow {p} {\mathbf {\Delta }_+}}]]></fr:tex> that sends <fr:tex display="inline"><![CDATA[r_i^n]]></fr:tex> and <fr:tex display="inline"><![CDATA[s_i^n]]></fr:tex> to <fr:tex display="inline"><![CDATA[[n-1]]]></fr:tex>, the <fr:link href="/coherent-inverses-V0EG/" title="universal zigzag bundle" uri="https://forest.nickx.hu/coherent-inverses-V0EG/" display-uri="coherent-inverses-V0EG" type="local">universal zigzag bundle</fr:link>, which is exponentiable in <fr:tex display="inline"><![CDATA[\mathbf {Cat}]]></fr:tex>.
</html:p></fr:mainmatter></fr:tree><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>8</fr:month><fr:day>12</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-6EJS/</fr:uri><fr:display-uri>coherent-inverses-6EJS</fr:display-uri><fr:route>/coherent-inverses-6EJS/</fr:route><fr:title text="\mathsf {Zig} is a right adjoint"><fr:tex display="inline"><![CDATA[\mathsf {Zig}]]></fr:tex> is a right adjoint</fr:title><fr:taxon>proposition</fr:taxon></fr:frontmatter><fr:mainmatter><html:p><fr:tex display="inline"><![CDATA[\mathsf {Zig}]]></fr:tex> (<fr:link href="/coherent-inverses-SKZ7/" title="zigzag functor as a parametric right adjoint" uri="https://forest.nickx.hu/coherent-inverses-SKZ7/" display-uri="coherent-inverses-SKZ7" type="local">definition <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-SKZ7/" display-uri="coherent-inverses-SKZ7" /></fr:link>) is a right adjoint.
</html:p>
 
   
   <fr:tree show-metadata="false" toc="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>8</fr:month><fr:day>12</fr:day></fr:date><fr:taxon>proof</fr:taxon></fr:frontmatter><fr:mainmatter>
  
  
  <html:p>
    The <fr:link href="/coherent-inverses-V0EG/" title="universal zigzag bundle" uri="https://forest.nickx.hu/coherent-inverses-V0EG/" display-uri="coherent-inverses-V0EG" type="local">universal zigzag bundle</fr:link> <fr:tex display="inline"><![CDATA[{\mathsf {Z} \xrightarrow {p} {\mathbf {\Delta }_+}}]]></fr:tex> is exponentiable, so its induced pullback functor <fr:tex display="inline"><![CDATA[p^*]]></fr:tex> admits a right adjoint:
    
  
  
  <html:figure><fr:resource hash="b8ed0e42da67dff9d9971517f472fd57"><fr:resource-content><html:img src="/b8ed0e42da67dff9d9971517f472fd57.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[
       \usepackage{amsmath,amssymb}
  \usepackage{mathtools}
  \usepackage{stmaryrd}
  \newcommand{\set}[1]{\left\{#1\right\}}
     \usepackage {tikz}
     \usetikzlibrary {cd}
     \usetikzlibrary {}
     
  \definecolor {green}{RGB}{27,158,119}
  \definecolor {orange}{RGB}{217,95,2}
  \definecolor {purple}{RGB}{117,112,179}

     
    ]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
      \begin {tikzcd}[]
         \mathbf {Cat} / \mathsf {Z}
          \ar [r, shift left=1ex, phantom, "", ""'{name=UL}]
          \ar [r, shift right=1ex, , "\prod {p}"', ""{name=UR}]
        & \mathbf {Cat} / {\mathbf {\Delta }_+}.
          \ar [l, shift left=1ex, phantom, "", ""'{name=DL}]
          \ar [l, shift right=1ex, , "p^*"', ""{name=DR}]
        \ar [from=UL, to=DL, "", phantom]
        \ar [from=UR, to=DR, "\dashv ", phantom, sloped] 
      \end {tikzcd}
    ]]></fr:resource-source></fr:resource></html:figure></html:p>
  <html:p>
    Moreover, every pullback functor admits a left adjoint.
    In particular, so does the pullback functor induced by the terminal functor <fr:tex display="inline"><![CDATA[\mathsf {Z} \xrightarrow {!_{\mathsf {Z}}} \mathbf {1}]]></fr:tex>:
    
  
  
  <html:figure><fr:resource hash="9fdc68963e417a425a0c9a3d775335f4"><fr:resource-content><html:img src="/9fdc68963e417a425a0c9a3d775335f4.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[
       \usepackage{amsmath,amssymb}
  \usepackage{mathtools}
  \usepackage{stmaryrd}
  \newcommand{\set}[1]{\left\{#1\right\}}
     \usepackage {tikz}
     \usetikzlibrary {cd}
     \usetikzlibrary {}
     
  \definecolor {green}{RGB}{27,158,119}
  \definecolor {orange}{RGB}{217,95,2}
  \definecolor {purple}{RGB}{117,112,179}

     
    ]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
      \begin {tikzcd}[]
         \mathbf {Cat} / \mathbf {1}
          \ar [r, shift left=1ex, phantom, "", ""'{name=UL}]
          \ar [r, shift right=1ex, , "!_{\mathsf {Z}}^*"', ""{name=UR}]
        & \mathbf {Cat} / \mathsf {Z}.
          \ar [l, shift left=1ex, phantom, "", ""'{name=DL}]
          \ar [l, shift right=1ex, , "\Sigma _{!_{\mathsf {Z}}}"', ""{name=DR}]
        \ar [from=UL, to=DL, "", phantom]
        \ar [from=UR, to=DR, "\dashv ", phantom, sloped] 
      \end {tikzcd}
    ]]></fr:resource-source></fr:resource></html:figure></html:p>
  <html:p>
    Furthermore, as <fr:tex display="inline"><![CDATA[\mathbf {1}]]></fr:tex> is terminal, there is an (adjoint) equivalence of categories
    <fr:tex display="block"><![CDATA[
      \mathbf {Cat} \cong  \mathbf {Cat} / \mathbf {1}.
    ]]></fr:tex></html:p>
  <html:p>
    Composing these adjunctions we can deduce
    <fr:tex display="block"><![CDATA[
      \mathsf {Zig}\colon  \mathbf {Cat} \cong  \mathbf {Cat} / \mathbf {1} \xrightarrow {!_{\mathsf {Z}}^*} \mathbf {Cat} / \mathsf {Z} \xrightarrow {\Pi _{p}} \mathbf {Cat} / {\mathbf {\Delta }_+}
    ]]></fr:tex>
    is a composite of right adjoints and therefore a right adjoint.
  </html:p>
</fr:mainmatter></fr:tree>
 
</fr:mainmatter></fr:tree><html:p>
        Furthermore, this allows one to express the entire <fr:link href="/coherent-inverses-SKZ7/" title="zigzag functor as a parametric right adjoint" uri="https://forest.nickx.hu/coherent-inverses-SKZ7/" display-uri="coherent-inverses-SKZ7" type="local">zigzag functor</fr:link> as a polynomial functor.
      </html:p><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>7</fr:month><fr:day>6</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-7TQX/</fr:uri><fr:display-uri>coherent-inverses-7TQX</fr:display-uri><fr:route>/coherent-inverses-7TQX/</fr:route><fr:title text="zigzag polynomial functor"><fr:link href="/coherent-inverses-7TQX/" title="zigzag polynomial functor" uri="https://forest.nickx.hu/coherent-inverses-7TQX/" display-uri="coherent-inverses-7TQX" type="local">zigzag polynomial functor</fr:link></fr:title><fr:taxon>definition</fr:taxon></fr:frontmatter><fr:mainmatter><html:p><fr:tex display="inline"><![CDATA[{\mathbf {Cat} \xrightarrow {\operatorname {Zig}(-)} \mathbf {Cat}}]]></fr:tex> is the polynomial functor determined by
  <fr:tex display="block"><![CDATA[
    \mathbf {Cat} \cong  \mathbf {Cat} / \mathbf {1} \xrightarrow {{!_{\mathsf {Z}}}^*} \mathbf {Cat} / \mathsf {Z} \xrightarrow {\Pi _{p}} \mathbf {Cat} / {\mathbf {\Delta }_+} \xrightarrow {\Sigma _{!_{{\mathbf {\Delta }_+}}}} \mathbf {Cat} / \mathbf {1} \cong  \mathbf {Cat}
  ]]></fr:tex>
  over the polynomial
  <fr:tex display="block"><![CDATA[
    \mathbf {1} \xleftarrow {!_\mathsf {Z}} \mathsf {Z} \xrightarrow {p} {\mathbf {\Delta }_+} \xrightarrow {!_{{\mathbf {\Delta }_+}}} \mathbf {1}.
  ]]></fr:tex></html:p></fr:mainmatter></fr:tree><html:p>
        This construction allows us to package up all the combinatorics associated to the <fr:link href="/coherent-inverses-UGIR/" title="zigzag category" uri="https://forest.nickx.hu/coherent-inverses-UGIR/" display-uri="coherent-inverses-UGIR" type="local">zigzag</fr:link> construction into <fr:link href="/coherent-inverses-V0EG/" title="universal zigzag bundle" uri="https://forest.nickx.hu/coherent-inverses-V0EG/" display-uri="coherent-inverses-V0EG" type="local">one category</fr:link>.
      </html:p><html:p>
        Moreover, because adjoints universally determine each other, it also would have been possible to give the construction by defining <fr:tex display="inline"><![CDATA[\mathsf {Expl}]]></fr:tex>.
        Next, we will show how to obtain this as a left Kan extension of some small generating presentation, by the observation that <fr:tex display="inline"><![CDATA[\mathbf {Cat}]]></fr:tex> and <fr:tex display="inline"><![CDATA[\mathbf {Cat} / {\mathbf {\Delta }_+}]]></fr:tex> are categories of <fr:link href="/coherent-inverses-XO51/" title="model of an essentially algebraic theory" uri="https://forest.nickx.hu/coherent-inverses-XO51/" display-uri="coherent-inverses-XO51" type="local">models</fr:link> of <fr:link href="/coherent-inverses-XIP0/" title="essentially algebraic theory" uri="https://forest.nickx.hu/coherent-inverses-XIP0/" display-uri="coherent-inverses-XIP0" type="local">essentially algebraic theories</fr:link> — in particular, they are both cocomplete, and we can find small <fr:link href="/coherent-inverses-RQH3/" title="dense functor" uri="https://forest.nickx.hu/coherent-inverses-RQH3/" display-uri="coherent-inverses-RQH3" type="local">dense</fr:link> subcategories of them.
      </html:p><html:p>
        We opt to obtain this construction abstractly, determining it up to its universal properties, although we do recover an explicit description in <fr:link href="/coherent-inverses-77KN/" title="Explicit description of {\mathbf {Cat} / {\mathbf {\Delta }_+} \xrightarrow {\mathsf {Expl}} \mathbf {Cat}}" uri="https://forest.nickx.hu/coherent-inverses-77KN/" display-uri="coherent-inverses-77KN" type="local">example <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-77KN/" display-uri="coherent-inverses-77KN" /></fr:link> which we shall use in subsequent chapters.
      </html:p></fr:mainmatter></fr:tree><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2023</fr:year><fr:month>12</fr:month><fr:day>3</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-density/</fr:uri><fr:display-uri>coherent-inverses-density</fr:display-uri><fr:route>/coherent-inverses-density/</fr:route><fr:title text="The theory of density">The theory of <fr:link href="/coherent-inverses-RQH3/" title="dense functor" uri="https://forest.nickx.hu/coherent-inverses-RQH3/" display-uri="coherent-inverses-RQH3" type="local">density</fr:link></fr:title><fr:taxon>section</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
        We first recap the theory of <fr:link href="/coherent-inverses-RQH3/" title="dense functor" uri="https://forest.nickx.hu/coherent-inverses-RQH3/" display-uri="coherent-inverses-RQH3" type="local">density</fr:link>, as presented in <html:span class="textual" tid="Chapter 5" uid="basic-concepts-of-enriched-category-theory"><fr:link href="/basic-concepts-of-enriched-category-theory/" title="Basic concepts of enriched category theory" uri="https://forest.nickx.hu/basic-concepts-of-enriched-category-theory/" display-uri="basic-concepts-of-enriched-category-theory" type="local">[Chapter 5, basic-concepts-of-enriched-category-theory]</fr:link></html:span>.
      </html:p><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>8</fr:month><fr:day>15</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-RQH3/</fr:uri><fr:display-uri>coherent-inverses-RQH3</fr:display-uri><fr:route>/coherent-inverses-RQH3/</fr:route><fr:title text="dense functor"><fr:link href="/coherent-inverses-RQH3/" title="dense functor" uri="https://forest.nickx.hu/coherent-inverses-RQH3/" display-uri="coherent-inverses-RQH3" type="local">dense</fr:link> functor</fr:title><fr:taxon>definition</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
  A functor <fr:tex display="inline"><![CDATA[{\mathcal {A} \xrightarrow {K} \mathcal {C}}]]></fr:tex> is <fr:link href="/coherent-inverses-RQH3/" title="dense functor" uri="https://forest.nickx.hu/coherent-inverses-RQH3/" display-uri="coherent-inverses-RQH3" type="local">dense</fr:link> if its <fr:link href="/coherent-inverses-RQH3/" title="dense functor" uri="https://forest.nickx.hu/coherent-inverses-RQH3/" display-uri="coherent-inverses-RQH3" type="local">relative nerve</fr:link>
  <fr:tex display="block"><![CDATA[
    \begin {aligned}
    \mathcal {C} &\xrightarrow {N_{K}} \hat {\mathcal {A}} \\
    X &\longmapsto  \mathcal {C} (K -, X)
    \end {aligned}
  ]]></fr:tex>
  is fully faithful.
</html:p></fr:mainmatter></fr:tree><html:p><fr:link href="/coherent-inverses-RQH3/" title="dense functor" uri="https://forest.nickx.hu/coherent-inverses-RQH3/" display-uri="coherent-inverses-RQH3" type="local">Density</fr:link> is a property that comes in many forms; in essence, it says that every object of <fr:tex display="inline"><![CDATA[\mathcal {C}]]></fr:tex> is canonically a colimit of a diagram of objects of <fr:tex display="inline"><![CDATA[\mathcal {A}]]></fr:tex> (assuming such a functor is a subcategory inclusion) — that <fr:tex display="inline"><![CDATA[\mathcal {A}]]></fr:tex> is some small generating presentation for <fr:tex display="inline"><![CDATA[\mathcal {C}]]></fr:tex>.
      </html:p><html:p>
        Moreover, the <fr:link href="/coherent-inverses-RQH3/" title="dense functor" uri="https://forest.nickx.hu/coherent-inverses-RQH3/" display-uri="coherent-inverses-RQH3" type="local">relative nerve</fr:link>, under mild assumptions, is universally characterised as the right adjoint to left Kan extension along the Yoneda embedding.
      </html:p><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>8</fr:month><fr:day>17</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-Q6LL/</fr:uri><fr:display-uri>coherent-inverses-Q6LL</fr:display-uri><fr:route>/coherent-inverses-Q6LL/</fr:route><fr:title text="relative nerve is right adjoint"><fr:link href="/coherent-inverses-RQH3/" title="dense functor" uri="https://forest.nickx.hu/coherent-inverses-RQH3/" display-uri="coherent-inverses-RQH3" type="local">relative nerve</fr:link> is right adjoint</fr:title><fr:taxon>lemma</fr:taxon><fr:meta name="source"><html:span tid="Proposition 3.2.2" uid="coend-calculus"><fr:link href="/coend-calculus/" title="Coend calculus" uri="https://forest.nickx.hu/coend-calculus/" display-uri="coend-calculus" type="local">[Proposition 3.2.2, coend-calculus]</fr:link></html:span></fr:meta></fr:frontmatter><fr:mainmatter><html:p>
  Given any functor <fr:tex display="inline"><![CDATA[{\mathcal {A} \xrightarrow {K} \mathcal {C}}]]></fr:tex>, for which <fr:tex display="inline"><![CDATA[\mathcal {A}]]></fr:tex> is small and <fr:tex display="inline"><![CDATA[\mathcal {C}]]></fr:tex> is locally small and cocomplete, its <fr:link href="/coherent-inverses-RQH3/" title="dense functor" uri="https://forest.nickx.hu/coherent-inverses-RQH3/" display-uri="coherent-inverses-RQH3" type="local">relative nerve</fr:link> <fr:tex display="inline"><![CDATA[{\mathcal {C} \xrightarrow {N_{K}} \hat {\mathcal {A}}}]]></fr:tex> admits a left adjoint via a left Kan extension:
  
  
  
  <html:figure><fr:resource hash="5e99676955cdcb277ebfdbff6d7e8ccf"><fr:resource-content><html:img src="/5e99676955cdcb277ebfdbff6d7e8ccf.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[
       \usepackage{amsmath,amssymb}
  \usepackage{mathtools}
  \usepackage{stmaryrd}
  \newcommand{\set}[1]{\left\{#1\right\}}
     \usepackage {tikz}
     \usetikzlibrary {cd}
     \usetikzlibrary {}
     
  \definecolor {green}{RGB}{27,158,119}
  \definecolor {orange}{RGB}{217,95,2}
  \definecolor {purple}{RGB}{117,112,179}

     
    ]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
      \begin {tikzcd}[]
         \hat {\mathcal {A}}
          \ar [r, shift left=1ex, , "\operatorname {Lan}_{y}{K}", ""'{name=UL}]
          \ar [r, shift right=1ex, phantom, ""', ""{name=UR}]
        & \mathcal {C},
          \ar [l, shift left=1ex, , "N_{K}", ""'{name=DL}]
          \ar [l, shift right=1ex, phantom, ""', ""{name=DR}]
        \ar [from=UL, to=DL, "", phantom]
        \ar [from=UR, to=DR, "\vdash ", phantom, sloped] 
      \end {tikzcd}
    ]]></fr:resource-source></fr:resource></html:figure>



  where <fr:tex display="inline"><![CDATA[{\mathcal {A} \xrightarrow {y} \hat {\mathcal {A}}}]]></fr:tex> is the Yoneda embedding of <fr:tex display="inline"><![CDATA[\mathcal {A}]]></fr:tex>.
</html:p></fr:mainmatter></fr:tree><html:p>
        For a fully faithful <fr:link href="/coherent-inverses-RQH3/" title="dense functor" uri="https://forest.nickx.hu/coherent-inverses-RQH3/" display-uri="coherent-inverses-RQH3" type="local">dense</fr:link> functor, the <fr:link href="/coherent-inverses-RQH3/" title="dense functor" uri="https://forest.nickx.hu/coherent-inverses-RQH3/" display-uri="coherent-inverses-RQH3" type="local">relative nerve</fr:link> is a decomposition of the Yoneda embedding in a certain sense.
      </html:p><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>8</fr:month><fr:day>21</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-SLV1/</fr:uri><fr:display-uri>coherent-inverses-SLV1</fr:display-uri><fr:route>/coherent-inverses-SLV1/</fr:route><fr:title text="Yoneda embedding via relative nerve">Yoneda embedding via <fr:link href="/coherent-inverses-RQH3/" title="dense functor" uri="https://forest.nickx.hu/coherent-inverses-RQH3/" display-uri="coherent-inverses-RQH3" type="local">relative nerve</fr:link></fr:title><fr:taxon>lemma</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
  When <fr:tex display="inline"><![CDATA[{\mathcal {A} \xrightarrow {K} \mathcal {C}}]]></fr:tex> is fully faithful, the composite <fr:tex display="inline"><![CDATA[N_{K} \circ  K]]></fr:tex> is naturally isomorphic to the Yoneda embedding <fr:tex display="inline"><![CDATA[{\mathcal {A} \xrightarrow {y} \hat {\mathcal {A}}}]]></fr:tex>.
</html:p>
 
   
   <fr:tree show-metadata="false" toc="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>8</fr:month><fr:day>21</fr:day></fr:date><fr:taxon>proof</fr:taxon></fr:frontmatter><fr:mainmatter>
  <html:p>
    For any <fr:tex display="inline"><![CDATA[a \in  \mathcal {A}]]></fr:tex>, calculate
    <fr:tex display="block"><![CDATA[
      \begin {gathered}
      N_{K} (K a)
      \\ \coloneqq  \{ \text {definition of $N_{K}$} \} \\
      \mathcal {C} (K -, K a)
      \\ \cong  \{ \text {$K$ fully faithful} \} \\
      \mathcal {A} (-, a)
      .
      \end {gathered}
    ]]></fr:tex></html:p>
</fr:mainmatter></fr:tree>
 
</fr:mainmatter></fr:tree><html:p>
        We are interested in particular <fr:link href="/coherent-inverses-RQH3/" title="dense functor" uri="https://forest.nickx.hu/coherent-inverses-RQH3/" display-uri="coherent-inverses-RQH3" type="local">dense</fr:link> functors of <fr:tex display="inline"><![CDATA[\mathbf {Cat}]]></fr:tex> and some variants, which we will now explore.
      </html:p><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>8</fr:month><fr:day>15</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-71HA/</fr:uri><fr:display-uri>coherent-inverses-71HA</fr:display-uri><fr:route>/coherent-inverses-71HA/</fr:route><fr:title text="dense subcategory of \mathbf {Cat}"><fr:link href="/coherent-inverses-RQH3/" title="dense functor" uri="https://forest.nickx.hu/coherent-inverses-RQH3/" display-uri="coherent-inverses-RQH3" type="local">dense</fr:link> subcategory of <fr:tex display="inline"><![CDATA[\mathbf {Cat}]]></fr:tex></fr:title><fr:taxon>proposition</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
  Let <fr:tex display="inline"><![CDATA[{\mathsf {C} \overset {J}{\hookrightarrow } \mathbf {Cat}}]]></fr:tex> be the subcategory of <fr:tex display="inline"><![CDATA[{\mathbf {\Delta }_+}]]></fr:tex>:
  
  
  
  <html:figure><fr:resource hash="1a631b256895455d50d868c2cf37f051"><fr:resource-content><html:img src="/1a631b256895455d50d868c2cf37f051.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[
       \usepackage{amsmath,amssymb}
  \usepackage{mathtools}
  \usepackage{stmaryrd}
  \newcommand{\set}[1]{\left\{#1\right\}}
     \usepackage {tikz}
     \usetikzlibrary {cd}
     \usetikzlibrary {}
     
  \definecolor {green}{RGB}{27,158,119}
  \definecolor {orange}{RGB}{217,95,2}
  \definecolor {purple}{RGB}{117,112,179}

     
    ]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
      \begin {tikzcd}[]
    {[0]} \ar [r, shift left, "s"] \ar [r, shift right, "t"']
    & {[1]} \ar [l, "r" description] \ar [r, shift left] \ar [r] \ar [r, shift right]
    & {[2]},
  \end {tikzcd}
    ]]></fr:resource-source></fr:resource></html:figure>



  where the three arrows <fr:tex display="inline"><![CDATA[[1] \to  [2]]]></fr:tex> are the three non-degenerate inclusions.
</html:p><html:p><fr:tex display="inline"><![CDATA[J]]></fr:tex> is <fr:link href="/coherent-inverses-RQH3/" title="dense functor" uri="https://forest.nickx.hu/coherent-inverses-RQH3/" display-uri="coherent-inverses-RQH3" type="local">dense</fr:link>.
</html:p>
 
   
   <fr:tree show-metadata="false" toc="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>8</fr:month><fr:day>15</fr:day></fr:date><fr:taxon>proof</fr:taxon></fr:frontmatter><fr:mainmatter>
  <html:p>
    This essentially holds because the nerve of every category is a 2-coskeletal simplicial set, and vice versa, but we will prove this directly also.
  </html:p>
  
  
  
  
  <html:p>
    The <fr:link href="/coherent-inverses-RQH3/" title="dense functor" uri="https://forest.nickx.hu/coherent-inverses-RQH3/" display-uri="coherent-inverses-RQH3" type="local">nerve relative to <fr:tex display="inline"><![CDATA[J]]></fr:tex></fr:link>, <fr:tex display="inline"><![CDATA[{\mathbf {Cat} \xrightarrow {N_{J}} \hat {\mathsf {C}}}]]></fr:tex>, sends each category <fr:tex display="inline"><![CDATA[\mathcal {C}]]></fr:tex> to the presheaf <fr:tex display="inline"><![CDATA[\mathbf {Cat} (J -, \mathcal {C})]]></fr:tex>.
    For this functor to be fully faithful, its morphism mapping with respect to a pair of categories <fr:tex display="inline"><![CDATA[\mathcal {C}]]></fr:tex> and <fr:tex display="inline"><![CDATA[\mathcal {D}]]></fr:tex> needs to be a bijection:
    <fr:tex display="block"><![CDATA[
      \mathbf {Cat} (\mathcal {C}, \mathcal {D}) \xrightarrow {\sim } \hat {\mathsf {C}} \left ( \mathbf {Cat} (J -, \mathcal {C}), \mathbf {Cat} (J -, \mathcal {D}) \right ).
    ]]></fr:tex>
    That is, every functor <fr:tex display="inline"><![CDATA[{\mathcal {C} \xrightarrow {F} \mathcal {D}}]]></fr:tex> must be in bijective correspondence with a natural transformation <fr:tex display="inline"><![CDATA[{\mathbf {Cat} (J -, \mathcal {C}) \xRightarrow {\alpha } \mathbf {Cat} (J -, \mathcal {D})}]]></fr:tex>.
  </html:p>
  <html:p>
    Each such natural transformation is a family of maps <fr:tex display="inline"><![CDATA[{\mathbf {Cat} (J x, \mathcal {C}) \xrightarrow {\alpha _x} \mathbf {Cat} (J x, \mathcal {D})}]]></fr:tex> for <fr:tex display="inline"><![CDATA[x \in  \set  {[0], [1], [2]}]]></fr:tex> and naturality conditions.
    Note that <fr:tex display="inline"><![CDATA[\mathbf {Cat} (J [0], \mathcal {C})]]></fr:tex> is equivalent to the set of objects of <fr:tex display="inline"><![CDATA[\mathcal {C}]]></fr:tex>, and similarly for <fr:tex display="inline"><![CDATA[\mathcal {D}]]></fr:tex>; similarly, an element of <fr:tex display="inline"><![CDATA[\mathbf {Cat} (J [1], \mathcal {C})]]></fr:tex> is a choice of a morphism of <fr:tex display="inline"><![CDATA[\mathcal {C}]]></fr:tex>, and <fr:tex display="inline"><![CDATA[\mathbf {Cat} (J [2], \mathcal {C})]]></fr:tex> that of a composable pair of morphisms (along with its composite).
    So each component of <fr:tex display="inline"><![CDATA[\alpha ]]></fr:tex> is respectively
    <html:ol><html:li>
        a map of objects of <fr:tex display="inline"><![CDATA[\mathcal {C}]]></fr:tex> to objects of <fr:tex display="inline"><![CDATA[\mathcal {D}]]></fr:tex>,
      </html:li>
      <html:li>
        a map of morphisms of <fr:tex display="inline"><![CDATA[\mathcal {C}]]></fr:tex> to morphisms of <fr:tex display="inline"><![CDATA[\mathcal {D}]]></fr:tex>,
      </html:li>
      <html:li>
        a map of composable pairs of morphisms of <fr:tex display="inline"><![CDATA[\mathcal {C}]]></fr:tex> to composable pairs of morphisms of <fr:tex display="inline"><![CDATA[\mathcal {D}]]></fr:tex>.
      </html:li></html:ol></html:p>
  <html:p>
    Therefore, the presence of <fr:tex display="inline"><![CDATA[[0]]]></fr:tex> and <fr:tex display="inline"><![CDATA[[1]]]></fr:tex> witness faithfulness: the data of a functor is precisely its object map and its morphism map.
    Fullness, the condition that every such natural transformation determines a functor, is given by the naturality conditions imposed by the remaining data of <fr:tex display="inline"><![CDATA[\mathsf {C}]]></fr:tex>: aside from just mapping objects to objects and morphisms to morphisms, a functor must also
    <html:ol><html:li>
        
        be consistent with respect to the source and target of morphisms: i.e. the morphism <fr:tex display="inline"><![CDATA[{X \xrightarrow {f} Y}]]></fr:tex> mapped to <fr:tex display="inline"><![CDATA[F f]]></fr:tex> must have domain <fr:tex display="inline"><![CDATA[F X]]></fr:tex> (witnessed by the inclusion <fr:tex display="inline"><![CDATA[[0] \xrightarrow {s} [1]]]></fr:tex>), and codomain <fr:tex display="inline"><![CDATA[F Y]]></fr:tex> (witnessed by the inclusion <fr:tex display="inline"><![CDATA[[0] \xrightarrow {t} [1]]]></fr:tex>);
      </html:li>
      <html:li>
        preserve identity, witnessed by the retract <fr:tex display="inline"><![CDATA[[1] \xrightarrow {r} [0]]]></fr:tex>;
      </html:li>
      <html:li>
        preserve composition, witnessed by the three non-degenerate inclusions <fr:tex display="inline"><![CDATA[[1] \to  [2]]]></fr:tex>.
      </html:li></html:ol></html:p>
</fr:mainmatter></fr:tree>
 
</fr:mainmatter></fr:tree><html:p>
        In some sense, this is an alternative formalisation of the monadic adjunction of <fr:link href="/coherent-inverses-G1TF/" title="Adjunction between \mathbf {RGrph} and \mathbf {Cat}" uri="https://forest.nickx.hu/coherent-inverses-G1TF/" display-uri="coherent-inverses-G1TF" type="local">proposition <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-G1TF/" display-uri="coherent-inverses-G1TF" /></fr:link> — that a category is an algebraic gadget whose generators are <fr:link href="/coherent-inverses-D66F/" title="Topos of reflexive graphs" uri="https://forest.nickx.hu/coherent-inverses-D66F/" display-uri="coherent-inverses-D66F" type="local">reflexive graphs</fr:link>.
      </html:p><html:p>
        We are typically interested in cases where our <fr:link href="/coherent-inverses-RQH3/" title="dense functor" uri="https://forest.nickx.hu/coherent-inverses-RQH3/" display-uri="coherent-inverses-RQH3" type="local">dense</fr:link> functor <fr:tex display="inline"><![CDATA[K]]></fr:tex> is also fully faithful; indeed, the straightforward extension of <fr:link href="/coherent-inverses-71HA/" title="dense subcategory of \mathbf {Cat}" uri="https://forest.nickx.hu/coherent-inverses-71HA/" display-uri="coherent-inverses-71HA" type="local">proposition <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-71HA/" display-uri="coherent-inverses-71HA" /></fr:link> to the full subcategory spanned by <fr:tex display="inline"><![CDATA[{\Delta _{\leq  2}} = \set {[0], [1], [2]}]]></fr:tex> is one such example.
      </html:p><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>8</fr:month><fr:day>23</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-4WLB/</fr:uri><fr:display-uri>coherent-inverses-4WLB</fr:display-uri><fr:route>/coherent-inverses-4WLB/</fr:route><fr:title text="dense subcategory of a slice category"><fr:link href="/coherent-inverses-RQH3/" title="dense functor" uri="https://forest.nickx.hu/coherent-inverses-RQH3/" display-uri="coherent-inverses-RQH3" type="local">dense</fr:link> subcategory of a slice category</fr:title><fr:taxon>proposition</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
  Suppose that we have a <fr:link href="/coherent-inverses-RQH3/" title="dense functor" uri="https://forest.nickx.hu/coherent-inverses-RQH3/" display-uri="coherent-inverses-RQH3" type="local">dense</fr:link> subcategory <fr:tex display="inline"><![CDATA[{\mathcal {A} \overset {K}{\hookrightarrow } \mathcal {C}}]]></fr:tex>.
  For any object <fr:tex display="inline"><![CDATA[c \in  \mathcal {C}]]></fr:tex>, the projection functor
  <fr:tex display="block"><![CDATA[
     {{\textstyle  \int  \mathcal {C} (K -, c)} \xrightarrow {\pi _2} \mathcal {C} / c}
  ]]></fr:tex>
  is <fr:link href="/coherent-inverses-RQH3/" title="dense functor" uri="https://forest.nickx.hu/coherent-inverses-RQH3/" display-uri="coherent-inverses-RQH3" type="local">dense</fr:link>.
  Moreover, when <fr:tex display="inline"><![CDATA[K]]></fr:tex> is fully faithful, so is <fr:tex display="inline"><![CDATA[\pi _2]]></fr:tex>.
</html:p>
 
   
   <fr:tree show-metadata="false" toc="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>8</fr:month><fr:day>23</fr:day></fr:date><fr:taxon>proof</fr:taxon></fr:frontmatter><fr:mainmatter>
  
  <html:p>
    Consider the diagram
    
  
  
  <html:figure><fr:resource hash="55f2a28eb063dff8d465aacf9171dd22"><fr:resource-content><html:img src="/55f2a28eb063dff8d465aacf9171dd22.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[
       \usepackage{amsmath,amssymb}
  \usepackage{mathtools}
  \usepackage{stmaryrd}
  \newcommand{\set}[1]{\left\{#1\right\}}
     \usepackage {tikz}
     \usetikzlibrary {cd}
     \usetikzlibrary {}
     
  \definecolor {green}{RGB}{27,158,119}
  \definecolor {orange}{RGB}{217,95,2}
  \definecolor {purple}{RGB}{117,112,179}

     
    ]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
      \begin {tikzcd}[]
      {\textstyle  \int  \mathcal {C} (K -, c)} \ar [dr, phantom, "\lrcorner ", very near start] \ar [d, "\pi _1"] \ar [r, "\pi _2"] & \mathcal {C} / c \ar [dr, phantom, "\lrcorner ", very near start] \ar [d, "\mathsf {dom}"] \ar [r, "N_{\pi _2}"] & \hat {{\textstyle  \int  \mathcal {C} (K -, c)}} \cong  \hat {\mathcal {A}} / \mathcal {C} (K -, c) \ar [d, "\mathsf {dom}"] \\
      \mathcal {A} \ar [r, "K"] & \mathcal {C} \ar [r, "N_{K}"] & \hat {\mathcal {A}},
    \end {tikzcd}
    ]]></fr:resource-source></fr:resource></html:figure>



    where the isomorphism in the top right corner is given by <fr:link href="/coherent-inverses-8OTN/" title="Slice of a presheaf category is a presheaf category" uri="https://forest.nickx.hu/coherent-inverses-8OTN/" display-uri="coherent-inverses-8OTN" type="local">lemma <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-8OTN/" display-uri="coherent-inverses-8OTN" /></fr:link>.
  </html:p>
  <html:p>
    The left square is a pullback: objects of the pullback are a pair of <fr:tex display="inline"><![CDATA[a \in  \mathcal {A}]]></fr:tex> and <fr:tex display="inline"><![CDATA[{a \xrightarrow {f} c} \in  \mathcal {C}]]></fr:tex> such that the domain of the morphism <fr:tex display="inline"><![CDATA[f]]></fr:tex> is <fr:tex display="inline"><![CDATA[a]]></fr:tex>, but this precisely is the category <fr:tex display="inline"><![CDATA[{\textstyle  \int  \mathcal {C} (K -, c)}]]></fr:tex>.
  </html:p>
  <html:p>
    
    
    
    The outer square is a pullback: objects are a pair of <fr:tex display="inline"><![CDATA[a \in  \mathcal {A}]]></fr:tex> and a natural transformation <fr:tex display="inline"><![CDATA[{X \xRightarrow {\alpha } \mathcal {C} (K -, c)} = N_{K} (c) \in  \hat {\mathcal {A}}]]></fr:tex>.
    Moreover, <fr:tex display="inline"><![CDATA[X]]></fr:tex> is forced to be a presheaf of the form <fr:tex display="inline"><![CDATA[\mathcal {C} (K -, K a)]]></fr:tex>, so the type of <fr:tex display="inline"><![CDATA[\alpha ]]></fr:tex> is <fr:tex display="inline"><![CDATA[N_{K} (K a) \Rightarrow  N_{K} (c)]]></fr:tex>.
    Because <fr:tex display="inline"><![CDATA[K]]></fr:tex> is <fr:link href="/coherent-inverses-RQH3/" title="dense functor" uri="https://forest.nickx.hu/coherent-inverses-RQH3/" display-uri="coherent-inverses-RQH3" type="local">dense</fr:link>, its <fr:link href="/coherent-inverses-RQH3/" title="dense functor" uri="https://forest.nickx.hu/coherent-inverses-RQH3/" display-uri="coherent-inverses-RQH3" type="local">relative nerve</fr:link> is fully faithful, and hence we deduce an isomorphism for any pair of objects <fr:tex display="inline"><![CDATA[c]]></fr:tex> and <fr:tex display="inline"><![CDATA[c^\prime ]]></fr:tex> in <fr:tex display="inline"><![CDATA[\mathcal {C}]]></fr:tex>:
    <fr:tex display="block"><![CDATA[
      {\mathcal {C} (c, c^\prime ) \overset {\phi }{\cong } \hat {\mathcal {A}} (N_{K} (c), N_{K} (c^\prime ))}.
    ]]></fr:tex>
    In particular, <fr:tex display="inline"><![CDATA[\phi ^{-1} (\alpha )]]></fr:tex> is a morphism <fr:tex display="inline"><![CDATA[K a \to  c]]></fr:tex> in <fr:tex display="inline"><![CDATA[\mathcal {C}]]></fr:tex>, and indeed this fibre product is isomorphic to <fr:tex display="inline"><![CDATA[{\textstyle  \int  \mathcal {C} (K -, c)}]]></fr:tex>.
  </html:p>
  <html:p>
    By the pullback lemma, the right square is also a pullback.
    Fully faithful functors are preserved by pullback, so fully faithfulness of <fr:tex display="inline"><![CDATA[N_{K}]]></fr:tex> implies that of <fr:tex display="inline"><![CDATA[N_{\pi _2}]]></fr:tex>, and hence we deduce <fr:tex display="inline"><![CDATA[\pi _2]]></fr:tex> is <fr:link href="/coherent-inverses-RQH3/" title="dense functor" uri="https://forest.nickx.hu/coherent-inverses-RQH3/" display-uri="coherent-inverses-RQH3" type="local">dense</fr:link> as required.
    The left square being a pullback also allows us to deduce that <fr:tex display="inline"><![CDATA[\pi _2]]></fr:tex> is fully faithful if <fr:tex display="inline"><![CDATA[K]]></fr:tex> is.
  </html:p>
</fr:mainmatter></fr:tree>
 
</fr:mainmatter></fr:tree><html:p>
        This tells us how to find a <fr:link href="/coherent-inverses-RQH3/" title="dense functor" uri="https://forest.nickx.hu/coherent-inverses-RQH3/" display-uri="coherent-inverses-RQH3" type="local">dense</fr:link> subcategory of <fr:tex display="inline"><![CDATA[\mathbf {Cat} / {\mathbf {\Delta }_+}]]></fr:tex>.
      </html:p><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>8</fr:month><fr:day>29</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-01JA/</fr:uri><fr:display-uri>coherent-inverses-01JA</fr:display-uri><fr:route>/coherent-inverses-01JA/</fr:route><fr:title text="dense subcategory of \mathbf {Cat} / {\mathbf {\Delta }_+}"><fr:link href="/coherent-inverses-RQH3/" title="dense functor" uri="https://forest.nickx.hu/coherent-inverses-RQH3/" display-uri="coherent-inverses-RQH3" type="local">dense</fr:link> subcategory of <fr:tex display="inline"><![CDATA[\mathbf {Cat} / {\mathbf {\Delta }_+}]]></fr:tex></fr:title><fr:taxon>proposition</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
  Let <fr:tex display="inline"><![CDATA[{\mathsf {C} \overset {i}{\hookrightarrow } \mathbf {Cat}}]]></fr:tex> be the <fr:link href="/coherent-inverses-RQH3/" title="dense functor" uri="https://forest.nickx.hu/coherent-inverses-RQH3/" display-uri="coherent-inverses-RQH3" type="local">dense</fr:link> subcategory of <fr:tex display="inline"><![CDATA[\mathbf {Cat}]]></fr:tex> as in <fr:link href="/coherent-inverses-71HA/" title="dense subcategory of \mathbf {Cat}" uri="https://forest.nickx.hu/coherent-inverses-71HA/" display-uri="coherent-inverses-71HA" type="local">proposition <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-71HA/" display-uri="coherent-inverses-71HA" /></fr:link>.
  Then, by <fr:link href="/coherent-inverses-4WLB/" title="dense subcategory of a slice category" uri="https://forest.nickx.hu/coherent-inverses-4WLB/" display-uri="coherent-inverses-4WLB" type="local">proposition <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-4WLB/" display-uri="coherent-inverses-4WLB" /></fr:link>, the <fr:link href="/coherent-inverses-ATG5/" title="category of elements" uri="https://forest.nickx.hu/coherent-inverses-ATG5/" display-uri="coherent-inverses-ATG5" type="local">category of elements</fr:link> <fr:tex display="inline"><![CDATA[{\textstyle  \int  \mathbf {Cat} (i -, {\mathbf {\Delta }_+})}]]></fr:tex> is a <fr:link href="/coherent-inverses-RQH3/" title="dense functor" uri="https://forest.nickx.hu/coherent-inverses-RQH3/" display-uri="coherent-inverses-RQH3" type="local">dense</fr:link> subcategory of <fr:tex display="inline"><![CDATA[\mathbf {Cat} / {\mathbf {\Delta }_+}]]></fr:tex>.
</html:p><html:p>
  
  Explicitly, this category has as objects pairs <fr:tex display="inline"><![CDATA[(c, {i c \xrightarrow {F} {\mathbf {\Delta }_+}})]]></fr:tex> where <fr:tex display="inline"><![CDATA[c \in  \set {[0], [1], [2]}]]></fr:tex> and <fr:tex display="inline"><![CDATA[F]]></fr:tex> is a functor.
  Alternatively, an object of <fr:tex display="inline"><![CDATA[{\textstyle  \int  \mathbf {Cat} (i -, {\mathbf {\Delta }_+})}]]></fr:tex> is one of the following:
  <html:ol><html:li>
      an object of <fr:tex display="inline"><![CDATA[{\mathbf {\Delta }_+}]]></fr:tex>, i.e. a particular ordinal <fr:tex display="inline"><![CDATA[[n]]]></fr:tex> corresponding to <fr:tex display="inline"><![CDATA[c = [0]]]></fr:tex>;
    </html:li>
    <html:li>
      a monotone map <fr:tex display="inline"><![CDATA[[m] \xrightarrow {\alpha } [n]]]></fr:tex> corresponding to <fr:tex display="inline"><![CDATA[c = [1]]]></fr:tex>;
    </html:li>
    <html:li>
      a pair of composable monotone maps <fr:tex display="inline"><![CDATA[[l] \xrightarrow {\alpha } [m] \xrightarrow {\beta } [n]]]></fr:tex> corresponding to <fr:tex display="inline"><![CDATA[c = [2]]]></fr:tex>.
    </html:li></html:ol></html:p><html:p>
  Let <fr:tex display="inline"><![CDATA[{\Delta ^{\bullet _{/}}_{\leq  2}}]]></fr:tex> denote the <fr:link href="/coherent-inverses-RQH3/" title="dense functor" uri="https://forest.nickx.hu/coherent-inverses-RQH3/" display-uri="coherent-inverses-RQH3" type="local">dense</fr:link> full subcategory of <fr:tex display="inline"><![CDATA[\mathbf {Cat} / {\mathbf {\Delta }_+}]]></fr:tex> which this induces.
</html:p></fr:mainmatter></fr:tree><html:p><fr:link href="/coherent-inverses-RQH3/" title="dense functor" uri="https://forest.nickx.hu/coherent-inverses-RQH3/" display-uri="coherent-inverses-RQH3" type="local">Dense</fr:link> functors are a kind of generalisation of an <fr:link href="/coherent-inverses-XIP0/" title="essentially algebraic theory" uri="https://forest.nickx.hu/coherent-inverses-XIP0/" display-uri="coherent-inverses-XIP0" type="local">essentially algebraic theory</fr:link>, giving a certain perspective on algebraic structure (such as the essence of the <fr:link href="/coherent-inverses-UGIR/" title="zigzag category" uri="https://forest.nickx.hu/coherent-inverses-UGIR/" display-uri="coherent-inverses-UGIR" type="local">zigzag category</fr:link> that we aim to capture).
      </html:p></fr:mainmatter></fr:tree><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2023</fr:year><fr:month>12</fr:month><fr:day>3</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-essentially-algebraic-theories/</fr:uri><fr:display-uri>coherent-inverses-essentially-algebraic-theories</fr:display-uri><fr:route>/coherent-inverses-essentially-algebraic-theories/</fr:route><fr:title text="essentially algebraic theories"><fr:link href="/coherent-inverses-XIP0/" title="essentially algebraic theory" uri="https://forest.nickx.hu/coherent-inverses-XIP0/" display-uri="coherent-inverses-XIP0" type="local">essentially algebraic theories</fr:link></fr:title><fr:taxon>section</fr:taxon></fr:frontmatter><fr:mainmatter><html:p><fr:link href="/coherent-inverses-RQH3/" title="dense functor" uri="https://forest.nickx.hu/coherent-inverses-RQH3/" display-uri="coherent-inverses-RQH3" type="local">Dense</fr:link> functors allow for a categorical perspective on <fr:link href="/coherent-inverses-XIP0/" title="essentially algebraic theory" uri="https://forest.nickx.hu/coherent-inverses-XIP0/" display-uri="coherent-inverses-XIP0" type="local">essentially algebraic theories</fr:link>, which subsume many categorical constructions which are algebraic in nature, including categories themselves and our <fr:link href="/coherent-inverses-UGIR/" title="zigzag category" uri="https://forest.nickx.hu/coherent-inverses-UGIR/" display-uri="coherent-inverses-UGIR" type="local">zigzag construction</fr:link>.
        Intuitively, the idea that categories are an <fr:link href="/coherent-inverses-XIP0/" title="essentially algebraic theory" uri="https://forest.nickx.hu/coherent-inverses-XIP0/" display-uri="coherent-inverses-XIP0" type="local">essentially algebraic theory</fr:link> is a formalisation of the idea that a category can be thought of as a class of objects and morphisms, equipped with some partially defined composition operation
  <html:sl-tooltip content="Two morphisms are composable only when the codomain of the first is the domain of the second.">
    <html:sup>​</html:sup>
  </html:sl-tooltip>
 satisfying some properties (composition is unital and associative).
      </html:p><html:p>
        Many definitions and results here are from <html:span class="textual" tid="Chapter 5" uid="basic-concepts-of-enriched-category-theory"><fr:link href="/basic-concepts-of-enriched-category-theory/" title="Basic concepts of enriched category theory" uri="https://forest.nickx.hu/basic-concepts-of-enriched-category-theory/" display-uri="basic-concepts-of-enriched-category-theory" type="local">[Chapter 5, basic-concepts-of-enriched-category-theory]</fr:link></html:span>.
      </html:p><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>8</fr:month><fr:day>15</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-XIP0/</fr:uri><fr:display-uri>coherent-inverses-XIP0</fr:display-uri><fr:route>/coherent-inverses-XIP0/</fr:route><fr:title text="essentially algebraic theory"><fr:link href="/coherent-inverses-XIP0/" title="essentially algebraic theory" uri="https://forest.nickx.hu/coherent-inverses-XIP0/" display-uri="coherent-inverses-XIP0" type="local">essentially algebraic theory</fr:link></fr:title><fr:taxon>definition</fr:taxon><fr:meta name="source"><html:span tid="§ 5.13" uid="basic-concepts-of-enriched-category-theory"><fr:link href="/basic-concepts-of-enriched-category-theory/" title="Basic concepts of enriched category theory" uri="https://forest.nickx.hu/basic-concepts-of-enriched-category-theory/" display-uri="basic-concepts-of-enriched-category-theory" type="local">[§ 5.13, basic-concepts-of-enriched-category-theory]</fr:link></html:span></fr:meta></fr:frontmatter><fr:mainmatter><html:p>
  An <fr:link href="/coherent-inverses-XIP0/" title="essentially algebraic theory" uri="https://forest.nickx.hu/coherent-inverses-XIP0/" display-uri="coherent-inverses-XIP0" type="local">essentially algebraic theory</fr:link> is a <fr:link href="/coherent-inverses-RQH3/" title="dense functor" uri="https://forest.nickx.hu/coherent-inverses-RQH3/" display-uri="coherent-inverses-RQH3" type="local">dense</fr:link> functor <fr:tex display="inline"><![CDATA[{\mathcal {A} \xrightarrow {K} \mathcal {C}}]]></fr:tex> where <fr:tex display="inline"><![CDATA[\mathcal {A}]]></fr:tex> is small and <fr:tex display="inline"><![CDATA[\mathcal {C}]]></fr:tex> is cocomplete.
</html:p></fr:mainmatter></fr:tree><html:p>
        For the remainder of this section, <fr:tex display="inline"><![CDATA[{\mathcal {A} \xrightarrow {K} \mathcal {C}}]]></fr:tex> will denote an <fr:link href="/coherent-inverses-XIP0/" title="essentially algebraic theory" uri="https://forest.nickx.hu/coherent-inverses-XIP0/" display-uri="coherent-inverses-XIP0" type="local">essentially algebraic theory</fr:link> unless stated otherwise.
      </html:p><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>8</fr:month><fr:day>16</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-XO51/</fr:uri><fr:display-uri>coherent-inverses-XO51</fr:display-uri><fr:route>/coherent-inverses-XO51/</fr:route><fr:title text="model of an essentially algebraic theory"><fr:link href="/coherent-inverses-XO51/" title="model of an essentially algebraic theory" uri="https://forest.nickx.hu/coherent-inverses-XO51/" display-uri="coherent-inverses-XO51" type="local">model</fr:link> of an <fr:link href="/coherent-inverses-XIP0/" title="essentially algebraic theory" uri="https://forest.nickx.hu/coherent-inverses-XIP0/" display-uri="coherent-inverses-XIP0" type="local">essentially algebraic theory</fr:link></fr:title><fr:taxon>definition</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
  A model of an <fr:link href="/coherent-inverses-XIP0/" title="essentially algebraic theory" uri="https://forest.nickx.hu/coherent-inverses-XIP0/" display-uri="coherent-inverses-XIP0" type="local">essentially algebraic theory</fr:link> <fr:tex display="inline"><![CDATA[K]]></fr:tex> is given by a functor <fr:tex display="inline"><![CDATA[{{\mathcal {A}}^\mathrm {op} \xrightarrow {F} \mathbf {Set}}]]></fr:tex> such that its opposite functor <fr:tex display="inline"><![CDATA[{\mathcal {A} \xrightarrow {{F}^\mathrm {op}} {\mathbf {Set}}^\mathrm {op}}]]></fr:tex> admits a <fr:link href="/coherent-inverses-RQH3/" title="dense functor" uri="https://forest.nickx.hu/coherent-inverses-RQH3/" display-uri="coherent-inverses-RQH3" type="local">relative nerve</fr:link> which factorises (up to isomorphism)
  
  
  
  <html:figure><fr:resource hash="11da046ec639a84b0028356bcb66bf7f"><fr:resource-content><html:img src="/11da046ec639a84b0028356bcb66bf7f.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[
       \usepackage{amsmath,amssymb}
  \usepackage{mathtools}
  \usepackage{stmaryrd}
  \newcommand{\set}[1]{\left\{#1\right\}}
     \usepackage {tikz}
     \usetikzlibrary {cd}
     \usetikzlibrary {}
     
  \definecolor {green}{RGB}{27,158,119}
  \definecolor {orange}{RGB}{217,95,2}
  \definecolor {purple}{RGB}{117,112,179}

     
    ]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
      \begin {tikzcd}[]
        & {\mathcal {C}}^\mathrm {op} \\
        {\mathbf {Set}}^\mathrm {op}
        \ar [r, , "N_{{F}^\mathrm {op}}"']
        \ar [ur, dashed, "", ""'{name=L}]
        & |[alias=R]| \hat {\mathcal {A}} .
        \ar [u, leftarrow, "N_{{K}^\mathrm {op}}"']
        \ar [from=L, to=R, phantom, sloped, "\cong "]
      \end {tikzcd}
    ]]></fr:resource-source></fr:resource></html:figure></html:p><html:p>
  These models form a full subcategory of the presheaf category <fr:tex display="inline"><![CDATA[\hat {\mathcal {A}}]]></fr:tex>:
  <fr:tex display="block"><![CDATA[
    \mathbf {Mod}(K) \hookrightarrow  \hat {\mathcal {A}}.
  ]]></fr:tex></html:p></fr:mainmatter></fr:tree><html:p>
        We will not concern ourselves with this lifting condition, as it arises by virtue of <fr:tex display="inline"><![CDATA[\mathcal {C}]]></fr:tex> being cocomplete.
      </html:p><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>8</fr:month><fr:day>17</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-9LZ1/</fr:uri><fr:display-uri>coherent-inverses-9LZ1</fr:display-uri><fr:route>/coherent-inverses-9LZ1/</fr:route><fr:title text="Characterisation of models of an essentially algebraic theory">Characterisation of <fr:link href="/coherent-inverses-XO51/" title="model of an essentially algebraic theory" uri="https://forest.nickx.hu/coherent-inverses-XO51/" display-uri="coherent-inverses-XO51" type="local">models</fr:link> of an <fr:link href="/coherent-inverses-XIP0/" title="essentially algebraic theory" uri="https://forest.nickx.hu/coherent-inverses-XIP0/" display-uri="coherent-inverses-XIP0" type="local">essentially algebraic theory</fr:link></fr:title><fr:taxon>lemma</fr:taxon><fr:meta name="source"><html:span tid="Theorem 5.59" uid="basic-concepts-of-enriched-category-theory"><fr:link href="/basic-concepts-of-enriched-category-theory/" title="Basic concepts of enriched category theory" uri="https://forest.nickx.hu/basic-concepts-of-enriched-category-theory/" display-uri="basic-concepts-of-enriched-category-theory" type="local">[Theorem 5.59, basic-concepts-of-enriched-category-theory]</fr:link></html:span></fr:meta></fr:frontmatter><fr:mainmatter><html:p>
  Because <fr:tex display="inline"><![CDATA[\mathcal {C}]]></fr:tex> is cocomplete, we have an equivalence of categories
  <fr:tex display="block"><![CDATA[
    \mathbf {Mod}(K) \cong  \mathcal {C}.
  ]]></fr:tex></html:p><html:p>
  That is, every <fr:link href="/coherent-inverses-XO51/" title="model of an essentially algebraic theory" uri="https://forest.nickx.hu/coherent-inverses-XO51/" display-uri="coherent-inverses-XO51" type="local">model</fr:link> of an <fr:link href="/coherent-inverses-XIP0/" title="essentially algebraic theory" uri="https://forest.nickx.hu/coherent-inverses-XIP0/" display-uri="coherent-inverses-XIP0" type="local">essentially algebraic theory</fr:link> <fr:tex display="inline"><![CDATA[{\mathcal {A} \xrightarrow {K} \mathcal {C}}]]></fr:tex> is just an object of <fr:tex display="inline"><![CDATA[\mathcal {C}]]></fr:tex>.
</html:p></fr:mainmatter></fr:tree><html:p>
        In fact, we can generalise this away from <fr:tex display="inline"><![CDATA[\mathbf {Set}]]></fr:tex> (this time, working with the dual of a model — a comodel) to any arbitrary cocomplete category <fr:tex display="inline"><![CDATA[\mathcal {B}]]></fr:tex>
  <html:sl-tooltip content="The cocompleteness assumption ensures that all the necessary left Kan extensions (colimits) exist and are pointwise, but in principle similar reasoning applies for ‘when the necessary colimits exist’.">
    <html:sup>​</html:sup>
  </html:sl-tooltip>
.
      </html:p><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>8</fr:month><fr:day>16</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-PCO8/</fr:uri><fr:display-uri>coherent-inverses-PCO8</fr:display-uri><fr:route>/coherent-inverses-PCO8/</fr:route><fr:title text="Internal \mathcal {C}-coalgebra"><fr:link href="/coherent-inverses-PCO8/" title="Internal \mathcal {C}-coalgebra" uri="https://forest.nickx.hu/coherent-inverses-PCO8/" display-uri="coherent-inverses-PCO8" type="local">Internal <fr:tex display="inline"><![CDATA[\mathcal {C}]]></fr:tex>-coalgebra</fr:link></fr:title><fr:taxon>definition</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
  An <fr:link href="/coherent-inverses-PCO8/" title="Internal \mathcal {C}-coalgebra" uri="https://forest.nickx.hu/coherent-inverses-PCO8/" display-uri="coherent-inverses-PCO8" type="local">internal <fr:tex display="inline"><![CDATA[\mathcal {C}]]></fr:tex>-coalgebra</fr:link> in a cocomplete category <fr:tex display="inline"><![CDATA[\mathcal {B}]]></fr:tex> is a functor <fr:tex display="inline"><![CDATA[{\mathcal {A} \xrightarrow {G} \mathcal {B}}]]></fr:tex> which admits a lifting of <fr:link href="/coherent-inverses-RQH3/" title="dense functor" uri="https://forest.nickx.hu/coherent-inverses-RQH3/" display-uri="coherent-inverses-RQH3" type="local">relative nerves</fr:link> (up to isomorphism)
  
  
  
  <html:figure><fr:resource hash="b6b5dfb6dcd3b1f2a551e1e644941d10"><fr:resource-content><html:img src="/b6b5dfb6dcd3b1f2a551e1e644941d10.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[
       \usepackage{amsmath,amssymb}
  \usepackage{mathtools}
  \usepackage{stmaryrd}
  \newcommand{\set}[1]{\left\{#1\right\}}
     \usepackage {tikz}
     \usetikzlibrary {cd}
     \usetikzlibrary {}
     
  \definecolor {green}{RGB}{27,158,119}
  \definecolor {orange}{RGB}{217,95,2}
  \definecolor {purple}{RGB}{117,112,179}

     
    ]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
      \begin {tikzcd}[]
        & \mathcal {C} \\
        \mathcal {B}
        \ar [r, , "N_{G}"']
        \ar [ur, dashed, "\exists  T", ""'{name=L}]
        & |[alias=R]| \hat {\mathcal {A}} .
        \ar [u, leftarrow, "N_{K}"']
        \ar [from=L, to=R, phantom, sloped, "\cong "]
      \end {tikzcd}
    ]]></fr:resource-source></fr:resource></html:figure>



  This equivalently expresses that <fr:tex display="inline"><![CDATA[G]]></fr:tex> admits a left <fr:tex display="inline"><![CDATA[K]]></fr:tex>-relative right adjoint <fr:tex display="inline"><![CDATA[T]]></fr:tex>: <fr:tex display="inline"><![CDATA[G \dashv _K T]]></fr:tex>, defined by a natural bijection
  <fr:tex display="block"><![CDATA[
    \mathcal {B} (G a, b) \cong  \mathcal {C} (K a, T b).
  ]]></fr:tex></html:p><html:p>
  Synonymously, we refer to (the image of) this functor as a co-<fr:tex display="inline"><![CDATA[\mathcal {C}]]></fr:tex> internal to <fr:tex display="inline"><![CDATA[\mathcal {B}]]></fr:tex>.
  The category of <fr:link href="/coherent-inverses-PCO8/" title="Internal \mathcal {C}-coalgebra" uri="https://forest.nickx.hu/coherent-inverses-PCO8/" display-uri="coherent-inverses-PCO8" type="local">internal <fr:tex display="inline"><![CDATA[\mathcal {C}]]></fr:tex>-coalgebras</fr:link> in <fr:tex display="inline"><![CDATA[\mathcal {B}]]></fr:tex> is denoted by
  <fr:tex display="block"><![CDATA[
    \mathbf {Comod}_{\mathcal {B}}(K).
  ]]></fr:tex></html:p></fr:mainmatter></fr:tree><html:p>
        For example, if <fr:tex display="inline"><![CDATA[\mathcal {C} = \mathbf {Cat}]]></fr:tex>, then a co-category internal to <fr:tex display="inline"><![CDATA[\mathcal {B}]]></fr:tex> is given by a functor <fr:tex display="inline"><![CDATA[\mathbf {Cat} \xrightarrow {G} \mathcal {B}]]></fr:tex> satisfying the above.
      </html:p><html:p>
        We will seek to capture the condition of being an <fr:link href="/coherent-inverses-PCO8/" title="Internal \mathcal {C}-coalgebra" uri="https://forest.nickx.hu/coherent-inverses-PCO8/" display-uri="coherent-inverses-PCO8" type="local">internal coalgebra</fr:link> as the preservation of certain classes of colimits, using the technique of <fr:link href="/coherent-inverses-QG94/" title="density presentation" uri="https://forest.nickx.hu/coherent-inverses-QG94/" display-uri="coherent-inverses-QG94" type="local">density presentations</fr:link>.
      </html:p><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>8</fr:month><fr:day>23</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-QG94/</fr:uri><fr:display-uri>coherent-inverses-QG94</fr:display-uri><fr:route>/coherent-inverses-QG94/</fr:route><fr:title text="density presentation"><fr:link href="/coherent-inverses-QG94/" title="density presentation" uri="https://forest.nickx.hu/coherent-inverses-QG94/" display-uri="coherent-inverses-QG94" type="local">density presentation</fr:link></fr:title><fr:taxon>definition</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
  A <fr:link href="/coherent-inverses-QG94/" title="density presentation" uri="https://forest.nickx.hu/coherent-inverses-QG94/" display-uri="coherent-inverses-QG94" type="local">density presentation</fr:link> for a fully faithful <fr:link href="/coherent-inverses-RQH3/" title="dense functor" uri="https://forest.nickx.hu/coherent-inverses-RQH3/" display-uri="coherent-inverses-RQH3" type="local">dense</fr:link> functor <fr:tex display="inline"><![CDATA[{\mathcal {A} \xrightarrow {K} \mathcal {C}}]]></fr:tex> is a family of diagrams
  <fr:tex display="block"><![CDATA[
    {({\mathcal {G}_i \xrightarrow {P_i} \mathcal {A}})}_{i \in  I}
  ]]></fr:tex>
  such that for each <fr:tex display="inline"><![CDATA[i \in  I]]></fr:tex>, the colimit of <fr:tex display="inline"><![CDATA[{\mathcal {G}_i \xrightarrow {P_i} \mathcal {A}} \xrightarrow {K} \mathcal {C}]]></fr:tex> exists and is preserved by <fr:tex display="inline"><![CDATA[\mathcal {C} (K a, -)]]></fr:tex> for each <fr:tex display="inline"><![CDATA[a \in  \mathcal {A}]]></fr:tex>, and moreover <fr:tex display="inline"><![CDATA[\mathcal {C}]]></fr:tex> is the closure of <fr:tex display="inline"><![CDATA[\mathcal {A}]]></fr:tex> under this family of colimits.
</html:p><html:p>
  This notion is a simplified version of that of <html:span class="textual" tid="§ 5.4" uid="basic-concepts-of-enriched-category-theory"><fr:link href="/basic-concepts-of-enriched-category-theory/" title="Basic concepts of enriched category theory" uri="https://forest.nickx.hu/basic-concepts-of-enriched-category-theory/" display-uri="basic-concepts-of-enriched-category-theory" type="local">[§ 5.4, basic-concepts-of-enriched-category-theory]</fr:link></html:span>, restricted to the case where <fr:tex display="inline"><![CDATA[\mathcal {V} = \mathbf {Set}]]></fr:tex>.
</html:p></fr:mainmatter></fr:tree><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>8</fr:month><fr:day>23</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-7UUA/</fr:uri><fr:display-uri>coherent-inverses-7UUA</fr:display-uri><fr:route>/coherent-inverses-7UUA/</fr:route><fr:title text="Canonical density presentation">Canonical <fr:link href="/coherent-inverses-QG94/" title="density presentation" uri="https://forest.nickx.hu/coherent-inverses-QG94/" display-uri="coherent-inverses-QG94" type="local">density presentation</fr:link></fr:title><fr:taxon>proposition</fr:taxon><fr:meta name="source"><html:span tid="Theorem 5.29" uid="basic-concepts-of-enriched-category-theory"><fr:link href="/basic-concepts-of-enriched-category-theory/" title="Basic concepts of enriched category theory" uri="https://forest.nickx.hu/basic-concepts-of-enriched-category-theory/" display-uri="basic-concepts-of-enriched-category-theory" type="local">[Theorem 5.29, basic-concepts-of-enriched-category-theory]</fr:link></html:span></fr:meta></fr:frontmatter><fr:mainmatter><html:p>
  Every fully faithful <fr:link href="/coherent-inverses-RQH3/" title="dense functor" uri="https://forest.nickx.hu/coherent-inverses-RQH3/" display-uri="coherent-inverses-RQH3" type="local">dense</fr:link> functor <fr:tex display="inline"><![CDATA[{\mathcal {A} \xrightarrow {K} \mathcal {C}}]]></fr:tex> admits a canonical <fr:link href="/coherent-inverses-QG94/" title="density presentation" uri="https://forest.nickx.hu/coherent-inverses-QG94/" display-uri="coherent-inverses-QG94" type="local">density presentation</fr:link>, given by
  <fr:tex display="block"><![CDATA[
    {({{\textstyle  \int  \mathcal {C} (K -, c)} \xrightarrow {\pi _1} \mathcal {A}})}_{c \in  \mathcal {C}}.
  ]]></fr:tex></html:p></fr:mainmatter></fr:tree><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>8</fr:month><fr:day>23</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-ZB0A/</fr:uri><fr:display-uri>coherent-inverses-ZB0A</fr:display-uri><fr:route>/coherent-inverses-ZB0A/</fr:route><fr:title text="density presentation of \mathbf {Cat}"><fr:link href="/coherent-inverses-QG94/" title="density presentation" uri="https://forest.nickx.hu/coherent-inverses-QG94/" display-uri="coherent-inverses-QG94" type="local">density presentation</fr:link> of <fr:tex display="inline"><![CDATA[\mathbf {Cat}]]></fr:tex></fr:title><fr:taxon>lemma</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
  The <fr:link href="/coherent-inverses-RQH3/" title="dense functor" uri="https://forest.nickx.hu/coherent-inverses-RQH3/" display-uri="coherent-inverses-RQH3" type="local">dense</fr:link> full subcategory inclusion of <fr:tex display="inline"><![CDATA[{\Delta _{\leq  2}} \coloneqq  \set {[0], [1], [2]} \subseteq  \mathbf {Cat}]]></fr:tex> admits a <fr:link href="/coherent-inverses-QG94/" title="density presentation" uri="https://forest.nickx.hu/coherent-inverses-QG94/" display-uri="coherent-inverses-QG94" type="local">density presentation</fr:link> given by the diagram <fr:tex display="inline"><![CDATA[[1] +_{[0]} [1]]]></fr:tex>.
</html:p>
 
   
   <fr:tree show-metadata="false" toc="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>8</fr:month><fr:day>23</fr:day></fr:date><fr:taxon>proof</fr:taxon></fr:frontmatter><fr:mainmatter>
  <html:p>
    This arises as the Segal condition for ordinary categories: a 2-coskeletal simplicial set is the nerve of some category precisely when it satisfies this condition, i.e. each of its 2-simplices have unique horn fillers.
  </html:p>
</fr:mainmatter></fr:tree>
 
</fr:mainmatter></fr:tree><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>8</fr:month><fr:day>25</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-UJQI/</fr:uri><fr:display-uri>coherent-inverses-UJQI</fr:display-uri><fr:route>/coherent-inverses-UJQI/</fr:route><fr:title text="\mathbf {Cat}-coalgebra"><fr:tex display="inline"><![CDATA[\mathbf {Cat}]]></fr:tex>-coalgebra</fr:title><fr:taxon>corollary</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
  An <fr:link href="/coherent-inverses-PCO8/" title="Internal \mathcal {C}-coalgebra" uri="https://forest.nickx.hu/coherent-inverses-PCO8/" display-uri="coherent-inverses-PCO8" type="local">internal <fr:tex display="inline"><![CDATA[\mathbf {Cat}]]></fr:tex>-coalgebra</fr:link> in a category <fr:tex display="inline"><![CDATA[\mathcal {B}]]></fr:tex> is precisely a functor <fr:tex display="inline"><![CDATA[{{\Delta _{\leq  2}} \xrightarrow {G} \mathcal {B}}]]></fr:tex> which preserves the colimit
  <fr:tex display="block"><![CDATA[
    [1] +_{[0]} [1] = [2].
  ]]></fr:tex></html:p></fr:mainmatter></fr:tree><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>8</fr:month><fr:day>29</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-I6QY/</fr:uri><fr:display-uri>coherent-inverses-I6QY</fr:display-uri><fr:route>/coherent-inverses-I6QY/</fr:route><fr:title text="density presentation of \mathbf {Cat} / {\mathbf {\Delta }_+}"><fr:link href="/coherent-inverses-QG94/" title="density presentation" uri="https://forest.nickx.hu/coherent-inverses-QG94/" display-uri="coherent-inverses-QG94" type="local">density presentation</fr:link> of <fr:tex display="inline"><![CDATA[\mathbf {Cat} / {\mathbf {\Delta }_+}]]></fr:tex></fr:title><fr:taxon>corollary</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
  The <fr:link href="/coherent-inverses-RQH3/" title="dense functor" uri="https://forest.nickx.hu/coherent-inverses-RQH3/" display-uri="coherent-inverses-RQH3" type="local">dense</fr:link> full subcategory inclusion of <fr:tex display="inline"><![CDATA[{\Delta ^{\bullet _{/}}_{\leq  2}} \subseteq  \mathbf {Cat} / {\mathbf {\Delta }_+}]]></fr:tex> admits a <fr:link href="/coherent-inverses-QG94/" title="density presentation" uri="https://forest.nickx.hu/coherent-inverses-QG94/" display-uri="coherent-inverses-QG94" type="local">density presentation</fr:link> given by diagrams of the form
  <fr:tex display="block"><![CDATA[
    ([l] \xrightarrow {\alpha } [m]) +_{[m]} ([m] \xrightarrow {\beta } [n]).
  ]]></fr:tex></html:p></fr:mainmatter></fr:tree><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>8</fr:month><fr:day>29</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-TUXL/</fr:uri><fr:display-uri>coherent-inverses-TUXL</fr:display-uri><fr:route>/coherent-inverses-TUXL/</fr:route><fr:title text="\mathbf {Cat} / {\mathbf {\Delta }_+}-coalgebra"><fr:tex display="inline"><![CDATA[\mathbf {Cat} / {\mathbf {\Delta }_+}]]></fr:tex>-coalgebra</fr:title><fr:taxon>corollary</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
  An <fr:link href="/coherent-inverses-PCO8/" title="Internal \mathcal {C}-coalgebra" uri="https://forest.nickx.hu/coherent-inverses-PCO8/" display-uri="coherent-inverses-PCO8" type="local">internal <fr:tex display="inline"><![CDATA[\mathbf {Cat} / {\mathbf {\Delta }_+}]]></fr:tex>-coalgebra</fr:link> in a category <fr:tex display="inline"><![CDATA[\mathcal {B}]]></fr:tex> is precisely a functor <fr:tex display="inline"><![CDATA[{{\Delta ^{\bullet _{/}}_{\leq  2}} \xrightarrow {G} \mathcal {B}}]]></fr:tex> which preserves the colimits
  <fr:tex display="block"><![CDATA[
    ([l] \xrightarrow {\alpha } [m]) +_{[m]} ([m] \xrightarrow {\beta } [n]) = [l] \xrightarrow {\alpha } [m] \xrightarrow {\beta } [n].
  ]]></fr:tex></html:p></fr:mainmatter></fr:tree><html:p>
        The crux of this section is to give a method of expressing a left adjoint functor as an <fr:link href="/coherent-inverses-PCO8/" title="Internal \mathcal {C}-coalgebra" uri="https://forest.nickx.hu/coherent-inverses-PCO8/" display-uri="coherent-inverses-PCO8" type="local">internal coalgebra</fr:link>, as follows.
      </html:p><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>8</fr:month><fr:day>17</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-87R5/</fr:uri><fr:display-uri>coherent-inverses-87R5</fr:display-uri><fr:route>/coherent-inverses-87R5/</fr:route><fr:title text="internal coalgebras correspond to left adjoints"><fr:link href="/coherent-inverses-PCO8/" title="Internal \mathcal {C}-coalgebra" uri="https://forest.nickx.hu/coherent-inverses-PCO8/" display-uri="coherent-inverses-PCO8" type="local">internal coalgebras</fr:link> correspond to left adjoints</fr:title><fr:taxon>proposition</fr:taxon><fr:meta name="source"><html:span tid="Theorem 5.56" uid="basic-concepts-of-enriched-category-theory"><fr:link href="/basic-concepts-of-enriched-category-theory/" title="Basic concepts of enriched category theory" uri="https://forest.nickx.hu/basic-concepts-of-enriched-category-theory/" display-uri="basic-concepts-of-enriched-category-theory" type="local">[Theorem 5.56, basic-concepts-of-enriched-category-theory]</fr:link></html:span></fr:meta></fr:frontmatter><fr:mainmatter><html:p>
  Let <fr:tex display="inline"><![CDATA[\operatorname {Ladj} [\mathcal {C}, \mathcal {B}]]]></fr:tex> denote the subcategory of the functor category <fr:tex display="inline"><![CDATA[[\mathcal {C}, \mathcal {B}]]]></fr:tex> consisting of left adjoints.
  When <fr:tex display="inline"><![CDATA[\mathcal {B}]]></fr:tex> is cocomplete, there is an equivalence of categories
  
  
  
  <html:figure><fr:resource hash="28a028532f5c7508fcef3704cffa1372"><fr:resource-content><html:img src="/28a028532f5c7508fcef3704cffa1372.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[
       \usepackage{amsmath,amssymb}
  \usepackage{mathtools}
  \usepackage{stmaryrd}
  \newcommand{\set}[1]{\left\{#1\right\}}
     \usepackage {tikz}
     \usetikzlibrary {cd}
     \usetikzlibrary {}
     
  \definecolor {green}{RGB}{27,158,119}
  \definecolor {orange}{RGB}{217,95,2}
  \definecolor {purple}{RGB}{117,112,179}

     
    ]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
      \begin {tikzcd}[]
         \operatorname {Ladj} [\mathcal {C}, \mathcal {B}]
          \ar [r, shift left=1ex, , "\operatorname {Lan}_{K}{-}", ""'{name=UL}]
          \ar [r, shift right=1ex, phantom, ""', ""{name=UR}]
        & \mathbf {Comod}_{\mathcal {B}}(K),
          \ar [l, shift left=1ex, , "- \circ  K", ""'{name=DL}]
          \ar [l, shift right=1ex, phantom, ""', ""{name=DR}]
        \ar [from=UL, to=DL, "", phantom]
        \ar [from=UR, to=DR, "\cong ", phantom] 
      \end {tikzcd}
    ]]></fr:resource-source></fr:resource></html:figure>



  where the functor <fr:tex display="inline"><![CDATA[- \circ  K]]></fr:tex> is restriction along <fr:tex display="inline"><![CDATA[K]]></fr:tex>.
</html:p>
 
   
   <fr:tree show-metadata="false" toc="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>8</fr:month><fr:day>17</fr:day></fr:date><fr:taxon>proof</fr:taxon></fr:frontmatter><fr:mainmatter>
  
  
  
  <html:p>
    This result comes from <html:span class="textual" tid="Theorem 5.56" uid="basic-concepts-of-enriched-category-theory"><fr:link href="/basic-concepts-of-enriched-category-theory/" title="Basic concepts of enriched category theory" uri="https://forest.nickx.hu/basic-concepts-of-enriched-category-theory/" display-uri="basic-concepts-of-enriched-category-theory" type="local">[Theorem 5.56, basic-concepts-of-enriched-category-theory]</fr:link></html:span>, but we can also give a direct calculation using coend calculus as follows.
  </html:p>
  <html:p>
    Assuming that <fr:tex display="inline"><![CDATA[{\mathcal {A} \xrightarrow {G} \mathcal {B}}]]></fr:tex> is an <fr:link href="/coherent-inverses-PCO8/" title="Internal \mathcal {C}-coalgebra" uri="https://forest.nickx.hu/coherent-inverses-PCO8/" display-uri="coherent-inverses-PCO8" type="local">internal coalgebra</fr:link>; we will show that <fr:tex display="inline"><![CDATA[\operatorname {Lan}_{K}{G}]]></fr:tex> is a left adjoint to some <fr:tex display="inline"><![CDATA[{\mathcal {B} \xrightarrow {T} \mathcal {C}}]]></fr:tex>.
    Calculate
    <fr:tex display="block"><![CDATA[
      \begin {gathered}
      \mathcal {B} (\operatorname {Lan}_{K}{G} c, b)
      \\ \cong  \{ \text {left Kan extension as coend} \} \\
      \mathcal {B} (\int ^a \mathcal {C} (K a, c) \times  G a, b)
      \\ \cong  \{ \text {contravariant Hom functor sends coends to ends} \} \\
      \int _a \mathcal {B} (\mathcal {C} (K a, c) \times  G a, b)
      \\ \cong  \{ \text {tensor $\times $ of $\mathbf {Set}$} \} \\
      \int _a \mathbf {Set} (\mathcal {C} (K a, c), \mathcal {B} (G a, b))
      \\ \cong  \{ \text {$G$ is a comodel, $G \dashv _{K} T$} \} \\
      \int _a \mathbf {Set} (\mathcal {C} (K a, c), \mathcal {C} (K a, T b))
      \\ \cong  \{ \text {natural transformations as ends} \} \\
      \hat {\mathcal {A}} (\mathcal {C} (K -, c), \mathcal {C} (K -, T b))
      \\ = \{ \text {definition of relative nerve} \} \\
      \hat {\mathcal {A}} (N_{K} (c), N_{K} (T b))
      \\ \cong  \{ \text {$K$ is dense, so $N_{K}$ is fully faithful} \} \\
      \mathcal {C} (c, T b).
      \end {gathered}
    ]]></fr:tex></html:p>
  <html:p>
    Now suppose that we have an adjunction <fr:tex display="inline"><![CDATA[F \dashv  T]]></fr:tex>; the restriction of <fr:tex display="inline"><![CDATA[F]]></fr:tex> along <fr:tex display="inline"><![CDATA[K]]></fr:tex> is an <fr:link href="/coherent-inverses-PCO8/" title="Internal \mathcal {C}-coalgebra" uri="https://forest.nickx.hu/coherent-inverses-PCO8/" display-uri="coherent-inverses-PCO8" type="local">internal coalgebra</fr:link> because
    <fr:tex display="block"><![CDATA[
      \mathcal {B} (F K a, b) \cong  \mathcal {C} (K a, T b)
    ]]></fr:tex>
    directly from the adjunction, and hence <fr:tex display="inline"><![CDATA[F K \dashv _{K} T]]></fr:tex> as required.
  </html:p>
</fr:mainmatter></fr:tree>
 
</fr:mainmatter></fr:tree></fr:mainmatter></fr:tree><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2023</fr:year><fr:month>12</fr:month><fr:day>3</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-internal-coalgebra/</fr:uri><fr:display-uri>coherent-inverses-internal-coalgebra</fr:display-uri><fr:route>/coherent-inverses-internal-coalgebra/</fr:route><fr:title text="zigzag category as an internal coalgebra"><fr:link href="/coherent-inverses-UGIR/" title="zigzag category" uri="https://forest.nickx.hu/coherent-inverses-UGIR/" display-uri="coherent-inverses-UGIR" type="local">zigzag category</fr:link> as an <fr:link href="/coherent-inverses-PCO8/" title="Internal \mathcal {C}-coalgebra" uri="https://forest.nickx.hu/coherent-inverses-PCO8/" display-uri="coherent-inverses-PCO8" type="local">internal coalgebra</fr:link></fr:title><fr:taxon>section</fr:taxon></fr:frontmatter><fr:mainmatter><html:p><fr:link href="/coherent-inverses-87R5/" title="internal coalgebras correspond to left adjoints" uri="https://forest.nickx.hu/coherent-inverses-87R5/" display-uri="coherent-inverses-87R5" type="local">proposition <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-87R5/" display-uri="coherent-inverses-87R5" /></fr:link> gives a very fast way to specify left adjoint functors, in terms of an <fr:link href="/coherent-inverses-PCO8/" title="Internal \mathcal {C}-coalgebra" uri="https://forest.nickx.hu/coherent-inverses-PCO8/" display-uri="coherent-inverses-PCO8" type="local">internal coalgebra</fr:link> in the codomain category, with respect to an <fr:link href="/coherent-inverses-XIP0/" title="essentially algebraic theory" uri="https://forest.nickx.hu/coherent-inverses-XIP0/" display-uri="coherent-inverses-XIP0" type="local">essentially algebraic theory</fr:link>, which presents the theory of the domain, as we will see in <fr:link href="/coherent-inverses-462J/" title="Left adjoint functors \mathbf {Graph} \to  \cdot  as co-graphs" uri="https://forest.nickx.hu/coherent-inverses-462J/" display-uri="coherent-inverses-462J" type="local">example <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-462J/" display-uri="coherent-inverses-462J" /></fr:link>.
      </html:p><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>8</fr:month><fr:day>17</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-462J/</fr:uri><fr:display-uri>coherent-inverses-462J</fr:display-uri><fr:route>/coherent-inverses-462J/</fr:route><fr:title text="Left adjoint functors \mathbf {Graph} \to  \cdot  as co-graphs">Left adjoint functors <fr:tex display="inline"><![CDATA[\mathbf {Graph} \to  \cdot ]]></fr:tex> as co-graphs</fr:title><fr:taxon>example</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
  The <fr:link href="/coherent-inverses-RQH3/" title="dense functor" uri="https://forest.nickx.hu/coherent-inverses-RQH3/" display-uri="coherent-inverses-RQH3" type="local">dense</fr:link> subcategory of <fr:link href="/coherent-inverses-71HA/" title="dense subcategory of \mathbf {Cat}" uri="https://forest.nickx.hu/coherent-inverses-71HA/" display-uri="coherent-inverses-71HA" type="local">proposition <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-71HA/" display-uri="coherent-inverses-71HA" /></fr:link> restricts to a <fr:link href="/coherent-inverses-RQH3/" title="dense functor" uri="https://forest.nickx.hu/coherent-inverses-RQH3/" display-uri="coherent-inverses-RQH3" type="local">dense</fr:link> subcategory <fr:tex display="inline"><![CDATA[{\mathcal {Q} \overset {J}{\hookrightarrow } \mathbf {Graph}}]]></fr:tex>, by taking the full subcategory not containing <fr:tex display="inline"><![CDATA[[2]]]></fr:tex> (it is no coincidence that this is precisely the category of <fr:link href="/coherent-inverses-D66F/" title="Topos of reflexive graphs" uri="https://forest.nickx.hu/coherent-inverses-D66F/" display-uri="coherent-inverses-D66F" type="local">definition <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-D66F/" display-uri="coherent-inverses-D66F" /></fr:link>, as a category is in some sense a <fr:link href="/coherent-inverses-D66F/" title="Topos of reflexive graphs" uri="https://forest.nickx.hu/coherent-inverses-D66F/" display-uri="coherent-inverses-D66F" type="local">reflexive graph</fr:link> equipped with a composition operation).
  In this case, <fr:tex display="inline"><![CDATA[J]]></fr:tex> is merely the (fully faithful) Yoneda embedding.
</html:p><html:p>
  Because <fr:tex display="inline"><![CDATA[\mathbf {Cat}]]></fr:tex> is cocomplete, by <fr:link href="/coherent-inverses-87R5/" title="internal coalgebras correspond to left adjoints" uri="https://forest.nickx.hu/coherent-inverses-87R5/" display-uri="coherent-inverses-87R5" type="local">proposition <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-87R5/" display-uri="coherent-inverses-87R5" /></fr:link>, every left adjoint functor <fr:tex display="inline"><![CDATA[{\mathbf {Graph} \xrightarrow {L} \mathbf {Cat}}]]></fr:tex> is equivalent to an <fr:link href="/coherent-inverses-PCO8/" title="Internal \mathcal {C}-coalgebra" uri="https://forest.nickx.hu/coherent-inverses-PCO8/" display-uri="coherent-inverses-PCO8" type="local">internal co-graph</fr:link> in <fr:tex display="inline"><![CDATA[\mathbf {Cat}]]></fr:tex>.
  Such data is given by any functor <fr:tex display="inline"><![CDATA[{\mathcal {Q} \xrightarrow {F} \mathbf {Cat}}]]></fr:tex>, which automatically satisfies the lifting property of <fr:link href="/coherent-inverses-PCO8/" title="Internal \mathcal {C}-coalgebra" uri="https://forest.nickx.hu/coherent-inverses-PCO8/" display-uri="coherent-inverses-PCO8" type="local">definition <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-PCO8/" display-uri="coherent-inverses-PCO8" /></fr:link>; this is because the <fr:link href="/coherent-inverses-RQH3/" title="dense functor" uri="https://forest.nickx.hu/coherent-inverses-RQH3/" display-uri="coherent-inverses-RQH3" type="local">relative nerve</fr:link> along the Yoneda embedding is isomorphic to the identity functor on <fr:tex display="inline"><![CDATA[\hat {\mathcal {Q}} = \mathbf {Graph}]]></fr:tex>.
</html:p><html:p>
  Let us realise the free category functor as <fr:tex display="inline"><![CDATA[L]]></fr:tex> in this manner.
  Define <fr:tex display="inline"><![CDATA[F]]></fr:tex> sending <fr:tex display="inline"><![CDATA[[0]]]></fr:tex> to the terminal category <fr:tex display="inline"><![CDATA[\cdot ]]></fr:tex>, and <fr:tex display="inline"><![CDATA[[1]]]></fr:tex> to the walking arrow category <fr:tex display="inline"><![CDATA[\cdot  \to  \cdot ]]></fr:tex>, with the obvious map on morphisms.
  Now, <fr:tex display="inline"><![CDATA[L]]></fr:tex> is computed as the left Kan extension <fr:tex display="inline"><![CDATA[\operatorname {Lan}_{J}{F}]]></fr:tex>.
  As <fr:tex display="inline"><![CDATA[\mathbf {Cat}]]></fr:tex> is cocomplete, this Kan extension is determined pointwise with the following colimit formula:
  <fr:tex display="block"><![CDATA[
    \operatorname {Lan}_{J}{F} (G) = \operatorname {colim} \left ( J \downarrow  G \xrightarrow {\pi _1} {\mathcal {Q} \xrightarrow {F} \mathbf {Cat}} \right ),
  ]]></fr:tex>
  where the comma category <fr:tex display="inline"><![CDATA[J \downarrow  G]]></fr:tex> is the <fr:link href="/coherent-inverses-ATG5/" title="category of elements" uri="https://forest.nickx.hu/coherent-inverses-ATG5/" display-uri="coherent-inverses-ATG5" type="local">category of elements</fr:link> of the functor <fr:tex display="inline"><![CDATA[\mathbf {Graph} (J -, G)]]></fr:tex>, and <fr:tex display="inline"><![CDATA[\pi _1]]></fr:tex> is its forgetful first projection.
</html:p><html:p><fr:tex display="inline"><![CDATA[J \downarrow  G = {\textstyle  \int  \mathbf {Graph} (J -, G)}]]></fr:tex> has objects pairs <fr:tex display="inline"><![CDATA[(q, h \in  \mathbf {Graph} (J q, G))]]></fr:tex>; that is, for <fr:tex display="inline"><![CDATA[q = [0]]]></fr:tex> it is simply a graph homomorphism from the terminal graph into <fr:tex display="inline"><![CDATA[G]]></fr:tex>, i.e. a vertex of <fr:tex display="inline"><![CDATA[G]]></fr:tex>, and similarly when <fr:tex display="inline"><![CDATA[q = [1]]]></fr:tex> it corresponds to an edge of <fr:tex display="inline"><![CDATA[G]]></fr:tex>.
  In other words, it is the category universally obtained by gluing together vertices of <fr:tex display="inline"><![CDATA[G]]></fr:tex> along edges of <fr:tex display="inline"><![CDATA[G]]></fr:tex>: the free category on <fr:tex display="inline"><![CDATA[G]]></fr:tex>.
</html:p><html:p>
  If we vary <fr:tex display="inline"><![CDATA[F]]></fr:tex>, fixing <fr:tex display="inline"><![CDATA[[0] \mapsto  \cdot ]]></fr:tex> and varying <fr:tex display="inline"><![CDATA[[1] \mapsto  \mathcal {C}]]></fr:tex> for other choices of <fr:tex display="inline"><![CDATA[\mathcal {C}]]></fr:tex>, we can obtain different left adjoint functors <fr:tex display="inline"><![CDATA[L = \operatorname {Lan}_{J}{F}]]></fr:tex> also.
  For <fr:tex display="inline"><![CDATA[L \dashv  R]]></fr:tex>:
  
  
  
  
  
  <html:table>
    <html:thead>
      <html:tr>
        <html:th scope="col"><fr:tex display="inline"><![CDATA[F [1]]]></fr:tex></html:th>
        <html:th scope="col"><fr:tex display="inline"><![CDATA[L]]></fr:tex></html:th>
        <html:th scope="col"><fr:tex display="inline"><![CDATA[R]]></fr:tex></html:th>
      </html:tr>
    </html:thead>
    <html:tbody>
      
        <html:tr>
          <html:td><fr:tex display="inline"><![CDATA[\cdot  \to  \cdot ]]></fr:tex></html:td>
          <html:td>free category</html:td>
          <html:td>underlying graph</html:td>
        </html:tr>
      
      
        <html:tr>
          <html:td><fr:tex display="inline"><![CDATA[\cdot  \overset {\sim }{\to } \cdot ]]></fr:tex></html:td>
          <html:td>free groupoid</html:td>
          <html:td>underlying graph of core</html:td>
        </html:tr>
      
      
        <html:tr>
          <html:td><fr:tex display="inline"><![CDATA[\cdot  \phantom {\to } \cdot ]]></fr:tex></html:td>
          <html:td>discrete category</html:td>
          <html:td>clique graph on objects</html:td>
        </html:tr>
      
      
        <html:tr>
          <html:td><fr:tex display="inline"><![CDATA[\cdot ]]></fr:tex></html:td>
          <html:td>discrete category of connected components</html:td>
          <html:td>disconnected graph of objects</html:td>
        </html:tr>
      
    </html:tbody>
  </html:table></html:p></fr:mainmatter></fr:tree><html:p>
        We seek to universally determine the <fr:link href="/coherent-inverses-SKZ7/" title="zigzag functor as a parametric right adjoint" uri="https://forest.nickx.hu/coherent-inverses-SKZ7/" display-uri="coherent-inverses-SKZ7" type="local">zigzag functor</fr:link> of <fr:link href="/coherent-inverses-SKZ7/" title="zigzag functor as a parametric right adjoint" uri="https://forest.nickx.hu/coherent-inverses-SKZ7/" display-uri="coherent-inverses-SKZ7" type="local">definition <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-SKZ7/" display-uri="coherent-inverses-SKZ7" /></fr:link> in this manner.
        That is, due to <fr:link href="/coherent-inverses-87R5/" title="internal coalgebras correspond to left adjoints" uri="https://forest.nickx.hu/coherent-inverses-87R5/" display-uri="coherent-inverses-87R5" type="local">proposition <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-87R5/" display-uri="coherent-inverses-87R5" /></fr:link>, <fr:tex display="inline"><![CDATA[\mathsf {Expl}]]></fr:tex> should be obtained as the left Kan extension of some <fr:link href="/coherent-inverses-PCO8/" title="Internal \mathcal {C}-coalgebra" uri="https://forest.nickx.hu/coherent-inverses-PCO8/" display-uri="coherent-inverses-PCO8" type="local">internal coalgebra in <fr:tex display="inline"><![CDATA[\mathbf {Cat}]]></fr:tex></fr:link> for some <fr:link href="/coherent-inverses-XIP0/" title="essentially algebraic theory" uri="https://forest.nickx.hu/coherent-inverses-XIP0/" display-uri="coherent-inverses-XIP0" type="local">essentially algebraic theory</fr:link> <fr:tex display="inline"><![CDATA[{{\Delta ^{\bullet _{/}}_{\leq  2}} \xrightarrow {L} \mathbf {Cat}}]]></fr:tex>, as in the following diagram:
        
        
  
  
  <html:figure><fr:resource hash="c0a3bd8e58367b217452f6eb1c4ed33d"><fr:resource-content><html:img src="/c0a3bd8e58367b217452f6eb1c4ed33d.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[
       \usepackage{amsmath,amssymb}
  \usepackage{mathtools}
  \usepackage{stmaryrd}
  \newcommand{\set}[1]{\left\{#1\right\}}
     \usepackage {tikz}
     \usetikzlibrary {cd}
     \usetikzlibrary {}
     
  \definecolor {green}{RGB}{27,158,119}
  \definecolor {orange}{RGB}{217,95,2}
  \definecolor {purple}{RGB}{117,112,179}

     
    ]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
      \begin {tikzcd}[column sep=huge]
        & {\Delta ^{\bullet _{/}}_{\leq  2}} \ar [d, hookrightarrow, "i"] \ar [dl, shift right=0.6em, "L"'] \\ \mathbf {Cat}
          \ar [r, shift left=1ex, phantom, "", ""'{name=UL}]
          \ar [r, shift right=1ex, , "\mathsf {Zig}"', ""{name=UR}]
        & \mathbf {Cat} / {\mathbf {\Delta }_+}.
          \ar [l, shift left=1ex, phantom, "", ""'{name=DL}]
          \ar [l, shift right=1ex, , "\mathsf {Expl} \coloneqq  \operatorname {Lan}_{i}{L}"', ""{name=DR}]
        \ar [from=UL, to=DL, "", phantom]
        \ar [from=UR, to=DR, "\dashv ", phantom, sloped] 
      \end {tikzcd}
    ]]></fr:resource-source></fr:resource></html:figure></html:p><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>8</fr:month><fr:day>30</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-4KT5/</fr:uri><fr:display-uri>coherent-inverses-4KT5</fr:display-uri><fr:route>/coherent-inverses-4KT5/</fr:route><fr:title text="zigzag internal coalgebra"><fr:link href="/coherent-inverses-4KT5/" title="zigzag internal coalgebra" uri="https://forest.nickx.hu/coherent-inverses-4KT5/" display-uri="coherent-inverses-4KT5" type="local">zigzag internal coalgebra</fr:link></fr:title><fr:taxon>definition</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
  Define a functor <fr:tex display="inline"><![CDATA[{{\Delta ^{\bullet _{/}}_{\leq  2}} \xrightarrow {L} \mathbf {Cat}}]]></fr:tex>, given on objects by
  <html:ol><html:li>
      each (augmented) simplex <fr:tex display="inline"><![CDATA[[n]]]></fr:tex> maps to a category with objects
      <fr:tex display="block"><![CDATA[
        \set {r^{[n]}_i \mid  i \leq  n+1 \in  \mathbb {N}}
        \cup 
        \set {s^{[n]}_i \mid  i < n+1 \in  \mathbb {N}}
      ]]></fr:tex>
      and morphisms <fr:tex display="inline"><![CDATA[r^{[n]}_i \to  s^{[n]}_i \leftarrow  r^{[n]}_{i+1}]]></fr:tex> for each <fr:tex display="inline"><![CDATA[i < n+1]]></fr:tex>;
    </html:li>
    
    <html:li>
      each monotone map <fr:tex display="inline"><![CDATA[{[m] \xrightarrow {\alpha } [n]}]]></fr:tex> maps to a category generated by gluing together <fr:tex display="inline"><![CDATA[L ([m])]]></fr:tex> and <fr:tex display="inline"><![CDATA[L ([n])]]></fr:tex>, while adding morphisms <fr:tex display="inline"><![CDATA[s^{[m]}_i \xrightarrow {s^{\alpha }_i} s^{[n]}_j]]></fr:tex> when <fr:tex display="inline"><![CDATA[\alpha  (i) = j]]></fr:tex>, and <fr:tex display="inline"><![CDATA[r^{[m]}_i \xrightarrow {r^{\alpha }_j} r^{[n]}_j]]></fr:tex> when <fr:tex display="inline"><![CDATA[\mathsf {R} \alpha  (j) = i]]></fr:tex>, and quotienting together parallel morphisms;
    </html:li>
    
    
    <html:li>
      each composable pair of monotone maps <fr:tex display="inline"><![CDATA[({[l] \xrightarrow {\alpha } [m]}, {[m] \xrightarrow {\beta } [n]})]]></fr:tex> maps to the category generated by gluing together <fr:tex display="inline"><![CDATA[L ([l])]]></fr:tex>, <fr:tex display="inline"><![CDATA[L ([m])]]></fr:tex>, <fr:tex display="inline"><![CDATA[L ([n])]]></fr:tex> and adding morphisms as above.
    </html:li></html:ol></html:p><html:p>
  Such a functor is immediately a <fr:link href="/coherent-inverses-PCO8/" title="Internal \mathcal {C}-coalgebra" uri="https://forest.nickx.hu/coherent-inverses-PCO8/" display-uri="coherent-inverses-PCO8" type="local"><fr:tex display="inline"><![CDATA[\mathbf {Cat} / {\mathbf {\Delta }_+}]]></fr:tex>-coalgebra internal to <fr:tex display="inline"><![CDATA[\mathbf {Cat}]]></fr:tex></fr:link>, as it preserves the colimits of <fr:link href="/coherent-inverses-TUXL/" title="\mathbf {Cat} / {\mathbf {\Delta }_+}-coalgebra" uri="https://forest.nickx.hu/coherent-inverses-TUXL/" display-uri="coherent-inverses-TUXL" type="local">corollary <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-TUXL/" display-uri="coherent-inverses-TUXL" /></fr:link>.
  Thus, by left Kan extension it determines a left adjoint functor <fr:tex display="inline"><![CDATA[\mathbf {Cat} / {\mathbf {\Delta }_+} \to  \mathbf {Cat}]]></fr:tex>, which we define to be <fr:tex display="inline"><![CDATA[{\mathbf {Cat} / {\mathbf {\Delta }_+} \xrightarrow {\mathsf {Expl}} \mathbf {Cat}}]]></fr:tex>.
</html:p></fr:mainmatter></fr:tree><html:p>
        We now demonstrate that this indeed captures the same notion of <fr:link href="/coherent-inverses-UGIR/" title="zigzag category" uri="https://forest.nickx.hu/coherent-inverses-UGIR/" display-uri="coherent-inverses-UGIR" type="local">zigzag category</fr:link> as in <fr:link href="/coherent-inverses-UGIR/" title="zigzag category" uri="https://forest.nickx.hu/coherent-inverses-UGIR/" display-uri="coherent-inverses-UGIR" type="local">definition <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-UGIR/" display-uri="coherent-inverses-UGIR" /></fr:link>.
      </html:p><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>8</fr:month><fr:day>30</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-77KN/</fr:uri><fr:display-uri>coherent-inverses-77KN</fr:display-uri><fr:route>/coherent-inverses-77KN/</fr:route><fr:title text="Explicit description of {\mathbf {Cat} / {\mathbf {\Delta }_+} \xrightarrow {\mathsf {Expl}} \mathbf {Cat}}">Explicit description of <fr:tex display="inline"><![CDATA[{\mathbf {Cat} / {\mathbf {\Delta }_+} \xrightarrow {\mathsf {Expl}} \mathbf {Cat}}]]></fr:tex></fr:title><fr:taxon>example</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
  Let <fr:tex display="inline"><![CDATA[\substack {\mathcal {C}\\\downarrow  p\\{\mathbf {\Delta }_+}}  \in  \mathbf {Cat} / {\mathbf {\Delta }_+}]]></fr:tex>.
  We can compute <fr:tex display="inline"><![CDATA[\mathsf {Expl} (\substack {\mathcal {C}\\\downarrow  p\\{\mathbf {\Delta }_+}} ) \coloneqq  \operatorname {Lan}_{i}{L} (\substack {\mathcal {C}\\\downarrow  p\\{\mathbf {\Delta }_+}} ) \in  \mathbf {Cat}]]></fr:tex> explicitly with a colimit formula
  <fr:tex display="block"><![CDATA[
    \operatorname {colim} \left ( i \downarrow  \substack {\mathcal {C}\\\downarrow  p\\{\mathbf {\Delta }_+}}  \to  {{\Delta ^{\bullet _{/}}_{\leq  2}} \xrightarrow {L} \mathbf {Cat}} \right ),
  ]]></fr:tex>
  where the comma category <fr:tex display="inline"><![CDATA[i \downarrow  \substack {\mathcal {C}\\\downarrow  p\\{\mathbf {\Delta }_+}} ]]></fr:tex> is the <fr:link href="/coherent-inverses-ATG5/" title="category of elements" uri="https://forest.nickx.hu/coherent-inverses-ATG5/" display-uri="coherent-inverses-ATG5" type="local">category of elements</fr:link> <fr:tex display="inline"><![CDATA[{\textstyle  \int  \mathbf {Cat} / {\mathbf {\Delta }_+} (i -, \substack {\mathcal {C}\\\downarrow  p\\{\mathbf {\Delta }_+}} )}]]></fr:tex>.
  That is, it is the category as the tip of the universal cocone, which has a leg for each object of <fr:tex display="inline"><![CDATA[{\textstyle  \int  \mathbf {Cat} / {\mathbf {\Delta }_+} (i -, \substack {\mathcal {C}\\\downarrow  p\\{\mathbf {\Delta }_+}} )}]]></fr:tex> given by
  <html:ol><html:li><fr:tex display="inline"><![CDATA[([n], c)]]></fr:tex> where <fr:tex display="inline"><![CDATA[c \in  \mathcal {C}]]></fr:tex> lives in the fibre of <fr:tex display="inline"><![CDATA[p]]></fr:tex> over <fr:tex display="inline"><![CDATA[[n]]]></fr:tex>;
    </html:li>
    
    
    <html:li><fr:tex display="inline"><![CDATA[({[m] \xrightarrow {\alpha } [n]}, {c \xrightarrow {f} c^\prime })]]></fr:tex>, where <fr:tex display="inline"><![CDATA[f]]></fr:tex> is a morphism of <fr:tex display="inline"><![CDATA[\mathcal {C}]]></fr:tex> living in the fibre of <fr:tex display="inline"><![CDATA[p]]></fr:tex> over <fr:tex display="inline"><![CDATA[\alpha ]]></fr:tex>;
    </html:li>
    
    
    
    <html:li><fr:tex display="inline"><![CDATA[(({[l] \xrightarrow {\alpha } [m]}, {[m] \xrightarrow {\beta } [n]}), {c \xrightarrow {f} c^\prime } \xrightarrow {f^\prime } c^{\prime \prime })]]></fr:tex> where <fr:tex display="inline"><![CDATA[f]]></fr:tex> and <fr:tex display="inline"><![CDATA[f^\prime ]]></fr:tex> are composable morphisms of <fr:tex display="inline"><![CDATA[\mathcal {C}]]></fr:tex>, respectively living in the fibres of <fr:tex display="inline"><![CDATA[p]]></fr:tex> over <fr:tex display="inline"><![CDATA[\alpha ]]></fr:tex> and <fr:tex display="inline"><![CDATA[\beta ]]></fr:tex>.
    </html:li></html:ol></html:p><html:p>
  By interpreting this colimit as a glueing construction over the categories in the image of <fr:tex display="inline"><![CDATA[L]]></fr:tex>, this is realised as the category with
  <html:dl>
    <html:dt>objects</html:dt>
    <html:dd>
      for each <fr:tex display="inline"><![CDATA[c \in  \mathcal {C}]]></fr:tex> living in the fibre of <fr:tex display="inline"><![CDATA[p]]></fr:tex> over <fr:tex display="inline"><![CDATA[[n]]]></fr:tex>,
      <fr:tex display="block"><![CDATA[
        \begin {aligned}
          (r^{[n]}_i, c), &\qquad  i \leq  n+1 \in  \mathbb {N}, \\
          (s^{[n]}_i, c), &\qquad  i < n+1 \in  \mathbb {N}.
        \end {aligned}
      ]]></fr:tex>
    </html:dd>
    <html:dt>morphisms</html:dt>
    <html:dd>
      
      
      
      
      for each morphism <fr:tex display="inline"><![CDATA[{c \xrightarrow {f} c^\prime }]]></fr:tex> of <fr:tex display="inline"><![CDATA[\mathcal {C}]]></fr:tex> living in the fibre of <fr:tex display="inline"><![CDATA[p]]></fr:tex> over <fr:tex display="inline"><![CDATA[{[m] \xrightarrow {\alpha } [n]}]]></fr:tex>, morphisms
      <fr:tex display="block"><![CDATA[
        \begin {aligned}
          (s^{[m]}_i, c) &\xrightarrow {s^{f}_i} (s^{[n]}_{\alpha  (i)}, c^\prime ), &\qquad  i \in  [m], \\
          (r^{[m]}_{\mathsf {R} \alpha  (j)}, c) &\xrightarrow {r^{f}_j} (r^{[n]}_{j}, c^\prime ), &\qquad  j \in  \mathsf {R} [n] = [n+1], \\
          (r^{[m]}_j, c) &\xrightarrow {\delta ^{f}_{j, i}} (s^{[n]}_{i}, c^\prime ), &\qquad  i \in  [n], \mathsf {R} \alpha  (i) \leq  j \leq  \mathsf {R} \alpha  (i+1),
        \end {aligned}
      ]]></fr:tex>
      such that all four triangles in
      
  
  
  <html:figure><fr:resource hash="d8f9fba74da3dc9e5f5301a76bf139f5"><fr:resource-content><html:img src="/d8f9fba74da3dc9e5f5301a76bf139f5.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[
       \usepackage{amsmath,amssymb}
  \usepackage{mathtools}
  \usepackage{stmaryrd}
  \newcommand{\set}[1]{\left\{#1\right\}}
     \usepackage {tikz}
     \usetikzlibrary {cd}
     \usetikzlibrary {}
     
  \definecolor {green}{RGB}{27,158,119}
  \definecolor {orange}{RGB}{217,95,2}
  \definecolor {purple}{RGB}{117,112,179}

     
    ]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
      \begin {tikzcd}[]
        (r^{[n]}_{\alpha  (i)}, c^\prime ) \ar [r, "\delta ^{
  \text {id}_{[n]}
}_{{\alpha  (i)}, {\alpha  (i)}}"] & (s^{[n]}_{{\alpha  (i)}}, c^\prime ) &
         (r^{[n]}_{\alpha  (i) + 1}, c^\prime ) \ar [l, "\delta ^{
  \text {id}_{[n]}
}_{{\alpha  (i) + 1}, {\alpha  (i)}}"']
        \\
        (r^{[m]}_i, c) \ar [r, "\delta ^{
  \text {id}_{[m]}
}_{i, i}"'] \ar [u, "r^{f}_{\alpha  (i)}"] \ar [ru, "\delta ^{f}_{i, \alpha  (i)}"] & (s^{[m]}_{i}, c) \ar [u, "s^{f}_i"'] &
         (r^{[m]}_{i+1}, c) \ar [l, "\delta ^{
  \text {id}_{[m]}
}_{i+1, i}"] \ar [u, "r^{f}_{\alpha  (i) + 1}"'] \ar [lu, "\delta ^{f}_{i + 1, \alpha  (i)}"']
      \end {tikzcd}
    ]]></fr:resource-source></fr:resource></html:figure>



      independently commute whenever they exist.
    </html:dd>
  </html:dl></html:p></fr:mainmatter></fr:tree><html:p>
        This explicit description, along with the fact that <fr:tex display="inline"><![CDATA[\mathsf {Expl} \dashv  \mathsf {Zig}]]></fr:tex>, will play a larger role in <fr:link href="/coherent-inverses-explosion/" title="Coherent inverses in higher-categorical string diagrams › Collapsing framed zigzags › Collapse, contraction, and typechecking › Collapsible morphisms with respect to a diagram › Exploded diagrams of framed zigzags and the level-wise tree-cover oplax diagram" uri="https://forest.nickx.hu/coherent-inverses-explosion/" display-uri="coherent-inverses-explosion" type="local">section <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-explosion/" display-uri="coherent-inverses-explosion" /></fr:link> where we treat <fr:link href="/coherent-inverses-UGIR/" title="zigzag category" uri="https://forest.nickx.hu/coherent-inverses-UGIR/" display-uri="coherent-inverses-UGIR" type="local">zigzags</fr:link> as graph-like data.
      </html:p><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2025</fr:year><fr:month>5</fr:month><fr:day>23</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-XXV2/</fr:uri><fr:display-uri>coherent-inverses-XXV2</fr:display-uri><fr:route>/coherent-inverses-XXV2/</fr:route><fr:title text="The category \mathsf {Expl} (
  \text {id}_{{\mathbf {\Delta }_+}}
)">The category <fr:tex display="inline"><![CDATA[\mathsf {Expl} (
  \text {id}_{{\mathbf {\Delta }_+}}
)]]></fr:tex></fr:title><fr:taxon>example</fr:taxon></fr:frontmatter><fr:mainmatter><html:p><fr:tex display="inline"><![CDATA[
  \text {id}_{{\mathbf {\Delta }_+}}
]]></fr:tex> is an object of <fr:tex display="inline"><![CDATA[\mathbf {Cat} / {\mathbf {\Delta }_+}]]></fr:tex>, and moreover every fibre over each object and morphism is trivial, so the description of <fr:tex display="inline"><![CDATA[\mathsf {Expl} (
  \text {id}_{{\mathbf {\Delta }_+}}
)]]></fr:tex> is particularly simple.
  Objects are given by, for each <fr:tex display="inline"><![CDATA[[n]]]></fr:tex>,
  <fr:tex display="block"><![CDATA[
    \begin {aligned}
      r^{[n]}_i, &\qquad  i \leq  n+1 \in  \mathbb {N}, \\
      s^{[n]}_i, &\qquad  i < n+1 \in  \mathbb {N},
    \end {aligned}
  ]]></fr:tex>
  and each monotone map <fr:tex display="inline"><![CDATA[{[m] \xrightarrow {\alpha } [n]}]]></fr:tex> generates a collection of morphisms
  <fr:tex display="block"><![CDATA[
    \begin {aligned}
      s^{[m]}_i &\xrightarrow {s_i} s^{[n]}_{\alpha  (i)}, &\qquad  i \in  [m], \\
      r^{[m]}_{\mathsf {R} \alpha  (j)} &\xrightarrow {r_j} r^{[n]}_{j}, &\qquad  j \in  \mathsf {R} [n] = [n+1], \\
      r^{[m]}_j &\xrightarrow {\delta _{i, j}} s^{[n]}_{i}, &\qquad  i \in  [n], \mathsf {R} \alpha  (i) \leq  j \leq  \mathsf {R} \alpha  (i+1).
    \end {aligned}
  ]]></fr:tex></html:p><html:p>
  Now let <fr:tex display="inline"><![CDATA[\operatorname {Zig}(\mathcal {C})]]></fr:tex> be some <fr:link href="/coherent-inverses-UGIR/" title="zigzag category" uri="https://forest.nickx.hu/coherent-inverses-UGIR/" display-uri="coherent-inverses-UGIR" type="local">zigzag category</fr:link>, regarded as an object of <fr:tex display="inline"><![CDATA[\mathbf {Cat} / {\mathbf {\Delta }_+}]]></fr:tex> with the <fr:link href="/coherent-inverses-9V13/" title="singular projection" uri="https://forest.nickx.hu/coherent-inverses-9V13/" display-uri="coherent-inverses-9V13" type="local">singular projection</fr:link>.
  A morphism <fr:tex display="inline"><![CDATA[{
  \text {id}_{{\mathbf {\Delta }_+}}
 \xrightarrow {Z} \operatorname {Zig}(\mathcal {C})}]]></fr:tex> is precisely a compatible family of choices for <fr:link href="/coherent-inverses-UGIR/" title="zigzag category" uri="https://forest.nickx.hu/coherent-inverses-UGIR/" display-uri="coherent-inverses-UGIR" type="local">zigzags</fr:link> <fr:tex display="inline"><![CDATA[Z_{[n]} \in  \operatorname {Zig}(\mathcal {C})]]></fr:tex> whose <fr:link href="/coherent-inverses-9V13/" title="singular projection" uri="https://forest.nickx.hu/coherent-inverses-9V13/" display-uri="coherent-inverses-9V13" type="local">singular projection</fr:link> is <fr:tex display="inline"><![CDATA[[n] \in  {\mathbf {\Delta }_+}]]></fr:tex>, and <fr:link href="/coherent-inverses-UGIR/" title="zigzag category" uri="https://forest.nickx.hu/coherent-inverses-UGIR/" display-uri="coherent-inverses-UGIR" type="local">zigzag maps</fr:link> <fr:tex display="inline"><![CDATA[Z_{[m]} \xrightarrow {Z_{\alpha }} Z_{[n]}]]></fr:tex> whose <fr:link href="/coherent-inverses-9V13/" title="singular projection" uri="https://forest.nickx.hu/coherent-inverses-9V13/" display-uri="coherent-inverses-9V13" type="local">singular projection</fr:link> is <fr:tex display="inline"><![CDATA[{[m] \xrightarrow {\alpha } [n]}]]></fr:tex> in <fr:tex display="inline"><![CDATA[{\mathbf {\Delta }_+}]]></fr:tex>.
  From the adjunction <fr:tex display="inline"><![CDATA[\mathsf {Expl} \dashv  \mathsf {Zig}]]></fr:tex>, there is a bijection of morphisms
  <fr:tex display="block"><![CDATA[
    \frac {J \to  \mathsf {Zig} (\mathcal {C})}{\mathsf {Expl} (J) \to  \mathcal {C}}
    \begin {array}{c}
    \text {in $\mathbf {Cat} / {\mathbf {\Delta }_+}$} \\
    \text {in $\mathbf {Cat}$}
    \end {array}
  ]]></fr:tex>
  which states that, replacing <fr:tex display="inline"><![CDATA[J]]></fr:tex> with <fr:tex display="inline"><![CDATA[
  \text {id}_{{\mathbf {\Delta }_+}}
]]></fr:tex>, this family is precisely a <fr:tex display="inline"><![CDATA[\mathcal {C}]]></fr:tex>-labelling of the objects and morphisms of <fr:tex display="inline"><![CDATA[\mathsf {Expl} (
  \text {id}_{{\mathbf {\Delta }_+}}
)]]></fr:tex> such that they assemble into <fr:link href="/coherent-inverses-UGIR/" title="zigzag category" uri="https://forest.nickx.hu/coherent-inverses-UGIR/" display-uri="coherent-inverses-UGIR" type="local">zigzags</fr:link> and <fr:link href="/coherent-inverses-UGIR/" title="zigzag category" uri="https://forest.nickx.hu/coherent-inverses-UGIR/" display-uri="coherent-inverses-UGIR" type="local">zigzag maps</fr:link>, which is exactly the compatibility condition.
</html:p></fr:mainmatter></fr:tree><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>12</fr:month><fr:day>16</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-I4ER/</fr:uri><fr:display-uri>coherent-inverses-I4ER</fr:display-uri><fr:route>/coherent-inverses-I4ER/</fr:route><fr:title text="example [https://forest.nickx.hu/coherent-inverses-BWBW/] revisited"><fr:link href="/coherent-inverses-BWBW/" title="Unlabelled zigzag category" uri="https://forest.nickx.hu/coherent-inverses-BWBW/" display-uri="coherent-inverses-BWBW" type="local">example <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-BWBW/" display-uri="coherent-inverses-BWBW" /></fr:link> revisited</fr:title><fr:taxon>remark</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
  Let <fr:tex display="inline"><![CDATA[\mathbf {1}]]></fr:tex> be the terminal category.
  <fr:tex display="inline"><![CDATA[\mathsf {Zig}]]></fr:tex>, as a right adjoint, preserves limits.
  Hence, <fr:tex display="inline"><![CDATA[\mathsf {Zig} (\mathbf {1})]]></fr:tex> is terminal in <fr:tex display="inline"><![CDATA[\mathbf {Cat} / {\mathbf {\Delta }_+}]]></fr:tex>, so its image under the forgetful domain projection is <fr:tex display="inline"><![CDATA[{\mathbf {\Delta }_+}]]></fr:tex>, as the terminal object of <fr:tex display="inline"><![CDATA[\mathbf {Cat} / {\mathbf {\Delta }_+}]]></fr:tex> is <fr:tex display="inline"><![CDATA[
  \text {id}_{{\mathbf {\Delta }_+}}
]]></fr:tex>.
</html:p></fr:mainmatter></fr:tree><html:p>
        In effect, this captures the same construction as <fr:link href="/coherent-inverses-V0EG/" title="universal zigzag bundle" uri="https://forest.nickx.hu/coherent-inverses-V0EG/" display-uri="coherent-inverses-V0EG" type="local">definition <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-V0EG/" display-uri="coherent-inverses-V0EG" /></fr:link> — which encapsulates the idea that all the combinatorics of the <fr:link href="/coherent-inverses-UGIR/" title="zigzag category" uri="https://forest.nickx.hu/coherent-inverses-UGIR/" display-uri="coherent-inverses-UGIR" type="local">zigzag category</fr:link> can be contained within one gadget — with more powerful tools than polynomial functors, which will be useful for an enriched generalisation of the <fr:link href="/coherent-inverses-7TQX/" title="zigzag polynomial functor" uri="https://forest.nickx.hu/coherent-inverses-7TQX/" display-uri="coherent-inverses-7TQX" type="local">zigzag polynomial functor</fr:link>.
        Indeed, it is not clear what an ‘enriched polynomial functor’ should be, but the <fr:link href="/coherent-inverses-4KT5/" title="zigzag internal coalgebra" uri="https://forest.nickx.hu/coherent-inverses-4KT5/" display-uri="coherent-inverses-4KT5" type="local">zigzag internal coalgebra</fr:link> construction is more amenable to enrichment.
      </html:p></fr:mainmatter></fr:tree><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2023</fr:year><fr:month>12</fr:month><fr:day>3</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-zigzag-colimits/</fr:uri><fr:display-uri>coherent-inverses-zigzag-colimits</fr:display-uri><fr:route>/coherent-inverses-zigzag-colimits/</fr:route><fr:title text="Colimits in the zigzag category">Colimits in the <fr:link href="/coherent-inverses-UGIR/" title="zigzag category" uri="https://forest.nickx.hu/coherent-inverses-UGIR/" display-uri="coherent-inverses-UGIR" type="local">zigzag category</fr:link></fr:title><fr:taxon>section</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
        By casting the <fr:link href="/coherent-inverses-UGIR/" title="zigzag category" uri="https://forest.nickx.hu/coherent-inverses-UGIR/" display-uri="coherent-inverses-UGIR" type="local">zigzag category</fr:link> abstractly as a <fr:link href="/coherent-inverses-2H06/" title="parametric right adjoint" uri="https://forest.nickx.hu/coherent-inverses-2H06/" display-uri="coherent-inverses-2H06" type="local">parametric right adjoint</fr:link>, we can develop an alternative (but equivalent) perspective on colimits in the <fr:link href="/coherent-inverses-UGIR/" title="zigzag category" uri="https://forest.nickx.hu/coherent-inverses-UGIR/" display-uri="coherent-inverses-UGIR" type="local">zigzag category</fr:link> as presented in <html:span class="textual" tid="§ 3" uid="high-level-methods-for-homotopy-construction-in-associative-n-categories"><fr:link href="/high-level-methods-for-homotopy-construction-in-associative-n-categories/" title="High-level methods for homotopy construction in associative $n$-categories" uri="https://forest.nickx.hu/high-level-methods-for-homotopy-construction-in-associative-n-categories/" display-uri="high-level-methods-for-homotopy-construction-in-associative-n-categories" type="local">[§ 3, high-level-methods-for-homotopy-construction-in-associative-n-categories]</fr:link></html:span>.
      </html:p><html:p>
        We describe how to compute colimits in <fr:tex display="inline"><![CDATA[\operatorname {Zig}(\mathcal {C})]]></fr:tex>.
        Ultimately, this boils down to a kind of colimit procedure for <fr:tex display="inline"><![CDATA[\mathcal {C}]]></fr:tex>.
      </html:p><html:p>
        Every <fr:link href="/coherent-inverses-UGIR/" title="zigzag category" uri="https://forest.nickx.hu/coherent-inverses-UGIR/" display-uri="coherent-inverses-UGIR" type="local">zigzag category</fr:link> admits a <fr:link href="/coherent-inverses-9V13/" title="singular projection" uri="https://forest.nickx.hu/coherent-inverses-9V13/" display-uri="coherent-inverses-9V13" type="local">canonical singular projection functor</fr:link> <fr:tex display="inline"><![CDATA[{\operatorname {Zig}(\mathcal {C}) \xrightarrow {\pi } {\mathbf {\Delta }_+}}]]></fr:tex>, which takes a <fr:link href="/coherent-inverses-UGIR/" title="zigzag category" uri="https://forest.nickx.hu/coherent-inverses-UGIR/" display-uri="coherent-inverses-UGIR" type="local">zigzag category</fr:link> to its <html:em>underlying shape</html:em>, and such a functor admits certain opcartesian lifts.
        Informally, given some diagram <fr:tex display="inline"><![CDATA[{J \xrightarrow {D} \operatorname {Zig}(\mathcal {C})}]]></fr:tex>, computing the colimit of <fr:tex display="inline"><![CDATA[D]]></fr:tex> reduces to the two-step procedure:
        <html:ol><html:li>
            first, compute the underlying shape of the colimit of <fr:tex display="inline"><![CDATA[D]]></fr:tex>, by taking a colimit of the composite diagram <fr:tex display="inline"><![CDATA[J \xrightarrow {D} {\operatorname {Zig}(\mathcal {C}) \xrightarrow {\pi } {\mathbf {\Delta }_+}}]]></fr:tex>, failing if this fails;
          </html:li>
          <html:li>
            use colimits in <fr:tex display="inline"><![CDATA[\mathcal {C}]]></fr:tex> to fill in the shape with appropriate data to make this a universal cocone in <fr:tex display="inline"><![CDATA[\operatorname {Zig}(\mathcal {C})]]></fr:tex>.
          </html:li></html:ol></html:p><html:p>
        We perform the second step via the adjunction defining the <fr:link href="/coherent-inverses-SKZ7/" title="zigzag functor as a parametric right adjoint" uri="https://forest.nickx.hu/coherent-inverses-SKZ7/" display-uri="coherent-inverses-SKZ7" type="local">zigzag functor</fr:link>.
        In order to explicate this, we view a colimit as a kind of pointwise left Kan extension.
        By doing so, we assert that any such colimit exists exactly when all the pointwise left Kan extensions exist.
      </html:p><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>9</fr:month><fr:day>18</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-97Q8/</fr:uri><fr:display-uri>coherent-inverses-97Q8</fr:display-uri><fr:route>/coherent-inverses-97Q8/</fr:route><fr:title text="under cocone category of J"><fr:link href="/coherent-inverses-97Q8/" title="under cocone category of J" uri="https://forest.nickx.hu/coherent-inverses-97Q8/" display-uri="coherent-inverses-97Q8" type="local">under cocone</fr:link> category of <fr:tex display="inline"><![CDATA[J]]></fr:tex></fr:title><fr:taxon>definition</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
  For a small category <fr:tex display="inline"><![CDATA[J]]></fr:tex>, the <fr:link href="/coherent-inverses-97Q8/" title="under cocone category of J" uri="https://forest.nickx.hu/coherent-inverses-97Q8/" display-uri="coherent-inverses-97Q8" type="local">under cocone</fr:link> category <fr:tex display="inline"><![CDATA[J^{\rhd }]]></fr:tex> is the category <fr:tex display="inline"><![CDATA[J]]></fr:tex> with a freely adjoined terminal object <fr:tex display="inline"><![CDATA[\mathbf {1}]]></fr:tex>.
</html:p></fr:mainmatter></fr:tree><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>9</fr:month><fr:day>18</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-422E/</fr:uri><fr:display-uri>coherent-inverses-422E</fr:display-uri><fr:route>/coherent-inverses-422E/</fr:route><fr:title text="Colimit as a pointwise left Kan extension">Colimit as a pointwise left Kan extension</fr:title><fr:taxon>lemma</fr:taxon><fr:meta name="source"><html:span tid="Proposition 6.3.10" uid="category-theory-in-context"><fr:link href="/category-theory-in-context/" title="Category theory in context" uri="https://forest.nickx.hu/category-theory-in-context/" display-uri="category-theory-in-context" type="local">[Proposition 6.3.10, category-theory-in-context]</fr:link></html:span></fr:meta></fr:frontmatter><fr:mainmatter><html:p>
  Let <fr:tex display="inline"><![CDATA[{J \xrightarrow {F} \mathcal {C}}]]></fr:tex> be a functor.
  The data of the colimit <fr:tex display="inline"><![CDATA[(\operatorname {colim} F, {F \xrightarrow {\iota } \mathrm {const}_{\operatorname {colim} F}})]]></fr:tex> is equivalent to the pointwise left Kan extension along the inclusion <fr:tex display="inline"><![CDATA[i]]></fr:tex>:
  
  
  
  <html:figure><fr:resource hash="dfd84c90c6a3a19e6c988fbfb39a6c62"><fr:resource-content><html:img src="/dfd84c90c6a3a19e6c988fbfb39a6c62.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[
       \usepackage{amsmath,amssymb}
  \usepackage{mathtools}
  \usepackage{stmaryrd}
  \newcommand{\set}[1]{\left\{#1\right\}}
     \usepackage {tikz}
     \usetikzlibrary {cd}
     \usetikzlibrary {}
     
  \definecolor {green}{RGB}{27,158,119}
  \definecolor {orange}{RGB}{217,95,2}
  \definecolor {purple}{RGB}{117,112,179}

     
    ]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
      \begin {tikzcd}[]
        J
        \ar [r, , "F"]
        \ar [d, hookrightarrow, "i"', ""'{name=L}]
        & |[alias=R]| \mathcal {C}
        \ar [dl, leftarrow, "\operatorname {Lan}_{i}{F}"]
        \ar [from=L, to=R, phantom, ""] \\
        J^{\rhd } ,
      \end {tikzcd}
    ]]></fr:resource-source></fr:resource></html:figure>



  given by
  <fr:tex display="block"><![CDATA[
    \operatorname {Lan}_{i}{F} (j) =
    \begin {cases}
      F (j) & \text {if } j \in  J, \\
      \operatorname {colim} F & \text {if } j = \mathbf {1} \in  J^{\rhd } \setminus  J,
    \end {cases}
  ]]></fr:tex>
  and <fr:tex display="inline"><![CDATA[\operatorname {Lan}_{i}{F} ({j \xrightarrow {!} \mathbf {1}}) = \iota _{j}]]></fr:tex> for each unique morphism in <fr:tex display="inline"><![CDATA[J^{\rhd }]]></fr:tex>.
</html:p><html:p>
  The inclusion <fr:tex display="inline"><![CDATA[i]]></fr:tex> is fully faithful, so the unit of the left Kan extension is an isomorphism, and in particular as <fr:tex display="inline"><![CDATA[i]]></fr:tex> is an inclusion can be chosen to be the identity.
</html:p></fr:mainmatter></fr:tree><html:p>
        We introduce some 2-categorical aspects of slice categories over <fr:tex display="inline"><![CDATA[\mathbf {Cat}]]></fr:tex>, which will be necessary to rewrite colimits in <fr:tex display="inline"><![CDATA[\operatorname {Zig}(\mathcal {C})]]></fr:tex> as colimits in <fr:tex display="inline"><![CDATA[\mathcal {C}]]></fr:tex>, but without fully using 2-categorical language.
      </html:p><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>9</fr:month><fr:day>18</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-C2YY/</fr:uri><fr:display-uri>coherent-inverses-C2YY</fr:display-uri><fr:route>/coherent-inverses-C2YY/</fr:route><fr:title text="slice Hom category \mathbf {Cat} / \mathcal {B} (\substack {\mathcal {C}\\\downarrow  p\\\mathcal {B}}, \substack {\mathcal {D}\\\downarrow  q\\\mathcal {B}})"><fr:link href="/coherent-inverses-C2YY/" title="slice Hom category \mathbf {Cat} / \mathcal {B} (\substack {\mathcal {C}\\\downarrow  p\\\mathcal {B}}, \substack {\mathcal {D}\\\downarrow  q\\\mathcal {B}})" uri="https://forest.nickx.hu/coherent-inverses-C2YY/" display-uri="coherent-inverses-C2YY" type="local">slice Hom category</fr:link> <fr:tex display="inline"><![CDATA[\mathbf {Cat} / \mathcal {B} (\substack {\mathcal {C}\\\downarrow  p\\\mathcal {B}}, \substack {\mathcal {D}\\\downarrow  q\\\mathcal {B}})]]></fr:tex></fr:title><fr:taxon>definition</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
  With respect to the slice category <fr:tex display="inline"><![CDATA[\mathbf {Cat} / \mathcal {B}]]></fr:tex>, between any two objects <fr:tex display="inline"><![CDATA[\substack {\mathcal {C}\\\downarrow  p\\\mathcal {B}}]]></fr:tex> and <fr:tex display="inline"><![CDATA[\substack {\mathcal {D}\\\downarrow  q\\\mathcal {B}}]]></fr:tex>, the set of morphisms <fr:tex display="inline"><![CDATA[\mathbf {Cat} / \mathcal {B} (p, q)]]></fr:tex> forms a (small) category with
  <html:dl>
    <html:dt>objects</html:dt>
    <html:dd>functors <fr:tex display="inline"><![CDATA[{\mathcal {C} \xrightarrow {F} \mathcal {D}}]]></fr:tex> satisfying <fr:tex display="inline"><![CDATA[q \circ  F = p]]></fr:tex>;</html:dd>
    <html:dt>morphisms</html:dt>
    <html:dd>natural transformations <fr:tex display="inline"><![CDATA[F \Rightarrow  G]]></fr:tex>.</html:dd>
  </html:dl></html:p></fr:mainmatter></fr:tree><html:p>
        This is a special case of the 2-categorical notion of strict slice 2-category, over the strict 2-category <fr:tex display="inline"><![CDATA[\mathbf {Cat}]]></fr:tex>.
        Due to this strictness, a morphism in this category is <html:em>any</html:em> natural transformation without any further conditions; this yields the following lemma.
      </html:p><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>9</fr:month><fr:day>18</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-EIW0/</fr:uri><fr:display-uri>coherent-inverses-EIW0</fr:display-uri><fr:route>/coherent-inverses-EIW0/</fr:route><fr:title text="Forgetful domain functor locally fully faithful">Forgetful domain functor locally fully faithful</fr:title><fr:taxon>lemma</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
  For any category <fr:tex display="inline"><![CDATA[\mathcal {B}]]></fr:tex>, there is a forgetful functor <fr:tex display="inline"><![CDATA[{\mathbf {Cat} / \mathcal {B} \xrightarrow {\mathsf {dom}_{\mathcal {B}}} \mathbf {Cat}}]]></fr:tex> which sends <fr:tex display="inline"><![CDATA[\substack {\mathcal {C}\\\downarrow  p\\\mathcal {B}} \mapsto  \mathcal {C}]]></fr:tex>.
  Moreover, for each <fr:link href="/coherent-inverses-C2YY/" title="slice Hom category \mathbf {Cat} / \mathcal {B} (\substack {\mathcal {C}\\\downarrow  p\\\mathcal {B}}, \substack {\mathcal {D}\\\downarrow  q\\\mathcal {B}})" uri="https://forest.nickx.hu/coherent-inverses-C2YY/" display-uri="coherent-inverses-C2YY" type="local">slice Hom category</fr:link> <fr:tex display="inline"><![CDATA[\mathbf {Cat} / \mathcal {B} (\substack {\mathcal {C}\\\downarrow  p\\\mathcal {B}}, \substack {\mathcal {D}\\\downarrow  q\\\mathcal {B}})]]></fr:tex>, <fr:tex display="inline"><![CDATA[\mathsf {dom}_{\mathcal {B}}]]></fr:tex> induces a fully faithful functor
  <fr:tex display="block"><![CDATA[
    {\mathbf {Cat} / \mathcal {B} (p, q) \xrightarrow {{\mathsf {dom}_{\mathcal {B}}}_{p, q}} [p, q]}.
  ]]></fr:tex></html:p></fr:mainmatter></fr:tree><html:p>
        The interaction between this and a <fr:link href="/coherent-inverses-2H06/" title="parametric right adjoint" uri="https://forest.nickx.hu/coherent-inverses-2H06/" display-uri="coherent-inverses-2H06" type="local">parametric right adjoint</fr:link> endofunctor on <fr:tex display="inline"><![CDATA[\mathbf {Cat}]]></fr:tex> allows us to conduct a lifting of pointwise left Kan extensions.
      </html:p><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>9</fr:month><fr:day>18</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-VCOB/</fr:uri><fr:display-uri>coherent-inverses-VCOB</fr:display-uri><fr:route>/coherent-inverses-VCOB/</fr:route><fr:title text="Lifting a pointwise left Kan extension through a parametric right adjoint endofunctor on \mathbf {Cat}">Lifting a pointwise left Kan extension through a <fr:link href="/coherent-inverses-2H06/" title="parametric right adjoint" uri="https://forest.nickx.hu/coherent-inverses-2H06/" display-uri="coherent-inverses-2H06" type="local">parametric right adjoint</fr:link> endofunctor on <fr:tex display="inline"><![CDATA[\mathbf {Cat}]]></fr:tex></fr:title><fr:taxon>theorem</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
  Let <fr:tex display="inline"><![CDATA[{\mathbf {Cat} \xrightarrow {F} \mathbf {Cat}}]]></fr:tex> be a <fr:link href="/coherent-inverses-2H06/" title="parametric right adjoint" uri="https://forest.nickx.hu/coherent-inverses-2H06/" display-uri="coherent-inverses-2H06" type="local">parametric right adjoint</fr:link> endofunctor, determined by:
  
  
  
  <html:figure><fr:resource hash="964256cb1824f3cb442da4d65bdb3c4e"><fr:resource-content><html:img src="/964256cb1824f3cb442da4d65bdb3c4e.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[
       \usepackage{amsmath,amssymb}
  \usepackage{mathtools}
  \usepackage{stmaryrd}
  \newcommand{\set}[1]{\left\{#1\right\}}
     \usepackage {tikz}
     \usetikzlibrary {cd}
     \usetikzlibrary {}
     
  \definecolor {green}{RGB}{27,158,119}
  \definecolor {orange}{RGB}{217,95,2}
  \definecolor {purple}{RGB}{117,112,179}

     
    ]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
      \begin {tikzcd}[]
         \mathbf {Cat}
          \ar [r, shift left=1ex, phantom, "", ""'{name=UL}]
          \ar [r, shift right=1ex, , "R"', ""{name=UR}]
        & \mathbf {Cat} / F \mathbf {1}
          \ar [l, shift left=1ex, phantom, "", ""'{name=DL}]
          \ar [l, shift right=1ex, , "L"', ""{name=DR}]
        \ar [from=UL, to=DL, "", phantom]
        \ar [from=UR, to=DR, "\dashv ", phantom, sloped] \ar [r, "\mathsf {dom}_{F \mathbf {1}}"] & \mathbf {Cat},
      \end {tikzcd}
    ]]></fr:resource-source></fr:resource></html:figure>



  with the natural bijection of the adjunction denoted by
  <fr:tex display="block"><![CDATA[
    \forall  \mathcal {C} \in  \mathbf {Cat}, \substack {\mathcal {E}\\\downarrow  p\\F \mathbf {1}} \in  \mathbf {Cat}. \quad  {\left [ L (\substack {\mathcal {E}\\\downarrow  p\\F \mathbf {1}}), \mathcal {C} \right ] \overset {\theta }{\cong } \mathbf {Cat} / F \mathbf {1} \left ( \substack {\mathcal {E}\\\downarrow  p\\F \mathbf {1}}, R (\mathcal {C}) \right )}.
  ]]></fr:tex>
  For functors <fr:tex display="inline"><![CDATA[{\substack {\mathcal {E}\\\downarrow  p\\F \mathbf {1}} \xrightarrow {G} R (\mathcal {C})}]]></fr:tex> and <fr:tex display="inline"><![CDATA[{\substack {\mathcal {E}\\\downarrow  p\\F \mathbf {1}} \xrightarrow {I} \substack {\mathcal {E}^\prime \\\downarrow  q\\F \mathbf {1}}}]]></fr:tex> in <fr:tex display="inline"><![CDATA[\mathbf {Cat} / F \mathbf {1}]]></fr:tex>, where <fr:tex display="inline"><![CDATA[I]]></fr:tex> is an inclusion, let their projection onto domain via <fr:tex display="inline"><![CDATA[{\mathbf {Cat} / F \mathbf {1} \xrightarrow {\mathsf {dom}_{F \mathbf {1}}} \mathbf {Cat}}]]></fr:tex> be denoted by <fr:tex display="inline"><![CDATA[{\mathcal {E} \xrightarrow {G^\prime } \mathsf {dom}_{F \mathbf {1}} (R (\mathcal {C}))}]]></fr:tex> and <fr:tex display="inline"><![CDATA[{\mathcal {E} \xrightarrow {I^\prime } \mathcal {E}^\prime }]]></fr:tex> respectively.
  Then, we have a bijection of commuting diagrams in <fr:tex display="inline"><![CDATA[\mathbf {Cat}]]></fr:tex>:
  
  
  
  <html:figure><fr:resource hash="e0bab1ba161bc5f37f0f79b84e03f4d5"><fr:resource-content><html:img src="/e0bab1ba161bc5f37f0f79b84e03f4d5.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[
       \usepackage{amsmath,amssymb}
  \usepackage{mathtools}
  \usepackage{stmaryrd}
  \newcommand{\set}[1]{\left\{#1\right\}}
     \usepackage {tikz}
     \usetikzlibrary {cd}
     \usetikzlibrary {}
     
  \definecolor {green}{RGB}{27,158,119}
  \definecolor {orange}{RGB}{217,95,2}
  \definecolor {purple}{RGB}{117,112,179}

     
    ]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
      \begin {tikzcd}[]
        L (p)
        \ar [r, , "\theta ^{-1} (G)"]
        \ar [d, hookrightarrow, "L (I)"', ""'{name=L}]
        & |[alias=R]| \mathcal {C}
        \ar [dl, leftarrow, "\operatorname {Lan}_{L (I)}{\theta ^{-1} (G)}"]
        \ar [from=L, to=R, phantom, ""] \\
        L (q) 
      \end {tikzcd}
    ]]></fr:resource-source></fr:resource></html:figure>


 and 
  
  
  <html:figure><fr:resource hash="1112787145a7bceeefd33b160fc85c0b"><fr:resource-content><html:img src="/1112787145a7bceeefd33b160fc85c0b.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[
       \usepackage{amsmath,amssymb}
  \usepackage{mathtools}
  \usepackage{stmaryrd}
  \newcommand{\set}[1]{\left\{#1\right\}}
     \usepackage {tikz}
     \usetikzlibrary {cd}
     \usetikzlibrary {}
     
  \definecolor {green}{RGB}{27,158,119}
  \definecolor {orange}{RGB}{217,95,2}
  \definecolor {purple}{RGB}{117,112,179}

     
    ]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
      \begin {tikzcd}[]
        \mathcal {E}
        \ar [r, , "G^\prime "]
        \ar [d, hookrightarrow, "I^\prime "', ""'{name=L}]
        & |[alias=R]| R (\mathcal {C})
        \ar [dl, leftarrow, "\operatorname {Lan}_{I^\prime }{G^\prime }"]
        \ar [from=L, to=R, phantom, ""] \\
        \mathcal {E}^\prime  ,
      \end {tikzcd}
    ]]></fr:resource-source></fr:resource></html:figure>



  i.e.
  <fr:tex display="block"><![CDATA[
    \operatorname {Lan}_{I^\prime }{G^\prime } \cong  \mathsf {dom}_{F \mathbf {1}} \left ( \theta  \left ( \operatorname {Lan}_{L (I)}{(\theta ^{-1} (G))} \right ) \right ).
  ]]></fr:tex></html:p>
 
   
   <fr:tree show-metadata="false" toc="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>9</fr:month><fr:day>18</fr:day></fr:date><fr:taxon>proof</fr:taxon></fr:frontmatter><fr:mainmatter>
  
  
  <html:p>
    Fix any arbitrary functor <fr:tex display="inline"><![CDATA[{\mathcal {E}^\prime  \xrightarrow {H^\prime } \mathsf {dom}_{F \mathbf {1}} R (\mathcal {C})}]]></fr:tex>.
    By <fr:link href="/coherent-inverses-EIW0/" title="Forgetful domain functor locally fully faithful" uri="https://forest.nickx.hu/coherent-inverses-EIW0/" display-uri="coherent-inverses-EIW0" type="local">lemma <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-EIW0/" display-uri="coherent-inverses-EIW0" /></fr:link>, <fr:tex display="inline"><![CDATA[H^\prime ]]></fr:tex> is in bijective correspondence with some <fr:tex display="inline"><![CDATA[{\substack {\mathcal {E}^\prime \\\downarrow  q\\F \mathbf {1}} \xrightarrow {H} R (\mathcal {C})}]]></fr:tex> via <fr:tex display="inline"><![CDATA[\mathsf {dom}_{F \mathbf {1}}]]></fr:tex>.
    Now calculate
    <fr:tex display="block"><![CDATA[
      \begin {gathered}
        [\mathcal {E}^\prime , \mathsf {dom}_{F \mathbf {1}} R (\mathcal {C})] \left ( \operatorname {Lan}_{I^\prime }{G^\prime }, H^\prime  \right )
        \\ \cong  \{ \operatorname {Lan}_{I^\prime }{-} \dashv  - \circ  I^\prime  \} \\
        [\mathcal {E}, \mathsf {dom}_{F \mathbf {1}} R (\mathcal {C})] \left ( G^\prime , H^\prime  \circ  I^\prime  \right )
        \\ \cong  \{ \mathsf {dom}_{F \mathbf {1}} \text { locally fully faithful} \} \\
        \mathbf {Cat} \left ( \substack {\mathcal {E}\\\downarrow  p\\F \mathbf {1}}, R (\mathcal {C}) \right ) \left ( G, H \circ  I \right )
        \\ \cong  \{ \theta ^{-1} \text { natural bijection} \} \\
        [L (p), \mathcal {C}] \left ( \theta ^{-1} (G), \theta ^{-1} (H \circ  I) \right )
        \\ \cong  \{ \theta ^{-1} (x) = \varepsilon _{\mathcal {C}} \circ  L (x) \} \\
        [L (p), \mathcal {C}] \left ( \theta ^{-1} (G), \theta ^{-1} (H) \circ  L (I) \right )
        \\ \cong  \{ \operatorname {Lan}_{L (I)}{-} \dashv  - \circ  L (I) \} \\
        [L (q), \mathcal {C}] \left ( \operatorname {Lan}_{L (I)}{\theta ^{-1} (G)}, \theta ^{-1} (H) \right ) .
      \end {gathered}
    ]]></fr:tex>
    Because <fr:tex display="inline"><![CDATA[\theta ^{-1}]]></fr:tex> is a natural bijection, any functor <fr:tex display="inline"><![CDATA[L (q) \to  \mathcal {C}]]></fr:tex> can be written as <fr:tex display="inline"><![CDATA[\theta ^{-1} (H)]]></fr:tex>.
    The result follows from the Yoneda lemma.
  </html:p>
</fr:mainmatter></fr:tree>
 
</fr:mainmatter></fr:tree><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>9</fr:month><fr:day>21</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-69G2/</fr:uri><fr:display-uri>coherent-inverses-69G2</fr:display-uri><fr:route>/coherent-inverses-69G2/</fr:route><fr:title text="Colimits in \operatorname {Zig}(\mathcal {C}) are computed from colimits in \mathcal {C}">Colimits in <fr:tex display="inline"><![CDATA[\operatorname {Zig}(\mathcal {C})]]></fr:tex> are computed from colimits in <fr:tex display="inline"><![CDATA[\mathcal {C}]]></fr:tex></fr:title><fr:taxon>corollary</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
  As the <fr:link href="/coherent-inverses-SKZ7/" title="zigzag functor as a parametric right adjoint" uri="https://forest.nickx.hu/coherent-inverses-SKZ7/" display-uri="coherent-inverses-SKZ7" type="local">zigzag functor</fr:link> is a <fr:link href="/coherent-inverses-2H06/" title="parametric right adjoint" uri="https://forest.nickx.hu/coherent-inverses-2H06/" display-uri="coherent-inverses-2H06" type="local">parametric right adjoint</fr:link> (<fr:link href="/coherent-inverses-SKZ7/" title="zigzag functor as a parametric right adjoint" uri="https://forest.nickx.hu/coherent-inverses-SKZ7/" display-uri="coherent-inverses-SKZ7" type="local">definition <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-SKZ7/" display-uri="coherent-inverses-SKZ7" /></fr:link>), left Kan extensions along inclusions <fr:tex display="inline"><![CDATA[I]]></fr:tex> in <fr:tex display="inline"><![CDATA[\operatorname {Zig}(\mathcal {C})]]></fr:tex> are computed as left Kan extensions along <fr:tex display="inline"><![CDATA[\mathsf {Expl} (I)]]></fr:tex> in <fr:tex display="inline"><![CDATA[\mathcal {C}]]></fr:tex> via <fr:link href="/coherent-inverses-VCOB/" title="Lifting a pointwise left Kan extension through a parametric right adjoint endofunctor on \mathbf {Cat}" uri="https://forest.nickx.hu/coherent-inverses-VCOB/" display-uri="coherent-inverses-VCOB" type="local">theorem <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-VCOB/" display-uri="coherent-inverses-VCOB" /></fr:link>.
</html:p><html:p>
  Moreover, because colimits are specific left Kan extensions (<fr:link href="/coherent-inverses-422E/" title="Colimit as a pointwise left Kan extension" uri="https://forest.nickx.hu/coherent-inverses-422E/" display-uri="coherent-inverses-422E" type="local">lemma <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-422E/" display-uri="coherent-inverses-422E" /></fr:link>), all colimits in <fr:tex display="inline"><![CDATA[\operatorname {Zig}(\mathcal {C})]]></fr:tex> reduce to colimits in <fr:tex display="inline"><![CDATA[\mathcal {C}]]></fr:tex>.
</html:p></fr:mainmatter></fr:tree><html:p>
        In order to transport such an inclusion <fr:tex display="inline"><![CDATA[I]]></fr:tex> across the adjunction defining the <fr:link href="/coherent-inverses-SKZ7/" title="zigzag functor as a parametric right adjoint" uri="https://forest.nickx.hu/coherent-inverses-SKZ7/" display-uri="coherent-inverses-SKZ7" type="local">zigzag functor</fr:link>, it is necessary to see <fr:tex display="inline"><![CDATA[I]]></fr:tex> as not merely a functor, but a morphism in <fr:tex display="inline"><![CDATA[\mathbf {Cat} / {\mathbf {\Delta }_+}]]></fr:tex>; that is, every object in its domain must live in some fibre over <fr:tex display="inline"><![CDATA[{\mathbf {\Delta }_+}]]></fr:tex> and <fr:tex display="inline"><![CDATA[I]]></fr:tex> must respect the <fr:link href="/coherent-inverses-9V13/" title="singular projection" uri="https://forest.nickx.hu/coherent-inverses-9V13/" display-uri="coherent-inverses-9V13" type="local">singular projection</fr:link>.
      </html:p><html:p>
        
        For the <fr:tex display="inline"><![CDATA[I]]></fr:tex> associated to the left Kan extension that computes a colimit, as in the <fr:link href="/coherent-inverses-97Q8/" title="under cocone category of J" uri="https://forest.nickx.hu/coherent-inverses-97Q8/" display-uri="coherent-inverses-97Q8" type="local">definition <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-97Q8/" display-uri="coherent-inverses-97Q8" /></fr:link>, this means obtaining from some diagram <fr:tex display="inline"><![CDATA[{J \xrightarrow {D} \operatorname {Zig}(\mathcal {C})}]]></fr:tex> (which is naturally a morphism of <fr:tex display="inline"><![CDATA[\mathbf {Cat} / {\mathbf {\Delta }_+}]]></fr:tex> via <fr:link href="/coherent-inverses-9V13/" title="singular projection" uri="https://forest.nickx.hu/coherent-inverses-9V13/" display-uri="coherent-inverses-9V13" type="local">singular projection</fr:link>) a way to enhance the canonical inclusion functor <fr:tex display="inline"><![CDATA[J \overset {I}{\hookrightarrow } J^{\rhd }]]></fr:tex> to be additionally an inclusion living over <fr:tex display="inline"><![CDATA[{\mathbf {\Delta }_+}]]></fr:tex>, as in:
        
  
  
  <html:figure><fr:resource hash="c24420c89aa30347df9ea700df81a125"><fr:resource-content><html:img src="/c24420c89aa30347df9ea700df81a125.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[
       \usepackage{amsmath,amssymb}
  \usepackage{mathtools}
  \usepackage{stmaryrd}
  \newcommand{\set}[1]{\left\{#1\right\}}
     \usepackage {tikz}
     \usetikzlibrary {cd}
     \usetikzlibrary {}
     
  \definecolor {green}{RGB}{27,158,119}
  \definecolor {orange}{RGB}{217,95,2}
  \definecolor {purple}{RGB}{117,112,179}

     
    ]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
      \begin {tikzcd}[]
        J
        \ar [rr, hookrightarrow, "I"]
        \ar [rd, , "\pi  \circ  D"', ""{name=L}]
        && J^{\rhd }
        \ar [ld, dashed, ""] \\
        & {\mathbf {\Delta }_+} ,
        \ar [from=L, to=1-3, phantom, shorten >=10pt, ""']
      \end {tikzcd}
    ]]></fr:resource-source></fr:resource></html:figure>



        thus building a morphism of <fr:tex display="inline"><![CDATA[\mathbf {Cat} / {\mathbf {\Delta }_+}]]></fr:tex>.
        This is tantamount to picking some <fr:tex display="inline"><![CDATA[[n] \in  {\mathbf {\Delta }_+}]]></fr:tex> over which the freely adjoined terminal object <fr:tex display="inline"><![CDATA[\mathbf {1} \in  J^{\rhd }]]></fr:tex> lives; to do so canonically, such that the left Kan extension of <fr:link href="/coherent-inverses-69G2/" title="Colimits in \operatorname {Zig}(\mathcal {C}) are computed from colimits in \mathcal {C}" uri="https://forest.nickx.hu/coherent-inverses-69G2/" display-uri="coherent-inverses-69G2" type="local">corollary <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-69G2/" display-uri="coherent-inverses-69G2" /></fr:link> computes the colimit of <fr:tex display="inline"><![CDATA[D]]></fr:tex>, we use the observation that the <fr:link href="/coherent-inverses-9V13/" title="singular projection" uri="https://forest.nickx.hu/coherent-inverses-9V13/" display-uri="coherent-inverses-9V13" type="local">singular projection</fr:link> preserves connected colimits if <fr:tex display="inline"><![CDATA[\mathcal {C}]]></fr:tex> admits a terminal object.
      </html:p><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>9</fr:month><fr:day>23</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-13T2/</fr:uri><fr:display-uri>coherent-inverses-13T2</fr:display-uri><fr:route>/coherent-inverses-13T2/</fr:route><fr:title text="singular projection preserves connected colimits"><fr:link href="/coherent-inverses-9V13/" title="singular projection" uri="https://forest.nickx.hu/coherent-inverses-9V13/" display-uri="coherent-inverses-9V13" type="local">singular projection</fr:link> preserves connected colimits</fr:title><fr:taxon>proposition</fr:taxon><fr:meta name="source"><html:span tid="Proposition 39" uid="high-level-methods-for-homotopy-construction-in-associative-n-categories"><fr:link href="/high-level-methods-for-homotopy-construction-in-associative-n-categories/" title="High-level methods for homotopy construction in associative $n$-categories" uri="https://forest.nickx.hu/high-level-methods-for-homotopy-construction-in-associative-n-categories/" display-uri="high-level-methods-for-homotopy-construction-in-associative-n-categories" type="local">[Proposition 39, high-level-methods-for-homotopy-construction-in-associative-n-categories]</fr:link></html:span></fr:meta></fr:frontmatter><fr:mainmatter><html:p>
  Whenever <fr:tex display="inline"><![CDATA[\mathcal {C}]]></fr:tex> admits a terminal object, then the <fr:link href="/coherent-inverses-9V13/" title="singular projection" uri="https://forest.nickx.hu/coherent-inverses-9V13/" display-uri="coherent-inverses-9V13" type="local">singular projection</fr:link> functor <fr:tex display="inline"><![CDATA[{\operatorname {Zig}(\mathcal {C}) \xrightarrow {\pi } {\mathbf {\Delta }_+}}]]></fr:tex> preserves connected colimits.
</html:p></fr:mainmatter></fr:tree><html:p>
        This justifies step 1 of the two-step procedure outlined at the beginning of this section.
      </html:p></fr:mainmatter></fr:tree><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2023</fr:year><fr:month>12</fr:month><fr:day>3</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-framed-zigzags-enriched/</fr:uri><fr:display-uri>coherent-inverses-framed-zigzags-enriched</fr:display-uri><fr:route>/coherent-inverses-framed-zigzags-enriched/</fr:route><fr:title text="framed zigzag enriched category"><fr:link href="/coherent-inverses-XQVM/" title="framed zigzag enriched category" uri="https://forest.nickx.hu/coherent-inverses-XQVM/" display-uri="coherent-inverses-XQVM" type="local">framed zigzag enriched category</fr:link></fr:title><fr:taxon>section</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
        We close this chapter by giving an enriched <fr:link href="/coherent-inverses-UGIR/" title="zigzag category" uri="https://forest.nickx.hu/coherent-inverses-UGIR/" display-uri="coherent-inverses-UGIR" type="local">zigzag category</fr:link> construction, which provides a categorical foundation for the theory of coherently invertible generators in associative <fr:tex display="inline"><![CDATA[n]]></fr:tex>-categories.
      </html:p><html:p>
        We describe the abstract universal properties of the enriched <fr:link href="/coherent-inverses-XQVM/" title="framed zigzag enriched category" uri="https://forest.nickx.hu/coherent-inverses-XQVM/" display-uri="coherent-inverses-XQVM" type="local">framed zigzag enriched category</fr:link>.
        We will set this up as a generalisation of <fr:link href="/coherent-inverses-SKZ7/" title="zigzag functor as a parametric right adjoint" uri="https://forest.nickx.hu/coherent-inverses-SKZ7/" display-uri="coherent-inverses-SKZ7" type="local">definition <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-SKZ7/" display-uri="coherent-inverses-SKZ7" /></fr:link>, where <fr:tex display="inline"><![CDATA[\mathbf {Cat}]]></fr:tex> is replaced by <fr:tex display="inline"><![CDATA[\wedge \mathbf {LatCat}]]></fr:tex>, the category of small <fr:tex display="inline"><![CDATA[\wedge \mathbf {Lat}]]></fr:tex>-categories and <fr:tex display="inline"><![CDATA[\wedge \mathbf {Lat}]]></fr:tex>-functors.
      </html:p><html:p>
        First, we determine the <fr:link href="/coherent-inverses-XIP0/" title="essentially algebraic theory" uri="https://forest.nickx.hu/coherent-inverses-XIP0/" display-uri="coherent-inverses-XIP0" type="local">essentially algebraic theory</fr:link> of <fr:tex display="inline"><![CDATA[\wedge \mathbf {LatCat}]]></fr:tex> as an analogue of <fr:link href="/coherent-inverses-71HA/" title="dense subcategory of \mathbf {Cat}" uri="https://forest.nickx.hu/coherent-inverses-71HA/" display-uri="coherent-inverses-71HA" type="local">proposition <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-71HA/" display-uri="coherent-inverses-71HA" /></fr:link>.
        For consistency, we will use an alternative notation to the ordinal notation from before, e.g. writing <fr:tex display="inline"><![CDATA[\cdot  \to  \cdot ]]></fr:tex> for <fr:tex display="inline"><![CDATA[[1]]]></fr:tex>.
      </html:p><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>8</fr:month><fr:day>30</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-X94B/</fr:uri><fr:display-uri>coherent-inverses-X94B</fr:display-uri><fr:route>/coherent-inverses-X94B/</fr:route><fr:title text="dense subcategory of \wedge \mathbf {LatCat}"><fr:link href="/coherent-inverses-RQH3/" title="dense functor" uri="https://forest.nickx.hu/coherent-inverses-RQH3/" display-uri="coherent-inverses-RQH3" type="local">dense</fr:link> subcategory of <fr:tex display="inline"><![CDATA[\wedge \mathbf {LatCat}]]></fr:tex></fr:title><fr:taxon>proposition</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
  Determine a subcategory of <fr:tex display="inline"><![CDATA[\wedge \mathbf {LatCat}]]></fr:tex> given by <fr:tex display="inline"><![CDATA[\wedge \mathbf {Lat}]]></fr:tex>-categories and <fr:tex display="inline"><![CDATA[\wedge \mathbf {Lat}]]></fr:tex>-functors as follows:
  
  
  
  
  <html:figure><fr:resource hash="db6d6396a43bd268f83c53fcf2a31b51"><fr:resource-content><html:img src="/db6d6396a43bd268f83c53fcf2a31b51.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[
       \usepackage{amsmath,amssymb}
  \usepackage{mathtools}
  \usepackage{stmaryrd}
  \newcommand{\set}[1]{\left\{#1\right\}}
     \usepackage {tikz}
     \usetikzlibrary {cd}
     \usetikzlibrary {}
     
  \definecolor {green}{RGB}{27,158,119}
  \definecolor {orange}{RGB}{217,95,2}
  \definecolor {purple}{RGB}{117,112,179}

     
    ]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
      \begin {tikzcd}[
    cells={nodes={draw=gray}},
    execute at end picture={
      \node [anchor=west] at (current bounding box.south east) {,};
    }
  ]
    {[0]} = \{\cdot \} \ar [r, shift left, "s"] \ar [r, shift right, "t"']
    & {[1]} = \{\cdot  \to  \cdot \} \ar [l, "r" description]
    \ar [r, shift left] \ar [r] \ar [r, shift right]
    \ar [d, shift left] \ar [d, shift right]
    & {[2]} = \{\cdot  \to  \cdot  \to  \cdot \} \\
    &
    {[\leq ]} = \{
      \begin {tikzpicture}
        \node [draw=none] (a) at (0,0) {$\cdot $};
        \node [draw=none] (leq) at (0.5,0) {$\Uparrow $};
        \node [draw=none] (b) at (1,0) {$\cdot $};
        \draw [->, bend left] (a) edge (b);
        \draw [->, bend right] (a) edge (b);
      \end {tikzpicture}
    \}
    \ar [r, shift left] \ar [r, shift right]
    &
    {[\wedge ]} = \{
      \begin {tikzpicture}
        \node [draw=none] (a) at (0,0) {$\cdot $};
        \node [draw=none] (b) at (1,0) {$\cdot $};
        \node [draw=none, anchor=south] (leq) at (0.5,0) {$\Uparrow $};
        \node [draw=none, anchor=north] (leq) at (0.5,0.175) {$\Downarrow $};
        \draw [->] (a) edge (b);
        \draw [->, bend left=60] (a) edge (b);
        \draw [->, bend right=60] (a) edge (b);
      \end {tikzpicture}
    \}
  \end {tikzcd}
    ]]></fr:resource-source></fr:resource></html:figure>



  where the top part of the diagram is analogous to <fr:link href="/coherent-inverses-71HA/" title="dense subcategory of \mathbf {Cat}" uri="https://forest.nickx.hu/coherent-inverses-71HA/" display-uri="coherent-inverses-71HA" type="local">proposition <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-71HA/" display-uri="coherent-inverses-71HA" /></fr:link>, and every remaining morphism (each of which is a <fr:tex display="inline"><![CDATA[\wedge \mathbf {Lat}]]></fr:tex>-functor) is a non-degenerate inclusion.
  Such a subcategory inclusion <fr:tex display="inline"><![CDATA[J]]></fr:tex> is <fr:link href="/coherent-inverses-RQH3/" title="dense functor" uri="https://forest.nickx.hu/coherent-inverses-RQH3/" display-uri="coherent-inverses-RQH3" type="local">dense</fr:link>.
</html:p>
 
   
   <fr:tree show-metadata="false" toc="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>8</fr:month><fr:day>30</fr:day></fr:date><fr:taxon>proof</fr:taxon></fr:frontmatter><fr:mainmatter>
  <html:p>
    A <fr:tex display="inline"><![CDATA[\wedge \mathbf {Lat}]]></fr:tex>-functor is a more restrictive version of a functor in the sense that it not only must preserve identity and composition, but also ordering and meets in Hom <fr:tex display="inline"><![CDATA[\wedge ]]></fr:tex>-semilattices (doing so as <html:em>property</html:em>, not <html:em>structure</html:em> — there is no choice in the way such properties are preserved; the <fr:tex display="inline"><![CDATA[\wedge \mathbf {Lat}]]></fr:tex>-functor either preserves them or fails to exist by virtue of not preserving them).
    Thus, as with a functor, it is determined entirely by its action on objects and morphisms.
    Drawing on the proof of <fr:link href="/coherent-inverses-71HA/" title="dense subcategory of \mathbf {Cat}" uri="https://forest.nickx.hu/coherent-inverses-71HA/" display-uri="coherent-inverses-71HA" type="local">proposition <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-71HA/" display-uri="coherent-inverses-71HA" /></fr:link>, the presence of objects <fr:tex display="inline"><![CDATA[[0]]]></fr:tex> and <fr:tex display="inline"><![CDATA[[1]]]></fr:tex> ensures that the <fr:link href="/coherent-inverses-RQH3/" title="dense functor" uri="https://forest.nickx.hu/coherent-inverses-RQH3/" display-uri="coherent-inverses-RQH3" type="local">relative nerve</fr:link> is faithful.
  </html:p>
  <html:p>
    To see that it is also full, the presence of <fr:tex display="inline"><![CDATA[[\leq ]]]></fr:tex>, along with the inclusions into it from <fr:tex display="inline"><![CDATA[[1]]]></fr:tex>, allows the <fr:link href="/coherent-inverses-RQH3/" title="dense functor" uri="https://forest.nickx.hu/coherent-inverses-RQH3/" display-uri="coherent-inverses-RQH3" type="local">relative nerve</fr:link> to detect the ordering of each Hom <fr:tex display="inline"><![CDATA[\wedge ]]></fr:tex>-semilattice; similarly, <fr:tex display="inline"><![CDATA[[\wedge ]]]></fr:tex> allows the meet operation <fr:tex display="inline"><![CDATA[\wedge ]]></fr:tex> itself to be detected.
    The inclusions of <fr:tex display="inline"><![CDATA[[\leq ] \to  [\wedge ]]]></fr:tex> say that this meet operation is with respect to the ordering of the Hom <fr:tex display="inline"><![CDATA[\wedge ]]></fr:tex>-semilattices.
  </html:p>
  <html:p>
    Note that if we were instead working in a 2-categorical setting as opposed to our <fr:tex display="inline"><![CDATA[\wedge \mathbf {Lat}]]></fr:tex>-enriched setting, where all the 2-cell structure is thin, we would need many more morphisms to ensure additional properties are preserved, e.g. a 2-functor preserves identity 2-cells.
    In the present case, for an <fr:tex display="inline"><![CDATA[\wedge \mathbf {Lat}]]></fr:tex>-functor this is automatic from monotonicity with respect to Hom <fr:tex display="inline"><![CDATA[\wedge ]]></fr:tex>-semilattices.
  </html:p>
</fr:mainmatter></fr:tree>
 
</fr:mainmatter></fr:tree><html:p>
        In order to repeat the derivation of the <fr:tex display="inline"><![CDATA[\mathsf {Zig}]]></fr:tex> functor, we now need to find its image at the terminal <fr:tex display="inline"><![CDATA[\wedge \mathbf {LatCat}]]></fr:tex> <fr:tex display="inline"><![CDATA[\mathbf {1}]]></fr:tex>, analogously to <fr:link href="/coherent-inverses-I4ER/" title="example [https://forest.nickx.hu/coherent-inverses-BWBW/] revisited" uri="https://forest.nickx.hu/coherent-inverses-I4ER/" display-uri="coherent-inverses-I4ER" type="local">remark <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-I4ER/" display-uri="coherent-inverses-I4ER" /></fr:link>.
        To do this, we make use of the adjunction <fr:link href="/coherent-inverses-7AXW/" title="Adjunction \mathbf {PosCat} \to  \wedge \mathbf {LatCat}" uri="https://forest.nickx.hu/coherent-inverses-7AXW/" display-uri="coherent-inverses-7AXW" type="local">corollary <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-7AXW/" display-uri="coherent-inverses-7AXW" /></fr:link>.
      </html:p><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>12</fr:month><fr:day>16</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-L7A7/</fr:uri><fr:display-uri>coherent-inverses-L7A7</fr:display-uri><fr:route>/coherent-inverses-L7A7/</fr:route><fr:title text="\wedge \mathbf {Lat}-enriched {\mathbf {\Delta }_+}"><fr:tex display="inline"><![CDATA[\wedge \mathbf {Lat}]]></fr:tex>-enriched <fr:tex display="inline"><![CDATA[{\mathbf {\Delta }_+}]]></fr:tex></fr:title><fr:taxon>definition</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
  Define the <fr:tex display="inline"><![CDATA[\wedge \mathbf {Lat}]]></fr:tex>-category <fr:tex display="inline"><![CDATA[{\mathbf {\Delta }_+}]]></fr:tex> (<fr:link href="/coherent-inverses-2U9F/" title="augmented simplex category" uri="https://forest.nickx.hu/coherent-inverses-2U9F/" display-uri="coherent-inverses-2U9F" type="local">definition <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-2U9F/" display-uri="coherent-inverses-2U9F" /></fr:link>) as follows:
  <html:dl>
    <html:dt>objects</html:dt>
    <html:dd>
      <html:p>
        finite ordinals <fr:tex display="inline"><![CDATA[[n]]]></fr:tex> for <fr:tex display="inline"><![CDATA[n \in  \mathbb {N} \cup  \set {-1}]]></fr:tex>;
      </html:p>
    </html:dd>
    <html:dt>morphisms</html:dt>
    <html:dd>
      <html:p>
        non-empty sets of monotone maps <fr:tex display="inline"><![CDATA[\set {[m] \xrightarrow {\alpha } [n]}]]></fr:tex>;
        composition is given by the set of all compositions, with identities given by singletons containing the identity monotone map;
      </html:p>
    </html:dd>
    <html:dt>meet</html:dt>
    <html:dd>
      <html:p>
        set union.
      </html:p>
    </html:dd>
  </html:dl>
  Note that (as with every <fr:tex display="inline"><![CDATA[\wedge \mathbf {Lat}]]></fr:tex>-category) the ordering in each Hom <fr:tex display="inline"><![CDATA[\wedge ]]></fr:tex>-semilattice is determined by <fr:tex display="inline"><![CDATA[f \Rightarrow  g \iff  f \wedge  g = f]]></fr:tex>; in this case, a set of monotone maps is below another exactly when it is a superset.
</html:p><html:p>
  This <fr:tex display="inline"><![CDATA[\wedge \mathbf {Lat}]]></fr:tex>-category is obtained by taking the ordinary category <fr:tex display="inline"><![CDATA[{\mathbf {\Delta }_+}]]></fr:tex>, freely turning it into a <fr:tex display="inline"><![CDATA[\mathbf {Pos}]]></fr:tex>-category via <fr:tex display="inline"><![CDATA[L]]></fr:tex> in <fr:link href="/coherent-inverses-ZGDQ/" title="The free \mathbf {Pos}-category functor \mathbf {Cat} \xrightarrow {i} \mathbf {PosCat} is left and right adjoint" uri="https://forest.nickx.hu/coherent-inverses-ZGDQ/" display-uri="coherent-inverses-ZGDQ" type="local">lemma <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-ZGDQ/" display-uri="coherent-inverses-ZGDQ" /></fr:link>, and then freely turning that into an <fr:tex display="inline"><![CDATA[\wedge \mathbf {Lat}]]></fr:tex>-category along <fr:link href="/coherent-inverses-7AXW/" title="Adjunction \mathbf {PosCat} \to  \wedge \mathbf {LatCat}" uri="https://forest.nickx.hu/coherent-inverses-7AXW/" display-uri="coherent-inverses-7AXW" type="local">corollary <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-7AXW/" display-uri="coherent-inverses-7AXW" /></fr:link>.
</html:p></fr:mainmatter></fr:tree><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>12</fr:month><fr:day>16</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-OXIE/</fr:uri><fr:display-uri>coherent-inverses-OXIE</fr:display-uri><fr:route>/coherent-inverses-OXIE/</fr:route><fr:title text="dense subcategory of \wedge \mathbf {LatCat} / {\mathbf {\Delta }_+}"><fr:link href="/coherent-inverses-RQH3/" title="dense functor" uri="https://forest.nickx.hu/coherent-inverses-RQH3/" display-uri="coherent-inverses-RQH3" type="local">dense</fr:link> subcategory of <fr:tex display="inline"><![CDATA[\wedge \mathbf {LatCat} / {\mathbf {\Delta }_+}]]></fr:tex></fr:title><fr:taxon>proposition</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
  Let <fr:tex display="inline"><![CDATA[\mathsf {C}^\wedge  \overset {i}{\hookrightarrow } \wedge \mathbf {LatCat}]]></fr:tex> denote the <fr:link href="/coherent-inverses-RQH3/" title="dense functor" uri="https://forest.nickx.hu/coherent-inverses-RQH3/" display-uri="coherent-inverses-RQH3" type="local">dense</fr:link> subcategory of <fr:tex display="inline"><![CDATA[\wedge \mathbf {LatCat}]]></fr:tex> as in <fr:link href="/coherent-inverses-X94B/" title="dense subcategory of \wedge \mathbf {LatCat}" uri="https://forest.nickx.hu/coherent-inverses-X94B/" display-uri="coherent-inverses-X94B" type="local">proposition <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-X94B/" display-uri="coherent-inverses-X94B" /></fr:link>.
  Then, by <fr:link href="/coherent-inverses-4WLB/" title="dense subcategory of a slice category" uri="https://forest.nickx.hu/coherent-inverses-4WLB/" display-uri="coherent-inverses-4WLB" type="local">proposition <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-4WLB/" display-uri="coherent-inverses-4WLB" /></fr:link>, we have a <fr:link href="/coherent-inverses-RQH3/" title="dense functor" uri="https://forest.nickx.hu/coherent-inverses-RQH3/" display-uri="coherent-inverses-RQH3" type="local">dense</fr:link> subcategory of <fr:tex display="inline"><![CDATA[\wedge \mathbf {LatCat} / {\mathbf {\Delta }_+}]]></fr:tex> given by the <fr:link href="/coherent-inverses-ATG5/" title="category of elements" uri="https://forest.nickx.hu/coherent-inverses-ATG5/" display-uri="coherent-inverses-ATG5" type="local">category of elements</fr:link> <fr:tex display="inline"><![CDATA[{\textstyle  \int  \wedge \mathbf {LatCat} (i -, {\mathbf {\Delta }_+})}]]></fr:tex>.
</html:p><html:p>
  This category has objects pairs <fr:tex display="inline"><![CDATA[(c, i c \xrightarrow {F} {\mathbf {\Delta }_+})]]></fr:tex>, where <fr:tex display="inline"><![CDATA[c \in  \set {[0], [1], [2], [\leq ], [\wedge ]}]]></fr:tex> and <fr:tex display="inline"><![CDATA[F]]></fr:tex> is a <fr:tex display="inline"><![CDATA[\wedge \mathbf {Lat}]]></fr:tex>-functor.
  Analogously to <fr:link href="/coherent-inverses-01JA/" title="dense subcategory of \mathbf {Cat} / {\mathbf {\Delta }_+}" uri="https://forest.nickx.hu/coherent-inverses-01JA/" display-uri="coherent-inverses-01JA" type="local">proposition <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-01JA/" display-uri="coherent-inverses-01JA" /></fr:link>, this is a version of <fr:link href="/coherent-inverses-X94B/" title="dense subcategory of \wedge \mathbf {LatCat}" uri="https://forest.nickx.hu/coherent-inverses-X94B/" display-uri="coherent-inverses-X94B" type="local">proposition <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-X94B/" display-uri="coherent-inverses-X94B" /></fr:link> but indexed by objects of <fr:tex display="inline"><![CDATA[{\mathbf {\Delta }_+}]]></fr:tex>.
  That is, objects are one of five types (corresponding to the value of <fr:tex display="inline"><![CDATA[c]]></fr:tex>):
  <html:ol><html:li>
      objects of <fr:tex display="inline"><![CDATA[{\mathbf {\Delta }_+}]]></fr:tex>: (possibly empty) ordinals <fr:tex display="inline"><![CDATA[[-1], [0], \ldots ]]></fr:tex>;
    </html:li>
    <html:li>
      morphisms of <fr:tex display="inline"><![CDATA[{\mathbf {\Delta }_+}]]></fr:tex>: non-empty sets of monotone maps <fr:tex display="inline"><![CDATA[\set {[m] \xrightarrow {\alpha } [n]}]]></fr:tex>;
    </html:li>
    <html:li>
      composable pairs of morphisms of <fr:tex display="inline"><![CDATA[{\mathbf {\Delta }_+}]]></fr:tex>: pairs of non-empty sets of monotone maps <fr:tex display="inline"><![CDATA[(\set {[l] \xrightarrow {\alpha } [m]}, \set {[m] \xrightarrow {\beta } [n]})]]></fr:tex>;
    </html:li>
    <html:li>
      witnesses to the ordering relation on Hom <fr:tex display="inline"><![CDATA[\wedge ]]></fr:tex>-semilattices of <fr:tex display="inline"><![CDATA[{\mathbf {\Delta }_+}]]></fr:tex>: a non-empty set of monotone maps <fr:tex display="inline"><![CDATA[\set {[m] \xrightarrow {\alpha } [n]}]]></fr:tex> equipped with a non-empty subset;
    </html:li>
    <html:li>
      witnesses to the meet operation on Hom <fr:tex display="inline"><![CDATA[\wedge ]]></fr:tex>-semilattices of <fr:tex display="inline"><![CDATA[{\mathbf {\Delta }_+}]]></fr:tex>: two non-empty sets of monotone maps <fr:tex display="inline"><![CDATA[\set {[m] \xrightarrow {\alpha } [n]}]]></fr:tex> whose union is (necessarily) non-empty.
    </html:li></html:ol></html:p><html:p>
  Let <fr:tex display="inline"><![CDATA[{\Delta ^{\bullet _{/}}_{\wedge }}]]></fr:tex> denote the <fr:link href="/coherent-inverses-RQH3/" title="dense functor" uri="https://forest.nickx.hu/coherent-inverses-RQH3/" display-uri="coherent-inverses-RQH3" type="local">dense</fr:link> full subcategory of <fr:tex display="inline"><![CDATA[\wedge \mathbf {LatCat} / {\mathbf {\Delta }_+}]]></fr:tex> which this induces.
</html:p></fr:mainmatter></fr:tree><html:p>
        Next, we present a sequence of lemmas that use <fr:link href="/coherent-inverses-QG94/" title="density presentation" uri="https://forest.nickx.hu/coherent-inverses-QG94/" display-uri="coherent-inverses-QG94" type="local">density presentations</fr:link> to characterise left adjoints <fr:tex display="inline"><![CDATA[\wedge \mathbf {LatCat} / {\mathbf {\Delta }_+} \to  \wedge \mathbf {LatCat}]]></fr:tex> (as in <fr:link href="/coherent-inverses-87R5/" title="internal coalgebras correspond to left adjoints" uri="https://forest.nickx.hu/coherent-inverses-87R5/" display-uri="coherent-inverses-87R5" type="local">proposition <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-87R5/" display-uri="coherent-inverses-87R5" /></fr:link>).
      </html:p><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>12</fr:month><fr:day>16</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-BS1R/</fr:uri><fr:display-uri>coherent-inverses-BS1R</fr:display-uri><fr:route>/coherent-inverses-BS1R/</fr:route><fr:title text="density presentation of \wedge \mathbf {LatCat}"><fr:link href="/coherent-inverses-QG94/" title="density presentation" uri="https://forest.nickx.hu/coherent-inverses-QG94/" display-uri="coherent-inverses-QG94" type="local">density presentation</fr:link> of <fr:tex display="inline"><![CDATA[\wedge \mathbf {LatCat}]]></fr:tex></fr:title><fr:taxon>lemma</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
  The <fr:link href="/coherent-inverses-RQH3/" title="dense functor" uri="https://forest.nickx.hu/coherent-inverses-RQH3/" display-uri="coherent-inverses-RQH3" type="local">dense</fr:link> full subcategory inclusion of <fr:tex display="inline"><![CDATA[{\Delta _{\wedge }} \coloneqq  \set {[0], [1], [2], [\leq ], [\wedge ]} \subseteq  \wedge \mathbf {LatCat}]]></fr:tex> admits a <fr:link href="/coherent-inverses-QG94/" title="density presentation" uri="https://forest.nickx.hu/coherent-inverses-QG94/" display-uri="coherent-inverses-QG94" type="local">density presentation</fr:link> given by the diagrams
  <fr:tex display="block"><![CDATA[
    \begin {aligned}
      [1] &+_{[0]} [1], \\
      [\leq ] &+_{[1]} [\leq ].
    \end {aligned}
  ]]></fr:tex></html:p></fr:mainmatter></fr:tree><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>12</fr:month><fr:day>16</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-U5WG/</fr:uri><fr:display-uri>coherent-inverses-U5WG</fr:display-uri><fr:route>/coherent-inverses-U5WG/</fr:route><fr:title text="\wedge \mathbf {LatCat}-coalgebra"><fr:tex display="inline"><![CDATA[\wedge \mathbf {LatCat}]]></fr:tex>-coalgebra</fr:title><fr:taxon>corollary</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
  An <fr:link href="/coherent-inverses-PCO8/" title="Internal \mathcal {C}-coalgebra" uri="https://forest.nickx.hu/coherent-inverses-PCO8/" display-uri="coherent-inverses-PCO8" type="local">internal <fr:tex display="inline"><![CDATA[\wedge \mathbf {LatCat}]]></fr:tex>-coalgebra</fr:link> in a category <fr:tex display="inline"><![CDATA[\mathcal {B}]]></fr:tex> is precisely a functor <fr:tex display="inline"><![CDATA[{{\Delta _{\wedge }} \xrightarrow {G} \mathcal {B}}]]></fr:tex> which preserves the colimits
  <fr:tex display="block"><![CDATA[
    \begin {alignedat}{2}
      [1] &+_{[0]} [1] &&= [2], \\
      [\leq ] &+_{[1]} [\leq ] &&= [\wedge ].
    \end {alignedat}
  ]]></fr:tex></html:p></fr:mainmatter></fr:tree><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>12</fr:month><fr:day>16</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-6QGR/</fr:uri><fr:display-uri>coherent-inverses-6QGR</fr:display-uri><fr:route>/coherent-inverses-6QGR/</fr:route><fr:title text="density presentation of \wedge \mathbf {LatCat} / {\mathbf {\Delta }_+}"><fr:link href="/coherent-inverses-QG94/" title="density presentation" uri="https://forest.nickx.hu/coherent-inverses-QG94/" display-uri="coherent-inverses-QG94" type="local">density presentation</fr:link> of <fr:tex display="inline"><![CDATA[\wedge \mathbf {LatCat} / {\mathbf {\Delta }_+}]]></fr:tex></fr:title><fr:taxon>corollary</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
  The <fr:link href="/coherent-inverses-RQH3/" title="dense functor" uri="https://forest.nickx.hu/coherent-inverses-RQH3/" display-uri="coherent-inverses-RQH3" type="local">dense</fr:link> full subcategory inclusion of <fr:tex display="inline"><![CDATA[{\Delta ^{\bullet _{/}}_{\wedge }} \subseteq  \wedge \mathbf {LatCat} / {\mathbf {\Delta }_+}]]></fr:tex> admits a <fr:link href="/coherent-inverses-QG94/" title="density presentation" uri="https://forest.nickx.hu/coherent-inverses-QG94/" display-uri="coherent-inverses-QG94" type="local">density presentation</fr:link> given by diagrams of the form
  <fr:tex display="block"><![CDATA[
    \begin {aligned}
      \set {[l] \xrightarrow {\alpha } [m]} &+_{[m]} \set {[m] \xrightarrow {\beta } [n]}, \\
      \left ( \set {[m] \xrightarrow {\alpha } [n]} \supseteq  \set {[m] \xrightarrow {\alpha ^\prime } [n]} \right ) &+_{\set {[m] \xrightarrow {\alpha } [n]}} \left ( \set {[m] \xrightarrow {\alpha } [n]} \supseteq  \set {[m] \xrightarrow {\alpha ^{\prime \prime }} [n]} \right ).
    \end {aligned}
  ]]></fr:tex></html:p></fr:mainmatter></fr:tree><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>12</fr:month><fr:day>16</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-VBSW/</fr:uri><fr:display-uri>coherent-inverses-VBSW</fr:display-uri><fr:route>/coherent-inverses-VBSW/</fr:route><fr:title text="\wedge \mathbf {LatCat} / {\mathbf {\Delta }_+}-coalgebra"><fr:tex display="inline"><![CDATA[\wedge \mathbf {LatCat} / {\mathbf {\Delta }_+}]]></fr:tex>-coalgebra</fr:title><fr:taxon>corollary</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
  An <fr:link href="/coherent-inverses-PCO8/" title="Internal \mathcal {C}-coalgebra" uri="https://forest.nickx.hu/coherent-inverses-PCO8/" display-uri="coherent-inverses-PCO8" type="local">internal <fr:tex display="inline"><![CDATA[\wedge \mathbf {LatCat} / {\mathbf {\Delta }_+}]]></fr:tex>-coalgebra</fr:link> in a category <fr:tex display="inline"><![CDATA[\mathcal {B}]]></fr:tex> is precisely a functor <fr:tex display="inline"><![CDATA[{{\Delta ^{\bullet _{/}}_{\wedge }} \xrightarrow {G} \mathcal {B}}]]></fr:tex> which preserves the colimits
  <fr:tex display="block"><![CDATA[
    \begin {alignedat}{2}
      \set {[l] \xrightarrow {\alpha } [m]} &+_{[m]} \set {[m] \xrightarrow {\beta } [n]} &&= \set {[l] \xrightarrow {\alpha } [m] \xrightarrow {\beta } [n]}, \\
      \left ( \set {[m] \xrightarrow {\alpha } [n]} \supseteq  \set {[m] \xrightarrow {\alpha ^\prime } [n]} \right ) &+_{\set {[m] \xrightarrow {\alpha } [n]}} \left ( \set {[m] \xrightarrow {\alpha } [n]} \supseteq  \set {[m] \xrightarrow {\alpha ^{\prime \prime }} [n]} \right ) &&= \left ( \set {[m] \xrightarrow {\alpha } [n]} \supseteq  \left ( \set {[m] \xrightarrow {\alpha ^\prime } [n]} \cup  \set {[m] \xrightarrow {\alpha ^{\prime \prime }} [n]} \right ) \right ).
    \end {alignedat}
  ]]></fr:tex></html:p></fr:mainmatter></fr:tree><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>12</fr:month><fr:day>17</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-6E0J/</fr:uri><fr:display-uri>coherent-inverses-6E0J</fr:display-uri><fr:route>/coherent-inverses-6E0J/</fr:route><fr:title text="framed zigzag internal coalgebra"><fr:link href="/coherent-inverses-6E0J/" title="framed zigzag internal coalgebra" uri="https://forest.nickx.hu/coherent-inverses-6E0J/" display-uri="coherent-inverses-6E0J" type="local">framed zigzag internal coalgebra</fr:link></fr:title><fr:taxon>definition</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
  Define a functor <fr:tex display="inline"><![CDATA[{{\Delta ^{\bullet _{/}}_{\wedge }} \xrightarrow {L} \wedge \mathbf {LatCat}}]]></fr:tex>, given on objects by
  <html:ol><html:li>
      each (augmented) simplex <fr:tex display="inline"><![CDATA[[n]]]></fr:tex> maps to a <fr:tex display="inline"><![CDATA[\wedge \mathbf {Lat}]]></fr:tex>-category with objects
      <fr:tex display="block"><![CDATA[
        \set {r^{[n]}_i \mid  i \leq  n+1 \in  \mathbb {N}}
        \cup 
        \set {s^{[n]}_i \mid  i < n+1 \in  \mathbb {N}}
      ]]></fr:tex>
      and morphisms <fr:tex display="inline"><![CDATA[r^{[n]}_i \to  s^{[n]}_i \leftarrow  r^{[n]}_{i+1}]]></fr:tex> for each <fr:tex display="inline"><![CDATA[i < n+1]]></fr:tex>, where the ordering and meets of morphisms are determined trivially;
    </html:li>
    
    <html:li>
      each non-empty set of monotone maps <fr:tex display="inline"><![CDATA[\emptyset  \neq  X \subseteq  \set {{[m] \xrightarrow {\alpha } [n]}}]]></fr:tex> maps to a <fr:tex display="inline"><![CDATA[\wedge \mathbf {Lat}]]></fr:tex>-category generated by, for each <fr:tex display="inline"><![CDATA[\alpha  \in  X]]></fr:tex>, gluing together <fr:tex display="inline"><![CDATA[L ([m])]]></fr:tex> and <fr:tex display="inline"><![CDATA[L ([n])]]></fr:tex>, while adding morphisms <fr:tex display="inline"><![CDATA[s^{[m]}_i \xrightarrow {s^{\alpha }_i} s^{[n]}_j]]></fr:tex> when <fr:tex display="inline"><![CDATA[\alpha  (i) = j]]></fr:tex>, and <fr:tex display="inline"><![CDATA[r^{[m]}_i \xrightarrow {r^{\alpha }_j} r^{[n]}_j]]></fr:tex> when <fr:tex display="inline"><![CDATA[\mathsf {R} \alpha  (j) = i]]></fr:tex>, and the morphisms obtained from adding 2-cell fillers
      <fr:tex display="block"><![CDATA[
        \begin {aligned}
          r^{[m]}_i \to  s^{[m]}_j &\Rightarrow  r^{[m]}_i \to  s^{[m]}_i \xrightarrow {s_i^{\alpha }} s^{[n]}_j, \\
          r^{[m]}_{i+1} \to  s^{[m]}_j &\Rightarrow  r^{[m]}_{i+1} \to  s^{[m]}_i \xrightarrow {s_i^{\alpha }} s^{[n]}_j,
        \end {aligned}
      ]]></fr:tex>
      which is then quotiented along each copy of <fr:tex display="inline"><![CDATA[L ([m])]]></fr:tex> and <fr:tex display="inline"><![CDATA[L ([n])]]></fr:tex>;
    </html:li>
    
    
    <html:li>
      each composable pair of non-empty sets of monotone maps <fr:tex display="inline"><![CDATA[(\emptyset  \neq  X \subseteq  \set {{[l] \xrightarrow {\alpha } [m]}}, \emptyset  \neq  Y \subseteq  \set {{[m] \xrightarrow {\beta } [n]}})]]></fr:tex> maps to the <fr:tex display="inline"><![CDATA[\wedge \mathbf {Lat}]]></fr:tex>-category generated by gluing together <fr:tex display="inline"><![CDATA[L ([l])]]></fr:tex>, <fr:tex display="inline"><![CDATA[L ([m])]]></fr:tex>, <fr:tex display="inline"><![CDATA[L ([n])]]></fr:tex> and adding morphisms and 2-cell fillers as above;
    </html:li>
    
    <html:li>
      for a non-empty set of monotone maps <fr:tex display="inline"><![CDATA[\emptyset  \neq  X \subseteq  \set {{[m] \xrightarrow {\alpha } [n]}}]]></fr:tex> equipped with a non-empty subset <fr:tex display="inline"><![CDATA[\emptyset  \neq  Y \subseteq  X]]></fr:tex>, the <fr:tex display="inline"><![CDATA[\wedge \mathbf {Lat}]]></fr:tex>-category generated by <fr:tex display="inline"><![CDATA[X]]></fr:tex> and <fr:tex display="inline"><![CDATA[Y]]></fr:tex>, glued along <fr:tex display="inline"><![CDATA[L ([m])]]></fr:tex> and <fr:tex display="inline"><![CDATA[L ([n])]]></fr:tex> as above, with 2-cell fillers from component-wise for every <fr:tex display="inline"><![CDATA[\alpha  \in  Y]]></fr:tex> to its corresponding instance <fr:tex display="inline"><![CDATA[\alpha  \in  X]]></fr:tex>;
    </html:li>
    <html:li>
      for non-empty sets of monotone maps <fr:tex display="inline"><![CDATA[\emptyset  \neq  X, Y \subseteq  \set {{[m] \xrightarrow {\alpha } [n]}}]]></fr:tex> (whose union is non-empty: <fr:tex display="inline"><![CDATA[\emptyset  \neq  X \cup  Y]]></fr:tex>), the <fr:tex display="inline"><![CDATA[\wedge \mathbf {Lat}]]></fr:tex>-category generated by <fr:tex display="inline"><![CDATA[X]]></fr:tex>, <fr:tex display="inline"><![CDATA[Y]]></fr:tex>, and <fr:tex display="inline"><![CDATA[X \cup  Y]]></fr:tex>,  glued along <fr:tex display="inline"><![CDATA[L ([m])]]></fr:tex> and <fr:tex display="inline"><![CDATA[L ([n])]]></fr:tex> as above, with 2-cell fillers from component-wise for every <fr:tex display="inline"><![CDATA[\alpha  \in  X]]></fr:tex> and <fr:tex display="inline"><![CDATA[\alpha  \in  Y]]></fr:tex> to its corresponding instance <fr:tex display="inline"><![CDATA[\alpha  \in  X \cup  Y]]></fr:tex>.
    </html:li></html:ol></html:p><html:p>
  This functor is a <fr:link href="/coherent-inverses-PCO8/" title="Internal \mathcal {C}-coalgebra" uri="https://forest.nickx.hu/coherent-inverses-PCO8/" display-uri="coherent-inverses-PCO8" type="local"><fr:tex display="inline"><![CDATA[\wedge \mathbf {LatCat} / {\mathbf {\Delta }_+}]]></fr:tex>-coalgebra internal to <fr:tex display="inline"><![CDATA[\wedge \mathbf {LatCat}]]></fr:tex></fr:link>, because it preserves the colimits of <fr:link href="/coherent-inverses-VBSW/" title="\wedge \mathbf {LatCat} / {\mathbf {\Delta }_+}-coalgebra" uri="https://forest.nickx.hu/coherent-inverses-VBSW/" display-uri="coherent-inverses-VBSW" type="local">corollary <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-VBSW/" display-uri="coherent-inverses-VBSW" /></fr:link>.
  Analogously to <fr:link href="/coherent-inverses-4KT5/" title="zigzag internal coalgebra" uri="https://forest.nickx.hu/coherent-inverses-4KT5/" display-uri="coherent-inverses-4KT5" type="local">definition <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-4KT5/" display-uri="coherent-inverses-4KT5" /></fr:link>, by left Kan extension it determines a left adjoint functor <fr:tex display="inline"><![CDATA[\wedge \mathbf {LatCat} / {\mathbf {\Delta }_+} \to  \wedge \mathbf {LatCat}]]></fr:tex>, which we define to be <fr:tex display="inline"><![CDATA[\wedge \mathbf {Lat}]]></fr:tex>-enriched version of <fr:tex display="inline"><![CDATA[{\mathbf {Cat} / {\mathbf {\Delta }_+} \xrightarrow {\mathsf {Expl}} \mathbf {Cat}}]]></fr:tex>.
  This is automatically a left adjoint functor, so we take its right adjoint to be the <fr:tex display="inline"><![CDATA[\wedge \mathbf {Lat}]]></fr:tex>-enriched version of <fr:tex display="inline"><![CDATA[{\mathbf {Cat} \xrightarrow {\mathsf {Zig}} \mathbf {Cat} / {\mathbf {\Delta }_+}}]]></fr:tex>, which we call the <fr:link href="/coherent-inverses-51XQ/" title="framed zigzag functor" uri="https://forest.nickx.hu/coherent-inverses-51XQ/" display-uri="coherent-inverses-51XQ" type="local">framed zigzag functor</fr:link>.
</html:p></fr:mainmatter></fr:tree><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>12</fr:month><fr:day>17</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-51XQ/</fr:uri><fr:display-uri>coherent-inverses-51XQ</fr:display-uri><fr:route>/coherent-inverses-51XQ/</fr:route><fr:title text="framed zigzag functor"><fr:link href="/coherent-inverses-51XQ/" title="framed zigzag functor" uri="https://forest.nickx.hu/coherent-inverses-51XQ/" display-uri="coherent-inverses-51XQ" type="local">framed zigzag functor</fr:link></fr:title><fr:taxon>theorem</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
  We obtain a <fr:link href="/coherent-inverses-51XQ/" title="framed zigzag functor" uri="https://forest.nickx.hu/coherent-inverses-51XQ/" display-uri="coherent-inverses-51XQ" type="local">framed zigzag functor</fr:link> as a <fr:link href="/coherent-inverses-2H06/" title="parametric right adjoint" uri="https://forest.nickx.hu/coherent-inverses-2H06/" display-uri="coherent-inverses-2H06" type="local">parametric right adjoint</fr:link> given by
  
  
  
  <html:figure><fr:resource hash="64f24778b8e75162e367bf67dac3b2c8"><fr:resource-content><html:img src="/64f24778b8e75162e367bf67dac3b2c8.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[
       \usepackage{amsmath,amssymb}
  \usepackage{mathtools}
  \usepackage{stmaryrd}
  \newcommand{\set}[1]{\left\{#1\right\}}
     \usepackage {tikz}
     \usetikzlibrary {cd}
     \usetikzlibrary {}
     
  \definecolor {green}{RGB}{27,158,119}
  \definecolor {orange}{RGB}{217,95,2}
  \definecolor {purple}{RGB}{117,112,179}

     
    ]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
      \begin {tikzcd}[
      execute at end picture={
        \node [anchor=east] at (current bounding box.west) {$\operatorname {Zig}(-) \colon $};
      }
    ]
         \wedge \mathbf {LatCat}
          \ar [r, shift left=1ex, phantom, "", ""'{name=UL}]
          \ar [r, shift right=1ex, , "\mathsf {Zig}"', ""{name=UR}]
        & \wedge \mathbf {LatCat} / {\mathbf {\Delta }_+}
          \ar [l, shift left=1ex, phantom, "", ""'{name=DL}]
          \ar [l, shift right=1ex, , "\mathsf {Expl}"', ""{name=DR}]
        \ar [from=UL, to=DL, "", phantom]
        \ar [from=UR, to=DR, "\dashv ", phantom, sloped] \ar [r, "\Sigma _{!_{\mathbf {\Delta }_+}}"] & \wedge \mathbf {LatCat} .
      \end {tikzcd}
    ]]></fr:resource-source></fr:resource></html:figure></html:p></fr:mainmatter></fr:tree><html:p>
        Finally, we give a concrete description of the <fr:link href="/coherent-inverses-XQVM/" title="framed zigzag enriched category" uri="https://forest.nickx.hu/coherent-inverses-XQVM/" display-uri="coherent-inverses-XQVM" type="local">framed zigzag enriched category</fr:link>, similar to <fr:link href="/coherent-inverses-UGIR/" title="zigzag category" uri="https://forest.nickx.hu/coherent-inverses-UGIR/" display-uri="coherent-inverses-UGIR" type="local">definition <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-UGIR/" display-uri="coherent-inverses-UGIR" /></fr:link>.
      </html:p><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>8</fr:month><fr:day>30</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-XQVM/</fr:uri><fr:display-uri>coherent-inverses-XQVM</fr:display-uri><fr:route>/coherent-inverses-XQVM/</fr:route><fr:title text="framed zigzag enriched category"><fr:link href="/coherent-inverses-XQVM/" title="framed zigzag enriched category" uri="https://forest.nickx.hu/coherent-inverses-XQVM/" display-uri="coherent-inverses-XQVM" type="local">framed zigzag enriched category</fr:link></fr:title><fr:taxon>definition</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
  For a <fr:tex display="inline"><![CDATA[\wedge \mathbf {Lat}]]></fr:tex>-category <fr:tex display="inline"><![CDATA[\mathcal {C}]]></fr:tex>, we define the <fr:link href="/coherent-inverses-XQVM/" title="framed zigzag enriched category" uri="https://forest.nickx.hu/coherent-inverses-XQVM/" display-uri="coherent-inverses-XQVM" type="local">framed zigzag enriched category</fr:link> <fr:tex display="inline"><![CDATA[\operatorname {Zig}(\mathcal {C})]]></fr:tex> as the category with:
  <html:dl>
    <html:dt>objects (<fr:link href="/coherent-inverses-XQVM/" title="framed zigzag enriched category" uri="https://forest.nickx.hu/coherent-inverses-XQVM/" display-uri="coherent-inverses-XQVM" type="local">framed zigzags</fr:link>)</html:dt>
    <html:dd>
      iterated cospans of <fr:tex display="inline"><![CDATA[\mathcal {C}]]></fr:tex>; e.g. for objects <fr:tex display="inline"><![CDATA[r_i, s_i \in  \mathcal {C}]]></fr:tex>, and morphisms <fr:tex display="inline"><![CDATA[f_i, b_i]]></fr:tex> of <fr:tex display="inline"><![CDATA[\mathcal {C}]]></fr:tex> for <fr:tex display="inline"><![CDATA[i \in  \mathbb {N}]]></fr:tex>,
      <fr:tex display="block"><![CDATA[
        r_0 \xrightarrow {f_0} s_0 \xleftarrow {b_0} r_1 \xrightarrow {f_1} \cdots  \xleftarrow {b_n} r_{n+1}.
      ]]></fr:tex>
    </html:dd>
    <html:dt>morphisms (<fr:link href="/coherent-inverses-XQVM/" title="framed zigzag enriched category" uri="https://forest.nickx.hu/coherent-inverses-XQVM/" display-uri="coherent-inverses-XQVM" type="local">framed zigzag maps</fr:link>)</html:dt>
    <html:dd>
      For a fixed pair of iterated cospans <fr:tex display="inline"><![CDATA[Z, Z^\prime ]]></fr:tex>, consider collections of morphisms of <fr:tex display="inline"><![CDATA[\mathcal {C}]]></fr:tex> which arrange into a (<html:em>singular-singular</html:em>) monotone map of singular levels, combined with a <fr:link href="/coherent-inverses-WFIU/" title="Singular/regular monotone duality" uri="https://forest.nickx.hu/coherent-inverses-WFIU/" display-uri="coherent-inverses-WFIU" type="local">dually determined</fr:link> antiparallel (<html:em>regular-regular</html:em>) monotone map of regular levels, along with ‘composite’ (<html:em>regular-singular</html:em>) maps with 2-cell fillers, such that the induced planar diagram in <fr:tex display="inline"><![CDATA[\mathcal {C}]]></fr:tex> exists.
      E.g. diagrams in <fr:tex display="inline"><![CDATA[\mathcal {C}]]></fr:tex> of the form:
      
  
  
  <html:figure><fr:resource hash="c90885ef1b89a68d554ac93756dd9c61"><fr:resource-content><html:img src="/c90885ef1b89a68d554ac93756dd9c61.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[
       \usepackage{amsmath,amssymb}
  \usepackage{mathtools}
  \usepackage{stmaryrd}
  \newcommand{\set}[1]{\left\{#1\right\}}
     \usepackage {tikz}
     \usetikzlibrary {cd}
     \usetikzlibrary {}
     
  \definecolor {green}{RGB}{27,158,119}
  \definecolor {orange}{RGB}{217,95,2}
  \definecolor {purple}{RGB}{117,112,179}

     
    ]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
      \begin {tikzcd}[sep=huge]
        |[alias=r0]| r^\prime _0 \ar [r, "f^\prime _0"] \ar [d, leftarrow, color=orange, "\hat {\alpha }_0"] & s^\prime _0 & |[alias=r1]| r^\prime _1 \ar [r, "f^\prime _1"] \ar [l, "b^\prime _0"'] \ar [d, leftarrow, color=orange, "\hat {\alpha }_1"] & s^\prime _1 & |[alias=r2]| r^\prime _2 \ar [r, "f^\prime _2"] \ar [l, "b^\prime _1"'] \ar [lld, leftarrow, color=orange, "\hat {\alpha }_2"'] & s^\prime _2 & |[alias=r3]| r^\prime _3 \ar [l, "b^\prime _2"'] \ar [lld, leftarrow, color=orange, "\hat {\alpha }_3"] \\
        r_0 \ar [r, "f_0"'] \ar [ru, color=purple, "\tilde {\alpha }_0"{name=A, description}] & |[alias=s0]| s_0 \ar [u, color=green, "\alpha _0"] & r_1 \ar [r, "f_1"'] \ar [l, "b_0"] \ar [lu, color=purple, "\tilde {\alpha }_1"{name=B, description}] \ar [ru, color=purple, "\tilde {\alpha }_2"{name=C, description}] \ar [rrru, color=purple, "\tilde {\alpha }_3"{name=D, description}] & |[alias=s1]| s_1 \ar [urr, color=green, "\alpha _1"'] & r_2, \ar [l, "b_1"] \ar [ru, color=purple, "\tilde {\alpha }_4"{name=E, description}]
        \ar [Rightarrow, color=purple, from=A, to=r0]
        \ar [Rightarrow, color=purple, from=A, to=s0]
        \ar [Rightarrow, color=purple, from=B, to=s0]
        \ar [Rightarrow, color=purple, from=B, to=r1]
        \ar [Rightarrow, color=purple, from=C, to=r1]
        \ar [Rightarrow, color=purple, from=C, to=r2]
        \ar [Rightarrow, color=purple, from=D, to=r2]
        \ar [Rightarrow, color=purple, from=D, to=s1]
        \ar [Rightarrow, color=purple, from=E, to=s1]
        \ar [Rightarrow, color=purple, from=E, to=r3]
      \end {tikzcd}
    ]]></fr:resource-source></fr:resource></html:figure>



      where the <html:span style=" color: #1b9e77;">morphisms labelled <fr:tex display="inline"><![CDATA[\alpha ]]></fr:tex></html:span> arrange into the <html:span style=" color: #1b9e77;">singular monotone map <fr:tex display="inline"><![CDATA[s_0 \mapsto  s^\prime _0, s_1 \mapsto  s^\prime _2]]></fr:tex></html:span>, and the <html:span style=" color: #d95f02;">morphisms labelled <fr:tex display="inline"><![CDATA[\hat {\alpha }]]></fr:tex></html:span> arrange into the <html:span style=" color: #d95f02;">(antiparallel) regular monotone map <fr:tex display="inline"><![CDATA[r^\prime _0 \mapsto  r_0, r^\prime _1 \mapsto  r_1, r^\prime _2 \mapsto  r_1, r^\prime _3, \mapsto  r_2]]></fr:tex></html:span>, and moreover these maps induce <html:span style=" color: #7570b3;">‘composite’ morphisms labelled <fr:tex display="inline"><![CDATA[\tilde {\alpha }]]></fr:tex> with associated 2-cell fillers</html:span>.
      Define a partial order <fr:tex display="inline"><![CDATA[\alpha  \leq  \beta ]]></fr:tex> on these collections exactly when <fr:tex display="inline"><![CDATA[\alpha ]]></fr:tex> and <fr:tex display="inline"><![CDATA[\beta ]]></fr:tex> have the same underlying shape (given by underlying singular/regular monotone maps), and
      <fr:tex display="block"><![CDATA[
        \begin {aligned}
          \alpha _i &\Rightarrow  \beta _i, \\
          \hat {\alpha }_j &\Rightarrow  \hat {\beta }_j, \\
          \tilde {\alpha }_k &\Rightarrow  \tilde {\beta }_k,
        \end {aligned}
      ]]></fr:tex>
      in <fr:tex display="inline"><![CDATA[\mathcal {C}]]></fr:tex> for all valid <fr:tex display="inline"><![CDATA[i, j, k \in  \mathbb {N}]]></fr:tex>.
      A <fr:link href="/coherent-inverses-XQVM/" title="framed zigzag enriched category" uri="https://forest.nickx.hu/coherent-inverses-XQVM/" display-uri="coherent-inverses-XQVM" type="local">framed zigzag map</fr:link> <fr:tex display="inline"><![CDATA[Z \to  Z^\prime ]]></fr:tex> is given by a non-empty downwards-closed (with respect to <fr:tex display="inline"><![CDATA[\leq ]]></fr:tex>) set of these collections.
    </html:dd>
    <html:dt>meets</html:dt>
    <html:dd>set unions.</html:dd>
  </html:dl></html:p><html:p>
  Composition of <fr:link href="/coherent-inverses-XQVM/" title="framed zigzag enriched category" uri="https://forest.nickx.hu/coherent-inverses-XQVM/" display-uri="coherent-inverses-XQVM" type="local">framed zigzag maps</fr:link> <fr:tex display="inline"><![CDATA[Z \xrightarrow {X} Z^\prime  \xrightarrow {Y} Z^{\prime \prime }]]></fr:tex> is given by taking meets of all possible compositions of <fr:tex display="inline"><![CDATA[\mathcal {C}]]></fr:tex> along composition of monotone maps (as in <fr:tex display="inline"><![CDATA[{\mathbf {\Delta }_+}]]></fr:tex>), as follows.
  For each <fr:tex display="inline"><![CDATA[\alpha  \in  X, \beta  \in  Y]]></fr:tex>, compose their underlying singular monotone maps as monotone maps to determine the underlying singular monotone for the pair <fr:tex display="inline"><![CDATA[(\alpha , \beta )]]></fr:tex> in the composite; this suffices to determine the shape of the composition at the pair <fr:tex display="inline"><![CDATA[(\alpha , \beta )]]></fr:tex> (i.e. the dual regular monotone map, and ‘composite’ maps); then, use the <fr:tex display="inline"><![CDATA[\wedge ]]></fr:tex> structure to determine its <fr:tex display="inline"><![CDATA[\mathcal {C}]]></fr:tex>-labelling on each component: for each valid <fr:tex display="inline"><![CDATA[l \to  l^{\prime \prime }]]></fr:tex>, where <fr:tex display="inline"><![CDATA[l]]></fr:tex> is some regular or singular level of <fr:tex display="inline"><![CDATA[Z]]></fr:tex> and <fr:tex display="inline"><![CDATA[l^{\prime \prime }]]></fr:tex> is some regular or singular level of <fr:tex display="inline"><![CDATA[Z^{\prime \prime }]]></fr:tex>, define its <fr:tex display="inline"><![CDATA[\mathcal {C}]]></fr:tex>-labelling to be the meet of every composite of components of <fr:tex display="inline"><![CDATA[\alpha ]]></fr:tex> followed by <fr:tex display="inline"><![CDATA[\beta ]]></fr:tex> with type <fr:tex display="inline"><![CDATA[l \to  l^{\prime \prime }]]></fr:tex>.
  For example:
  
  
  
  <html:figure><fr:resource hash="a351aa98a5212b4a44dfc7e22d17855f"><fr:resource-content><html:img src="/a351aa98a5212b4a44dfc7e22d17855f.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[
        \usepackage{amsmath,amssymb}
  \usepackage{mathtools}
  \usepackage{stmaryrd}
  \newcommand{\set}[1]{\left\{#1\right\}}
      \usepackage {tikz}
      \usetikzlibrary {cd,positioning,decorations.pathmorphing,quotes}
      
  \definecolor {green}{RGB}{27,158,119}
  \definecolor {orange}{RGB}{217,95,2}
  \definecolor {purple}{RGB}{117,112,179}

      
    ]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
      \begin {tikzpicture}[]
        
    \node  (l) {
      \begin {tikzcd}
        |[alias=r0pp]| r^{\prime \prime }_0 \ar [r, "f^{\prime \prime }_0"] & s^{\prime \prime }_0 & |[alias=r1pp]| r^{\prime \prime }_1 \ar [l, "b^{\prime \prime }_0"'] \\
        |[alias=r0p]| r^\prime _0 \ar [r, "f^\prime _0"] \ar [u, "\hat {\beta }_0"] \ar [ur, "\tilde {\beta }_0"{name=B, description}] & |[alias=s0p]| s^\prime _0 \ar [u, "\beta _0" description] & |[alias=r1p]| r^\prime _1 \ar [l, "b^\prime _0"'] \ar [u, "\hat {\beta }_1"'] \ar [ul, "\tilde {\beta }_1"{name=C, description}] \\
                                        & r_0 \ar [ul, "\hat {\alpha }_0"] \ar [u, "\tilde {\alpha }_0"{name=A,description}] \ar [ur, "\hat {\alpha }_1"']
                                        \ar [Rightarrow, from=A, to=r0p, shorten =8pt]
                                        \ar [Rightarrow, from=A, to=r1p, shorten =8pt]
                                        \ar [Rightarrow, from=B, to=r0pp]
                                        \ar [Rightarrow, from=B, to=s0p]
                                        \ar [Rightarrow, from=C, to=r1pp]
                                        \ar [Rightarrow, from=C, to=s0p]
      \end {tikzcd}
    };
    \node [right=2cm of l] (r) {
      \begin {tikzcd}
        |[alias=r0p]| r^{\prime \prime }_0 \ar [r, "f^{\prime \prime }_0"] & |[alias=s0p]| s^{\prime \prime }_0 & |[alias=r1p]| r^{\prime \prime }_1 \ar [l, "b^{\prime \prime }_0"'] \\
                                                                      & r_0 \ar [ul, "\hat {\beta }_0 \circ  \hat {\alpha }_0"] \ar [u, "h"{name=A,description}] \ar [ur, "\hat {\beta }_1 \circ  \hat {\alpha }_1"']
                                        \ar [Rightarrow, from=A, to=r0p, shorten =8pt]
                                        \ar [Rightarrow, from=A, to=r1p, shorten =8pt]
      \end {tikzcd}
    };
    \node [below=0pt of r] {$h \coloneqq  (\tilde {\beta }_0 \circ  \hat {\alpha }_0) \wedge  (\beta _0 \circ  \tilde {\alpha }_0) \wedge  (\tilde {\beta }_1 \circ  \hat {\alpha }_1)$};
    \path  (l) edge[commutative diagrams/rightsquigarrow, "compose"] (r);
  
      \end {tikzpicture}
    ]]></fr:resource-source></fr:resource></html:figure>



  Here, the component of the composite <fr:tex display="inline"><![CDATA[h]]></fr:tex> is the meet of the 7 possible paths from <fr:tex display="inline"><![CDATA[r_0]]></fr:tex> to <fr:tex display="inline"><![CDATA[s^{\prime \prime }_0]]></fr:tex> in the left diagram, which simplifies to the meet of the 3 paths as above — a priori, none of the three maps is below another.
  Note that singular-singular and regular-regular components are always determined by a unique path, but not regular-singular components.
  The composite <fr:tex display="inline"><![CDATA[Z \xrightarrow {Y \circ  X} Z^{\prime \prime }]]></fr:tex> is then given by the downwards closure of the resulting set with respect to <fr:tex display="inline"><![CDATA[\leq ]]></fr:tex>.
</html:p><html:p>
  This set is non-empty by construction, as <fr:tex display="inline"><![CDATA[X]]></fr:tex> and <fr:tex display="inline"><![CDATA[Y]]></fr:tex> are.
</html:p><html:p>
  The identity <fr:link href="/coherent-inverses-XQVM/" title="framed zigzag enriched category" uri="https://forest.nickx.hu/coherent-inverses-XQVM/" display-uri="coherent-inverses-XQVM" type="local">framed zigzag map</fr:link> is given by the principal downwards-closed set generated by identity morphisms of <fr:tex display="inline"><![CDATA[\mathcal {C}]]></fr:tex> equipped with the identity monotone map.
</html:p></fr:mainmatter></fr:tree></fr:mainmatter></fr:tree></fr:mainmatter></fr:tree></fr:mainmatter></fr:tree><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2023</fr:year><fr:month>12</fr:month><fr:day>3</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-collapse/</fr:uri><fr:display-uri>coherent-inverses-collapse</fr:display-uri><fr:route>/coherent-inverses-collapse/</fr:route><fr:title text="Collapsing framed zigzags">Collapsing <fr:link href="/coherent-inverses-XQVM/" title="framed zigzag enriched category" uri="https://forest.nickx.hu/coherent-inverses-XQVM/" display-uri="coherent-inverses-XQVM" type="local">framed zigzags</fr:link></fr:title><fr:taxon>chapter</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
    In this chapter, we explore the more algorithmic aspects of the theory of <fr:link href="/coherent-inverses-XQVM/" title="framed zigzag enriched category" uri="https://forest.nickx.hu/coherent-inverses-XQVM/" display-uri="coherent-inverses-XQVM" type="local">framed zigzag enriched categories</fr:link>, and in particular the <fr:link href="/coherent-inverses-FHS4/" title="contraction" uri="https://forest.nickx.hu/coherent-inverses-FHS4/" display-uri="coherent-inverses-FHS4" type="local">contraction algorithm</fr:link>, which is used to construct complex <fr:link href="/coherent-inverses-OBFZ/" title="zigzag homotopy" uri="https://forest.nickx.hu/coherent-inverses-OBFZ/" display-uri="coherent-inverses-OBFZ" type="local">zigzag homotopies</fr:link>.
    Fundamentally, an object of an iterated <fr:link href="/coherent-inverses-XQVM/" title="framed zigzag enriched category" uri="https://forest.nickx.hu/coherent-inverses-XQVM/" display-uri="coherent-inverses-XQVM" type="local">framed zigzag enriched category</fr:link> is a structure equipped with ‘slicing’ and ‘<fr:link href="/coherent-inverses-4S4Y/" title="exploded diagram" uri="https://forest.nickx.hu/coherent-inverses-4S4Y/" display-uri="coherent-inverses-4S4Y" type="local">explosion</fr:link>’ operations (see <fr:link href="/coherent-inverses-OC2T/" title="explosion bundle" uri="https://forest.nickx.hu/coherent-inverses-OC2T/" display-uri="coherent-inverses-OC2T" type="local">explosion bundle</fr:link>), which we represent by certain forms of (enriched) functors.
    These can be represented graph-theoretically as <fr:link href="/coherent-inverses-JGG7/" title="weighted graphs" uri="https://forest.nickx.hu/coherent-inverses-JGG7/" display-uri="coherent-inverses-JGG7" type="local"><fr:tex display="inline"><![CDATA[W]]></fr:tex>-graphs</fr:link>, which are then amenable to computer implementation.
  </html:p><html:p>
    Our algorithms centre on a notion of <fr:link href="/coherent-inverses-FEO0/" title="collapse" uri="https://forest.nickx.hu/coherent-inverses-FEO0/" display-uri="coherent-inverses-FEO0" type="local">collapse for <fr:link href="/coherent-inverses-JGG7/" title="weighted graphs" uri="https://forest.nickx.hu/coherent-inverses-JGG7/" display-uri="coherent-inverses-JGG7" type="local"><fr:tex display="inline"><![CDATA[W]]></fr:tex>-graphs</fr:link></fr:link> — in a way that will be made precise, this procedure <html:em>replaces</html:em> such a functor by a simpler one, in a way that preserves ‘colimits’.
    This algorithm serves as a building block for the key functionality of <html:span tex="\homotopyio{}"><fr:link href="/homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories/" title="homotopy.io: a proof assistant for finitely-presented globular $n$-categories" uri="https://forest.nickx.hu/homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories/" display-uri="homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories" type="local"><html:code>homotopy.io</html:code></fr:link></html:span>, featuring in the construction of algebraic <fr:link href="/coherent-inverses-US67/" title="signature and framing" uri="https://forest.nickx.hu/coherent-inverses-US67/" display-uri="coherent-inverses-US67" type="local">signatures</fr:link> via the <fr:link href="/coherent-inverses-9DJY/" title="generator creation" uri="https://forest.nickx.hu/coherent-inverses-9DJY/" display-uri="coherent-inverses-9DJY" type="local">generator creation algorithm</fr:link>, homotopy construction via <fr:link href="/coherent-inverses-FHS4/" title="contraction" uri="https://forest.nickx.hu/coherent-inverses-FHS4/" display-uri="coherent-inverses-FHS4" type="local">contraction algorithm</fr:link> for <fr:link href="/coherent-inverses-XQVM/" title="framed zigzag enriched category" uri="https://forest.nickx.hu/coherent-inverses-XQVM/" display-uri="coherent-inverses-XQVM" type="local">framed zigzags</fr:link>, and a <fr:link href="/coherent-inverses-4D20/" title="typechecking" uri="https://forest.nickx.hu/coherent-inverses-4D20/" display-uri="coherent-inverses-4D20" type="local">typechecking algorithm</fr:link> which determines the validity of diagrams.
    We argue for correctness of this algorithm by determining its behaviour as the computation of a <fr:link href="/coherent-inverses-ZPGB/" title="collapse colimit" uri="https://forest.nickx.hu/coherent-inverses-ZPGB/" display-uri="coherent-inverses-ZPGB" type="local">special kind of colimit</fr:link>, which we extend to an argument for correctness of the <fr:link href="/coherent-inverses-FHS4/" title="contraction" uri="https://forest.nickx.hu/coherent-inverses-FHS4/" display-uri="coherent-inverses-FHS4" type="local">contraction algorithm</fr:link> by showing that it admits certain well-behavedness conditions.
  </html:p><html:p>
    Although the <fr:link href="/coherent-inverses-XQVM/" title="framed zigzag enriched category" uri="https://forest.nickx.hu/coherent-inverses-XQVM/" display-uri="coherent-inverses-XQVM" type="local">framed zigzag</fr:link> construction is <fr:tex display="inline"><![CDATA[\wedge \mathbf {Lat}]]></fr:tex>-enriched, we will consider the more general case of <fr:tex display="inline"><![CDATA[\mathbf {Pos}]]></fr:tex>-enrichment.
    Informally, this is because the <fr:tex display="inline"><![CDATA[\wedge ]]></fr:tex> structure in each Hom semilattice is only used as a technical trick to ensure that the <fr:link href="/coherent-inverses-XQVM/" title="framed zigzag enriched category" uri="https://forest.nickx.hu/coherent-inverses-XQVM/" display-uri="coherent-inverses-XQVM" type="local">framed zigzag enriched category</fr:link> has composition.
    It is in fact the case none of the operations we wish to consider make use of composition of morphisms anyway, which also influences our decision to consider <fr:link href="/coherent-inverses-JGG7/" title="weighted graphs" uri="https://forest.nickx.hu/coherent-inverses-JGG7/" display-uri="coherent-inverses-JGG7" type="local"><fr:tex display="inline"><![CDATA[W]]></fr:tex>-graphs</fr:link> instead
  <html:sl-tooltip content="A category, forgetting composition of morphisms, is morally a graph.">
    <html:sup>​</html:sup>
  </html:sl-tooltip>
.
    We can justify this change in setting by transparently transporting across <fr:link href="/coherent-inverses-7AXW/" title="Adjunction \mathbf {PosCat} \to  \wedge \mathbf {LatCat}" uri="https://forest.nickx.hu/coherent-inverses-7AXW/" display-uri="coherent-inverses-7AXW" type="local">corollary <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-7AXW/" display-uri="coherent-inverses-7AXW" /></fr:link>.
    Namely, this implies that everything we say about colimits in <fr:tex display="inline"><![CDATA[\mathbf {Pos}]]></fr:tex>-categories will also apply to <fr:tex display="inline"><![CDATA[\wedge \mathbf {Lat}]]></fr:tex>-categories.
  </html:p><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2023</fr:year><fr:month>12</fr:month><fr:day>3</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-colimits/</fr:uri><fr:display-uri>coherent-inverses-colimits</fr:display-uri><fr:route>/coherent-inverses-colimits/</fr:route><fr:title text="Colimit theory">Colimit theory</fr:title><fr:taxon>section</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
      We begin in the general setting by considering the new colimit-type constructions available in the enriched setting of <fr:tex display="inline"><![CDATA[\mathbf {Pos}]]></fr:tex>-categories.
    </html:p><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2023</fr:year><fr:month>12</fr:month><fr:day>3</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-oplax/</fr:uri><fr:display-uri>coherent-inverses-oplax</fr:display-uri><fr:route>/coherent-inverses-oplax/</fr:route><fr:title text="Oplax category theory">Oplax category theory</fr:title><fr:taxon>section</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
        Because our setting is (at least) <fr:tex display="inline"><![CDATA[\mathbf {Pos}]]></fr:tex>-enriched, it is possible to express certain notions of category theory that are more ‘lax’, i.e. some commutativity conditions are replaced by the existence of 2-cell fillers, not necessarily in both directions.
        One such notion is that of an <fr:link href="/coherent-inverses-QTSK/" title="oplax colimit" uri="https://forest.nickx.hu/coherent-inverses-QTSK/" display-uri="coherent-inverses-QTSK" type="local">oplax colimit</fr:link>, which is a relaxed version of a colimit.
      </html:p><html:p>
        We first recall some basic facts about <fr:link href="/coherent-inverses-QTSK/" title="oplax colimit" uri="https://forest.nickx.hu/coherent-inverses-QTSK/" display-uri="coherent-inverses-QTSK" type="local">oplax colimits</fr:link>
  <html:sl-tooltip content="
          Unless otherwise specified, our notion of enriched oplax colimit is conical rather than equipped with an arbitrary weight.
          For the oplax case, every weighted oplax colimit is equivalently expressed as an oplax conical colimit, via a Grothendieck construction.
          This is analogous to the case of weighted colimits in ordinary (\mathbf {Set}-enriched) categories.
          However, note that this is not the case when the qualifier of ‘oplax’ is dropped.
        ">
    <html:sup>​</html:sup>
  </html:sl-tooltip>
 in the <fr:tex display="inline"><![CDATA[\mathbf {Pos}]]></fr:tex>-enriched setting.
      </html:p><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2023</fr:year><fr:month>12</fr:month><fr:day>3</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-UKT4/</fr:uri><fr:display-uri>coherent-inverses-UKT4</fr:display-uri><fr:route>/coherent-inverses-UKT4/</fr:route><fr:title text="lax natural transformation"><fr:link href="/coherent-inverses-UKT4/" title="lax natural transformation" uri="https://forest.nickx.hu/coherent-inverses-UKT4/" display-uri="coherent-inverses-UKT4" type="local">lax natural transformation</fr:link></fr:title><fr:taxon>definition</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
  A <fr:link href="/coherent-inverses-UKT4/" title="lax natural transformation" uri="https://forest.nickx.hu/coherent-inverses-UKT4/" display-uri="coherent-inverses-UKT4" type="local">lax natural transformation</fr:link> between <fr:tex display="inline"><![CDATA[\mathbf {Pos}]]></fr:tex>-functors <fr:tex display="inline"><![CDATA[
      F \xRightarrow {\alpha } G
    ]]></fr:tex> is:
  <html:ul><html:li>
      for each <fr:tex display="inline"><![CDATA[x \in  \mathcal {C}]]></fr:tex>, a collection of component 1-morphisms <fr:tex display="inline"><![CDATA[F_{x} \xrightarrow {\alpha _{x}} G_{x}]]></fr:tex> in <fr:tex display="inline"><![CDATA[\mathcal {D}]]></fr:tex>;
    </html:li>
    <html:li>
      for each morphism <fr:tex display="inline"><![CDATA[{x \xrightarrow {f} y}]]></fr:tex> in <fr:tex display="inline"><![CDATA[\mathcal {C}]]></fr:tex>, a 2-morphism filler for <fr:tex display="inline"><![CDATA[G f \circ  \alpha  \Rightarrow  \alpha  \circ  F f]]></fr:tex> in <fr:tex display="inline"><![CDATA[\mathcal {D}]]></fr:tex>:
        
  
  
  <html:figure><fr:resource hash="996f3a11927c26d627fe3456862df5fb"><fr:resource-content><html:img src="/996f3a11927c26d627fe3456862df5fb.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[
       \usepackage{amsmath,amssymb}
  \usepackage{mathtools}
  \usepackage{stmaryrd}
  \newcommand{\set}[1]{\left\{#1\right\}}
     \usepackage {tikz}
     \usetikzlibrary {cd}
     \usetikzlibrary {}
     
  \definecolor {green}{RGB}{27,158,119}
  \definecolor {orange}{RGB}{217,95,2}
  \definecolor {purple}{RGB}{117,112,179}

     
    ]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
      \begin {tikzcd}[]
          F x \ar [r, "F f"] \ar [d, "\alpha _x"', ""{name=L}] & F y \ar [d, "\alpha _y", ""'{name=R}] \\
          G x \ar [r, "G f"'] & G x.
          \ar [from=L, to=R, Rightarrow, shorten=5, to path={-- (\tikztostart  -| \tikztotarget )}]
        \end {tikzcd}
    ]]></fr:resource-source></fr:resource></html:figure></html:li></html:ul></html:p><html:p>
  The collection of all <fr:link href="/coherent-inverses-UKT4/" title="lax natural transformation" uri="https://forest.nickx.hu/coherent-inverses-UKT4/" display-uri="coherent-inverses-UKT4" type="local">lax natural transformations</fr:link> <fr:tex display="inline"><![CDATA[
      F \xRightarrow {\alpha } G
    ]]></fr:tex> is the poset denoted by <fr:tex display="inline"><![CDATA[\mathbf {Lax} (F, G)]]></fr:tex>, which is ordered component-wise.
</html:p></fr:mainmatter></fr:tree><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2023</fr:year><fr:month>12</fr:month><fr:day>5</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-W0JK/</fr:uri><fr:display-uri>coherent-inverses-W0JK</fr:display-uri><fr:route>/coherent-inverses-W0JK/</fr:route><fr:title text="oplax cocone"><fr:link href="/coherent-inverses-W0JK/" title="oplax cocone" uri="https://forest.nickx.hu/coherent-inverses-W0JK/" display-uri="coherent-inverses-W0JK" type="local">oplax cocone</fr:link></fr:title><fr:taxon>definition</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
  An <fr:link href="/coherent-inverses-W0JK/" title="oplax cocone" uri="https://forest.nickx.hu/coherent-inverses-W0JK/" display-uri="coherent-inverses-W0JK" type="local">oplax cocone</fr:link> over <fr:tex display="inline"><![CDATA[d \in  \mathcal {D}]]></fr:tex> is a <fr:link href="/coherent-inverses-UKT4/" title="lax natural transformation" uri="https://forest.nickx.hu/coherent-inverses-UKT4/" display-uri="coherent-inverses-UKT4" type="local">lax natural transformation</fr:link> <fr:tex display="inline"><![CDATA[
        F \xRightarrow {\alpha } \mathrm {const}_{d}
      ]]></fr:tex>.
  That is, a family of 1-morphisms in <fr:tex display="inline"><![CDATA[\mathcal {D}]]></fr:tex>, <fr:tex display="inline"><![CDATA[
        F x \xrightarrow {\alpha _x} d
      ]]></fr:tex>, such that for each morphism <fr:tex display="inline"><![CDATA[{x \xrightarrow {f} y}]]></fr:tex> in <fr:tex display="inline"><![CDATA[\mathcal {C}]]></fr:tex>, there is a 2-morphism filler <fr:tex display="inline"><![CDATA[\alpha _x \Rightarrow  \alpha _y \circ  F f]]></fr:tex>:
  
  
  
  <html:figure><fr:resource hash="01a5974a4c064a0a516c7b9720b6acfd"><fr:resource-content><html:img src="/01a5974a4c064a0a516c7b9720b6acfd.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[
       \usepackage{amsmath,amssymb}
  \usepackage{mathtools}
  \usepackage{stmaryrd}
  \newcommand{\set}[1]{\left\{#1\right\}}
     \usepackage {tikz}
     \usetikzlibrary {cd}
     \usetikzlibrary {}
     
  \definecolor {green}{RGB}{27,158,119}
  \definecolor {orange}{RGB}{217,95,2}
  \definecolor {purple}{RGB}{117,112,179}

     
    ]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
      \begin {tikzcd}[column sep=small]
    F x \ar [rr, "F f"] \ar [rd, "\alpha _x"', ""{name=L}]
    && F y \ar [ld, "\alpha _y"] \\
    & d.
    \ar [from=L, to=1-3, Rightarrow, ""', shorten=10]
  \end {tikzcd}
    ]]></fr:resource-source></fr:resource></html:figure></html:p><html:p>
  Note that an <fr:link href="/coherent-inverses-W0JK/" title="oplax cocone" uri="https://forest.nickx.hu/coherent-inverses-W0JK/" display-uri="coherent-inverses-W0JK" type="local"><html:em>oplax</html:em> cocone</fr:link> is given by a <fr:link href="/coherent-inverses-UKT4/" title="lax natural transformation" uri="https://forest.nickx.hu/coherent-inverses-UKT4/" display-uri="coherent-inverses-UKT4" type="local"><html:em>lax</html:em> natural transformation</fr:link>.
</html:p><html:p><fr:link href="/coherent-inverses-W0JK/" title="oplax cocone" uri="https://forest.nickx.hu/coherent-inverses-W0JK/" display-uri="coherent-inverses-W0JK" type="local">Oplax cocones</fr:link> over a diagram <fr:tex display="inline"><![CDATA[F]]></fr:tex> with a fixed tip <fr:tex display="inline"><![CDATA[d]]></fr:tex> are partially ordered pointwise, and form a poset <fr:tex display="inline"><![CDATA[\mathbf {OplaxCocone} (F, d) \coloneqq  \mathbf {Lax} (F, \mathrm {const}_{d})]]></fr:tex>.
</html:p></fr:mainmatter></fr:tree><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2023</fr:year><fr:month>12</fr:month><fr:day>5</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-QTSK/</fr:uri><fr:display-uri>coherent-inverses-QTSK</fr:display-uri><fr:route>/coherent-inverses-QTSK/</fr:route><fr:title text="oplax colimit"><fr:link href="/coherent-inverses-QTSK/" title="oplax colimit" uri="https://forest.nickx.hu/coherent-inverses-QTSK/" display-uri="coherent-inverses-QTSK" type="local">oplax colimit</fr:link></fr:title><fr:taxon>definition</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
  The <fr:link href="/coherent-inverses-QTSK/" title="oplax colimit" uri="https://forest.nickx.hu/coherent-inverses-QTSK/" display-uri="coherent-inverses-QTSK" type="local">oplax colimit</fr:link> of <fr:tex display="inline"><![CDATA[F]]></fr:tex> is the <html:em>universal</html:em> <fr:link href="/coherent-inverses-W0JK/" title="oplax cocone" uri="https://forest.nickx.hu/coherent-inverses-W0JK/" display-uri="coherent-inverses-W0JK" type="local">oplax cocone</fr:link> <fr:tex display="inline"><![CDATA[
        F \xRightarrow {\iota } \mathrm {const}_{\operatorname {olcolim} F}
      ]]></fr:tex>:
  for any other <fr:link href="/coherent-inverses-W0JK/" title="oplax cocone" uri="https://forest.nickx.hu/coherent-inverses-W0JK/" display-uri="coherent-inverses-W0JK" type="local">oplax cocone</fr:link> <fr:tex display="inline"><![CDATA[
        F \xRightarrow {\alpha } \mathrm {const}_{d}
      ]]></fr:tex>, there exists a unique 1-morphism <fr:tex display="inline"><![CDATA[{\operatorname {olcolim} F \xrightarrow {u} d}]]></fr:tex> in <fr:tex display="inline"><![CDATA[\mathcal {D}]]></fr:tex> such that for all <fr:tex display="inline"><![CDATA[x \in  \mathcal {C}]]></fr:tex>, <fr:tex display="inline"><![CDATA[\alpha _x = \iota _x \circ  u]]></fr:tex>:
  
  
  
  <html:figure><fr:resource hash="a642a97c77e67ad1d12d6a4226fc1b3b"><fr:resource-content><html:img src="/a642a97c77e67ad1d12d6a4226fc1b3b.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[
       \usepackage{amsmath,amssymb}
  \usepackage{mathtools}
  \usepackage{stmaryrd}
  \newcommand{\set}[1]{\left\{#1\right\}}
     \usepackage {tikz}
     \usetikzlibrary {cd}
     \usetikzlibrary {}
     
  \definecolor {green}{RGB}{27,158,119}
  \definecolor {orange}{RGB}{217,95,2}
  \definecolor {purple}{RGB}{117,112,179}

     
    ]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
      \begin {tikzcd}[]
    & d \\
    F x \ar [r, "\iota _x"'] \ar [ur, "\alpha _x"] & \operatorname {olcolim} F \ar [u, "u"']
  \end {tikzcd}
    ]]></fr:resource-source></fr:resource></html:figure></html:p><html:p>
  Also, for any other <fr:link href="/coherent-inverses-W0JK/" title="oplax cocone" uri="https://forest.nickx.hu/coherent-inverses-W0JK/" display-uri="coherent-inverses-W0JK" type="local">oplax cocone</fr:link> over <fr:tex display="inline"><![CDATA[F]]></fr:tex> with the same tip, <fr:tex display="inline"><![CDATA[
        F \xRightarrow {\alpha ^\prime } \mathrm {const}_{d}
      ]]></fr:tex>, which factors via <fr:tex display="inline"><![CDATA[{\operatorname {olcolim} F \xrightarrow {u^\prime } d}]]></fr:tex>, as above, and additionally is pointwise-ordered above <fr:tex display="inline"><![CDATA[\alpha ]]></fr:tex> (for all <fr:tex display="inline"><![CDATA[x \in  \mathcal {C}]]></fr:tex>, the 2-morphism filler <fr:tex display="inline"><![CDATA[\alpha _x \Rightarrow  \alpha ^\prime _x]]></fr:tex> exists), then <fr:tex display="inline"><![CDATA[u \Rightarrow  u^\prime ]]></fr:tex>, and vice versa.
</html:p><html:p>
  In other words, the universal property of the <fr:link href="/coherent-inverses-QTSK/" title="oplax colimit" uri="https://forest.nickx.hu/coherent-inverses-QTSK/" display-uri="coherent-inverses-QTSK" type="local">oplax colimit</fr:link> is equivalently expressed as a natural order isomorphism of posets:
  <fr:tex display="block"><![CDATA[
    \mathcal {D} (\operatorname {olcolim} F, d) \cong  \mathbf {OplaxCocone} (F, d).
  ]]></fr:tex></html:p></fr:mainmatter></fr:tree><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2023</fr:year><fr:month>12</fr:month><fr:day>5</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-TIQR/</fr:uri><fr:display-uri>coherent-inverses-TIQR</fr:display-uri><fr:route>/coherent-inverses-TIQR/</fr:route><fr:title text="oplax colimits are unique up to unique isomorphism"><fr:link href="/coherent-inverses-QTSK/" title="oplax colimit" uri="https://forest.nickx.hu/coherent-inverses-QTSK/" display-uri="coherent-inverses-QTSK" type="local">oplax colimits</fr:link> are unique up to unique isomorphism</fr:title><fr:taxon>lemma</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
  The <fr:link href="/coherent-inverses-QTSK/" title="oplax colimit" uri="https://forest.nickx.hu/coherent-inverses-QTSK/" display-uri="coherent-inverses-QTSK" type="local">oplax colimit</fr:link> of a <fr:tex display="inline"><![CDATA[\mathbf {Pos}]]></fr:tex>-functor <fr:tex display="inline"><![CDATA[F]]></fr:tex> is unique up to unique isomorphism.
</html:p>
 
   
   <fr:tree show-metadata="false" toc="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2023</fr:year><fr:month>12</fr:month><fr:day>5</fr:day></fr:date><fr:taxon>proof</fr:taxon></fr:frontmatter><fr:mainmatter>
  <html:p>
    Let <fr:tex display="inline"><![CDATA[
        F \xRightarrow {\iota } \mathrm {const}_{\operatorname {olcolim} F}
      ]]></fr:tex> and <fr:tex display="inline"><![CDATA[
        F \xRightarrow {\iota ^\prime } \mathrm {const}_{C}
      ]]></fr:tex> be <fr:link href="/coherent-inverses-QTSK/" title="oplax colimit" uri="https://forest.nickx.hu/coherent-inverses-QTSK/" display-uri="coherent-inverses-QTSK" type="local">oplax colimits</fr:link> over a diagram <fr:tex display="inline"><![CDATA[{J \xrightarrow {F} \mathcal {C}}]]></fr:tex>.
    Through this, we obtain unique factorisations <fr:tex display="inline"><![CDATA[{\operatorname {olcolim} F \xrightarrow {u} d}]]></fr:tex> and <fr:tex display="inline"><![CDATA[{C \xrightarrow {u^\prime } d}]]></fr:tex>:
    
  
  
  <html:figure><fr:resource hash="6f8e7d95023c1039df926fd7d6287c61"><fr:resource-content><html:img src="/6f8e7d95023c1039df926fd7d6287c61.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[
       \usepackage{amsmath,amssymb}
  \usepackage{mathtools}
  \usepackage{stmaryrd}
  \newcommand{\set}[1]{\left\{#1\right\}}
     \usepackage {tikz}
     \usetikzlibrary {cd}
     \usetikzlibrary {}
     
  \definecolor {green}{RGB}{27,158,119}
  \definecolor {orange}{RGB}{217,95,2}
  \definecolor {purple}{RGB}{117,112,179}

     
    ]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
      \begin {tikzcd}[column sep=small]
      F x \ar [rr, "\iota _x"] \ar [rd, "\iota ^\prime _x"']
      && \operatorname {olcolim} F \ar [ld, "u", shift left] \\
      & C. \ar [ru, "u^\prime ", shift left]
    \end {tikzcd}
    ]]></fr:resource-source></fr:resource></html:figure></html:p>
  <html:p><fr:tex display="inline"><![CDATA[\iota ]]></fr:tex> also factors through itself via the identity:
    
  
  
  <html:figure><fr:resource hash="00b2dddef0f7fae2b479883c911d65bb"><fr:resource-content><html:img src="/00b2dddef0f7fae2b479883c911d65bb.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[
       \usepackage{amsmath,amssymb}
  \usepackage{mathtools}
  \usepackage{stmaryrd}
  \newcommand{\set}[1]{\left\{#1\right\}}
     \usepackage {tikz}
     \usetikzlibrary {cd}
     \usetikzlibrary {}
     
  \definecolor {green}{RGB}{27,158,119}
  \definecolor {orange}{RGB}{217,95,2}
  \definecolor {purple}{RGB}{117,112,179}

     
    ]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
      \begin {tikzcd}[column sep=small]
      F x \ar [rr, "\iota _x"] \ar [rd, "\iota _x"']
      && \operatorname {olcolim} F \ar [ld, equals] \\
      & \operatorname {olcolim} F.
    \end {tikzcd}
    ]]></fr:resource-source></fr:resource></html:figure></html:p>
  <html:p>
    Now, the first triangle can be pasted against itself, and the uniqueness of the factorisation allows us to deduce <fr:tex display="inline"><![CDATA[
  \text {id}_{\operatorname {olcolim} F}
 = u^\prime  \circ  u]]></fr:tex>, and symmetrically <fr:tex display="inline"><![CDATA[
  \text {id}_{C}
 = u \circ  u^\prime ]]></fr:tex>.
  </html:p>
</fr:mainmatter></fr:tree>
 

 
   
   <fr:tree show-metadata="false" toc="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2023</fr:year><fr:month>12</fr:month><fr:day>5</fr:day></fr:date><fr:taxon>proof</fr:taxon></fr:frontmatter><fr:mainmatter>
  <html:p>
    We present an alternative and more abstract proof.
  </html:p>
  <html:p>
    Let <fr:tex display="inline"><![CDATA[C]]></fr:tex> also have the same universal property as <fr:tex display="inline"><![CDATA[\operatorname {olcolim} F]]></fr:tex>:
    <fr:tex display="block"><![CDATA[
      \forall  d \in  \mathcal {D}. \mathcal {D} (C, d) \cong  \mathbf {OplaxCocone} (F, d);
    ]]></fr:tex>
    then deduce that <fr:tex display="inline"><![CDATA[\mathcal {D} (C, d) \cong  \mathcal {D} (\operatorname {olcolim} F, d)]]></fr:tex>, and hence by the <fr:tex display="inline"><![CDATA[\mathbf {Pos}]]></fr:tex>-enriched Yoneda lemma, <fr:tex display="inline"><![CDATA[C \cong  \operatorname {olcolim} F]]></fr:tex>.
  </html:p>
</fr:mainmatter></fr:tree>
 
</fr:mainmatter></fr:tree><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2023</fr:year><fr:month>12</fr:month><fr:day>3</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-oplax-pathologies/</fr:uri><fr:display-uri>coherent-inverses-oplax-pathologies</fr:display-uri><fr:route>/coherent-inverses-oplax-pathologies/</fr:route><fr:title text="Pathological examples">Pathological examples</fr:title><fr:taxon>section</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
          An <fr:link href="/coherent-inverses-W0JK/" title="oplax cocone" uri="https://forest.nickx.hu/coherent-inverses-W0JK/" display-uri="coherent-inverses-W0JK" type="local">oplax cocone</fr:link> is a relaxed version of a cocone, and in general there may exist more <fr:link href="/coherent-inverses-W0JK/" title="oplax cocone" uri="https://forest.nickx.hu/coherent-inverses-W0JK/" display-uri="coherent-inverses-W0JK" type="local">oplax cocones</fr:link> over any diagram of <fr:tex display="inline"><![CDATA[\mathbf {Pos}]]></fr:tex>-categories (each cocone is trivially also an <fr:link href="/coherent-inverses-W0JK/" title="oplax cocone" uri="https://forest.nickx.hu/coherent-inverses-W0JK/" display-uri="coherent-inverses-W0JK" type="local">oplax cocone</fr:link>).
        </html:p><html:p>
          This leads to some behaviours that are not present in the theory of colimits in the unenriched setting, which we detail in this section.
        </html:p><html:p>
          The property of having an <fr:link href="/coherent-inverses-QTSK/" title="oplax colimit" uri="https://forest.nickx.hu/coherent-inverses-QTSK/" display-uri="coherent-inverses-QTSK" type="local">oplax colimit</fr:link> is not stable under extending a diagram by identities.
        </html:p><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>5</fr:month><fr:day>30</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-Q4FX/</fr:uri><fr:display-uri>coherent-inverses-Q4FX</fr:display-uri><fr:route>/coherent-inverses-Q4FX/</fr:route><fr:title text="oplax colimits unstable under extension by identity"><fr:link href="/coherent-inverses-QTSK/" title="oplax colimit" uri="https://forest.nickx.hu/coherent-inverses-QTSK/" display-uri="coherent-inverses-QTSK" type="local">oplax colimits</fr:link> unstable under extension by identity</fr:title><fr:taxon>example</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
  Let <fr:tex display="inline"><![CDATA[\mathcal {C}]]></fr:tex> be the <fr:tex display="inline"><![CDATA[\mathbf {Pos}]]></fr:tex>-category generated by:
  
  
  
  <html:figure><fr:resource hash="45fe5bcf0b937d937eae786bcde916c9"><fr:resource-content><html:img src="/45fe5bcf0b937d937eae786bcde916c9.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[
       \usepackage{amsmath,amssymb}
  \usepackage{mathtools}
  \usepackage{stmaryrd}
  \newcommand{\set}[1]{\left\{#1\right\}}
     \usepackage {tikz}
     \usetikzlibrary {cd}
     \usetikzlibrary {}
     
  \definecolor {green}{RGB}{27,158,119}
  \definecolor {orange}{RGB}{217,95,2}
  \definecolor {purple}{RGB}{117,112,179}

     
    ]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
      \begin {tikzcd}[]
    x
    \ar [r, bend right, "f"', ""{name=D}]
    \ar [r, bend left, "g", ""'{name=U}]
    & y;
    \ar [from=D, to=U, Rightarrow]
  \end {tikzcd}
    ]]></fr:resource-source></fr:resource></html:figure>



  and <fr:tex display="inline"><![CDATA[F]]></fr:tex> and <fr:tex display="inline"><![CDATA[F^\prime ]]></fr:tex> given respectively by diagrams:
  <fr:tex display="block"><![CDATA[
    x \qquad  \qquad  x = x.
  ]]></fr:tex></html:p><html:p><fr:tex display="inline"><![CDATA[F]]></fr:tex> has both an <fr:link href="/coherent-inverses-QTSK/" title="oplax colimit" uri="https://forest.nickx.hu/coherent-inverses-QTSK/" display-uri="coherent-inverses-QTSK" type="local">oplax colimit</fr:link> and a conical colimit, given by the identity cocone with tip <fr:tex display="inline"><![CDATA[x]]></fr:tex> and leg given by <fr:tex display="inline"><![CDATA[
  \text {id}_{x}
]]></fr:tex>.
</html:p><html:p>
  However, the identity cocone over <fr:tex display="inline"><![CDATA[F^\prime ]]></fr:tex> is not an <fr:link href="/coherent-inverses-QTSK/" title="oplax colimit" uri="https://forest.nickx.hu/coherent-inverses-QTSK/" display-uri="coherent-inverses-QTSK" type="local">oplax colimit</fr:link>: the <fr:link href="/coherent-inverses-W0JK/" title="oplax cocone" uri="https://forest.nickx.hu/coherent-inverses-W0JK/" display-uri="coherent-inverses-W0JK" type="local">oplax cocone</fr:link>
  
  
  
  <html:figure><fr:resource hash="398196acb17d0336427f628e8bb91b48"><fr:resource-content><html:img src="/398196acb17d0336427f628e8bb91b48.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[
       \usepackage{amsmath,amssymb}
  \usepackage{mathtools}
  \usepackage{stmaryrd}
  \newcommand{\set}[1]{\left\{#1\right\}}
     \usepackage {tikz}
     \usetikzlibrary {cd}
     \usetikzlibrary {}
     
  \definecolor {green}{RGB}{27,158,119}
  \definecolor {orange}{RGB}{217,95,2}
  \definecolor {purple}{RGB}{117,112,179}

     
    ]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
      \begin {tikzcd}[column sep=small]
    x \ar [rr, equals] \ar [rd, "f"', ""{name=L}]
    && x \ar [ld, "g"] \\
    & y
    \ar [from=L, to=1-3, Rightarrow, shorten >=10]
  \end {tikzcd}
    ]]></fr:resource-source></fr:resource></html:figure>



  exists; if the identity cocone were universal, then this <fr:link href="/coherent-inverses-W0JK/" title="oplax cocone" uri="https://forest.nickx.hu/coherent-inverses-W0JK/" display-uri="coherent-inverses-W0JK" type="local">oplax cocone</fr:link> would factor through it, which is tantamount to requiring a morphism <fr:tex display="inline"><![CDATA[x \to  y]]></fr:tex> which is simultaneously equal to <fr:tex display="inline"><![CDATA[f]]></fr:tex> and <fr:tex display="inline"><![CDATA[g]]></fr:tex>, which does not exist.
</html:p></fr:mainmatter></fr:tree><html:p>
          In ordinary category theory, any diagram <fr:tex display="inline"><![CDATA[F]]></fr:tex> that admits a terminal object <fr:tex display="inline"><![CDATA[x]]></fr:tex> in its indexing category admits <fr:tex display="inline"><![CDATA[F x]]></fr:tex> as a colimit.
          This is not so for <fr:link href="/coherent-inverses-QTSK/" title="oplax colimit" uri="https://forest.nickx.hu/coherent-inverses-QTSK/" display-uri="coherent-inverses-QTSK" type="local">oplax colimits</fr:link>, as the following example shows.
        </html:p><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>5</fr:month><fr:day>30</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-J1Q9/</fr:uri><fr:display-uri>coherent-inverses-J1Q9</fr:display-uri><fr:route>/coherent-inverses-J1Q9/</fr:route><fr:title text="oplax colimits not given by terminal index"><fr:link href="/coherent-inverses-QTSK/" title="oplax colimit" uri="https://forest.nickx.hu/coherent-inverses-QTSK/" display-uri="coherent-inverses-QTSK" type="local">oplax colimits</fr:link> not given by terminal index</fr:title><fr:taxon>example</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
  Let <fr:tex display="inline"><![CDATA[J]]></fr:tex> be the walking arrow, <fr:tex display="inline"><![CDATA[\mathcal {C}]]></fr:tex> be the <fr:tex display="inline"><![CDATA[\mathbf {Pos}]]></fr:tex>-category generated by:
  
  
  
  <html:figure><fr:resource hash="45fe5bcf0b937d937eae786bcde916c9"><fr:resource-content><html:img src="/45fe5bcf0b937d937eae786bcde916c9.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[
       \usepackage{amsmath,amssymb}
  \usepackage{mathtools}
  \usepackage{stmaryrd}
  \newcommand{\set}[1]{\left\{#1\right\}}
     \usepackage {tikz}
     \usetikzlibrary {cd}
     \usetikzlibrary {}
     
  \definecolor {green}{RGB}{27,158,119}
  \definecolor {orange}{RGB}{217,95,2}
  \definecolor {purple}{RGB}{117,112,179}

     
    ]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
      \begin {tikzcd}[]
    x
    \ar [r, bend right, "f"', ""{name=D}]
    \ar [r, bend left, "g", ""'{name=U}]
    & y;
    \ar [from=D, to=U, Rightarrow]
  \end {tikzcd}
    ]]></fr:resource-source></fr:resource></html:figure>



  and <fr:tex display="inline"><![CDATA[F]]></fr:tex> and <fr:tex display="inline"><![CDATA[G]]></fr:tex> given by the diagrams which choose the morphisms <fr:tex display="inline"><![CDATA[f]]></fr:tex> and <fr:tex display="inline"><![CDATA[g]]></fr:tex> respectively.
</html:p><html:p><fr:tex display="inline"><![CDATA[F]]></fr:tex> admits only one <fr:link href="/coherent-inverses-W0JK/" title="oplax cocone" uri="https://forest.nickx.hu/coherent-inverses-W0JK/" display-uri="coherent-inverses-W0JK" type="local">oplax cocone</fr:link>, with tip <fr:tex display="inline"><![CDATA[y]]></fr:tex> and legs <fr:tex display="inline"><![CDATA[f]]></fr:tex> and <fr:tex display="inline"><![CDATA[
  \text {id}_{y}
]]></fr:tex>, and so this is an <fr:link href="/coherent-inverses-QTSK/" title="oplax colimit" uri="https://forest.nickx.hu/coherent-inverses-QTSK/" display-uri="coherent-inverses-QTSK" type="local">oplax colimit</fr:link>.
</html:p><html:p>
  However, <fr:tex display="inline"><![CDATA[G]]></fr:tex> admits two <fr:link href="/coherent-inverses-W0JK/" title="oplax cocone" uri="https://forest.nickx.hu/coherent-inverses-W0JK/" display-uri="coherent-inverses-W0JK" type="local">oplax cocones</fr:link>:
  
  
  
  <html:figure><fr:resource hash="984340a5c70f5a50a6b5a6c9c732d064"><fr:resource-content><html:img src="/984340a5c70f5a50a6b5a6c9c732d064.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[
       \usepackage{amsmath,amssymb}
  \usepackage{mathtools}
  \usepackage{stmaryrd}
  \newcommand{\set}[1]{\left\{#1\right\}}
     \usepackage {tikz}
     \usetikzlibrary {cd}
     \usetikzlibrary {}
     
  \definecolor {green}{RGB}{27,158,119}
  \definecolor {orange}{RGB}{217,95,2}
  \definecolor {purple}{RGB}{117,112,179}

     
    ]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
      \begin {tikzcd}[column sep=small]
    x \ar [rr, "g"] \ar [rd, "g"', ""{name=L}]
    && y \ar [ld, equals] \\
    & y,
    \ar [from=L, to=1-3, Rightarrow, shorten >=10]
  \end {tikzcd}
    ]]></fr:resource-source></fr:resource></html:figure>



  
  
  
  <html:figure><fr:resource hash="f477655bbcb6967e0785018b61dc521c"><fr:resource-content><html:img src="/f477655bbcb6967e0785018b61dc521c.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[
       \usepackage{amsmath,amssymb}
  \usepackage{mathtools}
  \usepackage{stmaryrd}
  \newcommand{\set}[1]{\left\{#1\right\}}
     \usepackage {tikz}
     \usetikzlibrary {cd}
     \usetikzlibrary {}
     
  \definecolor {green}{RGB}{27,158,119}
  \definecolor {orange}{RGB}{217,95,2}
  \definecolor {purple}{RGB}{117,112,179}

     
    ]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
      \begin {tikzcd}[column sep=small]
    x \ar [rr, "g"] \ar [rd, "f"', ""{name=L}]
    && y \ar [ld, equals] \\
    & y,
    \ar [from=L, to=1-3, Rightarrow, shorten >=10]
  \end {tikzcd}
    ]]></fr:resource-source></fr:resource></html:figure>



  and neither of these factor through each other, so the <fr:link href="/coherent-inverses-QTSK/" title="oplax colimit" uri="https://forest.nickx.hu/coherent-inverses-QTSK/" display-uri="coherent-inverses-QTSK" type="local">oplax colimit</fr:link> does not exist.
</html:p></fr:mainmatter></fr:tree></fr:mainmatter></fr:tree><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2023</fr:year><fr:month>12</fr:month><fr:day>3</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-weighted/</fr:uri><fr:display-uri>coherent-inverses-weighted</fr:display-uri><fr:route>/coherent-inverses-weighted/</fr:route><fr:title text="Oplax, marked, and weighted colimits"><fr:link href="/coherent-inverses-QTSK/" title="oplax colimit" uri="https://forest.nickx.hu/coherent-inverses-QTSK/" display-uri="coherent-inverses-QTSK" type="local">Oplax</fr:link>, <fr:link href="/coherent-inverses-S9V9/" title="marked colimit" uri="https://forest.nickx.hu/coherent-inverses-S9V9/" display-uri="coherent-inverses-S9V9" type="local">marked</fr:link>, and <fr:link href="/coherent-inverses-KV1B/" title="weighted colimit" uri="https://forest.nickx.hu/coherent-inverses-KV1B/" display-uri="coherent-inverses-KV1B" type="local">weighted colimits</fr:link></fr:title><fr:taxon>section</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
          The notion of <fr:link href="/coherent-inverses-QTSK/" title="oplax colimit" uri="https://forest.nickx.hu/coherent-inverses-QTSK/" display-uri="coherent-inverses-QTSK" type="local">oplax colimit</fr:link> is a specific instance of a more general concept: a <fr:link href="/coherent-inverses-KV1B/" title="weighted colimit" uri="https://forest.nickx.hu/coherent-inverses-KV1B/" display-uri="coherent-inverses-KV1B" type="local">weighted colimit</fr:link>.
        </html:p><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>9</fr:month><fr:day>3</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-KV1B/</fr:uri><fr:display-uri>coherent-inverses-KV1B</fr:display-uri><fr:route>/coherent-inverses-KV1B/</fr:route><fr:title text="weighted colimit"><fr:link href="/coherent-inverses-KV1B/" title="weighted colimit" uri="https://forest.nickx.hu/coherent-inverses-KV1B/" display-uri="coherent-inverses-KV1B" type="local">weighted colimit</fr:link></fr:title><fr:taxon>definition</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
  Given a <fr:tex display="inline"><![CDATA[\mathbf {Pos}]]></fr:tex>-functor <fr:tex display="inline"><![CDATA[{J \xrightarrow {F} \mathcal {C}}]]></fr:tex> and additionally a <fr:tex display="inline"><![CDATA[\mathbf {Pos}]]></fr:tex>-functor <fr:tex display="inline"><![CDATA[{{J}^\mathrm {op} \xrightarrow {W} \mathbf {Pos}}]]></fr:tex>, called a <html:em>weight</html:em>, the <fr:link href="/coherent-inverses-KV1B/" title="weighted colimit" uri="https://forest.nickx.hu/coherent-inverses-KV1B/" display-uri="coherent-inverses-KV1B" type="local">weighted colimit</fr:link> of <fr:tex display="inline"><![CDATA[F]]></fr:tex> with respect to <fr:tex display="inline"><![CDATA[W]]></fr:tex> is an object <fr:tex display="inline"><![CDATA[\operatorname {colim}^{W} F \in  \mathcal {C}]]></fr:tex> with the universal property
  <fr:tex display="block"><![CDATA[
    \forall  c \in  \mathcal {C}. \mathcal {C} (\operatorname {colim}^{W} F, c) \cong  [{J}^\mathrm {op}, \mathbf {Pos}] (W, \mathcal {C} (F -, c))
  ]]></fr:tex>
  in <fr:tex display="inline"><![CDATA[\mathbf {Pos}]]></fr:tex>.
</html:p></fr:mainmatter></fr:tree><html:p>
          In enriched category theory, it becomes the case that the ‘conical’ shape of an ordinary colimit is insufficiently expressive — for instance, a <fr:tex display="inline"><![CDATA[\mathcal {V}]]></fr:tex>-category may possess all conical colimits but not all the <fr:link href="/coherent-inverses-QTSK/" title="oplax colimit" uri="https://forest.nickx.hu/coherent-inverses-QTSK/" display-uri="coherent-inverses-QTSK" type="local">oplax colimits</fr:link>.
          The weight associated to a <fr:link href="/coherent-inverses-KV1B/" title="weighted colimit" uri="https://forest.nickx.hu/coherent-inverses-KV1B/" display-uri="coherent-inverses-KV1B" type="local">weighted colimit</fr:link> generalises this conical shape, and is the appropriate notion of colimit in this setting.
        </html:p><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>9</fr:month><fr:day>3</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-CSVT/</fr:uri><fr:display-uri>coherent-inverses-CSVT</fr:display-uri><fr:route>/coherent-inverses-CSVT/</fr:route><fr:title text="weighted colimits as generalised cocones"><fr:link href="/coherent-inverses-KV1B/" title="weighted colimit" uri="https://forest.nickx.hu/coherent-inverses-KV1B/" display-uri="coherent-inverses-KV1B" type="local">weighted colimits</fr:link> as generalised cocones</fr:title><fr:taxon>remark</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
  A cocone in ordinary category theory is expressed by a natural transformation into a constant functor.
  For instance, for some diagram <fr:tex display="inline"><![CDATA[{J \xrightarrow {F} \mathcal {C}}]]></fr:tex>, a cocone with tip <fr:tex display="inline"><![CDATA[c]]></fr:tex> is given by the data of some <fr:tex display="inline"><![CDATA[{F \xRightarrow {\alpha } \mathrm {const}_{c}}]]></fr:tex>.
  In the context of <fr:tex display="inline"><![CDATA[\mathbf {Pos}]]></fr:tex>-categories, these cocones arrange themselves into the poset <fr:tex display="inline"><![CDATA[[J, \mathcal {C}] (F, \mathrm {const}_{c})]]></fr:tex>.
  For the colimit to possess the universal property
  <fr:tex display="block"><![CDATA[
    \forall  c \in  \mathcal {C}. \mathcal {C} (\operatorname {colim} F, c) \cong  [J, \mathcal {C}] (F, \mathrm {const}_{c})
  ]]></fr:tex>
  means that every cocone with tip <fr:tex display="inline"><![CDATA[c]]></fr:tex> is in (order-preserving) bijection with a morphism <fr:tex display="inline"><![CDATA[\operatorname {colim} F \to  c]]></fr:tex> of <fr:tex display="inline"><![CDATA[\mathcal {C}]]></fr:tex>, and this is precisely what it means for <fr:tex display="inline"><![CDATA[\operatorname {colim} F]]></fr:tex> to be the tip of a <html:em>universal</html:em> cocone — that every cocone factors uniquely through the one with tip <fr:tex display="inline"><![CDATA[\operatorname {colim} F]]></fr:tex>.
</html:p><html:p>
  We can observe further, letting <fr:tex display="inline"><![CDATA[\mathbf {1} \coloneqq  \set {*}]]></fr:tex> denote the terminal poset, that there is an isomorphism
  <fr:tex display="block"><![CDATA[
    [J, \mathcal {C}] (F, \mathrm {const}_{c}) \cong  [{J}^\mathrm {op}, \mathbf {Pos}] (\mathrm {const}_{\mathbf {1}}, \mathcal {C} (F -, c)),
  ]]></fr:tex>
  witnessed by the map
  <fr:tex display="block"><![CDATA[
    {F \xRightarrow {\alpha } \mathrm {const}_{c}} \xmapsto {\sim } {\mathrm {const}_{\mathbf {1}} \xRightarrow {\alpha ^\prime } \mathcal {C} (F -, c)}
  ]]></fr:tex>
  where <fr:tex display="inline"><![CDATA[\alpha ^\prime ]]></fr:tex> is given component-wise as <fr:tex display="inline"><![CDATA[\alpha ^\prime _x (*) = \alpha _x]]></fr:tex>.
</html:p><html:p>
  A <fr:link href="/coherent-inverses-KV1B/" title="weighted colimit" uri="https://forest.nickx.hu/coherent-inverses-KV1B/" display-uri="coherent-inverses-KV1B" type="local">weighted colimit</fr:link> is a colimit of generalised shape, replacing <fr:tex display="inline"><![CDATA[\mathrm {const}_{\mathbf {1}}]]></fr:tex> with any <fr:tex display="inline"><![CDATA[{{J}^\mathrm {op} \xrightarrow {W} \mathbf {Pos}}]]></fr:tex>.
  Explicitly, at each object <fr:tex display="inline"><![CDATA[j \in  J]]></fr:tex>, there is a poset <fr:tex display="inline"><![CDATA[W (j)]]></fr:tex> of ‘legs’ emanating from <fr:tex display="inline"><![CDATA[F (j)]]></fr:tex>, valued in the Hom poset <fr:tex display="inline"><![CDATA[\mathcal {C} (F (j), \operatorname {colim}^{W} F)]]></fr:tex>, packaged as a natural transformation <fr:tex display="inline"><![CDATA[{W \xRightarrow {\iota } \mathcal {C} (F -, \operatorname {colim}^{W} F)}]]></fr:tex>.
</html:p></fr:mainmatter></fr:tree><html:p>
          It was first observed by <html:span class="textual" tid="Theorem 11" uid="limits-indexed-by-category-valued-2-functors"><fr:link href="/limits-indexed-by-category-valued-2-functors/" title="Limits indexed by category-valued 2-functors" uri="https://forest.nickx.hu/limits-indexed-by-category-valued-2-functors/" display-uri="limits-indexed-by-category-valued-2-functors" type="local">[Theorem 11, limits-indexed-by-category-valued-2-functors]</fr:link></html:span>, in the 2-categorical case, that an <fr:link href="/coherent-inverses-QTSK/" title="oplax colimit" uri="https://forest.nickx.hu/coherent-inverses-QTSK/" display-uri="coherent-inverses-QTSK" type="local">oplax colimit</fr:link> is induced as a <fr:link href="/coherent-inverses-KV1B/" title="weighted colimit" uri="https://forest.nickx.hu/coherent-inverses-KV1B/" display-uri="coherent-inverses-KV1B" type="local">weighted colimit</fr:link> for a specific weight; here, we refine the notion for <fr:tex display="inline"><![CDATA[\mathbf {Pos}]]></fr:tex>-categories.
        </html:p><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>7</fr:month><fr:day>29</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-654O/</fr:uri><fr:display-uri>coherent-inverses-654O</fr:display-uri><fr:route>/coherent-inverses-654O/</fr:route><fr:title text="oplax weight"><fr:link href="/coherent-inverses-654O/" title="oplax weight" uri="https://forest.nickx.hu/coherent-inverses-654O/" display-uri="coherent-inverses-654O" type="local">oplax weight</fr:link></fr:title><fr:taxon>definition</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
  Let <fr:tex display="inline"><![CDATA[{J \xrightarrow {F} \mathcal {C}}]]></fr:tex> be a <fr:tex display="inline"><![CDATA[\mathbf {Pos}]]></fr:tex>-functor.
  The <fr:link href="/coherent-inverses-QTSK/" title="oplax colimit" uri="https://forest.nickx.hu/coherent-inverses-QTSK/" display-uri="coherent-inverses-QTSK" type="local">oplax colimit</fr:link> of <fr:tex display="inline"><![CDATA[F]]></fr:tex> is equivalently given by the <fr:link href="/coherent-inverses-KV1B/" title="weighted colimit" uri="https://forest.nickx.hu/coherent-inverses-KV1B/" display-uri="coherent-inverses-KV1B" type="local">weighted colimit</fr:link> <fr:tex display="inline"><![CDATA[\operatorname {colim}^{L_{J}} F]]></fr:tex> where the weight <fr:tex display="inline"><![CDATA[{{J}^\mathrm {op} \xrightarrow {L_{J}} \mathbf {Pos}}]]></fr:tex> sends each <fr:tex display="inline"><![CDATA[j \in  J]]></fr:tex> to the set of morphisms in <fr:tex display="inline"><![CDATA[J]]></fr:tex> with domain <fr:tex display="inline"><![CDATA[j]]></fr:tex>, ordered by <fr:tex display="inline"><![CDATA[u \leq  v]]></fr:tex> whenever there exists some <fr:tex display="inline"><![CDATA[J]]></fr:tex>-morphism <fr:tex display="inline"><![CDATA[x \to  y]]></fr:tex> which oplaxly extends <fr:tex display="inline"><![CDATA[u]]></fr:tex> to <fr:tex display="inline"><![CDATA[v]]></fr:tex>:
  
  
  
  <html:figure><fr:resource hash="2602a5d375938978df9d91494031ae04"><fr:resource-content><html:img src="/2602a5d375938978df9d91494031ae04.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[
       \usepackage{amsmath,amssymb}
  \usepackage{mathtools}
  \usepackage{stmaryrd}
  \newcommand{\set}[1]{\left\{#1\right\}}
     \usepackage {tikz}
     \usetikzlibrary {cd}
     \usetikzlibrary {}
     
  \definecolor {green}{RGB}{27,158,119}
  \definecolor {orange}{RGB}{217,95,2}
  \definecolor {purple}{RGB}{117,112,179}

     
    ]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
      \begin {tikzcd}[]
        & y \\
        j
        \ar [r, , "u"']
        \ar [ur, , "v", ""'{name=L}]
        & |[alias=R]| x ,
        \ar [u, , "\exists "']
        \ar [from=L, to=R, Leftarrow, ""]
      \end {tikzcd}
    ]]></fr:resource-source></fr:resource></html:figure>



  which is something like the oplax coslice <fr:tex display="inline"><![CDATA[j / J]]></fr:tex> as a poset.
</html:p><html:p>
  Each <fr:tex display="inline"><![CDATA[J]]></fr:tex>-morphism <fr:tex display="inline"><![CDATA[{j \xrightarrow {f} j^\prime }]]></fr:tex> is sent to the monotone map of precomposition by <fr:tex display="inline"><![CDATA[f]]></fr:tex>, which preserves identity, composition, and is itself monotone.
</html:p></fr:mainmatter></fr:tree><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>9</fr:month><fr:day>5</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-RQWC/</fr:uri><fr:display-uri>coherent-inverses-RQWC</fr:display-uri><fr:route>/coherent-inverses-RQWC/</fr:route><fr:title text="example [https://forest.nickx.hu/coherent-inverses-J1Q9/] via weighted colimits"><fr:link href="/coherent-inverses-J1Q9/" title="oplax colimits not given by terminal index" uri="https://forest.nickx.hu/coherent-inverses-J1Q9/" display-uri="coherent-inverses-J1Q9" type="local">example <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-J1Q9/" display-uri="coherent-inverses-J1Q9" /></fr:link> via <fr:link href="/coherent-inverses-KV1B/" title="weighted colimit" uri="https://forest.nickx.hu/coherent-inverses-KV1B/" display-uri="coherent-inverses-KV1B" type="local">weighted colimits</fr:link></fr:title><fr:taxon>example</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
  Assuming the same setup as <fr:link href="/coherent-inverses-J1Q9/" title="oplax colimits not given by terminal index" uri="https://forest.nickx.hu/coherent-inverses-J1Q9/" display-uri="coherent-inverses-J1Q9" type="local">example <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-J1Q9/" display-uri="coherent-inverses-J1Q9" /></fr:link>, deduce the <fr:link href="/coherent-inverses-654O/" title="oplax weight" uri="https://forest.nickx.hu/coherent-inverses-654O/" display-uri="coherent-inverses-654O" type="local">oplax weight</fr:link> as the <fr:tex display="inline"><![CDATA[\mathbf {Pos}]]></fr:tex>-functor whose image in <fr:tex display="inline"><![CDATA[\mathbf {Pos}]]></fr:tex> is
  
  
  
  
  <html:figure><fr:resource hash="ccf9ee9cda7b6919ad150ed12eb1d4e0"><fr:resource-content><html:img src="/ccf9ee9cda7b6919ad150ed12eb1d4e0.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[
       \usepackage{amsmath,amssymb}
  \usepackage{mathtools}
  \usepackage{stmaryrd}
  \newcommand{\set}[1]{\left\{#1\right\}}
     \usepackage {tikz}
     \usetikzlibrary {cd}
     \usetikzlibrary {}
     
  \definecolor {green}{RGB}{27,158,119}
  \definecolor {orange}{RGB}{217,95,2}
  \definecolor {purple}{RGB}{117,112,179}

     
    ]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
      \begin {tikzcd}[]
    \{ 
  \text {id}_{0}
 \leq  0 \to  1 \} \\
    \{ 
  \text {id}_{1}
 \}. \ar [u, mapsto, "- \circ  (0 \to  1)"'] \end {tikzcd}
    ]]></fr:resource-source></fr:resource></html:figure></html:p><html:p>
  Via <fr:link href="/coherent-inverses-CSVT/" title="weighted colimits as generalised cocones" uri="https://forest.nickx.hu/coherent-inverses-CSVT/" display-uri="coherent-inverses-CSVT" type="local">remark <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-CSVT/" display-uri="coherent-inverses-CSVT" /></fr:link>, this says that a generalised cocone with respect to this weight for the diagram <fr:tex display="inline"><![CDATA[F]]></fr:tex> with tip <fr:tex display="inline"><![CDATA[c]]></fr:tex> is one which has two legs <fr:tex display="inline"><![CDATA[\iota _{
  \text {id}_{0}
}]]></fr:tex> and <fr:tex display="inline"><![CDATA[\iota _{0 \to  1}]]></fr:tex> over <fr:tex display="inline"><![CDATA[F (0) = x]]></fr:tex> and one leg <fr:tex display="inline"><![CDATA[\iota _{
  \text {id}_{1}
}]]></fr:tex> over <fr:tex display="inline"><![CDATA[F (1) = y]]></fr:tex>, and moreover the top leg <fr:tex display="inline"><![CDATA[\iota _{0 \to  1}]]></fr:tex> must be <fr:tex display="inline"><![CDATA[\iota _{
  \text {id}_{1}
} \circ  F (0 \to  1) = \iota _{
  \text {id}_{1}
} \circ  f]]></fr:tex>.
  Pictorially, this looks like
  
  
  
  <html:figure><fr:resource hash="9ae97eb5b9b387c45164a986f4154f5e"><fr:resource-content><html:img src="/9ae97eb5b9b387c45164a986f4154f5e.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[
       \usepackage{amsmath,amssymb}
  \usepackage{mathtools}
  \usepackage{stmaryrd}
  \newcommand{\set}[1]{\left\{#1\right\}}
     \usepackage {tikz}
     \usetikzlibrary {cd}
     \usetikzlibrary {}
     
  \definecolor {green}{RGB}{27,158,119}
  \definecolor {orange}{RGB}{217,95,2}
  \definecolor {purple}{RGB}{117,112,179}

     
    ]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
      \begin {tikzcd}[column sep=huge, row sep=large]
    & c \\
    x \ar [r, "f"'] \ar [ur, bend left=15, "\iota _{
  \text {id}_{1}
} \circ  f", ""'{alias=L}] \ar [ur, bend right=15, "\iota _{
  \text {id}_{0}
}"', ""{alias=R}] & y, \ar [u, "\iota _{
  \text {id}_{1}
}"']
    \ar [from=R,to=L,Rightarrow, shorten=-3pt]
  \end {tikzcd}
    ]]></fr:resource-source></fr:resource></html:figure>



  which is exactly what it means for <fr:tex display="inline"><![CDATA[\iota _{
  \text {id}_{0}
}]]></fr:tex> and <fr:tex display="inline"><![CDATA[\iota _{
  \text {id}_{1}
}]]></fr:tex> to form an <fr:link href="/coherent-inverses-W0JK/" title="oplax cocone" uri="https://forest.nickx.hu/coherent-inverses-W0JK/" display-uri="coherent-inverses-W0JK" type="local">oplax cocone</fr:link> over <fr:tex display="inline"><![CDATA[F]]></fr:tex>.
</html:p></fr:mainmatter></fr:tree><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>9</fr:month><fr:day>5</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-6J1T/</fr:uri><fr:display-uri>coherent-inverses-6J1T</fr:display-uri><fr:route>/coherent-inverses-6J1T/</fr:route><fr:title text="oplax colimit is a weighted colimit"><fr:link href="/coherent-inverses-QTSK/" title="oplax colimit" uri="https://forest.nickx.hu/coherent-inverses-QTSK/" display-uri="coherent-inverses-QTSK" type="local">oplax colimit</fr:link> is a <fr:link href="/coherent-inverses-KV1B/" title="weighted colimit" uri="https://forest.nickx.hu/coherent-inverses-KV1B/" display-uri="coherent-inverses-KV1B" type="local">weighted colimit</fr:link></fr:title><fr:taxon>lemma</fr:taxon><fr:meta name="source"><html:span tid="Theorem 11" uid="limits-indexed-by-category-valued-2-functors"><fr:link href="/limits-indexed-by-category-valued-2-functors/" title="Limits indexed by category-valued 2-functors" uri="https://forest.nickx.hu/limits-indexed-by-category-valued-2-functors/" display-uri="limits-indexed-by-category-valued-2-functors" type="local">[Theorem 11, limits-indexed-by-category-valued-2-functors]</fr:link></html:span></fr:meta></fr:frontmatter><fr:mainmatter><html:p>
  For a <fr:tex display="inline"><![CDATA[\mathbf {Pos}]]></fr:tex>-functor <fr:tex display="inline"><![CDATA[F]]></fr:tex>, whenever it exists, its <fr:link href="/coherent-inverses-QTSK/" title="oplax colimit" uri="https://forest.nickx.hu/coherent-inverses-QTSK/" display-uri="coherent-inverses-QTSK" type="local">oplax colimit</fr:link> is given by a <fr:link href="/coherent-inverses-KV1B/" title="weighted colimit" uri="https://forest.nickx.hu/coherent-inverses-KV1B/" display-uri="coherent-inverses-KV1B" type="local">weighted colimit</fr:link> with respect to the weight <fr:tex display="inline"><![CDATA[L_{J}]]></fr:tex> as in <fr:link href="/coherent-inverses-654O/" title="oplax weight" uri="https://forest.nickx.hu/coherent-inverses-654O/" display-uri="coherent-inverses-654O" type="local">definition <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-654O/" display-uri="coherent-inverses-654O" /></fr:link>:
  <fr:tex display="block"><![CDATA[
    \operatorname {olcolim} F \cong  \operatorname {colim}^{L_{J}} F.
  ]]></fr:tex></html:p></fr:mainmatter></fr:tree><html:p>
          With this understanding of <fr:link href="/coherent-inverses-QTSK/" title="oplax colimit" uri="https://forest.nickx.hu/coherent-inverses-QTSK/" display-uri="coherent-inverses-QTSK" type="local">oplax colimit</fr:link>, we seek to refine the weight to find some intermediate notion of <fr:link href="/coherent-inverses-KV1B/" title="weighted colimit" uri="https://forest.nickx.hu/coherent-inverses-KV1B/" display-uri="coherent-inverses-KV1B" type="local">weighted colimit</fr:link> that interpolates between an ordinary (conical) colimit (which is very strict) and an <fr:link href="/coherent-inverses-QTSK/" title="oplax colimit" uri="https://forest.nickx.hu/coherent-inverses-QTSK/" display-uri="coherent-inverses-QTSK" type="local">oplax colimit</fr:link> (which is very lax).
          To do so, we introduce the notion of <fr:link href="/coherent-inverses-S9V9/" title="marked colimit" uri="https://forest.nickx.hu/coherent-inverses-S9V9/" display-uri="coherent-inverses-S9V9" type="local">marked colimit</fr:link>.
        </html:p><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>9</fr:month><fr:day>5</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-5VBZ/</fr:uri><fr:display-uri>coherent-inverses-5VBZ</fr:display-uri><fr:route>/coherent-inverses-5VBZ/</fr:route><fr:title text="marking"><fr:link href="/coherent-inverses-5VBZ/" title="marking" uri="https://forest.nickx.hu/coherent-inverses-5VBZ/" display-uri="coherent-inverses-5VBZ" type="local">marking</fr:link></fr:title><fr:taxon>definition</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
  Given a <fr:tex display="inline"><![CDATA[\mathbf {Pos}]]></fr:tex>-functor <fr:tex display="inline"><![CDATA[{J \xrightarrow {F} \mathcal {C}}]]></fr:tex>, a <fr:link href="/coherent-inverses-5VBZ/" title="marking" uri="https://forest.nickx.hu/coherent-inverses-5VBZ/" display-uri="coherent-inverses-5VBZ" type="local">marking</fr:link> <fr:tex display="inline"><![CDATA[\mathbf {M}]]></fr:tex> is a class of morphisms of <fr:tex display="inline"><![CDATA[J]]></fr:tex> which includes all of the identities and is closed under composition.
</html:p></fr:mainmatter></fr:tree><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>9</fr:month><fr:day>5</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-C2BO/</fr:uri><fr:display-uri>coherent-inverses-C2BO</fr:display-uri><fr:route>/coherent-inverses-C2BO/</fr:route><fr:title text="marked weight"><fr:link href="/coherent-inverses-C2BO/" title="marked weight" uri="https://forest.nickx.hu/coherent-inverses-C2BO/" display-uri="coherent-inverses-C2BO" type="local">marked weight</fr:link></fr:title><fr:taxon>definition</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
  The <fr:link href="/coherent-inverses-C2BO/" title="marked weight" uri="https://forest.nickx.hu/coherent-inverses-C2BO/" display-uri="coherent-inverses-C2BO" type="local">marked weight</fr:link> <fr:tex display="inline"><![CDATA[{{J}^\mathrm {op} \xrightarrow {{\mathbf {M}}_{J}} \mathbf {Pos}}]]></fr:tex> associated to a <fr:tex display="inline"><![CDATA[\mathbf {Pos}]]></fr:tex>-functor <fr:tex display="inline"><![CDATA[{J \xrightarrow {F} \mathcal {C}}]]></fr:tex> equipped with a <fr:link href="/coherent-inverses-5VBZ/" title="marking" uri="https://forest.nickx.hu/coherent-inverses-5VBZ/" display-uri="coherent-inverses-5VBZ" type="local">marking</fr:link> <fr:tex display="inline"><![CDATA[\mathbf {M}]]></fr:tex> is defined similarly to the <fr:link href="/coherent-inverses-654O/" title="oplax weight" uri="https://forest.nickx.hu/coherent-inverses-654O/" display-uri="coherent-inverses-654O" type="local">oplax weight</fr:link> <fr:tex display="inline"><![CDATA[L_{J}]]></fr:tex> (<fr:link href="/coherent-inverses-654O/" title="oplax weight" uri="https://forest.nickx.hu/coherent-inverses-654O/" display-uri="coherent-inverses-654O" type="local">definition <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-654O/" display-uri="coherent-inverses-654O" /></fr:link>), except each poset in its image is additionally <fr:link href="/coherent-inverses-72BQ/" title="Localisation of a poset" uri="https://forest.nickx.hu/coherent-inverses-72BQ/" display-uri="coherent-inverses-72BQ" type="local">localised</fr:link> at
  <fr:tex display="block"><![CDATA[
    \set { 
  \text {id}_{x}
 \leq  f : {x \xrightarrow {f} y} \in  \mathbf {M} }.
  ]]></fr:tex></html:p><html:p>
  The fact that <fr:tex display="inline"><![CDATA[\mathbf {M}]]></fr:tex> is closed under composition ensures that <fr:tex display="inline"><![CDATA[{\mathbf {M}}_{J}]]></fr:tex> is well-defined as a <fr:tex display="inline"><![CDATA[\mathbf {Pos}]]></fr:tex>-functor (on morphisms).
</html:p></fr:mainmatter></fr:tree><html:p>
          Recall that each poset in the image of the weight for a <fr:link href="/coherent-inverses-KV1B/" title="weighted colimit" uri="https://forest.nickx.hu/coherent-inverses-KV1B/" display-uri="coherent-inverses-KV1B" type="local">weighted colimit</fr:link> specifies how many distinct legs live over any particular <fr:tex display="inline"><![CDATA[j \in  J]]></fr:tex>; this localisation strictifies the <fr:link href="/coherent-inverses-654O/" title="oplax weight" uri="https://forest.nickx.hu/coherent-inverses-654O/" display-uri="coherent-inverses-654O" type="local">oplax weight</fr:link> by forcing some of those legs to be identified — namely, those that are connected by <fr:link href="/coherent-inverses-5VBZ/" title="marking" uri="https://forest.nickx.hu/coherent-inverses-5VBZ/" display-uri="coherent-inverses-5VBZ" type="local">marked</fr:link> morphisms.
        </html:p><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>9</fr:month><fr:day>5</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-S9V9/</fr:uri><fr:display-uri>coherent-inverses-S9V9</fr:display-uri><fr:route>/coherent-inverses-S9V9/</fr:route><fr:title text="marked colimit"><fr:link href="/coherent-inverses-S9V9/" title="marked colimit" uri="https://forest.nickx.hu/coherent-inverses-S9V9/" display-uri="coherent-inverses-S9V9" type="local">marked colimit</fr:link></fr:title><fr:taxon>definition</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
  The <fr:link href="/coherent-inverses-S9V9/" title="marked colimit" uri="https://forest.nickx.hu/coherent-inverses-S9V9/" display-uri="coherent-inverses-S9V9" type="local">marked colimit</fr:link> of a <fr:tex display="inline"><![CDATA[\mathbf {Pos}]]></fr:tex>-functor <fr:tex display="inline"><![CDATA[{J \xrightarrow {F} \mathcal {C}}]]></fr:tex> equipped with a <fr:link href="/coherent-inverses-5VBZ/" title="marking" uri="https://forest.nickx.hu/coherent-inverses-5VBZ/" display-uri="coherent-inverses-5VBZ" type="local">marking</fr:link> <fr:tex display="inline"><![CDATA[\mathbf {M}]]></fr:tex>, when it exists, is given by the <fr:link href="/coherent-inverses-KV1B/" title="weighted colimit" uri="https://forest.nickx.hu/coherent-inverses-KV1B/" display-uri="coherent-inverses-KV1B" type="local">weighted colimit</fr:link> <fr:tex display="inline"><![CDATA[\operatorname {colim}^{{\mathbf {M}}_{J}} F]]></fr:tex> with respect to the <fr:link href="/coherent-inverses-C2BO/" title="marked weight" uri="https://forest.nickx.hu/coherent-inverses-C2BO/" display-uri="coherent-inverses-C2BO" type="local">marked weight</fr:link> <fr:tex display="inline"><![CDATA[{\mathbf {M}}_{J}]]></fr:tex>.
</html:p></fr:mainmatter></fr:tree><html:p>
          It is clear that when the <fr:link href="/coherent-inverses-5VBZ/" title="marking" uri="https://forest.nickx.hu/coherent-inverses-5VBZ/" display-uri="coherent-inverses-5VBZ" type="local">marking</fr:link> is minimal (i.e. containing only identity morphisms), the notion of <fr:link href="/coherent-inverses-S9V9/" title="marked colimit" uri="https://forest.nickx.hu/coherent-inverses-S9V9/" display-uri="coherent-inverses-S9V9" type="local">marked colimit</fr:link> coincides exactly with <fr:link href="/coherent-inverses-QTSK/" title="oplax colimit" uri="https://forest.nickx.hu/coherent-inverses-QTSK/" display-uri="coherent-inverses-QTSK" type="local">oplax colimit</fr:link>.
          Moreover, when the <fr:link href="/coherent-inverses-5VBZ/" title="marking" uri="https://forest.nickx.hu/coherent-inverses-5VBZ/" display-uri="coherent-inverses-5VBZ" type="local">marking</fr:link> is maximal (containing all possible morphisms), then a <fr:link href="/coherent-inverses-S9V9/" title="marked colimit" uri="https://forest.nickx.hu/coherent-inverses-S9V9/" display-uri="coherent-inverses-S9V9" type="local">marked colimit</fr:link> is a colimit, as the following example illustrates.
        </html:p><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>9</fr:month><fr:day>6</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-SHM3/</fr:uri><fr:display-uri>coherent-inverses-SHM3</fr:display-uri><fr:route>/coherent-inverses-SHM3/</fr:route><fr:title text="example [https://forest.nickx.hu/coherent-inverses-Q4FX/] with marked colimits"><fr:link href="/coherent-inverses-Q4FX/" title="oplax colimits unstable under extension by identity" uri="https://forest.nickx.hu/coherent-inverses-Q4FX/" display-uri="coherent-inverses-Q4FX" type="local">example <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-Q4FX/" display-uri="coherent-inverses-Q4FX" /></fr:link> with <fr:link href="/coherent-inverses-S9V9/" title="marked colimit" uri="https://forest.nickx.hu/coherent-inverses-S9V9/" display-uri="coherent-inverses-S9V9" type="local">marked colimits</fr:link></fr:title><fr:taxon>example</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
  We will re-examine <fr:link href="/coherent-inverses-Q4FX/" title="oplax colimits unstable under extension by identity" uri="https://forest.nickx.hu/coherent-inverses-Q4FX/" display-uri="coherent-inverses-Q4FX" type="local">example <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-Q4FX/" display-uri="coherent-inverses-Q4FX" /></fr:link> in the context of <fr:link href="/coherent-inverses-S9V9/" title="marked colimit" uri="https://forest.nickx.hu/coherent-inverses-S9V9/" display-uri="coherent-inverses-S9V9" type="local">marked colimits</fr:link>.
  Recall that the reason that the diagram <fr:tex display="inline"><![CDATA[F^\prime ]]></fr:tex> did not admit an <fr:link href="/coherent-inverses-QTSK/" title="oplax colimit" uri="https://forest.nickx.hu/coherent-inverses-QTSK/" display-uri="coherent-inverses-QTSK" type="local">oplax colimit</fr:link> was due to the presence of too many <fr:link href="/coherent-inverses-W0JK/" title="oplax cocone" uri="https://forest.nickx.hu/coherent-inverses-W0JK/" display-uri="coherent-inverses-W0JK" type="local">oplax cocones</fr:link>.
</html:p><html:p>
  If instead we equip to <fr:tex display="inline"><![CDATA[F^\prime ]]></fr:tex> the <fr:link href="/coherent-inverses-5VBZ/" title="marking" uri="https://forest.nickx.hu/coherent-inverses-5VBZ/" display-uri="coherent-inverses-5VBZ" type="local">marking</fr:link> <fr:tex display="inline"><![CDATA[\mathbf {M}]]></fr:tex> which selects all morphisms of <fr:tex display="inline"><![CDATA[J^\prime ]]></fr:tex>, then the <fr:link href="/coherent-inverses-C2BO/" title="marked weight" uri="https://forest.nickx.hu/coherent-inverses-C2BO/" display-uri="coherent-inverses-C2BO" type="local">marked weight</fr:link> <fr:tex display="inline"><![CDATA[\mathbf {M}_{J^\prime }]]></fr:tex> becomes the <fr:tex display="inline"><![CDATA[\mathbf {Pos}]]></fr:tex>-functor which is constant at the point; i.e., the generalised cocones associated to this weight are ordinary cocones, and the <fr:link href="/coherent-inverses-S9V9/" title="marked colimit" uri="https://forest.nickx.hu/coherent-inverses-S9V9/" display-uri="coherent-inverses-S9V9" type="local">marked colimit</fr:link> in this case coincides with the colimit (as in <fr:link href="/coherent-inverses-CSVT/" title="weighted colimits as generalised cocones" uri="https://forest.nickx.hu/coherent-inverses-CSVT/" display-uri="coherent-inverses-CSVT" type="local">remark <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-CSVT/" display-uri="coherent-inverses-CSVT" /></fr:link>), which we obtain as <fr:tex display="inline"><![CDATA[x]]></fr:tex> equipped with identity morphisms for legs.
</html:p></fr:mainmatter></fr:tree><html:p>
          We can further use <fr:link href="/coherent-inverses-CSVT/" title="weighted colimits as generalised cocones" uri="https://forest.nickx.hu/coherent-inverses-CSVT/" display-uri="coherent-inverses-CSVT" type="local">remark <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-CSVT/" display-uri="coherent-inverses-CSVT" /></fr:link> to develop an explicit description of <fr:link href="/coherent-inverses-S9V9/" title="marked colimit" uri="https://forest.nickx.hu/coherent-inverses-S9V9/" display-uri="coherent-inverses-S9V9" type="local">marked colimit</fr:link>.
        </html:p><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>9</fr:month><fr:day>17</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-5128/</fr:uri><fr:display-uri>coherent-inverses-5128</fr:display-uri><fr:route>/coherent-inverses-5128/</fr:route><fr:title text="marked cocone"><fr:link href="/coherent-inverses-5128/" title="marked cocone" uri="https://forest.nickx.hu/coherent-inverses-5128/" display-uri="coherent-inverses-5128" type="local">marked cocone</fr:link></fr:title><fr:taxon>definition</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
  Given a <fr:tex display="inline"><![CDATA[\mathbf {Pos}]]></fr:tex>-functor <fr:tex display="inline"><![CDATA[{J \xrightarrow {F} \mathcal {C}}]]></fr:tex> equipped with a <fr:link href="/coherent-inverses-5VBZ/" title="marking" uri="https://forest.nickx.hu/coherent-inverses-5VBZ/" display-uri="coherent-inverses-5VBZ" type="local">marking</fr:link> <fr:tex display="inline"><![CDATA[\mathbf {M}]]></fr:tex>, a <fr:link href="/coherent-inverses-5128/" title="marked cocone" uri="https://forest.nickx.hu/coherent-inverses-5128/" display-uri="coherent-inverses-5128" type="local">marked cocone</fr:link> over <fr:tex display="inline"><![CDATA[c \in  \mathcal {C}]]></fr:tex> is given by a <fr:link href="/coherent-inverses-UKT4/" title="lax natural transformation" uri="https://forest.nickx.hu/coherent-inverses-UKT4/" display-uri="coherent-inverses-UKT4" type="local">lax natural transformation</fr:link> <fr:tex display="inline"><![CDATA[{F \xRightarrow {\alpha } \mathrm {const}_{c}}]]></fr:tex> where for each <fr:tex display="inline"><![CDATA[{j \xrightarrow {f} j^\prime }]]></fr:tex> in <fr:tex display="inline"><![CDATA[\mathbf {M}]]></fr:tex>, the lax naturality square
  
  
  
  <html:figure><fr:resource hash="8936d9b733bf5ee65d546fa6ce511a67"><fr:resource-content><html:img src="/8936d9b733bf5ee65d546fa6ce511a67.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[
       \usepackage{amsmath,amssymb}
  \usepackage{mathtools}
  \usepackage{stmaryrd}
  \newcommand{\set}[1]{\left\{#1\right\}}
     \usepackage {tikz}
     \usetikzlibrary {cd}
     \usetikzlibrary {}
     
  \definecolor {green}{RGB}{27,158,119}
  \definecolor {orange}{RGB}{217,95,2}
  \definecolor {purple}{RGB}{117,112,179}

     
    ]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
      \begin {tikzcd}[]
        F j
        \ar [rr, , "F f"]
        \ar [rd, , "\alpha _j"', ""{name=L}]
        && F j^\prime 
        \ar [ld, , "\alpha _j^\prime "] \\
        & c 
        \ar [from=L, to=1-3, near start, Rightarrow, shorten >=10pt, "\sim "']
      \end {tikzcd}
    ]]></fr:resource-source></fr:resource></html:figure>



  is required to commute <html:em>strictly</html:em> (i.e. it inverts).
</html:p><html:p>
  Equivalently, this is an <fr:link href="/coherent-inverses-W0JK/" title="oplax cocone" uri="https://forest.nickx.hu/coherent-inverses-W0JK/" display-uri="coherent-inverses-W0JK" type="local">oplax cocone</fr:link> where some of the 2-cell fillers are required to be invertible, as determined by the <fr:link href="/coherent-inverses-5VBZ/" title="marking" uri="https://forest.nickx.hu/coherent-inverses-5VBZ/" display-uri="coherent-inverses-5VBZ" type="local">marking</fr:link> <fr:tex display="inline"><![CDATA[\mathbf {M}]]></fr:tex>.
</html:p><html:p>
  We denote the poset of <fr:link href="/coherent-inverses-5128/" title="marked cocone" uri="https://forest.nickx.hu/coherent-inverses-5128/" display-uri="coherent-inverses-5128" type="local">marked cocones</fr:link> between two <fr:tex display="inline"><![CDATA[\mathbf {Pos}]]></fr:tex>-functors <fr:tex display="inline"><![CDATA[{J \xrightarrow {F} \mathcal {C}}]]></fr:tex> and <fr:tex display="inline"><![CDATA[{J \xrightarrow {G} \mathcal {C}}]]></fr:tex> as <fr:tex display="inline"><![CDATA[\mathbf {Lax}^\mathbf {M} (F, G)]]></fr:tex>.
</html:p></fr:mainmatter></fr:tree><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>9</fr:month><fr:day>17</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-N8XL/</fr:uri><fr:display-uri>coherent-inverses-N8XL</fr:display-uri><fr:route>/coherent-inverses-N8XL/</fr:route><fr:title text="marked colimit is a universal marked cocone"><fr:link href="/coherent-inverses-S9V9/" title="marked colimit" uri="https://forest.nickx.hu/coherent-inverses-S9V9/" display-uri="coherent-inverses-S9V9" type="local">marked colimit</fr:link> is a universal <fr:link href="/coherent-inverses-5128/" title="marked cocone" uri="https://forest.nickx.hu/coherent-inverses-5128/" display-uri="coherent-inverses-5128" type="local">marked cocone</fr:link></fr:title><fr:taxon>proposition</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
  A <fr:tex display="inline"><![CDATA[\mathbf {Pos}]]></fr:tex>-functor <fr:tex display="inline"><![CDATA[{J \xrightarrow {F} \mathcal {C}}]]></fr:tex> equipped with a <fr:link href="/coherent-inverses-5VBZ/" title="marking" uri="https://forest.nickx.hu/coherent-inverses-5VBZ/" display-uri="coherent-inverses-5VBZ" type="local">marking</fr:link> <fr:tex display="inline"><![CDATA[\mathbf {M}]]></fr:tex> has a <fr:link href="/coherent-inverses-S9V9/" title="marked colimit" uri="https://forest.nickx.hu/coherent-inverses-S9V9/" display-uri="coherent-inverses-S9V9" type="local">marked colimit</fr:link> if and only if it admits a universal <fr:link href="/coherent-inverses-5128/" title="marked cocone" uri="https://forest.nickx.hu/coherent-inverses-5128/" display-uri="coherent-inverses-5128" type="local">marked cocone</fr:link>; that is, a <fr:link href="/coherent-inverses-5128/" title="marked cocone" uri="https://forest.nickx.hu/coherent-inverses-5128/" display-uri="coherent-inverses-5128" type="local">marked cocone</fr:link> <fr:tex display="inline"><![CDATA[{F \xRightarrow {\iota } \mathrm {const}_{c}}]]></fr:tex> such that any other <fr:link href="/coherent-inverses-5128/" title="marked cocone" uri="https://forest.nickx.hu/coherent-inverses-5128/" display-uri="coherent-inverses-5128" type="local">marked cocone</fr:link> <fr:tex display="inline"><![CDATA[{F \xRightarrow {\alpha } \mathrm {const}_{c^\prime }}]]></fr:tex> factors through <fr:tex display="inline"><![CDATA[\iota ]]></fr:tex> uniquely by some morphism
  <fr:tex display="block"><![CDATA[
    {c \xrightarrow {u} c^\prime }.
  ]]></fr:tex></html:p><html:p>
  Succinctly, <fr:tex display="inline"><![CDATA[c]]></fr:tex> is an object of <fr:tex display="inline"><![CDATA[\mathcal {C}]]></fr:tex> such that, for any other object <fr:tex display="inline"><![CDATA[c^\prime ]]></fr:tex>, there is an order isomorphism of Hom posets:
  <fr:tex display="block"><![CDATA[
    \mathcal {C} (c, c^\prime ) \cong  \mathbf {Lax}^\mathbf {M} (F, \mathrm {const}_{c^\prime }).
  ]]></fr:tex></html:p>
 
   
   <fr:tree show-metadata="false" toc="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>9</fr:month><fr:day>17</fr:day></fr:date><fr:taxon>proof</fr:taxon></fr:frontmatter><fr:mainmatter>
  <html:p>
    It suffices to show that there is an order isomorphism
    <fr:tex display="block"><![CDATA[
      {\mathbf {Lax}^\mathbf {M} (F, \mathrm {const}_{c^\prime }) \overset {\theta }{\cong } [{J}^\mathrm {op}, \mathbf {Pos}] ({\mathbf {M}}_{J}, \mathcal {C} (F -, c^\prime ))}.
    ]]></fr:tex></html:p>
  <html:p>
    Suppose that we have some <fr:link href="/coherent-inverses-5128/" title="marked cocone" uri="https://forest.nickx.hu/coherent-inverses-5128/" display-uri="coherent-inverses-5128" type="local">marked cocone</fr:link> <fr:tex display="inline"><![CDATA[{F \xRightarrow {\alpha } \mathrm {const}_{c^\prime }}]]></fr:tex>; we can define a natural transformation <fr:tex display="inline"><![CDATA[\theta  (\alpha )]]></fr:tex> componentwise by
    <fr:tex display="block"><![CDATA[
      \begin {aligned}
        {\mathbf {M}}_{J} (j) &\xrightarrow {{\theta  (\alpha )}_j} \mathcal {C} (F j, c^\prime ) \\
        {j \xrightarrow {f} j^\prime } &\longmapsto  F j \xrightarrow {F f} F j^\prime  \xrightarrow {\alpha _j} c^\prime .
      \end {aligned}
    ]]></fr:tex>
    If <fr:tex display="inline"><![CDATA[f]]></fr:tex> is a <fr:link href="/coherent-inverses-5VBZ/" title="marking" uri="https://forest.nickx.hu/coherent-inverses-5VBZ/" display-uri="coherent-inverses-5VBZ" type="local">marked</fr:link> morphism in <fr:tex display="inline"><![CDATA[\mathbf {M}]]></fr:tex>, then it is identified with <fr:tex display="inline"><![CDATA[
  \text {id}_{j}
]]></fr:tex> in the poset <fr:tex display="inline"><![CDATA[{\mathbf {M}}_{J} (j)]]></fr:tex>.
    <fr:tex display="inline"><![CDATA[\theta  (\alpha )]]></fr:tex> is natural because <fr:tex display="inline"><![CDATA[{\mathbf {M}}_{J} (f) = - \circ  f]]></fr:tex>, and <fr:tex display="inline"><![CDATA[F]]></fr:tex> is a <fr:tex display="inline"><![CDATA[\mathbf {Pos}]]></fr:tex>-functor.
    <fr:tex display="inline"><![CDATA[\theta ]]></fr:tex> is injective, and an order embedding because the poset <fr:tex display="inline"><![CDATA[[{J}^\mathrm {op}, \mathbf {Pos}] ({\mathbf {M}}_{J}, \mathcal {C} (F -, c^\prime ))]]></fr:tex> is ordered pointwise.
  </html:p>
  <html:p>
    
    Now instead suppose that we have some natural transformation <fr:tex display="inline"><![CDATA[{{\mathbf {M}}_{J} \xRightarrow {\beta } \mathcal {C} (F -, c^\prime )}]]></fr:tex>.
    Define <fr:tex display="inline"><![CDATA[\theta ^{-1} (\beta )]]></fr:tex> componentwise by <fr:tex display="inline"><![CDATA[{\theta ^{-1} (\beta )}_{j} \coloneqq  \beta _j (
  \text {id}_{j}
)]]></fr:tex>.
    We need to show that <fr:tex display="inline"><![CDATA[\theta ^{-1} (\beta )]]></fr:tex> is a <fr:link href="/coherent-inverses-5128/" title="marked cocone" uri="https://forest.nickx.hu/coherent-inverses-5128/" display-uri="coherent-inverses-5128" type="local">marked cocone</fr:link> with respect to <fr:tex display="inline"><![CDATA[\mathbf {M}]]></fr:tex>.
    That is,
         
  
  
  <html:figure><fr:resource hash="976bf395ec9360c32b21bba307361c9b"><fr:resource-content><html:img src="/976bf395ec9360c32b21bba307361c9b.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[
       \usepackage{amsmath,amssymb}
  \usepackage{mathtools}
  \usepackage{stmaryrd}
  \newcommand{\set}[1]{\left\{#1\right\}}
     \usepackage {tikz}
     \usetikzlibrary {cd}
     \usetikzlibrary {}
     
  \definecolor {green}{RGB}{27,158,119}
  \definecolor {orange}{RGB}{217,95,2}
  \definecolor {purple}{RGB}{117,112,179}

     
    ]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
      \begin {tikzcd}[]
        F j
        \ar [rr, , "F f"]
        \ar [rd, , "{\theta ^{-1} (\beta )}_{j}"', ""{name=L}]
        && F j^\prime 
        \ar [ld, , "{\theta ^{-1} (\beta )}_{j^\prime }"] \\
        & c^\prime  
        \ar [from=L, to=1-3, Rightarrow, shorten >=10pt, ""']
      \end {tikzcd}
    ]]></fr:resource-source></fr:resource></html:figure>



    for each <fr:tex display="inline"><![CDATA[{j \xrightarrow {f} j^\prime }]]></fr:tex> in <fr:tex display="inline"><![CDATA[J]]></fr:tex>, where the 2-cell filler inverts if <fr:tex display="inline"><![CDATA[f]]></fr:tex> is <fr:link href="/coherent-inverses-5VBZ/" title="marking" uri="https://forest.nickx.hu/coherent-inverses-5VBZ/" display-uri="coherent-inverses-5VBZ" type="local">marked</fr:link> by <fr:tex display="inline"><![CDATA[\mathbf {M}]]></fr:tex>.
    The naturality of <fr:tex display="inline"><![CDATA[\beta ]]></fr:tex> determines an equality of morphisms
    <fr:tex display="block"><![CDATA[
      \beta _{j} (f) = \beta _{j^\prime } (
  \text {id}_{j^\prime }
) \circ  F f = {\theta ^{-1} (\beta )}_{j^\prime } \circ  F f;
    ]]></fr:tex>
    also, <fr:tex display="inline"><![CDATA[{\mathbf {M}}_{J} (j) \xrightarrow {\beta _{j}} \mathcal {C} (F j, c^\prime )]]></fr:tex> is a monotone map, so because <fr:tex display="inline"><![CDATA[
  \text {id}_{j}
 \Rightarrow  f \in  {\mathbf {M}}_{J} (j)]]></fr:tex>, deduce that
    <fr:tex display="block"><![CDATA[
      {\theta ^{-1} (\beta )}_{j} = \beta _{j} (
  \text {id}_{j}
) \Rightarrow  \beta _{j} (f) \in  \mathcal {C} (F j, c^\prime );
    ]]></fr:tex>
    combining these, we derive the 2-cell filler
    <fr:tex display="block"><![CDATA[
      {\theta ^{-1} (\beta )}_{j} \Rightarrow  {\theta ^{-1} (\beta )}_{j^\prime } \circ  F f
    ]]></fr:tex>
    which inverts when <fr:tex display="inline"><![CDATA[f]]></fr:tex> is <fr:link href="/coherent-inverses-5VBZ/" title="marking" uri="https://forest.nickx.hu/coherent-inverses-5VBZ/" display-uri="coherent-inverses-5VBZ" type="local">marked</fr:link> as required.
    A simple calculation shows that <fr:tex display="inline"><![CDATA[\theta ^{-1}]]></fr:tex> is inverse to <fr:tex display="inline"><![CDATA[\theta ]]></fr:tex>.
  </html:p>
  <html:p>
    Thus, we have established that <fr:tex display="inline"><![CDATA[\theta ]]></fr:tex> is an invertible order embedding, and hence an order isomorphism.
  </html:p>
</fr:mainmatter></fr:tree>
 
</fr:mainmatter></fr:tree></fr:mainmatter></fr:tree></fr:mainmatter></fr:tree><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2023</fr:year><fr:month>12</fr:month><fr:day>3</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-graded/</fr:uri><fr:display-uri>coherent-inverses-graded</fr:display-uri><fr:route>/coherent-inverses-graded/</fr:route><fr:title text="Colimit theory of graded \mathbf {Pos}-categories">Colimit theory of <fr:link href="/coherent-inverses-L45G/" title="graded \mathbf {Pos}-category" uri="https://forest.nickx.hu/coherent-inverses-L45G/" display-uri="coherent-inverses-L45G" type="local">graded <fr:tex display="inline"><![CDATA[\mathbf {Pos}]]></fr:tex>-categories</fr:link></fr:title><fr:taxon>section</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
        In order to deal with the pathologies outlined in <fr:link href="/coherent-inverses-Q4FX/" title="oplax colimits unstable under extension by identity" uri="https://forest.nickx.hu/coherent-inverses-Q4FX/" display-uri="coherent-inverses-Q4FX" type="local">example <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-Q4FX/" display-uri="coherent-inverses-Q4FX" /></fr:link> and <fr:link href="/coherent-inverses-J1Q9/" title="oplax colimits not given by terminal index" uri="https://forest.nickx.hu/coherent-inverses-J1Q9/" display-uri="coherent-inverses-J1Q9" type="local">example <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-J1Q9/" display-uri="coherent-inverses-J1Q9" /></fr:link>, we restrict our attention to <fr:link href="/coherent-inverses-S9V9/" title="marked colimit" uri="https://forest.nickx.hu/coherent-inverses-S9V9/" display-uri="coherent-inverses-S9V9" type="local">marked colimits</fr:link> (recall that <fr:link href="/coherent-inverses-S9V9/" title="marked colimit" uri="https://forest.nickx.hu/coherent-inverses-S9V9/" display-uri="coherent-inverses-S9V9" type="local">marked colimits</fr:link> subsume both colimits and <fr:link href="/coherent-inverses-QTSK/" title="oplax colimit" uri="https://forest.nickx.hu/coherent-inverses-QTSK/" display-uri="coherent-inverses-QTSK" type="local">oplax colimits</fr:link>) in particularly well-behaved <fr:tex display="inline"><![CDATA[\mathbf {Pos}]]></fr:tex>-categories.
      </html:p><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>11</fr:month><fr:day>6</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-L0IM/</fr:uri><fr:display-uri>coherent-inverses-L0IM</fr:display-uri><fr:route>/coherent-inverses-L0IM/</fr:route><fr:title text="Finite direct \mathbf {Pos}-category">Finite <fr:link href="/coherent-inverses-L0IM/" title="Finite direct \mathbf {Pos}-category" uri="https://forest.nickx.hu/coherent-inverses-L0IM/" display-uri="coherent-inverses-L0IM" type="local">direct</fr:link> <fr:tex display="inline"><![CDATA[\mathbf {Pos}]]></fr:tex>-category</fr:title><fr:taxon>definition</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
  A finite <fr:tex display="inline"><![CDATA[\mathbf {Pos}]]></fr:tex>-category <fr:tex display="inline"><![CDATA[\mathcal {C}]]></fr:tex> is <fr:link href="/coherent-inverses-L0IM/" title="Finite direct \mathbf {Pos}-category" uri="https://forest.nickx.hu/coherent-inverses-L0IM/" display-uri="coherent-inverses-L0IM" type="local">direct</fr:link> whenever it satisfies any of the following equivalent conditions:
  <html:ol><html:li>
      there is no infinite sequence of composable non-identity morphisms in <fr:tex display="inline"><![CDATA[\mathcal {C}]]></fr:tex>;
    </html:li>
    <html:li>
      an antiparallel pair of morphisms
      <fr:tex display="block"><![CDATA[
        x \leftrightarrows  y
      ]]></fr:tex>
      only exists when both are identity morphisms and <fr:tex display="inline"><![CDATA[x = y]]></fr:tex>;
    </html:li>
    <html:li>
      there is a function <fr:tex display="inline"><![CDATA[{\mathcal {C} \xrightarrow {\mathsf {dim}} \mathbb {N}}]]></fr:tex> on the set of objects of <fr:tex display="inline"><![CDATA[\mathcal {C}]]></fr:tex> such that every morphism in <fr:tex display="inline"><![CDATA[\mathcal {C}]]></fr:tex> increases dimension (non-identities strictly so);
    </html:li>
    <html:li><fr:tex display="inline"><![CDATA[\mathcal {C}]]></fr:tex> is skeletal, and every endomorphism is necessarily the identity.
    </html:li></html:ol></html:p></fr:mainmatter></fr:tree><html:p><fr:link href="/coherent-inverses-KV1B/" title="weighted colimit" uri="https://forest.nickx.hu/coherent-inverses-KV1B/" display-uri="coherent-inverses-KV1B" type="local">Weighted colimits</fr:link> in <fr:link href="/coherent-inverses-L0IM/" title="Finite direct \mathbf {Pos}-category" uri="https://forest.nickx.hu/coherent-inverses-L0IM/" display-uri="coherent-inverses-L0IM" type="local">direct</fr:link> <fr:tex display="inline"><![CDATA[\mathbf {Pos}]]></fr:tex>-categories are uniquely determined on-the-nose (as opposed to up-to-unique-isomorphism), as every <fr:link href="/coherent-inverses-L0IM/" title="Finite direct \mathbf {Pos}-category" uri="https://forest.nickx.hu/coherent-inverses-L0IM/" display-uri="coherent-inverses-L0IM" type="local">direct</fr:link> category is gaunt, which implies that <fr:link href="/coherent-inverses-S9V9/" title="marked colimit" uri="https://forest.nickx.hu/coherent-inverses-S9V9/" display-uri="coherent-inverses-S9V9" type="local">marked colimits</fr:link> are too.
      </html:p><html:p>
        We note that <fr:tex display="inline"><![CDATA[\mathsf {dim}]]></fr:tex> must be given as structure, as it is not uniquely determined (for instance, given one valid choice for <fr:tex display="inline"><![CDATA[\mathsf {dim}]]></fr:tex>, another one can be generated by composition with the successor function on natural numbers).
        However, there is a canonical choice for <fr:tex display="inline"><![CDATA[\mathsf {dim}]]></fr:tex>.
      </html:p><html:p>
        Firstly, observe that finite <fr:link href="/coherent-inverses-L0IM/" title="Finite direct \mathbf {Pos}-category" uri="https://forest.nickx.hu/coherent-inverses-L0IM/" display-uri="coherent-inverses-L0IM" type="local">direct</fr:link> <fr:tex display="inline"><![CDATA[\mathbf {Pos}]]></fr:tex>-categories induce a graded poset on their set of objects.
      </html:p><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>11</fr:month><fr:day>6</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-5YGZ/</fr:uri><fr:display-uri>coherent-inverses-5YGZ</fr:display-uri><fr:route>/coherent-inverses-5YGZ/</fr:route><fr:title text="underlying (graded) poset of a finite direct \mathbf {Pos}-category"><fr:link href="/coherent-inverses-5YGZ/" title="underlying (graded) poset of a finite direct \mathbf {Pos}-category" uri="https://forest.nickx.hu/coherent-inverses-5YGZ/" display-uri="coherent-inverses-5YGZ" type="local">underlying (graded) poset</fr:link> of a finite <fr:link href="/coherent-inverses-L0IM/" title="Finite direct \mathbf {Pos}-category" uri="https://forest.nickx.hu/coherent-inverses-L0IM/" display-uri="coherent-inverses-L0IM" type="local">direct</fr:link> <fr:tex display="inline"><![CDATA[\mathbf {Pos}]]></fr:tex>-category</fr:title><fr:taxon>definition</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
  Let <fr:tex display="inline"><![CDATA[\mathcal {C}]]></fr:tex> be a finite <fr:link href="/coherent-inverses-L0IM/" title="Finite direct \mathbf {Pos}-category" uri="https://forest.nickx.hu/coherent-inverses-L0IM/" display-uri="coherent-inverses-L0IM" type="local">direct</fr:link> <fr:tex display="inline"><![CDATA[\mathbf {Pos}]]></fr:tex>-category.
  The objects of <fr:tex display="inline"><![CDATA[\mathcal {C}]]></fr:tex> form an <fr:link href="/coherent-inverses-5YGZ/" title="underlying (graded) poset of a finite direct \mathbf {Pos}-category" uri="https://forest.nickx.hu/coherent-inverses-5YGZ/" display-uri="coherent-inverses-5YGZ" type="local">underlying (graded) poset</fr:link> <fr:tex display="inline"><![CDATA[{\mathcal {C}}_\leq ]]></fr:tex> by <fr:tex display="inline"><![CDATA[x \leq  y]]></fr:tex> whenever there exists a morphism <fr:tex display="inline"><![CDATA[x \to  y]]></fr:tex> in <fr:tex display="inline"><![CDATA[\mathcal {C}]]></fr:tex>.
</html:p><html:p>
  This is precisely the posetal reflection of the image of <fr:tex display="inline"><![CDATA[\mathcal {C}]]></fr:tex> in the adjoint functor <fr:tex display="inline"><![CDATA[U]]></fr:tex> of <fr:link href="/coherent-inverses-ZGDQ/" title="The free \mathbf {Pos}-category functor \mathbf {Cat} \xrightarrow {i} \mathbf {PosCat} is left and right adjoint" uri="https://forest.nickx.hu/coherent-inverses-ZGDQ/" display-uri="coherent-inverses-ZGDQ" type="local">lemma <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-ZGDQ/" display-uri="coherent-inverses-ZGDQ" /></fr:link>.
</html:p></fr:mainmatter></fr:tree><html:p>
        Then, we extend this as follows.
      </html:p><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2025</fr:year><fr:month>5</fr:month><fr:day>22</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-L45G/</fr:uri><fr:display-uri>coherent-inverses-L45G</fr:display-uri><fr:route>/coherent-inverses-L45G/</fr:route><fr:title text="graded \mathbf {Pos}-category"><fr:link href="/coherent-inverses-L45G/" title="graded \mathbf {Pos}-category" uri="https://forest.nickx.hu/coherent-inverses-L45G/" display-uri="coherent-inverses-L45G" type="local">graded <fr:tex display="inline"><![CDATA[\mathbf {Pos}]]></fr:tex>-category</fr:link></fr:title><fr:taxon>definition</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
  A <fr:link href="/coherent-inverses-L45G/" title="graded \mathbf {Pos}-category" uri="https://forest.nickx.hu/coherent-inverses-L45G/" display-uri="coherent-inverses-L45G" type="local">graded <fr:tex display="inline"><![CDATA[\mathbf {Pos}]]></fr:tex>-category</fr:link> <fr:tex display="inline"><![CDATA[\mathcal {C}]]></fr:tex> is a finite <fr:link href="/coherent-inverses-L0IM/" title="Finite direct \mathbf {Pos}-category" uri="https://forest.nickx.hu/coherent-inverses-L0IM/" display-uri="coherent-inverses-L0IM" type="local">direct</fr:link> <fr:tex display="inline"><![CDATA[\mathbf {Pos}]]></fr:tex>-category equipped with the dimension function <fr:tex display="inline"><![CDATA[{\mathcal {C} \xrightarrow {\mathsf {dim}} \mathbb {N}}]]></fr:tex> determined by the grading of <fr:link href="/coherent-inverses-5YGZ/" title="underlying (graded) poset of a finite direct \mathbf {Pos}-category" uri="https://forest.nickx.hu/coherent-inverses-5YGZ/" display-uri="coherent-inverses-5YGZ" type="local">definition <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-5YGZ/" display-uri="coherent-inverses-5YGZ" /></fr:link>.
  In other words, the dimension of any <fr:tex display="inline"><![CDATA[c \in  \mathcal {C}]]></fr:tex> is given by the length of the longest maximal chain of composable non-identity morphisms ending at <fr:tex display="inline"><![CDATA[c]]></fr:tex>.
  In this case, we refer to the <fr:tex display="inline"><![CDATA[\mathsf {dim} (c)]]></fr:tex> as the <html:em>rank</html:em> of <fr:tex display="inline"><![CDATA[c]]></fr:tex>.
</html:p></fr:mainmatter></fr:tree><html:p><fr:link href="/coherent-inverses-S9V9/" title="marked colimit" uri="https://forest.nickx.hu/coherent-inverses-S9V9/" display-uri="coherent-inverses-S9V9" type="local">Marked colimits</fr:link> behave more simply in <fr:link href="/coherent-inverses-L45G/" title="graded \mathbf {Pos}-category" uri="https://forest.nickx.hu/coherent-inverses-L45G/" display-uri="coherent-inverses-L45G" type="local">graded <fr:tex display="inline"><![CDATA[\mathbf {Pos}]]></fr:tex>-categories</fr:link>; for instance, we can make the following observations.
      </html:p><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>11</fr:month><fr:day>6</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-PB63/</fr:uri><fr:display-uri>coherent-inverses-PB63</fr:display-uri><fr:route>/coherent-inverses-PB63/</fr:route><fr:title text="Rank of marked cocones">Rank of <fr:link href="/coherent-inverses-5128/" title="marked cocone" uri="https://forest.nickx.hu/coherent-inverses-5128/" display-uri="coherent-inverses-5128" type="local">marked cocones</fr:link></fr:title><fr:taxon>lemma</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
  Let <fr:tex display="inline"><![CDATA[{J \xrightarrow {F} \mathcal {C}}]]></fr:tex> be a <fr:tex display="inline"><![CDATA[\mathbf {Pos}]]></fr:tex>-functor where <fr:tex display="inline"><![CDATA[\mathcal {C}]]></fr:tex> is <fr:link href="/coherent-inverses-L45G/" title="graded \mathbf {Pos}-category" uri="https://forest.nickx.hu/coherent-inverses-L45G/" display-uri="coherent-inverses-L45G" type="local">graded</fr:link>.
  Any <fr:link href="/coherent-inverses-5128/" title="marked cocone" uri="https://forest.nickx.hu/coherent-inverses-5128/" display-uri="coherent-inverses-5128" type="local">marked cocone</fr:link> over <fr:tex display="inline"><![CDATA[F]]></fr:tex> has a tip with rank at least <fr:tex display="inline"><![CDATA[\max  \left ( \set { \mathsf {dim} (F j) \mid  j \in  J } \right )]]></fr:tex>.
</html:p>
 
   
   <fr:tree show-metadata="false" toc="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>11</fr:month><fr:day>6</fr:day></fr:date><fr:taxon>proof</fr:taxon></fr:frontmatter><fr:mainmatter>
  
  
  <html:p>
    Let <fr:tex display="inline"><![CDATA[{F \xRightarrow {\alpha } \mathrm {const}_{c}}]]></fr:tex> be such an <fr:link href="/coherent-inverses-5128/" title="marked cocone" uri="https://forest.nickx.hu/coherent-inverses-5128/" display-uri="coherent-inverses-5128" type="local">marked cocone</fr:link>, for <fr:tex display="inline"><![CDATA[c \in  {\mathcal {C}}_\leq ]]></fr:tex>.
    For any <fr:tex display="inline"><![CDATA[j \in  J]]></fr:tex>, we have a leg of the cocone, a morphism <fr:tex display="inline"><![CDATA[{F j \xrightarrow {\alpha _c} c}]]></fr:tex>.
    Hence, <fr:tex display="inline"><![CDATA[\mathsf {dim} (F j) \leq  \mathsf {dim} (c)]]></fr:tex>.
  </html:p>
</fr:mainmatter></fr:tree>
 
</fr:mainmatter></fr:tree><html:p>
        There is a special class of <fr:tex display="inline"><![CDATA[\mathbf {Pos}]]></fr:tex>-functors that have yet simpler <fr:link href="/coherent-inverses-S9V9/" title="marked colimit" uri="https://forest.nickx.hu/coherent-inverses-S9V9/" display-uri="coherent-inverses-S9V9" type="local">marked colimits</fr:link>.
      </html:p><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2025</fr:year><fr:month>1</fr:month><fr:day>9</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-4G17/</fr:uri><fr:display-uri>coherent-inverses-4G17</fr:display-uri><fr:route>/coherent-inverses-4G17/</fr:route><fr:title text="directly surjective \mathbf {Pos}-functor"><fr:link href="/coherent-inverses-4G17/" title="directly surjective \mathbf {Pos}-functor" uri="https://forest.nickx.hu/coherent-inverses-4G17/" display-uri="coherent-inverses-4G17" type="local">directly surjective</fr:link> <fr:tex display="inline"><![CDATA[\mathbf {Pos}]]></fr:tex>-functor</fr:title><fr:taxon>definition</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
  A <fr:tex display="inline"><![CDATA[\mathbf {Pos}]]></fr:tex>-functor <fr:tex display="inline"><![CDATA[{J \xrightarrow {F} \mathcal {C}}]]></fr:tex> is <fr:link href="/coherent-inverses-4G17/" title="directly surjective \mathbf {Pos}-functor" uri="https://forest.nickx.hu/coherent-inverses-4G17/" display-uri="coherent-inverses-4G17" type="local">directly surjective</fr:link> if <fr:tex display="inline"><![CDATA[\mathcal {C}]]></fr:tex> is <fr:link href="/coherent-inverses-L45G/" title="graded \mathbf {Pos}-category" uri="https://forest.nickx.hu/coherent-inverses-L45G/" display-uri="coherent-inverses-L45G" type="local">graded</fr:link>, and <fr:tex display="inline"><![CDATA[F]]></fr:tex> is surjective on max-rank objects of <fr:tex display="inline"><![CDATA[\mathcal {C}]]></fr:tex>.
</html:p></fr:mainmatter></fr:tree><html:p>
        In general, a <fr:link href="/coherent-inverses-S9V9/" title="marked colimit" uri="https://forest.nickx.hu/coherent-inverses-S9V9/" display-uri="coherent-inverses-S9V9" type="local">marked colimit</fr:link> is given by a <html:em>universal</html:em> <fr:link href="/coherent-inverses-5128/" title="marked cocone" uri="https://forest.nickx.hu/coherent-inverses-5128/" display-uri="coherent-inverses-5128" type="local">marked cocone</fr:link> (<fr:link href="/coherent-inverses-N8XL/" title="marked colimit is a universal marked cocone" uri="https://forest.nickx.hu/coherent-inverses-N8XL/" display-uri="coherent-inverses-N8XL" type="local">proposition <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-N8XL/" display-uri="coherent-inverses-N8XL" /></fr:link>); in this case, we have restricted our setting to be such that at most one such <fr:link href="/coherent-inverses-5128/" title="marked cocone" uri="https://forest.nickx.hu/coherent-inverses-5128/" display-uri="coherent-inverses-5128" type="local">marked cocone</fr:link> can exist and must be in the image of its diagram <fr:tex display="inline"><![CDATA[D]]></fr:tex>.
      </html:p><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>11</fr:month><fr:day>6</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-OBOY/</fr:uri><fr:display-uri>coherent-inverses-OBOY</fr:display-uri><fr:route>/coherent-inverses-OBOY/</fr:route><fr:title text="marked cocones over directly surjective \mathbf {Pos}-functors"><fr:link href="/coherent-inverses-5128/" title="marked cocone" uri="https://forest.nickx.hu/coherent-inverses-5128/" display-uri="coherent-inverses-5128" type="local">marked cocones</fr:link> over <fr:link href="/coherent-inverses-4G17/" title="directly surjective \mathbf {Pos}-functor" uri="https://forest.nickx.hu/coherent-inverses-4G17/" display-uri="coherent-inverses-4G17" type="local">directly surjective</fr:link> <fr:tex display="inline"><![CDATA[\mathbf {Pos}]]></fr:tex>-functors</fr:title><fr:taxon>proposition</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
  Let <fr:tex display="inline"><![CDATA[{J \xrightarrow {F} \mathcal {C}}]]></fr:tex> be a <fr:link href="/coherent-inverses-4G17/" title="directly surjective \mathbf {Pos}-functor" uri="https://forest.nickx.hu/coherent-inverses-4G17/" display-uri="coherent-inverses-4G17" type="local">directly surjective</fr:link> <fr:tex display="inline"><![CDATA[\mathbf {Pos}]]></fr:tex>-functor.
  Any <fr:link href="/coherent-inverses-5128/" title="marked cocone" uri="https://forest.nickx.hu/coherent-inverses-5128/" display-uri="coherent-inverses-5128" type="local">marked cocone</fr:link> over <fr:tex display="inline"><![CDATA[{J \xrightarrow {F} \mathcal {C}}]]></fr:tex> has tip given by the element of <fr:tex display="inline"><![CDATA[\mathcal {C}]]></fr:tex> with maximal rank, which is necessarily unique among maximal rank elements of <fr:tex display="inline"><![CDATA[\mathcal {C}]]></fr:tex>.
</html:p>
 
   
   <fr:tree show-metadata="false" toc="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>11</fr:month><fr:day>6</fr:day></fr:date><fr:taxon>proof</fr:taxon></fr:frontmatter><fr:mainmatter>
  <html:p>
    Combine <fr:link href="/coherent-inverses-PB63/" title="Rank of marked cocones" uri="https://forest.nickx.hu/coherent-inverses-PB63/" display-uri="coherent-inverses-PB63" type="local">lemma <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-PB63/" display-uri="coherent-inverses-PB63" /></fr:link> with the fact that such an <fr:link href="/coherent-inverses-5128/" title="marked cocone" uri="https://forest.nickx.hu/coherent-inverses-5128/" display-uri="coherent-inverses-5128" type="local">marked cocone</fr:link> cannot have strictly higher rank than every element of <fr:tex display="inline"><![CDATA[\mathcal {C}]]></fr:tex>, because <fr:tex display="inline"><![CDATA[F]]></fr:tex> is <fr:link href="/coherent-inverses-4G17/" title="directly surjective \mathbf {Pos}-functor" uri="https://forest.nickx.hu/coherent-inverses-4G17/" display-uri="coherent-inverses-4G17" type="local">directly surjective</fr:link>.
    Moreover, if <fr:tex display="inline"><![CDATA[c \neq  c^\prime  \in  \mathcal {C}]]></fr:tex> are both maximal rank, then no <fr:link href="/coherent-inverses-5128/" title="marked cocone" uri="https://forest.nickx.hu/coherent-inverses-5128/" display-uri="coherent-inverses-5128" type="local">marked cocone</fr:link> can exist: by assumption, there are objects <fr:tex display="inline"><![CDATA[j, j^\prime ]]></fr:tex> of <fr:tex display="inline"><![CDATA[J]]></fr:tex> such that <fr:tex display="inline"><![CDATA[F j = c]]></fr:tex> and <fr:tex display="inline"><![CDATA[F j^\prime  = c^\prime ]]></fr:tex>, but both legs of the <fr:link href="/coherent-inverses-5128/" title="marked cocone" uri="https://forest.nickx.hu/coherent-inverses-5128/" display-uri="coherent-inverses-5128" type="local">marked cocone</fr:link>
    <fr:tex display="block"><![CDATA[
      F j \to  \cdot  \leftarrow  F j^\prime 
    ]]></fr:tex>
    must be the identity, which is a contradiction.
  </html:p>
</fr:mainmatter></fr:tree>
 
</fr:mainmatter></fr:tree><html:p>
        Necessarily, this is a <fr:link href="/coherent-inverses-S9V9/" title="marked colimit" uri="https://forest.nickx.hu/coherent-inverses-S9V9/" display-uri="coherent-inverses-S9V9" type="local">marked colimit</fr:link> when it exists.
        In fact, it is so exactly if there are no other <fr:link href="/coherent-inverses-5128/" title="marked cocone" uri="https://forest.nickx.hu/coherent-inverses-5128/" display-uri="coherent-inverses-5128" type="local">marked cocones</fr:link>.
      </html:p><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>11</fr:month><fr:day>14</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-M1PP/</fr:uri><fr:display-uri>coherent-inverses-M1PP</fr:display-uri><fr:route>/coherent-inverses-M1PP/</fr:route><fr:title text="marked colimits of directly surjective \mathbf {Pos}-functors"><fr:link href="/coherent-inverses-S9V9/" title="marked colimit" uri="https://forest.nickx.hu/coherent-inverses-S9V9/" display-uri="coherent-inverses-S9V9" type="local">marked colimits</fr:link> of <fr:link href="/coherent-inverses-4G17/" title="directly surjective \mathbf {Pos}-functor" uri="https://forest.nickx.hu/coherent-inverses-4G17/" display-uri="coherent-inverses-4G17" type="local">directly surjective</fr:link> <fr:tex display="inline"><![CDATA[\mathbf {Pos}]]></fr:tex>-functors</fr:title><fr:taxon>corollary</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
  Let <fr:tex display="inline"><![CDATA[{J \xrightarrow {F} \mathcal {C}}]]></fr:tex> be a <fr:link href="/coherent-inverses-4G17/" title="directly surjective \mathbf {Pos}-functor" uri="https://forest.nickx.hu/coherent-inverses-4G17/" display-uri="coherent-inverses-4G17" type="local">directly surjective</fr:link> <fr:tex display="inline"><![CDATA[\mathbf {Pos}]]></fr:tex>-functor.
  The <fr:link href="/coherent-inverses-S9V9/" title="marked colimit" uri="https://forest.nickx.hu/coherent-inverses-S9V9/" display-uri="coherent-inverses-S9V9" type="local">marked colimit</fr:link> of <fr:tex display="inline"><![CDATA[{J \xrightarrow {F} \mathcal {C}}]]></fr:tex> exists if and only if there is exactly one <fr:link href="/coherent-inverses-5128/" title="marked cocone" uri="https://forest.nickx.hu/coherent-inverses-5128/" display-uri="coherent-inverses-5128" type="local">marked cocone</fr:link> over <fr:tex display="inline"><![CDATA[F]]></fr:tex>.
</html:p>
 
   
   <fr:tree show-metadata="false" toc="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>11</fr:month><fr:day>14</fr:day></fr:date><fr:taxon>proof</fr:taxon></fr:frontmatter><fr:mainmatter>
  <html:p>
    It is clear to see that if there is exactly one <fr:link href="/coherent-inverses-5128/" title="marked cocone" uri="https://forest.nickx.hu/coherent-inverses-5128/" display-uri="coherent-inverses-5128" type="local">marked cocone</fr:link> over <fr:tex display="inline"><![CDATA[F]]></fr:tex>, then it must be an <fr:link href="/coherent-inverses-S9V9/" title="marked colimit" uri="https://forest.nickx.hu/coherent-inverses-S9V9/" display-uri="coherent-inverses-S9V9" type="local">marked colimit</fr:link>.
  </html:p>
  <html:p>
    Otherwise, assume the existence of such an <fr:link href="/coherent-inverses-S9V9/" title="marked colimit" uri="https://forest.nickx.hu/coherent-inverses-S9V9/" display-uri="coherent-inverses-S9V9" type="local">marked colimit</fr:link>.
    <fr:link href="/coherent-inverses-OBOY/" title="marked cocones over directly surjective \mathbf {Pos}-functors" uri="https://forest.nickx.hu/coherent-inverses-OBOY/" display-uri="coherent-inverses-OBOY" type="local">proposition <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-OBOY/" display-uri="coherent-inverses-OBOY" /></fr:link> implies that every <fr:link href="/coherent-inverses-5128/" title="marked cocone" uri="https://forest.nickx.hu/coherent-inverses-5128/" display-uri="coherent-inverses-5128" type="local">marked cocone</fr:link> over <fr:tex display="inline"><![CDATA[{J \xrightarrow {F} \mathcal {C}}]]></fr:tex> has the same tip, so the universal factoring map must be an endomorphism.
    But because <fr:tex display="inline"><![CDATA[\mathcal {C}]]></fr:tex> is <fr:link href="/coherent-inverses-L0IM/" title="Finite direct \mathbf {Pos}-category" uri="https://forest.nickx.hu/coherent-inverses-L0IM/" display-uri="coherent-inverses-L0IM" type="local">direct</fr:link>, it must moreover be the identity.
    This implies that every <fr:link href="/coherent-inverses-5128/" title="marked cocone" uri="https://forest.nickx.hu/coherent-inverses-5128/" display-uri="coherent-inverses-5128" type="local">marked cocone</fr:link> over <fr:tex display="inline"><![CDATA[F]]></fr:tex> is equal.
  </html:p>
</fr:mainmatter></fr:tree>
 
</fr:mainmatter></fr:tree></fr:mainmatter></fr:tree></fr:mainmatter></fr:tree><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2023</fr:year><fr:month>12</fr:month><fr:day>3</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-collapse-contraction-typechecking/</fr:uri><fr:display-uri>coherent-inverses-collapse-contraction-typechecking</fr:display-uri><fr:route>/coherent-inverses-collapse-contraction-typechecking/</fr:route><fr:title text="Collapse, contraction, and typechecking"><fr:link href="/coherent-inverses-FEO0/" title="collapse" uri="https://forest.nickx.hu/coherent-inverses-FEO0/" display-uri="coherent-inverses-FEO0" type="local">Collapse</fr:link>, <fr:link href="/coherent-inverses-FHS4/" title="contraction" uri="https://forest.nickx.hu/coherent-inverses-FHS4/" display-uri="coherent-inverses-FHS4" type="local">contraction</fr:link>, and <fr:link href="/coherent-inverses-4D20/" title="typechecking" uri="https://forest.nickx.hu/coherent-inverses-4D20/" display-uri="coherent-inverses-4D20" type="local">typechecking</fr:link></fr:title><fr:taxon>section</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
      In this section, we describe the concrete algorithmic aspects of the <fr:link href="/coherent-inverses-XQVM/" title="framed zigzag enriched category" uri="https://forest.nickx.hu/coherent-inverses-XQVM/" display-uri="coherent-inverses-XQVM" type="local">framed zigzag construction</fr:link>, which relate <fr:link href="/coherent-inverses-XQVM/" title="framed zigzag enriched category" uri="https://forest.nickx.hu/coherent-inverses-XQVM/" display-uri="coherent-inverses-XQVM" type="local">framed zigzags</fr:link> to combinatorial encodings of string diagrams.
    </html:p><html:p>
      First, we introduce a notion of <fr:link href="/coherent-inverses-NBLG/" title="collapsible morphism" uri="https://forest.nickx.hu/coherent-inverses-NBLG/" display-uri="coherent-inverses-NBLG" type="local">collapsibility</fr:link>, which will be principal to our development.
    </html:p><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2023</fr:year><fr:month>12</fr:month><fr:day>3</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-collapsible/</fr:uri><fr:display-uri>coherent-inverses-collapsible</fr:display-uri><fr:route>/coherent-inverses-collapsible/</fr:route><fr:title text="Collapsible morphisms with respect to a diagram"><fr:link href="/coherent-inverses-NBLG/" title="collapsible morphism" uri="https://forest.nickx.hu/coherent-inverses-NBLG/" display-uri="coherent-inverses-NBLG" type="local">Collapsible</fr:link> morphisms with respect to a diagram</fr:title><fr:taxon>section</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
        In ordinary category theory, one often considers certain functors over a fixed codomain whose domain represents some kind of ‘shape’.
        For instance, a <html:em>commutative diagram</html:em> in a category <fr:tex display="inline"><![CDATA[\mathcal {C}]]></fr:tex> is formally some functor <fr:tex display="inline"><![CDATA[J \xrightarrow {D} \mathcal {C}]]></fr:tex>, where <fr:tex display="inline"><![CDATA[J]]></fr:tex> is usually some small (finite) category specified freely over some <fr:link href="/coherent-inverses-JGG7/" title="weighted graphs" uri="https://forest.nickx.hu/coherent-inverses-JGG7/" display-uri="coherent-inverses-JGG7" type="local"><fr:tex display="inline"><![CDATA[W]]></fr:tex>-graph</fr:link>, and moreover thin (this is what it means for such a ‘diagram’ to commute).
        When (op)laxity is concerned, some care is required in the treatment of a ‘diagram’ (as opposed to a ‘functor’).
      </html:p><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>10</fr:month><fr:day>30</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-2WYC/</fr:uri><fr:display-uri>coherent-inverses-2WYC</fr:display-uri><fr:route>/coherent-inverses-2WYC/</fr:route><fr:title text="atom"><fr:link href="/coherent-inverses-2WYC/" title="atom" uri="https://forest.nickx.hu/coherent-inverses-2WYC/" display-uri="coherent-inverses-2WYC" type="local">atom</fr:link></fr:title><fr:taxon>definition</fr:taxon><fr:meta name="source"><html:span tid="Definition 2.1" uid="discrete-morse-theory-and-localization"><fr:link href="/discrete-morse-theory-and-localization/" title="Discrete Morse theory and localization" uri="https://forest.nickx.hu/discrete-morse-theory-and-localization/" display-uri="discrete-morse-theory-and-localization" type="local">[Definition 2.1, discrete-morse-theory-and-localization]</fr:link></html:span></fr:meta></fr:frontmatter><fr:mainmatter><html:p>
  Let <fr:tex display="inline"><![CDATA[J]]></fr:tex> be a <fr:tex display="inline"><![CDATA[\mathbf {Pos}]]></fr:tex>-category.
  A morphism <fr:tex display="inline"><![CDATA[{j \xrightarrow {f} j^\prime }]]></fr:tex> of <fr:tex display="inline"><![CDATA[J]]></fr:tex> is an <fr:link href="/coherent-inverses-2WYC/" title="atom" uri="https://forest.nickx.hu/coherent-inverses-2WYC/" display-uri="coherent-inverses-2WYC" type="local">atom</fr:link> if
  <html:ol><html:li><fr:tex display="inline"><![CDATA[f]]></fr:tex> is minimal: <fr:tex display="inline"><![CDATA[\forall  g \in  J (j, j^\prime ). f \Rightarrow  g]]></fr:tex>;
    </html:li>
    <html:li>
      for any oplaxly commuting triangle in <fr:tex display="inline"><![CDATA[J]]></fr:tex>:
      
  
  
  <html:figure><fr:resource hash="c732f4513ed587cc749ae02e80f44286"><fr:resource-content><html:img src="/c732f4513ed587cc749ae02e80f44286.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[
       \usepackage{amsmath,amssymb}
  \usepackage{mathtools}
  \usepackage{stmaryrd}
  \newcommand{\set}[1]{\left\{#1\right\}}
     \usepackage {tikz}
     \usetikzlibrary {cd}
     \usetikzlibrary {}
     
  \definecolor {green}{RGB}{27,158,119}
  \definecolor {orange}{RGB}{217,95,2}
  \definecolor {purple}{RGB}{117,112,179}

     
    ]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
      \begin {tikzcd}[]
        & j^\prime  \\
        j
        \ar [r, , ""']
        \ar [ur, , "f", ""'{name=L}]
        & |[alias=R]| j^{\prime \prime } 
        \ar [u, , ""']
        \ar [from=L, to=R, Rightarrow, ""]
      \end {tikzcd}
    ]]></fr:resource-source></fr:resource></html:figure>



      at least one of the outer faces is the identity morphism.
      In the case that both are, then <fr:tex display="inline"><![CDATA[f]]></fr:tex> is an identity morphism necessarily.
      That is, <fr:tex display="inline"><![CDATA[f]]></fr:tex> is <html:em>oplaxly indecomposable</html:em>.
    </html:li></html:ol></html:p></fr:mainmatter></fr:tree><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>10</fr:month><fr:day>30</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-4O2T/</fr:uri><fr:display-uri>coherent-inverses-4O2T</fr:display-uri><fr:route>/coherent-inverses-4O2T/</fr:route><fr:title text="oplax diagram"><fr:link href="/coherent-inverses-4O2T/" title="oplax diagram" uri="https://forest.nickx.hu/coherent-inverses-4O2T/" display-uri="coherent-inverses-4O2T" type="local">oplax diagram</fr:link></fr:title><fr:taxon>definition</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
  An <fr:link href="/coherent-inverses-4O2T/" title="oplax diagram" uri="https://forest.nickx.hu/coherent-inverses-4O2T/" display-uri="coherent-inverses-4O2T" type="local">oplax diagram</fr:link> is a <fr:tex display="inline"><![CDATA[\mathbf {Pos}]]></fr:tex>-functor of the form <fr:tex display="inline"><![CDATA[{J \xrightarrow {D} \mathcal {C}}]]></fr:tex>, where <fr:tex display="inline"><![CDATA[J]]></fr:tex> is freely generated by some poset seen as a thin <fr:tex display="inline"><![CDATA[\mathbf {Pos}]]></fr:tex>-category as follows: every Hom poset <fr:tex display="inline"><![CDATA[J (j, j^\prime )]]></fr:tex> is a poset of directed paths of morphisms of <fr:tex display="inline"><![CDATA[J]]></fr:tex> which connect <fr:tex display="inline"><![CDATA[j]]></fr:tex> to <fr:tex display="inline"><![CDATA[j^\prime ]]></fr:tex>, ordered by <fr:tex display="inline"><![CDATA[P \Rightarrow  P^\prime ]]></fr:tex> whenever <fr:tex display="inline"><![CDATA[P]]></fr:tex> is a path which can be obtained by deleting vertices of <fr:tex display="inline"><![CDATA[P^\prime ]]></fr:tex>, admitting the direct path <fr:tex display="inline"><![CDATA[j j^\prime ]]></fr:tex> as the minimal element.
</html:p></fr:mainmatter></fr:tree><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>12</fr:month><fr:day>12</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-RRZ9/</fr:uri><fr:display-uri>coherent-inverses-RRZ9</fr:display-uri><fr:route>/coherent-inverses-RRZ9/</fr:route><fr:title text="simple oplax diagram"><fr:link href="/coherent-inverses-RRZ9/" title="simple oplax diagram" uri="https://forest.nickx.hu/coherent-inverses-RRZ9/" display-uri="coherent-inverses-RRZ9" type="local">simple oplax diagram</fr:link></fr:title><fr:taxon>definition</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
  An <fr:link href="/coherent-inverses-4O2T/" title="oplax diagram" uri="https://forest.nickx.hu/coherent-inverses-4O2T/" display-uri="coherent-inverses-4O2T" type="local">oplax diagram</fr:link> <fr:tex display="inline"><![CDATA[{J \xrightarrow {D} \mathcal {C}}]]></fr:tex> is <fr:link href="/coherent-inverses-RRZ9/" title="simple oplax diagram" uri="https://forest.nickx.hu/coherent-inverses-RRZ9/" display-uri="coherent-inverses-RRZ9" type="local">simple</fr:link> when its underlying <fr:link href="/coherent-inverses-JGG7/" title="weighted graphs" uri="https://forest.nickx.hu/coherent-inverses-JGG7/" display-uri="coherent-inverses-JGG7" type="local"><fr:tex display="inline"><![CDATA[W]]></fr:tex>-graph</fr:link> is simple.
</html:p></fr:mainmatter></fr:tree><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>10</fr:month><fr:day>28</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-NBLG/</fr:uri><fr:display-uri>coherent-inverses-NBLG</fr:display-uri><fr:route>/coherent-inverses-NBLG/</fr:route><fr:title text="collapsible morphism"><fr:link href="/coherent-inverses-NBLG/" title="collapsible morphism" uri="https://forest.nickx.hu/coherent-inverses-NBLG/" display-uri="coherent-inverses-NBLG" type="local">collapsible</fr:link> morphism</fr:title><fr:taxon>definition</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
  Let <fr:tex display="inline"><![CDATA[{J \xrightarrow {D} \mathcal {C}}]]></fr:tex> be an <fr:link href="/coherent-inverses-4O2T/" title="oplax diagram" uri="https://forest.nickx.hu/coherent-inverses-4O2T/" display-uri="coherent-inverses-4O2T" type="local">oplax diagram</fr:link>.
</html:p><html:p><fr:tex display="inline"><![CDATA[{j_0 \xrightarrow {} j_1}]]></fr:tex> is <fr:link href="/coherent-inverses-NBLG/" title="collapsible morphism" uri="https://forest.nickx.hu/coherent-inverses-NBLG/" display-uri="coherent-inverses-NBLG" type="local">weakly collapsible</fr:link> if
  <html:ol><html:li><fr:tex display="inline"><![CDATA[{j_0 \xrightarrow {} j_1}]]></fr:tex> is an <fr:link href="/coherent-inverses-2WYC/" title="atom" uri="https://forest.nickx.hu/coherent-inverses-2WYC/" display-uri="coherent-inverses-2WYC" type="local">atom</fr:link>;
    </html:li>
    <html:li><fr:tex display="inline"><![CDATA[D]]></fr:tex> sends <fr:tex display="inline"><![CDATA[{j_0 \xrightarrow {} j_1}]]></fr:tex> to an identity morphism.
    </html:li></html:ol></html:p><html:p>
  If, additionally, every 2-cell filler which mentions <fr:tex display="inline"><![CDATA[{j_0 \xrightarrow {} j_1}]]></fr:tex> is sent by <fr:tex display="inline"><![CDATA[D]]></fr:tex> to an identity 2-cell filler, then <fr:tex display="inline"><![CDATA[{j_0 \xrightarrow {} j_1}]]></fr:tex> is <fr:link href="/coherent-inverses-NBLG/" title="collapsible morphism" uri="https://forest.nickx.hu/coherent-inverses-NBLG/" display-uri="coherent-inverses-NBLG" type="local">collapsible</fr:link>.
  Write <fr:tex display="inline"><![CDATA[j_0 \sim  j_1]]></fr:tex> if <fr:tex display="inline"><![CDATA[j_0]]></fr:tex> and <fr:tex display="inline"><![CDATA[j_1]]></fr:tex> are connected by <fr:link href="/coherent-inverses-NBLG/" title="collapsible morphism" uri="https://forest.nickx.hu/coherent-inverses-NBLG/" display-uri="coherent-inverses-NBLG" type="local">collapsible</fr:link> morphisms.
</html:p></fr:mainmatter></fr:tree><html:p>
        These definitions allow us to isolate a subclass of the morphisms in the index of an <fr:link href="/coherent-inverses-4O2T/" title="oplax diagram" uri="https://forest.nickx.hu/coherent-inverses-4O2T/" display-uri="coherent-inverses-4O2T" type="local">oplax diagram</fr:link> which map to identities.
      </html:p><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>10</fr:month><fr:day>31</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-L54I/</fr:uri><fr:display-uri>coherent-inverses-L54I</fr:display-uri><fr:route>/coherent-inverses-L54I/</fr:route><fr:title text="Some collapsible morphisms">Some <fr:link href="/coherent-inverses-NBLG/" title="collapsible morphism" uri="https://forest.nickx.hu/coherent-inverses-NBLG/" display-uri="coherent-inverses-NBLG" type="local">collapsible</fr:link> morphisms</fr:title><fr:taxon>example</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
  Consider the following <fr:link href="/coherent-inverses-RRZ9/" title="simple oplax diagram" uri="https://forest.nickx.hu/coherent-inverses-RRZ9/" display-uri="coherent-inverses-RRZ9" type="local">simple oplax diagram</fr:link>:
  
  <html:figure><fr:resource hash="2657d6e59a5e6bf03f2de89366fa1552"><fr:resource-content><html:img src="/2657d6e59a5e6bf03f2de89366fa1552.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[
        \usepackage{amsmath,amssymb}
  \usepackage{mathtools}
  \usepackage{stmaryrd}
  \newcommand{\set}[1]{\left\{#1\right\}}
      \usepackage {tikz}
      \usetikzlibrary {graphs,graphdrawing,quotes,backgrounds,positioning,cd}
      
  \definecolor {green}{RGB}{27,158,119}
  \definecolor {orange}{RGB}{217,95,2}
  \definecolor {purple}{RGB}{117,112,179}

      
    \usegdlibrary {force,layered}
  
    ]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
      \begin {tikzpicture}[      graphs/n/.code=\def\n{#1}
    , graphs/declare={simplex}{
      \foreach \ip [evaluate=\ip as \i using int(\ip-1)] in {1,...,\n} {
        \foreach \j in {\ip,...,\n}{
          \i -> \j;
        }
      }
    }
    , graphs/math nodes
    , graphs/nodes={circle, fill=white, inner sep=1pt}
    , subgraph text none, 
  ]
        
    
    \path  graph[spring layout]{
      0 / "x_0";
      1 / "x_1";
      2 / "x_2.";
      3 / "y_3";
      0 ->["$
  \text {id}_{x}
$"{above right}, green] 1 ->["$
  \text {id}_{x}
$"', ""{name=BR}, orange] 2;
      0 ->["$
  \text {id}_{x}
$", ""'{name=TR}] 2;
      0 ->["$g$"', ""{name=TL}] 3 <-["$f$"', ""{name=BL}] 1;
    };
    \begin {scope}[on background layer]
    \path  (TL) edge[commutative diagrams/Rightarrow, shorten >=2pt] (1)
          (TR) edge[commutative diagrams/Rightarrow, shorten >=2pt] (1);
    \end {scope}
  
  
      \end {tikzpicture}
    ]]></fr:resource-source></fr:resource></html:figure></html:p><html:p>
  From this diagram, we can deduce a few things:
  <html:ul><html:li>
      the morphism <fr:tex display="inline"><![CDATA[0 \to  2]]></fr:tex> is not an <fr:link href="/coherent-inverses-2WYC/" title="atom" uri="https://forest.nickx.hu/coherent-inverses-2WYC/" display-uri="coherent-inverses-2WYC" type="local">atom</fr:link>, as it oplaxly decomposes into <fr:tex display="inline"><![CDATA[0 \to  1 \to  2]]></fr:tex>;
      thus, it is neither <fr:link href="/coherent-inverses-NBLG/" title="collapsible morphism" uri="https://forest.nickx.hu/coherent-inverses-NBLG/" display-uri="coherent-inverses-NBLG" type="local">weakly collapsible</fr:link> nor <fr:link href="/coherent-inverses-NBLG/" title="collapsible morphism" uri="https://forest.nickx.hu/coherent-inverses-NBLG/" display-uri="coherent-inverses-NBLG" type="local">collapsible</fr:link>;
    </html:li>
    <html:li>
      the morphism <fr:tex display="inline"><![CDATA[\textcolor {green}{0 \to  1}]]></fr:tex> is <fr:link href="/coherent-inverses-NBLG/" title="collapsible morphism" uri="https://forest.nickx.hu/coherent-inverses-NBLG/" display-uri="coherent-inverses-NBLG" type="local">weakly collapsible</fr:link>, being an <fr:link href="/coherent-inverses-2WYC/" title="atom" uri="https://forest.nickx.hu/coherent-inverses-2WYC/" display-uri="coherent-inverses-2WYC" type="local">atom</fr:link> which is labelled by an identity morphism; however, it is not <fr:link href="/coherent-inverses-NBLG/" title="collapsible morphism" uri="https://forest.nickx.hu/coherent-inverses-NBLG/" display-uri="coherent-inverses-NBLG" type="local">collapsible</fr:link>, as the 2-cell filler <fr:tex display="inline"><![CDATA[0 \to  3 \Rightarrow  0 \to  1 \to  3]]></fr:tex> is mapped to a non-identity 2-cell filler (given that <fr:tex display="inline"><![CDATA[f \neq  g]]></fr:tex>);
    </html:li>
    <html:li>
      the morphism <fr:tex display="inline"><![CDATA[\textcolor {orange}{1 \to  2}]]></fr:tex> is <fr:link href="/coherent-inverses-NBLG/" title="collapsible morphism" uri="https://forest.nickx.hu/coherent-inverses-NBLG/" display-uri="coherent-inverses-NBLG" type="local">collapsible</fr:link>.
    </html:li></html:ul></html:p></fr:mainmatter></fr:tree><html:p>
        We wish to find a ‘simplification’ procedure for <fr:link href="/coherent-inverses-RRZ9/" title="simple oplax diagram" uri="https://forest.nickx.hu/coherent-inverses-RRZ9/" display-uri="coherent-inverses-RRZ9" type="local">simple oplax diagrams</fr:link> that preserves ‘colimits’, by ‘collapsing away’ <fr:link href="/coherent-inverses-NBLG/" title="collapsible morphism" uri="https://forest.nickx.hu/coherent-inverses-NBLG/" display-uri="coherent-inverses-NBLG" type="local">collapsible</fr:link> edges, such that the end result is also a <fr:link href="/coherent-inverses-RRZ9/" title="simple oplax diagram" uri="https://forest.nickx.hu/coherent-inverses-RRZ9/" display-uri="coherent-inverses-RRZ9" type="local">simple oplax diagram</fr:link>.
        At a glance, it may seem that the notion identifying objects along <fr:tex display="inline"><![CDATA[j \sim  j^\prime ]]></fr:tex> whenever there exists a <fr:link href="/coherent-inverses-NBLG/" title="collapsible morphism" uri="https://forest.nickx.hu/coherent-inverses-NBLG/" display-uri="coherent-inverses-NBLG" type="local">collapsible</fr:link> morphism <fr:tex display="inline"><![CDATA[j \to  j^\prime ]]></fr:tex> may suffice (<fr:link href="/coherent-inverses-NBLG/" title="collapsible morphism" uri="https://forest.nickx.hu/coherent-inverses-NBLG/" display-uri="coherent-inverses-NBLG" type="local">weakly collapsible</fr:link> is not enough, as <fr:link href="/coherent-inverses-L54I/" title="Some collapsible morphisms" uri="https://forest.nickx.hu/coherent-inverses-L54I/" display-uri="coherent-inverses-L54I" type="local">example <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-L54I/" display-uri="coherent-inverses-L54I" /></fr:link> shows: such a ‘collapse’ identifying <fr:tex display="inline"><![CDATA[x_0]]></fr:tex> and <fr:tex display="inline"><![CDATA[x_1]]></fr:tex> into some combined object must then admit two morphisms with codomain <fr:tex display="inline"><![CDATA[y_3]]></fr:tex>, with types <fr:tex display="inline"><![CDATA[f]]></fr:tex> and <fr:tex display="inline"><![CDATA[g]]></fr:tex>).
        However, this turns out to be insufficient, as <fr:link href="/coherent-inverses-VR66/" title="weakly collapsible, collapsible, and strongly collapsible morphisms" uri="https://forest.nickx.hu/coherent-inverses-VR66/" display-uri="coherent-inverses-VR66" type="local">example <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-VR66/" display-uri="coherent-inverses-VR66" /></fr:link> will show.
      </html:p><html:p>
        Instead, it becomes necessary to use extra structure associated to an <fr:link href="/coherent-inverses-4O2T/" title="oplax diagram" uri="https://forest.nickx.hu/coherent-inverses-4O2T/" display-uri="coherent-inverses-4O2T" type="local">oplax diagram</fr:link>, which we detail in the following section.
      </html:p><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2023</fr:year><fr:month>12</fr:month><fr:day>3</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-strongly-collapsible/</fr:uri><fr:display-uri>coherent-inverses-strongly-collapsible</fr:display-uri><fr:route>/coherent-inverses-strongly-collapsible/</fr:route><fr:title text="Strongly collapsible morphisms and well-formedness"><fr:link href="/coherent-inverses-1EX1/" title="strongly collapsible morphism" uri="https://forest.nickx.hu/coherent-inverses-1EX1/" display-uri="coherent-inverses-1EX1" type="local">Strongly collapsible</fr:link> morphisms and <fr:link href="/coherent-inverses-ZCMQ/" title="well-formed tree-cover oplax diagram" uri="https://forest.nickx.hu/coherent-inverses-ZCMQ/" display-uri="coherent-inverses-ZCMQ" type="local">well-formedness</fr:link></fr:title><fr:taxon>section</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
          Here, the key idea is that we want to specify some extra data which allows us to express a notion of <fr:link href="/coherent-inverses-ZCMQ/" title="well-formed tree-cover oplax diagram" uri="https://forest.nickx.hu/coherent-inverses-ZCMQ/" display-uri="coherent-inverses-ZCMQ" type="local">well-formedness</fr:link>.
        </html:p><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>11</fr:month><fr:day>18</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-QPQ4/</fr:uri><fr:display-uri>coherent-inverses-QPQ4</fr:display-uri><fr:route>/coherent-inverses-QPQ4/</fr:route><fr:title text="tree-cover oplax diagram"><fr:link href="/coherent-inverses-QPQ4/" title="tree-cover oplax diagram" uri="https://forest.nickx.hu/coherent-inverses-QPQ4/" display-uri="coherent-inverses-QPQ4" type="local">tree-cover oplax diagram</fr:link></fr:title><fr:taxon>definition</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
  An <fr:link href="/coherent-inverses-4O2T/" title="oplax diagram" uri="https://forest.nickx.hu/coherent-inverses-4O2T/" display-uri="coherent-inverses-4O2T" type="local">oplax diagram</fr:link> <fr:tex display="inline"><![CDATA[{J \xrightarrow {D} \mathcal {C}}]]></fr:tex> is a <fr:link href="/coherent-inverses-QPQ4/" title="tree-cover oplax diagram" uri="https://forest.nickx.hu/coherent-inverses-QPQ4/" display-uri="coherent-inverses-QPQ4" type="local">tree-cover oplax diagram</fr:link> when it is equipped with a family of subsets <fr:tex display="inline"><![CDATA[\mathcal {T}]]></fr:tex> of <fr:tex display="inline"><![CDATA[\operatorname {ob}\left ( {J} \right )]]></fr:tex> such that
  <html:ol><html:li><fr:tex display="inline"><![CDATA[\operatorname {ob}\left ( {J} \right ) \in  \mathcal {T}]]></fr:tex>;
    </html:li>
    <html:li>
      for all objects <fr:tex display="inline"><![CDATA[j \in  \operatorname {ob}\left ( {J} \right )]]></fr:tex>, <fr:tex display="inline"><![CDATA[\set {j} \in  \mathcal {T}]]></fr:tex>;
    </html:li>
    <html:li>
      for every <fr:tex display="inline"><![CDATA[T, T^\prime  \in  \mathcal {T}]]></fr:tex>, <fr:tex display="inline"><![CDATA[T]]></fr:tex> and <fr:tex display="inline"><![CDATA[T^\prime ]]></fr:tex> do not overlap, which means either they are disjoint or one is a subset of another.
    </html:li></html:ol></html:p><html:p>
  Intuitively, this means that <fr:tex display="inline"><![CDATA[\mathcal {T}]]></fr:tex> is a family of subsets of <fr:tex display="inline"><![CDATA[\operatorname {ob}\left ( {J} \right )]]></fr:tex> whose union is <fr:tex display="inline"><![CDATA[\operatorname {ob}\left ( {J} \right )]]></fr:tex>, for which the Hasse diagram under the inclusion ordering looks like a tree.
</html:p><html:p>
  For any <fr:tex display="inline"><![CDATA[T \in  \mathcal {T}]]></fr:tex>, we denote by <fr:tex display="inline"><![CDATA[{{J}\restriction _{T} \xrightarrow {{D}\restriction _{T}} \mathcal {C}}]]></fr:tex> the <fr:link href="/coherent-inverses-4O2T/" title="oplax diagram" uri="https://forest.nickx.hu/coherent-inverses-4O2T/" display-uri="coherent-inverses-4O2T" type="local">oplax diagram</fr:link> given by restriction of <fr:tex display="inline"><![CDATA[D]]></fr:tex> to the full sub-<fr:tex display="inline"><![CDATA[\mathbf {Pos}]]></fr:tex>-category of <fr:tex display="inline"><![CDATA[J]]></fr:tex> whose domain only has objects in <fr:tex display="inline"><![CDATA[T]]></fr:tex>.
  Every morphism <fr:tex display="inline"><![CDATA[{j_0 \xrightarrow {c} j_1}]]></fr:tex> of <fr:tex display="inline"><![CDATA[J]]></fr:tex> admits a ‘smallest’ diagram <fr:tex display="inline"><![CDATA[{{J}\restriction _{T_{\set {j_0, j_1}}} \xrightarrow {{D}\restriction _{T_{\set {j_0, j_1}}}} \mathcal {C}}]]></fr:tex> in which it appears, where
  <fr:tex display="block"><![CDATA[
    T_{\set {j_0, j_1}} \coloneqq  \min  \set { T \in  \mathcal {T} \mid  j_0, j_1 \in  T }.
  ]]></fr:tex></html:p></fr:mainmatter></fr:tree><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>11</fr:month><fr:day>18</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-ZCMQ/</fr:uri><fr:display-uri>coherent-inverses-ZCMQ</fr:display-uri><fr:route>/coherent-inverses-ZCMQ/</fr:route><fr:title text="well-formed tree-cover oplax diagram"><fr:link href="/coherent-inverses-ZCMQ/" title="well-formed tree-cover oplax diagram" uri="https://forest.nickx.hu/coherent-inverses-ZCMQ/" display-uri="coherent-inverses-ZCMQ" type="local">well-formed</fr:link> <fr:link href="/coherent-inverses-QPQ4/" title="tree-cover oplax diagram" uri="https://forest.nickx.hu/coherent-inverses-QPQ4/" display-uri="coherent-inverses-QPQ4" type="local">tree-cover oplax diagram</fr:link></fr:title><fr:taxon>definition</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
  A <fr:link href="/coherent-inverses-QPQ4/" title="tree-cover oplax diagram" uri="https://forest.nickx.hu/coherent-inverses-QPQ4/" display-uri="coherent-inverses-QPQ4" type="local">tree-cover oplax diagram</fr:link> <fr:tex display="inline"><![CDATA[({J \xrightarrow {D} \mathcal {C}}, \mathcal {T})]]></fr:tex> is <fr:link href="/coherent-inverses-ZCMQ/" title="well-formed tree-cover oplax diagram" uri="https://forest.nickx.hu/coherent-inverses-ZCMQ/" display-uri="coherent-inverses-ZCMQ" type="local">well-formed</fr:link> if for <fr:tex display="inline"><![CDATA[T \subseteq  T^\prime  \in  \mathcal {T}]]></fr:tex>, if <fr:tex display="inline"><![CDATA[{j_0 \xrightarrow {c} j_1}]]></fr:tex> is a <fr:link href="/coherent-inverses-NBLG/" title="collapsible morphism" uri="https://forest.nickx.hu/coherent-inverses-NBLG/" display-uri="coherent-inverses-NBLG" type="local">collapsible</fr:link> morphism of <fr:tex display="inline"><![CDATA[{D}\restriction _{T}]]></fr:tex> then it is a <fr:link href="/coherent-inverses-NBLG/" title="collapsible morphism" uri="https://forest.nickx.hu/coherent-inverses-NBLG/" display-uri="coherent-inverses-NBLG" type="local">collapsible</fr:link> morphism of <fr:tex display="inline"><![CDATA[{D}\restriction _{T^\prime }]]></fr:tex>.
</html:p><html:p>
  Note that, in general, the operation of restricting an <fr:link href="/coherent-inverses-4O2T/" title="oplax diagram" uri="https://forest.nickx.hu/coherent-inverses-4O2T/" display-uri="coherent-inverses-4O2T" type="local">oplax diagram</fr:link> preserves <fr:link href="/coherent-inverses-NBLG/" title="collapsible morphism" uri="https://forest.nickx.hu/coherent-inverses-NBLG/" display-uri="coherent-inverses-NBLG" type="local">collapsible</fr:link> morphisms, so the converse of this condition is automatic.
</html:p></fr:mainmatter></fr:tree><html:p>
          This definition says that <fr:tex display="inline"><![CDATA[(D, \mathcal {T})]]></fr:tex> respects <fr:link href="/coherent-inverses-NBLG/" title="collapsible morphism" uri="https://forest.nickx.hu/coherent-inverses-NBLG/" display-uri="coherent-inverses-NBLG" type="local">collapsible</fr:link> morphisms in the following sense: consider some maximal chain <fr:tex display="inline"><![CDATA[T_0 \subseteq  T_1 \subseteq  \ldots  \subseteq  T_n = \operatorname {ob}\left ( {J} \right )]]></fr:tex>; every morphism of <fr:tex display="inline"><![CDATA[J]]></fr:tex> will appear for the first time in the <fr:link href="/coherent-inverses-4O2T/" title="oplax diagram" uri="https://forest.nickx.hu/coherent-inverses-4O2T/" display-uri="coherent-inverses-4O2T" type="local">oplax diagram</fr:link> <fr:tex display="inline"><![CDATA[{{J}\restriction _{T_i} \xrightarrow {{D}\restriction _{T_i}} \mathcal {C}}]]></fr:tex> for some <fr:tex display="inline"><![CDATA[T_i]]></fr:tex> in this chain, at which point it remains present in the <fr:link href="/coherent-inverses-4O2T/" title="oplax diagram" uri="https://forest.nickx.hu/coherent-inverses-4O2T/" display-uri="coherent-inverses-4O2T" type="local">oplax diagrams</fr:link> for subsequent elements; this condition says that a morphism is <fr:link href="/coherent-inverses-NBLG/" title="collapsible morphism" uri="https://forest.nickx.hu/coherent-inverses-NBLG/" display-uri="coherent-inverses-NBLG" type="local">collapsible</fr:link> in <fr:tex display="inline"><![CDATA[D]]></fr:tex> if and only if it is in the restricted <fr:link href="/coherent-inverses-4O2T/" title="oplax diagram" uri="https://forest.nickx.hu/coherent-inverses-4O2T/" display-uri="coherent-inverses-4O2T" type="local">oplax diagram</fr:link> in which it first appears.
          In other words, the <html:em>global</html:em> property of a morphism of <fr:tex display="inline"><![CDATA[J]]></fr:tex> being <fr:link href="/coherent-inverses-NBLG/" title="collapsible morphism" uri="https://forest.nickx.hu/coherent-inverses-NBLG/" display-uri="coherent-inverses-NBLG" type="local">collapsible</fr:link> is compatible with the <html:em>local</html:em> property of being <fr:link href="/coherent-inverses-NBLG/" title="collapsible morphism" uri="https://forest.nickx.hu/coherent-inverses-NBLG/" display-uri="coherent-inverses-NBLG" type="local">collapsible</fr:link> in some <fr:tex display="inline"><![CDATA[{J}\restriction _{T}]]></fr:tex>.
        </html:p><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>11</fr:month><fr:day>21</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-J2IZ/</fr:uri><fr:display-uri>coherent-inverses-J2IZ</fr:display-uri><fr:route>/coherent-inverses-J2IZ/</fr:route><fr:title text="Non-well-formed tree-cover oplax diagram">Non-<fr:link href="/coherent-inverses-ZCMQ/" title="well-formed tree-cover oplax diagram" uri="https://forest.nickx.hu/coherent-inverses-ZCMQ/" display-uri="coherent-inverses-ZCMQ" type="local">well-formed</fr:link> <fr:link href="/coherent-inverses-QPQ4/" title="tree-cover oplax diagram" uri="https://forest.nickx.hu/coherent-inverses-QPQ4/" display-uri="coherent-inverses-QPQ4" type="local">tree-cover oplax diagram</fr:link></fr:title><fr:taxon>example</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
  Consider the following <fr:link href="/coherent-inverses-QPQ4/" title="tree-cover oplax diagram" uri="https://forest.nickx.hu/coherent-inverses-QPQ4/" display-uri="coherent-inverses-QPQ4" type="local">tree-cover oplax diagram</fr:link>:
  
  
  <html:figure><fr:resource hash="5a230fe90a4e632daf217e6fb7900ed3"><fr:resource-content><html:img src="/5a230fe90a4e632daf217e6fb7900ed3.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[
        \usepackage{amsmath,amssymb}
  \usepackage{mathtools}
  \usepackage{stmaryrd}
  \newcommand{\set}[1]{\left\{#1\right\}}
      \usepackage {tikz}
      \usetikzlibrary {graphs,quotes,cd,fit}
      
  \definecolor {green}{RGB}{27,158,119}
  \definecolor {orange}{RGB}{217,95,2}
  \definecolor {purple}{RGB}{117,112,179}

      
    ]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
      \begin {tikzpicture}[
  ]
        
    \path  graph[math nodes, grow right=1.5cm, branch down=1.5cm, edge quotes={/tikz/commutative diagrams/description}]{
      { [name=r1, fresh nodes] x ->[orange] x <-[orange] x};
      { [name=s0, fresh nodes] x ->["$\gamma $"{name=c}] c <-["$\delta $"{name=d}] x};
      { [name=r0, fresh nodes, nodes={xshift=1.5cm}] x / "x,"};
      s0 x <- {r0 x, r1 x};
      r0 x ->[gray, "$\alpha $"{name=a}] s0 c;
      s0 x' <- {r0 x, r1 x''};
      r1 x ->[gray, "$\beta _0$"{name=b0}] s0 c;
      r1 x' ->["$\beta _1$"{name=b1}] s0 c;
      r1 x''  ->[gray, "$\beta _2$"{name=b2}] s0 c;
    };
    \draw [/tikz/commutative diagrams/Rightarrow] (a) to (c);
    \draw [/tikz/commutative diagrams/Rightarrow] (a) to (d);
    \draw [/tikz/commutative diagrams/Rightarrow] (b0) to (s0 x);
    \draw [/tikz/commutative diagrams/Rightarrow] (b0) to (r1 x');
    \draw [/tikz/commutative diagrams/Rightarrow] (b2) to (s0 x');
    \draw [/tikz/commutative diagrams/Rightarrow] (b2) to (r1 x');
    \node [draw, rounded corners, fit={(s0 x) (s0 x')}] {};
    \node [draw, rounded corners, fit={(r1 x) (r1 x'')}] {};
  
      \end {tikzpicture}
    ]]></fr:resource-source></fr:resource></html:figure>


  where the unlabelled morphisms are identities and the boxes indicate the non-trivial parts of the <fr:link href="/coherent-inverses-QPQ4/" title="tree-cover oplax diagram" uri="https://forest.nickx.hu/coherent-inverses-QPQ4/" display-uri="coherent-inverses-QPQ4" type="local">tree cover</fr:link>.
</html:p><html:p>
  Assuming that <fr:tex display="inline"><![CDATA[\beta _0]]></fr:tex>, <fr:tex display="inline"><![CDATA[\beta _1]]></fr:tex>, and <fr:tex display="inline"><![CDATA[\beta _2]]></fr:tex> are not all equal morphisms, this diagram is not <fr:link href="/coherent-inverses-ZCMQ/" title="well-formed tree-cover oplax diagram" uri="https://forest.nickx.hu/coherent-inverses-ZCMQ/" display-uri="coherent-inverses-ZCMQ" type="local">well-formed</fr:link>: each <html:span style=" color: #d95f02;">morphism in the top row</html:span> is <fr:link href="/coherent-inverses-NBLG/" title="collapsible morphism" uri="https://forest.nickx.hu/coherent-inverses-NBLG/" display-uri="coherent-inverses-NBLG" type="local">collapsible</fr:link> according to its minimal <fr:tex display="inline"><![CDATA[T \in  \mathcal {T}]]></fr:tex> (which corresponds to the subdiagram contained within the topmost box), however in this instance they would not be <fr:link href="/coherent-inverses-NBLG/" title="collapsible morphism" uri="https://forest.nickx.hu/coherent-inverses-NBLG/" display-uri="coherent-inverses-NBLG" type="local">collapsible</fr:link> according to the whole diagram.
</html:p></fr:mainmatter></fr:tree><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>11</fr:month><fr:day>21</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-1EX1/</fr:uri><fr:display-uri>coherent-inverses-1EX1</fr:display-uri><fr:route>/coherent-inverses-1EX1/</fr:route><fr:title text="strongly collapsible morphism"><fr:link href="/coherent-inverses-1EX1/" title="strongly collapsible morphism" uri="https://forest.nickx.hu/coherent-inverses-1EX1/" display-uri="coherent-inverses-1EX1" type="local">strongly collapsible</fr:link> morphism</fr:title><fr:taxon>definition</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
  Fix a <fr:link href="/coherent-inverses-ZCMQ/" title="well-formed tree-cover oplax diagram" uri="https://forest.nickx.hu/coherent-inverses-ZCMQ/" display-uri="coherent-inverses-ZCMQ" type="local">well-formed</fr:link> <fr:link href="/coherent-inverses-QPQ4/" title="tree-cover oplax diagram" uri="https://forest.nickx.hu/coherent-inverses-QPQ4/" display-uri="coherent-inverses-QPQ4" type="local">tree-cover oplax diagram</fr:link> <fr:tex display="inline"><![CDATA[({J \xrightarrow {D} \mathcal {C}}, \mathcal {T})]]></fr:tex>.
  We say that a <fr:link href="/coherent-inverses-NBLG/" title="collapsible morphism" uri="https://forest.nickx.hu/coherent-inverses-NBLG/" display-uri="coherent-inverses-NBLG" type="local">collapsible</fr:link> morphism <fr:tex display="inline"><![CDATA[{j_0 \xrightarrow {c} j_1}]]></fr:tex> is <fr:link href="/coherent-inverses-1EX1/" title="strongly collapsible morphism" uri="https://forest.nickx.hu/coherent-inverses-1EX1/" display-uri="coherent-inverses-1EX1" type="local">strongly collapsible</fr:link> (with respect to <fr:tex display="inline"><![CDATA[\mathcal {T}]]></fr:tex>) when for all <fr:tex display="inline"><![CDATA[j_0^\prime , j_1^\prime  \in  T_{\set {j_0, j_1}} \in  \mathcal {T}]]></fr:tex> such that <fr:tex display="inline"><![CDATA[j_0 \sim  j_0^\prime ]]></fr:tex> and <fr:tex display="inline"><![CDATA[j_1 \sim  j_1^\prime ]]></fr:tex>:
  <html:ol><html:li>
      any <fr:link href="/coherent-inverses-NBLG/" title="collapsible morphism" uri="https://forest.nickx.hu/coherent-inverses-NBLG/" display-uri="coherent-inverses-NBLG" type="local">weakly collapsible</fr:link> morphism <fr:tex display="inline"><![CDATA[j_0^\prime  \to  j_1^\prime ]]></fr:tex> is <fr:link href="/coherent-inverses-NBLG/" title="collapsible morphism" uri="https://forest.nickx.hu/coherent-inverses-NBLG/" display-uri="coherent-inverses-NBLG" type="local">collapsible</fr:link>,
    </html:li>
    <html:li>
      for any <fr:tex display="inline"><![CDATA[j \in  T_{\set {j_0, j_1}}]]></fr:tex>, if there exists a cospan <fr:tex display="inline"><![CDATA[j_0^\prime  \xrightarrow {f_0} j \xleftarrow {f_1} j_1^\prime  \in  T_{\set {j_0, j_1}}]]></fr:tex> then <fr:tex display="inline"><![CDATA[D (f_0) = D (f_1)]]></fr:tex>.
    </html:li></html:ol></html:p><html:p>
  Write <fr:tex display="inline"><![CDATA[j \approx  j^\prime ]]></fr:tex> when <fr:tex display="inline"><![CDATA[j]]></fr:tex> and <fr:tex display="inline"><![CDATA[j^\prime ]]></fr:tex> are connected by <fr:link href="/coherent-inverses-1EX1/" title="strongly collapsible morphism" uri="https://forest.nickx.hu/coherent-inverses-1EX1/" display-uri="coherent-inverses-1EX1" type="local">strongly collapsible</fr:link> morphisms.
</html:p></fr:mainmatter></fr:tree><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>12</fr:month><fr:day>14</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-HSJ2/</fr:uri><fr:display-uri>coherent-inverses-HSJ2</fr:display-uri><fr:route>/coherent-inverses-HSJ2/</fr:route><fr:title text="strong collapse"><fr:link href="/coherent-inverses-HSJ2/" title="strong collapse" uri="https://forest.nickx.hu/coherent-inverses-HSJ2/" display-uri="coherent-inverses-HSJ2" type="local">strong collapse</fr:link></fr:title><fr:taxon>definition</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
  In the setting of <fr:link href="/coherent-inverses-1EX1/" title="strongly collapsible morphism" uri="https://forest.nickx.hu/coherent-inverses-1EX1/" display-uri="coherent-inverses-1EX1" type="local">definition <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-1EX1/" display-uri="coherent-inverses-1EX1" /></fr:link>, let <fr:tex display="inline"><![CDATA[\hat {\approx }]]></fr:tex> be the closure of the equivalence relation generated by <fr:link href="/coherent-inverses-1EX1/" title="strongly collapsible morphism" uri="https://forest.nickx.hu/coherent-inverses-1EX1/" display-uri="coherent-inverses-1EX1" type="local">strongly collapsible</fr:link> morphisms under composition.
  Define a sub-<fr:tex display="inline"><![CDATA[\mathbf {Pos}]]></fr:tex>-category <fr:tex display="inline"><![CDATA[Q_{\hat {\approx }} \subseteq  J \times  J]]></fr:tex> by
  <html:dl>
    <html:dt>objects</html:dt>
    <html:dd>
      <fr:tex display="inline"><![CDATA[(j_0, j_1) \in  J \times  J]]></fr:tex> such that <fr:tex display="inline"><![CDATA[j_0 \hat {\approx } j_1]]></fr:tex>;
    </html:dd>
    <html:dt>morphisms</html:dt>
    <html:dd>
      <fr:tex display="inline"><![CDATA[(j_0, j_1) \xrightarrow {f \times  g} (j_0^\prime , j_1^\prime )]]></fr:tex> such that <fr:tex display="inline"><![CDATA[D f = D g]]></fr:tex>;
    </html:dd>
    <html:dt>2-cell fillers</html:dt>
    <html:dd>
      <fr:tex display="inline"><![CDATA[f \times  g \Rightarrow  f^\prime  \times  g^\prime ]]></fr:tex> such that <fr:tex display="inline"><![CDATA[f \Rightarrow  f^\prime ]]></fr:tex> and <fr:tex display="inline"><![CDATA[g \Rightarrow  g^\prime ]]></fr:tex>.
    </html:dd>
  </html:dl>
  It can be readily checked that <fr:tex display="inline"><![CDATA[Q_{\hat {\approx }}]]></fr:tex> is a <fr:tex display="inline"><![CDATA[\mathbf {Pos}]]></fr:tex>-category.
  Now, observe that the coequaliser (which exists because <fr:tex display="inline"><![CDATA[\mathbf {PosCat}]]></fr:tex> is cocomplete)
  <fr:tex display="block"><![CDATA[
    \nabla  {J} \coloneqq  \operatorname {coeq} \left ( Q_{\hat {\approx }} \subseteq  J \times  J \overset {\pi _1}{\underset {\pi _2}{\rightrightarrows }} J \right )
  ]]></fr:tex>
  admits the following universal property:
  
  
  
  <html:figure><fr:resource hash="c60f4f3c611d711f6cc0c01f003d5425"><fr:resource-content><html:img src="/c60f4f3c611d711f6cc0c01f003d5425.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[
       \usepackage{amsmath,amssymb}
  \usepackage{mathtools}
  \usepackage{stmaryrd}
  \newcommand{\set}[1]{\left\{#1\right\}}
     \usepackage {tikz}
     \usetikzlibrary {cd}
     \usetikzlibrary {}
     
  \definecolor {green}{RGB}{27,158,119}
  \definecolor {orange}{RGB}{217,95,2}
  \definecolor {purple}{RGB}{117,112,179}

     
    ]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
      \begin {tikzcd}[]
    Q_{\hat {\approx }} \ar [r, phantom, "\subseteq "] & J \times  J \ar [r, shift left, "\pi _1"] \ar [r, shift right, "\pi _2"'] & J \ar [r, "q"] \ar [rd, "D"'] & \nabla  {J} \ar [d, dashed, "\nabla  {D}"] \\
    &&& \mathcal {C} .
  \end {tikzcd}
    ]]></fr:resource-source></fr:resource></html:figure>



  <fr:tex display="inline"><![CDATA[q]]></fr:tex> is the <fr:tex display="inline"><![CDATA[\mathbf {Pos}]]></fr:tex>-functor which sends each object <fr:tex display="inline"><![CDATA[j]]></fr:tex> to its equivalence class <fr:tex display="inline"><![CDATA[{[j]}_{\hat {\approx }}]]></fr:tex>, and we call <fr:tex display="inline"><![CDATA[\nabla  {D}]]></fr:tex> the <fr:link href="/coherent-inverses-HSJ2/" title="strong collapse" uri="https://forest.nickx.hu/coherent-inverses-HSJ2/" display-uri="coherent-inverses-HSJ2" type="local">strong collapse</fr:link> of <fr:tex display="inline"><![CDATA[D]]></fr:tex>.
</html:p></fr:mainmatter></fr:tree><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2025</fr:year><fr:month>1</fr:month><fr:day>2</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-RF9D/</fr:uri><fr:display-uri>coherent-inverses-RF9D</fr:display-uri><fr:route>/coherent-inverses-RF9D/</fr:route><fr:title text="weak collapse"><fr:link href="/coherent-inverses-RF9D/" title="weak collapse" uri="https://forest.nickx.hu/coherent-inverses-RF9D/" display-uri="coherent-inverses-RF9D" type="local">weak collapse</fr:link></fr:title><fr:taxon>definition</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
  Analogously to <fr:link href="/coherent-inverses-HSJ2/" title="strong collapse" uri="https://forest.nickx.hu/coherent-inverses-HSJ2/" display-uri="coherent-inverses-HSJ2" type="local">definition <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-HSJ2/" display-uri="coherent-inverses-HSJ2" /></fr:link>, we define the <fr:link href="/coherent-inverses-RF9D/" title="weak collapse" uri="https://forest.nickx.hu/coherent-inverses-RF9D/" display-uri="coherent-inverses-RF9D" type="local">weak collapse</fr:link> for any <fr:link href="/coherent-inverses-4O2T/" title="oplax diagram" uri="https://forest.nickx.hu/coherent-inverses-4O2T/" display-uri="coherent-inverses-4O2T" type="local">oplax diagram</fr:link> <fr:tex display="inline"><![CDATA[{J \xrightarrow {D} \mathcal {C}}]]></fr:tex> to be the quotient under connectivity by <fr:link href="/coherent-inverses-NBLG/" title="collapsible morphism" uri="https://forest.nickx.hu/coherent-inverses-NBLG/" display-uri="coherent-inverses-NBLG" type="local">weakly collapsible</fr:link> morphisms.
  This is a larger quotient than that of <fr:link href="/coherent-inverses-HSJ2/" title="strong collapse" uri="https://forest.nickx.hu/coherent-inverses-HSJ2/" display-uri="coherent-inverses-HSJ2" type="local">strong collapse</fr:link>, i.e. possibly more objects may be identified as every <fr:link href="/coherent-inverses-1EX1/" title="strongly collapsible morphism" uri="https://forest.nickx.hu/coherent-inverses-1EX1/" display-uri="coherent-inverses-1EX1" type="local">strongly collapsible</fr:link> morphism is also <fr:link href="/coherent-inverses-NBLG/" title="collapsible morphism" uri="https://forest.nickx.hu/coherent-inverses-NBLG/" display-uri="coherent-inverses-NBLG" type="local">weakly collapsible</fr:link>.
</html:p></fr:mainmatter></fr:tree><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>11</fr:month><fr:day>18</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-4NZH/</fr:uri><fr:display-uri>coherent-inverses-4NZH</fr:display-uri><fr:route>/coherent-inverses-4NZH/</fr:route><fr:title text="Trivial tree covers">Trivial <fr:link href="/coherent-inverses-QPQ4/" title="tree-cover oplax diagram" uri="https://forest.nickx.hu/coherent-inverses-QPQ4/" display-uri="coherent-inverses-QPQ4" type="local">tree covers</fr:link></fr:title><fr:taxon>remark</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
  Every <fr:link href="/coherent-inverses-4O2T/" title="oplax diagram" uri="https://forest.nickx.hu/coherent-inverses-4O2T/" display-uri="coherent-inverses-4O2T" type="local">oplax diagram</fr:link> <fr:tex display="inline"><![CDATA[{J \xrightarrow {D} \mathcal {C}}]]></fr:tex> can be equipped with a trivial <fr:link href="/coherent-inverses-QPQ4/" title="tree-cover oplax diagram" uri="https://forest.nickx.hu/coherent-inverses-QPQ4/" display-uri="coherent-inverses-QPQ4" type="local">tree cover</fr:link> <fr:tex display="inline"><![CDATA[\mathcal {T}]]></fr:tex> given by
  <fr:tex display="block"><![CDATA[
    \mathcal {T} \coloneqq  \set {\operatorname {ob}\left ( {J} \right )} \cup  \bigcup _{j \in  J} \set { \set {j} }.
  ]]></fr:tex></html:p><html:p>
  Any <fr:link href="/coherent-inverses-QPQ4/" title="tree-cover oplax diagram" uri="https://forest.nickx.hu/coherent-inverses-QPQ4/" display-uri="coherent-inverses-QPQ4" type="local">tree-cover oplax diagram</fr:link> with <fr:tex display="inline"><![CDATA[\mathcal {T}]]></fr:tex> given trivially as such is <fr:link href="/coherent-inverses-ZCMQ/" title="well-formed tree-cover oplax diagram" uri="https://forest.nickx.hu/coherent-inverses-ZCMQ/" display-uri="coherent-inverses-ZCMQ" type="local">well-formed</fr:link>, and in this instance every <fr:link href="/coherent-inverses-NBLG/" title="collapsible morphism" uri="https://forest.nickx.hu/coherent-inverses-NBLG/" display-uri="coherent-inverses-NBLG" type="local">collapsible</fr:link> morphism is <fr:link href="/coherent-inverses-1EX1/" title="strongly collapsible morphism" uri="https://forest.nickx.hu/coherent-inverses-1EX1/" display-uri="coherent-inverses-1EX1" type="local">strongly collapsible</fr:link>.
</html:p></fr:mainmatter></fr:tree><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>11</fr:month><fr:day>21</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-VR66/</fr:uri><fr:display-uri>coherent-inverses-VR66</fr:display-uri><fr:route>/coherent-inverses-VR66/</fr:route><fr:title text="weakly collapsible, collapsible, and strongly collapsible morphisms"><fr:link href="/coherent-inverses-NBLG/" title="collapsible morphism" uri="https://forest.nickx.hu/coherent-inverses-NBLG/" display-uri="coherent-inverses-NBLG" type="local">weakly collapsible</fr:link>, <fr:link href="/coherent-inverses-NBLG/" title="collapsible morphism" uri="https://forest.nickx.hu/coherent-inverses-NBLG/" display-uri="coherent-inverses-NBLG" type="local">collapsible</fr:link>, and <fr:link href="/coherent-inverses-1EX1/" title="strongly collapsible morphism" uri="https://forest.nickx.hu/coherent-inverses-1EX1/" display-uri="coherent-inverses-1EX1" type="local">strongly collapsible</fr:link> morphisms</fr:title><fr:taxon>example</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
  Below we illustrate a <fr:link href="/coherent-inverses-ZCMQ/" title="well-formed tree-cover oplax diagram" uri="https://forest.nickx.hu/coherent-inverses-ZCMQ/" display-uri="coherent-inverses-ZCMQ" type="local">well-formed</fr:link> <fr:link href="/coherent-inverses-QPQ4/" title="tree-cover oplax diagram" uri="https://forest.nickx.hu/coherent-inverses-QPQ4/" display-uri="coherent-inverses-QPQ4" type="local">tree-cover oplax diagram</fr:link>:
  
  
  <html:figure><fr:resource hash="4d9dba0b4024bf25e9fcee19278f83be"><fr:resource-content><html:img src="/4d9dba0b4024bf25e9fcee19278f83be.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[
        \usepackage{amsmath,amssymb}
  \usepackage{mathtools}
  \usepackage{stmaryrd}
  \newcommand{\set}[1]{\left\{#1\right\}}
      \usepackage {tikz}
      \usetikzlibrary {graphs,quotes,cd,fit,positioning,decorations.markings}
      
  \definecolor {green}{RGB}{27,158,119}
  \definecolor {orange}{RGB}{217,95,2}
  \definecolor {purple}{RGB}{117,112,179}

      
    ]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
      \begin {tikzpicture}[
    decoration={
      markings,
      mark=at position 0.5 with {
        \draw [red,-] (-2pt,-2pt) -- (2pt,2pt);
        \draw [red,-] (2pt,-2pt) -- (-2pt,2pt);
      }
    }
  ]
        
    \path  graph[math nodes, grow right=1.5cm, branch down=1.5cm, edge quotes={/tikz/commutative diagrams/description}]{
      { [name=r1, fresh nodes, nodes={xshift=3cm}] x [xshift=-1.5cm] ->[orange, postaction={decorate}] x <-[orange, postaction={decorate}] x};
      { [name=s0, fresh nodes] x ->["$\gamma $"{name=c}] s <-["$\delta $"{name=d}] x ->[orange, postaction={decorate}] x <-[orange, postaction={decorate}] x};
      { [name=r0, fresh nodes, nodes={xshift=3cm}] x [xshift=-1.5cm] ->[orange, postaction={decorate}] x <-[orange, postaction={decorate}] x};
      s0 x <-[green] {r0 x, r1 x};
      r0 x ->[gray, "$\alpha $"{name=a}] s0 s <-[gray, "$\beta $"{name=b}] r1 x;
      s0 x' <-[green] {r0 x, r1 x};
      s0 x'' <-[orange] {r0 x', r1 x'};
      s0 x'' <-[gray] {r0 x, r1 x, r0 x'', r1 x''};
      s0 x''' <-[orange] {r0 x'', r1 x''};
    };
    \draw [/tikz/commutative diagrams/Rightarrow, shorten >=-4pt] (a) to (c);
    \draw [/tikz/commutative diagrams/Rightarrow, shorten >=-4pt] (a) to (d);
    \draw [/tikz/commutative diagrams/Rightarrow, shorten >=-4pt] (b) to (c);
    \draw [/tikz/commutative diagrams/Rightarrow, shorten >=-4pt] (b) to (d);
    \node [draw, rounded corners, fit={(r0 x) (r0 x'')}] {};
    \node [draw, rounded corners, fit={(s0 x) (s0 x''')}] {};
    \node [draw, rounded corners, fit={(r1 x) (r1 x'')}] {};
    \node [right=5pt of r0 x''.south east] {,};
  
      \end {tikzpicture}
    ]]></fr:resource-source></fr:resource></html:figure>


  where unlabelled morphisms are the identity morphism <fr:tex display="inline"><![CDATA[
  \text {id}_{x}
]]></fr:tex>; <fr:tex display="inline"><![CDATA[\alpha ]]></fr:tex>, <fr:tex display="inline"><![CDATA[\beta ]]></fr:tex>, <fr:tex display="inline"><![CDATA[\gamma ]]></fr:tex>, and <fr:tex display="inline"><![CDATA[\delta ]]></fr:tex> are assumed to be distinct morphisms in the Hom poset <fr:tex display="inline"><![CDATA[\mathcal {C} (x, s)]]></fr:tex>, and the boxes indicate the non-trivial parts of the <fr:link href="/coherent-inverses-QPQ4/" title="tree-cover oplax diagram" uri="https://forest.nickx.hu/coherent-inverses-QPQ4/" display-uri="coherent-inverses-QPQ4" type="local">tree cover</fr:link>.
  This diagram has all three of
  <html:dl>
    <html:dt><html:span style=" color: #1b9e77;"><fr:link href="/coherent-inverses-NBLG/" title="collapsible morphism" uri="https://forest.nickx.hu/coherent-inverses-NBLG/" display-uri="coherent-inverses-NBLG" type="local">weakly collapsible</fr:link> morphisms</html:span></html:dt>
    <html:dd>
      The <fr:link href="/coherent-inverses-NBLG/" title="collapsible morphism" uri="https://forest.nickx.hu/coherent-inverses-NBLG/" display-uri="coherent-inverses-NBLG" type="local">weakly collapsible</fr:link> that are not <fr:link href="/coherent-inverses-NBLG/" title="collapsible morphism" uri="https://forest.nickx.hu/coherent-inverses-NBLG/" display-uri="coherent-inverses-NBLG" type="local">collapsible</fr:link> are drawn in <html:span style=" color: #1b9e77;">green</html:span>.
      They are directly adjacent to non-trivial 2-cell fillers.
    </html:dd>
    <html:dt><html:span style=" color: #d95f02;"><fr:link href="/coherent-inverses-NBLG/" title="collapsible morphism" uri="https://forest.nickx.hu/coherent-inverses-NBLG/" display-uri="coherent-inverses-NBLG" type="local">collapsible</fr:link> morphisms</html:span></html:dt>
    <html:dd>
      The <fr:link href="/coherent-inverses-NBLG/" title="collapsible morphism" uri="https://forest.nickx.hu/coherent-inverses-NBLG/" display-uri="coherent-inverses-NBLG" type="local">collapsible</fr:link> morphisms that are not <fr:link href="/coherent-inverses-1EX1/" title="strongly collapsible morphism" uri="https://forest.nickx.hu/coherent-inverses-1EX1/" display-uri="coherent-inverses-1EX1" type="local">strongly collapsible</fr:link> are drawn in <html:span style=" color: #d95f02;">orange</html:span> (without crosses).
      They are <fr:link href="/coherent-inverses-NBLG/" title="collapsible morphism" uri="https://forest.nickx.hu/coherent-inverses-NBLG/" display-uri="coherent-inverses-NBLG" type="local">collapsible</fr:link>, as they only participate in trivial 2-cell fillers, however they are not <fr:link href="/coherent-inverses-1EX1/" title="strongly collapsible morphism" uri="https://forest.nickx.hu/coherent-inverses-1EX1/" display-uri="coherent-inverses-1EX1" type="local">strongly collapsible</fr:link> because they connect disjoint parts of the <fr:link href="/coherent-inverses-QPQ4/" title="tree-cover oplax diagram" uri="https://forest.nickx.hu/coherent-inverses-QPQ4/" display-uri="coherent-inverses-QPQ4" type="local">tree cover</fr:link> by morphisms which are <fr:link href="/coherent-inverses-NBLG/" title="collapsible morphism" uri="https://forest.nickx.hu/coherent-inverses-NBLG/" display-uri="coherent-inverses-NBLG" type="local">weakly collapsible</fr:link> but not <fr:link href="/coherent-inverses-NBLG/" title="collapsible morphism" uri="https://forest.nickx.hu/coherent-inverses-NBLG/" display-uri="coherent-inverses-NBLG" type="local">collapsible</fr:link>.
      For example, consider the bottom-right <html:span style=" color: #d95f02;">orange</html:span> <fr:link href="/coherent-inverses-NBLG/" title="collapsible morphism" uri="https://forest.nickx.hu/coherent-inverses-NBLG/" display-uri="coherent-inverses-NBLG" type="local">collapsible</fr:link> morphism: the minimal <fr:tex display="inline"><![CDATA[T \in  \mathcal {T}]]></fr:tex> which includes this morphism corresponds to the whole diagram; moreover, the endpoints of this morphism can be shifted along <fr:link href="/coherent-inverses-NBLG/" title="collapsible morphism" uri="https://forest.nickx.hu/coherent-inverses-NBLG/" display-uri="coherent-inverses-NBLG" type="local">collapsible</fr:link> (<html:span style=" color: #d95f02;">orange</html:span>) morphisms to admit a <html:span style=" color: #1b9e77;">green</html:span> <fr:link href="/coherent-inverses-NBLG/" title="collapsible morphism" uri="https://forest.nickx.hu/coherent-inverses-NBLG/" display-uri="coherent-inverses-NBLG" type="local">weakly collapsible</fr:link> morphism, on the face of the 2-simplex <fr:tex display="inline"><![CDATA[\alpha  \Rightarrow  \delta  \circ  
  \text {id}_{x}
]]></fr:tex>.
    </html:dd>
    <html:dt><html:span style=" color: #d95f02;"><fr:link href="/coherent-inverses-1EX1/" title="strongly collapsible morphism" uri="https://forest.nickx.hu/coherent-inverses-1EX1/" display-uri="coherent-inverses-1EX1" type="local">strongly collapsible</fr:link> morphisms</html:span> ×</html:dt>
    <html:dd>
      The <fr:link href="/coherent-inverses-1EX1/" title="strongly collapsible morphism" uri="https://forest.nickx.hu/coherent-inverses-1EX1/" display-uri="coherent-inverses-1EX1" type="local">strongly collapsible</fr:link> morphisms are drawn in <html:span style=" color: #d95f02;">orange</html:span>, and additionally crossed out in red.
    </html:dd>
  </html:dl></html:p><html:p>
  Its <fr:link href="/coherent-inverses-HSJ2/" title="strong collapse" uri="https://forest.nickx.hu/coherent-inverses-HSJ2/" display-uri="coherent-inverses-HSJ2" type="local">strong collapse</fr:link> is as follows:
  
  
  
  <html:figure><fr:resource hash="84fc48290f3197b147422ac431350978"><fr:resource-content><html:img src="/84fc48290f3197b147422ac431350978.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[
        \usepackage{amsmath,amssymb}
  \usepackage{mathtools}
  \usepackage{stmaryrd}
  \newcommand{\set}[1]{\left\{#1\right\}}
      \usepackage {tikz}
      \usetikzlibrary {graphs,quotes,cd}
      
  \definecolor {green}{RGB}{27,158,119}
  \definecolor {orange}{RGB}{217,95,2}
  \definecolor {purple}{RGB}{117,112,179}

      
    ]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
      \begin {tikzpicture}[]
        
    \path  graph[math nodes, grow right=1.5cm, branch down=1.5cm, edge quotes={/tikz/commutative diagrams/description}]{
      { [name=r1, fresh nodes, nodes={xshift=1.5cm}] x};
      { [name=s0, fresh nodes] x ->["$\gamma $"{name=c}] s <-["$\delta $"{name=d}] x};
      { [name=r0, fresh nodes, nodes={xshift=1.5cm}] x / "x,"};
      s0 x <- {r0 x, r1 x};
      r0 x ->[gray, "$\alpha $"{name=a}] s0 s <-[gray, "$\beta $"{name=b}] r1 x;
      s0 x' <- {r0 x, r1 x};
    };
    \draw [/tikz/commutative diagrams/Rightarrow, shorten >=-4pt] (a) to (c);
    \draw [/tikz/commutative diagrams/Rightarrow, shorten >=-4pt] (a) to (d);
    \draw [/tikz/commutative diagrams/Rightarrow, shorten >=-4pt] (b) to (c);
    \draw [/tikz/commutative diagrams/Rightarrow, shorten >=-4pt] (b) to (d);
  
      \end {tikzpicture}
    ]]></fr:resource-source></fr:resource></html:figure>



  while its <fr:link href="/coherent-inverses-RF9D/" title="weak collapse" uri="https://forest.nickx.hu/coherent-inverses-RF9D/" display-uri="coherent-inverses-RF9D" type="local">weak collapse</fr:link>, whose index has two objects and four morphisms, essentially additionally identifying all the indices of <fr:tex display="inline"><![CDATA[x]]></fr:tex> above, is as follows:
  
  
  
  <html:figure><fr:resource hash="bfae8835007a612c9e81a88a601400b5"><fr:resource-content><html:img src="/bfae8835007a612c9e81a88a601400b5.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[
        \usepackage{amsmath,amssymb}
  \usepackage{mathtools}
  \usepackage{stmaryrd}
  \newcommand{\set}[1]{\left\{#1\right\}}
      \usepackage {tikz}
      \usetikzlibrary {3d,cd}
      
  \definecolor {green}{RGB}{27,158,119}
  \definecolor {orange}{RGB}{217,95,2}
  \definecolor {purple}{RGB}{117,112,179}

      
    ]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
      \begin {tikzpicture}[]
        
    \node  at (0,0,0) (x) {$x$};
    \node  at (0,0,-2) (s) {$s$};
    \draw [gray, ->] (x) .. controls (0,1,-1) .. node[above] {$\beta $} (s);
    \draw [gray, ->] (x) .. controls (0,-1,-1) .. node[below] {$\alpha $} (s);
    \draw [->] (x) .. controls (1,0,-1) .. node[right] {$\delta $.} (s);
    \draw [->] (x) .. controls (-1,0,-1) .. node[left] {$\gamma $} (s);
    \draw [every edge/.append style={shorten >=5pt, shorten <=5pt}]
      (0,0.8,-1) edge[commutative diagrams/Rightarrow, bend right] (-0.8,0,-1)
      (0,0.8,-1) edge[commutative diagrams/Rightarrow, bend left] (0.8,0,-1)
      (0,-0.8,-1) edge[commutative diagrams/Rightarrow, bend left] (-0.8,0,-1)
      (0,-0.8,-1) edge[commutative diagrams/Rightarrow, bend right] (0.8,0,-1)
    ;
  
      \end {tikzpicture}
    ]]></fr:resource-source></fr:resource></html:figure>



  Note that the <fr:link href="/coherent-inverses-RF9D/" title="weak collapse" uri="https://forest.nickx.hu/coherent-inverses-RF9D/" display-uri="coherent-inverses-RF9D" type="local">weak collapse</fr:link> is no longer <fr:link href="/coherent-inverses-RRZ9/" title="simple oplax diagram" uri="https://forest.nickx.hu/coherent-inverses-RRZ9/" display-uri="coherent-inverses-RRZ9" type="local">simple</fr:link>, and we have drawn it in a non-planar fashion.
</html:p><html:p>
  The string diagram to which this is associated to is the following, which illustrates a scalar (see <fr:link href="/coherent-inverses-RKCS/" title="signature of a scalar" uri="https://forest.nickx.hu/coherent-inverses-RKCS/" display-uri="coherent-inverses-RKCS" type="local">example <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-RKCS/" display-uri="coherent-inverses-RKCS" /></fr:link>) in horizontal composition with a <html:em>weak</html:em> identity:
  
  
  
  <html:figure><fr:resource hash="b42e84f7f9c120802a418dc62b53df75"><fr:resource-content><html:img src="/b42e84f7f9c120802a418dc62b53df75.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[
        \usepackage{amsmath,amssymb}
  \usepackage{mathtools}
  \usepackage{stmaryrd}
  \newcommand{\set}[1]{\left\{#1\right\}}
      \usepackage {tikz}
      \usetikzlibrary {}
      
  \definecolor {green}{RGB}{27,158,119}
  \definecolor {orange}{RGB}{217,95,2}
  \definecolor {purple}{RGB}{117,112,179}

      
    ]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
      \begin {tikzpicture}[]
        
        \definecolor{generator-0-0-0-pos}{RGB}{41, 128, 185}
    \definecolor{generator-0-0-1-pos}{RGB}{56, 150, 211}
    \definecolor{generator-1-2-0-pos}{RGB}{192, 57, 43}
    \begin{scope}
    % Background surfaces
    \fill[generator-0-0-0-pos] (0,0) -- (6,0) -- (6,4) -- (0,4) -- (0,0);
    % Wire layers
    \draw[color=generator-0-0-1-pos, line width=5pt](4,0) -- (4,4);
    \end{scope}
    \fill[generator-1-2-0-pos] (2,2) circle (0.14);
  
      \end {tikzpicture}
    ]]></fr:resource-source></fr:resource></html:figure></html:p></fr:mainmatter></fr:tree><html:p><fr:link href="/coherent-inverses-ZCMQ/" title="well-formed tree-cover oplax diagram" uri="https://forest.nickx.hu/coherent-inverses-ZCMQ/" display-uri="coherent-inverses-ZCMQ" type="local">Well-formed</fr:link> <fr:link href="/coherent-inverses-QPQ4/" title="tree-cover oplax diagram" uri="https://forest.nickx.hu/coherent-inverses-QPQ4/" display-uri="coherent-inverses-QPQ4" type="local">tree-cover oplax diagrams</fr:link> admit a special kind of colimit, using the <fr:link href="/coherent-inverses-1EX1/" title="strongly collapsible morphism" uri="https://forest.nickx.hu/coherent-inverses-1EX1/" display-uri="coherent-inverses-1EX1" type="local">strongly collapsible</fr:link> morphisms to induce a <fr:link href="/coherent-inverses-5VBZ/" title="marking" uri="https://forest.nickx.hu/coherent-inverses-5VBZ/" display-uri="coherent-inverses-5VBZ" type="local">marking</fr:link>.
        </html:p><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>11</fr:month><fr:day>21</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-ZPGB/</fr:uri><fr:display-uri>coherent-inverses-ZPGB</fr:display-uri><fr:route>/coherent-inverses-ZPGB/</fr:route><fr:title text="collapse colimit"><fr:link href="/coherent-inverses-ZPGB/" title="collapse colimit" uri="https://forest.nickx.hu/coherent-inverses-ZPGB/" display-uri="coherent-inverses-ZPGB" type="local">collapse colimit</fr:link></fr:title><fr:taxon>definition</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
  Let <fr:tex display="inline"><![CDATA[({J \xrightarrow {D} \mathcal {C}}, \mathcal {T})]]></fr:tex> be a <fr:link href="/coherent-inverses-ZCMQ/" title="well-formed tree-cover oplax diagram" uri="https://forest.nickx.hu/coherent-inverses-ZCMQ/" display-uri="coherent-inverses-ZCMQ" type="local">well-formed</fr:link> <fr:link href="/coherent-inverses-QPQ4/" title="tree-cover oplax diagram" uri="https://forest.nickx.hu/coherent-inverses-QPQ4/" display-uri="coherent-inverses-QPQ4" type="local">tree-cover oplax diagram</fr:link>.
  Define the <fr:link href="/coherent-inverses-5VBZ/" title="marking" uri="https://forest.nickx.hu/coherent-inverses-5VBZ/" display-uri="coherent-inverses-5VBZ" type="local">marking</fr:link> <fr:tex display="inline"><![CDATA[\mathbf {M}]]></fr:tex> as the closure under composition of the class of morphisms of <fr:tex display="inline"><![CDATA[J]]></fr:tex> which are <fr:link href="/coherent-inverses-1EX1/" title="strongly collapsible morphism" uri="https://forest.nickx.hu/coherent-inverses-1EX1/" display-uri="coherent-inverses-1EX1" type="local">strongly collapsible</fr:link>.
  We call the <fr:link href="/coherent-inverses-S9V9/" title="marked colimit" uri="https://forest.nickx.hu/coherent-inverses-S9V9/" display-uri="coherent-inverses-S9V9" type="local">marked colimit</fr:link> <fr:tex display="inline"><![CDATA[\operatorname {colim}^{{\mathbf {M}}_{J}} D]]></fr:tex> the <fr:link href="/coherent-inverses-ZPGB/" title="collapse colimit" uri="https://forest.nickx.hu/coherent-inverses-ZPGB/" display-uri="coherent-inverses-ZPGB" type="local">collapse colimit</fr:link> of <fr:tex display="inline"><![CDATA[({J \xrightarrow {D} \mathcal {C}}, \mathcal {T})]]></fr:tex>.
</html:p></fr:mainmatter></fr:tree></fr:mainmatter></fr:tree><html:p>
        Diagrams in <fr:link href="/coherent-inverses-XQVM/" title="framed zigzag enriched category" uri="https://forest.nickx.hu/coherent-inverses-XQVM/" display-uri="coherent-inverses-XQVM" type="local">framed zigzag enriched categories</fr:link> when <fr:link href="/coherent-inverses-4S4Y/" title="exploded diagram" uri="https://forest.nickx.hu/coherent-inverses-4S4Y/" display-uri="coherent-inverses-4S4Y" type="local">exploded</fr:link> naturally inherit a <fr:link href="/coherent-inverses-QPQ4/" title="tree-cover oplax diagram" uri="https://forest.nickx.hu/coherent-inverses-QPQ4/" display-uri="coherent-inverses-QPQ4" type="local">tree cover</fr:link>, which we explore in the following section.
      </html:p><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2023</fr:year><fr:month>12</fr:month><fr:day>3</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-explosion/</fr:uri><fr:display-uri>coherent-inverses-explosion</fr:display-uri><fr:route>/coherent-inverses-explosion/</fr:route><fr:title text="Exploded diagrams of framed zigzags and the level-wise tree-cover oplax diagram"><fr:link href="/coherent-inverses-4S4Y/" title="exploded diagram" uri="https://forest.nickx.hu/coherent-inverses-4S4Y/" display-uri="coherent-inverses-4S4Y" type="local">Exploded diagrams</fr:link> of <fr:link href="/coherent-inverses-XQVM/" title="framed zigzag enriched category" uri="https://forest.nickx.hu/coherent-inverses-XQVM/" display-uri="coherent-inverses-XQVM" type="local">framed zigzags</fr:link> and the <fr:link href="/coherent-inverses-LQGR/" title="level-wise tree-cover oplax diagrams" uri="https://forest.nickx.hu/coherent-inverses-LQGR/" display-uri="coherent-inverses-LQGR" type="local">level-wise tree-cover oplax diagram</fr:link></fr:title><fr:taxon>section</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
          First, we introduce some machinery to allow us to describe a <fr:link href="/coherent-inverses-XQVM/" title="framed zigzag enriched category" uri="https://forest.nickx.hu/coherent-inverses-XQVM/" display-uri="coherent-inverses-XQVM" type="local">framed zigzag</fr:link> as data that is stratified into multiple dimensions by <fr:link href="/coherent-inverses-4S4Y/" title="exploded diagram" uri="https://forest.nickx.hu/coherent-inverses-4S4Y/" display-uri="coherent-inverses-4S4Y" type="local">explosion</fr:link>, considering their representation as <fr:link href="/coherent-inverses-RRZ9/" title="simple oplax diagram" uri="https://forest.nickx.hu/coherent-inverses-RRZ9/" display-uri="coherent-inverses-RRZ9" type="local">simple oplax diagrams</fr:link>.
          This stems fundamentally from the defining adjunction of the <fr:link href="/coherent-inverses-51XQ/" title="framed zigzag functor" uri="https://forest.nickx.hu/coherent-inverses-51XQ/" display-uri="coherent-inverses-51XQ" type="local">framed zigzag functor</fr:link>.
        </html:p><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>10</fr:month><fr:day>3</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-4S4Y/</fr:uri><fr:display-uri>coherent-inverses-4S4Y</fr:display-uri><fr:route>/coherent-inverses-4S4Y/</fr:route><fr:title text="exploded diagram"><fr:link href="/coherent-inverses-4S4Y/" title="exploded diagram" uri="https://forest.nickx.hu/coherent-inverses-4S4Y/" display-uri="coherent-inverses-4S4Y" type="local">exploded diagram</fr:link></fr:title><fr:taxon>definition</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
  By <fr:link href="/coherent-inverses-EIW0/" title="Forgetful domain functor locally fully faithful" uri="https://forest.nickx.hu/coherent-inverses-EIW0/" display-uri="coherent-inverses-EIW0" type="local">lemma <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-EIW0/" display-uri="coherent-inverses-EIW0" /></fr:link>, we have a bijection between <fr:tex display="inline"><![CDATA[\mathbf {Pos}]]></fr:tex>-functors <fr:tex display="inline"><![CDATA[{J \xrightarrow {D} \operatorname {Zig}(\mathcal {C})}]]></fr:tex> and morphisms <fr:tex display="inline"><![CDATA[\mathbf {PosCat} / {\mathbf {\Delta }_+} \left ( \substack {J\\\downarrow  \pi  \circ  D\\{\mathbf {\Delta }_+}}, \substack {\operatorname {Zig}(\mathcal {C})\\\downarrow  \pi \\{\mathbf {\Delta }_+}} \right )]]></fr:tex>.
  With the adjunction of <fr:link href="/coherent-inverses-51XQ/" title="framed zigzag functor" uri="https://forest.nickx.hu/coherent-inverses-51XQ/" display-uri="coherent-inverses-51XQ" type="local">theorem <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-51XQ/" display-uri="coherent-inverses-51XQ" /></fr:link>, we obtain a composite bijection:
  <fr:tex display="block"><![CDATA[
    \varepsilon \colon  \mathbf {PosCat} \left ( J, \operatorname {Zig}(\mathcal {C}) \right )
    \cong  \mathbf {PosCat} / {\mathbf {\Delta }_+} \left ( \substack {J\\\downarrow  \pi  \circ  D\\{\mathbf {\Delta }_+}}, \substack {\operatorname {Zig}(\mathcal {C})\\\downarrow  \pi \\{\mathbf {\Delta }_+}} = \mathsf {Zig} (\mathcal {C}) \right )
    \cong  \mathbf {PosCat} \left ( \mathsf {Expl} (\substack {J\\\downarrow  \pi  \circ  D\\{\mathbf {\Delta }_+}}), \mathcal {C} \right ) .
  ]]></fr:tex></html:p><html:p>
  For <fr:tex display="inline"><![CDATA[{J \xrightarrow {D} \operatorname {Zig}^{n}(\mathcal {C})}]]></fr:tex>, define
  <fr:tex display="block"><![CDATA[
    \begin {aligned}
      E_{D}^0 (J) &\coloneqq  J \\
      E_{D}^{i+1} (J) &\coloneqq  E_{\varepsilon  (D)}^i \left ( \mathsf {Expl} \left ( {J \xrightarrow {D} \operatorname {Zig}^{n}(\mathcal {C})} \xrightarrow {\pi } {\mathbf {\Delta }_+} \right ) \right ),
    \end {aligned}
  ]]></fr:tex>
  so that for all <fr:tex display="inline"><![CDATA[i \leq  n]]></fr:tex> we have a <fr:tex display="inline"><![CDATA[\mathbf {Pos}]]></fr:tex>-functor
  <fr:tex display="block"><![CDATA[
    E_{D}^i (J) \xrightarrow {\varepsilon ^i (D)} \operatorname {Zig}^{n - i}(\mathcal {C}).
  ]]></fr:tex></html:p><html:p>
  These data constitute the <fr:tex display="inline"><![CDATA[i]]></fr:tex>-fold <fr:link href="/coherent-inverses-4S4Y/" title="exploded diagram" uri="https://forest.nickx.hu/coherent-inverses-4S4Y/" display-uri="coherent-inverses-4S4Y" type="local">exploded diagram</fr:link> of <fr:tex display="inline"><![CDATA[D]]></fr:tex>, with <fr:tex display="inline"><![CDATA[\varepsilon ^n (D)]]></fr:tex> being the <html:em>fully</html:em> <fr:link href="/coherent-inverses-4S4Y/" title="exploded diagram" uri="https://forest.nickx.hu/coherent-inverses-4S4Y/" display-uri="coherent-inverses-4S4Y" type="local">exploded diagram</fr:link>.
</html:p></fr:mainmatter></fr:tree><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>12</fr:month><fr:day>12</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-G1R1/</fr:uri><fr:display-uri>coherent-inverses-G1R1</fr:display-uri><fr:route>/coherent-inverses-G1R1/</fr:route><fr:title text="explosion of simple oplax diagram is a simple oplax diagram"><fr:link href="/coherent-inverses-4S4Y/" title="exploded diagram" uri="https://forest.nickx.hu/coherent-inverses-4S4Y/" display-uri="coherent-inverses-4S4Y" type="local">explosion</fr:link> of <fr:link href="/coherent-inverses-RRZ9/" title="simple oplax diagram" uri="https://forest.nickx.hu/coherent-inverses-RRZ9/" display-uri="coherent-inverses-RRZ9" type="local">simple oplax diagram</fr:link> is a <fr:link href="/coherent-inverses-RRZ9/" title="simple oplax diagram" uri="https://forest.nickx.hu/coherent-inverses-RRZ9/" display-uri="coherent-inverses-RRZ9" type="local">simple oplax diagram</fr:link></fr:title><fr:taxon>lemma</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
  The <fr:link href="/coherent-inverses-4S4Y/" title="exploded diagram" uri="https://forest.nickx.hu/coherent-inverses-4S4Y/" display-uri="coherent-inverses-4S4Y" type="local">explosion</fr:link> of a <fr:link href="/coherent-inverses-RRZ9/" title="simple oplax diagram" uri="https://forest.nickx.hu/coherent-inverses-RRZ9/" display-uri="coherent-inverses-RRZ9" type="local">simple oplax diagram</fr:link> is a <fr:link href="/coherent-inverses-RRZ9/" title="simple oplax diagram" uri="https://forest.nickx.hu/coherent-inverses-RRZ9/" display-uri="coherent-inverses-RRZ9" type="local">simple oplax diagram</fr:link>.
</html:p></fr:mainmatter></fr:tree><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>12</fr:month><fr:day>29</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-DZP6/</fr:uri><fr:display-uri>coherent-inverses-DZP6</fr:display-uri><fr:route>/coherent-inverses-DZP6/</fr:route><fr:title text="exploded diagrams of framed zigzags and framed zigzag maps are simple oplax diagrams"><fr:link href="/coherent-inverses-4S4Y/" title="exploded diagram" uri="https://forest.nickx.hu/coherent-inverses-4S4Y/" display-uri="coherent-inverses-4S4Y" type="local">exploded diagrams</fr:link> of <fr:link href="/coherent-inverses-XQVM/" title="framed zigzag enriched category" uri="https://forest.nickx.hu/coherent-inverses-XQVM/" display-uri="coherent-inverses-XQVM" type="local">framed zigzags</fr:link> and <fr:link href="/coherent-inverses-XQVM/" title="framed zigzag enriched category" uri="https://forest.nickx.hu/coherent-inverses-XQVM/" display-uri="coherent-inverses-XQVM" type="local">framed zigzag maps</fr:link> are <fr:link href="/coherent-inverses-RRZ9/" title="simple oplax diagram" uri="https://forest.nickx.hu/coherent-inverses-RRZ9/" display-uri="coherent-inverses-RRZ9" type="local">simple oplax diagrams</fr:link></fr:title><fr:taxon>corollary</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
  Consider some <fr:link href="/coherent-inverses-XQVM/" title="framed zigzag enriched category" uri="https://forest.nickx.hu/coherent-inverses-XQVM/" display-uri="coherent-inverses-XQVM" type="local">framed zigzag</fr:link> <fr:tex display="inline"><![CDATA[Z \in  \operatorname {Zig}^{n}(\mathcal {C})]]></fr:tex>.
  As an object of a <fr:tex display="inline"><![CDATA[\mathbf {Pos}]]></fr:tex>-category, <fr:tex display="inline"><![CDATA[Z]]></fr:tex> can be identified with a global element of <fr:tex display="inline"><![CDATA[\mathbf {PosCat}]]></fr:tex>, <fr:tex display="inline"><![CDATA[\mathbf {1} \xrightarrow {Z} \operatorname {Zig}^{n}(\mathcal {C})]]></fr:tex>, a <fr:link href="/coherent-inverses-RRZ9/" title="simple oplax diagram" uri="https://forest.nickx.hu/coherent-inverses-RRZ9/" display-uri="coherent-inverses-RRZ9" type="local">simple oplax diagram</fr:link>.
</html:p><html:p>
  The (fully) <fr:link href="/coherent-inverses-4S4Y/" title="exploded diagram" uri="https://forest.nickx.hu/coherent-inverses-4S4Y/" display-uri="coherent-inverses-4S4Y" type="local">exploded diagram</fr:link> associated to <fr:tex display="inline"><![CDATA[Z]]></fr:tex> is moreover a <fr:link href="/coherent-inverses-RRZ9/" title="simple oplax diagram" uri="https://forest.nickx.hu/coherent-inverses-RRZ9/" display-uri="coherent-inverses-RRZ9" type="local">simple oplax diagram</fr:link>.
</html:p><html:p>
  The same holds for <fr:link href="/coherent-inverses-XQVM/" title="framed zigzag enriched category" uri="https://forest.nickx.hu/coherent-inverses-XQVM/" display-uri="coherent-inverses-XQVM" type="local">framed zigzag maps</fr:link>, treating <fr:tex display="inline"><![CDATA[Z \xrightarrow {f} Z^\prime ]]></fr:tex> in <fr:tex display="inline"><![CDATA[\operatorname {Zig}^{n}(\mathcal {C})]]></fr:tex> as <fr:tex display="inline"><![CDATA[\mathbf {2} \xrightarrow {f} \operatorname {Zig}^{n}(\mathcal {C})]]></fr:tex>.
</html:p></fr:mainmatter></fr:tree><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>10</fr:month><fr:day>3</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-OC2T/</fr:uri><fr:display-uri>coherent-inverses-OC2T</fr:display-uri><fr:route>/coherent-inverses-OC2T/</fr:route><fr:title text="explosion bundle"><fr:link href="/coherent-inverses-OC2T/" title="explosion bundle" uri="https://forest.nickx.hu/coherent-inverses-OC2T/" display-uri="coherent-inverses-OC2T" type="local">explosion bundle</fr:link></fr:title><fr:taxon>definition</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
  For <fr:tex display="inline"><![CDATA[{J \xrightarrow {D} \operatorname {Zig}^{n}(\mathcal {C})}]]></fr:tex>, recall that the objects of the <fr:tex display="inline"><![CDATA[\mathbf {Pos}]]></fr:tex>-category <fr:tex display="inline"><![CDATA[E_{D} (J)]]></fr:tex> are, for each <fr:tex display="inline"><![CDATA[j \in  J]]></fr:tex>, of the form <fr:tex display="inline"><![CDATA[r_{i^\prime }^j]]></fr:tex> and <fr:tex display="inline"><![CDATA[s_i^j]]></fr:tex> for <fr:tex display="inline"><![CDATA[i^\prime  \leq  n]]></fr:tex> and <fr:tex display="inline"><![CDATA[i < n]]></fr:tex> where <fr:tex display="inline"><![CDATA[D (j)]]></fr:tex> is a <fr:link href="/coherent-inverses-XQVM/" title="framed zigzag enriched category" uri="https://forest.nickx.hu/coherent-inverses-XQVM/" display-uri="coherent-inverses-XQVM" type="local">framed zigzag</fr:link> of length <fr:tex display="inline"><![CDATA[n]]></fr:tex>.
  The mapping <fr:tex display="inline"><![CDATA[r_{i^\prime }^j \mapsto  j]]></fr:tex>, <fr:tex display="inline"><![CDATA[s_i^j \mapsto  j]]></fr:tex> extends to a ‘parenting’ <fr:tex display="inline"><![CDATA[\mathbf {Pos}]]></fr:tex>-functor
  <fr:tex display="block"><![CDATA[
    E_{D} (J) \xrightarrow {P_{D}} J.
  ]]></fr:tex></html:p><html:p>
  For <fr:tex display="inline"><![CDATA[0 < i < n]]></fr:tex>, define
  <fr:tex display="block"><![CDATA[
    E_{D}^{i+1} (J) = E_{D} \left ( E_{D}^i (J) \right ) \xrightarrow {P_{D}^{i+1}} E_{D}^i (J)
  ]]></fr:tex>
  in this manner.
  Thus, we have a sequence of ‘parenting’ <fr:tex display="inline"><![CDATA[\mathbf {Pos}]]></fr:tex>-functors:
  
  
  
  <html:figure><fr:resource hash="ca5774e28808ae55e2ea218ba9b351bc"><fr:resource-content><html:img src="/ca5774e28808ae55e2ea218ba9b351bc.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[
       \usepackage{amsmath,amssymb}
  \usepackage{mathtools}
  \usepackage{stmaryrd}
  \newcommand{\set}[1]{\left\{#1\right\}}
     \usepackage {tikz}
     \usetikzlibrary {cd}
     \usetikzlibrary {}
     
  \definecolor {green}{RGB}{27,158,119}
  \definecolor {orange}{RGB}{217,95,2}
  \definecolor {purple}{RGB}{117,112,179}

     
    ]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
      \begin {tikzcd}[]
    E_{D}^n (J) \ar [d, "\varepsilon ^n (D)"] \ar [r, "P_{D}^n"] & E_{D}^{n-1} (J) \ar [d, "\varepsilon ^{n-1} (D)"] \ar [r, "P_{D}^{n-1}"] & \cdots  \ar [d] \ar [r, "P_{D}^1"] & E_{D}^0 (J) = J \ar [d, "D"] \\
    \mathcal {C} = \operatorname {Zig}^{0}(\mathcal {C}) & \operatorname {Zig}(\mathcal {C}) & \cdots  & \operatorname {Zig}^{n}(\mathcal {C})
  \end {tikzcd}
    ]]></fr:resource-source></fr:resource></html:figure>



  which we call the <fr:link href="/coherent-inverses-OC2T/" title="explosion bundle" uri="https://forest.nickx.hu/coherent-inverses-OC2T/" display-uri="coherent-inverses-OC2T" type="local">explosion bundle</fr:link> of <fr:tex display="inline"><![CDATA[D]]></fr:tex>.
</html:p></fr:mainmatter></fr:tree><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>10</fr:month><fr:day>14</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-8DI9/</fr:uri><fr:display-uri>coherent-inverses-8DI9</fr:display-uri><fr:route>/coherent-inverses-8DI9/</fr:route><fr:title text="explosion and parenting"><fr:link href="/coherent-inverses-4S4Y/" title="exploded diagram" uri="https://forest.nickx.hu/coherent-inverses-4S4Y/" display-uri="coherent-inverses-4S4Y" type="local">explosion</fr:link> and parenting</fr:title><fr:taxon>example</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
  Let <fr:tex display="inline"><![CDATA[Z \in  \operatorname {Zig}^{2}(\mathcal {C})]]></fr:tex> be a <fr:link href="/coherent-inverses-XQVM/" title="framed zigzag enriched category" uri="https://forest.nickx.hu/coherent-inverses-XQVM/" display-uri="coherent-inverses-XQVM" type="local">framed zigzag</fr:link> of singular height 1, which corresponds to the cospan <fr:tex display="inline"><![CDATA[S \xrightarrow {f} C \xleftarrow {b} T]]></fr:tex> in <fr:tex display="inline"><![CDATA[\operatorname {Zig}(\mathcal {C})]]></fr:tex>.
  Moreover, let <fr:tex display="inline"><![CDATA[r_0]]></fr:tex> and <fr:tex display="inline"><![CDATA[r_1]]></fr:tex> have singular height 0, corresponding to the 0-length iterated cospan given by the object <fr:tex display="inline"><![CDATA[x \in  \mathcal {C}]]></fr:tex>, and <fr:tex display="inline"><![CDATA[s_0]]></fr:tex> have singular height 1 corresponding to the cospan <fr:tex display="inline"><![CDATA[x \to  s \leftarrow  x]]></fr:tex>.
</html:p><html:p>
  As an <fr:link href="/coherent-inverses-OC2T/" title="explosion bundle" uri="https://forest.nickx.hu/coherent-inverses-OC2T/" display-uri="coherent-inverses-OC2T" type="local">explosion bundle</fr:link>, we can illustrate (eliding most 1-cell labels and 2-cell fillers for clarity) the situation as the following:
  
  
  <html:figure><fr:resource hash="338f2a2a1052d6d6c4d92ea9e80c75b7"><fr:resource-content><html:img src="/338f2a2a1052d6d6c4d92ea9e80c75b7.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[
       \usepackage{amsmath,amssymb}
  \usepackage{mathtools}
  \usepackage{stmaryrd}
  \newcommand{\set}[1]{\left\{#1\right\}}
     \usepackage {tikz}
     \usetikzlibrary {cd}
     \usetikzlibrary {graphs,positioning,decorations.pathmorphing}
     
  \definecolor {green}{RGB}{27,158,119}
  \definecolor {orange}{RGB}{217,95,2}
  \definecolor {purple}{RGB}{117,112,179}

     
    ]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
      \begin {tikzcd}[
    column sep=large,
    cells={nodes={draw=gray}},
    execute at end picture={
      \node [anchor=west] at (current bounding box.south east) {,};
    }
  ]
    \begin {tikzpicture}[baseline=(current bounding box.center), every node/.append style={draw=none}]
      \node [draw=gray] {$\mathcal {C}$};
      \path  graph[math nodes]{
        { [name=r1, fresh nodes] "" -!- x };
        { [name=s0, fresh nodes] x -> s <- x };
        { [name=r0, fresh nodes] "" -!- x };
        r1 x -> s0 s <- r0 x;
        r1 x -> s0 x <- r0 x;
        r1 x -> s0 x' <- r0 x;
      };
    \end {tikzpicture}
    &
    \begin {tikzpicture}[baseline=(current bounding box.center), every node/.append style={draw=none}]
      \node [draw=gray] [yshift=0.5cm] {$\operatorname {Zig}(\mathcal {C})$};
      \path  graph[math nodes] {
        T;
        C;
        S;
        T ->["$b$"] C <-["$f$"] S;
      };
    \end {tikzpicture}
    \ar [l, rightsquigarrow, "\text {explode}"']
    &
    \begin {tikzpicture}
      \node [draw=none] (Z) {$Z$};
      \node [above=0.25cm of Z] (c) {$\operatorname {Zig}^{2}(\mathcal {C})$};
    \end {tikzpicture}
    \ar [l, rightsquigarrow, "\text {explode}"']
  \end {tikzcd}
    ]]></fr:resource-source></fr:resource></html:figure>


  for diagrams in <fr:tex display="inline"><![CDATA[\mathcal {C}]]></fr:tex>, <fr:tex display="inline"><![CDATA[\operatorname {Zig}(\mathcal {C})]]></fr:tex>, and <fr:tex display="inline"><![CDATA[\operatorname {Zig}^{2}(\mathcal {C})]]></fr:tex>, respectively, indexed by categories
  
  
  <html:figure><fr:resource hash="3606bf11876266af1a661b45c3fc4a53"><fr:resource-content><html:img src="/3606bf11876266af1a661b45c3fc4a53.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[
       \usepackage{amsmath,amssymb}
  \usepackage{mathtools}
  \usepackage{stmaryrd}
  \newcommand{\set}[1]{\left\{#1\right\}}
     \usepackage {tikz}
     \usetikzlibrary {cd}
     \usetikzlibrary {graphs,positioning}
     
  \definecolor {green}{RGB}{27,158,119}
  \definecolor {orange}{RGB}{217,95,2}
  \definecolor {purple}{RGB}{117,112,179}

     
    ]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
      \begin {tikzcd}[
    cells={nodes={draw=gray}},
    execute at end picture={
      \node [anchor=west] at (current bounding box.south east) {,};
    }
  ]
    \begin {tikzpicture}[baseline=(current bounding box.center), every node/.append style={draw=none}]
      \node [draw=gray] {$E_{Z}^2 (\mathbf {1})$};
      \path  graph[math nodes, grow right sep]{
        { [name=r1, fresh nodes] "\phantom {(r_0, s_0, r_0)}" -!- x / "(r_0, r_1, r_0)" };
        { [name=s0, fresh nodes] x / "(r_0, s_0, r_0)" -> s / "(s_0, s_0, r_0)" <- x / "(r_1, s_0, r_0)" };
        { [name=r0, fresh nodes] "\phantom {(r_0, s_0, r_0)}" -!- x / "(r_0, r_0, r_0)" };
        r1 x -> s0 s <- r0 x;
        r1 x -> s0 x <- r0 x;
        r1 x -> s0 x' <- r0 x;
      };
    \end {tikzpicture}
    \ar [r, shorten = 5pt, "P_{Z}^2"]
    &
    \begin {tikzpicture}[baseline=(current bounding box.center), every node/.append style={draw=none}]
      \node [draw=gray] [yshift=0.5cm] {$E_{Z} (\mathbf {1})$};
      \path  graph[math nodes] {
        T / "(r_1, r_0)";
        C / "(s_0, r_0)";
        S / "(r_0, r_0)";
        T -> C <- S;
      };
    \end {tikzpicture}
    \ar [r, shorten = 5pt, "P_{Z}"]
    &
    \begin {tikzpicture}
      \node [draw=none] (Z) {$r_0$};
      \node [above=0.25cm of Z] (c) {$\mathbf {1}$};
    \end {tikzpicture}
  \end {tikzcd}
    ]]></fr:resource-source></fr:resource></html:figure>


  where the parenting <fr:tex display="inline"><![CDATA[\mathbf {Pos}]]></fr:tex>-functor <fr:tex display="inline"><![CDATA[P_{Z}^i]]></fr:tex> is the (non-injective) tuple-tail map on objects, i.e. <fr:tex display="inline"><![CDATA[P_{Z}^2 (a, b, c) = (b, c)]]></fr:tex>.
</html:p></fr:mainmatter></fr:tree><html:p>
          This stratification forms a <fr:link href="/coherent-inverses-QPQ4/" title="tree-cover oplax diagram" uri="https://forest.nickx.hu/coherent-inverses-QPQ4/" display-uri="coherent-inverses-QPQ4" type="local">tree-cover oplax diagram</fr:link>, which we call <html:em>the <fr:link href="/coherent-inverses-LQGR/" title="level-wise tree-cover oplax diagrams" uri="https://forest.nickx.hu/coherent-inverses-LQGR/" display-uri="coherent-inverses-LQGR" type="local">level-wise tree-cover oplax diagram</fr:link></html:em>.
        </html:p><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>12</fr:month><fr:day>12</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-LQGR/</fr:uri><fr:display-uri>coherent-inverses-LQGR</fr:display-uri><fr:route>/coherent-inverses-LQGR/</fr:route><fr:title text="level-wise tree-cover oplax diagrams"><fr:link href="/coherent-inverses-LQGR/" title="level-wise tree-cover oplax diagrams" uri="https://forest.nickx.hu/coherent-inverses-LQGR/" display-uri="coherent-inverses-LQGR" type="local">level-wise tree-cover oplax diagrams</fr:link></fr:title><fr:taxon>definition</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
  Let <fr:tex display="inline"><![CDATA[({J \xrightarrow {D} \operatorname {Zig}^{n}(\mathcal {C})}, \mathcal {T})]]></fr:tex> be a <fr:link href="/coherent-inverses-QPQ4/" title="tree-cover oplax diagram" uri="https://forest.nickx.hu/coherent-inverses-QPQ4/" display-uri="coherent-inverses-QPQ4" type="local">tree-cover oplax diagram</fr:link>.
  Then we define the <fr:link href="/coherent-inverses-LQGR/" title="level-wise tree-cover oplax diagrams" uri="https://forest.nickx.hu/coherent-inverses-LQGR/" display-uri="coherent-inverses-LQGR" type="local">level-wise tree-cover oplax diagram</fr:link> given by <fr:link href="/coherent-inverses-4S4Y/" title="exploded diagram" uri="https://forest.nickx.hu/coherent-inverses-4S4Y/" display-uri="coherent-inverses-4S4Y" type="local">explosion</fr:link> of <fr:tex display="inline"><![CDATA[D]]></fr:tex>:
  <fr:tex display="block"><![CDATA[
    (E_{D} (J) \xrightarrow {\varepsilon  (D)} \mathcal {C}, \mathcal {T}^\prime ) ,
  ]]></fr:tex>
  where <fr:tex display="inline"><![CDATA[\mathcal {T}^\prime ]]></fr:tex> is the tree-cover obtained by extending <fr:tex display="inline"><![CDATA[\mathcal {T}]]></fr:tex> along <fr:tex display="inline"><![CDATA[E_{D} (J) \xrightarrow {P_{D}} J]]></fr:tex>.
</html:p><html:p>
  That is, for each <fr:tex display="inline"><![CDATA[T \in  \mathcal {T}]]></fr:tex>, we have a corresponding set <fr:tex display="inline"><![CDATA[P_{D}^{-1} (T) \in  \mathcal {T}^\prime ]]></fr:tex> given by preimage, and also an extra level to ensure that each <fr:tex display="inline"><![CDATA[\set {j_e} \in  \mathcal {T}^\prime ]]></fr:tex> for <fr:tex display="inline"><![CDATA[j_e \in  E_{D} (J)]]></fr:tex>.
  The Hasse diagram under the inclusion ordering of <fr:tex display="inline"><![CDATA[\mathcal {T}^\prime ]]></fr:tex> looks like a tree with additional depth one compared to <fr:tex display="inline"><![CDATA[\mathcal {T}]]></fr:tex>.
</html:p></fr:mainmatter></fr:tree><html:p>
          The <fr:tex display="inline"><![CDATA[n]]></fr:tex>-fold <fr:link href="/coherent-inverses-LQGR/" title="level-wise tree-cover oplax diagrams" uri="https://forest.nickx.hu/coherent-inverses-LQGR/" display-uri="coherent-inverses-LQGR" type="local">level-wise tree-cover oplax diagram</fr:link> of a <fr:link href="/coherent-inverses-XQVM/" title="framed zigzag enriched category" uri="https://forest.nickx.hu/coherent-inverses-XQVM/" display-uri="coherent-inverses-XQVM" type="local">framed zigzag</fr:link> <fr:tex display="inline"><![CDATA[Z \in  \operatorname {Zig}^{n}(\mathcal {C})]]></fr:tex> is of particular importance, whereby we start with a <fr:link href="/coherent-inverses-XQVM/" title="framed zigzag enriched category" uri="https://forest.nickx.hu/coherent-inverses-XQVM/" display-uri="coherent-inverses-XQVM" type="local">framed zigzag</fr:link> and consider it as a global element, as in <fr:link href="/coherent-inverses-DZP6/" title="exploded diagrams of framed zigzags and framed zigzag maps are simple oplax diagrams" uri="https://forest.nickx.hu/coherent-inverses-DZP6/" display-uri="coherent-inverses-DZP6" type="local">corollary <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-DZP6/" display-uri="coherent-inverses-DZP6" /></fr:link>, equipping it with the trivial <fr:link href="/coherent-inverses-QPQ4/" title="tree-cover oplax diagram" uri="https://forest.nickx.hu/coherent-inverses-QPQ4/" display-uri="coherent-inverses-QPQ4" type="local">tree cover</fr:link> (<fr:link href="/coherent-inverses-4NZH/" title="Trivial tree covers" uri="https://forest.nickx.hu/coherent-inverses-4NZH/" display-uri="coherent-inverses-4NZH" type="local">remark <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-4NZH/" display-uri="coherent-inverses-4NZH" /></fr:link>), and through <fr:link href="/coherent-inverses-4S4Y/" title="exploded diagram" uri="https://forest.nickx.hu/coherent-inverses-4S4Y/" display-uri="coherent-inverses-4S4Y" type="local">explosion</fr:link> obtain some <fr:link href="/coherent-inverses-RRZ9/" title="simple oplax diagram" uri="https://forest.nickx.hu/coherent-inverses-RRZ9/" display-uri="coherent-inverses-RRZ9" type="local">simple</fr:link> <fr:link href="/coherent-inverses-QPQ4/" title="tree-cover oplax diagram" uri="https://forest.nickx.hu/coherent-inverses-QPQ4/" display-uri="coherent-inverses-QPQ4" type="local">tree-cover oplax diagram</fr:link>
          <fr:tex display="block"><![CDATA[
            (E_{D}^n (J) \xrightarrow {\varepsilon ^n (D)} \mathcal {C}, \mathcal {T}),
          ]]></fr:tex>
          where <fr:tex display="inline"><![CDATA[\mathcal {T}]]></fr:tex> solely encodes the <fr:link href="/coherent-inverses-XQVM/" title="framed zigzag enriched category" uri="https://forest.nickx.hu/coherent-inverses-XQVM/" display-uri="coherent-inverses-XQVM" type="local">framed zigzag</fr:link> structure.
        </html:p><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>12</fr:month><fr:day>31</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-7DES/</fr:uri><fr:display-uri>coherent-inverses-7DES</fr:display-uri><fr:route>/coherent-inverses-7DES/</fr:route><fr:title text="level-wise tree-cover oplax diagram of fully exploded diagrams"><fr:link href="/coherent-inverses-LQGR/" title="level-wise tree-cover oplax diagrams" uri="https://forest.nickx.hu/coherent-inverses-LQGR/" display-uri="coherent-inverses-LQGR" type="local">level-wise tree-cover oplax diagram</fr:link> of fully <fr:link href="/coherent-inverses-4S4Y/" title="exploded diagram" uri="https://forest.nickx.hu/coherent-inverses-4S4Y/" display-uri="coherent-inverses-4S4Y" type="local">exploded diagrams</fr:link></fr:title><fr:taxon>example</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
  Both the <fr:link href="/coherent-inverses-QPQ4/" title="tree-cover oplax diagram" uri="https://forest.nickx.hu/coherent-inverses-QPQ4/" display-uri="coherent-inverses-QPQ4" type="local">tree-cover oplax diagrams</fr:link> in <fr:link href="/coherent-inverses-J2IZ/" title="Non-well-formed tree-cover oplax diagram" uri="https://forest.nickx.hu/coherent-inverses-J2IZ/" display-uri="coherent-inverses-J2IZ" type="local">example <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-J2IZ/" display-uri="coherent-inverses-J2IZ" /></fr:link> and <fr:link href="/coherent-inverses-VR66/" title="weakly collapsible, collapsible, and strongly collapsible morphisms" uri="https://forest.nickx.hu/coherent-inverses-VR66/" display-uri="coherent-inverses-VR66" type="local">example <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-VR66/" display-uri="coherent-inverses-VR66" /></fr:link> are <fr:link href="/coherent-inverses-RRZ9/" title="simple oplax diagram" uri="https://forest.nickx.hu/coherent-inverses-RRZ9/" display-uri="coherent-inverses-RRZ9" type="local">simple</fr:link> <fr:link href="/coherent-inverses-LQGR/" title="level-wise tree-cover oplax diagrams" uri="https://forest.nickx.hu/coherent-inverses-LQGR/" display-uri="coherent-inverses-LQGR" type="local">level-wise tree-cover oplax diagrams</fr:link> obtained from the 2-fold <fr:link href="/coherent-inverses-4S4Y/" title="exploded diagram" uri="https://forest.nickx.hu/coherent-inverses-4S4Y/" display-uri="coherent-inverses-4S4Y" type="local">explosion</fr:link> of some (distinct) <fr:tex display="inline"><![CDATA[Z \in  \operatorname {Zig}^{2}(\mathcal {C})]]></fr:tex>, whose 1-fold <fr:link href="/coherent-inverses-4S4Y/" title="exploded diagram" uri="https://forest.nickx.hu/coherent-inverses-4S4Y/" display-uri="coherent-inverses-4S4Y" type="local">explosion</fr:link> corresponds to some <fr:link href="/coherent-inverses-RRZ9/" title="simple oplax diagram" uri="https://forest.nickx.hu/coherent-inverses-RRZ9/" display-uri="coherent-inverses-RRZ9" type="local">simple oplax diagram</fr:link>
  <fr:tex display="block"><![CDATA[
    r_0 \xrightarrow {f} s_0 \xleftarrow {b} r_1
  ]]></fr:tex>
  equipped with the trivial <fr:link href="/coherent-inverses-QPQ4/" title="tree-cover oplax diagram" uri="https://forest.nickx.hu/coherent-inverses-QPQ4/" display-uri="coherent-inverses-QPQ4" type="local">tree cover</fr:link>.
</html:p></fr:mainmatter></fr:tree><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>12</fr:month><fr:day>31</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-VEEU/</fr:uri><fr:display-uri>coherent-inverses-VEEU</fr:display-uri><fr:route>/coherent-inverses-VEEU/</fr:route><fr:title text="level-wise tree-cover oplax diagram for the 3D monoid multiplication associator"><fr:link href="/coherent-inverses-LQGR/" title="level-wise tree-cover oplax diagrams" uri="https://forest.nickx.hu/coherent-inverses-LQGR/" display-uri="coherent-inverses-LQGR" type="local">level-wise tree-cover oplax diagram</fr:link> for the 3D monoid multiplication associator</fr:title><fr:taxon>example</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
  The following illustrates the <fr:link href="/coherent-inverses-LQGR/" title="level-wise tree-cover oplax diagrams" uri="https://forest.nickx.hu/coherent-inverses-LQGR/" display-uri="coherent-inverses-LQGR" type="local">level-wise tree-cover oplax diagram</fr:link> obtained by the fully <fr:link href="/coherent-inverses-4S4Y/" title="exploded diagram" uri="https://forest.nickx.hu/coherent-inverses-4S4Y/" display-uri="coherent-inverses-4S4Y" type="local">exploded diagram</fr:link> of the <fr:link href="/coherent-inverses-RRZ9/" title="simple oplax diagram" uri="https://forest.nickx.hu/coherent-inverses-RRZ9/" display-uri="coherent-inverses-RRZ9" type="local">simple oplax diagram</fr:link> associated to the object of <fr:tex display="inline"><![CDATA[\operatorname {Zig}^{3}(\mathcal {C})]]></fr:tex>, for some appropriate <fr:tex display="inline"><![CDATA[\mathcal {C}]]></fr:tex> (see <fr:link href="/coherent-inverses-signature/" title="Coherent inverses in higher-categorical string diagrams › Collapsing framed zigzags › Collapse, contraction, and typechecking › framed zigzags over a signature" uri="https://forest.nickx.hu/coherent-inverses-signature/" display-uri="coherent-inverses-signature" type="local">section <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-signature/" display-uri="coherent-inverses-signature" /></fr:link>), which encodes the monoid multiplication associator:
  
  
  
  <html:figure><fr:resource hash="a01b8430ba55464e2f157c57f7cb5748"><fr:resource-content><html:img src="/a01b8430ba55464e2f157c57f7cb5748.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[
        \usepackage{amsmath,amssymb}
  \usepackage{mathtools}
  \usepackage{stmaryrd}
  \newcommand{\set}[1]{\left\{#1\right\}}
      \usepackage {tikz}
      \usetikzlibrary {graphs,fit,3d}
      
  \definecolor {green}{RGB}{27,158,119}
  \definecolor {orange}{RGB}{217,95,2}
  \definecolor {purple}{RGB}{117,112,179}

      
    ]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
      \begin {tikzpicture}[]
        
    \begin {scope}[canvas is zx plane at y=0, xscale=2]
      \path  graph[math nodes, no placement, edge quotes={fill=white, inner sep=1pt, anchor=center, font=\tiny }] {
        {[name=r2, fresh nodes, y=4] x[x=2] -> f[x=3] <- x[x=4]};
        {[name=s1, fresh nodes, y=3] x[x=2] -> m[x=3] <- x[x=4]};
        {[name=r1, fresh nodes, y=2] x[x=1] -> f[x=2] <- x[x=3] -> f[x=4] <- x[x=5]};
        {[name=s0, fresh nodes, y=1] x[x=1] -> m[x=2] <- x[x=3] -> f[x=4] <- x[x=5]};
        {[name=r0, fresh nodes, y=0] x[x=0] -> f[x=1] <- x[x=2] -> f[x=3] <- x[x=4] -> f[x=5] <- x[x=6]};
        s0 m <- {r0 f, r0 f', r1 f};
        s0 m <-[gray] {r0 x, r0 x', r0 x'', r1 x, r1 x'};
        s0 f <- {r0 f'', r1 f'};
        s0 f <-[gray] {r0 x'', r0 x''', r1 x', r1 x''};
        s1 m <- {r1 f, r1 f', r2 f};
        s1 m <-[gray] {r1 x, r1 x', r1 x'', r2 x, r2 x'};
        s0 x <- {r0 x, r1 x};
        s0 x' <- {r0 x'', r1 x'};
        s0 x'' <- {r0 x''', r1 x''};
        s1 x <- {r1 x, r2 x};
        s1 x' <- {r1 x'', r2 x'};
      };
    \end {scope}
    \node [draw, rounded corners, rotate fit=45, fit={(r0 x) (r0 x''')}, inner sep=0pt] {};
    \node [draw, rounded corners, rotate fit=45, fit={(s0 x) (s0 x'')}, inner sep=0pt] {};
    \node [draw, rounded corners, rotate fit=45, fit={(r1 x) (r1 x'')}, inner sep=0pt] {};
    \node [draw, rounded corners, rotate fit=45, fit={(s1 x) (s1 x')}, inner sep=0pt] {};
    \node [draw, rounded corners, rotate fit=45, fit={(r2 x) (r2 x')}, inner sep=0pt] {};
    \node [draw, rounded corners, rotate fit=45, fit={(r0 x) (r0 x''') (r2 x) (r2 x')}, inner sep=4pt] {};
    \coordinate  (b) at (r1 x');
    \begin {scope}[canvas is zx plane at y=4, xscale=2]
      \path  graph[math nodes, no placement, edge quotes={fill=white, inner sep=1pt, anchor=center, font=\tiny }] {
        {[name=r1, fresh nodes, y=2] x[x=2] -> f[x=3] <- x[x=4]};
        {[name=s0, fresh nodes, y=1] x[x=2] -> a / "\alpha " [x=3] <- x[x=4]};
        {[name=r0, fresh nodes, y=0] x[x=0] -> f[x=1] <- x[x=2] -> f[x=3] <- x[x=4] -> f[x=5] <- x[x=6]};
        s0 a <- {r0 f, r0 f', r0 f'', r1 f};
        s0 a <-[gray] {r0 x, r0 x', r0 x'', r0 x''', r1 x, r1 x'};
        s0 x <- {r0 x, r1 x};
        s0 x' <- {r0 x''', r1 x'};
      };
    \end {scope}
    \node [draw, rounded corners, rotate fit=45, fit={(r0 x) (r0 x''')}, inner sep=0pt] {};
    \node [draw, rounded corners, rotate fit=45, fit={(s0 x) (s0 x')}, inner sep=0pt] {};
    \node [draw, rounded corners, rotate fit=45, fit={(r1 x) (r1 x')}, inner sep=0pt] {};
    \node [draw, rounded corners, rotate fit=45, fit={(r0 x) (r0 x''') (r1 x) (r1 x')}, inner sep=4pt] {};
    \coordinate  (a) at (s0 a);
    \begin {scope}[canvas is zx plane at y=10, xscale=2, xshift=3cm]
      \path  graph[math nodes, no placement, edge quotes={fill=white, inner sep=1pt, anchor=center, font=\tiny }] {
        {[name=r2, fresh nodes, y=4] x[x=2] -> f[x=3] <- x[x=4]};
        {[name=s1, fresh nodes, y=3] x[x=2] -> m[x=3] <- x[x=4]};
        {[name=r1, fresh nodes, y=2] x[x=1] -> f[x=2] <- x[x=3] -> f[x=4] <- x[x=5]};
        {[name=s0, fresh nodes, y=1] x[x=1] -> f[x=2] <- x[x=3] -> m[x=4] <- x[x=5]};
        {[name=r0, fresh nodes, y=0] x[x=0] -> f[x=1] <- x[x=2] -> f[x=3] <- x[x=4] -> f[x=5] <- x[x=6]};
        s0 f <- {r0 f, r1 f};
        s0 f <-[gray] {r0 x, r0 x', r1 x, r1 x'};
        s0 m <- {r0 f', r0 f'', r1 f'};
        s0 m <-[gray] {r0 x', r0 x'', r0 x''', r1 x', r1 x''};
        s1 m <- {r1 f, r1 f', r2 f};
        s1 m <-[gray] {r1 x, r1 x', r1 x'', r2 x, r2 x'};
        s0 x <- {r0 x, r1 x};
        s0 x' <- {r0 x', r1 x'};
        s0 x'' <- {r0 x''', r1 x''};
        s1 x <- {r1 x, r2 x};
        s1 x' <- {r1 x'', r2 x'};
      };
    \end {scope}
    \node [draw, rounded corners, rotate fit=45, fit={(r0 x) (r0 x''')}, inner sep=0pt] {};
    \node [draw, rounded corners, rotate fit=45, fit={(s0 x) (s0 x'')}, inner sep=0pt] {};
    \node [draw, rounded corners, rotate fit=45, fit={(r1 x) (r1 x'')}, inner sep=0pt] {};
    \node [draw, rounded corners, rotate fit=45, fit={(s1 x) (s1 x')}, inner sep=0pt] {};
    \node [draw, rounded corners, rotate fit=45, fit={(r2 x) (r2 x')}, inner sep=0pt] {};
    \node [draw, rounded corners, rotate fit=45, fit={(r0 x) (r0 x''') (r2 x) (r2 x')}, inner sep=4pt] {};
    \coordinate  (t) at (r1 x');
    \draw [->, shorten >=35pt, shorten <=60pt] (t) -> node[right, pos=0.6, rotate=45] {\ldots } (a);
    \draw [->, shorten >=35pt, shorten <=60pt] (b) -> node[right, pos=0.6, rotate=45] {\ldots } (a);
  
      \end {tikzpicture}
    ]]></fr:resource-source></fr:resource></html:figure>



  Many arrows aligned along the Z-axis have been omitted for clarity, as well as 2-cell fillers.
</html:p></fr:mainmatter></fr:tree></fr:mainmatter></fr:tree></fr:mainmatter></fr:tree><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2023</fr:year><fr:month>12</fr:month><fr:day>3</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-signature/</fr:uri><fr:display-uri>coherent-inverses-signature</fr:display-uri><fr:route>/coherent-inverses-signature/</fr:route><fr:title text="framed zigzags over a signature"><fr:link href="/coherent-inverses-XQVM/" title="framed zigzag enriched category" uri="https://forest.nickx.hu/coherent-inverses-XQVM/" display-uri="coherent-inverses-XQVM" type="local">framed zigzags</fr:link> over a <fr:link href="/coherent-inverses-US67/" title="signature and framing" uri="https://forest.nickx.hu/coherent-inverses-US67/" display-uri="coherent-inverses-US67" type="local">signature</fr:link></fr:title><fr:taxon>section</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
        In this section, we expand upon the idea that the <fr:tex display="inline"><![CDATA[n]]></fr:tex>-fold iterated <fr:link href="/coherent-inverses-XQVM/" title="framed zigzag enriched category" uri="https://forest.nickx.hu/coherent-inverses-XQVM/" display-uri="coherent-inverses-XQVM" type="local">framed zigzag enriched category</fr:link> <fr:tex display="inline"><![CDATA[\operatorname {Zig}^{n}(\mathcal {C})]]></fr:tex> is like a ‘space’ of combinatorial encodings of <fr:tex display="inline"><![CDATA[n]]></fr:tex>-dimensional string diagrams with respect to some algebraic <fr:link href="/coherent-inverses-US67/" title="signature and framing" uri="https://forest.nickx.hu/coherent-inverses-US67/" display-uri="coherent-inverses-US67" type="local">signature</fr:link> presented by <fr:tex display="inline"><![CDATA[\mathcal {C}]]></fr:tex>, a <fr:link href="/coherent-inverses-L45G/" title="graded \mathbf {Pos}-category" uri="https://forest.nickx.hu/coherent-inverses-L45G/" display-uri="coherent-inverses-L45G" type="local">graded <fr:tex display="inline"><![CDATA[\mathbf {Pos}]]></fr:tex>-category</fr:link>.
        To highlight notationally the change of setting from the abstract to the concrete, we use <fr:tex display="inline"><![CDATA[\Sigma ]]></fr:tex> in place of <fr:tex display="inline"><![CDATA[\mathcal {C}]]></fr:tex>.
      </html:p><html:p>
        Some prerequisite notions are first required for an appropriate algebraic setting, which we first recall for ordinary <fr:link href="/coherent-inverses-UGIR/" title="zigzag category" uri="https://forest.nickx.hu/coherent-inverses-UGIR/" display-uri="coherent-inverses-UGIR" type="local">zigzags</fr:link>.
        Previous iterations of the theory of <fr:link href="/coherent-inverses-UGIR/" title="zigzag category" uri="https://forest.nickx.hu/coherent-inverses-UGIR/" display-uri="coherent-inverses-UGIR" type="local">zigzags</fr:link> (without <fr:link href="/coherent-inverses-US67/" title="signature and framing" uri="https://forest.nickx.hu/coherent-inverses-US67/" display-uri="coherent-inverses-US67" type="local">framing</fr:link>) only considered the case where <fr:tex display="inline"><![CDATA[\Sigma ]]></fr:tex> was a poset: either of <fr:link href="/coherent-inverses-US67/" title="signature and framing" uri="https://forest.nickx.hu/coherent-inverses-US67/" display-uri="coherent-inverses-US67" type="local">generators</fr:link> under boundary inclusion, or even more trivially as <fr:tex display="inline"><![CDATA[[n]]]></fr:tex> for <fr:tex display="inline"><![CDATA[n]]></fr:tex> being the maximum dimension of a <fr:link href="/coherent-inverses-US67/" title="signature and framing" uri="https://forest.nickx.hu/coherent-inverses-US67/" display-uri="coherent-inverses-US67" type="local">generator</fr:link> in <fr:tex display="inline"><![CDATA[\Sigma ]]></fr:tex>.
      </html:p><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>10</fr:month><fr:day>2</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-G6FI/</fr:uri><fr:display-uri>coherent-inverses-G6FI</fr:display-uri><fr:route>/coherent-inverses-G6FI/</fr:route><fr:title text="source and target of a zigzag"><fr:link href="/coherent-inverses-G6FI/" title="source and target of a zigzag" uri="https://forest.nickx.hu/coherent-inverses-G6FI/" display-uri="coherent-inverses-G6FI" type="local">source</fr:link> and <fr:link href="/coherent-inverses-G6FI/" title="source and target of a zigzag" uri="https://forest.nickx.hu/coherent-inverses-G6FI/" display-uri="coherent-inverses-G6FI" type="local">target</fr:link> of a <fr:link href="/coherent-inverses-UGIR/" title="zigzag category" uri="https://forest.nickx.hu/coherent-inverses-UGIR/" display-uri="coherent-inverses-UGIR" type="local">zigzag</fr:link></fr:title><fr:taxon>definition</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
  Every <fr:link href="/coherent-inverses-UGIR/" title="zigzag category" uri="https://forest.nickx.hu/coherent-inverses-UGIR/" display-uri="coherent-inverses-UGIR" type="local">zigzag</fr:link> <fr:tex display="inline"><![CDATA[Z \in  \operatorname {Zig}(\mathcal {C})]]></fr:tex> corresponds to some iterated cospan
  <fr:tex display="block"><![CDATA[
    r_0 \xrightarrow {f_0} s_0 \xleftarrow {b_0} r_1 \to  \cdots  \leftarrow  r_{n+1},
  ]]></fr:tex>
  in <fr:tex display="inline"><![CDATA[\mathcal {C}]]></fr:tex>, where <fr:tex display="inline"><![CDATA[Z]]></fr:tex> has singular height <fr:tex display="inline"><![CDATA[n]]></fr:tex>.
</html:p><html:p>
  The <fr:link href="/coherent-inverses-G6FI/" title="source and target of a zigzag" uri="https://forest.nickx.hu/coherent-inverses-G6FI/" display-uri="coherent-inverses-G6FI" type="local">source</fr:link> of <fr:tex display="inline"><![CDATA[Z]]></fr:tex> is the object <fr:tex display="inline"><![CDATA[r_0]]></fr:tex> of <fr:tex display="inline"><![CDATA[\mathcal {C}]]></fr:tex>, which we denote by <fr:tex display="inline"><![CDATA[\mathsf {src} (Z)]]></fr:tex>, and the <fr:link href="/coherent-inverses-G6FI/" title="source and target of a zigzag" uri="https://forest.nickx.hu/coherent-inverses-G6FI/" display-uri="coherent-inverses-G6FI" type="local">target</fr:link> is the object <fr:tex display="inline"><![CDATA[r_{n+1}]]></fr:tex>, denoted by <fr:tex display="inline"><![CDATA[\mathsf {tgt} (Z)]]></fr:tex>.
  In the case where <fr:tex display="inline"><![CDATA[n = -1]]></fr:tex>, i.e. there are no singular levels <fr:tex display="inline"><![CDATA[s_i]]></fr:tex>, the <fr:link href="/coherent-inverses-G6FI/" title="source and target of a zigzag" uri="https://forest.nickx.hu/coherent-inverses-G6FI/" display-uri="coherent-inverses-G6FI" type="local">source</fr:link> and <fr:link href="/coherent-inverses-G6FI/" title="source and target of a zigzag" uri="https://forest.nickx.hu/coherent-inverses-G6FI/" display-uri="coherent-inverses-G6FI" type="local">target</fr:link> are identical and <fr:tex display="inline"><![CDATA[\set {r_0} = Z \in  \operatorname {Zig}(\mathcal {C})]]></fr:tex> represents the <html:em>identity</html:em> on <fr:tex display="inline"><![CDATA[r_0 \in  \mathcal {C}]]></fr:tex>.
</html:p><html:p>
  Two <fr:link href="/coherent-inverses-UGIR/" title="zigzag category" uri="https://forest.nickx.hu/coherent-inverses-UGIR/" display-uri="coherent-inverses-UGIR" type="local">zigzags</fr:link> <fr:tex display="inline"><![CDATA[Z, Z^\prime  \in  \operatorname {Zig}(\mathcal {C})]]></fr:tex> have the same boundary when their <fr:link href="/coherent-inverses-G6FI/" title="source and target of a zigzag" uri="https://forest.nickx.hu/coherent-inverses-G6FI/" display-uri="coherent-inverses-G6FI" type="local">source</fr:link> and <fr:link href="/coherent-inverses-G6FI/" title="source and target of a zigzag" uri="https://forest.nickx.hu/coherent-inverses-G6FI/" display-uri="coherent-inverses-G6FI" type="local">target</fr:link> match.
</html:p></fr:mainmatter></fr:tree><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>10</fr:month><fr:day>1</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-LFED/</fr:uri><fr:display-uri>coherent-inverses-LFED</fr:display-uri><fr:route>/coherent-inverses-LFED/</fr:route><fr:title text="globular zigzag"><fr:link href="/coherent-inverses-LFED/" title="globular zigzag" uri="https://forest.nickx.hu/coherent-inverses-LFED/" display-uri="coherent-inverses-LFED" type="local">globular</fr:link> <fr:link href="/coherent-inverses-UGIR/" title="zigzag category" uri="https://forest.nickx.hu/coherent-inverses-UGIR/" display-uri="coherent-inverses-UGIR" type="local">zigzag</fr:link></fr:title><fr:taxon>definition</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
  A <fr:link href="/coherent-inverses-UGIR/" title="zigzag category" uri="https://forest.nickx.hu/coherent-inverses-UGIR/" display-uri="coherent-inverses-UGIR" type="local">zigzag</fr:link> <fr:tex display="inline"><![CDATA[Z]]></fr:tex> in an iterated <fr:link href="/coherent-inverses-UGIR/" title="zigzag category" uri="https://forest.nickx.hu/coherent-inverses-UGIR/" display-uri="coherent-inverses-UGIR" type="local">zigzag category</fr:link> <fr:tex display="inline"><![CDATA[\operatorname {Zig}^{n}(\mathcal {C})]]></fr:tex> is <fr:link href="/coherent-inverses-LFED/" title="globular zigzag" uri="https://forest.nickx.hu/coherent-inverses-LFED/" display-uri="coherent-inverses-LFED" type="local">globular</fr:link> with respect to <fr:tex display="inline"><![CDATA[\mathcal {C}]]></fr:tex> if <fr:tex display="inline"><![CDATA[n < 2]]></fr:tex> or otherwise if
  <html:ol><html:li>
      every <fr:link href="/coherent-inverses-UGIR/" title="zigzag category" uri="https://forest.nickx.hu/coherent-inverses-UGIR/" display-uri="coherent-inverses-UGIR" type="local">zigzag</fr:link> in the <fr:link href="/coherent-inverses-4S4Y/" title="exploded diagram" uri="https://forest.nickx.hu/coherent-inverses-4S4Y/" display-uri="coherent-inverses-4S4Y" type="local">exploded diagram</fr:link> in <fr:tex display="inline"><![CDATA[\operatorname {Zig}^{n-1}(\mathcal {C})]]></fr:tex> associated to <fr:tex display="inline"><![CDATA[Z]]></fr:tex> is <fr:link href="/coherent-inverses-LFED/" title="globular zigzag" uri="https://forest.nickx.hu/coherent-inverses-LFED/" display-uri="coherent-inverses-LFED" type="local">globular</fr:link> with respect to <fr:tex display="inline"><![CDATA[\mathcal {C}]]></fr:tex>;
    </html:li>
    <html:li>
      every <fr:link href="/coherent-inverses-UGIR/" title="zigzag category" uri="https://forest.nickx.hu/coherent-inverses-UGIR/" display-uri="coherent-inverses-UGIR" type="local">zigzag map</fr:link> in the 2-fold <fr:link href="/coherent-inverses-4S4Y/" title="exploded diagram" uri="https://forest.nickx.hu/coherent-inverses-4S4Y/" display-uri="coherent-inverses-4S4Y" type="local">exploded diagram</fr:link> in <fr:tex display="inline"><![CDATA[\operatorname {Zig}^{n-2}(\mathcal {C})]]></fr:tex> between regular levels is an identity morphism.
    </html:li></html:ol></html:p></fr:mainmatter></fr:tree><html:p><fr:link href="/coherent-inverses-LFED/" title="globular zigzag" uri="https://forest.nickx.hu/coherent-inverses-LFED/" display-uri="coherent-inverses-LFED" type="local">Globularity</fr:link> imposes the following condition: for any <fr:link href="/coherent-inverses-UGIR/" title="zigzag category" uri="https://forest.nickx.hu/coherent-inverses-UGIR/" display-uri="coherent-inverses-UGIR" type="local">zigzag</fr:link> <fr:tex display="inline"><![CDATA[Z]]></fr:tex> of dimension at least two, the <fr:link href="/coherent-inverses-G6FI/" title="source and target of a zigzag" uri="https://forest.nickx.hu/coherent-inverses-G6FI/" display-uri="coherent-inverses-G6FI" type="local">source</fr:link> of the <fr:link href="/coherent-inverses-G6FI/" title="source and target of a zigzag" uri="https://forest.nickx.hu/coherent-inverses-G6FI/" display-uri="coherent-inverses-G6FI" type="local">source</fr:link> of <fr:tex display="inline"><![CDATA[Z]]></fr:tex> is equal to the <fr:link href="/coherent-inverses-G6FI/" title="source and target of a zigzag" uri="https://forest.nickx.hu/coherent-inverses-G6FI/" display-uri="coherent-inverses-G6FI" type="local">source</fr:link> of the <fr:link href="/coherent-inverses-G6FI/" title="source and target of a zigzag" uri="https://forest.nickx.hu/coherent-inverses-G6FI/" display-uri="coherent-inverses-G6FI" type="local">target</fr:link>, and the <fr:link href="/coherent-inverses-G6FI/" title="source and target of a zigzag" uri="https://forest.nickx.hu/coherent-inverses-G6FI/" display-uri="coherent-inverses-G6FI" type="local">target</fr:link> of the <fr:link href="/coherent-inverses-G6FI/" title="source and target of a zigzag" uri="https://forest.nickx.hu/coherent-inverses-G6FI/" display-uri="coherent-inverses-G6FI" type="local">target</fr:link> is equal to the <fr:link href="/coherent-inverses-G6FI/" title="source and target of a zigzag" uri="https://forest.nickx.hu/coherent-inverses-G6FI/" display-uri="coherent-inverses-G6FI" type="local">target</fr:link> of the <fr:link href="/coherent-inverses-G6FI/" title="source and target of a zigzag" uri="https://forest.nickx.hu/coherent-inverses-G6FI/" display-uri="coherent-inverses-G6FI" type="local">source</fr:link>.
        This is crucial to the interpretation of <fr:link href="/coherent-inverses-UGIR/" title="zigzag category" uri="https://forest.nickx.hu/coherent-inverses-UGIR/" display-uri="coherent-inverses-UGIR" type="local">zigzags</fr:link> as combinatorial encodings of <fr:tex display="inline"><![CDATA[n]]></fr:tex>-dimensional string diagrams, i.e. representing terms of a <html:em>globular</html:em> <fr:tex display="inline"><![CDATA[n]]></fr:tex>-category.
      </html:p><html:p>
        These notions generalise easily to the enriched setting, considering instead <fr:link href="/coherent-inverses-XQVM/" title="framed zigzag enriched category" uri="https://forest.nickx.hu/coherent-inverses-XQVM/" display-uri="coherent-inverses-XQVM" type="local">framed zigzag enriched categories</fr:link>.
      </html:p><html:p>
        For the remainder of this chapter, we will consider all <fr:link href="/coherent-inverses-XQVM/" title="framed zigzag enriched category" uri="https://forest.nickx.hu/coherent-inverses-XQVM/" display-uri="coherent-inverses-XQVM" type="local">framed zigzags</fr:link> to be <fr:link href="/coherent-inverses-LFED/" title="globular zigzag" uri="https://forest.nickx.hu/coherent-inverses-LFED/" display-uri="coherent-inverses-LFED" type="local">globular</fr:link>.
      </html:p><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>10</fr:month><fr:day>17</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-G4B5/</fr:uri><fr:display-uri>coherent-inverses-G4B5</fr:display-uri><fr:route>/coherent-inverses-G4B5/</fr:route><fr:title text="oplax filtered"><fr:link href="/coherent-inverses-G4B5/" title="oplax filtered" uri="https://forest.nickx.hu/coherent-inverses-G4B5/" display-uri="coherent-inverses-G4B5" type="local">oplax filtered</fr:link></fr:title><fr:taxon>definition</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
  A <fr:tex display="inline"><![CDATA[\mathbf {Pos}]]></fr:tex>-category <fr:tex display="inline"><![CDATA[J]]></fr:tex> is <fr:link href="/coherent-inverses-G4B5/" title="oplax filtered" uri="https://forest.nickx.hu/coherent-inverses-G4B5/" display-uri="coherent-inverses-G4B5" type="local">oplax filtered</fr:link> if every finite diagram in <fr:tex display="inline"><![CDATA[J]]></fr:tex> has an <fr:link href="/coherent-inverses-W0JK/" title="oplax cocone" uri="https://forest.nickx.hu/coherent-inverses-W0JK/" display-uri="coherent-inverses-W0JK" type="local">oplax cocone</fr:link>.
</html:p><html:p>
  A <fr:tex display="inline"><![CDATA[\mathbf {Pos}]]></fr:tex>-functor <fr:tex display="inline"><![CDATA[{J \xrightarrow {F} \mathcal {C}}]]></fr:tex> is <fr:link href="/coherent-inverses-G4B5/" title="oplax filtered" uri="https://forest.nickx.hu/coherent-inverses-G4B5/" display-uri="coherent-inverses-G4B5" type="local">oplax filtered</fr:link> if its domain <fr:tex display="inline"><![CDATA[J]]></fr:tex> is <fr:link href="/coherent-inverses-G4B5/" title="oplax filtered" uri="https://forest.nickx.hu/coherent-inverses-G4B5/" display-uri="coherent-inverses-G4B5" type="local">oplax filtered</fr:link>.
</html:p></fr:mainmatter></fr:tree><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>10</fr:month><fr:day>1</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-US67/</fr:uri><fr:display-uri>coherent-inverses-US67</fr:display-uri><fr:route>/coherent-inverses-US67/</fr:route><fr:title text="signature and framing"><fr:link href="/coherent-inverses-US67/" title="signature and framing" uri="https://forest.nickx.hu/coherent-inverses-US67/" display-uri="coherent-inverses-US67" type="local">signature</fr:link> and <fr:link href="/coherent-inverses-US67/" title="signature and framing" uri="https://forest.nickx.hu/coherent-inverses-US67/" display-uri="coherent-inverses-US67" type="local">framing</fr:link></fr:title><fr:taxon>definition</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
  A <fr:link href="/coherent-inverses-US67/" title="signature and framing" uri="https://forest.nickx.hu/coherent-inverses-US67/" display-uri="coherent-inverses-US67" type="local">signature</fr:link> is a <fr:link href="/coherent-inverses-L45G/" title="graded \mathbf {Pos}-category" uri="https://forest.nickx.hu/coherent-inverses-L45G/" display-uri="coherent-inverses-L45G" type="local">graded <fr:tex display="inline"><![CDATA[\mathbf {Pos}]]></fr:tex>-category</fr:link> <fr:tex display="inline"><![CDATA[\Sigma ]]></fr:tex> whose objects are called <fr:link href="/coherent-inverses-US67/" title="signature and framing" uri="https://forest.nickx.hu/coherent-inverses-US67/" display-uri="coherent-inverses-US67" type="local">generators</fr:link>, where the rank of a <fr:link href="/coherent-inverses-US67/" title="signature and framing" uri="https://forest.nickx.hu/coherent-inverses-US67/" display-uri="coherent-inverses-US67" type="local">generator</fr:link> is called its <html:em>dimension</html:em>, and whose morphisms are called <fr:link href="/coherent-inverses-US67/" title="signature and framing" uri="https://forest.nickx.hu/coherent-inverses-US67/" display-uri="coherent-inverses-US67" type="local">frames</fr:link>.
</html:p><html:p>
  Every <fr:link href="/coherent-inverses-US67/" title="signature and framing" uri="https://forest.nickx.hu/coherent-inverses-US67/" display-uri="coherent-inverses-US67" type="local">generator</fr:link> <fr:tex display="inline"><![CDATA[\sigma  \in  \Sigma ]]></fr:tex> is associated to a <fr:link href="/coherent-inverses-LFED/" title="globular zigzag" uri="https://forest.nickx.hu/coherent-inverses-LFED/" display-uri="coherent-inverses-LFED" type="local">globular</fr:link> <fr:link href="/coherent-inverses-XQVM/" title="framed zigzag enriched category" uri="https://forest.nickx.hu/coherent-inverses-XQVM/" display-uri="coherent-inverses-XQVM" type="local">framed zigzag</fr:link> <fr:tex display="inline"><![CDATA[D_\sigma  \in  \operatorname {Zig}^{\mathsf {dim} (\sigma )}(\Sigma )]]></fr:tex> called the <html:em>diagram</html:em> of <fr:tex display="inline"><![CDATA[\sigma ]]></fr:tex>, satisfying the following.
  <html:ol><html:li><html:dl>
        <html:dt><fr:tex display="inline"><![CDATA[\mathsf {dim} (\sigma ) = 0]]></fr:tex></html:dt>
        <html:dd>
          <fr:tex display="inline"><![CDATA[D_\sigma  = \sigma ]]></fr:tex>.
        </html:dd>
        <html:dt><fr:tex display="inline"><![CDATA[\mathsf {dim} (\sigma ) > 0]]></fr:tex></html:dt>
        <html:dd>
          Treating <fr:tex display="inline"><![CDATA[D_\sigma ]]></fr:tex> as a global element <fr:tex display="inline"><![CDATA[\mathbf {1} \xrightarrow {D_\sigma } \operatorname {Zig}^{\mathsf {dim} (\sigma )}(\Sigma )]]></fr:tex>, the <fr:link href="/coherent-inverses-4S4Y/" title="exploded diagram" uri="https://forest.nickx.hu/coherent-inverses-4S4Y/" display-uri="coherent-inverses-4S4Y" type="local">exploded diagram</fr:link>
          <fr:tex display="block"><![CDATA[
            E_{D_\sigma } (\mathbf {1}) \xrightarrow {\varepsilon  (D_\sigma )} \operatorname {Zig}^{\mathsf {dim} (\sigma ) - 1}(\Sigma )
          ]]></fr:tex>
          is of the form
          <fr:tex display="block"><![CDATA[
            S \xrightarrow {f} C \xleftarrow {b} T,
          ]]></fr:tex>
          viz. <fr:tex display="inline"><![CDATA[\mathsf {src} (D_\sigma ) = S]]></fr:tex>, and <fr:tex display="inline"><![CDATA[\mathsf {tgt} (D_\sigma ) = T]]></fr:tex>.
        </html:dd>
      </html:dl></html:li>
    <html:li>
      Every diagram in the <fr:link href="/coherent-inverses-OC2T/" title="explosion bundle" uri="https://forest.nickx.hu/coherent-inverses-OC2T/" display-uri="coherent-inverses-OC2T" type="local">explosion bundle</fr:link> associated to <fr:tex display="inline"><![CDATA[\mathbf {1} \xrightarrow {D_\sigma } \operatorname {Zig}^{\mathsf {dim} (\sigma )}(\Sigma )]]></fr:tex> is <fr:link href="/coherent-inverses-G4B5/" title="oplax filtered" uri="https://forest.nickx.hu/coherent-inverses-G4B5/" display-uri="coherent-inverses-G4B5" type="local">oplax filtered</fr:link>, with the fully <fr:link href="/coherent-inverses-4S4Y/" title="exploded diagram" uri="https://forest.nickx.hu/coherent-inverses-4S4Y/" display-uri="coherent-inverses-4S4Y" type="local">exploded diagram</fr:link> admitting <fr:tex display="inline"><![CDATA[\sigma ]]></fr:tex> as the tip of an <fr:link href="/coherent-inverses-W0JK/" title="oplax cocone" uri="https://forest.nickx.hu/coherent-inverses-W0JK/" display-uri="coherent-inverses-W0JK" type="local">oplax cocone</fr:link> in <fr:tex display="inline"><![CDATA[\Sigma ]]></fr:tex>.
      This <fr:link href="/coherent-inverses-W0JK/" title="oplax cocone" uri="https://forest.nickx.hu/coherent-inverses-W0JK/" display-uri="coherent-inverses-W0JK" type="local">oplax cocone</fr:link> <fr:tex display="inline"><![CDATA[\varepsilon ^n (D_\sigma ) \xRightarrow {{F_{\sigma }}} \mathrm {const}_{\sigma }]]></fr:tex> is called the <fr:link href="/coherent-inverses-US67/" title="signature and framing" uri="https://forest.nickx.hu/coherent-inverses-US67/" display-uri="coherent-inverses-US67" type="local">framing</fr:link> of <fr:tex display="inline"><![CDATA[\sigma ]]></fr:tex>, consisting of a collection of <fr:link href="/coherent-inverses-US67/" title="signature and framing" uri="https://forest.nickx.hu/coherent-inverses-US67/" display-uri="coherent-inverses-US67" type="local">frames</fr:link>.
    </html:li></html:ol></html:p><html:p>
  A <fr:link href="/coherent-inverses-US67/" title="signature and framing" uri="https://forest.nickx.hu/coherent-inverses-US67/" display-uri="coherent-inverses-US67" type="local">generator</fr:link> <fr:tex display="inline"><![CDATA[\sigma ]]></fr:tex> is <fr:link href="/coherent-inverses-ZCMQ/" title="well-formed tree-cover oplax diagram" uri="https://forest.nickx.hu/coherent-inverses-ZCMQ/" display-uri="coherent-inverses-ZCMQ" type="local">well-formed</fr:link> if every diagram in the <fr:link href="/coherent-inverses-OC2T/" title="explosion bundle" uri="https://forest.nickx.hu/coherent-inverses-OC2T/" display-uri="coherent-inverses-OC2T" type="local">explosion bundle</fr:link> associated to <fr:tex display="inline"><![CDATA[\mathbf {1} \xrightarrow {D_\sigma } \operatorname {Zig}^{\mathsf {dim} (\sigma )}(\Sigma )]]></fr:tex> is <fr:link href="/coherent-inverses-ZCMQ/" title="well-formed tree-cover oplax diagram" uri="https://forest.nickx.hu/coherent-inverses-ZCMQ/" display-uri="coherent-inverses-ZCMQ" type="local">well-formed</fr:link> under the <fr:link href="/coherent-inverses-LQGR/" title="level-wise tree-cover oplax diagrams" uri="https://forest.nickx.hu/coherent-inverses-LQGR/" display-uri="coherent-inverses-LQGR" type="local">level-wise tree-cover</fr:link>, and the <fr:link href="/coherent-inverses-US67/" title="signature and framing" uri="https://forest.nickx.hu/coherent-inverses-US67/" display-uri="coherent-inverses-US67" type="local">signature</fr:link> <fr:tex display="inline"><![CDATA[\Sigma ]]></fr:tex> is <fr:link href="/coherent-inverses-ZCMQ/" title="well-formed tree-cover oplax diagram" uri="https://forest.nickx.hu/coherent-inverses-ZCMQ/" display-uri="coherent-inverses-ZCMQ" type="local">well-formed</fr:link> when all of its <fr:link href="/coherent-inverses-US67/" title="signature and framing" uri="https://forest.nickx.hu/coherent-inverses-US67/" display-uri="coherent-inverses-US67" type="local">generators</fr:link> are.
</html:p></fr:mainmatter></fr:tree><html:p>
        Each <fr:link href="/coherent-inverses-US67/" title="signature and framing" uri="https://forest.nickx.hu/coherent-inverses-US67/" display-uri="coherent-inverses-US67" type="local">generator</fr:link> <fr:tex display="inline"><![CDATA[\sigma ]]></fr:tex> of a <fr:link href="/coherent-inverses-US67/" title="signature and framing" uri="https://forest.nickx.hu/coherent-inverses-US67/" display-uri="coherent-inverses-US67" type="local">signature</fr:link> <fr:tex display="inline"><![CDATA[\Sigma ]]></fr:tex> is a generator in the algebraic sense: <fr:tex display="inline"><![CDATA[\Sigma ]]></fr:tex> presents a globular <fr:tex display="inline"><![CDATA[n]]></fr:tex>-category, where <fr:tex display="inline"><![CDATA[n]]></fr:tex> is the maximal dimension of a <fr:link href="/coherent-inverses-US67/" title="signature and framing" uri="https://forest.nickx.hu/coherent-inverses-US67/" display-uri="coherent-inverses-US67" type="local">generator</fr:link> in <fr:tex display="inline"><![CDATA[\Sigma ]]></fr:tex>.
        The associated diagram <fr:tex display="inline"><![CDATA[D_\sigma ]]></fr:tex> is a combinatorial encoding of the term in that <fr:tex display="inline"><![CDATA[n]]></fr:tex>-category presented by <fr:tex display="inline"><![CDATA[\Sigma ]]></fr:tex>, as an object of <fr:tex display="inline"><![CDATA[\operatorname {Zig}^{n}(\Sigma )]]></fr:tex>.
      </html:p><html:p><fr:link href="/coherent-inverses-US67/" title="signature and framing" uri="https://forest.nickx.hu/coherent-inverses-US67/" display-uri="coherent-inverses-US67" type="local">Framing</fr:link> captures the idea that not only does every <fr:link href="/coherent-inverses-US67/" title="signature and framing" uri="https://forest.nickx.hu/coherent-inverses-US67/" display-uri="coherent-inverses-US67" type="local">generator</fr:link> <fr:tex display="inline"><![CDATA[\sigma ]]></fr:tex> need to be tracked by its vertex <fr:link href="/coherent-inverses-OBWC/" title="graph weighting" uri="https://forest.nickx.hu/coherent-inverses-OBWC/" display-uri="coherent-inverses-OBWC" type="local">weight</fr:link> in the <fr:tex display="inline"><![CDATA[n]]></fr:tex>-dimensional space given by the <fr:link href="/coherent-inverses-JGG7/" title="weighted graphs" uri="https://forest.nickx.hu/coherent-inverses-JGG7/" display-uri="coherent-inverses-JGG7" type="local"><fr:tex display="inline"><![CDATA[W]]></fr:tex>-graph</fr:link> underlying its fully <fr:link href="/coherent-inverses-4S4Y/" title="exploded diagram" uri="https://forest.nickx.hu/coherent-inverses-4S4Y/" display-uri="coherent-inverses-4S4Y" type="local">exploded diagram</fr:link>, but moreover so does every incoming edge <fr:link href="/coherent-inverses-OBWC/" title="graph weighting" uri="https://forest.nickx.hu/coherent-inverses-OBWC/" display-uri="coherent-inverses-OBWC" type="local">weight</fr:link>: <html:em>how</html:em> every other <fr:link href="/coherent-inverses-US67/" title="signature and framing" uri="https://forest.nickx.hu/coherent-inverses-US67/" display-uri="coherent-inverses-US67" type="local">generator</fr:link> relates to <fr:tex display="inline"><![CDATA[\sigma ]]></fr:tex> (spacially).
        In particular, it determines the <fr:link href="/coherent-inverses-XQVM/" title="framed zigzag enriched category" uri="https://forest.nickx.hu/coherent-inverses-XQVM/" display-uri="coherent-inverses-XQVM" type="local">framed zigzag maps</fr:link> <fr:tex display="inline"><![CDATA[f, b, f^\prime , b^\prime ]]></fr:tex> in <fr:link href="/coherent-inverses-US67/" title="signature and framing" uri="https://forest.nickx.hu/coherent-inverses-US67/" display-uri="coherent-inverses-US67" type="local">definition <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-US67/" display-uri="coherent-inverses-US67" /></fr:link>; while we don‘t specify this information in the definition of our recursive scheme, if we instead imagine an ’add new <fr:link href="/coherent-inverses-US67/" title="signature and framing" uri="https://forest.nickx.hu/coherent-inverses-US67/" display-uri="coherent-inverses-US67" type="local">generator</fr:link> with specified <fr:link href="/coherent-inverses-G6FI/" title="source and target of a zigzag" uri="https://forest.nickx.hu/coherent-inverses-G6FI/" display-uri="coherent-inverses-G6FI" type="local">source</fr:link> and <fr:link href="/coherent-inverses-G6FI/" title="source and target of a zigzag" uri="https://forest.nickx.hu/coherent-inverses-G6FI/" display-uri="coherent-inverses-G6FI" type="local">target</fr:link>' operation, then these <fr:link href="/coherent-inverses-XQVM/" title="framed zigzag enriched category" uri="https://forest.nickx.hu/coherent-inverses-XQVM/" display-uri="coherent-inverses-XQVM" type="local">framed zigzag maps</fr:link> pin the freshly added new <fr:link href="/coherent-inverses-US67/" title="signature and framing" uri="https://forest.nickx.hu/coherent-inverses-US67/" display-uri="coherent-inverses-US67" type="local">generator</fr:link> in the <fr:tex display="inline"><![CDATA[n]]></fr:tex>-dimensional space associated to the <fr:link href="/coherent-inverses-JGG7/" title="weighted graphs" uri="https://forest.nickx.hu/coherent-inverses-JGG7/" display-uri="coherent-inverses-JGG7" type="local"><fr:tex display="inline"><![CDATA[W]]></fr:tex>-graph</fr:link> underlying its fully <fr:link href="/coherent-inverses-4S4Y/" title="exploded diagram" uri="https://forest.nickx.hu/coherent-inverses-4S4Y/" display-uri="coherent-inverses-4S4Y" type="local">exploded diagram</fr:link>, giving it a framing in the sense of topology.
      </html:p><html:p>
        We give a few example <fr:link href="/coherent-inverses-US67/" title="signature and framing" uri="https://forest.nickx.hu/coherent-inverses-US67/" display-uri="coherent-inverses-US67" type="local">signatures</fr:link>, showing how the <fr:link href="/coherent-inverses-US67/" title="signature and framing" uri="https://forest.nickx.hu/coherent-inverses-US67/" display-uri="coherent-inverses-US67" type="local">framing</fr:link> is used to encode inverses of diagrams.
      </html:p><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2025</fr:year><fr:month>1</fr:month><fr:day>2</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-9FVP/</fr:uri><fr:display-uri>coherent-inverses-9FVP</fr:display-uri><fr:route>/coherent-inverses-9FVP/</fr:route><fr:title text="signature of an invertible 1-cell"><fr:link href="/coherent-inverses-US67/" title="signature and framing" uri="https://forest.nickx.hu/coherent-inverses-US67/" display-uri="coherent-inverses-US67" type="local">signature</fr:link> of an invertible 1-cell</fr:title><fr:taxon>example</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
  Let <fr:tex display="inline"><![CDATA[\Sigma ]]></fr:tex> be the <fr:tex display="inline"><![CDATA[\mathbf {Pos}]]></fr:tex>-category freely generated by
  <fr:tex display="block"><![CDATA[
    x \xrightarrow {f_{r_0}} f \xleftarrow {f_{r_1}} y.
  ]]></fr:tex></html:p><html:p><fr:tex display="inline"><![CDATA[\Sigma ]]></fr:tex> models the algebraic <fr:link href="/coherent-inverses-US67/" title="signature and framing" uri="https://forest.nickx.hu/coherent-inverses-US67/" display-uri="coherent-inverses-US67" type="local">signature</fr:link> which consists of a single 1-cell <fr:tex display="inline"><![CDATA[f\colon  x \to  y]]></fr:tex>, whose diagram <fr:tex display="inline"><![CDATA[D_f]]></fr:tex> in <fr:tex display="inline"><![CDATA[\operatorname {Zig}(\Sigma )]]></fr:tex>, fully <fr:link href="/coherent-inverses-4S4Y/" title="exploded diagram" uri="https://forest.nickx.hu/coherent-inverses-4S4Y/" display-uri="coherent-inverses-4S4Y" type="local">exploded</fr:link>, is given by the above as a cospan.
  The cospan
  <fr:tex display="block"><![CDATA[
    y \xrightarrow {f_{r_1}} f \xleftarrow {f_{r_0}} x
  ]]></fr:tex>
  represents its inverse: <fr:tex display="inline"><![CDATA[f^{-1}\colon  y \to  x]]></fr:tex>.
</html:p></fr:mainmatter></fr:tree><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2025</fr:year><fr:month>1</fr:month><fr:day>2</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-IPBS/</fr:uri><fr:display-uri>coherent-inverses-IPBS</fr:display-uri><fr:route>/coherent-inverses-IPBS/</fr:route><fr:title text="signature of a semigroup"><fr:link href="/coherent-inverses-US67/" title="signature and framing" uri="https://forest.nickx.hu/coherent-inverses-US67/" display-uri="coherent-inverses-US67" type="local">signature</fr:link> of a semigroup</fr:title><fr:taxon>example</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
  Let <fr:tex display="inline"><![CDATA[\Sigma ]]></fr:tex> be the <fr:tex display="inline"><![CDATA[\mathbf {Pos}]]></fr:tex>-category given by three objects <fr:tex display="inline"><![CDATA[x, f, m]]></fr:tex>, and non-trivial morphisms given by the Hom posets:
  
  <html:figure><fr:resource hash="a80ce081eb17ae413bdc6b30d2e4f324"><fr:resource-content><html:img src="/a80ce081eb17ae413bdc6b30d2e4f324.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[
        \usepackage{amsmath,amssymb}
  \usepackage{mathtools}
  \usepackage{stmaryrd}
  \newcommand{\set}[1]{\left\{#1\right\}}
      \usepackage {tikz}
      \usetikzlibrary {graphs,graphdrawing}
      
  \definecolor {green}{RGB}{27,158,119}
  \definecolor {orange}{RGB}{217,95,2}
  \definecolor {purple}{RGB}{117,112,179}

      
    \usegdlibrary {layered}
  
    ]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
      \begin {tikzpicture}[
    execute at end picture={
      \node [anchor=east] at (current bounding box.west) {$\Sigma  (x, f) \coloneqq  $};
      \node [anchor=west] at (current bounding box.south east) {,};
    }
  ]
        
    \path  graph[layered layout, grow'=up, math nodes]{
      f_{r_0};
      f_{r_1};
    };
  
      \end {tikzpicture}
    ]]></fr:resource-source></fr:resource></html:figure>

  
  <html:figure><fr:resource hash="df661f610b831cc90b8789900bef0709"><fr:resource-content><html:img src="/df661f610b831cc90b8789900bef0709.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[
        \usepackage{amsmath,amssymb}
  \usepackage{mathtools}
  \usepackage{stmaryrd}
  \newcommand{\set}[1]{\left\{#1\right\}}
      \usepackage {tikz}
      \usetikzlibrary {graphs,graphdrawing}
      
  \definecolor {green}{RGB}{27,158,119}
  \definecolor {orange}{RGB}{217,95,2}
  \definecolor {purple}{RGB}{117,112,179}

      
    \usegdlibrary {layered}
  
    ]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
      \begin {tikzpicture}[
    execute at end picture={
      \node [anchor=east] at (current bounding box.west) {$\Sigma  (f, m) \coloneqq  $};
      \node [anchor=west] at (current bounding box.south east) {,};
    }
  ]
        
    \path  graph[layered layout, grow'=up, math nodes]{
      m_{(s_0, r_0)};
      m_{(s_1, r_0)};
      m_{(s_0, r_1)};
    };
  
      \end {tikzpicture}
    ]]></fr:resource-source></fr:resource></html:figure>

  
  <html:figure><fr:resource hash="a381a0dc388d638f76a5323ddbb25f47"><fr:resource-content><html:img src="/a381a0dc388d638f76a5323ddbb25f47.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[
        \usepackage{amsmath,amssymb}
  \usepackage{mathtools}
  \usepackage{stmaryrd}
  \newcommand{\set}[1]{\left\{#1\right\}}
      \usepackage {tikz}
      \usetikzlibrary {graphs,graphdrawing}
      
  \definecolor {green}{RGB}{27,158,119}
  \definecolor {orange}{RGB}{217,95,2}
  \definecolor {purple}{RGB}{117,112,179}

      
    \usegdlibrary {layered}
  
    ]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
      \begin {tikzpicture}[
    execute at end picture={
      \node [anchor=east] at (current bounding box.west) {$\Sigma  (f, m) \coloneqq  $};
      \node [anchor=west] at (current bounding box.south east) {.};
    }
  ]
        
    \path  graph[layered layout, grow'=up, math nodes]{
      m_{(r_0, r_0)} -- {"f_{r_0} \circ  m_{(s_0, r_0)}", m_{(r_0, s_0)}};
      m_{(r_1, r_0)} -- {"f_{r_1} \circ  m_{(s_0, r_0)}", "f_{r_0} \circ  m_{(s_1, r_0)}"};
      m_{(r_2, r_0)} -- {"f_{r_1} \circ  m_{(s_1, r_0)}", m_{(r_1, s_0)}};
      m_{(r_0, r_1)} -- {"f_{r_0} \circ  m_{(s_0, r_1)}", m_{(r_0, s_0)}};
      m_{(r_1, r_1)} -- {"f_{r_1} \circ  m_{(s_0, r_1)}", m_{(r_1, s_0)}};
    };
  
      \end {tikzpicture}
    ]]></fr:resource-source></fr:resource></html:figure></html:p><html:p><fr:tex display="inline"><![CDATA[\Sigma ]]></fr:tex> models the algebraic <fr:link href="/coherent-inverses-US67/" title="signature and framing" uri="https://forest.nickx.hu/coherent-inverses-US67/" display-uri="coherent-inverses-US67" type="local">signature</fr:link> which consists of a 2-cell semigroup <fr:tex display="inline"><![CDATA[m\colon  f \circ  f \Rightarrow  f]]></fr:tex> with respect to a 1-cell endomorphism <fr:tex display="inline"><![CDATA[f\colon  x \to  x]]></fr:tex>.
  When fully <fr:link href="/coherent-inverses-4S4Y/" title="exploded diagram" uri="https://forest.nickx.hu/coherent-inverses-4S4Y/" display-uri="coherent-inverses-4S4Y" type="local">exploded</fr:link>, the diagram <fr:tex display="inline"><![CDATA[D_f]]></fr:tex> in <fr:tex display="inline"><![CDATA[\operatorname {Zig}(\Sigma )]]></fr:tex> is given similarly to <fr:link href="/coherent-inverses-9FVP/" title="signature of an invertible 1-cell" uri="https://forest.nickx.hu/coherent-inverses-9FVP/" display-uri="coherent-inverses-9FVP" type="local">example <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-9FVP/" display-uri="coherent-inverses-9FVP" /></fr:link>, and that of <fr:tex display="inline"><![CDATA[D_m]]></fr:tex> in <fr:tex display="inline"><![CDATA[\operatorname {Zig}^{2}(\Sigma )]]></fr:tex> is given by:
  
  
  
  <html:figure><fr:resource hash="2ada14c429f35fc96c5c31ea80b4fc82"><fr:resource-content><html:img src="/2ada14c429f35fc96c5c31ea80b4fc82.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[
        \usepackage{amsmath,amssymb}
  \usepackage{mathtools}
  \usepackage{stmaryrd}
  \newcommand{\set}[1]{\left\{#1\right\}}
      \usepackage {tikz}
      \usetikzlibrary {graphs,quotes,cd}
      
  \definecolor {green}{RGB}{27,158,119}
  \definecolor {orange}{RGB}{217,95,2}
  \definecolor {purple}{RGB}{117,112,179}

      
    ]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
      \begin {tikzpicture}[]
        
    \path  graph[math nodes, grow right=3cm, branch down=2cm, edge quotes={fill=white, inner sep=1pt, anchor=center, font=\tiny }] {
      {[name=r1, fresh nodes, nodes={xshift=3cm}] x ->["$f_{r_0}$"] f <-["$f_{r_1}$"] x};
      {[name=s0, fresh nodes, nodes={xshift=3cm}] x ->["$m_{(r_0, s_0)}$"] m <-["$m_{(r_1, s_0)}$"] x};
      {[name=r0, fresh nodes] x ->["$f_{r_0}$"] f <-["$f_{r_1}$"] x ->["$f_{r_0}$"] f <-["$f_{r_1}$"] x / "x."};
      r0 x -> s0 x <- r1 x;
      r0 x'' -> s0 x' <- r1 x';
      r0 f ->["$m_{(s_0, r_0)}$"] s0 m;
      r0 f' ->["$m_{(s_1, r_0)}$"] s0 m;
      r1 f ->["$m_{(s_0, r_1)}$"] s0 m;
      {[edges={gray}]
        r0 x ->["$m_{(r_0, r_0)}$"{name=BL}] s0 m;
        r0 x' ->["$m_{(r_1, r_0)}$"{name=BM}] s0 m;
        r0 x'' ->["$m_{(r_2, r_0)}$"{name=BR}] s0 m;
        r1 x ->["$m_{(r_0, r_1)}$"{name=TL}] s0 m;
        r1 x' ->["$m_{(r_1, r_1)}$"{name=TR}] s0 m;
      };
    };
    \draw [every edge/.append style={commutative diagrams/Rightarrow, shorten <=3pt, shorten >=3pt}]
      (BL) edge (s0 x)
      (BL) edge (r0 f)
      (BM) edge (r0 f)
      (BM) edge (r0 f')
      (BR) edge (r0 f')
      (BR) edge (s0 x')
      (TL) edge (s0 x)
      (TL) edge (r1 f)
      (TR) edge (r1 f)
      (TR) edge (s0 x')
    ;
  
      \end {tikzpicture}
    ]]></fr:resource-source></fr:resource></html:figure></html:p></fr:mainmatter></fr:tree><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2025</fr:year><fr:month>1</fr:month><fr:day>2</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-RKCS/</fr:uri><fr:display-uri>coherent-inverses-RKCS</fr:display-uri><fr:route>/coherent-inverses-RKCS/</fr:route><fr:title text="signature of a scalar"><fr:link href="/coherent-inverses-US67/" title="signature and framing" uri="https://forest.nickx.hu/coherent-inverses-US67/" display-uri="coherent-inverses-US67" type="local">signature</fr:link> of a scalar</fr:title><fr:taxon>example</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
  Let <fr:tex display="inline"><![CDATA[\Sigma ]]></fr:tex> be the <fr:tex display="inline"><![CDATA[\mathbf {Pos}]]></fr:tex>-category given by two objects, <fr:tex display="inline"><![CDATA[x, s]]></fr:tex>, with non-trivial morphisms given by the Hom poset:
  
  <html:figure><fr:resource hash="fda14064a73ec51eae49ab022632edea"><fr:resource-content><html:img src="/fda14064a73ec51eae49ab022632edea.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[
        \usepackage{amsmath,amssymb}
  \usepackage{mathtools}
  \usepackage{stmaryrd}
  \newcommand{\set}[1]{\left\{#1\right\}}
      \usepackage {tikz}
      \usetikzlibrary {graphs,graphdrawing}
      
  \definecolor {green}{RGB}{27,158,119}
  \definecolor {orange}{RGB}{217,95,2}
  \definecolor {purple}{RGB}{117,112,179}

      
    \usegdlibrary {layered}
  
    ]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
      \begin {tikzpicture}[
    execute at end picture={
      \node [anchor=east] at (current bounding box.west) {$\Sigma  (x, s) \coloneqq  $};
    }
  ]
        
    \path  graph[layered layout, grow'=up, math nodes]{
      s_{(r_0, r_0)} -- {s_{(r_0, s_0)}, s_{(r_1, s_0)}};
      s_{(r_0, r_1)} -- {s_{(r_0, s_0)}, s_{(r_1, s_0)}};
    };
  
      \end {tikzpicture}
    ]]></fr:resource-source></fr:resource></html:figure></html:p><html:p><fr:tex display="inline"><![CDATA[\Sigma ]]></fr:tex> models the algebraic <fr:link href="/coherent-inverses-US67/" title="signature and framing" uri="https://forest.nickx.hu/coherent-inverses-US67/" display-uri="coherent-inverses-US67" type="local">signature</fr:link> which consists of a 2-cell scalar <fr:tex display="inline"><![CDATA[s\colon  
  \text {id}_{x}
 \Rightarrow  
  \text {id}_{x}
]]></fr:tex> with respect to a 0-cell <fr:tex display="inline"><![CDATA[x]]></fr:tex>.
  When fully <fr:link href="/coherent-inverses-4S4Y/" title="exploded diagram" uri="https://forest.nickx.hu/coherent-inverses-4S4Y/" display-uri="coherent-inverses-4S4Y" type="local">exploded</fr:link>, the diagram <fr:tex display="inline"><![CDATA[D_s]]></fr:tex> in <fr:tex display="inline"><![CDATA[\operatorname {Zig}^{2}(\Sigma )]]></fr:tex> is given by:
  
  
  
  <html:figure><fr:resource hash="3b4341e6513cfde4c20a2792915cbe7a"><fr:resource-content><html:img src="/3b4341e6513cfde4c20a2792915cbe7a.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[
        \usepackage{amsmath,amssymb}
  \usepackage{mathtools}
  \usepackage{stmaryrd}
  \newcommand{\set}[1]{\left\{#1\right\}}
      \usepackage {tikz}
      \usetikzlibrary {graphs,quotes,cd}
      
  \definecolor {green}{RGB}{27,158,119}
  \definecolor {orange}{RGB}{217,95,2}
  \definecolor {purple}{RGB}{117,112,179}

      
    ]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
      \begin {tikzpicture}[]
        
    \path  graph[math nodes, grow right=1.75cm, branch down=1.75cm, edge quotes={fill=white, inner sep=1pt, anchor=center, font=\tiny }] {
      {[name=r1, fresh nodes, nodes={xshift=1.75cm}] x};
      {[name=s0, fresh nodes] x ->["$s_{(r_0, s_0)}$"{name=L}] s <-["$s_{(r_1, s_0)}$"{name=R}] x};
      {[name=r0, fresh nodes, nodes={xshift=1.75cm}] x / "x."};
      r0 x -> s0 x <- r1 x;
      r0 x -> s0 x' <- r1 x;
      {[edges={gray}]
        r0 x ->["$s_{(r_0, r_0)}$"{name=B}] s0 s;
        r1 x ->["$s_{(r_0, r_1)}$"{name=T}] s0 s;
      };
    };
    \draw [every edge/.append style={commutative diagrams/Rightarrow, shorten <=3pt, shorten >=3pt}]
      (B) edge (L)
      (B) edge (R)
      (T) edge (L)
      (T) edge (R)
    ;
  
      \end {tikzpicture}
    ]]></fr:resource-source></fr:resource></html:figure></html:p><html:p>
  As a 2-cell, which can be composed both <html:em>vertically</html:em> and <html:em>horizontally</html:em>, <fr:tex display="inline"><![CDATA[s]]></fr:tex> comes in four variants, inverse in any combination with respect to this.
  The associated fully <fr:link href="/coherent-inverses-4S4Y/" title="exploded diagram" uri="https://forest.nickx.hu/coherent-inverses-4S4Y/" display-uri="coherent-inverses-4S4Y" type="local">exploded diagrams</fr:link> in <fr:tex display="inline"><![CDATA[\Sigma ]]></fr:tex> are represented using mirror symmetry along the respective axes:
  
  
  <html:figure><fr:resource hash="5b036b53bf9b8fed2a20bc2dd2c24dfb"><fr:resource-content><html:img src="/5b036b53bf9b8fed2a20bc2dd2c24dfb.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[
       \usepackage{amsmath,amssymb}
  \usepackage{mathtools}
  \usepackage{stmaryrd}
  \newcommand{\set}[1]{\left\{#1\right\}}
     \usepackage {tikz}
     \usetikzlibrary {cd}
     \usetikzlibrary {graphs,decorations.pathmorphing}
     
  \definecolor {green}{RGB}{27,158,119}
  \definecolor {orange}{RGB}{217,95,2}
  \definecolor {purple}{RGB}{117,112,179}

     
    ]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
      \begin {tikzcd}[
  ]
    \begin {tikzpicture}[baseline=(current bounding box.center)]
      \path  graph[math nodes, grow right=1.75cm, branch down=1.75cm, edge quotes={fill=white, inner sep=1pt, anchor=center, font=\tiny }] {
        {[name=r1, fresh nodes, nodes={xshift=1.75cm}] x};
        {[name=s0, fresh nodes] x ->["$s_{(r_0, s_0)}$"{name=L}] s <-["$s_{(r_1, s_0)}$"{name=R}] x};
        {[name=r0, fresh nodes, nodes={xshift=1.75cm}] x};
        r0 x -> s0 x <- r1 x;
        r0 x -> s0 x' <- r1 x;
        {[edges={gray}]
          r0 x ->["$s_{(r_0, r_0)}$"{name=B}] s0 s;
          r1 x ->["$s_{(r_0, r_1)}$"{name=T}] s0 s;
        };
      };
      \draw [every edge/.append style={commutative diagrams/Rightarrow, shorten <=3pt, shorten >=3pt}]
        (B) edge (L)
        (B) edge (R)
        (T) edge (L)
        (T) edge (R)
      ;
    \end {tikzpicture}
    \ar [r, leftrightsquigarrow, "\text {h. inv.}"]
    \ar [d, leftrightsquigarrow, "\text {v. inv.}"]
    &
    \begin {tikzpicture}[baseline=(current bounding box.center)]
      \path  graph[math nodes, grow right=1.75cm, branch down=1.75cm, edge quotes={fill=white, inner sep=1pt, anchor=center, font=\tiny }] {
        {[name=r1, fresh nodes, nodes={xshift=1.75cm}] x};
        {[name=s0, fresh nodes] x ->["$s_{(r_1, s_0)}$"{name=L}] s <-["$s_{(r_0, s_0)}$"{name=R}] x};
        {[name=r0, fresh nodes, nodes={xshift=1.75cm}] x};
        r0 x -> s0 x <- r1 x;
        r0 x -> s0 x' <- r1 x;
        {[edges={gray}]
          r0 x ->["$s_{(r_0, r_0)}$"{name=B}] s0 s;
          r1 x ->["$s_{(r_0, r_1)}$"{name=T}] s0 s;
        };
      };
      \draw [every edge/.append style={commutative diagrams/Rightarrow, shorten <=3pt, shorten >=3pt}]
        (B) edge (L)
        (B) edge (R)
        (T) edge (L)
        (T) edge (R)
      ;
    \end {tikzpicture}
    \ar [d, leftrightsquigarrow, "\text {v. inv.}"]
    \\
    \begin {tikzpicture}[baseline=(current bounding box.center)]
      \path  graph[math nodes, grow right=1.75cm, branch down=1.75cm, edge quotes={fill=white, inner sep=1pt, anchor=center, font=\tiny }] {
        {[name=r1, fresh nodes, nodes={xshift=1.75cm}] x};
        {[name=s0, fresh nodes] x ->["$s_{(r_0, s_0)}$"{name=L}] s <-["$s_{(r_1, s_0)}$"{name=R}] x};
        {[name=r0, fresh nodes, nodes={xshift=1.75cm}] x};
        r0 x -> s0 x <- r1 x;
        r0 x -> s0 x' <- r1 x;
        {[edges={gray}]
          r0 x ->["$s_{(r_0, r_1)}$"{name=B}] s0 s;
          r1 x ->["$s_{(r_0, r_0)}$"{name=T}] s0 s;
        };
      };
      \draw [every edge/.append style={commutative diagrams/Rightarrow, shorten <=3pt, shorten >=3pt}]
        (B) edge (L)
        (B) edge (R)
        (T) edge (L)
        (T) edge (R)
      ;
    \end {tikzpicture}
    \ar [r, leftrightsquigarrow, "\text {h. inv.}"]
    &
    \begin {tikzpicture}[baseline=(current bounding box.center)]
      \path  graph[math nodes, grow right=1.75cm, branch down=1.75cm, edge quotes={fill=white, inner sep=1pt, anchor=center, font=\tiny }] {
        {[name=r1, fresh nodes, nodes={xshift=1.75cm}] x};
        {[name=s0, fresh nodes] x ->["$s_{(r_1, s_0)}$"{name=L}] s <-["$s_{(r_0, s_0)}$"{name=R}] x};
        {[name=r0, fresh nodes, nodes={xshift=1.75cm}] x / "x."};
        r0 x -> s0 x <- r1 x;
        r0 x -> s0 x' <- r1 x;
        {[edges={gray}]
          r0 x ->["$s_{(r_0, r_1)}$"{name=B}] s0 s;
          r1 x ->["$s_{(r_0, r_0)}$"{name=T}] s0 s;
        };
      };
      \draw [every edge/.append style={commutative diagrams/Rightarrow, shorten <=3pt, shorten >=3pt}]
        (B) edge (L)
        (B) edge (R)
        (T) edge (L)
        (T) edge (R)
      ;
    \end {tikzpicture}
  \end {tikzcd}
    ]]></fr:resource-source></fr:resource></html:figure></html:p></fr:mainmatter></fr:tree><html:p>
        We can relate to the previous iteration of the theory of <fr:link href="/coherent-inverses-UGIR/" title="zigzag category" uri="https://forest.nickx.hu/coherent-inverses-UGIR/" display-uri="coherent-inverses-UGIR" type="local">zigzags</fr:link> as follows.
      </html:p><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>12</fr:month><fr:day>31</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-01J5/</fr:uri><fr:display-uri>coherent-inverses-01J5</fr:display-uri><fr:route>/coherent-inverses-01J5/</fr:route><fr:title text="Unframing">Unframing</fr:title><fr:taxon>remark</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
  Using <fr:link href="/coherent-inverses-5YGZ/" title="underlying (graded) poset of a finite direct \mathbf {Pos}-category" uri="https://forest.nickx.hu/coherent-inverses-5YGZ/" display-uri="coherent-inverses-5YGZ" type="local">definition <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-5YGZ/" display-uri="coherent-inverses-5YGZ" /></fr:link>, for any <fr:link href="/coherent-inverses-US67/" title="signature and framing" uri="https://forest.nickx.hu/coherent-inverses-US67/" display-uri="coherent-inverses-US67" type="local">signature</fr:link> <fr:tex display="inline"><![CDATA[\Sigma ]]></fr:tex>, its <fr:link href="/coherent-inverses-5YGZ/" title="underlying (graded) poset of a finite direct \mathbf {Pos}-category" uri="https://forest.nickx.hu/coherent-inverses-5YGZ/" display-uri="coherent-inverses-5YGZ" type="local">underlying poset</fr:link> <fr:tex display="inline"><![CDATA[{\Sigma }_\leq ]]></fr:tex> as a category forms the ‘unframed’ version of <fr:tex display="inline"><![CDATA[\Sigma ]]></fr:tex>, as in the original <fr:link href="/coherent-inverses-UGIR/" title="zigzag category" uri="https://forest.nickx.hu/coherent-inverses-UGIR/" display-uri="coherent-inverses-UGIR" type="local">zigzag category</fr:link> construction.
</html:p><html:p>
  Here, for any pair of <fr:link href="/coherent-inverses-US67/" title="signature and framing" uri="https://forest.nickx.hu/coherent-inverses-US67/" display-uri="coherent-inverses-US67" type="local">generators</fr:link>, <fr:tex display="inline"><![CDATA[\sigma  \leq  \sigma ^\prime  \in  {\Sigma }_\leq ]]></fr:tex> exactly if <fr:tex display="inline"><![CDATA[\sigma ]]></fr:tex> appears in some boundary of <fr:tex display="inline"><![CDATA[\sigma ^\prime ]]></fr:tex>, although the <fr:link href="/coherent-inverses-US67/" title="signature and framing" uri="https://forest.nickx.hu/coherent-inverses-US67/" display-uri="coherent-inverses-US67" type="local">framing</fr:link> — the information determining its position on the boundary — has been lost.
  Fundamentally, this is why the original <fr:link href="/coherent-inverses-UGIR/" title="zigzag category" uri="https://forest.nickx.hu/coherent-inverses-UGIR/" display-uri="coherent-inverses-UGIR" type="local">zigzag category</fr:link> construction cannot capture the distinction between some combinatorial encoding of some <fr:tex display="inline"><![CDATA[n]]></fr:tex>-dimensional string diagram and its inverse, because this positional information is crucial.
</html:p></fr:mainmatter></fr:tree><html:p>
        We also have a notion of minimal <fr:link href="/coherent-inverses-LRMM/" title="subsignature" uri="https://forest.nickx.hu/coherent-inverses-LRMM/" display-uri="coherent-inverses-LRMM" type="local">subsignature</fr:link> with respect to some set <fr:tex display="inline"><![CDATA[G]]></fr:tex> of <fr:link href="/coherent-inverses-US67/" title="signature and framing" uri="https://forest.nickx.hu/coherent-inverses-US67/" display-uri="coherent-inverses-US67" type="local">generators</fr:link>.
      </html:p><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>11</fr:month><fr:day>6</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-LRMM/</fr:uri><fr:display-uri>coherent-inverses-LRMM</fr:display-uri><fr:route>/coherent-inverses-LRMM/</fr:route><fr:title text="subsignature"><fr:link href="/coherent-inverses-LRMM/" title="subsignature" uri="https://forest.nickx.hu/coherent-inverses-LRMM/" display-uri="coherent-inverses-LRMM" type="local">subsignature</fr:link></fr:title><fr:taxon>definition</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
  Let <fr:tex display="inline"><![CDATA[\Sigma ]]></fr:tex> be a <fr:link href="/coherent-inverses-US67/" title="signature and framing" uri="https://forest.nickx.hu/coherent-inverses-US67/" display-uri="coherent-inverses-US67" type="local">signature</fr:link>, and <fr:tex display="inline"><![CDATA[G]]></fr:tex> be a subset of objects of <fr:tex display="inline"><![CDATA[\Sigma ]]></fr:tex>.
  Then we call the full sub-<fr:tex display="inline"><![CDATA[\mathbf {Pos}]]></fr:tex>-category <fr:tex display="inline"><![CDATA[{\Sigma }_{\downarrow  G}]]></fr:tex> whose objects are given by the downwards closure of <fr:tex display="inline"><![CDATA[G]]></fr:tex> with respect to <fr:tex display="inline"><![CDATA[{\Sigma }_\leq ]]></fr:tex> the <fr:link href="/coherent-inverses-LRMM/" title="subsignature" uri="https://forest.nickx.hu/coherent-inverses-LRMM/" display-uri="coherent-inverses-LRMM" type="local">subsignature</fr:link> of <fr:tex display="inline"><![CDATA[\Sigma ]]></fr:tex> with respect to <fr:tex display="inline"><![CDATA[G]]></fr:tex>.
</html:p></fr:mainmatter></fr:tree><html:p>
        There is a natural corestriction operator to produce a <fr:link href="/coherent-inverses-4G17/" title="directly surjective \mathbf {Pos}-functor" uri="https://forest.nickx.hu/coherent-inverses-4G17/" display-uri="coherent-inverses-4G17" type="local">directly surjective</fr:link> <fr:tex display="inline"><![CDATA[\mathbf {Pos}]]></fr:tex>-functor over its minimal <fr:link href="/coherent-inverses-LRMM/" title="subsignature" uri="https://forest.nickx.hu/coherent-inverses-LRMM/" display-uri="coherent-inverses-LRMM" type="local">subsignature</fr:link> from another <fr:tex display="inline"><![CDATA[\mathbf {Pos}]]></fr:tex>-functor over a <fr:link href="/coherent-inverses-US67/" title="signature and framing" uri="https://forest.nickx.hu/coherent-inverses-US67/" display-uri="coherent-inverses-US67" type="local">signature</fr:link> by obtaining <fr:tex display="inline"><![CDATA[G]]></fr:tex> from its image.
      </html:p><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>11</fr:month><fr:day>6</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-1I0W/</fr:uri><fr:display-uri>coherent-inverses-1I0W</fr:display-uri><fr:route>/coherent-inverses-1I0W/</fr:route><fr:title text="Minimal subsignature corestriction of a \mathbf {Pos}-functor">Minimal <fr:link href="/coherent-inverses-LRMM/" title="subsignature" uri="https://forest.nickx.hu/coherent-inverses-LRMM/" display-uri="coherent-inverses-LRMM" type="local">subsignature</fr:link> corestriction of a <fr:tex display="inline"><![CDATA[\mathbf {Pos}]]></fr:tex>-functor</fr:title><fr:taxon>lemma</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
  Given any <fr:tex display="inline"><![CDATA[\mathbf {Pos}]]></fr:tex>-functor <fr:tex display="inline"><![CDATA[{J \xrightarrow {F} \Sigma }]]></fr:tex>, where <fr:tex display="inline"><![CDATA[\Sigma ]]></fr:tex> is a <fr:link href="/coherent-inverses-L45G/" title="graded \mathbf {Pos}-category" uri="https://forest.nickx.hu/coherent-inverses-L45G/" display-uri="coherent-inverses-L45G" type="local">graded <fr:tex display="inline"><![CDATA[\mathbf {Pos}]]></fr:tex>-category</fr:link>, <fr:tex display="inline"><![CDATA[F]]></fr:tex> factors as
  
  
  
  <html:figure><fr:resource hash="94750f0a15a562fab02c2ab38d5b3318"><fr:resource-content><html:img src="/94750f0a15a562fab02c2ab38d5b3318.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[
       \usepackage{amsmath,amssymb}
  \usepackage{mathtools}
  \usepackage{stmaryrd}
  \newcommand{\set}[1]{\left\{#1\right\}}
     \usepackage {tikz}
     \usetikzlibrary {cd}
     \usetikzlibrary {}
     
  \definecolor {green}{RGB}{27,158,119}
  \definecolor {orange}{RGB}{217,95,2}
  \definecolor {purple}{RGB}{117,112,179}

     
    ]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
      \begin {tikzcd}[]
        J
        \ar [rr, , "F"]
        \ar [rd, twoheadrightarrow, "F |^{{\Sigma }_{\downarrow  G}}"', ""{name=L}]
        && \Sigma 
        \ar [ld, hookleftarrow, ""] \\
        & {\Sigma }_{\downarrow  G} ,
        \ar [from=L, to=1-3, phantom, shorten >=10pt, ""']
      \end {tikzcd}
    ]]></fr:resource-source></fr:resource></html:figure>



  where <fr:tex display="inline"><![CDATA[F |^{{\Sigma }_{\downarrow  G}}]]></fr:tex> is <fr:link href="/coherent-inverses-4G17/" title="directly surjective \mathbf {Pos}-functor" uri="https://forest.nickx.hu/coherent-inverses-4G17/" display-uri="coherent-inverses-4G17" type="local">directly surjective</fr:link>, and <fr:tex display="inline"><![CDATA[G]]></fr:tex> is the set of objects in the image of <fr:tex display="inline"><![CDATA[F]]></fr:tex>.
</html:p></fr:mainmatter></fr:tree><html:p>
        Similarly, we can do the same with <fr:tex display="inline"><![CDATA[\mathbf {Pos}]]></fr:tex>-functors over <fr:link href="/coherent-inverses-XQVM/" title="framed zigzag enriched category" uri="https://forest.nickx.hu/coherent-inverses-XQVM/" display-uri="coherent-inverses-XQVM" type="local">framed zigzag enriched categories</fr:link>.
      </html:p><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>11</fr:month><fr:day>6</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-SSX4/</fr:uri><fr:display-uri>coherent-inverses-SSX4</fr:display-uri><fr:route>/coherent-inverses-SSX4/</fr:route><fr:title text="Minimal subsignature corestriction of a \mathbf {Pos}-functor over framed zigzags">Minimal <fr:link href="/coherent-inverses-LRMM/" title="subsignature" uri="https://forest.nickx.hu/coherent-inverses-LRMM/" display-uri="coherent-inverses-LRMM" type="local">subsignature</fr:link> corestriction of a <fr:tex display="inline"><![CDATA[\mathbf {Pos}]]></fr:tex>-functor over <fr:link href="/coherent-inverses-XQVM/" title="framed zigzag enriched category" uri="https://forest.nickx.hu/coherent-inverses-XQVM/" display-uri="coherent-inverses-XQVM" type="local">framed zigzags</fr:link></fr:title><fr:taxon>lemma</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
  Every diagram <fr:tex display="inline"><![CDATA[{J \xrightarrow {D} \operatorname {Zig}^{n}(\Sigma )}]]></fr:tex>, where <fr:tex display="inline"><![CDATA[\Sigma ]]></fr:tex> is a <fr:link href="/coherent-inverses-L45G/" title="graded \mathbf {Pos}-category" uri="https://forest.nickx.hu/coherent-inverses-L45G/" display-uri="coherent-inverses-L45G" type="local">graded <fr:tex display="inline"><![CDATA[\mathbf {Pos}]]></fr:tex>-category</fr:link>, factors as
  
  
  
  <html:figure><fr:resource hash="33f51b22e2ea682ea7033ff34c628090"><fr:resource-content><html:img src="/33f51b22e2ea682ea7033ff34c628090.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[
       \usepackage{amsmath,amssymb}
  \usepackage{mathtools}
  \usepackage{stmaryrd}
  \newcommand{\set}[1]{\left\{#1\right\}}
     \usepackage {tikz}
     \usetikzlibrary {cd}
     \usetikzlibrary {}
     
  \definecolor {green}{RGB}{27,158,119}
  \definecolor {orange}{RGB}{217,95,2}
  \definecolor {purple}{RGB}{117,112,179}

     
    ]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
      \begin {tikzcd}[]
        J
        \ar [rr, , "D"]
        \ar [rd, twoheadrightarrow, "D |^{\operatorname {Zig}^{n}({\Sigma }_{\downarrow  G})}"', ""{name=L}]
        && \operatorname {Zig}^{n}(\Sigma )
        \ar [ld, hookleftarrow, ""] \\
        & \operatorname {Zig}^{n}({\Sigma }_{\downarrow  G}) ,
        \ar [from=L, to=1-3, phantom, shorten >=10pt, ""']
      \end {tikzcd}
    ]]></fr:resource-source></fr:resource></html:figure>



  where <fr:tex display="inline"><![CDATA[D |^{\operatorname {Zig}^{n}({\Sigma }_{\downarrow  G})}]]></fr:tex> is <fr:link href="/coherent-inverses-4G17/" title="directly surjective \mathbf {Pos}-functor" uri="https://forest.nickx.hu/coherent-inverses-4G17/" display-uri="coherent-inverses-4G17" type="local">directly surjective</fr:link>, and <fr:tex display="inline"><![CDATA[G]]></fr:tex> is the set of objects in the image of <fr:tex display="inline"><![CDATA[E_{D}^n]]></fr:tex>.
</html:p></fr:mainmatter></fr:tree><html:p>
        We use this to avoid having to talk about diagrams-with-respect-to-a-<fr:link href="/coherent-inverses-US67/" title="signature and framing" uri="https://forest.nickx.hu/coherent-inverses-US67/" display-uri="coherent-inverses-US67" type="local">signature</fr:link> (à la <html:em>terms-in-context</html:em>).
        Operationally, this reflects the fact that many of our algorithms are not parametrised by <fr:link href="/coherent-inverses-US67/" title="signature and framing" uri="https://forest.nickx.hu/coherent-inverses-US67/" display-uri="coherent-inverses-US67" type="local">signature</fr:link>.
      </html:p></fr:mainmatter></fr:tree><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2023</fr:year><fr:month>12</fr:month><fr:day>3</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-algorithms/</fr:uri><fr:display-uri>coherent-inverses-algorithms</fr:display-uri><fr:route>/coherent-inverses-algorithms/</fr:route><fr:title text="Algorithms">Algorithms</fr:title><fr:taxon>section</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
        Here, we describe the core algorithms underlying <html:span tex="\homotopyio{}"><fr:link href="/homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories/" title="homotopy.io: a proof assistant for finitely-presented globular $n$-categories" uri="https://forest.nickx.hu/homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories/" display-uri="homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories" type="local"><html:code>homotopy.io</html:code></fr:link></html:span> and its manipulation of fully <fr:link href="/coherent-inverses-4S4Y/" title="exploded diagram" uri="https://forest.nickx.hu/coherent-inverses-4S4Y/" display-uri="coherent-inverses-4S4Y" type="local">exploded diagrams</fr:link>.
        It suffices to represent such as <fr:link href="/coherent-inverses-JGG7/" title="weighted graphs" uri="https://forest.nickx.hu/coherent-inverses-JGG7/" display-uri="coherent-inverses-JGG7" type="local"><fr:tex display="inline"><![CDATA[W]]></fr:tex>-graphs</fr:link> as opposed to <fr:link href="/coherent-inverses-4O2T/" title="oplax diagram" uri="https://forest.nickx.hu/coherent-inverses-4O2T/" display-uri="coherent-inverses-4O2T" type="local">oplax diagrams</fr:link>, because
        <html:ol><html:li>
            none of our procedures require composition of morphisms;
          </html:li>
          <html:li>
            2-cell filler data is <html:em>property</html:em>, not <html:em>structure</html:em>: it is either present or not, so it does not require explicit representation.
            Recall from the definition of <fr:link href="/coherent-inverses-4O2T/" title="oplax diagram" uri="https://forest.nickx.hu/coherent-inverses-4O2T/" display-uri="coherent-inverses-4O2T" type="local">oplax diagram</fr:link> that 2-cell fillers exist when a path may be ‘shortcut’ into another path, in the direction of shorter path to longer path.
          </html:li></html:ol></html:p><html:p>
        Another change in representation is for <fr:link href="/coherent-inverses-QPQ4/" title="tree-cover oplax diagram" uri="https://forest.nickx.hu/coherent-inverses-QPQ4/" display-uri="coherent-inverses-QPQ4" type="local">tree covers</fr:link>, which are instead represented by a <html:em>depth function</html:em>, assigning to an edge the rank of its smallest containing set with respect to the inclusion ordering.
        This is strictly less information, but suffices for our purposes.
      </html:p><html:p>
        We also slowly begin to introduce <fr:tex display="inline"><![CDATA[n]]></fr:tex>-dimensional string diagrammatic aspects in place of, or in addition to, drawing fully <fr:link href="/coherent-inverses-4S4Y/" title="exploded diagram" uri="https://forest.nickx.hu/coherent-inverses-4S4Y/" display-uri="coherent-inverses-4S4Y" type="local">exploded diagrams</fr:link>, as in <fr:link href="/coherent-inverses-J4C6/" title="2D string diagram versus fully exploded diagram in \operatorname {Zig}^{2}(\Sigma )" uri="https://forest.nickx.hu/coherent-inverses-J4C6/" display-uri="coherent-inverses-J4C6" type="local">figure <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-J4C6/" display-uri="coherent-inverses-J4C6" /></fr:link>.
      </html:p><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2025</fr:year><fr:month>1</fr:month><fr:day>2</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-J4C6/</fr:uri><fr:display-uri>coherent-inverses-J4C6</fr:display-uri><fr:route>/coherent-inverses-J4C6/</fr:route><fr:title text="2D string diagram versus fully exploded diagram in \operatorname {Zig}^{2}(\Sigma )">2D string diagram versus fully <fr:link href="/coherent-inverses-4S4Y/" title="exploded diagram" uri="https://forest.nickx.hu/coherent-inverses-4S4Y/" display-uri="coherent-inverses-4S4Y" type="local">exploded diagram</fr:link> in <fr:tex display="inline"><![CDATA[\operatorname {Zig}^{2}(\Sigma )]]></fr:tex></fr:title><fr:taxon>figure</fr:taxon></fr:frontmatter><fr:mainmatter><html:figure><fr:resource hash="2514153d3f63ada457ec1884caecf587"><fr:resource-content><html:img src="/2514153d3f63ada457ec1884caecf587.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[
    \usepackage {tikz}
    \usetikzlibrary {cd}
  ]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
        \begin{tikzpicture}[every edge/.append style={semitransparent}]
    \definecolor{generator-0-0-0-pos}{RGB}{41, 128, 185}
    \definecolor{generator-1-2-0-pos}{RGB}{192, 57, 43}
    \begin{scope}
    % Background surfaces
    \fill[generator-0-0-0-pos] (0,0) -- (4,0) -- (4,4) -- (0,4) -- (0,0);
    % Wire layers
    \end{scope}
    \fill[generator-1-2-0-pos] (2,2) circle (0.14);
    \node[circle, fill=white, semitransparent, inner sep=1pt] (s) at (2,2) {$s$};
    \node[circle, fill=white, semitransparent, inner sep=1pt] (xl) at (0,2) {$x$};
    \node[circle, fill=white, semitransparent, inner sep=1pt] (xr) at (4,2) {$x$};
    \node[circle, fill=white, semitransparent, inner sep=1pt] (xb) at (2,0) {$x$};
    \node[circle, fill=white, semitransparent, inner sep=1pt] (xt) at (2,4) {$x$};
    \draw[->]
      (xb) edge (xl)
      (xt) edge (xl)
      (xb) edge (xr)
      (xt) edge (xr)
    ;
    \draw[->]
      (xl) edge["$s_{(r_0, s_0)}$"{commutative diagrams/description, name=L}] (s)
      (xr) edge["$s_{(r_1, s_0)}$"{commutative diagrams/description, name=R}] (s)
      (xb) edge["$s_{(r_0, r_0)}$"{commutative diagrams/description, name=B}] (s)
      (xt) edge["$s_{(r_0, r_1)}$"{commutative diagrams/description, name=T}] (s)
    ;
    \draw[every edge/.append style={commutative diagrams/Rightarrow, shorten <=3pt, shorten >=3pt}]
      (B) edge (L)
      (B) edge (R)
      (T) edge (L)
      (T) edge (R)
    ;
    \end{tikzpicture}
  ]]></fr:resource-source></fr:resource>
  <html:figcaption>Fully <fr:link href="/coherent-inverses-4S4Y/" title="exploded diagram" uri="https://forest.nickx.hu/coherent-inverses-4S4Y/" display-uri="coherent-inverses-4S4Y" type="local">exploded diagram</fr:link> for scalar <fr:tex display="inline"><![CDATA[s]]></fr:tex> overlaid on its 2D string diagram.</html:figcaption></html:figure></fr:mainmatter></fr:tree><html:p>
        The first basic procedure for <fr:link href="/coherent-inverses-4S4Y/" title="exploded diagram" uri="https://forest.nickx.hu/coherent-inverses-4S4Y/" display-uri="coherent-inverses-4S4Y" type="local">explosion</fr:link> is as follows.
      </html:p><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>11</fr:month><fr:day>28</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-BAGY/</fr:uri><fr:display-uri>coherent-inverses-BAGY</fr:display-uri><fr:route>/coherent-inverses-BAGY/</fr:route><fr:title text="explosion"><fr:link href="/coherent-inverses-BAGY/" title="explosion" uri="https://forest.nickx.hu/coherent-inverses-BAGY/" display-uri="coherent-inverses-BAGY" type="local">explosion</fr:link></fr:title><fr:taxon>algorithm</fr:taxon></fr:frontmatter><fr:mainmatter><html:p><html:figure><fr:resource hash="5ed291247bafba47be1f4bac4a344da6"><fr:resource-content><html:img src="/5ed291247bafba47be1f4bac4a344da6.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[
       \usepackage{amsmath,amssymb}
  \usepackage{mathtools}
  \usepackage{stmaryrd}
  \newcommand{\set}[1]{\left\{#1\right\}}
     \usepackage {algpseudocodex}
     
  \definecolor {green}{RGB}{27,158,119}
  \definecolor {orange}{RGB}{217,95,2}
  \definecolor {purple}{RGB}{117,112,179}

    ]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
      \vbox {\begin {algorithmic}[]
    \renewcommand {\algorithmicrequire }{\textbf {Input:}}
    \renewcommand {\algorithmicensure }{\textbf {Output:}}
    \Require  weighted directed graph $G = (V, E, w)$ of dimension $n > 0$, depth function $d\colon  E \to  \mathbb {N}$
    \Ensure  weighted directed graph $G^\prime  = (V^\prime , E^\prime , w^\prime )$ of dimension $n - 1$, depth function $d^\prime \colon  E^\prime  \to  \mathbb {N}$
    \Function {Explode}{$G$, $d$}
      \State  $G^\prime  \gets $ empty graph
      \State  $d^\prime  \gets $ empty function
      \For {$v \in  V$}
        \Comment {explode vertex $v$}
        \LComment {$w(v)$ is a weighted directed graph of dimension $n - 1$}
        \State  $G_v = (V_v, E_v, w_v) \gets  w(v)$
        \For {$v_v \in  V_v$}
          \State  \Call {AddNode}{$G^\prime $, $w_v(v_v)$}
        \EndFor 
        \For {$e_v = (u_v, v_v) \in  E_v$}
          \State  \Call {AddEdge}{$G^\prime $, $u_v$, $v_v$, $w_v(e_v)$}
          \State  $d^\prime (e_v) \gets  d((v_v, v_v))$
        \EndFor 
      \EndFor 
      \For {$e = (u, v) \in  E$}
        \Comment {explode edge $e$}
        \State  $G_u = (V_u, E_u, w_u) \gets  w(u)$
        \State  $G_v = (V_v, E_v, w_v) \gets  w(v)$
        \LComment {$w(e)$ is a weighted directed graph homomorphism of dimension $n - 1$, i.e. a map $V_u \to  V_v$ equipped with a weighting $w_e$}
        \State  $\left (h\colon  G_u \to  G_v, w_e\right ) \gets  w(e)$
        \For {$v_u \mapsto  v_v \in  h$}
          \State  \Call {AddEdge}{$G^\prime $, $v_u$, $v_v$, $w_e((v_u, v_v))$}
          \State  $d^\prime ((v_u, v_v)) \gets  d(e) + 1$
        \EndFor 
      \EndFor 
      \Return  $(G^\prime , d^\prime )$
    \EndFunction 
  \end {algorithmic}}
    ]]></fr:resource-source></fr:resource></html:figure></html:p></fr:mainmatter></fr:tree><html:p>
        This constructs an <fr:link href="/coherent-inverses-4S4Y/" title="exploded diagram" uri="https://forest.nickx.hu/coherent-inverses-4S4Y/" display-uri="coherent-inverses-4S4Y" type="local">exploded diagram</fr:link> along with its <fr:link href="/coherent-inverses-LQGR/" title="level-wise tree-cover oplax diagrams" uri="https://forest.nickx.hu/coherent-inverses-LQGR/" display-uri="coherent-inverses-LQGR" type="local">level-wise tree-cover</fr:link>, and can be iterated to obtain a fully <fr:link href="/coherent-inverses-4S4Y/" title="exploded diagram" uri="https://forest.nickx.hu/coherent-inverses-4S4Y/" display-uri="coherent-inverses-4S4Y" type="local">exploded diagram</fr:link>.
      </html:p><html:p>
        As an algorithm, we express <fr:link href="/coherent-inverses-RF9D/" title="weak collapse" uri="https://forest.nickx.hu/coherent-inverses-RF9D/" display-uri="coherent-inverses-RF9D" type="local">weak collapse</fr:link> as in <fr:link href="/coherent-inverses-FEO0/" title="collapse" uri="https://forest.nickx.hu/coherent-inverses-FEO0/" display-uri="coherent-inverses-FEO0" type="local">algorithm <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-FEO0/" display-uri="coherent-inverses-FEO0" /></fr:link>.
      </html:p><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>11</fr:month><fr:day>27</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-FEO0/</fr:uri><fr:display-uri>coherent-inverses-FEO0</fr:display-uri><fr:route>/coherent-inverses-FEO0/</fr:route><fr:title text="collapse"><fr:link href="/coherent-inverses-FEO0/" title="collapse" uri="https://forest.nickx.hu/coherent-inverses-FEO0/" display-uri="coherent-inverses-FEO0" type="local">collapse</fr:link></fr:title><fr:taxon>algorithm</fr:taxon></fr:frontmatter><fr:mainmatter><html:p><html:figure><fr:resource hash="56056ffc335c24a33fd95bd26f6867b8"><fr:resource-content><html:img src="/56056ffc335c24a33fd95bd26f6867b8.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[
       \usepackage{amsmath,amssymb}
  \usepackage{mathtools}
  \usepackage{stmaryrd}
  \newcommand{\set}[1]{\left\{#1\right\}}
     \usepackage {algpseudocodex}
     
  \definecolor {green}{RGB}{27,158,119}
  \definecolor {orange}{RGB}{217,95,2}
  \definecolor {purple}{RGB}{117,112,179}

    ]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
      \vbox {\begin {algorithmic}[1]
    \renewcommand {\algorithmicrequire }{\textbf {Input:}}
    \renewcommand {\algorithmicensure }{\textbf {Output:}}
    \Require  weighted directed graph $G = (V, E, w)$
    \Ensure  collapsed graph and equivalence relation on $V$
    \Function {Collapse}{$G$}
      \State  $\equiv  \gets $ trivial equivalence relation on $V$
      \For {atomic $e = (u, v) \in  E$ such that $w(u) = w(v)$}
        \LComment {$w(u) = w(v) \implies  e$ weighted by identity}
        \LComment {$e$ atomic $\implies $ every triangle including $e$ admits it as an outer face}
        \If {$\forall  \set {e, p, q} \in  $ \Call {Triangles}{$G$, $e$}$. w(p) = w(q)$}
          \Comment {$e$ is collapsible}
          \State  modify $\equiv $ to identify $u$ and $v$
        \EndIf 
      \EndFor 
      \Return  $(G/\equiv , \equiv )$
      \Comment {$G/\equiv $ is the quotient graph of $G$ by $\equiv $}
    \EndFunction 
  \end {algorithmic}}
    ]]></fr:resource-source></fr:resource></html:figure></html:p></fr:mainmatter></fr:tree><html:p>
        Note that we have not used any data associated to the <fr:link href="/coherent-inverses-QPQ4/" title="tree-cover oplax diagram" uri="https://forest.nickx.hu/coherent-inverses-QPQ4/" display-uri="coherent-inverses-QPQ4" type="local">tree cover</fr:link>, i.e. the depth function.
        In contrast, the variant for <fr:link href="/coherent-inverses-HSJ2/" title="strong collapse" uri="https://forest.nickx.hu/coherent-inverses-HSJ2/" display-uri="coherent-inverses-HSJ2" type="local">strong collapse</fr:link> is as in <fr:link href="/coherent-inverses-VQWY/" title="depth-first collapse" uri="https://forest.nickx.hu/coherent-inverses-VQWY/" display-uri="coherent-inverses-VQWY" type="local">algorithm <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-VQWY/" display-uri="coherent-inverses-VQWY" /></fr:link>.
      </html:p><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>11</fr:month><fr:day>28</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-VQWY/</fr:uri><fr:display-uri>coherent-inverses-VQWY</fr:display-uri><fr:route>/coherent-inverses-VQWY/</fr:route><fr:title text="depth-first collapse"><fr:link href="/coherent-inverses-VQWY/" title="depth-first collapse" uri="https://forest.nickx.hu/coherent-inverses-VQWY/" display-uri="coherent-inverses-VQWY" type="local">depth-first collapse</fr:link></fr:title><fr:taxon>algorithm</fr:taxon></fr:frontmatter><fr:mainmatter><html:p><html:figure><fr:resource hash="2cdd06746cf8c0c73c218ce1d2b94885"><fr:resource-content><html:img src="/2cdd06746cf8c0c73c218ce1d2b94885.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[
       \usepackage{amsmath,amssymb}
  \usepackage{mathtools}
  \usepackage{stmaryrd}
  \newcommand{\set}[1]{\left\{#1\right\}}
     \usepackage {algpseudocodex}
     
  \definecolor {green}{RGB}{27,158,119}
  \definecolor {orange}{RGB}{217,95,2}
  \definecolor {purple}{RGB}{117,112,179}

    ]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
      \vbox {\begin {algorithmic}[]
    \renewcommand {\algorithmicrequire }{\textbf {Input:}}
    \renewcommand {\algorithmicensure }{\textbf {Output:}}
    \Require  weighted directed graph $G = (V, E, w)$, depth function $d\colon  E \to  \mathbb {N}$
    \Ensure  collapsed graph and equivalence relation on $V$
    \Function {DepthFirstCollapse}{$G$, $d$}
      \State  $\equiv  \gets $ trivial equivalence relation on $V$
      \For {atomic $e = (u, v) \in  E$ such that $w(u) = w(v)$ in reverse depth order $d(e)$}
        \LComment {$w(u) = w(v) \implies  e$ weighted by identity}
        \LComment {$e$ atomic $\implies $ every triangle including $e$ admits it as an outer face}
        \If {
          $\forall $ atomic $e^\prime  = (u^\prime , v^\prime ) \in  E$ such that $u \equiv  u^\prime  \vee  v \equiv  v^\prime $.
          \LComment {$\equiv $ ensures $e^\prime $ shares the same weight with $e$}
          \Statex  $\forall  \set {e^\prime , p, q} \in  $ \Call {Triangles}{$G$, $e^\prime $}$. w(p) = w(q)$
        }
          \Comment {$e$ is collapsible}
          \State  modify $\equiv $ to identify $u$ and $v$
        \EndIf 
      \EndFor 
      \Return  $(G/\equiv , \equiv )$
      \Comment {$G/\equiv $ is the quotient graph of $G$ by $\equiv $}
    \EndFunction 
  \end {algorithmic}}
    ]]></fr:resource-source></fr:resource></html:figure></html:p></fr:mainmatter></fr:tree><html:p>
        An example that highlights the differences is given in <fr:link href="/coherent-inverses-VR66/" title="weakly collapsible, collapsible, and strongly collapsible morphisms" uri="https://forest.nickx.hu/coherent-inverses-VR66/" display-uri="coherent-inverses-VR66" type="local">example <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-VR66/" display-uri="coherent-inverses-VR66" /></fr:link>.
        In the following example, both coincide.
      </html:p><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>12</fr:month><fr:day>2</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-W55X/</fr:uri><fr:display-uri>coherent-inverses-W55X</fr:display-uri><fr:route>/coherent-inverses-W55X/</fr:route><fr:title text="Snake collapse">Snake collapse</fr:title><fr:taxon>example</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
  Fix a <fr:link href="/coherent-inverses-US67/" title="signature and framing" uri="https://forest.nickx.hu/coherent-inverses-US67/" display-uri="coherent-inverses-US67" type="local">signature</fr:link> <fr:tex display="inline"><![CDATA[\Sigma ]]></fr:tex> comprising two 0-cells <fr:tex display="inline"><![CDATA[x, y]]></fr:tex> and a single invertible 1-cell <fr:tex display="inline"><![CDATA[f\colon  x \to  y]]></fr:tex>.
  In this <fr:link href="/coherent-inverses-US67/" title="signature and framing" uri="https://forest.nickx.hu/coherent-inverses-US67/" display-uri="coherent-inverses-US67" type="local">signature</fr:link>, recall that we have cancellation and introduction 2-cells:
  <fr:tex display="block"><![CDATA[
    \begin {aligned}
    f^{-1} \circ  f \Rightarrow  
  \text {id}_{x}
, \quad  & f^{-1} \circ  f \Leftarrow  
  \text {id}_{x}
, \\
    f \circ  f^{-1} \Rightarrow  
  \text {id}_{y}
, \quad  & f \circ  f^{-1} \Leftarrow  
  \text {id}_{y}
.
    \end {aligned}
  ]]></fr:tex>
  From this, we can build a 'snake' composite as the following:
  <fr:tex display="block"><![CDATA[
    (f \circ  
  \text {id}_{x}
) \bullet  (f \circ  f^{-1} \circ  f) \bullet  (
  \text {id}_{y}
 \circ  f),
  ]]></fr:tex>
  where <fr:tex display="inline"><![CDATA[\bullet ]]></fr:tex> denotes vertical composition of 2-cells.
</html:p><html:p>
  As a 2D string diagram, such a composite looks like the following:
  
  
  
  <html:figure><fr:resource hash="50d261f1baf679c8d6a1cb9461d9ed39"><fr:resource-content><html:img src="/50d261f1baf679c8d6a1cb9461d9ed39.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[
        \usepackage{amsmath,amssymb}
  \usepackage{mathtools}
  \usepackage{stmaryrd}
  \newcommand{\set}[1]{\left\{#1\right\}}
      \usepackage {tikz}
      \usetikzlibrary {}
      
  \definecolor {green}{RGB}{27,158,119}
  \definecolor {orange}{RGB}{217,95,2}
  \definecolor {purple}{RGB}{117,112,179}

      
    ]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
      \begin {tikzpicture}[]
        
        \definecolor{generator-1-0-0-pos}{RGB}{192, 57, 43}
    \definecolor{generator-2-1-0-neg}{RGB}{166, 105, 8}
    \definecolor{generator-2-1-0-pos}{RGB}{243, 156, 18}
    \definecolor{generator-0-0-0-pos}{RGB}{41, 128, 185}
    \definecolor{generator-2-1-1-zer}{RGB}{251, 221, 173}
    \begin{scope}
    % Background surfaces
    \fill[generator-0-0-0-pos] (0,0) -- (2,0) -- (2,3) .. controls (2,3.8) and (2.4,4) .. (3,4) .. controls (3.6,4) and (4,3.8) .. (4,3) .. controls (4,2.2) and (4.4,2) .. (5,2) .. controls (5.6,2) and (6,2.2) .. (6,3) -- (6,6) -- (0,6) -- (0,0);
    \fill[generator-1-0-0-pos] (2,0) -- (8,0) -- (8,6) -- (6,6) -- (6,3) .. controls (6,2.2) and (5.6,2) .. (5,2) .. controls (4.4,2) and (4,2.2) .. (4,3) .. controls (4,3.8) and (3.6,4) .. (3,4) .. controls (2.4,4) and (2,3.8) .. (2,3) -- (2,0);
    % Wire layers
    \draw[color=generator-2-1-0-neg, line width=5pt](5,2) .. controls (4.4,2) and (4,2.2) .. (4,3) .. controls (4,3.8) and (3.6,4) .. (3,4);
    \draw[color=generator-2-1-0-pos, line width=5pt](2,0) -- (2,3) .. controls (2,3.8) and (2.4,4) .. (3,4)(5,2) .. controls (5.6,2) and (6,2.2) .. (6,3) -- (6,6);
    \end{scope}
    \fill[generator-2-1-1-zer] (5,2) circle (0.14);
    \fill[generator-2-1-1-zer] (3,4) circle (0.14);
  
      \end {tikzpicture}
    ]]></fr:resource-source></fr:resource></html:figure>



  where <fr:tex display="inline"><![CDATA[x]]></fr:tex> and <fr:tex display="inline"><![CDATA[y]]></fr:tex> are represented by blue and red regions respectively, and <fr:tex display="inline"><![CDATA[f]]></fr:tex> is the yellow wire connecting them (<fr:tex display="inline"><![CDATA[f^{-1}]]></fr:tex> is indicated by a different shade of yellow, with cancellations and introductions given by yellow dots).
</html:p><html:p>
  This diagram, as an object of <fr:tex display="inline"><![CDATA[\operatorname {Zig}^{2}(\Sigma )]]></fr:tex>, has combinatorial structure given by the following <fr:link href="/coherent-inverses-JGG7/" title="weighted graphs" uri="https://forest.nickx.hu/coherent-inverses-JGG7/" display-uri="coherent-inverses-JGG7" type="local"><fr:tex display="inline"><![CDATA[W]]></fr:tex>-graph</fr:link> (via <fr:link href="/coherent-inverses-4S4Y/" title="exploded diagram" uri="https://forest.nickx.hu/coherent-inverses-4S4Y/" display-uri="coherent-inverses-4S4Y" type="local">explosion</fr:link>):
  
  
  <html:figure><fr:resource hash="2843692d2a23ec2e9b60cab92d9d89dc"><fr:resource-content><html:img src="/2843692d2a23ec2e9b60cab92d9d89dc.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[
        \usepackage{amsmath,amssymb}
  \usepackage{mathtools}
  \usepackage{stmaryrd}
  \newcommand{\set}[1]{\left\{#1\right\}}
      \usepackage {tikz}
      \usetikzlibrary {graphs,quotes,cd,fit,positioning,decorations.markings}
      
  \definecolor {green}{RGB}{27,158,119}
  \definecolor {orange}{RGB}{217,95,2}
  \definecolor {purple}{RGB}{117,112,179}

      
    ]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
      \begin {tikzpicture}[
    decoration={
      markings,
      mark=at position 0.5 with {
        \draw [red,-] (-2pt,-2pt) -- (2pt,2pt);
        \draw [red,-] (2pt,-2pt) -- (-2pt,2pt);
      }
    }
  ]
        
    \path  graph[math nodes, grow right=1.5cm, edge quotes={fill=white, inner sep=1pt, anchor=center, font=\tiny }] {
      {[name=r2, fresh nodes, nodes={xshift=6cm}] x ->["$f_{r_0}$"] f <-["$f_{r_1}$"] y};
      {[name=s1, fresh nodes, nodes={xshift=1.5cm}] x ->["$f_{r_0}$"] f <-["$f_{r_0}$"] x [xshift=1.5cm] ->["$f_{r_0}$"] f [xshift=1.5cm] <-["$f_{r_1}$"] y [xshift=1.5cm]};
      {[name=r1, fresh nodes] x ->["$f_{r_0}$"] f <-["$f_{r_1}$"] y ->["$f_{r_1}$"] f <-["$f_{r_0}$"] x ->["$f_{r_0}$"] f <-["$f_{r_1}$"] y};
      {[name=s0, fresh nodes] x ->["$f_{r_0}$"] f <-["$f_{r_1}$"] y ->["$f_{r_1}$"] f [xshift=1.5cm] <-["$f_{r_1}$"] y [xshift=1.5cm]};
      {[name=r0, fresh nodes] x ->["$f_{r_0}$"] f <-["$f_{r_1}$"] y};
      {[edges={orange, postaction={decorate}}] r0 f -> s0 f <- r1 f -> s1 f <- r1 f' -> s0 f' <- r1 f'' -> s1 f' <- r2 f};
      {[edges={cyan, postaction={decorate}}] r0 x -> s0 x <- r1 x -> s1 x <- r2 x};
      {[edges={red, postaction={decorate}}] r0 y -> s0 y' <- r1 y' -> s1 y <- r2 y};
      {[edges={red, postaction={decorate}}] r0 y -> s0 y <- r1 y};
      {[edges={cyan, postaction={decorate}}] r1 x' -> s1 x' <- r2 x};
      {[edges={gray, "$f_{r_0}$"}] r0 x -> s0 f <- r1 x -> s1 f <- r2 x -> s1 f' <- r1 x' -> {s0 f', s1 f}};
      {[edges={gray, "$f_{r_1}$"}] r2 y -> s1 f' <- r1 y' -> s0 f' <- r0 y -> s0 f <- r1 y -> {s1 f, s0 f'}};
    };
  
      \end {tikzpicture}
    ]]></fr:resource-source></fr:resource></html:figure>


  Every atomic edge is coloured (recall that an atomic edge is one which appears as an outer face, i.e. it is not a 'composite'), and non-atomic edges are grayed out.
  Each triangle, as in <fr:link href="/coherent-inverses-FEO0/" title="collapse" uri="https://forest.nickx.hu/coherent-inverses-FEO0/" display-uri="coherent-inverses-FEO0" type="local">algorithm <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-FEO0/" display-uri="coherent-inverses-FEO0" /></fr:link> line 6, is just a collection of triples of edges in this <fr:link href="/coherent-inverses-JGG7/" title="weighted graphs" uri="https://forest.nickx.hu/coherent-inverses-JGG7/" display-uri="coherent-inverses-JGG7" type="local"><fr:tex display="inline"><![CDATA[W]]></fr:tex>-graph</fr:link> which form a triangle.
  It happens to be the case that every such triangle admits the identity as its underlying 2-cell filler, thus every atomic identity edge is <fr:link href="/coherent-inverses-NBLG/" title="collapsible morphism" uri="https://forest.nickx.hu/coherent-inverses-NBLG/" display-uri="coherent-inverses-NBLG" type="local">collapsible</fr:link>, which we mark by crossing out.
  The resulting collapsed <fr:link href="/coherent-inverses-JGG7/" title="weighted graphs" uri="https://forest.nickx.hu/coherent-inverses-JGG7/" display-uri="coherent-inverses-JGG7" type="local"><fr:tex display="inline"><![CDATA[W]]></fr:tex>-graph</fr:link> is given by:
  <fr:tex display="block"><![CDATA[
    x \xrightarrow {f_{r_0}} f \xleftarrow {f_{r_1}} y.
  ]]></fr:tex></html:p></fr:mainmatter></fr:tree><html:p>
        The <fr:link href="/coherent-inverses-FEO0/" title="collapse" uri="https://forest.nickx.hu/coherent-inverses-FEO0/" display-uri="coherent-inverses-FEO0" type="local">collapse algorithm</fr:link> is used in the construction of <fr:link href="/coherent-inverses-US67/" title="signature and framing" uri="https://forest.nickx.hu/coherent-inverses-US67/" display-uri="coherent-inverses-US67" type="local">signatures</fr:link> in order to ensure <fr:link href="/coherent-inverses-ZCMQ/" title="well-formed tree-cover oplax diagram" uri="https://forest.nickx.hu/coherent-inverses-ZCMQ/" display-uri="coherent-inverses-ZCMQ" type="local">well-formedness</fr:link>, as follows.
      </html:p><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>11</fr:month><fr:day>28</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-9DJY/</fr:uri><fr:display-uri>coherent-inverses-9DJY</fr:display-uri><fr:route>/coherent-inverses-9DJY/</fr:route><fr:title text="generator creation"><fr:link href="/coherent-inverses-9DJY/" title="generator creation" uri="https://forest.nickx.hu/coherent-inverses-9DJY/" display-uri="coherent-inverses-9DJY" type="local">generator creation</fr:link></fr:title><fr:taxon>algorithm</fr:taxon></fr:frontmatter><fr:mainmatter><html:p><html:figure><fr:resource hash="4d205ee1dd6d3b9ef0e3bd078d3e03db"><fr:resource-content><html:img src="/4d205ee1dd6d3b9ef0e3bd078d3e03db.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[
       \usepackage{amsmath,amssymb}
  \usepackage{mathtools}
  \usepackage{stmaryrd}
  \newcommand{\set}[1]{\left\{#1\right\}}
     \usepackage {algpseudocodex}
     
  \definecolor {green}{RGB}{27,158,119}
  \definecolor {orange}{RGB}{217,95,2}
  \definecolor {purple}{RGB}{117,112,179}

    ]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
      \vbox {\begin {algorithmic}[1]
    \renewcommand {\algorithmicrequire }{\textbf {Input:}}
    \renewcommand {\algorithmicensure }{\textbf {Output:}}
    \Require  signature $\Sigma $, new generator name $\sigma $
    \Ensure  extended signature $\Sigma  \subset  \Sigma ^\prime $
    \Function {AddGeneratorZero}{$\Sigma $, $\sigma $}
      \State  \Return  $\Sigma  \cup  \set {\sigma  \mapsto  \set {\sigma }}$
    \EndFunction 
    \Require  source $s$, target $t$
    \Statex  where $n \coloneqq  \Call {Rank}{s} = \Call {Rank}{t}$
    \Statex  satisfying globularity for $s$ and $t$ if $n > 0$
    \Ensure  weighted directed graph $G = (V, E, w)$
    \Function {GenerateBoundary}{$s, t$}
      \State  $\mathsf {src} \gets  s$; $\mathsf {tgt} \gets  t$
      \State  $G \gets  \set {\mathsf {src}} \cup  \set {\mathsf {tgt}}$
      \While {$\Call {Dim}{G} > 0$}
        \State  $(G, \_) \gets  \Call {Explode}{G, \emptyset }$
        \For {$\partial  \in  \set {\Call {Source}{}, \Call {Target}{}}$}
          \State  $v \gets  \Call {AddNode}{G, \Call {\partial }{\mathsf {src}}}$
          \Comment {globularity: $\Call {\partial }{\mathsf {src}} = \Call {\partial }{\mathsf {tgt}}$}
          \State  $\Call {AddEdge}{G, \Call {\partial }{\mathsf {src}}, v, 
  \text {id}_{}
}$
          \State  $\Call {AddEdge}{G, \Call {\partial }{\mathsf {tgt}}, v, 
  \text {id}_{}
}$
        \EndFor 
        \State  $\mathsf {src} \gets  \Call {Source}{\mathsf {src}}$; $\mathsf {tgt} \gets  \Call {Target}{\mathsf {tgt}}$
      \EndWhile 
      \Return  $G$
    \EndFunction 
    \Require  signature $\Sigma $, new generator name $\sigma $, source $s$, target $t$
    \Statex  where $n \coloneqq  \Call {Rank}{s} = \Call {Rank}{t}$
    \Statex  satisfying globularity for $s$ and $t$ if $n > 0$
    \Ensure  extended signature $\Sigma  \subset  \Sigma ^\prime $
    \Function {AddGeneratorN}{$\Sigma $, $\sigma $, $s$, $t$}
      \State  $D \gets  \Call {GenerateBoundary}{s, t}$
      \LComment {will make an $(n+1)$-dimensional diagram $D$ for $\sigma $
        which looks like an $(n+1)$-cube with $s$ and $t$ as $n$-dimensional opposing faces}
      \State  $ns \gets  \Call {Nodes}{D}$
      \State  \Call {AddNode}{$D$, $\sigma $}
      \LComment {generate frame identifications}
      \State {$G_s \gets  \set {s}$; $G_t \gets  \set {t}$}
      \While {$\Call {Dim}{G_s} > 0$}
        \State  $(G_s, \_) \gets  \Call {Explode}{G_s, \emptyset }$; $(G_t, \_) \gets  \Call {Explode}{G_t, \emptyset }$
      \EndWhile 
      \State  $(\_, \equiv _s) \gets  \Call {Collapse}{G_s}$; $(\_, \equiv _t) \gets  \Call {Collapse}{G_t}$
      \State  $\equiv  \gets $ trivial equivalence relation on $ns$
      \State  $\equiv  \gets  \equiv  \cup  \equiv _s \cup  \equiv _t$
      \State  $M \gets $ map keyed by equivalence classes of $\equiv $, values all distinct
      \For {$n \in  ns$}
        \Comment {add frames}
        \State  \Call {AddEdge}{$D$, $n$, $\sigma $, \Call {Get}{$M$, ${[n]}_\equiv $}}
      \EndFor 
      \LComment {weight of edge $u \to  \sigma $ is the same as that of $v \to  \sigma $ exactly when $u$ and $v$ appear on the same source/target boundary and are identified by \Call {Collapse}{} on that boundary}
      \State  \Return  $\Sigma  \cup  \set {\sigma  \mapsto  D}$
    \EndFunction 
  \end {algorithmic}}
    ]]></fr:resource-source></fr:resource></html:figure></html:p><html:p>
  Note that lines 18–28 determine <fr:link href="/coherent-inverses-US67/" title="signature and framing" uri="https://forest.nickx.hu/coherent-inverses-US67/" display-uri="coherent-inverses-US67" type="local">frame</fr:link> identifications for the new <fr:link href="/coherent-inverses-US67/" title="signature and framing" uri="https://forest.nickx.hu/coherent-inverses-US67/" display-uri="coherent-inverses-US67" type="local">generator</fr:link> in a non-trivial way, so as to ensure that the result is <fr:link href="/coherent-inverses-ZCMQ/" title="well-formed tree-cover oplax diagram" uri="https://forest.nickx.hu/coherent-inverses-ZCMQ/" display-uri="coherent-inverses-ZCMQ" type="local">well-formed</fr:link>.
  Crucially, we use the version of the <fr:link href="/coherent-inverses-FEO0/" title="collapse" uri="https://forest.nickx.hu/coherent-inverses-FEO0/" display-uri="coherent-inverses-FEO0" type="local">collapse algorithm</fr:link> which ignores depth, whose result is not necessarily a <html:em>simple</html:em> <fr:link href="/coherent-inverses-JGG7/" title="weighted graphs" uri="https://forest.nickx.hu/coherent-inverses-JGG7/" display-uri="coherent-inverses-JGG7" type="local"><fr:tex display="inline"><![CDATA[W]]></fr:tex>-graph</fr:link>, as <fr:link href="/coherent-inverses-FMG7/" title="Necessity of weak collapse for generator creation algorithm" uri="https://forest.nickx.hu/coherent-inverses-FMG7/" display-uri="coherent-inverses-FMG7" type="local">example <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-FMG7/" display-uri="coherent-inverses-FMG7" /></fr:link> shows.
</html:p></fr:mainmatter></fr:tree><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>11</fr:month><fr:day>28</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-GV0W/</fr:uri><fr:display-uri>coherent-inverses-GV0W</fr:display-uri><fr:route>/coherent-inverses-GV0W/</fr:route><fr:title text="Snake to identity">Snake to identity</fr:title><fr:taxon>example</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
  Fix a <fr:link href="/coherent-inverses-US67/" title="signature and framing" uri="https://forest.nickx.hu/coherent-inverses-US67/" display-uri="coherent-inverses-US67" type="local">signature</fr:link> <fr:tex display="inline"><![CDATA[\Sigma ]]></fr:tex> as in <fr:link href="/coherent-inverses-W55X/" title="Snake collapse" uri="https://forest.nickx.hu/coherent-inverses-W55X/" display-uri="coherent-inverses-W55X" type="local">example <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-W55X/" display-uri="coherent-inverses-W55X" /></fr:link>.
  We wish to demonstrate <fr:link href="/coherent-inverses-9DJY/" title="generator creation" uri="https://forest.nickx.hu/coherent-inverses-9DJY/" display-uri="coherent-inverses-9DJY" type="local">generator creation</fr:link> of a 3D generator <fr:tex display="inline"><![CDATA[\sigma ]]></fr:tex> whose <fr:link href="/coherent-inverses-G6FI/" title="source and target of a zigzag" uri="https://forest.nickx.hu/coherent-inverses-G6FI/" display-uri="coherent-inverses-G6FI" type="local">source</fr:link> 2D diagram is <fr:link href="/coherent-inverses-W55X/" title="Snake collapse" uri="https://forest.nickx.hu/coherent-inverses-W55X/" display-uri="coherent-inverses-W55X" type="local">the snake</fr:link>, and <fr:link href="/coherent-inverses-G6FI/" title="source and target of a zigzag" uri="https://forest.nickx.hu/coherent-inverses-G6FI/" display-uri="coherent-inverses-G6FI" type="local">target</fr:link> 2D diagram is the identity on <fr:tex display="inline"><![CDATA[f]]></fr:tex>.
</html:p><html:p>
  As a 3D surface diagram, the diagram of such a <fr:link href="/coherent-inverses-US67/" title="signature and framing" uri="https://forest.nickx.hu/coherent-inverses-US67/" display-uri="coherent-inverses-US67" type="local">generator</fr:link> (represented by the <html:span style=" color: #7570b3;">purple ball</html:span>) is shown in <fr:link href="/coherent-inverses-7M69/" title="Algebraic snake-to-identity generator 3D surface diagram" uri="https://forest.nickx.hu/coherent-inverses-7M69/" display-uri="coherent-inverses-7M69" type="local">figure <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-7M69/" display-uri="coherent-inverses-7M69" /></fr:link>.
</html:p><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2025</fr:year><fr:month>1</fr:month><fr:day>9</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-7M69/</fr:uri><fr:display-uri>coherent-inverses-7M69</fr:display-uri><fr:route>/coherent-inverses-7M69/</fr:route><fr:title text="Algebraic snake-to-identity generator 3D surface diagram">Algebraic snake-to-identity <fr:link href="/coherent-inverses-US67/" title="signature and framing" uri="https://forest.nickx.hu/coherent-inverses-US67/" display-uri="coherent-inverses-US67" type="local">generator</fr:link> 3D surface diagram</fr:title><fr:taxon>figure</fr:taxon></fr:frontmatter><fr:mainmatter><html:figure><html:img src="/bafkrmihofscqq45qjgdktob3mtouenpzkaaefxosnaxbtxu5lptq6j7aka.png" width="200px" />
  <html:figcaption>A 3D surface diagram of the algebraic <fr:link href="/coherent-inverses-US67/" title="signature and framing" uri="https://forest.nickx.hu/coherent-inverses-US67/" display-uri="coherent-inverses-US67" type="local">generator</fr:link> whose <fr:link href="/coherent-inverses-G6FI/" title="source and target of a zigzag" uri="https://forest.nickx.hu/coherent-inverses-G6FI/" display-uri="coherent-inverses-G6FI" type="local">source</fr:link> (left) is the snake, and <fr:link href="/coherent-inverses-G6FI/" title="source and target of a zigzag" uri="https://forest.nickx.hu/coherent-inverses-G6FI/" display-uri="coherent-inverses-G6FI" type="local">target</fr:link> (right) is the identity.</html:figcaption></html:figure></fr:mainmatter></fr:tree><html:p>
  This diagram is given by the <fr:link href="/coherent-inverses-XQVM/" title="framed zigzag enriched category" uri="https://forest.nickx.hu/coherent-inverses-XQVM/" display-uri="coherent-inverses-XQVM" type="local">framed zigzag</fr:link> <fr:tex display="inline"><![CDATA[r_0 \to  s_0 \leftarrow  r_1]]></fr:tex>, now ordering slices bottom-up, where each slice is a 2D string diagram:
  
  
  
  <html:figure><fr:resource hash="951771e9ea8a6747bbc21c78a439cfc8"><fr:resource-content><html:img src="/951771e9ea8a6747bbc21c78a439cfc8.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[
        \usepackage{amsmath,amssymb}
  \usepackage{mathtools}
  \usepackage{stmaryrd}
  \newcommand{\set}[1]{\left\{#1\right\}}
      \usepackage {tikz}
      \usetikzlibrary {3d,shadings,graphs,quotes}
      
  \definecolor {green}{RGB}{27,158,119}
  \definecolor {orange}{RGB}{217,95,2}
  \definecolor {purple}{RGB}{117,112,179}

      
    ]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
      \begin {tikzpicture}[]
        
        \begin{scope}[canvas is zx plane at y=0]
      \definecolor{generator-1-0-0-pos}{RGB}{192, 57, 43}
      \definecolor{generator-2-1-0-neg}{RGB}{166, 105, 8}
      \definecolor{generator-2-1-0-pos}{RGB}{243, 156, 18}
      \definecolor{generator-0-0-0-pos}{RGB}{41, 128, 185}
      \definecolor{generator-2-1-1-zer}{RGB}{251, 221, 173}
      \begin{scope}
      % Background surfaces
      \fill[generator-0-0-0-pos] (0,-1) -- (2,-1) -- (2,3) .. controls (2,3.8) and (2.4,4) .. (3,4) .. controls (3.6,4) and (4,3.8) .. (4,3) .. controls (4,2.2) and (4.4,2) .. (5,2) .. controls (5.6,2) and (6,2.2) .. (6,3) -- (6,7) -- (0,7) -- (0,-1);
      \fill[generator-1-0-0-pos] (2,-1) -- (8,-1) -- (8,7) -- (6,7) -- (6,3) .. controls (6,2.2) and (5.6,2) .. (5,2) .. controls (4.4,2) and (4,2.2) .. (4,3) .. controls (4,3.8) and (3.6,4) .. (3,4) .. controls (2.4,4) and (2,3.8) .. (2,3) -- (2,-1);
      % Wire layers
      \draw[color=generator-2-1-0-neg, line width=5pt](5,2) .. controls (4.4,2) and (4,2.2) .. (4,3) .. controls (4,3.8) and (3.6,4) .. (3,4);
      \draw[color=generator-2-1-0-pos, line width=5pt](2,-2) -- (2,3) .. controls (2,3.8) and (2.4,4) .. (3,4)(5,2) .. controls (5.6,2) and (6,2.2) .. (6,3) -- (6,8);
      \coordinate (1) at (2,-1);
      \coordinate (2) at (3,4);
      \coordinate (3) at (5,2);
      \coordinate (4) at (6,7);
      \end{scope}
      \fill[generator-2-1-1-zer] (5,2) circle (0.14);
      \fill[generator-2-1-1-zer] (3,4) circle (0.14);
      \fill[white] (0,-3) rectangle (8,-1);
      \fill[white] (0,7) rectangle (8,9);
    \end{scope}
    \begin{scope}[canvas is zx plane at y=2]
      \definecolor{generator-1-0-0-pos}{RGB}{192, 57, 43}
      \definecolor{generator-2-1-0-pos}{RGB}{243, 156, 18}
      \definecolor{generator-3-3-0-pos}{RGB}{142, 68, 173}
      \definecolor{generator-0-0-0-pos}{RGB}{41, 128, 185}
      \begin{scope}
      % Background surfaces
      \fill[generator-0-0-0-pos] (0,0) -- (2,0) -- (2,4) -- (0,4) -- (0,0);
      \fill[generator-1-0-0-pos] (2,0) -- (4,0) -- (4,4) -- (2,4) -- (2,0);
      % Wire layers
      \draw[color=generator-2-1-0-pos, line width=5pt](2,-1) -- (2,5);
      \end{scope}
      % \fill[generator-3-3-0-pos] (2,2) circle (0.14);
      \fill[white] (0,-2) rectangle (4,0);
      \fill[white] (0,4) rectangle (4,6);
      \coordinate (7) at (2,0);
      \coordinate (8) at (2,4);
      \coordinate (s) at (2,2);
    \end{scope}
    \begin{scope}[canvas is zx plane at y=4, yshift=1cm]
      \definecolor{generator-0-0-0-pos}{RGB}{41, 128, 185}
      \definecolor{generator-1-0-0-pos}{RGB}{192, 57, 43}
      \definecolor{generator-2-1-0-pos}{RGB}{243, 156, 18}
      \begin{scope}
      % Background surfaces
      \fill[generator-0-0-0-pos] (0,0) -- (2,0) -- (2,2) -- (0,2) -- (0,0);
      \fill[generator-1-0-0-pos] (2,0) -- (4,0) -- (4,2) -- (2,2) -- (2,0);
      % Wire layers
      \draw[color=generator-2-1-0-pos, line width=5pt](2,-1) -- (2,3);
      \fill[white] (0,-2) rectangle (4,0);
      \fill[white] (0,2) rectangle (4,4);
      \coordinate (5) at (2,0);
      \coordinate (6) at (2,2);
      \end{scope}
    \end{scope}
    \definecolor{generator-2-1-0-pos}{RGB}{243, 156, 18}
    \definecolor{generator-3-3-0-pos}{RGB}{142, 68, 173}
    \shade[ball color=generator-3-3-0-pos] (s) circle (0.2);
    \path graph{
      {(1), (2), (3), (4)} ->["$a$"{circle,fill=white,text=black,fill opacity=.5,text opacity=1,inner sep=1pt},line width=2pt,generator-2-1-0-pos,dashed,shorten <=6pt,shorten >=6pt] (s);
      {(5), (6)} ->["$b$"{circle,fill=white,text=black,fill opacity=.5,text opacity=1,inner sep=1pt},line width=2pt,generator-2-1-0-pos,dashed,shorten <=6pt,shorten >=6pt] (s);
      {(7)} ->["$c$"{circle,fill=white,text=black,fill opacity=.5,text opacity=1,inner sep=1pt},line width=2pt,generator-2-1-0-pos,dashed,shorten <=6pt,shorten >=6pt] (s);
      {(8)} ->["$d$"{circle,fill=white,text=black,fill opacity=.5,text opacity=1,inner sep=1pt},line width=2pt,generator-2-1-0-pos,dashed,shorten <=6pt,shorten >=6pt] (s);
    };
  
      \end {tikzpicture}
    ]]></fr:resource-source></fr:resource></html:figure>



  Here, we have illustrated some of the <fr:link href="/coherent-inverses-US67/" title="signature and framing" uri="https://forest.nickx.hu/coherent-inverses-US67/" display-uri="coherent-inverses-US67" type="local">framing</fr:link> data associated to <fr:tex display="inline"><![CDATA[\sigma ]]></fr:tex>.
  In particular, because the <fr:link href="/coherent-inverses-G6FI/" title="source and target of a zigzag" uri="https://forest.nickx.hu/coherent-inverses-G6FI/" display-uri="coherent-inverses-G6FI" type="local">source</fr:link> diagram is the snake, which under the <fr:link href="/coherent-inverses-FEO0/" title="collapse" uri="https://forest.nickx.hu/coherent-inverses-FEO0/" display-uri="coherent-inverses-FEO0" type="local">collapse algorithm</fr:link> determines 3 equivalence classes in the <fr:link href="/coherent-inverses-G6FI/" title="source and target of a zigzag" uri="https://forest.nickx.hu/coherent-inverses-G6FI/" display-uri="coherent-inverses-G6FI" type="local">source</fr:link> boundary (which respectively associate to the blue region, the yellow wire, and the red region), each <fr:link href="/coherent-inverses-US67/" title="signature and framing" uri="https://forest.nickx.hu/coherent-inverses-US67/" display-uri="coherent-inverses-US67" type="local">frame</fr:link> into <fr:tex display="inline"><![CDATA[\sigma ]]></fr:tex> originating from any point on the wire (which we have drawn with dashed arrows) is identified as <fr:tex display="inline"><![CDATA[a]]></fr:tex>.
  Similarly, the <fr:link href="/coherent-inverses-G6FI/" title="source and target of a zigzag" uri="https://forest.nickx.hu/coherent-inverses-G6FI/" display-uri="coherent-inverses-G6FI" type="local">target</fr:link> diagram also identifies the two <fr:link href="/coherent-inverses-US67/" title="signature and framing" uri="https://forest.nickx.hu/coherent-inverses-US67/" display-uri="coherent-inverses-US67" type="local">frames</fr:link> indicated as <fr:tex display="inline"><![CDATA[b]]></fr:tex>.
</html:p></fr:mainmatter></fr:tree><html:p>
        The following example illustrates why <fr:link href="/coherent-inverses-RF9D/" title="weak collapse" uri="https://forest.nickx.hu/coherent-inverses-RF9D/" display-uri="coherent-inverses-RF9D" type="local">weak collapse</fr:link> is the appropriate notion for the <fr:link href="/coherent-inverses-9DJY/" title="generator creation" uri="https://forest.nickx.hu/coherent-inverses-9DJY/" display-uri="coherent-inverses-9DJY" type="local">generator creation algorithm</fr:link>, as opposed to <fr:link href="/coherent-inverses-HSJ2/" title="strong collapse" uri="https://forest.nickx.hu/coherent-inverses-HSJ2/" display-uri="coherent-inverses-HSJ2" type="local">strong collapse</fr:link>.
      </html:p><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>11</fr:month><fr:day>29</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-FMG7/</fr:uri><fr:display-uri>coherent-inverses-FMG7</fr:display-uri><fr:route>/coherent-inverses-FMG7/</fr:route><fr:title text="Necessity of weak collapse for generator creation algorithm">Necessity of <fr:link href="/coherent-inverses-RF9D/" title="weak collapse" uri="https://forest.nickx.hu/coherent-inverses-RF9D/" display-uri="coherent-inverses-RF9D" type="local">weak collapse</fr:link> for <fr:link href="/coherent-inverses-9DJY/" title="generator creation" uri="https://forest.nickx.hu/coherent-inverses-9DJY/" display-uri="coherent-inverses-9DJY" type="local">generator creation algorithm</fr:link></fr:title><fr:taxon>example</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
  Fix an algebraic <fr:link href="/coherent-inverses-US67/" title="signature and framing" uri="https://forest.nickx.hu/coherent-inverses-US67/" display-uri="coherent-inverses-US67" type="local">signature</fr:link> <fr:tex display="inline"><![CDATA[\Sigma ]]></fr:tex> consisting of the following <fr:link href="/coherent-inverses-US67/" title="signature and framing" uri="https://forest.nickx.hu/coherent-inverses-US67/" display-uri="coherent-inverses-US67" type="local">generators</fr:link>:
  <html:dl>
    <html:dt>0-cells</html:dt>
    <html:dd><fr:tex display="inline"><![CDATA[x]]></fr:tex>, <fr:tex display="inline"><![CDATA[y]]></fr:tex>;</html:dd>
    <html:dt>1-cells</html:dt>
    <html:dd><fr:tex display="inline"><![CDATA[f\colon  x \to  y]]></fr:tex>;</html:dd>
    <html:dt>2-cells</html:dt>
    <html:dd><fr:tex display="inline"><![CDATA[\gamma \colon  f \circ  f^{-1} \Rightarrow  
  \text {id}_{y}
]]></fr:tex>.</html:dd>
  </html:dl></html:p><html:p>
  Consider a 3D <fr:link href="/coherent-inverses-US67/" title="signature and framing" uri="https://forest.nickx.hu/coherent-inverses-US67/" display-uri="coherent-inverses-US67" type="local">generator</fr:link> given as an endomorphism of the following 2D string diagram <fr:tex display="inline"><![CDATA[s]]></fr:tex>:
  
  
  
  <html:figure><fr:resource hash="14521d156f5f2f46642e181bbf1845e4"><fr:resource-content><html:img src="/14521d156f5f2f46642e181bbf1845e4.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[
        \usepackage{amsmath,amssymb}
  \usepackage{mathtools}
  \usepackage{stmaryrd}
  \newcommand{\set}[1]{\left\{#1\right\}}
      \usepackage {tikz}
      \usetikzlibrary {}
      
  \definecolor {green}{RGB}{27,158,119}
  \definecolor {orange}{RGB}{217,95,2}
  \definecolor {purple}{RGB}{117,112,179}

      
    ]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
      \begin {tikzpicture}[
    execute at end picture={
      \node [anchor=east] at (current bounding box.west) {$s \coloneqq $};
    },
    scale=0.5,
  ]
        
        \definecolor{generator-3-2-0-pos}{RGB}{142, 68, 173}
    \definecolor{generator-1-0-0-pos}{RGB}{192, 57, 43}
    \definecolor{generator-2-1-0-neg}{RGB}{166, 105, 8}
    \definecolor{generator-2-1-0-pos}{RGB}{243, 156, 18}
    \definecolor{generator-0-0-0-pos}{RGB}{41, 128, 185}
    \definecolor{generator-2-1-1-zer}{RGB}{251, 221, 173}
    \begin{scope}
    % Background surfaces
    \fill[generator-0-0-0-pos] (2,3) .. controls (2,2.2) and (2.4,2) .. (3,2) .. controls (3.6,2) and (4,2.2) .. (4,3) .. controls (4,3.8) and (3.6,4) .. (3,4) .. controls (2.4,4) and (2,3.8) .. (2,3);
    \fill[generator-1-0-0-pos] (0,0) -- (6,0) -- (6,6) -- (0,6) -- (0,0)(3,2) .. controls (2.4,2) and (2,2.2) .. (2,3) .. controls (2,3.8) and (2.4,4) .. (3,4) .. controls (3.6,4) and (4,3.8) .. (4,3) .. controls (4,2.2) and (3.6,2) .. (3,2);
    % Wire layers
    \draw[color=generator-2-1-0-neg, line width=5pt](3,2) .. controls (2.4,2) and (2,2.2) .. (2,3) .. controls (2,3.8) and (2.4,4) .. (3,4);
    \draw[color=generator-2-1-0-pos, line width=5pt](3,2) .. controls (3.6,2) and (4,2.2) .. (4,3) .. controls (4,3.8) and (3.6,4) .. (3,4);
    \end{scope}
    \fill[generator-2-1-1-zer] (3,2) circle (0.14);
    \fill[generator-3-2-0-pos] (3,4) circle (0.14);
  
      \end {tikzpicture}
    ]]></fr:resource-source></fr:resource></html:figure>



  Here, <fr:tex display="inline"><![CDATA[\gamma ]]></fr:tex> is represented by the <html:span style=" color: #7570b3;">purple dot</html:span>, and the diagram as a whole represents the composite
  <fr:tex display="block"><![CDATA[
    s = \gamma  \bullet  (
  \text {id}_{y}
 \Rightarrow  f \circ  f^{-1}),
  ]]></fr:tex>
  for <fr:tex display="inline"><![CDATA[\bullet ]]></fr:tex> being the vertical composition of 2-cells.
</html:p><html:p>
  As a <fr:link href="/coherent-inverses-JGG7/" title="weighted graphs" uri="https://forest.nickx.hu/coherent-inverses-JGG7/" display-uri="coherent-inverses-JGG7" type="local"><fr:tex display="inline"><![CDATA[W]]></fr:tex>-graph</fr:link> underlying a fully <fr:link href="/coherent-inverses-4S4Y/" title="exploded diagram" uri="https://forest.nickx.hu/coherent-inverses-4S4Y/" display-uri="coherent-inverses-4S4Y" type="local">exploded diagram</fr:link>, <fr:tex display="inline"><![CDATA[\gamma ]]></fr:tex> looks like <fr:link href="/coherent-inverses-ORQV/" title="Fully exploded diagram of algebraic cap" uri="https://forest.nickx.hu/coherent-inverses-ORQV/" display-uri="coherent-inverses-ORQV" type="local">figure <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-ORQV/" display-uri="coherent-inverses-ORQV" /></fr:link>.
  No morphism in this diagram is <fr:link href="/coherent-inverses-NBLG/" title="collapsible morphism" uri="https://forest.nickx.hu/coherent-inverses-NBLG/" display-uri="coherent-inverses-NBLG" type="local">collapsible</fr:link>.
  The 2-cell <fr:tex display="inline"><![CDATA[
  \text {id}_{y}
 \Rightarrow  f \circ  f^{-1}]]></fr:tex> is represented by <fr:link href="/coherent-inverses-EJ8O/" title="Fully exploded diagram of homotopy cup" uri="https://forest.nickx.hu/coherent-inverses-EJ8O/" display-uri="coherent-inverses-EJ8O" type="local">figure <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-EJ8O/" display-uri="coherent-inverses-EJ8O" /></fr:link>.
  <fr:tex display="inline"><![CDATA[s]]></fr:tex> is then given by the gluing of both along the common row.
</html:p><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2025</fr:year><fr:month>1</fr:month><fr:day>16</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-ORQV/</fr:uri><fr:display-uri>coherent-inverses-ORQV</fr:display-uri><fr:route>/coherent-inverses-ORQV/</fr:route><fr:title text="Fully exploded diagram of algebraic cap">Fully <fr:link href="/coherent-inverses-4S4Y/" title="exploded diagram" uri="https://forest.nickx.hu/coherent-inverses-4S4Y/" display-uri="coherent-inverses-4S4Y" type="local">exploded diagram</fr:link> of algebraic cap</fr:title><fr:taxon>figure</fr:taxon></fr:frontmatter><fr:mainmatter><html:figure><html:figure><fr:resource hash="c4a6911cc4ca04d7ab1cf3936f486745"><fr:resource-content><html:img src="/c4a6911cc4ca04d7ab1cf3936f486745.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[
        \usepackage{amsmath,amssymb}
  \usepackage{mathtools}
  \usepackage{stmaryrd}
  \newcommand{\set}[1]{\left\{#1\right\}}
      \usepackage {tikz}
      \usetikzlibrary {graphs,quotes}
      
  \definecolor {green}{RGB}{27,158,119}
  \definecolor {orange}{RGB}{217,95,2}
  \definecolor {purple}{RGB}{117,112,179}

      
    ]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
      \begin {tikzpicture}[]
        
    \path  graph[math nodes, grow right=2cm, edge quotes={fill=white, inner sep=1pt, anchor=center, font=\tiny }] {
      {[name=r1, fresh nodes, nodes={xshift=4cm}] x };
      {[name=s0, fresh nodes, nodes={xshift=2cm}] x ->["$\gamma _{(r_0, s_0)}$"] c / "\gamma " <-["$\gamma _{(r_1, s_0)}$"] x };
      {[name=r0, fresh nodes] x ->["$f_{(r_0)}$"] f <-["$f_{(r_1)}$"] x ->["$f_{(r_1)}$"] f <-["$f_{(r_0)}$"] x / "x." };
      s0 x <- {r1 x, r0 x};
      s0 x' <- {r1 x, r0 x''};
      s0 c <- {
        r1 x [>"$\gamma _{(r_0, r_1)}$"],
        r0 x [>"$\gamma _{(r_0, r_0)}$"], r0 f [>"$\gamma _{(s_0, r_0)}$"], r0 x' [>"$\gamma _{(r_1, r_0)}$"], r0 f' [>"$\gamma _{(s_1, r_0)}$"], r0 x'' [>"$\gamma _{(r_2, r_0)}$"],
      };
    };
  
      \end {tikzpicture}
    ]]></fr:resource-source></fr:resource></html:figure>



  <html:figcaption><fr:tex display="inline"><![CDATA[\gamma \colon  f \circ  f^{-1} \Rightarrow  
  \text {id}_{y}
]]></fr:tex> as a fully <fr:link href="/coherent-inverses-4S4Y/" title="exploded diagram" uri="https://forest.nickx.hu/coherent-inverses-4S4Y/" display-uri="coherent-inverses-4S4Y" type="local">exploded diagram</fr:link> in <fr:tex display="inline"><![CDATA[\operatorname {Zig}^{2}(\Sigma )]]></fr:tex>.</html:figcaption></html:figure></fr:mainmatter></fr:tree><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2025</fr:year><fr:month>1</fr:month><fr:day>16</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-EJ8O/</fr:uri><fr:display-uri>coherent-inverses-EJ8O</fr:display-uri><fr:route>/coherent-inverses-EJ8O/</fr:route><fr:title text="Fully exploded diagram of homotopy cup">Fully <fr:link href="/coherent-inverses-4S4Y/" title="exploded diagram" uri="https://forest.nickx.hu/coherent-inverses-4S4Y/" display-uri="coherent-inverses-4S4Y" type="local">exploded diagram</fr:link> of homotopy cup</fr:title><fr:taxon>figure</fr:taxon></fr:frontmatter><fr:mainmatter><html:figure><html:figure><fr:resource hash="d010411f6d238b7dbeeb1c17280b3c6b"><fr:resource-content><html:img src="/d010411f6d238b7dbeeb1c17280b3c6b.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[
        \usepackage{amsmath,amssymb}
  \usepackage{mathtools}
  \usepackage{stmaryrd}
  \newcommand{\set}[1]{\left\{#1\right\}}
      \usepackage {tikz}
      \usetikzlibrary {graphs,quotes,decorations.markings}
      
  \definecolor {green}{RGB}{27,158,119}
  \definecolor {orange}{RGB}{217,95,2}
  \definecolor {purple}{RGB}{117,112,179}

      
    ]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
      \begin {tikzpicture}[
    decoration={
      markings,
      mark=at position 0.5 with {
        \draw [red,-] (-2pt,-2pt) -- (2pt,2pt);
        \draw [red,-] (2pt,-2pt) -- (-2pt,2pt);
      }
    }
  ]
        
    \path  graph[math nodes, grow right=2cm, edge quotes={fill=white, inner sep=1pt, anchor=center, font=\tiny }] {
      {[name=r1, fresh nodes] x ->["$f_{(r_0)}$"] f <-["$f_{(r_1)}$"] x ->["$f_{(r_1)}$"] f <-["$f_{(r_0)}$"] x };
      {[name=s0, fresh nodes, nodes={xshift=2cm}] x ->["$f_{(r_0)}$"] c / "f" <-["$f_{(r_0)}$"] x };
      {[name=r0, fresh nodes, nodes={xshift=4cm}] x };
      s0 x <-[postaction={decorate}] {r0 x, r1 x};
      s0 x' <-[postaction={decorate}] {r0 x, r1 x''};
      s0 c <- {
        r0 x [>"$f_{(r_0)}$"],
        r1 x [>"$f_{(r_0)}$"], r1 f [> postaction={decorate}], r1 x' [>"$f_{(r_1)}$"], r1 f' [> postaction={decorate}], r1 x'' [>"$f_{(r_0)}$"],
      };
    };
  
      \end {tikzpicture}
    ]]></fr:resource-source></fr:resource></html:figure>


  <html:figcaption><fr:tex display="inline"><![CDATA[
  \text {id}_{y}
 \Rightarrow  f \circ  f^{-1}]]></fr:tex> as a fully <fr:link href="/coherent-inverses-4S4Y/" title="exploded diagram" uri="https://forest.nickx.hu/coherent-inverses-4S4Y/" display-uri="coherent-inverses-4S4Y" type="local">exploded diagram</fr:link> in <fr:tex display="inline"><![CDATA[\operatorname {Zig}^{2}(\Sigma )]]></fr:tex>, where crossed edges indicate <fr:link href="/coherent-inverses-1EX1/" title="strongly collapsible morphism" uri="https://forest.nickx.hu/coherent-inverses-1EX1/" display-uri="coherent-inverses-1EX1" type="local">strongly collapsible</fr:link> morphisms with respect to the <fr:link href="/coherent-inverses-LQGR/" title="level-wise tree-cover oplax diagrams" uri="https://forest.nickx.hu/coherent-inverses-LQGR/" display-uri="coherent-inverses-LQGR" type="local">level-wise tree-cover oplax diagram</fr:link>.</html:figcaption></html:figure></fr:mainmatter></fr:tree><html:p>
  Note that according to the bottom diagram (<fr:link href="/coherent-inverses-EJ8O/" title="Fully exploded diagram of homotopy cup" uri="https://forest.nickx.hu/coherent-inverses-EJ8O/" display-uri="coherent-inverses-EJ8O" type="local">figure <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-EJ8O/" display-uri="coherent-inverses-EJ8O" /></fr:link>), the two points labelled <fr:tex display="inline"><![CDATA[f]]></fr:tex> in the top diagram (<fr:link href="/coherent-inverses-ORQV/" title="Fully exploded diagram of algebraic cap" uri="https://forest.nickx.hu/coherent-inverses-ORQV/" display-uri="coherent-inverses-ORQV" type="local">figure <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-ORQV/" display-uri="coherent-inverses-ORQV" /></fr:link>) should be identified, and similarly for the outermost <fr:tex display="inline"><![CDATA[x]]></fr:tex>s on the bottom row.
  This is the crux of why the <fr:link href="/coherent-inverses-9DJY/" title="generator creation" uri="https://forest.nickx.hu/coherent-inverses-9DJY/" display-uri="coherent-inverses-9DJY" type="local">generator creation algorithm</fr:link> is based on <fr:link href="/coherent-inverses-RF9D/" title="weak collapse" uri="https://forest.nickx.hu/coherent-inverses-RF9D/" display-uri="coherent-inverses-RF9D" type="local">weak collapse</fr:link> rather than <fr:link href="/coherent-inverses-HSJ2/" title="strong collapse" uri="https://forest.nickx.hu/coherent-inverses-HSJ2/" display-uri="coherent-inverses-HSJ2" type="local">strong collapse</fr:link>.
  The resulting collapse causes the outermost <fr:tex display="inline"><![CDATA[x]]></fr:tex>s and <fr:tex display="inline"><![CDATA[f]]></fr:tex>s to be respectively identified on the bottom row, and the <fr:link href="/coherent-inverses-JGG7/" title="weighted graphs" uri="https://forest.nickx.hu/coherent-inverses-JGG7/" display-uri="coherent-inverses-JGG7" type="local"><fr:tex display="inline"><![CDATA[W]]></fr:tex>-graph</fr:link> underlying the <fr:link href="/coherent-inverses-RF9D/" title="weak collapse" uri="https://forest.nickx.hu/coherent-inverses-RF9D/" display-uri="coherent-inverses-RF9D" type="local">weak collapse</fr:link> is then:
  
  
  <html:figure><fr:resource hash="e179e315c65522a5313c7ac7f76ef1f0"><fr:resource-content><html:img src="/e179e315c65522a5313c7ac7f76ef1f0.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[
        \usepackage{amsmath,amssymb}
  \usepackage{mathtools}
  \usepackage{stmaryrd}
  \newcommand{\set}[1]{\left\{#1\right\}}
      \usepackage {tikz}
      \usetikzlibrary {graphs,quotes,positioning,cd,decorations.pathmorphing}
      
  \definecolor {green}{RGB}{27,158,119}
  \definecolor {orange}{RGB}{217,95,2}
  \definecolor {purple}{RGB}{117,112,179}

      
    ]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
      \begin {tikzpicture}[]
        
        	\node (left) {
          \tikz \path graph[math nodes, grow right=2cm, edge quotes={fill=white, inner sep=1pt, anchor=center, font=\tiny}] {
            {[name=r1, fresh nodes, nodes={xshift=4cm}] x };
            {[name=s0, fresh nodes, nodes={xshift=2cm}] x ->["$\gamma_{(r_0, s_0)}$"] c / "\gamma" <-["$\gamma_{(r_1, s_0)}$"] x };
            {[name=r0, fresh nodes] x ->["$f_{(r_0)}$"] f <-["$f_{(r_1)}$"] x ->["$f_{(r_1)}$"] f <-["$f_{(r_0)}$"] x };
            s0 x <- {r1 x, r0 x};
            s0 x' <- {r1 x, r0 x''};
            s0 c <- {
              r1 x [>"$\gamma_{(r_0, r_1)}$"],
              r0 x [>"$\gamma_{(r_0, r_0)}$"], r0 f [>"$\gamma_{(s_0, r_0)}$"], r0 x' [>"$\gamma_{(r_1, r_0)}$"], r0 f' [>"$\gamma_{(s_1, r_0)}$"], r0 x'' [>"$\gamma_{(r_2, r_0)}$"],
            };
            r0 f <->[clear >, bend right, tips=false, double equal sign distance] r0 f';
            r0 x <->[clear >, bend right, tips=false, double equal sign distance] r0 x'';
          };
	};
	\node[right=of left] (right) {
          \tikz \path graph[math nodes, grow right=2cm, edge quotes={fill=white, inner sep=1pt, anchor=center, font=\tiny}] {
            {[name=r2, fresh nodes] x};
            {[name=s1, fresh nodes, nodes={xshift=-2cm}] x ->["$\gamma_{(r_0, s_0)}$"] c / "\gamma" <-["$\gamma_{(r_1, s_0)}$"] x};
            {[name=r1, fresh nodes] x};
            {[name=s0, fresh nodes] f};
            {[name=r0, fresh nodes] x};
            s1 x <- {r2 x, r1 x};
            s1 x' <- {r2 x, r1 x};
            s1 c <-["$\gamma_{(r_1, r_1)}$"] r2 x;
            s1 c <-["$\gamma_{(r_1, r_0)}$"] r1 x;
            s0 f ->[bend left, in=100, out=100, "$\gamma_{(s_0, r_0)}$"{pos=0.4}] s1 c;
            s0 f ->[bend right, in=-100, out=-100, "$\gamma_{(s_1, r_0)}$"{pos=0.4}] s1 c;
            r0 x ->[bend left, in=90, out=90, looseness=1.4, "$\gamma_{(r_0, r_0)}$"{near start}] s1 c;
            r0 x ->[bend right, in=-90, out=-90, looseness=1.4, "$\gamma_{(r_2, r_0)}$"{near start}] s1 c;
            s0 f <-["$f_{(r_1)}$"] r1 x;
            s0 f <-["$f_{(r_0)}$"] r0 x;
          };
	};
	\draw[->] (left) edge["redraw", commutative diagrams/rightsquigarrow] (right);
  
      \end {tikzpicture}
    ]]></fr:resource-source></fr:resource></html:figure></html:p><html:p>
  Let <fr:tex display="inline"><![CDATA[\sigma ]]></fr:tex> denote the 3D <fr:link href="/coherent-inverses-US67/" title="signature and framing" uri="https://forest.nickx.hu/coherent-inverses-US67/" display-uri="coherent-inverses-US67" type="local">generator</fr:link> which is an endomorphism on <fr:tex display="inline"><![CDATA[s]]></fr:tex>, pictorially represented by the <html:span style=" color: #1b9e77;">green ball</html:span>.
  As a 3D surface diagram, the diagram of such a <fr:link href="/coherent-inverses-US67/" title="signature and framing" uri="https://forest.nickx.hu/coherent-inverses-US67/" display-uri="coherent-inverses-US67" type="local">generator</fr:link> is shown in <fr:link href="/coherent-inverses-GZ9V/" title="‘Hourglass’ generator 3D surface diagram" uri="https://forest.nickx.hu/coherent-inverses-GZ9V/" display-uri="coherent-inverses-GZ9V" type="local">figure <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-GZ9V/" display-uri="coherent-inverses-GZ9V" /></fr:link>.
</html:p><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2025</fr:year><fr:month>1</fr:month><fr:day>9</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-GZ9V/</fr:uri><fr:display-uri>coherent-inverses-GZ9V</fr:display-uri><fr:route>/coherent-inverses-GZ9V/</fr:route><fr:title text="‘Hourglass’ generator 3D surface diagram">‘Hourglass’ <fr:link href="/coherent-inverses-US67/" title="signature and framing" uri="https://forest.nickx.hu/coherent-inverses-US67/" display-uri="coherent-inverses-US67" type="local">generator</fr:link> 3D surface diagram</fr:title><fr:taxon>figure</fr:taxon></fr:frontmatter><fr:mainmatter><html:figure><html:img src="/bafkrmiejnlgpx6c7gembfpcjib3nbcjqlwodbt7nawxlydsozof7ucru5i.png" width="200px" />
  <html:figcaption>Endomorphism on <fr:tex display="inline"><![CDATA[s]]></fr:tex>.</html:figcaption></html:figure></fr:mainmatter></fr:tree><html:p>
  The following diagram illustrates the <fr:link href="/coherent-inverses-US67/" title="signature and framing" uri="https://forest.nickx.hu/coherent-inverses-US67/" display-uri="coherent-inverses-US67" type="local">framing</fr:link> that this <fr:link href="/coherent-inverses-US67/" title="signature and framing" uri="https://forest.nickx.hu/coherent-inverses-US67/" display-uri="coherent-inverses-US67" type="local">generator</fr:link> obtains:
  
  
  
  <html:figure><fr:resource hash="d45cea9ae56eee724960e8d7d0cd3528"><fr:resource-content><html:img src="/d45cea9ae56eee724960e8d7d0cd3528.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[
        \usepackage{amsmath,amssymb}
  \usepackage{mathtools}
  \usepackage{stmaryrd}
  \newcommand{\set}[1]{\left\{#1\right\}}
      \usepackage {tikz}
      \usetikzlibrary {3d,shadings,graphs,quotes}
      
  \definecolor {green}{RGB}{27,158,119}
  \definecolor {orange}{RGB}{217,95,2}
  \definecolor {purple}{RGB}{117,112,179}

      
    ]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
      \begin {tikzpicture}[]
        
        \begin{scope}[canvas is zx plane at y=0]
      \definecolor{generator-3-2-0-pos}{RGB}{142, 68, 173}
      \definecolor{generator-1-0-0-pos}{RGB}{192, 57, 43}
      \definecolor{generator-2-1-0-neg}{RGB}{166, 105, 8}
      \definecolor{generator-2-1-0-pos}{RGB}{243, 156, 18}
      \definecolor{generator-0-0-0-pos}{RGB}{41, 128, 185}
      \definecolor{generator-2-1-1-zer}{RGB}{251, 221, 173}
      \begin{scope}
      % Background surfaces
      \fill[generator-0-0-0-pos] (2,3) .. controls (2,2.2) and (2.4,2) .. (3,2) .. controls (3.6,2) and (4,2.2) .. (4,3) .. controls (4,3.8) and (3.6,4) .. (3,4) .. controls (2.4,4) and (2,3.8) .. (2,3);
      \fill[generator-1-0-0-pos] (0,0) -- (6,0) -- (6,6) -- (0,6) -- (0,0)(3,2) .. controls (2.4,2) and (2,2.2) .. (2,3) .. controls (2,3.8) and (2.4,4) .. (3,4) .. controls (3.6,4) and (4,3.8) .. (4,3) .. controls (4,2.2) and (3.6,2) .. (3,2);
      % Wire layers
      \draw[color=generator-2-1-0-neg, line width=5pt](3,2) .. controls (2.4,2) and (2,2.2) .. (2,3) .. controls (2,3.8) and (2.4,4) .. (3,4);
      \draw[color=generator-2-1-0-pos, line width=5pt](3,2) .. controls (3.6,2) and (4,2.2) .. (4,3) .. controls (4,3.8) and (3.6,4) .. (3,4);
      \end{scope}
      \fill[generator-2-1-1-zer] (3,2) circle (0.14);
      \fill[generator-3-2-0-pos] (3,4) circle (0.14);
      \coordinate (1) at (3,2);
      \coordinate (2) at (2,3);
      \coordinate (3) at (4,3);
      \coordinate (4) at (3,4);
    \end{scope}
    \begin{scope}[canvas is zx plane at y=3, yshift=1cm]
      \definecolor{generator-1-0-0-pos}{RGB}{192, 57, 43}
      % \definecolor{generator-4-3-0-pos}{RGB}{39, 174, 96}
      \begin{scope}
      % Background surfaces
      \fill[generator-1-0-0-pos] (0,0) -- (4,0) -- (4,4) -- (0,4) -- (0,0);
      % Wire layers
      \end{scope}
      % \fill[generator-4-3-0-pos] (2,2) circle (0.14);
      \coordinate (s) at (2,2);
    \end{scope}
    \begin{scope}[canvas is zx plane at y=6]
      \definecolor{generator-3-2-0-pos}{RGB}{142, 68, 173}
      \definecolor{generator-1-0-0-pos}{RGB}{192, 57, 43}
      \definecolor{generator-2-1-0-neg}{RGB}{166, 105, 8}
      \definecolor{generator-2-1-0-pos}{RGB}{243, 156, 18}
      \definecolor{generator-0-0-0-pos}{RGB}{41, 128, 185}
      \definecolor{generator-2-1-1-zer}{RGB}{251, 221, 173}
      \begin{scope}
      % Background surfaces
      \fill[generator-0-0-0-pos] (2,3) .. controls (2,2.2) and (2.4,2) .. (3,2) .. controls (3.6,2) and (4,2.2) .. (4,3) .. controls (4,3.8) and (3.6,4) .. (3,4) .. controls (2.4,4) and (2,3.8) .. (2,3);
      \fill[generator-1-0-0-pos] (0,0) -- (6,0) -- (6,6) -- (0,6) -- (0,0)(3,2) .. controls (2.4,2) and (2,2.2) .. (2,3) .. controls (2,3.8) and (2.4,4) .. (3,4) .. controls (3.6,4) and (4,3.8) .. (4,3) .. controls (4,2.2) and (3.6,2) .. (3,2);
      % Wire layers
      \draw[color=generator-2-1-0-neg, line width=5pt](3,2) .. controls (2.4,2) and (2,2.2) .. (2,3) .. controls (2,3.8) and (2.4,4) .. (3,4);
      \draw[color=generator-2-1-0-pos, line width=5pt](3,2) .. controls (3.6,2) and (4,2.2) .. (4,3) .. controls (4,3.8) and (3.6,4) .. (3,4);
      \end{scope}
      \fill[generator-2-1-1-zer] (3,2) circle (0.14);
      \fill[generator-3-2-0-pos] (3,4) circle (0.14);
      \coordinate (5) at (3,2);
      \coordinate (6) at (2,3);
      \coordinate (7) at (4,3);
      \coordinate (8) at (3,4);
    \end{scope}
    \definecolor{generator-2-1-0-pos}{RGB}{243, 156, 18}
    \definecolor{generator-3-2-0-pos}{RGB}{142, 68, 173}
    \definecolor{generator-4-3-0-pos}{RGB}{39, 174, 96}
    \shade[ball color=generator-4-3-0-pos] (s) circle (0.2);
    \path graph{
      {(1), (2), (3)} ->["$a$"{circle,fill=white,text=black,fill opacity=.5,text opacity=1,inner sep=1pt},line width=2pt,generator-2-1-0-pos,dashed,shorten <=6pt,shorten >=6pt] (s);
      {(4)} ->["$b$"{circle,fill=white,text=black,fill opacity=.5,text opacity=1,inner sep=1pt},line width=2pt,generator-3-2-0-pos,dashed,shorten <=6pt,shorten >=6pt] (s);
      {(5), (6), (7)} ->["$c$"{circle,fill=white,text=black,fill opacity=.5,text opacity=1,inner sep=1pt},line width=2pt,generator-2-1-0-pos,dashed,shorten <=6pt,shorten >=6pt] (s);
      {(8)} ->["$d$"{circle,fill=white,text=black,fill opacity=.5,text opacity=1,inner sep=1pt},line width=2pt,generator-3-2-0-pos,dashed,shorten <=6pt,shorten >=6pt] (s);
    };
  
      \end {tikzpicture}
    ]]></fr:resource-source></fr:resource></html:figure>



  Here, the <fr:link href="/coherent-inverses-US67/" title="signature and framing" uri="https://forest.nickx.hu/coherent-inverses-US67/" display-uri="coherent-inverses-US67" type="local">frames</fr:link> <fr:tex display="inline"><![CDATA[a]]></fr:tex> and <fr:tex display="inline"><![CDATA[b]]></fr:tex> are the new morphisms <fr:tex display="inline"><![CDATA[f \to  \sigma ]]></fr:tex> and <fr:tex display="inline"><![CDATA[\gamma  \to  \sigma ]]></fr:tex> respectively (and similarly on the <fr:link href="/coherent-inverses-G6FI/" title="source and target of a zigzag" uri="https://forest.nickx.hu/coherent-inverses-G6FI/" display-uri="coherent-inverses-G6FI" type="local">target</fr:link> boundary for <fr:tex display="inline"><![CDATA[c]]></fr:tex> and <fr:tex display="inline"><![CDATA[d]]></fr:tex>) added to the <fr:link href="/coherent-inverses-US67/" title="signature and framing" uri="https://forest.nickx.hu/coherent-inverses-US67/" display-uri="coherent-inverses-US67" type="local">signature</fr:link> by <fr:link href="/coherent-inverses-9DJY/" title="generator creation" uri="https://forest.nickx.hu/coherent-inverses-9DJY/" display-uri="coherent-inverses-9DJY" type="local">generator creation</fr:link>; that the three <fr:link href="/coherent-inverses-US67/" title="signature and framing" uri="https://forest.nickx.hu/coherent-inverses-US67/" display-uri="coherent-inverses-US67" type="local">frames</fr:link> labelled <fr:tex display="inline"><![CDATA[a]]></fr:tex> are identified ensures <fr:link href="/coherent-inverses-ZCMQ/" title="well-formed tree-cover oplax diagram" uri="https://forest.nickx.hu/coherent-inverses-ZCMQ/" display-uri="coherent-inverses-ZCMQ" type="local">well-formedness</fr:link> of this diagram in the sense that the three parallel paths <fr:tex display="inline"><![CDATA[\set {f \xrightarrow {\gamma _{(s_0, r_0)}} \gamma  \to  \sigma , f \xrightarrow {\gamma _{(s_1, r_0)}} \gamma  \to  \sigma , f \to  \sigma }]]></fr:tex> are quotiented together.
</html:p><html:p>
  If instead we had used <fr:link href="/coherent-inverses-HSJ2/" title="strong collapse" uri="https://forest.nickx.hu/coherent-inverses-HSJ2/" display-uri="coherent-inverses-HSJ2" type="local">strong collapse</fr:link> on <fr:tex display="inline"><![CDATA[s]]></fr:tex> (which is the identity), focusing on the <fr:link href="/coherent-inverses-US67/" title="signature and framing" uri="https://forest.nickx.hu/coherent-inverses-US67/" display-uri="coherent-inverses-US67" type="local">framing</fr:link> from the <fr:link href="/coherent-inverses-G6FI/" title="source and target of a zigzag" uri="https://forest.nickx.hu/coherent-inverses-G6FI/" display-uri="coherent-inverses-G6FI" type="local">source</fr:link> of <fr:link href="/coherent-inverses-GZ9V/" title="‘Hourglass’ generator 3D surface diagram" uri="https://forest.nickx.hu/coherent-inverses-GZ9V/" display-uri="coherent-inverses-GZ9V" type="local">figure <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-GZ9V/" display-uri="coherent-inverses-GZ9V" /></fr:link>, we would obtain <html:em>different</html:em> frames <fr:tex display="inline"><![CDATA[a_0]]></fr:tex>, <fr:tex display="inline"><![CDATA[a_1]]></fr:tex>, and <fr:tex display="inline"><![CDATA[a_2]]></fr:tex> (which were all <fr:tex display="inline"><![CDATA[a]]></fr:tex> previously).
  This violates <fr:link href="/coherent-inverses-ZCMQ/" title="well-formed tree-cover oplax diagram" uri="https://forest.nickx.hu/coherent-inverses-ZCMQ/" display-uri="coherent-inverses-ZCMQ" type="local">well-formedness</fr:link> of the resulting <fr:link href="/coherent-inverses-US67/" title="signature and framing" uri="https://forest.nickx.hu/coherent-inverses-US67/" display-uri="coherent-inverses-US67" type="local">generator</fr:link>: restricting to its <fr:link href="/coherent-inverses-G6FI/" title="source and target of a zigzag" uri="https://forest.nickx.hu/coherent-inverses-G6FI/" display-uri="coherent-inverses-G6FI" type="local">source</fr:link> boundary (which looks like <fr:tex display="inline"><![CDATA[s]]></fr:tex> and is a non-maximal tree of the <fr:link href="/coherent-inverses-LQGR/" title="level-wise tree-cover oplax diagrams" uri="https://forest.nickx.hu/coherent-inverses-LQGR/" display-uri="coherent-inverses-LQGR" type="local">level-wise tree-cover oplax diagram</fr:link>) and examining the portion which looks like <fr:link href="/coherent-inverses-EJ8O/" title="Fully exploded diagram of homotopy cup" uri="https://forest.nickx.hu/coherent-inverses-EJ8O/" display-uri="coherent-inverses-EJ8O" type="local">figure <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-EJ8O/" display-uri="coherent-inverses-EJ8O" /></fr:link>, we see that any of the <fr:link href="/coherent-inverses-NBLG/" title="collapsible morphism" uri="https://forest.nickx.hu/coherent-inverses-NBLG/" display-uri="coherent-inverses-NBLG" type="local">collapsible</fr:link> morphisms (when restricting to this tree, as in <fr:link href="/coherent-inverses-EJ8O/" title="Fully exploded diagram of homotopy cup" uri="https://forest.nickx.hu/coherent-inverses-EJ8O/" display-uri="coherent-inverses-EJ8O" type="local">figure <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-EJ8O/" display-uri="coherent-inverses-EJ8O" /></fr:link>) connecting a pair of <fr:tex display="inline"><![CDATA[f]]></fr:tex>s is no longer <fr:link href="/coherent-inverses-NBLG/" title="collapsible morphism" uri="https://forest.nickx.hu/coherent-inverses-NBLG/" display-uri="coherent-inverses-NBLG" type="local">collapsible</fr:link> with respect to the whole diagram, precisely because <fr:tex display="inline"><![CDATA[a_0 \neq  a_1 \neq  a_2 \neq  a_0]]></fr:tex>.
</html:p></fr:mainmatter></fr:tree><html:p>
        However, <fr:link href="/coherent-inverses-HSJ2/" title="strong collapse" uri="https://forest.nickx.hu/coherent-inverses-HSJ2/" display-uri="coherent-inverses-HSJ2" type="local">strong collapse</fr:link> is necessary for the <fr:link href="/coherent-inverses-FHS4/" title="contraction" uri="https://forest.nickx.hu/coherent-inverses-FHS4/" display-uri="coherent-inverses-FHS4" type="local">contraction algorithm</fr:link> and the <fr:link href="/coherent-inverses-4D20/" title="typechecking" uri="https://forest.nickx.hu/coherent-inverses-4D20/" display-uri="coherent-inverses-4D20" type="local">typechecking algorithm</fr:link>, which we now describe.
      </html:p><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>11</fr:month><fr:day>28</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-FHS4/</fr:uri><fr:display-uri>coherent-inverses-FHS4</fr:display-uri><fr:route>/coherent-inverses-FHS4/</fr:route><fr:title text="contraction"><fr:link href="/coherent-inverses-FHS4/" title="contraction" uri="https://forest.nickx.hu/coherent-inverses-FHS4/" display-uri="coherent-inverses-FHS4" type="local">contraction</fr:link></fr:title><fr:taxon>algorithm</fr:taxon></fr:frontmatter><fr:mainmatter><html:p><html:figure><fr:resource hash="c1147fbfa018b574f05d7f0b90b245f9"><fr:resource-content><html:img src="/c1147fbfa018b574f05d7f0b90b245f9.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[
       \usepackage{amsmath,amssymb}
  \usepackage{mathtools}
  \usepackage{stmaryrd}
  \newcommand{\set}[1]{\left\{#1\right\}}
     \usepackage {algpseudocodex}
     
  \definecolor {green}{RGB}{27,158,119}
  \definecolor {orange}{RGB}{217,95,2}
  \definecolor {purple}{RGB}{117,112,179}

    ]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
      \vbox {\begin {algorithmic}[]
    \renewcommand {\algorithmicrequire }{\textbf {Input:}}
    \renewcommand {\algorithmicensure }{\textbf {Output:}}
    \Require  framed zigzag $Z$ with singular height $h > 1$, $(i, i+1)$ such that $0 \leq  i < h$
    \Ensure  contracting framed zigzag map $Z \xrightarrow {c} Z^\prime $ or failure
    \Function {ContractPrepare}{$Z$, ($i$, $i+1$)}
      \LComment {slice $Z$ to singular heights $i$ and $i+1$, and adjacent regular heights}
      \State  $G \gets  \set {r_i \xrightarrow {f_i} s_i \xleftarrow {b_i} r_{i+1} \xrightarrow {f_{i+1}} s_{i+1} \xleftarrow {b_{i+1}} r_{i+2}}$ as a weighted graph
      \State  $d \gets $ constant function at $0$
      \State  $\gamma  \gets $ \Call {Contract}{$G$, $d$}
      \Comment {$\gamma $ is a sub-framed zigzag map}
      \State  \Return  extension of $\gamma $ to $Z$, acting as $
  \text {id}_{}
$ everywhere else
    \EndFunction 
    \Require  weighted directed graph $G = (V, E, w)$, depth function $d\colon  E \to  \mathbb {N}$
    \Ensure  cocone over $G$ or failure
    \Function {Contract}{$G$, $d$}
      \If {\Call {Dim}{$G$} $= 0$}
        \State  \Return  \Call {ContractBase}{$G$, $d$}
      \ElsIf {\Call {Dim}{$G$} $> 0$}
        \State  \Return  \Call {ContractRecursive}{$G$, $d$}
      \EndIf 
    \EndFunction 
    \Require  weighted directed graph $G = (V, E, w)$ of dimension $n = 0$, depth function $d\colon  E \to  \mathbb {N}$
    \Ensure  cocone over $G$ or failure
    \Function {ContractBase}{$G$, $d$}
      \State  $(C = (V, E, w), \_) \gets  \Call {DepthFirstCollapse}{G, d}$
      \State  $m \gets  \max _{v \in  V} \Call {Rank}{v}$
      \State  $\equiv  \gets $ equivalence relation on $V$ where
      \Statex  $\qquad  u \equiv  v \iff  u = v \vee  \Call {Rank}{u} = \Call {Rank}{v} = m$
      \State  $C / \equiv  \gets  \Call {Quotient}{C, \equiv }$
      \If {$\exists $ terminal vertex $v$ of $C / \equiv $}
        \State  \Return  cocone over $G$ with tip $v$
      \Else 
        \State  \textbf {fail}
      \EndIf 
    \EndFunction 
    \Require  weighted directed graph $G = (V, E, w)$ of dimension $n > 0$, depth function $d\colon  E \to  \mathbb {N}$
    \Ensure  cocone over $G$ or failure
    \Function {ContractRecursive}{$G$, $d$}
      \State  $cs \gets  []$
      \For {$G_k \in $ \Call {SingularDecomposition}{G}}
        \LComment {\textbf {fail} if \Call {SingularDecomposition}{G} fails}
        \State  $(G^\prime _k, d^\prime _k) \gets $ \Call {Explode}{$G_k$, $d$}
        \State  $c \gets $ \Call {Contract}{$G^\prime _k$, $d^\prime _k$}
        \Comment {\textbf {fail} if this fails}
        \State  \Call {Append}{$cs$, $c$}
      \EndFor 
      \LComment {each cocone tip $cs[i]$ corresponds to $r_i \xrightarrow {f_i} s_i \xleftarrow {b_i} r_{i+1}$ of the resulting contracted framed zigzag}
      \State  $t \gets  \Call {GlueTips}{cs}$
      \Comment {glue these together to form the tip of a higher-dimensional cocone}
      \LComment {for a cocone $cs[i]$, its legs correspond to framed zigzag maps to $r_i, s_i, r_{i+1}$}
            \For{$i \in [0, \Call{Length}{cs} - 1)$}
        \For {$(f_0, g_0, h_0), (f_1, g_1, h_1) \gets  \Call {Legs}{cs[i]}, \Call {Legs}{cs[i+1]}$}
          \State  \Call {Assert}{$h_0 = f_1$}
          \Comment {check compatibility}
        \EndFor 
      \EndFor 
      \Return  cocone over $G$ with tip $t$
    \EndFunction 
  \end {algorithmic}}
    ]]></fr:resource-source></fr:resource></html:figure></html:p></fr:mainmatter></fr:tree><html:p>
        This procedure is the primary component for the construction of complex <fr:link href="/coherent-inverses-OBFZ/" title="zigzag homotopy" uri="https://forest.nickx.hu/coherent-inverses-OBFZ/" display-uri="coherent-inverses-OBFZ" type="local">zigzag homotopies</fr:link>, which provides an interface for a user of <html:span tex="\homotopyio{}"><fr:link href="/homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories/" title="homotopy.io: a proof assistant for finitely-presented globular $n$-categories" uri="https://forest.nickx.hu/homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories/" display-uri="homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories" type="local"><html:code>homotopy.io</html:code></fr:link></html:span> to build non-trivial proof terms (see <fr:link href="/coherent-inverses-implementation-interaction/" title="Coherent inverses in higher-categorical string diagrams › Implementation › Interacting with the system" uri="https://forest.nickx.hu/coherent-inverses-implementation-interaction/" display-uri="coherent-inverses-implementation-interaction" type="local">section <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-implementation-interaction/" display-uri="coherent-inverses-implementation-interaction" /></fr:link>).
        We argue for the correctness of this procedure in the following section.
      </html:p><html:p>
        By basing the <fr:link href="/coherent-inverses-4D20/" title="typechecking" uri="https://forest.nickx.hu/coherent-inverses-4D20/" display-uri="coherent-inverses-4D20" type="local">typechecking algorithm</fr:link> on the <fr:link href="/coherent-inverses-VQWY/" title="depth-first collapse" uri="https://forest.nickx.hu/coherent-inverses-VQWY/" display-uri="coherent-inverses-VQWY" type="local">depth-first collapse algorithm</fr:link>, we ensure that higher-dimensional coherences of invertible <fr:link href="/coherent-inverses-US67/" title="signature and framing" uri="https://forest.nickx.hu/coherent-inverses-US67/" display-uri="coherent-inverses-US67" type="local">generators</fr:link> also typecheck, as in <fr:link href="/coherent-inverses-W55X/" title="Snake collapse" uri="https://forest.nickx.hu/coherent-inverses-W55X/" display-uri="coherent-inverses-W55X" type="local">example <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-W55X/" display-uri="coherent-inverses-W55X" /></fr:link>.
      </html:p><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>11</fr:month><fr:day>28</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-4D20/</fr:uri><fr:display-uri>coherent-inverses-4D20</fr:display-uri><fr:route>/coherent-inverses-4D20/</fr:route><fr:title text="typechecking"><fr:link href="/coherent-inverses-4D20/" title="typechecking" uri="https://forest.nickx.hu/coherent-inverses-4D20/" display-uri="coherent-inverses-4D20" type="local">typechecking</fr:link></fr:title><fr:taxon>algorithm</fr:taxon></fr:frontmatter><fr:mainmatter><html:p><html:figure><fr:resource hash="cc7ad89ee5664f815fa54afa90cd1ea2"><fr:resource-content><html:img src="/cc7ad89ee5664f815fa54afa90cd1ea2.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[
       \usepackage{amsmath,amssymb}
  \usepackage{mathtools}
  \usepackage{stmaryrd}
  \newcommand{\set}[1]{\left\{#1\right\}}
     \usepackage {algpseudocodex}
     
  \definecolor {green}{RGB}{27,158,119}
  \definecolor {orange}{RGB}{217,95,2}
  \definecolor {purple}{RGB}{117,112,179}

    ]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
      \vbox {\begin {algorithmic}[]
    \renewcommand {\algorithmicrequire }{\textbf {Input:}}
    \renewcommand {\algorithmicensure }{\textbf {Output:}}
    \Require  framed zigzag $Z$, signature $\Sigma $
    \Ensure  \textbf {ok} or \textbf {fail}
    \Function {Typecheck}{$Z$, $\Sigma $}
      \State  $G \gets  \set {Z}$ as a weighted graph
      \State  $d \gets $ empty function
      \While {$\Call {Dim}{G} > 0$}
        \Comment {fully explode $G$}
        \State  $(G, d) \gets  \Call {Explode}{G, d}$
      \EndWhile 
      \State  $(C = (V, E, w), \_) \gets  \Call {DepthFirstCollapse}{G, d}$
      \If {
        \State  $\forall  k \in  V. k$ is a sink of $C$.
        \Statex  \textbf {let} $C_k$ be the closure of $k$ under reverse-reachability in $C$
        \Statex  $\exists  \sigma  \in  \Sigma . \Call {IsGraphIso}{\Call {Diagram}{\sigma }, C_k}$
      }
        \State  \textbf {ok}
      \Else 
        \State  \textbf {fail}
      \EndIf 
    \EndFunction 
  \end {algorithmic}}
    ]]></fr:resource-source></fr:resource></html:figure></html:p></fr:mainmatter></fr:tree><html:p>
        This <fr:link href="/coherent-inverses-4D20/" title="typechecking" uri="https://forest.nickx.hu/coherent-inverses-4D20/" display-uri="coherent-inverses-4D20" type="local">typechecking algorithm</fr:link> checks that the <fr:link href="/coherent-inverses-XQVM/" title="framed zigzag enriched category" uri="https://forest.nickx.hu/coherent-inverses-XQVM/" display-uri="coherent-inverses-XQVM" type="local">framed zigzag</fr:link> <fr:tex display="inline"><![CDATA[Z]]></fr:tex> represents a valid term in the free globular <fr:tex display="inline"><![CDATA[n]]></fr:tex>-category presented by the algebraic <fr:link href="/coherent-inverses-US67/" title="signature and framing" uri="https://forest.nickx.hu/coherent-inverses-US67/" display-uri="coherent-inverses-US67" type="local">signature</fr:link> <fr:tex display="inline"><![CDATA[\Sigma ]]></fr:tex>.
        It does so by breaking up the fully <fr:link href="/coherent-inverses-4S4Y/" title="exploded diagram" uri="https://forest.nickx.hu/coherent-inverses-4S4Y/" display-uri="coherent-inverses-4S4Y" type="local">exploded diagram</fr:link> of <fr:tex display="inline"><![CDATA[Z]]></fr:tex> into pieces, and then ensuring that they match up with diagrams present in <fr:tex display="inline"><![CDATA[\Sigma ]]></fr:tex>.
      </html:p></fr:mainmatter></fr:tree><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2023</fr:year><fr:month>12</fr:month><fr:day>3</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-contraction-correctness/</fr:uri><fr:display-uri>coherent-inverses-contraction-correctness</fr:display-uri><fr:route>/coherent-inverses-contraction-correctness/</fr:route><fr:title text="Correctness of framed contraction">Correctness of <fr:link href="/coherent-inverses-US67/" title="signature and framing" uri="https://forest.nickx.hu/coherent-inverses-US67/" display-uri="coherent-inverses-US67" type="local">framed</fr:link> <fr:link href="/coherent-inverses-FHS4/" title="contraction" uri="https://forest.nickx.hu/coherent-inverses-FHS4/" display-uri="coherent-inverses-FHS4" type="local">contraction</fr:link></fr:title><fr:taxon>section</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
        First, we define a subclass of <fr:link href="/coherent-inverses-XQVM/" title="framed zigzag enriched category" uri="https://forest.nickx.hu/coherent-inverses-XQVM/" display-uri="coherent-inverses-XQVM" type="local">framed zigzags</fr:link>: the <fr:link href="/coherent-inverses-OBFZ/" title="zigzag homotopy" uri="https://forest.nickx.hu/coherent-inverses-OBFZ/" display-uri="coherent-inverses-OBFZ" type="local">zigzag homotopies</fr:link>.
        We demonstrate an argument for correctness of the <fr:link href="/coherent-inverses-FHS4/" title="contraction" uri="https://forest.nickx.hu/coherent-inverses-FHS4/" display-uri="coherent-inverses-FHS4" type="local">contraction algorithm</fr:link> by showing that it always constructs <fr:link href="/coherent-inverses-OBFZ/" title="zigzag homotopy" uri="https://forest.nickx.hu/coherent-inverses-OBFZ/" display-uri="coherent-inverses-OBFZ" type="local">zigzag homotopies</fr:link> (never failing) for certain classes of inputs.
      </html:p><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>11</fr:month><fr:day>27</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-OBFZ/</fr:uri><fr:display-uri>coherent-inverses-OBFZ</fr:display-uri><fr:route>/coherent-inverses-OBFZ/</fr:route><fr:title text="zigzag homotopy"><fr:link href="/coherent-inverses-OBFZ/" title="zigzag homotopy" uri="https://forest.nickx.hu/coherent-inverses-OBFZ/" display-uri="coherent-inverses-OBFZ" type="local">zigzag homotopy</fr:link></fr:title><fr:taxon>definition</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
  A <fr:link href="/coherent-inverses-OBFZ/" title="zigzag homotopy" uri="https://forest.nickx.hu/coherent-inverses-OBFZ/" display-uri="coherent-inverses-OBFZ" type="local">zigzag homotopy</fr:link> between two <fr:link href="/coherent-inverses-XQVM/" title="framed zigzag enriched category" uri="https://forest.nickx.hu/coherent-inverses-XQVM/" display-uri="coherent-inverses-XQVM" type="local">framed zigzags</fr:link> <fr:tex display="inline"><![CDATA[Z_0, Z_1 \in  \operatorname {Zig}^{n}(\mathcal {C})]]></fr:tex>, for <fr:tex display="inline"><![CDATA[n > 0]]></fr:tex>, is a cospan
  <fr:tex display="block"><![CDATA[
    Z_0 \xrightarrow {f} Z_s \xleftarrow {b} Z_1,
  ]]></fr:tex>
  such that every 2-cell filler of the <fr:link href="/coherent-inverses-4S4Y/" title="exploded diagram" uri="https://forest.nickx.hu/coherent-inverses-4S4Y/" display-uri="coherent-inverses-4S4Y" type="local">exploded diagrams</fr:link> of <fr:tex display="inline"><![CDATA[f]]></fr:tex> and <fr:tex display="inline"><![CDATA[b]]></fr:tex> in <fr:tex display="inline"><![CDATA[\operatorname {Zig}^{n-1}(\mathcal {C})]]></fr:tex> is trivial.
</html:p><html:p>
  These are a particular kind of <fr:link href="/coherent-inverses-XQVM/" title="framed zigzag enriched category" uri="https://forest.nickx.hu/coherent-inverses-XQVM/" display-uri="coherent-inverses-XQVM" type="local">framed zigzag</fr:link> in <fr:tex display="inline"><![CDATA[\operatorname {Zig}^{n+1}(\mathcal {C})]]></fr:tex>.
</html:p><html:p>
  A composite <fr:link href="/coherent-inverses-OBFZ/" title="zigzag homotopy" uri="https://forest.nickx.hu/coherent-inverses-OBFZ/" display-uri="coherent-inverses-OBFZ" type="local">zigzag homotopy</fr:link> is an iterated cospan consisting of <fr:link href="/coherent-inverses-OBFZ/" title="zigzag homotopy" uri="https://forest.nickx.hu/coherent-inverses-OBFZ/" display-uri="coherent-inverses-OBFZ" type="local">zigzag homotopies</fr:link>.
</html:p></fr:mainmatter></fr:tree><html:p>
        The crux of this chapter is the following: the base case of the <fr:link href="/coherent-inverses-FHS4/" title="contraction" uri="https://forest.nickx.hu/coherent-inverses-FHS4/" display-uri="coherent-inverses-FHS4" type="local">contraction algorithm</fr:link> computes a <fr:link href="/coherent-inverses-ZPGB/" title="collapse colimit" uri="https://forest.nickx.hu/coherent-inverses-ZPGB/" display-uri="coherent-inverses-ZPGB" type="local">collapse colimit</fr:link> in the minimal <fr:link href="/coherent-inverses-LRMM/" title="subsignature" uri="https://forest.nickx.hu/coherent-inverses-LRMM/" display-uri="coherent-inverses-LRMM" type="local">subsignature</fr:link> of a <fr:link href="/coherent-inverses-ZCMQ/" title="well-formed tree-cover oplax diagram" uri="https://forest.nickx.hu/coherent-inverses-ZCMQ/" display-uri="coherent-inverses-ZCMQ" type="local">well-formed</fr:link> <fr:link href="/coherent-inverses-LQGR/" title="level-wise tree-cover oplax diagrams" uri="https://forest.nickx.hu/coherent-inverses-LQGR/" display-uri="coherent-inverses-LQGR" type="local">level-wise tree-cover oplax diagram</fr:link> in some <fr:link href="/coherent-inverses-US67/" title="signature and framing" uri="https://forest.nickx.hu/coherent-inverses-US67/" display-uri="coherent-inverses-US67" type="local">signature</fr:link> <fr:tex display="inline"><![CDATA[\Sigma ]]></fr:tex>.
      </html:p><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2025</fr:year><fr:month>1</fr:month><fr:day>3</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-063A/</fr:uri><fr:display-uri>coherent-inverses-063A</fr:display-uri><fr:route>/coherent-inverses-063A/</fr:route><fr:title text="contraction algorithm base case computes a collapse colimit"><fr:link href="/coherent-inverses-FHS4/" title="contraction" uri="https://forest.nickx.hu/coherent-inverses-FHS4/" display-uri="coherent-inverses-FHS4" type="local">contraction algorithm</fr:link> base case computes a <fr:link href="/coherent-inverses-ZPGB/" title="collapse colimit" uri="https://forest.nickx.hu/coherent-inverses-ZPGB/" display-uri="coherent-inverses-ZPGB" type="local">collapse colimit</fr:link></fr:title><fr:taxon>theorem</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
  Let <fr:tex display="inline"><![CDATA[({E_{D}^n (J) \xrightarrow {\varepsilon ^n (D)} \Sigma }, \mathcal {T})]]></fr:tex> be some <fr:link href="/coherent-inverses-ZCMQ/" title="well-formed tree-cover oplax diagram" uri="https://forest.nickx.hu/coherent-inverses-ZCMQ/" display-uri="coherent-inverses-ZCMQ" type="local">well-formed</fr:link> <fr:link href="/coherent-inverses-QPQ4/" title="tree-cover oplax diagram" uri="https://forest.nickx.hu/coherent-inverses-QPQ4/" display-uri="coherent-inverses-QPQ4" type="local">tree-cover oplax diagram</fr:link>, where <fr:tex display="inline"><![CDATA[\Sigma ]]></fr:tex> is a minimal <fr:link href="/coherent-inverses-LRMM/" title="subsignature" uri="https://forest.nickx.hu/coherent-inverses-LRMM/" display-uri="coherent-inverses-LRMM" type="local">subsignature</fr:link>, arising as the <fr:link href="/coherent-inverses-LQGR/" title="level-wise tree-cover oplax diagrams" uri="https://forest.nickx.hu/coherent-inverses-LQGR/" display-uri="coherent-inverses-LQGR" type="local">level-wise tree-cover oplax diagram</fr:link> obtained from the fully <fr:link href="/coherent-inverses-4S4Y/" title="exploded diagram" uri="https://forest.nickx.hu/coherent-inverses-4S4Y/" display-uri="coherent-inverses-4S4Y" type="local">exploded diagram</fr:link> of some <fr:link href="/coherent-inverses-RRZ9/" title="simple oplax diagram" uri="https://forest.nickx.hu/coherent-inverses-RRZ9/" display-uri="coherent-inverses-RRZ9" type="local">simple oplax diagram</fr:link> <fr:tex display="inline"><![CDATA[{J \xrightarrow {D} \operatorname {Zig}^{n}(\Sigma )}]]></fr:tex> equipped with the trivial <fr:link href="/coherent-inverses-QPQ4/" title="tree-cover oplax diagram" uri="https://forest.nickx.hu/coherent-inverses-QPQ4/" display-uri="coherent-inverses-QPQ4" type="local">tree cover</fr:link>.
</html:p><html:p><fr:tex display="inline"><![CDATA[(\varepsilon ^n (D), \mathcal {T})]]></fr:tex> admits a <fr:link href="/coherent-inverses-ZPGB/" title="collapse colimit" uri="https://forest.nickx.hu/coherent-inverses-ZPGB/" display-uri="coherent-inverses-ZPGB" type="local">collapse colimit</fr:link> if and only if <fr:tex display="inline"><![CDATA[\textsc {ContractBase}(G, d)]]></fr:tex> (<fr:link href="/coherent-inverses-FHS4/" title="contraction" uri="https://forest.nickx.hu/coherent-inverses-FHS4/" display-uri="coherent-inverses-FHS4" type="local">algorithm <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-FHS4/" display-uri="coherent-inverses-FHS4" /></fr:link>) succeeds, where <fr:tex display="inline"><![CDATA[G]]></fr:tex> encodes <fr:tex display="inline"><![CDATA[\varepsilon ^n (D)]]></fr:tex>, <fr:tex display="inline"><![CDATA[d]]></fr:tex> encodes <fr:tex display="inline"><![CDATA[\mathcal {T}]]></fr:tex>, and the result of the procedure encodes the <fr:link href="/coherent-inverses-ZPGB/" title="collapse colimit" uri="https://forest.nickx.hu/coherent-inverses-ZPGB/" display-uri="coherent-inverses-ZPGB" type="local">collapse colimit</fr:link>.
</html:p>
 
   
   <fr:tree show-metadata="false" toc="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2025</fr:year><fr:month>1</fr:month><fr:day>3</fr:day></fr:date><fr:taxon>proof</fr:taxon></fr:frontmatter><fr:mainmatter>
  <html:p>
    There is a bijective correspondence between <fr:link href="/coherent-inverses-5128/" title="marked cocone" uri="https://forest.nickx.hu/coherent-inverses-5128/" display-uri="coherent-inverses-5128" type="local">marked cocones</fr:link> over <fr:tex display="inline"><![CDATA[\varepsilon ^n (D)]]></fr:tex> (under a <fr:link href="/coherent-inverses-5VBZ/" title="marking" uri="https://forest.nickx.hu/coherent-inverses-5VBZ/" display-uri="coherent-inverses-5VBZ" type="local">marking</fr:link> determined by <fr:link href="/coherent-inverses-1EX1/" title="strongly collapsible morphism" uri="https://forest.nickx.hu/coherent-inverses-1EX1/" display-uri="coherent-inverses-1EX1" type="local">strongly collapsible</fr:link> morphisms) and <fr:link href="/coherent-inverses-W0JK/" title="oplax cocone" uri="https://forest.nickx.hu/coherent-inverses-W0JK/" display-uri="coherent-inverses-W0JK" type="local">oplax cocones</fr:link> over the <fr:link href="/coherent-inverses-HSJ2/" title="strong collapse" uri="https://forest.nickx.hu/coherent-inverses-HSJ2/" display-uri="coherent-inverses-HSJ2" type="local">strong collapse</fr:link> <fr:tex display="inline"><![CDATA[\nabla  {\varepsilon ^n (D)}]]></fr:tex> given by duplicating/deleting legs.
  </html:p>
  <html:p><fr:tex display="inline"><![CDATA[\Sigma ]]></fr:tex> is a minimal <fr:link href="/coherent-inverses-LRMM/" title="subsignature" uri="https://forest.nickx.hu/coherent-inverses-LRMM/" display-uri="coherent-inverses-LRMM" type="local">subsignature</fr:link>, thus <fr:link href="/coherent-inverses-L45G/" title="graded \mathbf {Pos}-category" uri="https://forest.nickx.hu/coherent-inverses-L45G/" display-uri="coherent-inverses-L45G" type="local">graded</fr:link> by definition.
    Hence an <fr:link href="/coherent-inverses-W0JK/" title="oplax cocone" uri="https://forest.nickx.hu/coherent-inverses-W0JK/" display-uri="coherent-inverses-W0JK" type="local">oplax cocone</fr:link> over <fr:tex display="inline"><![CDATA[\nabla  {\varepsilon ^n (D)}]]></fr:tex> exists exactly when there is a <html:em>unique</html:em> <fr:link href="/coherent-inverses-US67/" title="signature and framing" uri="https://forest.nickx.hu/coherent-inverses-US67/" display-uri="coherent-inverses-US67" type="local">generator</fr:link> <fr:tex display="inline"><![CDATA[c \in  \Sigma ]]></fr:tex> in the image of <fr:tex display="inline"><![CDATA[\nabla  {\varepsilon ^n (D)}]]></fr:tex> which is <html:em>uniquely</html:em> reachable (necessarily of maximal rank), which is precisely that which is constructed by <fr:tex display="inline"><![CDATA[\textsc {ContractBase}]]></fr:tex>.
  </html:p>
</fr:mainmatter></fr:tree>
 
</fr:mainmatter></fr:tree><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>11</fr:month><fr:day>26</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-M1IC/</fr:uri><fr:display-uri>coherent-inverses-M1IC</fr:display-uri><fr:route>/coherent-inverses-M1IC/</fr:route><fr:title text="Juxtaposition with identity contracts">Juxtaposition with identity <fr:link href="/coherent-inverses-FHS4/" title="contraction" uri="https://forest.nickx.hu/coherent-inverses-FHS4/" display-uri="coherent-inverses-FHS4" type="local">contracts</fr:link></fr:title><fr:taxon>proposition</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
  Let <fr:tex display="inline"><![CDATA[{J \xrightarrow {D} \operatorname {Zig}^{n}(\mathcal {C})}]]></fr:tex> be a diagram of the following form:
  
  
  <html:figure><fr:resource hash="fda2c9fbba05b988be2e47a3015b66fb"><fr:resource-content><html:img src="/fda2c9fbba05b988be2e47a3015b66fb.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[
        \usepackage{amsmath,amssymb}
  \usepackage{mathtools}
  \usepackage{stmaryrd}
  \newcommand{\set}[1]{\left\{#1\right\}}
      \usepackage {tikz}
      \usetikzlibrary {graphs,quotes,cd}
      
  \definecolor {green}{RGB}{27,158,119}
  \definecolor {orange}{RGB}{217,95,2}
  \definecolor {purple}{RGB}{117,112,179}

      
    ]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
      \begin {tikzpicture}[
    commutative diagrams/every diagram, every node/.style={commutative diagrams/every cell}, every path/.style={commutative diagrams/.cd, every label}
  ]
        
    \path  graph[math nodes, grow down] {
      r2 / "r^\prime " ->[tips=false, double equal sign distance] s1 / "r^\prime " <-[tips=false, double equal sign distance] r1 / "r^\prime " ->["$b$"] s0 / "s" <-["$f$"] r0 / "r.";
    };
  
      \end {tikzpicture}
    ]]></fr:resource-source></fr:resource></html:figure>


  Observe that this diagram corresponds the <fr:link href="/coherent-inverses-4S4Y/" title="exploded diagram" uri="https://forest.nickx.hu/coherent-inverses-4S4Y/" display-uri="coherent-inverses-4S4Y" type="local">exploded diagram</fr:link> of a particular object of <fr:tex display="inline"><![CDATA[\operatorname {Zig}^{n+1}(\mathcal {C})]]></fr:tex> with two singular levels, where the second cospan is given by identity morphisms in <fr:tex display="inline"><![CDATA[\operatorname {Zig}^{n}(\mathcal {C})]]></fr:tex>.
</html:p><html:p>
  Then the <fr:link href="/coherent-inverses-FHS4/" title="contraction" uri="https://forest.nickx.hu/coherent-inverses-FHS4/" display-uri="coherent-inverses-FHS4" type="local">contraction algorithm</fr:link> witnesses a <fr:link href="/coherent-inverses-XQVM/" title="framed zigzag enriched category" uri="https://forest.nickx.hu/coherent-inverses-XQVM/" display-uri="coherent-inverses-XQVM" type="local">framed zigzag map</fr:link> in <fr:tex display="inline"><![CDATA[\operatorname {Zig}^{n+1}(\mathcal {C})]]></fr:tex> whose <fr:link href="/coherent-inverses-4S4Y/" title="exploded diagram" uri="https://forest.nickx.hu/coherent-inverses-4S4Y/" display-uri="coherent-inverses-4S4Y" type="local">exploded diagram</fr:link> is given as follows:
  
  
  <html:figure><fr:resource hash="aa8ad2ec7bff7f778215f0d7455d41ec"><fr:resource-content><html:img src="/aa8ad2ec7bff7f778215f0d7455d41ec.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[
        \usepackage{amsmath,amssymb}
  \usepackage{mathtools}
  \usepackage{stmaryrd}
  \newcommand{\set}[1]{\left\{#1\right\}}
      \usepackage {tikz}
      \usetikzlibrary {graphs,quotes,cd}
      
  \definecolor {green}{RGB}{27,158,119}
  \definecolor {orange}{RGB}{217,95,2}
  \definecolor {purple}{RGB}{117,112,179}

      
    ]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
      \begin {tikzpicture}[
    commutative diagrams/every diagram, every node/.style={commutative diagrams/every cell}, every path/.style={commutative diagrams/.cd, every label}
  ]
        
    \path  graph[math nodes, grow down, branch right=3cm] {
      { [name=l] r2 / "r^\prime " ->[tips=false, double equal sign distance] s1 / "r^\prime " <-[tips=false, double equal sign distance] r1 / "r^\prime " ->["$b$"] s0 / "s" <-["$f$"] r0 / "r"};
      { [name=r, nodes={yshift=-2cm}] r1 / "r^\prime " ->["$b$"] s0 / "s" <-["$f$"] r0 / "r,"};
      l r2 ->[tips=false,double equal sign distance] r r1;
      {l r2 [< "$b$" right], l s1 [< "$b$" below], l r1 [< "$b$" below], l s0 [< {tips=false, double equal sign distance}], l r0 [< "$f$" above]} -> r s0;
      l r0 [clear <] ->[tips=false,double equal sign distance] r r0;
    };
  
      \end {tikzpicture}
    ]]></fr:resource-source></fr:resource></html:figure>


  where every 2-cell filler is trivial.
</html:p>
 
   
   <fr:tree show-metadata="false" toc="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>11</fr:month><fr:day>26</fr:day></fr:date><fr:taxon>proof</fr:taxon></fr:frontmatter><fr:mainmatter>
  <html:p>
    Suppose that <fr:tex display="inline"><![CDATA[n = 0]]></fr:tex>, whence <fr:tex display="inline"><![CDATA[\operatorname {Zig}^{n}(\mathcal {C}) = \mathcal {C}]]></fr:tex>.
    Then the preimage of each identity morphism in <fr:tex display="inline"><![CDATA[J]]></fr:tex> is determined to be <fr:link href="/coherent-inverses-NBLG/" title="collapsible morphism" uri="https://forest.nickx.hu/coherent-inverses-NBLG/" display-uri="coherent-inverses-NBLG" type="local">collapsible</fr:link>, and therefore the corresponding <fr:link href="/coherent-inverses-HSJ2/" title="strong collapse" uri="https://forest.nickx.hu/coherent-inverses-HSJ2/" display-uri="coherent-inverses-HSJ2" type="local">strong collapse</fr:link> is along the following quotient:
    
  
  <html:figure><fr:resource hash="264421a1212b80f5162eff70cae6cd33"><fr:resource-content><html:img src="/264421a1212b80f5162eff70cae6cd33.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[
        \usepackage{amsmath,amssymb}
  \usepackage{mathtools}
  \usepackage{stmaryrd}
  \newcommand{\set}[1]{\left\{#1\right\}}
      \usepackage {tikz}
      \usetikzlibrary {graphs,quotes,cd,fit}
      
  \definecolor {green}{RGB}{27,158,119}
  \definecolor {orange}{RGB}{217,95,2}
  \definecolor {purple}{RGB}{117,112,179}

      
    ]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
      \begin {tikzpicture}[
      commutative diagrams/every diagram, every node/.style={commutative diagrams/every cell}, every path/.style={commutative diagrams/.cd, every label}
    ]
        
      \path  graph[math nodes, grow down] {
        r2 / "r^\prime " ->[tips=false, double equal sign distance] s1 / "r^\prime " <-[tips=false, double equal sign distance] r1 / "r^\prime " ->["$b$"] s0 / "s" <-["$f$"] r0 / "r.";
      };
      \node [draw, rounded corners, fit={(r2.center) (r1.center)}, inner sep=5pt] {};
      \node [draw, rounded corners, fit={(s0.center)}, inner sep=5pt] {};
      \node [draw, rounded corners, fit={(r0.center)}, inner sep=5pt] {};
    
      \end {tikzpicture}
    ]]></fr:resource-source></fr:resource></html:figure>


    The <fr:link href="/coherent-inverses-HSJ2/" title="strong collapse" uri="https://forest.nickx.hu/coherent-inverses-HSJ2/" display-uri="coherent-inverses-HSJ2" type="local">strong collapse</fr:link> admits a terminal index, which maps to <fr:tex display="inline"><![CDATA[s]]></fr:tex>; the unique morphisms of <fr:tex display="inline"><![CDATA[\operatorname {Zig}^{n}(\mathcal {C})]]></fr:tex> to <fr:tex display="inline"><![CDATA[s]]></fr:tex> are respectively <fr:tex display="inline"><![CDATA[b]]></fr:tex>, <fr:tex display="inline"><![CDATA[
  \text {id}_{s}
]]></fr:tex>, and <fr:tex display="inline"><![CDATA[f]]></fr:tex>, which assemble into a cocone with tip <fr:tex display="inline"><![CDATA[s]]></fr:tex>, lifting to form the desired <fr:link href="/coherent-inverses-XQVM/" title="framed zigzag enriched category" uri="https://forest.nickx.hu/coherent-inverses-XQVM/" display-uri="coherent-inverses-XQVM" type="local">framed zigzag map</fr:link> as an <fr:link href="/coherent-inverses-W0JK/" title="oplax cocone" uri="https://forest.nickx.hu/coherent-inverses-W0JK/" display-uri="coherent-inverses-W0JK" type="local">oplax cocone</fr:link> which witnesses a <fr:link href="/coherent-inverses-ZPGB/" title="collapse colimit" uri="https://forest.nickx.hu/coherent-inverses-ZPGB/" display-uri="coherent-inverses-ZPGB" type="local">collapse colimit</fr:link>, as in <fr:link href="/coherent-inverses-063A/" title="contraction algorithm base case computes a collapse colimit" uri="https://forest.nickx.hu/coherent-inverses-063A/" display-uri="coherent-inverses-063A" type="local">theorem <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-063A/" display-uri="coherent-inverses-063A" /></fr:link>.
  </html:p>
  <html:p>
    Otherwise, when <fr:tex display="inline"><![CDATA[n > 0]]></fr:tex>, observe that this diagram admits a singular decomposition of <fr:tex display="inline"><![CDATA[D]]></fr:tex> into <fr:tex display="inline"><![CDATA[\set {{J \xrightarrow {D_k} \operatorname {Zig}^{n}(\mathcal {C})}}_{0 \leq  k < h}]]></fr:tex> for <fr:tex display="inline"><![CDATA[s \in  \operatorname {Zig}^{n}(\mathcal {C})]]></fr:tex> having singular height <fr:tex display="inline"><![CDATA[h]]></fr:tex>.
    Each diagram <fr:tex display="inline"><![CDATA[D_k]]></fr:tex> yields an <fr:link href="/coherent-inverses-4S4Y/" title="exploded diagram" uri="https://forest.nickx.hu/coherent-inverses-4S4Y/" display-uri="coherent-inverses-4S4Y" type="local">exploded diagram</fr:link> of the following form in <fr:tex display="inline"><![CDATA[\operatorname {Zig}^{n-1}(\mathcal {C})]]></fr:tex>:
    
  
  <html:figure><fr:resource hash="2fbb0040172e490c27092dcb770af1db"><fr:resource-content><html:img src="/2fbb0040172e490c27092dcb770af1db.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[
        \usepackage{amsmath,amssymb}
  \usepackage{mathtools}
  \usepackage{stmaryrd}
  \newcommand{\set}[1]{\left\{#1\right\}}
      \usepackage {tikz}
      \usetikzlibrary {graphs,quotes,cd,backgrounds}
      
  \definecolor {green}{RGB}{27,158,119}
  \definecolor {orange}{RGB}{217,95,2}
  \definecolor {purple}{RGB}{117,112,179}

      
    ]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
      \begin {tikzpicture}[
      commutative diagrams/every diagram, every node/.style={commutative diagrams/every cell}, every path/.style={commutative diagrams/.cd, every label}
    ]
        
      \path  graph[math nodes, grow right=2cm, branch down=1.5cm] {
        { [name=r2] 0 / "l^\prime _0" ->["$h_0$"] 1 / "l^\prime _1" <-["$h_1$"] 2 / "{\ldots }" ->["$h_{n-2}$"] 3 / "l^\prime _{n-1}" <-["$h_{n-1}$"] 4 / "l^\prime _n"};
        { [name=s1] 0 / "l^\prime _0" ->["$h_0$"] 1 / "l^\prime _1" <-["$h_1$"] 2 / "{\ldots }" ->["$h_{n-2}$"] 3 / "l^\prime _{n-1}" <-["$h_{n-1}$"] 4 / "l^\prime _n"};
        { [name=r1] 0 / "l^\prime _0" ->["$h_0$"] 1 / "l^\prime _1" <-["$h_1$"] 2 / "{\ldots }" ->["$h_{n-2}$"] 3 / "l^\prime _{n-1}" <-["$h_{n-1}$"] 4 / "l^\prime _n"};
        { [name=s0] 0 / "r_0" ->["$p$" above] 2 / "s_0" [xshift=2cm] <-["$q$" above] 4 / "r_1" [xshift=4cm]};
        { [name=r0] 0 / "l_0" ->["$g_0$" below] 1 / "l_1" <-["$g_1$" below] 2 / "{\ldots }" ->["$g_{m-2}$" below] 3 / "l_{m-1}" <-["$g_{m-1}$" below] 4 / "l_m."};
        \foreach  \x  [evaluate=\x  as \xp  using int(\x +1)] in {1} {
          \foreach  \y  in {1, 2, 3} {
            (s\x  \space  \y ) <-[tips=false, double equal sign distance] {
              (r\x  \space  \y ),
              (r\xp  \space  \y )
            };
          }
        };
        (s1 1) <-["$h_0$" above] { r2 0, r1 0 };
        (s1 1) <-["$h_1$" above] { r2 2, r1 2 };
        (s1 3) <-["$h_{n-2}$" above] { r2 2, r1 2 };
        (s1 3) <-["$h_{n-1}$" above] { r2 4, r1 4 };
        \foreach  \x  [evaluate=\x  as \xp  using int(\x +1)] in {0, 1} {
          (s\x  \space  0) <-[tips=false, double equal sign distance] {
            (r\x  \space  0),
            (r\xp  \space  0)
          };
          (s\x  \space  4) <-[tips=false, double equal sign distance] {
            (r\x  \space  4),
            (r\xp  \space  4)
          };
        };
        (s0 2) <-["$b_0$" below, ""{commutative diagrams/marking, name=a}] (r1 0);
        (s0 2) <-["$b_1$" right] (r1 1);
        (s0 2) <-[""{commutative diagrams/marking, name=b}] (r1 2);
        (s0 2) <-["$b_{n-1}$" right] (r1 3);
        (s0 2) <-["$b_n$" below, ""{commutative diagrams/marking, name=c}] (r1 4);
        (s0 2) <-["$f_0$" above, ""{commutative diagrams/marking, name=d}] (r0 0);
        (s0 2) <-["$f_1$" right] (r0 1);
        (s0 2) <-[""{commutative diagrams/marking, name=e}] (r0 2);
        (s0 2) <-["$f_{m-1}$" below] (r0 3);
        (s0 2) <-["$f_m$" above, ""{commutative diagrams/marking, name=f}] (r0 4);
      };
      \begin {scope}[on background layer]
        \path  (a) edge[commutative diagrams/Rightarrow] (s0 0);
        \path  (a) edge[commutative diagrams/Rightarrow] (r1 1);
        \path  (b) edge[commutative diagrams/Rightarrow] (r1 1);
        \path  (b) edge[commutative diagrams/Rightarrow] (r1 3);
        \path  (c) edge[commutative diagrams/Rightarrow] (r1 3);
        \path  (c) edge[commutative diagrams/Rightarrow] (s0 4);
        \path  (d) edge[commutative diagrams/Rightarrow] (s0 0);
        \path  (d) edge[commutative diagrams/Rightarrow] (r0 1);
        \path  (e) edge[commutative diagrams/Rightarrow] (r0 1);
        \path  (e) edge[commutative diagrams/Rightarrow] (r0 3);
        \path  (f) edge[commutative diagrams/Rightarrow] (r0 3);
        \path  (f) edge[commutative diagrams/Rightarrow] (s0 4);
      \end {scope}
    
      \end {tikzpicture}
    ]]></fr:resource-source></fr:resource></html:figure>


    Here, <fr:tex display="inline"><![CDATA[l_i]]></fr:tex> represents either some regular or singular level depending on whether <fr:tex display="inline"><![CDATA[i]]></fr:tex> is even or odd (the distinction here is unimportant).
  </html:p>
  <html:p>
    Now, we proceed inductively on the dimension <fr:tex display="inline"><![CDATA[n]]></fr:tex>.
    For the base case, where <fr:tex display="inline"><![CDATA[n = 1]]></fr:tex>, this <fr:link href="/coherent-inverses-4S4Y/" title="exploded diagram" uri="https://forest.nickx.hu/coherent-inverses-4S4Y/" display-uri="coherent-inverses-4S4Y" type="local">exploded diagram</fr:link> is a diagram in <fr:tex display="inline"><![CDATA[\mathcal {C}]]></fr:tex>.
    Because <fr:tex display="inline"><![CDATA[D]]></fr:tex> was <fr:link href="/coherent-inverses-ZCMQ/" title="well-formed tree-cover oplax diagram" uri="https://forest.nickx.hu/coherent-inverses-ZCMQ/" display-uri="coherent-inverses-ZCMQ" type="local">well-formed</fr:link>, so are each <fr:tex display="inline"><![CDATA[D_k]]></fr:tex>.
    Thus, the <fr:link href="/coherent-inverses-VQWY/" title="depth-first collapse" uri="https://forest.nickx.hu/coherent-inverses-VQWY/" display-uri="coherent-inverses-VQWY" type="local">depth-first collapse algorithm</fr:link> quotient is first computed row-wise; from top to bottom:
    <html:ul><html:li>
        contiguous segments of <fr:tex display="inline"><![CDATA[l^\prime _i]]></fr:tex> are mapped to some <fr:tex display="inline"><![CDATA[\ell ^\prime _j]]></fr:tex> for <fr:tex display="inline"><![CDATA[0 \leq  i \leq  n]]></fr:tex> and <fr:tex display="inline"><![CDATA[0 \leq  j \leq  n^\prime ]]></fr:tex> for some <fr:tex display="inline"><![CDATA[n^\prime  \leq  n]]></fr:tex>:
        as the first three rows are identical, by <fr:link href="/coherent-inverses-ZCMQ/" title="well-formed tree-cover oplax diagram" uri="https://forest.nickx.hu/coherent-inverses-ZCMQ/" display-uri="coherent-inverses-ZCMQ" type="local">well-formedness</fr:link> each computation in the three rows is identical — a priori, this may not be so due possible obstructions between the third and fourth row, which are not necessarily connected by identities (c.f. <fr:link href="/coherent-inverses-J2IZ/" title="Non-well-formed tree-cover oplax diagram" uri="https://forest.nickx.hu/coherent-inverses-J2IZ/" display-uri="coherent-inverses-J2IZ" type="local">example <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-J2IZ/" display-uri="coherent-inverses-J2IZ" /></fr:link>);
      </html:li>
      <html:li>
        it may be the case that <fr:tex display="inline"><![CDATA[p]]></fr:tex> and <fr:tex display="inline"><![CDATA[q]]></fr:tex> are not identities in general; however, if they are, then every morphism in the diagram is forced to be the identity as <fr:tex display="inline"><![CDATA[\mathcal {C}]]></fr:tex> is <fr:link href="/coherent-inverses-L0IM/" title="Finite direct \mathbf {Pos}-category" uri="https://forest.nickx.hu/coherent-inverses-L0IM/" display-uri="coherent-inverses-L0IM" type="local">direct</fr:link>;
      </html:li>
      <html:li>
        contiguous segments of <fr:tex display="inline"><![CDATA[l_i]]></fr:tex> are mapped to some <fr:tex display="inline"><![CDATA[\ell _j]]></fr:tex> for <fr:tex display="inline"><![CDATA[0 \leq  i \leq  m]]></fr:tex> and <fr:tex display="inline"><![CDATA[0 \leq  j \leq  m^\prime ]]></fr:tex> for some <fr:tex display="inline"><![CDATA[m^\prime  \leq  m]]></fr:tex>.
      </html:li></html:ul>
    Then, the procedure identifies together each index labelled by the same <fr:tex display="inline"><![CDATA[\ell ^\prime _i]]></fr:tex>, as they are connected by <fr:link href="/coherent-inverses-1EX1/" title="strongly collapsible morphism" uri="https://forest.nickx.hu/coherent-inverses-1EX1/" display-uri="coherent-inverses-1EX1" type="local">strongly collapsible</fr:link> morphisms.
    In general, the state of <fr:link href="/coherent-inverses-HSJ2/" title="strong collapse" uri="https://forest.nickx.hu/coherent-inverses-HSJ2/" display-uri="coherent-inverses-HSJ2" type="local">strong collapse</fr:link> after this is as follows:
    
  
  <html:figure><fr:resource hash="500ed5af91ed3666afd98dee2ee4ef19"><fr:resource-content><html:img src="/500ed5af91ed3666afd98dee2ee4ef19.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[
        \usepackage{amsmath,amssymb}
  \usepackage{mathtools}
  \usepackage{stmaryrd}
  \newcommand{\set}[1]{\left\{#1\right\}}
      \usepackage {tikz}
      \usetikzlibrary {graphs,quotes,cd,backgrounds,fit}
      
  \definecolor {green}{RGB}{27,158,119}
  \definecolor {orange}{RGB}{217,95,2}
  \definecolor {purple}{RGB}{117,112,179}

      
    ]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
      \begin {tikzpicture}[
      commutative diagrams/every diagram, every node/.style={commutative diagrams/every cell}, every path/.style={commutative diagrams/.cd, every label}
    ]
        
      \path  graph[math nodes, grow right=2cm, branch down=1.5cm] {
        { [name=r2] 0 / "\ell ^\prime _0" ->["$h_0$"] 1 / "\ell ^\prime _1" <-["$h_1$"] 2 / "{\ldots }" ->["$h_{n^\prime  - 2}$"] 3 / "\ell ^\prime _{n^\prime  - 1}" <-["$h_{n^\prime  - 1}$"] 4 / "\ell ^\prime _{n^\prime }"};
        { [name=s1] 0 / "\ell ^\prime _0" ->["$h_0$"] 1 / "\ell ^\prime _1" <-["$h_1$"] 2 / "{\ldots }" ->["$h_{n^\prime  - 2}$"] 3 / "\ell ^\prime _{n^\prime  - 1}" <-["$h_{n^\prime  - 1}$"] 4 / "\ell ^\prime _{n^\prime }"};
        { [name=r1] 0 / "\ell ^\prime _0" ->["$h_0$"] 1 / "\ell ^\prime _1" <-["$h_1$"] 2 / "{\ldots }" ->["$h_{n^\prime  - 2}$"] 3 / "\ell ^\prime _{n^\prime  - 1}" <-["$h_{n^\prime  - 1}$"] 4 / "\ell ^\prime _{n^\prime }"};
        { [name=s0] 0 / "r_0" ->["$p$" above] 2 / "s_0" [xshift=2cm] <-["$q$" above] 4 / "r_1" [xshift=4cm]};
        { [name=r0] 0 / "\ell _0" ->["$g_0$" below] 1 / "\ell _1" <-["$g_1$" below] 2 / "{\ldots }" ->["$g_{m^\prime  - 2}$" below] 3 / "\ell _{m^\prime  - 1}" <-["$g_{m^\prime  - 1}$" below] 4 / "\ell _{m^\prime }."};
        \foreach  \x  [evaluate=\x  as \xp  using int(\x +1)] in {1} {
          \foreach  \y  in {1, 2, 3} {
            (s\x  \space  \y ) <-[tips=false, double equal sign distance] {
              (r\x  \space  \y ),
              (r\xp  \space  \y )
            };
          }
        };
        (s1 1) <-["$h_0$" above] { r2 0, r1 0 };
        (s1 1) <-["$h_1$" above] { r2 2, r1 2 };
        (s1 3) <-["$h_{n^\prime  - 2}$" above] { r2 2, r1 2 };
        (s1 3) <-["$h_{n^\prime  - 1}$" above] { r2 4, r1 4 };
        \foreach  \x  [evaluate=\x  as \xp  using int(\x +1)] in {0, 1} {
          (s\x  \space  0) <-[tips=false, double equal sign distance] {
            (r\x  \space  0),
            (r\xp  \space  0)
          };
          (s\x  \space  4) <-[tips=false, double equal sign distance] {
            (r\x  \space  4),
            (r\xp  \space  4)
          };
        };
        (s0 2) <-["$b_0$" below, ""{commutative diagrams/marking, name=a}] (r1 0);
        (s0 2) <-["$b_1$" right] (r1 1);
        (s0 2) <-[""{commutative diagrams/marking, name=b}] (r1 2);
        (s0 2) <-["$b_{n^\prime  - 1}$" right] (r1 3);
        (s0 2) <-["$b_{n^\prime }$" below, ""{commutative diagrams/marking, name=c}] (r1 4);
        (s0 2) <-["$f_0$" above, ""{commutative diagrams/marking, name=d}] (r0 0);
        (s0 2) <-["$f_1$" right] (r0 1);
        (s0 2) <-[""{commutative diagrams/marking, name=e}] (r0 2);
        (s0 2) <-["$f_{m^\prime  - 1}$" below] (r0 3);
        (s0 2) <-["$f_{m^\prime }$" above, ""{commutative diagrams/marking, name=f}] (r0 4);
      };
      \begin {scope}[on background layer]
        \path  (a) edge[commutative diagrams/Rightarrow] (s0 0);
        \path  (a) edge[commutative diagrams/Rightarrow] (r1 1);
        \path  (b) edge[commutative diagrams/Rightarrow] (r1 1);
        \path  (b) edge[commutative diagrams/Rightarrow] (r1 3);
        \path  (c) edge[commutative diagrams/Rightarrow] (r1 3);
        \path  (c) edge[commutative diagrams/Rightarrow] (s0 4);
        \path  (d) edge[commutative diagrams/Rightarrow] (s0 0);
        \path  (d) edge[commutative diagrams/Rightarrow] (r0 1);
        \path  (e) edge[commutative diagrams/Rightarrow] (r0 1);
        \path  (e) edge[commutative diagrams/Rightarrow] (r0 3);
        \path  (f) edge[commutative diagrams/Rightarrow] (r0 3);
        \path  (f) edge[commutative diagrams/Rightarrow] (s0 4);
      \end {scope}
      \foreach  \x  in {0, 1, 2, 3, 4} {
        \node [draw, rounded corners, fit={(r2 \x ) (r1 \x )}, inner sep=0pt] {};
        \node [draw, rounded corners, fit={(r0 \x )}, inner sep=0pt] {};
      }
      \foreach  \x  in {0, 2, 4} {
        \node [draw, rounded corners, fit={(s0 \x .center)}, inner sep=5pt] {};
      }
    
      \end {tikzpicture}
    ]]></fr:resource-source></fr:resource></html:figure>


    From here, it can be observed that <fr:tex display="inline"><![CDATA[s_0]]></fr:tex> is the terminal index of the <fr:link href="/coherent-inverses-HSJ2/" title="strong collapse" uri="https://forest.nickx.hu/coherent-inverses-HSJ2/" display-uri="coherent-inverses-HSJ2" type="local">strong collapse</fr:link>.
    This induces an <fr:link href="/coherent-inverses-W0JK/" title="oplax cocone" uri="https://forest.nickx.hu/coherent-inverses-W0JK/" display-uri="coherent-inverses-W0JK" type="local">oplax cocone</fr:link> over <fr:tex display="inline"><![CDATA[D_k]]></fr:tex> with tip <fr:tex display="inline"><![CDATA[s_0]]></fr:tex> for each <fr:tex display="inline"><![CDATA[0 \leq  k < h]]></fr:tex>, which then are combined to lift to the desired <fr:link href="/coherent-inverses-XQVM/" title="framed zigzag enriched category" uri="https://forest.nickx.hu/coherent-inverses-XQVM/" display-uri="coherent-inverses-XQVM" type="local">framed zigzag map</fr:link>.
  </html:p>
  <html:p>
    For the inductive case, where <fr:tex display="inline"><![CDATA[n > 1]]></fr:tex>, the proof essentially proceeds similarly, except this <fr:link href="/coherent-inverses-W0JK/" title="oplax cocone" uri="https://forest.nickx.hu/coherent-inverses-W0JK/" display-uri="coherent-inverses-W0JK" type="local">oplax cocone</fr:link> is obtained from the inductive hypothesis.
  </html:p>
</fr:mainmatter></fr:tree>
 
</fr:mainmatter></fr:tree><html:p>
        Note that the identity cospan could have analogously been juxtaposed below instead of above, or instead have appeared within some iterated cospan, not necessarily at one of its endpoints.
      </html:p><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>11</fr:month><fr:day>27</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-5NIV/</fr:uri><fr:display-uri>coherent-inverses-5NIV</fr:display-uri><fr:route>/coherent-inverses-5NIV/</fr:route><fr:title text="Juxtaposition with identity induces zigzag homotopy">Juxtaposition with identity induces <fr:link href="/coherent-inverses-OBFZ/" title="zigzag homotopy" uri="https://forest.nickx.hu/coherent-inverses-OBFZ/" display-uri="coherent-inverses-OBFZ" type="local">zigzag homotopy</fr:link></fr:title><fr:taxon>corollary</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
  Let <fr:tex display="inline"><![CDATA[Z \in  \operatorname {Zig}^{n+1}(\mathcal {C})]]></fr:tex>, of singular height <fr:tex display="inline"><![CDATA[h]]></fr:tex>, admit some regular level <fr:tex display="inline"><![CDATA[r]]></fr:tex>, and <fr:tex display="inline"><![CDATA[Z^\prime  \in  \operatorname {Zig}^{n+1}(\mathcal {C})]]></fr:tex> be the <fr:link href="/coherent-inverses-XQVM/" title="framed zigzag enriched category" uri="https://forest.nickx.hu/coherent-inverses-XQVM/" display-uri="coherent-inverses-XQVM" type="local">framed zigzag</fr:link> of singular height <fr:tex display="inline"><![CDATA[h+1]]></fr:tex> given replacing <fr:tex display="inline"><![CDATA[r]]></fr:tex> with the identity cospan <fr:tex display="inline"><![CDATA[r = r = r]]></fr:tex> in <fr:tex display="inline"><![CDATA[Z]]></fr:tex>.
  Then the <fr:link href="/coherent-inverses-FHS4/" title="contraction" uri="https://forest.nickx.hu/coherent-inverses-FHS4/" display-uri="coherent-inverses-FHS4" type="local">contraction algorithm</fr:link> witnesses a <fr:link href="/coherent-inverses-OBFZ/" title="zigzag homotopy" uri="https://forest.nickx.hu/coherent-inverses-OBFZ/" display-uri="coherent-inverses-OBFZ" type="local">zigzag homotopy</fr:link> between <fr:tex display="inline"><![CDATA[Z]]></fr:tex> and <fr:tex display="inline"><![CDATA[Z^\prime ]]></fr:tex>.
</html:p>
 
   
   <fr:tree show-metadata="false" toc="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>11</fr:month><fr:day>27</fr:day></fr:date><fr:taxon>proof</fr:taxon></fr:frontmatter><fr:mainmatter>
  <html:p>
    We seek to witness a cospan in <fr:tex display="inline"><![CDATA[\operatorname {Zig}^{n+1}(\mathcal {C})]]></fr:tex>:
    <fr:tex display="block"><![CDATA[
      Z^\prime  \xrightarrow {f} Z_s \xleftarrow {b} Z.
    ]]></fr:tex>
    Let <fr:tex display="inline"><![CDATA[b = 
  \text {id}_{Z}
]]></fr:tex>, whence <fr:tex display="inline"><![CDATA[Z_s = Z]]></fr:tex>, and obtain <fr:tex display="inline"><![CDATA[f]]></fr:tex> by <fr:link href="/coherent-inverses-FHS4/" title="contraction" uri="https://forest.nickx.hu/coherent-inverses-FHS4/" display-uri="coherent-inverses-FHS4" type="local">contraction</fr:link> via <fr:link href="/coherent-inverses-M1IC/" title="Juxtaposition with identity contracts" uri="https://forest.nickx.hu/coherent-inverses-M1IC/" display-uri="coherent-inverses-M1IC" type="local">proposition <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-M1IC/" display-uri="coherent-inverses-M1IC" /></fr:link>.
  </html:p>
</fr:mainmatter></fr:tree>
 
</fr:mainmatter></fr:tree><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>11</fr:month><fr:day>27</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-61HW/</fr:uri><fr:display-uri>coherent-inverses-61HW</fr:display-uri><fr:route>/coherent-inverses-61HW/</fr:route><fr:title text="Embedding is a framed zigzag map">Embedding is a <fr:link href="/coherent-inverses-XQVM/" title="framed zigzag enriched category" uri="https://forest.nickx.hu/coherent-inverses-XQVM/" display-uri="coherent-inverses-XQVM" type="local">framed zigzag map</fr:link></fr:title><fr:taxon>lemma</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
  Let <fr:tex display="inline"><![CDATA[Z \in  \operatorname {Zig}^{n+1}(\mathcal {C})]]></fr:tex> be a <fr:link href="/coherent-inverses-XQVM/" title="framed zigzag enriched category" uri="https://forest.nickx.hu/coherent-inverses-XQVM/" display-uri="coherent-inverses-XQVM" type="local">framed zigzag</fr:link> with singular height <fr:tex display="inline"><![CDATA[h]]></fr:tex> of the following form in <fr:tex display="inline"><![CDATA[\operatorname {Zig}^{n}(\mathcal {C})]]></fr:tex>:
  
  
  <html:figure><fr:resource hash="aae246b914f4172f8a42434e3bd03bfa"><fr:resource-content><html:img src="/aae246b914f4172f8a42434e3bd03bfa.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[
        \usepackage{amsmath,amssymb}
  \usepackage{mathtools}
  \usepackage{stmaryrd}
  \newcommand{\set}[1]{\left\{#1\right\}}
      \usepackage {tikz}
      \usetikzlibrary {graphs,quotes,cd,backgrounds,fit}
      
  \definecolor {green}{RGB}{27,158,119}
  \definecolor {orange}{RGB}{217,95,2}
  \definecolor {purple}{RGB}{117,112,179}

      
    ]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
      \begin {tikzpicture}[
    commutative diagrams/every diagram, every node/.style={commutative diagrams/every cell}, every path/.style={commutative diagrams/.cd, every label}
  ]
        
    \path  graph[math nodes]{
      r_0 ->["$f_0$"] x / "\ldots " <-["$b_{k-1}$"] r_k ->["$f_k$"] s_k <-["$b_k$"] r_{k+1} ->["$f_{k+1}$"] y / "\ldots " <-["$b_{h-2}$"] r_{h-1} / "r_{h-1} ,";
    };
  
      \end {tikzpicture}
    ]]></fr:resource-source></fr:resource></html:figure>


  satisfying <fr:tex display="inline"><![CDATA[f_k = b_k]]></fr:tex> (hence <fr:tex display="inline"><![CDATA[r_k = r_{k+1}]]></fr:tex>).
</html:p><html:p>
  Then there is an embedding <fr:link href="/coherent-inverses-XQVM/" title="framed zigzag enriched category" uri="https://forest.nickx.hu/coherent-inverses-XQVM/" display-uri="coherent-inverses-XQVM" type="local">framed zigzag map</fr:link> whose component regular-regular and singular-singular morphisms are all identities, underlying singular monotone map is given by the <fr:tex display="inline"><![CDATA[k]]></fr:tex>-th degeneracy map, and action is to omit the cospan <fr:tex display="inline"><![CDATA[r_k \xrightarrow {f_k} s_k \xleftarrow {b_k} r_{k+1}]]></fr:tex>:
  
  
  <html:figure><fr:resource hash="23a7a863d084e86ff06521d229cd60cd"><fr:resource-content><html:img src="/23a7a863d084e86ff06521d229cd60cd.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[
        \usepackage{amsmath,amssymb}
  \usepackage{mathtools}
  \usepackage{stmaryrd}
  \newcommand{\set}[1]{\left\{#1\right\}}
      \usepackage {tikz}
      \usetikzlibrary {graphs,quotes,cd,backgrounds,fit}
      
  \definecolor {green}{RGB}{27,158,119}
  \definecolor {orange}{RGB}{217,95,2}
  \definecolor {purple}{RGB}{117,112,179}

      
    ]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
      \begin {tikzpicture}[
    commutative diagrams/every diagram, every node/.style={commutative diagrams/every cell}, every path/.style={commutative diagrams/.cd, every label}
  ]
        
    \path  graph[math nodes]{
      {[name=t] r_0 ->["$f_0$"] x / "\ldots " <-["$b_{k-1}$"] r_k ->["$f_k$"] s_k <-["$b_k$"] r_{k+1} ->["$f_{k+1}$"] y / "\ldots " <-["$b_{h-2}$"] r_{h-1} / "r_{h-1} ,"};
      {[name=b] r_0 ->["$f_0$" below] x / "\ldots " <-["$b_{k-1}$" below] r_k [xshift=1cm] ->["$f_{k+1}$" below] y / "\ldots " [xshift=2cm] <-["$b_{h-2}$" below] r_{h-1} [xshift=2cm]};
      (b r_0) ->[tips=false, double equal sign distance] (t r_0);
      (b r_{h-1}) ->[tips=false, double equal sign distance] (t r_{h-1});
      (b x) ->[tips=false, double equal sign distance] (t x);
      (b y) ->[tips=false, double equal sign distance] (t y);
      (b r_0) ->["$f_0$" above] (t x);
      (b r_{h-1}) ->["$b_{h-2}$" below] (t y);
      (b r_k) ->[tips=false, double equal sign distance] {(t r_k), (t r_{k+1})};
      (b r_k) ->["$f_k$" above right] (t s_k);
      (b r_k) ->["$b_{k-1}$" below] (t x);
      (b r_k) ->["$f_{k+1}$" below] (t y);
    };
  
      \end {tikzpicture}
    ]]></fr:resource-source></fr:resource></html:figure>


  where every 2-cell filler is trivial.
</html:p></fr:mainmatter></fr:tree><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>11</fr:month><fr:day>27</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-1S8Z/</fr:uri><fr:display-uri>coherent-inverses-1S8Z</fr:display-uri><fr:route>/coherent-inverses-1S8Z/</fr:route><fr:title text="Juxtaposition with inverse contracts">Juxtaposition with inverse contracts</fr:title><fr:taxon>proposition</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
  Let <fr:tex display="inline"><![CDATA[{J \xrightarrow {D} \operatorname {Zig}^{n}(\mathcal {C})}]]></fr:tex> be a diagram of the following form:
  
  
  <html:figure><fr:resource hash="90bc0fc4b039089be3be2139deb2e6d0"><fr:resource-content><html:img src="/90bc0fc4b039089be3be2139deb2e6d0.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[
        \usepackage{amsmath,amssymb}
  \usepackage{mathtools}
  \usepackage{stmaryrd}
  \newcommand{\set}[1]{\left\{#1\right\}}
      \usepackage {tikz}
      \usetikzlibrary {graphs,quotes,cd}
      
  \definecolor {green}{RGB}{27,158,119}
  \definecolor {orange}{RGB}{217,95,2}
  \definecolor {purple}{RGB}{117,112,179}

      
    ]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
      \begin {tikzpicture}[
    commutative diagrams/every diagram, every node/.style={commutative diagrams/every cell}, every path/.style={commutative diagrams/.cd, every label}
  ]
        
    \path  graph[math nodes, grow down] {
      r2 / "r" ->["$f$"] s1 / "s" <-["$b$"] r1 / "r^\prime " ->["$b$"] s0 / "s" <-["$f$"] r0 / "r.";
    };
  
      \end {tikzpicture}
    ]]></fr:resource-source></fr:resource></html:figure>


  Observe that this diagram corresponds the <fr:link href="/coherent-inverses-4S4Y/" title="exploded diagram" uri="https://forest.nickx.hu/coherent-inverses-4S4Y/" display-uri="coherent-inverses-4S4Y" type="local">exploded diagram</fr:link> of a particular object of <fr:tex display="inline"><![CDATA[\operatorname {Zig}^{n+1}(\mathcal {C})]]></fr:tex> with two singular levels, where the second cospan is given by the inverse cospan of the first in <fr:tex display="inline"><![CDATA[\operatorname {Zig}^{n}(\mathcal {C})]]></fr:tex>.
</html:p><html:p>
  Then the <fr:link href="/coherent-inverses-FHS4/" title="contraction" uri="https://forest.nickx.hu/coherent-inverses-FHS4/" display-uri="coherent-inverses-FHS4" type="local">contraction algorithm</fr:link> witnesses a <fr:link href="/coherent-inverses-XQVM/" title="framed zigzag enriched category" uri="https://forest.nickx.hu/coherent-inverses-XQVM/" display-uri="coherent-inverses-XQVM" type="local">framed zigzag map</fr:link> in <fr:tex display="inline"><![CDATA[\operatorname {Zig}^{n+1}(\mathcal {C})]]></fr:tex> whose <fr:link href="/coherent-inverses-4S4Y/" title="exploded diagram" uri="https://forest.nickx.hu/coherent-inverses-4S4Y/" display-uri="coherent-inverses-4S4Y" type="local">exploded diagram</fr:link> is given as follows:
  
  
  <html:figure><fr:resource hash="94142233f4560fe58c39489c49d4dafe"><fr:resource-content><html:img src="/94142233f4560fe58c39489c49d4dafe.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[
        \usepackage{amsmath,amssymb}
  \usepackage{mathtools}
  \usepackage{stmaryrd}
  \newcommand{\set}[1]{\left\{#1\right\}}
      \usepackage {tikz}
      \usetikzlibrary {graphs,quotes,cd}
      
  \definecolor {green}{RGB}{27,158,119}
  \definecolor {orange}{RGB}{217,95,2}
  \definecolor {purple}{RGB}{117,112,179}

      
    ]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
      \begin {tikzpicture}[
    commutative diagrams/every diagram, every node/.style={commutative diagrams/every cell}, every path/.style={commutative diagrams/.cd, every label}
  ]
        
    \path  graph[math nodes, grow down, branch right=2cm] {
      { [name=l] r2 / "r" ->["$f$" left] s1 / "s" <-["$b$" left] r1 / "r^\prime " ->["$b$" left] s0 / "s" <-["$f$" left] r0 / "r"};
      { [name=r, nodes={yshift=-1cm}] r1 / "r" ->["$f$"] s0 / "s" <-["$f$"] r0 / "r,"};
      l r2 ->[tips=false,double equal sign distance] r r1;
      {l r2 [< "$f$" right], l s1 [< {tips=false, double equal sign distance}], l r1 [< "$b$" below left], l s0 [< {tips=false, double equal sign distance}], l r0 [< "$f$" right]} -> r s0;
      l r0 [clear <] ->[tips=false,double equal sign distance] r r0;
    };
  
      \end {tikzpicture}
    ]]></fr:resource-source></fr:resource></html:figure>


  where every 2-cell filler is trivial.
</html:p>
 
   
   <fr:tree show-metadata="false" toc="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>11</fr:month><fr:day>27</fr:day></fr:date><fr:taxon>proof</fr:taxon></fr:frontmatter><fr:mainmatter>
  <html:p>
    The proof of this is similar to that of <fr:link href="/coherent-inverses-M1IC/" title="Juxtaposition with identity contracts" uri="https://forest.nickx.hu/coherent-inverses-M1IC/" display-uri="coherent-inverses-M1IC" type="local">proposition <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-M1IC/" display-uri="coherent-inverses-M1IC" /></fr:link>.
  </html:p>
  <html:p>
    First, for the case where <fr:tex display="inline"><![CDATA[n = 0]]></fr:tex>, the quotient we obtain in general is:
    
  
  <html:figure><fr:resource hash="fe5b3cad805631793fd12002ba7045a1"><fr:resource-content><html:img src="/fe5b3cad805631793fd12002ba7045a1.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[
        \usepackage{amsmath,amssymb}
  \usepackage{mathtools}
  \usepackage{stmaryrd}
  \newcommand{\set}[1]{\left\{#1\right\}}
      \usepackage {tikz}
      \usetikzlibrary {graphs,quotes,cd,fit}
      
  \definecolor {green}{RGB}{27,158,119}
  \definecolor {orange}{RGB}{217,95,2}
  \definecolor {purple}{RGB}{117,112,179}

      
    ]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
      \begin {tikzpicture}[
      commutative diagrams/every diagram, every node/.style={commutative diagrams/every cell}, every path/.style={commutative diagrams/.cd, every label}
    ]
        
      \path  graph[math nodes, grow down] {
        r2 / "r" ->["$f$"] s1 / "s" <-["$b$"] r1 / "r^\prime " ->["$b$"] s0 / "s" <-["$f$"] r0 / "r.";
      };
      \foreach  \x  in {r2, s1, r1, s0, r0} {
        \node [draw, rounded corners, fit={(\x .center)}, inner sep=5pt] {};
      }
    
      \end {tikzpicture}
    ]]></fr:resource-source></fr:resource></html:figure>


    That is, the <fr:link href="/coherent-inverses-HSJ2/" title="strong collapse" uri="https://forest.nickx.hu/coherent-inverses-HSJ2/" display-uri="coherent-inverses-HSJ2" type="local">strong collapse</fr:link> is the same.
    Every component uniquely maps to a class labelled by <fr:tex display="inline"><![CDATA[s]]></fr:tex> in the <fr:link href="/coherent-inverses-HSJ2/" title="strong collapse" uri="https://forest.nickx.hu/coherent-inverses-HSJ2/" display-uri="coherent-inverses-HSJ2" type="local">strong collapse</fr:link>, allowing us to build a cocone with tip <fr:tex display="inline"><![CDATA[s]]></fr:tex> which can be lifted to the desired <fr:link href="/coherent-inverses-XQVM/" title="framed zigzag enriched category" uri="https://forest.nickx.hu/coherent-inverses-XQVM/" display-uri="coherent-inverses-XQVM" type="local">framed zigzag map</fr:link> (<fr:link href="/coherent-inverses-063A/" title="contraction algorithm base case computes a collapse colimit" uri="https://forest.nickx.hu/coherent-inverses-063A/" display-uri="coherent-inverses-063A" type="local">theorem <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-063A/" display-uri="coherent-inverses-063A" /></fr:link>).
  </html:p>
  <html:p>
    Otherwise, when <fr:tex display="inline"><![CDATA[n > 0]]></fr:tex>, observe that this diagram admits a singular decomposition of <fr:tex display="inline"><![CDATA[D]]></fr:tex> into <fr:tex display="inline"><![CDATA[\set {{J \xrightarrow {D_k} \operatorname {Zig}^{n}(\mathcal {C})}}_{0 \leq  k < h}]]></fr:tex> for <fr:tex display="inline"><![CDATA[s \in  \operatorname {Zig}^{n}(\mathcal {C})]]></fr:tex> having singular height <fr:tex display="inline"><![CDATA[h]]></fr:tex>.
    Each diagram <fr:tex display="inline"><![CDATA[D_k]]></fr:tex> <fr:link href="/coherent-inverses-4S4Y/" title="exploded diagram" uri="https://forest.nickx.hu/coherent-inverses-4S4Y/" display-uri="coherent-inverses-4S4Y" type="local">explodes</fr:link> into a diagram of the following form in <fr:tex display="inline"><![CDATA[\operatorname {Zig}^{n-1}(\mathcal {C})]]></fr:tex>:
    
  
  <html:figure><fr:resource hash="a8b723a666362484d6699a43264c94ac"><fr:resource-content><html:img src="/a8b723a666362484d6699a43264c94ac.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[
        \usepackage{amsmath,amssymb}
  \usepackage{mathtools}
  \usepackage{stmaryrd}
  \newcommand{\set}[1]{\left\{#1\right\}}
      \usepackage {tikz}
      \usetikzlibrary {graphs,quotes,cd,backgrounds}
      
  \definecolor {green}{RGB}{27,158,119}
  \definecolor {orange}{RGB}{217,95,2}
  \definecolor {purple}{RGB}{117,112,179}

      
    ]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
      \begin {tikzpicture}[
      commutative diagrams/every diagram, every node/.style={commutative diagrams/every cell}, every path/.style={commutative diagrams/.cd, every label}
    ]
        
      \path  graph[math nodes, grow right=2cm, branch down=1.5cm] {
        { [name=r2] 0 / "l_0" ->["$g_0$"] 1 / "l_1" <-["$g_1$"] 2 / "{\ldots }" ->["$g_{m-2}$"] 3 / "l_{m-1}" <-["$g_{m-1}$"] 4 / "l_m."};
        { [name=s1] 0 / "r_0" ->["$p$" above] 2 / "s_0" [xshift=2cm] <-["$q$" above] 4 / "r_1" [xshift=4cm]};
        { [name=r1] 0 / "l^\prime _0" ->["$h_0$" below right] 1 / "l^\prime _1" <-["$h_1$" below right] 2 / "{\ldots }" ->["$h_{n-2}$" below left] 3 / "l^\prime _{n-1}" <-["$h_{n-1}$" below left] 4 / "l^\prime _n"};
        { [name=s0] 0 / "r_0" ->["$p$" above] 2 / "s_0" [xshift=2cm] <-["$q$" above] 4 / "r_1" [xshift=4cm]};
        { [name=r0] 0 / "l_0" ->["$g_0$" below] 1 / "l_1" <-["$g_1$" below] 2 / "{\ldots }" ->["$g_{m-2}$" below] 3 / "l_{m-1}" <-["$g_{m-1}$" below] 4 / "l_m."};
        \foreach  \x  [evaluate=\x  as \xp  using int(\x +1)] in {0, 1} {
          (s\x  \space  0) <-[tips=false, double equal sign distance] {
            (r\x  \space  0),
            (r\xp  \space  0)
          };
          (s\x  \space  4) <-[tips=false, double equal sign distance] {
            (r\x  \space  4),
            (r\xp  \space  4)
          };
        };
        (s0 2) <-["$b_0$" below, ""{commutative diagrams/marking, name=a}] (r1 0);
        (s0 2) <-["$b_1$" right] (r1 1);
        (s0 2) <-[""{commutative diagrams/marking, name=b}] (r1 2);
        (s0 2) <-["$b_{n-1}$" right] (r1 3);
        (s0 2) <-["$b_n$" below, ""{commutative diagrams/marking, name=c}] (r1 4);
        (s0 2) <-["$f_0$" above, ""{commutative diagrams/marking, name=d}] (r0 0);
        (s0 2) <-["$f_1$" right] (r0 1);
        (s0 2) <-[""{commutative diagrams/marking, name=e}] (r0 2);
        (s0 2) <-["$f_{m-1}$" below] (r0 3);
        (s0 2) <-["$f_m$" above, ""{commutative diagrams/marking, name=f}] (r0 4);
        (s1 2) <-["$f_0$" below, ""{commutative diagrams/marking, name=g}] (r2 0);
        (s1 2) <-["$f_1$" right] (r2 1);
        (s1 2) <-[""{commutative diagrams/marking, name=h}] (r2 2);
        (s1 2) <-["$f_{n-1}$" right] (r2 3);
        (s1 2) <-["$f_n$" below, ""{commutative diagrams/marking, name=i}] (r2 4);
        (s1 2) <-["$b_0$" above, ""{commutative diagrams/marking, name=j}] (r1 0);
        (s1 2) <-["$b_1$" right] (r1 1);
        (s1 2) <-[""{commutative diagrams/marking, name=k}] (r1 2);
        (s1 2) <-["$b_{m-1}$" below] (r1 3);
        (s1 2) <-["$b_m$" above, ""{commutative diagrams/marking, name=l}] (r1 4);
      };
      \begin {scope}[on background layer]
        \path  (a) edge[commutative diagrams/Rightarrow] (s0 0);
        \path  (a) edge[commutative diagrams/Rightarrow] (r1 1);
        \path  (b) edge[commutative diagrams/Rightarrow] (r1 1);
        \path  (b) edge[commutative diagrams/Rightarrow] (r1 3);
        \path  (c) edge[commutative diagrams/Rightarrow] (r1 3);
        \path  (c) edge[commutative diagrams/Rightarrow] (s0 4);
        \path  (d) edge[commutative diagrams/Rightarrow] (s0 0);
        \path  (d) edge[commutative diagrams/Rightarrow] (r0 1);
        \path  (e) edge[commutative diagrams/Rightarrow] (r0 1);
        \path  (e) edge[commutative diagrams/Rightarrow] (r0 3);
        \path  (f) edge[commutative diagrams/Rightarrow] (r0 3);
        \path  (f) edge[commutative diagrams/Rightarrow] (s0 4);
        \path  (g) edge[commutative diagrams/Rightarrow] (s1 0);
        \path  (g) edge[commutative diagrams/Rightarrow] (r2 1);
        \path  (h) edge[commutative diagrams/Rightarrow] (r2 1);
        \path  (h) edge[commutative diagrams/Rightarrow] (r2 3);
        \path  (i) edge[commutative diagrams/Rightarrow] (r2 3);
        \path  (i) edge[commutative diagrams/Rightarrow] (s1 4);
        \path  (j) edge[commutative diagrams/Rightarrow] (s1 0);
        \path  (j) edge[commutative diagrams/Rightarrow] (r1 1);
        \path  (k) edge[commutative diagrams/Rightarrow] (r1 1);
        \path  (k) edge[commutative diagrams/Rightarrow] (r1 3);
        \path  (l) edge[commutative diagrams/Rightarrow] (r1 3);
        \path  (l) edge[commutative diagrams/Rightarrow] (s1 4);
      \end {scope}
    
      \end {tikzpicture}
    ]]></fr:resource-source></fr:resource></html:figure>


    Here, <fr:tex display="inline"><![CDATA[l_i]]></fr:tex> represents either some regular or singular level depending on whether <fr:tex display="inline"><![CDATA[i]]></fr:tex> is even or odd (the distinction here is unimportant).
  </html:p>
  <html:p>
    Now, we proceed inductively on the dimension <fr:tex display="inline"><![CDATA[n]]></fr:tex>.
    For the base case, where <fr:tex display="inline"><![CDATA[n = 1]]></fr:tex>, this <fr:link href="/coherent-inverses-4S4Y/" title="exploded diagram" uri="https://forest.nickx.hu/coherent-inverses-4S4Y/" display-uri="coherent-inverses-4S4Y" type="local">exploded diagram</fr:link> is a diagram in <fr:tex display="inline"><![CDATA[\mathcal {C}]]></fr:tex>.
    Because <fr:tex display="inline"><![CDATA[D]]></fr:tex> was <fr:link href="/coherent-inverses-ZCMQ/" title="well-formed tree-cover oplax diagram" uri="https://forest.nickx.hu/coherent-inverses-ZCMQ/" display-uri="coherent-inverses-ZCMQ" type="local">well-formed</fr:link>, so are each <fr:tex display="inline"><![CDATA[D_k]]></fr:tex>.
    <html:ul><html:li>
        contiguous segments of <fr:tex display="inline"><![CDATA[l^\prime _i]]></fr:tex> are mapped to some <fr:tex display="inline"><![CDATA[\ell ^\prime _j]]></fr:tex> for <fr:tex display="inline"><![CDATA[0 \leq  i \leq  n]]></fr:tex> and <fr:tex display="inline"><![CDATA[0 \leq  j \leq  n^\prime ]]></fr:tex> for some <fr:tex display="inline"><![CDATA[n^\prime  \leq  n]]></fr:tex>;
        <fr:link href="/coherent-inverses-ZCMQ/" title="well-formed tree-cover oplax diagram" uri="https://forest.nickx.hu/coherent-inverses-ZCMQ/" display-uri="coherent-inverses-ZCMQ" type="local">well-formedness</fr:link> in this instance allows us to deduce that the computation in the first and final rows is identical;
      </html:li>
      <html:li>
        it may be the case that <fr:tex display="inline"><![CDATA[p]]></fr:tex> and <fr:tex display="inline"><![CDATA[q]]></fr:tex> are not identities in general; however, if they are, then every morphism in the diagram is forced to be the identity as <fr:tex display="inline"><![CDATA[\mathcal {C}]]></fr:tex> is <fr:link href="/coherent-inverses-L0IM/" title="Finite direct \mathbf {Pos}-category" uri="https://forest.nickx.hu/coherent-inverses-L0IM/" display-uri="coherent-inverses-L0IM" type="local">direct</fr:link>;
      </html:li>
      <html:li>
        contiguous segments of <fr:tex display="inline"><![CDATA[l_i]]></fr:tex> are mapped to some <fr:tex display="inline"><![CDATA[\ell _j]]></fr:tex> for <fr:tex display="inline"><![CDATA[0 \leq  i \leq  m]]></fr:tex> and <fr:tex display="inline"><![CDATA[0 \leq  j \leq  m^\prime ]]></fr:tex> for some <fr:tex display="inline"><![CDATA[m^\prime  \leq  m]]></fr:tex>.
      </html:li></html:ul>
    In general, the state of <fr:link href="/coherent-inverses-HSJ2/" title="strong collapse" uri="https://forest.nickx.hu/coherent-inverses-HSJ2/" display-uri="coherent-inverses-HSJ2" type="local">strong collapse</fr:link> after this is as follows:
    
  
  <html:figure><fr:resource hash="51e386aad188e608a0a8402e5098f724"><fr:resource-content><html:img src="/51e386aad188e608a0a8402e5098f724.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[
        \usepackage{amsmath,amssymb}
  \usepackage{mathtools}
  \usepackage{stmaryrd}
  \newcommand{\set}[1]{\left\{#1\right\}}
      \usepackage {tikz}
      \usetikzlibrary {graphs,quotes,cd,backgrounds,fit}
      
  \definecolor {green}{RGB}{27,158,119}
  \definecolor {orange}{RGB}{217,95,2}
  \definecolor {purple}{RGB}{117,112,179}

      
    ]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
      \begin {tikzpicture}[
      commutative diagrams/every diagram, every node/.style={commutative diagrams/every cell}, every path/.style={commutative diagrams/.cd, every label}
    ]
        
      \path  graph[math nodes, grow right=2cm, branch down=1.5cm] {
        { [name=r2] 0 / "\ell _0" ->["$g_0$"] 1 / "\ell _1" <-["$g_1$"] 2 / "{\ldots }" ->["$g_{m-2}$"] 3 / "\ell _{m-1}" <-["$g_{m-1}$"] 4 / "\ell _m."};
        { [name=s1] 0 / "r_0" ->["$p$" above] 2 / "s_0" [xshift=2cm] <-["$q$" above] 4 / "r_1" [xshift=4cm]};
        { [name=r1] 0 / "\ell ^\prime _0" ->["$h_0$" below right] 1 / "\ell ^\prime _1" <-["$h_1$" below right] 2 / "{\ldots }" ->["$h_{n-2}$" below left] 3 / "\ell ^\prime _{n-1}" <-["$h_{n-1}$" below left] 4 / "\ell ^\prime _n"};
        { [name=s0] 0 / "r_0" ->["$p$" above] 2 / "s_0" [xshift=2cm] <-["$q$" above] 4 / "r_1" [xshift=4cm]};
        { [name=r0] 0 / "\ell _0" ->["$g_0$" below] 1 / "\ell _1" <-["$g_1$" below] 2 / "{\ldots }" ->["$g_{m-2}$" below] 3 / "\ell _{m-1}" <-["$g_{m-1}$" below] 4 / "\ell _m."};
        \foreach  \x  [evaluate=\x  as \xp  using int(\x +1)] in {0, 1} {
          (s\x  \space  0) <-[tips=false, double equal sign distance] {
            (r\x  \space  0),
            (r\xp  \space  0)
          };
          (s\x  \space  4) <-[tips=false, double equal sign distance] {
            (r\x  \space  4),
            (r\xp  \space  4)
          };
        };
        (s0 2) <-["$b_0$" below, ""{commutative diagrams/marking, name=a}] (r1 0);
        (s0 2) <-["$b_1$" right] (r1 1);
        (s0 2) <-[""{commutative diagrams/marking, name=b}] (r1 2);
        (s0 2) <-["$b_{n-1}$" right] (r1 3);
        (s0 2) <-["$b_n$" below, ""{commutative diagrams/marking, name=c}] (r1 4);
        (s0 2) <-["$f_0$" above, ""{commutative diagrams/marking, name=d}] (r0 0);
        (s0 2) <-["$f_1$" right] (r0 1);
        (s0 2) <-[""{commutative diagrams/marking, name=e}] (r0 2);
        (s0 2) <-["$f_{m-1}$" below] (r0 3);
        (s0 2) <-["$f_m$" above, ""{commutative diagrams/marking, name=f}] (r0 4);
        (s1 2) <-["$f_0$" below, ""{commutative diagrams/marking, name=g}] (r2 0);
        (s1 2) <-["$f_1$" right] (r2 1);
        (s1 2) <-[""{commutative diagrams/marking, name=h}] (r2 2);
        (s1 2) <-["$f_{n-1}$" right] (r2 3);
        (s1 2) <-["$f_n$" below, ""{commutative diagrams/marking, name=i}] (r2 4);
        (s1 2) <-["$b_0$" above, ""{commutative diagrams/marking, name=j}] (r1 0);
        (s1 2) <-["$b_1$" right] (r1 1);
        (s1 2) <-[""{commutative diagrams/marking, name=k}] (r1 2);
        (s1 2) <-["$b_{m-1}$" below] (r1 3);
        (s1 2) <-["$b_m$" above, ""{commutative diagrams/marking, name=l}] (r1 4);
      };
      \begin {scope}[on background layer]
        \path  (a) edge[commutative diagrams/Rightarrow] (s0 0);
        \path  (a) edge[commutative diagrams/Rightarrow] (r1 1);
        \path  (b) edge[commutative diagrams/Rightarrow] (r1 1);
        \path  (b) edge[commutative diagrams/Rightarrow] (r1 3);
        \path  (c) edge[commutative diagrams/Rightarrow] (r1 3);
        \path  (c) edge[commutative diagrams/Rightarrow] (s0 4);
        \path  (d) edge[commutative diagrams/Rightarrow] (s0 0);
        \path  (d) edge[commutative diagrams/Rightarrow] (r0 1);
        \path  (e) edge[commutative diagrams/Rightarrow] (r0 1);
        \path  (e) edge[commutative diagrams/Rightarrow] (r0 3);
        \path  (f) edge[commutative diagrams/Rightarrow] (r0 3);
        \path  (f) edge[commutative diagrams/Rightarrow] (s0 4);
        \path  (g) edge[commutative diagrams/Rightarrow] (s1 0);
        \path  (g) edge[commutative diagrams/Rightarrow] (r2 1);
        \path  (h) edge[commutative diagrams/Rightarrow] (r2 1);
        \path  (h) edge[commutative diagrams/Rightarrow] (r2 3);
        \path  (i) edge[commutative diagrams/Rightarrow] (r2 3);
        \path  (i) edge[commutative diagrams/Rightarrow] (s1 4);
        \path  (j) edge[commutative diagrams/Rightarrow] (s1 0);
        \path  (j) edge[commutative diagrams/Rightarrow] (r1 1);
        \path  (k) edge[commutative diagrams/Rightarrow] (r1 1);
        \path  (k) edge[commutative diagrams/Rightarrow] (r1 3);
        \path  (l) edge[commutative diagrams/Rightarrow] (r1 3);
        \path  (l) edge[commutative diagrams/Rightarrow] (s1 4);
      \end {scope}
      \foreach  \x  in {0, 1} {
        \foreach  \y  in {0, 2, 4} {
          \node [draw, rounded corners, fit={(s\x  \space  \y )}, inner sep=0pt] {};
        }
      }
      \foreach  \x  in {0, 1, 2} {
        \foreach  \y  in {0, 1, 2, 3, 4} {
          \node [draw, rounded corners, fit={(r\x  \space  \y )}, inner sep=0pt] {};
        }
      }
    
      \end {tikzpicture}
    ]]></fr:resource-source></fr:resource></html:figure>


    As before, this witnesses two <fr:link href="/coherent-inverses-W0JK/" title="oplax cocone" uri="https://forest.nickx.hu/coherent-inverses-W0JK/" display-uri="coherent-inverses-W0JK" type="local">oplax cocones</fr:link> with tip <fr:tex display="inline"><![CDATA[s_0]]></fr:tex>: one over the restriction of this diagram to the first three rows, and the other over the restriction to the bottom three rows.
    The fact that there is symmetry in the middle three rows, arising from that fragment of the diagram originating from the <fr:link href="/coherent-inverses-4S4Y/" title="exploded diagram" uri="https://forest.nickx.hu/coherent-inverses-4S4Y/" display-uri="coherent-inverses-4S4Y" type="local">exploded diagram</fr:link> of (some part of the singular decomposition of)
    <fr:tex display="block"><![CDATA[
      s \xleftarrow {b} r^\prime  \xrightarrow {b} s,
    ]]></fr:tex>
    ensures that these two <fr:link href="/coherent-inverses-W0JK/" title="oplax cocone" uri="https://forest.nickx.hu/coherent-inverses-W0JK/" display-uri="coherent-inverses-W0JK" type="local">oplax cocones</fr:link> are compatible, i.e. they agree on the common middle row.
    This means that both <fr:link href="/coherent-inverses-W0JK/" title="oplax cocone" uri="https://forest.nickx.hu/coherent-inverses-W0JK/" display-uri="coherent-inverses-W0JK" type="local">oplax cocones</fr:link> can be glued to form an <fr:link href="/coherent-inverses-W0JK/" title="oplax cocone" uri="https://forest.nickx.hu/coherent-inverses-W0JK/" display-uri="coherent-inverses-W0JK" type="local">oplax cocone</fr:link> over the entire diagram.
  </html:p>
  <html:p>
    Repeating this for each <fr:tex display="inline"><![CDATA[D_k]]></fr:tex> to obtain a sequence of <fr:link href="/coherent-inverses-W0JK/" title="oplax cocone" uri="https://forest.nickx.hu/coherent-inverses-W0JK/" display-uri="coherent-inverses-W0JK" type="local">oplax cocones</fr:link> with tip <fr:tex display="inline"><![CDATA[s^k_0]]></fr:tex> for each <fr:tex display="inline"><![CDATA[0 \leq  k < h]]></fr:tex>, we lift the result into the desired <fr:link href="/coherent-inverses-XQVM/" title="framed zigzag enriched category" uri="https://forest.nickx.hu/coherent-inverses-XQVM/" display-uri="coherent-inverses-XQVM" type="local">framed zigzag map</fr:link>.
    As before, when <fr:tex display="inline"><![CDATA[n > 1]]></fr:tex>, the remainder of the proof is given inductively.
  </html:p>
</fr:mainmatter></fr:tree>
 
</fr:mainmatter></fr:tree><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>11</fr:month><fr:day>27</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-XBVP/</fr:uri><fr:display-uri>coherent-inverses-XBVP</fr:display-uri><fr:route>/coherent-inverses-XBVP/</fr:route><fr:title text="Juxtaposition with inverse induces zigzag homotopy">Juxtaposition with inverse induces <fr:link href="/coherent-inverses-OBFZ/" title="zigzag homotopy" uri="https://forest.nickx.hu/coherent-inverses-OBFZ/" display-uri="coherent-inverses-OBFZ" type="local">zigzag homotopy</fr:link></fr:title><fr:taxon>corollary</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
  Let <fr:tex display="inline"><![CDATA[Z \in  \operatorname {Zig}^{n+1}(\mathcal {C})]]></fr:tex>, of singular height <fr:tex display="inline"><![CDATA[h]]></fr:tex>, admit some regular level <fr:tex display="inline"><![CDATA[r]]></fr:tex>, and <fr:tex display="inline"><![CDATA[r \xrightarrow {f} s \xleftarrow {b} r^\prime ]]></fr:tex> be some cospan in <fr:tex display="inline"><![CDATA[\operatorname {Zig}^{n}(\mathcal {C})]]></fr:tex>.
  Moreover, let <fr:tex display="inline"><![CDATA[Z^\prime  \in  \operatorname {Zig}^{n+1}(\mathcal {C})]]></fr:tex> be <fr:link href="/coherent-inverses-XQVM/" title="framed zigzag enriched category" uri="https://forest.nickx.hu/coherent-inverses-XQVM/" display-uri="coherent-inverses-XQVM" type="local">framed zigzag</fr:link> of singular height <fr:tex display="inline"><![CDATA[h + 2]]></fr:tex> obtained by replacing <fr:tex display="inline"><![CDATA[r]]></fr:tex> with <fr:tex display="inline"><![CDATA[r \xrightarrow {f} s \xleftarrow {b} r^\prime  \xrightarrow {b} s \xleftarrow {f} r]]></fr:tex> in <fr:tex display="inline"><![CDATA[Z]]></fr:tex>.
  Then the <fr:link href="/coherent-inverses-FHS4/" title="contraction" uri="https://forest.nickx.hu/coherent-inverses-FHS4/" display-uri="coherent-inverses-FHS4" type="local">contraction algorithm</fr:link> witnesses a <fr:link href="/coherent-inverses-OBFZ/" title="zigzag homotopy" uri="https://forest.nickx.hu/coherent-inverses-OBFZ/" display-uri="coherent-inverses-OBFZ" type="local">zigzag homotopy</fr:link> between <fr:tex display="inline"><![CDATA[Z]]></fr:tex> and <fr:tex display="inline"><![CDATA[Z^\prime ]]></fr:tex>.
</html:p>
 
   
   <fr:tree show-metadata="false" toc="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>11</fr:month><fr:day>27</fr:day></fr:date><fr:taxon>proof</fr:taxon></fr:frontmatter><fr:mainmatter>
  <html:p>
    We seek to witness a cospan in <fr:tex display="inline"><![CDATA[\operatorname {Zig}^{n+1}(\mathcal {C})]]></fr:tex>:
    <fr:tex display="block"><![CDATA[
      Z^\prime  \xrightarrow {f} Z_s \xleftarrow {b} Z.
    ]]></fr:tex>
    Obtain <fr:tex display="inline"><![CDATA[b]]></fr:tex> via <fr:link href="/coherent-inverses-61HW/" title="Embedding is a framed zigzag map" uri="https://forest.nickx.hu/coherent-inverses-61HW/" display-uri="coherent-inverses-61HW" type="local">lemma <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-61HW/" display-uri="coherent-inverses-61HW" /></fr:link>, whence <fr:tex display="inline"><![CDATA[Z_s]]></fr:tex> is the <fr:link href="/coherent-inverses-XQVM/" title="framed zigzag enriched category" uri="https://forest.nickx.hu/coherent-inverses-XQVM/" display-uri="coherent-inverses-XQVM" type="local">framed zigzag</fr:link> of singular height <fr:tex display="inline"><![CDATA[h+1]]></fr:tex> which is given by <fr:tex display="inline"><![CDATA[Z]]></fr:tex> but with an additional cospan <fr:tex display="inline"><![CDATA[r \xrightarrow {f} s \xleftarrow {f} r]]></fr:tex> in place of <fr:tex display="inline"><![CDATA[r]]></fr:tex>, and obtain <fr:tex display="inline"><![CDATA[f]]></fr:tex> by <fr:link href="/coherent-inverses-FHS4/" title="contraction" uri="https://forest.nickx.hu/coherent-inverses-FHS4/" display-uri="coherent-inverses-FHS4" type="local">contraction</fr:link> via <fr:link href="/coherent-inverses-1S8Z/" title="Juxtaposition with inverse contracts" uri="https://forest.nickx.hu/coherent-inverses-1S8Z/" display-uri="coherent-inverses-1S8Z" type="local">proposition <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-1S8Z/" display-uri="coherent-inverses-1S8Z" /></fr:link>.
  </html:p>
</fr:mainmatter></fr:tree>
 
</fr:mainmatter></fr:tree><html:p>
        It is by this mechanism that <fr:link href="/coherent-inverses-FHS4/" title="contraction" uri="https://forest.nickx.hu/coherent-inverses-FHS4/" display-uri="coherent-inverses-FHS4" type="local">contraction algorithm</fr:link> is able to construct higher-dimensional coherences for invertibility, as in <fr:link href="/coherent-inverses-O844/" title="Constructing a homotopy cap by contraction" uri="https://forest.nickx.hu/coherent-inverses-O844/" display-uri="coherent-inverses-O844" type="local">figure <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-O844/" display-uri="coherent-inverses-O844" /></fr:link>.
      </html:p><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2025</fr:year><fr:month>1</fr:month><fr:day>17</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-O844/</fr:uri><fr:display-uri>coherent-inverses-O844</fr:display-uri><fr:route>/coherent-inverses-O844/</fr:route><fr:title text="Constructing a homotopy cap by contraction">Constructing a homotopy cap by <fr:link href="/coherent-inverses-FHS4/" title="contraction" uri="https://forest.nickx.hu/coherent-inverses-FHS4/" display-uri="coherent-inverses-FHS4" type="local">contraction</fr:link></fr:title><fr:taxon>figure</fr:taxon></fr:frontmatter><fr:mainmatter><html:figure><html:figure><fr:resource hash="29e504b1fa782b435f270c62b96503c1"><fr:resource-content><html:img src="/29e504b1fa782b435f270c62b96503c1.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[
        \usepackage{amsmath,amssymb}
  \usepackage{mathtools}
  \usepackage{stmaryrd}
  \newcommand{\set}[1]{\left\{#1\right\}}
      \usepackage {tikz}
      \usetikzlibrary {positioning,cd,decorations.pathmorphing}
      
  \definecolor {green}{RGB}{27,158,119}
  \definecolor {orange}{RGB}{217,95,2}
  \definecolor {purple}{RGB}{117,112,179}

      
    ]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
      \begin {tikzpicture}[]
        
        \definecolor{generator-2-2-0-pos}{RGB}{121, 36, 27}
    \definecolor{generator-0-0-0-pos}{RGB}{41, 128, 185}
    \definecolor{generator-1-2-0-pos}{RGB}{192, 57, 43}
    \node (a) {
      \begin{tikzpicture}
      \definecolor{generator-1-0-0-pos}{RGB}{192, 57, 43}
      \definecolor{generator-2-1-0-neg}{RGB}{166, 105, 8}
      \definecolor{generator-2-1-0-pos}{RGB}{243, 156, 18}
      \definecolor{generator-0-0-0-pos}{RGB}{41, 128, 185}
      \begin{scope}
      % Background surfaces
      \fill[generator-0-0-0-pos] (0,0) -- (2,0) -- (2,2) -- (0,2) -- (0,0)(4,0) -- (6,0) -- (6,2) -- (4,2) -- (4,0);
      \fill[generator-1-0-0-pos] (2,0) -- (4,0) -- (4,2) -- (2,2) -- (2,0);
      % Wire layers
      \draw[color=generator-2-1-0-neg, line width=5pt](4,0) -- (4,2);
      \draw[color=generator-2-1-0-pos, line width=5pt](2,0) -- (2,2);
      \end{scope}
      \end{tikzpicture}
    };
    \node[right=2cm of a] (b) {
      \begin{tikzpicture}
      \definecolor{generator-1-0-0-pos}{RGB}{192, 57, 43}
      \definecolor{generator-2-1-0-neg}{RGB}{166, 105, 8}
      \definecolor{generator-2-1-0-pos}{RGB}{243, 156, 18}
      \definecolor{generator-0-0-0-pos}{RGB}{41, 128, 185}
      \definecolor{generator-2-1-1-zer}{RGB}{251, 221, 173}
      \begin{scope}
      % Background surfaces
      \fill[generator-0-0-0-pos] (0,0) -- (2,0) -- (2,1) .. controls (2,1.8) and (2.4,2) .. (3,2) .. controls (3.6,2) and (4,1.8) .. (4,1) -- (4,0) -- (6,0) -- (6,4) -- (0,4) -- (0,0);
      \fill[generator-1-0-0-pos] (2,0) -- (4,0) -- (4,1) .. controls (4,1.8) and (3.6,2) .. (3,2) .. controls (2.4,2) and (2,1.8) .. (2,1) -- (2,0);
      % Wire layers
      \draw[color=generator-2-1-0-neg, line width=5pt](4,0) -- (4,1) .. controls (4,1.8) and (3.6,2) .. (3,2);
      \draw[color=generator-2-1-0-pos, line width=5pt](2,0) -- (2,1) .. controls (2,1.8) and (2.4,2) .. (3,2);
      \end{scope}
      \fill[generator-2-1-1-zer] (3,2) circle (0.14);
      \end{tikzpicture}
    };
    \draw (a) edge[commutative diagrams/rightsquigarrow] node[above] {contraction} (b);
  
      \end {tikzpicture}
    ]]></fr:resource-source></fr:resource></html:figure>



  <html:figcaption>Constructing the 2-cell <fr:tex display="inline"><![CDATA[f^{-1} \circ  f \Rightarrow  
  \text {id}_{x}
]]></fr:tex> by <fr:link href="/coherent-inverses-FHS4/" title="contraction" uri="https://forest.nickx.hu/coherent-inverses-FHS4/" display-uri="coherent-inverses-FHS4" type="local">contraction</fr:link>.</html:figcaption></html:figure></fr:mainmatter></fr:tree></fr:mainmatter></fr:tree></fr:mainmatter></fr:tree></fr:mainmatter></fr:tree><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2023</fr:year><fr:month>12</fr:month><fr:day>3</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-implementation/</fr:uri><fr:display-uri>coherent-inverses-implementation</fr:display-uri><fr:route>/coherent-inverses-implementation/</fr:route><fr:title text="Implementation">Implementation</fr:title><fr:taxon>chapter</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
    In this chapter, we discuss some of the implementation details of <html:span tex="\homotopyio{}"><fr:link href="/homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories/" title="homotopy.io: a proof assistant for finitely-presented globular $n$-categories" uri="https://forest.nickx.hu/homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories/" display-uri="homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories" type="local"><html:code>homotopy.io</html:code></fr:link></html:span>.
    The main reference for this chapter is <html:span class="textual" uid="homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories"><fr:link href="/homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories/" title="homotopy.io: a proof assistant for finitely-presented globular $n$-categories" uri="https://forest.nickx.hu/homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories/" display-uri="homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories" type="local">[homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories]</fr:link></html:span>.
  </html:p><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2025</fr:year><fr:month>1</fr:month><fr:day>8</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-JGBQ/</fr:uri><fr:display-uri>coherent-inverses-JGBQ</fr:display-uri><fr:route>/coherent-inverses-JGBQ/</fr:route><fr:title text="homotopy.io interface"><html:span tex="\homotopyio{}"><fr:link href="/homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories/" title="homotopy.io: a proof assistant for finitely-presented globular $n$-categories" uri="https://forest.nickx.hu/homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories/" display-uri="homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories" type="local"><html:code>homotopy.io</html:code></fr:link></html:span> interface</fr:title><fr:taxon>figure</fr:taxon></fr:frontmatter><fr:mainmatter><html:figure><html:img src="/bafkrmidaazs25erwx2iyjzw3jp6hg7zdbi46yonbrjokngqvr7m5ti4w5e.png" width=" 100%" />
  <html:figcaption>The interface of <html:span tex="\homotopyio{}"><fr:link href="/homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories/" title="homotopy.io: a proof assistant for finitely-presented globular $n$-categories" uri="https://forest.nickx.hu/homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories/" display-uri="homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories" type="local"><html:code>homotopy.io</html:code></fr:link></html:span>.</html:figcaption></html:figure></fr:mainmatter></fr:tree><html:p><html:span tex="\homotopyio{}"><fr:link href="/homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories/" title="homotopy.io: a proof assistant for finitely-presented globular $n$-categories" uri="https://forest.nickx.hu/homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories/" display-uri="homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories" type="local"><html:code>homotopy.io</html:code></fr:link></html:span> is written in the Rust programming language, targeting the web browser via WebAssembly.
    This has consequences for our implementation, as we must choose an encoding that is expressible within the Rust type system, and our target platform also restricts the kind of operations we can perform and places constraints on resources.
  </html:p><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2023</fr:year><fr:month>12</fr:month><fr:day>3</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-implementation-encoding/</fr:uri><fr:display-uri>coherent-inverses-implementation-encoding</fr:display-uri><fr:route>/coherent-inverses-implementation-encoding/</fr:route><fr:title text="Encoding framed zigzags and framed zigzag maps">Encoding <fr:link href="/coherent-inverses-XQVM/" title="framed zigzag enriched category" uri="https://forest.nickx.hu/coherent-inverses-XQVM/" display-uri="coherent-inverses-XQVM" type="local">framed zigzags</fr:link> and <fr:link href="/coherent-inverses-XQVM/" title="framed zigzag enriched category" uri="https://forest.nickx.hu/coherent-inverses-XQVM/" display-uri="coherent-inverses-XQVM" type="local">framed zigzag maps</fr:link></fr:title><fr:taxon>section</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
      We will present a simplified version of the algebraic data types used in <html:span tex="\homotopyio{}"><fr:link href="/homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories/" title="homotopy.io: a proof assistant for finitely-presented globular $n$-categories" uri="https://forest.nickx.hu/homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories/" display-uri="homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories" type="local"><html:code>homotopy.io</html:code></fr:link></html:span> to encode the theory of <fr:link href="/coherent-inverses-XQVM/" title="framed zigzag enriched category" uri="https://forest.nickx.hu/coherent-inverses-XQVM/" display-uri="coherent-inverses-XQVM" type="local">framed zigzags</fr:link>, in pseudo-ML syntax.
      In code, a <fr:link href="/coherent-inverses-XQVM/" title="framed zigzag enriched category" uri="https://forest.nickx.hu/coherent-inverses-XQVM/" display-uri="coherent-inverses-XQVM" type="local">framed zigzag</fr:link> is called a <html:code>diagram</html:code>, while a <fr:link href="/coherent-inverses-XQVM/" title="framed zigzag enriched category" uri="https://forest.nickx.hu/coherent-inverses-XQVM/" display-uri="coherent-inverses-XQVM" type="local">framed zigzag map</fr:link> is called a <html:code>rewrite</html:code>.
    </html:p><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>12</fr:month><fr:day>4</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-6O54/</fr:uri><fr:display-uri>coherent-inverses-6O54</fr:display-uri><fr:route>/coherent-inverses-6O54/</fr:route><fr:title text="Data structures of homotopy.io">Data structures of <html:span tex="\homotopyio{}"><fr:link href="/homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories/" title="homotopy.io: a proof assistant for finitely-presented globular $n$-categories" uri="https://forest.nickx.hu/homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories/" display-uri="homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories" type="local"><html:code>homotopy.io</html:code></fr:link></html:span></fr:title><fr:taxon>code</fr:taxon></fr:frontmatter><fr:mainmatter><fr:resource hash="c792dacce7a39b8673f0cf6da25ebb9e"><fr:resource-content><html:img src="/c792dacce7a39b8673f0cf6da25ebb9e.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[
  \usepackage {listings}
]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
    \begin{lstlisting}[language={ML}]
type frame = int
type generator = { id: int; dimension: int; invertible: bool }

type rewrite =
	| Rewrite0Identity
	| Rewrite0 of { source: generator; target: generator; label: frame }
	| RewriteN of { cones: cone list }

and cone = {
	index: int;
	source: cospan list;
	target: cospan;
	slices: rewrite list;
}

and cospan = { forward: rewrite; backward: rewrite }

type diagram =
	| Diagram0 of generator
	| DiagramN of { source: diagram; cospans: cospan list }

type signature = (generator * diagram) map
  \end{lstlisting}
]]></fr:resource-source></fr:resource></fr:mainmatter></fr:tree><html:p>
      Here, we represent <fr:link href="/coherent-inverses-US67/" title="signature and framing" uri="https://forest.nickx.hu/coherent-inverses-US67/" display-uri="coherent-inverses-US67" type="local">framing</fr:link> with integers.
      The <html:code>generator</html:code> type is essentially a <html:em>name</html:em> equipped with some metadata, and the <html:code>signature</html:code> type, encoding an <fr:link href="/coherent-inverses-US67/" title="signature and framing" uri="https://forest.nickx.hu/coherent-inverses-US67/" display-uri="coherent-inverses-US67" type="local">algebraic signature</fr:link>, is a mapping of these names to their <html:em>canonical <html:code>diagram</html:code>s</html:em> — every <html:code>generator</html:code> has an associated <html:code>diagram</html:code>, but the converse is not necessarily true.
      We use a lightweight form of dependent typing to separate 0-dimensional <fr:link href="/coherent-inverses-XQVM/" title="framed zigzag enriched category" uri="https://forest.nickx.hu/coherent-inverses-XQVM/" display-uri="coherent-inverses-XQVM" type="local">framed zigzags</fr:link> and <fr:link href="/coherent-inverses-XQVM/" title="framed zigzag enriched category" uri="https://forest.nickx.hu/coherent-inverses-XQVM/" display-uri="coherent-inverses-XQVM" type="local">framed zigzag maps</fr:link> from <fr:tex display="inline"><![CDATA[n]]></fr:tex>-dimensional ones (where <fr:tex display="inline"><![CDATA[n > 0]]></fr:tex>).
      Although not explicit, each <html:code>DiagramN</html:code> and <html:code>RewriteN</html:code> has an associated dimension <fr:tex display="inline"><![CDATA[n > 0]]></fr:tex>, and should maintain the invariant that its component pieces are made up of only <html:code>Diagram0</html:code> and <html:code>Rewrite0</html:code> if <fr:tex display="inline"><![CDATA[n = 1]]></fr:tex>, or <html:code>DiagramN</html:code> and <html:code>RewriteN</html:code> all of associated dimension <fr:tex display="inline"><![CDATA[n - 1]]></fr:tex> otherwise.
    </html:p><html:p>
      This choice of encoding has the following limitation: there are unenforced invariants that allow for valid terms of the <html:code>diagram</html:code> type and do not correspond to an admissible <fr:tex display="inline"><![CDATA[n]]></fr:tex>-cell of the free higher category generated by any <fr:link href="/coherent-inverses-US67/" title="signature and framing" uri="https://forest.nickx.hu/coherent-inverses-US67/" display-uri="coherent-inverses-US67" type="local">signature</fr:link>.
      For example, a <html:code>Diagram0</html:code> is supposed to represent a 0-cell, but when its <html:code>generator</html:code> has a <html:code>dimension</html:code> field not set to 0 this will not be the case.
      As is always the case with programming languages without proper dependent typing, the responsibility for maintaining these invariants falls on the programmer.
    </html:p><html:p>
      The other non-trivial feature of this encoding is the way <fr:link href="/coherent-inverses-XQVM/" title="framed zigzag enriched category" uri="https://forest.nickx.hu/coherent-inverses-XQVM/" display-uri="coherent-inverses-XQVM" type="local">framed zigzags</fr:link> and <fr:link href="/coherent-inverses-XQVM/" title="framed zigzag enriched category" uri="https://forest.nickx.hu/coherent-inverses-XQVM/" display-uri="coherent-inverses-XQVM" type="local">framed zigzag maps</fr:link> are encoded <html:em>sparsely</html:em>.
    </html:p><html:p>
      Suppose that <fr:tex display="inline"><![CDATA[Z \in  \operatorname {Zig}^{n+1}(\mathcal {C})]]></fr:tex>.
      <fr:tex display="inline"><![CDATA[Z]]></fr:tex> is some iterated cospan in <fr:tex display="inline"><![CDATA[\operatorname {Zig}^{n}(\mathcal {C})]]></fr:tex> of singular height <fr:tex display="inline"><![CDATA[k]]></fr:tex>; a compact way of representing this is to store only the distinguished <html:code>source</html:code> object of <fr:tex display="inline"><![CDATA[\operatorname {Zig}^{n}(\mathcal {C})]]></fr:tex>, along with all the morphisms of <fr:tex display="inline"><![CDATA[\operatorname {Zig}^{n}(\mathcal {C})]]></fr:tex> within this iterated cospan; i.e. we store the coloured parts of
      <fr:tex display="block"><![CDATA[
        Z \coloneqq  \textcolor {orange}{r_0} \textcolor {orange}{\xrightarrow {f_0}} \textcolor {gray}{s_0} \textcolor {orange}{\xleftarrow {b_0}} \textcolor {gray}{r_1} \textcolor {orange}{\xrightarrow {f_1}} \textcolor {gray}{\ldots } \textcolor {orange}{\xleftarrow {b_k}} \textcolor {gray}{r_{k+1}},
      ]]></fr:tex>
      from which the rest of the data can be reconstructed by auxiliary procedures that allow for <html:code>diagram</html:code>s to be rewritten both forwards and backwards along <html:code>rewrite</html:code>s of the appropriate associated dimension.
      Note that the singular height of a (<fr:tex display="inline"><![CDATA[n]]></fr:tex>-dimensional, where <fr:tex display="inline"><![CDATA[n >0]]></fr:tex>) <html:code>diagram</html:code> is given by the number of <html:code>cospans</html:code> that it contains.
      In this encoding, we think of the <html:code>rewrite</html:code>s (which encode <fr:link href="/coherent-inverses-XQVM/" title="framed zigzag enriched category" uri="https://forest.nickx.hu/coherent-inverses-XQVM/" display-uri="coherent-inverses-XQVM" type="local">framed zigzag maps</fr:link>) as the <html:em>differences</html:em> between adjacent regular/singular slice in the <html:code>diagram</html:code>, where each set of differences is given by a sequence of contiguously acting differences, which we call <html:code>cone</html:code>s.
    </html:p><html:p>
      To expand on this, for <fr:link href="/coherent-inverses-XQVM/" title="framed zigzag enriched category" uri="https://forest.nickx.hu/coherent-inverses-XQVM/" display-uri="coherent-inverses-XQVM" type="local">framed zigzag maps</fr:link> in <fr:tex display="inline"><![CDATA[\operatorname {Zig}^{n+1}(\mathcal {C})]]></fr:tex>, rather than storing their entire underlying monotone map, along with the accompanying morphisms in <fr:tex display="inline"><![CDATA[\operatorname {Zig}^{n}(\mathcal {C})]]></fr:tex>, we only store the parts that deviate from the identity (locally) in the form of <html:code>cone</html:code>s.
      This is analogous to how large numerical matrices are stored in a sparse format, where only the non-zero entries are stored.
      In practice, this makes for significant savings in space efficiency, because most adjacent heights in <fr:tex display="inline"><![CDATA[n]]></fr:tex>-dimensional string diagrams only differ in small parts.
    </html:p><html:p>
      The following example demonstrates this encoding of a <fr:link href="/coherent-inverses-XQVM/" title="framed zigzag enriched category" uri="https://forest.nickx.hu/coherent-inverses-XQVM/" display-uri="coherent-inverses-XQVM" type="local">framed zigzag</fr:link> in <fr:tex display="inline"><![CDATA[\operatorname {Zig}^{2}(\mathcal {C})]]></fr:tex> of singular height 1.
    </html:p><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>12</fr:month><fr:day>4</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-2C1T/</fr:uri><fr:display-uri>coherent-inverses-2C1T</fr:display-uri><fr:route>/coherent-inverses-2C1T/</fr:route><fr:title text="framed zigzag maps in cones"><fr:link href="/coherent-inverses-XQVM/" title="framed zigzag enriched category" uri="https://forest.nickx.hu/coherent-inverses-XQVM/" display-uri="coherent-inverses-XQVM" type="local">framed zigzag maps</fr:link> in cones</fr:title><fr:taxon>example</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
  Consider the following 2D string diagram:
  
  
  
  <html:figure><fr:resource hash="bbe798f6bb83baa79042ff033607e446"><fr:resource-content><html:img src="/bbe798f6bb83baa79042ff033607e446.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[
        \usepackage{amsmath,amssymb}
  \usepackage{mathtools}
  \usepackage{stmaryrd}
  \newcommand{\set}[1]{\left\{#1\right\}}
      \usepackage {tikz}
      \usetikzlibrary {}
      
  \definecolor {green}{RGB}{27,158,119}
  \definecolor {orange}{RGB}{217,95,2}
  \definecolor {purple}{RGB}{117,112,179}

      
    ]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
      \begin {tikzpicture}[]
        
        \definecolor{generator-0-0-0-pos}{RGB}{41, 128, 185}
    \definecolor{generator-1-1-0-pos}{RGB}{192, 57, 43}
    \definecolor{generator-2-2-0-pos}{RGB}{243, 156, 18}
    \begin{scope}
      % Background surfaces
      \fill[generator-0-0-0-pos] (0,0) -- (8,0) -- (8,4) -- (0,4) -- (0,0);
      % Wire layers
      \draw[color=generator-1-1-0-pos, line width=5pt](2,0) -- (2,4)(4,0) -- (4,1) .. controls (4,1.8) and (4.4,2) .. (5,2) -- (5,4)(6,0) -- (6,1) .. controls (6,1.8) and (5.6,2) .. (5,2);
    \end{scope}
    \fill[generator-2-2-0-pos] (5,2) circle (0.14);
    % cones
    \draw[fill=yellow, opacity=0.2] (1.5,0) -- (2,2) -- (2.5,0) -- cycle node [opacity=1, midway, below] {$A$};
    \draw[fill=yellow, opacity=0.2] (1.5,4) -- (2,2) -- (2.5,4) -- cycle node [opacity=1, midway, above] {$B$};
    \draw[fill=yellow, opacity=0.2] (3.5,0) -- (5,2) -- (6.5,0) -- cycle node [opacity=1, midway, below] {$C$};
    \draw[fill=yellow, opacity=0.2] (4.5,4) -- (5,2) -- (5.5,4) -- cycle node [opacity=1, midway, above] {$D$};
  
      \end {tikzpicture}
    ]]></fr:resource-source></fr:resource></html:figure></html:p><html:p>
  This <html:code>diagram</html:code> is made up of a <html:code>DiagramN</html:code> whose <html:code>source</html:code> is a <html:code>DiagramN</html:code> encoding the bottom (horizontal) slice 1-dimensional string diagram, and whose <html:code>cospans</html:code> are given by the singleton list with a sole <html:code>cospan</html:code> whose <html:code>forward</html:code> field comprises a <html:code>RewriteN</html:code> whose <html:code>cones</html:code> are given by <fr:tex display="inline"><![CDATA[A]]></fr:tex> and <fr:tex display="inline"><![CDATA[C]]></fr:tex>, and <html:code>backward</html:code> field comprises a <html:code>RewriteN</html:code> whose <html:code>cones</html:code> are given by <fr:tex display="inline"><![CDATA[B]]></fr:tex> and <fr:tex display="inline"><![CDATA[D]]></fr:tex>.
</html:p><html:p><fr:tex display="inline"><![CDATA[A]]></fr:tex> and <fr:tex display="inline"><![CDATA[B]]></fr:tex> are <html:em>identity cones</html:em>; the fragment of the <fr:link href="/coherent-inverses-XQVM/" title="framed zigzag enriched category" uri="https://forest.nickx.hu/coherent-inverses-XQVM/" display-uri="coherent-inverses-XQVM" type="local">framed zigzag map</fr:link> local to where they act is the identity <fr:link href="/coherent-inverses-XQVM/" title="framed zigzag enriched category" uri="https://forest.nickx.hu/coherent-inverses-XQVM/" display-uri="coherent-inverses-XQVM" type="local">framed zigzag map</fr:link>.
  This is why the <html:code>cone</html:code> type has an <html:code>index</html:code> field: we omit <fr:tex display="inline"><![CDATA[A]]></fr:tex> and <fr:tex display="inline"><![CDATA[B]]></fr:tex> explicitly from the <html:code>cones</html:code> list in their containing <html:code>RewriteN</html:code>, but the cones <fr:tex display="inline"><![CDATA[C]]></fr:tex> and <fr:tex display="inline"><![CDATA[D]]></fr:tex> will have <html:code>index</html:code> 1, meaning that there is one identity cone to their left.
</html:p><html:p>
  The following diagram shows the bottom half of the figure above more explicitly, as a <fr:link href="/coherent-inverses-XQVM/" title="framed zigzag enriched category" uri="https://forest.nickx.hu/coherent-inverses-XQVM/" display-uri="coherent-inverses-XQVM" type="local">framed zigzag map</fr:link>:
  
  
  
  <html:figure><fr:resource hash="4201ac106ae7d45d0e17dca99980e7fe"><fr:resource-content><html:img src="/4201ac106ae7d45d0e17dca99980e7fe.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[
       \usepackage{amsmath,amssymb}
  \usepackage{mathtools}
  \usepackage{stmaryrd}
  \newcommand{\set}[1]{\left\{#1\right\}}
     \usepackage {tikz}
     \usetikzlibrary {cd}
     \usetikzlibrary {}
     
  \definecolor {green}{RGB}{27,158,119}
  \definecolor {orange}{RGB}{217,95,2}
  \definecolor {purple}{RGB}{117,112,179}

     
    ]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
      \begin {tikzcd}[]
    {r_0} \ar [r, "f_0"] &
    {s_0} &
    {r_1} \ar [l, "b_0"'] \ar [rr, "f^\prime "] &
    {} &
    {s_1^\prime } &
    {} &
    {r_3} \ar [ll, "b^\prime "'] \\
    {r_0} \ar [r, "f_0"'] \ar [u, dashed] &
    {s_0} \ar [u, dashed] &
    {r_1} \ar [l, "b_0"] \ar [r, "f_1"'] \ar [u, dashed] &
    {s_1} \ar [ur, "\ell _1"] &
    {r_2} \ar [l, "b_1"] \ar [r, "f_2"'] &
    {s_2} \ar [ul, "\ell _2"'] &
    {r_3.} \ar [l, "b_2"] \ar [u, dashed]
  \end {tikzcd}
    ]]></fr:resource-source></fr:resource></html:figure>



  In some sense, we can see a <fr:link href="/coherent-inverses-XQVM/" title="framed zigzag enriched category" uri="https://forest.nickx.hu/coherent-inverses-XQVM/" display-uri="coherent-inverses-XQVM" type="local">framed zigzag map</fr:link> <fr:tex display="inline"><![CDATA[Z \to  Z^\prime ]]></fr:tex> as a modification of the sequence of cospans in <fr:tex display="inline"><![CDATA[Z]]></fr:tex> by replacement of subsequences by individual cospans of <fr:tex display="inline"><![CDATA[Z^\prime ]]></fr:tex>.
  Each such modification is a <html:code>cone</html:code>, and here the sequence of cospans <fr:tex display="inline"><![CDATA[[(f_1, b_1), (f_2, b_2)]]]></fr:tex> is replaced by <fr:tex display="inline"><![CDATA[(f^\prime , b^\prime )]]></fr:tex>.
</html:p></fr:mainmatter></fr:tree><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>12</fr:month><fr:day>4</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-HV2T/</fr:uri><fr:display-uri>coherent-inverses-HV2T</fr:display-uri><fr:route>/coherent-inverses-HV2T/</fr:route><fr:title text="Identity n-rewrites">Identity <fr:tex display="inline"><![CDATA[n]]></fr:tex>-rewrites</fr:title><fr:taxon>remark</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
  The encoding of an identity <fr:link href="/coherent-inverses-XQVM/" title="framed zigzag enriched category" uri="https://forest.nickx.hu/coherent-inverses-XQVM/" display-uri="coherent-inverses-XQVM" type="local">framed zigzag map</fr:link> in <fr:tex display="inline"><![CDATA[\operatorname {Zig}^{n+1}(\mathcal {C})]]></fr:tex> is given by <html:code>RewriteN</html:code> with the empty list of <html:code>cones</html:code>.
</html:p></fr:mainmatter></fr:tree><html:p>
      Much of the technical complexity of the implementation of <html:span tex="\homotopyio{}"><fr:link href="/homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories/" title="homotopy.io: a proof assistant for finitely-presented globular $n$-categories" uri="https://forest.nickx.hu/homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories/" display-uri="homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories" type="local"><html:code>homotopy.io</html:code></fr:link></html:span> is about phrasing our procedures with respect to this sparse <html:code>cone</html:code> representation and maintaining the associated invariants.
    </html:p></fr:mainmatter></fr:tree><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2023</fr:year><fr:month>12</fr:month><fr:day>3</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-implementation-memoisation/</fr:uri><fr:display-uri>coherent-inverses-implementation-memoisation</fr:display-uri><fr:route>/coherent-inverses-implementation-memoisation/</fr:route><fr:title text="Memoisation">Memoisation</fr:title><fr:taxon>section</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
      The data structures outlined in <fr:link href="/coherent-inverses-6O54/" title="Data structures of homotopy.io" uri="https://forest.nickx.hu/coherent-inverses-6O54/" display-uri="coherent-inverses-6O54" type="local">code <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-6O54/" display-uri="coherent-inverses-6O54" /></fr:link> are <html:em>immutable</html:em>.
      Operations that would modify an object instead create a new instance of the object with the desired modifications.
    </html:p><html:p>
      We do this so that the technique of <fr:link href="/type-safe-modular-hash-consing/" title="Type-safe modular hash-consing" uri="https://forest.nickx.hu/type-safe-modular-hash-consing/" display-uri="type-safe-modular-hash-consing" type="local"><html:em>hash consing</html:em></fr:link> can be applied: we maintain a global hash table that tracks all the objects that are resident in memory, and then whenever a new object is created we first check against this global table to reuse an existing allocation if possible (the soundness of this technique is predicated on the immutability of our data structures).
      Not only does this save memory, but an additional effect is that pointer equality becomes sufficient to determine structural equality, which makes equality comparisons of <html:code>diagram</html:code>s and <html:code>rewrite</html:code>s complete in <fr:tex display="inline"><![CDATA[O(1)]]></fr:tex> time.
      As an extension, due to the highly mutually recursive relationship between <html:code>diagram</html:code>s and <html:code>rewrite</html:code>s, we also cache their hash values to avoid deep traversals.
    </html:p><html:p>
      Empirically, this technique has been effective at reducing memory usage and improving performance; even with our sparse encoding, large high-dimensional diagrams are still highly redundant in practice.
    </html:p><html:p>
      The key algorithms of <html:span tex="\homotopyio{}"><fr:link href="/homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories/" title="homotopy.io: a proof assistant for finitely-presented globular $n$-categories" uri="https://forest.nickx.hu/homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories/" display-uri="homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories" type="local"><html:code>homotopy.io</html:code></fr:link></html:span> (<fr:link href="/coherent-inverses-collapse/" title="Coherent inverses in higher-categorical string diagrams › Collapsing framed zigzags" uri="https://forest.nickx.hu/coherent-inverses-collapse/" display-uri="coherent-inverses-collapse" type="local">chapter <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-collapse/" display-uri="coherent-inverses-collapse" /></fr:link>) are largely recursive over the structure of <html:code>diagram</html:code>s and <html:code>rewrite</html:code>s, performing many identical recursive calls on logically equal substructures.
      We can exploit this by using memoisation to cache the results of these recursive calls and avoid redundant computation.
      Due to hash consing, we have very fast equality checking, so lookups in the memoisation table are comparatively cheap.
    </html:p><html:p>
      The global hash consing table counts references to all the live objects, and when an object is no longer needed (when its reference count is zero), it can be safely removed from the table.
      However, the nature of our algorithms will cause the same <html:code>diagram</html:code>s and <html:code>rewrite</html:code>s to be created and destroyed many times over the course of a computation, so we deliberately avoid an eager approach to garbage collection to avoid memory churn, only performing garbage collection when the program is suitably idle.
    </html:p><html:p>
      This technique also enables the serialisation/deserialisation of <html:code>diagram</html:code>s and <html:code>rewrite</html:code>s, which otherwise, being mutually recursive, forms a cyclic data structure.
      We use this to save and load data in a binary format via <fr:link href="/messagepack/" title="MessagePack" uri="https://forest.nickx.hu/messagepack/" display-uri="messagepack" type="local">MessagePack</fr:link>, allowing for a user to persist their work across sessions or share it with others.
      On deserialisation, we sanitise the input data via our <fr:link href="/coherent-inverses-4D20/" title="typechecking" uri="https://forest.nickx.hu/coherent-inverses-4D20/" display-uri="coherent-inverses-4D20" type="local">typechecking algorithm</fr:link> to ensure that it was mathematically valid.
    </html:p><html:p>
      This mechanism is extended by an arXiv-style server implementation, with which the proof assistant communicates as a client, where users can upload their work (called a <html:em>project</html:em>) to a central server and share it by a link, such as <fr:link href="https://beta.homotopy.io/p/2402.00001" type="external">https://beta.homotopy.io/p/2402.00001</fr:link> (workspace for the associator 3-diagram).
      <html:em>Publishing</html:em> a project versions and timestamps it, making it read-only, producing a unique identifier like an arXiv slug that can be used to access the project at any time.
    </html:p></fr:mainmatter></fr:tree><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2023</fr:year><fr:month>12</fr:month><fr:day>3</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-implementation-rendering/</fr:uri><fr:display-uri>coherent-inverses-implementation-rendering</fr:display-uri><fr:route>/coherent-inverses-implementation-rendering/</fr:route><fr:title text="Rendering string diagrams">Rendering string diagrams</fr:title><fr:taxon>section</fr:taxon></fr:frontmatter><fr:mainmatter><html:p><html:span tex="\homotopyio{}"><fr:link href="/homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories/" title="homotopy.io: a proof assistant for finitely-presented globular $n$-categories" uri="https://forest.nickx.hu/homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories/" display-uri="homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories" type="local"><html:code>homotopy.io</html:code></fr:link></html:span>, as a <html:em>graphical</html:em> proof assistant for <fr:tex display="inline"><![CDATA[n]]></fr:tex>-dimensional string diagrams, must provide a way to render these diagrams according to standard conventions in the field.
      That is, a 2D string diagram should be recognisable as such, with the 2-morphisms represented by points, the 1-morphisms by lines, and the 0-morphisms by dots.
      To accomplish this, we have procedures that take the combinatorial data, presented as <html:code>diagram</html:code>s and <html:code>rewrite</html:code>s, and render them graphically as SVG images (for 2D viewing) or via WebGL surfaces/animations (for 3D/4D viewing) with a camera control mechanism.
    </html:p><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2025</fr:year><fr:month>1</fr:month><fr:day>8</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-QR5Z/</fr:uri><fr:display-uri>coherent-inverses-QR5Z</fr:display-uri><fr:route>/coherent-inverses-QR5Z/</fr:route><fr:title text="Monoid 2D string diagram">Monoid 2D string diagram</fr:title><fr:taxon>figure</fr:taxon></fr:frontmatter><fr:mainmatter><html:figure><fr:resource hash="19dccaa33a6928053773e82763f4ba85"><fr:resource-content><html:img src="/19dccaa33a6928053773e82763f4ba85.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[
    \usepackage {adjustbox}
    \usepackage {amsmath,amssymb}
    \usepackage {tikz}
    \usetikzlibrary {cd}
  ]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
    $
        \begin{adjustbox}{max width=0.3\textwidth}
    \begin{tikzpicture}
    \definecolor{generator-0-0-0-pos}{RGB}{41, 128, 185}
    \definecolor{generator-1-1-0-pos}{RGB}{192, 57, 43}
    \definecolor{generator-2-2-0-pos}{RGB}{243, 156, 18}
    \begin{scope}
    % Background surfaces
    \fill[generator-0-0-0-pos] (0,0) -- (6,0) -- (6,4) -- (0,4) -- (0,0);
    % Wire layers
    \draw[color=generator-1-1-0-pos, line width=5pt](2,0) -- (2,1) .. controls (2,1.8) and (2.4,2) .. (3,2) -- (3,4)(4,0) -- (4,1) .. controls (4,1.8) and (3.6,2) .. (3,2);
    \end{scope}
    \fill[generator-2-2-0-pos] (3,2) circle (0.14);
    \end{tikzpicture}
    \end{adjustbox}
  $
  ]]></fr:resource-source></fr:resource>
  <html:figcaption>2D string diagram of a monoid.</html:figcaption></html:figure></fr:mainmatter></fr:tree><html:p>
      We sketch this process, deferring a more detailed explanation to <html:span class="textual" tid="§ 6.2" uid="homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories"><fr:link href="/homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories/" title="homotopy.io: a proof assistant for finitely-presented globular $n$-categories" uri="https://forest.nickx.hu/homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories/" display-uri="homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories" type="local">[§ 6.2, homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories]</fr:link></html:span>.
      The theory of the layout algorithm, which is interesting in its own right from a categorical perspective, can be found in <html:span class="textual" uid="a-layout-algorithm-for-higher-dimensional-string-diagrams"><fr:link href="/a-layout-algorithm-for-higher-dimensional-string-diagrams/" title="A layout algorithm for higher-dimensional string diagrams" uri="https://forest.nickx.hu/a-layout-algorithm-for-higher-dimensional-string-diagrams/" display-uri="a-layout-algorithm-for-higher-dimensional-string-diagrams" type="local">[a-layout-algorithm-for-higher-dimensional-string-diagrams]</fr:link></html:span> and <html:span class="textual" uid="a-computational-approach-to-higher-categories"><fr:link href="/a-computational-approach-to-higher-categories/" title="A computational approach to higher categories" uri="https://forest.nickx.hu/a-computational-approach-to-higher-categories/" display-uri="a-computational-approach-to-higher-categories" type="local">[a-computational-approach-to-higher-categories]</fr:link></html:span>.
    </html:p><html:p>
      The issue is that geometry in dimensions higher than two is difficult to visualise directly when the expected mode of interaction is a screen.
      We use <html:em>projections</html:em> to overcome this: <fr:tex display="inline"><![CDATA[(n+1)]]></fr:tex>-dimensional space can be projected down to <fr:tex display="inline"><![CDATA[n]]></fr:tex>-dimensional space, like how physically 3D objects cast 2D shadows.
      For 3D, we can render the 3D surface diagram as 3D geometry within a virtual 3D space, and then present a viewport of a camera within this space to the user.
      The camera sees a projection of the 3D space onto a 2D plane, which can be displayed on a screen.
      By giving the user control over the camera (e.g. by allowing them to pan and rotate the camera around the 3D space), we can give the user a sense of the 3D structure of the diagram.
      This is the same principle as how 3D games are rendered on a 2D screen.
      Lighting and shading, along with perspective projection, are used to create a more realistic 3D effect.
    </html:p><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2025</fr:year><fr:month>1</fr:month><fr:day>8</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-YQ56/</fr:uri><fr:display-uri>coherent-inverses-YQ56</fr:display-uri><fr:route>/coherent-inverses-YQ56/</fr:route><fr:title text="Monoid associator 3D surface diagram">Monoid associator 3D surface diagram</fr:title><fr:taxon>figure</fr:taxon></fr:frontmatter><fr:mainmatter><html:figure><html:div>
    <html:img src="/bafkrmihmkli2e2nsskwofs57t72ggsqqfyqvbsumozbe6lmtunt2utnawm.png" width=" 20%" />
    <html:img src="/bafkrmiamr6v377ttbrvfgszll4qogauzyeyfbjguiuq3xaa4kiwgocrtza.png" width=" 20%" />
    <html:img src="/bafkrmiccsmsa3c4whewuvv7gqwn2dzjfqkghgupcom6jfijnpnlblgz6v4.png" width=" 20%" />
    <html:img src="/bafkrmidh2wsip2neupj7pi5a27qmuvuiuuk2weyhfdx5tghwkck2fzbvyq.png" width=" 20%" />
  </html:div>
  <html:figcaption>Monoid associator 3D surface diagram, rendered with camera angle <fr:tex display="inline"><![CDATA[\varphi ]]></fr:tex> at 0°, 30°, 60°, and 90°.</html:figcaption></html:figure></fr:mainmatter></fr:tree><html:p>
      Similarly to 2D string diagrams, cells with dimension 3 in the projected 3D space (codimension 0) are rendered as points, cells with dimension 2 (codimension 1) are rendered as wires, and cells with dimension 1 (codimension 2) are rendered as surfaces.
      Each delimited volume in the 3D space also notionally corresponds to a cell with dimension 0 (codimension 3), but these are deliberately elided by our renderer for clarity.
    </html:p><html:p>
      For 4D geometry, we can represent the additional dimension as time, by constructing an animation of 3D projections of the 4D geometry evolving over time (also equipped with camera control as above).
      The smoothness of the animation, achieved via subdivision, is crucial to communicating the structure of the 4D diagram.
    </html:p><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2025</fr:year><fr:month>1</fr:month><fr:day>8</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-BMQ3/</fr:uri><fr:display-uri>coherent-inverses-BMQ3</fr:display-uri><fr:route>/coherent-inverses-BMQ3/</fr:route><fr:title text="Swallowtail coherence 4D animated surface diagram">Swallowtail coherence 4D animated surface diagram</fr:title><fr:taxon>figure</fr:taxon></fr:frontmatter><fr:mainmatter><html:figure><html:div>
    <html:img src="/bafkrmihtddbg2yebbqfriv3ua4eqlq2mpgcvfehgpk57dgfhzby2izdqey.png" width=" 30%" />
    <html:img src="/bafkrmic4pooe7q6zq7roymmwjfy7ai4yln554qmmmz7mz6pytcq46gfdjm.png" width=" 30%" />
    <html:img src="/bafkrmidcfryrm4wokttow5su35h5reluv67k5lck72avbjahtruiqacxea.png" width=" 30%" />
    <html:img src="/bafkrmihkqqr3gayihqv6d6bcv3mh3xkh3k2f5tqr3mgrxcfkcpqle4oizm.png" width=" 30%" />
    <html:img src="/bafkrmig7cf4lnbc6yu4ft2eplw722shmcj3j3xowynh53luczbdsus67cu.png" width=" 30%" />
  </html:div>
  <html:figcaption><fr:link href="/coherent-inverses-applications-catastrophes-swallowtail/" title="Coherent inverses in higher-categorical string diagrams › Applications › Higher-dimensional catastrophes arising from a dualisable 1-morphism › Swallowtail coherence" uri="https://forest.nickx.hu/coherent-inverses-applications-catastrophes-swallowtail/" display-uri="coherent-inverses-applications-catastrophes-swallowtail" type="local">Swallowtail coherence</fr:link> 4D diagram, rendered at time <fr:tex display="inline"><![CDATA[t = 0, 0.25, 0.5, 0.75, 1]]></fr:tex>.</html:figcaption></html:figure></fr:mainmatter></fr:tree><html:p>
      This process can also be performed to present a 3D diagram as an animation of 2D projections by interpreting the Z-axis as time.
      Via the smooth subdivision, this obtains a continuous deformation that interpolates between regular and singular slices, which alludes to why the tool is called <html:em>homotopy</html:em>.io.
    </html:p><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2025</fr:year><fr:month>1</fr:month><fr:day>8</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-4I1C/</fr:uri><fr:display-uri>coherent-inverses-4I1C</fr:display-uri><fr:route>/coherent-inverses-4I1C/</fr:route><fr:title text="Monoid associator 3D animated string diagram">Monoid associator 3D animated string diagram</fr:title><fr:taxon>figure</fr:taxon></fr:frontmatter><fr:mainmatter><html:figure><html:div>
    <html:img src="/bafkrmigppixjifwvsgv6u4h4fgulq5azn6lmyrc3gyetgmed23lo5ihmwq.png" width=" 30%" />
    <html:img src="/bafkrmib32q76qce73srrcewhqctsdsxpblg4t2lbkcilwadwss2gefhayi.png" width=" 30%" />
    <html:img src="/bafkrmiclibzjo5zhzwkfllqx24t3oc52qg6hmzrj23xkxcofrq3umahjju.png" width=" 30%" />
    <html:img src="/bafkrmiat464gvzqp7ygwfmd5izju36ot3fs25qy5pozhgkzmqw2fxos52q.png" width=" 30%" />
    <html:img src="/bafkrmiffq4342ffpmzbirpojgln7i3ynpbguxijhci65adqilbow47cshy.png" width=" 30%" />
  </html:div>
  <html:figcaption>The associator 3D diagram, rendered as 2D diagrams at time <fr:tex display="inline"><![CDATA[t = 0, 0.25, 0.5, 0.75, 1]]></fr:tex>.</html:figcaption></html:figure></fr:mainmatter></fr:tree><html:p>
      Our renderer has many different output formats, including SVG and TikZ, which is used heavily to generate the high quality string diagram pictures in this thesis and other papers.
      In 3D, we can also output to the STL file format for 3D printing.
    </html:p><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2025</fr:year><fr:month>1</fr:month><fr:day>8</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-0MD5/</fr:uri><fr:display-uri>coherent-inverses-0MD5</fr:display-uri><fr:route>/coherent-inverses-0MD5/</fr:route><fr:title text="Monoid associator 3D print of surface diagram">Monoid associator 3D print of surface diagram</fr:title><fr:taxon>figure</fr:taxon></fr:frontmatter><fr:mainmatter><html:figure><html:img src="/bafkrmidkh5r7xj3zsyvrukvhomnn6s3a7h2f22f3kjllc2r5b6im55wqrm.jpeg" height="200px" />
  <html:figcaption>3D print of the associator surface diagram.</html:figcaption></html:figure></fr:mainmatter></fr:tree><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2023</fr:year><fr:month>12</fr:month><fr:day>3</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-implementation-morse-projection/</fr:uri><fr:display-uri>coherent-inverses-implementation-morse-projection</fr:display-uri><fr:route>/coherent-inverses-implementation-morse-projection/</fr:route><fr:title text="The ‘Morse projection’ of n-dimensional string diagrams">The ‘Morse projection’ of <fr:tex display="inline"><![CDATA[n]]></fr:tex>-dimensional string diagrams</fr:title><fr:taxon>section</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
        We have discussed how to render <fr:tex display="inline"><![CDATA[n]]></fr:tex>-dimensional string diagrams in 2D, 3D, and 4D for when <fr:tex display="inline"><![CDATA[n \leq  4]]></fr:tex>, but in general we would like our tool to work in arbitrary dimensions.
        To achieve this, we use a different notion of projection to (lossfully) reduce the dimension of the diagram, which we call the ‘Morse projection’.
      </html:p><html:p>
        This projection operation is built in to the structure of <fr:link href="/coherent-inverses-XQVM/" title="framed zigzag enriched category" uri="https://forest.nickx.hu/coherent-inverses-XQVM/" display-uri="coherent-inverses-XQVM" type="local">framed zigzags</fr:link>, in that objects <fr:tex display="inline"><![CDATA[Z \in  \operatorname {Zig}^{n}(\mathcal {C})]]></fr:tex> in an iterated <fr:link href="/coherent-inverses-XQVM/" title="framed zigzag enriched category" uri="https://forest.nickx.hu/coherent-inverses-XQVM/" display-uri="coherent-inverses-XQVM" type="local">framed zigzag enriched category</fr:link> come with a natural sequence of diagrams, which we interpret geometrically, via their <fr:link href="/coherent-inverses-OC2T/" title="explosion bundle" uri="https://forest.nickx.hu/coherent-inverses-OC2T/" display-uri="coherent-inverses-OC2T" type="local">explosion bundle</fr:link>.
        In some sense, <fr:link href="/coherent-inverses-4S4Y/" title="exploded diagram" uri="https://forest.nickx.hu/coherent-inverses-4S4Y/" display-uri="coherent-inverses-4S4Y" type="local">explosion</fr:link> is a dual operation to projection.
      </html:p><html:p>
        Assume that <fr:tex display="inline"><![CDATA[n \geq  2]]></fr:tex>.
        In the first level of <fr:link href="/coherent-inverses-4S4Y/" title="exploded diagram" uri="https://forest.nickx.hu/coherent-inverses-4S4Y/" display-uri="coherent-inverses-4S4Y" type="local">explosion</fr:link>, we obtain the iterated cospan of <fr:tex display="inline"><![CDATA[\operatorname {Zig}^{n-1}(\mathcal {C})]]></fr:tex> that presents <fr:tex display="inline"><![CDATA[Z]]></fr:tex>, which we can draw vertically as a 1D diagram — i.e., we have interpreted the iterated cospan geometrically along the Y-axis.
        Now, in the second level of <fr:link href="/coherent-inverses-4S4Y/" title="exploded diagram" uri="https://forest.nickx.hu/coherent-inverses-4S4Y/" display-uri="coherent-inverses-4S4Y" type="local">explosion</fr:link>, each of the indices in the 1D diagram itself corresponds to some iterated cospan in <fr:tex display="inline"><![CDATA[\operatorname {Zig}^{n-2}(\mathcal {C})]]></fr:tex>, and the <fr:link href="/coherent-inverses-XQVM/" title="framed zigzag enriched category" uri="https://forest.nickx.hu/coherent-inverses-XQVM/" display-uri="coherent-inverses-XQVM" type="local">framed zigzag maps</fr:link> in <fr:tex display="inline"><![CDATA[\operatorname {Zig}^{n-1}(\mathcal {C})]]></fr:tex> also <fr:link href="/coherent-inverses-4S4Y/" title="exploded diagram" uri="https://forest.nickx.hu/coherent-inverses-4S4Y/" display-uri="coherent-inverses-4S4Y" type="local">explode</fr:link> to create <fr:link href="/coherent-inverses-XQVM/" title="framed zigzag enriched category" uri="https://forest.nickx.hu/coherent-inverses-XQVM/" display-uri="coherent-inverses-XQVM" type="local">framed zigzag maps</fr:link> in <fr:tex display="inline"><![CDATA[\operatorname {Zig}^{n-2}(\mathcal {C})]]></fr:tex> that intervene between each level; we interpret this second level of <fr:link href="/coherent-inverses-4S4Y/" title="exploded diagram" uri="https://forest.nickx.hu/coherent-inverses-4S4Y/" display-uri="coherent-inverses-4S4Y" type="local">explosion</fr:link> geometrically along the X-axis.
      </html:p><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>12</fr:month><fr:day>5</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-MSZR/</fr:uri><fr:display-uri>coherent-inverses-MSZR</fr:display-uri><fr:route>/coherent-inverses-MSZR/</fr:route><fr:title text="Explosion of a monoid as an object Z \in  \operatorname {Zig}^{2}(\Sigma )"><fr:link href="/coherent-inverses-4S4Y/" title="exploded diagram" uri="https://forest.nickx.hu/coherent-inverses-4S4Y/" display-uri="coherent-inverses-4S4Y" type="local">Explosion</fr:link> of a monoid as an object <fr:tex display="inline"><![CDATA[Z \in  \operatorname {Zig}^{2}(\Sigma )]]></fr:tex></fr:title><fr:taxon>example</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
  Let <fr:tex display="inline"><![CDATA[\Sigma ]]></fr:tex> be the <fr:link href="/coherent-inverses-US67/" title="signature and framing" uri="https://forest.nickx.hu/coherent-inverses-US67/" display-uri="coherent-inverses-US67" type="local">signature</fr:link> consisting of a single 0-cell <fr:tex display="inline"><![CDATA[x]]></fr:tex>, a 1-cell <fr:tex display="inline"><![CDATA[f\colon  x \to  x]]></fr:tex>, and a 2-cell <fr:tex display="inline"><![CDATA[m\colon  f \circ  f \Rightarrow  f]]></fr:tex> (representing a monoid over <fr:tex display="inline"><![CDATA[f]]></fr:tex>).
  There is an object <fr:tex display="inline"><![CDATA[Z \in  \operatorname {Zig}^{2}(\Sigma )]]></fr:tex>, associated to <fr:tex display="inline"><![CDATA[m]]></fr:tex>, which represents the combinatorial encoding of the monoid 2D string diagram.
</html:p><html:p>
  The following picture shows the <fr:link href="/coherent-inverses-4S4Y/" title="exploded diagram" uri="https://forest.nickx.hu/coherent-inverses-4S4Y/" display-uri="coherent-inverses-4S4Y" type="local">explosion</fr:link> of this object <fr:tex display="inline"><![CDATA[Z]]></fr:tex> (<fr:link href="/coherent-inverses-US67/" title="signature and framing" uri="https://forest.nickx.hu/coherent-inverses-US67/" display-uri="coherent-inverses-US67" type="local">framing</fr:link> labelling has been elided for clarity); note that the fully <fr:link href="/coherent-inverses-4S4Y/" title="exploded diagram" uri="https://forest.nickx.hu/coherent-inverses-4S4Y/" display-uri="coherent-inverses-4S4Y" type="local">exploded diagram</fr:link> in <fr:tex display="inline"><![CDATA[\Sigma ]]></fr:tex> looks like a ‘wireframe’ of a monoid string diagram.
  
  
  <html:figure><fr:resource hash="eaa45bbe676d4c0aa07b4af9e4ecae7c"><fr:resource-content><html:img src="/eaa45bbe676d4c0aa07b4af9e4ecae7c.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[
       \usepackage{amsmath,amssymb}
  \usepackage{mathtools}
  \usepackage{stmaryrd}
  \newcommand{\set}[1]{\left\{#1\right\}}
     \usepackage {tikz}
     \usetikzlibrary {cd}
     \usetikzlibrary {graphs,positioning,decorations.pathmorphing}
     
  \definecolor {green}{RGB}{27,158,119}
  \definecolor {orange}{RGB}{217,95,2}
  \definecolor {purple}{RGB}{117,112,179}

     
    ]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
      \begin {tikzcd}[
    column sep=large,
    cells={nodes={draw=gray}},
    execute at end picture={
      \node [anchor=west] at (current bounding box.south east) {.};
    }
  ]
    \begin {tikzpicture}[baseline=(current bounding box.center), every node/.append style={draw=none}]
      \node [draw=gray] [xshift=1cm, yshift=0.5cm] {$\Sigma $};
      \path  graph[math nodes]{
        { [name=r1, fresh nodes] x -> f <- x };
        { [name=s0, fresh nodes] x -> m [orange] <- x };
        { [name=r0, fresh nodes, nodes={xshift=-1cm}] x -> f <- x -> f <- x };
        { [edges=gray]
          r1 x -> s0 m <- r0 x;
          r1 x' -> s0 m <- r0 x'';
          r0 x' -> s0 m;
        };
        r1 x -> s0 x <- r0 x;
        r1 x' -> s0 x' <- r0 x'';
        { [edges=red]
          s0 m <- { r0 f, r0 f', r1 f };
        };
      };
    \end {tikzpicture}
    \ar [r, leftsquigarrow, "\text {explode}", shorten >=2pt, shorten <=2pt]
    &
    \begin {tikzpicture}[baseline=(current bounding box.center), every node/.append style={draw=none}]
      \node [draw=gray] [yshift=0.5cm] {$\operatorname {Zig}(\Sigma )$};
      \path  graph[math nodes] {
        T;
        C;
        S;
        T ->["$b$"] C <-["$f$"] S;
      };
    \end {tikzpicture}
    \ar [r, leftsquigarrow, "\text {explode}", shorten >=2pt, shorten <=2pt]
    &
    \begin {tikzpicture}
      \node [draw=none] (Z) {$Z$};
      \node [above=0.25cm of Z] (c) {$\operatorname {Zig}^{2}(\Sigma )$};
    \end {tikzpicture}
  \end {tikzcd}
    ]]></fr:resource-source></fr:resource></html:figure></html:p></fr:mainmatter></fr:tree><html:p>
        Recall that, in our representation, <fr:tex display="inline"><![CDATA[(n+1)]]></fr:tex>-dimensional diagrams are fundamentally given by a sequence of <fr:tex display="inline"><![CDATA[n]]></fr:tex>-dimensional diagrams assembled into a collection of regular and singular <html:em>slices</html:em>.
        This means that, so long as <fr:tex display="inline"><![CDATA[n]]></fr:tex> is sufficiently large (e.g. <fr:tex display="inline"><![CDATA[n \geq  4]]></fr:tex>), we can render any <fr:tex display="inline"><![CDATA[n]]></fr:tex>-dimensional diagram as a 2D/3D/4D diagram by projection to the appropriate codimension.
        Topologically, this is something like a ‘Morse projection’ of the diagram, which we illustrate in the following example.
      </html:p><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>12</fr:month><fr:day>5</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-L5HR/</fr:uri><fr:display-uri>coherent-inverses-L5HR</fr:display-uri><fr:route>/coherent-inverses-L5HR/</fr:route><fr:title text="Morse projection of a monoid multiplication">Morse projection of a monoid multiplication</fr:title><fr:taxon>example</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
  A monoid multiplication as a 2D string diagram can be rendered as a 1D diagram by projecting out the X-axis.
  Subsequently, we can obtain a 0D diagram by projecting out the Y-axis (which always looks like a point).
  In pictures, this looks like the following:
  
  
  
  <html:figure><fr:resource hash="624b4e1fbed59d64b8ac1225acdb477b"><fr:resource-content><html:img src="/624b4e1fbed59d64b8ac1225acdb477b.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[
        \usepackage{amsmath,amssymb}
  \usepackage{mathtools}
  \usepackage{stmaryrd}
  \newcommand{\set}[1]{\left\{#1\right\}}
      \usepackage {tikz}
      \usetikzlibrary {3d}
      
  \definecolor {green}{RGB}{27,158,119}
  \definecolor {orange}{RGB}{217,95,2}
  \definecolor {purple}{RGB}{117,112,179}

      
    ]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
      \begin {tikzpicture}[]
        
        \clip (-2.3,-2.3) rectangle (2.4,5.3);
    \definecolor{generator-0-0-0-pos}{RGB}{41, 128, 185}
    \definecolor{generator-1-1-0-pos}{RGB}{192, 57, 43}
    \definecolor{generator-2-2-0-pos}{RGB}{243, 156, 18}
    \begin{scope}[canvas is zy plane at x=0]
            \begin{scope}
                    \clip (0,0) -- (10,0) -- (10,4) -- (0,4) -- (0,0);
                    \fill[generator-0-0-0-pos] (0,0) -- (6,0) -- (6,4) -- (0,4) -- (0,0);
                    \draw[color=generator-1-1-0-pos, line width=4pt](2,-0.5) -- (2,1) .. controls (2,1.8) and (2.4,2) .. (3,2) -- (3,4)(4,-0.5) -- (4,1) .. controls (4,1.8) and (3.6,2) .. (3,2) -- (3,4.1);
                    \fill[generator-2-2-0-pos] (3,2) circle (0.14);
            \end{scope}
            \draw[->] (-1,2) -- node[below, yshift=-0.2cm] {\small project} (-2,2);
    \end{scope}
    \begin{scope}[xshift=2 cm,plane origin={(0,0,0)}, plane x={(0,1,1)}, plane y={(0,1,0)}, canvas is plane]
            \begin{scope}
                    \clip (0,0) -- (4,0) -- (4,4) -- (0,4) -- (0,0);
                    \draw[color=generator-1-1-0-pos, line width=4pt](2,-1) -- (2,5);
                    \fill[generator-2-2-0-pos] (2,2) circle (0.14);
            \end{scope}
            \draw[->] (2,-0.4) -- node[right] {\small project} (2,-1.8);
    \end{scope}
    \begin{scope}[xshift=-1 cm, canvas is xz plane at y=0]
            \fill[generator-2-2-0-pos] (3,2) circle (0.14);
    \end{scope}
  
      \end {tikzpicture}
    ]]></fr:resource-source></fr:resource></html:figure></html:p></fr:mainmatter></fr:tree><html:p>
        Another feature of this representation is that we can specify a sub-<fr:tex display="inline"><![CDATA[k]]></fr:tex>-dimensional diagram within an <fr:tex display="inline"><![CDATA[n]]></fr:tex>-dimensional diagram, for <fr:tex display="inline"><![CDATA[k < n]]></fr:tex> by giving a <fr:tex display="inline"><![CDATA[(n-k)]]></fr:tex>-length sequence of slice heights.
        <html:em>View control</html:em>, determined by the following regular expression:
        <fr:tex display="block"><![CDATA[
          \bigstar  \; ( \textsf {S} \mid  \textsf {T} \mid  \textsf {R} i \mid  \textsf {S} i )^k \; \textsf {V}^d \; \textsf {P}^{n - k - d} \qquad  (d \leq  4),
        ]]></fr:tex>
        combines this information with the desired render dimension <fr:tex display="inline"><![CDATA[d \leq  4]]></fr:tex>, where here <fr:tex display="inline"><![CDATA[\textsf {S}]]></fr:tex> and <fr:tex display="inline"><![CDATA[\textsf {T}]]></fr:tex> are special indices that refer to the ‘<fr:link href="/coherent-inverses-G6FI/" title="source and target of a zigzag" uri="https://forest.nickx.hu/coherent-inverses-G6FI/" display-uri="coherent-inverses-G6FI" type="local">source</fr:link>’ (first) regular height and the ‘<fr:link href="/coherent-inverses-G6FI/" title="source and target of a zigzag" uri="https://forest.nickx.hu/coherent-inverses-G6FI/" display-uri="coherent-inverses-G6FI" type="local">target</fr:link>’ (last) regular heights respectively
  <html:sl-tooltip content="The tool uses this additional information to influence where constructed homotopies are inserted.">
    <html:sup>​</html:sup>
  </html:sl-tooltip>
.
        A word in this language determines, for an <fr:tex display="inline"><![CDATA[n]]></fr:tex>-dimensional diagram, that our view is the <fr:tex display="inline"><![CDATA[(n-k)]]></fr:tex>-dimensional diagram specified by the first <fr:tex display="inline"><![CDATA[k]]></fr:tex> symbols, being viewed in <fr:tex display="inline"><![CDATA[d]]></fr:tex> dimensions, projecting the remaining <fr:tex display="inline"><![CDATA[n-k-d]]></fr:tex> dimensions.
      </html:p><html:p>
        We present each symbol as a button that can be clicked to change the view: clicking <fr:tex display="inline"><![CDATA[\bigstar ]]></fr:tex> sets <fr:tex display="inline"><![CDATA[k = 0]]></fr:tex> (setting the view to the original <fr:tex display="inline"><![CDATA[n]]></fr:tex>-diagram); clicking any <fr:tex display="inline"><![CDATA[\textsf {V}]]></fr:tex> button decrements <fr:tex display="inline"><![CDATA[d]]></fr:tex> by 1, to a minimum of 0 (rendered as a single point), and clicking any <fr:tex display="inline"><![CDATA[\textsf {P}]]></fr:tex> button increments <fr:tex display="inline"><![CDATA[d]]></fr:tex> by 1, to a maximum of 4.
        Descending into a slice (increasing <fr:tex display="inline"><![CDATA[k]]></fr:tex>) is given by a sequence of chevron buttons ▸, one for each regular and singular height of the diagram and also for the <fr:link href="/coherent-inverses-G6FI/" title="source and target of a zigzag" uri="https://forest.nickx.hu/coherent-inverses-G6FI/" display-uri="coherent-inverses-G6FI" type="local">source</fr:link> and <fr:link href="/coherent-inverses-G6FI/" title="source and target of a zigzag" uri="https://forest.nickx.hu/coherent-inverses-G6FI/" display-uri="coherent-inverses-G6FI" type="local">target</fr:link>, aligned vertically to the right of the diagram.
      </html:p><html:p>
        Even in 3D and 4D string diagrams, the primary mode of interaction is via a 2D slices and projections, with the 3D and 4D renderers mainly for visualisation.
      </html:p></fr:mainmatter></fr:tree><html:p>
      Now that we have established which parts of a string diagram are to be rendered, to produce an image on screen, we proceed via the following pipeline:
      <html:ol><html:li>
          layout — assign real-valued coordinates in <fr:tex display="inline"><![CDATA[n]]></fr:tex>-dimensional Euclidean space <fr:tex display="inline"><![CDATA[\mathbb {R}^n]]></fr:tex>, for <fr:tex display="inline"><![CDATA[n = \text {2, 3, or 4}]]></fr:tex> depending on the type of render requested, to each piece of the diagram:
          <html:span class="textual" uid="a-layout-algorithm-for-higher-dimensional-string-diagrams"><fr:link href="/a-layout-algorithm-for-higher-dimensional-string-diagrams/" title="A layout algorithm for higher-dimensional string diagrams" uri="https://forest.nickx.hu/a-layout-algorithm-for-higher-dimensional-string-diagrams/" display-uri="a-layout-algorithm-for-higher-dimensional-string-diagrams" type="local">[a-layout-algorithm-for-higher-dimensional-string-diagrams]</fr:link></html:span> describes this process as a categorical construction which extracts a set of linear constraints from the diagram; these are then augmented with additional aesthetic constraints (e.g. ‘try to centre wires and surfaces’), before being passed to the <fr:link href="/parallelizing-the-dual-revised-simplex-method/" title="Parallelizing the dual revised simplex method" uri="https://forest.nickx.hu/parallelizing-the-dual-revised-simplex-method/" display-uri="parallelizing-the-dual-revised-simplex-method" type="local">HiGHS</fr:link> linear programming solver;
        </html:li>
        <html:li>
          mesh generation — compute a representation of this geometry as a collection of <fr:tex display="inline"><![CDATA[k]]></fr:tex>-dimensional cubes, for <fr:tex display="inline"><![CDATA[k \leq  n]]></fr:tex>;
        </html:li>
        <html:li>
          subdivision — refine the mesh, making it smoother, by recursively subdividing each cube into smaller cubes.
        </html:li></html:ol>
      Due to our target platform being the web browser, one limitation inherited from WebGL is that there is no access to compute shaders (loosely speaking, these allow for general-purpose compute on the GPU), which would be the natural way to compute the animation in the 4D case.
      Instead, a 4D mesh is triangulated using a rendering trick <html:span tid="§ 6.2" uid="homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories"><fr:link href="/homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories/" title="homotopy.io: a proof assistant for finitely-presented globular $n$-categories" uri="https://forest.nickx.hu/homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories/" display-uri="homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories" type="local">[§ 6.2, homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories]</fr:link></html:span> so that it can be rendered as if it were a 3D mesh, which aligns to the capabilities of WebGL.
    </html:p></fr:mainmatter></fr:tree><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2023</fr:year><fr:month>12</fr:month><fr:day>3</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-implementation-architecture/</fr:uri><fr:display-uri>coherent-inverses-implementation-architecture</fr:display-uri><fr:route>/coherent-inverses-implementation-architecture/</fr:route><fr:title text="System architecture">System architecture</fr:title><fr:taxon>section</fr:taxon></fr:frontmatter><fr:mainmatter><html:p><html:span tex="\homotopyio{}"><fr:link href="/homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories/" title="homotopy.io: a proof assistant for finitely-presented globular $n$-categories" uri="https://forest.nickx.hu/homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories/" display-uri="homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories" type="local"><html:code>homotopy.io</html:code></fr:link></html:span> as a complex system is composed of many interacting parts.
      The codebase is split into many different ‘crates’ (Rust's notion of package), which themselves are split into many different modules.
    </html:p><html:p>
      The main algorithmic core is contained in the <html:code>homotopy-core</html:code> crate, which has modules such as <html:code>diagram.rs</html:code> and <html:code>rewrite.rs</html:code>, that define some of the algebraic data types of <fr:link href="/coherent-inverses-6O54/" title="Data structures of homotopy.io" uri="https://forest.nickx.hu/coherent-inverses-6O54/" display-uri="coherent-inverses-6O54" type="local">code <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-6O54/" display-uri="coherent-inverses-6O54" /></fr:link> and implement auxiliary methods to support them.
      <html:code>collapse.rs</html:code> and <html:code>contraction.rs</html:code> contain the main algorithms of <html:span tex="\homotopyio{}"><fr:link href="/homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories/" title="homotopy.io: a proof assistant for finitely-presented globular $n$-categories" uri="https://forest.nickx.hu/homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories/" display-uri="homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories" type="local"><html:code>homotopy.io</html:code></fr:link></html:span>, as described in <fr:link href="/coherent-inverses-algorithms/" title="Coherent inverses in higher-categorical string diagrams › Collapsing framed zigzags › Collapse, contraction, and typechecking › Algorithms" uri="https://forest.nickx.hu/coherent-inverses-algorithms/" display-uri="coherent-inverses-algorithms" type="local">section <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-algorithms/" display-uri="coherent-inverses-algorithms" /></fr:link>.
    </html:p><html:p>
      Aside from this, the system is broadly architected using the <html:em>Redux</html:em> pattern (see: <html:code>homotopy-model</html:code>), popularised by the React.js and Redux JavaScript libraries.
      There is a single global store containing the current state of the system, which includes not only the mathematical state (e.g. the <fr:link href="/coherent-inverses-US67/" title="signature and framing" uri="https://forest.nickx.hu/coherent-inverses-US67/" display-uri="coherent-inverses-US67" type="local">signature</fr:link>, the <html:code>diagram</html:code> being interacted with in the workspace), but also the ancillary state (e.g. which sidebar is open, pan/zoom transformations).
      Every action that can be performed in the system is represented as data in the form of a Rust enum.
      Now, instead of directly modifying the state in response to user interaction, we instead signal an action to the system, where it is handled by a <html:em>state reducer</html:em> that computes the new state from the old state and the action.
      The view, which is presented to the user, is computed as a pure function of the state, updating whenever the state changes.
    </html:p><html:p>
      Each state can be described as a sequence of all the actions that have been applied to the initial state, which is useful for debugging and for undo/redo functionality.
      Additionally, actions can be filtered for validity based on the current state by the reducer, which can be used to disable UI elements that do not make sense in the current context (e.g. one cannot slice a 0D diagram).
      This leads to a strict decoupling of the UI from the underlying logic, which is a key design principle of the system.
    </html:p><html:p>
      As a result of this modularity, we are able to support two seperate interfaces: a web interface (<html:code>homotopy-web</html:code>), which is the main one, and a command line interface (<html:code>homotopy-cli</html:code>) for debugging.
      Moreover, this separation of concerns allows the pieces of the system to be individually tested; many of the technicalities of our algorithms and data structures are elaborate, even in their atomic parts, so it is all but necessary to be able to apply a rigorous testing methodology to validate correctness.
    </html:p></fr:mainmatter></fr:tree><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2023</fr:year><fr:month>12</fr:month><fr:day>3</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-implementation-interaction/</fr:uri><fr:display-uri>coherent-inverses-implementation-interaction</fr:display-uri><fr:route>/coherent-inverses-implementation-interaction/</fr:route><fr:title text="Interacting with the system">Interacting with the system</fr:title><fr:taxon>section</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
      There are two main mathematically significant ways in which the user can interact with <html:span tex="\homotopyio{}"><fr:link href="/homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories/" title="homotopy.io: a proof assistant for finitely-presented globular $n$-categories" uri="https://forest.nickx.hu/homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories/" display-uri="homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories" type="local"><html:code>homotopy.io</html:code></fr:link></html:span>:
      <html:dl>
        <html:dt>generator creation</html:dt>
        <html:dd>
          The user can always click a button to add a new (fresh) 0-cell to the <fr:link href="/coherent-inverses-US67/" title="signature and framing" uri="https://forest.nickx.hu/coherent-inverses-US67/" display-uri="coherent-inverses-US67" type="local">signature</fr:link>; new <fr:tex display="inline"><![CDATA[n]]></fr:tex>-cells, for <fr:tex display="inline"><![CDATA[n > 0]]></fr:tex>, are created by constructing their <fr:link href="/coherent-inverses-G6FI/" title="source and target of a zigzag" uri="https://forest.nickx.hu/coherent-inverses-G6FI/" display-uri="coherent-inverses-G6FI" type="local">source</fr:link> and <fr:link href="/coherent-inverses-G6FI/" title="source and target of a zigzag" uri="https://forest.nickx.hu/coherent-inverses-G6FI/" display-uri="coherent-inverses-G6FI" type="local">target</fr:link> boundary, satisfying globularity, and designating them as ‘<fr:link href="/coherent-inverses-G6FI/" title="source and target of a zigzag" uri="https://forest.nickx.hu/coherent-inverses-G6FI/" display-uri="coherent-inverses-G6FI" type="local">source</fr:link>’ and ‘<fr:link href="/coherent-inverses-G6FI/" title="source and target of a zigzag" uri="https://forest.nickx.hu/coherent-inverses-G6FI/" display-uri="coherent-inverses-G6FI" type="local">target</fr:link>’ with the dedicated buttons to do so.
          These correspond to the functions in the <fr:link href="/coherent-inverses-9DJY/" title="generator creation" uri="https://forest.nickx.hu/coherent-inverses-9DJY/" display-uri="coherent-inverses-9DJY" type="local">generator creation algorithm</fr:link>.
          Additionally, <fr:link href="/coherent-inverses-US67/" title="signature and framing" uri="https://forest.nickx.hu/coherent-inverses-US67/" display-uri="coherent-inverses-US67" type="local">generators</fr:link> in the <fr:link href="/coherent-inverses-US67/" title="signature and framing" uri="https://forest.nickx.hu/coherent-inverses-US67/" display-uri="coherent-inverses-US67" type="local">signature</fr:link> can be marked as invertible, making them eligible for attachment in their inverse orientation.
          Any finite presentation of a higher globular <fr:tex display="inline"><![CDATA[n]]></fr:tex>-category (or <fr:tex display="inline"><![CDATA[n]]></fr:tex>-groupoid) can be input in this way.
        </html:dd>
        <html:dt>homotopy construction</html:dt>
        <html:dd>
          Given some 2D (or 1D) diagram, rendered on screen in the workspace, the user can interact with it by clicking on certain regions to attach cells from the <fr:link href="/coherent-inverses-US67/" title="signature and framing" uri="https://forest.nickx.hu/coherent-inverses-US67/" display-uri="coherent-inverses-US67" type="local">signature</fr:link> to the diagram, or by clicking-and-dragging to trigger <fr:link href="/coherent-inverses-FHS4/" title="contraction" uri="https://forest.nickx.hu/coherent-inverses-FHS4/" display-uri="coherent-inverses-FHS4" type="local">contraction</fr:link> and <fr:link href="/coherent-inverses-TQBG/" title="Expansion" uri="https://forest.nickx.hu/coherent-inverses-TQBG/" display-uri="coherent-inverses-TQBG" type="local">expansion</fr:link> moves.
          The system responds to these interactions by computing the appropriate <html:code>diagram</html:code>s and <html:code>rewrite</html:code>s and updating the workspace, or if the move is invalid, by displaying an error message.
          If a <fr:link href="/coherent-inverses-FHS4/" title="contraction" uri="https://forest.nickx.hu/coherent-inverses-FHS4/" display-uri="coherent-inverses-FHS4" type="local">contraction</fr:link>/expansion is performed within some subdiagram of a larger diagram, there are auxiliary algorithms that propagate the change to the entire diagram <html:span tid="§ 5" uid="high-level-methods-for-homotopy-construction-in-associative-n-categories"><fr:link href="/high-level-methods-for-homotopy-construction-in-associative-n-categories/" title="High-level methods for homotopy construction in associative $n$-categories" uri="https://forest.nickx.hu/high-level-methods-for-homotopy-construction-in-associative-n-categories/" display-uri="high-level-methods-for-homotopy-construction-in-associative-n-categories" type="local">[§ 5, high-level-methods-for-homotopy-construction-in-associative-n-categories]</fr:link></html:span>.
        </html:dd>
      </html:dl></html:p><html:p>
      Homotopy construction is facilitated by two main procedures: attachment, and <fr:link href="/coherent-inverses-FHS4/" title="contraction" uri="https://forest.nickx.hu/coherent-inverses-FHS4/" display-uri="coherent-inverses-FHS4" type="local">contraction</fr:link> alongside its dual operation <html:em>expansion</html:em>, which we briefly describe here.
    </html:p><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>12</fr:month><fr:day>5</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-TQBG/</fr:uri><fr:display-uri>coherent-inverses-TQBG</fr:display-uri><fr:route>/coherent-inverses-TQBG/</fr:route><fr:title text="Expansion">Expansion</fr:title><fr:taxon>section</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
  Expansion is dual to the <fr:link href="/coherent-inverses-FHS4/" title="contraction" uri="https://forest.nickx.hu/coherent-inverses-FHS4/" display-uri="coherent-inverses-FHS4" type="local">contraction algorithm</fr:link>, first described by <html:span class="textual" tid="§ 5.2" uid="high-level-methods-for-homotopy-construction-in-associative-n-categories"><fr:link href="/high-level-methods-for-homotopy-construction-in-associative-n-categories/" title="High-level methods for homotopy construction in associative $n$-categories" uri="https://forest.nickx.hu/high-level-methods-for-homotopy-construction-in-associative-n-categories/" display-uri="high-level-methods-for-homotopy-construction-in-associative-n-categories" type="local">[§ 5.2, high-level-methods-for-homotopy-construction-in-associative-n-categories]</fr:link></html:span> and later refined by <html:span class="textual" uid="the-theory-and-applications-of-anticolimits"><fr:link href="/the-theory-and-applications-of-anticolimits/" title="The theory and applications of anticolimits" uri="https://forest.nickx.hu/the-theory-and-applications-of-anticolimits/" display-uri="the-theory-and-applications-of-anticolimits" type="local">[the-theory-and-applications-of-anticolimits]</fr:link></html:span>, <html:span class="textual" tid="Chapter 6" uid="a-computational-approach-to-higher-categories"><fr:link href="/a-computational-approach-to-higher-categories/" title="A computational approach to higher categories" uri="https://forest.nickx.hu/a-computational-approach-to-higher-categories/" display-uri="a-computational-approach-to-higher-categories" type="local">[Chapter 6, a-computational-approach-to-higher-categories]</fr:link></html:span>.
  It is an inductive procedure which, given some <html:code>diagram</html:code> <fr:tex display="inline"><![CDATA[D]]></fr:tex> of singular height <fr:tex display="inline"><![CDATA[h]]></fr:tex>, produces an expanded <html:code>diagram</html:code> <fr:tex display="inline"><![CDATA[E]]></fr:tex> of singular height <fr:tex display="inline"><![CDATA[h+1]]></fr:tex> along with a <html:code>rewrite</html:code> <fr:tex display="inline"><![CDATA[c]]></fr:tex> such that the <fr:link href="/coherent-inverses-FHS4/" title="contraction" uri="https://forest.nickx.hu/coherent-inverses-FHS4/" display-uri="coherent-inverses-FHS4" type="local">contraction algorithm</fr:link> on <fr:tex display="inline"><![CDATA[E]]></fr:tex> at <fr:tex display="inline"><![CDATA[(h, h+1)]]></fr:tex> succeeds, returning
  <fr:tex display="block"><![CDATA[
    E \xrightarrow {c} D
  ]]></fr:tex>
  as its output, or fails.
  In this sense, expansion is a partial (non-unique) converse to <fr:link href="/coherent-inverses-FHS4/" title="contraction" uri="https://forest.nickx.hu/coherent-inverses-FHS4/" display-uri="coherent-inverses-FHS4" type="local">contraction</fr:link>.
</html:p></fr:mainmatter></fr:tree><html:p>
      To provide the mouse interface, each 2D string diagram image (which is rendered as an SVG) is composed as a collection of triangles; then, certain triangles are equipped with event listeners to trigger the appropriate action.
    </html:p><html:p>
      This is best described by example.
    </html:p><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>12</fr:month><fr:day>7</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-18UO/</fr:uri><fr:display-uri>coherent-inverses-18UO</fr:display-uri><fr:route>/coherent-inverses-18UO/</fr:route><fr:title text="Attachment, contraction, expansion">Attachment, <fr:link href="/coherent-inverses-FHS4/" title="contraction" uri="https://forest.nickx.hu/coherent-inverses-FHS4/" display-uri="coherent-inverses-FHS4" type="local">contraction</fr:link>, expansion</fr:title><fr:taxon>example</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
  Fix a <fr:link href="/coherent-inverses-US67/" title="signature and framing" uri="https://forest.nickx.hu/coherent-inverses-US67/" display-uri="coherent-inverses-US67" type="local">signature</fr:link> <fr:tex display="inline"><![CDATA[\Sigma ]]></fr:tex> with a 0-cell <fr:tex display="inline"><![CDATA[x]]></fr:tex> and an invertible scalar 2-cell <fr:tex display="inline"><![CDATA[s\colon  
  \text {id}_{x}
 \Rightarrow  
  \text {id}_{x}
]]></fr:tex>.
  As 2D string diagrams, <fr:tex display="inline"><![CDATA[s]]></fr:tex> and its inverse <fr:tex display="inline"><![CDATA[s^{-1}]]></fr:tex> look like the following:
  
  
  
  <html:figure><fr:resource hash="5ef2a28ee5be99204125d36202cd80f9"><fr:resource-content><html:img src="/5ef2a28ee5be99204125d36202cd80f9.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[
        \usepackage{amsmath,amssymb}
  \usepackage{mathtools}
  \usepackage{stmaryrd}
  \newcommand{\set}[1]{\left\{#1\right\}}
      \usepackage {tikz}
      \usetikzlibrary {positioning}
      
  \definecolor {green}{RGB}{27,158,119}
  \definecolor {orange}{RGB}{217,95,2}
  \definecolor {purple}{RGB}{117,112,179}

      
    ]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
      \begin {tikzpicture}[]
        
        \node (s) {
      \begin{tikzpicture}[execute at end picture={\node[anchor=east] at (current bounding box.west) {$s\colon$};}]
        \definecolor{generator-0-0-0-pos}{RGB}{41, 128, 185}
        \definecolor{generator-1-2-0-pos}{RGB}{192, 57, 43}
        \begin{scope}
          % Background surfaces
          \fill[generator-0-0-0-pos] (0,0) -- (4,0) -- (4,4) -- (0,4) -- (0,0);
          % Wire layers
        \end{scope}
        \fill[generator-1-2-0-pos] (2,2) circle (0.14);
      \end{tikzpicture}
    };
    \node[right=of s]{
      \begin{tikzpicture}[execute at end picture={\node[anchor=east] at (current bounding box.west) {$s^{-1}\colon$};}]
        \definecolor{generator-0-0-0-pos}{RGB}{41, 128, 185}
        \definecolor{generator-1-2-0-neg}{RGB}{121, 36, 27}
        \begin{scope}
          % Background surfaces
          \fill[generator-0-0-0-pos] (0,0) -- (4,0) -- (4,4) -- (0,4) -- (0,0);
          % Wire layers
        \end{scope}
        \fill[generator-1-2-0-neg] (2,2) circle (0.14);
      \end{tikzpicture}
    };
  
      \end {tikzpicture}
    ]]></fr:resource-source></fr:resource></html:figure></html:p><html:p>
  The diagram for <fr:tex display="inline"><![CDATA[s]]></fr:tex> admits two <html:em>attachment points</html:em>, at the <fr:link href="/coherent-inverses-G6FI/" title="source and target of a zigzag" uri="https://forest.nickx.hu/coherent-inverses-G6FI/" display-uri="coherent-inverses-G6FI" type="local">source</fr:link> and <fr:link href="/coherent-inverses-G6FI/" title="source and target of a zigzag" uri="https://forest.nickx.hu/coherent-inverses-G6FI/" display-uri="coherent-inverses-G6FI" type="local">target</fr:link> boundaries:
  
  
  
  <html:figure><fr:resource hash="d1223cc344bf7c4205e02ded65098e76"><fr:resource-content><html:img src="/d1223cc344bf7c4205e02ded65098e76.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[
        \usepackage{amsmath,amssymb}
  \usepackage{mathtools}
  \usepackage{stmaryrd}
  \newcommand{\set}[1]{\left\{#1\right\}}
      \usepackage {tikz}
      \usetikzlibrary {}
      
  \definecolor {green}{RGB}{27,158,119}
  \definecolor {orange}{RGB}{217,95,2}
  \definecolor {purple}{RGB}{117,112,179}

      
    ]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
      \begin {tikzpicture}[]
        
        \definecolor{generator-0-0-0-pos}{RGB}{41, 128, 185}
    \definecolor{generator-1-2-0-pos}{RGB}{192, 57, 43}
    \begin{scope}
      % Background surfaces
      \fill[generator-0-0-0-pos] (0,0) -- (4,0) -- (4,4) -- (0,4) -- (0,0);
      % Wire layers
      % Highlight
      \draw[fill=yellow, opacity=0.2] (1.5,3.5) rectangle node[black, opacity=0.4] {target} (2.5,4);
      \draw[fill=yellow, opacity=0.2] (1.5,0) rectangle node[black, opacity=0.4] {source} (2.5,0.5);
    \end{scope}
    \fill[generator-1-2-0-pos] (2,2) circle (0.14);
  
      \end {tikzpicture}
    ]]></fr:resource-source></fr:resource></html:figure>



  Clicking in the ‘<fr:link href="/coherent-inverses-G6FI/" title="source and target of a zigzag" uri="https://forest.nickx.hu/coherent-inverses-G6FI/" display-uri="coherent-inverses-G6FI" type="local">target</fr:link>’ region triggers an attachment procedure which works as follows:
  <html:ol><html:li>
      enumerate the valid diagrams from the <fr:link href="/coherent-inverses-US67/" title="signature and framing" uri="https://forest.nickx.hu/coherent-inverses-US67/" display-uri="coherent-inverses-US67" type="local">signature</fr:link> which can be attached here;
      if there is more than one valid diagram, prompt the user to choose one;
    </html:li>
    <html:li>
      attach the chosen diagram to this attachment point and update.
    </html:li></html:ol>
  In this case, because <fr:tex display="inline"><![CDATA[s \circ  s]]></fr:tex> and <fr:tex display="inline"><![CDATA[s^{-1} \circ  s]]></fr:tex> are valid 2-cells in this <fr:tex display="inline"><![CDATA[n]]></fr:tex>-category, the user is prompted to choose between attaching <fr:tex display="inline"><![CDATA[s]]></fr:tex> or <fr:tex display="inline"><![CDATA[s^{-1}]]></fr:tex>.
</html:p><html:p>
  If the user chooses to attach <fr:tex display="inline"><![CDATA[s^{-1}]]></fr:tex>, the diagram (now corresponding to <fr:tex display="inline"><![CDATA[s^{-1} \circ  s]]></fr:tex>) becomes the following:
  
  
  
  <html:figure><fr:resource hash="9a52f170c6f341b8ab1b2c67d71aaaf5"><fr:resource-content><html:img src="/9a52f170c6f341b8ab1b2c67d71aaaf5.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[
        \usepackage{amsmath,amssymb}
  \usepackage{mathtools}
  \usepackage{stmaryrd}
  \newcommand{\set}[1]{\left\{#1\right\}}
      \usepackage {tikz}
      \usetikzlibrary {}
      
  \definecolor {green}{RGB}{27,158,119}
  \definecolor {orange}{RGB}{217,95,2}
  \definecolor {purple}{RGB}{117,112,179}

      
    ]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
      \begin {tikzpicture}[]
        
        \definecolor{generator-1-2-0-neg}{RGB}{121, 36, 27}
    \definecolor{generator-0-0-0-pos}{RGB}{41, 128, 185}
    \definecolor{generator-1-2-0-pos}{RGB}{192, 57, 43}
    \begin{scope}
    % Background surfaces
    \fill[generator-0-0-0-pos] (0,0) -- (4,0) -- (4,6) -- (0,6) -- (0,0);
    % Wire layers
    \end{scope}
    \fill[generator-1-2-0-pos] (2,2) circle (0.14);
    \fill[generator-1-2-0-neg] (2,4) circle (0.14);
  
      \end {tikzpicture}
    ]]></fr:resource-source></fr:resource></html:figure></html:p><html:p>
  From here, the following sequence of click-and-drags (starting on <fr:tex display="inline"><![CDATA[s^{-1}]]></fr:tex>) triggers a <fr:link href="/coherent-inverses-FHS4/" title="contraction" uri="https://forest.nickx.hu/coherent-inverses-FHS4/" display-uri="coherent-inverses-FHS4" type="local">contraction</fr:link> followed by an expansion:
  
  
  
  <html:figure><fr:resource hash="d311c8a1b9be2b2e7588f735f275568a"><fr:resource-content><html:img src="/d311c8a1b9be2b2e7588f735f275568a.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[
        \usepackage{amsmath,amssymb}
  \usepackage{mathtools}
  \usepackage{stmaryrd}
  \newcommand{\set}[1]{\left\{#1\right\}}
      \usepackage {tikz}
      \usetikzlibrary {positioning,cd,decorations.pathmorphing}
      
  \definecolor {green}{RGB}{27,158,119}
  \definecolor {orange}{RGB}{217,95,2}
  \definecolor {purple}{RGB}{117,112,179}

      
    ]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
      \begin {tikzpicture}[]
        
        \definecolor{generator-2-2-0-pos}{RGB}{121, 36, 27}
    \definecolor{generator-0-0-0-pos}{RGB}{41, 128, 185}
    \definecolor{generator-1-2-0-pos}{RGB}{192, 57, 43}
    \node (a) {
      \begin{tikzpicture}[baseline=(current bounding box.center)]
        \begin{scope}
          % Background surfaces
          \fill[generator-0-0-0-pos] (0,0) -- (4,0) -- (4,6) -- (0,6) -- (0,0);
          % Wire layers
        \end{scope}
        \fill[generator-1-2-0-pos] (2,2) circle (0.14);
        \fill[generator-2-2-0-pos] (2,4) circle (0.14);
        \draw[->, thick, yellow, shorten <=12px, opacity=0.4] (2,4) -- node[midway, right] {drag} (3,2.5);
      \end{tikzpicture}
    };
    \node[right=2cm of a] (b) {
      \begin{tikzpicture}[baseline=(current bounding box.center)]
        \begin{scope}
          % Background surfaces
          \fill[generator-0-0-0-pos] (0,0) -- (6,0) -- (6,4) -- (0,4) -- (0,0);
          % Wire layers
        \end{scope}
        \fill[generator-1-2-0-pos] (2,2) circle (0.14);
        \fill[generator-2-2-0-pos] (4,2) circle (0.14);
        \draw[->, thick, yellow, shorten <=12px, opacity=0.4] (4,2) -- node[midway, right] {drag} (3,0.5);
      \end{tikzpicture}
    };
    \node[right=2cm of b] (c) {
      \begin{tikzpicture}[baseline=(current bounding box.center)]
        \begin{scope}
          % Background surfaces
          \fill[generator-0-0-0-pos] (0,0) -- (4,0) -- (4,6) -- (0,6) -- (0,0);
          % Wire layers
        \end{scope}
        \fill[generator-2-2-0-pos] (2,2) circle (0.14);
        \fill[generator-1-2-0-pos] (2,4) circle (0.14);
      \end{tikzpicture}
    };
    \draw (a) edge[commutative diagrams/rightsquigarrow] node[above] {contraction} (b)
          (b) edge[commutative diagrams/rightsquigarrow] node[above] {expansion} (c);
  
      \end {tikzpicture}
    ]]></fr:resource-source></fr:resource></html:figure></html:p><html:p>
  The homotopy that has been constructed here can be interpreted as the Eckmann-Hilton argument: in a 3-category, the two ways of composing the two 2-cells are equal.
  Geometrically, we can interpret this as a braid, tracing the wordlines of the 2-cells; this is also the crux of the idea that braided monoidal categories are equivalent to doubly-degenerate 3-categories (a single 0-cell, no non-identity 1-cells):
  
  
  
  <html:figure><fr:resource hash="d70c51a41f3a5872d5e184866621d6d3"><fr:resource-content><html:img src="/d70c51a41f3a5872d5e184866621d6d3.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[
        \usepackage{amsmath,amssymb}
  \usepackage{mathtools}
  \usepackage{stmaryrd}
  \newcommand{\set}[1]{\left\{#1\right\}}
      \usepackage {tikz}
      \usetikzlibrary {3d,positioning,cd,decorations.pathmorphing}
      
  \definecolor {green}{RGB}{27,158,119}
  \definecolor {orange}{RGB}{217,95,2}
  \definecolor {purple}{RGB}{117,112,179}

      
    ]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
      \begin {tikzpicture}[]
        
        \definecolor{sinv}{RGB}{121, 36, 27}
    \definecolor{space}{RGB}{41, 128, 185}
    \definecolor{s}{RGB}{192, 57, 43}
    \node (l) {
      \begin{tikzpicture}
        \begin{scope}[canvas is xz plane at y=0]
          \begin{scope}
            % Background surfaces
            \fill[space] (0,0) -- (4,0) -- (4,6) -- (0,6) -- (0,0);
            % Wire layers
          \end{scope}
          \coordinate (a1) at (2,2);
          \coordinate (b1) at (2,4);
          \coordinate (c1) at (2,3);
          \fill[sinv] (2,2) circle (0.14);
          \fill[s] (2,4) circle (0.14);
        \end{scope}
        \begin{scope}[canvas is xz plane at y=2,xshift=-1.5cm]
          \begin{scope}
            % Background surfaces
            \fill[space] (0,0) -- (6,0) -- (6,4) -- (0,4) -- (0,0);
            % Wire layers
          \end{scope}
          \coordinate (a2) at (2,3);
          \coordinate (b2) at (4,1);
          \coordinate (c2) at (3,2);
          \fill[sinv] (2,2) circle (0.14);
          \fill[s] (4,2) circle (0.14);
        \end{scope}
        \begin{scope}[canvas is xz plane at y=5]
          \begin{scope}
            % Background surfaces
            \fill[space] (0,0) -- (4,0) -- (4,6) -- (0,6) -- (0,0);
            % Wire layers
          \end{scope}
          \coordinate (b3) at (2,2);
          \coordinate (a3) at (2,4);
          \coordinate (c3) at (2,3);
          \fill[s] (2,2) circle (0.14);
          \fill[sinv] (2,4) circle (0.14);
        \end{scope}
        \draw[line width=0.2cm, sinv, opacity=0.8] (a1) .. controls (a2) .. (a3);
        \draw[line width=0.2cm, s, opacity=0.8] (b1) .. controls (b2) .. (b3);
      \end{tikzpicture}
    };
    \node[right=of l] (r) {
      \begin{tikzpicture}
        \begin{scope}[canvas is xz plane at y=0,rotate=90]
          \begin{scope}
            % Background surfaces
            \fill[space] (0,0) -- (4,0) -- (4,6) -- (0,6) -- (0,0);
            % Wire layers
          \end{scope}
          \coordinate (a1) at (2,2);
          \coordinate (b1) at (2,4);
          \coordinate (c1) at (2,3);
          \fill[sinv] (2,2) circle (0.14);
          \fill[s] (2,4) circle (0.14);
        \end{scope}
        \begin{scope}[canvas is xz plane at y=4,yshift=1.5cm,rotate=90]
          \begin{scope}
            % Background surfaces
            \fill[space] (0,0) -- (6,0) -- (6,4) -- (0,4) -- (0,0);
            % Wire layers
          \end{scope}
          \coordinate (a2) at (2,1.8);
          \coordinate (b2) at (4,2.1);
          \coordinate (c2) at (3,2);
          \fill[sinv] (2,2) circle (0.14);
          \fill[s] (4,2) circle (0.14);
        \end{scope}
        \begin{scope}[canvas is xz plane at y=6,rotate=90]
          \begin{scope}
            % Background surfaces
            \fill[space] (0,0) -- (4,0) -- (4,6) -- (0,6) -- (0,0);
            % Wire layers
          \end{scope}
          \coordinate (b3) at (2,2);
          \coordinate (a3) at (2,4);
          \coordinate (c3) at (2,3);
          \fill[s] (2,2) circle (0.14);
          \fill[sinv] (2,4) circle (0.14);
        \end{scope}
        \draw[line width=0.2cm, sinv, opacity=0.8] (a1) .. controls (a2) .. (a3);
        \draw[line width=0.2cm, s, opacity=0.8] (b1) .. controls (b2) .. (b3);
      \end{tikzpicture}
    };
    \draw (l) edge[commutative diagrams/rightsquigarrow, "rotate", "90°"'] (r);
  
      \end {tikzpicture}
    ]]></fr:resource-source></fr:resource></html:figure>



  Indeed, <fr:link href="/coherent-inverses-ZKW8/" title="Braid 3D tube diagram" uri="https://forest.nickx.hu/coherent-inverses-ZKW8/" display-uri="coherent-inverses-ZKW8" type="local">figure <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-ZKW8/" display-uri="coherent-inverses-ZKW8" /></fr:link> shows what the 3D renderer draws for this 3-cell.
</html:p><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2025</fr:year><fr:month>1</fr:month><fr:day>9</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-ZKW8/</fr:uri><fr:display-uri>coherent-inverses-ZKW8</fr:display-uri><fr:route>/coherent-inverses-ZKW8/</fr:route><fr:title text="Braid 3D tube diagram">Braid 3D tube diagram</fr:title><fr:taxon>figure</fr:taxon></fr:frontmatter><fr:mainmatter><html:figure><html:img src="/bafkrmiaee7kbsz3ku4z7diudpdbusgmlf4znkc7rbpbwutilk27vxzkgpq.png" height="200px" />
  <html:figcaption>Eckmann-Hilton braid of a scalar with its inverse.</html:figcaption></html:figure></fr:mainmatter></fr:tree><html:p>
  If instead for the first <fr:link href="/coherent-inverses-FHS4/" title="contraction" uri="https://forest.nickx.hu/coherent-inverses-FHS4/" display-uri="coherent-inverses-FHS4" type="local">contraction</fr:link> we had dragged the other way, we could have created the other braid.
  Moreover, dragging directly vertically downwards triggers a third mode of <fr:link href="/coherent-inverses-FHS4/" title="contraction" uri="https://forest.nickx.hu/coherent-inverses-FHS4/" display-uri="coherent-inverses-FHS4" type="local">contraction</fr:link> whereby we cancel <fr:tex display="inline"><![CDATA[s]]></fr:tex> with <fr:tex display="inline"><![CDATA[s^{-1}]]></fr:tex>:
  
  
  
  <html:figure><fr:resource hash="ed6a795f64b0f9e82850ef4d16882be6"><fr:resource-content><html:img src="/ed6a795f64b0f9e82850ef4d16882be6.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[
        \usepackage{amsmath,amssymb}
  \usepackage{mathtools}
  \usepackage{stmaryrd}
  \newcommand{\set}[1]{\left\{#1\right\}}
      \usepackage {tikz}
      \usetikzlibrary {positioning,cd,decorations.pathmorphing}
      
  \definecolor {green}{RGB}{27,158,119}
  \definecolor {orange}{RGB}{217,95,2}
  \definecolor {purple}{RGB}{117,112,179}

      
    ]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
      \begin {tikzpicture}[]
        
        \definecolor{generator-2-2-0-pos}{RGB}{121, 36, 27}
    \definecolor{generator-0-0-0-pos}{RGB}{41, 128, 185}
    \definecolor{generator-1-2-0-pos}{RGB}{192, 57, 43}
    \node (a) {
      \begin{tikzpicture}[baseline=(current bounding box.center)]
        \begin{scope}
          % Background surfaces
          \fill[generator-0-0-0-pos] (0,0) -- (4,0) -- (4,6) -- (0,6) -- (0,0);
          % Wire layers
        \end{scope}
        \fill[generator-1-2-0-pos] (2,2) circle (0.14);
        \fill[generator-2-2-0-pos] (2,4) circle (0.14);
        \draw[->, thick, yellow, shorten <=12px, opacity=0.4] (2,4) -- node[midway, right] {drag} (2,2.5);
      \end{tikzpicture}
    };
    \node[right=2cm of a] (b) {
      \begin{tikzpicture}
      \begin{scope}
        % Background surfaces
        \fill[generator-0-0-0-pos] (0,0) -- (2,0) -- (2,2) -- (0,2) -- (0,0);
        % Wire layers
      \end{scope}
      \end{tikzpicture}
    };
    \draw (a) edge[commutative diagrams/rightsquigarrow] node[above] {contraction} (b);
  
      \end {tikzpicture}
    ]]></fr:resource-source></fr:resource></html:figure>



  This kind of mode can be forced by holding the ⇧ Shift key while dragging.
  We could have also dragged the <fr:tex display="inline"><![CDATA[s]]></fr:tex> point instead of the <fr:tex display="inline"><![CDATA[s^{-1}]]></fr:tex> point to construct these homotopies symmetrically.
</html:p></fr:mainmatter></fr:tree></fr:mainmatter></fr:tree></fr:mainmatter></fr:tree><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2023</fr:year><fr:month>12</fr:month><fr:day>3</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-applications/</fr:uri><fr:display-uri>coherent-inverses-applications</fr:display-uri><fr:route>/coherent-inverses-applications/</fr:route><fr:title text="Applications">Applications</fr:title><fr:taxon>chapter</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
    In this chapter, we explore some of the applications of <html:span tex="\homotopyio{}"><fr:link href="/homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories/" title="homotopy.io: a proof assistant for finitely-presented globular $n$-categories" uri="https://forest.nickx.hu/homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories/" display-uri="homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories" type="local"><html:code>homotopy.io</html:code></fr:link></html:span> as a proof assistant, with a particular focus on proofs that feature the use of higher-dimensional coherences arising from invertibility.
  </html:p><html:p>
    We will present a <fr:link href="/coherent-inverses-OBFZ/" title="zigzag homotopy" uri="https://forest.nickx.hu/coherent-inverses-OBFZ/" display-uri="coherent-inverses-OBFZ" type="local">zigzag homotopy</fr:link> as some Morse projection to 2-dimensional string diagrams; in some sense, this is a proof-relevant version (see next section) of equations between string diagrams in the ordinary diagrammatic calculus, where the legs and tips of each cospan is the singularity equipped with homotopies that witnesses the homotopical information underlying each equality (allowing for this whole <fr:link href="/coherent-inverses-OBFZ/" title="zigzag homotopy" uri="https://forest.nickx.hu/coherent-inverses-OBFZ/" display-uri="coherent-inverses-OBFZ" type="local">zigzag homotopy</fr:link> to be interpreted as a higher cell).
    The proof-irrelevant notion can be recovered by ignoring every even-numbered diagram within a <fr:link href="/coherent-inverses-OBFZ/" title="zigzag homotopy" uri="https://forest.nickx.hu/coherent-inverses-OBFZ/" display-uri="coherent-inverses-OBFZ" type="local">zigzag homotopy</fr:link> (i.e. only looking at the feet of its underlying iterated cospan).
    We elide the information contained within each <fr:link href="/coherent-inverses-XQVM/" title="framed zigzag enriched category" uri="https://forest.nickx.hu/coherent-inverses-XQVM/" display-uri="coherent-inverses-XQVM" type="local">framed zigzag map</fr:link>, but provide links to online proofs in <html:span tex="\homotopyio{}"><fr:link href="/homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories/" title="homotopy.io: a proof assistant for finitely-presented globular $n$-categories" uri="https://forest.nickx.hu/homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories/" display-uri="homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories" type="local"><html:code>homotopy.io</html:code></fr:link></html:span> that allow for an interactive exploration of these higher cells.
  </html:p><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2023</fr:year><fr:month>12</fr:month><fr:day>3</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-applications-equations/</fr:uri><fr:display-uri>coherent-inverses-applications-equations</fr:display-uri><fr:route>/coherent-inverses-applications-equations/</fr:route><fr:title text="Invertible cells as proof-relevant equations">Invertible cells as proof-relevant equations</fr:title><fr:taxon>section</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
      It is well-known that every monoidal category is equivalent to a degenerate (by which we mean that there is exactly one object) bicategory, analogously to how a monoid is equivalent to a one-object category.
      This notion extends further: every braided monoidal category is equivalent to a doubly degenerate tricategory, and every symmetric monoidal category is equivalent to a triply degenerate tetracategory.
      In fact, the generalisation of this phenomenon to <fr:tex display="inline"><![CDATA[n]]></fr:tex>-categories, the <html:em>delooping hypothesis</html:em>, for the ‘Periodic Table of <fr:tex display="inline"><![CDATA[n]]></fr:tex>-categories’ <html:span tid="Figure 2" uid="the-periodic-table-of-n-categories-for-low-dimensions-i-degenerate-categories-and-degenerate-bicategories"><fr:link href="/the-periodic-table-of-n-categories-for-low-dimensions-i-degenerate-categories-and-degenerate-bicategories/" title="The periodic table of n-categories for low dimensions I: degenerate categories and degenerate bicategories" uri="https://forest.nickx.hu/the-periodic-table-of-n-categories-for-low-dimensions-i-degenerate-categories-and-degenerate-bicategories/" display-uri="the-periodic-table-of-n-categories-for-low-dimensions-i-degenerate-categories-and-degenerate-bicategories" type="local">[Figure 2, the-periodic-table-of-n-categories-for-low-dimensions-i-degenerate-categories-and-degenerate-bicategories]</fr:link></html:span> <html:span tid="§ 5" uid="higher-dimensional-algebra-and-topological-quantum-field-theory"><fr:link href="/higher-dimensional-algebra-and-topological-quantum-field-theory/" title="Higher-dimensional Algebra and Topological Quantum Field Theory" uri="https://forest.nickx.hu/higher-dimensional-algebra-and-topological-quantum-field-theory/" display-uri="higher-dimensional-algebra-and-topological-quantum-field-theory" type="local">[§ 5, higher-dimensional-algebra-and-topological-quantum-field-theory]</fr:link></html:span>, allows us to encode the respective string diagrammatic calculi for planar, braided, and symmetric monoidal categories in <html:span tex="\homotopyio{}"><fr:link href="/homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories/" title="homotopy.io: a proof assistant for finitely-presented globular $n$-categories" uri="https://forest.nickx.hu/homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories/" display-uri="homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories" type="local"><html:code>homotopy.io</html:code></fr:link></html:span> as special cases of its <fr:tex display="inline"><![CDATA[n]]></fr:tex>-dimensional string diagrammatic calculus under a 2-dimensional Morse projection by choosing an appropriate <fr:link href="/coherent-inverses-US67/" title="signature and framing" uri="https://forest.nickx.hu/coherent-inverses-US67/" display-uri="coherent-inverses-US67" type="local">signature</fr:link> with only one 0-cell (which is interpreted as the ‘ambient space’) and no 1/2-cells (hence ensuring doubly/triply degenerateness: the unique 1-cells and 2-cells are then given by the <html:em>identity</html:em> on the ambient space, and the <html:em>identity on the identity</html:em> on the ambient space respectively).
    </html:p><html:p>
      The equalities from the string diagrammatic calculus of planar/braided/symmetric monoidal categories are <html:em>proof-irrelevant</html:em>, in the sense that a well-typed (satisfying globularity) equation between string diagrams either holds or does not.
      In <html:span tex="\homotopyio{}"><fr:link href="/homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories/" title="homotopy.io: a proof assistant for finitely-presented globular $n$-categories" uri="https://forest.nickx.hu/homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories/" display-uri="homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories" type="local"><html:code>homotopy.io</html:code></fr:link></html:span>, these are instead represented as (<html:strong>not necessarily unique</html:strong>) 3/4/5-cells that then witness the equality as a higher cell.
      As equations, it is natural to expect these cells to be coherently invertible.
    </html:p><html:p>
      A severe limitation of the previous iteration of the tool, which did not support invertible generators of any form, was that this desired behaviour could only be emulated by manually inputting each equation as a directed equality, and then furthermore any higher coherences would also be subject to manual input.
      For example, for some equality of string diagrams <fr:tex display="inline"><![CDATA[D = D^\prime ]]></fr:tex>, the user would have to manually input a cell witnessing <fr:tex display="inline"><![CDATA[D \to  D^\prime ]]></fr:tex>, and then its symmetric (inverse) cell <fr:tex display="inline"><![CDATA[D^\prime  \to  D]]></fr:tex>; then, if the user wished to use the fact that rewriting along <fr:tex display="inline"><![CDATA[D \to  D^\prime  \to  D]]></fr:tex> should be equivalent to the ‘do-nothing’ rewrite, that data then itself needs to be input as a cell of one dimension higher, and so on ad infinitum.
      Our new version rectifies this issue.
    </html:p><html:p>
      We exemplify this with a workspace containing a Frobenius algebra, in the planar string diagrammatic calculus viewed this way.
      Letting <fr:tex display="inline"><![CDATA[x]]></fr:tex> be the 0-cell representing the ambient space, and <fr:tex display="inline"><![CDATA[f\colon  x \to  x]]></fr:tex> be the 1-cell representing the carrier (the ‘wire’ type) for the Frobenius algebra, we can construct the following 2-cells:
      <fr:tex display="block"><![CDATA[
        \begin {aligned}
        m&\colon  f \circ  f \Rightarrow  f, &\quad  u&\colon  
  \text {id}_{x}
 \Rightarrow  f, \\
        m^\prime &\colon  f \Rightarrow  f \circ  f, &\quad  u^\prime &\colon  f \Rightarrow  
  \text {id}_{x}
,
        \end {aligned}
      ]]></fr:tex>
      each of which represents the planar string diagram associated to the monoid multiplication, unit, comultiplication, and counit respectively.
      Equations that witness the algebraic structure, e.g. that the monoid multiplication is associative, that the monoid and comonoid interact to witness the Frobenius laws, etc., are then represented as invertible 3-cells.
    </html:p><html:p>
      All in all, this <fr:link href="/coherent-inverses-US67/" title="signature and framing" uri="https://forest.nickx.hu/coherent-inverses-US67/" display-uri="coherent-inverses-US67" type="local">signature</fr:link> as a whole is presented in <html:span tex="\homotopyio{}"><fr:link href="/homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories/" title="homotopy.io: a proof assistant for finitely-presented globular $n$-categories" uri="https://forest.nickx.hu/homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories/" display-uri="homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories" type="local"><html:code>homotopy.io</html:code></fr:link></html:span> as the <fr:link href="/coherent-inverses-7WXL/" title="Frobenius signature" uri="https://forest.nickx.hu/coherent-inverses-7WXL/" display-uri="coherent-inverses-7WXL" type="local">figure <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-7WXL/" display-uri="coherent-inverses-7WXL" /></fr:link> (using folders to group the equations).
    </html:p><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2025</fr:year><fr:month>1</fr:month><fr:day>8</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-7WXL/</fr:uri><fr:display-uri>coherent-inverses-7WXL</fr:display-uri><fr:route>/coherent-inverses-7WXL/</fr:route><fr:title text="Frobenius signature">Frobenius <fr:link href="/coherent-inverses-US67/" title="signature and framing" uri="https://forest.nickx.hu/coherent-inverses-US67/" display-uri="coherent-inverses-US67" type="local">signature</fr:link></fr:title><fr:taxon>figure</fr:taxon></fr:frontmatter><fr:mainmatter><html:figure><html:img src="/bafkrmie5sqywfbvf6at76ffaawmjhotdo7himfukdgpxs6xhszdkz5lorm.png" width=" 50%" />
  <html:figcaption><html:span tex="\homotopyio{}"><fr:link href="/homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories/" title="homotopy.io: a proof assistant for finitely-presented globular $n$-categories" uri="https://forest.nickx.hu/homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories/" display-uri="homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories" type="local"><html:code>homotopy.io</html:code></fr:link></html:span> <fr:link href="/coherent-inverses-US67/" title="signature and framing" uri="https://forest.nickx.hu/coherent-inverses-US67/" display-uri="coherent-inverses-US67" type="local">signature</fr:link> for the Frobenius algebra.</html:figcaption></html:figure></fr:mainmatter></fr:tree><html:p>
      For instance, using the fact that the equations are represented by invertible cells, it is possible to derive the Frobenius equation:
      <html:figure><fr:resource hash="446a577f8388d0e9d3c2abf1eb27173b"><fr:resource-content><html:img src="/446a577f8388d0e9d3c2abf1eb27173b.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[
    \usepackage {adjustbox}
    \usepackage {amsmath,amssymb}
    \usepackage {tikz}
    \usetikzlibrary {cd}
  ]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
    $
                    \begin{adjustbox}{max width=0.3\textwidth}
          \begin{tikzpicture}[baseline=(current bounding box.center)]
          \definecolor{generator-1-1-0-pos}{RGB}{192, 57, 43}
          \definecolor{generator-4-2-0-pos}{RGB}{39, 174, 96}
          \definecolor{generator-2-2-0-pos}{RGB}{243, 156, 18}
          \definecolor{generator-0-0-0-pos}{RGB}{41, 128, 185}
          \begin{scope}
          % Background surfaces
          \fill[generator-0-0-0-pos] (0,0) -- (8,0) -- (8,6) -- (0,6) -- (0,0);
          % Wire layers
          \draw[color=generator-1-1-0-pos, line width=5pt](2,0) -- (2,3) .. controls (2,3.8) and (2.4,4) .. (3,4) -- (3,6)(5,0) -- (5,2) .. controls (4.4,2) and (4,2.2) .. (4,3) .. controls (4,3.8) and (3.6,4) .. (3,4)(5,2) .. controls (5.6,2) and (6,2.2) .. (6,3) -- (6,6);
          \end{scope}
          \fill[generator-4-2-0-pos] (5,2) circle (0.14);
          \fill[generator-2-2-0-pos] (3,4) circle (0.14);
          \end{tikzpicture}
          \end{adjustbox}
          =
          \begin{adjustbox}{max width=0.3\textwidth}
          \begin{tikzpicture}[baseline=(current bounding box.center)]
          \definecolor{generator-1-1-0-pos}{RGB}{192, 57, 43}
          \definecolor{generator-4-2-0-pos}{RGB}{39, 174, 96}
          \definecolor{generator-2-2-0-pos}{RGB}{243, 156, 18}
          \definecolor{generator-0-0-0-pos}{RGB}{41, 128, 185}
          \begin{scope}
          % Background surfaces
          \fill[generator-0-0-0-pos] (0,0) -- (8,0) -- (8,6) -- (0,6) -- (0,0);
          % Wire layers
          \draw[color=generator-1-1-0-pos, line width=5pt](3,0) -- (3,2) .. controls (2.4,2) and (2,2.2) .. (2,3) -- (2,6)(6,0) -- (6,3) .. controls (6,3.8) and (5.6,4) .. (5,4) -- (5,6)(3,2) .. controls (3.6,2) and (4,2.2) .. (4,3) .. controls (4,3.8) and (4.4,4) .. (5,4);
          \end{scope}
          \fill[generator-4-2-0-pos] (3,2) circle (0.14);
          \fill[generator-2-2-0-pos] (5,4) circle (0.14);
          \end{tikzpicture}
          \end{adjustbox}
        $
  ]]></fr:resource-source></fr:resource></html:figure>
      despite this not being explicitly represented in the <fr:link href="/coherent-inverses-US67/" title="signature and framing" uri="https://forest.nickx.hu/coherent-inverses-US67/" display-uri="coherent-inverses-US67" type="local">signature</fr:link>, via the composite <fr:link href="/coherent-inverses-OBFZ/" title="zigzag homotopy" uri="https://forest.nickx.hu/coherent-inverses-OBFZ/" display-uri="coherent-inverses-OBFZ" type="local">zigzag homotopy</fr:link>:
      <fr:resource hash="7ad12d8010086cb6e81c3907af71cd7c"><fr:resource-content><html:img src="/7ad12d8010086cb6e81c3907af71cd7c.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[
    \usepackage {adjustbox}
    \usepackage {amsmath,amssymb}
    \usepackage {tikz}
    \usetikzlibrary {cd}
  ]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
    $
                \begin{adjustbox}{max width=0.3\textwidth}
        \begin{tikzpicture}[baseline=(current bounding box.center)]
        \definecolor{generator-1-1-0-pos}{RGB}{192, 57, 43}
        \definecolor{generator-4-2-0-pos}{RGB}{39, 174, 96}
        \definecolor{generator-2-2-0-pos}{RGB}{243, 156, 18}
        \definecolor{generator-0-0-0-pos}{RGB}{41, 128, 185}
        \begin{scope}
        % Background surfaces
        \fill[generator-0-0-0-pos] (0,0) -- (8,0) -- (8,6) -- (0,6) -- (0,0);
        % Wire layers
        \draw[color=generator-1-1-0-pos, line width=5pt](2,0) -- (2,3) .. controls (2,3.8) and (2.4,4) .. (3,4) -- (3,6)(5,0) -- (5,2) .. controls (4.4,2) and (4,2.2) .. (4,3) .. controls (4,3.8) and (3.6,4) .. (3,4)(5,2) .. controls (5.6,2) and (6,2.2) .. (6,3) -- (6,6);
        \end{scope}
        \fill[generator-4-2-0-pos] (5,2) circle (0.14);
        \fill[generator-2-2-0-pos] (3,4) circle (0.14);
        \end{tikzpicture}
        \end{adjustbox}
        \to
        \begin{adjustbox}{max width=0.3\textwidth}
        \begin{tikzpicture}[baseline=(current bounding box.center)]
        \definecolor{generator-0-0-0-pos}{RGB}{41, 128, 185}
        \definecolor{generator-1-1-0-pos}{RGB}{192, 57, 43}
        \definecolor{generator-12-3-0-pos}{RGB}{246, 245, 244}
        \begin{scope}
        % Background surfaces
        \fill[generator-0-0-0-pos] (0,0) -- (6,0) -- (6,4) -- (0,4) -- (0,0);
        % Wire layers
        \draw[color=generator-1-1-0-pos, line width=5pt](2,0) -- (2,1) .. controls (2,1.8) and (2.4,2) .. (3,2) .. controls (2.4,2) and (2,2.2) .. (2,3) -- (2,4)(4,0) -- (4,1) .. controls (4,1.8) and (3.6,2) .. (3,2) .. controls (3.6,2) and (4,2.2) .. (4,3) -- (4,4);
        \end{scope}
        \fill[generator-12-3-0-pos] (3,2) circle (0.14);
        \end{tikzpicture}
        \end{adjustbox}
        \leftarrow
        \begin{adjustbox}{max width=0.3\textwidth}
        \begin{tikzpicture}[baseline=(current bounding box.center)]
        \definecolor{generator-1-1-0-pos}{RGB}{192, 57, 43}
        \definecolor{generator-2-2-0-pos}{RGB}{243, 156, 18}
        \definecolor{generator-4-2-0-pos}{RGB}{39, 174, 96}
        \definecolor{generator-0-0-0-pos}{RGB}{41, 128, 185}
        \begin{scope}
        % Background surfaces
        \fill[generator-0-0-0-pos] (0,0) -- (6,0) -- (6,6) -- (0,6) -- (0,0);
        % Wire layers
        \draw[color=generator-1-1-0-pos, line width=5pt](2,0) -- (2,1) .. controls (2,1.8) and (2.4,2) .. (3,2) -- (3,4) .. controls (2.4,4) and (2,4.2) .. (2,5) -- (2,6)(4,0) -- (4,1) .. controls (4,1.8) and (3.6,2) .. (3,2)(3,4) .. controls (3.6,4) and (4,4.2) .. (4,5) -- (4,6);
        \end{scope}
        \fill[generator-2-2-0-pos] (3,2) circle (0.14);
        \fill[generator-4-2-0-pos] (3,4) circle (0.14);
        \end{tikzpicture}
        \end{adjustbox}
        \to
        \begin{adjustbox}{max width=0.3\textwidth}
        \begin{tikzpicture}[baseline=(current bounding box.center)]
        \definecolor{generator-0-0-0-pos}{RGB}{41, 128, 185}
        \definecolor{generator-1-1-0-pos}{RGB}{192, 57, 43}
        \definecolor{generator-13-3-0-neg}{RGB}{184, 176, 168}
        \begin{scope}
        % Background surfaces
        \fill[generator-0-0-0-pos] (0,0) -- (6,0) -- (6,4) -- (0,4) -- (0,0);
        % Wire layers
        \draw[color=generator-1-1-0-pos, line width=5pt](2,0) -- (2,1) .. controls (2,1.8) and (2.4,2) .. (3,2) .. controls (2.4,2) and (2,2.2) .. (2,3) -- (2,4)(4,0) -- (4,1) .. controls (4,1.8) and (3.6,2) .. (3,2) .. controls (3.6,2) and (4,2.2) .. (4,3) -- (4,4);
        \end{scope}
        \fill[generator-13-3-0-neg] (3,2) circle (0.14);
        \end{tikzpicture}
        \end{adjustbox}
        \leftarrow
        \begin{adjustbox}{max width=0.3\textwidth}
        \begin{tikzpicture}[baseline=(current bounding box.center)]
        \definecolor{generator-1-1-0-pos}{RGB}{192, 57, 43}
        \definecolor{generator-4-2-0-pos}{RGB}{39, 174, 96}
        \definecolor{generator-2-2-0-pos}{RGB}{243, 156, 18}
        \definecolor{generator-0-0-0-pos}{RGB}{41, 128, 185}
        \begin{scope}
        % Background surfaces
        \fill[generator-0-0-0-pos] (0,0) -- (8,0) -- (8,6) -- (0,6) -- (0,0);
        % Wire layers
        \draw[color=generator-1-1-0-pos, line width=5pt](3,0) -- (3,2) .. controls (2.4,2) and (2,2.2) .. (2,3) -- (2,6)(6,0) -- (6,3) .. controls (6,3.8) and (5.6,4) .. (5,4) -- (5,6)(3,2) .. controls (3.6,2) and (4,2.2) .. (4,3) .. controls (4,3.8) and (4.4,4) .. (5,4);
        \end{scope}
        \fill[generator-4-2-0-pos] (3,2) circle (0.14);
        \fill[generator-2-2-0-pos] (5,4) circle (0.14);
        \end{tikzpicture}
        \end{adjustbox}
      $
  ]]></fr:resource-source></fr:resource>
      The first <fr:link href="/coherent-inverses-OBFZ/" title="zigzag homotopy" uri="https://forest.nickx.hu/coherent-inverses-OBFZ/" display-uri="coherent-inverses-OBFZ" type="local">zigzag homotopy</fr:link> is the first Frobenius law, and the second <fr:link href="/coherent-inverses-OBFZ/" title="zigzag homotopy" uri="https://forest.nickx.hu/coherent-inverses-OBFZ/" display-uri="coherent-inverses-OBFZ" type="local">zigzag homotopy</fr:link> is the <html:em>inverse</html:em> of the second Frobenius law.
    </html:p><html:p>
      Link to online proof: <fr:link href="https://beta.homotopy.io/p/2412.00003" type="external">https://beta.homotopy.io/p/2412.00003</fr:link>.
    </html:p></fr:mainmatter></fr:tree><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2023</fr:year><fr:month>12</fr:month><fr:day>3</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-applications-catastrophes/</fr:uri><fr:display-uri>coherent-inverses-applications-catastrophes</fr:display-uri><fr:route>/coherent-inverses-applications-catastrophes/</fr:route><fr:title text="Higher-dimensional catastrophes arising from a dualisable 1-morphism">Higher-dimensional catastrophes arising from a dualisable 1-morphism</fr:title><fr:taxon>section</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
      For this section, we consider the <fr:link href="/coherent-inverses-US67/" title="signature and framing" uri="https://forest.nickx.hu/coherent-inverses-US67/" display-uri="coherent-inverses-US67" type="local">signature</fr:link> containing two 0-cells, <fr:tex display="inline"><![CDATA[x]]></fr:tex> and <fr:tex display="inline"><![CDATA[y]]></fr:tex>, and a single dualisable 1-cell <fr:tex display="inline"><![CDATA[f\colon  x \to  y]]></fr:tex>.
      Such a <fr:link href="/coherent-inverses-US67/" title="signature and framing" uri="https://forest.nickx.hu/coherent-inverses-US67/" display-uri="coherent-inverses-US67" type="local">signature</fr:link> presents a theory suited to the description of higher-categorical analogues of adjunction, given that a dualisable 1-cell in a 2-category is a straightforward generalisation of the concept of adjoint functors (taking 1-cells to be functors in the 2-category <fr:tex display="inline"><![CDATA[\mathbf {Cat}]]></fr:tex>, where a choice of duals is given by choosing a left/right adjoint for a functor).
    </html:p><html:p>
      In <html:span tex="\homotopyio{}"><fr:link href="/homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories/" title="homotopy.io: a proof assistant for finitely-presented globular $n$-categories" uri="https://forest.nickx.hu/homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories/" display-uri="homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories" type="local"><html:code>homotopy.io</html:code></fr:link></html:span>, we emulate the dualisability of <fr:tex display="inline"><![CDATA[f]]></fr:tex> by making it invertible and restricting ourselves to only using the snake equations of <fr:link href="/coherent-inverses-G29R/" title="Invertible 1-morphism coherences" uri="https://forest.nickx.hu/coherent-inverses-G29R/" display-uri="coherent-inverses-G29R" type="local">figure <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-G29R/" display-uri="coherent-inverses-G29R" /></fr:link> as opposed to all the 3-cells arising from the coherent invertibility of <fr:tex display="inline"><![CDATA[f]]></fr:tex>, as invertibility implies dualisability.
      Informally, this is justified by the fact that every equivalence can be viewed as an <html:em>adjoint</html:em> equivalence, which is conjecturally expected to generalise to arbitrary dimensions.
      The coherence of this invertibility then suffices to generate the coherences expected for so-called ‘full dualisability’, i.e. that the structure maps of the duality unit and counit also admit adjoints in the dimension above, and so on up to arbitrary <fr:tex display="inline"><![CDATA[n]]></fr:tex>-dimensions.
    </html:p><html:p>
      For instance, the invertible <fr:tex display="inline"><![CDATA[f]]></fr:tex> admits the invertible 3-cells as in <fr:link href="/coherent-inverses-G29R/" title="Invertible 1-morphism coherences" uri="https://forest.nickx.hu/coherent-inverses-G29R/" display-uri="coherent-inverses-G29R" type="local">figure <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-G29R/" display-uri="coherent-inverses-G29R" /></fr:link>.
      If <fr:tex display="inline"><![CDATA[f]]></fr:tex> were dualisable but not invertible, then the 3-cells in the first row would be missing.
      We expand on this in the following section.
    </html:p><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2025</fr:year><fr:month>1</fr:month><fr:day>8</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-G29R/</fr:uri><fr:display-uri>coherent-inverses-G29R</fr:display-uri><fr:route>/coherent-inverses-G29R/</fr:route><fr:title text="Invertible 1-morphism coherences">Invertible 1-morphism coherences</fr:title><fr:taxon>figure</fr:taxon></fr:frontmatter><fr:mainmatter><html:figure><fr:resource hash="6928a1f6fb36db126b661a800e295e35"><fr:resource-content><html:img src="/6928a1f6fb36db126b661a800e295e35.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[
    \usepackage {adjustbox}
    \usepackage {amsmath,amssymb}
    \usepackage {tikz}
    \usetikzlibrary {cd}
  ]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
    $
        \begin{gathered}
      \begin{adjustbox}{max width=0.3\textwidth}
      \begin{tikzpicture}[baseline=(current bounding box.center)]
      \definecolor{generator-0-0-0-pos}{RGB}{41, 128, 185}
      \begin{scope}
      % Background surfaces
      \fill[generator-0-0-0-pos] (0,0) -- (2,0) -- (2,2) -- (0,2) -- (0,0);
      % Wire layers
      \end{scope}
      \end{tikzpicture}
      \end{adjustbox}
      \cong
      \begin{adjustbox}{max width=0.3\textwidth}
      \begin{tikzpicture}[baseline=(current bounding box.center)]
      \definecolor{generator-1-0-0-pos}{RGB}{192, 57, 43}
      \definecolor{generator-2-1-0-neg}{RGB}{166, 105, 8}
      \definecolor{generator-2-1-0-pos}{RGB}{243, 156, 18}
      \definecolor{generator-0-0-0-pos}{RGB}{41, 128, 185}
      \definecolor{generator-2-1-1-zer}{RGB}{251, 221, 173}
      \begin{scope}
      % Background surfaces
      \fill[generator-0-0-0-pos] (0,0) -- (6,0) -- (6,6) -- (0,6) -- (0,0)(3,2) .. controls (2.4,2) and (2,2.2) .. (2,3) .. controls (2,3.8) and (2.4,4) .. (3,4) .. controls (3.6,4) and (4,3.8) .. (4,3) .. controls (4,2.2) and (3.6,2) .. (3,2);
      \fill[generator-1-0-0-pos] (2,3) .. controls (2,2.2) and (2.4,2) .. (3,2) .. controls (3.6,2) and (4,2.2) .. (4,3) .. controls (4,3.8) and (3.6,4) .. (3,4) .. controls (2.4,4) and (2,3.8) .. (2,3);
      % Wire layers
      \draw[color=generator-2-1-0-neg, line width=5pt](3,2) .. controls (3.6,2) and (4,2.2) .. (4,3) .. controls (4,3.8) and (3.6,4) .. (3,4);
      \draw[color=generator-2-1-0-pos, line width=5pt](3,2) .. controls (2.4,2) and (2,2.2) .. (2,3) .. controls (2,3.8) and (2.4,4) .. (3,4);
      \end{scope}
      \fill[generator-2-1-1-zer] (3,2) circle (0.14);
      \fill[generator-2-1-1-zer] (3,4) circle (0.14);
      \end{tikzpicture}
      \end{adjustbox}
      \qquad
      \begin{adjustbox}{max width=0.3\textwidth}
      \begin{tikzpicture}[baseline=(current bounding box.center)]
      \definecolor{generator-1-0-0-pos}{RGB}{192, 57, 43}
      \definecolor{generator-2-1-0-neg}{RGB}{166, 105, 8}
      \definecolor{generator-2-1-0-pos}{RGB}{243, 156, 18}
      \definecolor{generator-0-0-0-pos}{RGB}{41, 128, 185}
      \begin{scope}
      % Background surfaces
      \fill[generator-0-0-0-pos] (0,0) -- (2,0) -- (2,2) -- (0,2) -- (0,0)(4,0) -- (6,0) -- (6,2) -- (4,2) -- (4,0);
      \fill[generator-1-0-0-pos] (2,0) -- (4,0) -- (4,2) -- (2,2) -- (2,0);
      % Wire layers
      \draw[color=generator-2-1-0-neg, line width=5pt](4,0) -- (4,2);
      \draw[color=generator-2-1-0-pos, line width=5pt](2,0) -- (2,2);
      \end{scope}
      \end{tikzpicture}
      \end{adjustbox}
      \cong
      \begin{adjustbox}{max width=0.3\textwidth}
      \begin{tikzpicture}[baseline=(current bounding box.center)]
      \definecolor{generator-1-0-0-pos}{RGB}{192, 57, 43}
      \definecolor{generator-2-1-0-neg}{RGB}{166, 105, 8}
      \definecolor{generator-2-1-0-pos}{RGB}{243, 156, 18}
      \definecolor{generator-0-0-0-pos}{RGB}{41, 128, 185}
      \definecolor{generator-2-1-1-zer}{RGB}{251, 221, 173}
      \begin{scope}
      % Background surfaces
      \fill[generator-0-0-0-pos] (0,0) -- (2,0) -- (2,1) .. controls (2,1.8) and (2.4,2) .. (3,2) .. controls (3.6,2) and (4,1.8) .. (4,1) -- (4,0) -- (6,0) -- (6,6) -- (4,6) -- (4,5) .. controls (4,4.2) and (3.6,4) .. (3,4) .. controls (2.4,4) and (2,4.2) .. (2,5) -- (2,6) -- (0,6) -- (0,0);
      \fill[generator-1-0-0-pos] (2,0) -- (4,0) -- (4,1) .. controls (4,1.8) and (3.6,2) .. (3,2) .. controls (2.4,2) and (2,1.8) .. (2,1) -- (2,0)(2,5) .. controls (2,4.2) and (2.4,4) .. (3,4) .. controls (3.6,4) and (4,4.2) .. (4,5) -- (4,6) -- (2,6) -- (2,5);
      % Wire layers
      \draw[color=generator-2-1-0-neg, line width=5pt](4,0) -- (4,1) .. controls (4,1.8) and (3.6,2) .. (3,2)(3,4) .. controls (3.6,4) and (4,4.2) .. (4,5) -- (4,6);
      \draw[color=generator-2-1-0-pos, line width=5pt](2,0) -- (2,1) .. controls (2,1.8) and (2.4,2) .. (3,2)(3,4) .. controls (2.4,4) and (2,4.2) .. (2,5) -- (2,6);
      \end{scope}
      \fill[generator-2-1-1-zer] (3,2) circle (0.14);
      \fill[generator-2-1-1-zer] (3,4) circle (0.14);
      \end{tikzpicture}
      \end{adjustbox}
      \\
      \begin{adjustbox}{max width=0.3\textwidth}
      \begin{tikzpicture}[baseline=(current bounding box.center)]
      \definecolor{generator-1-0-0-pos}{RGB}{192, 57, 43}
      \definecolor{generator-2-1-0-neg}{RGB}{166, 105, 8}
      \definecolor{generator-2-1-0-pos}{RGB}{243, 156, 18}
      \definecolor{generator-0-0-0-pos}{RGB}{41, 128, 185}
      \definecolor{generator-2-1-1-zer}{RGB}{251, 221, 173}
      \begin{scope}
      % Background surfaces
      \fill[generator-0-0-0-pos] (0,0) -- (2,0) -- (2,3) .. controls (2,3.8) and (2.4,4) .. (3,4) .. controls (3.6,4) and (4,3.8) .. (4,3) .. controls (4,2.2) and (4.4,2) .. (5,2) .. controls (5.6,2) and (6,2.2) .. (6,3) -- (6,6) -- (0,6) -- (0,0);
      \fill[generator-1-0-0-pos] (2,0) -- (8,0) -- (8,6) -- (6,6) -- (6,3) .. controls (6,2.2) and (5.6,2) .. (5,2) .. controls (4.4,2) and (4,2.2) .. (4,3) .. controls (4,3.8) and (3.6,4) .. (3,4) .. controls (2.4,4) and (2,3.8) .. (2,3) -- (2,0);
      % Wire layers
      \draw[color=generator-2-1-0-neg, line width=5pt](5,2) .. controls (4.4,2) and (4,2.2) .. (4,3) .. controls (4,3.8) and (3.6,4) .. (3,4);
      \draw[color=generator-2-1-0-pos, line width=5pt](2,0) -- (2,3) .. controls (2,3.8) and (2.4,4) .. (3,4)(5,2) .. controls (5.6,2) and (6,2.2) .. (6,3) -- (6,6);
      \end{scope}
      \fill[generator-2-1-1-zer] (5,2) circle (0.14);
      \fill[generator-2-1-1-zer] (3,4) circle (0.14);
      \end{tikzpicture}
      \end{adjustbox}
      \cong
      \begin{adjustbox}{max width=0.3\textwidth}
      \begin{tikzpicture}[baseline=(current bounding box.center)]
      \definecolor{generator-0-0-0-pos}{RGB}{41, 128, 185}
      \definecolor{generator-1-0-0-pos}{RGB}{192, 57, 43}
      \definecolor{generator-2-1-0-pos}{RGB}{243, 156, 18}
      \begin{scope}
      % Background surfaces
      \fill[generator-0-0-0-pos] (0,0) -- (2,0) -- (2,2) -- (0,2) -- (0,0);
      \fill[generator-1-0-0-pos] (2,0) -- (4,0) -- (4,2) -- (2,2) -- (2,0);
      % Wire layers
      \draw[color=generator-2-1-0-pos, line width=5pt](2,0) -- (2,2);
      \end{scope}
      \end{tikzpicture}
      \end{adjustbox}
      \cong
      \begin{adjustbox}{max width=0.3\textwidth}
      \begin{tikzpicture}[baseline=(current bounding box.center)]
      \definecolor{generator-1-0-0-pos}{RGB}{192, 57, 43}
      \definecolor{generator-2-1-0-neg}{RGB}{166, 105, 8}
      \definecolor{generator-2-1-0-pos}{RGB}{243, 156, 18}
      \definecolor{generator-0-0-0-pos}{RGB}{41, 128, 185}
      \definecolor{generator-2-1-1-zer}{RGB}{251, 221, 173}
      \begin{scope}
      % Background surfaces
      \fill[generator-0-0-0-pos] (0,0) -- (6,0) -- (6,3) .. controls (6,3.8) and (5.6,4) .. (5,4) .. controls (4.4,4) and (4,3.8) .. (4,3) .. controls (4,2.2) and (3.6,2) .. (3,2) .. controls (2.4,2) and (2,2.2) .. (2,3) -- (2,6) -- (0,6) -- (0,0);
      \fill[generator-1-0-0-pos] (6,0) -- (8,0) -- (8,6) -- (2,6) -- (2,3) .. controls (2,2.2) and (2.4,2) .. (3,2) .. controls (3.6,2) and (4,2.2) .. (4,3) .. controls (4,3.8) and (4.4,4) .. (5,4) .. controls (5.6,4) and (6,3.8) .. (6,3) -- (6,0);
      % Wire layers
      \draw[color=generator-2-1-0-neg, line width=5pt](3,2) .. controls (3.6,2) and (4,2.2) .. (4,3) .. controls (4,3.8) and (4.4,4) .. (5,4);
      \draw[color=generator-2-1-0-pos, line width=5pt](6,0) -- (6,3) .. controls (6,3.8) and (5.6,4) .. (5,4)(3,2) .. controls (2.4,2) and (2,2.2) .. (2,3) -- (2,6);
      \end{scope}
      \fill[generator-2-1-1-zer] (3,2) circle (0.14);
      \fill[generator-2-1-1-zer] (5,4) circle (0.14);
      \end{tikzpicture}
      \end{adjustbox}
    \end{gathered}
  $
  ]]></fr:resource-source></fr:resource>
  <html:figcaption>Coherence 3-cells arising from an invertible 1-morphism.</html:figcaption></html:figure></fr:mainmatter></fr:tree><html:p>
      We demonstrate that <html:span tex="\homotopyio{}"><fr:link href="/homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories/" title="homotopy.io: a proof assistant for finitely-presented globular $n$-categories" uri="https://forest.nickx.hu/homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories/" display-uri="homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories" type="local"><html:code>homotopy.io</html:code></fr:link></html:span> can automatically derive some of these higher-dimensional coherences, which we call ‘catastrophes’ (borrowing terminology from <fr:link href="/structural-stability-and-morphogenesis-an-outline-of-a-general-theory-of-models/" title="Structural stability and morphogenesis: an outline of a general theory of models" uri="https://forest.nickx.hu/structural-stability-and-morphogenesis-an-outline-of-a-general-theory-of-models/" display-uri="structural-stability-and-morphogenesis-an-outline-of-a-general-theory-of-models" type="local">Catastrophe Theory</fr:link>).
    </html:p><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2023</fr:year><fr:month>12</fr:month><fr:day>3</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-applications-catastrophes-snake/</fr:uri><fr:display-uri>coherent-inverses-applications-catastrophes-snake</fr:display-uri><fr:route>/coherent-inverses-applications-catastrophes-snake/</fr:route><fr:title text="Snake coherence">Snake coherence</fr:title><fr:taxon>section</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
        A snake coherence on <fr:tex display="inline"><![CDATA[f]]></fr:tex> is a 3-dimensional coherence that asserts that the <fr:link href="/coherent-inverses-OBFZ/" title="zigzag homotopy" uri="https://forest.nickx.hu/coherent-inverses-OBFZ/" display-uri="coherent-inverses-OBFZ" type="local">zigzag homotopy</fr:link>:
        <html:figure><fr:resource hash="97a3bfe2fcb0945ef7ca9d7efe004db6"><fr:resource-content><html:img src="/97a3bfe2fcb0945ef7ca9d7efe004db6.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[\usepackage {adjustbox,tikz}]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
                        \begin{tabular}{c @{{}$\to${}} c @{{}$\leftarrow${}} c}
            \begin{adjustbox}{max width=0.3\textwidth}
            \begin{tikzpicture}[baseline=(current bounding box.center)]
            \definecolor{generator-2-1-0-pos}{RGB}{243, 156, 18}
            \definecolor{generator-0-0-0-pos}{RGB}{41, 128, 185}
            \definecolor{generator-1-0-0-pos}{RGB}{192, 57, 43}
            \begin{scope}
            % Background surfaces
            % Wire layers
            \draw[color=generator-0-0-0-pos, line width=5pt](0.5,0) -- (0.5,2);
            \draw[color=generator-1-0-0-pos, line width=5pt](0.5,2) -- (0.5,4);
            \end{scope}
            \fill[generator-2-1-0-pos] (0.5,2) circle (0.14);
            \end{tikzpicture}
            \end{adjustbox}
            &
            \begin{adjustbox}{max width=0.3\textwidth}
            \begin{tikzpicture}[baseline=(current bounding box.center)]
            \definecolor{generator-1-0-0-pos}{RGB}{192, 57, 43}
            \definecolor{generator-2-1-0-pos}{RGB}{243, 156, 18}
            \definecolor{generator-0-0-0-pos}{RGB}{41, 128, 185}
            \definecolor{generator-2-1-0-zer}{RGB}{249, 205, 135}
            \begin{scope}
            % Background surfaces
            % Wire layers
            \draw[color=generator-0-0-0-pos, line width=5pt](0.5,0) -- (0.5,4);
            \draw[color=generator-1-0-0-pos, line width=5pt](0.5,4) -- (0.5,6);
            \end{scope}
            \fill[generator-2-1-0-zer] (0.5,2) circle (0.14);
            \fill[generator-2-1-0-pos] (0.5,4) circle (0.14);
            \end{tikzpicture}
            \end{adjustbox}
            &
            \begin{adjustbox}{max width=0.3\textwidth}
            \begin{tikzpicture}[baseline=(current bounding box.center)]
            \definecolor{generator-1-0-0-pos}{RGB}{192, 57, 43}
            \definecolor{generator-2-1-0-pos}{RGB}{243, 156, 18}
            \definecolor{generator-2-1-0-neg}{RGB}{166, 105, 8}
            \definecolor{generator-0-0-0-pos}{RGB}{41, 128, 185}
            \begin{scope}
            % Background surfaces
            % Wire layers
            \draw[color=generator-0-0-0-pos, line width=5pt](0.5,0) -- (0.5,2)(0.5,4) -- (0.5,6);
            \draw[color=generator-1-0-0-pos, line width=5pt](0.5,2) -- (0.5,4)(0.5,6) -- (0.5,8);
            \end{scope}
            \fill[generator-2-1-0-pos] (0.5,2) circle (0.14);
            \fill[generator-2-1-0-neg] (0.5,4) circle (0.14);
            \fill[generator-2-1-0-pos] (0.5,6) circle (0.14);
            \end{tikzpicture}
            \end{adjustbox}
            \\
            &
            \begin{adjustbox}{max width=0.3\textwidth}
            \begin{tikzpicture}[baseline=(current bounding box.center)]
            \definecolor{generator-1-0-0-pos}{RGB}{192, 57, 43}
            \definecolor{generator-2-1-0-pos}{RGB}{243, 156, 18}
            \definecolor{generator-0-0-0-pos}{RGB}{41, 128, 185}
            \definecolor{generator-2-1-0-zer}{RGB}{249, 205, 135}
            \begin{scope}
            % Background surfaces
            % Wire layers
            \draw[color=generator-0-0-0-pos, line width=5pt](0.5,0) -- (0.5,2);
            \draw[color=generator-1-0-0-pos, line width=5pt](0.5,2) -- (0.5,6);
            \end{scope}
            \fill[generator-2-1-0-pos] (0.5,2) circle (0.14);
            \fill[generator-2-1-0-zer] (0.5,4) circle (0.14);
            \end{tikzpicture}
            \end{adjustbox}
            &
            \begin{adjustbox}{max width=0.3\textwidth}
            \begin{tikzpicture}[baseline=(current bounding box.center)]
            \definecolor{generator-2-1-0-pos}{RGB}{243, 156, 18}
            \definecolor{generator-0-0-0-pos}{RGB}{41, 128, 185}
            \definecolor{generator-1-0-0-pos}{RGB}{192, 57, 43}
            \begin{scope}
            % Background surfaces
            % Wire layers
            \draw[color=generator-0-0-0-pos, line width=5pt](0.5,0) -- (0.5,2);
            \draw[color=generator-1-0-0-pos, line width=5pt](0.5,2) -- (0.5,4);
            \end{scope}
            \fill[generator-2-1-0-pos] (0.5,2) circle (0.14);
            \end{tikzpicture}
            \end{adjustbox}
            \end{tabular}
          ]]></fr:resource-source></fr:resource></html:figure>
        is equivalent to the identity 2-cell.
      </html:p><html:p>
        Interpreted equationally, this says that the sequence of transformations
        <fr:tex display="block"><![CDATA[
          f = f \circ  \underline {
  \text {id}_{x}
} \Rightarrow  (f \circ  f^{-1}) \circ  f = f \circ  \underline {(f^{-1} \circ  f)} \Rightarrow  
  \text {id}_{y}
 \circ  f = f,
        ]]></fr:tex>
        where each one-directional arrow represents a 2-cell arising from <fr:tex display="inline"><![CDATA[f]]></fr:tex> admitting <fr:tex display="inline"><![CDATA[f^{-1}]]></fr:tex> as a dual (adjoint), which has type <fr:tex display="inline"><![CDATA[f \Rightarrow  f]]></fr:tex> is equivalent to the ‘do-nothing’ transformation <fr:tex display="inline"><![CDATA[f \xRightarrow {
  \text {id}_{f}
} f]]></fr:tex>.
        This is a generalisation of one of the so-called ‘triangle identities’ in the context of adjoint functors, which when drawn as 2-dimensional string diagrams yields a ‘straightening of the snake’ picture.
        In this sense, the coherence data is precisely the witness that the snake can be straightened.
      </html:p><html:p>
        Such a coherence is given by the following <fr:link href="/coherent-inverses-OBFZ/" title="zigzag homotopy" uri="https://forest.nickx.hu/coherent-inverses-OBFZ/" display-uri="coherent-inverses-OBFZ" type="local">zigzag homotopy</fr:link>, constructed by <fr:link href="/coherent-inverses-FHS4/" title="contraction" uri="https://forest.nickx.hu/coherent-inverses-FHS4/" display-uri="coherent-inverses-FHS4" type="local">contraction</fr:link>:
        <fr:resource hash="7cd9af2418ce41c428d4816c3b458592"><fr:resource-content><html:img src="/7cd9af2418ce41c428d4816c3b458592.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[
    \usepackage {adjustbox}
    \usepackage {amsmath,amssymb}
    \usepackage {tikz}
    \usetikzlibrary {cd}
  ]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
    $
                    \begin{adjustbox}{max width=0.3\textwidth}
          \begin{tikzpicture}[baseline=(current bounding box.center)]
          \definecolor{generator-1-0-0-pos}{RGB}{192, 57, 43}
          \definecolor{generator-2-1-0-neg}{RGB}{166, 105, 8}
          \definecolor{generator-2-1-0-pos}{RGB}{243, 156, 18}
          \definecolor{generator-0-0-0-pos}{RGB}{41, 128, 185}
          \definecolor{generator-2-1-1-zer}{RGB}{251, 221, 173}
          \begin{scope}
          % Background surfaces
          \fill[generator-0-0-0-pos] (0,0) -- (6,0) -- (6,3) .. controls (6,3.8) and (5.6,4) .. (5,4) .. controls (4.4,4) and (4,3.8) .. (4,3) .. controls (4,2.2) and (3.6,2) .. (3,2) .. controls (2.4,2) and (2,2.2) .. (2,3) -- (2,6) -- (0,6) -- (0,0);
          \fill[generator-1-0-0-pos] (6,0) -- (8,0) -- (8,6) -- (2,6) -- (2,3) .. controls (2,2.2) and (2.4,2) .. (3,2) .. controls (3.6,2) and (4,2.2) .. (4,3) .. controls (4,3.8) and (4.4,4) .. (5,4) .. controls (5.6,4) and (6,3.8) .. (6,3) -- (6,0);
          % Wire layers
          \draw[color=generator-2-1-0-neg, line width=5pt](3,2) .. controls (3.6,2) and (4,2.2) .. (4,3) .. controls (4,3.8) and (4.4,4) .. (5,4);
          \draw[color=generator-2-1-0-pos, line width=5pt](6,0) -- (6,3) .. controls (6,3.8) and (5.6,4) .. (5,4)(3,2) .. controls (2.4,2) and (2,2.2) .. (2,3) -- (2,6);
          \end{scope}
          \fill[generator-2-1-1-zer] (3,2) circle (0.14);
          \fill[generator-2-1-1-zer] (5,4) circle (0.14);
          \end{tikzpicture}
          \end{adjustbox}
          \to
          \begin{adjustbox}{max width=0.3\textwidth}
          \begin{tikzpicture}[baseline=(current bounding box.center)]
          \definecolor{generator-0-0-0-pos}{RGB}{41, 128, 185}
          \definecolor{generator-1-0-0-pos}{RGB}{192, 57, 43}
          \definecolor{generator-2-1-0-pos}{RGB}{243, 156, 18}
          \begin{scope}
          % Background surfaces
          \fill[generator-0-0-0-pos] (0,0) -- (2,0) -- (2,4) -- (0,4) -- (0,0);
          \fill[generator-1-0-0-pos] (2,0) -- (4,0) -- (4,4) -- (2,4) -- (2,0);
          % Wire layers
          \draw[color=generator-2-1-0-pos, line width=5pt](2,0) -- (2,4);
          \end{scope}
          \end{tikzpicture}
          \end{adjustbox}
          \leftarrow
          \begin{adjustbox}{max width=0.3\textwidth}
          \begin{tikzpicture}[baseline=(current bounding box.center)]
          \definecolor{generator-0-0-0-pos}{RGB}{41, 128, 185}
          \definecolor{generator-1-0-0-pos}{RGB}{192, 57, 43}
          \definecolor{generator-2-1-0-pos}{RGB}{243, 156, 18}
          \begin{scope}
          % Background surfaces
          \fill[generator-0-0-0-pos] (0,0) -- (2,0) -- (2,2) -- (0,2) -- (0,0);
          \fill[generator-1-0-0-pos] (2,0) -- (4,0) -- (4,2) -- (2,2) -- (2,0);
          % Wire layers
          \draw[color=generator-2-1-0-pos, line width=5pt](2,0) -- (2,2);
          \end{scope}
          \end{tikzpicture}
          \end{adjustbox}
        $
  ]]></fr:resource-source></fr:resource></html:p><html:p>
        Viewed as a 3-dimensional string diagram, this <fr:link href="/coherent-inverses-OBFZ/" title="zigzag homotopy" uri="https://forest.nickx.hu/coherent-inverses-OBFZ/" display-uri="coherent-inverses-OBFZ" type="local">zigzag homotopy</fr:link> looks like <fr:link href="/coherent-inverses-21R2/" title="Snake coherence" uri="https://forest.nickx.hu/coherent-inverses-21R2/" display-uri="coherent-inverses-21R2" type="local">figure <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-21R2/" display-uri="coherent-inverses-21R2" /></fr:link>.
        Note that this contrasts with the figure in <fr:link href="/coherent-inverses-GV0W/" title="Snake to identity" uri="https://forest.nickx.hu/coherent-inverses-GV0W/" display-uri="coherent-inverses-GV0W" type="local">example <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-GV0W/" display-uri="coherent-inverses-GV0W" /></fr:link>: it is a different snake (there are two associated to <fr:tex display="inline"><![CDATA[f]]></fr:tex>, and two associated to <fr:tex display="inline"><![CDATA[f^{-1}]]></fr:tex>), and more importantly it is <html:em>homotopical</html:em> rather than <html:em>algebraic</html:em> — there is no purple dot representing a new algebraic <fr:link href="/coherent-inverses-US67/" title="signature and framing" uri="https://forest.nickx.hu/coherent-inverses-US67/" display-uri="coherent-inverses-US67" type="local">generator</fr:link> in the middle of the diagram, and its <fr:link href="/coherent-inverses-OBFZ/" title="zigzag homotopy" uri="https://forest.nickx.hu/coherent-inverses-OBFZ/" display-uri="coherent-inverses-OBFZ" type="local">zigzag homotopy</fr:link> has been generated entirely by <fr:link href="/coherent-inverses-FHS4/" title="contraction" uri="https://forest.nickx.hu/coherent-inverses-FHS4/" display-uri="coherent-inverses-FHS4" type="local">contraction</fr:link>.
      </html:p><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2025</fr:year><fr:month>1</fr:month><fr:day>8</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-21R2/</fr:uri><fr:display-uri>coherent-inverses-21R2</fr:display-uri><fr:route>/coherent-inverses-21R2/</fr:route><fr:title text="Snake coherence">Snake coherence</fr:title><fr:taxon>figure</fr:taxon></fr:frontmatter><fr:mainmatter><html:figure><html:img src="/bafkrmif3nbhonvhhzizpaoj6lw7k3fqwnlp4yxip3jmda7xovylqby7dpu.png" width="200px" />
  <html:figcaption>Snake coherence 3D surface diagram.</html:figcaption></html:figure></fr:mainmatter></fr:tree></fr:mainmatter></fr:tree><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2023</fr:year><fr:month>12</fr:month><fr:day>3</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-applications-catastrophes-swallowtail/</fr:uri><fr:display-uri>coherent-inverses-applications-catastrophes-swallowtail</fr:display-uri><fr:route>/coherent-inverses-applications-catastrophes-swallowtail/</fr:route><fr:title text="Swallowtail coherence">Swallowtail coherence</fr:title><fr:taxon>section</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
        A swallowtail coherence on the cup arises as a 4-dimensional coherence on a snake, which explicitly is given by the assertion that the <fr:link href="/coherent-inverses-OBFZ/" title="zigzag homotopy" uri="https://forest.nickx.hu/coherent-inverses-OBFZ/" display-uri="coherent-inverses-OBFZ" type="local">zigzag homotopy</fr:link>:
        <fr:resource hash="bbbcf5b499986ec64f2fbdffcc09c160"><fr:resource-content><html:img src="/bbbcf5b499986ec64f2fbdffcc09c160.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[\usepackage {adjustbox,tikz}]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
                    \begin{tabular}{c @{{}$\to${}} c @{{}$\leftarrow${}} c}
          \begin{adjustbox}{max width=0.3\textwidth}
          \begin{tikzpicture}[baseline=(current bounding box.center)]
          \definecolor{generator-1-0-0-pos}{RGB}{192, 57, 43}
          \definecolor{generator-2-1-0-neg}{RGB}{166, 105, 8}
          \definecolor{generator-2-1-0-pos}{RGB}{243, 156, 18}
          \definecolor{generator-0-0-0-pos}{RGB}{41, 128, 185}
          \definecolor{generator-2-1-1-zer}{RGB}{251, 221, 173}
          \begin{scope}
          % Background surfaces
          \fill[generator-0-0-0-pos] (0,0) -- (6,0) -- (6,4) -- (4,4) -- (4,3) .. controls (4,2.2) and (3.6,2) .. (3,2) .. controls (2.4,2) and (2,2.2) .. (2,3) -- (2,4) -- (0,4) -- (0,0);
          \fill[generator-1-0-0-pos] (2,3) .. controls (2,2.2) and (2.4,2) .. (3,2) .. controls (3.6,2) and (4,2.2) .. (4,3) -- (4,4) -- (2,4) -- (2,3);
          % Wire layers
          \draw[color=generator-2-1-0-neg, line width=5pt](3,2) .. controls (3.6,2) and (4,2.2) .. (4,3) -- (4,4);
          \draw[color=generator-2-1-0-pos, line width=5pt](3,2) .. controls (2.4,2) and (2,2.2) .. (2,3) -- (2,4);
          \end{scope}
          \fill[generator-2-1-1-zer] (3,2) circle (0.14);
          \end{tikzpicture}
          \end{adjustbox}
          &
          \begin{adjustbox}{max width=0.3\textwidth}
          \begin{tikzpicture}[baseline=(current bounding box.center)]
          \definecolor{generator-1-0-0-pos}{RGB}{192, 57, 43}
          \definecolor{generator-2-1-0-neg}{RGB}{166, 105, 8}
          \definecolor{generator-2-1-0-pos}{RGB}{243, 156, 18}
          \definecolor{generator-0-0-0-pos}{RGB}{41, 128, 185}
          \definecolor{generator-2-1-1-zer}{RGB}{251, 221, 173}
          \begin{scope}
          % Background surfaces
          \fill[generator-0-0-0-pos] (0,0) -- (6,0) -- (6,6) -- (4,6) -- (4,3) .. controls (4,2.2) and (3.6,2) .. (3,2) .. controls (2.4,2) and (2,2.2) .. (2,3) -- (2,6) -- (0,6) -- (0,0);
          \fill[generator-1-0-0-pos] (2,3) .. controls (2,2.2) and (2.4,2) .. (3,2) .. controls (3.6,2) and (4,2.2) .. (4,3) -- (4,6) -- (2,6) -- (2,3);
          % Wire layers
          \draw[color=generator-2-1-0-neg, line width=5pt](3,2) .. controls (3.6,2) and (4,2.2) .. (4,3) -- (4,6);
          \draw[color=generator-2-1-0-pos, line width=5pt](3,2) .. controls (2.4,2) and (2,2.2) .. (2,3) -- (2,6);
          \end{scope}
          \fill[generator-2-1-1-zer] (3,2) circle (0.14);
          \end{tikzpicture}
          \end{adjustbox}
          &
          \begin{adjustbox}{max width=0.3\textwidth}
          \begin{tikzpicture}[baseline=(current bounding box.center)]
          \definecolor{generator-1-0-0-pos}{RGB}{192, 57, 43}
          \definecolor{generator-2-1-0-neg}{RGB}{166, 105, 8}
          \definecolor{generator-2-1-0-pos}{RGB}{243, 156, 18}
          \definecolor{generator-0-0-0-pos}{RGB}{41, 128, 185}
          \definecolor{generator-2-1-1-zer}{RGB}{251, 221, 173}
          \begin{scope}
          % Background surfaces
          \fill[generator-0-0-0-pos] (0,0) -- (10,0) -- (10,8) -- (8,8) -- (8,3) .. controls (8,2.2) and (7.6,2) .. (7,2) .. controls (6.4,2) and (6,2.2) .. (6,3) -- (6,5) .. controls (6,5.8) and (5.6,6) .. (5,6) .. controls (4.4,6) and (4,5.8) .. (4,5) .. controls (4,4.2) and (3.6,4) .. (3,4) .. controls (2.4,4) and (2,4.2) .. (2,5) -- (2,8) -- (0,8) -- (0,0);
          \fill[generator-1-0-0-pos] (6,3) .. controls (6,2.2) and (6.4,2) .. (7,2) .. controls (7.6,2) and (8,2.2) .. (8,3) -- (8,8) -- (2,8) -- (2,5) .. controls (2,4.2) and (2.4,4) .. (3,4) .. controls (3.6,4) and (4,4.2) .. (4,5) .. controls (4,5.8) and (4.4,6) .. (5,6) .. controls (5.6,6) and (6,5.8) .. (6,5) -- (6,3);
          % Wire layers
          \draw[color=generator-2-1-0-neg, line width=5pt](7,2) .. controls (7.6,2) and (8,2.2) .. (8,3) -- (8,8)(3,4) .. controls (3.6,4) and (4,4.2) .. (4,5) .. controls (4,5.8) and (4.4,6) .. (5,6);
          \draw[color=generator-2-1-0-pos, line width=5pt](7,2) .. controls (6.4,2) and (6,2.2) .. (6,3) -- (6,5) .. controls (6,5.8) and (5.6,6) .. (5,6)(3,4) .. controls (2.4,4) and (2,4.2) .. (2,5) -- (2,8);
          \end{scope}
          \fill[generator-2-1-1-zer] (7,2) circle (0.14);
          \fill[generator-2-1-1-zer] (3,4) circle (0.14);
          \fill[generator-2-1-1-zer] (5,6) circle (0.14);
          \end{tikzpicture}
          \end{adjustbox}
          \\
          &
          \begin{adjustbox}{max width=0.3\textwidth}
          \begin{tikzpicture}[baseline=(current bounding box.center)]
          \definecolor{generator-1-0-0-pos}{RGB}{192, 57, 43}
          \definecolor{generator-2-1-0-neg}{RGB}{166, 105, 8}
          \definecolor{generator-2-1-0-pos}{RGB}{243, 156, 18}
          \definecolor{generator-0-0-0-pos}{RGB}{41, 128, 185}
          \definecolor{generator-2-1-1-zer}{RGB}{251, 221, 173}
          \begin{scope}
          % Background surfaces
          \fill[generator-0-0-0-pos] (0,0) -- (10,0) -- (10,6) -- (8,6) -- (8,3) .. controls (8,2.2) and (7.6,2) .. (7,2) .. controls (6.4,2) and (6,2.2) .. (6,3) .. controls (6,3.8) and (5.6,4) .. (5,4) .. controls (4.4,4) and (4,3.8) .. (4,3) .. controls (4,2.2) and (3.6,2) .. (3,2) .. controls (2.4,2) and (2,2.2) .. (2,3) -- (2,6) -- (0,6) -- (0,0);
          \fill[generator-1-0-0-pos] (2,3) .. controls (2,2.2) and (2.4,2) .. (3,2) .. controls (3.6,2) and (4,2.2) .. (4,3) .. controls (4,3.8) and (4.4,4) .. (5,4) .. controls (5.6,4) and (6,3.8) .. (6,3) .. controls (6,2.2) and (6.4,2) .. (7,2) .. controls (7.6,2) and (8,2.2) .. (8,3) -- (8,6) -- (2,6) -- (2,3);
          % Wire layers
          \draw[color=generator-2-1-0-neg, line width=5pt](3,2) .. controls (3.6,2) and (4,2.2) .. (4,3) .. controls (4,3.8) and (4.4,4) .. (5,4)(7,2) .. controls (7.6,2) and (8,2.2) .. (8,3) -- (8,6);
          \draw[color=generator-2-1-0-pos, line width=5pt](3,2) .. controls (2.4,2) and (2,2.2) .. (2,3) -- (2,6)(7,2) .. controls (6.4,2) and (6,2.2) .. (6,3) .. controls (6,3.8) and (5.6,4) .. (5,4);
          \end{scope}
          \fill[generator-2-1-1-zer] (3,2) circle (0.14);
          \fill[generator-2-1-1-zer] (7,2) circle (0.14);
          \fill[generator-2-1-1-zer] (5,4) circle (0.14);
          \end{tikzpicture}
          \end{adjustbox}
          &
          \begin{adjustbox}{max width=0.3\textwidth}
          \begin{tikzpicture}[baseline=(current bounding box.center)]
          \definecolor{generator-1-0-0-pos}{RGB}{192, 57, 43}
          \definecolor{generator-2-1-0-neg}{RGB}{166, 105, 8}
          \definecolor{generator-2-1-0-pos}{RGB}{243, 156, 18}
          \definecolor{generator-0-0-0-pos}{RGB}{41, 128, 185}
          \definecolor{generator-2-1-1-zer}{RGB}{251, 221, 173}
          \begin{scope}
          % Background surfaces
          \fill[generator-0-0-0-pos] (0,0) -- (10,0) -- (10,8) -- (8,8) -- (8,5) .. controls (8,4.2) and (7.6,4) .. (7,4) .. controls (6.4,4) and (6,4.2) .. (6,5) .. controls (6,5.8) and (5.6,6) .. (5,6) .. controls (4.4,6) and (4,5.8) .. (4,5) -- (4,3) .. controls (4,2.2) and (3.6,2) .. (3,2) .. controls (2.4,2) and (2,2.2) .. (2,3) -- (2,8) -- (0,8) -- (0,0);
          \fill[generator-1-0-0-pos] (2,3) .. controls (2,2.2) and (2.4,2) .. (3,2) .. controls (3.6,2) and (4,2.2) .. (4,3) -- (4,5) .. controls (4,5.8) and (4.4,6) .. (5,6) .. controls (5.6,6) and (6,5.8) .. (6,5) .. controls (6,4.2) and (6.4,4) .. (7,4) .. controls (7.6,4) and (8,4.2) .. (8,5) -- (8,8) -- (2,8) -- (2,3);
          % Wire layers
          \draw[color=generator-2-1-0-neg, line width=5pt](3,2) .. controls (3.6,2) and (4,2.2) .. (4,3) -- (4,5) .. controls (4,5.8) and (4.4,6) .. (5,6)(7,4) .. controls (7.6,4) and (8,4.2) .. (8,5) -- (8,8);
          \draw[color=generator-2-1-0-pos, line width=5pt](3,2) .. controls (2.4,2) and (2,2.2) .. (2,3) -- (2,8)(7,4) .. controls (6.4,4) and (6,4.2) .. (6,5) .. controls (6,5.8) and (5.6,6) .. (5,6);
          \end{scope}
          \fill[generator-2-1-1-zer] (3,2) circle (0.14);
          \fill[generator-2-1-1-zer] (7,4) circle (0.14);
          \fill[generator-2-1-1-zer] (5,6) circle (0.14);
          \end{tikzpicture}
          \end{adjustbox}
          \\
          &
          \begin{adjustbox}{max width=0.3\textwidth}
          \begin{tikzpicture}[baseline=(current bounding box.center)]
          \definecolor{generator-1-0-0-pos}{RGB}{192, 57, 43}
          \definecolor{generator-2-1-0-neg}{RGB}{166, 105, 8}
          \definecolor{generator-2-1-0-pos}{RGB}{243, 156, 18}
          \definecolor{generator-0-0-0-pos}{RGB}{41, 128, 185}
          \definecolor{generator-2-1-1-zer}{RGB}{251, 221, 173}
          \begin{scope}
          % Background surfaces
          \fill[generator-0-0-0-pos] (0,0) -- (6,0) -- (6,6) -- (4,6) -- (4,3) .. controls (4,2.2) and (3.6,2) .. (3,2) .. controls (2.4,2) and (2,2.2) .. (2,3) -- (2,6) -- (0,6) -- (0,0);
          \fill[generator-1-0-0-pos] (2,3) .. controls (2,2.2) and (2.4,2) .. (3,2) .. controls (3.6,2) and (4,2.2) .. (4,3) -- (4,6) -- (2,6) -- (2,3);
          % Wire layers
          \draw[color=generator-2-1-0-neg, line width=5pt](3,2) .. controls (3.6,2) and (4,2.2) .. (4,3) -- (4,6);
          \draw[color=generator-2-1-0-pos, line width=5pt](3,2) .. controls (2.4,2) and (2,2.2) .. (2,3) -- (2,6);
          \end{scope}
          \fill[generator-2-1-1-zer] (3,2) circle (0.14);
          \end{tikzpicture}
          \end{adjustbox}
          &
          \begin{adjustbox}{max width=0.3\textwidth}
          \begin{tikzpicture}[baseline=(current bounding box.center)]
          \definecolor{generator-1-0-0-pos}{RGB}{192, 57, 43}
          \definecolor{generator-2-1-0-neg}{RGB}{166, 105, 8}
          \definecolor{generator-2-1-0-pos}{RGB}{243, 156, 18}
          \definecolor{generator-0-0-0-pos}{RGB}{41, 128, 185}
          \definecolor{generator-2-1-1-zer}{RGB}{251, 221, 173}
          \begin{scope}
          % Background surfaces
          \fill[generator-0-0-0-pos] (0,0) -- (6,0) -- (6,4) -- (4,4) -- (4,3) .. controls (4,2.2) and (3.6,2) .. (3,2) .. controls (2.4,2) and (2,2.2) .. (2,3) -- (2,4) -- (0,4) -- (0,0);
          \fill[generator-1-0-0-pos] (2,3) .. controls (2,2.2) and (2.4,2) .. (3,2) .. controls (3.6,2) and (4,2.2) .. (4,3) -- (4,4) -- (2,4) -- (2,3);
          % Wire layers
          \draw[color=generator-2-1-0-neg, line width=5pt](3,2) .. controls (3.6,2) and (4,2.2) .. (4,3) -- (4,4);
          \draw[color=generator-2-1-0-pos, line width=5pt](3,2) .. controls (2.4,2) and (2,2.2) .. (2,3) -- (2,4);
          \end{scope}
          \fill[generator-2-1-1-zer] (3,2) circle (0.14);
          \end{tikzpicture}
          \end{adjustbox}
          \end{tabular}
        ]]></fr:resource-source></fr:resource>
        is equivalent to the identity 3-cell.
        Starting from the second regular slice (the third image above), there are two ways to reach the cup:
        <html:ol><html:li>
            perform a snake cancellation move on the left;
          </html:li>
          <html:li>
            interchange the cups, to obtain the third regular slice, and then perform a snake cancellation move on the right.
          </html:li></html:ol>
        In this sense, the swallowtail is a coherence for the snake, as it is a higher-dimensional cell that witnesses that these two ways of reaching the cup cancel out.
      </html:p><html:p>
        Equivalently, <fr:link href="/coherent-inverses-AW7B/" title="Swallowtail source 3D animation" uri="https://forest.nickx.hu/coherent-inverses-AW7B/" display-uri="coherent-inverses-AW7B" type="local">figure <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-AW7B/" display-uri="coherent-inverses-AW7B" /></fr:link> allows us to view the above as a sequence of transformations of 2-dimensional string diagrams, which is built entirely out of snake introduction/cancellation moves and interchange, rendered in 3D as an animation:
        The swallowtail coherence asserts that this is equivalent to the ‘do-nothing’ identity transformation.
      </html:p><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2025</fr:year><fr:month>1</fr:month><fr:day>8</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-AW7B/</fr:uri><fr:display-uri>coherent-inverses-AW7B</fr:display-uri><fr:route>/coherent-inverses-AW7B/</fr:route><fr:title text="Swallowtail source 3D animation">Swallowtail <fr:link href="/coherent-inverses-G6FI/" title="source and target of a zigzag" uri="https://forest.nickx.hu/coherent-inverses-G6FI/" display-uri="coherent-inverses-G6FI" type="local">source</fr:link> 3D animation</fr:title><fr:taxon>figure</fr:taxon></fr:frontmatter><fr:mainmatter><html:figure><html:div>
    <html:img src="/bafkrmidc727y5me2vg5nglu22bvpxs3n2ucgqr3wxzzptqazv3ppo4o2sa.png" width=" 30%" />
    <html:img src="/bafkrmifruiyz2nrfsnsnn2ojstr4l4cpgac6ynno7u3aqdx7rg5l3p2l24.png" width=" 30%" />
    <html:img src="/bafkrmibhk3isitwg3alnwh2qecbysxxpgadju5fgvz6ucszgt4npb72seu.png" width=" 30%" />
    <html:img src="/bafkrmidqpc5vtlbg7ti5jzxeelb6z7o5zaesoueaonhwtp2ho5ltyryxye.png" width=" 30%" />
    <html:img src="/bafkrmicvumpvqvrlky7w7j6naziqohwfa67uigj3y2ah7gzowlmidjhike.png" width=" 30%" />
    <html:img src="/bafkrmibdx3io5otrub4iytty6oq5yyhetqipljk7umascbk4jgzplvjw6u.png" width=" 30%" />
  </html:div>
  <html:figcaption>The <fr:link href="/coherent-inverses-G6FI/" title="source and target of a zigzag" uri="https://forest.nickx.hu/coherent-inverses-G6FI/" display-uri="coherent-inverses-G6FI" type="local">source</fr:link> of the swallowtail 4D diagram, rendered at time <fr:tex display="inline"><![CDATA[t = 0, 0.2, 0.4, 0.6, 0.8, 1]]></fr:tex>.</html:figcaption></html:figure></fr:mainmatter></fr:tree><html:p>
        In the first Morse projection, we construct this by <fr:link href="/coherent-inverses-FHS4/" title="contraction" uri="https://forest.nickx.hu/coherent-inverses-FHS4/" display-uri="coherent-inverses-FHS4" type="local">contraction</fr:link> resulting in the following <fr:link href="/coherent-inverses-OBFZ/" title="zigzag homotopy" uri="https://forest.nickx.hu/coherent-inverses-OBFZ/" display-uri="coherent-inverses-OBFZ" type="local">zigzag homotopy</fr:link>:
        <fr:resource hash="e82ef761f1c72600fe0810f67246f913"><fr:resource-content><html:img src="/e82ef761f1c72600fe0810f67246f913.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[
    \usepackage {adjustbox}
    \usepackage {amsmath,amssymb}
    \usepackage {tikz}
    \usetikzlibrary {cd}
  ]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
    $
                    \begin{adjustbox}{max width=0.3\textwidth}
          \begin{tikzpicture}[baseline=(current bounding box.center)]
          \definecolor{generator-2-1-0-pos}{RGB}{243, 156, 18}
          \definecolor{generator-2-1-2-pos}{RGB}{247, 188, 96}
          \definecolor{generator-2-1-2-neg}{RGB}{243, 154, 13}
          \definecolor{generator-0-0-1-pos}{RGB}{56, 150, 211}
          \definecolor{generator-2-1-1-zer}{RGB}{251, 221, 173}

          \newcommand{\wire}[2]{
            \ifdefined\recolor\draw[color=\recolor, line width=10pt]\else\draw[color=#1, line width=5pt]\fi #2
          }
          \newcommand{\clipped}[3]{
          \begin{scope}
            \newcommand{\recolor}{#1}
            \clip#3;
            #2
          \end{scope}
          }

          \begin{scope}[transparency group]
          % Background surfaces
          \fill[generator-0-0-1-pos] (0,0) -- (2,0) -- (2,3) .. controls (2,3.8) and (2.4,4) .. (3,4) .. controls (2.4,4) and (2,4.2) .. (2,5) -- (2,8) -- (0,8) -- (0,0);
          \fill[generator-2-1-0-pos] (2,0) -- (8,0) -- (8,8) -- (2,8) -- (2,5) .. controls (2,4.2) and (2.4,4) .. (3,4) .. controls (2.4,4) and (2,3.8) .. (2,3) -- (2,0);
          \newcommand{\layer}[1]{
            \clipped{generator-0-0-1-pos}{#1}{(0,0) -- (2,0) -- (2,3) .. controls (2,3.8) and (2.4,4) .. (3,4) .. controls (2.4,4) and (2,4.2) .. (2,5) -- (2,8) -- (0,8) -- (0,0)}
            \clipped{generator-2-1-0-pos}{#1}{(2,0) -- (8,0) -- (8,8) -- (2,8) -- (2,5) .. controls (2,4.2) and (2.4,4) .. (3,4) .. controls (2.4,4) and (2,3.8) .. (2,3) -- (2,0)}
            #1
          }

          % Wire layers
          \wire{generator-2-1-1-zer}{(2,3) .. controls (2,3.8) and (2.4,4) .. (3,4) .. controls (3.6,4) and (4,4.2) .. (4,5) .. controls (4,5.8) and (4.4,6) .. (5,6)(6,3) -- (6,5) .. controls (6,5.8) and (5.6,6) .. (5,6)};
          \layer{
          \wire{generator-2-1-1-zer}{(2,0) -- (2,3)(5,2) .. controls (4.4,2) and (4,2.2) .. (4,3) .. controls (4,3.8) and (3.6,4) .. (3,4) .. controls (2.4,4) and (2,4.2) .. (2,5) -- (2,8)(5,2) .. controls (5.6,2) and (6,2.2) .. (6,3)};
          }
          \end{scope}
          \fill[generator-2-1-2-pos] (5,2) circle (0.14);
          \fill[generator-2-1-2-neg] (5,6) circle (0.14);
          \end{tikzpicture}
          \end{adjustbox}
          \to
          \begin{adjustbox}{max width=0.3\textwidth}
          \begin{tikzpicture}[baseline=(current bounding box.center)]
          \definecolor{generator-0-0-1-pos}{RGB}{56, 150, 211}
          \definecolor{generator-2-1-0-pos}{RGB}{243, 156, 18}
          \definecolor{generator-2-1-1-zer}{RGB}{251, 221, 173}
          \begin{scope}
          % Background surfaces
          \fill[generator-0-0-1-pos] (0,0) -- (2,0) -- (2,4) -- (0,4) -- (0,0);
          \fill[generator-2-1-0-pos] (2,0) -- (4,0) -- (4,4) -- (2,4) -- (2,0);
          % Wire layers
          \draw[color=generator-2-1-1-zer, line width=5pt](2,0) -- (2,4);
          \end{scope}
          \end{tikzpicture}
          \end{adjustbox}
          \leftarrow
          \begin{adjustbox}{max width=0.3\textwidth}
          \begin{tikzpicture}[baseline=(current bounding box.center)]
          \definecolor{generator-0-0-1-pos}{RGB}{56, 150, 211}
          \definecolor{generator-2-1-0-pos}{RGB}{243, 156, 18}
          \definecolor{generator-2-1-1-zer}{RGB}{251, 221, 173}
          \begin{scope}
          % Background surfaces
          \fill[generator-0-0-1-pos] (0,0) -- (2,0) -- (2,2) -- (0,2) -- (0,0);
          \fill[generator-2-1-0-pos] (2,0) -- (4,0) -- (4,2) -- (2,2) -- (2,0);
          % Wire layers
          \draw[color=generator-2-1-1-zer, line width=5pt](2,0) -- (2,2);
          \end{scope}
          \end{tikzpicture}
          \end{adjustbox}
        $
  ]]></fr:resource-source></fr:resource></html:p><html:p>
        Viewed as a 4-dimensional string diagram, as an animation of 3-dimensional surface diagrams, this <fr:link href="/coherent-inverses-OBFZ/" title="zigzag homotopy" uri="https://forest.nickx.hu/coherent-inverses-OBFZ/" display-uri="coherent-inverses-OBFZ" type="local">zigzag homotopy</fr:link> looks like <fr:link href="/coherent-inverses-AG5Q/" title="Swallowtail coherence 4D animation" uri="https://forest.nickx.hu/coherent-inverses-AG5Q/" display-uri="coherent-inverses-AG5Q" type="local">figure <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-AG5Q/" display-uri="coherent-inverses-AG5Q" /></fr:link>.
        As before, this is a different (one of many possible) swallowtail coherence to the one in <fr:link href="/coherent-inverses-implementation/" title="Coherent inverses in higher-categorical string diagrams › Implementation" uri="https://forest.nickx.hu/coherent-inverses-implementation/" display-uri="coherent-inverses-implementation" type="local">chapter <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-implementation/" display-uri="coherent-inverses-implementation" /></fr:link>.
      </html:p><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2025</fr:year><fr:month>1</fr:month><fr:day>8</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-AG5Q/</fr:uri><fr:display-uri>coherent-inverses-AG5Q</fr:display-uri><fr:route>/coherent-inverses-AG5Q/</fr:route><fr:title text="Swallowtail coherence 4D animation">Swallowtail coherence 4D animation</fr:title><fr:taxon>figure</fr:taxon></fr:frontmatter><fr:mainmatter><html:figure><html:div>
    <html:img src="/bafkrmidnhusl4gbypg6f5ox3dkvjo2enfydzthpzr5n5jnh57sfi73z37m.png" width=" 30%" />
    <html:img src="/bafkrmigbh63p2zmagg6bgknlekwl6yzhkzndljj67za4pyozbr7g6iaey4.png" width=" 30%" />
    <html:img src="/bafkrmibrwybymkpcjiqmedn4g5mtrvcgbttviun7qpquowhvspulh67eey.png" width=" 30%" />
    <html:img src="/bafkrmic37zh4ltsor6uz6gzc7xfqixw327pvhp6wvjzju6sslgrynukmqm.png" width=" 30%" />
    <html:img src="/bafkrmib26mginsb6ymq2vfavyswq2iqc6csdvcqviuhbld2ycsm6gleive.png" width=" 30%" />
  </html:div>
  <html:figcaption>Swallowtail coherence, rendered at time <fr:tex display="inline"><![CDATA[t = 0, 0.25, 0.5, 0.75, 1]]></fr:tex>.</html:figcaption></html:figure></fr:mainmatter></fr:tree></fr:mainmatter></fr:tree><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2023</fr:year><fr:month>12</fr:month><fr:day>3</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-applications-catastrophes-butterfly/</fr:uri><fr:display-uri>coherent-inverses-applications-catastrophes-butterfly</fr:display-uri><fr:route>/coherent-inverses-applications-catastrophes-butterfly/</fr:route><fr:title text="Butterfly coherence">Butterfly coherence</fr:title><fr:taxon>section</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
        A butterfly coherence is a 5-dimensional coherence on a swallowtail.
        In the first Morse projection, this is given by the assertion that the <fr:link href="/coherent-inverses-OBFZ/" title="zigzag homotopy" uri="https://forest.nickx.hu/coherent-inverses-OBFZ/" display-uri="coherent-inverses-OBFZ" type="local">zigzag homotopy</fr:link>:
        <fr:resource hash="cb71047b2c12ea624d6f24dad1808b07"><fr:resource-content><html:img src="/cb71047b2c12ea624d6f24dad1808b07.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[\usepackage {adjustbox,tikz}]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
                    \begin{tabular}{c @{{}$\to${}} c @{{}$\leftarrow${}} c}
          \begin{adjustbox}{max width=0.3\textwidth}
          \begin{tikzpicture}[baseline=(current bounding box.center)]
          \definecolor{generator-2-1-0-pos}{RGB}{243, 156, 18}
          \definecolor{generator-2-1-1-zer}{RGB}{251, 221, 173}
          \definecolor{generator-2-1-2-pos}{RGB}{247, 188, 96}

          \newcommand{\wire}[2]{
            \ifdefined\recolor\draw[color=\recolor, line width=10pt]\else\draw[color=#1, line width=5pt]\fi #2
          }
          \newcommand{\clipped}[3]{
          \begin{scope}
            \newcommand{\recolor}{#1}
            \clip#3;
            #2
          \end{scope}
          }

          \begin{scope}[transparency group]
          % Background surfaces
          \fill[generator-2-1-0-pos] (0,0) -- (6,0) -- (6,4) -- (0,4) -- (0,0);
          \newcommand{\layer}[1]{
            \clipped{generator-2-1-0-pos}{#1}{(0,0) -- (6,0) -- (6,4) -- (0,4) -- (0,0)}
            #1
          }

          % Wire layers
          \wire{generator-2-1-1-zer}{(2,3) -- (2,4)};
          \layer{
          \wire{generator-2-1-1-zer}{(3,2) .. controls (2.4,2) and (2,2.2) .. (2,3)(3,2) .. controls (3.6,2) and (4,2.2) .. (4,3) -- (4,4)};
          }
          \end{scope}
          \fill[generator-2-1-2-pos] (3,2) circle (0.14);
          \end{tikzpicture}
          \end{adjustbox}
          &
          \begin{adjustbox}{max width=0.3\textwidth}
          \begin{tikzpicture}[baseline=(current bounding box.center)]
          \definecolor{generator-2-1-0-pos}{RGB}{243, 156, 18}
          \definecolor{generator-2-1-1-zer}{RGB}{251, 221, 173}
          \definecolor{generator-2-1-2-pos}{RGB}{247, 188, 96}

          \newcommand{\wire}[2]{
            \ifdefined\recolor\draw[color=\recolor, line width=10pt]\else\draw[color=#1, line width=5pt]\fi #2
          }
          \newcommand{\clipped}[3]{
          \begin{scope}
            \newcommand{\recolor}{#1}
            \clip#3;
            #2
          \end{scope}
          }

          \begin{scope}[transparency group]
          % Background surfaces
          \fill[generator-2-1-0-pos] (0,0) -- (6,0) -- (6,6) -- (0,6) -- (0,0);
          \newcommand{\layer}[1]{
            \clipped{generator-2-1-0-pos}{#1}{(0,0) -- (6,0) -- (6,6) -- (0,6) -- (0,0)}
            #1
          }

          % Wire layers
          \wire{generator-2-1-1-zer}{(2,3) -- (2,6)};
          \layer{
          \wire{generator-2-1-1-zer}{(3,2) .. controls (2.4,2) and (2,2.2) .. (2,3)(3,2) .. controls (3.6,2) and (4,2.2) .. (4,3) -- (4,6)};
          }
          \end{scope}
          \fill[generator-2-1-2-pos] (3,2) circle (0.14);
          \end{tikzpicture}
          \end{adjustbox}
          &
          \begin{adjustbox}{max width=0.3\textwidth}
          \begin{tikzpicture}[baseline=(current bounding box.center)]
          \definecolor{generator-2-1-0-pos}{RGB}{243, 156, 18}
          \definecolor{generator-2-1-2-pos}{RGB}{247, 188, 96}
          \definecolor{generator-2-1-2-neg}{RGB}{243, 154, 13}
          \definecolor{generator-2-1-1-zer}{RGB}{251, 221, 173}

          \newcommand{\wire}[2]{
            \ifdefined\recolor\draw[color=\recolor, line width=10pt]\else\draw[color=#1, line width=5pt]\fi #2
          }
          \newcommand{\clipped}[3]{
          \begin{scope}
            \newcommand{\recolor}{#1}
            \clip#3;
            #2
          \end{scope}
          }

          \begin{scope}[transparency group]
          % Background surfaces
          \fill[generator-2-1-0-pos] (0,0) -- (10,0) -- (10,10) -- (0,10) -- (0,0);
          \newcommand{\layer}[1]{
            \clipped{generator-2-1-0-pos}{#1}{(0,0) -- (10,0) -- (10,10) -- (0,10) -- (0,0)}
            #1
          }

          % Wire layers
          \wire{generator-2-1-1-zer}{(5,4) .. controls (4.4,4) and (4,4.2) .. (4,5) .. controls (4,5.8) and (3.6,6) .. (3,6) .. controls (2.4,6) and (2,6.2) .. (2,7)(5,4) .. controls (5.6,4) and (6,4.2) .. (6,5) -- (6,7)};
          \layer{
          \wire{generator-2-1-1-zer}{(2,3) -- (2,5) .. controls (2,5.8) and (2.4,6) .. (3,6) .. controls (3.6,6) and (4,6.2) .. (4,7) .. controls (4,7.8) and (4.4,8) .. (5,8)(2,7) -- (2,10)(6,7) .. controls (6,7.8) and (5.6,8) .. (5,8)};
          }
          \layer{
          \wire{generator-2-1-1-zer}{(5,2) .. controls (3.2,2) and (2,2.2) .. (2,3)(5,2) .. controls (6.8,2) and (8,2.2) .. (8,3) -- (8,10)};
          }
          \end{scope}
          \fill[generator-2-1-2-pos] (5,2) circle (0.14);
          \fill[generator-2-1-2-pos] (5,4) circle (0.14);
          \fill[generator-2-1-2-neg] (5,8) circle (0.14);
          \end{tikzpicture}
          \end{adjustbox}
          \\
          &
          \begin{adjustbox}{max width=0.3\textwidth}
          \begin{tikzpicture}[baseline=(current bounding box.center)]
          \definecolor{generator-2-1-0-pos}{RGB}{243, 156, 18}
          \definecolor{generator-2-1-2-pos}{RGB}{247, 188, 96}
          \definecolor{generator-2-1-2-neg}{RGB}{243, 154, 13}
          \definecolor{generator-2-1-1-zer}{RGB}{251, 221, 173}

          \newcommand{\wire}[2]{
            \ifdefined\recolor\draw[color=\recolor, line width=10pt]\else\draw[color=#1, line width=5pt]\fi #2
          }
          \newcommand{\clipped}[3]{
          \begin{scope}
            \newcommand{\recolor}{#1}
            \clip#3;
            #2
          \end{scope}
          }

          \begin{scope}[transparency group]
          % Background surfaces
          \fill[generator-2-1-0-pos] (0,0) -- (10,0) -- (10,10) -- (0,10) -- (0,0);
          \newcommand{\layer}[1]{
            \clipped{generator-2-1-0-pos}{#1}{(0,0) -- (10,0) -- (10,10) -- (0,10) -- (0,0)}
            #1
          }

          % Wire layers
          \wire{generator-2-1-1-zer}{(4,5) .. controls (4,5.8) and (3.6,6) .. (3,6) .. controls (2.4,6) and (2,6.2) .. (2,7)(6,5) -- (6,7)};
          \layer{
          \wire{generator-2-1-1-zer}{(2,3) -- (2,5) .. controls (2,5.8) and (2.4,6) .. (3,6) .. controls (3.6,6) and (4,6.2) .. (4,7) .. controls (4,7.8) and (4.4,8) .. (5,8)(6,4) .. controls (6,4.4) and (4,4.2) .. (4,5)(6,4) -- (6,5)(2,7) -- (2,10)(6,7) .. controls (6,7.8) and (5.6,8) .. (5,8)};
          }
          \layer{
          \wire{generator-2-1-1-zer}{(4,2) .. controls (2.8,2) and (2,2.2) .. (2,3)(4,2) .. controls (5.2,2) and (6,2.2) .. (6,3) -- (6,4) .. controls (6,4.4) and (8,4.2) .. (8,5) -- (8,10)};
          }
          \end{scope}
          \fill[generator-2-1-2-pos] (4,2) circle (0.14);
          \fill[generator-2-1-2-neg] (5,8) circle (0.14);
          \end{tikzpicture}
          \end{adjustbox}
          &
          \begin{adjustbox}{max width=0.3\textwidth}
          \begin{tikzpicture}[baseline=(current bounding box.center)]
          \definecolor{generator-2-1-0-pos}{RGB}{243, 156, 18}
          \definecolor{generator-2-1-2-pos}{RGB}{247, 188, 96}
          \definecolor{generator-2-1-2-neg}{RGB}{243, 154, 13}
          \definecolor{generator-2-1-1-zer}{RGB}{251, 221, 173}

          \newcommand{\wire}[2]{
            \ifdefined\recolor\draw[color=\recolor, line width=10pt]\else\draw[color=#1, line width=5pt]\fi #2
          }
          \newcommand{\clipped}[3]{
          \begin{scope}
            \newcommand{\recolor}{#1}
            \clip#3;
            #2
          \end{scope}
          }

          \begin{scope}[transparency group]
          % Background surfaces
          \fill[generator-2-1-0-pos] (0,0) -- (10,0) -- (10,14) -- (0,14) -- (0,0);
          \newcommand{\layer}[1]{
            \clipped{generator-2-1-0-pos}{#1}{(0,0) -- (10,0) -- (10,14) -- (0,14) -- (0,0)}
            #1
          }

          % Wire layers
          \wire{generator-2-1-1-zer}{(4,7) -- (4,9)};
          \layer{
          \wire{generator-2-1-1-zer}{(6,5) .. controls (6,5.8) and (5.6,6) .. (5,6) .. controls (4.4,6) and (4,6.2) .. (4,7)(4,9) .. controls (4,9.8) and (3.6,10) .. (3,10) .. controls (2.4,10) and (2,10.2) .. (2,11)(6,9) -- (6,11)};
          }
          \layer{
          \wire{generator-2-1-1-zer}{(2,3) -- (2,9) .. controls (2,9.8) and (2.4,10) .. (3,10) .. controls (3.6,10) and (4,10.2) .. (4,11) .. controls (4,11.8) and (4.4,12) .. (5,12)(8,7) .. controls (8,7.8) and (7.6,8) .. (7,8) .. controls (6.4,8) and (6,8.2) .. (6,9)(2,11) -- (2,14)(6,11) .. controls (6,11.8) and (5.6,12) .. (5,12)};
          }
          \layer{
          \wire{generator-2-1-1-zer}{(3,2) .. controls (2.4,2) and (2,2.2) .. (2,3)(3,2) .. controls (3.6,2) and (4,2.2) .. (4,3) -- (4,5) .. controls (4,5.8) and (4.4,6) .. (5,6) .. controls (5.6,6) and (6,6.2) .. (6,7) .. controls (6,7.8) and (6.4,8) .. (7,8) .. controls (7.6,8) and (8,8.2) .. (8,9) -- (8,14)(7,4) .. controls (6.4,4) and (6,4.2) .. (6,5)(7,4) .. controls (7.6,4) and (8,4.2) .. (8,5) -- (8,7)};
          }
          \end{scope}
          \fill[generator-2-1-2-pos] (3,2) circle (0.14);
          \fill[generator-2-1-2-pos] (7,4) circle (0.14);
          \fill[generator-2-1-2-neg] (5,12) circle (0.14);
          \end{tikzpicture}
          \end{adjustbox}
          \\
          &
          \begin{adjustbox}{max width=0.3\textwidth}
          \begin{tikzpicture}[baseline=(current bounding box.center)]
          \definecolor{generator-2-1-0-pos}{RGB}{243, 156, 18}
          \definecolor{generator-2-1-2-pos}{RGB}{247, 188, 96}
          \definecolor{generator-2-1-2-neg}{RGB}{243, 154, 13}
          \definecolor{generator-2-1-1-zer}{RGB}{251, 221, 173}

          \newcommand{\wire}[2]{
            \ifdefined\recolor\draw[color=\recolor, line width=10pt]\else\draw[color=#1, line width=5pt]\fi #2
          }
          \newcommand{\clipped}[3]{
          \begin{scope}
            \newcommand{\recolor}{#1}
            \clip#3;
            #2
          \end{scope}
          }

          \begin{scope}[transparency group]
          % Background surfaces
          \fill[generator-2-1-0-pos] (0,0) -- (10,0) -- (10,10) -- (0,10) -- (0,0);
          \newcommand{\layer}[1]{
            \clipped{generator-2-1-0-pos}{#1}{(0,0) -- (10,0) -- (10,10) -- (0,10) -- (0,0)}
            #1
          }

          % Wire layers
          \wire{generator-2-1-1-zer}{(6,3) .. controls (6,3.8) and (5.6,4) .. (5,4) .. controls (4.4,4) and (4,4.2) .. (4,5) .. controls (4,5.8) and (3.6,6) .. (3,6) .. controls (2.4,6) and (2,6.2) .. (2,7)};
          \layer{
          \wire{generator-2-1-1-zer}{(2,3) -- (2,5) .. controls (2,5.8) and (2.4,6) .. (3,6) .. controls (3.6,6) and (4,6.2) .. (4,7) .. controls (4,7.8) and (4.4,8) .. (5,8)(8,5) .. controls (8,5.8) and (7.6,6) .. (7,6) .. controls (6.4,6) and (6,6.2) .. (6,7) .. controls (6,7.8) and (5.6,8) .. (5,8)(2,7) -- (2,10)};
          }
          \layer{
          \wire{generator-2-1-1-zer}{(3,2) .. controls (2.4,2) and (2,2.2) .. (2,3)(3,2) .. controls (3.6,2) and (4,2.2) .. (4,3) .. controls (4,3.8) and (4.4,4) .. (5,4) .. controls (5.6,4) and (6,4.2) .. (6,5) .. controls (6,5.8) and (6.4,6) .. (7,6) .. controls (7.6,6) and (8,6.2) .. (8,7) -- (8,10)(7,2) .. controls (6.4,2) and (6,2.2) .. (6,3)(7,2) .. controls (7.6,2) and (8,2.2) .. (8,3) -- (8,5)};
          }
          \end{scope}
          \fill[generator-2-1-2-pos] (3,2) circle (0.14);
          \fill[generator-2-1-2-pos] (7,2) circle (0.14);
          \fill[generator-2-1-2-neg] (5,8) circle (0.14);
          \end{tikzpicture}
          \end{adjustbox}
          &
          \begin{adjustbox}{max width=0.3\textwidth}
          \begin{tikzpicture}[baseline=(current bounding box.center)]
          \definecolor{generator-2-1-0-pos}{RGB}{243, 156, 18}
          \definecolor{generator-2-1-2-pos}{RGB}{247, 188, 96}
          \definecolor{generator-2-1-2-neg}{RGB}{243, 154, 13}
          \definecolor{generator-2-1-1-zer}{RGB}{251, 221, 173}

          \newcommand{\wire}[2]{
            \ifdefined\recolor\draw[color=\recolor, line width=10pt]\else\draw[color=#1, line width=5pt]\fi #2
          }
          \newcommand{\clipped}[3]{
          \begin{scope}
            \newcommand{\recolor}{#1}
            \clip#3;
            #2
          \end{scope}
          }

          \begin{scope}[transparency group]
          % Background surfaces
          \fill[generator-2-1-0-pos] (0,0) -- (10,0) -- (10,14) -- (0,14) -- (0,0);
          \newcommand{\layer}[1]{
            \clipped{generator-2-1-0-pos}{#1}{(0,0) -- (10,0) -- (10,14) -- (0,14) -- (0,0)}
            #1
          }

          % Wire layers
          \wire{generator-2-1-1-zer}{(6,5) .. controls (6,5.8) and (5.6,6) .. (5,6) .. controls (4.4,6) and (4,6.2) .. (4,7) .. controls (4,7.8) and (3.6,8) .. (3,8) .. controls (2.4,8) and (2,8.2) .. (2,9)};
          \layer{
          \wire{generator-2-1-1-zer}{(6,3) -- (6,5)(2,5) -- (2,7) .. controls (2,7.8) and (2.4,8) .. (3,8) .. controls (3.6,8) and (4,8.2) .. (4,9) -- (4,11) .. controls (4,11.8) and (4.4,12) .. (5,12)(2,9) -- (2,14)(8,9) .. controls (8,9.8) and (7.6,10) .. (7,10) .. controls (6.4,10) and (6,10.2) .. (6,11) .. controls (6,11.8) and (5.6,12) .. (5,12)};
          }
          \layer{
          \wire{generator-2-1-1-zer}{(7,2) .. controls (6.4,2) and (6,2.2) .. (6,3)(7,2) .. controls (7.6,2) and (8,2.2) .. (8,3) -- (8,9)(3,4) .. controls (2.4,4) and (2,4.2) .. (2,5)(3,4) .. controls (3.6,4) and (4,4.2) .. (4,5) .. controls (4,5.8) and (4.4,6) .. (5,6) .. controls (5.6,6) and (6,6.2) .. (6,7) -- (6,9) .. controls (6,9.8) and (6.4,10) .. (7,10) .. controls (7.6,10) and (8,10.2) .. (8,11) -- (8,14)};
          }
          \end{scope}
          \fill[generator-2-1-2-pos] (7,2) circle (0.14);
          \fill[generator-2-1-2-pos] (3,4) circle (0.14);
          \fill[generator-2-1-2-neg] (5,12) circle (0.14);
          \end{tikzpicture}
          \end{adjustbox}
          \\
          &
          \begin{adjustbox}{max width=0.3\textwidth}
          \begin{tikzpicture}[baseline=(current bounding box.center)]
          \definecolor{generator-2-1-0-pos}{RGB}{243, 156, 18}
          \definecolor{generator-2-1-2-pos}{RGB}{247, 188, 96}
          \definecolor{generator-2-1-2-neg}{RGB}{243, 154, 13}
          \definecolor{generator-2-1-1-zer}{RGB}{251, 221, 173}

          \newcommand{\wire}[2]{
            \ifdefined\recolor\draw[color=\recolor, line width=10pt]\else\draw[color=#1, line width=5pt]\fi #2
          }
          \newcommand{\clipped}[3]{
          \begin{scope}
            \newcommand{\recolor}{#1}
            \clip#3;
            #2
          \end{scope}
          }

          \begin{scope}[transparency group]
          % Background surfaces
          \fill[generator-2-1-0-pos] (0,0) -- (10,0) -- (10,10) -- (0,10) -- (0,0);
          \newcommand{\layer}[1]{
            \clipped{generator-2-1-0-pos}{#1}{(0,0) -- (10,0) -- (10,10) -- (0,10) -- (0,0)}
            #1
          }

          % Wire layers
          \wire{generator-2-1-1-zer}{(4,3) -- (4,4) .. controls (2.8,4) and (2,4.2) .. (2,5) -- (2,10)(4,5) -- (4,7) .. controls (4,7.8) and (4.4,8) .. (5,8)(8,5) .. controls (8,5.8) and (7.6,6) .. (7,6) .. controls (6.4,6) and (6,6.2) .. (6,7) .. controls (6,7.8) and (5.6,8) .. (5,8)};
          \layer{
          \wire{generator-2-1-1-zer}{(6,2) .. controls (4.8,2) and (4,2.2) .. (4,3)(6,2) .. controls (7.2,2) and (8,2.2) .. (8,3) -- (8,5)(4,4) -- (4,5)(4,4) .. controls (5.2,4) and (6,4.2) .. (6,5) .. controls (6,5.8) and (6.4,6) .. (7,6) .. controls (7.6,6) and (8,6.2) .. (8,7) -- (8,10)};
          }
          \end{scope}
          \fill[generator-2-1-2-pos] (6,2) circle (0.14);
          \fill[generator-2-1-2-pos] (4,4) circle (0.14);
          \fill[generator-2-1-2-neg] (5,8) circle (0.14);
          \end{tikzpicture}
          \end{adjustbox}
          &
          \begin{adjustbox}{max width=0.3\textwidth}
          \begin{tikzpicture}[baseline=(current bounding box.center)]
          \definecolor{generator-2-1-0-pos}{RGB}{243, 156, 18}
          \definecolor{generator-2-1-2-pos}{RGB}{247, 188, 96}
          \definecolor{generator-2-1-2-neg}{RGB}{243, 154, 13}
          \definecolor{generator-2-1-1-zer}{RGB}{251, 221, 173}

          \newcommand{\wire}[2]{
            \ifdefined\recolor\draw[color=\recolor, line width=10pt]\else\draw[color=#1, line width=5pt]\fi #2
          }
          \newcommand{\clipped}[3]{
          \begin{scope}
            \newcommand{\recolor}{#1}
            \clip#3;
            #2
          \end{scope}
          }

          \begin{scope}[transparency group]
          % Background surfaces
          \fill[generator-2-1-0-pos] (0,0) -- (10,0) -- (10,10) -- (0,10) -- (0,0);
          \newcommand{\layer}[1]{
            \clipped{generator-2-1-0-pos}{#1}{(0,0) -- (10,0) -- (10,10) -- (0,10) -- (0,0)}
            #1
          }

          % Wire layers
          \wire{generator-2-1-1-zer}{(2,3) -- (2,10)(4,5) -- (4,7) .. controls (4,7.8) and (4.4,8) .. (5,8)(8,5) .. controls (8,5.8) and (7.6,6) .. (7,6) .. controls (6.4,6) and (6,6.2) .. (6,7) .. controls (6,7.8) and (5.6,8) .. (5,8)};
          \layer{
          \wire{generator-2-1-1-zer}{(5,2) .. controls (3.2,2) and (2,2.2) .. (2,3)(5,2) .. controls (6.8,2) and (8,2.2) .. (8,3) -- (8,5)(5,4) .. controls (4.4,4) and (4,4.2) .. (4,5)(5,4) .. controls (5.6,4) and (6,4.2) .. (6,5) .. controls (6,5.8) and (6.4,6) .. (7,6) .. controls (7.6,6) and (8,6.2) .. (8,7) -- (8,10)};
          }
          \end{scope}
          \fill[generator-2-1-2-pos] (5,2) circle (0.14);
          \fill[generator-2-1-2-pos] (5,4) circle (0.14);
          \fill[generator-2-1-2-neg] (5,8) circle (0.14);
          \end{tikzpicture}
          \end{adjustbox}
          \\
          &
          \begin{adjustbox}{max width=0.3\textwidth}
          \begin{tikzpicture}[baseline=(current bounding box.center)]
          \definecolor{generator-2-1-0-pos}{RGB}{243, 156, 18}
          \definecolor{generator-2-1-1-zer}{RGB}{251, 221, 173}
          \definecolor{generator-2-1-2-pos}{RGB}{247, 188, 96}

          \newcommand{\wire}[2]{
            \ifdefined\recolor\draw[color=\recolor, line width=10pt]\else\draw[color=#1, line width=5pt]\fi #2
          }
          \newcommand{\clipped}[3]{
          \begin{scope}
            \newcommand{\recolor}{#1}
            \clip#3;
            #2
          \end{scope}
          }

          \begin{scope}[transparency group]
          % Background surfaces
          \fill[generator-2-1-0-pos] (0,0) -- (6,0) -- (6,6) -- (0,6) -- (0,0);
          \newcommand{\layer}[1]{
            \clipped{generator-2-1-0-pos}{#1}{(0,0) -- (6,0) -- (6,6) -- (0,6) -- (0,0)}
            #1
          }

          % Wire layers
          \wire{generator-2-1-1-zer}{(2,3) -- (2,6)};
          \layer{
          \wire{generator-2-1-1-zer}{(3,2) .. controls (2.4,2) and (2,2.2) .. (2,3)(3,2) .. controls (3.6,2) and (4,2.2) .. (4,3) -- (4,6)};
          }
          \end{scope}
          \fill[generator-2-1-2-pos] (3,2) circle (0.14);
          \end{tikzpicture}
          \end{adjustbox}
          &
          \begin{adjustbox}{max width=0.3\textwidth}
          \begin{tikzpicture}[baseline=(current bounding box.center)]
          \definecolor{generator-2-1-0-pos}{RGB}{243, 156, 18}
          \definecolor{generator-2-1-1-zer}{RGB}{251, 221, 173}
          \definecolor{generator-2-1-2-pos}{RGB}{247, 188, 96}

          \newcommand{\wire}[2]{
            \ifdefined\recolor\draw[color=\recolor, line width=10pt]\else\draw[color=#1, line width=5pt]\fi #2
          }
          \newcommand{\clipped}[3]{
          \begin{scope}
            \newcommand{\recolor}{#1}
            \clip#3;
            #2
          \end{scope}
          }

          \begin{scope}[transparency group]
          % Background surfaces
          \fill[generator-2-1-0-pos] (0,0) -- (6,0) -- (6,4) -- (0,4) -- (0,0);
          \newcommand{\layer}[1]{
            \clipped{generator-2-1-0-pos}{#1}{(0,0) -- (6,0) -- (6,4) -- (0,4) -- (0,0)}
            #1
          }

          % Wire layers
          \wire{generator-2-1-1-zer}{(2,3) -- (2,4)};
          \layer{
          \wire{generator-2-1-1-zer}{(3,2) .. controls (2.4,2) and (2,2.2) .. (2,3)(3,2) .. controls (3.6,2) and (4,2.2) .. (4,3) -- (4,4)};
          }
          \end{scope}
          \fill[generator-2-1-2-pos] (3,2) circle (0.14);
          \end{tikzpicture}
          \end{adjustbox}
          \end{tabular}
        ]]></fr:resource-source></fr:resource>
        is equivalent to the identity 4-cell.
      </html:p><html:p>
        Equivalently, <fr:link href="/coherent-inverses-Q0TG/" title="Butterfly source 4D animation" uri="https://forest.nickx.hu/coherent-inverses-Q0TG/" display-uri="coherent-inverses-Q0TG" type="local">figure <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-Q0TG/" display-uri="coherent-inverses-Q0TG" /></fr:link> allows us to view the above as a sequence of transformations of 3-dimensional surface diagrams, which is built entirely out of swallowtail introduction/cancellation moves and interchange, rendered in 4D as an animation:
        The butterfly coherence asserts that this is equivalent to the ‘do-nothing’ identity transformation.
      </html:p><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2025</fr:year><fr:month>1</fr:month><fr:day>8</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-Q0TG/</fr:uri><fr:display-uri>coherent-inverses-Q0TG</fr:display-uri><fr:route>/coherent-inverses-Q0TG/</fr:route><fr:title text="Butterfly source 4D animation">Butterfly <fr:link href="/coherent-inverses-G6FI/" title="source and target of a zigzag" uri="https://forest.nickx.hu/coherent-inverses-G6FI/" display-uri="coherent-inverses-G6FI" type="local">source</fr:link> 4D animation</fr:title><fr:taxon>figure</fr:taxon></fr:frontmatter><fr:mainmatter><html:figure><html:div>
    <html:img src="/bafkrmidzu733zo6wliaoso3puuxnj2l5cghqbon56e7zzam2plir5qvnf4.png" width=" 30%" />
    <html:img src="/bafkrmig76uljngnarljfup2ndr2hpt5xa2kf2mbaxbf43nkdylhrdj4t2a.png" width=" 30%" />
    <html:img src="/bafkrmihfslc4cdde4k5scbazvtruhkm4cuntjfzkat6xj2vm452brhylke.png" width=" 30%" />
    <html:img src="/bafkrmihsrpdkj6lwfodze2yt7ps25mdtvoxihza4vx45orgw7ebryncr2a.png" width=" 30%" />
    <html:img src="/bafkrmifnj3hedjljawtlqybkk6vw3pbcojswrpd2wkkdo7mll2yxgpeu7i.png" width=" 30%" />
  </html:div>
  <html:figcaption>The <fr:link href="/coherent-inverses-G6FI/" title="source and target of a zigzag" uri="https://forest.nickx.hu/coherent-inverses-G6FI/" display-uri="coherent-inverses-G6FI" type="local">source</fr:link> of the butterfly 5D diagram, rendered at time <fr:tex display="inline"><![CDATA[t = 0, 0.25, 0.5, 0.75, 1]]></fr:tex>.</html:figcaption></html:figure></fr:mainmatter></fr:tree><html:p>
        In the second Morse projection, we construct this by <fr:link href="/coherent-inverses-FHS4/" title="contraction" uri="https://forest.nickx.hu/coherent-inverses-FHS4/" display-uri="coherent-inverses-FHS4" type="local">contraction</fr:link> resulting in the following <fr:link href="/coherent-inverses-OBFZ/" title="zigzag homotopy" uri="https://forest.nickx.hu/coherent-inverses-OBFZ/" display-uri="coherent-inverses-OBFZ" type="local">zigzag homotopy</fr:link>:
        <fr:resource hash="f5e1f07e774e47fec4183eab5b5044c1"><fr:resource-content><html:img src="/f5e1f07e774e47fec4183eab5b5044c1.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[
    \usepackage {adjustbox}
    \usepackage {amsmath,amssymb}
    \usepackage {tikz}
    \usetikzlibrary {cd}
  ]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
    $
                    \begin{adjustbox}{max width=0.3\textwidth}
          \begin{tikzpicture}[baseline=(current bounding box.center)]
          \definecolor{generator-2-1-1-pos}{RGB}{245, 172, 57}
          \definecolor{generator-2-1-2-pos}{RGB}{247, 188, 96}
          \definecolor{generator-2-1-0-pos}{RGB}{243, 156, 18}
          \definecolor{generator-2-1-2-zer}{RGB}{127, 80, 6}
          \definecolor{generator-2-1-0-zer}{RGB}{249, 205, 135}

          \newcommand{\wire}[2]{
            \ifdefined\recolor\draw[color=\recolor, line width=10pt]\else\draw[color=#1, line width=5pt]\fi #2
          }
          \newcommand{\clipped}[3]{
          \begin{scope}
            \newcommand{\recolor}{#1}
            \clip#3;
            #2
          \end{scope}
          }

          \begin{scope}[transparency group]
          % Background surfaces
          \fill[generator-2-1-1-pos] (0,0) -- (14,0) -- (14,12) -- (0,12) -- (0,0);
          \newcommand{\layer}[1]{
            \clipped{generator-2-1-1-pos}{#1}{(0,0) -- (14,0) -- (14,12) -- (0,12) -- (0,0)}
            #1
          }

          % Wire layers
          \wire{generator-2-1-2-zer}{(10,7) -- (10,9)};
          \layer{
          \wire{generator-2-1-2-pos}{(6,3) -- (6,4) .. controls (4.8,4) and (4,4.2) .. (4,5) .. controls (4,5.8) and (3.6,6) .. (3,6) .. controls (2.4,6) and (2,6.2) .. (2,7)(12,3) -- (12,9) .. controls (12,9.8) and (10.8,10) .. (9,10)(6,9) .. controls (6,9.8) and (7.2,10) .. (9,10)};
          \wire{generator-2-1-2-zer}{(6,4) -- (6,7)(6,4) .. controls (7.2,4) and (8,4.2) .. (8,5) .. controls (8,5.8) and (8.4,6) .. (9,6) .. controls (9.6,6) and (10,6.2) .. (10,7)(10,9) .. controls (10,9.8) and (9.6,10) .. (9,10)};
          }
          \layer{
          \wire{generator-2-1-2-zer}{(6,7) -- (6,8)};
          \wire{generator-2-1-2-pos}{(2,0) -- (2,5) .. controls (2,5.8) and (2.4,6) .. (3,6) .. controls (3.6,6) and (4,6.2) .. (4,7) .. controls (4,7.8) and (4.8,8) .. (6,8) -- (6,9)(9,2) .. controls (7.2,2) and (6,2.2) .. (6,3)(9,2) .. controls (9.6,2) and (10,2.2) .. (10,3) -- (10,5) .. controls (10,5.8) and (9.6,6) .. (9,6) .. controls (8.4,6) and (8,6.2) .. (8,7) .. controls (8,7.8) and (7.2,8) .. (6,8)(9,2) .. controls (10.8,2) and (12,2.2) .. (12,3)(2,7) -- (2,12)};
          }
          \end{scope}
          \fill[generator-2-1-0-pos] (9,2) circle (0.14);
          \fill[generator-2-1-0-zer] (6,4) circle (0.14);
          \fill[generator-2-1-0-pos] (6,8) circle (0.14);
          \fill[generator-2-1-0-zer] (9,10) circle (0.14);
          \end{tikzpicture}
          \end{adjustbox}
          \to
          \begin{adjustbox}{max width=0.3\textwidth}
          \begin{tikzpicture}[baseline=(current bounding box.center)]
          \definecolor{generator-2-1-1-pos}{RGB}{245, 172, 57}
          \definecolor{generator-2-1-2-pos}{RGB}{247, 188, 96}
          \begin{scope}
          % Background surfaces
          \fill[generator-2-1-1-pos] (0,0) -- (4,0) -- (4,4) -- (0,4) -- (0,0);
          % Wire layers
          \draw[color=generator-2-1-2-pos, line width=5pt](2,0) -- (2,4);
          \end{scope}
          \end{tikzpicture}
          \end{adjustbox}
          \leftarrow
          \begin{adjustbox}{max width=0.3\textwidth}
          \begin{tikzpicture}[baseline=(current bounding box.center)]
          \definecolor{generator-2-1-1-pos}{RGB}{245, 172, 57}
          \definecolor{generator-2-1-2-pos}{RGB}{247, 188, 96}
          \begin{scope}
          % Background surfaces
          \fill[generator-2-1-1-pos] (0,0) -- (4,0) -- (4,2) -- (0,2) -- (0,0);
          % Wire layers
          \draw[color=generator-2-1-2-pos, line width=5pt](2,0) -- (2,2);
          \end{scope}
          \end{tikzpicture}
          \end{adjustbox}
        $
  ]]></fr:resource-source></fr:resource></html:p></fr:mainmatter></fr:tree><html:p>
      Link to online proof: <fr:link href="https://beta.homotopy.io/p/2412.00002" type="external">https://beta.homotopy.io/p/2412.00002</fr:link>.
    </html:p></fr:mainmatter></fr:tree><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2023</fr:year><fr:month>12</fr:month><fr:day>3</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-applications-figure-8-isotopy/</fr:uri><fr:display-uri>coherent-inverses-applications-figure-8-isotopy</fr:display-uri><fr:route>/coherent-inverses-applications-figure-8-isotopy/</fr:route><fr:title text="Figure-8 isotopy">Figure-8 isotopy</fr:title><fr:taxon>section</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
      The <fr:link href="/pursuing-stacks/" title="Pursuing Stacks" uri="https://forest.nickx.hu/pursuing-stacks/" display-uri="pursuing-stacks" type="local"><html:em>homotopy hypothesis</html:em></fr:link> establishes a correspondence between topological spaces (up to homotopy equivalence) with <fr:tex display="inline"><![CDATA[\infty ]]></fr:tex>-groupoids.
      Moreover, an <fr:tex display="inline"><![CDATA[\infty ]]></fr:tex>-groupoid is merely a higher category for which every <fr:tex display="inline"><![CDATA[n]]></fr:tex>-cell, for <fr:tex display="inline"><![CDATA[n > 0]]></fr:tex>, is invertible.
      We can utilise this connection to present spaces algebraically with string diagrams, which we then manipulate within <html:span tex="\homotopyio{}"><fr:link href="/homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories/" title="homotopy.io: a proof assistant for finitely-presented globular $n$-categories" uri="https://forest.nickx.hu/homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories/" display-uri="homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories" type="local"><html:code>homotopy.io</html:code></fr:link></html:span> to deduce theorems about topology.
      A benefit of this approach is that the geometry of string diagrams aligns nicely with topological intuition, allowing for an algebraic formalisation of essentially topological arguments.
    </html:p><html:p>
      The free <fr:tex display="inline"><![CDATA[\infty ]]></fr:tex>-groupoid <fr:tex display="inline"><![CDATA[\mathcal {S}]]></fr:tex> on a 0-cell <fr:tex display="inline"><![CDATA[x]]></fr:tex> and a single 2-cell <fr:tex display="inline"><![CDATA[f\colon  
  \text {id}_{x}
 \Rightarrow  
  \text {id}_{x}
]]></fr:tex> generates the homotopy type of the 2-sphere <fr:tex display="inline"><![CDATA[S^2]]></fr:tex>, where the homotopy classes of the 3-cells in any given Hom set are in bijection with the elements of the homotopy group <fr:tex display="inline"><![CDATA[\pi _3 (S^2)]]></fr:tex>.
    </html:p><html:p>
      Let us examine the Hom set <fr:tex display="inline"><![CDATA[\mathcal {S} (
  \text {id}_{
  \text {id}_{x}
}
, 
  \text {id}_{
  \text {id}_{x}
}
)]]></fr:tex>.
      The identity 3-cell <fr:tex display="inline"><![CDATA[
  \text {id}_{
  \text {id}_{
  \text {id}_{x}
}
}
]]></fr:tex>, corresponding to the unit element of <fr:tex display="inline"><![CDATA[\pi _3 (S^2)]]></fr:tex>, as a 2-dimensional string diagram in the first Morse projection is given by:
      <html:figure><fr:resource hash="33c807d396ebe6df75d157b9d6c535c7"><fr:resource-content><html:img src="/33c807d396ebe6df75d157b9d6c535c7.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[
    \usepackage {adjustbox}
    \usepackage {amsmath,amssymb}
    \usepackage {tikz}
    \usetikzlibrary {cd}
  ]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
    $
                    \begin{adjustbox}{max width=0.3\textwidth}
          \begin{tikzpicture}
          \definecolor{generator-0-0-1-pos}{RGB}{56, 150, 211}
          \begin{scope}
          % Background surfaces
          \fill[generator-0-0-1-pos] (0,0) -- (2,0) -- (2,2) -- (0,2) -- (0,0);
          % Wire layers
          \end{scope}
          \end{tikzpicture}
          \end{adjustbox}
        $
  ]]></fr:resource-source></fr:resource></html:figure>
      There is a ‘figure-8’ 3-cell as follows, with its corresponding inverse:
      <html:figure><fr:resource hash="a0897dc659bc4a6b6ada0bff95c8b222"><fr:resource-content><html:img src="/a0897dc659bc4a6b6ada0bff95c8b222.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[
    \usepackage {adjustbox}
    \usepackage {amsmath,amssymb}
    \usepackage {tikz}
    \usetikzlibrary {cd}
  ]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
    $
                    \mathbf{8} =
          \begin{adjustbox}{max width=0.3\textwidth}
          \begin{tikzpicture}[baseline=(current bounding box.center)]
          \definecolor{generator-1-2-1-zer}{RGB}{235, 170, 164}
          \definecolor{generator-1-2-0-neg}{RGB}{121, 36, 27}
          \definecolor{generator-1-2-0-pos}{RGB}{192, 57, 43}
          \definecolor{generator-0-0-1-pos}{RGB}{56, 150, 211}

          \newcommand{\wire}[2]{
            \ifdefined\recolor\draw[color=\recolor, line width=10pt]\else\draw[color=#1, line width=5pt]\fi #2
          }
          \newcommand{\clipped}[3]{
          \begin{scope}
            \newcommand{\recolor}{#1}
            \clip#3;
            #2
          \end{scope}
          }

          \begin{scope}[transparency group]
          % Background surfaces
          \fill[generator-0-0-1-pos] (0,0) -- (6,0) -- (6,8) -- (0,8) -- (0,0);
          \newcommand{\layer}[1]{
            \clipped{generator-0-0-1-pos}{#1}{(0,0) -- (6,0) -- (6,8) -- (0,8) -- (0,0)}
            #1
          }

          % Wire layers
          \wire{generator-1-2-0-neg}{(2,3) .. controls (2,3.8) and (2.4,4) .. (3,4) .. controls (3.6,4) and (4,4.2) .. (4,5)};
          \layer{
          \wire{generator-1-2-0-pos}{(3,2) .. controls (3.6,2) and (4,2.2) .. (4,3) .. controls (4,3.8) and (3.6,4) .. (3,4) .. controls (2.4,4) and (2,4.2) .. (2,5) .. controls (2,5.8) and (2.4,6) .. (3,6)};
          \wire{generator-1-2-0-neg}{(3,2) .. controls (2.4,2) and (2,2.2) .. (2,3)(4,5) .. controls (4,5.8) and (3.6,6) .. (3,6)};
          }
          \end{scope}
          \fill[generator-1-2-1-zer] (3,2) circle (0.14);
          \fill[generator-1-2-1-zer] (3,6) circle (0.14);
          \end{tikzpicture}
          \end{adjustbox}
          \overset{\text{inverse}}{\leftrightarrow}
          \begin{adjustbox}{max width=0.3\textwidth}
          \begin{tikzpicture}[baseline=(current bounding box.center)]
          \definecolor{generator-1-2-1-zer}{RGB}{235, 170, 164}
          \definecolor{generator-1-2-0-neg}{RGB}{121, 36, 27}
          \definecolor{generator-1-2-0-pos}{RGB}{192, 57, 43}
          \definecolor{generator-0-0-1-pos}{RGB}{56, 150, 211}

          \newcommand{\wire}[2]{
            \ifdefined\recolor\draw[color=\recolor, line width=10pt]\else\draw[color=#1, line width=5pt]\fi #2
          }
          \newcommand{\clipped}[3]{
          \begin{scope}
            \newcommand{\recolor}{#1}
            \clip#3;
            #2
          \end{scope}
          }

          \begin{scope}[transparency group]
          % Background surfaces
          \fill[generator-0-0-1-pos] (0,0) -- (6,0) -- (6,8) -- (0,8) -- (0,0);
          \newcommand{\layer}[1]{
            \clipped{generator-0-0-1-pos}{#1}{(0,0) -- (6,0) -- (6,8) -- (0,8) -- (0,0)}
            #1
          }

          % Wire layers
          \wire{generator-1-2-0-neg}{(4,3) .. controls (4,3.8) and (3.6,4) .. (3,4) .. controls (2.4,4) and (2,4.2) .. (2,5)};
          \layer{
          \wire{generator-1-2-0-pos}{(3,2) .. controls (2.4,2) and (2,2.2) .. (2,3) .. controls (2,3.8) and (2.4,4) .. (3,4) .. controls (3.6,4) and (4,4.2) .. (4,5) .. controls (4,5.8) and (3.6,6) .. (3,6)};
          \wire{generator-1-2-0-neg}{(3,2) .. controls (3.6,2) and (4,2.2) .. (4,3)(2,5) .. controls (2,5.8) and (2.4,6) .. (3,6)};
          }
          \end{scope}
          \fill[generator-1-2-1-zer] (3,2) circle (0.14);
          \fill[generator-1-2-1-zer] (3,6) circle (0.14);
          \end{tikzpicture}
          \end{adjustbox}
          = \mathbf{8}^{-1}.
        $
  ]]></fr:resource-source></fr:resource></html:figure>
      The witness for this invertibility, in dimension 4 (i.e. the invertible 4-cell <fr:tex display="inline"><![CDATA[\mathbf {8}^{-1} \circ  \mathbf {8} \overset {\sim }{\Rightarrow } 
  \text {id}_{
  \text {id}_{
  \text {id}_{x}
}
}
]]></fr:tex>) is given by the <fr:link href="/coherent-inverses-OBFZ/" title="zigzag homotopy" uri="https://forest.nickx.hu/coherent-inverses-OBFZ/" display-uri="coherent-inverses-OBFZ" type="local">zigzag homotopy</fr:link>:
      <fr:resource hash="529045409933d0d55012dd98ec6c2645"><fr:resource-content><html:img src="/529045409933d0d55012dd98ec6c2645.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[\usepackage {adjustbox,tikz}]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
                \begin{tabular}{c @{{}$\to${}} c @{{}$\leftarrow${}} c}
        \begin{adjustbox}{max width=0.3\textwidth}
        \begin{tikzpicture}[baseline=(current bounding box.center)]
        \definecolor{generator-1-2-1-zer}{RGB}{235, 170, 164}
        \definecolor{generator-1-2-0-neg}{RGB}{121, 36, 27}
        \definecolor{generator-1-2-0-pos}{RGB}{192, 57, 43}
        \definecolor{generator-0-0-1-pos}{RGB}{56, 150, 211}

        \newcommand{\wire}[2]{
          \ifdefined\recolor\draw[color=\recolor, line width=10pt]\else\draw[color=#1, line width=5pt]\fi #2
        }
        \newcommand{\clipped}[3]{
        \begin{scope}
          \newcommand{\recolor}{#1}
          \clip#3;
          #2
        \end{scope}
        }

        \begin{scope}[transparency group]
        % Background surfaces
        \fill[generator-0-0-1-pos] (0,0) -- (6,0) -- (6,14) -- (0,14) -- (0,0);
        \newcommand{\layer}[1]{
          \clipped{generator-0-0-1-pos}{#1}{(0,0) -- (6,0) -- (6,14) -- (0,14) -- (0,0)}
          #1
        }

        % Wire layers
        \wire{generator-1-2-0-neg}{(2,3) .. controls (2,3.8) and (2.4,4) .. (3,4) .. controls (3.6,4) and (4,4.2) .. (4,5)(4,9) .. controls (4,9.8) and (3.6,10) .. (3,10) .. controls (2.4,10) and (2,10.2) .. (2,11)};
        \layer{
        \wire{generator-1-2-0-pos}{(3,2) .. controls (3.6,2) and (4,2.2) .. (4,3) .. controls (4,3.8) and (3.6,4) .. (3,4) .. controls (2.4,4) and (2,4.2) .. (2,5) .. controls (2,5.8) and (2.4,6) .. (3,6)(3,8) .. controls (2.4,8) and (2,8.2) .. (2,9) .. controls (2,9.8) and (2.4,10) .. (3,10) .. controls (3.6,10) and (4,10.2) .. (4,11) .. controls (4,11.8) and (3.6,12) .. (3,12)};
        \wire{generator-1-2-0-neg}{(3,2) .. controls (2.4,2) and (2,2.2) .. (2,3)(4,5) .. controls (4,5.8) and (3.6,6) .. (3,6)(3,8) .. controls (3.6,8) and (4,8.2) .. (4,9)(2,11) .. controls (2,11.8) and (2.4,12) .. (3,12)};
        }
        \end{scope}
        \fill[generator-1-2-1-zer] (3,2) circle (0.14);
        \fill[generator-1-2-1-zer] (3,6) circle (0.14);
        \fill[generator-1-2-1-zer] (3,8) circle (0.14);
        \fill[generator-1-2-1-zer] (3,12) circle (0.14);
        \end{tikzpicture}
        \end{adjustbox}
        &
        \begin{adjustbox}{max width=0.3\textwidth}
        \begin{tikzpicture}[baseline=(current bounding box.center)]
        \definecolor{generator-1-2-1-zer}{RGB}{235, 170, 164}
        \definecolor{generator-1-2-0-neg}{RGB}{121, 36, 27}
        \definecolor{generator-1-2-0-pos}{RGB}{192, 57, 43}
        \definecolor{generator-0-0-1-pos}{RGB}{56, 150, 211}

        \newcommand{\wire}[2]{
          \ifdefined\recolor\draw[color=\recolor, line width=10pt]\else\draw[color=#1, line width=5pt]\fi #2
        }
        \newcommand{\clipped}[3]{
        \begin{scope}
          \newcommand{\recolor}{#1}
          \clip#3;
          #2
        \end{scope}
        }

        \begin{scope}[transparency group]
        % Background surfaces
        \fill[generator-0-0-1-pos] (0,0) -- (6,0) -- (6,12) -- (0,12) -- (0,0);
        \newcommand{\layer}[1]{
          \clipped{generator-0-0-1-pos}{#1}{(0,0) -- (6,0) -- (6,12) -- (0,12) -- (0,0)}
          #1
        }

        % Wire layers
        \wire{generator-1-2-0-neg}{(2,3) .. controls (2,3.8) and (2.4,4) .. (3,4) .. controls (3.6,4) and (4,4.2) .. (4,5)(4,7) .. controls (4,7.8) and (3.6,8) .. (3,8) .. controls (2.4,8) and (2,8.2) .. (2,9)};
        \layer{
        \wire{generator-1-2-0-pos}{(3,2) .. controls (3.6,2) and (4,2.2) .. (4,3) .. controls (4,3.8) and (3.6,4) .. (3,4) .. controls (2.4,4) and (2,4.2) .. (2,5) .. controls (2,5.8) and (2.4,6) .. (3,6) .. controls (2.4,6) and (2,6.2) .. (2,7) .. controls (2,7.8) and (2.4,8) .. (3,8) .. controls (3.6,8) and (4,8.2) .. (4,9) .. controls (4,9.8) and (3.6,10) .. (3,10)};
        \wire{generator-1-2-0-neg}{(3,2) .. controls (2.4,2) and (2,2.2) .. (2,3)(4,5) .. controls (4,5.8) and (3.6,6) .. (3,6) .. controls (3.6,6) and (4,6.2) .. (4,7)(2,9) .. controls (2,9.8) and (2.4,10) .. (3,10)};
        }
        \end{scope}
        \fill[generator-1-2-1-zer] (3,2) circle (0.14);
        \fill[generator-1-2-1-zer] (3,6) circle (0.14);
        \fill[generator-1-2-1-zer] (3,10) circle (0.14);
        \end{tikzpicture}
        \end{adjustbox}
        &
        \begin{adjustbox}{max width=0.3\textwidth}
        \begin{tikzpicture}[baseline=(current bounding box.center)]
        \definecolor{generator-1-2-1-zer}{RGB}{235, 170, 164}
        \definecolor{generator-1-2-0-neg}{RGB}{121, 36, 27}
        \definecolor{generator-1-2-0-pos}{RGB}{192, 57, 43}
        \definecolor{generator-0-0-1-pos}{RGB}{56, 150, 211}

        \newcommand{\wire}[2]{
          \ifdefined\recolor\draw[color=\recolor, line width=10pt]\else\draw[color=#1, line width=5pt]\fi #2
        }
        \newcommand{\clipped}[3]{
        \begin{scope}
          \newcommand{\recolor}{#1}
          \clip#3;
          #2
        \end{scope}
        }

        \begin{scope}[transparency group]
        % Background surfaces
        \fill[generator-0-0-1-pos] (0,0) -- (6,0) -- (6,10) -- (0,10) -- (0,0);
        \newcommand{\layer}[1]{
          \clipped{generator-0-0-1-pos}{#1}{(0,0) -- (6,0) -- (6,10) -- (0,10) -- (0,0)}
          #1
        }

        % Wire layers
        \wire{generator-1-2-0-neg}{(2,3) .. controls (2,3.8) and (2.4,4) .. (3,4) .. controls (3.6,4) and (4,4.2) .. (4,5) .. controls (4,5.8) and (3.6,6) .. (3,6) .. controls (2.4,6) and (2,6.2) .. (2,7)};
        \layer{
        \wire{generator-1-2-0-pos}{(3,2) .. controls (3.6,2) and (4,2.2) .. (4,3) .. controls (4,3.8) and (3.6,4) .. (3,4) .. controls (2.4,4) and (2,4.2) .. (2,5) .. controls (2,5.8) and (2.4,6) .. (3,6) .. controls (3.6,6) and (4,6.2) .. (4,7) .. controls (4,7.8) and (3.6,8) .. (3,8)};
        \wire{generator-1-2-0-neg}{(3,2) .. controls (2.4,2) and (2,2.2) .. (2,3)(2,7) .. controls (2,7.8) and (2.4,8) .. (3,8)};
        }
        \end{scope}
        \fill[generator-1-2-1-zer] (3,2) circle (0.14);
        \fill[generator-1-2-1-zer] (3,8) circle (0.14);
        \end{tikzpicture}
        \end{adjustbox}
        \\
        &
        \begin{adjustbox}{max width=0.3\textwidth}
        \begin{tikzpicture}[baseline=(current bounding box.center)]
        \definecolor{generator-1-2-1-zer}{RGB}{235, 170, 164}
        \definecolor{generator-1-2-0-neg}{RGB}{121, 36, 27}
        \definecolor{generator-1-2-0-pos}{RGB}{192, 57, 43}
        \definecolor{generator-0-0-1-pos}{RGB}{56, 150, 211}

        \newcommand{\wire}[2]{
          \ifdefined\recolor\draw[color=\recolor, line width=10pt]\else\draw[color=#1, line width=5pt]\fi #2
        }
        \newcommand{\clipped}[3]{
        \begin{scope}
          \newcommand{\recolor}{#1}
          \clip#3;
          #2
        \end{scope}
        }

        \begin{scope}[transparency group]
        % Background surfaces
        \fill[generator-0-0-1-pos] (0,0) -- (6,0) -- (6,8) -- (0,8) -- (0,0);
        \newcommand{\layer}[1]{
          \clipped{generator-0-0-1-pos}{#1}{(0,0) -- (6,0) -- (6,8) -- (0,8) -- (0,0)}
          #1
        }

        % Wire layers
        \wire{generator-1-2-0-neg}{(2,3) .. controls (2,3.8) and (3,3.6) .. (3,4) .. controls (3,4.4) and (2,4.2) .. (2,5)};
        \layer{
        \wire{generator-1-2-0-pos}{(3,2) .. controls (3.6,2) and (4,2.2) .. (4,3) .. controls (4,3.8) and (3,3.6) .. (3,4) .. controls (3,4.4) and (4,4.2) .. (4,5) .. controls (4,5.8) and (3.6,6) .. (3,6)};
        \wire{generator-1-2-0-neg}{(3,2) .. controls (2.4,2) and (2,2.2) .. (2,3)(2,5) .. controls (2,5.8) and (2.4,6) .. (3,6)};
        }
        \end{scope}
        \fill[generator-1-2-1-zer] (3,2) circle (0.14);
        \fill[generator-1-2-1-zer] (3,6) circle (0.14);
        \end{tikzpicture}
        \end{adjustbox}
        &
        \begin{adjustbox}{max width=0.3\textwidth}
        \begin{tikzpicture}[baseline=(current bounding box.center)]
        \definecolor{generator-1-2-1-zer}{RGB}{235, 170, 164}
        \definecolor{generator-1-2-0-pos}{RGB}{192, 57, 43}
        \definecolor{generator-1-2-0-neg}{RGB}{121, 36, 27}
        \definecolor{generator-0-0-1-pos}{RGB}{56, 150, 211}
        \begin{scope}
        % Background surfaces
        \fill[generator-0-0-1-pos] (0,0) -- (6,0) -- (6,6) -- (0,6) -- (0,0);
        % Wire layers
        \draw[color=generator-1-2-0-pos, line width=5pt](3,2) .. controls (3.6,2) and (4,2.2) .. (4,3) .. controls (4,3.8) and (3.6,4) .. (3,4);
        \draw[color=generator-1-2-0-neg, line width=5pt](3,2) .. controls (2.4,2) and (2,2.2) .. (2,3) .. controls (2,3.8) and (2.4,4) .. (3,4);
        \end{scope}
        \fill[generator-1-2-1-zer] (3,2) circle (0.14);
        \fill[generator-1-2-1-zer] (3,4) circle (0.14);
        \end{tikzpicture}
        \end{adjustbox}
        \\
        &
        \begin{adjustbox}{max width=0.3\textwidth}
        \begin{tikzpicture}[baseline=(current bounding box.center)]
        \definecolor{generator-1-2-1-zer}{RGB}{235, 170, 164}
        \definecolor{generator-0-0-1-pos}{RGB}{56, 150, 211}
        \begin{scope}
        % Background surfaces
        \fill[generator-0-0-1-pos] (0,0) -- (4,0) -- (4,4) -- (0,4) -- (0,0);
        % Wire layers
        \end{scope}
        \fill[generator-1-2-1-zer] (2,2) circle (0.14);
        \end{tikzpicture}
        \end{adjustbox}
        &
        \begin{adjustbox}{max width=0.3\textwidth}
        \begin{tikzpicture}[baseline=(current bounding box.center)]
        \definecolor{generator-0-0-1-pos}{RGB}{56, 150, 211}
        \begin{scope}
        % Background surfaces
        \fill[generator-0-0-1-pos] (0,0) -- (2,0) -- (2,2) -- (0,2) -- (0,0);
        % Wire layers
        \end{scope}
        \end{tikzpicture}
        \end{adjustbox}
        \end{tabular}
      ]]></fr:resource-source></fr:resource></html:p><html:p>
      However, there is another ‘figure-8’ along with its inverse, obtained similarly to <fr:tex display="inline"><![CDATA[\mathbf {8}]]></fr:tex>, but with the over/under braiding swapped:
      <html:figure><fr:resource hash="cc9929c50d86df9a64de78ed1389cee4"><fr:resource-content><html:img src="/cc9929c50d86df9a64de78ed1389cee4.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[
    \usepackage {adjustbox}
    \usepackage {amsmath,amssymb}
    \usepackage {tikz}
    \usetikzlibrary {cd}
  ]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
    $
                    \mathbf{8}^\prime =
          \begin{adjustbox}{max width=0.3\textwidth}
          \begin{tikzpicture}[baseline=(current bounding box.center)]
          \definecolor{generator-1-2-1-zer}{RGB}{235, 170, 164}
          \definecolor{generator-1-2-0-pos}{RGB}{192, 57, 43}
          \definecolor{generator-1-2-0-neg}{RGB}{121, 36, 27}
          \definecolor{generator-0-0-1-pos}{RGB}{56, 150, 211}

          \newcommand{\wire}[2]{
            \ifdefined\recolor\draw[color=\recolor, line width=10pt]\else\draw[color=#1, line width=5pt]\fi #2
          }
          \newcommand{\clipped}[3]{
          \begin{scope}
            \newcommand{\recolor}{#1}
            \clip#3;
            #2
          \end{scope}
          }

          \begin{scope}[transparency group]
          % Background surfaces
          \fill[generator-0-0-1-pos] (0,0) -- (6,0) -- (6,8) -- (0,8) -- (0,0);
          \newcommand{\layer}[1]{
            \clipped{generator-0-0-1-pos}{#1}{(0,0) -- (6,0) -- (6,8) -- (0,8) -- (0,0)}
            #1
          }

          % Wire layers
          \wire{generator-1-2-0-pos}{(4,3) .. controls (4,3.8) and (3.6,4) .. (3,4) .. controls (2.4,4) and (2,4.2) .. (2,5)};
          \layer{
          \wire{generator-1-2-0-pos}{(3,2) .. controls (3.6,2) and (4,2.2) .. (4,3)(2,5) .. controls (2,5.8) and (2.4,6) .. (3,6)};
          \wire{generator-1-2-0-neg}{(3,2) .. controls (2.4,2) and (2,2.2) .. (2,3) .. controls (2,3.8) and (2.4,4) .. (3,4) .. controls (3.6,4) and (4,4.2) .. (4,5) .. controls (4,5.8) and (3.6,6) .. (3,6)};
          }
          \end{scope}
          \fill[generator-1-2-1-zer] (3,2) circle (0.14);
          \fill[generator-1-2-1-zer] (3,6) circle (0.14);
          \end{tikzpicture}
          \end{adjustbox}
          \overset{\text{inverse}}{\leftrightarrow}
          \begin{adjustbox}{max width=0.3\textwidth}
          \begin{tikzpicture}[baseline=(current bounding box.center)]
          \definecolor{generator-1-2-1-zer}{RGB}{235, 170, 164}
          \definecolor{generator-1-2-0-pos}{RGB}{192, 57, 43}
          \definecolor{generator-1-2-0-neg}{RGB}{121, 36, 27}
          \definecolor{generator-0-0-1-pos}{RGB}{56, 150, 211}

          \newcommand{\wire}[2]{
            \ifdefined\recolor\draw[color=\recolor, line width=10pt]\else\draw[color=#1, line width=5pt]\fi #2
          }
          \newcommand{\clipped}[3]{
          \begin{scope}
            \newcommand{\recolor}{#1}
            \clip#3;
            #2
          \end{scope}
          }

          \begin{scope}[transparency group]
          % Background surfaces
          \fill[generator-0-0-1-pos] (0,0) -- (6,0) -- (6,8) -- (0,8) -- (0,0);
          \newcommand{\layer}[1]{
            \clipped{generator-0-0-1-pos}{#1}{(0,0) -- (6,0) -- (6,8) -- (0,8) -- (0,0)}
            #1
          }

          % Wire layers
          \wire{generator-1-2-0-pos}{(2,3) .. controls (2,3.8) and (2.4,4) .. (3,4) .. controls (3.6,4) and (4,4.2) .. (4,5)};
          \layer{
          \wire{generator-1-2-0-pos}{(3,2) .. controls (2.4,2) and (2,2.2) .. (2,3)(4,5) .. controls (4,5.8) and (3.6,6) .. (3,6)};
          \wire{generator-1-2-0-neg}{(3,2) .. controls (3.6,2) and (4,2.2) .. (4,3) .. controls (4,3.8) and (3.6,4) .. (3,4) .. controls (2.4,4) and (2,4.2) .. (2,5) .. controls (2,5.8) and (2.4,6) .. (3,6)};
          }
          \end{scope}
          \fill[generator-1-2-1-zer] (3,2) circle (0.14);
          \fill[generator-1-2-1-zer] (3,6) circle (0.14);
          \end{tikzpicture}
          \end{adjustbox}
          = {\mathbf{8}^\prime}^{-1}.
        $
  ]]></fr:resource-source></fr:resource></html:figure>
      This pair of 3-cells is a priori different; however, using the coherences for the invertibility of <fr:tex display="inline"><![CDATA[f]]></fr:tex>, we can deduce that this is related by homotopy to the original pair.
    </html:p><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>12</fr:month><fr:day>25</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-0D6X/</fr:uri><fr:display-uri>coherent-inverses-0D6X</fr:display-uri><fr:route>/coherent-inverses-0D6X/</fr:route><fr:title text="Figure-8 isotopy">Figure-8 isotopy</fr:title><fr:taxon>theorem</fr:taxon></fr:frontmatter><fr:mainmatter><html:p>
  With respect to <fr:tex display="inline"><![CDATA[\mathcal {S}]]></fr:tex>, the 3-cells <fr:tex display="inline"><![CDATA[\mathbf {8}]]></fr:tex> and <fr:tex display="inline"><![CDATA[{\mathbf {8}^\prime }^{-1}]]></fr:tex> are homotopic:
  <html:figure><fr:resource hash="57aabdf98176a566d97e84cc88a1ddf0"><fr:resource-content><html:img src="/57aabdf98176a566d97e84cc88a1ddf0.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[
    \usepackage {adjustbox}
    \usepackage {amsmath,amssymb}
    \usepackage {tikz}
    \usetikzlibrary {cd}
  ]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
    $
            \begin{adjustbox}{max width=0.3\textwidth}
      \begin{tikzpicture}[baseline=(current bounding box.center)]
      \definecolor{generator-1-2-1-zer}{RGB}{235, 170, 164}
      \definecolor{generator-1-2-0-neg}{RGB}{121, 36, 27}
      \definecolor{generator-1-2-0-pos}{RGB}{192, 57, 43}
      \definecolor{generator-0-0-1-pos}{RGB}{56, 150, 211}

      \newcommand{\wire}[2]{
        \ifdefined\recolor\draw[color=\recolor, line width=10pt]\else\draw[color=#1, line width=5pt]\fi #2
      }
      \newcommand{\clipped}[3]{
      \begin{scope}
        \newcommand{\recolor}{#1}
        \clip#3;
        #2
      \end{scope}
      }

      \begin{scope}[transparency group]
      % Background surfaces
      \fill[generator-0-0-1-pos] (0,0) -- (6,0) -- (6,8) -- (0,8) -- (0,0);
      \newcommand{\layer}[1]{
        \clipped{generator-0-0-1-pos}{#1}{(0,0) -- (6,0) -- (6,8) -- (0,8) -- (0,0)}
        #1
      }

      % Wire layers
      \wire{generator-1-2-0-neg}{(2,3) .. controls (2,3.8) and (2.4,4) .. (3,4) .. controls (3.6,4) and (4,4.2) .. (4,5)};
      \layer{
      \wire{generator-1-2-0-pos}{(3,2) .. controls (3.6,2) and (4,2.2) .. (4,3) .. controls (4,3.8) and (3.6,4) .. (3,4) .. controls (2.4,4) and (2,4.2) .. (2,5) .. controls (2,5.8) and (2.4,6) .. (3,6)};
      \wire{generator-1-2-0-neg}{(3,2) .. controls (2.4,2) and (2,2.2) .. (2,3)(4,5) .. controls (4,5.8) and (3.6,6) .. (3,6)};
      }
      \end{scope}
      \fill[generator-1-2-1-zer] (3,2) circle (0.14);
      \fill[generator-1-2-1-zer] (3,6) circle (0.14);
      \end{tikzpicture}
      \end{adjustbox}
      \simeq
      \begin{adjustbox}{max width=0.3\textwidth}
      \begin{tikzpicture}[baseline=(current bounding box.center)]
      \definecolor{generator-1-2-1-zer}{RGB}{235, 170, 164}
      \definecolor{generator-1-2-0-pos}{RGB}{192, 57, 43}
      \definecolor{generator-1-2-0-neg}{RGB}{121, 36, 27}
      \definecolor{generator-0-0-1-pos}{RGB}{56, 150, 211}

      \newcommand{\wire}[2]{
        \ifdefined\recolor\draw[color=\recolor, line width=10pt]\else\draw[color=#1, line width=5pt]\fi #2
      }
      \newcommand{\clipped}[3]{
      \begin{scope}
        \newcommand{\recolor}{#1}
        \clip#3;
        #2
      \end{scope}
      }

      \begin{scope}[transparency group]
      % Background surfaces
      \fill[generator-0-0-1-pos] (0,0) -- (6,0) -- (6,8) -- (0,8) -- (0,0);
      \newcommand{\layer}[1]{
        \clipped{generator-0-0-1-pos}{#1}{(0,0) -- (6,0) -- (6,8) -- (0,8) -- (0,0)}
        #1
      }

      % Wire layers
      \wire{generator-1-2-0-pos}{(2,3) .. controls (2,3.8) and (2.4,4) .. (3,4) .. controls (3.6,4) and (4,4.2) .. (4,5)};
      \layer{
      \wire{generator-1-2-0-pos}{(3,2) .. controls (2.4,2) and (2,2.2) .. (2,3)(4,5) .. controls (4,5.8) and (3.6,6) .. (3,6)};
      \wire{generator-1-2-0-neg}{(3,2) .. controls (3.6,2) and (4,2.2) .. (4,3) .. controls (4,3.8) and (3.6,4) .. (3,4) .. controls (2.4,4) and (2,4.2) .. (2,5) .. controls (2,5.8) and (2.4,6) .. (3,6)};
      }
      \end{scope}
      \fill[generator-1-2-1-zer] (3,2) circle (0.14);
      \fill[generator-1-2-1-zer] (3,6) circle (0.14);
      \end{tikzpicture}
      \end{adjustbox}
    $
  ]]></fr:resource-source></fr:resource></html:figure></html:p>
 
   
   <fr:tree show-metadata="false" toc="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>12</fr:month><fr:day>25</fr:day></fr:date><fr:taxon>proof</fr:taxon></fr:frontmatter><fr:mainmatter>
  By the following <fr:link href="/coherent-inverses-OBFZ/" title="zigzag homotopy" uri="https://forest.nickx.hu/coherent-inverses-OBFZ/" display-uri="coherent-inverses-OBFZ" type="local">zigzag homotopy</fr:link>:
  <fr:resource hash="a0bfcbb6b9c8a6625f822b8ffcdb8743"><fr:resource-content><html:img src="/a0bfcbb6b9c8a6625f822b8ffcdb8743.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[\usepackage {adjustbox,tikz}]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
        \begin{tabular}{c @{{}$\to${}} c @{{}$\leftarrow${}} c}
    \begin{adjustbox}{max width=0.3\textwidth}
    \begin{tikzpicture}[baseline=(current bounding box.center)]
    \definecolor{generator-1-2-1-zer}{RGB}{235, 170, 164}
    \definecolor{generator-1-2-0-neg}{RGB}{121, 36, 27}
    \definecolor{generator-1-2-0-pos}{RGB}{192, 57, 43}
    \definecolor{generator-0-0-1-pos}{RGB}{56, 150, 211}

    \newcommand{\wire}[2]{
      \ifdefined\recolor\draw[color=\recolor, line width=10pt]\else\draw[color=#1, line width=5pt]\fi #2
    }
    \newcommand{\clipped}[3]{
    \begin{scope}
      \newcommand{\recolor}{#1}
      \clip#3;
      #2
    \end{scope}
    }

    \begin{scope}[transparency group]
    % Background surfaces
    \fill[generator-0-0-1-pos] (0,0) -- (6,0) -- (6,8) -- (0,8) -- (0,0);
    \newcommand{\layer}[1]{
      \clipped{generator-0-0-1-pos}{#1}{(0,0) -- (6,0) -- (6,8) -- (0,8) -- (0,0)}
      #1
    }

    % Wire layers
    \wire{generator-1-2-0-neg}{(2,3) .. controls (2,3.8) and (2.4,4) .. (3,4) .. controls (3.6,4) and (4,4.2) .. (4,5)};
    \layer{
    \wire{generator-1-2-0-pos}{(3,2) .. controls (3.6,2) and (4,2.2) .. (4,3) .. controls (4,3.8) and (3.6,4) .. (3,4) .. controls (2.4,4) and (2,4.2) .. (2,5) .. controls (2,5.8) and (2.4,6) .. (3,6)};
    \wire{generator-1-2-0-neg}{(3,2) .. controls (2.4,2) and (2,2.2) .. (2,3)(4,5) .. controls (4,5.8) and (3.6,6) .. (3,6)};
    }
    \end{scope}
    \fill[generator-1-2-1-zer] (3,2) circle (0.14);
    \fill[generator-1-2-1-zer] (3,6) circle (0.14);
    \end{tikzpicture}
    \end{adjustbox}
    &
    \begin{adjustbox}{max width=0.3\textwidth}
    \begin{tikzpicture}[baseline=(current bounding box.center)]
    \definecolor{generator-1-2-1-zer}{RGB}{235, 170, 164}
    \definecolor{generator-1-2-0-neg}{RGB}{121, 36, 27}
    \definecolor{generator-1-2-0-pos}{RGB}{192, 57, 43}
    \definecolor{generator-0-0-1-pos}{RGB}{56, 150, 211}

    \newcommand{\wire}[2]{
      \ifdefined\recolor\draw[color=\recolor, line width=10pt]\else\draw[color=#1, line width=5pt]\fi #2
    }
    \newcommand{\clipped}[3]{
    \begin{scope}
      \newcommand{\recolor}{#1}
      \clip#3;
      #2
    \end{scope}
    }

    \begin{scope}[transparency group]
    % Background surfaces
    \fill[generator-0-0-1-pos] (0,0) -- (6,0) -- (6,10) -- (0,10) -- (0,0);
    \newcommand{\layer}[1]{
      \clipped{generator-0-0-1-pos}{#1}{(0,0) -- (6,0) -- (6,10) -- (0,10) -- (0,0)}
      #1
    }

    % Wire layers
    \wire{generator-1-2-0-neg}{(2,3) .. controls (2,3.8) and (2.4,4) .. (3,4) .. controls (3.6,4) and (4,4.2) .. (4,5)};
    \layer{
    \wire{generator-1-2-0-pos}{(3,2) .. controls (3.6,2) and (4,2.2) .. (4,3) .. controls (4,3.8) and (3.6,4) .. (3,4) .. controls (2.4,4) and (2,4.2) .. (2,5) -- (2,7) .. controls (2,7.8) and (2.4,8) .. (3,8)};
    \wire{generator-1-2-0-neg}{(3,2) .. controls (2.4,2) and (2,2.2) .. (2,3)(4,5) -- (4,7) .. controls (4,7.8) and (3.6,8) .. (3,8)};
    }
    \end{scope}
    \fill[generator-1-2-1-zer] (3,2) circle (0.14);
    \fill[generator-1-2-1-zer] (3,8) circle (0.14);
    \end{tikzpicture}
    \end{adjustbox}
    &
    \begin{adjustbox}{max width=0.3\textwidth}
    \begin{tikzpicture}[baseline=(current bounding box.center)]
    \definecolor{generator-1-2-1-zer}{RGB}{235, 170, 164}
    \definecolor{generator-1-2-0-neg}{RGB}{121, 36, 27}
    \definecolor{generator-1-2-0-pos}{RGB}{192, 57, 43}
    \definecolor{generator-0-0-1-pos}{RGB}{56, 150, 211}

    \newcommand{\wire}[2]{
      \ifdefined\recolor\draw[color=\recolor, line width=10pt]\else\draw[color=#1, line width=5pt]\fi #2
    }
    \newcommand{\clipped}[3]{
    \begin{scope}
      \newcommand{\recolor}{#1}
      \clip#3;
      #2
    \end{scope}
    }

    \begin{scope}[transparency group]
    % Background surfaces
    \fill[generator-0-0-1-pos] (0,0) -- (10,0) -- (10,12) -- (0,12) -- (0,0);
    \newcommand{\layer}[1]{
      \clipped{generator-0-0-1-pos}{#1}{(0,0) -- (10,0) -- (10,12) -- (0,12) -- (0,0)}
      #1
    }

    % Wire layers
    \wire{generator-1-2-0-neg}{(6,3) .. controls (6,3.8) and (6.4,4) .. (7,4) .. controls (7.6,4) and (8,4.2) .. (8,5)};
    \layer{
    \wire{generator-1-2-0-pos}{(7,2) .. controls (7.6,2) and (8,2.2) .. (8,3) .. controls (8,3.8) and (7.6,4) .. (7,4) .. controls (6.4,4) and (6,4.2) .. (6,5) -- (6,7) .. controls (6,7.8) and (5.6,8) .. (5,8)(3,6) .. controls (2.4,6) and (2,6.2) .. (2,7) -- (2,9) .. controls (2,9.8) and (3.2,10) .. (5,10)};
    \wire{generator-1-2-0-neg}{(7,2) .. controls (6.4,2) and (6,2.2) .. (6,3)(8,5) -- (8,9) .. controls (8,9.8) and (6.8,10) .. (5,10)(3,6) .. controls (3.6,6) and (4,6.2) .. (4,7) .. controls (4,7.8) and (4.4,8) .. (5,8)};
    }
    \end{scope}
    \fill[generator-1-2-1-zer] (7,2) circle (0.14);
    \fill[generator-1-2-1-zer] (3,6) circle (0.14);
    \fill[generator-1-2-1-zer] (5,8) circle (0.14);
    \fill[generator-1-2-1-zer] (5,10) circle (0.14);
    \end{tikzpicture}
    \end{adjustbox}
    \\
    &
    \begin{adjustbox}{max width=0.3\textwidth}
    \begin{tikzpicture}[baseline=(current bounding box.center)]
    \definecolor{generator-1-2-1-zer}{RGB}{235, 170, 164}
    \definecolor{generator-1-2-0-neg}{RGB}{121, 36, 27}
    \definecolor{generator-1-2-0-pos}{RGB}{192, 57, 43}
    \definecolor{generator-0-0-1-pos}{RGB}{56, 150, 211}

    \newcommand{\wire}[2]{
      \ifdefined\recolor\draw[color=\recolor, line width=10pt]\else\draw[color=#1, line width=5pt]\fi #2
    }
    \newcommand{\clipped}[3]{
    \begin{scope}
      \newcommand{\recolor}{#1}
      \clip#3;
      #2
    \end{scope}
    }

    \begin{scope}[transparency group]
    % Background surfaces
    \fill[generator-0-0-1-pos] (0,0) -- (10,0) -- (10,10) -- (0,10) -- (0,0);
    \newcommand{\layer}[1]{
      \clipped{generator-0-0-1-pos}{#1}{(0,0) -- (10,0) -- (10,10) -- (0,10) -- (0,0)}
      #1
    }

    % Wire layers
    \wire{generator-1-2-0-neg}{(6,3) .. controls (6,3.8) and (6.4,4) .. (7,4) .. controls (7.6,4) and (8,4.2) .. (8,5)};
    \layer{
    \wire{generator-1-2-0-pos}{(7,2) .. controls (7.6,2) and (8,2.2) .. (8,3) .. controls (8,3.8) and (7.6,4) .. (7,4) .. controls (6.4,4) and (6,4.2) .. (6,5) .. controls (6,5.8) and (5.6,6) .. (5,6)(3,4) .. controls (2.4,4) and (2,4.2) .. (2,5) -- (2,7) .. controls (2,7.8) and (3.2,8) .. (5,8)};
    \wire{generator-1-2-0-neg}{(7,2) .. controls (6.4,2) and (6,2.2) .. (6,3)(3,4) .. controls (3.6,4) and (4,4.2) .. (4,5) .. controls (4,5.8) and (4.4,6) .. (5,6)(8,5) -- (8,7) .. controls (8,7.8) and (6.8,8) .. (5,8)};
    }
    \end{scope}
    \fill[generator-1-2-1-zer] (7,2) circle (0.14);
    \fill[generator-1-2-1-zer] (3,4) circle (0.14);
    \fill[generator-1-2-1-zer] (5,6) circle (0.14);
    \fill[generator-1-2-1-zer] (5,8) circle (0.14);
    \end{tikzpicture}
    \end{adjustbox}
    &
    \begin{adjustbox}{max width=0.3\textwidth}
    \begin{tikzpicture}[baseline=(current bounding box.center)]
    \definecolor{generator-1-2-1-zer}{RGB}{235, 170, 164}
    \definecolor{generator-1-2-0-neg}{RGB}{121, 36, 27}
    \definecolor{generator-1-2-0-pos}{RGB}{192, 57, 43}
    \definecolor{generator-0-0-1-pos}{RGB}{56, 150, 211}

    \newcommand{\wire}[2]{
      \ifdefined\recolor\draw[color=\recolor, line width=10pt]\else\draw[color=#1, line width=5pt]\fi #2
    }
    \newcommand{\clipped}[3]{
    \begin{scope}
      \newcommand{\recolor}{#1}
      \clip#3;
      #2
    \end{scope}
    }

    \begin{scope}[transparency group]
    % Background surfaces
    \fill[generator-0-0-1-pos] (0,0) -- (10,0) -- (10,12) -- (0,12) -- (0,0);
    \newcommand{\layer}[1]{
      \clipped{generator-0-0-1-pos}{#1}{(0,0) -- (10,0) -- (10,12) -- (0,12) -- (0,0)}
      #1
    }

    % Wire layers
    \wire{generator-1-2-0-neg}{(6,5) .. controls (6,5.8) and (6.4,6) .. (7,6) .. controls (7.6,6) and (8,6.2) .. (8,7)};
    \layer{
    \wire{generator-1-2-0-pos}{(7,2) .. controls (7.6,2) and (8,2.2) .. (8,3) -- (8,5) .. controls (8,5.8) and (7.6,6) .. (7,6) .. controls (6.4,6) and (6,6.2) .. (6,7) .. controls (6,7.8) and (5.6,8) .. (5,8)(3,4) .. controls (2.4,4) and (2,4.2) .. (2,5) -- (2,9) .. controls (2,9.8) and (3.2,10) .. (5,10)};
    \wire{generator-1-2-0-neg}{(7,2) .. controls (6.4,2) and (6,2.2) .. (6,3) -- (6,5)(3,4) .. controls (3.6,4) and (4,4.2) .. (4,5) -- (4,7) .. controls (4,7.8) and (4.4,8) .. (5,8)(8,7) -- (8,9) .. controls (8,9.8) and (6.8,10) .. (5,10)};
    }
    \end{scope}
    \fill[generator-1-2-1-zer] (7,2) circle (0.14);
    \fill[generator-1-2-1-zer] (3,4) circle (0.14);
    \fill[generator-1-2-1-zer] (5,8) circle (0.14);
    \fill[generator-1-2-1-zer] (5,10) circle (0.14);
    \end{tikzpicture}
    \end{adjustbox}
    \\
    &
    \begin{adjustbox}{max width=0.3\textwidth}
    \begin{tikzpicture}[baseline=(current bounding box.center)]
    \definecolor{generator-1-2-1-zer}{RGB}{235, 170, 164}
    \definecolor{generator-1-2-0-neg}{RGB}{121, 36, 27}
    \definecolor{generator-1-2-0-pos}{RGB}{192, 57, 43}
    \definecolor{generator-0-0-1-pos}{RGB}{56, 150, 211}

    \newcommand{\wire}[2]{
      \ifdefined\recolor\draw[color=\recolor, line width=10pt]\else\draw[color=#1, line width=5pt]\fi #2
    }
    \newcommand{\clipped}[3]{
    \begin{scope}
      \newcommand{\recolor}{#1}
      \clip#3;
      #2
    \end{scope}
    }

    \begin{scope}[transparency group]
    % Background surfaces
    \fill[generator-0-0-1-pos] (0,0) -- (10,0) -- (10,10) -- (0,10) -- (0,0);
    \newcommand{\layer}[1]{
      \clipped{generator-0-0-1-pos}{#1}{(0,0) -- (10,0) -- (10,10) -- (0,10) -- (0,0)}
      #1
    }

    % Wire layers
    \wire{generator-1-2-0-neg}{(6,5) -- (6,7)};
    \layer{
    \wire{generator-1-2-0-pos}{(7,2) .. controls (7.6,2) and (8,2.2) .. (8,3) -- (8,5) .. controls (8,5.8) and (7.2,6) .. (6,6)(3,4) .. controls (2.4,4) and (2,4.2) .. (2,5) -- (2,7) .. controls (2,7.8) and (2.8,8) .. (4,8)};
    \wire{generator-1-2-0-neg}{(7,2) .. controls (6.4,2) and (6,2.2) .. (6,3) -- (6,5)(3,4) .. controls (3.6,4) and (4,4.2) .. (4,5) .. controls (4,5.8) and (4.8,6) .. (6,6)(6,7) .. controls (6,7.8) and (5.2,8) .. (4,8)};
    }
    \end{scope}
    \fill[generator-1-2-1-zer] (7,2) circle (0.14);
    \fill[generator-1-2-1-zer] (3,4) circle (0.14);
    \fill[generator-1-2-1-zer] (6,6) circle (0.14);
    \fill[generator-1-2-1-zer] (4,8) circle (0.14);
    \end{tikzpicture}
    \end{adjustbox}
    &
    \begin{adjustbox}{max width=0.3\textwidth}
    \begin{tikzpicture}[baseline=(current bounding box.center)]
    \definecolor{generator-1-2-1-zer}{RGB}{235, 170, 164}
    \definecolor{generator-1-2-0-neg}{RGB}{121, 36, 27}
    \definecolor{generator-1-2-0-pos}{RGB}{192, 57, 43}
    \definecolor{generator-0-0-1-pos}{RGB}{56, 150, 211}

    \newcommand{\wire}[2]{
      \ifdefined\recolor\draw[color=\recolor, line width=10pt]\else\draw[color=#1, line width=5pt]\fi #2
    }
    \newcommand{\clipped}[3]{
    \begin{scope}
      \newcommand{\recolor}{#1}
      \clip#3;
      #2
    \end{scope}
    }

    \begin{scope}[transparency group]
    % Background surfaces
    \fill[generator-0-0-1-pos] (0,0) -- (10,0) -- (10,12) -- (0,12) -- (0,0);
    \newcommand{\layer}[1]{
      \clipped{generator-0-0-1-pos}{#1}{(0,0) -- (10,0) -- (10,12) -- (0,12) -- (0,0)}
      #1
    }

    % Wire layers
    \wire{generator-1-2-0-neg}{(6,5) .. controls (6,5.8) and (5.6,6) .. (5,6) .. controls (4.4,6) and (4,6.2) .. (4,7)};
    \layer{
    \wire{generator-1-2-0-pos}{(7,2) .. controls (7.6,2) and (8,2.2) .. (8,3) -- (8,7) .. controls (8,7.8) and (7.6,8) .. (7,8)(3,4) .. controls (2.4,4) and (2,4.2) .. (2,5) -- (2,9) .. controls (2,9.8) and (2.4,10) .. (3,10)};
    \wire{generator-1-2-0-neg}{(7,2) .. controls (6.4,2) and (6,2.2) .. (6,3) -- (6,5)(3,4) .. controls (3.6,4) and (4,4.2) .. (4,5) .. controls (4,5.8) and (4.4,6) .. (5,6) .. controls (5.6,6) and (6,6.2) .. (6,7) .. controls (6,7.8) and (6.4,8) .. (7,8)(4,7) -- (4,9) .. controls (4,9.8) and (3.6,10) .. (3,10)};
    }
    \end{scope}
    \fill[generator-1-2-1-zer] (7,2) circle (0.14);
    \fill[generator-1-2-1-zer] (3,4) circle (0.14);
    \fill[generator-1-2-1-zer] (7,8) circle (0.14);
    \fill[generator-1-2-1-zer] (3,10) circle (0.14);
    \end{tikzpicture}
    \end{adjustbox}
    \\
    &
    \begin{adjustbox}{max width=0.3\textwidth}
    \begin{tikzpicture}[baseline=(current bounding box.center)]
    \definecolor{generator-1-2-1-zer}{RGB}{235, 170, 164}
    \definecolor{generator-1-2-0-neg}{RGB}{121, 36, 27}
    \definecolor{generator-1-2-0-pos}{RGB}{192, 57, 43}
    \definecolor{generator-0-0-1-pos}{RGB}{56, 150, 211}

    \newcommand{\wire}[2]{
      \ifdefined\recolor\draw[color=\recolor, line width=10pt]\else\draw[color=#1, line width=5pt]\fi #2
    }
    \newcommand{\clipped}[3]{
    \begin{scope}
      \newcommand{\recolor}{#1}
      \clip#3;
      #2
    \end{scope}
    }

    \begin{scope}[transparency group]
    % Background surfaces
    \fill[generator-0-0-1-pos] (0,0) -- (10,0) -- (10,8) -- (0,8) -- (0,0);
    \newcommand{\layer}[1]{
      \clipped{generator-0-0-1-pos}{#1}{(0,0) -- (10,0) -- (10,8) -- (0,8) -- (0,0)}
      #1
    }

    % Wire layers
    \wire{generator-1-2-0-neg}{(6,3) .. controls (6,3.8) and (5.6,4) .. (5,4) .. controls (4.4,4) and (4,4.2) .. (4,5)};
    \layer{
    \wire{generator-1-2-0-pos}{(3,2) .. controls (2.4,2) and (2,2.2) .. (2,3) -- (2,5) .. controls (2,5.8) and (2.4,6) .. (3,6)(7,2) .. controls (7.6,2) and (8,2.2) .. (8,3) -- (8,5) .. controls (8,5.8) and (7.6,6) .. (7,6)};
    \wire{generator-1-2-0-neg}{(3,2) .. controls (3.6,2) and (4,2.2) .. (4,3) .. controls (4,3.8) and (4.4,4) .. (5,4) .. controls (5.6,4) and (6,4.2) .. (6,5) .. controls (6,5.8) and (6.4,6) .. (7,6)(7,2) .. controls (6.4,2) and (6,2.2) .. (6,3)(4,5) .. controls (4,5.8) and (3.6,6) .. (3,6)};
    }
    \end{scope}
    \fill[generator-1-2-1-zer] (3,2) circle (0.14);
    \fill[generator-1-2-1-zer] (7,2) circle (0.14);
    \fill[generator-1-2-1-zer] (3,6) circle (0.14);
    \fill[generator-1-2-1-zer] (7,6) circle (0.14);
    \end{tikzpicture}
    \end{adjustbox}
    &
    \begin{adjustbox}{max width=0.3\textwidth}
    \begin{tikzpicture}[baseline=(current bounding box.center)]
    \definecolor{generator-1-2-1-zer}{RGB}{235, 170, 164}
    \definecolor{generator-1-2-0-neg}{RGB}{121, 36, 27}
    \definecolor{generator-1-2-0-pos}{RGB}{192, 57, 43}
    \definecolor{generator-0-0-1-pos}{RGB}{56, 150, 211}

    \newcommand{\wire}[2]{
      \ifdefined\recolor\draw[color=\recolor, line width=10pt]\else\draw[color=#1, line width=5pt]\fi #2
    }
    \newcommand{\clipped}[3]{
    \begin{scope}
      \newcommand{\recolor}{#1}
      \clip#3;
      #2
    \end{scope}
    }

    \begin{scope}[transparency group]
    % Background surfaces
    \fill[generator-0-0-1-pos] (0,0) -- (10,0) -- (10,12) -- (0,12) -- (0,0);
    \newcommand{\layer}[1]{
      \clipped{generator-0-0-1-pos}{#1}{(0,0) -- (10,0) -- (10,12) -- (0,12) -- (0,0)}
      #1
    }

    % Wire layers
    \wire{generator-1-2-0-neg}{(6,5) .. controls (6,5.8) and (5.6,6) .. (5,6) .. controls (4.4,6) and (4,6.2) .. (4,7)};
    \layer{
    \wire{generator-1-2-0-pos}{(3,2) .. controls (2.4,2) and (2,2.2) .. (2,3) -- (2,7) .. controls (2,7.8) and (2.4,8) .. (3,8)(7,4) .. controls (7.6,4) and (8,4.2) .. (8,5) -- (8,9) .. controls (8,9.8) and (7.6,10) .. (7,10)};
    \wire{generator-1-2-0-neg}{(3,2) .. controls (3.6,2) and (4,2.2) .. (4,3) -- (4,5) .. controls (4,5.8) and (4.4,6) .. (5,6) .. controls (5.6,6) and (6,6.2) .. (6,7) -- (6,9) .. controls (6,9.8) and (6.4,10) .. (7,10)(7,4) .. controls (6.4,4) and (6,4.2) .. (6,5)(4,7) .. controls (4,7.8) and (3.6,8) .. (3,8)};
    }
    \end{scope}
    \fill[generator-1-2-1-zer] (3,2) circle (0.14);
    \fill[generator-1-2-1-zer] (7,4) circle (0.14);
    \fill[generator-1-2-1-zer] (3,8) circle (0.14);
    \fill[generator-1-2-1-zer] (7,10) circle (0.14);
    \end{tikzpicture}
    \end{adjustbox}
    \\
    &
    \begin{adjustbox}{max width=0.3\textwidth}
    \begin{tikzpicture}[baseline=(current bounding box.center)]
    \definecolor{generator-1-2-1-zer}{RGB}{235, 170, 164}
    \definecolor{generator-1-2-0-pos}{RGB}{192, 57, 43}
    \definecolor{generator-1-2-0-neg}{RGB}{121, 36, 27}
    \definecolor{generator-0-0-1-pos}{RGB}{56, 150, 211}

    \newcommand{\wire}[2]{
      \ifdefined\recolor\draw[color=\recolor, line width=10pt]\else\draw[color=#1, line width=5pt]\fi #2
    }
    \newcommand{\clipped}[3]{
    \begin{scope}
      \newcommand{\recolor}{#1}
      \clip#3;
      #2
    \end{scope}
    }

    \begin{scope}[transparency group]
    % Background surfaces
    \fill[generator-0-0-1-pos] (0,0) -- (10,0) -- (10,10) -- (0,10) -- (0,0);
    \newcommand{\layer}[1]{
      \clipped{generator-0-0-1-pos}{#1}{(0,0) -- (10,0) -- (10,10) -- (0,10) -- (0,0)}
      #1
    }

    % Wire layers
    \wire{generator-1-2-0-pos}{(2,5) .. controls (2,5.8) and (4,5.6) .. (4,6)};
    \wire{generator-1-2-0-neg}{(6,5) .. controls (6,5.8) and (4,5.6) .. (4,6)};
    \layer{
    \wire{generator-1-2-0-pos}{(3,2) .. controls (2.4,2) and (2,2.2) .. (2,3) -- (2,5)(7,4) .. controls (7.6,4) and (8,4.2) .. (8,5) -- (8,7) .. controls (8,7.8) and (7.2,8) .. (6,8)};
    \wire{generator-1-2-0-neg}{(3,2) .. controls (3.6,2) and (4,2.2) .. (4,3) -- (4,7) .. controls (4,7.8) and (4.8,8) .. (6,8)(7,4) .. controls (6.4,4) and (6,4.2) .. (6,5)};
    }
    \end{scope}
    \fill[generator-1-2-1-zer] (3,2) circle (0.14);
    \fill[generator-1-2-1-zer] (7,4) circle (0.14);
    \fill[generator-1-2-1-zer] (6,8) circle (0.14);
    \end{tikzpicture}
    \end{adjustbox}
    &
    \begin{adjustbox}{max width=0.3\textwidth}
    \begin{tikzpicture}[baseline=(current bounding box.center)]
    \definecolor{generator-1-2-1-zer}{RGB}{235, 170, 164}
    \definecolor{generator-1-2-0-pos}{RGB}{192, 57, 43}
    \definecolor{generator-1-2-0-neg}{RGB}{121, 36, 27}
    \definecolor{generator-0-0-1-pos}{RGB}{56, 150, 211}

    \newcommand{\wire}[2]{
      \ifdefined\recolor\draw[color=\recolor, line width=10pt]\else\draw[color=#1, line width=5pt]\fi #2
    }
    \newcommand{\clipped}[3]{
    \begin{scope}
      \newcommand{\recolor}{#1}
      \clip#3;
      #2
    \end{scope}
    }

    \begin{scope}[transparency group]
    % Background surfaces
    \fill[generator-0-0-1-pos] (0,0) -- (10,0) -- (10,12) -- (0,12) -- (0,0);
    \newcommand{\layer}[1]{
      \clipped{generator-0-0-1-pos}{#1}{(0,0) -- (10,0) -- (10,12) -- (0,12) -- (0,0)}
      #1
    }

    % Wire layers
    \wire{generator-1-2-0-pos}{(2,5) .. controls (2,5.8) and (2.4,6) .. (3,6) .. controls (3.6,6) and (4,6.2) .. (4,7)};
    \layer{
    \wire{generator-1-2-0-pos}{(3,2) .. controls (2.4,2) and (2,2.2) .. (2,3) -- (2,5)(7,4) .. controls (7.6,4) and (8,4.2) .. (8,5) -- (8,9) .. controls (8,9.8) and (6.8,10) .. (5,10)(4,7) .. controls (4,7.8) and (4.4,8) .. (5,8)};
    \wire{generator-1-2-0-neg}{(3,2) .. controls (3.6,2) and (4,2.2) .. (4,3) -- (4,5) .. controls (4,5.8) and (3.6,6) .. (3,6) .. controls (2.4,6) and (2,6.2) .. (2,7) -- (2,9) .. controls (2,9.8) and (3.2,10) .. (5,10)(7,4) .. controls (6.4,4) and (6,4.2) .. (6,5) -- (6,7) .. controls (6,7.8) and (5.6,8) .. (5,8)};
    }
    \end{scope}
    \fill[generator-1-2-1-zer] (3,2) circle (0.14);
    \fill[generator-1-2-1-zer] (7,4) circle (0.14);
    \fill[generator-1-2-1-zer] (5,8) circle (0.14);
    \fill[generator-1-2-1-zer] (5,10) circle (0.14);
    \end{tikzpicture}
    \end{adjustbox}
    \\
    &
    \begin{adjustbox}{max width=0.3\textwidth}
    \begin{tikzpicture}[baseline=(current bounding box.center)]
    \definecolor{generator-1-2-1-zer}{RGB}{235, 170, 164}
    \definecolor{generator-1-2-0-pos}{RGB}{192, 57, 43}
    \definecolor{generator-1-2-0-neg}{RGB}{121, 36, 27}
    \definecolor{generator-0-0-1-pos}{RGB}{56, 150, 211}

    \newcommand{\wire}[2]{
      \ifdefined\recolor\draw[color=\recolor, line width=10pt]\else\draw[color=#1, line width=5pt]\fi #2
    }
    \newcommand{\clipped}[3]{
    \begin{scope}
      \newcommand{\recolor}{#1}
      \clip#3;
      #2
    \end{scope}
    }

    \begin{scope}[transparency group]
    % Background surfaces
    \fill[generator-0-0-1-pos] (0,0) -- (10,0) -- (10,10) -- (0,10) -- (0,0);
    \newcommand{\layer}[1]{
      \clipped{generator-0-0-1-pos}{#1}{(0,0) -- (10,0) -- (10,10) -- (0,10) -- (0,0)}
      #1
    }

    % Wire layers
    \wire{generator-1-2-0-pos}{(2,3) .. controls (2,3.8) and (2.4,4) .. (3,4) .. controls (3.6,4) and (4,4.2) .. (4,5)};
    \layer{
    \wire{generator-1-2-0-pos}{(3,2) .. controls (2.4,2) and (2,2.2) .. (2,3)(7,4) .. controls (7.6,4) and (8,4.2) .. (8,5) -- (8,7) .. controls (8,7.8) and (6.8,8) .. (5,8)(4,5) .. controls (4,5.8) and (4.4,6) .. (5,6)};
    \wire{generator-1-2-0-neg}{(3,2) .. controls (3.6,2) and (4,2.2) .. (4,3) .. controls (4,3.8) and (3.6,4) .. (3,4) .. controls (2.4,4) and (2,4.2) .. (2,5) -- (2,7) .. controls (2,7.8) and (3.2,8) .. (5,8)(7,4) .. controls (6.4,4) and (6,4.2) .. (6,5) .. controls (6,5.8) and (5.6,6) .. (5,6)};
    }
    \end{scope}
    \fill[generator-1-2-1-zer] (3,2) circle (0.14);
    \fill[generator-1-2-1-zer] (7,4) circle (0.14);
    \fill[generator-1-2-1-zer] (5,6) circle (0.14);
    \fill[generator-1-2-1-zer] (5,8) circle (0.14);
    \end{tikzpicture}
    \end{adjustbox}
    &
    \begin{adjustbox}{max width=0.3\textwidth}
    \begin{tikzpicture}[baseline=(current bounding box.center)]
    \definecolor{generator-1-2-1-zer}{RGB}{235, 170, 164}
    \definecolor{generator-1-2-0-pos}{RGB}{192, 57, 43}
    \definecolor{generator-1-2-0-neg}{RGB}{121, 36, 27}
    \definecolor{generator-0-0-1-pos}{RGB}{56, 150, 211}

    \newcommand{\wire}[2]{
      \ifdefined\recolor\draw[color=\recolor, line width=10pt]\else\draw[color=#1, line width=5pt]\fi #2
    }
    \newcommand{\clipped}[3]{
    \begin{scope}
      \newcommand{\recolor}{#1}
      \clip#3;
      #2
    \end{scope}
    }

    \begin{scope}[transparency group]
    % Background surfaces
    \fill[generator-0-0-1-pos] (0,0) -- (10,0) -- (10,12) -- (0,12) -- (0,0);
    \newcommand{\layer}[1]{
      \clipped{generator-0-0-1-pos}{#1}{(0,0) -- (10,0) -- (10,12) -- (0,12) -- (0,0)}
      #1
    }

    % Wire layers
    \wire{generator-1-2-0-pos}{(2,3) .. controls (2,3.8) and (2.4,4) .. (3,4) .. controls (3.6,4) and (4,4.2) .. (4,5)};
    \layer{
    \wire{generator-1-2-0-pos}{(3,2) .. controls (2.4,2) and (2,2.2) .. (2,3)(4,5) -- (4,7) .. controls (4,7.8) and (4.4,8) .. (5,8)(7,6) .. controls (7.6,6) and (8,6.2) .. (8,7) -- (8,9) .. controls (8,9.8) and (6.8,10) .. (5,10)};
    \wire{generator-1-2-0-neg}{(3,2) .. controls (3.6,2) and (4,2.2) .. (4,3) .. controls (4,3.8) and (3.6,4) .. (3,4) .. controls (2.4,4) and (2,4.2) .. (2,5) -- (2,9) .. controls (2,9.8) and (3.2,10) .. (5,10)(7,6) .. controls (6.4,6) and (6,6.2) .. (6,7) .. controls (6,7.8) and (5.6,8) .. (5,8)};
    }
    \end{scope}
    \fill[generator-1-2-1-zer] (3,2) circle (0.14);
    \fill[generator-1-2-1-zer] (7,6) circle (0.14);
    \fill[generator-1-2-1-zer] (5,8) circle (0.14);
    \fill[generator-1-2-1-zer] (5,10) circle (0.14);
    \end{tikzpicture}
    \end{adjustbox}
    \\
    &
    \begin{adjustbox}{max width=0.3\textwidth}
    \begin{tikzpicture}[baseline=(current bounding box.center)]
    \definecolor{generator-1-2-1-zer}{RGB}{235, 170, 164}
    \definecolor{generator-1-2-0-pos}{RGB}{192, 57, 43}
    \definecolor{generator-1-2-0-neg}{RGB}{121, 36, 27}
    \definecolor{generator-0-0-1-pos}{RGB}{56, 150, 211}

    \newcommand{\wire}[2]{
      \ifdefined\recolor\draw[color=\recolor, line width=10pt]\else\draw[color=#1, line width=5pt]\fi #2
    }
    \newcommand{\clipped}[3]{
    \begin{scope}
      \newcommand{\recolor}{#1}
      \clip#3;
      #2
    \end{scope}
    }

    \begin{scope}[transparency group]
    % Background surfaces
    \fill[generator-0-0-1-pos] (0,0) -- (6,0) -- (6,10) -- (0,10) -- (0,0);
    \newcommand{\layer}[1]{
      \clipped{generator-0-0-1-pos}{#1}{(0,0) -- (6,0) -- (6,10) -- (0,10) -- (0,0)}
      #1
    }

    % Wire layers
    \wire{generator-1-2-0-pos}{(2,3) .. controls (2,3.8) and (2.4,4) .. (3,4) .. controls (3.6,4) and (4,4.2) .. (4,5)};
    \layer{
    \wire{generator-1-2-0-pos}{(3,2) .. controls (2.4,2) and (2,2.2) .. (2,3)(4,5) -- (4,7) .. controls (4,7.8) and (3.6,8) .. (3,8)};
    \wire{generator-1-2-0-neg}{(3,2) .. controls (3.6,2) and (4,2.2) .. (4,3) .. controls (4,3.8) and (3.6,4) .. (3,4) .. controls (2.4,4) and (2,4.2) .. (2,5) -- (2,7) .. controls (2,7.8) and (2.4,8) .. (3,8)};
    }
    \end{scope}
    \fill[generator-1-2-1-zer] (3,2) circle (0.14);
    \fill[generator-1-2-1-zer] (3,8) circle (0.14);
    \end{tikzpicture}
    \end{adjustbox}
    &
    \begin{adjustbox}{max width=0.3\textwidth}
    \begin{tikzpicture}[baseline=(current bounding box.center)]
    \definecolor{generator-1-2-1-zer}{RGB}{235, 170, 164}
    \definecolor{generator-1-2-0-pos}{RGB}{192, 57, 43}
    \definecolor{generator-1-2-0-neg}{RGB}{121, 36, 27}
    \definecolor{generator-0-0-1-pos}{RGB}{56, 150, 211}

    \newcommand{\wire}[2]{
      \ifdefined\recolor\draw[color=\recolor, line width=10pt]\else\draw[color=#1, line width=5pt]\fi #2
    }
    \newcommand{\clipped}[3]{
    \begin{scope}
      \newcommand{\recolor}{#1}
      \clip#3;
      #2
    \end{scope}
    }

    \begin{scope}[transparency group]
    % Background surfaces
    \fill[generator-0-0-1-pos] (0,0) -- (6,0) -- (6,8) -- (0,8) -- (0,0);
    \newcommand{\layer}[1]{
      \clipped{generator-0-0-1-pos}{#1}{(0,0) -- (6,0) -- (6,8) -- (0,8) -- (0,0)}
      #1
    }

    % Wire layers
    \wire{generator-1-2-0-pos}{(2,3) .. controls (2,3.8) and (2.4,4) .. (3,4) .. controls (3.6,4) and (4,4.2) .. (4,5)};
    \layer{
    \wire{generator-1-2-0-pos}{(3,2) .. controls (2.4,2) and (2,2.2) .. (2,3)(4,5) .. controls (4,5.8) and (3.6,6) .. (3,6)};
    \wire{generator-1-2-0-neg}{(3,2) .. controls (3.6,2) and (4,2.2) .. (4,3) .. controls (4,3.8) and (3.6,4) .. (3,4) .. controls (2.4,4) and (2,4.2) .. (2,5) .. controls (2,5.8) and (2.4,6) .. (3,6)};
    }
    \end{scope}
    \fill[generator-1-2-1-zer] (3,2) circle (0.14);
    \fill[generator-1-2-1-zer] (3,6) circle (0.14);
    \end{tikzpicture}
    \end{adjustbox}
    \end{tabular}
  ]]></fr:resource-source></fr:resource>
</fr:mainmatter></fr:tree>
 
</fr:mainmatter></fr:tree><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>12</fr:month><fr:day>25</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-NJGH/</fr:uri><fr:display-uri>coherent-inverses-NJGH</fr:display-uri><fr:route>/coherent-inverses-NJGH/</fr:route><fr:title text="Third homotopy group of the 2-sphere is the integers">Third homotopy group of the 2-sphere is the integers</fr:title><fr:taxon>corollary</fr:taxon></fr:frontmatter><fr:mainmatter><html:p><fr:tex display="inline"><![CDATA[\pi _3 (S^2) \cong  \mathbb {Z}]]></fr:tex>.
</html:p>
 
   
   <fr:tree show-metadata="false" toc="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2024</fr:year><fr:month>12</fr:month><fr:day>25</fr:day></fr:date><fr:taxon>proof</fr:taxon></fr:frontmatter><fr:mainmatter>
  <html:p>
    In string diagrams, consider the set of generators of <fr:tex display="inline"><![CDATA[\pi _3 (S^2)]]></fr:tex> corresponding to some (composite) braiding, e.g.
    <html:figure><fr:resource hash="df7ab6feaf14b6d76b6b4f770cf220ea"><fr:resource-content><html:img src="/df7ab6feaf14b6d76b6b4f770cf220ea.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[
    \usepackage {adjustbox}
    \usepackage {amsmath,amssymb}
    \usepackage {tikz}
    \usetikzlibrary {cd}
  ]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
    $
                \begin{adjustbox}{max width=0.3\textwidth}
        \begin{tikzpicture}
        \definecolor{generator-1-2-1-zer}{RGB}{235, 170, 164}
        \definecolor{generator-1-2-0-pos}{RGB}{192, 57, 43}
        \definecolor{generator-1-2-0-neg}{RGB}{121, 36, 27}
        \definecolor{generator-0-0-1-pos}{RGB}{56, 150, 211}

        \newcommand{\wire}[2]{
          \ifdefined\recolor\draw[color=\recolor, line width=10pt]\else\draw[color=#1, line width=5pt]\fi #2
        }
        \newcommand{\clipped}[3]{
        \begin{scope}
          \newcommand{\recolor}{#1}
          \clip#3;
          #2
        \end{scope}
        }

        \begin{scope}[transparency group]
        % Background surfaces
        \fill[generator-0-0-1-pos] (0,0) -- (6,0) -- (6,10) -- (0,10) -- (0,0);
        \newcommand{\layer}[1]{
          \clipped{generator-0-0-1-pos}{#1}{(0,0) -- (6,0) -- (6,10) -- (0,10) -- (0,0)}
          #1
        }

        % Wire layers
        \wire{generator-1-2-0-pos}{(2,5) .. controls (2,5.8) and (2.4,6) .. (3,6) .. controls (3.6,6) and (4,6.2) .. (4,7)};
        \wire{generator-1-2-0-neg}{(2,3) .. controls (2,3.8) and (2.4,4) .. (3,4) .. controls (3.6,4) and (4,4.2) .. (4,5)};
        \layer{
        \wire{generator-1-2-0-pos}{(3,2) .. controls (3.6,2) and (4,2.2) .. (4,3) .. controls (4,3.8) and (3.6,4) .. (3,4) .. controls (2.4,4) and (2,4.2) .. (2,5)(4,7) .. controls (4,7.8) and (3.6,8) .. (3,8)};
        \wire{generator-1-2-0-neg}{(3,2) .. controls (2.4,2) and (2,2.2) .. (2,3)(4,5) .. controls (4,5.8) and (3.6,6) .. (3,6) .. controls (2.4,6) and (2,6.2) .. (2,7) .. controls (2,7.8) and (2.4,8) .. (3,8)};
        }
        \end{scope}
        \fill[generator-1-2-1-zer] (3,2) circle (0.14);
        \fill[generator-1-2-1-zer] (3,8) circle (0.14);
        \end{tikzpicture}
        \end{adjustbox}
      $
  ]]></fr:resource-source></fr:resource></html:figure>
    Such a generator can be decomposed into a composition of figure-8 3-cells by the invertibility of <fr:tex display="inline"><![CDATA[f]]></fr:tex>, in particular along the <fr:link href="/coherent-inverses-OBFZ/" title="zigzag homotopy" uri="https://forest.nickx.hu/coherent-inverses-OBFZ/" display-uri="coherent-inverses-OBFZ" type="local">zigzag homotopy</fr:link>:
    <fr:resource hash="e748208a83653ca1a3d22cc20462a6e8"><fr:resource-content><html:img src="/e748208a83653ca1a3d22cc20462a6e8.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[
    \usepackage {adjustbox}
    \usepackage {amsmath,amssymb}
    \usepackage {tikz}
    \usetikzlibrary {cd}
  ]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
    $
            \begin{adjustbox}{max width=0.3\textwidth}
      \begin{tikzpicture}[baseline=(current bounding box.center)]
      \definecolor{generator-0-0-1-pos}{RGB}{56, 150, 211}
      \definecolor{generator-1-2-0-pos}{RGB}{192, 57, 43}
      \definecolor{generator-1-2-0-neg}{RGB}{121, 36, 27}
      \begin{scope}
      % Background surfaces
      \fill[generator-0-0-1-pos] (0,0) -- (6,0) -- (6,2) -- (0,2) -- (0,0);
      % Wire layers
      \draw[color=generator-1-2-0-pos, line width=5pt](2,0) -- (2,2);
      \draw[color=generator-1-2-0-neg, line width=5pt](4,0) -- (4,2);
      \end{scope}
      \end{tikzpicture}
      \end{adjustbox}
      \to
      \begin{adjustbox}{max width=0.3\textwidth}
      \begin{tikzpicture}[baseline=(current bounding box.center)]
      \definecolor{generator-1-2-1-zer}{RGB}{235, 170, 164}
      \definecolor{generator-1-2-0-pos}{RGB}{192, 57, 43}
      \definecolor{generator-1-2-0-neg}{RGB}{121, 36, 27}
      \definecolor{generator-0-0-1-pos}{RGB}{56, 150, 211}
      \begin{scope}
      % Background surfaces
      \fill[generator-0-0-1-pos] (0,0) -- (6,0) -- (6,4) -- (0,4) -- (0,0);
      % Wire layers
      \draw[color=generator-1-2-0-pos, line width=5pt](2,0) -- (2,1) .. controls (2,1.8) and (2.4,2) .. (3,2) .. controls (2.4,2) and (2,2.2) .. (2,3) -- (2,4);
      \draw[color=generator-1-2-0-neg, line width=5pt](4,0) -- (4,1) .. controls (4,1.8) and (3.6,2) .. (3,2) .. controls (3.6,2) and (4,2.2) .. (4,3) -- (4,4);
      \end{scope}
      \fill[generator-1-2-1-zer] (3,2) circle (0.14);
      \end{tikzpicture}
      \end{adjustbox}
      \leftarrow
      \begin{adjustbox}{max width=0.3\textwidth}
      \begin{tikzpicture}[baseline=(current bounding box.center)]
      \definecolor{generator-1-2-1-zer}{RGB}{235, 170, 164}
      \definecolor{generator-1-2-0-pos}{RGB}{192, 57, 43}
      \definecolor{generator-1-2-0-neg}{RGB}{121, 36, 27}
      \definecolor{generator-0-0-1-pos}{RGB}{56, 150, 211}
      \begin{scope}
      % Background surfaces
      \fill[generator-0-0-1-pos] (0,0) -- (6,0) -- (6,6) -- (0,6) -- (0,0);
      % Wire layers
      \draw[color=generator-1-2-0-pos, line width=5pt](2,0) -- (2,1) .. controls (2,1.8) and (2.4,2) .. (3,2)(3,4) .. controls (2.4,4) and (2,4.2) .. (2,5) -- (2,6);
      \draw[color=generator-1-2-0-neg, line width=5pt](4,0) -- (4,1) .. controls (4,1.8) and (3.6,2) .. (3,2)(3,4) .. controls (3.6,4) and (4,4.2) .. (4,5) -- (4,6);
      \end{scope}
      \fill[generator-1-2-1-zer] (3,2) circle (0.14);
      \fill[generator-1-2-1-zer] (3,4) circle (0.14);
      \end{tikzpicture}
      \end{adjustbox}
    $
  ]]></fr:resource-source></fr:resource>

    E.g.
    <fr:resource hash="b71017db43e5bf6d9bf2d09842348f66"><fr:resource-content><html:img src="/b71017db43e5bf6d9bf2d09842348f66.svg" /></fr:resource-content><fr:resource-source type="latex" part="preamble"><![CDATA[
    \usepackage {adjustbox}
    \usepackage {amsmath,amssymb}
    \usepackage {tikz}
    \usetikzlibrary {cd}
  ]]></fr:resource-source><fr:resource-source type="latex" part="body"><![CDATA[
    $
            \begin{adjustbox}{max width=0.3\textwidth}
      \begin{tikzpicture}[baseline=(current bounding box.center)]
      \definecolor{generator-1-2-1-zer}{RGB}{235, 170, 164}
      \definecolor{generator-1-2-0-pos}{RGB}{192, 57, 43}
      \definecolor{generator-1-2-0-neg}{RGB}{121, 36, 27}
      \definecolor{generator-0-0-1-pos}{RGB}{56, 150, 211}

      \newcommand{\wire}[2]{
        \ifdefined\recolor\draw[color=\recolor, line width=10pt]\else\draw[color=#1, line width=5pt]\fi #2
      }
      \newcommand{\clipped}[3]{
      \begin{scope}
        \newcommand{\recolor}{#1}
        \clip#3;
        #2
      \end{scope}
      }

      \begin{scope}[transparency group]
      % Background surfaces
      \fill[generator-0-0-1-pos] (0,0) -- (6,0) -- (6,10) -- (0,10) -- (0,0);
      \newcommand{\layer}[1]{
        \clipped{generator-0-0-1-pos}{#1}{(0,0) -- (6,0) -- (6,10) -- (0,10) -- (0,0)}
        #1
      }

      % Wire layers
      \wire{generator-1-2-0-pos}{(2,5) .. controls (2,5.8) and (2.4,6) .. (3,6) .. controls (3.6,6) and (4,6.2) .. (4,7)};
      \wire{generator-1-2-0-neg}{(2,3) .. controls (2,3.8) and (2.4,4) .. (3,4) .. controls (3.6,4) and (4,4.2) .. (4,5)};
      \layer{
      \wire{generator-1-2-0-pos}{(3,2) .. controls (3.6,2) and (4,2.2) .. (4,3) .. controls (4,3.8) and (3.6,4) .. (3,4) .. controls (2.4,4) and (2,4.2) .. (2,5)(4,7) .. controls (4,7.8) and (3.6,8) .. (3,8)};
      \wire{generator-1-2-0-neg}{(3,2) .. controls (2.4,2) and (2,2.2) .. (2,3)(4,5) .. controls (4,5.8) and (3.6,6) .. (3,6) .. controls (2.4,6) and (2,6.2) .. (2,7) .. controls (2,7.8) and (2.4,8) .. (3,8)};
      }
      \end{scope}
      \fill[generator-1-2-1-zer] (3,2) circle (0.14);
      \fill[generator-1-2-1-zer] (3,8) circle (0.14);
      \end{tikzpicture}
      \end{adjustbox}
      \to
      \begin{adjustbox}{max width=0.3\textwidth}
      \begin{tikzpicture}[baseline=(current bounding box.center)]
      \definecolor{generator-1-2-1-zer}{RGB}{235, 170, 164}
      \definecolor{generator-1-2-0-pos}{RGB}{192, 57, 43}
      \definecolor{generator-1-2-0-neg}{RGB}{121, 36, 27}
      \definecolor{generator-0-0-1-pos}{RGB}{56, 150, 211}

      \newcommand{\wire}[2]{
        \ifdefined\recolor\draw[color=\recolor, line width=10pt]\else\draw[color=#1, line width=5pt]\fi #2
      }
      \newcommand{\clipped}[3]{
      \begin{scope}
        \newcommand{\recolor}{#1}
        \clip#3;
        #2
      \end{scope}
      }

      \begin{scope}[transparency group]
      % Background surfaces
      \fill[generator-0-0-1-pos] (0,0) -- (6,0) -- (6,12) -- (0,12) -- (0,0);
      \newcommand{\layer}[1]{
        \clipped{generator-0-0-1-pos}{#1}{(0,0) -- (6,0) -- (6,12) -- (0,12) -- (0,0)}
        #1
      }

      % Wire layers
      \wire{generator-1-2-0-pos}{(2,7) .. controls (2,7.8) and (2.4,8) .. (3,8) .. controls (3.6,8) and (4,8.2) .. (4,9)};
      \wire{generator-1-2-0-neg}{(2,3) .. controls (2,3.8) and (2.4,4) .. (3,4) .. controls (3.6,4) and (4,4.2) .. (4,5)};
      \layer{
      \wire{generator-1-2-0-pos}{(3,2) .. controls (3.6,2) and (4,2.2) .. (4,3) .. controls (4,3.8) and (3.6,4) .. (3,4) .. controls (2.4,4) and (2,4.2) .. (2,5) .. controls (2,5.8) and (2.4,6) .. (3,6) .. controls (2.4,6) and (2,6.2) .. (2,7)(4,9) .. controls (4,9.8) and (3.6,10) .. (3,10)};
      \wire{generator-1-2-0-neg}{(3,2) .. controls (2.4,2) and (2,2.2) .. (2,3)(4,5) .. controls (4,5.8) and (3.6,6) .. (3,6) .. controls (3.6,6) and (4,6.2) .. (4,7) .. controls (4,7.8) and (3.6,8) .. (3,8) .. controls (2.4,8) and (2,8.2) .. (2,9) .. controls (2,9.8) and (2.4,10) .. (3,10)};
      }
      \end{scope}
      \fill[generator-1-2-1-zer] (3,2) circle (0.14);
      \fill[generator-1-2-1-zer] (3,6) circle (0.14);
      \fill[generator-1-2-1-zer] (3,10) circle (0.14);
      \end{tikzpicture}
      \end{adjustbox}
      \leftarrow
      \begin{adjustbox}{max width=0.3\textwidth}
      \begin{tikzpicture}[baseline=(current bounding box.center)]
      \definecolor{generator-1-2-1-zer}{RGB}{235, 170, 164}
      \definecolor{generator-1-2-0-pos}{RGB}{192, 57, 43}
      \definecolor{generator-1-2-0-neg}{RGB}{121, 36, 27}
      \definecolor{generator-0-0-1-pos}{RGB}{56, 150, 211}

      \newcommand{\wire}[2]{
        \ifdefined\recolor\draw[color=\recolor, line width=10pt]\else\draw[color=#1, line width=5pt]\fi #2
      }
      \newcommand{\clipped}[3]{
      \begin{scope}
        \newcommand{\recolor}{#1}
        \clip#3;
        #2
      \end{scope}
      }

      \begin{scope}[transparency group]
      % Background surfaces
      \fill[generator-0-0-1-pos] (0,0) -- (6,0) -- (6,14) -- (0,14) -- (0,0);
      \newcommand{\layer}[1]{
        \clipped{generator-0-0-1-pos}{#1}{(0,0) -- (6,0) -- (6,14) -- (0,14) -- (0,0)}
        #1
      }

      % Wire layers
      \wire{generator-1-2-0-pos}{(2,9) .. controls (2,9.8) and (2.4,10) .. (3,10) .. controls (3.6,10) and (4,10.2) .. (4,11)};
      \wire{generator-1-2-0-neg}{(2,3) .. controls (2,3.8) and (2.4,4) .. (3,4) .. controls (3.6,4) and (4,4.2) .. (4,5)};
      \layer{
      \wire{generator-1-2-0-pos}{(3,2) .. controls (3.6,2) and (4,2.2) .. (4,3) .. controls (4,3.8) and (3.6,4) .. (3,4) .. controls (2.4,4) and (2,4.2) .. (2,5) .. controls (2,5.8) and (2.4,6) .. (3,6)(3,8) .. controls (2.4,8) and (2,8.2) .. (2,9)(4,11) .. controls (4,11.8) and (3.6,12) .. (3,12)};
      \wire{generator-1-2-0-neg}{(3,2) .. controls (2.4,2) and (2,2.2) .. (2,3)(4,5) .. controls (4,5.8) and (3.6,6) .. (3,6)(3,8) .. controls (3.6,8) and (4,8.2) .. (4,9) .. controls (4,9.8) and (3.6,10) .. (3,10) .. controls (2.4,10) and (2,10.2) .. (2,11) .. controls (2,11.8) and (2.4,12) .. (3,12)};
      }
      \end{scope}
      \fill[generator-1-2-1-zer] (3,2) circle (0.14);
      \fill[generator-1-2-1-zer] (3,6) circle (0.14);
      \fill[generator-1-2-1-zer] (3,8) circle (0.14);
      \fill[generator-1-2-1-zer] (3,12) circle (0.14);
      \end{tikzpicture}
      \end{adjustbox}
    $
  ]]></fr:resource-source></fr:resource></html:p>
  <html:p>
    Any such generator is therefore homotopic to some composition of <fr:tex display="inline"><![CDATA[\mathbf {8}]]></fr:tex>, using the fact that there are a priori four possible figure-8 3-cells arranged into two pairs of inverses, both of which coincide (<fr:link href="/coherent-inverses-0D6X/" title="Figure-8 isotopy" uri="https://forest.nickx.hu/coherent-inverses-0D6X/" display-uri="coherent-inverses-0D6X" type="local">theorem <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-0D6X/" display-uri="coherent-inverses-0D6X" /></fr:link>).
  </html:p>
  <html:p>
    Note that this set of generators extends to all of <fr:tex display="inline"><![CDATA[\mathcal {S} (
  \text {id}_{
  \text {id}_{
  \text {id}_{x}
}
}
, 
  \text {id}_{
  \text {id}_{
  \text {id}_{x}
}
}
)]]></fr:tex> by homotopy along the snake homotopies admissible by the invertibility of <fr:tex display="inline"><![CDATA[f]]></fr:tex>, so we deduce that <fr:tex display="inline"><![CDATA[\pi _3 (S^2)]]></fr:tex> is freely generated by a single non-trivial generator so it is isomorphic to the integers under addition: <fr:tex display="inline"><![CDATA[\mathbb {Z} \coloneqq  (\set {0, 1, -1}, +, 0)]]></fr:tex>.
  </html:p>
</fr:mainmatter></fr:tree>
 
</fr:mainmatter></fr:tree><html:p>
      The string diagrammatic calculus for braided monoidal categories can be thought of as a 3-dimensional calculus of tubes, projected onto 2-dimensional space.
      Without projecting to 2D, <html:span tex="\homotopyio{}"><fr:link href="/homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories/" title="homotopy.io: a proof assistant for finitely-presented globular $n$-categories" uri="https://forest.nickx.hu/homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories/" display-uri="homotopy-io-a-proof-assistant-for-finitely-presented-globular-n-categories" type="local"><html:code>homotopy.io</html:code></fr:link></html:span> can render the figure-8 3-cell in 3D as in <fr:link href="/coherent-inverses-M0LN/" title="Figure-8 3D tube diagram" uri="https://forest.nickx.hu/coherent-inverses-M0LN/" display-uri="coherent-inverses-M0LN" type="local">figure <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-M0LN/" display-uri="coherent-inverses-M0LN" /></fr:link>.
    </html:p><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2025</fr:year><fr:month>1</fr:month><fr:day>8</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-M0LN/</fr:uri><fr:display-uri>coherent-inverses-M0LN</fr:display-uri><fr:route>/coherent-inverses-M0LN/</fr:route><fr:title text="Figure-8 3D tube diagram">Figure-8 3D tube diagram</fr:title><fr:taxon>figure</fr:taxon></fr:frontmatter><fr:mainmatter><html:figure><html:img src="/bafkrmihl7dq2rdnk6vlzlk577powpzzubfd46vumybxw7n4vozrzkaw65u.png" height="200px" />
  <html:figcaption>Figure-8 3-cell in 3D, with occlusion for the braiding.</html:figcaption></html:figure></fr:mainmatter></fr:tree><html:p>
      The 4-cell isotopy that is then the proof of <fr:link href="/coherent-inverses-0D6X/" title="Figure-8 isotopy" uri="https://forest.nickx.hu/coherent-inverses-0D6X/" display-uri="coherent-inverses-0D6X" type="local">theorem <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-0D6X/" display-uri="coherent-inverses-0D6X" /></fr:link> can be rendered as an animation of tubes, as in <fr:link href="/coherent-inverses-RP6J/" title="Figure-8 isotopy 4D tube animation" uri="https://forest.nickx.hu/coherent-inverses-RP6J/" display-uri="coherent-inverses-RP6J" type="local">figure <fr:contextual-number uri="https://forest.nickx.hu/coherent-inverses-RP6J/" display-uri="coherent-inverses-RP6J" /></fr:link>.
    </html:p><fr:tree show-metadata="false"><fr:frontmatter><fr:authors><fr:author><fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link></fr:author></fr:authors><fr:date><fr:year>2025</fr:year><fr:month>1</fr:month><fr:day>8</fr:day></fr:date><fr:uri>https://forest.nickx.hu/coherent-inverses-RP6J/</fr:uri><fr:display-uri>coherent-inverses-RP6J</fr:display-uri><fr:route>/coherent-inverses-RP6J/</fr:route><fr:title text="Figure-8 isotopy 4D tube animation">Figure-8 isotopy 4D tube animation</fr:title><fr:taxon>figure</fr:taxon></fr:frontmatter><fr:mainmatter><html:figure><html:div>
    <html:img src="/bafkrmicmakwiujb2v7orlcxx6jdzyzrq2ojdbtlr3tvu3cqurmk5dvpe2u.png" width=" 30%" />
    <html:img src="/bafkrmigt4zg4d4rlgmfsqh6yjpqs7ol6vbvohq55h424dwvm3zecpfxa5a.png" width=" 30%" />
    <html:img src="/bafkrmifuife4v34jc2t56a4aavsmzgmuklvkw6dadd6z4bgpxxjljgycfe.png" width=" 30%" />
    <html:img src="/bafkrmidkegma4xgcahhjhawb24vxuixyx3g7slxv2zjqoyezuwtsb4fcve.png" width=" 30%" />
    <html:img src="/bafkrmifrlwahkuumwqk2gjque3lpegxe7rr7adugnhe7owvyixazo2dgtm.png" width=" 30%" />
    <html:img src="/bafkrmicjcnsg6po232mu6mif6jw4ked47jruramlywb4stkxnhhqtxnioq.png" width=" 30%" />
    <html:img src="/bafkrmifisfxngkylij3yokgryggvw6whwgjfifcfaka2qjr5sc4w5cue54.png" width=" 30%" />
    <html:img src="/bafkrmicgcrgmmfmkhdxwsdfgtwgzakb6uimlmolkefogdob3crurvzvtuu.png" width=" 30%" />
    <html:img src="/bafkrmibu7kzjs2cw7fclblzwtyft7svwiuubvs3djdhnkgrupzt4jbn2ry.png" width=" 30%" />
    <html:img src="/bafkrmiciuqofpl2wnzxhndbgojylkdnxgo6jtkaroqmb6y2ars424in6ce.png" width=" 30%" />
    <html:img src="/bafkrmiei7qgno4og755itupcizpjusjzttz6qzivis5gjj6yptdsye6jtq.png" width=" 30%" />
  </html:div>
  <html:figcaption>Figure-8 isotopy, rendered at time <fr:tex display="inline"><![CDATA[t \in  [0, 0.1, \ldots , 1]]]></fr:tex>.</html:figcaption></html:figure></fr:mainmatter></fr:tree><html:p>
      Link to online proof: <fr:link href="https://beta.homotopy.io/p/2412.00001" type="external">https://beta.homotopy.io/p/2412.00001</fr:link>.
    </html:p></fr:mainmatter></fr:tree></fr:mainmatter></fr:tree></fr:mainmatter>
        </fr:tree>
        <fr:tree show-metadata="true" expanded="false" toc="false" numbered="false">
          <fr:frontmatter>
            <fr:authors>
              <fr:author>
                <fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link>
              </fr:author>
            </fr:authors>
            <fr:uri>https://forest.nickx.hu/double-categories-reading-group/</fr:uri>
            <fr:display-uri>double-categories-reading-group</fr:display-uri>
            <fr:route>/double-categories-reading-group/</fr:route>
            <fr:title text="Double Categories Reading Group">Double Categories Reading Group</fr:title>
          </fr:frontmatter>
          <fr:mainmatter>
            <fr:tree show-metadata="false">
              <fr:frontmatter>
                <fr:authors>
                  <fr:author>
                    <fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link>
                  </fr:author>
                </fr:authors>
                <fr:date>
                  <fr:year>2025</fr:year>
                  <fr:month>6</fr:month>
                  <fr:day>3</fr:day>
                </fr:date>
                <fr:taxon>Plan</fr:taxon>
              </fr:frontmatter>
              <fr:mainmatter>
                <html:p>
    The plan is to meet every week or two to read seminal works on double categories and their applications to category theory and computer science.
    Currently, the most likely meeting time is Tuesday afternoon, and we are unlikely to start meeting until late July.
  </html:p>
                <html:p>
    I have in my mind some themes and papers which I would like to read, but I am pretty open to suggestions and redirection in general.
    In particular, I think it's best to follow a somewhat chronological order, to appreciate the wider context of why this technique was developed.
  </html:p>
                <html:p>
    I am hopeful that we can keep a communal ‘reading log’ on this page to keep track of the interesting things we learn and to add some accountability to our reading.
  </html:p>
                <html:p><html:strong>The list</html:strong> (roughly ordered and sectioned):
    <html:dl>
      <html:dt>
        <html:strong>Introductory</html:strong>
      </html:dt>
      <html:dd>
        <html:ol><html:li><fr:link href="/higher-dimensional-categories-from-double-to-multiple-categories/" title="Higher Dimensional Categories: From Double to Multiple Categories" uri="https://forest.nickx.hu/higher-dimensional-categories-from-double-to-multiple-categories/" display-uri="higher-dimensional-categories-from-double-to-multiple-categories" type="local">Higher Dimensional Categories: From Double to Multiple Categories</fr:link> — selected chapters</html:li></html:ol>
      </html:dd>
      <html:dt>
        <html:strong>From bicategories to (pseudo) double categories</html:strong>
      </html:dt>
      <html:dd>
        <html:ol><html:li><fr:link href="/framed-bicategories-and-monoidal-fibrations/" title="Framed bicategories and monoidal fibrations" uri="https://forest.nickx.hu/framed-bicategories-and-monoidal-fibrations/" display-uri="framed-bicategories-and-monoidal-fibrations" type="local">Framed bicategories and monoidal fibrations</fr:link></html:li>
          <html:li><fr:link href="/cartesian-double-categories-with-an-emphasis-on-characterizing-spans/" title="Cartesian Double Categories with an Emphasis on Characterizing Spans" uri="https://forest.nickx.hu/cartesian-double-categories-with-an-emphasis-on-characterizing-spans/" display-uri="cartesian-double-categories-with-an-emphasis-on-characterizing-spans" type="local">Cartesian Double Categories with an Emphasis on Characterizing Spans</fr:link></html:li>
          <html:li><fr:link href="/constructing-symmetric-monoidal-bicategories-functorially/" title="Constructing symmetric monoidal bicategories functorially" uri="https://forest.nickx.hu/constructing-symmetric-monoidal-bicategories-functorially/" display-uri="constructing-symmetric-monoidal-bicategories-functorially" type="local">Constructing symmetric monoidal bicategories functorially</fr:link></html:li></html:ol>
      </html:dd>
      <html:dt>
        <html:strong>Virtual equipments</html:strong>
      </html:dt>
      <html:dd>
        <html:ol><html:li><fr:link href="/a-unified-framework-for-generalized-multicategories/" title="A unified framework for generalized multicategories" uri="https://forest.nickx.hu/a-unified-framework-for-generalized-multicategories/" display-uri="a-unified-framework-for-generalized-multicategories" type="local">A unified framework for generalized multicategories</fr:link></html:li>
          <html:li><fr:link href="/string-diagrams-for-double-categories-and-equipments/" title="String Diagrams For Double Categories and Equipments" uri="https://forest.nickx.hu/string-diagrams-for-double-categories-and-equipments/" display-uri="string-diagrams-for-double-categories-and-equipments" type="local">String Diagrams For Double Categories and Equipments</fr:link></html:li>
          <html:li><fr:link href="/the-formal-theory-of-relative-monads/" title="The formal theory of relative monads" uri="https://forest.nickx.hu/the-formal-theory-of-relative-monads/" display-uri="the-formal-theory-of-relative-monads" type="local">The formal theory of relative monads</fr:link></html:li></html:ol>
      </html:dd>
    </html:dl></html:p>
              </fr:mainmatter>
            </fr:tree>
            <fr:tree show-metadata="false">
              <fr:frontmatter>
                <fr:authors>
                  <fr:author>
                    <fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link>
                  </fr:author>
                  <fr:author>
                    <fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link>
                  </fr:author>
                </fr:authors>
                <fr:date>
                  <fr:year>2025</fr:year>
                  <fr:month>8</fr:month>
                  <fr:day>13</fr:day>
                </fr:date>
                <fr:title text="Higher Dimensional Categories: From Double to Multiple Categories — § 3.1 – § 3.4"><fr:link href="/higher-dimensional-categories-from-double-to-multiple-categories/" title="Higher Dimensional Categories: From Double to Multiple Categories" uri="https://forest.nickx.hu/higher-dimensional-categories-from-double-to-multiple-categories/" display-uri="higher-dimensional-categories-from-double-to-multiple-categories" type="local">Higher Dimensional Categories: From Double to Multiple Categories</fr:link> — § 3.1 – § 3.4</fr:title>
                <fr:taxon>Note</fr:taxon>
              </fr:frontmatter>
              <fr:mainmatter>
                <fr:tree show-metadata="false">
                  <fr:frontmatter>
                    <fr:authors>
                      <fr:author>
                        <fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link>
                      </fr:author>
                      <fr:author>
                        <fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link>
                      </fr:author>
                    </fr:authors>
                    <fr:date>
                      <fr:year>2025</fr:year>
                      <fr:month>8</fr:month>
                      <fr:day>13</fr:day>
                    </fr:date>
                    <fr:title text="Double category">Double category</fr:title>
                    <fr:taxon>Definition</fr:taxon>
                  </fr:frontmatter>
                  <fr:mainmatter>
                    <html:p>
      A (strict) <html:em>double category</html:em> <fr:tex display="inline"><![CDATA[\mathbb {A}]]></fr:tex> has
      <html:ol><html:li>
          a set of objects <fr:tex display="inline"><![CDATA[\mathsf {Ob}\mathbb {A}]]></fr:tex>;
        </html:li>
        <html:li>
          horizontal morphisms of the form <fr:tex display="inline"><![CDATA[f\colon  X \to  X^\prime ]]></fr:tex> (function-like), which compose by <fr:tex display="inline"><![CDATA[\circ ]]></fr:tex> (often elided);
        </html:li>
        <html:li>
          vertical morphisms of the form <fr:tex display="inline"><![CDATA[u\colon  X \downarrow  Y]]></fr:tex> (relation-like), which compose (diagrammatically) by <fr:tex display="inline"><![CDATA[\searrow ]]></fr:tex>;
        </html:li>
        <html:li>
          double cells
          
          <html:div><html:iframe class="quiver-embed" src="https://q.uiver.app/#q=WzAsNCxbMCwwLCJYIl0sWzEsMCwiWF5cXHByaW1lIl0sWzAsMSwiWSJdLFsxLDEsIlleXFxwcmltZSJdLFswLDEsImYiXSxbMCwyLCJ1IiwyXSxbMiwzLCJnIiwyXSxbMSwzLCJ2Il0sWzEsMiwiXFxhbHBoYSIsMSx7ImxldmVsIjoyfV1d=&amp;embed" style="border-radius: 8px; border: none;" width="304" height="304" /></html:div>
          written inline as
          <fr:tex display="block"><![CDATA[
            \alpha \colon  \left (u {f \atop  g} v\right )\colon  \left ({X \atop  Z} {Y \atop  W}\right );
          ]]></fr:tex></html:li>
        <html:li>
          vertical and horizontal composition of double cells denoted by <fr:tex display="inline"><![CDATA[\frac {\alpha }{\gamma }]]></fr:tex> and <fr:tex display="inline"><![CDATA[\alpha  | \beta ]]></fr:tex> respectively such that interchange (coherence) holds; i.e. the diagram
          
          <html:div><html:iframe class="quiver-embed" src="https://q.uiver.app/#q=WzAsOSxbMCwwLCJYIl0sWzEsMCwiWF5cXHByaW1lIl0sWzAsMSwiWSJdLFsxLDEsIlleXFxwcmltZSJdLFsyLDAsIlhee1xccHJpbWVcXHByaW1lfSJdLFsyLDEsIllee1xccHJpbWVcXHByaW1lfSJdLFswLDIsIloiXSxbMSwyLCJaXlxccHJpbWUiXSxbMiwyLCJaXntcXHByaW1lXFxwcmltZX0iXSxbMCwxLCJmIl0sWzAsMiwidSIsMl0sWzIsMywiZyIsMV0sWzEsMywidiIsMV0sWzEsNCwiZl5cXHByaW1lIl0sWzMsNSwiZ15cXHByaW1lIiwxXSxbNiw3LCJoIiwyXSxbNyw4LCJoXlxccHJpbWUiLDJdLFsyLDYsInVeXFxwcmltZSIsMl0sWzQsNSwidyJdLFs1LDgsIndeXFxwcmltZSJdLFszLDcsInZeXFxwcmltZSIsMV0sWzEsMiwiXFxhbHBoYSIsMSx7ImxldmVsIjoyfV0sWzQsMywiXFxiZXRhIiwxLHsibGV2ZWwiOjJ9XSxbNSw3LCJcXGRlbHRhIiwxLHsibGV2ZWwiOjJ9XSxbMyw2LCJcXGdhbW1hIiwxLHsibGV2ZWwiOjJ9XV0=&amp;embed" style="border-radius: 8px; border: none;" width="432" height="432" /></html:div>
          is well-defined (and similarly identities cohere correctly).
        </html:li></html:ol></html:p>
                    <html:p>
      A double category is <html:em>flat</html:em> if its double cells are determined by their boundary horizontal/vertical morphisms.
    </html:p>
                  </fr:mainmatter>
                </fr:tree>
                <fr:tree show-metadata="false">
                  <fr:frontmatter>
                    <fr:authors>
                      <fr:author>
                        <fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link>
                      </fr:author>
                      <fr:author>
                        <fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link>
                      </fr:author>
                    </fr:authors>
                    <fr:date>
                      <fr:year>2025</fr:year>
                      <fr:month>8</fr:month>
                      <fr:day>13</fr:day>
                    </fr:date>
                    <fr:title text="\mathbb {R}\mathrm {el}\mathbf {Set}">
                      <fr:tex display="inline"><![CDATA[\mathbb {R}\mathrm {el}\mathbf {Set}]]></fr:tex>
                    </fr:title>
                    <fr:taxon>Example</fr:taxon>
                  </fr:frontmatter>
                  <fr:mainmatter>
                    <html:p>
      Let <fr:tex display="inline"><![CDATA[u\colon  X \downarrow  Y]]></fr:tex> denote a relation from <fr:tex display="inline"><![CDATA[X]]></fr:tex> to <fr:tex display="inline"><![CDATA[Y]]></fr:tex>, i.e. a subset of <fr:tex display="inline"><![CDATA[X \times  Y]]></fr:tex>, and <fr:tex display="inline"><![CDATA[u^\#\colon  Y \downarrow  X]]></fr:tex> its relational converse:
      <fr:tex display="block"><![CDATA[
        y u^\# x \iff  x u y.
      ]]></fr:tex>
      Moreover, by treating functions as relations which are everywhere uniquely defined on their domain, we can (pre/post) compose a relation by a function.
    </html:p>
                    <html:p>
      Double cells are determined by
      
      <html:div><html:iframe class="quiver-embed" src="https://q.uiver.app/#q=WzAsNCxbMCwwLCJYIl0sWzEsMCwiWF5cXHByaW1lIl0sWzAsMSwiWSJdLFsxLDEsIlleXFxwcmltZSJdLFswLDEsImYiXSxbMCwyLCJ1IiwyXSxbMiwzLCJnIiwyXSxbMSwzLCJ2Il0sWzIsMSwiXFxzdWJzZXRlcSIsMyx7InN0eWxlIjp7ImJvZHkiOnsibmFtZSI6Im5vbmUifSwiaGVhZCI6eyJuYW1lIjoibm9uZSJ9fX1dXQ=&amp;embed" style="border-radius: 8px; border: none;" width="304" height="304" /></html:div>
      where <fr:tex display="inline"><![CDATA[g u, v f\colon  X \downarrow  Y^\prime ]]></fr:tex> as above, with <fr:tex display="inline"><![CDATA[\subseteq ]]></fr:tex> denoting subset inclusion of <fr:tex display="inline"><![CDATA[X \times  Y^\prime ]]></fr:tex>.
      This happens if and only if <fr:tex display="inline"><![CDATA[f u^\# \subseteq  v^\# g]]></fr:tex> in <fr:tex display="inline"><![CDATA[Y \times  X^\prime ]]></fr:tex>.
      Note that this makes <fr:tex display="inline"><![CDATA[\mathbb {R}\mathrm {el}\mathbf {Set}]]></fr:tex> flat.
    </html:p>
                    <html:p>
      This is an instance of the category of relations on a regular category (in this case, <fr:tex display="inline"><![CDATA[\mathbf {Set}]]></fr:tex>).
    </html:p>
                  </fr:mainmatter>
                </fr:tree>
                <fr:tree show-metadata="false">
                  <fr:frontmatter>
                    <fr:authors>
                      <fr:author>
                        <fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link>
                      </fr:author>
                      <fr:author>
                        <fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link>
                      </fr:author>
                    </fr:authors>
                    <fr:date>
                      <fr:year>2025</fr:year>
                      <fr:month>8</fr:month>
                      <fr:day>13</fr:day>
                    </fr:date>
                    <fr:title text="Quintets of 2-categories">Quintets of 2-categories</fr:title>
                    <fr:taxon>Example</fr:taxon>
                  </fr:frontmatter>
                  <fr:mainmatter>
                    <html:p>
      Let <fr:tex display="inline"><![CDATA[\mathbf {C}]]></fr:tex> be a 2-category.
      The double category of quintets of <fr:tex display="inline"><![CDATA[\mathbf {C}]]></fr:tex>, <fr:tex display="inline"><![CDATA[\mathbb {Q}\mathbf {C}]]></fr:tex>, has morphisms of <fr:tex display="inline"><![CDATA[\mathbf {C}]]></fr:tex> as both horizontal and vertical morphisms, with its double cells derived from the 2-cells of <fr:tex display="inline"><![CDATA[\mathbf {C}]]></fr:tex>.
    </html:p>
                    <html:p>
      When <fr:tex display="inline"><![CDATA[\mathbf {C}]]></fr:tex> is an ordinary category, viewed as a 2-category with trivial 2-cells, <fr:tex display="inline"><![CDATA[\mathbb {Q}\mathbf {C}]]></fr:tex> is the flat double category of commutative squares of <fr:tex display="inline"><![CDATA[\mathbf {C}]]></fr:tex>.
    </html:p>
                    <html:p><fr:tex display="inline"><![CDATA[\mathbb {Q}\mathbf {Cat}]]></fr:tex> contains a cellwise full double subcategory of small categories with limit-preserving functors as horizontal morphisms and colimit-preserving functors as vertical morphisms.
    </html:p>
                  </fr:mainmatter>
                </fr:tree>
                <fr:tree show-metadata="false">
                  <fr:frontmatter>
                    <fr:authors>
                      <fr:author>
                        <fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link>
                      </fr:author>
                      <fr:author>
                        <fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link>
                      </fr:author>
                    </fr:authors>
                    <fr:date>
                      <fr:year>2025</fr:year>
                      <fr:month>8</fr:month>
                      <fr:day>13</fr:day>
                    </fr:date>
                    <fr:title text="Double category of adjunctions">Double category of adjunctions</fr:title>
                    <fr:taxon>Example</fr:taxon>
                  </fr:frontmatter>
                  <fr:mainmatter>
                    <html:p>
      Internal to any 2-category <fr:tex display="inline"><![CDATA[\mathbf {C}]]></fr:tex> there is a notion of adjunction.
      Firstly, recall that an adjunction is given by a pair of antiparallel 1-morphisms equipped with unit-counit pair of 2-cells satisfying the triangle identities.
      That is, let <fr:tex display="inline"><![CDATA[u_\bullet \colon  X \to  Y \dashv  u^\bullet \colon  Y \to  X]]></fr:tex> denote such an antiparallel pair of 1-morphisms, with
      <fr:tex display="block"><![CDATA[
        \begin {align*}
          \eta &\colon  \mathsf {id}(X) \to  u^\bullet  u_\bullet , \\
          \varepsilon &\colon  u_\bullet  u^\bullet  \to  \mathsf {id}(Y).
        \end {align*}
      ]]></fr:tex>
      In <fr:tex display="inline"><![CDATA[\mathbb {Q}\mathbf {C}]]></fr:tex>, the triangle equations look like equalities of double cells:
      
      <html:div><html:iframe class="quiver-embed" src="https://q.uiver.app/#q=WzAsMTEsWzAsMCwiWCJdLFswLDEsIlkiXSxbMCwyLCJZIl0sWzEsMSwiWCJdLFsxLDIsIlkiXSxbMSwwLCJYIl0sWzIsMSwiPSJdLFs0LDAsIlgiXSxbNCwyLCJZIl0sWzMsMCwiWCJdLFszLDIsIlkiXSxbMCwxLCJ1X1xcYnVsbGV0IiwyXSxbMSwyLCIiLDAseyJsZXZlbCI6Miwic3R5bGUiOnsiaGVhZCI6eyJuYW1lIjoibm9uZSJ9fX1dLFszLDQsInVfXFxidWxsZXQiXSxbNSwzLCIiLDAseyJsZXZlbCI6Miwic3R5bGUiOnsiaGVhZCI6eyJuYW1lIjoibm9uZSJ9fX1dLFsxLDMsInVeXFxidWxsZXQiLDFdLFsyLDQsIiIsMSx7ImxldmVsIjoyLCJzdHlsZSI6eyJoZWFkIjp7Im5hbWUiOiJub25lIn19fV0sWzAsNSwiIiwxLHsibGV2ZWwiOjIsInN0eWxlIjp7ImhlYWQiOnsibmFtZSI6Im5vbmUifX19XSxbNSwxLCJcXGV0YSIsMSx7ImxldmVsIjoyfV0sWzMsMiwiXFx2YXJlcHNpbG9uIiwxLHsibGV2ZWwiOjJ9XSxbOSw3LCIiLDEseyJsZXZlbCI6Miwic3R5bGUiOnsiaGVhZCI6eyJuYW1lIjoibm9uZSJ9fX1dLFsxMCw4LCIiLDEseyJsZXZlbCI6Miwic3R5bGUiOnsiaGVhZCI6eyJuYW1lIjoibm9uZSJ9fX1dLFs5LDEwLCJ1X1xcYnVsbGV0IiwyXSxbNyw4LCJ1X1xcYnVsbGV0Il0sWzcsMTAsIiIsMSx7ImxldmVsIjozLCJzdHlsZSI6eyJoZWFkIjp7Im5hbWUiOiJub25lIn19fV1d=&amp;embed" style="border-radius: 8px; border: none;" width="688" height="432" /></html:div>
      
      <html:div><html:iframe class="quiver-embed" src="https://q.uiver.app/#q=WzAsMTEsWzAsMCwiWSJdLFswLDEsIlgiXSxbMCwyLCJYIl0sWzEsMSwiWSJdLFsxLDIsIlgiXSxbMSwwLCJZIl0sWzIsMSwiPSJdLFs0LDAsIlgiXSxbNCwyLCJZIl0sWzMsMCwiWCJdLFszLDIsIlkiXSxbMCwxLCJ1XlxcYnVsbGV0IiwyXSxbMSwyLCIiLDAseyJsZXZlbCI6Miwic3R5bGUiOnsiaGVhZCI6eyJuYW1lIjoibm9uZSJ9fX1dLFszLDQsInVeXFxidWxsZXQiXSxbNSwzLCIiLDAseyJsZXZlbCI6Miwic3R5bGUiOnsiaGVhZCI6eyJuYW1lIjoibm9uZSJ9fX1dLFsxLDMsInVfXFxidWxsZXQiLDFdLFsyLDQsIiIsMSx7ImxldmVsIjoyLCJzdHlsZSI6eyJoZWFkIjp7Im5hbWUiOiJub25lIn19fV0sWzAsNSwiIiwxLHsibGV2ZWwiOjIsInN0eWxlIjp7ImhlYWQiOnsibmFtZSI6Im5vbmUifX19XSxbMSw1LCJcXHZhcmVwc2lsb24iLDEseyJsZXZlbCI6Mn1dLFsyLDMsIlxcZXRhIiwxLHsibGV2ZWwiOjJ9XSxbOSw3LCIiLDEseyJsZXZlbCI6Miwic3R5bGUiOnsiaGVhZCI6eyJuYW1lIjoibm9uZSJ9fX1dLFsxMCw4LCIiLDEseyJsZXZlbCI6Miwic3R5bGUiOnsiaGVhZCI6eyJuYW1lIjoibm9uZSJ9fX1dLFs5LDEwLCJ1XlxcYnVsbGV0IiwyXSxbNyw4LCJ1XlxcYnVsbGV0Il0sWzcsMTAsIiIsMSx7ImxldmVsIjozLCJzdHlsZSI6eyJoZWFkIjp7Im5hbWUiOiJub25lIn19fV1d=&amp;embed" style="border-radius: 8px; border: none;" width="688" height="432" /></html:div>
      (there are symmetric versions of these diagrams too where the horizontal and vertical morphisms are swapped).
    </html:p>
                    <html:p>
      Given a pair of morphisms <fr:tex display="inline"><![CDATA[f\colon  X \to  X^\prime ]]></fr:tex> and <fr:tex display="inline"><![CDATA[g\colon  Y \to  Y^\prime ]]></fr:tex> with another adjunction <fr:tex display="inline"><![CDATA[v_\bullet \colon  X^\prime  \to  Y^\prime  \dashv  v^\bullet \colon  Y^\prime  \to  X^\prime ]]></fr:tex>, we define the mate of any 2-cell <fr:tex display="inline"><![CDATA[\varphi \colon  v_\bullet  f \Rightarrow  g u_\bullet ]]></fr:tex> to be pasting by <fr:tex display="inline"><![CDATA[\varepsilon ]]></fr:tex> and <fr:tex display="inline"><![CDATA[\eta ^\prime ]]></fr:tex>:
      
      <html:div><html:iframe class="quiver-embed" src="https://q.uiver.app/#q=WzAsNixbMSwwLCJYIl0sWzIsMSwiWSJdLFsyLDAsIlheXFxwcmltZSJdLFszLDEsIlleXFxwcmltZSJdLFswLDEsIlkiXSxbNCwwLCJYXlxccHJpbWUiXSxbMCwyLCJmIl0sWzAsMSwidV9cXGJ1bGxldCIsMV0sWzEsMywiZyIsMl0sWzIsMywidl9cXGJ1bGxldCIsMV0sWzQsMCwidV5cXGJ1bGxldCJdLFs0LDEsIiIsMCx7ImxldmVsIjoyLCJzdHlsZSI6eyJoZWFkIjp7Im5hbWUiOiJub25lIn19fV0sWzIsNSwiIiwwLHsibGV2ZWwiOjIsInN0eWxlIjp7ImhlYWQiOnsibmFtZSI6Im5vbmUifX19XSxbMyw1LCJ2XlxcYnVsbGV0IiwyXSxbMiwxLCJcXHZhcnBoaSIsMCx7ImxldmVsIjoyfV0sWzAsMTEsIlxcdmFyZXBzaWxvbiIsMix7InNob3J0ZW4iOnsidGFyZ2V0IjoyMH19XSxbMTIsMywiXFxldGFeXFxwcmltZSIsMCx7InNob3J0ZW4iOnsic291cmNlIjoyMH19XV0=&amp;embed" style="border-radius: 8px; border: none;" width="688" height="304" /></html:div>
      and similarly for the mate of <fr:tex display="inline"><![CDATA[\psi \colon  f u^\bullet  \Rightarrow  v^\bullet  g]]></fr:tex>:
      
      <html:div><html:iframe class="quiver-embed" src="https://q.uiver.app/#q=WzAsNixbMSwxLCJZIl0sWzIsMSwiWV5cXHByaW1lIl0sWzIsMCwiWCJdLFszLDAsIlheXFxwcmltZSJdLFswLDAsIlgiXSxbNCwxLCJZIl0sWzIsMywiZiJdLFswLDEsImciLDJdLFswLDIsInVeXFxidWxsZXQiLDFdLFsxLDMsInZeXFxidWxsZXQiLDFdLFs0LDIsIiIsMCx7ImxldmVsIjoyLCJzdHlsZSI6eyJoZWFkIjp7Im5hbWUiOiJub25lIn19fV0sWzEsNSwiIiwwLHsibGV2ZWwiOjIsInN0eWxlIjp7ImhlYWQiOnsibmFtZSI6Im5vbmUifX19XSxbNCwwLCJ1X1xcYnVsbGV0IiwyXSxbMyw1LCJ2X1xcYnVsbGV0Il0sWzIsMSwiXFxwc2kiLDAseyJsZXZlbCI6Mn1dLFsxMCwwLCJcXGV0YSIsMCx7InNob3J0ZW4iOnsic291cmNlIjoyMH19XSxbMywxMSwiXFx2YXJlcHNpbG9uXlxccHJpbWUiLDAseyJzaG9ydGVuIjp7InRhcmdldCI6MjB9fV1d=&amp;embed" style="border-radius: 8px; border: none;" width="688" height="304" /></html:div>
      These operations are mutually inverse by the triangle identities.
      This is a generalisation of the Hom set bijection generated by a pair of adjoint functors (e.g. currying).
    </html:p>
                    <html:p>
      The double category of adjunctions, <fr:tex display="inline"><![CDATA[\mathrm {Adj}\mathbf {C}]]></fr:tex>, has horizontal morphisms given by the 1-morphisms of <fr:tex display="inline"><![CDATA[\mathbf {C}]]></fr:tex> and vertical morphisms given by adjunctions in <fr:tex display="inline"><![CDATA[\mathbf {C}]]></fr:tex>.
      Double cells are given by mate pairs of 2-cells in <fr:tex display="inline"><![CDATA[\mathbf {C}]]></fr:tex>.
    </html:p>
                    <html:p>
      As a special case, <fr:tex display="inline"><![CDATA[\mathrm {Adj}\mathbf {Cat}]]></fr:tex> is the double category of (small) categories, functors, and adjunctions.
      It is also equipped with a vertical involution given by taking opposite categories.
    </html:p>
                  </fr:mainmatter>
                </fr:tree>
                <fr:tree show-metadata="false">
                  <fr:frontmatter>
                    <fr:authors>
                      <fr:author>
                        <fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link>
                      </fr:author>
                      <fr:author>
                        <fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link>
                      </fr:author>
                    </fr:authors>
                    <fr:date>
                      <fr:year>2025</fr:year>
                      <fr:month>8</fr:month>
                      <fr:day>13</fr:day>
                    </fr:date>
                    <fr:title text="Dualities">Dualities</fr:title>
                    <fr:taxon>Definition</fr:taxon>
                  </fr:frontmatter>
                  <fr:mainmatter>
                    <html:p>
      Unlike ordinary categories, double categories admit multiple distinct notions of duality: <html:em>horizontal</html:em> opposite <fr:tex display="inline"><![CDATA[\mathbb {A}^h]]></fr:tex>, <html:em>vertical</html:em> opposite <fr:tex display="inline"><![CDATA[\mathbb {A}^v]]></fr:tex>, and <html:em>transpose</html:em> <fr:tex display="inline"><![CDATA[\mathbb {A}^t]]></fr:tex> (exchanging vertical and horizontal morphisms).
      The double dual (in any respect) is the identity; the horizontal-vertical dual is the vertical-horizontal dual; the horizontal-transpose dual is the transpose-vertical dual, and the transpose-horizontal dual is the vertical-transpose dual.
      'co' generally refers to horizontal duality.
    </html:p>
                  </fr:mainmatter>
                </fr:tree>
                <fr:tree show-metadata="false">
                  <fr:frontmatter>
                    <fr:authors>
                      <fr:author>
                        <fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link>
                      </fr:author>
                      <fr:author>
                        <fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link>
                      </fr:author>
                    </fr:authors>
                    <fr:date>
                      <fr:year>2025</fr:year>
                      <fr:month>8</fr:month>
                      <fr:day>13</fr:day>
                    </fr:date>
                    <fr:title text="Double categories as internal categories">Double categories as internal categories</fr:title>
                    <fr:taxon>Definition</fr:taxon>
                  </fr:frontmatter>
                  <fr:mainmatter>
                    <html:p>
      In any category with pullbacks, there is a notion of <html:em>internal category</html:em>, presented by two objects <fr:tex display="inline"><![CDATA[C_0]]></fr:tex> and <fr:tex display="inline"><![CDATA[C_1]]></fr:tex>:
      
      <html:div><html:iframe class="quiver-embed" src="https://q.uiver.app/#q=WzAsMyxbMCwwLCJDXzAiXSxbMSwwLCJDXzEiXSxbMiwwLCJDXzEgXFx0aW1lc197Q18wfSBDXzEiXSxbMSwwLCJzIiwyLHsib2Zmc2V0IjoyfV0sWzEsMCwidCIsMCx7Im9mZnNldCI6LTJ9XSxbMCwxLCJyIiwxXSxbMiwxLCJjIiwxXSxbMiwxLCJcXHBpXzEiLDAseyJvZmZzZXQiOi0yfV0sWzIsMSwiXFxwaV8yIiwyLHsib2Zmc2V0IjoyfV1d=&amp;embed" style="border-radius: 8px; border: none;" width="503" height="176" /></html:div>
      <fr:tex display="inline"><![CDATA[C_0]]></fr:tex> is the object of objects, and <fr:tex display="inline"><![CDATA[C_1]]></fr:tex> is the object of morphisms; the above diagram stipulates that every object has an associated identity morphism, every morphism has source and target objects (moreover, <fr:tex display="inline"><![CDATA[r]]></fr:tex> is a common section of <fr:tex display="inline"><![CDATA[s]]></fr:tex> and <fr:tex display="inline"><![CDATA[t]]></fr:tex>), and pairs of composable morphisms can be composed, subject to a bunch of commuting diagrams expressing the laws of composition.
    </html:p>
                    <html:p>
      A (strict) double category (ignoring size issues) can be seen an internal category in <fr:tex display="inline"><![CDATA[\mathbf {Cat}]]></fr:tex> in two ways.
      In the (main) horizontal way, <fr:tex display="inline"><![CDATA[C_0]]></fr:tex> is the category of objects and horizontal morphisms, <fr:tex display="inline"><![CDATA[C_1]]></fr:tex> is the category of vertical morphisms and double cells with horizontal composition, and <fr:tex display="inline"><![CDATA[C_2]]></fr:tex> is the category of pairs of composable vertical morphisms.
      The other (vertical) way is given by the horizontal interpretation with respect to the transpose of the double category.
    </html:p>
                  </fr:mainmatter>
                </fr:tree>
                <fr:tree show-metadata="false">
                  <fr:frontmatter>
                    <fr:authors>
                      <fr:author>
                        <fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link>
                      </fr:author>
                      <fr:author>
                        <fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link>
                      </fr:author>
                    </fr:authors>
                    <fr:date>
                      <fr:year>2025</fr:year>
                      <fr:month>8</fr:month>
                      <fr:day>13</fr:day>
                    </fr:date>
                    <fr:title text="Double categories and 2-categories">Double categories and 2-categories</fr:title>
                    <fr:taxon>Definition</fr:taxon>
                  </fr:frontmatter>
                  <fr:mainmatter>
                    <html:p>
      A double category <fr:tex display="inline"><![CDATA[\mathbb {A}]]></fr:tex> gives rise to two 2-categories:
      <html:ol><html:li>
          the horizontal 2-category <fr:tex display="inline"><![CDATA[\mathbf {Hor}\mathbb {A}]]></fr:tex> where objects are those of <fr:tex display="inline"><![CDATA[\mathbb {A}]]></fr:tex>, morphisms are the horizontal morphisms of <fr:tex display="inline"><![CDATA[\mathbb {A}]]></fr:tex>, and (globular) 2-cells are given by double cells whose vertical morphisms are identities;
        </html:li>
        <html:li>
          the vertical 2-category <fr:tex display="inline"><![CDATA[\mathbf {Ver}\mathbb {A}]]></fr:tex> where objects are those of <fr:tex display="inline"><![CDATA[\mathbb {A}]]></fr:tex>, morphisms are the vertical morphisms of <fr:tex display="inline"><![CDATA[\mathbb {A}]]></fr:tex>, and (special) 2-cells are given by double cells whose horizontal morphisms are identities.
          We also have that <fr:tex display="inline"><![CDATA[\mathbf {Ver}\mathbb {A} = \mathbf {Hor}\mathbb {A}^t]]></fr:tex>.
        </html:li></html:ol></html:p>
                  </fr:mainmatter>
                </fr:tree>
                <fr:tree show-metadata="false">
                  <fr:frontmatter>
                    <fr:authors>
                      <fr:author>
                        <fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link>
                      </fr:author>
                      <fr:author>
                        <fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link>
                      </fr:author>
                    </fr:authors>
                    <fr:date>
                      <fr:year>2025</fr:year>
                      <fr:month>8</fr:month>
                      <fr:day>13</fr:day>
                    </fr:date>
                    <fr:title text="Ultraflatness">Ultraflatness</fr:title>
                    <fr:taxon>Definition</fr:taxon>
                  </fr:frontmatter>
                  <fr:mainmatter>
                    <html:p>
      A double category is called <html:em>ultraflat</html:em> if it is flat and both its horizontal and vertical 2-categories have thin 2-cell structure.
      That is, it is flat and any double cell which is horizontally or vertically invertible is an identity.
    </html:p>
                  </fr:mainmatter>
                </fr:tree>
                <fr:tree show-metadata="false">
                  <fr:frontmatter>
                    <fr:authors>
                      <fr:author>
                        <fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link>
                      </fr:author>
                      <fr:author>
                        <fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link>
                      </fr:author>
                    </fr:authors>
                    <fr:date>
                      <fr:year>2025</fr:year>
                      <fr:month>8</fr:month>
                      <fr:day>13</fr:day>
                    </fr:date>
                    <fr:title text="Double functor double category">Double functor double category</fr:title>
                    <fr:taxon>Definition</fr:taxon>
                  </fr:frontmatter>
                  <fr:mainmatter>
                    <html:p><fr:tex display="inline"><![CDATA[\mathbb {A}^\mathbb {X}]]></fr:tex> is the double category of double functors from <fr:tex display="inline"><![CDATA[\mathbb {X}]]></fr:tex> to <fr:tex display="inline"><![CDATA[\mathbb {A}]]></fr:tex>, given by
      <html:dl>
        <html:dt>objects</html:dt>
        <html:dd>
          double functors <fr:tex display="inline"><![CDATA[F\colon  \mathbb {X} \to  \mathbb {A}]]></fr:tex>;
        </html:dd>
        <html:dt>horizontal morphisms</html:dt>
        <html:dd>
          horizontal transformations of double functors <fr:tex display="inline"><![CDATA[h\colon  F \to  G\colon  \mathbb {X} \to  \mathbb {A}]]></fr:tex>, i.e. a double functor <fr:tex display="inline"><![CDATA[h\colon  \mathbb {X} \times  \mathbf {2} \to  \mathbb {A}]]></fr:tex> such that <fr:tex display="inline"><![CDATA[F = h \circ  \langle  \mathsf {id}(\mathbb {X}), \mathrm {const}_0 \rangle ]]></fr:tex> and <fr:tex display="inline"><![CDATA[G = h \circ  \langle  \mathsf {id}(\mathbb {X}), \mathrm {const}_1 \rangle ]]></fr:tex>; explicitly, this is the data given by
          <html:ul><html:li>
              a horizontal morphism <fr:tex display="inline"><![CDATA[h X\colon  F X \to  G X]]></fr:tex> of <fr:tex display="inline"><![CDATA[\mathbb {A}]]></fr:tex> for every object <fr:tex display="inline"><![CDATA[X]]></fr:tex> of <fr:tex display="inline"><![CDATA[\mathbb {X}]]></fr:tex>;
            </html:li>
            <html:li>
              a double cell <fr:tex display="inline"><![CDATA[h u\colon  (F u {h X \atop  h Y} G u)]]></fr:tex> of <fr:tex display="inline"><![CDATA[\mathbb {A}]]></fr:tex> for every vertical morphism <fr:tex display="inline"><![CDATA[u\colon  X \downarrow  Y]]></fr:tex> of <fr:tex display="inline"><![CDATA[\mathbb {X}]]></fr:tex>, such that for every double cell <fr:tex display="inline"><![CDATA[\xi \colon  (u {f \atop  g} v)]]></fr:tex> of <fr:tex display="inline"><![CDATA[\mathbb {X}]]></fr:tex>
              
              <html:div><html:iframe class="quiver-embed" src="https://q.uiver.app/#q=WzAsMTIsWzAsMCwiRiBYIl0sWzAsMSwiRiBZIl0sWzEsMCwiRiBYXlxccHJpbWUiXSxbMSwxLCJGIFleXFxwcmltZSJdLFsyLDAsIkcgWF5cXHByaW1lIl0sWzIsMSwiRyBZXlxccHJpbWUiXSxbMywwLCJGIFgiXSxbMywxLCJGIFkiXSxbNCwwLCJHIFgiXSxbNCwxLCJHIFkiXSxbNSwwLCJHIFheXFxwcmltZSJdLFs1LDEsIkcgWV5cXHByaW1lIl0sWzAsMSwiRiB1IiwyXSxbMSwzLCJGIGciLDJdLFswLDIsIkYgZiJdLFsyLDMsIkYgdiIsMV0sWzMsNSwiaCBZXlxccHJpbWUiLDJdLFsyLDQsImggWF5cXHByaW1lIl0sWzQsNSwiRyB2Il0sWzIsMSwiRiBcXHhpIiwxLHsibGV2ZWwiOjJ9XSxbNCwzLCJoIHYiLDEseyJsZXZlbCI6Mn1dLFs2LDcsIkYgdSIsMl0sWzcsOSwiaCBZIiwyXSxbNiw4LCJoIFgiXSxbOCw5LCJGIHYiLDFdLFs5LDExLCJHIGciLDJdLFs4LDEwLCJHIGYiXSxbMTAsMTEsIkcgdiJdLFs4LDcsImggdSIsMSx7ImxldmVsIjoyfV0sWzEwLDksIkcgXFx4aSIsMSx7ImxldmVsIjoyfV0sWzE4LDIxLCI9IiwzLHsic2hvcnRlbiI6eyJzb3VyY2UiOjIwLCJ0YXJnZXQiOjIwfSwic3R5bGUiOnsiYm9keSI6eyJuYW1lIjoibm9uZSJ9LCJoZWFkIjp7Im5hbWUiOiJub25lIn19fV1d=&amp;embed" style="border-radius: 8px; border: none;" width="600" height="304" /></html:div>;

              
              <html:div><html:iframe class="quiver-embed" src="https://q.uiver.app/#q=WzAsOCxbMCwwLCJGIFgiXSxbMCwxLCJGIFgiXSxbMSwwLCJHIFgiXSxbMSwxLCJHIFgiXSxbMywwLCJGIFgiXSxbMywxLCJGIFgiXSxbNCwwLCJHIFgiXSxbNCwxLCJHIFgiXSxbMCwxLCJGIGVfWCIsMl0sWzEsMywiaCBYIiwyXSxbMCwyLCJoIFgiXSxbMiwzLCJHIGVfWCJdLFsyLDEsImggZV9YIiwxLHsibGV2ZWwiOjJ9XSxbNSw3LCJoIFgiLDJdLFs0LDYsImggWCJdLFs2LDcsIkcgZV9YIl0sWzYsNSwiZV97aCBYfSIsMSx7ImxldmVsIjoyfV0sWzQsNSwiRiBlX1giLDJdLFsxMSwxNywiPSIsMyx7InNob3J0ZW4iOnsic291cmNlIjoyMCwidGFyZ2V0IjoyMH0sInN0eWxlIjp7ImJvZHkiOnsibmFtZSI6Im5vbmUifSwiaGVhZCI6eyJuYW1lIjoibm9uZSJ9fX1dXQ=&amp;embed" style="border-radius: 8px; border: none;" width="600" height="304" /></html:div>;

              
              <html:div><html:iframe class="quiver-embed" src="https://q.uiver.app/#q=WzAsMTAsWzMsMCwiRiBYIl0sWzMsMSwiRiBZIl0sWzQsMCwiRyBYIl0sWzQsMSwiRyBZIl0sWzMsMiwiRiBaIl0sWzQsMiwiRyBaIl0sWzAsMCwiRiBYIl0sWzAsMiwiRiBaIl0sWzEsMCwiRyBYIl0sWzEsMiwiRyBaIl0sWzAsMSwiRiB1IiwyXSxbMSwzLCJoIFkiLDFdLFswLDIsImggWCJdLFsyLDMsIkcgdSJdLFsyLDEsImggdSIsMSx7ImxldmVsIjoyfV0sWzEsNCwiRiB2IiwyXSxbMyw1LCJHIHYiXSxbNCw1LCJoIFoiLDJdLFszLDQsImggdiIsMSx7ImxldmVsIjoyfV0sWzYsNywiRiAodSBcXHNlYXJyb3cgdikiLDJdLFs3LDksImggWiIsMl0sWzYsOCwiaCBYIl0sWzgsNywiaCAodSBcXHNlYXJyb3cgdikiLDEseyJsZXZlbCI6Mn1dLFs4LDksIkcgKHUgXFxzZWFycm93IHYpIl0sWzIzLDEsIj0iLDMseyJsYWJlbF9wb3NpdGlvbiI6NzAsInN0eWxlIjp7ImJvZHkiOnsibmFtZSI6Im5vbmUifSwiaGVhZCI6eyJuYW1lIjoibm9uZSJ9fX1dXQ=&amp;embed" style="border-radius: 8px; border: none;" width="600" height="432" /></html:div>;
            </html:li></html:ul>
        </html:dd>
        <html:dt>vertical morphisms</html:dt>
        <html:dd>
          vertical transformations of double functors <fr:tex display="inline"><![CDATA[r\colon  F \downarrow  G\colon  \mathbb {X} \to  A]]></fr:tex>, i.e. a double functor <fr:tex display="inline"><![CDATA[r\colon  \mathbb {X} \times  \mathbf {2}^t \to  \mathbb {A}]]></fr:tex> transversally to the above; explicitly:
          <html:ul><html:li>
              a vertical morphism <fr:tex display="inline"><![CDATA[r X\colon  F X \downarrow  G X]]></fr:tex> of <fr:tex display="inline"><![CDATA[\mathbb {A}]]></fr:tex> fo every object <fr:tex display="inline"><![CDATA[X]]></fr:tex> of <fr:tex display="inline"><![CDATA[\mathbb {X}]]></fr:tex>;
            </html:li>
            <html:li>
              a double cell <fr:tex display="inline"><![CDATA[r f\colon  (r X {F f \atop  G f} r Y)]]></fr:tex> of <fr:tex display="inline"><![CDATA[\mathbb {A}]]></fr:tex> for every horizontal morphism <fr:tex display="inline"><![CDATA[f\colon  X \to  Y]]></fr:tex> of <fr:tex display="inline"><![CDATA[\mathbb {X}]]></fr:tex>, such that for every double cell <fr:tex display="inline"><![CDATA[\xi \colon  (u {f \atop  g} v)]]></fr:tex> of <fr:tex display="inline"><![CDATA[\mathbb {X}]]></fr:tex>
              
              <html:div><html:iframe class="quiver-embed" src="https://q.uiver.app/#q=WzAsMTIsWzAsMCwiRiBYIl0sWzEsMCwiRiBZIl0sWzEsMSwiRiBZXlxccHJpbWUiXSxbMCwxLCJGIFheXFxwcmltZSJdLFswLDIsIkcgWF5cXHByaW1lIl0sWzEsMiwiRyBZXlxccHJpbWUiXSxbMiwwLCJGIFgiXSxbMywwLCJGIFkiXSxbMywxLCJHIFkiXSxbMiwxLCJHIFgiXSxbMiwyLCJHIFheXFxwcmltZSJdLFszLDIsIkcgWV5cXHByaW1lIl0sWzAsMSwiRiBmIl0sWzEsMiwiRiB2IiwxXSxbMywyLCJGIGciLDFdLFswLDMsIkYgdSIsMl0sWzEsMywiRiBcXHhpIiwxLHsibGV2ZWwiOjJ9XSxbNCw1LCJHIGciLDJdLFsyLDUsInIgWV5cXHByaW1lIl0sWzMsNCwiciBYXlxccHJpbWUiLDJdLFsyLDQsInIgZyIsMSx7ImxldmVsIjoyfV0sWzYsNywiRiBmIl0sWzcsOCwiciBZIl0sWzksOCwiRyBmIiwxXSxbNiw5LCJyIFgiLDJdLFs3LDksInIgZiIsMSx7ImxldmVsIjoyfV0sWzEwLDExLCJHIGciLDJdLFs4LDExLCJHIHYiXSxbOSwxMCwiRyB1IiwyXSxbOCwxMCwiRyBcXHhpIiwxLHsibGV2ZWwiOjJ9XSxbMiw5LCI9IiwxLHsic3R5bGUiOnsiYm9keSI6eyJuYW1lIjoibm9uZSJ9LCJoZWFkIjp7Im5hbWUiOiJub25lIn19fV1d=&amp;embed" style="border-radius: 8px; border: none;" width="560" height="432" /></html:div>;

              
              <html:div><html:iframe class="quiver-embed" src="https://q.uiver.app/#q=WzAsOCxbMCwwLCJGIFgiXSxbMCwxLCJHIFgiXSxbMSwwLCJGIFgiXSxbMSwxLCJHIFgiXSxbMywwLCJGIFgiXSxbMywxLCJHIFgiXSxbNCwwLCJGIFgiXSxbNCwxLCJHIFgiXSxbMCwxLCJyIFgiLDJdLFsxLDMsIkcgXFxtYXRocm17aWR9X1giLDJdLFswLDIsIkYgXFxtYXRocm17aWR9X1giXSxbMiwxLCJyIFxcbWF0aHJte2lkfV9YIiwxLHsibGV2ZWwiOjJ9XSxbMiwzLCJyIFgiXSxbNCw1LCJyIFgiLDJdLFs1LDcsIlxcbWF0aHJte2lkfV97R19YfSIsMl0sWzQsNiwiXFxtYXRocm17aWR9X3tGX1h9Il0sWzYsNSwiXFxtYXRocm17aWR9X3tyX1h9IiwxLHsibGV2ZWwiOjJ9XSxbNiw3LCJyIFgiXSxbMTIsMTMsIj0iLDMseyJzaG9ydGVuIjp7InNvdXJjZSI6MjAsInRhcmdldCI6MjB9LCJzdHlsZSI6eyJib2R5Ijp7Im5hbWUiOiJub25lIn0sImhlYWQiOnsibmFtZSI6Im5vbmUifX19XV0=&amp;embed" style="border-radius: 8px; border: none;" width="600" height="304" /></html:div>;

              
              <html:div><html:iframe class="quiver-embed" src="https://q.uiver.app/#q=WzAsMTAsWzAsMCwiRiBYIl0sWzIsMCwiRiBaIl0sWzIsMSwiRyBaIl0sWzAsMSwiRyBYIl0sWzAsMiwiRiBYIl0sWzEsMiwiRiBZIl0sWzIsMiwiRiBaIl0sWzIsMywiRyBaIl0sWzAsMywiRyBYIl0sWzEsMywiRyBZIl0sWzAsMSwiRiAoZyBcXGNpcmMgZikiXSxbMSwyLCJyIFoiXSxbMCwzLCJyIFgiLDJdLFszLDIsIkcgKGcgXFxjaXJjIGYpIiwyXSxbMSwzLCJyIChnIFxcY2lyYyBmKSIsMSx7ImxldmVsIjoyfV0sWzQsNSwiRiBmIl0sWzUsNiwiRiBnIl0sWzYsNywiciBaIl0sWzQsOCwiciBYIiwyXSxbOCw5LCJHIGYiLDJdLFs5LDcsIkcgZyIsMl0sWzUsOSwiciBZIiwxXSxbNSw4LCJyIGYiLDEseyJsZXZlbCI6Mn1dLFs2LDksInIgZyIsMSx7ImxldmVsIjoyfV0sWzEzLDUsIj0iLDMseyJsYWJlbF9wb3NpdGlvbiI6NzAsInNob3J0ZW4iOnsic291cmNlIjoyMH0sInN0eWxlIjp7ImJvZHkiOnsibmFtZSI6Im5vbmUifSwiaGVhZCI6eyJuYW1lIjoibm9uZSJ9fX1dXQ=&amp;embed" style="border-radius: 8px; border: none;" width="432" height="560" /></html:div>;
            </html:li></html:ul>
        </html:dd>
        <html:dt>double cells</html:dt>
        <html:dd>
          for two horizontal transformations <fr:tex display="inline"><![CDATA[h, k]]></fr:tex> and two vertical transformations <fr:tex display="inline"><![CDATA[r, s]]></fr:tex>, a modification <fr:tex display="inline"><![CDATA[\mu \colon  (r {h \atop  k} s)]]></fr:tex> which assigns to objects <fr:tex display="inline"><![CDATA[X]]></fr:tex> of <fr:tex display="inline"><![CDATA[\mathbb {X}]]></fr:tex> double cells <fr:tex display="inline"><![CDATA[\mu  X\colon  (r X {h X \atop  h Y} s X)]]></fr:tex> of <fr:tex display="inline"><![CDATA[\mathbb {A}]]></fr:tex> such that
          <html:ul><html:li>
              for every horizontal morphism <fr:tex display="inline"><![CDATA[f\colon  X \to  Y]]></fr:tex> in <fr:tex display="inline"><![CDATA[\mathbb {X}]]></fr:tex>:
              
              <html:div><html:iframe class="quiver-embed" src="https://q.uiver.app/#q=WzAsMTIsWzAsMCwiRiBYIl0sWzAsMSwiRyBYIl0sWzEsMCwiRl5cXHByaW1lIFgiXSxbMSwxLCJHXlxccHJpbWUgWCJdLFsyLDAsIkZeXFxwcmltZSBZIl0sWzIsMSwiR15cXHByaW1lIFkiXSxbMywwLCJGIFgiXSxbMywxLCJHIFgiXSxbNCwwLCJGIFkiXSxbNCwxLCJHIFkiXSxbNSwwLCJGXlxccHJpbWUgWSJdLFs1LDEsIkdeXFxwcmltZSBZIl0sWzAsMSwiciBYIiwyXSxbMSwzLCJrIFgiLDJdLFswLDIsImggWCJdLFsyLDMsInMgWCIsMV0sWzMsNSwiR15cXHByaW1lIGYiLDJdLFsyLDQsIkZeXFxwcmltZSBmIl0sWzQsNSwicyBZIl0sWzIsMSwiXFxtdSBYIiwxLHsibGV2ZWwiOjJ9XSxbNCwzLCJzIGYiLDEseyJsZXZlbCI6Mn1dLFs2LDcsInIgWCIsMl0sWzcsOSwiRyBmIiwyXSxbNiw4LCJGIGYiXSxbOCw5LCJyIFkiLDFdLFs5LDExLCJoIFleXFxwcmltZSIsMl0sWzgsMTAsImggWF5cXHByaW1lIl0sWzEwLDExLCJzIFkiXSxbOCw3LCJyIGYiLDEseyJsZXZlbCI6Mn1dLFsxMCw5LCJcXG11IFkiLDEseyJsZXZlbCI6Mn1dLFsxOCwyMSwiPSIsMSx7InNob3J0ZW4iOnsic291cmNlIjoyMCwidGFyZ2V0IjoyMH0sInN0eWxlIjp7ImJvZHkiOnsibmFtZSI6Im5vbmUifSwiaGVhZCI6eyJuYW1lIjoibm9uZSJ9fX1dXQ=&amp;embed" style="border-radius: 8px; border: none;" width="600" height="304" /></html:div>;
            </html:li>
            <html:li>
              for every vertical morphism <fr:tex display="inline"><![CDATA[u\colon  X \downarrow  Y]]></fr:tex> in <fr:tex display="inline"><![CDATA[\mathbb {X}]]></fr:tex>:
              
              <html:div><html:iframe class="quiver-embed" src="https://q.uiver.app/#q=WzAsMTIsWzAsMCwiRiBYIl0sWzEsMCwiRl5cXHByaW1lIFgiXSxbMSwxLCJHXlxccHJpbWUgWCJdLFswLDEsIkcgWCJdLFswLDIsIkcgWSJdLFsxLDIsIkdeXFxwcmltZSBZIl0sWzIsMCwiRiBYIl0sWzMsMCwiRl5cXHByaW1lIFgiXSxbMywxLCJGXlxccHJpbWUgWSJdLFsyLDEsIkYgWSJdLFsyLDIsIkcgWSJdLFszLDIsIkdeXFxwcmltZSBZIl0sWzAsMSwiaCBYIl0sWzEsMiwicyBYIiwxXSxbMywyLCJrIFgiLDFdLFswLDMsInIgWCIsMl0sWzEsMywiXFxtdSBYIiwxLHsibGV2ZWwiOjJ9XSxbNCw1LCJrIFkiLDJdLFsyLDUsIkdeXFxwcmltZSB1Il0sWzMsNCwiRyB1IiwyXSxbMiw0LCJrIHUiLDEseyJsZXZlbCI6Mn1dLFs2LDcsImggWCJdLFs3LDgsIkZeXFxwcmltZSB1Il0sWzksOCwiaCBZIiwxXSxbNiw5LCJGIHUiLDJdLFs3LDksImggdSIsMSx7ImxldmVsIjoyfV0sWzEwLDExLCJrIFkiLDJdLFs4LDExLCJzIFkiXSxbOSwxMCwiciBZIiwyXSxbOCwxMCwiXFxtdSBZIiwxLHsibGV2ZWwiOjJ9XSxbMiw5LCI9IiwxLHsic3R5bGUiOnsiYm9keSI6eyJuYW1lIjoibm9uZSJ9LCJoZWFkIjp7Im5hbWUiOiJub25lIn19fV1d=&amp;embed" style="border-radius: 8px; border: none;" width="560" height="432" /></html:div>.
            </html:li></html:ul>
        </html:dd>
      </html:dl></html:p>
                  </fr:mainmatter>
                </fr:tree>
                <fr:tree show-metadata="false">
                  <fr:frontmatter>
                    <fr:authors>
                      <fr:author>
                        <fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link>
                      </fr:author>
                      <fr:author>
                        <fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link>
                      </fr:author>
                    </fr:authors>
                    <fr:date>
                      <fr:year>2025</fr:year>
                      <fr:month>8</fr:month>
                      <fr:day>13</fr:day>
                    </fr:date>
                    <fr:title text="Weak double category">Weak double category</fr:title>
                    <fr:taxon>Definition</fr:taxon>
                  </fr:frontmatter>
                  <fr:mainmatter>
                    <html:p>
      A weak double category is a double category for which its vertical composition (<fr:tex display="inline"><![CDATA[\searrow ]]></fr:tex>) has been weakened to being witnessed by special 2-cells which are invertible in the vertical 2-category.
      It can be viewed as a <html:em>pseudo</html:em> category object in <fr:tex display="inline"><![CDATA[\mathbf {Cat}]]></fr:tex>.
    </html:p>
                    <html:p>
      Horizontal composition is still strict.
    </html:p>
                    <html:p>
      A strict double category is one where the comparison double cells <fr:tex display="inline"><![CDATA[\lambda , \rho , \alpha ]]></fr:tex> are all identities.
      A weak double category is <html:em>unitary</html:em> when <fr:tex display="inline"><![CDATA[\lambda ]]></fr:tex> and <fr:tex display="inline"><![CDATA[\rho ]]></fr:tex> are identities (strict units); it is preunitary when
      <fr:tex display="block"><![CDATA[
        \lambda  (e_X) = \rho  (e_X)\colon  e_X \searrow  e_X \to  e_X.
      ]]></fr:tex>
      This condition is often required to remove pathologies.
    </html:p>
                    <html:p>
      If <fr:tex display="inline"><![CDATA[\mathbb {A}]]></fr:tex> is a weak double category, then the obvious notion of <fr:tex display="inline"><![CDATA[\mathbf {Ver}\mathbb {A}]]></fr:tex> is a bicategory instead of a 2-category.
      If <fr:tex display="inline"><![CDATA[\mathbb {A}]]></fr:tex> is preunitary, then <fr:tex display="inline"><![CDATA[\mathbf {Hor}\mathbb {A}]]></fr:tex> is a well-defined 2-category.
    </html:p>
                  </fr:mainmatter>
                </fr:tree>
                <fr:tree show-metadata="false">
                  <fr:frontmatter>
                    <fr:authors>
                      <fr:author>
                        <fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link>
                      </fr:author>
                      <fr:author>
                        <fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link>
                      </fr:author>
                    </fr:authors>
                    <fr:date>
                      <fr:year>2025</fr:year>
                      <fr:month>8</fr:month>
                      <fr:day>13</fr:day>
                    </fr:date>
                    <fr:title text="\mathbb {S}\mathbf {pan}\mathbf {C}">
                      <fr:tex display="inline"><![CDATA[\mathbb {S}\mathbf {pan}\mathbf {C}]]></fr:tex>
                    </fr:title>
                    <fr:taxon>Example</fr:taxon>
                  </fr:frontmatter>
                  <fr:mainmatter>
                    <html:p>
      Let <fr:tex display="inline"><![CDATA[\mathbf {C}]]></fr:tex> be a category with pullbacks.
      Spans in <fr:tex display="inline"><![CDATA[\mathbf {C}]]></fr:tex> form a bicategory, where the composition of spans is given by pullback; it is weak because pullbacks are only determined up to unique isomorphism.
    </html:p>
                    <html:p><fr:tex display="inline"><![CDATA[\mathbb {S}\mathbf {pan}\mathbf {C}]]></fr:tex> is the amalgamation of this bicategory with <fr:tex display="inline"><![CDATA[\mathbf {C}]]></fr:tex> to form a weak double category; it has
      <html:dl>
        <html:dt>objects</html:dt>
        <html:dd>
          objects of <fr:tex display="inline"><![CDATA[\mathbf {C}]]></fr:tex>;
        </html:dd>
        <html:dt>horizontal morphisms</html:dt>
        <html:dd>
          morphisms of <fr:tex display="inline"><![CDATA[\mathbf {C}]]></fr:tex>;
        </html:dd>
        <html:dt>vertical morphisms</html:dt>
        <html:dd>
          spans in <fr:tex display="inline"><![CDATA[\mathbf {C}]]></fr:tex>, which can also be seen as diagrams <fr:tex display="inline"><![CDATA[\vee  \to  \mathbf {C}]]></fr:tex> where <fr:tex display="inline"><![CDATA[\vee ]]></fr:tex> is the formal span category <fr:tex display="inline"><![CDATA[0 \leftarrow  \iota  \rightarrow  1]]></fr:tex>;
        </html:dd>
        <html:dt>double cells</html:dt>
        <html:dd>
          natural transformations between spans, given as diagrams.
        </html:dd>
      </html:dl>
      This weak double category is unitary, and admits <fr:tex display="inline"><![CDATA[\mathbf {C}]]></fr:tex> as <fr:tex display="inline"><![CDATA[\mathbf {Hor}\mathbb {S}\mathbf {pan}\mathbf {C}]]></fr:tex> and the bicategory of spans in <fr:tex display="inline"><![CDATA[\mathbf {C}]]></fr:tex> as <fr:tex display="inline"><![CDATA[\mathbf {Ver}\mathbf {C}]]></fr:tex>.
    </html:p>
                    <html:p>
      There is a dual double category of cospans also.
    </html:p>
                  </fr:mainmatter>
                </fr:tree>
                <fr:tree show-metadata="false">
                  <fr:frontmatter>
                    <fr:authors>
                      <fr:author>
                        <fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link>
                      </fr:author>
                      <fr:author>
                        <fr:link href="/nick-hu/" title="Nick Hu" uri="https://forest.nickx.hu/nick-hu/" display-uri="nick-hu" type="local">Nick Hu</fr:link>
                      </fr:author>
                    </fr:authors>
                    <fr:date>
                      <fr:year>2025</fr:year>
                      <fr:month>8</fr:month>
                      <fr:day>13</fr:day>
                    </fr:date>
                    <fr:title text="\mathbb {C}\mathbf {at} — the weak double category of profunctors"><fr:tex display="inline"><![CDATA[\mathbb {C}\mathbf {at}]]></fr:tex> — the weak double category of profunctors</fr:title>
                    <fr:taxon>Example</fr:taxon>
                  </fr:frontmatter>
                  <fr:mainmatter>
                    <html:p>
      A profunctor <fr:tex display="inline"><![CDATA[u\colon  X \downarrow  Y]]></fr:tex> is defined as a functor <fr:tex display="inline"><![CDATA[{X}^{\mathrm {op}} \times  Y \to  \mathbf {Set}]]></fr:tex>.
      There is a bicategory of (small) categories, profunctors, and natural transformations <fr:tex display="inline"><![CDATA[\mathbf {Prof}]]></fr:tex> (weak because composition of profunctors is given by coends).
    </html:p>
                    <html:p><fr:tex display="inline"><![CDATA[\mathbb {C}\mathbf {at}]]></fr:tex> is the amalgamation of this with the category <fr:tex display="inline"><![CDATA[\mathbf {Cat}]]></fr:tex> to form a weak double category <fr:tex display="inline"><![CDATA[\mathbb {C}\mathbf {at}]]></fr:tex>; it has
      <html:dl>
        <html:dt>objects</html:dt>
        <html:dd>
          (small) categories;
        </html:dd>
        <html:dt>horizontal morphisms</html:dt>
        <html:dd>
          functors;
        </html:dd>
        <html:dt>vertical morphisms</html:dt>
        <html:dd>
          profunctors;
        </html:dd>
        <html:dt>double cells</html:dt>
        <html:dd>
          for
          
          <html:div><html:iframe class="quiver-embed" src="https://q.uiver.app/#q=WzAsNCxbMCwwLCJYIl0sWzEsMCwiWF5cXHByaW1lIl0sWzAsMSwiWSJdLFsxLDEsIlleXFxwcmltZSJdLFswLDEsImYiXSxbMCwyLCJ1IiwyXSxbMiwzLCJnIiwyXSxbMSwzLCJ2Il0sWzEsMiwiXFxhbHBoYSIsMSx7ImxldmVsIjoyfV1d=&amp;embed" style="border-radius: 8px; border: none;" width="304" height="304" /></html:div>
          <fr:tex display="inline"><![CDATA[\alpha ]]></fr:tex> is given by a natural transformation
          
          <html:div><html:iframe class="quiver-embed" src="https://q.uiver.app/#q=WzAsMyxbMCwwLCJYXntcXG1hdGhybXtvcH19IFxcdGltZXMgWSJdLFsxLDEsIntYXlxccHJpbWV9XntcXG1hdGhybXtvcH19IFxcdGltZXMgWV5cXHByaW1lIl0sWzIsMCwiXFxtYXRoYmZ7U2V0fSJdLFswLDEsImZee1xcbWF0aHJte29wfX0gXFx0aW1lcyBnIiwyXSxbMSwyLCJ2IiwyXSxbMCwyLCJ1Il0sWzUsMSwiXFxhbHBoYSIsMSx7ImxhYmVsX3Bvc2l0aW9uIjo2MCwic2hvcnRlbiI6eyJzb3VyY2UiOjIwfX1dXQ=&amp;embed" style="border-radius: 8px; border: none;" width="553" height="304" /></html:div>
        </html:dd>
      </html:dl></html:p>
                    <html:p>
      The prototypical example of a profunctor is the Hom functor <fr:tex display="inline"><![CDATA[\mathbf {C}(-, -)\colon  {\mathbf {C}}^{\mathrm {op}} \times  \mathbf {C} \to  \mathbf {Set}]]></fr:tex> (this is also the identity profunctor).
      An arbitrary profunctor <fr:tex display="inline"><![CDATA[u\colon  X \downarrow  Y]]></fr:tex> can be seen as a kind of 'heteromorphism' from the objects of <fr:tex display="inline"><![CDATA[X]]></fr:tex> to the objects of <fr:tex display="inline"><![CDATA[Y]]></fr:tex>; there is a category <fr:tex display="inline"><![CDATA[X +_u Y]]></fr:tex> which is known as the <html:em>gluing</html:em> or <html:em>collage</html:em> of <fr:tex display="inline"><![CDATA[X]]></fr:tex> and <fr:tex display="inline"><![CDATA[Y]]></fr:tex> along <fr:tex display="inline"><![CDATA[u]]></fr:tex>, whose objects and morphisms are the disjoint union of those coming from <fr:tex display="inline"><![CDATA[X]]></fr:tex> and <fr:tex display="inline"><![CDATA[Y]]></fr:tex>, with new ones between given by the 'Hom set' <fr:tex display="inline"><![CDATA[u(x, y)]]></fr:tex> for <fr:tex display="inline"><![CDATA[x]]></fr:tex> an object of <fr:tex display="inline"><![CDATA[X]]></fr:tex> and <fr:tex display="inline"><![CDATA[y]]></fr:tex> an object of <fr:tex display="inline"><![CDATA[Y]]></fr:tex> (this is a double colimit known as the cotabulator of <fr:tex display="inline"><![CDATA[u]]></fr:tex> in <fr:tex display="inline"><![CDATA[\mathbb {C}\mathbf {at}]]></fr:tex>).
      This category should naturally be seen as fibred over <fr:tex display="inline"><![CDATA[\mathbf {2}]]></fr:tex>, whose fibres over <fr:tex display="inline"><![CDATA[0]]></fr:tex> and <fr:tex display="inline"><![CDATA[1]]></fr:tex> are <fr:tex display="inline"><![CDATA[X]]></fr:tex> and <fr:tex display="inline"><![CDATA[Y]]></fr:tex> respectively; the coend in the composition of profunctors captures an equivalence relation, for
      
      <html:div><html:iframe class="quiver-embed" src="https://q.uiver.app/#q=WzAsNCxbMCwwLCJ4Il0sWzEsMCwieSJdLFsxLDEsInleXFxwcmltZSJdLFsyLDEsInoiXSxbMCwxLCJcXGxhbWJkYSJdLFsyLDMsIlxcbXUiLDJdLFsxLDIsIlxcZXRhIl0sWzAsMiwiXFxldGEgXFxsYW1iZGEiLDIseyJzdHlsZSI6eyJib2R5Ijp7Im5hbWUiOiJkYXNoZWQifX19XSxbMSwzLCJcXG11IFxcZXRhIiwyLHsic3R5bGUiOnsiYm9keSI6eyJuYW1lIjoiZGFzaGVkIn19fV1d=&amp;embed" style="border-radius: 8px; border: none;" width="432" height="304" /></html:div>
      where <fr:tex display="inline"><![CDATA[\lambda ]]></fr:tex> and <fr:tex display="inline"><![CDATA[\mu ]]></fr:tex> are 'heteromorphisms' and <fr:tex display="inline"><![CDATA[\nu ]]></fr:tex> is a morphism in <fr:tex display="inline"><![CDATA[Y]]></fr:tex>, generated by <fr:tex display="inline"><![CDATA[(\mu  \eta ) \circ  \lambda  \sim  \mu  \circ  (\eta  \lambda )]]></fr:tex>.
    </html:p>
                  </fr:mainmatter>
                </fr:tree>
              </fr:mainmatter>
            </fr:tree>
          </fr:mainmatter>
        </fr:tree>
      </fr:mainmatter>
    </fr:tree>
    <fr:tree show-metadata="false" hidden-when-empty="true">
      <fr:frontmatter>
        <fr:authors />
        <fr:title text="Contributions">Contributions</fr:title>
      </fr:frontmatter>
      <fr:mainmatter />
    </fr:tree>
  </fr:backmatter>
</fr:tree>
