bsc-leon-vatthauer/public/Monad.Instance.Delay.html

112 lines
38 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="" xml:lang="">
<head>
<meta charset="utf-8" />
<meta name="generator" content="pandoc" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
<title>Monad.Instance.Delay</title>
<style>
code{white-space: pre-wrap;}
span.smallcaps{font-variant: small-caps;}
div.columns{display: flex; gap: min(4vw, 1.5em);}
div.column{flex: auto; overflow-x: auto;}
div.hanging-indent{margin-left: 1.5em; text-indent: -1.5em;}
ul.task-list{list-style: none;}
ul.task-list li input[type="checkbox"] {
width: 0.8em;
margin: 0 0.8em 0.2em -1.6em;
vertical-align: middle;
}
.display.math{display: block; text-align: center; margin: 0.5rem auto;}
</style>
<link rel="stylesheet" href="Agda.css" />
<!--[if lt IE 9]>
<script src="//cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.3/html5shiv-printshiv.min.js"></script>
<![endif]-->
</head>
<body>
<!--
<pre class="Agda"><a id="14" class="Keyword">open</a> <a id="19" class="Keyword">import</a> <a id="26" href="Level.html" class="Module">Level</a>
<a id="32" class="Keyword">open</a> <a id="37" class="Keyword">import</a> <a id="44" href="Categories.Category.Core.html" class="Module">Categories.Category.Core</a>
<a id="69" class="Keyword">open</a> <a id="74" class="Keyword">import</a> <a id="81" href="Categories.Category.Distributive.html" class="Module">Categories.Category.Distributive</a>
<a id="114" class="Keyword">open</a> <a id="119" class="Keyword">import</a> <a id="126" href="Categories.Category.Extensive.Bundle.html" class="Module">Categories.Category.Extensive.Bundle</a>
<a id="163" class="Keyword">open</a> <a id="168" class="Keyword">import</a> <a id="175" href="Categories.Category.Extensive.html" class="Module">Categories.Category.Extensive</a>
<a id="205" class="Keyword">open</a> <a id="210" class="Keyword">import</a> <a id="217" href="Categories.Category.BinaryProducts.html" class="Module">Categories.Category.BinaryProducts</a>
<a id="252" class="Keyword">open</a> <a id="257" class="Keyword">import</a> <a id="264" href="Categories.Category.Cocartesian.html" class="Module">Categories.Category.Cocartesian</a>
<a id="296" class="Keyword">open</a> <a id="301" class="Keyword">import</a> <a id="308" href="Categories.Category.Cartesian.html" class="Module">Categories.Category.Cartesian</a>
<a id="338" class="Keyword">open</a> <a id="343" class="Keyword">import</a> <a id="350" href="Categories.Object.Terminal.html" class="Module">Categories.Object.Terminal</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="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="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="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>
</pre>-->
<h2 id="summary">Summary</h2>
<p>This file introduces the delay monad <strong><em>D</em></strong></p>
<ul class="task-list">
<li><input type="checkbox" disabled="" checked="" /><em>Proposition
1</em> Characterization of the delay monad <strong><em>D</em></strong>
(here treated as definition)</li>
<li><input type="checkbox" disabled="" /><em>Proposition 2</em>
<strong><em>D</em></strong> is commutative</li>
</ul>
<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>
<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="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="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="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="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="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="1182" class="Keyword">open</a> <a id="1187" 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>
</pre>
<h3
id="proposition-1-characterization-of-the-delay-monad-d"><em>Proposition
1</em>: Characterization of the delay monad
<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>
<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>
<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="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="1618" class="Keyword">field</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="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="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="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="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="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="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="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="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="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="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>
<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="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="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="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="2843" class="Symbol">}</a>
</pre>
</body>
</html>