Added notes

This commit is contained in:
Leon Vatthauer 2023-08-21 16:22:33 +02:00
parent 6ebfe85342
commit 22448c3bab
Signed by: leonv
SSH key fingerprint: SHA256:G4+ddwoZmhLPRB1agvXzZMXIzkVJ36dUYZXf5NxT+u8
4 changed files with 260 additions and 99 deletions

View file

@ -38,9 +38,11 @@
<a id="377" class="Keyword">open</a> <a id="382" class="Keyword">import</a> <a id="389" href="Categories.Category.Construction.F-Coalgebras.html" class="Module">Categories.Category.Construction.F-Coalgebras</a> <a id="377" class="Keyword">open</a> <a id="382" class="Keyword">import</a> <a id="389" href="Categories.Category.Construction.F-Coalgebras.html" class="Module">Categories.Category.Construction.F-Coalgebras</a>
<a id="435" class="Keyword">open</a> <a id="440" class="Keyword">import</a> <a id="447" href="Categories.Functor.Coalgebra.html" class="Module">Categories.Functor.Coalgebra</a> <a id="435" class="Keyword">open</a> <a id="440" class="Keyword">import</a> <a id="447" href="Categories.Functor.Coalgebra.html" class="Module">Categories.Functor.Coalgebra</a>
<a id="476" class="Keyword">open</a> <a id="481" class="Keyword">import</a> <a id="488" href="Categories.Functor.html" class="Module">Categories.Functor</a> <a id="476" class="Keyword">open</a> <a id="481" class="Keyword">import</a> <a id="488" href="Categories.Functor.html" class="Module">Categories.Functor</a>
<a id="507" class="Keyword">open</a> <a id="512" class="Keyword">import</a> <a id="519" href="Categories.Monad.Construction.Kleisli.html" class="Module">Categories.Monad.Construction.Kleisli</a> <a id="507" class="Keyword">open</a> <a id="512" class="Keyword">import</a> <a id="519" href="Categories.Functor.Algebra.html" class="Module">Categories.Functor.Algebra</a>
<a id="557" class="Keyword">import</a> <a id="564" href="Categories.Morphism.html" class="Module">Categories.Morphism</a> <a id="584" class="Symbol">as</a> <a id="587" class="Module">M</a> <a id="546" class="Keyword">open</a> <a id="551" class="Keyword">import</a> <a id="558" href="Categories.Monad.Construction.Kleisli.html" class="Module">Categories.Monad.Construction.Kleisli</a>
<a id="589" class="Keyword">import</a> <a id="596" href="Categories.Morphism.Reasoning.html" class="Module">Categories.Morphism.Reasoning</a> <a id="626" class="Symbol">as</a> <a id="629" class="Module">MR</a> <a id="596" class="Keyword">open</a> <a id="601" class="Keyword">import</a> <a id="608" href="Categories.Category.Construction.F-Coalgebras.html" class="Module">Categories.Category.Construction.F-Coalgebras</a>
<a id="654" class="Keyword">import</a> <a id="661" href="Categories.Morphism.html" class="Module">Categories.Morphism</a> <a id="681" class="Symbol">as</a> <a id="684" class="Module">M</a>
<a id="686" class="Keyword">import</a> <a id="693" href="Categories.Morphism.Reasoning.html" class="Module">Categories.Morphism.Reasoning</a> <a id="723" class="Symbol">as</a> <a id="726" class="Module">MR</a>
</pre>--> </pre>-->
<h2 id="summary">Summary</h2> <h2 id="summary">Summary</h2>
<p>This file introduces the delay monad <strong><em>D</em></strong></p> <p>This file introduces the delay monad <strong><em>D</em></strong></p>
@ -52,61 +54,108 @@
<strong><em>D</em></strong> is commutative</li> <strong><em>D</em></strong> is commutative</li>
</ul> </ul>
<h2 id="code">Code</h2> <h2 id="code">Code</h2>
<pre class="Agda"><a id="856" class="Keyword">module</a> <a id="863" href="Monad.Instance.Delay.html" class="Module">Monad.Instance.Delay</a> <a id="884" class="Symbol">{</a><a id="885" href="Monad.Instance.Delay.html#885" class="Bound">o</a> <a id="887" href="Monad.Instance.Delay.html#887" class="Bound"></a> <a id="889" href="Monad.Instance.Delay.html#889" class="Bound">e</a><a id="890" class="Symbol">}</a> <a id="892" class="Symbol">(</a><a id="893" href="Monad.Instance.Delay.html#893" class="Bound">ED</a> <a id="896" class="Symbol">:</a> <a id="898" href="Categories.Category.Extensive.Bundle.html#781" class="Record">ExtensiveDistributiveCategory</a> <a id="928" href="Monad.Instance.Delay.html#885" class="Bound">o</a> <a id="930" href="Monad.Instance.Delay.html#887" class="Bound"></a> <a id="932" href="Monad.Instance.Delay.html#889" class="Bound">e</a><a id="933" class="Symbol">)</a> <a id="935" class="Keyword">where</a> <pre class="Agda"><a id="953" class="Keyword">module</a> <a id="960" href="Monad.Instance.Delay.html" class="Module">Monad.Instance.Delay</a> <a id="981" class="Symbol">{</a><a id="982" href="Monad.Instance.Delay.html#982" class="Bound">o</a> <a id="984" href="Monad.Instance.Delay.html#984" class="Bound"></a> <a id="986" href="Monad.Instance.Delay.html#986" class="Bound">e</a><a id="987" class="Symbol">}</a> <a id="989" class="Symbol">(</a><a id="990" href="Monad.Instance.Delay.html#990" class="Bound">ED</a> <a id="993" class="Symbol">:</a> <a id="995" href="Categories.Category.Extensive.Bundle.html#781" class="Record">ExtensiveDistributiveCategory</a> <a id="1025" href="Monad.Instance.Delay.html#982" class="Bound">o</a> <a id="1027" href="Monad.Instance.Delay.html#984" class="Bound"></a> <a id="1029" href="Monad.Instance.Delay.html#986" class="Bound">e</a><a id="1030" class="Symbol">)</a> <a id="1032" class="Keyword">where</a>
<a id="943" class="Keyword">open</a> <a id="948" href="Categories.Category.Extensive.Bundle.html#781" class="Module">ExtensiveDistributiveCategory</a> <a id="978" href="Monad.Instance.Delay.html#893" class="Bound">ED</a> <a id="981" class="Keyword">renaming</a> <a id="990" class="Symbol">(</a><a id="991" href="Categories.Category.Extensive.Bundle.html#859" class="Field">U</a> <a id="993" class="Symbol">to</a> <a id="996" class="Field">C</a><a id="997" class="Symbol">;</a> <a id="999" href="Categories.Category.Core.html#630" class="Function">id</a> <a id="1002" class="Symbol">to</a> <a id="1005" class="Function">idC</a><a id="1008" class="Symbol">)</a> <a id="1040" class="Keyword">open</a> <a id="1045" href="Categories.Category.Extensive.Bundle.html#781" class="Module">ExtensiveDistributiveCategory</a> <a id="1075" href="Monad.Instance.Delay.html#990" class="Bound">ED</a> <a id="1078" class="Keyword">renaming</a> <a id="1087" class="Symbol">(</a><a id="1088" href="Categories.Category.Extensive.Bundle.html#859" class="Field">U</a> <a id="1090" class="Symbol">to</a> <a id="1093" class="Field">C</a><a id="1094" class="Symbol">;</a> <a id="1096" href="Categories.Category.Core.html#630" class="Function">id</a> <a id="1099" class="Symbol">to</a> <a id="1102" class="Function">idC</a><a id="1105" class="Symbol">)</a>
<a id="1012" class="Keyword">open</a> <a id="1017" href="Categories.Category.Cocartesian.html#3385" class="Module">Cocartesian</a> <a id="1029" class="Symbol">(</a><a id="1030" href="Categories.Category.Extensive.html#734" class="Field">Extensive.cocartesian</a> <a id="1052" href="Categories.Category.Extensive.Bundle.html#913" class="Field">extensive</a><a id="1061" class="Symbol">)</a> <a id="1109" class="Keyword">open</a> <a id="1114" href="Categories.Category.Cocartesian.html#3385" class="Module">Cocartesian</a> <a id="1126" class="Symbol">(</a><a id="1127" href="Categories.Category.Extensive.html#734" class="Field">Extensive.cocartesian</a> <a id="1149" href="Categories.Category.Extensive.Bundle.html#913" class="Field">extensive</a><a id="1158" class="Symbol">)</a>
<a id="1065" class="Keyword">open</a> <a id="1070" href="Categories.Category.Cartesian.html#727" class="Module">Cartesian</a> <a id="1080" class="Symbol">(</a><a id="1081" href="Categories.Category.Extensive.Bundle.html#943" class="Field">ExtensiveDistributiveCategory.cartesian</a> <a id="1121" href="Monad.Instance.Delay.html#893" class="Bound">ED</a><a id="1123" class="Symbol">)</a> <a id="1162" class="Keyword">open</a> <a id="1167" href="Categories.Category.Cartesian.html#727" class="Module">Cartesian</a> <a id="1177" class="Symbol">(</a><a id="1178" href="Categories.Category.Extensive.Bundle.html#943" class="Field">ExtensiveDistributiveCategory.cartesian</a> <a id="1218" href="Monad.Instance.Delay.html#990" class="Bound">ED</a><a id="1220" class="Symbol">)</a>
<a id="1127" class="Keyword">open</a> <a id="1132" href="Categories.Category.BinaryProducts.html#812" class="Module">BinaryProducts</a> <a id="1147" href="Categories.Category.Cartesian.html#801" class="Function">products</a> <a id="1224" class="Keyword">open</a> <a id="1229" href="Categories.Category.BinaryProducts.html#812" class="Module">BinaryProducts</a> <a id="1244" href="Categories.Category.Cartesian.html#801" class="Function">products</a>
<a id="1159" class="Keyword">open</a> <a id="1164" href="Categories.Morphism.html" class="Module">M</a> <a id="1166" href="Monad.Instance.Delay.html#996" class="Field">C</a> <a id="1256" class="Keyword">open</a> <a id="1261" href="Categories.Morphism.html" class="Module">M</a> <a id="1263" href="Monad.Instance.Delay.html#1093" class="Field">C</a>
<a id="1170" class="Keyword">open</a> <a id="1175" href="Categories.Morphism.Reasoning.html" class="Module">MR</a> <a id="1178" href="Monad.Instance.Delay.html#996" class="Field">C</a> <a id="1267" class="Keyword">open</a> <a id="1272" href="Categories.Morphism.Reasoning.html" class="Module">MR</a> <a id="1275" href="Monad.Instance.Delay.html#1093" class="Field">C</a>
<a id="1182" class="Keyword">open</a> <a id="1187" href="Categories.Category.Core.html#1530" class="Module">Equiv</a> <a id="1279" class="Keyword">open</a> <a id="1284" href="Categories.Category.Core.html#1530" class="Module">Equiv</a>
<a id="1195" class="Keyword">open</a> <a id="1200" href="Categories.Category.Core.html#2462" class="Module">HomReasoning</a> <a id="1292" class="Keyword">open</a> <a id="1297" href="Categories.Category.Core.html#2462" class="Module">HomReasoning</a>
<a id="1312" class="Keyword">open</a> <a id="1317" href="Categories.Category.Construction.F-Coalgebras.html#2828" class="Module">CoLambek</a>
</pre> </pre>
<h3 <h3
id="proposition-1-characterization-of-the-delay-monad-d"><em>Proposition id="proposition-1-characterization-of-the-delay-monad-d"><em>Proposition
1</em>: Characterization of the delay monad 1</em>: Characterization of the delay monad
<strong><em>D</em></strong></h3> <strong><em>D</em></strong></h3>
<pre class="Agda"> <a id="1292" class="Keyword">record</a> <a id="DelayMonad"></a><a id="1299" href="Monad.Instance.Delay.html#1299" class="Record">DelayMonad</a> <a id="1310" class="Symbol">(</a><a id="1311" href="Monad.Instance.Delay.html#1311" class="Bound">D</a> <a id="1313" class="Symbol">:</a> <a id="1315" href="Categories.Functor.html#283" class="Function">Endofunctor</a> <a id="1327" href="Monad.Instance.Delay.html#996" class="Field">C</a><a id="1328" class="Symbol">)</a> <a id="1330" class="Symbol">:</a> <a id="1332" href="Agda.Primitive.html#320" class="Primitive">Set</a> <a id="1336" class="Symbol">(</a><a id="1337" href="Monad.Instance.Delay.html#885" class="Bound">o</a> <a id="1339" href="Agda.Primitive.html#804" class="Primitive Operator"></a> <a id="1341" href="Monad.Instance.Delay.html#887" class="Bound"></a> <a id="1343" href="Agda.Primitive.html#804" class="Primitive Operator"></a> <a id="1345" href="Monad.Instance.Delay.html#889" class="Bound">e</a><a id="1346" class="Symbol">)</a> <a id="1348" class="Keyword">where</a> <p>First I postulate the Functor <em>D</em>, maybe I should derive it…
<a id="1358" class="Keyword">open</a> <a id="1363" href="Categories.Functor.Core.html#248" class="Module">Functor</a> <a id="1371" href="Monad.Instance.Delay.html#1311" class="Bound">D</a> <a id="1373" class="Keyword">using</a> <a id="1379" class="Symbol">()</a> <a id="1382" class="Keyword">renaming</a> <a id="1391" class="Symbol">(</a><a id="1392" href="Categories.Functor.Core.html#432" class="Field">F₀</a> <a id="1395" class="Symbol">to</a> <a id="1398" class="Field">D₀</a><a id="1400" class="Symbol">;</a> <a id="1402" href="Categories.Functor.Core.html#455" class="Field">F₁</a> <a id="1405" class="Symbol">to</a> <a id="1408" class="Field">D₁</a><a id="1410" class="Symbol">)</a> <strong>TODO</strong>: - how to define using final coalgebra(s)? - DX
can be defined as retract of infinite streams, how? - how to express
<strong>Theorem 8</strong> in agda?</p>
<pre class="Agda"> <a id="1620" class="Keyword">record</a> <a id="DelayFunctor"></a><a id="1627" href="Monad.Instance.Delay.html#1627" class="Record">DelayFunctor</a> <a id="1640" class="Symbol">:</a> <a id="1642" href="Agda.Primitive.html#320" class="Primitive">Set</a> <a id="1646" class="Symbol">(</a><a id="1647" href="Monad.Instance.Delay.html#982" class="Bound">o</a> <a id="1649" href="Agda.Primitive.html#804" class="Primitive Operator"></a> <a id="1651" href="Monad.Instance.Delay.html#984" class="Bound"></a> <a id="1653" href="Agda.Primitive.html#804" class="Primitive Operator"></a> <a id="1655" href="Monad.Instance.Delay.html#986" class="Bound">e</a><a id="1656" class="Symbol">)</a> <a id="1658" class="Keyword">where</a>
<a id="1668" class="Keyword">field</a>
<a id="DelayFunctor.D"></a><a id="1680" href="Monad.Instance.Delay.html#1680" class="Field">D</a> <a id="1682" class="Symbol">:</a> <a id="1684" href="Categories.Functor.html#283" class="Function">Endofunctor</a> <a id="1696" href="Monad.Instance.Delay.html#1093" class="Field">C</a>
<a id="1417" class="Keyword">field</a> <a id="1703" class="Keyword">open</a> <a id="1708" href="Categories.Functor.Core.html#248" class="Module">Functor</a> <a id="1716" href="Monad.Instance.Delay.html#1680" class="Field">D</a> <a id="1718" class="Keyword">public</a> <a id="1725" class="Keyword">renaming</a> <a id="1734" class="Symbol">(</a><a id="1735" href="Categories.Functor.Core.html#432" class="Field">F₀</a> <a id="1738" class="Symbol">to</a> <a id="1741" class="Field">D₀</a><a id="1743" class="Symbol">;</a> <a id="1745" href="Categories.Functor.Core.html#455" class="Field">F₁</a> <a id="1748" class="Symbol">to</a> <a id="1751" class="Field">D₁</a><a id="1753" class="Symbol">)</a>
<a id="DelayMonad.now"></a><a id="1429" href="Monad.Instance.Delay.html#1429" class="Field">now</a> <a id="1433" class="Symbol">:</a> <a id="1435" class="Symbol"></a> <a id="1437" class="Symbol">{</a><a id="1438" href="Monad.Instance.Delay.html#1438" class="Bound">X</a><a id="1439" class="Symbol">}</a> <a id="1441" class="Symbol"></a> <a id="1443" href="Monad.Instance.Delay.html#1438" class="Bound">X</a> <a id="1445" href="Categories.Category.Core.html#575" class="Function Operator"></a> <a id="1447" href="Monad.Instance.Delay.html#1398" class="Function">D₀</a> <a id="1450" href="Monad.Instance.Delay.html#1438" class="Bound">X</a>
<a id="DelayMonad.later"></a><a id="1458" href="Monad.Instance.Delay.html#1458" class="Field">later</a> <a id="1464" class="Symbol">:</a> <a id="1466" class="Symbol"></a> <a id="1468" class="Symbol">{</a><a id="1469" href="Monad.Instance.Delay.html#1469" class="Bound">X</a><a id="1470" class="Symbol">}</a> <a id="1472" class="Symbol"></a> <a id="1474" href="Monad.Instance.Delay.html#1398" class="Function">D₀</a> <a id="1477" href="Monad.Instance.Delay.html#1469" class="Bound">X</a> <a id="1479" href="Categories.Category.Core.html#575" class="Function Operator"></a> <a id="1481" href="Monad.Instance.Delay.html#1398" class="Function">D₀</a> <a id="1484" href="Monad.Instance.Delay.html#1469" class="Bound">X</a>
<a id="DelayMonad.isIso"></a><a id="1492" href="Monad.Instance.Delay.html#1492" class="Field">isIso</a> <a id="1498" class="Symbol">:</a> <a id="1500" class="Symbol"></a> <a id="1502" class="Symbol">{</a><a id="1503" href="Monad.Instance.Delay.html#1503" class="Bound">X</a><a id="1504" class="Symbol">}</a> <a id="1506" class="Symbol"></a> <a id="1508" href="Categories.Morphism.html#1826" class="Record">IsIso</a> <a id="1514" href="Categories.Object.Coproduct.html#532" class="Function Operator">[</a> <a id="1516" href="Monad.Instance.Delay.html#1429" class="Field">now</a> <a id="1520" class="Symbol">{</a><a id="1521" href="Monad.Instance.Delay.html#1503" class="Bound">X</a><a id="1522" class="Symbol">}</a> <a id="1524" href="Categories.Object.Coproduct.html#532" class="Function Operator">,</a> <a id="1526" href="Monad.Instance.Delay.html#1458" class="Field">later</a> <a id="1532" class="Symbol">{</a><a id="1533" href="Monad.Instance.Delay.html#1503" class="Bound">X</a><a id="1534" class="Symbol">}</a> <a id="1536" href="Categories.Object.Coproduct.html#532" class="Function Operator">]</a>
<a id="DelayMonad.out"></a><a id="1547" href="Monad.Instance.Delay.html#1547" class="Function">out</a> <a id="1551" class="Symbol">:</a> <a id="1553" class="Symbol"></a> <a id="1555" class="Symbol">{</a><a id="1556" href="Monad.Instance.Delay.html#1556" class="Bound">X</a><a id="1557" class="Symbol">}</a> <a id="1559" class="Symbol"></a> <a id="1561" href="Monad.Instance.Delay.html#1398" class="Function">D₀</a> <a id="1564" href="Monad.Instance.Delay.html#1556" class="Bound">X</a> <a id="1566" href="Categories.Category.Core.html#575" class="Function Operator"></a> <a id="1568" href="Monad.Instance.Delay.html#1556" class="Bound">X</a> <a id="1570" href="Categories.Category.Cocartesian.html#1549" class="Function Operator">+</a> <a id="1572" href="Monad.Instance.Delay.html#1398" class="Function">D₀</a> <a id="1575" href="Monad.Instance.Delay.html#1556" class="Bound">X</a> <a id="1760" class="Keyword">field</a>
<a id="1581" href="Monad.Instance.Delay.html#1547" class="Function">out</a> <a id="1585" class="Symbol">{</a><a id="1586" href="Monad.Instance.Delay.html#1586" class="Bound">X</a><a id="1587" class="Symbol">}</a> <a id="1589" class="Symbol">=</a> <a id="1591" href="Categories.Morphism.html#1879" class="Field">IsIso.inv</a> <a id="1601" class="Symbol">(</a><a id="1602" href="Monad.Instance.Delay.html#1492" class="Field">isIso</a> <a id="1608" class="Symbol">{</a><a id="1609" href="Monad.Instance.Delay.html#1586" class="Bound">X</a><a id="1610" class="Symbol">})</a> <a id="DelayFunctor.now"></a><a id="1772" href="Monad.Instance.Delay.html#1772" class="Field">now</a> <a id="1776" class="Symbol">:</a> <a id="1778" class="Symbol"></a> <a id="1780" class="Symbol">{</a><a id="1781" href="Monad.Instance.Delay.html#1781" class="Bound">X</a><a id="1782" class="Symbol">}</a> <a id="1784" class="Symbol"></a> <a id="1786" href="Monad.Instance.Delay.html#1781" class="Bound">X</a> <a id="1788" href="Categories.Category.Core.html#575" class="Function Operator"></a> <a id="1790" href="Monad.Instance.Delay.html#1741" class="Function">D₀</a> <a id="1793" href="Monad.Instance.Delay.html#1781" class="Bound">X</a>
<a id="DelayFunctor.later"></a><a id="1801" href="Monad.Instance.Delay.html#1801" class="Field">later</a> <a id="1807" class="Symbol">:</a> <a id="1809" class="Symbol"></a> <a id="1811" class="Symbol">{</a><a id="1812" href="Monad.Instance.Delay.html#1812" class="Bound">X</a><a id="1813" class="Symbol">}</a> <a id="1815" class="Symbol"></a> <a id="1817" href="Monad.Instance.Delay.html#1741" class="Function">D₀</a> <a id="1820" href="Monad.Instance.Delay.html#1812" class="Bound">X</a> <a id="1822" href="Categories.Category.Core.html#575" class="Function Operator"></a> <a id="1824" href="Monad.Instance.Delay.html#1741" class="Function">D₀</a> <a id="1827" href="Monad.Instance.Delay.html#1812" class="Bound">X</a>
<a id="DelayFunctor.isIso"></a><a id="1835" href="Monad.Instance.Delay.html#1835" class="Field">isIso</a> <a id="1841" class="Symbol">:</a> <a id="1843" class="Symbol"></a> <a id="1845" class="Symbol">{</a><a id="1846" href="Monad.Instance.Delay.html#1846" class="Bound">X</a><a id="1847" class="Symbol">}</a> <a id="1849" class="Symbol"></a> <a id="1851" href="Categories.Morphism.html#1826" class="Record">IsIso</a> <a id="1857" href="Categories.Object.Coproduct.html#532" class="Function Operator">[</a> <a id="1859" href="Monad.Instance.Delay.html#1772" class="Field">now</a> <a id="1863" class="Symbol">{</a><a id="1864" href="Monad.Instance.Delay.html#1846" class="Bound">X</a><a id="1865" class="Symbol">}</a> <a id="1867" href="Categories.Object.Coproduct.html#532" class="Function Operator">,</a> <a id="1869" href="Monad.Instance.Delay.html#1801" class="Field">later</a> <a id="1875" class="Symbol">{</a><a id="1876" href="Monad.Instance.Delay.html#1846" class="Bound">X</a><a id="1877" class="Symbol">}</a> <a id="1879" href="Categories.Object.Coproduct.html#532" class="Function Operator">]</a>
<a id="1618" class="Keyword">field</a> <a id="DelayFunctor.out"></a><a id="1886" href="Monad.Instance.Delay.html#1886" class="Function">out</a> <a id="1890" class="Symbol">:</a> <a id="1892" class="Symbol"></a> <a id="1894" class="Symbol">{</a><a id="1895" href="Monad.Instance.Delay.html#1895" class="Bound">X</a><a id="1896" class="Symbol">}</a> <a id="1898" class="Symbol"></a> <a id="1900" href="Monad.Instance.Delay.html#1741" class="Function">D₀</a> <a id="1903" href="Monad.Instance.Delay.html#1895" class="Bound">X</a> <a id="1905" href="Categories.Category.Core.html#575" class="Function Operator"></a> <a id="1907" href="Monad.Instance.Delay.html#1895" class="Bound">X</a> <a id="1909" href="Categories.Category.Cocartesian.html#1549" class="Function Operator">+</a> <a id="1911" href="Monad.Instance.Delay.html#1741" class="Function">D₀</a> <a id="1914" href="Monad.Instance.Delay.html#1895" class="Bound">X</a>
<a id="DelayMonad._*"></a><a id="1630" href="Monad.Instance.Delay.html#1630" class="Field Operator">_*</a> <a id="1633" class="Symbol">:</a> <a id="1635" class="Symbol"></a> <a id="1637" class="Symbol">{</a><a id="1638" href="Monad.Instance.Delay.html#1638" class="Bound">X</a> <a id="1640" href="Monad.Instance.Delay.html#1640" class="Bound">Y</a><a id="1641" class="Symbol">}</a> <a id="1643" class="Symbol"></a> <a id="1645" href="Monad.Instance.Delay.html#1638" class="Bound">X</a> <a id="1647" href="Categories.Category.Core.html#575" class="Function Operator"></a> <a id="1649" href="Monad.Instance.Delay.html#1398" class="Function">D₀</a> <a id="1652" href="Monad.Instance.Delay.html#1640" class="Bound">Y</a> <a id="1654" class="Symbol"></a> <a id="1656" href="Monad.Instance.Delay.html#1398" class="Function">D₀</a> <a id="1659" href="Monad.Instance.Delay.html#1638" class="Bound">X</a> <a id="1661" href="Categories.Category.Core.html#575" class="Function Operator"></a> <a id="1663" href="Monad.Instance.Delay.html#1398" class="Function">D₀</a> <a id="1666" href="Monad.Instance.Delay.html#1640" class="Bound">Y</a> <a id="1920" href="Monad.Instance.Delay.html#1886" class="Function">out</a> <a id="1924" class="Symbol">{</a><a id="1925" href="Monad.Instance.Delay.html#1925" class="Bound">X</a><a id="1926" class="Symbol">}</a> <a id="1928" class="Symbol">=</a> <a id="1930" href="Categories.Morphism.html#1879" class="Field">IsIso.inv</a> <a id="1940" class="Symbol">(</a><a id="1941" href="Monad.Instance.Delay.html#1835" class="Field">isIso</a> <a id="1947" class="Symbol">{</a><a id="1948" href="Monad.Instance.Delay.html#1925" class="Bound">X</a><a id="1949" class="Symbol">})</a>
<a id="DelayMonad.*-law"></a><a id="1674" href="Monad.Instance.Delay.html#1674" class="Field">*-law</a> <a id="1680" class="Symbol">:</a> <a id="1682" class="Symbol"></a> <a id="1684" class="Symbol">{</a><a id="1685" href="Monad.Instance.Delay.html#1685" class="Bound">X</a> <a id="1687" href="Monad.Instance.Delay.html#1687" class="Bound">Y</a><a id="1688" class="Symbol">}</a> <a id="1690" class="Symbol">{</a><a id="1691" href="Monad.Instance.Delay.html#1691" class="Bound">f</a> <a id="1693" class="Symbol">:</a> <a id="1695" href="Monad.Instance.Delay.html#1685" class="Bound">X</a> <a id="1697" href="Categories.Category.Core.html#575" class="Function Operator"></a> <a id="1699" href="Monad.Instance.Delay.html#1398" class="Function">D₀</a> <a id="1702" href="Monad.Instance.Delay.html#1687" class="Bound">Y</a><a id="1703" class="Symbol">}</a> <a id="1705" class="Symbol"></a> <a id="1707" href="Monad.Instance.Delay.html#1547" class="Function">out</a> <a id="1711" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="1713" class="Symbol">(</a><a id="1714" href="Monad.Instance.Delay.html#1691" class="Bound">f</a> <a id="1716" href="Monad.Instance.Delay.html#1630" class="Field Operator">*</a><a id="1717" class="Symbol">)</a> <a id="1719" href="Categories.Category.Core.html#595" class="Function Operator"></a> <a id="1721" href="Categories.Object.Coproduct.html#532" class="Function Operator">[</a> <a id="1723" href="Monad.Instance.Delay.html#1547" class="Function">out</a> <a id="1727" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="1729" href="Monad.Instance.Delay.html#1691" class="Bound">f</a> <a id="1731" href="Categories.Object.Coproduct.html#532" class="Function Operator">,</a> <a id="1733" href="Categories.Object.Coproduct.html#512" class="Function">i₂</a> <a id="1736" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="1738" class="Symbol">(</a><a id="1739" href="Monad.Instance.Delay.html#1691" class="Bound">f</a> <a id="1741" href="Monad.Instance.Delay.html#1630" class="Field Operator">*</a><a id="1742" class="Symbol">)</a> <a id="1744" href="Categories.Object.Coproduct.html#532" class="Function Operator">]</a> <a id="1746" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="1748" href="Monad.Instance.Delay.html#1547" class="Function">out</a>
<a id="DelayMonad.*-unique"></a><a id="1758" href="Monad.Instance.Delay.html#1758" class="Field">*-unique</a> <a id="1767" class="Symbol">:</a> <a id="1769" class="Symbol"></a> <a id="1771" class="Symbol">{</a><a id="1772" href="Monad.Instance.Delay.html#1772" class="Bound">X</a> <a id="1774" href="Monad.Instance.Delay.html#1774" class="Bound">Y</a><a id="1775" class="Symbol">}</a> <a id="1777" class="Symbol">(</a><a id="1778" href="Monad.Instance.Delay.html#1778" class="Bound">f</a> <a id="1780" class="Symbol">:</a> <a id="1782" href="Monad.Instance.Delay.html#1772" class="Bound">X</a> <a id="1784" href="Categories.Category.Core.html#575" class="Function Operator"></a> <a id="1786" href="Monad.Instance.Delay.html#1398" class="Function">D₀</a> <a id="1789" href="Monad.Instance.Delay.html#1774" class="Bound">Y</a><a id="1790" class="Symbol">)</a> <a id="1792" class="Symbol">(</a><a id="1793" href="Monad.Instance.Delay.html#1793" class="Bound">h</a> <a id="1795" class="Symbol">:</a> <a id="1797" href="Monad.Instance.Delay.html#1398" class="Function">D₀</a> <a id="1800" href="Monad.Instance.Delay.html#1772" class="Bound">X</a> <a id="1802" href="Categories.Category.Core.html#575" class="Function Operator"></a> <a id="1804" href="Monad.Instance.Delay.html#1398" class="Function">D₀</a> <a id="1807" href="Monad.Instance.Delay.html#1774" class="Bound">Y</a><a id="1808" class="Symbol">)</a> <a id="1810" class="Symbol"></a> <a id="1812" href="Monad.Instance.Delay.html#1793" class="Bound">h</a> <a id="1814" href="Categories.Category.Core.html#595" class="Function Operator"></a> <a id="1816" href="Monad.Instance.Delay.html#1778" class="Bound">f</a> <a id="1818" href="Monad.Instance.Delay.html#1630" class="Field Operator">*</a>
<a id="DelayMonad.*-resp-≈"></a><a id="1826" href="Monad.Instance.Delay.html#1826" class="Field">*-resp-≈</a> <a id="1835" class="Symbol">:</a> <a id="1837" class="Symbol"></a> <a id="1839" class="Symbol">{</a><a id="1840" href="Monad.Instance.Delay.html#1840" class="Bound">X</a> <a id="1842" href="Monad.Instance.Delay.html#1842" class="Bound">Y</a><a id="1843" class="Symbol">}</a> <a id="1845" class="Symbol">{</a><a id="1846" href="Monad.Instance.Delay.html#1846" class="Bound">f</a> <a id="1848" href="Monad.Instance.Delay.html#1848" class="Bound">h</a> <a id="1850" class="Symbol">:</a> <a id="1852" href="Monad.Instance.Delay.html#1840" class="Bound">X</a> <a id="1854" href="Categories.Category.Core.html#575" class="Function Operator"></a> <a id="1856" href="Monad.Instance.Delay.html#1398" class="Function">D₀</a> <a id="1859" href="Monad.Instance.Delay.html#1842" class="Bound">Y</a><a id="1860" class="Symbol">}</a> <a id="1862" class="Symbol"></a> <a id="1864" href="Monad.Instance.Delay.html#1846" class="Bound">f</a> <a id="1866" href="Categories.Category.Core.html#595" class="Function Operator"></a> <a id="1868" href="Monad.Instance.Delay.html#1848" class="Bound">h</a> <a id="1870" class="Symbol"></a> <a id="1872" href="Monad.Instance.Delay.html#1846" class="Bound">f</a> <a id="1874" href="Monad.Instance.Delay.html#1630" class="Field Operator">*</a> <a id="1876" href="Categories.Category.Core.html#595" class="Function Operator"></a> <a id="1878" href="Monad.Instance.Delay.html#1848" class="Bound">h</a> <a id="1880" href="Monad.Instance.Delay.html#1630" class="Field Operator">*</a>
<a id="DelayMonad.unitLaw"></a><a id="1888" href="Monad.Instance.Delay.html#1888" class="Function">unitLaw</a> <a id="1896" class="Symbol">:</a> <a id="1898" class="Symbol"></a> <a id="1900" class="Symbol">{</a><a id="1901" href="Monad.Instance.Delay.html#1901" class="Bound">X</a><a id="1902" class="Symbol">}</a> <a id="1904" class="Symbol"></a> <a id="1906" href="Monad.Instance.Delay.html#1547" class="Function">out</a> <a id="1910" class="Symbol">{</a><a id="1911" href="Monad.Instance.Delay.html#1901" class="Bound">X</a><a id="1912" class="Symbol">}</a> <a id="1914" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="1916" href="Monad.Instance.Delay.html#1429" class="Field">now</a> <a id="1920" class="Symbol">{</a><a id="1921" href="Monad.Instance.Delay.html#1901" class="Bound">X</a><a id="1922" class="Symbol">}</a> <a id="1924" href="Categories.Category.Core.html#595" class="Function Operator"></a> <a id="1926" href="Categories.Object.Coproduct.html#492" class="Function">i₁</a> <a id="1957" class="Keyword">field</a>
<a id="1933" href="Monad.Instance.Delay.html#1888" class="Function">unitLaw</a> <a id="1941" class="Symbol">=</a> <a id="1943" href="Relation.Binary.Reasoning.Base.Single.html#1925" class="Function Operator">begin</a> <a id="DelayFunctor.coit"></a><a id="1969" href="Monad.Instance.Delay.html#1969" class="Field">coit</a> <a id="1974" class="Symbol">:</a> <a id="1976" class="Symbol"></a> <a id="1978" class="Symbol">{</a><a id="1979" href="Monad.Instance.Delay.html#1979" class="Bound">X</a> <a id="1981" href="Monad.Instance.Delay.html#1981" class="Bound">Y</a><a id="1982" class="Symbol">}</a> <a id="1984" class="Symbol"></a> <a id="1986" href="Monad.Instance.Delay.html#1981" class="Bound">Y</a> <a id="1988" href="Categories.Category.Core.html#575" class="Function Operator"></a> <a id="1990" href="Monad.Instance.Delay.html#1979" class="Bound">X</a> <a id="1992" href="Categories.Category.Cocartesian.html#1549" class="Function Operator">+</a> <a id="1994" href="Monad.Instance.Delay.html#1981" class="Bound">Y</a> <a id="1996" class="Symbol"></a> <a id="1998" href="Monad.Instance.Delay.html#1981" class="Bound">Y</a> <a id="2000" href="Categories.Category.Core.html#575" class="Function Operator"></a> <a id="2002" href="Monad.Instance.Delay.html#1741" class="Function">D₀</a> <a id="2005" href="Monad.Instance.Delay.html#1979" class="Bound">X</a>
<a id="1956" href="Monad.Instance.Delay.html#1547" class="Function">out</a> <a id="1960" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="1962" href="Monad.Instance.Delay.html#1429" class="Field">now</a> <a id="1966" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function">≈⟨</a> <a id="1969" href="Categories.Category.Core.html#2734" class="Function Operator">refl⟩∘⟨</a> <a id="1977" href="Relation.Binary.Structures.html#1603" class="Function">sym</a> <a id="1981" href="Categories.Object.Coproduct.html#569" class="Function">inject₁</a> <a id="1989" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function"></a> <a id="DelayFunctor.coit-law"></a><a id="2013" href="Monad.Instance.Delay.html#2013" class="Field">coit-law</a> <a id="2022" class="Symbol">:</a> <a id="2024" class="Symbol"></a> <a id="2026" class="Symbol">{</a><a id="2027" href="Monad.Instance.Delay.html#2027" class="Bound">X</a> <a id="2029" href="Monad.Instance.Delay.html#2029" class="Bound">Y</a><a id="2030" class="Symbol">}</a> <a id="2032" class="Symbol">{</a><a id="2033" href="Monad.Instance.Delay.html#2033" class="Bound">f</a> <a id="2035" class="Symbol">:</a> <a id="2037" href="Monad.Instance.Delay.html#2029" class="Bound">Y</a> <a id="2039" href="Categories.Category.Core.html#575" class="Function Operator"></a> <a id="2041" href="Monad.Instance.Delay.html#2027" class="Bound">X</a> <a id="2043" href="Categories.Category.Cocartesian.html#1549" class="Function Operator">+</a> <a id="2045" href="Monad.Instance.Delay.html#2029" class="Bound">Y</a><a id="2046" class="Symbol">}</a> <a id="2048" class="Symbol"></a> <a id="2050" href="Monad.Instance.Delay.html#1886" class="Function">out</a> <a id="2054" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="2056" class="Symbol">(</a><a id="2057" href="Monad.Instance.Delay.html#1969" class="Field">coit</a> <a id="2062" href="Monad.Instance.Delay.html#2033" class="Bound">f</a><a id="2063" class="Symbol">)</a> <a id="2065" href="Categories.Category.Core.html#595" class="Function Operator"></a> <a id="2067" class="Symbol">(</a><a id="2068" href="Monad.Instance.Delay.html#1102" class="Function">idC</a> <a id="2072" href="Categories.Category.Cocartesian.html#2133" class="Function Operator">+₁</a> <a id="2075" class="Symbol">(</a><a id="2076" href="Monad.Instance.Delay.html#1969" class="Field">coit</a> <a id="2081" href="Monad.Instance.Delay.html#2033" class="Bound">f</a><a id="2082" class="Symbol">))</a> <a id="2085" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="2087" href="Monad.Instance.Delay.html#2033" class="Bound">f</a>
<a id="1998" href="Monad.Instance.Delay.html#1547" class="Function">out</a> <a id="2002" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="2004" href="Categories.Object.Coproduct.html#532" class="Function Operator">[</a> <a id="2006" href="Monad.Instance.Delay.html#1429" class="Field">now</a> <a id="2010" href="Categories.Object.Coproduct.html#532" class="Function Operator">,</a> <a id="2012" href="Monad.Instance.Delay.html#1458" class="Field">later</a> <a id="2018" href="Categories.Object.Coproduct.html#532" class="Function Operator">]</a> <a id="2020" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="2022" href="Categories.Object.Coproduct.html#492" class="Function">i₁</a> <a id="2025" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function">≈⟨</a> <a id="2028" href="Categories.Morphism.Reasoning.Core.html#6851" class="Function">cancelˡ</a> <a id="2036" class="Symbol">(</a><a id="2037" href="Categories.Morphism.html#1586" class="Function">IsIso.isoˡ</a> <a id="2048" href="Monad.Instance.Delay.html#1492" class="Field">isIso</a><a id="2053" class="Symbol">)</a> <a id="2055" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function"></a> </pre>
<a id="2063" href="Categories.Object.Coproduct.html#492" class="Function">i₁</a> <a id="2066" href="Relation.Binary.Reasoning.Base.Single.html#2564" class="Function Operator"></a> <p>Now lets define the monad:</p>
<pre class="Agda"> <a id="2133" class="Keyword">record</a> <a id="DelayMonad"></a><a id="2140" href="Monad.Instance.Delay.html#2140" class="Record">DelayMonad</a> <a id="2151" class="Symbol">:</a> <a id="2153" href="Agda.Primitive.html#320" class="Primitive">Set</a> <a id="2157" class="Symbol">(</a><a id="2158" href="Monad.Instance.Delay.html#982" class="Bound">o</a> <a id="2160" href="Agda.Primitive.html#804" class="Primitive Operator"></a> <a id="2162" href="Monad.Instance.Delay.html#984" class="Bound"></a> <a id="2164" href="Agda.Primitive.html#804" class="Primitive Operator"></a> <a id="2166" href="Monad.Instance.Delay.html#986" class="Bound">e</a><a id="2167" class="Symbol">)</a> <a id="2169" class="Keyword">where</a>
<a id="2179" class="Keyword">field</a>
<a id="DelayMonad.D"></a><a id="2191" href="Monad.Instance.Delay.html#2191" class="Field">D</a> <a id="2193" class="Symbol">:</a> <a id="2195" href="Monad.Instance.Delay.html#1627" class="Record">DelayFunctor</a>
<a id="2212" class="Keyword">open</a> <a id="2217" href="Monad.Instance.Delay.html#1627" class="Module">DelayFunctor</a> <a id="2230" href="Monad.Instance.Delay.html#2191" class="Field">D</a>
<a id="DelayMonad.toMonad"></a><a id="2073" href="Monad.Instance.Delay.html#2073" class="Function">toMonad</a> <a id="2081" class="Symbol">:</a> <a id="2083" href="Categories.Monad.Construction.Kleisli.html#882" class="Function">KleisliTriple</a> <a id="2097" href="Monad.Instance.Delay.html#996" class="Field">C</a> <a id="2237" class="Keyword">field</a>
<a id="2103" href="Monad.Instance.Delay.html#2073" class="Function">toMonad</a> <a id="2111" class="Symbol">=</a> <a id="2113" class="Keyword">record</a> <a id="DelayMonad._*"></a><a id="2249" href="Monad.Instance.Delay.html#2249" class="Field Operator">_*</a> <a id="2252" class="Symbol">:</a> <a id="2254" class="Symbol"></a> <a id="2256" class="Symbol">{</a><a id="2257" href="Monad.Instance.Delay.html#2257" class="Bound">X</a> <a id="2259" href="Monad.Instance.Delay.html#2259" class="Bound">Y</a><a id="2260" class="Symbol">}</a> <a id="2262" class="Symbol"></a> <a id="2264" href="Monad.Instance.Delay.html#2257" class="Bound">X</a> <a id="2266" href="Categories.Category.Core.html#575" class="Function Operator"></a> <a id="2268" href="Monad.Instance.Delay.html#1741" class="Function">D₀</a> <a id="2271" href="Monad.Instance.Delay.html#2259" class="Bound">Y</a> <a id="2273" class="Symbol"></a> <a id="2275" href="Monad.Instance.Delay.html#1741" class="Function">D₀</a> <a id="2278" href="Monad.Instance.Delay.html#2257" class="Bound">X</a> <a id="2280" href="Categories.Category.Core.html#575" class="Function Operator"></a> <a id="2282" href="Monad.Instance.Delay.html#1741" class="Function">D₀</a> <a id="2285" href="Monad.Instance.Delay.html#2259" class="Bound">Y</a>
<a id="2126" class="Symbol">{</a> <a id="2128" href="Categories.Monad.Relative.html#834" class="Field">F₀</a> <a id="2131" class="Symbol">=</a> <a id="2133" href="Monad.Instance.Delay.html#1398" class="Function">D₀</a> <a id="DelayMonad.*-law"></a><a id="2293" href="Monad.Instance.Delay.html#2293" class="Field">*-law</a> <a id="2299" class="Symbol">:</a> <a id="2301" class="Symbol"></a> <a id="2303" class="Symbol">{</a><a id="2304" href="Monad.Instance.Delay.html#2304" class="Bound">X</a> <a id="2306" href="Monad.Instance.Delay.html#2306" class="Bound">Y</a><a id="2307" class="Symbol">}</a> <a id="2309" class="Symbol">{</a><a id="2310" href="Monad.Instance.Delay.html#2310" class="Bound">f</a> <a id="2312" class="Symbol">:</a> <a id="2314" href="Monad.Instance.Delay.html#2304" class="Bound">X</a> <a id="2316" href="Categories.Category.Core.html#575" class="Function Operator"></a> <a id="2318" href="Monad.Instance.Delay.html#1741" class="Function">D₀</a> <a id="2321" href="Monad.Instance.Delay.html#2306" class="Bound">Y</a><a id="2322" class="Symbol">}</a> <a id="2324" class="Symbol"></a> <a id="2326" href="Monad.Instance.Delay.html#1886" class="Function">out</a> <a id="2330" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="2332" class="Symbol">(</a><a id="2333" href="Monad.Instance.Delay.html#2310" class="Bound">f</a> <a id="2335" href="Monad.Instance.Delay.html#2249" class="Field Operator">*</a><a id="2336" class="Symbol">)</a> <a id="2338" href="Categories.Category.Core.html#595" class="Function Operator"></a> <a id="2340" href="Categories.Object.Coproduct.html#532" class="Function Operator">[</a> <a id="2342" href="Monad.Instance.Delay.html#1886" class="Function">out</a> <a id="2346" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="2348" href="Monad.Instance.Delay.html#2310" class="Bound">f</a> <a id="2350" href="Categories.Object.Coproduct.html#532" class="Function Operator">,</a> <a id="2352" href="Categories.Object.Coproduct.html#512" class="Function">i₂</a> <a id="2355" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="2357" class="Symbol">(</a><a id="2358" href="Monad.Instance.Delay.html#2310" class="Bound">f</a> <a id="2360" href="Monad.Instance.Delay.html#2249" class="Field Operator">*</a><a id="2361" class="Symbol">)</a> <a id="2363" href="Categories.Object.Coproduct.html#532" class="Function Operator">]</a> <a id="2365" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="2367" href="Monad.Instance.Delay.html#1886" class="Function">out</a>
<a id="2142" class="Symbol">;</a> <a id="2144" href="Categories.Monad.Relative.html#857" class="Field">unit</a> <a id="2149" class="Symbol">=</a> <a id="2151" href="Monad.Instance.Delay.html#1429" class="Field">now</a> <a id="DelayMonad.*-unique"></a><a id="2377" href="Monad.Instance.Delay.html#2377" class="Field">*-unique</a> <a id="2386" class="Symbol">:</a> <a id="2388" class="Symbol"></a> <a id="2390" class="Symbol">{</a><a id="2391" href="Monad.Instance.Delay.html#2391" class="Bound">X</a> <a id="2393" href="Monad.Instance.Delay.html#2393" class="Bound">Y</a><a id="2394" class="Symbol">}</a> <a id="2396" class="Symbol">(</a><a id="2397" href="Monad.Instance.Delay.html#2397" class="Bound">f</a> <a id="2399" class="Symbol">:</a> <a id="2401" href="Monad.Instance.Delay.html#2391" class="Bound">X</a> <a id="2403" href="Categories.Category.Core.html#575" class="Function Operator"></a> <a id="2405" href="Monad.Instance.Delay.html#1741" class="Function">D₀</a> <a id="2408" href="Monad.Instance.Delay.html#2393" class="Bound">Y</a><a id="2409" class="Symbol">)</a> <a id="2411" class="Symbol">(</a><a id="2412" href="Monad.Instance.Delay.html#2412" class="Bound">h</a> <a id="2414" class="Symbol">:</a> <a id="2416" href="Monad.Instance.Delay.html#1741" class="Function">D₀</a> <a id="2419" href="Monad.Instance.Delay.html#2391" class="Bound">X</a> <a id="2421" href="Categories.Category.Core.html#575" class="Function Operator"></a> <a id="2423" href="Monad.Instance.Delay.html#1741" class="Function">D₀</a> <a id="2426" href="Monad.Instance.Delay.html#2393" class="Bound">Y</a><a id="2427" class="Symbol">)</a> <a id="2429" class="Symbol"></a> <a id="2431" href="Monad.Instance.Delay.html#2412" class="Bound">h</a> <a id="2433" href="Categories.Category.Core.html#595" class="Function Operator"></a> <a id="2435" href="Monad.Instance.Delay.html#2397" class="Bound">f</a> <a id="2437" href="Monad.Instance.Delay.html#2249" class="Field Operator">*</a>
<a id="2161" class="Symbol">;</a> <a id="2163" href="Categories.Monad.Relative.html#895" class="Field">extend</a> <a id="2170" class="Symbol">=</a> <a id="2172" href="Monad.Instance.Delay.html#1630" class="Field Operator">_*</a> <a id="DelayMonad.*-resp-≈"></a><a id="2445" href="Monad.Instance.Delay.html#2445" class="Field">*-resp-≈</a> <a id="2454" class="Symbol">:</a> <a id="2456" class="Symbol"></a> <a id="2458" class="Symbol">{</a><a id="2459" href="Monad.Instance.Delay.html#2459" class="Bound">X</a> <a id="2461" href="Monad.Instance.Delay.html#2461" class="Bound">Y</a><a id="2462" class="Symbol">}</a> <a id="2464" class="Symbol">{</a><a id="2465" href="Monad.Instance.Delay.html#2465" class="Bound">f</a> <a id="2467" href="Monad.Instance.Delay.html#2467" class="Bound">h</a> <a id="2469" class="Symbol">:</a> <a id="2471" href="Monad.Instance.Delay.html#2459" class="Bound">X</a> <a id="2473" href="Categories.Category.Core.html#575" class="Function Operator"></a> <a id="2475" href="Monad.Instance.Delay.html#1741" class="Function">D₀</a> <a id="2478" href="Monad.Instance.Delay.html#2461" class="Bound">Y</a><a id="2479" class="Symbol">}</a> <a id="2481" class="Symbol"></a> <a id="2483" href="Monad.Instance.Delay.html#2465" class="Bound">f</a> <a id="2485" href="Categories.Category.Core.html#595" class="Function Operator"></a> <a id="2487" href="Monad.Instance.Delay.html#2467" class="Bound">h</a> <a id="2489" class="Symbol"></a> <a id="2491" href="Monad.Instance.Delay.html#2465" class="Bound">f</a> <a id="2493" href="Monad.Instance.Delay.html#2249" class="Field Operator">*</a> <a id="2495" href="Categories.Category.Core.html#595" class="Function Operator"></a> <a id="2497" href="Monad.Instance.Delay.html#2467" class="Bound">h</a> <a id="2499" href="Monad.Instance.Delay.html#2249" class="Field Operator">*</a>
<a id="2181" class="Symbol">;</a> <a id="2183" href="Categories.Monad.Relative.html#953" class="Field">identityʳ</a> <a id="2193" class="Symbol">=</a> <a id="2195" class="Symbol">λ</a> <a id="2197" class="Symbol">{</a><a id="2198" href="Monad.Instance.Delay.html#2198" class="Bound">X</a><a id="2199" class="Symbol">}</a> <a id="2201" class="Symbol">{</a><a id="2202" href="Monad.Instance.Delay.html#2202" class="Bound">Y</a><a id="2203" class="Symbol">}</a> <a id="2205" class="Symbol">{</a><a id="2206" href="Monad.Instance.Delay.html#2206" class="Bound">k</a><a id="2207" class="Symbol">}</a> <a id="2209" class="Symbol"></a> <a id="2211" href="Relation.Binary.Reasoning.Base.Single.html#1925" class="Function Operator">begin</a>
<a id="2226" href="Monad.Instance.Delay.html#2206" class="Bound">k</a> <a id="2228" href="Monad.Instance.Delay.html#1630" class="Field Operator">*</a> <a id="2230" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="2232" href="Monad.Instance.Delay.html#1429" class="Field">now</a> <a id="2236" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function">≈⟨</a> <a id="2239" href="Categories.Morphism.Reasoning.Core.html#3063" class="Function">introˡ</a> <a id="2246" class="Symbol">(</a><a id="2247" href="Categories.Morphism.html#1612" class="Function">IsIso.isoʳ</a> <a id="2258" href="Monad.Instance.Delay.html#1492" class="Field">isIso</a><a id="2263" class="Symbol">)</a> <a id="2265" href="Categories.Category.Core.html#2837" class="Function Operator">⟩∘⟨refl</a> <a id="2273" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function"></a> <a id="DelayMonad.unitLaw"></a><a id="2507" href="Monad.Instance.Delay.html#2507" class="Function">unitLaw</a> <a id="2515" class="Symbol">:</a> <a id="2517" class="Symbol"></a> <a id="2519" class="Symbol">{</a><a id="2520" href="Monad.Instance.Delay.html#2520" class="Bound">X</a><a id="2521" class="Symbol">}</a> <a id="2523" class="Symbol"></a> <a id="2525" href="Monad.Instance.Delay.html#1886" class="Function">out</a> <a id="2529" class="Symbol">{</a><a id="2530" href="Monad.Instance.Delay.html#2520" class="Bound">X</a><a id="2531" class="Symbol">}</a> <a id="2533" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="2535" href="Monad.Instance.Delay.html#1772" class="Function">now</a> <a id="2539" class="Symbol">{</a><a id="2540" href="Monad.Instance.Delay.html#2520" class="Bound">X</a><a id="2541" class="Symbol">}</a> <a id="2543" href="Categories.Category.Core.html#595" class="Function Operator"></a> <a id="2545" href="Categories.Object.Coproduct.html#492" class="Function">i₁</a>
<a id="2284" class="Symbol">((</a><a id="2286" href="Categories.Object.Coproduct.html#532" class="Function Operator">[</a> <a id="2288" href="Monad.Instance.Delay.html#1429" class="Field">now</a> <a id="2292" href="Categories.Object.Coproduct.html#532" class="Function Operator">,</a> <a id="2294" href="Monad.Instance.Delay.html#1458" class="Field">later</a> <a id="2300" href="Categories.Object.Coproduct.html#532" class="Function Operator">]</a> <a id="2302" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="2304" href="Monad.Instance.Delay.html#1547" class="Function">out</a><a id="2307" class="Symbol">)</a> <a id="2309" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="2311" href="Monad.Instance.Delay.html#2206" class="Bound">k</a> <a id="2313" href="Monad.Instance.Delay.html#1630" class="Field Operator">*</a><a id="2314" class="Symbol">)</a> <a id="2316" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="2318" href="Monad.Instance.Delay.html#1429" class="Field">now</a> <a id="2322" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function">≈⟨</a> <a id="2325" href="Categories.Morphism.Reasoning.Core.html#1914" class="Function">pullʳ</a> <a id="2331" href="Monad.Instance.Delay.html#1674" class="Field">*-law</a> <a id="2337" href="Categories.Category.Core.html#2837" class="Function Operator">⟩∘⟨refl</a> <a id="2345" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function"></a> <a id="2552" href="Monad.Instance.Delay.html#2507" class="Function">unitLaw</a> <a id="2560" class="Symbol">=</a> <a id="2562" href="Relation.Binary.Reasoning.Base.Single.html#1925" class="Function Operator">begin</a>
<a id="2355" class="Symbol">(</a><a id="2356" href="Categories.Object.Coproduct.html#532" class="Function Operator">[</a> <a id="2358" href="Monad.Instance.Delay.html#1429" class="Field">now</a> <a id="2362" href="Categories.Object.Coproduct.html#532" class="Function Operator">,</a> <a id="2364" href="Monad.Instance.Delay.html#1458" class="Field">later</a> <a id="2370" href="Categories.Object.Coproduct.html#532" class="Function Operator">]</a> <a id="2372" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="2374" href="Categories.Object.Coproduct.html#532" class="Function Operator">[</a> <a id="2376" href="Monad.Instance.Delay.html#1547" class="Function">out</a> <a id="2380" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="2382" href="Monad.Instance.Delay.html#2206" class="Bound">k</a> <a id="2384" href="Categories.Object.Coproduct.html#532" class="Function Operator">,</a> <a id="2386" href="Categories.Object.Coproduct.html#512" class="Function">i₂</a> <a id="2389" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="2391" class="Symbol">(</a><a id="2392" href="Monad.Instance.Delay.html#2206" class="Bound">k</a> <a id="2394" href="Monad.Instance.Delay.html#1630" class="Field Operator">*</a><a id="2395" class="Symbol">)</a> <a id="2397" href="Categories.Object.Coproduct.html#532" class="Function Operator">]</a> <a id="2399" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="2401" href="Monad.Instance.Delay.html#1547" class="Function">out</a><a id="2404" class="Symbol">)</a> <a id="2406" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="2408" href="Monad.Instance.Delay.html#1429" class="Field">now</a> <a id="2412" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function">≈⟨</a> <a id="2415" href="Categories.Morphism.Reasoning.Core.html#1914" class="Function">pullʳ</a> <a id="2421" class="Symbol">(</a><a id="2422" href="Categories.Morphism.Reasoning.Core.html#1914" class="Function">pullʳ</a> <a id="2428" href="Monad.Instance.Delay.html#1888" class="Function">unitLaw</a><a id="2435" class="Symbol">)</a> <a id="2437" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function"></a> <a id="2575" href="Monad.Instance.Delay.html#1886" class="Function">out</a> <a id="2579" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="2581" href="Monad.Instance.Delay.html#1772" class="Function">now</a> <a id="2585" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function">≈⟨</a> <a id="2588" href="Categories.Category.Core.html#2734" class="Function Operator">refl⟩∘⟨</a> <a id="2596" href="Relation.Binary.Structures.html#1603" class="Function">sym</a> <a id="2600" href="Categories.Object.Coproduct.html#569" class="Function">inject₁</a> <a id="2608" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function"></a>
<a id="2447" href="Categories.Object.Coproduct.html#532" class="Function Operator">[</a> <a id="2449" href="Monad.Instance.Delay.html#1429" class="Field">now</a> <a id="2453" href="Categories.Object.Coproduct.html#532" class="Function Operator">,</a> <a id="2455" href="Monad.Instance.Delay.html#1458" class="Field">later</a> <a id="2461" href="Categories.Object.Coproduct.html#532" class="Function Operator">]</a> <a id="2463" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="2465" href="Categories.Object.Coproduct.html#532" class="Function Operator">[</a> <a id="2467" href="Monad.Instance.Delay.html#1547" class="Function">out</a> <a id="2471" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="2473" href="Monad.Instance.Delay.html#2206" class="Bound">k</a> <a id="2475" href="Categories.Object.Coproduct.html#532" class="Function Operator">,</a> <a id="2477" href="Categories.Object.Coproduct.html#512" class="Function">i₂</a> <a id="2480" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="2482" class="Symbol">(</a><a id="2483" href="Monad.Instance.Delay.html#2206" class="Bound">k</a> <a id="2485" href="Monad.Instance.Delay.html#1630" class="Field Operator">*</a><a id="2486" class="Symbol">)</a> <a id="2488" href="Categories.Object.Coproduct.html#532" class="Function Operator">]</a> <a id="2490" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="2492" href="Categories.Object.Coproduct.html#492" class="Function">i₁</a> <a id="2495" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function">≈⟨</a> <a id="2498" href="Categories.Category.Core.html#2734" class="Function Operator">refl⟩∘⟨</a> <a id="2506" href="Categories.Object.Coproduct.html#569" class="Function">inject₁</a> <a id="2514" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function"></a> <a id="2617" href="Monad.Instance.Delay.html#1886" class="Function">out</a> <a id="2621" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="2623" href="Categories.Object.Coproduct.html#532" class="Function Operator">[</a> <a id="2625" href="Monad.Instance.Delay.html#1772" class="Function">now</a> <a id="2629" href="Categories.Object.Coproduct.html#532" class="Function Operator">,</a> <a id="2631" href="Monad.Instance.Delay.html#1801" class="Function">later</a> <a id="2637" href="Categories.Object.Coproduct.html#532" class="Function Operator">]</a> <a id="2639" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="2641" href="Categories.Object.Coproduct.html#492" class="Function">i₁</a> <a id="2644" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function">≈⟨</a> <a id="2647" href="Categories.Morphism.Reasoning.Core.html#6851" class="Function">cancelˡ</a> <a id="2655" class="Symbol">(</a><a id="2656" href="Categories.Morphism.html#1586" class="Function">IsIso.isoˡ</a> <a id="2667" href="Monad.Instance.Delay.html#1835" class="Function">isIso</a><a id="2672" class="Symbol">)</a> <a id="2674" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function"></a>
<a id="2524" href="Categories.Object.Coproduct.html#532" class="Function Operator">[</a> <a id="2526" href="Monad.Instance.Delay.html#1429" class="Field">now</a> <a id="2530" href="Categories.Object.Coproduct.html#532" class="Function Operator">,</a> <a id="2532" href="Monad.Instance.Delay.html#1458" class="Field">later</a> <a id="2538" href="Categories.Object.Coproduct.html#532" class="Function Operator">]</a> <a id="2540" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="2542" href="Monad.Instance.Delay.html#1547" class="Function">out</a> <a id="2546" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="2548" href="Monad.Instance.Delay.html#2206" class="Bound">k</a> <a id="2550" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function">≈⟨</a> <a id="2553" href="Categories.Morphism.Reasoning.Core.html#6851" class="Function">cancelˡ</a> <a id="2561" class="Symbol">(</a><a id="2562" href="Categories.Morphism.html#1612" class="Function">IsIso.isoʳ</a> <a id="2573" href="Monad.Instance.Delay.html#1492" class="Field">isIso</a><a id="2578" class="Symbol">)</a> <a id="2580" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function"></a> <a id="2682" href="Categories.Object.Coproduct.html#492" class="Function">i₁</a> <a id="2685" href="Relation.Binary.Reasoning.Base.Single.html#2564" class="Function Operator"></a>
<a id="2590" href="Monad.Instance.Delay.html#2206" class="Bound">k</a> <a id="2592" href="Relation.Binary.Reasoning.Base.Single.html#2564" class="Function Operator"></a>
<a id="2600" class="Symbol">;</a> <a id="2602" href="Categories.Monad.Relative.html#1025" class="Field">identityˡ</a> <a id="2612" class="Symbol">=</a> <a id="2614" class="Symbol">λ</a> <a id="2616" class="Symbol">{</a><a id="2617" href="Monad.Instance.Delay.html#2617" class="Bound">X</a><a id="2618" class="Symbol">}</a> <a id="2620" class="Symbol"></a> <a id="2622" href="Relation.Binary.Structures.html#1603" class="Function">sym</a> <a id="2626" class="Symbol">(</a><a id="2627" href="Monad.Instance.Delay.html#1758" class="Field">*-unique</a> <a id="2636" href="Monad.Instance.Delay.html#1429" class="Field">now</a> <a id="2640" href="Monad.Instance.Delay.html#1005" class="Function">idC</a><a id="2643" class="Symbol">)</a> <a id="DelayMonad.toMonad"></a><a id="2692" href="Monad.Instance.Delay.html#2692" class="Function">toMonad</a> <a id="2700" class="Symbol">:</a> <a id="2702" href="Categories.Monad.Construction.Kleisli.html#882" class="Function">KleisliTriple</a> <a id="2716" href="Monad.Instance.Delay.html#1093" class="Field">C</a>
<a id="2651" class="Symbol">;</a> <a id="2653" href="Categories.Monad.Relative.html#1078" class="Field">assoc</a> <a id="2659" class="Symbol">=</a> <a id="2661" class="Symbol">λ</a> <a id="2663" class="Symbol">{</a><a id="2664" href="Monad.Instance.Delay.html#2664" class="Bound">X</a><a id="2665" class="Symbol">}</a> <a id="2667" class="Symbol">{</a><a id="2668" href="Monad.Instance.Delay.html#2668" class="Bound">Y</a><a id="2669" class="Symbol">}</a> <a id="2671" class="Symbol">{</a><a id="2672" href="Monad.Instance.Delay.html#2672" class="Bound">Z</a><a id="2673" class="Symbol">}</a> <a id="2675" class="Symbol">{</a><a id="2676" href="Monad.Instance.Delay.html#2676" class="Bound">f</a><a id="2677" class="Symbol">}</a> <a id="2679" class="Symbol">{</a><a id="2680" href="Monad.Instance.Delay.html#2680" class="Bound">g</a><a id="2681" class="Symbol">}</a> <a id="2683" class="Symbol"></a> <a id="2685" href="Relation.Binary.Structures.html#1603" class="Function">sym</a> <a id="2689" class="Symbol">(</a><a id="2690" href="Monad.Instance.Delay.html#1758" class="Field">*-unique</a> <a id="2699" class="Symbol">((</a><a id="2701" href="Monad.Instance.Delay.html#2680" class="Bound">g</a> <a id="2703" href="Monad.Instance.Delay.html#1630" class="Field Operator">*</a><a id="2704" class="Symbol">)</a> <a id="2706" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="2708" href="Monad.Instance.Delay.html#2676" class="Bound">f</a><a id="2709" class="Symbol">)</a> <a id="2711" class="Symbol">((</a><a id="2713" href="Monad.Instance.Delay.html#2680" class="Bound">g</a> <a id="2715" href="Monad.Instance.Delay.html#1630" class="Field Operator">*</a><a id="2716" class="Symbol">)</a> <a id="2718" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="2720" class="Symbol">(</a><a id="2721" href="Monad.Instance.Delay.html#2676" class="Bound">f</a> <a id="2723" href="Monad.Instance.Delay.html#1630" class="Field Operator">*</a><a id="2724" class="Symbol">)))</a> <a id="2722" href="Monad.Instance.Delay.html#2692" class="Function">toMonad</a> <a id="2730" class="Symbol">=</a> <a id="2732" class="Keyword">record</a>
<a id="2734" class="Symbol">;</a> <a id="2736" href="Categories.Monad.Relative.html#1190" class="Field">sym-assoc</a> <a id="2746" class="Symbol">=</a> <a id="2748" class="Symbol">λ</a> <a id="2750" class="Symbol">{</a><a id="2751" href="Monad.Instance.Delay.html#2751" class="Bound">X</a><a id="2752" class="Symbol">}</a> <a id="2754" class="Symbol">{</a><a id="2755" href="Monad.Instance.Delay.html#2755" class="Bound">Y</a><a id="2756" class="Symbol">}</a> <a id="2758" class="Symbol">{</a><a id="2759" href="Monad.Instance.Delay.html#2759" class="Bound">Z</a><a id="2760" class="Symbol">}</a> <a id="2762" class="Symbol">{</a><a id="2763" href="Monad.Instance.Delay.html#2763" class="Bound">f</a><a id="2764" class="Symbol">}</a> <a id="2766" class="Symbol">{</a><a id="2767" href="Monad.Instance.Delay.html#2767" class="Bound">g</a><a id="2768" class="Symbol">}</a> <a id="2770" class="Symbol"></a> <a id="2772" href="Monad.Instance.Delay.html#1758" class="Field">*-unique</a> <a id="2781" class="Symbol">((</a><a id="2783" href="Monad.Instance.Delay.html#2767" class="Bound">g</a> <a id="2785" href="Monad.Instance.Delay.html#1630" class="Field Operator">*</a><a id="2786" class="Symbol">)</a> <a id="2788" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="2790" href="Monad.Instance.Delay.html#2763" class="Bound">f</a><a id="2791" class="Symbol">)</a> <a id="2793" class="Symbol">((</a><a id="2795" href="Monad.Instance.Delay.html#2767" class="Bound">g</a> <a id="2797" href="Monad.Instance.Delay.html#1630" class="Field Operator">*</a><a id="2798" class="Symbol">)</a> <a id="2800" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="2802" class="Symbol">(</a><a id="2803" href="Monad.Instance.Delay.html#2763" class="Bound">f</a> <a id="2805" href="Monad.Instance.Delay.html#1630" class="Field Operator">*</a><a id="2806" class="Symbol">))</a> <a id="2745" class="Symbol">{</a> <a id="2747" href="Categories.Monad.Relative.html#834" class="Field">F₀</a> <a id="2750" class="Symbol">=</a> <a id="2752" href="Monad.Instance.Delay.html#1741" class="Function">D₀</a>
<a id="2815" class="Symbol">;</a> <a id="2817" href="Categories.Monad.Relative.html#1306" class="Field">extend-≈</a> <a id="2826" class="Symbol">=</a> <a id="2828" href="Monad.Instance.Delay.html#1826" class="Field">*-resp-≈</a> <a id="2761" class="Symbol">;</a> <a id="2763" href="Categories.Monad.Relative.html#857" class="Field">unit</a> <a id="2768" class="Symbol">=</a> <a id="2770" href="Monad.Instance.Delay.html#1772" class="Function">now</a>
<a id="2843" class="Symbol">}</a> <a id="2780" class="Symbol">;</a> <a id="2782" href="Categories.Monad.Relative.html#895" class="Field">extend</a> <a id="2789" class="Symbol">=</a> <a id="2791" href="Monad.Instance.Delay.html#2249" class="Field Operator">_*</a>
<a id="2800" class="Symbol">;</a> <a id="2802" href="Categories.Monad.Relative.html#953" class="Field">identityʳ</a> <a id="2812" class="Symbol">=</a> <a id="2814" class="Symbol">λ</a> <a id="2816" class="Symbol">{</a><a id="2817" href="Monad.Instance.Delay.html#2817" class="Bound">X</a><a id="2818" class="Symbol">}</a> <a id="2820" class="Symbol">{</a><a id="2821" href="Monad.Instance.Delay.html#2821" class="Bound">Y</a><a id="2822" class="Symbol">}</a> <a id="2824" class="Symbol">{</a><a id="2825" href="Monad.Instance.Delay.html#2825" class="Bound">k</a><a id="2826" class="Symbol">}</a> <a id="2828" class="Symbol"></a> <a id="2830" href="Relation.Binary.Reasoning.Base.Single.html#1925" class="Function Operator">begin</a>
<a id="2845" href="Monad.Instance.Delay.html#2825" class="Bound">k</a> <a id="2847" href="Monad.Instance.Delay.html#2249" class="Field Operator">*</a> <a id="2849" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="2851" href="Monad.Instance.Delay.html#1772" class="Function">now</a> <a id="2855" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function">≈⟨</a> <a id="2858" href="Categories.Morphism.Reasoning.Core.html#3063" class="Function">introˡ</a> <a id="2865" class="Symbol">(</a><a id="2866" href="Categories.Morphism.html#1612" class="Function">IsIso.isoʳ</a> <a id="2877" href="Monad.Instance.Delay.html#1835" class="Function">isIso</a><a id="2882" class="Symbol">)</a> <a id="2884" href="Categories.Category.Core.html#2837" class="Function Operator">⟩∘⟨refl</a> <a id="2892" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function"></a>
<a id="2903" class="Symbol">((</a><a id="2905" href="Categories.Object.Coproduct.html#532" class="Function Operator">[</a> <a id="2907" href="Monad.Instance.Delay.html#1772" class="Function">now</a> <a id="2911" href="Categories.Object.Coproduct.html#532" class="Function Operator">,</a> <a id="2913" href="Monad.Instance.Delay.html#1801" class="Function">later</a> <a id="2919" href="Categories.Object.Coproduct.html#532" class="Function Operator">]</a> <a id="2921" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="2923" href="Monad.Instance.Delay.html#1886" class="Function">out</a><a id="2926" class="Symbol">)</a> <a id="2928" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="2930" href="Monad.Instance.Delay.html#2825" class="Bound">k</a> <a id="2932" href="Monad.Instance.Delay.html#2249" class="Field Operator">*</a><a id="2933" class="Symbol">)</a> <a id="2935" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="2937" href="Monad.Instance.Delay.html#1772" class="Function">now</a> <a id="2941" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function">≈⟨</a> <a id="2944" href="Categories.Morphism.Reasoning.Core.html#1914" class="Function">pullʳ</a> <a id="2950" href="Monad.Instance.Delay.html#2293" class="Field">*-law</a> <a id="2956" href="Categories.Category.Core.html#2837" class="Function Operator">⟩∘⟨refl</a> <a id="2964" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function"></a>
<a id="2974" class="Symbol">(</a><a id="2975" href="Categories.Object.Coproduct.html#532" class="Function Operator">[</a> <a id="2977" href="Monad.Instance.Delay.html#1772" class="Function">now</a> <a id="2981" href="Categories.Object.Coproduct.html#532" class="Function Operator">,</a> <a id="2983" href="Monad.Instance.Delay.html#1801" class="Function">later</a> <a id="2989" href="Categories.Object.Coproduct.html#532" class="Function Operator">]</a> <a id="2991" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="2993" href="Categories.Object.Coproduct.html#532" class="Function Operator">[</a> <a id="2995" href="Monad.Instance.Delay.html#1886" class="Function">out</a> <a id="2999" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="3001" href="Monad.Instance.Delay.html#2825" class="Bound">k</a> <a id="3003" href="Categories.Object.Coproduct.html#532" class="Function Operator">,</a> <a id="3005" href="Categories.Object.Coproduct.html#512" class="Function">i₂</a> <a id="3008" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="3010" class="Symbol">(</a><a id="3011" href="Monad.Instance.Delay.html#2825" class="Bound">k</a> <a id="3013" href="Monad.Instance.Delay.html#2249" class="Field Operator">*</a><a id="3014" class="Symbol">)</a> <a id="3016" href="Categories.Object.Coproduct.html#532" class="Function Operator">]</a> <a id="3018" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="3020" href="Monad.Instance.Delay.html#1886" class="Function">out</a><a id="3023" class="Symbol">)</a> <a id="3025" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="3027" href="Monad.Instance.Delay.html#1772" class="Function">now</a> <a id="3031" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function">≈⟨</a> <a id="3034" href="Categories.Morphism.Reasoning.Core.html#1914" class="Function">pullʳ</a> <a id="3040" class="Symbol">(</a><a id="3041" href="Categories.Morphism.Reasoning.Core.html#1914" class="Function">pullʳ</a> <a id="3047" href="Monad.Instance.Delay.html#2507" class="Function">unitLaw</a><a id="3054" class="Symbol">)</a> <a id="3056" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function"></a>
<a id="3066" href="Categories.Object.Coproduct.html#532" class="Function Operator">[</a> <a id="3068" href="Monad.Instance.Delay.html#1772" class="Function">now</a> <a id="3072" href="Categories.Object.Coproduct.html#532" class="Function Operator">,</a> <a id="3074" href="Monad.Instance.Delay.html#1801" class="Function">later</a> <a id="3080" href="Categories.Object.Coproduct.html#532" class="Function Operator">]</a> <a id="3082" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="3084" href="Categories.Object.Coproduct.html#532" class="Function Operator">[</a> <a id="3086" href="Monad.Instance.Delay.html#1886" class="Function">out</a> <a id="3090" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="3092" href="Monad.Instance.Delay.html#2825" class="Bound">k</a> <a id="3094" href="Categories.Object.Coproduct.html#532" class="Function Operator">,</a> <a id="3096" href="Categories.Object.Coproduct.html#512" class="Function">i₂</a> <a id="3099" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="3101" class="Symbol">(</a><a id="3102" href="Monad.Instance.Delay.html#2825" class="Bound">k</a> <a id="3104" href="Monad.Instance.Delay.html#2249" class="Field Operator">*</a><a id="3105" class="Symbol">)</a> <a id="3107" href="Categories.Object.Coproduct.html#532" class="Function Operator">]</a> <a id="3109" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="3111" href="Categories.Object.Coproduct.html#492" class="Function">i₁</a> <a id="3114" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function">≈⟨</a> <a id="3117" href="Categories.Category.Core.html#2734" class="Function Operator">refl⟩∘⟨</a> <a id="3125" href="Categories.Object.Coproduct.html#569" class="Function">inject₁</a> <a id="3133" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function"></a>
<a id="3143" href="Categories.Object.Coproduct.html#532" class="Function Operator">[</a> <a id="3145" href="Monad.Instance.Delay.html#1772" class="Function">now</a> <a id="3149" href="Categories.Object.Coproduct.html#532" class="Function Operator">,</a> <a id="3151" href="Monad.Instance.Delay.html#1801" class="Function">later</a> <a id="3157" href="Categories.Object.Coproduct.html#532" class="Function Operator">]</a> <a id="3159" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="3161" href="Monad.Instance.Delay.html#1886" class="Function">out</a> <a id="3165" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="3167" href="Monad.Instance.Delay.html#2825" class="Bound">k</a> <a id="3169" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function">≈⟨</a> <a id="3172" href="Categories.Morphism.Reasoning.Core.html#6851" class="Function">cancelˡ</a> <a id="3180" class="Symbol">(</a><a id="3181" href="Categories.Morphism.html#1612" class="Function">IsIso.isoʳ</a> <a id="3192" href="Monad.Instance.Delay.html#1835" class="Function">isIso</a><a id="3197" class="Symbol">)</a> <a id="3199" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function"></a>
<a id="3209" href="Monad.Instance.Delay.html#2825" class="Bound">k</a> <a id="3211" href="Relation.Binary.Reasoning.Base.Single.html#2564" class="Function Operator"></a>
<a id="3219" class="Symbol">;</a> <a id="3221" href="Categories.Monad.Relative.html#1025" class="Field">identityˡ</a> <a id="3231" class="Symbol">=</a> <a id="3233" class="Symbol">λ</a> <a id="3235" class="Symbol">{</a><a id="3236" href="Monad.Instance.Delay.html#3236" class="Bound">X</a><a id="3237" class="Symbol">}</a> <a id="3239" class="Symbol"></a> <a id="3241" href="Relation.Binary.Structures.html#1603" class="Function">sym</a> <a id="3245" class="Symbol">(</a><a id="3246" href="Monad.Instance.Delay.html#2377" class="Field">*-unique</a> <a id="3255" href="Monad.Instance.Delay.html#1772" class="Function">now</a> <a id="3259" href="Monad.Instance.Delay.html#1102" class="Function">idC</a><a id="3262" class="Symbol">)</a>
<a id="3270" class="Symbol">;</a> <a id="3272" href="Categories.Monad.Relative.html#1078" class="Field">assoc</a> <a id="3278" class="Symbol">=</a> <a id="3280" class="Symbol">λ</a> <a id="3282" class="Symbol">{</a><a id="3283" href="Monad.Instance.Delay.html#3283" class="Bound">X</a><a id="3284" class="Symbol">}</a> <a id="3286" class="Symbol">{</a><a id="3287" href="Monad.Instance.Delay.html#3287" class="Bound">Y</a><a id="3288" class="Symbol">}</a> <a id="3290" class="Symbol">{</a><a id="3291" href="Monad.Instance.Delay.html#3291" class="Bound">Z</a><a id="3292" class="Symbol">}</a> <a id="3294" class="Symbol">{</a><a id="3295" href="Monad.Instance.Delay.html#3295" class="Bound">f</a><a id="3296" class="Symbol">}</a> <a id="3298" class="Symbol">{</a><a id="3299" href="Monad.Instance.Delay.html#3299" class="Bound">g</a><a id="3300" class="Symbol">}</a> <a id="3302" class="Symbol"></a> <a id="3304" href="Relation.Binary.Structures.html#1603" class="Function">sym</a> <a id="3308" class="Symbol">(</a><a id="3309" href="Monad.Instance.Delay.html#2377" class="Field">*-unique</a> <a id="3318" class="Symbol">((</a><a id="3320" href="Monad.Instance.Delay.html#3299" class="Bound">g</a> <a id="3322" href="Monad.Instance.Delay.html#2249" class="Field Operator">*</a><a id="3323" class="Symbol">)</a> <a id="3325" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="3327" href="Monad.Instance.Delay.html#3295" class="Bound">f</a><a id="3328" class="Symbol">)</a> <a id="3330" class="Symbol">((</a><a id="3332" href="Monad.Instance.Delay.html#3299" class="Bound">g</a> <a id="3334" href="Monad.Instance.Delay.html#2249" class="Field Operator">*</a><a id="3335" class="Symbol">)</a> <a id="3337" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="3339" class="Symbol">(</a><a id="3340" href="Monad.Instance.Delay.html#3295" class="Bound">f</a> <a id="3342" href="Monad.Instance.Delay.html#2249" class="Field Operator">*</a><a id="3343" class="Symbol">)))</a>
<a id="3353" class="Symbol">;</a> <a id="3355" href="Categories.Monad.Relative.html#1190" class="Field">sym-assoc</a> <a id="3365" class="Symbol">=</a> <a id="3367" class="Symbol">λ</a> <a id="3369" class="Symbol">{</a><a id="3370" href="Monad.Instance.Delay.html#3370" class="Bound">X</a><a id="3371" class="Symbol">}</a> <a id="3373" class="Symbol">{</a><a id="3374" href="Monad.Instance.Delay.html#3374" class="Bound">Y</a><a id="3375" class="Symbol">}</a> <a id="3377" class="Symbol">{</a><a id="3378" href="Monad.Instance.Delay.html#3378" class="Bound">Z</a><a id="3379" class="Symbol">}</a> <a id="3381" class="Symbol">{</a><a id="3382" href="Monad.Instance.Delay.html#3382" class="Bound">f</a><a id="3383" class="Symbol">}</a> <a id="3385" class="Symbol">{</a><a id="3386" href="Monad.Instance.Delay.html#3386" class="Bound">g</a><a id="3387" class="Symbol">}</a> <a id="3389" class="Symbol"></a> <a id="3391" href="Monad.Instance.Delay.html#2377" class="Field">*-unique</a> <a id="3400" class="Symbol">((</a><a id="3402" href="Monad.Instance.Delay.html#3386" class="Bound">g</a> <a id="3404" href="Monad.Instance.Delay.html#2249" class="Field Operator">*</a><a id="3405" class="Symbol">)</a> <a id="3407" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="3409" href="Monad.Instance.Delay.html#3382" class="Bound">f</a><a id="3410" class="Symbol">)</a> <a id="3412" class="Symbol">((</a><a id="3414" href="Monad.Instance.Delay.html#3386" class="Bound">g</a> <a id="3416" href="Monad.Instance.Delay.html#2249" class="Field Operator">*</a><a id="3417" class="Symbol">)</a> <a id="3419" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="3421" class="Symbol">(</a><a id="3422" href="Monad.Instance.Delay.html#3382" class="Bound">f</a> <a id="3424" href="Monad.Instance.Delay.html#2249" class="Field Operator">*</a><a id="3425" class="Symbol">))</a>
<a id="3434" class="Symbol">;</a> <a id="3436" href="Categories.Monad.Relative.html#1306" class="Field">extend-≈</a> <a id="3445" class="Symbol">=</a> <a id="3447" href="Monad.Instance.Delay.html#2445" class="Field">*-resp-≈</a>
<a id="3462" class="Symbol">}</a>
</pre>
<h3 id="definition-30-search-algebras">Definition 30:
Search-Algebras</h3>
<pre class="Agda"> <a id="3515" class="Keyword">record</a> <a id="SearchAlgebra"></a><a id="3522" href="Monad.Instance.Delay.html#3522" class="Record">SearchAlgebra</a> <a id="3536" class="Symbol">(</a><a id="3537" href="Monad.Instance.Delay.html#3537" class="Bound">DF</a> <a id="3540" class="Symbol">:</a> <a id="3542" href="Monad.Instance.Delay.html#1627" class="Record">DelayFunctor</a><a id="3554" class="Symbol">)</a> <a id="3556" class="Symbol">:</a> <a id="3558" href="Agda.Primitive.html#320" class="Primitive">Set</a> <a id="3562" class="Symbol">(</a><a id="3563" href="Monad.Instance.Delay.html#982" class="Bound">o</a> <a id="3565" href="Agda.Primitive.html#804" class="Primitive Operator"></a> <a id="3567" href="Monad.Instance.Delay.html#984" class="Bound"></a> <a id="3569" href="Agda.Primitive.html#804" class="Primitive Operator"></a> <a id="3571" href="Monad.Instance.Delay.html#986" class="Bound">e</a><a id="3572" class="Symbol">)</a> <a id="3574" class="Keyword">where</a>
<a id="3584" class="Keyword">open</a> <a id="3589" href="Monad.Instance.Delay.html#1627" class="Module">DelayFunctor</a> <a id="3602" href="Monad.Instance.Delay.html#3537" class="Bound">DF</a>
<a id="3614" class="Keyword">field</a>
<a id="SearchAlgebra.FA"></a><a id="3626" href="Monad.Instance.Delay.html#3626" class="Field">FA</a> <a id="3629" class="Symbol">:</a> <a id="3631" href="Categories.Functor.Algebra.html#487" class="Record">F-Algebra</a> <a id="3641" href="Monad.Instance.Delay.html#1680" class="Function">D</a>
<a id="3648" class="Keyword">open</a> <a id="3653" href="Categories.Functor.Algebra.html#487" class="Module">F-Algebra</a> <a id="3663" href="Monad.Instance.Delay.html#3626" class="Field">FA</a>
<a id="3671" class="Keyword">field</a>
<a id="SearchAlgebra.now-id"></a><a id="3683" href="Monad.Instance.Delay.html#3683" class="Field">now-id</a> <a id="3690" class="Symbol">:</a> <a id="3692" href="Categories.Functor.Algebra.html#587" class="Function">α</a> <a id="3694" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="3696" href="Monad.Instance.Delay.html#1772" class="Function">now</a> <a id="3700" href="Categories.Category.Core.html#595" class="Function Operator"></a> <a id="3702" href="Monad.Instance.Delay.html#1102" class="Function">idC</a>
<a id="SearchAlgebra.later-same"></a><a id="3716" href="Monad.Instance.Delay.html#3716" class="Field">later-same</a> <a id="3727" class="Symbol">:</a> <a id="3729" href="Categories.Functor.Algebra.html#587" class="Function">α</a> <a id="3731" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="3733" href="Monad.Instance.Delay.html#1801" class="Function">later</a> <a id="3739" href="Categories.Category.Core.html#595" class="Function Operator"></a> <a id="3741" href="Categories.Functor.Algebra.html#587" class="Function">α</a>
</pre>
<h3
id="proposition-31-the-category-of-uniform-iteration-algebras-coincides-with-the-category-of-search-algebras">Proposition
31 : the category of uniform-iteration algebras coincides with the
category of search-algebras</h3>
<p>TODOs:</p>
<ul class="task-list">
<li><input type="checkbox" disabled="" />Define SearchAlgebras (and
SearchAlgebra morphisms)</li>
<li><input type="checkbox" disabled="" />show StrongEquivalence</li>
<li><input type="checkbox" disabled="" />Show
ElgotAlgebra⇔Search+<strong><em>D</em></strong></li>
</ul>
<pre class="Agda"> <a id="4007" class="Keyword">record</a> <a id="SearchAlgebras"></a><a id="4014" href="Monad.Instance.Delay.html#4014" class="Record">SearchAlgebras</a> <a id="4029" class="Symbol">(</a><a id="4030" href="Monad.Instance.Delay.html#4030" class="Bound">DF</a> <a id="4033" class="Symbol">:</a> <a id="4035" href="Monad.Instance.Delay.html#1627" class="Record">DelayFunctor</a><a id="4047" class="Symbol">)</a> <a id="4049" class="Symbol">:</a> <a id="4051" href="Agda.Primitive.html#320" class="Primitive">Set</a> <a id="4055" class="Symbol">(</a><a id="4056" href="Monad.Instance.Delay.html#982" class="Bound">o</a> <a id="4058" href="Agda.Primitive.html#804" class="Primitive Operator"></a> <a id="4060" href="Monad.Instance.Delay.html#984" class="Bound"></a> <a id="4062" href="Agda.Primitive.html#804" class="Primitive Operator"></a> <a id="4064" href="Monad.Instance.Delay.html#986" class="Bound">e</a><a id="4065" class="Symbol">)</a> <a id="4067" class="Keyword">where</a>
<a id="4077" class="Keyword">open</a> <a id="4082" href="Monad.Instance.Delay.html#1627" class="Module">DelayFunctor</a> <a id="4095" href="Monad.Instance.Delay.html#4030" class="Bound">DF</a>
</pre> </pre>
</body> </body>
</html> </html>

