mirror of
https://git8.cs.fau.de/theses/bsc-leon-vatthauer.git
synced 2024-05-31 07:28:34 +02:00
176 lines
No EOL
90 KiB
HTML
176 lines
No EOL
90 KiB
HTML
<!DOCTYPE HTML>
|
||
<html><head><meta charset="utf-8"><title>Categories.Adjoint.Monadic.Crude</title><link rel="stylesheet" href="Agda.css"></head><body><pre class="Agda"><a id="1" class="Symbol">{-#</a> <a id="5" class="Keyword">OPTIONS</a> <a id="13" class="Pragma">--without-K</a> <a id="25" class="Pragma">--safe</a> <a id="32" class="Symbol">#-}</a>
|
||
|
||
<a id="37" class="Keyword">open</a> <a id="42" class="Keyword">import</a> <a id="49" href="Categories.Adjoint.html" class="Module">Categories.Adjoint</a>
|
||
<a id="68" class="Keyword">open</a> <a id="73" class="Keyword">import</a> <a id="80" href="Categories.Category.html" class="Module">Categories.Category</a>
|
||
<a id="100" class="Keyword">open</a> <a id="105" class="Keyword">import</a> <a id="112" href="Categories.Functor.html" class="Module">Categories.Functor</a> <a id="131" class="Keyword">renaming</a> <a id="140" class="Symbol">(</a><a id="141" href="Categories.Functor.html#349" class="Function">id</a> <a id="144" class="Symbol">to</a> <a id="147" class="Function">idF</a><a id="150" class="Symbol">)</a>
|
||
|
||
<a id="153" class="Comment">-- The crude monadicity theorem. This proof is based off of the version</a>
|
||
<a id="225" class="Comment">-- provided in "Sheaves In Geometry and Logic" by Maclane and Moerdijk.</a>
|
||
<a id="297" class="Keyword">module</a> <a id="304" href="Categories.Adjoint.Monadic.Crude.html" class="Module">Categories.Adjoint.Monadic.Crude</a> <a id="337" class="Symbol">{</a><a id="338" href="Categories.Adjoint.Monadic.Crude.html#338" class="Bound">o</a> <a id="340" href="Categories.Adjoint.Monadic.Crude.html#340" class="Bound">ℓ</a> <a id="342" href="Categories.Adjoint.Monadic.Crude.html#342" class="Bound">e</a> <a id="344" href="Categories.Adjoint.Monadic.Crude.html#344" class="Bound">o′</a> <a id="347" href="Categories.Adjoint.Monadic.Crude.html#347" class="Bound">ℓ′</a> <a id="350" href="Categories.Adjoint.Monadic.Crude.html#350" class="Bound">e′</a><a id="352" class="Symbol">}</a> <a id="354" class="Symbol">{</a><a id="355" href="Categories.Adjoint.Monadic.Crude.html#355" class="Bound">𝒞</a> <a id="357" class="Symbol">:</a> <a id="359" href="Categories.Category.Core.html#442" class="Record">Category</a> <a id="368" href="Categories.Adjoint.Monadic.Crude.html#338" class="Bound">o</a> <a id="370" href="Categories.Adjoint.Monadic.Crude.html#340" class="Bound">ℓ</a> <a id="372" href="Categories.Adjoint.Monadic.Crude.html#342" class="Bound">e</a><a id="373" class="Symbol">}</a> <a id="375" class="Symbol">{</a><a id="376" href="Categories.Adjoint.Monadic.Crude.html#376" class="Bound">𝒟</a> <a id="378" class="Symbol">:</a> <a id="380" href="Categories.Category.Core.html#442" class="Record">Category</a> <a id="389" href="Categories.Adjoint.Monadic.Crude.html#344" class="Bound">o′</a> <a id="392" href="Categories.Adjoint.Monadic.Crude.html#347" class="Bound">ℓ′</a> <a id="395" href="Categories.Adjoint.Monadic.Crude.html#350" class="Bound">e′</a><a id="397" class="Symbol">}</a>
|
||
<a id="439" class="Symbol">{</a><a id="440" href="Categories.Adjoint.Monadic.Crude.html#440" class="Bound">L</a> <a id="442" class="Symbol">:</a> <a id="444" href="Categories.Functor.Core.html#248" class="Record">Functor</a> <a id="452" href="Categories.Adjoint.Monadic.Crude.html#355" class="Bound">𝒞</a> <a id="454" href="Categories.Adjoint.Monadic.Crude.html#376" class="Bound">𝒟</a><a id="455" class="Symbol">}</a> <a id="457" class="Symbol">{</a><a id="458" href="Categories.Adjoint.Monadic.Crude.html#458" class="Bound">R</a> <a id="460" class="Symbol">:</a> <a id="462" href="Categories.Functor.Core.html#248" class="Record">Functor</a> <a id="470" href="Categories.Adjoint.Monadic.Crude.html#376" class="Bound">𝒟</a> <a id="472" href="Categories.Adjoint.Monadic.Crude.html#355" class="Bound">𝒞</a><a id="473" class="Symbol">}</a> <a id="475" class="Symbol">(</a><a id="476" href="Categories.Adjoint.Monadic.Crude.html#476" class="Bound">adjoint</a> <a id="484" class="Symbol">:</a> <a id="486" href="Categories.Adjoint.Monadic.Crude.html#440" class="Bound">L</a> <a id="488" href="Categories.Adjoint.html#7972" class="Function Operator">⊣</a> <a id="490" href="Categories.Adjoint.Monadic.Crude.html#458" class="Bound">R</a><a id="491" class="Symbol">)</a> <a id="493" class="Keyword">where</a>
|
||
|
||
<a id="500" class="Keyword">open</a> <a id="505" class="Keyword">import</a> <a id="512" href="Level.html" class="Module">Level</a>
|
||
<a id="518" class="Keyword">open</a> <a id="523" class="Keyword">import</a> <a id="530" href="Function.html" class="Module">Function</a> <a id="539" class="Keyword">using</a> <a id="545" class="Symbol">(</a><a id="546" href="Function.Base.html#1928" class="Function Operator">_$_</a><a id="549" class="Symbol">)</a>
|
||
<a id="551" class="Keyword">open</a> <a id="556" class="Keyword">import</a> <a id="563" href="Data.Product.html" class="Module">Data.Product</a> <a id="576" class="Keyword">using</a> <a id="582" class="Symbol">(</a><a id="583" href="Data.Product.html#925" class="Function">Σ-syntax</a><a id="591" class="Symbol">;</a> <a id="593" href="Agda.Builtin.Sigma.html#218" class="InductiveConstructor Operator">_,_</a><a id="596" class="Symbol">)</a>
|
||
|
||
<a id="599" class="Keyword">open</a> <a id="604" class="Keyword">import</a> <a id="611" href="Categories.Adjoint.Properties.html" class="Module">Categories.Adjoint.Properties</a>
|
||
<a id="641" class="Keyword">open</a> <a id="646" class="Keyword">import</a> <a id="653" href="Categories.Adjoint.Monadic.html" class="Module">Categories.Adjoint.Monadic</a>
|
||
<a id="680" class="Keyword">open</a> <a id="685" class="Keyword">import</a> <a id="692" href="Categories.Adjoint.Monadic.Properties.html" class="Module">Categories.Adjoint.Monadic.Properties</a>
|
||
<a id="730" class="Keyword">open</a> <a id="735" class="Keyword">import</a> <a id="742" href="Categories.Category.Equivalence.html" class="Module">Categories.Category.Equivalence</a> <a id="774" class="Keyword">using</a> <a id="780" class="Symbol">(</a><a id="781" href="Categories.Category.Equivalence.html#1000" class="Record">StrongEquivalence</a><a id="798" class="Symbol">)</a>
|
||
<a id="800" class="Keyword">open</a> <a id="805" class="Keyword">import</a> <a id="812" href="Categories.Category.Equivalence.Properties.html" class="Module">Categories.Category.Equivalence.Properties</a> <a id="855" class="Keyword">using</a> <a id="861" class="Symbol">(</a><a id="862" href="Categories.Category.Equivalence.Properties.html#5677" class="Function">pointwise-iso-equivalence</a><a id="887" class="Symbol">)</a>
|
||
<a id="889" class="Keyword">open</a> <a id="894" class="Keyword">import</a> <a id="901" href="Categories.Functor.Properties.html" class="Module">Categories.Functor.Properties</a>
|
||
<a id="931" class="Keyword">open</a> <a id="936" class="Keyword">import</a> <a id="943" href="Categories.NaturalTransformation.NaturalIsomorphism.html" class="Module">Categories.NaturalTransformation.NaturalIsomorphism</a> <a id="995" class="Keyword">using</a> <a id="1001" class="Symbol">(</a><a id="1002" href="Categories.NaturalTransformation.NaturalIsomorphism.html#651" class="Record">NaturalIsomorphism</a><a id="1020" class="Symbol">)</a>
|
||
<a id="1022" class="Keyword">open</a> <a id="1027" class="Keyword">import</a> <a id="1034" href="Categories.NaturalTransformation.html" class="Module">Categories.NaturalTransformation</a>
|
||
<a id="1067" class="Keyword">open</a> <a id="1072" class="Keyword">import</a> <a id="1079" href="Categories.Monad.html" class="Module">Categories.Monad</a>
|
||
|
||
<a id="1097" class="Keyword">open</a> <a id="1102" class="Keyword">import</a> <a id="1109" href="Categories.Diagram.Coequalizer.html" class="Module">Categories.Diagram.Coequalizer</a>
|
||
<a id="1140" class="Keyword">open</a> <a id="1145" class="Keyword">import</a> <a id="1152" href="Categories.Diagram.ReflexivePair.html" class="Module">Categories.Diagram.ReflexivePair</a>
|
||
|
||
<a id="1186" class="Keyword">open</a> <a id="1191" class="Keyword">import</a> <a id="1198" href="Categories.Adjoint.Construction.EilenbergMoore.html" class="Module">Categories.Adjoint.Construction.EilenbergMoore</a>
|
||
<a id="1245" class="Keyword">open</a> <a id="1250" class="Keyword">import</a> <a id="1257" href="Categories.Category.Construction.EilenbergMoore.html" class="Module">Categories.Category.Construction.EilenbergMoore</a>
|
||
<a id="1305" class="Keyword">open</a> <a id="1310" class="Keyword">import</a> <a id="1317" href="Categories.Category.Construction.Properties.EilenbergMoore.html" class="Module">Categories.Category.Construction.Properties.EilenbergMoore</a>
|
||
|
||
<a id="1377" class="Keyword">open</a> <a id="1382" class="Keyword">import</a> <a id="1389" href="Categories.Morphism.html" class="Module">Categories.Morphism</a>
|
||
<a id="1409" class="Keyword">open</a> <a id="1414" class="Keyword">import</a> <a id="1421" href="Categories.Morphism.Notation.html" class="Module">Categories.Morphism.Notation</a>
|
||
<a id="1450" class="Keyword">open</a> <a id="1455" class="Keyword">import</a> <a id="1462" href="Categories.Morphism.Properties.html" class="Module">Categories.Morphism.Properties</a>
|
||
<a id="1493" class="Keyword">import</a> <a id="1500" href="Categories.Morphism.Reasoning.html" class="Module">Categories.Morphism.Reasoning</a> <a id="1530" class="Symbol">as</a> <a id="1533" class="Module">MR</a>
|
||
|
||
<a id="1537" class="Keyword">private</a>
|
||
<a id="1547" class="Keyword">module</a> <a id="L"></a><a id="1554" href="Categories.Adjoint.Monadic.Crude.html#1554" class="Module">L</a> <a id="1556" class="Symbol">=</a> <a id="1558" href="Categories.Functor.Core.html#248" class="Module">Functor</a> <a id="1566" href="Categories.Adjoint.Monadic.Crude.html#440" class="Bound">L</a>
|
||
<a id="1570" class="Keyword">module</a> <a id="R"></a><a id="1577" href="Categories.Adjoint.Monadic.Crude.html#1577" class="Module">R</a> <a id="1579" class="Symbol">=</a> <a id="1581" href="Categories.Functor.Core.html#248" class="Module">Functor</a> <a id="1589" href="Categories.Adjoint.Monadic.Crude.html#458" class="Bound">R</a>
|
||
|
||
<a id="1594" class="Keyword">module</a> <a id="𝒞"></a><a id="1601" href="Categories.Adjoint.Monadic.Crude.html#1601" class="Module">𝒞</a> <a id="1603" class="Symbol">=</a> <a id="1605" href="Categories.Category.Core.html#442" class="Module">Category</a> <a id="1614" href="Categories.Adjoint.Monadic.Crude.html#355" class="Bound">𝒞</a>
|
||
<a id="1618" class="Keyword">module</a> <a id="𝒟"></a><a id="1625" href="Categories.Adjoint.Monadic.Crude.html#1625" class="Module">𝒟</a> <a id="1627" class="Symbol">=</a> <a id="1629" href="Categories.Category.Core.html#442" class="Module">Category</a> <a id="1638" href="Categories.Adjoint.Monadic.Crude.html#376" class="Bound">𝒟</a>
|
||
|
||
<a id="1643" class="Keyword">module</a> <a id="adjoint"></a><a id="1650" href="Categories.Adjoint.Monadic.Crude.html#1650" class="Module">adjoint</a> <a id="1658" class="Symbol">=</a> <a id="1660" href="Categories.Adjoint.html#1306" class="Module">Adjoint</a> <a id="1668" href="Categories.Adjoint.Monadic.Crude.html#476" class="Bound">adjoint</a>
|
||
|
||
<a id="T"></a><a id="1679" href="Categories.Adjoint.Monadic.Crude.html#1679" class="Function">T</a> <a id="1681" class="Symbol">:</a> <a id="1683" href="Categories.Monad.html#454" class="Record">Monad</a> <a id="1689" href="Categories.Adjoint.Monadic.Crude.html#355" class="Bound">𝒞</a>
|
||
<a id="1693" href="Categories.Adjoint.Monadic.Crude.html#1679" class="Function">T</a> <a id="1695" class="Symbol">=</a> <a id="1697" href="Categories.Adjoint.Properties.html#9436" class="Function">adjoint⇒monad</a> <a id="1711" href="Categories.Adjoint.Monadic.Crude.html#476" class="Bound">adjoint</a>
|
||
|
||
<a id="𝒞ᵀ"></a><a id="1722" href="Categories.Adjoint.Monadic.Crude.html#1722" class="Function">𝒞ᵀ</a> <a id="1725" class="Symbol">:</a> <a id="1727" href="Categories.Category.Core.html#442" class="Record">Category</a> <a id="1736" class="Symbol">_</a> <a id="1738" class="Symbol">_</a> <a id="1740" class="Symbol">_</a>
|
||
<a id="1744" href="Categories.Adjoint.Monadic.Crude.html#1722" class="Function">𝒞ᵀ</a> <a id="1747" class="Symbol">=</a> <a id="1749" href="Categories.Category.Construction.EilenbergMoore.html#734" class="Function">EilenbergMoore</a> <a id="1764" href="Categories.Adjoint.Monadic.Crude.html#1679" class="Function">T</a>
|
||
|
||
<a id="Comparison"></a><a id="1769" href="Categories.Adjoint.Monadic.Crude.html#1769" class="Function">Comparison</a> <a id="1780" class="Symbol">:</a> <a id="1782" href="Categories.Functor.Core.html#248" class="Record">Functor</a> <a id="1790" href="Categories.Adjoint.Monadic.Crude.html#376" class="Bound">𝒟</a> <a id="1792" href="Categories.Adjoint.Monadic.Crude.html#1722" class="Function">𝒞ᵀ</a>
|
||
<a id="1797" href="Categories.Adjoint.Monadic.Crude.html#1769" class="Function">Comparison</a> <a id="1808" class="Symbol">=</a> <a id="1810" href="Categories.Category.Construction.Properties.EilenbergMoore.html#1167" class="Function">ComparisonF</a> <a id="1822" href="Categories.Adjoint.Monadic.Crude.html#476" class="Bound">adjoint</a>
|
||
|
||
<a id="1833" class="Keyword">module</a> <a id="Comparison"></a><a id="1840" href="Categories.Adjoint.Monadic.Crude.html#1840" class="Module">Comparison</a> <a id="1851" class="Symbol">=</a> <a id="1853" href="Categories.Functor.Core.html#248" class="Module">Functor</a> <a id="1861" href="Categories.Adjoint.Monadic.Crude.html#1769" class="Function">Comparison</a>
|
||
|
||
<a id="1875" class="Keyword">open</a> <a id="1880" href="Categories.Diagram.Coequalizer.html#1885" class="Module">Coequalizer</a>
|
||
|
||
<a id="1893" class="Comment">-- We could do this with limits, but this is far easier.</a>
|
||
<a id="PreservesReflexiveCoequalizers"></a><a id="1950" href="Categories.Adjoint.Monadic.Crude.html#1950" class="Function">PreservesReflexiveCoequalizers</a> <a id="1981" class="Symbol">:</a> <a id="1983" class="Symbol">(</a><a id="1984" href="Categories.Adjoint.Monadic.Crude.html#1984" class="Bound">F</a> <a id="1986" class="Symbol">:</a> <a id="1988" href="Categories.Functor.Core.html#248" class="Record">Functor</a> <a id="1996" href="Categories.Adjoint.Monadic.Crude.html#376" class="Bound">𝒟</a> <a id="1998" href="Categories.Adjoint.Monadic.Crude.html#355" class="Bound">𝒞</a><a id="1999" class="Symbol">)</a> <a id="2001" class="Symbol">→</a> <a id="2003" href="Agda.Primitive.html#320" class="Primitive">Set</a> <a id="2007" class="Symbol">_</a>
|
||
<a id="2009" href="Categories.Adjoint.Monadic.Crude.html#1950" class="Function">PreservesReflexiveCoequalizers</a> <a id="2040" href="Categories.Adjoint.Monadic.Crude.html#2040" class="Bound">F</a> <a id="2042" class="Symbol">=</a> <a id="2044" class="Symbol">∀</a> <a id="2046" class="Symbol">{</a><a id="2047" href="Categories.Adjoint.Monadic.Crude.html#2047" class="Bound">A</a> <a id="2049" href="Categories.Adjoint.Monadic.Crude.html#2049" class="Bound">B</a><a id="2050" class="Symbol">}</a> <a id="2052" class="Symbol">{</a><a id="2053" href="Categories.Adjoint.Monadic.Crude.html#2053" class="Bound">f</a> <a id="2055" href="Categories.Adjoint.Monadic.Crude.html#2055" class="Bound">g</a> <a id="2057" class="Symbol">:</a> <a id="2059" href="Categories.Adjoint.Monadic.Crude.html#376" class="Bound">𝒟</a> <a id="2061" href="Categories.Category.html#502" class="Function Operator">[</a> <a id="2063" href="Categories.Adjoint.Monadic.Crude.html#2047" class="Bound">A</a> <a id="2065" href="Categories.Category.html#502" class="Function Operator">,</a> <a id="2067" href="Categories.Adjoint.Monadic.Crude.html#2049" class="Bound">B</a> <a id="2069" href="Categories.Category.html#502" class="Function Operator">]</a><a id="2070" class="Symbol">}</a> <a id="2072" class="Symbol">→</a> <a id="2074" href="Categories.Diagram.ReflexivePair.html#923" class="Record">ReflexivePair</a> <a id="2088" href="Categories.Adjoint.Monadic.Crude.html#376" class="Bound">𝒟</a> <a id="2090" href="Categories.Adjoint.Monadic.Crude.html#2053" class="Bound">f</a> <a id="2092" href="Categories.Adjoint.Monadic.Crude.html#2055" class="Bound">g</a> <a id="2094" class="Symbol">→</a> <a id="2096" class="Symbol">(</a><a id="2097" href="Categories.Adjoint.Monadic.Crude.html#2097" class="Bound">coeq</a> <a id="2102" class="Symbol">:</a> <a id="2104" href="Categories.Diagram.Coequalizer.html#1885" class="Record">Coequalizer</a> <a id="2116" href="Categories.Adjoint.Monadic.Crude.html#376" class="Bound">𝒟</a> <a id="2118" href="Categories.Adjoint.Monadic.Crude.html#2053" class="Bound">f</a> <a id="2120" href="Categories.Adjoint.Monadic.Crude.html#2055" class="Bound">g</a><a id="2121" class="Symbol">)</a> <a id="2123" class="Symbol">→</a> <a id="2125" href="Categories.Diagram.Coequalizer.html#406" class="Record">IsCoequalizer</a> <a id="2139" href="Categories.Adjoint.Monadic.Crude.html#355" class="Bound">𝒞</a> <a id="2141" class="Symbol">(</a><a id="2142" href="Categories.Functor.Core.html#455" class="Field">F.F₁</a> <a id="2147" href="Categories.Adjoint.Monadic.Crude.html#2053" class="Bound">f</a><a id="2148" class="Symbol">)</a> <a id="2150" class="Symbol">(</a><a id="2151" href="Categories.Functor.Core.html#455" class="Field">F.F₁</a> <a id="2156" href="Categories.Adjoint.Monadic.Crude.html#2055" class="Bound">g</a><a id="2157" class="Symbol">)</a> <a id="2159" class="Symbol">(</a><a id="2160" href="Categories.Functor.Core.html#455" class="Field">F.F₁</a> <a id="2165" class="Symbol">(</a><a id="2166" href="Categories.Diagram.Coequalizer.html#1963" class="Field">arr</a> <a id="2170" href="Categories.Adjoint.Monadic.Crude.html#2097" class="Bound">coeq</a><a id="2174" class="Symbol">))</a>
|
||
<a id="2179" class="Keyword">where</a>
|
||
<a id="2189" class="Keyword">module</a> <a id="2196" href="Categories.Adjoint.Monadic.Crude.html#2196" class="Module">F</a> <a id="2198" class="Symbol">=</a> <a id="2200" href="Categories.Functor.Core.html#248" class="Module">Functor</a> <a id="2208" href="Categories.Adjoint.Monadic.Crude.html#2040" class="Bound">F</a>
|
||
|
||
<a id="2211" class="Keyword">module</a> <a id="2218" href="Categories.Adjoint.Monadic.Crude.html#2218" class="Module">_</a> <a id="2220" class="Symbol">{</a><a id="2221" href="Categories.Adjoint.Monadic.Crude.html#2221" class="Bound">F</a> <a id="2223" class="Symbol">:</a> <a id="2225" href="Categories.Functor.Core.html#248" class="Record">Functor</a> <a id="2233" href="Categories.Adjoint.Monadic.Crude.html#376" class="Bound">𝒟</a> <a id="2235" href="Categories.Adjoint.Monadic.Crude.html#355" class="Bound">𝒞</a><a id="2236" class="Symbol">}</a> <a id="2238" class="Symbol">(</a><a id="2239" href="Categories.Adjoint.Monadic.Crude.html#2239" class="Bound">preserves-reflexive-coeq</a> <a id="2264" class="Symbol">:</a> <a id="2266" href="Categories.Adjoint.Monadic.Crude.html#1950" class="Function">PreservesReflexiveCoequalizers</a> <a id="2297" href="Categories.Adjoint.Monadic.Crude.html#2221" class="Bound">F</a><a id="2298" class="Symbol">)</a> <a id="2300" class="Keyword">where</a>
|
||
<a id="2308" class="Keyword">open</a> <a id="2313" href="Categories.Functor.Core.html#248" class="Module">Functor</a> <a id="2321" href="Categories.Adjoint.Monadic.Crude.html#2221" class="Bound">F</a>
|
||
|
||
<a id="2326" class="Comment">-- Unfortunately, we need to prove that the 'coequalize' arrows are equal as a lemma</a>
|
||
<a id="2413" href="Categories.Adjoint.Monadic.Crude.html#2413" class="Function">preserves-coequalizer-unique</a> <a id="2442" class="Symbol">:</a> <a id="2444" class="Symbol">∀</a> <a id="2446" class="Symbol">{</a><a id="2447" href="Categories.Adjoint.Monadic.Crude.html#2447" class="Bound">A</a> <a id="2449" href="Categories.Adjoint.Monadic.Crude.html#2449" class="Bound">B</a> <a id="2451" href="Categories.Adjoint.Monadic.Crude.html#2451" class="Bound">C</a><a id="2452" class="Symbol">}</a> <a id="2454" class="Symbol">{</a><a id="2455" href="Categories.Adjoint.Monadic.Crude.html#2455" class="Bound">f</a> <a id="2457" href="Categories.Adjoint.Monadic.Crude.html#2457" class="Bound">g</a> <a id="2459" class="Symbol">:</a> <a id="2461" href="Categories.Adjoint.Monadic.Crude.html#376" class="Bound">𝒟</a> <a id="2463" href="Categories.Category.html#502" class="Function Operator">[</a> <a id="2465" href="Categories.Adjoint.Monadic.Crude.html#2447" class="Bound">A</a> <a id="2467" href="Categories.Category.html#502" class="Function Operator">,</a> <a id="2469" href="Categories.Adjoint.Monadic.Crude.html#2449" class="Bound">B</a> <a id="2471" href="Categories.Category.html#502" class="Function Operator">]</a><a id="2472" class="Symbol">}</a> <a id="2474" class="Symbol">{</a><a id="2475" href="Categories.Adjoint.Monadic.Crude.html#2475" class="Bound">h</a> <a id="2477" class="Symbol">:</a> <a id="2479" href="Categories.Adjoint.Monadic.Crude.html#376" class="Bound">𝒟</a> <a id="2481" href="Categories.Category.html#502" class="Function Operator">[</a> <a id="2483" href="Categories.Adjoint.Monadic.Crude.html#2449" class="Bound">B</a> <a id="2485" href="Categories.Category.html#502" class="Function Operator">,</a> <a id="2487" href="Categories.Adjoint.Monadic.Crude.html#2451" class="Bound">C</a> <a id="2489" href="Categories.Category.html#502" class="Function Operator">]</a><a id="2490" class="Symbol">}</a> <a id="2492" class="Symbol">{</a><a id="2493" href="Categories.Adjoint.Monadic.Crude.html#2493" class="Bound">eq</a> <a id="2496" class="Symbol">:</a> <a id="2498" href="Categories.Adjoint.Monadic.Crude.html#376" class="Bound">𝒟</a> <a id="2500" href="Categories.Category.html#609" class="Function Operator">[</a> <a id="2502" href="Categories.Adjoint.Monadic.Crude.html#376" class="Bound">𝒟</a> <a id="2504" href="Categories.Category.html#700" class="Function Operator">[</a> <a id="2506" href="Categories.Adjoint.Monadic.Crude.html#2475" class="Bound">h</a> <a id="2508" href="Categories.Category.html#700" class="Function Operator">∘</a> <a id="2510" href="Categories.Adjoint.Monadic.Crude.html#2455" class="Bound">f</a> <a id="2512" href="Categories.Category.html#700" class="Function Operator">]</a> <a id="2514" href="Categories.Category.html#609" class="Function Operator">≈</a> <a id="2516" href="Categories.Adjoint.Monadic.Crude.html#376" class="Bound">𝒟</a> <a id="2518" href="Categories.Category.html#700" class="Function Operator">[</a> <a id="2520" href="Categories.Adjoint.Monadic.Crude.html#2475" class="Bound">h</a> <a id="2522" href="Categories.Category.html#700" class="Function Operator">∘</a> <a id="2524" href="Categories.Adjoint.Monadic.Crude.html#2457" class="Bound">g</a> <a id="2526" href="Categories.Category.html#700" class="Function Operator">]</a> <a id="2528" href="Categories.Category.html#609" class="Function Operator">]</a><a id="2529" class="Symbol">}</a>
|
||
<a id="2564" class="Symbol">→</a> <a id="2566" class="Symbol">(</a><a id="2567" href="Categories.Adjoint.Monadic.Crude.html#2567" class="Bound">reflexive-pair</a> <a id="2582" class="Symbol">:</a> <a id="2584" href="Categories.Diagram.ReflexivePair.html#923" class="Record">ReflexivePair</a> <a id="2598" href="Categories.Adjoint.Monadic.Crude.html#376" class="Bound">𝒟</a> <a id="2600" href="Categories.Adjoint.Monadic.Crude.html#2455" class="Bound">f</a> <a id="2602" href="Categories.Adjoint.Monadic.Crude.html#2457" class="Bound">g</a><a id="2603" class="Symbol">)</a> <a id="2605" class="Symbol">→</a> <a id="2607" class="Symbol">(</a><a id="2608" href="Categories.Adjoint.Monadic.Crude.html#2608" class="Bound">coe</a> <a id="2612" class="Symbol">:</a> <a id="2614" href="Categories.Diagram.Coequalizer.html#1885" class="Record">Coequalizer</a> <a id="2626" href="Categories.Adjoint.Monadic.Crude.html#376" class="Bound">𝒟</a> <a id="2628" href="Categories.Adjoint.Monadic.Crude.html#2455" class="Bound">f</a> <a id="2630" href="Categories.Adjoint.Monadic.Crude.html#2457" class="Bound">g</a><a id="2631" class="Symbol">)</a>
|
||
<a id="2666" class="Symbol">→</a> <a id="2669" href="Categories.Adjoint.Monadic.Crude.html#355" class="Bound">𝒞</a> <a id="2671" href="Categories.Category.html#609" class="Function Operator">[</a> <a id="2673" href="Categories.Functor.Core.html#455" class="Function">F₁</a> <a id="2676" class="Symbol">(</a><a id="2677" href="Categories.Diagram.Coequalizer.html#523" class="Function">coequalize</a> <a id="2688" href="Categories.Adjoint.Monadic.Crude.html#2608" class="Bound">coe</a> <a id="2692" href="Categories.Adjoint.Monadic.Crude.html#2493" class="Bound">eq</a><a id="2694" class="Symbol">)</a> <a id="2696" href="Categories.Category.html#609" class="Function Operator">≈</a> <a id="2698" href="Categories.Diagram.Coequalizer.html#523" class="Field">IsCoequalizer.coequalize</a> <a id="2723" class="Symbol">(</a><a id="2724" href="Categories.Adjoint.Monadic.Crude.html#2239" class="Bound">preserves-reflexive-coeq</a> <a id="2749" href="Categories.Adjoint.Monadic.Crude.html#2567" class="Bound">reflexive-pair</a> <a id="2764" href="Categories.Adjoint.Monadic.Crude.html#2608" class="Bound">coe</a><a id="2767" class="Symbol">)</a> <a id="2769" class="Symbol">(</a><a id="2770" href="Categories.Functor.Properties.html#2676" class="Function Operator">[</a> <a id="2772" href="Categories.Adjoint.Monadic.Crude.html#2221" class="Bound">F</a> <a id="2774" href="Categories.Functor.Properties.html#2676" class="Function Operator">]-resp-square</a> <a id="2788" href="Categories.Adjoint.Monadic.Crude.html#2493" class="Bound">eq</a><a id="2790" class="Symbol">)</a> <a id="2792" href="Categories.Category.html#609" class="Function Operator">]</a>
|
||
<a id="2796" href="Categories.Adjoint.Monadic.Crude.html#2413" class="Function">preserves-coequalizer-unique</a> <a id="2825" href="Categories.Adjoint.Monadic.Crude.html#2825" class="Bound">reflexive-pair</a> <a id="2840" href="Categories.Adjoint.Monadic.Crude.html#2840" class="Bound">coe</a> <a id="2844" class="Symbol">=</a> <a id="2846" href="Categories.Diagram.Coequalizer.html#652" class="Field">IsCoequalizer.unique</a> <a id="2867" class="Symbol">(</a><a id="2868" href="Categories.Adjoint.Monadic.Crude.html#2239" class="Bound">preserves-reflexive-coeq</a> <a id="2893" href="Categories.Adjoint.Monadic.Crude.html#2825" class="Bound">reflexive-pair</a> <a id="2908" href="Categories.Adjoint.Monadic.Crude.html#2840" class="Bound">coe</a><a id="2911" class="Symbol">)</a> <a id="2913" class="Symbol">(</a><a id="2914" href="Categories.Functor.Core.html#696" class="Function">F-resp-≈</a> <a id="2923" class="Symbol">(</a><a id="2924" href="Categories.Diagram.Coequalizer.html#576" class="Function">universal</a> <a id="2934" href="Categories.Adjoint.Monadic.Crude.html#2840" class="Bound">coe</a><a id="2937" class="Symbol">)</a> <a id="2939" href="Categories.Category.Core.html#3061" class="Function Operator">○</a> <a id="2941" href="Categories.Functor.Core.html#565" class="Function">homomorphism</a><a id="2953" class="Symbol">)</a>
|
||
<a id="2959" class="Keyword">where</a>
|
||
<a id="2971" class="Keyword">open</a> <a id="2976" href="Categories.Category.Core.html#2462" class="Module">𝒞.HomReasoning</a>
|
||
|
||
|
||
<a id="2993" class="Comment">-- If 𝒟 has coequalizers of reflexive pairs, then the comparison functor has a left adjoint.</a>
|
||
<a id="3086" class="Keyword">module</a> <a id="3093" href="Categories.Adjoint.Monadic.Crude.html#3093" class="Module">_</a> <a id="3095" class="Symbol">(</a><a id="3096" href="Categories.Adjoint.Monadic.Crude.html#3096" class="Bound">has-reflexive-coequalizers</a> <a id="3123" class="Symbol">:</a> <a id="3125" class="Symbol">∀</a> <a id="3127" class="Symbol">{</a><a id="3128" href="Categories.Adjoint.Monadic.Crude.html#3128" class="Bound">A</a> <a id="3130" href="Categories.Adjoint.Monadic.Crude.html#3130" class="Bound">B</a><a id="3131" class="Symbol">}</a> <a id="3133" class="Symbol">{</a><a id="3134" href="Categories.Adjoint.Monadic.Crude.html#3134" class="Bound">f</a> <a id="3136" href="Categories.Adjoint.Monadic.Crude.html#3136" class="Bound">g</a> <a id="3138" class="Symbol">:</a> <a id="3140" href="Categories.Adjoint.Monadic.Crude.html#376" class="Bound">𝒟</a> <a id="3142" href="Categories.Category.html#502" class="Function Operator">[</a> <a id="3144" href="Categories.Adjoint.Monadic.Crude.html#3128" class="Bound">A</a> <a id="3146" href="Categories.Category.html#502" class="Function Operator">,</a> <a id="3148" href="Categories.Adjoint.Monadic.Crude.html#3130" class="Bound">B</a> <a id="3150" href="Categories.Category.html#502" class="Function Operator">]</a><a id="3151" class="Symbol">}</a> <a id="3153" class="Symbol">→</a> <a id="3155" href="Categories.Diagram.ReflexivePair.html#923" class="Record">ReflexivePair</a> <a id="3169" href="Categories.Adjoint.Monadic.Crude.html#376" class="Bound">𝒟</a> <a id="3171" href="Categories.Adjoint.Monadic.Crude.html#3134" class="Bound">f</a> <a id="3173" href="Categories.Adjoint.Monadic.Crude.html#3136" class="Bound">g</a> <a id="3175" class="Symbol">→</a> <a id="3177" href="Categories.Diagram.Coequalizer.html#1885" class="Record">Coequalizer</a> <a id="3189" href="Categories.Adjoint.Monadic.Crude.html#376" class="Bound">𝒟</a> <a id="3191" href="Categories.Adjoint.Monadic.Crude.html#3134" class="Bound">f</a> <a id="3193" href="Categories.Adjoint.Monadic.Crude.html#3136" class="Bound">g</a><a id="3194" class="Symbol">)</a> <a id="3196" class="Keyword">where</a>
|
||
|
||
<a id="3205" class="Keyword">private</a>
|
||
<a id="3217" href="Categories.Adjoint.Monadic.Crude.html#3217" class="Function">reflexive-pair</a> <a id="3232" class="Symbol">:</a> <a id="3234" class="Symbol">(</a><a id="3235" href="Categories.Adjoint.Monadic.Crude.html#3235" class="Bound">M</a> <a id="3237" class="Symbol">:</a> <a id="3239" href="Categories.Category.Construction.EilenbergMoore.html#369" class="Record">Module</a> <a id="3246" href="Categories.Adjoint.Monadic.Crude.html#1679" class="Function">T</a><a id="3247" class="Symbol">)</a> <a id="3249" class="Symbol">→</a> <a id="3251" href="Categories.Diagram.ReflexivePair.html#923" class="Record">ReflexivePair</a> <a id="3265" href="Categories.Adjoint.Monadic.Crude.html#376" class="Bound">𝒟</a> <a id="3267" class="Symbol">(</a><a id="3268" href="Categories.Functor.Core.html#455" class="Function">L.F₁</a> <a id="3273" class="Symbol">(</a><a id="3274" href="Categories.Category.Construction.EilenbergMoore.html#431" class="Field">Module.action</a> <a id="3288" href="Categories.Adjoint.Monadic.Crude.html#3235" class="Bound">M</a><a id="3289" class="Symbol">))</a> <a id="3292" class="Symbol">(</a><a id="3293" href="Categories.NaturalTransformation.Core.html#783" class="Function">adjoint.counit.η</a> <a id="3310" class="Symbol">(</a><a id="3311" href="Categories.Functor.Core.html#797" class="Function">L.₀</a> <a id="3315" class="Symbol">(</a><a id="3316" href="Categories.Category.Construction.EilenbergMoore.html#412" class="Field">Module.A</a> <a id="3325" href="Categories.Adjoint.Monadic.Crude.html#3235" class="Bound">M</a><a id="3326" class="Symbol">)))</a>
|
||
<a id="3334" href="Categories.Adjoint.Monadic.Crude.html#3217" class="Function">reflexive-pair</a> <a id="3349" href="Categories.Adjoint.Monadic.Crude.html#3349" class="Bound">M</a> <a id="3351" class="Symbol">=</a> <a id="3353" class="Keyword">record</a>
|
||
<a id="3366" class="Symbol">{</a> <a id="3368" href="Categories.Diagram.ReflexivePair.html#983" class="Field">s</a> <a id="3370" class="Symbol">=</a> <a id="3372" href="Categories.Functor.Core.html#455" class="Function">L.F₁</a> <a id="3377" class="Symbol">(</a><a id="3378" href="Categories.NaturalTransformation.Core.html#783" class="Function">adjoint.unit.η</a> <a id="3393" class="Symbol">(</a><a id="3394" href="Categories.Category.Construction.EilenbergMoore.html#412" class="Field">Module.A</a> <a id="3403" href="Categories.Adjoint.Monadic.Crude.html#3349" class="Bound">M</a><a id="3404" class="Symbol">))</a>
|
||
<a id="3413" class="Symbol">;</a> <a id="3415" href="Categories.Diagram.ReflexivePair.html#997" class="Field">isReflexivePair</a> <a id="3431" class="Symbol">=</a> <a id="3433" class="Keyword">record</a>
|
||
<a id="3448" class="Symbol">{</a> <a id="3450" href="Categories.Diagram.ReflexivePair.html#806" class="Field">sectionₗ</a> <a id="3459" class="Symbol">=</a> <a id="3461" href="Relation.Binary.Reasoning.Base.Single.html#1925" class="Function Operator">begin</a>
|
||
<a id="3477" href="Categories.Adjoint.Monadic.Crude.html#376" class="Bound">𝒟</a> <a id="3479" href="Categories.Category.html#700" class="Function Operator">[</a> <a id="3481" href="Categories.Functor.Core.html#455" class="Function">L.F₁</a> <a id="3486" class="Symbol">(</a><a id="3487" href="Categories.Category.Construction.EilenbergMoore.html#431" class="Field">Module.action</a> <a id="3501" href="Categories.Adjoint.Monadic.Crude.html#3349" class="Bound">M</a><a id="3502" class="Symbol">)</a> <a id="3504" href="Categories.Category.html#700" class="Function Operator">∘</a> <a id="3506" href="Categories.Functor.Core.html#455" class="Function">L.F₁</a> <a id="3511" class="Symbol">(</a><a id="3512" href="Categories.NaturalTransformation.Core.html#783" class="Function">adjoint.unit.η</a> <a id="3527" class="Symbol">(</a><a id="3528" href="Categories.Category.Construction.EilenbergMoore.html#412" class="Field">Module.A</a> <a id="3537" href="Categories.Adjoint.Monadic.Crude.html#3349" class="Bound">M</a><a id="3538" class="Symbol">))</a> <a id="3541" href="Categories.Category.html#700" class="Function Operator">]</a> <a id="3543" href="Relation.Binary.Reasoning.Setoid.html#1162" class="Function">≈˘⟨</a> <a id="3547" href="Categories.Functor.Core.html#565" class="Function">L.homomorphism</a> <a id="3562" href="Relation.Binary.Reasoning.Setoid.html#1162" class="Function">⟩</a>
|
||
<a id="3574" href="Categories.Functor.Core.html#455" class="Function">L.F₁</a> <a id="3579" class="Symbol">(</a><a id="3580" href="Categories.Adjoint.Monadic.Crude.html#355" class="Bound">𝒞</a> <a id="3582" href="Categories.Category.html#700" class="Function Operator">[</a> <a id="3584" href="Categories.Category.Construction.EilenbergMoore.html#431" class="Field">Module.action</a> <a id="3598" href="Categories.Adjoint.Monadic.Crude.html#3349" class="Bound">M</a> <a id="3600" href="Categories.Category.html#700" class="Function Operator">∘</a> <a id="3602" href="Categories.NaturalTransformation.Core.html#783" class="Function">adjoint.unit.η</a> <a id="3617" class="Symbol">(</a><a id="3618" href="Categories.Category.Construction.EilenbergMoore.html#412" class="Field">Module.A</a> <a id="3627" href="Categories.Adjoint.Monadic.Crude.html#3349" class="Bound">M</a><a id="3628" class="Symbol">)</a> <a id="3630" href="Categories.Category.html#700" class="Function Operator">]</a> <a id="3632" class="Symbol">)</a> <a id="3640" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function">≈⟨</a> <a id="3643" href="Categories.Functor.Core.html#696" class="Function">L.F-resp-≈</a> <a id="3654" class="Symbol">(</a><a id="3655" href="Categories.Category.Construction.EilenbergMoore.html#508" class="Field">Module.identity</a> <a id="3671" href="Categories.Adjoint.Monadic.Crude.html#3349" class="Bound">M</a><a id="3672" class="Symbol">)</a> <a id="3674" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function">⟩</a>
|
||
<a id="3686" href="Categories.Functor.Core.html#455" class="Function">L.F₁</a> <a id="3691" href="Categories.Category.Core.html#630" class="Function">𝒞.id</a> <a id="3752" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function">≈⟨</a> <a id="3755" href="Categories.Functor.Core.html#511" class="Function">L.identity</a> <a id="3766" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function">⟩</a>
|
||
<a id="3778" href="Categories.Category.Core.html#630" class="Function">𝒟.id</a> <a id="3844" href="Relation.Binary.Reasoning.Base.Single.html#2564" class="Function Operator">∎</a>
|
||
<a id="3854" class="Symbol">;</a> <a id="3856" href="Categories.Diagram.ReflexivePair.html#832" class="Field">sectionᵣ</a> <a id="3865" class="Symbol">=</a> <a id="3867" href="Relation.Binary.Reasoning.Base.Single.html#1925" class="Function Operator">begin</a>
|
||
<a id="3883" href="Categories.Adjoint.Monadic.Crude.html#376" class="Bound">𝒟</a> <a id="3885" href="Categories.Category.html#700" class="Function Operator">[</a> <a id="3887" href="Categories.NaturalTransformation.Core.html#783" class="Function">adjoint.counit.η</a> <a id="3904" class="Symbol">(</a><a id="3905" href="Categories.Functor.Core.html#797" class="Function">L.₀</a> <a id="3909" class="Symbol">(</a><a id="3910" href="Categories.Category.Construction.EilenbergMoore.html#412" class="Field">Module.A</a> <a id="3919" href="Categories.Adjoint.Monadic.Crude.html#3349" class="Bound">M</a><a id="3920" class="Symbol">))</a> <a id="3923" href="Categories.Category.html#700" class="Function Operator">∘</a> <a id="3925" href="Categories.Functor.Core.html#455" class="Function">L.F₁</a> <a id="3930" class="Symbol">(</a><a id="3931" href="Categories.NaturalTransformation.Core.html#783" class="Function">adjoint.unit.η</a> <a id="3946" class="Symbol">(</a><a id="3947" href="Categories.Category.Construction.EilenbergMoore.html#412" class="Field">Module.A</a> <a id="3956" href="Categories.Adjoint.Monadic.Crude.html#3349" class="Bound">M</a><a id="3957" class="Symbol">))</a> <a id="3960" href="Categories.Category.html#700" class="Function Operator">]</a> <a id="3962" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function">≈⟨</a> <a id="3965" href="Categories.Adjoint.html#1715" class="Field">adjoint.zig</a> <a id="3977" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function">⟩</a>
|
||
<a id="3989" href="Categories.Category.Core.html#630" class="Function">𝒟.id</a> <a id="3994" href="Relation.Binary.Reasoning.Base.Single.html#2564" class="Function Operator">∎</a>
|
||
<a id="4004" class="Symbol">}</a>
|
||
<a id="4012" class="Symbol">}</a>
|
||
<a id="4020" class="Keyword">where</a>
|
||
<a id="4034" class="Keyword">open</a> <a id="4039" href="Categories.Category.Core.html#2462" class="Module">𝒟.HomReasoning</a>
|
||
|
||
<a id="4059" class="Comment">-- The key part of the proof. As we have all reflexive coequalizers, we can create the following coequalizer.</a>
|
||
<a id="4173" class="Comment">-- We can think of this as identifying the action of the algebra lifted to a "free" structure</a>
|
||
<a id="4271" class="Comment">-- and the counit of the adjunction, as the unit of the adjunction (also lifted to the "free structure") is a section of both.</a>
|
||
<a id="4402" href="Categories.Adjoint.Monadic.Crude.html#4402" class="Function">has-coequalizer</a> <a id="4418" class="Symbol">:</a> <a id="4420" class="Symbol">(</a><a id="4421" href="Categories.Adjoint.Monadic.Crude.html#4421" class="Bound">M</a> <a id="4423" class="Symbol">:</a> <a id="4425" href="Categories.Category.Construction.EilenbergMoore.html#369" class="Record">Module</a> <a id="4432" href="Categories.Adjoint.Monadic.Crude.html#1679" class="Function">T</a><a id="4433" class="Symbol">)</a> <a id="4435" class="Symbol">→</a> <a id="4437" href="Categories.Diagram.Coequalizer.html#1885" class="Record">Coequalizer</a> <a id="4449" href="Categories.Adjoint.Monadic.Crude.html#376" class="Bound">𝒟</a> <a id="4451" class="Symbol">(</a><a id="4452" href="Categories.Functor.Core.html#455" class="Function">L.F₁</a> <a id="4457" class="Symbol">(</a><a id="4458" href="Categories.Category.Construction.EilenbergMoore.html#431" class="Field">Module.action</a> <a id="4472" href="Categories.Adjoint.Monadic.Crude.html#4421" class="Bound">M</a><a id="4473" class="Symbol">))</a> <a id="4476" class="Symbol">(</a><a id="4477" href="Categories.NaturalTransformation.Core.html#783" class="Function">adjoint.counit.η</a> <a id="4494" class="Symbol">(</a><a id="4495" href="Categories.Functor.Core.html#797" class="Function">L.₀</a> <a id="4499" class="Symbol">(</a><a id="4500" href="Categories.Category.Construction.EilenbergMoore.html#412" class="Field">Module.A</a> <a id="4509" href="Categories.Adjoint.Monadic.Crude.html#4421" class="Bound">M</a><a id="4510" class="Symbol">)))</a>
|
||
<a id="4518" href="Categories.Adjoint.Monadic.Crude.html#4402" class="Function">has-coequalizer</a> <a id="4534" href="Categories.Adjoint.Monadic.Crude.html#4534" class="Bound">M</a> <a id="4536" class="Symbol">=</a> <a id="4538" href="Categories.Adjoint.Monadic.Crude.html#3096" class="Bound">has-reflexive-coequalizers</a> <a id="4565" class="Symbol">(</a><a id="4566" href="Categories.Adjoint.Monadic.Crude.html#3217" class="Function">reflexive-pair</a> <a id="4581" href="Categories.Adjoint.Monadic.Crude.html#4534" class="Bound">M</a><a id="4582" class="Symbol">)</a>
|
||
|
||
<a id="4589" class="Keyword">module</a> <a id="4596" href="Categories.Adjoint.Monadic.Crude.html#4596" class="Module">Comparison⁻¹</a> <a id="4609" class="Symbol">=</a> <a id="4611" href="Categories.Functor.Core.html#248" class="Module">Functor</a> <a id="4619" class="Symbol">(</a><a id="4620" href="Categories.Adjoint.Monadic.Properties.html#1502" class="Function">Comparison⁻¹</a> <a id="4633" href="Categories.Adjoint.Monadic.Crude.html#476" class="Bound">adjoint</a> <a id="4641" href="Categories.Adjoint.Monadic.Crude.html#4402" class="Function">has-coequalizer</a><a id="4656" class="Symbol">)</a>
|
||
<a id="4662" class="Keyword">module</a> <a id="4669" href="Categories.Adjoint.Monadic.Crude.html#4669" class="Module">Comparison⁻¹⊣Comparison</a> <a id="4693" class="Symbol">=</a> <a id="4695" href="Categories.Adjoint.html#1306" class="Module">Adjoint</a> <a id="4703" class="Symbol">(</a><a id="4704" href="Categories.Adjoint.Monadic.Properties.html#3967" class="Function">Comparison⁻¹⊣Comparison</a> <a id="4728" href="Categories.Adjoint.Monadic.Crude.html#476" class="Bound">adjoint</a> <a id="4736" href="Categories.Adjoint.Monadic.Crude.html#4402" class="Function">has-coequalizer</a><a id="4751" class="Symbol">)</a>
|
||
|
||
<a id="4758" class="Comment">-- We have one interesting coequalizer in 𝒞 built out of a T-module's action.</a>
|
||
<a id="4840" href="Categories.Adjoint.Monadic.Crude.html#4840" class="Function">coequalizer-action</a> <a id="4859" class="Symbol">:</a> <a id="4861" class="Symbol">(</a><a id="4862" href="Categories.Adjoint.Monadic.Crude.html#4862" class="Bound">M</a> <a id="4864" class="Symbol">:</a> <a id="4866" href="Categories.Category.Construction.EilenbergMoore.html#369" class="Record">Module</a> <a id="4873" href="Categories.Adjoint.Monadic.Crude.html#1679" class="Function">T</a><a id="4874" class="Symbol">)</a> <a id="4876" class="Symbol">→</a> <a id="4878" href="Categories.Diagram.Coequalizer.html#1885" class="Record">Coequalizer</a> <a id="4890" href="Categories.Adjoint.Monadic.Crude.html#355" class="Bound">𝒞</a> <a id="4892" class="Symbol">(</a><a id="4893" href="Categories.Functor.Core.html#455" class="Function">R.F₁</a> <a id="4898" class="Symbol">(</a><a id="4899" href="Categories.Functor.Core.html#455" class="Function">L.F₁</a> <a id="4904" class="Symbol">(</a><a id="4905" href="Categories.Category.Construction.EilenbergMoore.html#431" class="Field">Module.action</a> <a id="4919" href="Categories.Adjoint.Monadic.Crude.html#4862" class="Bound">M</a><a id="4920" class="Symbol">)))</a> <a id="4924" class="Symbol">(</a><a id="4925" href="Categories.Functor.Core.html#455" class="Function">R.F₁</a> <a id="4930" class="Symbol">(</a><a id="4931" href="Categories.NaturalTransformation.Core.html#783" class="Function">adjoint.counit.η</a> <a id="4948" class="Symbol">(</a><a id="4949" href="Categories.Functor.Core.html#797" class="Function">L.₀</a> <a id="4953" class="Symbol">(</a><a id="4954" href="Categories.Category.Construction.EilenbergMoore.html#412" class="Field">Module.A</a> <a id="4963" href="Categories.Adjoint.Monadic.Crude.html#4862" class="Bound">M</a><a id="4964" class="Symbol">))))</a>
|
||
<a id="4973" href="Categories.Adjoint.Monadic.Crude.html#4840" class="Function">coequalizer-action</a> <a id="4992" href="Categories.Adjoint.Monadic.Crude.html#4992" class="Bound">M</a> <a id="4994" class="Symbol">=</a> <a id="4996" class="Keyword">record</a>
|
||
<a id="5009" class="Symbol">{</a> <a id="5011" href="Categories.Diagram.Coequalizer.html#1963" class="Field">arr</a> <a id="5015" class="Symbol">=</a> <a id="5017" href="Categories.Category.Construction.EilenbergMoore.html#431" class="Field">Module.action</a> <a id="5031" href="Categories.Adjoint.Monadic.Crude.html#4992" class="Bound">M</a>
|
||
<a id="5039" class="Symbol">;</a> <a id="5041" href="Categories.Diagram.Coequalizer.html#1983" class="Field">isCoequalizer</a> <a id="5055" class="Symbol">=</a> <a id="5057" class="Keyword">record</a>
|
||
<a id="5072" class="Symbol">{</a> <a id="5074" href="Categories.Diagram.Coequalizer.html#488" class="Field">equality</a> <a id="5083" class="Symbol">=</a> <a id="5085" href="Categories.Category.Construction.EilenbergMoore.html#455" class="Field">Module.commute</a> <a id="5100" href="Categories.Adjoint.Monadic.Crude.html#4992" class="Bound">M</a>
|
||
<a id="5110" class="Symbol">;</a> <a id="5112" href="Categories.Diagram.Coequalizer.html#523" class="Field">coequalize</a> <a id="5123" class="Symbol">=</a> <a id="5125" class="Symbol">λ</a> <a id="5127" class="Symbol">{</a><a id="5128" href="Categories.Adjoint.Monadic.Crude.html#5128" class="Bound">X</a><a id="5129" class="Symbol">}</a> <a id="5131" class="Symbol">{</a><a id="5132" href="Categories.Adjoint.Monadic.Crude.html#5132" class="Bound">h</a><a id="5133" class="Symbol">}</a> <a id="5135" href="Categories.Adjoint.Monadic.Crude.html#5135" class="Bound">eq</a> <a id="5138" class="Symbol">→</a> <a id="5140" href="Categories.Adjoint.Monadic.Crude.html#355" class="Bound">𝒞</a> <a id="5142" href="Categories.Category.html#700" class="Function Operator">[</a> <a id="5144" href="Categories.Adjoint.Monadic.Crude.html#5132" class="Bound">h</a> <a id="5146" href="Categories.Category.html#700" class="Function Operator">∘</a> <a id="5148" href="Categories.NaturalTransformation.Core.html#783" class="Function">adjoint.unit.η</a> <a id="5163" class="Symbol">(</a><a id="5164" href="Categories.Category.Construction.EilenbergMoore.html#412" class="Field">Module.A</a> <a id="5173" href="Categories.Adjoint.Monadic.Crude.html#4992" class="Bound">M</a><a id="5174" class="Symbol">)</a> <a id="5176" href="Categories.Category.html#700" class="Function Operator">]</a>
|
||
<a id="5186" class="Symbol">;</a> <a id="5188" href="Categories.Diagram.Coequalizer.html#576" class="Field">universal</a> <a id="5198" class="Symbol">=</a> <a id="5200" class="Symbol">λ</a> <a id="5202" class="Symbol">{</a><a id="5203" href="Categories.Adjoint.Monadic.Crude.html#5203" class="Bound">C</a><a id="5204" class="Symbol">}</a> <a id="5206" class="Symbol">{</a><a id="5207" href="Categories.Adjoint.Monadic.Crude.html#5207" class="Bound">h</a><a id="5208" class="Symbol">}</a> <a id="5210" class="Symbol">{</a><a id="5211" href="Categories.Adjoint.Monadic.Crude.html#5211" class="Bound">eq</a><a id="5213" class="Symbol">}</a> <a id="5215" class="Symbol">→</a> <a id="5217" href="Relation.Binary.Reasoning.Base.Single.html#1925" class="Function Operator">begin</a>
|
||
<a id="5233" href="Categories.Adjoint.Monadic.Crude.html#5207" class="Bound">h</a> <a id="5337" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function">≈⟨</a> <a id="5340" href="Categories.Morphism.Reasoning.Core.html#2899" class="Function">introʳ</a> <a id="5347" href="Categories.Adjoint.html#1788" class="Field">adjoint.zag</a> <a id="5359" href="Categories.Category.Core.html#3061" class="Function Operator">○</a> <a id="5361" href="Categories.Category.Core.html#1004" class="Function">𝒞.sym-assoc</a> <a id="5373" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function">⟩</a>
|
||
<a id="5385" href="Categories.Adjoint.Monadic.Crude.html#355" class="Bound">𝒞</a> <a id="5387" href="Categories.Category.html#700" class="Function Operator">[</a> <a id="5389" href="Categories.Adjoint.Monadic.Crude.html#355" class="Bound">𝒞</a> <a id="5391" href="Categories.Category.html#700" class="Function Operator">[</a> <a id="5393" href="Categories.Adjoint.Monadic.Crude.html#5207" class="Bound">h</a> <a id="5395" href="Categories.Category.html#700" class="Function Operator">∘</a> <a id="5397" href="Categories.Functor.Core.html#455" class="Function">R.F₁</a> <a id="5402" class="Symbol">(</a><a id="5403" href="Categories.NaturalTransformation.Core.html#783" class="Function">adjoint.counit.η</a> <a id="5420" class="Symbol">(</a><a id="5421" href="Categories.Functor.Core.html#797" class="Function">L.₀</a> <a id="5425" class="Symbol">(</a><a id="5426" href="Categories.Category.Construction.EilenbergMoore.html#412" class="Field">Module.A</a> <a id="5435" href="Categories.Adjoint.Monadic.Crude.html#4992" class="Bound">M</a><a id="5436" class="Symbol">)))</a> <a id="5440" href="Categories.Category.html#700" class="Function Operator">]</a> <a id="5442" href="Categories.Category.html#700" class="Function Operator">∘</a> <a id="5444" href="Categories.NaturalTransformation.Core.html#783" class="Function">adjoint.unit.η</a> <a id="5459" class="Symbol">(</a><a id="5460" href="Categories.Functor.Core.html#432" class="Function">R.F₀</a> <a id="5465" class="Symbol">(</a><a id="5466" href="Categories.Functor.Core.html#432" class="Function">L.F₀</a> <a id="5471" class="Symbol">(</a><a id="5472" href="Categories.Category.Construction.EilenbergMoore.html#412" class="Field">Module.A</a> <a id="5481" href="Categories.Adjoint.Monadic.Crude.html#4992" class="Bound">M</a><a id="5482" class="Symbol">)))</a> <a id="5486" href="Categories.Category.html#700" class="Function Operator">]</a> <a id="5488" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function">≈⟨</a> <a id="5491" href="Categories.Morphism.Reasoning.Core.html#2485" class="Function">pushˡ</a> <a id="5497" class="Symbol">(</a><a id="5498" href="Categories.Category.Core.html#3005" class="Function">⟺</a> <a id="5500" href="Categories.Adjoint.Monadic.Crude.html#5211" class="Bound">eq</a><a id="5502" class="Symbol">)</a> <a id="5504" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function">⟩</a>
|
||
<a id="5516" href="Categories.Adjoint.Monadic.Crude.html#355" class="Bound">𝒞</a> <a id="5518" href="Categories.Category.html#700" class="Function Operator">[</a> <a id="5520" href="Categories.Adjoint.Monadic.Crude.html#5207" class="Bound">h</a> <a id="5522" href="Categories.Category.html#700" class="Function Operator">∘</a> <a id="5524" href="Categories.Adjoint.Monadic.Crude.html#355" class="Bound">𝒞</a> <a id="5526" href="Categories.Category.html#700" class="Function Operator">[</a> <a id="5528" href="Categories.Functor.Core.html#455" class="Function">R.F₁</a> <a id="5533" class="Symbol">(</a><a id="5534" href="Categories.Functor.Core.html#455" class="Function">L.F₁</a> <a id="5539" class="Symbol">(</a><a id="5540" href="Categories.Category.Construction.EilenbergMoore.html#431" class="Field">Module.action</a> <a id="5554" href="Categories.Adjoint.Monadic.Crude.html#4992" class="Bound">M</a><a id="5555" class="Symbol">))</a> <a id="5558" href="Categories.Category.html#700" class="Function Operator">∘</a> <a id="5560" href="Categories.NaturalTransformation.Core.html#783" class="Function">adjoint.unit.η</a> <a id="5575" class="Symbol">(</a><a id="5576" href="Categories.Functor.Core.html#432" class="Function">R.F₀</a> <a id="5581" class="Symbol">(</a><a id="5582" href="Categories.Functor.Core.html#432" class="Function">L.F₀</a> <a id="5587" class="Symbol">(</a><a id="5588" href="Categories.Category.Construction.EilenbergMoore.html#412" class="Field">Module.A</a> <a id="5597" href="Categories.Adjoint.Monadic.Crude.html#4992" class="Bound">M</a><a id="5598" class="Symbol">)))</a> <a id="5602" href="Categories.Category.html#700" class="Function Operator">]</a> <a id="5604" href="Categories.Category.html#700" class="Function Operator">]</a> <a id="5619" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function">≈⟨</a> <a id="5622" href="Categories.Morphism.Reasoning.Core.html#2347" class="Function">pushʳ</a> <a id="5628" class="Symbol">(</a><a id="5629" href="Categories.NaturalTransformation.Core.html#1043" class="Function">adjoint.unit.sym-commute</a> <a id="5654" class="Symbol">(</a><a id="5655" href="Categories.Category.Construction.EilenbergMoore.html#431" class="Field">Module.action</a> <a id="5669" href="Categories.Adjoint.Monadic.Crude.html#4992" class="Bound">M</a><a id="5670" class="Symbol">))</a> <a id="5673" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function">⟩</a>
|
||
<a id="5685" href="Categories.Adjoint.Monadic.Crude.html#355" class="Bound">𝒞</a> <a id="5687" href="Categories.Category.html#700" class="Function Operator">[</a> <a id="5689" href="Categories.Adjoint.Monadic.Crude.html#355" class="Bound">𝒞</a> <a id="5691" href="Categories.Category.html#700" class="Function Operator">[</a> <a id="5693" href="Categories.Adjoint.Monadic.Crude.html#5207" class="Bound">h</a> <a id="5695" href="Categories.Category.html#700" class="Function Operator">∘</a> <a id="5697" href="Categories.NaturalTransformation.Core.html#783" class="Function">adjoint.unit.η</a> <a id="5712" class="Symbol">(</a><a id="5713" href="Categories.Category.Construction.EilenbergMoore.html#412" class="Field">Module.A</a> <a id="5722" href="Categories.Adjoint.Monadic.Crude.html#4992" class="Bound">M</a><a id="5723" class="Symbol">)</a> <a id="5725" href="Categories.Category.html#700" class="Function Operator">]</a> <a id="5727" href="Categories.Category.html#700" class="Function Operator">∘</a> <a id="5729" href="Categories.Category.Construction.EilenbergMoore.html#431" class="Field">Module.action</a> <a id="5743" href="Categories.Adjoint.Monadic.Crude.html#4992" class="Bound">M</a> <a id="5745" href="Categories.Category.html#700" class="Function Operator">]</a> <a id="5788" href="Relation.Binary.Reasoning.Base.Single.html#2564" class="Function Operator">∎</a>
|
||
<a id="5798" class="Symbol">;</a> <a id="5800" href="Categories.Diagram.Coequalizer.html#652" class="Field">unique</a> <a id="5807" class="Symbol">=</a> <a id="5809" class="Symbol">λ</a> <a id="5811" class="Symbol">{</a><a id="5812" href="Categories.Adjoint.Monadic.Crude.html#5812" class="Bound">X</a><a id="5813" class="Symbol">}</a> <a id="5815" class="Symbol">{</a><a id="5816" href="Categories.Adjoint.Monadic.Crude.html#5816" class="Bound">h</a><a id="5817" class="Symbol">}</a> <a id="5819" class="Symbol">{</a><a id="5820" href="Categories.Adjoint.Monadic.Crude.html#5820" class="Bound">i</a><a id="5821" class="Symbol">}</a> <a id="5823" class="Symbol">{</a><a id="5824" href="Categories.Adjoint.Monadic.Crude.html#5824" class="Bound">eq</a><a id="5826" class="Symbol">}</a> <a id="5828" href="Categories.Adjoint.Monadic.Crude.html#5828" class="Bound">eq′</a> <a id="5832" class="Symbol">→</a> <a id="5834" href="Relation.Binary.Reasoning.Base.Single.html#1925" class="Function Operator">begin</a>
|
||
<a id="5850" href="Categories.Adjoint.Monadic.Crude.html#5820" class="Bound">i</a> <a id="5852" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function">≈⟨</a> <a id="5855" href="Categories.Morphism.Reasoning.Core.html#2899" class="Function">introʳ</a> <a id="5862" class="Symbol">(</a><a id="5863" href="Categories.Category.Construction.EilenbergMoore.html#508" class="Field">Module.identity</a> <a id="5879" href="Categories.Adjoint.Monadic.Crude.html#4992" class="Bound">M</a><a id="5880" class="Symbol">)</a> <a id="5882" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function">⟩</a>
|
||
<a id="5894" href="Categories.Adjoint.Monadic.Crude.html#355" class="Bound">𝒞</a> <a id="5896" href="Categories.Category.html#700" class="Function Operator">[</a> <a id="5898" href="Categories.Adjoint.Monadic.Crude.html#5820" class="Bound">i</a> <a id="5900" href="Categories.Category.html#700" class="Function Operator">∘</a> <a id="5902" href="Categories.Adjoint.Monadic.Crude.html#355" class="Bound">𝒞</a> <a id="5904" href="Categories.Category.html#700" class="Function Operator">[</a> <a id="5906" href="Categories.Category.Construction.EilenbergMoore.html#431" class="Field">Module.action</a> <a id="5920" href="Categories.Adjoint.Monadic.Crude.html#4992" class="Bound">M</a> <a id="5922" href="Categories.Category.html#700" class="Function Operator">∘</a> <a id="5924" href="Categories.NaturalTransformation.Core.html#783" class="Function">adjoint.unit.η</a> <a id="5939" class="Symbol">(</a><a id="5940" href="Categories.Category.Construction.EilenbergMoore.html#412" class="Field">Module.A</a> <a id="5949" href="Categories.Adjoint.Monadic.Crude.html#4992" class="Bound">M</a><a id="5950" class="Symbol">)</a> <a id="5952" href="Categories.Category.html#700" class="Function Operator">]</a> <a id="5954" href="Categories.Category.html#700" class="Function Operator">]</a> <a id="5956" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function">≈⟨</a> <a id="5959" href="Categories.Morphism.Reasoning.Core.html#2048" class="Function">pullˡ</a> <a id="5965" class="Symbol">(</a><a id="5966" href="Categories.Category.Core.html#3005" class="Function">⟺</a> <a id="5968" href="Categories.Adjoint.Monadic.Crude.html#5828" class="Bound">eq′</a><a id="5971" class="Symbol">)</a> <a id="5973" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function">⟩</a>
|
||
<a id="5985" href="Categories.Adjoint.Monadic.Crude.html#355" class="Bound">𝒞</a> <a id="5987" href="Categories.Category.html#700" class="Function Operator">[</a> <a id="5989" href="Categories.Adjoint.Monadic.Crude.html#5816" class="Bound">h</a> <a id="5991" href="Categories.Category.html#700" class="Function Operator">∘</a> <a id="5993" href="Categories.NaturalTransformation.Core.html#783" class="Function">adjoint.unit.η</a> <a id="6008" class="Symbol">(</a><a id="6009" href="Categories.Category.Construction.EilenbergMoore.html#412" class="Field">Module.A</a> <a id="6018" href="Categories.Adjoint.Monadic.Crude.html#4992" class="Bound">M</a><a id="6019" class="Symbol">)</a> <a id="6021" href="Categories.Category.html#700" class="Function Operator">]</a> <a id="6023" href="Relation.Binary.Reasoning.Base.Single.html#2564" class="Function Operator">∎</a>
|
||
<a id="6033" class="Symbol">}</a>
|
||
<a id="6041" class="Symbol">}</a>
|
||
<a id="6049" class="Keyword">where</a>
|
||
<a id="6063" class="Keyword">open</a> <a id="6068" href="Categories.Category.Core.html#2462" class="Module">𝒞.HomReasoning</a>
|
||
<a id="6091" class="Keyword">open</a> <a id="6096" href="Categories.Morphism.Reasoning.html" class="Module">MR</a> <a id="6099" href="Categories.Adjoint.Monadic.Crude.html#355" class="Bound">𝒞</a>
|
||
|
||
<a id="6104" class="Comment">-- If 'R' preserves reflexive coequalizers, then the unit of the adjunction is a pointwise isomorphism</a>
|
||
<a id="6209" href="Categories.Adjoint.Monadic.Crude.html#6209" class="Function">unit-iso</a> <a id="6218" class="Symbol">:</a> <a id="6220" href="Categories.Adjoint.Monadic.Crude.html#1950" class="Function">PreservesReflexiveCoequalizers</a> <a id="6251" href="Categories.Adjoint.Monadic.Crude.html#458" class="Bound">R</a> <a id="6253" class="Symbol">→</a> <a id="6255" class="Symbol">(</a><a id="6256" href="Categories.Adjoint.Monadic.Crude.html#6256" class="Bound">X</a> <a id="6258" class="Symbol">:</a> <a id="6260" href="Categories.Category.Construction.EilenbergMoore.html#369" class="Record">Module</a> <a id="6267" href="Categories.Adjoint.Monadic.Crude.html#1679" class="Function">T</a><a id="6268" class="Symbol">)</a> <a id="6270" class="Symbol">→</a> <a id="6272" href="Data.Product.html#925" class="Function">Σ[</a> <a id="6275" href="Categories.Adjoint.Monadic.Crude.html#6275" class="Bound">h</a> <a id="6277" href="Data.Product.html#925" class="Function">∈</a> <a id="6279" href="Categories.Adjoint.Monadic.Crude.html#1722" class="Function">𝒞ᵀ</a> <a id="6282" href="Categories.Category.html#502" class="Function Operator">[</a> <a id="6284" href="Categories.Functor.Core.html#432" class="Function">Comparison.F₀</a> <a id="6298" class="Symbol">(</a><a id="6299" href="Categories.Functor.Core.html#432" class="Function">Comparison⁻¹.F₀</a> <a id="6315" href="Categories.Adjoint.Monadic.Crude.html#6256" class="Bound">X</a><a id="6316" class="Symbol">)</a> <a id="6318" href="Categories.Category.html#502" class="Function Operator">,</a> <a id="6320" href="Categories.Adjoint.Monadic.Crude.html#6256" class="Bound">X</a> <a id="6322" href="Categories.Category.html#502" class="Function Operator">]</a> <a id="6324" href="Data.Product.html#925" class="Function">]</a> <a id="6326" class="Symbol">(</a><a id="6327" href="Categories.Morphism.html#1528" class="Record">Iso</a> <a id="6331" href="Categories.Adjoint.Monadic.Crude.html#1722" class="Function">𝒞ᵀ</a> <a id="6334" class="Symbol">(</a><a id="6335" href="Categories.NaturalTransformation.Core.html#783" class="Function">Comparison⁻¹⊣Comparison.unit.η</a> <a id="6366" href="Categories.Adjoint.Monadic.Crude.html#6256" class="Bound">X</a><a id="6367" class="Symbol">)</a> <a id="6369" href="Categories.Adjoint.Monadic.Crude.html#6275" class="Bound">h</a><a id="6370" class="Symbol">)</a>
|
||
<a id="6374" href="Categories.Adjoint.Monadic.Crude.html#6209" class="Function">unit-iso</a> <a id="6383" href="Categories.Adjoint.Monadic.Crude.html#6383" class="Bound">preserves-reflexive-coeq</a> <a id="6408" href="Categories.Adjoint.Monadic.Crude.html#6408" class="Bound">X</a> <a id="6410" class="Symbol">=</a>
|
||
<a id="6416" class="Keyword">let</a>
|
||
<a id="6428" href="Categories.Adjoint.Monadic.Crude.html#6428" class="Bound">coequalizerˣ</a> <a id="6441" class="Symbol">=</a> <a id="6443" href="Categories.Adjoint.Monadic.Crude.html#4402" class="Function">has-coequalizer</a> <a id="6459" href="Categories.Adjoint.Monadic.Crude.html#6408" class="Bound">X</a>
|
||
<a id="6469" href="Categories.Adjoint.Monadic.Crude.html#6469" class="Bound">coequalizerᴿˣ</a> <a id="6483" class="Symbol">=</a> <a id="6485" class="Symbol">((</a><a id="6487" href="Categories.Diagram.Coequalizer.html#3197" class="Function">IsCoequalizer⇒Coequalizer</a> <a id="6513" href="Categories.Adjoint.Monadic.Crude.html#355" class="Bound">𝒞</a> <a id="6515" class="Symbol">(</a><a id="6516" href="Categories.Adjoint.Monadic.Crude.html#6383" class="Bound">preserves-reflexive-coeq</a> <a id="6541" class="Symbol">(</a><a id="6542" href="Categories.Adjoint.Monadic.Crude.html#3217" class="Function">reflexive-pair</a> <a id="6557" href="Categories.Adjoint.Monadic.Crude.html#6408" class="Bound">X</a><a id="6558" class="Symbol">)</a> <a id="6560" class="Symbol">(</a><a id="6561" href="Categories.Adjoint.Monadic.Crude.html#4402" class="Function">has-coequalizer</a> <a id="6577" href="Categories.Adjoint.Monadic.Crude.html#6408" class="Bound">X</a><a id="6578" class="Symbol">))))</a>
|
||
<a id="6591" href="Categories.Adjoint.Monadic.Crude.html#6591" class="Bound">coequalizer-iso</a> <a id="6607" class="Symbol">=</a> <a id="6609" href="Categories.Diagram.Coequalizer.html#2331" class="Function">up-to-iso</a> <a id="6619" href="Categories.Adjoint.Monadic.Crude.html#355" class="Bound">𝒞</a> <a id="6621" class="Symbol">(</a><a id="6622" href="Categories.Adjoint.Monadic.Crude.html#4840" class="Function">coequalizer-action</a> <a id="6641" href="Categories.Adjoint.Monadic.Crude.html#6408" class="Bound">X</a><a id="6642" class="Symbol">)</a> <a id="6644" href="Categories.Adjoint.Monadic.Crude.html#6469" class="Bound">coequalizerᴿˣ</a>
|
||
<a id="6666" class="Keyword">module</a> <a id="6673" href="Categories.Adjoint.Monadic.Crude.html#6673" class="Module">coequalizer-iso</a> <a id="6689" class="Symbol">=</a> <a id="6691" href="Categories.Morphism.html#1958" class="Module Operator">_≅_</a> <a id="6695" href="Categories.Adjoint.Monadic.Crude.html#6591" class="Bound">coequalizer-iso</a>
|
||
<a id="6719" class="Keyword">open</a> <a id="6724" href="Categories.Adjoint.Monadic.Crude.html#1601" class="Module">𝒞</a>
|
||
<a id="6734" class="Keyword">open</a> <a id="6739" href="Categories.Category.Core.html#2462" class="Module">𝒞.HomReasoning</a>
|
||
<a id="6762" class="Keyword">open</a> <a id="6767" href="Categories.Morphism.Reasoning.html" class="Module">MR</a> <a id="6770" href="Categories.Adjoint.Monadic.Crude.html#355" class="Bound">𝒞</a>
|
||
<a id="6780" href="Categories.Adjoint.Monadic.Crude.html#6780" class="Bound">α</a> <a id="6782" class="Symbol">=</a> <a id="6784" class="Keyword">record</a>
|
||
<a id="6801" class="Symbol">{</a> <a id="6803" href="Categories.Category.Construction.EilenbergMoore.html#664" class="Field">arr</a> <a id="6807" class="Symbol">=</a> <a id="6809" href="Categories.Morphism.html#2023" class="Function">coequalizer-iso.to</a>
|
||
<a id="6838" class="Symbol">;</a> <a id="6840" href="Categories.Category.Construction.EilenbergMoore.html#688" class="Field">commute</a> <a id="6848" class="Symbol">=</a> <a id="6850" href="Relation.Binary.Reasoning.Base.Single.html#1925" class="Function Operator">begin</a>
|
||
<a id="6868" href="Categories.Morphism.html#2023" class="Function">coequalizer-iso.to</a> <a id="6887" href="Categories.Category.Core.html#656" class="Function Operator">∘</a> <a id="6889" href="Categories.Functor.Core.html#455" class="Function">R.F₁</a> <a id="6894" class="Symbol">(</a><a id="6895" href="Categories.NaturalTransformation.Core.html#783" class="Function">adjoint.counit.η</a> <a id="6912" class="Symbol">_)</a> <a id="7026" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function">≈⟨</a> <a id="7029" href="Categories.Morphism.Reasoning.Core.html#2899" class="Function">introʳ</a> <a id="7036" class="Symbol">(</a><a id="7037" href="Categories.Functor.Core.html#696" class="Function">R.F-resp-≈</a> <a id="7048" href="Categories.Functor.Core.html#511" class="Function">L.identity</a> <a id="7059" href="Categories.Category.Core.html#3061" class="Function Operator">○</a> <a id="7061" href="Categories.Functor.Core.html#511" class="Function">R.identity</a><a id="7071" class="Symbol">)</a> <a id="7073" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function">⟩</a>
|
||
<a id="7087" class="Symbol">(</a><a id="7088" href="Categories.Morphism.html#2023" class="Function">coequalizer-iso.to</a> <a id="7107" href="Categories.Category.Core.html#656" class="Function Operator">∘</a> <a id="7109" href="Categories.Functor.Core.html#455" class="Function">R.F₁</a> <a id="7114" class="Symbol">(</a><a id="7115" href="Categories.NaturalTransformation.Core.html#783" class="Function">adjoint.counit.η</a> <a id="7132" class="Symbol">_))</a> <a id="7136" href="Categories.Category.Core.html#656" class="Function Operator">∘</a> <a id="7138" href="Categories.Functor.Core.html#455" class="Function">R.F₁</a> <a id="7143" class="Symbol">(</a><a id="7144" href="Categories.Functor.Core.html#455" class="Function">L.F₁</a> <a id="7149" href="Categories.Category.Core.html#630" class="Function">𝒞.id</a><a id="7153" class="Symbol">)</a> <a id="7245" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function">≈⟨</a> <a id="7248" href="Categories.Morphism.Reasoning.Core.html#2347" class="Function">pushʳ</a> <a id="7254" class="Symbol">(</a><a id="7255" href="Categories.Functor.Core.html#696" class="Function">R.F-resp-≈</a> <a id="7266" class="Symbol">(</a><a id="7267" href="Categories.Functor.Core.html#696" class="Function">L.F-resp-≈</a> <a id="7278" class="Symbol">(</a><a id="7279" href="Categories.Category.Core.html#3005" class="Function">⟺</a> <a id="7281" href="Categories.Morphism.html#1612" class="Function">coequalizer-iso.isoʳ</a><a id="7301" class="Symbol">))</a> <a id="7304" href="Categories.Category.Core.html#3061" class="Function Operator">○</a> <a id="7306" href="Categories.Functor.Core.html#696" class="Function">R.F-resp-≈</a> <a id="7317" href="Categories.Functor.Core.html#565" class="Function">L.homomorphism</a> <a id="7332" href="Categories.Category.Core.html#3061" class="Function Operator">○</a> <a id="7334" href="Categories.Functor.Core.html#565" class="Function">R.homomorphism</a><a id="7348" class="Symbol">)</a> <a id="7350" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function">⟩</a>
|
||
<a id="7364" class="Symbol">((</a><a id="7366" href="Categories.Morphism.html#2023" class="Function">coequalizer-iso.to</a> <a id="7385" href="Categories.Category.Core.html#656" class="Function Operator">∘</a> <a id="7387" href="Categories.Functor.Core.html#455" class="Function">R.F₁</a> <a id="7392" class="Symbol">(</a><a id="7393" href="Categories.NaturalTransformation.Core.html#783" class="Function">adjoint.counit.η</a> <a id="7410" class="Symbol">_))</a> <a id="7414" href="Categories.Category.Core.html#656" class="Function Operator">∘</a> <a id="7416" href="Categories.Functor.Core.html#455" class="Function">R.F₁</a> <a id="7421" class="Symbol">(</a><a id="7422" href="Categories.Functor.Core.html#455" class="Function">L.F₁</a> <a id="7427" class="Symbol">(</a><a id="7428" href="Categories.Functor.Core.html#455" class="Function">R.F₁</a> <a id="7433" class="Symbol">(</a><a id="7434" href="Categories.Diagram.Coequalizer.html#1963" class="Field">arr</a> <a id="7438" href="Categories.Adjoint.Monadic.Crude.html#6428" class="Bound">coequalizerˣ</a><a id="7450" class="Symbol">)</a> <a id="7452" href="Categories.Category.Core.html#656" class="Function Operator">∘</a> <a id="7454" href="Categories.NaturalTransformation.Core.html#783" class="Function">adjoint.unit.η</a> <a id="7469" class="Symbol">_)))</a> <a id="7474" href="Categories.Category.Core.html#656" class="Function Operator">∘</a> <a id="7476" href="Categories.Functor.Core.html#455" class="Function">R.F₁</a> <a id="7481" class="Symbol">(</a><a id="7482" href="Categories.Functor.Core.html#455" class="Function">L.F₁</a> <a id="7487" href="Categories.Morphism.html#2023" class="Function">coequalizer-iso.to</a><a id="7505" class="Symbol">)</a> <a id="7522" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function">≈⟨</a> <a id="7525" class="Symbol">(</a><a id="7526" href="Categories.Category.Core.html#2734" class="Function Operator">refl⟩∘⟨</a> <a id="7534" class="Symbol">(</a><a id="7535" href="Categories.Functor.Core.html#696" class="Function">R.F-resp-≈</a> <a id="7546" href="Categories.Functor.Core.html#565" class="Function">L.homomorphism</a> <a id="7561" href="Categories.Category.Core.html#3061" class="Function Operator">○</a> <a id="7563" href="Categories.Functor.Core.html#565" class="Function">R.homomorphism</a><a id="7577" class="Symbol">))</a> <a id="7580" href="Categories.Category.Core.html#2837" class="Function Operator">⟩∘⟨refl</a> <a id="7588" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function">⟩</a>
|
||
<a id="7602" class="Symbol">((</a><a id="7604" href="Categories.Morphism.html#2023" class="Function">coequalizer-iso.to</a> <a id="7623" href="Categories.Category.Core.html#656" class="Function Operator">∘</a> <a id="7625" href="Categories.Functor.Core.html#455" class="Function">R.F₁</a> <a id="7630" class="Symbol">(</a><a id="7631" href="Categories.NaturalTransformation.Core.html#783" class="Function">adjoint.counit.η</a> <a id="7648" class="Symbol">_))</a> <a id="7652" href="Categories.Category.Core.html#656" class="Function Operator">∘</a> <a id="7655" href="Categories.Functor.Core.html#455" class="Function">R.F₁</a> <a id="7660" class="Symbol">(</a><a id="7661" href="Categories.Functor.Core.html#455" class="Function">L.F₁</a> <a id="7666" class="Symbol">(</a><a id="7667" href="Categories.Functor.Core.html#455" class="Function">R.F₁</a> <a id="7672" class="Symbol">(</a><a id="7673" href="Categories.Diagram.Coequalizer.html#1963" class="Field">arr</a> <a id="7677" href="Categories.Adjoint.Monadic.Crude.html#6428" class="Bound">coequalizerˣ</a><a id="7689" class="Symbol">)))</a> <a id="7693" href="Categories.Category.Core.html#656" class="Function Operator">∘</a> <a id="7695" href="Categories.Functor.Core.html#455" class="Function">R.F₁</a> <a id="7700" class="Symbol">(</a><a id="7701" href="Categories.Functor.Core.html#455" class="Function">L.F₁</a> <a id="7706" class="Symbol">(</a><a id="7707" href="Categories.NaturalTransformation.Core.html#783" class="Function">adjoint.unit.η</a> <a id="7722" class="Symbol">_)))</a> <a id="7727" href="Categories.Category.Core.html#656" class="Function Operator">∘</a> <a id="7729" href="Categories.Functor.Core.html#455" class="Function">R.F₁</a> <a id="7734" class="Symbol">(</a><a id="7735" href="Categories.Functor.Core.html#455" class="Function">L.F₁</a> <a id="7740" href="Categories.Morphism.html#2023" class="Function">coequalizer-iso.to</a><a id="7758" class="Symbol">)</a> <a id="7760" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function">≈⟨</a> <a id="7763" href="Categories.Morphism.Reasoning.Core.html#7259" class="Function">center</a> <a id="7770" class="Symbol">(</a><a id="7771" href="Categories.Functor.Properties.html#2676" class="Function Operator">[</a> <a id="7773" href="Categories.Adjoint.Monadic.Crude.html#458" class="Bound">R</a> <a id="7775" href="Categories.Functor.Properties.html#2676" class="Function Operator">]-resp-square</a> <a id="7789" class="Symbol">(</a><a id="7790" href="Categories.NaturalTransformation.Core.html#827" class="Function">adjoint.counit.commute</a> <a id="7813" class="Symbol">_))</a> <a id="7817" href="Categories.Category.Core.html#2837" class="Function Operator">⟩∘⟨refl</a> <a id="7825" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function">⟩</a>
|
||
<a id="7839" class="Symbol">((</a><a id="7841" href="Categories.Morphism.html#2023" class="Function">coequalizer-iso.to</a> <a id="7860" href="Categories.Category.Core.html#656" class="Function Operator">∘</a> <a id="7862" class="Symbol">(</a><a id="7863" href="Categories.Functor.Core.html#455" class="Function">R.F₁</a> <a id="7868" class="Symbol">(</a><a id="7869" href="Categories.Diagram.Coequalizer.html#1963" class="Field">arr</a> <a id="7873" href="Categories.Adjoint.Monadic.Crude.html#6428" class="Bound">coequalizerˣ</a><a id="7885" class="Symbol">)</a> <a id="7887" href="Categories.Category.Core.html#656" class="Function Operator">∘</a> <a id="7889" href="Categories.Functor.Core.html#455" class="Function">R.F₁</a> <a id="7894" class="Symbol">(</a><a id="7895" href="Categories.NaturalTransformation.Core.html#783" class="Function">adjoint.counit.η</a> <a id="7912" class="Symbol">(</a><a id="7913" href="Categories.Functor.Core.html#432" class="Function">L.F₀</a> <a id="7918" class="Symbol">_)))</a> <a id="7923" href="Categories.Category.Core.html#656" class="Function Operator">∘</a> <a id="7925" href="Categories.Functor.Core.html#455" class="Function">R.F₁</a> <a id="7930" class="Symbol">(</a><a id="7931" href="Categories.Functor.Core.html#455" class="Function">L.F₁</a> <a id="7936" class="Symbol">(</a><a id="7937" href="Categories.NaturalTransformation.Core.html#783" class="Function">adjoint.unit.η</a> <a id="7952" class="Symbol">_)))</a> <a id="7957" href="Categories.Category.Core.html#656" class="Function Operator">∘</a> <a id="7959" href="Categories.Functor.Core.html#455" class="Function">R.F₁</a> <a id="7964" class="Symbol">(</a><a id="7965" href="Categories.Functor.Core.html#455" class="Function">L.F₁</a> <a id="7970" href="Categories.Morphism.html#2023" class="Function">coequalizer-iso.to</a><a id="7988" class="Symbol">))</a> <a id="7997" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function">≈⟨</a> <a id="8000" class="Symbol">(</a><a id="8001" href="Categories.Category.Core.html#2734" class="Function Operator">refl⟩∘⟨</a> <a id="8009" href="Categories.Morphism.Reasoning.Core.html#6665" class="Function">cancelʳ</a> <a id="8017" class="Symbol">(</a><a id="8018" href="Categories.Category.Core.html#3005" class="Function">⟺</a> <a id="8020" href="Categories.Functor.Core.html#565" class="Function">R.homomorphism</a> <a id="8035" href="Categories.Category.Core.html#3061" class="Function Operator">○</a> <a id="8037" href="Categories.Functor.Core.html#696" class="Function">R.F-resp-≈</a> <a id="8048" href="Categories.Adjoint.html#1715" class="Field">adjoint.zig</a> <a id="8060" href="Categories.Category.Core.html#3061" class="Function Operator">○</a> <a id="8062" href="Categories.Functor.Core.html#511" class="Function">R.identity</a><a id="8072" class="Symbol">))</a> <a id="8075" href="Categories.Category.Core.html#2837" class="Function Operator">⟩∘⟨refl</a> <a id="8084" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function">⟩</a>
|
||
<a id="8098" class="Symbol">(</a><a id="8099" href="Categories.Morphism.html#2023" class="Function">coequalizer-iso.to</a> <a id="8118" href="Categories.Category.Core.html#656" class="Function Operator">∘</a> <a id="8120" href="Categories.Functor.Core.html#455" class="Function">R.F₁</a> <a id="8125" class="Symbol">(</a><a id="8126" href="Categories.Diagram.Coequalizer.html#1963" class="Field">arr</a> <a id="8130" href="Categories.Adjoint.Monadic.Crude.html#6428" class="Bound">coequalizerˣ</a><a id="8142" class="Symbol">))</a> <a id="8145" href="Categories.Category.Core.html#656" class="Function Operator">∘</a> <a id="8147" href="Categories.Functor.Core.html#455" class="Function">R.F₁</a> <a id="8152" class="Symbol">(</a><a id="8153" href="Categories.Functor.Core.html#455" class="Function">L.F₁</a> <a id="8158" href="Categories.Morphism.html#2023" class="Function">coequalizer-iso.to</a><a id="8176" class="Symbol">)</a> <a id="8256" href="Relation.Binary.Reasoning.Setoid.html#1162" class="Function">≈˘⟨</a> <a id="8260" href="Categories.Diagram.Coequalizer.html#576" class="Function">universal</a> <a id="8270" href="Categories.Adjoint.Monadic.Crude.html#6469" class="Bound">coequalizerᴿˣ</a> <a id="8284" href="Categories.Category.Core.html#2837" class="Function Operator">⟩∘⟨refl</a> <a id="8292" href="Relation.Binary.Reasoning.Setoid.html#1162" class="Function">⟩</a>
|
||
<a id="8306" href="Categories.Category.Construction.EilenbergMoore.html#431" class="Field">Module.action</a> <a id="8320" href="Categories.Adjoint.Monadic.Crude.html#6408" class="Bound">X</a> <a id="8322" href="Categories.Category.Core.html#656" class="Function Operator">∘</a> <a id="8324" href="Categories.Functor.Core.html#455" class="Function">R.F₁</a> <a id="8329" class="Symbol">(</a><a id="8330" href="Categories.Functor.Core.html#455" class="Function">L.F₁</a> <a id="8335" href="Categories.Morphism.html#2023" class="Function">coequalizer-iso.to</a><a id="8353" class="Symbol">)</a> <a id="8355" href="Relation.Binary.Reasoning.Base.Single.html#2564" class="Function Operator">∎</a>
|
||
<a id="8367" class="Symbol">}</a>
|
||
<a id="8373" class="Keyword">in</a> <a id="8376" href="Categories.Adjoint.Monadic.Crude.html#6780" class="Bound">α</a> <a id="8378" href="Agda.Builtin.Sigma.html#218" class="InductiveConstructor Operator">,</a> <a id="8380" class="Keyword">record</a> <a id="8387" class="Symbol">{</a> <a id="8389" href="Categories.Morphism.html#1586" class="Field">isoˡ</a> <a id="8394" class="Symbol">=</a> <a id="8396" href="Categories.Morphism.html#1586" class="Function">coequalizer-iso.isoˡ</a> <a id="8417" class="Symbol">;</a> <a id="8419" href="Categories.Morphism.html#1612" class="Field">isoʳ</a> <a id="8424" class="Symbol">=</a> <a id="8426" href="Categories.Morphism.html#1612" class="Function">coequalizer-iso.isoʳ</a> <a id="8447" class="Symbol">}</a>
|
||
|
||
<a id="8452" class="Comment">-- If 'R' preserves reflexive coequalizers and reflects isomorphisms, then the counit of the adjunction is a pointwise isomorphism.</a>
|
||
<a id="8586" href="Categories.Adjoint.Monadic.Crude.html#8586" class="Function">counit-iso</a> <a id="8597" class="Symbol">:</a> <a id="8599" href="Categories.Adjoint.Monadic.Crude.html#1950" class="Function">PreservesReflexiveCoequalizers</a> <a id="8630" href="Categories.Adjoint.Monadic.Crude.html#458" class="Bound">R</a> <a id="8632" class="Symbol">→</a> <a id="8634" href="Categories.Functor.Properties.html#1808" class="Function">Conservative</a> <a id="8647" href="Categories.Adjoint.Monadic.Crude.html#458" class="Bound">R</a> <a id="8649" class="Symbol">→</a> <a id="8651" class="Symbol">(</a><a id="8652" href="Categories.Adjoint.Monadic.Crude.html#8652" class="Bound">X</a> <a id="8654" class="Symbol">:</a> <a id="8656" href="Categories.Category.Core.html#559" class="Function">𝒟.Obj</a><a id="8661" class="Symbol">)</a> <a id="8663" class="Symbol">→</a> <a id="8665" href="Data.Product.html#925" class="Function">Σ[</a> <a id="8668" href="Categories.Adjoint.Monadic.Crude.html#8668" class="Bound">h</a> <a id="8670" href="Data.Product.html#925" class="Function">∈</a> <a id="8672" href="Categories.Adjoint.Monadic.Crude.html#376" class="Bound">𝒟</a> <a id="8674" href="Categories.Category.html#502" class="Function Operator">[</a> <a id="8676" href="Categories.Adjoint.Monadic.Crude.html#8652" class="Bound">X</a> <a id="8678" href="Categories.Category.html#502" class="Function Operator">,</a> <a id="8680" href="Categories.Functor.Core.html#432" class="Function">Comparison⁻¹.F₀</a> <a id="8696" class="Symbol">(</a><a id="8697" href="Categories.Functor.Core.html#432" class="Function">Comparison.F₀</a> <a id="8711" href="Categories.Adjoint.Monadic.Crude.html#8652" class="Bound">X</a><a id="8712" class="Symbol">)</a> <a id="8714" href="Categories.Category.html#502" class="Function Operator">]</a> <a id="8716" href="Data.Product.html#925" class="Function">]</a> <a id="8718" href="Categories.Morphism.html#1528" class="Record">Iso</a> <a id="8722" href="Categories.Adjoint.Monadic.Crude.html#376" class="Bound">𝒟</a> <a id="8724" class="Symbol">(</a><a id="8725" href="Categories.NaturalTransformation.Core.html#783" class="Function">Comparison⁻¹⊣Comparison.counit.η</a> <a id="8758" href="Categories.Adjoint.Monadic.Crude.html#8652" class="Bound">X</a><a id="8759" class="Symbol">)</a> <a id="8761" href="Categories.Adjoint.Monadic.Crude.html#8668" class="Bound">h</a>
|
||
<a id="8765" href="Categories.Adjoint.Monadic.Crude.html#8586" class="Function">counit-iso</a> <a id="8776" href="Categories.Adjoint.Monadic.Crude.html#8776" class="Bound">preserves-reflexive-coeq</a> <a id="8801" href="Categories.Adjoint.Monadic.Crude.html#8801" class="Bound">conservative</a> <a id="8814" href="Categories.Adjoint.Monadic.Crude.html#8814" class="Bound">X</a> <a id="8816" class="Symbol">=</a>
|
||
<a id="8822" class="Keyword">let</a> <a id="8826" href="Categories.Adjoint.Monadic.Crude.html#8826" class="Bound">coequalizerᴿᴷˣ</a> <a id="8841" class="Symbol">=</a> <a id="8843" href="Categories.Diagram.Coequalizer.html#3197" class="Function">IsCoequalizer⇒Coequalizer</a> <a id="8869" href="Categories.Adjoint.Monadic.Crude.html#355" class="Bound">𝒞</a> <a id="8871" class="Symbol">(</a><a id="8872" href="Categories.Adjoint.Monadic.Crude.html#8776" class="Bound">preserves-reflexive-coeq</a> <a id="8897" class="Symbol">(</a><a id="8898" href="Categories.Adjoint.Monadic.Crude.html#3217" class="Function">reflexive-pair</a> <a id="8913" class="Symbol">(</a><a id="8914" href="Categories.Functor.Core.html#432" class="Function">Comparison.F₀</a> <a id="8928" href="Categories.Adjoint.Monadic.Crude.html#8814" class="Bound">X</a><a id="8929" class="Symbol">))</a> <a id="8932" class="Symbol">(</a><a id="8933" href="Categories.Adjoint.Monadic.Crude.html#4402" class="Function">has-coequalizer</a> <a id="8949" class="Symbol">(</a><a id="8950" href="Categories.Functor.Core.html#432" class="Function">Comparison.F₀</a> <a id="8964" href="Categories.Adjoint.Monadic.Crude.html#8814" class="Bound">X</a><a id="8965" class="Symbol">)))</a>
|
||
<a id="8977" href="Categories.Adjoint.Monadic.Crude.html#8977" class="Bound">coequalizerᴷˣ</a> <a id="8991" class="Symbol">=</a> <a id="8993" href="Categories.Adjoint.Monadic.Crude.html#4402" class="Function">has-coequalizer</a> <a id="9009" class="Symbol">(</a><a id="9010" href="Categories.Functor.Core.html#432" class="Function">Comparison.F₀</a> <a id="9024" href="Categories.Adjoint.Monadic.Crude.html#8814" class="Bound">X</a><a id="9025" class="Symbol">)</a>
|
||
<a id="9035" href="Categories.Adjoint.Monadic.Crude.html#9035" class="Bound">coequalizer-iso</a> <a id="9051" class="Symbol">=</a> <a id="9053" href="Categories.Diagram.Coequalizer.html#2331" class="Function">up-to-iso</a> <a id="9063" href="Categories.Adjoint.Monadic.Crude.html#355" class="Bound">𝒞</a> <a id="9065" href="Categories.Adjoint.Monadic.Crude.html#8826" class="Bound">coequalizerᴿᴷˣ</a> <a id="9080" class="Symbol">(</a><a id="9081" href="Categories.Adjoint.Monadic.Crude.html#4840" class="Function">coequalizer-action</a> <a id="9100" class="Symbol">(</a><a id="9101" href="Categories.Functor.Core.html#432" class="Function">Comparison.F₀</a> <a id="9115" href="Categories.Adjoint.Monadic.Crude.html#8814" class="Bound">X</a><a id="9116" class="Symbol">))</a>
|
||
<a id="9127" class="Keyword">module</a> <a id="9134" href="Categories.Adjoint.Monadic.Crude.html#9134" class="Module">coequalizer-iso</a> <a id="9150" class="Symbol">=</a> <a id="9152" href="Categories.Morphism.html#1958" class="Module Operator">_≅_</a> <a id="9156" href="Categories.Adjoint.Monadic.Crude.html#9035" class="Bound">coequalizer-iso</a>
|
||
<a id="9180" class="Keyword">open</a> <a id="9185" href="Categories.Category.Core.html#2462" class="Module">𝒞.HomReasoning</a>
|
||
<a id="9208" class="Keyword">open</a> <a id="9213" href="Categories.Category.Core.html#1530" class="Module">𝒞.Equiv</a>
|
||
<a id="9225" class="Keyword">in</a> <a id="9228" href="Categories.Adjoint.Monadic.Crude.html#8801" class="Bound">conservative</a> <a id="9241" class="Symbol">(</a><a id="9242" href="Categories.Morphism.Properties.html#472" class="Function">Iso-resp-≈</a> <a id="9253" href="Categories.Adjoint.Monadic.Crude.html#355" class="Bound">𝒞</a> <a id="9255" href="Categories.Morphism.html#2040" class="Function">coequalizer-iso.iso</a> <a id="9275" class="Symbol">(</a><a id="9276" href="Categories.Category.Core.html#3005" class="Function">⟺</a> <a id="9278" class="Symbol">(</a><a id="9279" href="Categories.Adjoint.Monadic.Crude.html#2413" class="Function">preserves-coequalizer-unique</a> <a id="9308" class="Symbol">{</a><a id="9309" href="Categories.Adjoint.Monadic.Crude.html#458" class="Bound">R</a><a id="9310" class="Symbol">}</a> <a id="9312" href="Categories.Adjoint.Monadic.Crude.html#8776" class="Bound">preserves-reflexive-coeq</a> <a id="9337" class="Symbol">(</a><a id="9338" href="Categories.Adjoint.Monadic.Crude.html#3217" class="Function">reflexive-pair</a> <a id="9353" class="Symbol">(</a><a id="9354" href="Categories.Functor.Core.html#432" class="Function">Comparison.F₀</a> <a id="9368" href="Categories.Adjoint.Monadic.Crude.html#8814" class="Bound">X</a><a id="9369" class="Symbol">))</a> <a id="9372" href="Categories.Adjoint.Monadic.Crude.html#8977" class="Bound">coequalizerᴷˣ</a><a id="9385" class="Symbol">))</a> <a id="9388" href="Relation.Binary.Structures.html#1577" class="Function">refl</a><a id="9392" class="Symbol">)</a>
|
||
|
||
<a id="9397" class="Comment">-- Now, for the final result. Both the unit and counit of the adjunction between the comparison functor and it's inverse are isomorphisms,</a>
|
||
<a id="9538" class="Comment">-- so therefore they form natural isomorphism. Therfore, we have an equivalence of categories.</a>
|
||
<a id="9635" href="Categories.Adjoint.Monadic.Crude.html#9635" class="Function">crude-monadicity</a> <a id="9652" class="Symbol">:</a> <a id="9654" href="Categories.Adjoint.Monadic.Crude.html#1950" class="Function">PreservesReflexiveCoequalizers</a> <a id="9685" href="Categories.Adjoint.Monadic.Crude.html#458" class="Bound">R</a> <a id="9687" class="Symbol">→</a> <a id="9689" href="Categories.Functor.Properties.html#1808" class="Function">Conservative</a> <a id="9702" href="Categories.Adjoint.Monadic.Crude.html#458" class="Bound">R</a> <a id="9704" class="Symbol">→</a> <a id="9706" href="Categories.Category.Equivalence.html#1000" class="Record">StrongEquivalence</a> <a id="9724" href="Categories.Adjoint.Monadic.Crude.html#1722" class="Function">𝒞ᵀ</a> <a id="9727" href="Categories.Adjoint.Monadic.Crude.html#376" class="Bound">𝒟</a>
|
||
<a id="9731" href="Categories.Adjoint.Monadic.Crude.html#9635" class="Function">crude-monadicity</a> <a id="9748" href="Categories.Adjoint.Monadic.Crude.html#9748" class="Bound">preserves-reflexlive-coeq</a> <a id="9774" href="Categories.Adjoint.Monadic.Crude.html#9774" class="Bound">conservative</a> <a id="9787" class="Symbol">=</a> <a id="9789" class="Keyword">record</a>
|
||
<a id="9800" class="Symbol">{</a> <a id="9802" href="Categories.Category.Equivalence.html#1131" class="Field">F</a> <a id="9804" class="Symbol">=</a> <a id="9806" href="Categories.Adjoint.Monadic.Properties.html#1502" class="Function">Comparison⁻¹</a> <a id="9819" href="Categories.Adjoint.Monadic.Crude.html#476" class="Bound">adjoint</a> <a id="9827" href="Categories.Adjoint.Monadic.Crude.html#4402" class="Function">has-coequalizer</a>
|
||
<a id="9847" class="Symbol">;</a> <a id="9849" href="Categories.Category.Equivalence.html#1162" class="Field">G</a> <a id="9851" class="Symbol">=</a> <a id="9853" href="Categories.Adjoint.Monadic.Crude.html#1769" class="Function">Comparison</a>
|
||
<a id="9868" class="Symbol">;</a> <a id="9870" href="Categories.Category.Equivalence.html#1193" class="Field">weak-inverse</a> <a id="9883" class="Symbol">=</a> <a id="9885" href="Categories.Category.Equivalence.Properties.html#5677" class="Function">pointwise-iso-equivalence</a> <a id="9911" class="Symbol">(</a><a id="9912" href="Categories.Adjoint.Monadic.Properties.html#3967" class="Function">Comparison⁻¹⊣Comparison</a> <a id="9936" href="Categories.Adjoint.Monadic.Crude.html#476" class="Bound">adjoint</a> <a id="9944" href="Categories.Adjoint.Monadic.Crude.html#4402" class="Function">has-coequalizer</a><a id="9959" class="Symbol">)</a>
|
||
<a id="10008" class="Symbol">(</a><a id="10009" href="Categories.Adjoint.Monadic.Crude.html#8586" class="Function">counit-iso</a> <a id="10020" href="Categories.Adjoint.Monadic.Crude.html#9748" class="Bound">preserves-reflexlive-coeq</a> <a id="10046" href="Categories.Adjoint.Monadic.Crude.html#9774" class="Bound">conservative</a><a id="10058" class="Symbol">)</a>
|
||
<a id="10107" class="Symbol">(</a><a id="10108" href="Categories.Adjoint.Monadic.Crude.html#6209" class="Function">unit-iso</a> <a id="10117" href="Categories.Adjoint.Monadic.Crude.html#9748" class="Bound">preserves-reflexlive-coeq</a><a id="10142" class="Symbol">)</a>
|
||
<a id="10148" class="Symbol">}</a>
|
||
</pre></body></html> |