View file

@ -11,9 +11,11 @@
<a id="377" class="Keyword">open</a> <a id="382" class="Keyword">import</a> <a id="389" href="Categories.Category.Construction.F-Coalgebras.html" class="Module">Categories.Category.Construction.F-Coalgebras</a> <a id="377" class="Keyword">open</a> <a id="382" class="Keyword">import</a> <a id="389" href="Categories.Category.Construction.F-Coalgebras.html" class="Module">Categories.Category.Construction.F-Coalgebras</a>
<a id="435" class="Keyword">open</a> <a id="440" class="Keyword">import</a> <a id="447" href="Categories.Functor.Coalgebra.html" class="Module">Categories.Functor.Coalgebra</a> <a id="435" class="Keyword">open</a> <a id="440" class="Keyword">import</a> <a id="447" href="Categories.Functor.Coalgebra.html" class="Module">Categories.Functor.Coalgebra</a>
<a id="476" class="Keyword">open</a> <a id="481" class="Keyword">import</a> <a id="488" href="Categories.Functor.html" class="Module">Categories.Functor</a> <a id="476" class="Keyword">open</a> <a id="481" class="Keyword">import</a> <a id="488" href="Categories.Functor.html" class="Module">Categories.Functor</a>
<a id="507" class="Keyword">open</a> <a id="512" class="Keyword">import</a> <a id="519" href="Categories.Monad.Construction.Kleisli.html" class="Module">Categories.Monad.Construction.Kleisli</a> <a id="507" class="Keyword">open</a> <a id="512" class="Keyword">import</a> <a id="519" href="Categories.Functor.Algebra.html" class="Module">Categories.Functor.Algebra</a>
<a id="557" class="Keyword">import</a> <a id="564" href="Categories.Morphism.html" class="Module">Categories.Morphism</a> <a id="584" class="Symbol">as</a> <a id="587" class="Module">M</a> <a id="546" class="Keyword">open</a> <a id="551" class="Keyword">import</a> <a id="558" href="Categories.Monad.Construction.Kleisli.html" class="Module">Categories.Monad.Construction.Kleisli</a>
<a id="589" class="Keyword">import</a> <a id="596" href="Categories.Morphism.Reasoning.html" class="Module">Categories.Morphism.Reasoning</a> <a id="626" class="Symbol">as</a> <a id="629" class="Module">MR</a> <a id="596" class="Keyword">open</a> <a id="601" class="Keyword">import</a> <a id="608" href="Categories.Category.Construction.F-Coalgebras.html" class="Module">Categories.Category.Construction.F-Coalgebras</a>
<a id="654" class="Keyword">import</a> <a id="661" href="Categories.Morphism.html" class="Module">Categories.Morphism</a> <a id="681" class="Symbol">as</a> <a id="684" class="Module">M</a>
<a id="686" class="Keyword">import</a> <a id="693" href="Categories.Morphism.Reasoning.html" class="Module">Categories.Morphism.Reasoning</a> <a id="723" class="Symbol">as</a> <a id="726" class="Module">MR</a>
</pre>--> </pre>-->
## Summary ## Summary
@ -24,55 +26,102 @@ This file introduces the delay monad ***D***
## Code ## Code
<pre class="Agda"><a id="856" class="Keyword">module</a> <a id="863" href="Monad.Instance.Delay.html" class="Module">Monad.Instance.Delay</a> <a id="884" class="Symbol">{</a><a id="885" href="Monad.Instance.Delay.html#885" class="Bound">o</a> <a id="887" href="Monad.Instance.Delay.html#887" class="Bound"></a> <a id="889" href="Monad.Instance.Delay.html#889" class="Bound">e</a><a id="890" class="Symbol">}</a> <a id="892" class="Symbol">(</a><a id="893" href="Monad.Instance.Delay.html#893" class="Bound">ED</a> <a id="896" class="Symbol">:</a> <a id="898" href="Categories.Category.Extensive.Bundle.html#781" class="Record">ExtensiveDistributiveCategory</a> <a id="928" href="Monad.Instance.Delay.html#885" class="Bound">o</a> <a id="930" href="Monad.Instance.Delay.html#887" class="Bound"></a> <a id="932" href="Monad.Instance.Delay.html#889" class="Bound">e</a><a id="933" class="Symbol">)</a> <a id="935" class="Keyword">where</a> <pre class="Agda"><a id="953" class="Keyword">module</a> <a id="960" href="Monad.Instance.Delay.html" class="Module">Monad.Instance.Delay</a> <a id="981" class="Symbol">{</a><a id="982" href="Monad.Instance.Delay.html#982" class="Bound">o</a> <a id="984" href="Monad.Instance.Delay.html#984" class="Bound"></a> <a id="986" href="Monad.Instance.Delay.html#986" class="Bound">e</a><a id="987" class="Symbol">}</a> <a id="989" class="Symbol">(</a><a id="990" href="Monad.Instance.Delay.html#990" class="Bound">ED</a> <a id="993" class="Symbol">:</a> <a id="995" href="Categories.Category.Extensive.Bundle.html#781" class="Record">ExtensiveDistributiveCategory</a> <a id="1025" href="Monad.Instance.Delay.html#982" class="Bound">o</a> <a id="1027" href="Monad.Instance.Delay.html#984" class="Bound"></a> <a id="1029" href="Monad.Instance.Delay.html#986" class="Bound">e</a><a id="1030" class="Symbol">)</a> <a id="1032" class="Keyword">where</a>
<a id="943" class="Keyword">open</a> <a id="948" href="Categories.Category.Extensive.Bundle.html#781" class="Module">ExtensiveDistributiveCategory</a> <a id="978" href="Monad.Instance.Delay.html#893" class="Bound">ED</a> <a id="981" class="Keyword">renaming</a> <a id="990" class="Symbol">(</a><a id="991" href="Categories.Category.Extensive.Bundle.html#859" class="Field">U</a> <a id="993" class="Symbol">to</a> <a id="996" class="Field">C</a><a id="997" class="Symbol">;</a> <a id="999" href="Categories.Category.Core.html#630" class="Function">id</a> <a id="1002" class="Symbol">to</a> <a id="1005" class="Function">idC</a><a id="1008" class="Symbol">)</a> <a id="1040" class="Keyword">open</a> <a id="1045" href="Categories.Category.Extensive.Bundle.html#781" class="Module">ExtensiveDistributiveCategory</a> <a id="1075" href="Monad.Instance.Delay.html#990" class="Bound">ED</a> <a id="1078" class="Keyword">renaming</a> <a id="1087" class="Symbol">(</a><a id="1088" href="Categories.Category.Extensive.Bundle.html#859" class="Field">U</a> <a id="1090" class="Symbol">to</a> <a id="1093" class="Field">C</a><a id="1094" class="Symbol">;</a> <a id="1096" href="Categories.Category.Core.html#630" class="Function">id</a> <a id="1099" class="Symbol">to</a> <a id="1102" class="Function">idC</a><a id="1105" class="Symbol">)</a>
<a id="1012" class="Keyword">open</a> <a id="1017" href="Categories.Category.Cocartesian.html#3385" class="Module">Cocartesian</a> <a id="1029" class="Symbol">(</a><a id="1030" href="Categories.Category.Extensive.html#734" class="Field">Extensive.cocartesian</a> <a id="1052" href="Categories.Category.Extensive.Bundle.html#913" class="Field">extensive</a><a id="1061" class="Symbol">)</a> <a id="1109" class="Keyword">open</a> <a id="1114" href="Categories.Category.Cocartesian.html#3385" class="Module">Cocartesian</a> <a id="1126" class="Symbol">(</a><a id="1127" href="Categories.Category.Extensive.html#734" class="Field">Extensive.cocartesian</a> <a id="1149" href="Categories.Category.Extensive.Bundle.html#913" class="Field">extensive</a><a id="1158" class="Symbol">)</a>
<a id="1065" class="Keyword">open</a> <a id="1070" href="Categories.Category.Cartesian.html#727" class="Module">Cartesian</a> <a id="1080" class="Symbol">(</a><a id="1081" href="Categories.Category.Extensive.Bundle.html#943" class="Field">ExtensiveDistributiveCategory.cartesian</a> <a id="1121" href="Monad.Instance.Delay.html#893" class="Bound">ED</a><a id="1123" class="Symbol">)</a> <a id="1162" class="Keyword">open</a> <a id="1167" href="Categories.Category.Cartesian.html#727" class="Module">Cartesian</a> <a id="1177" class="Symbol">(</a><a id="1178" href="Categories.Category.Extensive.Bundle.html#943" class="Field">ExtensiveDistributiveCategory.cartesian</a> <a id="1218" href="Monad.Instance.Delay.html#990" class="Bound">ED</a><a id="1220" class="Symbol">)</a>
<a id="1127" class="Keyword">open</a> <a id="1132" href="Categories.Category.BinaryProducts.html#812" class="Module">BinaryProducts</a> <a id="1147" href="Categories.Category.Cartesian.html#801" class="Function">products</a> <a id="1224" class="Keyword">open</a> <a id="1229" href="Categories.Category.BinaryProducts.html#812" class="Module">BinaryProducts</a> <a id="1244" href="Categories.Category.Cartesian.html#801" class="Function">products</a>
<a id="1159" class="Keyword">open</a> <a id="1164" href="Categories.Morphism.html" class="Module">M</a> <a id="1166" href="Monad.Instance.Delay.html#996" class="Field">C</a> <a id="1256" class="Keyword">open</a> <a id="1261" href="Categories.Morphism.html" class="Module">M</a> <a id="1263" href="Monad.Instance.Delay.html#1093" class="Field">C</a>
<a id="1170" class="Keyword">open</a> <a id="1175" href="Categories.Morphism.Reasoning.html" class="Module">MR</a> <a id="1178" href="Monad.Instance.Delay.html#996" class="Field">C</a> <a id="1267" class="Keyword">open</a> <a id="1272" href="Categories.Morphism.Reasoning.html" class="Module">MR</a> <a id="1275" href="Monad.Instance.Delay.html#1093" class="Field">C</a>
<a id="1182" class="Keyword">open</a> <a id="1187" href="Categories.Category.Core.html#1530" class="Module">Equiv</a> <a id="1279" class="Keyword">open</a> <a id="1284" href="Categories.Category.Core.html#1530" class="Module">Equiv</a>
<a id="1195" class="Keyword">open</a> <a id="1200" href="Categories.Category.Core.html#2462" class="Module">HomReasoning</a> <a id="1292" class="Keyword">open</a> <a id="1297" href="Categories.Category.Core.html#2462" class="Module">HomReasoning</a>
<a id="1312" class="Keyword">open</a> <a id="1317" href="Categories.Category.Construction.F-Coalgebras.html#2828" class="Module">CoLambek</a>
</pre>### *Proposition 1*: Characterization of the delay monad ***D*** </pre>### *Proposition 1*: Characterization of the delay monad ***D***
<pre class="Agda"> <a id="1292" class="Keyword">record</a> <a id="DelayMonad"></a><a id="1299" href="Monad.Instance.Delay.html#1299" class="Record">DelayMonad</a> <a id="1310" class="Symbol">(</a><a id="1311" href="Monad.Instance.Delay.html#1311" class="Bound">D</a> <a id="1313" class="Symbol">:</a> <a id="1315" href="Categories.Functor.html#283" class="Function">Endofunctor</a> <a id="1327" href="Monad.Instance.Delay.html#996" class="Field">C</a><a id="1328" class="Symbol">)</a> <a id="1330" class="Symbol">:</a> <a id="1332" href="Agda.Primitive.html#320" class="Primitive">Set</a> <a id="1336" class="Symbol">(</a><a id="1337" href="Monad.Instance.Delay.html#885" class="Bound">o</a> <a id="1339" href="Agda.Primitive.html#804" class="Primitive Operator"></a> <a id="1341" href="Monad.Instance.Delay.html#887" class="Bound"></a> <a id="1343" href="Agda.Primitive.html#804" class="Primitive Operator"></a> <a id="1345" href="Monad.Instance.Delay.html#889" class="Bound">e</a><a id="1346" class="Symbol">)</a> <a id="1348" class="Keyword">where</a>
<a id="1358" class="Keyword">open</a> <a id="1363" href="Categories.Functor.Core.html#248" class="Module">Functor</a> <a id="1371" href="Monad.Instance.Delay.html#1311" class="Bound">D</a> <a id="1373" class="Keyword">using</a> <a id="1379" class="Symbol">()</a> <a id="1382" class="Keyword">renaming</a> <a id="1391" class="Symbol">(</a><a id="1392" href="Categories.Functor.Core.html#432" class="Field">F₀</a> <a id="1395" class="Symbol">to</a> <a id="1398" class="Field">D₀</a><a id="1400" class="Symbol">;</a> <a id="1402" href="Categories.Functor.Core.html#455" class="Field">F₁</a> <a id="1405" class="Symbol">to</a> <a id="1408" class="Field">D₁</a><a id="1410" class="Symbol">)</a>
<a id="1417" class="Keyword">field</a> First I postulate the Functor *D*, maybe I should derive it...
<a id="DelayMonad.now"></a><a id="1429" href="Monad.Instance.Delay.html#1429" class="Field">now</a> <a id="1433" class="Symbol">:</a> <a id="1435" class="Symbol"></a> <a id="1437" class="Symbol">{</a><a id="1438" href="Monad.Instance.Delay.html#1438" class="Bound">X</a><a id="1439" class="Symbol">}</a> <a id="1441" class="Symbol"></a> <a id="1443" href="Monad.Instance.Delay.html#1438" class="Bound">X</a> <a id="1445" href="Categories.Category.Core.html#575" class="Function Operator"></a> <a id="1447" href="Monad.Instance.Delay.html#1398" class="Function">D₀</a> <a id="1450" href="Monad.Instance.Delay.html#1438" class="Bound">X</a> **TODO**:
<a id="DelayMonad.later"></a><a id="1458" href="Monad.Instance.Delay.html#1458" class="Field">later</a> <a id="1464" class="Symbol">:</a> <a id="1466" class="Symbol"></a> <a id="1468" class="Symbol">{</a><a id="1469" href="Monad.Instance.Delay.html#1469" class="Bound">X</a><a id="1470" class="Symbol">}</a> <a id="1472" class="Symbol"></a> <a id="1474" href="Monad.Instance.Delay.html#1398" class="Function">D₀</a> <a id="1477" href="Monad.Instance.Delay.html#1469" class="Bound">X</a> <a id="1479" href="Categories.Category.Core.html#575" class="Function Operator"></a> <a id="1481" href="Monad.Instance.Delay.html#1398" class="Function">D₀</a> <a id="1484" href="Monad.Instance.Delay.html#1469" class="Bound">X</a> - how to define using final coalgebra(s)?
<a id="DelayMonad.isIso"></a><a id="1492" href="Monad.Instance.Delay.html#1492" class="Field">isIso</a> <a id="1498" class="Symbol">:</a> <a id="1500" class="Symbol"></a> <a id="1502" class="Symbol">{</a><a id="1503" href="Monad.Instance.Delay.html#1503" class="Bound">X</a><a id="1504" class="Symbol">}</a> <a id="1506" class="Symbol"></a> <a id="1508" href="Categories.Morphism.html#1826" class="Record">IsIso</a> <a id="1514" href="Categories.Object.Coproduct.html#532" class="Function Operator">[</a> <a id="1516" href="Monad.Instance.Delay.html#1429" class="Field">now</a> <a id="1520" class="Symbol">{</a><a id="1521" href="Monad.Instance.Delay.html#1503" class="Bound">X</a><a id="1522" class="Symbol">}</a> <a id="1524" href="Categories.Object.Coproduct.html#532" class="Function Operator">,</a> <a id="1526" href="Monad.Instance.Delay.html#1458" class="Field">later</a> <a id="1532" class="Symbol">{</a><a id="1533" href="Monad.Instance.Delay.html#1503" class="Bound">X</a><a id="1534" class="Symbol">}</a> <a id="1536" href="Categories.Object.Coproduct.html#532" class="Function Operator">]</a> - DX can be defined as retract of infinite streams, how?
- how to express **Theorem 8** in agda?
<a id="DelayMonad.out"></a><a id="1547" href="Monad.Instance.Delay.html#1547" class="Function">out</a> <a id="1551" class="Symbol">:</a> <a id="1553" class="Symbol"></a> <a id="1555" class="Symbol">{</a><a id="1556" href="Monad.Instance.Delay.html#1556" class="Bound">X</a><a id="1557" class="Symbol">}</a> <a id="1559" class="Symbol"></a> <a id="1561" href="Monad.Instance.Delay.html#1398" class="Function">D₀</a> <a id="1564" href="Monad.Instance.Delay.html#1556" class="Bound">X</a> <a id="1566" href="Categories.Category.Core.html#575" class="Function Operator"></a> <a id="1568" href="Monad.Instance.Delay.html#1556" class="Bound">X</a> <a id="1570" href="Categories.Category.Cocartesian.html#1549" class="Function Operator">+</a> <a id="1572" href="Monad.Instance.Delay.html#1398" class="Function">D₀</a> <a id="1575" href="Monad.Instance.Delay.html#1556" class="Bound">X</a> <pre class="Agda"> <a id="1620" class="Keyword">record</a> <a id="DelayFunctor"></a><a id="1627" href="Monad.Instance.Delay.html#1627" class="Record">DelayFunctor</a> <a id="1640" class="Symbol">:</a> <a id="1642" href="Agda.Primitive.html#320" class="Primitive">Set</a> <a id="1646" class="Symbol">(</a><a id="1647" href="Monad.Instance.Delay.html#982" class="Bound">o</a> <a id="1649" href="Agda.Primitive.html#804" class="Primitive Operator"></a> <a id="1651" href="Monad.Instance.Delay.html#984" class="Bound"></a> <a id="1653" href="Agda.Primitive.html#804" class="Primitive Operator"></a> <a id="1655" href="Monad.Instance.Delay.html#986" class="Bound">e</a><a id="1656" class="Symbol">)</a> <a id="1658" class="Keyword">where</a>
<a id="1581" href="Monad.Instance.Delay.html#1547" class="Function">out</a> <a id="1585" class="Symbol">{</a><a id="1586" href="Monad.Instance.Delay.html#1586" class="Bound">X</a><a id="1587" class="Symbol">}</a> <a id="1589" class="Symbol">=</a> <a id="1591" href="Categories.Morphism.html#1879" class="Field">IsIso.inv</a> <a id="1601" class="Symbol">(</a><a id="1602" href="Monad.Instance.Delay.html#1492" class="Field">isIso</a> <a id="1608" class="Symbol">{</a><a id="1609" href="Monad.Instance.Delay.html#1586" class="Bound">X</a><a id="1610" class="Symbol">})</a> <a id="1668" class="Keyword">field</a>
<a id="DelayFunctor.D"></a><a id="1680" href="Monad.Instance.Delay.html#1680" class="Field">D</a> <a id="1682" class="Symbol">:</a> <a id="1684" href="Categories.Functor.html#283" class="Function">Endofunctor</a> <a id="1696" href="Monad.Instance.Delay.html#1093" class="Field">C</a>
<a id="1618" class="Keyword">field</a> <a id="1703" class="Keyword">open</a> <a id="1708" href="Categories.Functor.Core.html#248" class="Module">Functor</a> <a id="1716" href="Monad.Instance.Delay.html#1680" class="Field">D</a> <a id="1718" class="Keyword">public</a> <a id="1725" class="Keyword">renaming</a> <a id="1734" class="Symbol">(</a><a id="1735" href="Categories.Functor.Core.html#432" class="Field">F₀</a> <a id="1738" class="Symbol">to</a> <a id="1741" class="Field">D₀</a><a id="1743" class="Symbol">;</a> <a id="1745" href="Categories.Functor.Core.html#455" class="Field">F₁</a> <a id="1748" class="Symbol">to</a> <a id="1751" class="Field">D₁</a><a id="1753" class="Symbol">)</a>
<a id="DelayMonad._*"></a><a id="1630" href="Monad.Instance.Delay.html#1630" class="Field Operator">_*</a> <a id="1633" class="Symbol">:</a> <a id="1635" class="Symbol"></a> <a id="1637" class="Symbol">{</a><a id="1638" href="Monad.Instance.Delay.html#1638" class="Bound">X</a> <a id="1640" href="Monad.Instance.Delay.html#1640" class="Bound">Y</a><a id="1641" class="Symbol">}</a> <a id="1643" class="Symbol"></a> <a id="1645" href="Monad.Instance.Delay.html#1638" class="Bound">X</a> <a id="1647" href="Categories.Category.Core.html#575" class="Function Operator"></a> <a id="1649" href="Monad.Instance.Delay.html#1398" class="Function">D₀</a> <a id="1652" href="Monad.Instance.Delay.html#1640" class="Bound">Y</a> <a id="1654" class="Symbol"></a> <a id="1656" href="Monad.Instance.Delay.html#1398" class="Function">D₀</a> <a id="1659" href="Monad.Instance.Delay.html#1638" class="Bound">X</a> <a id="1661" href="Categories.Category.Core.html#575" class="Function Operator"></a> <a id="1663" href="Monad.Instance.Delay.html#1398" class="Function">D₀</a> <a id="1666" href="Monad.Instance.Delay.html#1640" class="Bound">Y</a>
<a id="DelayMonad.*-law"></a><a id="1674" href="Monad.Instance.Delay.html#1674" class="Field">*-law</a> <a id="1680" class="Symbol">:</a> <a id="1682" class="Symbol"></a> <a id="1684" class="Symbol">{</a><a id="1685" href="Monad.Instance.Delay.html#1685" class="Bound">X</a> <a id="1687" href="Monad.Instance.Delay.html#1687" class="Bound">Y</a><a id="1688" class="Symbol">}</a> <a id="1690" class="Symbol">{</a><a id="1691" href="Monad.Instance.Delay.html#1691" class="Bound">f</a> <a id="1693" class="Symbol">:</a> <a id="1695" href="Monad.Instance.Delay.html#1685" class="Bound">X</a> <a id="1697" href="Categories.Category.Core.html#575" class="Function Operator"></a> <a id="1699" href="Monad.Instance.Delay.html#1398" class="Function">D₀</a> <a id="1702" href="Monad.Instance.Delay.html#1687" class="Bound">Y</a><a id="1703" class="Symbol">}</a> <a id="1705" class="Symbol"></a> <a id="1707" href="Monad.Instance.Delay.html#1547" class="Function">out</a> <a id="1711" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="1713" class="Symbol">(</a><a id="1714" href="Monad.Instance.Delay.html#1691" class="Bound">f</a> <a id="1716" href="Monad.Instance.Delay.html#1630" class="Field Operator">*</a><a id="1717" class="Symbol">)</a> <a id="1719" href="Categories.Category.Core.html#595" class="Function Operator"></a> <a id="1721" href="Categories.Object.Coproduct.html#532" class="Function Operator">[</a> <a id="1723" href="Monad.Instance.Delay.html#1547" class="Function">out</a> <a id="1727" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="1729" href="Monad.Instance.Delay.html#1691" class="Bound">f</a> <a id="1731" href="Categories.Object.Coproduct.html#532" class="Function Operator">,</a> <a id="1733" href="Categories.Object.Coproduct.html#512" class="Function">i₂</a> <a id="1736" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="1738" class="Symbol">(</a><a id="1739" href="Monad.Instance.Delay.html#1691" class="Bound">f</a> <a id="1741" href="Monad.Instance.Delay.html#1630" class="Field Operator">*</a><a id="1742" class="Symbol">)</a> <a id="1744" href="Categories.Object.Coproduct.html#532" class="Function Operator">]</a> <a id="1746" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="1748" href="Monad.Instance.Delay.html#1547" class="Function">out</a>
<a id="DelayMonad.*-unique"></a><a id="1758" href="Monad.Instance.Delay.html#1758" class="Field">*-unique</a> <a id="1767" class="Symbol">:</a> <a id="1769" class="Symbol"></a> <a id="1771" class="Symbol">{</a><a id="1772" href="Monad.Instance.Delay.html#1772" class="Bound">X</a> <a id="1774" href="Monad.Instance.Delay.html#1774" class="Bound">Y</a><a id="1775" class="Symbol">}</a> <a id="1777" class="Symbol">(</a><a id="1778" href="Monad.Instance.Delay.html#1778" class="Bound">f</a> <a id="1780" class="Symbol">:</a> <a id="1782" href="Monad.Instance.Delay.html#1772" class="Bound">X</a> <a id="1784" href="Categories.Category.Core.html#575" class="Function Operator"></a> <a id="1786" href="Monad.Instance.Delay.html#1398" class="Function">D₀</a> <a id="1789" href="Monad.Instance.Delay.html#1774" class="Bound">Y</a><a id="1790" class="Symbol">)</a> <a id="1792" class="Symbol">(</a><a id="1793" href="Monad.Instance.Delay.html#1793" class="Bound">h</a> <a id="1795" class="Symbol">:</a> <a id="1797" href="Monad.Instance.Delay.html#1398" class="Function">D₀</a> <a id="1800" href="Monad.Instance.Delay.html#1772" class="Bound">X</a> <a id="1802" href="Categories.Category.Core.html#575" class="Function Operator"></a> <a id="1804" href="Monad.Instance.Delay.html#1398" class="Function">D₀</a> <a id="1807" href="Monad.Instance.Delay.html#1774" class="Bound">Y</a><a id="1808" class="Symbol">)</a> <a id="1810" class="Symbol"></a> <a id="1812" href="Monad.Instance.Delay.html#1793" class="Bound">h</a> <a id="1814" href="Categories.Category.Core.html#595" class="Function Operator"></a> <a id="1816" href="Monad.Instance.Delay.html#1778" class="Bound">f</a> <a id="1818" href="Monad.Instance.Delay.html#1630" class="Field Operator">*</a>
<a id="DelayMonad.*-resp-≈"></a><a id="1826" href="Monad.Instance.Delay.html#1826" class="Field">*-resp-≈</a> <a id="1835" class="Symbol">:</a> <a id="1837" class="Symbol"></a> <a id="1839" class="Symbol">{</a><a id="1840" href="Monad.Instance.Delay.html#1840" class="Bound">X</a> <a id="1842" href="Monad.Instance.Delay.html#1842" class="Bound">Y</a><a id="1843" class="Symbol">}</a> <a id="1845" class="Symbol">{</a><a id="1846" href="Monad.Instance.Delay.html#1846" class="Bound">f</a> <a id="1848" href="Monad.Instance.Delay.html#1848" class="Bound">h</a> <a id="1850" class="Symbol">:</a> <a id="1852" href="Monad.Instance.Delay.html#1840" class="Bound">X</a> <a id="1854" href="Categories.Category.Core.html#575" class="Function Operator"></a> <a id="1856" href="Monad.Instance.Delay.html#1398" class="Function">D₀</a> <a id="1859" href="Monad.Instance.Delay.html#1842" class="Bound">Y</a><a id="1860" class="Symbol">}</a> <a id="1862" class="Symbol"></a> <a id="1864" href="Monad.Instance.Delay.html#1846" class="Bound">f</a> <a id="1866" href="Categories.Category.Core.html#595" class="Function Operator"></a> <a id="1868" href="Monad.Instance.Delay.html#1848" class="Bound">h</a> <a id="1870" class="Symbol"></a> <a id="1872" href="Monad.Instance.Delay.html#1846" class="Bound">f</a> <a id="1874" href="Monad.Instance.Delay.html#1630" class="Field Operator">*</a> <a id="1876" href="Categories.Category.Core.html#595" class="Function Operator"></a> <a id="1878" href="Monad.Instance.Delay.html#1848" class="Bound">h</a> <a id="1880" href="Monad.Instance.Delay.html#1630" class="Field Operator">*</a>
<a id="DelayMonad.unitLaw"></a><a id="1888" href="Monad.Instance.Delay.html#1888" class="Function">unitLaw</a> <a id="1896" class="Symbol">:</a> <a id="1898" class="Symbol"></a> <a id="1900" class="Symbol">{</a><a id="1901" href="Monad.Instance.Delay.html#1901" class="Bound">X</a><a id="1902" class="Symbol">}</a> <a id="1904" class="Symbol"></a> <a id="1906" href="Monad.Instance.Delay.html#1547" class="Function">out</a> <a id="1910" class="Symbol">{</a><a id="1911" href="Monad.Instance.Delay.html#1901" class="Bound">X</a><a id="1912" class="Symbol">}</a> <a id="1914" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="1916" href="Monad.Instance.Delay.html#1429" class="Field">now</a> <a id="1920" class="Symbol">{</a><a id="1921" href="Monad.Instance.Delay.html#1901" class="Bound">X</a><a id="1922" class="Symbol">}</a> <a id="1924" href="Categories.Category.Core.html#595" class="Function Operator"></a> <a id="1926" href="Categories.Object.Coproduct.html#492" class="Function">i₁</a> <a id="1760" class="Keyword">field</a>
<a id="1933" href="Monad.Instance.Delay.html#1888" class="Function">unitLaw</a> <a id="1941" class="Symbol">=</a> <a id="1943" href="Relation.Binary.Reasoning.Base.Single.html#1925" class="Function Operator">begin</a> <a id="DelayFunctor.now"></a><a id="1772" href="Monad.Instance.Delay.html#1772" class="Field">now</a> <a id="1776" class="Symbol">:</a> <a id="1778" class="Symbol"></a> <a id="1780" class="Symbol">{</a><a id="1781" href="Monad.Instance.Delay.html#1781" class="Bound">X</a><a id="1782" class="Symbol">}</a> <a id="1784" class="Symbol"></a> <a id="1786" href="Monad.Instance.Delay.html#1781" class="Bound">X</a> <a id="1788" href="Categories.Category.Core.html#575" class="Function Operator"></a> <a id="1790" href="Monad.Instance.Delay.html#1741" class="Function">D₀</a> <a id="1793" href="Monad.Instance.Delay.html#1781" class="Bound">X</a>
<a id="1956" href="Monad.Instance.Delay.html#1547" class="Function">out</a> <a id="1960" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="1962" href="Monad.Instance.Delay.html#1429" class="Field">now</a> <a id="1966" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function">≈⟨</a> <a id="1969" href="Categories.Category.Core.html#2734" class="Function Operator">refl⟩∘⟨</a> <a id="1977" href="Relation.Binary.Structures.html#1603" class="Function">sym</a> <a id="1981" href="Categories.Object.Coproduct.html#569" class="Function">inject₁</a> <a id="1989" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function"></a> <a id="DelayFunctor.later"></a><a id="1801" href="Monad.Instance.Delay.html#1801" class="Field">later</a> <a id="1807" class="Symbol">:</a> <a id="1809" class="Symbol"></a> <a id="1811" class="Symbol">{</a><a id="1812" href="Monad.Instance.Delay.html#1812" class="Bound">X</a><a id="1813" class="Symbol">}</a> <a id="1815" class="Symbol"></a> <a id="1817" href="Monad.Instance.Delay.html#1741" class="Function">D₀</a> <a id="1820" href="Monad.Instance.Delay.html#1812" class="Bound">X</a> <a id="1822" href="Categories.Category.Core.html#575" class="Function Operator"></a> <a id="1824" href="Monad.Instance.Delay.html#1741" class="Function">D₀</a> <a id="1827" href="Monad.Instance.Delay.html#1812" class="Bound">X</a>
<a id="1998" href="Monad.Instance.Delay.html#1547" class="Function">out</a> <a id="2002" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="2004" href="Categories.Object.Coproduct.html#532" class="Function Operator">[</a> <a id="2006" href="Monad.Instance.Delay.html#1429" class="Field">now</a> <a id="2010" href="Categories.Object.Coproduct.html#532" class="Function Operator">,</a> <a id="2012" href="Monad.Instance.Delay.html#1458" class="Field">later</a> <a id="2018" href="Categories.Object.Coproduct.html#532" class="Function Operator">]</a> <a id="2020" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="2022" href="Categories.Object.Coproduct.html#492" class="Function">i₁</a> <a id="2025" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function">≈⟨</a> <a id="2028" href="Categories.Morphism.Reasoning.Core.html#6851" class="Function">cancelˡ</a> <a id="2036" class="Symbol">(</a><a id="2037" href="Categories.Morphism.html#1586" class="Function">IsIso.isoˡ</a> <a id="2048" href="Monad.Instance.Delay.html#1492" class="Field">isIso</a><a id="2053" class="Symbol">)</a> <a id="2055" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function"></a> <a id="DelayFunctor.isIso"></a><a id="1835" href="Monad.Instance.Delay.html#1835" class="Field">isIso</a> <a id="1841" class="Symbol">:</a> <a id="1843" class="Symbol"></a> <a id="1845" class="Symbol">{</a><a id="1846" href="Monad.Instance.Delay.html#1846" class="Bound">X</a><a id="1847" class="Symbol">}</a> <a id="1849" class="Symbol"></a> <a id="1851" href="Categories.Morphism.html#1826" class="Record">IsIso</a> <a id="1857" href="Categories.Object.Coproduct.html#532" class="Function Operator">[</a> <a id="1859" href="Monad.Instance.Delay.html#1772" class="Field">now</a> <a id="1863" class="Symbol">{</a><a id="1864" href="Monad.Instance.Delay.html#1846" class="Bound">X</a><a id="1865" class="Symbol">}</a> <a id="1867" href="Categories.Object.Coproduct.html#532" class="Function Operator">,</a> <a id="1869" href="Monad.Instance.Delay.html#1801" class="Field">later</a> <a id="1875" class="Symbol">{</a><a id="1876" href="Monad.Instance.Delay.html#1846" class="Bound">X</a><a id="1877" class="Symbol">}</a> <a id="1879" href="Categories.Object.Coproduct.html#532" class="Function Operator">]</a>
<a id="2063" href="Categories.Object.Coproduct.html#492" class="Function">i₁</a> <a id="2066" href="Relation.Binary.Reasoning.Base.Single.html#2564" class="Function Operator"></a>
<a id="DelayMonad.toMonad"></a><a id="2073" href="Monad.Instance.Delay.html#2073" class="Function">toMonad</a> <a id="2081" class="Symbol">:</a> <a id="2083" href="Categories.Monad.Construction.Kleisli.html#882" class="Function">KleisliTriple</a> <a id="2097" href="Monad.Instance.Delay.html#996" class="Field">C</a> <a id="DelayFunctor.out"></a><a id="1886" href="Monad.Instance.Delay.html#1886" class="Function">out</a> <a id="1890" class="Symbol">:</a> <a id="1892" class="Symbol"></a> <a id="1894" class="Symbol">{</a><a id="1895" href="Monad.Instance.Delay.html#1895" class="Bound">X</a><a id="1896" class="Symbol">}</a> <a id="1898" class="Symbol"></a> <a id="1900" href="Monad.Instance.Delay.html#1741" class="Function">D₀</a> <a id="1903" href="Monad.Instance.Delay.html#1895" class="Bound">X</a> <a id="1905" href="Categories.Category.Core.html#575" class="Function Operator"></a> <a id="1907" href="Monad.Instance.Delay.html#1895" class="Bound">X</a> <a id="1909" href="Categories.Category.Cocartesian.html#1549" class="Function Operator">+</a> <a id="1911" href="Monad.Instance.Delay.html#1741" class="Function">D₀</a> <a id="1914" href="Monad.Instance.Delay.html#1895" class="Bound">X</a>
<a id="2103" href="Monad.Instance.Delay.html#2073" class="Function">toMonad</a> <a id="2111" class="Symbol">=</a> <a id="2113" class="Keyword">record</a> <a id="1920" href="Monad.Instance.Delay.html#1886" class="Function">out</a> <a id="1924" class="Symbol">{</a><a id="1925" href="Monad.Instance.Delay.html#1925" class="Bound">X</a><a id="1926" class="Symbol">}</a> <a id="1928" class="Symbol">=</a> <a id="1930" href="Categories.Morphism.html#1879" class="Field">IsIso.inv</a> <a id="1940" class="Symbol">(</a><a id="1941" href="Monad.Instance.Delay.html#1835" class="Field">isIso</a> <a id="1947" class="Symbol">{</a><a id="1948" href="Monad.Instance.Delay.html#1925" class="Bound">X</a><a id="1949" class="Symbol">})</a>
<a id="2126" class="Symbol">{</a> <a id="2128" href="Categories.Monad.Relative.html#834" class="Field">F₀</a> <a id="2131" class="Symbol">=</a> <a id="2133" href="Monad.Instance.Delay.html#1398" class="Function">D₀</a>
<a id="2142" class="Symbol">;</a> <a id="2144" href="Categories.Monad.Relative.html#857" class="Field">unit</a> <a id="2149" class="Symbol">=</a> <a id="2151" href="Monad.Instance.Delay.html#1429" class="Field">now</a> <a id="1957" class="Keyword">field</a>
<a id="2161" class="Symbol">;</a> <a id="2163" href="Categories.Monad.Relative.html#895" class="Field">extend</a> <a id="2170" class="Symbol">=</a> <a id="2172" href="Monad.Instance.Delay.html#1630" class="Field Operator">_*</a> <a id="DelayFunctor.coit"></a><a id="1969" href="Monad.Instance.Delay.html#1969" class="Field">coit</a> <a id="1974" class="Symbol">:</a> <a id="1976" class="Symbol"></a> <a id="1978" class="Symbol">{</a><a id="1979" href="Monad.Instance.Delay.html#1979" class="Bound">X</a> <a id="1981" href="Monad.Instance.Delay.html#1981" class="Bound">Y</a><a id="1982" class="Symbol">}</a> <a id="1984" class="Symbol"></a> <a id="1986" href="Monad.Instance.Delay.html#1981" class="Bound">Y</a> <a id="1988" href="Categories.Category.Core.html#575" class="Function Operator"></a> <a id="1990" href="Monad.Instance.Delay.html#1979" class="Bound">X</a> <a id="1992" href="Categories.Category.Cocartesian.html#1549" class="Function Operator">+</a> <a id="1994" href="Monad.Instance.Delay.html#1981" class="Bound">Y</a> <a id="1996" class="Symbol"></a> <a id="1998" href="Monad.Instance.Delay.html#1981" class="Bound">Y</a> <a id="2000" href="Categories.Category.Core.html#575" class="Function Operator"></a> <a id="2002" href="Monad.Instance.Delay.html#1741" class="Function">D₀</a> <a id="2005" href="Monad.Instance.Delay.html#1979" class="Bound">X</a>
<a id="2181" class="Symbol">;</a> <a id="2183" href="Categories.Monad.Relative.html#953" class="Field">identityʳ</a> <a id="2193" class="Symbol">=</a> <a id="2195" class="Symbol">λ</a> <a id="2197" class="Symbol">{</a><a id="2198" href="Monad.Instance.Delay.html#2198" class="Bound">X</a><a id="2199" class="Symbol">}</a> <a id="2201" class="Symbol">{</a><a id="2202" href="Monad.Instance.Delay.html#2202" class="Bound">Y</a><a id="2203" class="Symbol">}</a> <a id="2205" class="Symbol">{</a><a id="2206" href="Monad.Instance.Delay.html#2206" class="Bound">k</a><a id="2207" class="Symbol">}</a> <a id="2209" class="Symbol"></a> <a id="2211" href="Relation.Binary.Reasoning.Base.Single.html#1925" class="Function Operator">begin</a> <a id="DelayFunctor.coit-law"></a><a id="2013" href="Monad.Instance.Delay.html#2013" class="Field">coit-law</a> <a id="2022" class="Symbol">:</a> <a id="2024" class="Symbol"></a> <a id="2026" class="Symbol">{</a><a id="2027" href="Monad.Instance.Delay.html#2027" class="Bound">X</a> <a id="2029" href="Monad.Instance.Delay.html#2029" class="Bound">Y</a><a id="2030" class="Symbol">}</a> <a id="2032" class="Symbol">{</a><a id="2033" href="Monad.Instance.Delay.html#2033" class="Bound">f</a> <a id="2035" class="Symbol">:</a> <a id="2037" href="Monad.Instance.Delay.html#2029" class="Bound">Y</a> <a id="2039" href="Categories.Category.Core.html#575" class="Function Operator"></a> <a id="2041" href="Monad.Instance.Delay.html#2027" class="Bound">X</a> <a id="2043" href="Categories.Category.Cocartesian.html#1549" class="Function Operator">+</a> <a id="2045" href="Monad.Instance.Delay.html#2029" class="Bound">Y</a><a id="2046" class="Symbol">}</a> <a id="2048" class="Symbol"></a> <a id="2050" href="Monad.Instance.Delay.html#1886" class="Function">out</a> <a id="2054" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="2056" class="Symbol">(</a><a id="2057" href="Monad.Instance.Delay.html#1969" class="Field">coit</a> <a id="2062" href="Monad.Instance.Delay.html#2033" class="Bound">f</a><a id="2063" class="Symbol">)</a> <a id="2065" href="Categories.Category.Core.html#595" class="Function Operator"></a> <a id="2067" class="Symbol">(</a><a id="2068" href="Monad.Instance.Delay.html#1102" class="Function">idC</a> <a id="2072" href="Categories.Category.Cocartesian.html#2133" class="Function Operator">+₁</a> <a id="2075" class="Symbol">(</a><a id="2076" href="Monad.Instance.Delay.html#1969" class="Field">coit</a> <a id="2081" href="Monad.Instance.Delay.html#2033" class="Bound">f</a><a id="2082" class="Symbol">))</a> <a id="2085" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="2087" href="Monad.Instance.Delay.html#2033" class="Bound">f</a>
<a id="2226" href="Monad.Instance.Delay.html#2206" class="Bound">k</a> <a id="2228" href="Monad.Instance.Delay.html#1630" class="Field Operator">*</a> <a id="2230" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="2232" href="Monad.Instance.Delay.html#1429" class="Field">now</a> <a id="2236" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function">≈⟨</a> <a id="2239" href="Categories.Morphism.Reasoning.Core.html#3063" class="Function">introˡ</a> <a id="2246" class="Symbol">(</a><a id="2247" href="Categories.Morphism.html#1612" class="Function">IsIso.isoʳ</a> <a id="2258" href="Monad.Instance.Delay.html#1492" class="Field">isIso</a><a id="2263" class="Symbol">)</a> <a id="2265" href="Categories.Category.Core.html#2837" class="Function Operator">⟩∘⟨refl</a> <a id="2273" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function"></a> </pre>
<a id="2284" class="Symbol">((</a><a id="2286" href="Categories.Object.Coproduct.html#532" class="Function Operator">[</a> <a id="2288" href="Monad.Instance.Delay.html#1429" class="Field">now</a> <a id="2292" href="Categories.Object.Coproduct.html#532" class="Function Operator">,</a> <a id="2294" href="Monad.Instance.Delay.html#1458" class="Field">later</a> <a id="2300" href="Categories.Object.Coproduct.html#532" class="Function Operator">]</a> <a id="2302" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="2304" href="Monad.Instance.Delay.html#1547" class="Function">out</a><a id="2307" class="Symbol">)</a> <a id="2309" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="2311" href="Monad.Instance.Delay.html#2206" class="Bound">k</a> <a id="2313" href="Monad.Instance.Delay.html#1630" class="Field Operator">*</a><a id="2314" class="Symbol">)</a> <a id="2316" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="2318" href="Monad.Instance.Delay.html#1429" class="Field">now</a> <a id="2322" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function">≈⟨</a> <a id="2325" href="Categories.Morphism.Reasoning.Core.html#1914" class="Function">pullʳ</a> <a id="2331" href="Monad.Instance.Delay.html#1674" class="Field">*-law</a> <a id="2337" href="Categories.Category.Core.html#2837" class="Function Operator">⟩∘⟨refl</a> <a id="2345" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function"></a> Now let's define the monad:
<a id="2355" class="Symbol">(</a><a id="2356" href="Categories.Object.Coproduct.html#532" class="Function Operator">[</a> <a id="2358" href="Monad.Instance.Delay.html#1429" class="Field">now</a> <a id="2362" href="Categories.Object.Coproduct.html#532" class="Function Operator">,</a> <a id="2364" href="Monad.Instance.Delay.html#1458" class="Field">later</a> <a id="2370" href="Categories.Object.Coproduct.html#532" class="Function Operator">]</a> <a id="2372" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="2374" href="Categories.Object.Coproduct.html#532" class="Function Operator">[</a> <a id="2376" href="Monad.Instance.Delay.html#1547" class="Function">out</a> <a id="2380" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="2382" href="Monad.Instance.Delay.html#2206" class="Bound">k</a> <a id="2384" href="Categories.Object.Coproduct.html#532" class="Function Operator">,</a> <a id="2386" href="Categories.Object.Coproduct.html#512" class="Function">i₂</a> <a id="2389" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="2391" class="Symbol">(</a><a id="2392" href="Monad.Instance.Delay.html#2206" class="Bound">k</a> <a id="2394" href="Monad.Instance.Delay.html#1630" class="Field Operator">*</a><a id="2395" class="Symbol">)</a> <a id="2397" href="Categories.Object.Coproduct.html#532" class="Function Operator">]</a> <a id="2399" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="2401" href="Monad.Instance.Delay.html#1547" class="Function">out</a><a id="2404" class="Symbol">)</a> <a id="2406" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="2408" href="Monad.Instance.Delay.html#1429" class="Field">now</a> <a id="2412" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function">≈⟨</a> <a id="2415" href="Categories.Morphism.Reasoning.Core.html#1914" class="Function">pullʳ</a> <a id="2421" class="Symbol">(</a><a id="2422" href="Categories.Morphism.Reasoning.Core.html#1914" class="Function">pullʳ</a> <a id="2428" href="Monad.Instance.Delay.html#1888" class="Function">unitLaw</a><a id="2435" class="Symbol">)</a> <a id="2437" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function"></a>
<a id="2447" href="Categories.Object.Coproduct.html#532" class="Function Operator">[</a> <a id="2449" href="Monad.Instance.Delay.html#1429" class="Field">now</a> <a id="2453" href="Categories.Object.Coproduct.html#532" class="Function Operator">,</a> <a id="2455" href="Monad.Instance.Delay.html#1458" class="Field">later</a> <a id="2461" href="Categories.Object.Coproduct.html#532" class="Function Operator">]</a> <a id="2463" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="2465" href="Categories.Object.Coproduct.html#532" class="Function Operator">[</a> <a id="2467" href="Monad.Instance.Delay.html#1547" class="Function">out</a> <a id="2471" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="2473" href="Monad.Instance.Delay.html#2206" class="Bound">k</a> <a id="2475" href="Categories.Object.Coproduct.html#532" class="Function Operator">,</a> <a id="2477" href="Categories.Object.Coproduct.html#512" class="Function">i₂</a> <a id="2480" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="2482" class="Symbol">(</a><a id="2483" href="Monad.Instance.Delay.html#2206" class="Bound">k</a> <a id="2485" href="Monad.Instance.Delay.html#1630" class="Field Operator">*</a><a id="2486" class="Symbol">)</a> <a id="2488" href="Categories.Object.Coproduct.html#532" class="Function Operator">]</a> <a id="2490" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="2492" href="Categories.Object.Coproduct.html#492" class="Function">i₁</a> <a id="2495" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function">≈⟨</a> <a id="2498" href="Categories.Category.Core.html#2734" class="Function Operator">refl⟩∘⟨</a> <a id="2506" href="Categories.Object.Coproduct.html#569" class="Function">inject₁</a> <a id="2514" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function"></a> <pre class="Agda"> <a id="2133" class="Keyword">record</a> <a id="DelayMonad"></a><a id="2140" href="Monad.Instance.Delay.html#2140" class="Record">DelayMonad</a> <a id="2151" class="Symbol">:</a> <a id="2153" href="Agda.Primitive.html#320" class="Primitive">Set</a> <a id="2157" class="Symbol">(</a><a id="2158" href="Monad.Instance.Delay.html#982" class="Bound">o</a> <a id="2160" href="Agda.Primitive.html#804" class="Primitive Operator"></a> <a id="2162" href="Monad.Instance.Delay.html#984" class="Bound"></a> <a id="2164" href="Agda.Primitive.html#804" class="Primitive Operator"></a> <a id="2166" href="Monad.Instance.Delay.html#986" class="Bound">e</a><a id="2167" class="Symbol">)</a> <a id="2169" class="Keyword">where</a>
<a id="2524" href="Categories.Object.Coproduct.html#532" class="Function Operator">[</a> <a id="2526" href="Monad.Instance.Delay.html#1429" class="Field">now</a> <a id="2530" href="Categories.Object.Coproduct.html#532" class="Function Operator">,</a> <a id="2532" href="Monad.Instance.Delay.html#1458" class="Field">later</a> <a id="2538" href="Categories.Object.Coproduct.html#532" class="Function Operator">]</a> <a id="2540" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="2542" href="Monad.Instance.Delay.html#1547" class="Function">out</a> <a id="2546" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="2548" href="Monad.Instance.Delay.html#2206" class="Bound">k</a> <a id="2550" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function">≈⟨</a> <a id="2553" href="Categories.Morphism.Reasoning.Core.html#6851" class="Function">cancelˡ</a> <a id="2561" class="Symbol">(</a><a id="2562" href="Categories.Morphism.html#1612" class="Function">IsIso.isoʳ</a> <a id="2573" href="Monad.Instance.Delay.html#1492" class="Field">isIso</a><a id="2578" class="Symbol">)</a> <a id="2580" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function"></a> <a id="2179" class="Keyword">field</a>
<a id="2590" href="Monad.Instance.Delay.html#2206" class="Bound">k</a> <a id="2592" href="Relation.Binary.Reasoning.Base.Single.html#2564" class="Function Operator"></a> <a id="DelayMonad.D"></a><a id="2191" href="Monad.Instance.Delay.html#2191" class="Field">D</a> <a id="2193" class="Symbol">:</a> <a id="2195" href="Monad.Instance.Delay.html#1627" class="Record">DelayFunctor</a>
<a id="2600" class="Symbol">;</a> <a id="2602" href="Categories.Monad.Relative.html#1025" class="Field">identityˡ</a> <a id="2612" class="Symbol">=</a> <a id="2614" class="Symbol">λ</a> <a id="2616" class="Symbol">{</a><a id="2617" href="Monad.Instance.Delay.html#2617" class="Bound">X</a><a id="2618" class="Symbol">}</a> <a id="2620" class="Symbol"></a> <a id="2622" href="Relation.Binary.Structures.html#1603" class="Function">sym</a> <a id="2626" class="Symbol">(</a><a id="2627" href="Monad.Instance.Delay.html#1758" class="Field">*-unique</a> <a id="2636" href="Monad.Instance.Delay.html#1429" class="Field">now</a> <a id="2640" href="Monad.Instance.Delay.html#1005" class="Function">idC</a><a id="2643" class="Symbol">)</a> <a id="2212" class="Keyword">open</a> <a id="2217" href="Monad.Instance.Delay.html#1627" class="Module">DelayFunctor</a> <a id="2230" href="Monad.Instance.Delay.html#2191" class="Field">D</a>
<a id="2651" class="Symbol">;</a> <a id="2653" href="Categories.Monad.Relative.html#1078" class="Field">assoc</a> <a id="2659" class="Symbol">=</a> <a id="2661" class="Symbol">λ</a> <a id="2663" class="Symbol">{</a><a id="2664" href="Monad.Instance.Delay.html#2664" class="Bound">X</a><a id="2665" class="Symbol">}</a> <a id="2667" class="Symbol">{</a><a id="2668" href="Monad.Instance.Delay.html#2668" class="Bound">Y</a><a id="2669" class="Symbol">}</a> <a id="2671" class="Symbol">{</a><a id="2672" href="Monad.Instance.Delay.html#2672" class="Bound">Z</a><a id="2673" class="Symbol">}</a> <a id="2675" class="Symbol">{</a><a id="2676" href="Monad.Instance.Delay.html#2676" class="Bound">f</a><a id="2677" class="Symbol">}</a> <a id="2679" class="Symbol">{</a><a id="2680" href="Monad.Instance.Delay.html#2680" class="Bound">g</a><a id="2681" class="Symbol">}</a> <a id="2683" class="Symbol"></a> <a id="2685" href="Relation.Binary.Structures.html#1603" class="Function">sym</a> <a id="2689" class="Symbol">(</a><a id="2690" href="Monad.Instance.Delay.html#1758" class="Field">*-unique</a> <a id="2699" class="Symbol">((</a><a id="2701" href="Monad.Instance.Delay.html#2680" class="Bound">g</a> <a id="2703" href="Monad.Instance.Delay.html#1630" class="Field Operator">*</a><a id="2704" class="Symbol">)</a> <a id="2706" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="2708" href="Monad.Instance.Delay.html#2676" class="Bound">f</a><a id="2709" class="Symbol">)</a> <a id="2711" class="Symbol">((</a><a id="2713" href="Monad.Instance.Delay.html#2680" class="Bound">g</a> <a id="2715" href="Monad.Instance.Delay.html#1630" class="Field Operator">*</a><a id="2716" class="Symbol">)</a> <a id="2718" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="2720" class="Symbol">(</a><a id="2721" href="Monad.Instance.Delay.html#2676" class="Bound">f</a> <a id="2723" href="Monad.Instance.Delay.html#1630" class="Field Operator">*</a><a id="2724" class="Symbol">)))</a>
<a id="2734" class="Symbol">;</a> <a id="2736" href="Categories.Monad.Relative.html#1190" class="Field">sym-assoc</a> <a id="2746" class="Symbol">=</a> <a id="2748" class="Symbol">λ</a> <a id="2750" class="Symbol">{</a><a id="2751" href="Monad.Instance.Delay.html#2751" class="Bound">X</a><a id="2752" class="Symbol">}</a> <a id="2754" class="Symbol">{</a><a id="2755" href="Monad.Instance.Delay.html#2755" class="Bound">Y</a><a id="2756" class="Symbol">}</a> <a id="2758" class="Symbol">{</a><a id="2759" href="Monad.Instance.Delay.html#2759" class="Bound">Z</a><a id="2760" class="Symbol">}</a> <a id="2762" class="Symbol">{</a><a id="2763" href="Monad.Instance.Delay.html#2763" class="Bound">f</a><a id="2764" class="Symbol">}</a> <a id="2766" class="Symbol">{</a><a id="2767" href="Monad.Instance.Delay.html#2767" class="Bound">g</a><a id="2768" class="Symbol">}</a> <a id="2770" class="Symbol"></a> <a id="2772" href="Monad.Instance.Delay.html#1758" class="Field">*-unique</a> <a id="2781" class="Symbol">((</a><a id="2783" href="Monad.Instance.Delay.html#2767" class="Bound">g</a> <a id="2785" href="Monad.Instance.Delay.html#1630" class="Field Operator">*</a><a id="2786" class="Symbol">)</a> <a id="2788" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="2790" href="Monad.Instance.Delay.html#2763" class="Bound">f</a><a id="2791" class="Symbol">)</a> <a id="2793" class="Symbol">((</a><a id="2795" href="Monad.Instance.Delay.html#2767" class="Bound">g</a> <a id="2797" href="Monad.Instance.Delay.html#1630" class="Field Operator">*</a><a id="2798" class="Symbol">)</a> <a id="2800" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="2802" class="Symbol">(</a><a id="2803" href="Monad.Instance.Delay.html#2763" class="Bound">f</a> <a id="2805" href="Monad.Instance.Delay.html#1630" class="Field Operator">*</a><a id="2806" class="Symbol">))</a> <a id="2237" class="Keyword">field</a>
<a id="2815" class="Symbol">;</a> <a id="2817" href="Categories.Monad.Relative.html#1306" class="Field">extend-≈</a> <a id="2826" class="Symbol">=</a> <a id="2828" href="Monad.Instance.Delay.html#1826" class="Field">*-resp-≈</a> <a id="DelayMonad._*"></a><a id="2249" href="Monad.Instance.Delay.html#2249" class="Field Operator">_*</a> <a id="2252" class="Symbol">:</a> <a id="2254" class="Symbol"></a> <a id="2256" class="Symbol">{</a><a id="2257" href="Monad.Instance.Delay.html#2257" class="Bound">X</a> <a id="2259" href="Monad.Instance.Delay.html#2259" class="Bound">Y</a><a id="2260" class="Symbol">}</a> <a id="2262" class="Symbol"></a> <a id="2264" href="Monad.Instance.Delay.html#2257" class="Bound">X</a> <a id="2266" href="Categories.Category.Core.html#575" class="Function Operator"></a> <a id="2268" href="Monad.Instance.Delay.html#1741" class="Function">D₀</a> <a id="2271" href="Monad.Instance.Delay.html#2259" class="Bound">Y</a> <a id="2273" class="Symbol"></a> <a id="2275" href="Monad.Instance.Delay.html#1741" class="Function">D₀</a> <a id="2278" href="Monad.Instance.Delay.html#2257" class="Bound">X</a> <a id="2280" href="Categories.Category.Core.html#575" class="Function Operator"></a> <a id="2282" href="Monad.Instance.Delay.html#1741" class="Function">D₀</a> <a id="2285" href="Monad.Instance.Delay.html#2259" class="Bound">Y</a>
<a id="2843" class="Symbol">}</a> <a id="DelayMonad.*-law"></a><a id="2293" href="Monad.Instance.Delay.html#2293" class="Field">*-law</a> <a id="2299" class="Symbol">:</a> <a id="2301" class="Symbol"></a> <a id="2303" class="Symbol">{</a><a id="2304" href="Monad.Instance.Delay.html#2304" class="Bound">X</a> <a id="2306" href="Monad.Instance.Delay.html#2306" class="Bound">Y</a><a id="2307" class="Symbol">}</a> <a id="2309" class="Symbol">{</a><a id="2310" href="Monad.Instance.Delay.html#2310" class="Bound">f</a> <a id="2312" class="Symbol">:</a> <a id="2314" href="Monad.Instance.Delay.html#2304" class="Bound">X</a> <a id="2316" href="Categories.Category.Core.html#575" class="Function Operator"></a> <a id="2318" href="Monad.Instance.Delay.html#1741" class="Function">D₀</a> <a id="2321" href="Monad.Instance.Delay.html#2306" class="Bound">Y</a><a id="2322" class="Symbol">}</a> <a id="2324" class="Symbol"></a> <a id="2326" href="Monad.Instance.Delay.html#1886" class="Function">out</a> <a id="2330" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="2332" class="Symbol">(</a><a id="2333" href="Monad.Instance.Delay.html#2310" class="Bound">f</a> <a id="2335" href="Monad.Instance.Delay.html#2249" class="Field Operator">*</a><a id="2336" class="Symbol">)</a> <a id="2338" href="Categories.Category.Core.html#595" class="Function Operator"></a> <a id="2340" href="Categories.Object.Coproduct.html#532" class="Function Operator">[</a> <a id="2342" href="Monad.Instance.Delay.html#1886" class="Function">out</a> <a id="2346" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="2348" href="Monad.Instance.Delay.html#2310" class="Bound">f</a> <a id="2350" href="Categories.Object.Coproduct.html#532" class="Function Operator">,</a> <a id="2352" href="Categories.Object.Coproduct.html#512" class="Function">i₂</a> <a id="2355" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="2357" class="Symbol">(</a><a id="2358" href="Monad.Instance.Delay.html#2310" class="Bound">f</a> <a id="2360" href="Monad.Instance.Delay.html#2249" class="Field Operator">*</a><a id="2361" class="Symbol">)</a> <a id="2363" href="Categories.Object.Coproduct.html#532" class="Function Operator">]</a> <a id="2365" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="2367" href="Monad.Instance.Delay.html#1886" class="Function">out</a>
<a id="DelayMonad.*-unique"></a><a id="2377" href="Monad.Instance.Delay.html#2377" class="Field">*-unique</a> <a id="2386" class="Symbol">:</a> <a id="2388" class="Symbol"></a> <a id="2390" class="Symbol">{</a><a id="2391" href="Monad.Instance.Delay.html#2391" class="Bound">X</a> <a id="2393" href="Monad.Instance.Delay.html#2393" class="Bound">Y</a><a id="2394" class="Symbol">}</a> <a id="2396" class="Symbol">(</a><a id="2397" href="Monad.Instance.Delay.html#2397" class="Bound">f</a> <a id="2399" class="Symbol">:</a> <a id="2401" href="Monad.Instance.Delay.html#2391" class="Bound">X</a> <a id="2403" href="Categories.Category.Core.html#575" class="Function Operator"></a> <a id="2405" href="Monad.Instance.Delay.html#1741" class="Function">D₀</a> <a id="2408" href="Monad.Instance.Delay.html#2393" class="Bound">Y</a><a id="2409" class="Symbol">)</a> <a id="2411" class="Symbol">(</a><a id="2412" href="Monad.Instance.Delay.html#2412" class="Bound">h</a> <a id="2414" class="Symbol">:</a> <a id="2416" href="Monad.Instance.Delay.html#1741" class="Function">D₀</a> <a id="2419" href="Monad.Instance.Delay.html#2391" class="Bound">X</a> <a id="2421" href="Categories.Category.Core.html#575" class="Function Operator"></a> <a id="2423" href="Monad.Instance.Delay.html#1741" class="Function">D₀</a> <a id="2426" href="Monad.Instance.Delay.html#2393" class="Bound">Y</a><a id="2427" class="Symbol">)</a> <a id="2429" class="Symbol"></a> <a id="2431" href="Monad.Instance.Delay.html#2412" class="Bound">h</a> <a id="2433" href="Categories.Category.Core.html#595" class="Function Operator"></a> <a id="2435" href="Monad.Instance.Delay.html#2397" class="Bound">f</a> <a id="2437" href="Monad.Instance.Delay.html#2249" class="Field Operator">*</a>
<a id="DelayMonad.*-resp-≈"></a><a id="2445" href="Monad.Instance.Delay.html#2445" class="Field">*-resp-≈</a> <a id="2454" class="Symbol">:</a> <a id="2456" class="Symbol"></a> <a id="2458" class="Symbol">{</a><a id="2459" href="Monad.Instance.Delay.html#2459" class="Bound">X</a> <a id="2461" href="Monad.Instance.Delay.html#2461" class="Bound">Y</a><a id="2462" class="Symbol">}</a> <a id="2464" class="Symbol">{</a><a id="2465" href="Monad.Instance.Delay.html#2465" class="Bound">f</a> <a id="2467" href="Monad.Instance.Delay.html#2467" class="Bound">h</a> <a id="2469" class="Symbol">:</a> <a id="2471" href="Monad.Instance.Delay.html#2459" class="Bound">X</a> <a id="2473" href="Categories.Category.Core.html#575" class="Function Operator"></a> <a id="2475" href="Monad.Instance.Delay.html#1741" class="Function">D₀</a> <a id="2478" href="Monad.Instance.Delay.html#2461" class="Bound">Y</a><a id="2479" class="Symbol">}</a> <a id="2481" class="Symbol"></a> <a id="2483" href="Monad.Instance.Delay.html#2465" class="Bound">f</a> <a id="2485" href="Categories.Category.Core.html#595" class="Function Operator"></a> <a id="2487" href="Monad.Instance.Delay.html#2467" class="Bound">h</a> <a id="2489" class="Symbol"></a> <a id="2491" href="Monad.Instance.Delay.html#2465" class="Bound">f</a> <a id="2493" href="Monad.Instance.Delay.html#2249" class="Field Operator">*</a> <a id="2495" href="Categories.Category.Core.html#595" class="Function Operator"></a> <a id="2497" href="Monad.Instance.Delay.html#2467" class="Bound">h</a> <a id="2499" href="Monad.Instance.Delay.html#2249" class="Field Operator">*</a>
<a id="DelayMonad.unitLaw"></a><a id="2507" href="Monad.Instance.Delay.html#2507" class="Function">unitLaw</a> <a id="2515" class="Symbol">:</a> <a id="2517" class="Symbol"></a> <a id="2519" class="Symbol">{</a><a id="2520" href="Monad.Instance.Delay.html#2520" class="Bound">X</a><a id="2521" class="Symbol">}</a> <a id="2523" class="Symbol"></a> <a id="2525" href="Monad.Instance.Delay.html#1886" class="Function">out</a> <a id="2529" class="Symbol">{</a><a id="2530" href="Monad.Instance.Delay.html#2520" class="Bound">X</a><a id="2531" class="Symbol">}</a> <a id="2533" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="2535" href="Monad.Instance.Delay.html#1772" class="Function">now</a> <a id="2539" class="Symbol">{</a><a id="2540" href="Monad.Instance.Delay.html#2520" class="Bound">X</a><a id="2541" class="Symbol">}</a> <a id="2543" href="Categories.Category.Core.html#595" class="Function Operator"></a> <a id="2545" href="Categories.Object.Coproduct.html#492" class="Function">i₁</a>
<a id="2552" href="Monad.Instance.Delay.html#2507" class="Function">unitLaw</a> <a id="2560" class="Symbol">=</a> <a id="2562" href="Relation.Binary.Reasoning.Base.Single.html#1925" class="Function Operator">begin</a>
<a id="2575" href="Monad.Instance.Delay.html#1886" class="Function">out</a> <a id="2579" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="2581" href="Monad.Instance.Delay.html#1772" class="Function">now</a> <a id="2585" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function">≈⟨</a> <a id="2588" href="Categories.Category.Core.html#2734" class="Function Operator">refl⟩∘⟨</a> <a id="2596" href="Relation.Binary.Structures.html#1603" class="Function">sym</a> <a id="2600" href="Categories.Object.Coproduct.html#569" class="Function">inject₁</a> <a id="2608" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function"></a>
<a id="2617" href="Monad.Instance.Delay.html#1886" class="Function">out</a> <a id="2621" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="2623" href="Categories.Object.Coproduct.html#532" class="Function Operator">[</a> <a id="2625" href="Monad.Instance.Delay.html#1772" class="Function">now</a> <a id="2629" href="Categories.Object.Coproduct.html#532" class="Function Operator">,</a> <a id="2631" href="Monad.Instance.Delay.html#1801" class="Function">later</a> <a id="2637" href="Categories.Object.Coproduct.html#532" class="Function Operator">]</a> <a id="2639" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="2641" href="Categories.Object.Coproduct.html#492" class="Function">i₁</a> <a id="2644" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function">≈⟨</a> <a id="2647" href="Categories.Morphism.Reasoning.Core.html#6851" class="Function">cancelˡ</a> <a id="2655" class="Symbol">(</a><a id="2656" href="Categories.Morphism.html#1586" class="Function">IsIso.isoˡ</a> <a id="2667" href="Monad.Instance.Delay.html#1835" class="Function">isIso</a><a id="2672" class="Symbol">)</a> <a id="2674" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function"></a>
<a id="2682" href="Categories.Object.Coproduct.html#492" class="Function">i₁</a> <a id="2685" href="Relation.Binary.Reasoning.Base.Single.html#2564" class="Function Operator"></a>
<a id="DelayMonad.toMonad"></a><a id="2692" href="Monad.Instance.Delay.html#2692" class="Function">toMonad</a> <a id="2700" class="Symbol">:</a> <a id="2702" href="Categories.Monad.Construction.Kleisli.html#882" class="Function">KleisliTriple</a> <a id="2716" href="Monad.Instance.Delay.html#1093" class="Field">C</a>
<a id="2722" href="Monad.Instance.Delay.html#2692" class="Function">toMonad</a> <a id="2730" class="Symbol">=</a> <a id="2732" class="Keyword">record</a>
<a id="2745" class="Symbol">{</a> <a id="2747" href="Categories.Monad.Relative.html#834" class="Field">F₀</a> <a id="2750" class="Symbol">=</a> <a id="2752" href="Monad.Instance.Delay.html#1741" class="Function">D₀</a>
<a id="2761" class="Symbol">;</a> <a id="2763" href="Categories.Monad.Relative.html#857" class="Field">unit</a> <a id="2768" class="Symbol">=</a> <a id="2770" href="Monad.Instance.Delay.html#1772" class="Function">now</a>
<a id="2780" class="Symbol">;</a> <a id="2782" href="Categories.Monad.Relative.html#895" class="Field">extend</a> <a id="2789" class="Symbol">=</a> <a id="2791" href="Monad.Instance.Delay.html#2249" class="Field Operator">_*</a>
<a id="2800" class="Symbol">;</a> <a id="2802" href="Categories.Monad.Relative.html#953" class="Field">identityʳ</a> <a id="2812" class="Symbol">=</a> <a id="2814" class="Symbol">λ</a> <a id="2816" class="Symbol">{</a><a id="2817" href="Monad.Instance.Delay.html#2817" class="Bound">X</a><a id="2818" class="Symbol">}</a> <a id="2820" class="Symbol">{</a><a id="2821" href="Monad.Instance.Delay.html#2821" class="Bound">Y</a><a id="2822" class="Symbol">}</a> <a id="2824" class="Symbol">{</a><a id="2825" href="Monad.Instance.Delay.html#2825" class="Bound">k</a><a id="2826" class="Symbol">}</a> <a id="2828" class="Symbol"></a> <a id="2830" href="Relation.Binary.Reasoning.Base.Single.html#1925" class="Function Operator">begin</a>
<a id="2845" href="Monad.Instance.Delay.html#2825" class="Bound">k</a> <a id="2847" href="Monad.Instance.Delay.html#2249" class="Field Operator">*</a> <a id="2849" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="2851" href="Monad.Instance.Delay.html#1772" class="Function">now</a> <a id="2855" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function">≈⟨</a> <a id="2858" href="Categories.Morphism.Reasoning.Core.html#3063" class="Function">introˡ</a> <a id="2865" class="Symbol">(</a><a id="2866" href="Categories.Morphism.html#1612" class="Function">IsIso.isoʳ</a> <a id="2877" href="Monad.Instance.Delay.html#1835" class="Function">isIso</a><a id="2882" class="Symbol">)</a> <a id="2884" href="Categories.Category.Core.html#2837" class="Function Operator">⟩∘⟨refl</a> <a id="2892" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function"></a>
<a id="2903" class="Symbol">((</a><a id="2905" href="Categories.Object.Coproduct.html#532" class="Function Operator">[</a> <a id="2907" href="Monad.Instance.Delay.html#1772" class="Function">now</a> <a id="2911" href="Categories.Object.Coproduct.html#532" class="Function Operator">,</a> <a id="2913" href="Monad.Instance.Delay.html#1801" class="Function">later</a> <a id="2919" href="Categories.Object.Coproduct.html#532" class="Function Operator">]</a> <a id="2921" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="2923" href="Monad.Instance.Delay.html#1886" class="Function">out</a><a id="2926" class="Symbol">)</a> <a id="2928" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="2930" href="Monad.Instance.Delay.html#2825" class="Bound">k</a> <a id="2932" href="Monad.Instance.Delay.html#2249" class="Field Operator">*</a><a id="2933" class="Symbol">)</a> <a id="2935" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="2937" href="Monad.Instance.Delay.html#1772" class="Function">now</a> <a id="2941" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function">≈⟨</a> <a id="2944" href="Categories.Morphism.Reasoning.Core.html#1914" class="Function">pullʳ</a> <a id="2950" href="Monad.Instance.Delay.html#2293" class="Field">*-law</a> <a id="2956" href="Categories.Category.Core.html#2837" class="Function Operator">⟩∘⟨refl</a> <a id="2964" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function"></a>
<a id="2974" class="Symbol">(</a><a id="2975" href="Categories.Object.Coproduct.html#532" class="Function Operator">[</a> <a id="2977" href="Monad.Instance.Delay.html#1772" class="Function">now</a> <a id="2981" href="Categories.Object.Coproduct.html#532" class="Function Operator">,</a> <a id="2983" href="Monad.Instance.Delay.html#1801" class="Function">later</a> <a id="2989" href="Categories.Object.Coproduct.html#532" class="Function Operator">]</a> <a id="2991" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="2993" href="Categories.Object.Coproduct.html#532" class="Function Operator">[</a> <a id="2995" href="Monad.Instance.Delay.html#1886" class="Function">out</a> <a id="2999" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="3001" href="Monad.Instance.Delay.html#2825" class="Bound">k</a> <a id="3003" href="Categories.Object.Coproduct.html#532" class="Function Operator">,</a> <a id="3005" href="Categories.Object.Coproduct.html#512" class="Function">i₂</a> <a id="3008" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="3010" class="Symbol">(</a><a id="3011" href="Monad.Instance.Delay.html#2825" class="Bound">k</a> <a id="3013" href="Monad.Instance.Delay.html#2249" class="Field Operator">*</a><a id="3014" class="Symbol">)</a> <a id="3016" href="Categories.Object.Coproduct.html#532" class="Function Operator">]</a> <a id="3018" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="3020" href="Monad.Instance.Delay.html#1886" class="Function">out</a><a id="3023" class="Symbol">)</a> <a id="3025" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="3027" href="Monad.Instance.Delay.html#1772" class="Function">now</a> <a id="3031" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function">≈⟨</a> <a id="3034" href="Categories.Morphism.Reasoning.Core.html#1914" class="Function">pullʳ</a> <a id="3040" class="Symbol">(</a><a id="3041" href="Categories.Morphism.Reasoning.Core.html#1914" class="Function">pullʳ</a> <a id="3047" href="Monad.Instance.Delay.html#2507" class="Function">unitLaw</a><a id="3054" class="Symbol">)</a> <a id="3056" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function"></a>
<a id="3066" href="Categories.Object.Coproduct.html#532" class="Function Operator">[</a> <a id="3068" href="Monad.Instance.Delay.html#1772" class="Function">now</a> <a id="3072" href="Categories.Object.Coproduct.html#532" class="Function Operator">,</a> <a id="3074" href="Monad.Instance.Delay.html#1801" class="Function">later</a> <a id="3080" href="Categories.Object.Coproduct.html#532" class="Function Operator">]</a> <a id="3082" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="3084" href="Categories.Object.Coproduct.html#532" class="Function Operator">[</a> <a id="3086" href="Monad.Instance.Delay.html#1886" class="Function">out</a> <a id="3090" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="3092" href="Monad.Instance.Delay.html#2825" class="Bound">k</a> <a id="3094" href="Categories.Object.Coproduct.html#532" class="Function Operator">,</a> <a id="3096" href="Categories.Object.Coproduct.html#512" class="Function">i₂</a> <a id="3099" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="3101" class="Symbol">(</a><a id="3102" href="Monad.Instance.Delay.html#2825" class="Bound">k</a> <a id="3104" href="Monad.Instance.Delay.html#2249" class="Field Operator">*</a><a id="3105" class="Symbol">)</a> <a id="3107" href="Categories.Object.Coproduct.html#532" class="Function Operator">]</a> <a id="3109" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="3111" href="Categories.Object.Coproduct.html#492" class="Function">i₁</a> <a id="3114" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function">≈⟨</a> <a id="3117" href="Categories.Category.Core.html#2734" class="Function Operator">refl⟩∘⟨</a> <a id="3125" href="Categories.Object.Coproduct.html#569" class="Function">inject₁</a> <a id="3133" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function"></a>
<a id="3143" href="Categories.Object.Coproduct.html#532" class="Function Operator">[</a> <a id="3145" href="Monad.Instance.Delay.html#1772" class="Function">now</a> <a id="3149" href="Categories.Object.Coproduct.html#532" class="Function Operator">,</a> <a id="3151" href="Monad.Instance.Delay.html#1801" class="Function">later</a> <a id="3157" href="Categories.Object.Coproduct.html#532" class="Function Operator">]</a> <a id="3159" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="3161" href="Monad.Instance.Delay.html#1886" class="Function">out</a> <a id="3165" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="3167" href="Monad.Instance.Delay.html#2825" class="Bound">k</a> <a id="3169" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function">≈⟨</a> <a id="3172" href="Categories.Morphism.Reasoning.Core.html#6851" class="Function">cancelˡ</a> <a id="3180" class="Symbol">(</a><a id="3181" href="Categories.Morphism.html#1612" class="Function">IsIso.isoʳ</a> <a id="3192" href="Monad.Instance.Delay.html#1835" class="Function">isIso</a><a id="3197" class="Symbol">)</a> <a id="3199" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function"></a>
<a id="3209" href="Monad.Instance.Delay.html#2825" class="Bound">k</a> <a id="3211" href="Relation.Binary.Reasoning.Base.Single.html#2564" class="Function Operator"></a>
<a id="3219" class="Symbol">;</a> <a id="3221" href="Categories.Monad.Relative.html#1025" class="Field">identityˡ</a> <a id="3231" class="Symbol">=</a> <a id="3233" class="Symbol">λ</a> <a id="3235" class="Symbol">{</a><a id="3236" href="Monad.Instance.Delay.html#3236" class="Bound">X</a><a id="3237" class="Symbol">}</a> <a id="3239" class="Symbol"></a> <a id="3241" href="Relation.Binary.Structures.html#1603" class="Function">sym</a> <a id="3245" class="Symbol">(</a><a id="3246" href="Monad.Instance.Delay.html#2377" class="Field">*-unique</a> <a id="3255" href="Monad.Instance.Delay.html#1772" class="Function">now</a> <a id="3259" href="Monad.Instance.Delay.html#1102" class="Function">idC</a><a id="3262" class="Symbol">)</a>
<a id="3270" class="Symbol">;</a> <a id="3272" href="Categories.Monad.Relative.html#1078" class="Field">assoc</a> <a id="3278" class="Symbol">=</a> <a id="3280" class="Symbol">λ</a> <a id="3282" class="Symbol">{</a><a id="3283" href="Monad.Instance.Delay.html#3283" class="Bound">X</a><a id="3284" class="Symbol">}</a> <a id="3286" class="Symbol">{</a><a id="3287" href="Monad.Instance.Delay.html#3287" class="Bound">Y</a><a id="3288" class="Symbol">}</a> <a id="3290" class="Symbol">{</a><a id="3291" href="Monad.Instance.Delay.html#3291" class="Bound">Z</a><a id="3292" class="Symbol">}</a> <a id="3294" class="Symbol">{</a><a id="3295" href="Monad.Instance.Delay.html#3295" class="Bound">f</a><a id="3296" class="Symbol">}</a> <a id="3298" class="Symbol">{</a><a id="3299" href="Monad.Instance.Delay.html#3299" class="Bound">g</a><a id="3300" class="Symbol">}</a> <a id="3302" class="Symbol"></a> <a id="3304" href="Relation.Binary.Structures.html#1603" class="Function">sym</a> <a id="3308" class="Symbol">(</a><a id="3309" href="Monad.Instance.Delay.html#2377" class="Field">*-unique</a> <a id="3318" class="Symbol">((</a><a id="3320" href="Monad.Instance.Delay.html#3299" class="Bound">g</a> <a id="3322" href="Monad.Instance.Delay.html#2249" class="Field Operator">*</a><a id="3323" class="Symbol">)</a> <a id="3325" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="3327" href="Monad.Instance.Delay.html#3295" class="Bound">f</a><a id="3328" class="Symbol">)</a> <a id="3330" class="Symbol">((</a><a id="3332" href="Monad.Instance.Delay.html#3299" class="Bound">g</a> <a id="3334" href="Monad.Instance.Delay.html#2249" class="Field Operator">*</a><a id="3335" class="Symbol">)</a> <a id="3337" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="3339" class="Symbol">(</a><a id="3340" href="Monad.Instance.Delay.html#3295" class="Bound">f</a> <a id="3342" href="Monad.Instance.Delay.html#2249" class="Field Operator">*</a><a id="3343" class="Symbol">)))</a>
<a id="3353" class="Symbol">;</a> <a id="3355" href="Categories.Monad.Relative.html#1190" class="Field">sym-assoc</a> <a id="3365" class="Symbol">=</a> <a id="3367" class="Symbol">λ</a> <a id="3369" class="Symbol">{</a><a id="3370" href="Monad.Instance.Delay.html#3370" class="Bound">X</a><a id="3371" class="Symbol">}</a> <a id="3373" class="Symbol">{</a><a id="3374" href="Monad.Instance.Delay.html#3374" class="Bound">Y</a><a id="3375" class="Symbol">}</a> <a id="3377" class="Symbol">{</a><a id="3378" href="Monad.Instance.Delay.html#3378" class="Bound">Z</a><a id="3379" class="Symbol">}</a> <a id="3381" class="Symbol">{</a><a id="3382" href="Monad.Instance.Delay.html#3382" class="Bound">f</a><a id="3383" class="Symbol">}</a> <a id="3385" class="Symbol">{</a><a id="3386" href="Monad.Instance.Delay.html#3386" class="Bound">g</a><a id="3387" class="Symbol">}</a> <a id="3389" class="Symbol"></a> <a id="3391" href="Monad.Instance.Delay.html#2377" class="Field">*-unique</a> <a id="3400" class="Symbol">((</a><a id="3402" href="Monad.Instance.Delay.html#3386" class="Bound">g</a> <a id="3404" href="Monad.Instance.Delay.html#2249" class="Field Operator">*</a><a id="3405" class="Symbol">)</a> <a id="3407" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="3409" href="Monad.Instance.Delay.html#3382" class="Bound">f</a><a id="3410" class="Symbol">)</a> <a id="3412" class="Symbol">((</a><a id="3414" href="Monad.Instance.Delay.html#3386" class="Bound">g</a> <a id="3416" href="Monad.Instance.Delay.html#2249" class="Field Operator">*</a><a id="3417" class="Symbol">)</a> <a id="3419" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="3421" class="Symbol">(</a><a id="3422" href="Monad.Instance.Delay.html#3382" class="Bound">f</a> <a id="3424" href="Monad.Instance.Delay.html#2249" class="Field Operator">*</a><a id="3425" class="Symbol">))</a>
<a id="3434" class="Symbol">;</a> <a id="3436" href="Categories.Monad.Relative.html#1306" class="Field">extend-≈</a> <a id="3445" class="Symbol">=</a> <a id="3447" href="Monad.Instance.Delay.html#2445" class="Field">*-resp-≈</a>
<a id="3462" class="Symbol">}</a>
</pre>
### Definition 30: Search-Algebras
<pre class="Agda"> <a id="3515" class="Keyword">record</a> <a id="SearchAlgebra"></a><a id="3522" href="Monad.Instance.Delay.html#3522" class="Record">SearchAlgebra</a> <a id="3536" class="Symbol">(</a><a id="3537" href="Monad.Instance.Delay.html#3537" class="Bound">DF</a> <a id="3540" class="Symbol">:</a> <a id="3542" href="Monad.Instance.Delay.html#1627" class="Record">DelayFunctor</a><a id="3554" class="Symbol">)</a> <a id="3556" class="Symbol">:</a> <a id="3558" href="Agda.Primitive.html#320" class="Primitive">Set</a> <a id="3562" class="Symbol">(</a><a id="3563" href="Monad.Instance.Delay.html#982" class="Bound">o</a> <a id="3565" href="Agda.Primitive.html#804" class="Primitive Operator"></a> <a id="3567" href="Monad.Instance.Delay.html#984" class="Bound"></a> <a id="3569" href="Agda.Primitive.html#804" class="Primitive Operator"></a> <a id="3571" href="Monad.Instance.Delay.html#986" class="Bound">e</a><a id="3572" class="Symbol">)</a> <a id="3574" class="Keyword">where</a>
<a id="3584" class="Keyword">open</a> <a id="3589" href="Monad.Instance.Delay.html#1627" class="Module">DelayFunctor</a> <a id="3602" href="Monad.Instance.Delay.html#3537" class="Bound">DF</a>
<a id="3614" class="Keyword">field</a>
<a id="SearchAlgebra.FA"></a><a id="3626" href="Monad.Instance.Delay.html#3626" class="Field">FA</a> <a id="3629" class="Symbol">:</a> <a id="3631" href="Categories.Functor.Algebra.html#487" class="Record">F-Algebra</a> <a id="3641" href="Monad.Instance.Delay.html#1680" class="Function">D</a>
<a id="3648" class="Keyword">open</a> <a id="3653" href="Categories.Functor.Algebra.html#487" class="Module">F-Algebra</a> <a id="3663" href="Monad.Instance.Delay.html#3626" class="Field">FA</a>
<a id="3671" class="Keyword">field</a>
<a id="SearchAlgebra.now-id"></a><a id="3683" href="Monad.Instance.Delay.html#3683" class="Field">now-id</a> <a id="3690" class="Symbol">:</a> <a id="3692" href="Categories.Functor.Algebra.html#587" class="Function">α</a> <a id="3694" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="3696" href="Monad.Instance.Delay.html#1772" class="Function">now</a> <a id="3700" href="Categories.Category.Core.html#595" class="Function Operator"></a> <a id="3702" href="Monad.Instance.Delay.html#1102" class="Function">idC</a>
<a id="SearchAlgebra.later-same"></a><a id="3716" href="Monad.Instance.Delay.html#3716" class="Field">later-same</a> <a id="3727" class="Symbol">:</a> <a id="3729" href="Categories.Functor.Algebra.html#587" class="Function">α</a> <a id="3731" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="3733" href="Monad.Instance.Delay.html#1801" class="Function">later</a> <a id="3739" href="Categories.Category.Core.html#595" class="Function Operator"></a> <a id="3741" href="Categories.Functor.Algebra.html#587" class="Function">α</a>
</pre>
### Proposition 31 : the category of uniform-iteration algebras coincides with the category of search-algebras
TODOs:
- [ ] Define SearchAlgebras (and SearchAlgebra morphisms)
- [ ] show StrongEquivalence
- [ ] Show 'ElgotAlgebra⇔Search+***D***'
<pre class="Agda"> <a id="4007" class="Keyword">record</a> <a id="SearchAlgebras"></a><a id="4014" href="Monad.Instance.Delay.html#4014" class="Record">SearchAlgebras</a> <a id="4029" class="Symbol">(</a><a id="4030" href="Monad.Instance.Delay.html#4030" class="Bound">DF</a> <a id="4033" class="Symbol">:</a> <a id="4035" href="Monad.Instance.Delay.html#1627" class="Record">DelayFunctor</a><a id="4047" class="Symbol">)</a> <a id="4049" class="Symbol">:</a> <a id="4051" href="Agda.Primitive.html#320" class="Primitive">Set</a> <a id="4055" class="Symbol">(</a><a id="4056" href="Monad.Instance.Delay.html#982" class="Bound">o</a> <a id="4058" href="Agda.Primitive.html#804" class="Primitive Operator"></a> <a id="4060" href="Monad.Instance.Delay.html#984" class="Bound"></a> <a id="4062" href="Agda.Primitive.html#804" class="Primitive Operator"></a> <a id="4064" href="Monad.Instance.Delay.html#986" class="Bound">e</a><a id="4065" class="Symbol">)</a> <a id="4067" class="Keyword">where</a>
<a id="4077" class="Keyword">open</a> <a id="4082" href="Monad.Instance.Delay.html#1627" class="Module">DelayFunctor</a> <a id="4095" href="Monad.Instance.Delay.html#4030" class="Bound">DF</a>
</pre> </pre>

View file

@ -1 +1,9 @@
Hello world <!DOCTYPE HTML>
<html><head><meta charset="utf-8"><title>Everything</title><link rel="stylesheet" href="Agda.css"></head><body><pre class="Agda"><a id="1" class="Keyword">import</a> <a id="8" href="ElgotAlgebra.html" class="Module">ElgotAlgebra</a>
<a id="21" class="Keyword">import</a> <a id="28" href="ElgotAlgebras.html" class="Module">ElgotAlgebras</a>
<a id="42" class="Keyword">import</a> <a id="49" href="Monad.ElgotMonad.html" class="Module">Monad.ElgotMonad</a>
<a id="66" class="Keyword">import</a> <a id="73" href="Monad.Instance.Delay.html" class="Module">Monad.Instance.Delay</a>
<a id="94" class="Keyword">import</a> <a id="101" href="MonadK.html" class="Module">MonadK</a>
<a id="108" class="Keyword">import</a> <a id="115" href="UniformIterationAlgebra.html" class="Module">UniformIterationAlgebra</a>
<a id="139" class="Keyword">import</a> <a id="146" href="UniformIterationAlgebras.html" class="Module">UniformIterationAlgebras</a>
</pre></body></html>

View file

@ -12,7 +12,9 @@ open import Categories.Object.Terminal
open import Categories.Category.Construction.F-Coalgebras open import Categories.Category.Construction.F-Coalgebras
open import Categories.Functor.Coalgebra open import Categories.Functor.Coalgebra
open import Categories.Functor open import Categories.Functor
open import Categories.Functor.Algebra
open import Categories.Monad.Construction.Kleisli open import Categories.Monad.Construction.Kleisli
open import Categories.Category.Construction.F-Coalgebras
import Categories.Morphism as M import Categories.Morphism as M
import Categories.Morphism.Reasoning as MR import Categories.Morphism.Reasoning as MR
``` ```
@ -37,11 +39,22 @@ module Monad.Instance.Delay {o e} (ED : ExtensiveDistributiveCategory o
open MR C open MR C
open Equiv open Equiv
open HomReasoning open HomReasoning
open CoLambek
``` ```
### *Proposition 1*: Characterization of the delay monad ***D*** ### *Proposition 1*: Characterization of the delay monad ***D***
First I postulate the Functor *D*, maybe I should derive it...
**TODO**:
- how to define using final coalgebra(s)?
- DX can be defined as retract of infinite streams, how?
- how to express **Theorem 8** in agda?
```agda ```agda
record DelayMonad (D : Endofunctor C) : Set (o ⊔ ⊔ e) where record DelayFunctor : Set (o ⊔ ⊔ e) where
open Functor D using () renaming (F₀ to D₀; F₁ to D₁) field
D : Endofunctor C
open Functor D public renaming (F₀ to D₀; F₁ to D₁)
field field
now : ∀ {X} → X ⇒ D₀ X now : ∀ {X} → X ⇒ D₀ X
@ -51,6 +64,19 @@ module Monad.Instance.Delay {o e} (ED : ExtensiveDistributiveCategory o
out : ∀ {X} → D₀ X ⇒ X + D₀ X out : ∀ {X} → D₀ X ⇒ X + D₀ X
out {X} = IsIso.inv (isIso {X}) out {X} = IsIso.inv (isIso {X})
field
coit : ∀ {X Y} → Y ⇒ X + Y → Y ⇒ D₀ X
coit-law : ∀ {X Y} {f : Y ⇒ X + Y} → out ∘ (coit f) ≈ (idC +₁ (coit f)) ∘ f
```
Now let's define the monad:
```agda
record DelayMonad : Set (o ⊔ ⊔ e) where
field
D : DelayFunctor
open DelayFunctor D
field field
_* : ∀ {X Y} → X ⇒ D₀ Y → D₀ X ⇒ D₀ Y _* : ∀ {X Y} → X ⇒ D₀ Y → D₀ X ⇒ D₀ Y
*-law : ∀ {X Y} {f : X ⇒ D₀ Y} → out ∘ (f *) ≈ [ out ∘ f , i₂ ∘ (f *) ] ∘ out *-law : ∀ {X Y} {f : X ⇒ D₀ Y} → out ∘ (f *) ≈ [ out ∘ f , i₂ ∘ (f *) ] ∘ out
@ -81,3 +107,32 @@ module Monad.Instance.Delay {o e} (ED : ExtensiveDistributiveCategory o
; extend-≈ = *-resp-≈ ; extend-≈ = *-resp-≈
} }
``` ```
### Definition 30: Search-Algebras
```agda
record SearchAlgebra (DF : DelayFunctor) : Set (o ⊔ ⊔ e) where
open DelayFunctor DF
field
FA : F-Algebra D
open F-Algebra FA
field
now-id : α ∘ now ≈ idC
later-same : α ∘ later ≈ α
```
### Proposition 31 : the category of uniform-iteration algebras coincides with the category of search-algebras
TODOs:
- [ ] Define SearchAlgebras (and SearchAlgebra morphisms)
- [ ] show StrongEquivalence
- [ ] Show 'ElgotAlgebra⇔Search+***D***'
```agda
record SearchAlgebras (DF : DelayFunctor) : Set (o ⊔ ⊔ e) where
open DelayFunctor DF
```