prepare for meeting, some progress on delay

This commit is contained in:
Leon Vatthauer 2023-09-08 13:09:30 +02:00
parent 0a2cc10ec8
commit 86c5be9e2f
Signed by: leonv
SSH key fingerprint: SHA256:G4+ddwoZmhLPRB1agvXzZMXIzkVJ36dUYZXf5NxT+u8
10 changed files with 570 additions and 365 deletions

View file

@ -11,8 +11,11 @@
div.columns{display: flex; gap: min(4vw, 1.5em);} div.columns{display: flex; gap: min(4vw, 1.5em);}
div.column{flex: auto; overflow-x: auto;} div.column{flex: auto; overflow-x: auto;}
div.hanging-indent{margin-left: 1.5em; text-indent: -1.5em;} div.hanging-indent{margin-left: 1.5em; text-indent: -1.5em;}
ul.task-list{list-style: none;} /* The extra [class] is a hack that increases specificity enough to
override a similar rule in reveal.js */
ul.task-list[class]{list-style: none;}
ul.task-list li input[type="checkbox"] { ul.task-list li input[type="checkbox"] {
font-size: inherit;
width: 0.8em; width: 0.8em;
margin: 0 0.8em 0.2em -1.6em; margin: 0 0.8em 0.2em -1.6em;
vertical-align: middle; vertical-align: middle;
@ -40,13 +43,13 @@
<h2 id="summary">Summary</h2> <h2 id="summary">Summary</h2>
<p>This file introduces (guarded) elgot algebras</p> <p>This file introduces (guarded) elgot algebras</p>
<ul class="task-list"> <ul class="task-list">
<li><input type="checkbox" disabled="" checked="" /><em>Definition <li><label><input type="checkbox" checked="" /><em>Definition 7</em>
7</em> Guarded Elgot Algebras</li> Guarded Elgot Algebras</label></li>
<li><input type="checkbox" disabled="" /><em>Theorem 8</em> Existence of <li><label><input type="checkbox" /><em>Theorem 8</em> Existence of
final coalgebras is equivalent to existence of free H-guarded Elgot final coalgebras is equivalent to existence of free H-guarded Elgot
algebras</li> algebras</label></li>
<li><input type="checkbox" disabled="" checked="" /><em>Proposition <li><label><input type="checkbox" checked="" /><em>Proposition 10</em>
10</em> Characterization of unguarded elgot algebras</li> Characterization of unguarded elgot algebras</label></li>
</ul> </ul>
<h2 id="code">Code</h2> <h2 id="code">Code</h2>
<pre class="Agda"><a id="727" class="Keyword">module</a> <a id="734" href="ElgotAlgebra.html" class="Module">ElgotAlgebra</a> <a id="747" class="Keyword">where</a> <pre class="Agda"><a id="727" class="Keyword">module</a> <a id="734" href="ElgotAlgebra.html" class="Module">ElgotAlgebra</a> <a id="747" class="Keyword">where</a>

View file

@ -11,8 +11,11 @@
div.columns{display: flex; gap: min(4vw, 1.5em);} div.columns{display: flex; gap: min(4vw, 1.5em);}
div.column{flex: auto; overflow-x: auto;} div.column{flex: auto; overflow-x: auto;}
div.hanging-indent{margin-left: 1.5em; text-indent: -1.5em;} div.hanging-indent{margin-left: 1.5em; text-indent: -1.5em;}
ul.task-list{list-style: none;} /* The extra [class] is a hack that increases specificity enough to
override a similar rule in reveal.js */
ul.task-list[class]{list-style: none;}
ul.task-list li input[type="checkbox"] { ul.task-list li input[type="checkbox"] {
font-size: inherit;
width: 0.8em; width: 0.8em;
margin: 0 0.8em 0.2em -1.6em; margin: 0 0.8em 0.2em -1.6em;
vertical-align: middle; vertical-align: middle;
@ -48,12 +51,12 @@
<p>This file introduces the category of <em>unguarded</em> elgot <p>This file introduces the category of <em>unguarded</em> elgot
algebras</p> algebras</p>
<ul class="task-list"> <ul class="task-list">
<li><input type="checkbox" disabled="" checked="" /><em>Definition <li><label><input type="checkbox" checked="" /><em>Definition 7</em>
7</em> Category of elgot algebras</li> Category of elgot algebras</label></li>
<li><input type="checkbox" disabled="" checked="" /><em>Lemma 11</em> <li><label><input type="checkbox" checked="" /><em>Lemma 11</em>
Products of elgot algebras</li> Products of elgot algebras</label></li>
<li><input type="checkbox" disabled="" /><em>Lemma 11</em> Exponentials <li><label><input type="checkbox" /><em>Lemma 11</em> Exponentials of
of elgot algebras</li> elgot algebras</label></li>
</ul> </ul>
<h2 id="code">Code</h2> <h2 id="code">Code</h2>
<pre class="Agda"><a id="1074" class="Keyword">module</a> <a id="1081" href="ElgotAlgebras.html" class="Module">ElgotAlgebras</a> <a id="1095" class="Keyword">where</a> <pre class="Agda"><a id="1074" class="Keyword">module</a> <a id="1081" href="ElgotAlgebras.html" class="Module">ElgotAlgebras</a> <a id="1095" class="Keyword">where</a>

View file

@ -11,8 +11,11 @@
div.columns{display: flex; gap: min(4vw, 1.5em);} div.columns{display: flex; gap: min(4vw, 1.5em);}
div.column{flex: auto; overflow-x: auto;} div.column{flex: auto; overflow-x: auto;}
div.hanging-indent{margin-left: 1.5em; text-indent: -1.5em;} div.hanging-indent{margin-left: 1.5em; text-indent: -1.5em;}
ul.task-list{list-style: none;} /* The extra [class] is a hack that increases specificity enough to
override a similar rule in reveal.js */
ul.task-list[class]{list-style: none;}
ul.task-list li input[type="checkbox"] { ul.task-list li input[type="checkbox"] {
font-size: inherit;
width: 0.8em; width: 0.8em;
margin: 0 0.8em 0.2em -1.6em; margin: 0 0.8em 0.2em -1.6em;
vertical-align: middle; vertical-align: middle;
@ -44,16 +47,16 @@
<h2 id="summary">Summary</h2> <h2 id="summary">Summary</h2>
<p>This file introduces Elgot Monads.</p> <p>This file introduces Elgot Monads.</p>
<ul class="task-list"> <ul class="task-list">
<li><input type="checkbox" disabled="" checked="" /><em>Definition <li><label><input type="checkbox" checked="" /><em>Definition 13</em>
13</em> Pre-Elgot Monads</li> Pre-Elgot Monads</label></li>
<li><input type="checkbox" disabled="" /><em>Definition 13</em> strong <li><label><input type="checkbox" /><em>Definition 13</em> strong
pre-Elgot</li> pre-Elgot</label></li>
<li><input type="checkbox" disabled="" checked="" /><em>Definition <li><label><input type="checkbox" checked="" /><em>Definition 14</em>
14</em> Elgot Monads</li> Elgot Monads</label></li>
<li><input type="checkbox" disabled="" /><em>Definition 14</em> strong <li><label><input type="checkbox" /><em>Definition 14</em> strong
Elgot</li> Elgot</label></li>
<li><input type="checkbox" disabled="" /><em>Proposition 15</em> <li><label><input type="checkbox" /><em>Proposition 15</em> (Strong)
(Strong) Elgot monads are (strong) pre-Elgot</li> Elgot monads are (strong) pre-Elgot</label></li>
</ul> </ul>
<h2 id="code">Code</h2> <h2 id="code">Code</h2>
<pre class="Agda"><a id="752" class="Keyword">module</a> <a id="759" href="Monad.ElgotMonad.html" class="Module">Monad.ElgotMonad</a> <a id="776" class="Symbol">{</a><a id="777" href="Monad.ElgotMonad.html#777" class="Bound">o</a> <a id="779" href="Monad.ElgotMonad.html#779" class="Bound"></a> <a id="781" href="Monad.ElgotMonad.html#781" class="Bound">e</a><a id="782" class="Symbol">}</a> <a id="784" class="Symbol">(</a><a id="785" href="Monad.ElgotMonad.html#785" class="Bound">ED</a> <a id="788" class="Symbol">:</a> <a id="790" href="Categories.Category.Extensive.Bundle.html#781" class="Record">ExtensiveDistributiveCategory</a> <a id="820" href="Monad.ElgotMonad.html#777" class="Bound">o</a> <a id="822" href="Monad.ElgotMonad.html#779" class="Bound"></a> <a id="824" href="Monad.ElgotMonad.html#781" class="Bound">e</a><a id="825" class="Symbol">)</a> <a id="827" class="Keyword">where</a> <pre class="Agda"><a id="752" class="Keyword">module</a> <a id="759" href="Monad.ElgotMonad.html" class="Module">Monad.ElgotMonad</a> <a id="776" class="Symbol">{</a><a id="777" href="Monad.ElgotMonad.html#777" class="Bound">o</a> <a id="779" href="Monad.ElgotMonad.html#779" class="Bound"></a> <a id="781" href="Monad.ElgotMonad.html#781" class="Bound">e</a><a id="782" class="Symbol">}</a> <a id="784" class="Symbol">(</a><a id="785" href="Monad.ElgotMonad.html#785" class="Bound">ED</a> <a id="788" class="Symbol">:</a> <a id="790" href="Categories.Category.Extensive.Bundle.html#781" class="Record">ExtensiveDistributiveCategory</a> <a id="820" href="Monad.ElgotMonad.html#777" class="Bound">o</a> <a id="822" href="Monad.ElgotMonad.html#779" class="Bound"></a> <a id="824" href="Monad.ElgotMonad.html#781" class="Bound">e</a><a id="825" class="Symbol">)</a> <a id="827" class="Keyword">where</a>

View file

@ -11,8 +11,11 @@
div.columns{display: flex; gap: min(4vw, 1.5em);} div.columns{display: flex; gap: min(4vw, 1.5em);}
div.column{flex: auto; overflow-x: auto;} div.column{flex: auto; overflow-x: auto;}
div.hanging-indent{margin-left: 1.5em; text-indent: -1.5em;} div.hanging-indent{margin-left: 1.5em; text-indent: -1.5em;}
ul.task-list{list-style: none;} /* The extra [class] is a hack that increases specificity enough to
override a similar rule in reveal.js */
ul.task-list[class]{list-style: none;}
ul.task-list li input[type="checkbox"] { ul.task-list li input[type="checkbox"] {
font-size: inherit;
width: 0.8em; width: 0.8em;
margin: 0 0.8em 0.2em -1.6em; margin: 0 0.8em 0.2em -1.6em;
vertical-align: middle; vertical-align: middle;
@ -26,136 +29,230 @@
</head> </head>
<body> <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> <pre class="Agda"><a id="14" class="Symbol">{-#</a> <a id="18" class="Keyword">OPTIONS</a> <a id="26" class="Pragma">--allow-unsolved-metas</a> <a id="49" class="Symbol">#-}</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="53" class="Keyword">open</a> <a id="58" class="Keyword">import</a> <a id="65" href="Level.html" class="Module">Level</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="71" class="Keyword">open</a> <a id="76" class="Keyword">import</a> <a id="83" href="Categories.Category.html" class="Module">Categories.Category</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="103" class="Keyword">open</a> <a id="108" class="Keyword">import</a> <a id="115" href="Categories.Monad.html" class="Module">Categories.Monad</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="132" class="Keyword">open</a> <a id="137" class="Keyword">import</a> <a id="144" href="Categories.Category.Distributive.html" class="Module">Categories.Category.Distributive</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="177" class="Keyword">open</a> <a id="182" class="Keyword">import</a> <a id="189" href="Categories.Category.Extensive.Bundle.html" class="Module">Categories.Category.Extensive.Bundle</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="226" class="Keyword">open</a> <a id="231" class="Keyword">import</a> <a id="238" href="Categories.Category.Extensive.html" class="Module">Categories.Category.Extensive</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="268" class="Keyword">open</a> <a id="273" class="Keyword">import</a> <a id="280" href="Categories.Category.BinaryProducts.html" class="Module">Categories.Category.BinaryProducts</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="315" class="Keyword">open</a> <a id="320" class="Keyword">import</a> <a id="327" href="Categories.Category.Cocartesian.html" class="Module">Categories.Category.Cocartesian</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="359" class="Keyword">open</a> <a id="364" class="Keyword">import</a> <a id="371" href="Categories.Category.Cartesian.html" class="Module">Categories.Category.Cartesian</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="401" class="Keyword">open</a> <a id="406" class="Keyword">import</a> <a id="413" href="Categories.Category.Cartesian.html" class="Module">Categories.Category.Cartesian</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="443" class="Keyword">open</a> <a id="448" class="Keyword">import</a> <a id="455" href="Categories.Object.Terminal.html" class="Module">Categories.Object.Terminal</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="482" class="Keyword">open</a> <a id="487" class="Keyword">import</a> <a id="494" href="Categories.Object.Coproduct.html" class="Module">Categories.Object.Coproduct</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="522" class="Keyword">open</a> <a id="527" class="Keyword">import</a> <a id="534" href="Categories.Category.Construction.F-Coalgebras.html" class="Module">Categories.Category.Construction.F-Coalgebras</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="580" class="Keyword">open</a> <a id="585" class="Keyword">import</a> <a id="592" href="Categories.Functor.Coalgebra.html" class="Module">Categories.Functor.Coalgebra</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="621" class="Keyword">open</a> <a id="626" class="Keyword">import</a> <a id="633" href="Categories.Functor.html" class="Module">Categories.Functor</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> <a id="652" class="Keyword">open</a> <a id="657" class="Keyword">import</a> <a id="664" href="Categories.Functor.Algebra.html" class="Module">Categories.Functor.Algebra</a>
<a id="691" class="Keyword">open</a> <a id="696" class="Keyword">import</a> <a id="703" href="Categories.Monad.Construction.Kleisli.html" class="Module">Categories.Monad.Construction.Kleisli</a>
<a id="741" class="Keyword">open</a> <a id="746" class="Keyword">import</a> <a id="753" href="Categories.Category.Construction.F-Coalgebras.html" class="Module">Categories.Category.Construction.F-Coalgebras</a>
<a id="799" class="Keyword">open</a> <a id="804" class="Keyword">import</a> <a id="811" href="Categories.NaturalTransformation.html" class="Module">Categories.NaturalTransformation</a>
<a id="844" class="Keyword">import</a> <a id="851" href="Categories.Morphism.html" class="Module">Categories.Morphism</a> <a id="871" class="Symbol">as</a> <a id="874" class="Module">M</a>
<a id="876" class="Keyword">import</a> <a id="883" href="Categories.Morphism.Reasoning.html" class="Module">Categories.Morphism.Reasoning</a> <a id="913" class="Symbol">as</a> <a id="916" 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>
<ul class="task-list"> <ul class="task-list">
<li><input type="checkbox" disabled="" checked="" /><em>Proposition <li><label><input type="checkbox" /><em>Proposition 1</em>
1</em> Characterization of the delay monad <strong><em>D</em></strong> Characterization of the delay monad
(here treated as definition)</li> <strong><em>D</em></strong></label></li>
<li><input type="checkbox" disabled="" /><em>Proposition 2</em> <li><label><input type="checkbox" /><em>Proposition 2</em>
<strong><em>D</em></strong> is commutative</li> <strong><em>D</em></strong> is commutative</label></li>
</ul> </ul>
<h2 id="code">Code</h2> <h2 id="code">Code</h2>
<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> <pre class="Agda"><a id="1114" class="Keyword">module</a> <a id="1121" href="Monad.Instance.Delay.html" class="Module">Monad.Instance.Delay</a> <a id="1142" class="Symbol">{</a><a id="1143" href="Monad.Instance.Delay.html#1143" class="Bound">o</a> <a id="1145" href="Monad.Instance.Delay.html#1145" class="Bound"></a> <a id="1147" href="Monad.Instance.Delay.html#1147" class="Bound">e</a><a id="1148" class="Symbol">}</a> <a id="1150" class="Symbol">(</a><a id="1151" href="Monad.Instance.Delay.html#1151" class="Bound">ED</a> <a id="1154" class="Symbol">:</a> <a id="1156" href="Categories.Category.Extensive.Bundle.html#781" class="Record">ExtensiveDistributiveCategory</a> <a id="1186" href="Monad.Instance.Delay.html#1143" class="Bound">o</a> <a id="1188" href="Monad.Instance.Delay.html#1145" class="Bound"></a> <a id="1190" href="Monad.Instance.Delay.html#1147" class="Bound">e</a><a id="1191" class="Symbol">)</a> <a id="1193" class="Keyword">where</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="1201" class="Keyword">open</a> <a id="1206" href="Categories.Category.Extensive.Bundle.html#781" class="Module">ExtensiveDistributiveCategory</a> <a id="1236" href="Monad.Instance.Delay.html#1151" class="Bound">ED</a> <a id="1239" class="Keyword">renaming</a> <a id="1248" class="Symbol">(</a><a id="1249" href="Categories.Category.Extensive.Bundle.html#859" class="Field">U</a> <a id="1251" class="Symbol">to</a> <a id="1254" class="Field">C</a><a id="1255" class="Symbol">;</a> <a id="1257" href="Categories.Category.Core.html#630" class="Function">id</a> <a id="1260" class="Symbol">to</a> <a id="1263" class="Function">idC</a><a id="1266" 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="1270" class="Keyword">open</a> <a id="1275" href="Categories.Category.Cocartesian.html#3385" class="Module">Cocartesian</a> <a id="1287" class="Symbol">(</a><a id="1288" href="Categories.Category.Extensive.html#734" class="Field">Extensive.cocartesian</a> <a id="1310" href="Categories.Category.Extensive.Bundle.html#913" class="Field">extensive</a><a id="1319" 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="1323" class="Keyword">open</a> <a id="1328" href="Categories.Category.Cartesian.html#727" class="Module">Cartesian</a> <a id="1338" class="Symbol">(</a><a id="1339" href="Categories.Category.Extensive.Bundle.html#943" class="Field">ExtensiveDistributiveCategory.cartesian</a> <a id="1379" href="Monad.Instance.Delay.html#1151" class="Bound">ED</a><a id="1381" class="Symbol">)</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="1385" class="Keyword">open</a> <a id="1390" href="Categories.Category.BinaryProducts.html#812" class="Module">BinaryProducts</a> <a id="1405" href="Categories.Category.Cartesian.html#801" class="Function">products</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="1417" class="Keyword">open</a> <a id="1422" href="Categories.Morphism.html" class="Module">M</a> <a id="1424" href="Monad.Instance.Delay.html#1254" 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="1428" class="Keyword">open</a> <a id="1433" href="Categories.Morphism.Reasoning.html" class="Module">MR</a> <a id="1436" href="Monad.Instance.Delay.html#1254" class="Field">C</a>
<a id="1279" class="Keyword">open</a> <a id="1284" href="Categories.Category.Core.html#1530" class="Module">Equiv</a> <a id="1440" class="Keyword">open</a> <a id="1445" href="Categories.Category.Core.html#1530" class="Module">Equiv</a>
<a id="1292" class="Keyword">open</a> <a id="1297" href="Categories.Category.Core.html#2462" class="Module">HomReasoning</a> <a id="1453" class="Keyword">open</a> <a id="1458" 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> <a id="1473" class="Keyword">open</a> <a id="1478" 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>
<p>First I postulate the Functor <em>D</em>, maybe I should derive it… <pre class="Agda"> <a id="delayF"></a><a id="1567" href="Monad.Instance.Delay.html#1567" class="Function">delayF</a> <a id="1574" class="Symbol">:</a> <a id="1576" href="Categories.Category.Core.html#559" class="Function">Obj</a> <a id="1580" class="Symbol"></a> <a id="1582" href="Categories.Functor.html#283" class="Function">Endofunctor</a> <a id="1594" href="Monad.Instance.Delay.html#1254" class="Field">C</a>
<strong>TODO</strong>: - how to define using final coalgebra(s)? - DX <a id="1598" href="Monad.Instance.Delay.html#1567" class="Function">delayF</a> <a id="1605" href="Monad.Instance.Delay.html#1605" class="Bound">Y</a> <a id="1607" class="Symbol">=</a> <a id="1609" class="Keyword">record</a>
can be defined as retract of infinite streams, how? - how to express <a id="1620" class="Symbol">{</a> <a id="1622" href="Categories.Functor.Core.html#432" class="Field">F₀</a> <a id="1625" class="Symbol">=</a> <a id="1627" href="Monad.Instance.Delay.html#1605" class="Bound">Y</a> <a id="1629" href="Categories.Category.Cocartesian.html#1549" class="Function Operator">+_</a>
<strong>Theorem 8</strong> in agda?</p> <a id="1636" class="Symbol">;</a> <a id="1638" href="Categories.Functor.Core.html#455" class="Field">F₁</a> <a id="1641" class="Symbol">=</a> <a id="1643" href="Monad.Instance.Delay.html#1263" class="Function">idC</a> <a id="1647" href="Categories.Category.Cocartesian.html#2133" class="Function Operator">+₁_</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="1655" class="Symbol">;</a> <a id="1657" href="Categories.Functor.Core.html#511" class="Field">identity</a> <a id="1666" class="Symbol">=</a> <a id="1668" href="Categories.Object.Coproduct.html#635" class="Function">CC.coproduct.unique</a> <a id="1688" href="Categories.Morphism.Reasoning.Core.html#1309" class="Function">id-comm-sym</a> <a id="1700" href="Categories.Morphism.Reasoning.Core.html#1309" class="Function">id-comm-sym</a>
<a id="1668" class="Keyword">field</a> <a id="1716" class="Symbol">;</a> <a id="1718" href="Categories.Functor.Core.html#565" class="Field">homomorphism</a> <a id="1731" class="Symbol">=</a> <a id="1733" href="Categories.Category.Core.html#3005" class="Function"></a> <a id="1735" class="Symbol">(</a><a id="1736" href="Categories.Category.Cocartesian.html#2699" class="Function">+₁∘+₁</a> <a id="1742" href="Categories.Category.Core.html#3061" class="Function Operator"></a> <a id="1744" href="Categories.Category.Cocartesian.html#2622" class="Function">+₁-cong₂</a> <a id="1753" href="Categories.Category.Core.html#1339" class="Function">identity²</a> <a id="1763" href="Relation.Binary.Structures.html#1577" class="Function">refl</a><a id="1767" class="Symbol">)</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="1774" class="Symbol">;</a> <a id="1776" href="Categories.Functor.Core.html#696" class="Field">F-resp-≈</a> <a id="1785" class="Symbol">=</a> <a id="1787" href="Categories.Category.Cocartesian.html#2622" class="Function">+₁-cong₂</a> <a id="1796" href="Relation.Binary.Structures.html#1577" class="Function">refl</a>
<a id="1805" class="Symbol">}</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="1810" class="Keyword">record</a> <a id="DelayM"></a><a id="1817" href="Monad.Instance.Delay.html#1817" class="Record">DelayM</a> <a id="1824" class="Symbol">:</a> <a id="1826" href="Agda.Primitive.html#320" class="Primitive">Set</a> <a id="1830" class="Symbol">(</a><a id="1831" href="Monad.Instance.Delay.html#1143" class="Bound">o</a> <a id="1833" href="Agda.Primitive.html#804" class="Primitive Operator"></a> <a id="1835" href="Monad.Instance.Delay.html#1145" class="Bound"></a> <a id="1837" href="Agda.Primitive.html#804" class="Primitive Operator"></a> <a id="1839" href="Monad.Instance.Delay.html#1147" class="Bound">e</a><a id="1840" class="Symbol">)</a> <a id="1842" class="Keyword">where</a>
<a id="1852" class="Keyword">field</a>
<a id="DelayM.algebras"></a><a id="1864" href="Monad.Instance.Delay.html#1864" class="Field">algebras</a> <a id="1873" class="Symbol">:</a> <a id="1875" class="Symbol"></a> <a id="1877" class="Symbol">(</a><a id="1878" href="Monad.Instance.Delay.html#1878" class="Bound">A</a> <a id="1880" class="Symbol">:</a> <a id="1882" href="Categories.Category.Core.html#559" class="Function">Obj</a><a id="1885" class="Symbol">)</a> <a id="1887" class="Symbol"></a> <a id="1889" href="Categories.Object.Terminal.html#860" class="Record">Terminal</a> <a id="1898" class="Symbol">(</a><a id="1899" href="Categories.Category.Construction.F-Coalgebras.html#598" class="Function">F-Coalgebras</a> <a id="1912" class="Symbol">(</a><a id="1913" href="Monad.Instance.Delay.html#1567" class="Function">delayF</a> <a id="1920" href="Monad.Instance.Delay.html#1878" class="Bound">A</a><a id="1921" class="Symbol">))</a>
<a id="1760" class="Keyword">field</a> <a id="1933" class="Keyword">module</a> <a id="DelayM.D"></a><a id="1940" href="Monad.Instance.Delay.html#1940" class="Module">D</a> <a id="1942" href="Monad.Instance.Delay.html#1942" class="Bound">A</a> <a id="1944" class="Symbol">=</a> <a id="1946" href="Categories.Functor.Core.html#248" class="Module">Functor</a> <a id="1954" class="Symbol">(</a><a id="1955" href="Monad.Instance.Delay.html#1567" class="Function">delayF</a> <a id="1962" href="Monad.Instance.Delay.html#1942" class="Bound">A</a><a id="1963" 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="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="1970" class="Keyword">module</a> <a id="1977" href="Monad.Instance.Delay.html#1977" class="Module">_</a> <a id="1979" class="Symbol">(</a><a id="1980" href="Monad.Instance.Delay.html#1980" class="Bound">X</a> <a id="1982" class="Symbol">:</a> <a id="1984" href="Categories.Category.Core.html#559" class="Function">Obj</a><a id="1987" class="Symbol">)</a> <a id="1989" class="Keyword">where</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="2001" class="Keyword">open</a> <a id="2006" href="Categories.Object.Terminal.html#860" class="Module">Terminal</a> <a id="2015" class="Symbol">(</a><a id="2016" href="Monad.Instance.Delay.html#1864" class="Field">algebras</a> <a id="2025" href="Monad.Instance.Delay.html#1980" class="Bound">X</a><a id="2026" class="Symbol">)</a> <a id="2028" class="Keyword">using</a> <a id="2034" class="Symbol">(</a><a id="2035" href="Categories.Object.Terminal.html#905" class="Field"></a><a id="2036" class="Symbol">;</a> <a id="2038" href="Categories.Object.Terminal.html#577" class="Function">!</a><a id="2039" class="Symbol">)</a>
<a id="2047" class="Keyword">open</a> <a id="2052" href="Categories.Functor.Coalgebra.html#483" class="Module">F-Coalgebra</a> <a id="2064" href="Categories.Object.Terminal.html#905" class="Function"></a> <a id="2066" class="Keyword">renaming</a> <a id="2075" class="Symbol">(</a><a id="2076" href="Categories.Functor.Coalgebra.html#571" class="Field">A</a> <a id="2078" class="Symbol">to</a> <a id="2081" class="Field">DX</a><a id="2083" class="Symbol">)</a>
<a id="1957" class="Keyword">field</a> <a id="2092" href="Monad.Instance.Delay.html#2092" class="Function">D₀</a> <a id="2095" class="Symbol">=</a> <a id="2097" href="Monad.Instance.Delay.html#2081" class="Function">DX</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="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="2107" href="Monad.Instance.Delay.html#2107" class="Function">out-≅</a> <a id="2113" class="Symbol">:</a> <a id="2115" href="Monad.Instance.Delay.html#2081" class="Function">DX</a> <a id="2118" href="Categories.Morphism.html#1958" class="Record Operator"></a> <a id="2120" href="Monad.Instance.Delay.html#1980" class="Bound">X</a> <a id="2122" href="Categories.Category.Cocartesian.html#1549" class="Function Operator">+</a> <a id="2124" href="Monad.Instance.Delay.html#2081" class="Function">DX</a>
<a id="2133" href="Monad.Instance.Delay.html#2107" class="Function">out-≅</a> <a id="2139" class="Symbol">=</a> <a id="2141" href="Categories.Category.Construction.F-Coalgebras.html#3360" class="Function">colambek</a> <a id="2150" class="Symbol">{</a><a id="2151" class="Argument">F</a> <a id="2153" class="Symbol">=</a> <a id="2155" href="Monad.Instance.Delay.html#1567" class="Function">delayF</a> <a id="2162" href="Monad.Instance.Delay.html#1980" class="Bound">X</a><a id="2163" class="Symbol">}</a> <a id="2165" class="Symbol">(</a><a id="2166" href="Monad.Instance.Delay.html#1864" class="Field">algebras</a> <a id="2175" href="Monad.Instance.Delay.html#1980" class="Bound">X</a><a id="2176" class="Symbol">)</a>
<a id="2185" class="Comment">-- note: out-≅.from ≡ .α</a>
<a id="2217" class="Keyword">open</a> <a id="2222" href="Categories.Morphism.html#1958" class="Module Operator">_≅_</a> <a id="2226" href="Monad.Instance.Delay.html#2107" class="Function">out-≅</a> <a id="2232" class="Keyword">using</a> <a id="2238" class="Symbol">()</a> <a id="2241" class="Keyword">renaming</a> <a id="2250" class="Symbol">(</a><a id="2251" href="Categories.Morphism.html#2023" class="Field">to</a> <a id="2254" class="Symbol">to</a> <a id="2257" class="Field">out⁻¹</a><a id="2262" class="Symbol">;</a> <a id="2264" href="Categories.Morphism.html#2006" class="Field">from</a> <a id="2269" class="Symbol">to</a> <a id="2272" class="Field">out</a><a id="2275" class="Symbol">)</a> <a id="2277" class="Keyword">public</a>
<a id="2291" href="Monad.Instance.Delay.html#2291" class="Function">now</a> <a id="2295" class="Symbol">:</a> <a id="2297" href="Monad.Instance.Delay.html#1980" class="Bound">X</a> <a id="2299" href="Categories.Category.Core.html#575" class="Function Operator"></a> <a id="2301" href="Monad.Instance.Delay.html#2081" class="Function">DX</a>
<a id="2310" href="Monad.Instance.Delay.html#2291" class="Function">now</a> <a id="2314" class="Symbol">=</a> <a id="2316" href="Monad.Instance.Delay.html#2257" class="Function">out⁻¹</a> <a id="2322" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="2324" href="Categories.Object.Coproduct.html#492" class="Function">i₁</a>
<a id="2334" href="Monad.Instance.Delay.html#2334" class="Function">later</a> <a id="2340" class="Symbol">:</a> <a id="2342" href="Monad.Instance.Delay.html#2081" class="Function">DX</a> <a id="2345" href="Categories.Category.Core.html#575" class="Function Operator"></a> <a id="2347" href="Monad.Instance.Delay.html#2081" class="Function">DX</a>
<a id="2356" href="Monad.Instance.Delay.html#2334" class="Function">later</a> <a id="2362" class="Symbol">=</a> <a id="2364" href="Monad.Instance.Delay.html#2257" class="Function">out⁻¹</a> <a id="2370" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="2372" href="Categories.Object.Coproduct.html#512" class="Function">i₂</a>
<a id="2382" class="Comment">-- TODO inline</a>
<a id="2403" href="Monad.Instance.Delay.html#2403" class="Function">unitlaw</a> <a id="2411" class="Symbol">:</a> <a id="2413" href="Monad.Instance.Delay.html#2272" class="Function">out</a> <a id="2417" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="2419" href="Monad.Instance.Delay.html#2291" class="Function">now</a> <a id="2423" href="Categories.Category.Core.html#595" class="Function Operator"></a> <a id="2425" href="Categories.Object.Coproduct.html#492" class="Function">i₁</a>
<a id="2434" href="Monad.Instance.Delay.html#2403" class="Function">unitlaw</a> <a id="2442" class="Symbol">=</a> <a id="2444" href="Categories.Morphism.Reasoning.Core.html#6851" class="Function">cancelˡ</a> <a id="2452" class="Symbol">(</a><a id="2453" href="Categories.Morphism.html#1612" class="Function">_≅_.isoʳ</a> <a id="2462" href="Monad.Instance.Delay.html#2107" class="Function">out-≅</a><a id="2467" class="Symbol">)</a>
<a id="2476" class="Keyword">module</a> <a id="2483" href="Monad.Instance.Delay.html#2483" class="Module">_</a> <a id="2485" class="Symbol">{</a><a id="2486" href="Monad.Instance.Delay.html#2486" class="Bound">Y</a> <a id="2488" class="Symbol">:</a> <a id="2490" href="Categories.Category.Core.html#559" class="Function">Obj</a><a id="2493" class="Symbol">}</a> <a id="2495" class="Keyword">where</a>
<a id="2510" href="Monad.Instance.Delay.html#2510" class="Function">coit</a> <a id="2515" class="Symbol">:</a> <a id="2517" href="Monad.Instance.Delay.html#2486" class="Bound">Y</a> <a id="2519" href="Categories.Category.Core.html#575" class="Function Operator"></a> <a id="2521" href="Monad.Instance.Delay.html#1980" class="Bound">X</a> <a id="2523" href="Categories.Category.Cocartesian.html#1549" class="Function Operator">+</a> <a id="2525" href="Monad.Instance.Delay.html#2486" class="Bound">Y</a> <a id="2527" class="Symbol"></a> <a id="2529" href="Monad.Instance.Delay.html#2486" class="Bound">Y</a> <a id="2531" href="Categories.Category.Core.html#575" class="Function Operator"></a> <a id="2533" href="Monad.Instance.Delay.html#2081" class="Function">DX</a>
<a id="2544" href="Monad.Instance.Delay.html#2510" class="Function">coit</a> <a id="2549" href="Monad.Instance.Delay.html#2549" class="Bound">f</a> <a id="2551" class="Symbol">=</a> <a id="2553" href="Categories.Functor.Coalgebra.html#1411" class="Field">F-Coalgebra-Morphism.f</a> <a id="2576" class="Symbol">(</a><a id="2577" href="Categories.Object.Terminal.html#577" class="Function">!</a> <a id="2579" class="Symbol">{</a><a id="2580" class="Argument">A</a> <a id="2582" class="Symbol">=</a> <a id="2584" class="Keyword">record</a> <a id="2591" class="Symbol">{</a> <a id="2593" href="Categories.Functor.Coalgebra.html#571" class="Field">A</a> <a id="2595" class="Symbol">=</a> <a id="2597" href="Monad.Instance.Delay.html#2486" class="Bound">Y</a> <a id="2599" class="Symbol">;</a> <a id="2601" href="Categories.Functor.Coalgebra.html#585" class="Field">α</a> <a id="2603" class="Symbol">=</a> <a id="2605" href="Monad.Instance.Delay.html#2549" class="Bound">f</a> <a id="2607" class="Symbol">}})</a>
<a id="2620" href="Monad.Instance.Delay.html#2620" class="Function">coit-commutes</a> <a id="2634" class="Symbol">:</a> <a id="2636" class="Symbol"></a> <a id="2638" class="Symbol">(</a><a id="2639" href="Monad.Instance.Delay.html#2639" class="Bound">f</a> <a id="2641" class="Symbol">:</a> <a id="2643" href="Monad.Instance.Delay.html#2486" class="Bound">Y</a> <a id="2645" href="Categories.Category.Core.html#575" class="Function Operator"></a> <a id="2647" href="Monad.Instance.Delay.html#1980" class="Bound">X</a> <a id="2649" href="Categories.Category.Cocartesian.html#1549" class="Function Operator">+</a> <a id="2651" href="Monad.Instance.Delay.html#2486" class="Bound">Y</a><a id="2652" class="Symbol">)</a> <a id="2654" class="Symbol"></a> <a id="2656" href="Monad.Instance.Delay.html#2272" class="Function">out</a> <a id="2660" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="2662" class="Symbol">(</a><a id="2663" href="Monad.Instance.Delay.html#2510" class="Function">coit</a> <a id="2668" href="Monad.Instance.Delay.html#2639" class="Bound">f</a><a id="2669" class="Symbol">)</a> <a id="2671" href="Categories.Category.Core.html#595" class="Function Operator"></a> <a id="2673" class="Symbol">(</a><a id="2674" href="Monad.Instance.Delay.html#1263" class="Function">idC</a> <a id="2678" href="Categories.Category.Cocartesian.html#2133" class="Function Operator">+₁</a> <a id="2681" href="Monad.Instance.Delay.html#2510" class="Function">coit</a> <a id="2686" href="Monad.Instance.Delay.html#2639" class="Bound">f</a><a id="2687" class="Symbol">)</a> <a id="2689" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="2691" href="Monad.Instance.Delay.html#2639" class="Bound">f</a>
<a id="2701" href="Monad.Instance.Delay.html#2620" class="Function">coit-commutes</a> <a id="2715" href="Monad.Instance.Delay.html#2715" class="Bound">f</a> <a id="2717" class="Symbol">=</a> <a id="2719" href="Categories.Functor.Coalgebra.html#1433" class="Field">F-Coalgebra-Morphism.commutes</a> <a id="2749" class="Symbol">(</a><a id="2750" href="Categories.Object.Terminal.html#577" class="Function">!</a> <a id="2752" class="Symbol">{</a><a id="2753" class="Argument">A</a> <a id="2755" class="Symbol">=</a> <a id="2757" class="Keyword">record</a> <a id="2764" class="Symbol">{</a> <a id="2766" href="Categories.Functor.Coalgebra.html#571" class="Field">A</a> <a id="2768" class="Symbol">=</a> <a id="2770" href="Monad.Instance.Delay.html#2486" class="Bound">Y</a> <a id="2772" class="Symbol">;</a> <a id="2774" href="Categories.Functor.Coalgebra.html#585" class="Field">α</a> <a id="2776" class="Symbol">=</a> <a id="2778" href="Monad.Instance.Delay.html#2715" class="Bound">f</a> <a id="2780" class="Symbol">}})</a>
<a id="DelayM.monad"></a><a id="2789" href="Monad.Instance.Delay.html#2789" class="Function">monad</a> <a id="2795" class="Symbol">:</a> <a id="2797" href="Categories.Monad.html#454" class="Record">Monad</a> <a id="2803" href="Monad.Instance.Delay.html#1254" class="Field">C</a>
<a id="2809" href="Monad.Instance.Delay.html#2789" class="Function">monad</a> <a id="2815" class="Symbol">=</a> <a id="2817" href="Categories.Monad.Construction.Kleisli.html#1000" class="Function">Kleisli⇒Monad</a> <a id="2831" href="Monad.Instance.Delay.html#1254" class="Field">C</a> <a id="2833" class="Symbol">(</a><a id="2834" class="Keyword">record</a>
<a id="2847" class="Symbol">{</a> <a id="2849" href="Categories.Monad.Relative.html#834" class="Field">F₀</a> <a id="2852" class="Symbol">=</a> <a id="2854" href="Monad.Instance.Delay.html#2092" class="Function">D₀</a>
<a id="2864" class="Symbol">;</a> <a id="2866" href="Categories.Monad.Relative.html#857" class="Field">unit</a> <a id="2871" class="Symbol">=</a> <a id="2873" class="Symbol">λ</a> <a id="2875" class="Symbol">{</a><a id="2876" href="Monad.Instance.Delay.html#2876" class="Bound">X</a><a id="2877" class="Symbol">}</a> <a id="2879" class="Symbol"></a> <a id="2881" href="Monad.Instance.Delay.html#2291" class="Function">now</a> <a id="2885" href="Monad.Instance.Delay.html#2876" class="Bound">X</a>
<a id="2893" class="Symbol">;</a> <a id="2895" href="Categories.Monad.Relative.html#895" class="Field">extend</a> <a id="2902" class="Symbol">=</a> <a id="2904" href="Monad.Instance.Delay.html#8193" class="Function">extend</a>
<a id="2917" class="Symbol">;</a> <a id="2919" href="Categories.Monad.Relative.html#953" class="Field">identityʳ</a> <a id="2929" class="Symbol">=</a> <a id="2931" class="Symbol">λ</a> <a id="2933" class="Symbol">{</a><a id="2934" href="Monad.Instance.Delay.html#2934" class="Bound">X</a><a id="2935" class="Symbol">}</a> <a id="2937" class="Symbol">{</a><a id="2938" href="Monad.Instance.Delay.html#2938" class="Bound">Y</a><a id="2939" class="Symbol">}</a> <a id="2941" class="Symbol">{</a><a id="2942" href="Monad.Instance.Delay.html#2942" class="Bound">f</a><a id="2943" class="Symbol">}</a> <a id="2945" class="Symbol"></a> <a id="2947" href="Relation.Binary.Reasoning.Base.Single.html#1925" class="Function Operator">begin</a>
<a id="2962" href="Monad.Instance.Delay.html#8193" class="Function">extend</a> <a id="2969" href="Monad.Instance.Delay.html#2942" class="Bound">f</a> <a id="2971" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="2973" href="Monad.Instance.Delay.html#2291" class="Function">now</a> <a id="2977" href="Monad.Instance.Delay.html#2934" class="Bound">X</a> <a id="3020" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function">≈⟨</a> <a id="3023" class="Symbol">(</a><a id="3024" href="Categories.Morphism.Reasoning.Core.html#6986" class="Function">insertˡ</a> <a id="3032" class="Symbol">(</a><a id="3033" href="Categories.Morphism.html#1586" class="Function">_≅_.isoˡ</a> <a id="3042" class="Symbol">(</a><a id="3043" href="Monad.Instance.Delay.html#2107" class="Function">out-≅</a> <a id="3049" href="Monad.Instance.Delay.html#2938" class="Bound">Y</a><a id="3050" class="Symbol">)))</a> <a id="3054" href="Categories.Category.Core.html#2837" class="Function Operator">⟩∘⟨refl</a> <a id="3062" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function"></a>
<a id="3073" class="Symbol">(</a><a id="3074" href="Monad.Instance.Delay.html#2257" class="Function">out⁻¹</a> <a id="3080" href="Monad.Instance.Delay.html#2938" class="Bound">Y</a> <a id="3082" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="3084" href="Monad.Instance.Delay.html#2272" class="Function">out</a> <a id="3088" href="Monad.Instance.Delay.html#2938" class="Bound">Y</a> <a id="3090" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="3092" href="Monad.Instance.Delay.html#8193" class="Function">extend</a> <a id="3099" href="Monad.Instance.Delay.html#2942" class="Bound">f</a><a id="3100" class="Symbol">)</a> <a id="3102" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="3104" href="Monad.Instance.Delay.html#2291" class="Function">now</a> <a id="3108" href="Monad.Instance.Delay.html#2934" class="Bound">X</a> <a id="3131" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function">≈⟨</a> <a id="3134" class="Symbol">(</a><a id="3135" href="Categories.Category.Core.html#2734" class="Function Operator">refl⟩∘⟨</a> <a id="3143" class="Symbol">(</a><a id="3144" href="Monad.Instance.Delay.html#8457" class="Function">extendlaw</a> <a id="3154" href="Monad.Instance.Delay.html#2942" class="Bound">f</a><a id="3155" class="Symbol">))</a> <a id="3158" href="Categories.Category.Core.html#2837" class="Function Operator">⟩∘⟨refl</a> <a id="3166" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function"></a>
<a id="3176" class="Symbol">(</a><a id="3177" href="Monad.Instance.Delay.html#2257" class="Function">out⁻¹</a> <a id="3183" href="Monad.Instance.Delay.html#2938" class="Bound">Y</a> <a id="3185" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="3187" href="Categories.Object.Coproduct.html#532" class="Function Operator">[</a> <a id="3189" href="Monad.Instance.Delay.html#2272" class="Function">out</a> <a id="3193" href="Monad.Instance.Delay.html#2938" class="Bound">Y</a> <a id="3195" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="3197" href="Monad.Instance.Delay.html#2942" class="Bound">f</a> <a id="3199" href="Categories.Object.Coproduct.html#532" class="Function Operator">,</a> <a id="3201" href="Categories.Object.Coproduct.html#512" class="Function">i₂</a> <a id="3204" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="3206" href="Monad.Instance.Delay.html#8193" class="Function">extend</a> <a id="3213" href="Monad.Instance.Delay.html#2942" class="Bound">f</a> <a id="3215" href="Categories.Object.Coproduct.html#532" class="Function Operator">]</a> <a id="3217" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="3219" href="Monad.Instance.Delay.html#2272" class="Function">out</a> <a id="3223" href="Monad.Instance.Delay.html#2934" class="Bound">X</a><a id="3224" class="Symbol">)</a> <a id="3226" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="3228" href="Monad.Instance.Delay.html#2291" class="Function">now</a> <a id="3232" href="Monad.Instance.Delay.html#2934" class="Bound">X</a> <a id="3234" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function">≈⟨</a> <a id="3237" href="Categories.Morphism.Reasoning.Core.html#1914" class="Function">pullʳ</a> <a id="3243" class="Symbol">(</a><a id="3244" href="Categories.Morphism.Reasoning.Core.html#1914" class="Function">pullʳ</a> <a id="3250" class="Symbol">(</a><a id="3251" href="Monad.Instance.Delay.html#2403" class="Function">unitlaw</a> <a id="3259" href="Monad.Instance.Delay.html#2934" class="Bound">X</a><a id="3260" class="Symbol">))</a> <a id="3263" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function"></a>
<a id="3273" href="Monad.Instance.Delay.html#2257" class="Function">out⁻¹</a> <a id="3279" href="Monad.Instance.Delay.html#2938" class="Bound">Y</a> <a id="3281" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="3283" href="Categories.Object.Coproduct.html#532" class="Function Operator">[</a> <a id="3285" href="Monad.Instance.Delay.html#2272" class="Function">out</a> <a id="3289" href="Monad.Instance.Delay.html#2938" class="Bound">Y</a> <a id="3291" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="3293" href="Monad.Instance.Delay.html#2942" class="Bound">f</a> <a id="3295" href="Categories.Object.Coproduct.html#532" class="Function Operator">,</a> <a id="3297" href="Categories.Object.Coproduct.html#512" class="Function">i₂</a> <a id="3300" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="3302" href="Monad.Instance.Delay.html#8193" class="Function">extend</a> <a id="3309" href="Monad.Instance.Delay.html#2942" class="Bound">f</a> <a id="3311" href="Categories.Object.Coproduct.html#532" class="Function Operator">]</a> <a id="3313" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="3315" href="Categories.Object.Coproduct.html#492" class="Function">i₁</a> <a id="3331" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function">≈⟨</a> <a id="3334" href="Categories.Category.Core.html#2734" class="Function Operator">refl⟩∘⟨</a> <a id="3342" href="Categories.Object.Coproduct.html#569" class="Function">inject₁</a> <a id="3350" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function"></a>
<a id="3360" href="Monad.Instance.Delay.html#2257" class="Function">out⁻¹</a> <a id="3366" href="Monad.Instance.Delay.html#2938" class="Bound">Y</a> <a id="3368" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="3370" href="Monad.Instance.Delay.html#2272" class="Function">out</a> <a id="3374" href="Monad.Instance.Delay.html#2938" class="Bound">Y</a> <a id="3376" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="3378" href="Monad.Instance.Delay.html#2942" class="Bound">f</a> <a id="3418" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function">≈⟨</a> <a id="3421" href="Categories.Morphism.Reasoning.Core.html#6851" class="Function">cancelˡ</a> <a id="3429" class="Symbol">(</a><a id="3430" href="Categories.Morphism.html#1586" class="Function">_≅_.isoˡ</a> <a id="3439" class="Symbol">(</a><a id="3440" href="Monad.Instance.Delay.html#2107" class="Function">out-≅</a> <a id="3446" href="Monad.Instance.Delay.html#2938" class="Bound">Y</a><a id="3447" class="Symbol">))</a> <a id="3450" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function"></a>
<a id="3460" href="Monad.Instance.Delay.html#2942" class="Bound">f</a> <a id="3518" href="Relation.Binary.Reasoning.Base.Single.html#2564" class="Function Operator"></a>
<a id="3526" class="Symbol">;</a> <a id="3528" href="Categories.Monad.Relative.html#1025" class="Field">identityˡ</a> <a id="3538" class="Symbol">=</a> <a id="3540" class="Symbol">λ</a> <a id="3542" class="Symbol">{</a><a id="3543" href="Monad.Instance.Delay.html#3543" class="Bound">X</a><a id="3544" class="Symbol">}</a> <a id="3546" class="Symbol"></a> <a id="3548" href="Categories.Object.Terminal.html#803" class="Function">Terminal.-id</a> <a id="3562" class="Symbol">(</a><a id="3563" href="Monad.Instance.Delay.html#1864" class="Field">algebras</a> <a id="3572" href="Monad.Instance.Delay.html#3543" class="Bound">X</a><a id="3573" class="Symbol">)</a> <a id="3575" class="Symbol">(</a><a id="3576" class="Keyword">record</a> <a id="3583" class="Symbol">{</a> <a id="3585" href="Categories.Functor.Coalgebra.html#1411" class="Field">f</a> <a id="3587" class="Symbol">=</a> <a id="3589" href="Monad.Instance.Delay.html#8193" class="Function">extend</a> <a id="3596" class="Symbol">(</a><a id="3597" href="Monad.Instance.Delay.html#2291" class="Function">now</a> <a id="3601" href="Monad.Instance.Delay.html#3543" class="Bound">X</a><a id="3602" class="Symbol">)</a> <a id="3604" class="Symbol">;</a> <a id="3606" href="Categories.Functor.Coalgebra.html#1433" class="Field">commutes</a> <a id="3615" class="Symbol">=</a> <a id="3617" href="Relation.Binary.Reasoning.Base.Single.html#1925" class="Function Operator">begin</a>
<a id="3632" href="Monad.Instance.Delay.html#2272" class="Function">out</a> <a id="3636" href="Monad.Instance.Delay.html#3543" class="Bound">X</a> <a id="3638" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="3640" href="Monad.Instance.Delay.html#8193" class="Function">extend</a> <a id="3647" class="Symbol">(</a><a id="3648" href="Monad.Instance.Delay.html#2291" class="Function">now</a> <a id="3652" href="Monad.Instance.Delay.html#3543" class="Bound">X</a><a id="3653" class="Symbol">)</a> <a id="3747" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function">≈⟨</a> <a id="3750" href="Categories.Morphism.Reasoning.Core.html#2048" class="Function">pullˡ</a> <a id="3756" class="Symbol">((</a><a id="3758" href="Categories.Functor.Coalgebra.html#1433" class="Field">F-Coalgebra-Morphism.commutes</a> <a id="3788" class="Symbol">(</a><a id="3789" href="Categories.Object.Terminal.html#577" class="Function">Terminal.!</a> <a id="3800" class="Symbol">(</a><a id="3801" href="Monad.Instance.Delay.html#1864" class="Field">algebras</a> <a id="3810" href="Monad.Instance.Delay.html#3543" class="Bound">X</a><a id="3811" class="Symbol">)</a> <a id="3813" class="Symbol">{</a><a id="3814" class="Argument">A</a> <a id="3816" class="Symbol">=</a> <a id="3818" href="Monad.Instance.Delay.html#7957" class="Function">alg</a> <a id="3822" class="Symbol">(</a><a id="3823" href="Monad.Instance.Delay.html#2291" class="Function">now</a> <a id="3827" href="Monad.Instance.Delay.html#3543" class="Bound">X</a><a id="3828" class="Symbol">)})))</a> <a id="3834" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function"></a>
<a id="3845" class="Symbol">((</a><a id="3847" href="Monad.Instance.Delay.html#1263" class="Function">idC</a> <a id="3851" href="Categories.Category.Cocartesian.html#2133" class="Function Operator">+₁</a> <a id="3854" class="Symbol">(</a><a id="3855" href="Categories.Functor.Coalgebra.html#1411" class="Field">F-Coalgebra-Morphism.f</a> <a id="3878" class="Symbol">(</a><a id="3879" href="Categories.Object.Terminal.html#577" class="Function">Terminal.!</a> <a id="3890" class="Symbol">(</a><a id="3891" href="Monad.Instance.Delay.html#1864" class="Field">algebras</a> <a id="3900" href="Monad.Instance.Delay.html#3543" class="Bound">X</a><a id="3901" class="Symbol">)</a> <a id="3903" class="Symbol">{</a><a id="3904" class="Argument">A</a> <a id="3906" class="Symbol">=</a> <a id="3908" href="Monad.Instance.Delay.html#7957" class="Function">alg</a> <a id="3912" class="Symbol">(</a><a id="3913" href="Monad.Instance.Delay.html#2291" class="Function">now</a> <a id="3917" href="Monad.Instance.Delay.html#3543" class="Bound">X</a><a id="3918" class="Symbol">)})))</a> <a id="3924" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="3926" href="Categories.Functor.Coalgebra.html#585" class="Field">F-Coalgebra.α</a> <a id="3940" class="Symbol">(</a><a id="3941" href="Monad.Instance.Delay.html#7957" class="Function">alg</a> <a id="3945" class="Symbol">(</a><a id="3946" href="Monad.Instance.Delay.html#2291" class="Function">now</a> <a id="3950" href="Monad.Instance.Delay.html#3543" class="Bound">X</a><a id="3951" class="Symbol">)))</a> <a id="3955" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="3957" href="Categories.Object.Coproduct.html#492" class="Function">i₁</a> <a id="3960" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function">≈⟨</a> <a id="3963" href="Categories.Morphism.Reasoning.Core.html#1914" class="Function">pullʳ</a> <a id="3969" href="Categories.Object.Coproduct.html#569" class="Function">inject₁</a> <a id="3977" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function"></a>
<a id="3987" class="Symbol">(</a><a id="3988" href="Monad.Instance.Delay.html#1263" class="Function">idC</a> <a id="3992" href="Categories.Category.Cocartesian.html#2133" class="Function Operator">+₁</a> <a id="3995" class="Symbol">(</a><a id="3996" href="Categories.Functor.Coalgebra.html#1411" class="Field">F-Coalgebra-Morphism.f</a> <a id="4019" class="Symbol">(</a><a id="4020" href="Categories.Object.Terminal.html#577" class="Function">Terminal.!</a> <a id="4031" class="Symbol">(</a><a id="4032" href="Monad.Instance.Delay.html#1864" class="Field">algebras</a> <a id="4041" href="Monad.Instance.Delay.html#3543" class="Bound">X</a><a id="4042" class="Symbol">)</a> <a id="4044" class="Symbol">{</a><a id="4045" class="Argument">A</a> <a id="4047" class="Symbol">=</a> <a id="4049" href="Monad.Instance.Delay.html#7957" class="Function">alg</a> <a id="4053" class="Symbol">(</a><a id="4054" href="Monad.Instance.Delay.html#2291" class="Function">now</a> <a id="4058" href="Monad.Instance.Delay.html#3543" class="Bound">X</a><a id="4059" class="Symbol">)})))</a>
<a id="4074" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="4076" href="Categories.Object.Coproduct.html#532" class="Function Operator">[</a> <a id="4078" href="Categories.Object.Coproduct.html#532" class="Function Operator">[</a> <a id="4080" href="Categories.Object.Coproduct.html#492" class="Function">i₁</a> <a id="4083" href="Categories.Object.Coproduct.html#532" class="Function Operator">,</a> <a id="4085" href="Categories.Object.Coproduct.html#512" class="Function">i₂</a> <a id="4088" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="4090" href="Categories.Object.Coproduct.html#512" class="Function">i₂</a> <a id="4093" href="Categories.Object.Coproduct.html#532" class="Function Operator">]</a> <a id="4095" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="4097" class="Symbol">(</a><a id="4098" href="Monad.Instance.Delay.html#2272" class="Function">out</a> <a id="4102" href="Monad.Instance.Delay.html#3543" class="Bound">X</a> <a id="4104" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="4106" class="Symbol">(</a><a id="4107" href="Monad.Instance.Delay.html#2291" class="Function">now</a> <a id="4111" href="Monad.Instance.Delay.html#3543" class="Bound">X</a><a id="4112" class="Symbol">))</a> <a id="4115" href="Categories.Object.Coproduct.html#532" class="Function Operator">,</a> <a id="4117" href="Categories.Object.Coproduct.html#512" class="Function">i₂</a> <a id="4120" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="4122" href="Categories.Object.Coproduct.html#492" class="Function">i₁</a> <a id="4125" href="Categories.Object.Coproduct.html#532" class="Function Operator">]</a> <a id="4127" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="4129" href="Monad.Instance.Delay.html#2272" class="Function">out</a> <a id="4133" href="Monad.Instance.Delay.html#3543" class="Bound">X</a> <a id="4189" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function">≈⟨</a> <a id="4192" href="Categories.Category.Core.html#2734" class="Function Operator">refl⟩∘⟨</a> <a id="4200" href="Categories.Object.Coproduct.html#816" class="Function">[]-cong₂</a> <a id="4209" class="Symbol">((</a><a id="4211" href="Categories.Category.Core.html#2734" class="Function Operator">refl⟩∘⟨</a> <a id="4219" class="Symbol">(</a><a id="4220" href="Monad.Instance.Delay.html#2403" class="Function">unitlaw</a> <a id="4228" href="Monad.Instance.Delay.html#3543" class="Bound">X</a><a id="4229" class="Symbol">))</a> <a id="4232" href="Categories.Category.Core.html#3061" class="Function Operator"></a> <a id="4234" href="Categories.Object.Coproduct.html#569" class="Function">inject₁</a><a id="4241" class="Symbol">)</a> <a id="4243" href="Relation.Binary.Structures.html#1577" class="Function">refl</a> <a id="4248" href="Categories.Category.Core.html#2837" class="Function Operator">⟩∘⟨refl</a> <a id="4256" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function"></a>
<a id="4266" class="Symbol">(</a><a id="4267" href="Monad.Instance.Delay.html#1263" class="Function">idC</a> <a id="4271" href="Categories.Category.Cocartesian.html#2133" class="Function Operator">+₁</a> <a id="4274" class="Symbol">(</a><a id="4275" href="Categories.Functor.Coalgebra.html#1411" class="Field">F-Coalgebra-Morphism.f</a> <a id="4298" class="Symbol">(</a><a id="4299" href="Categories.Object.Terminal.html#577" class="Function">Terminal.!</a> <a id="4310" class="Symbol">(</a><a id="4311" href="Monad.Instance.Delay.html#1864" class="Field">algebras</a> <a id="4320" href="Monad.Instance.Delay.html#3543" class="Bound">X</a><a id="4321" class="Symbol">)</a> <a id="4323" class="Symbol">{</a><a id="4324" class="Argument">A</a> <a id="4326" class="Symbol">=</a> <a id="4328" href="Monad.Instance.Delay.html#7957" class="Function">alg</a> <a id="4332" class="Symbol">(</a><a id="4333" href="Monad.Instance.Delay.html#2291" class="Function">now</a> <a id="4337" href="Monad.Instance.Delay.html#3543" class="Bound">X</a><a id="4338" class="Symbol">)})))</a> <a id="4344" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="4346" href="Categories.Object.Coproduct.html#532" class="Function Operator">[</a> <a id="4348" href="Categories.Object.Coproduct.html#492" class="Function">i₁</a> <a id="4351" href="Categories.Object.Coproduct.html#532" class="Function Operator">,</a> <a id="4353" href="Categories.Object.Coproduct.html#512" class="Function">i₂</a> <a id="4356" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="4358" href="Categories.Object.Coproduct.html#492" class="Function">i₁</a> <a id="4361" href="Categories.Object.Coproduct.html#532" class="Function Operator">]</a> <a id="4363" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="4365" href="Monad.Instance.Delay.html#2272" class="Function">out</a> <a id="4369" href="Monad.Instance.Delay.html#3543" class="Bound">X</a> <a id="4381" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function">≈⟨</a> <a id="4384" href="Categories.Morphism.Reasoning.Core.html#2048" class="Function">pullˡ</a> <a id="4390" href="Categories.Category.Cocartesian.html#2736" class="Function">∘[]</a> <a id="4394" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function"></a>
<a id="4404" href="Categories.Object.Coproduct.html#532" class="Function Operator">[</a> <a id="4406" class="Symbol">(</a><a id="4407" href="Monad.Instance.Delay.html#1263" class="Function">idC</a> <a id="4411" href="Categories.Category.Cocartesian.html#2133" class="Function Operator">+₁</a> <a id="4414" class="Symbol">(</a><a id="4415" href="Categories.Functor.Coalgebra.html#1411" class="Field">F-Coalgebra-Morphism.f</a> <a id="4438" class="Symbol">(</a><a id="4439" href="Categories.Object.Terminal.html#577" class="Function">Terminal.!</a> <a id="4450" class="Symbol">(</a><a id="4451" href="Monad.Instance.Delay.html#1864" class="Field">algebras</a> <a id="4460" href="Monad.Instance.Delay.html#3543" class="Bound">X</a><a id="4461" class="Symbol">)</a> <a id="4463" class="Symbol">{</a><a id="4464" class="Argument">A</a> <a id="4466" class="Symbol">=</a> <a id="4468" href="Monad.Instance.Delay.html#7957" class="Function">alg</a> <a id="4472" class="Symbol">(</a><a id="4473" href="Monad.Instance.Delay.html#2291" class="Function">now</a> <a id="4477" href="Monad.Instance.Delay.html#3543" class="Bound">X</a><a id="4478" class="Symbol">)})))</a> <a id="4484" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="4486" href="Categories.Object.Coproduct.html#492" class="Function">i₁</a>
<a id="4498" href="Categories.Object.Coproduct.html#532" class="Function Operator">,</a> <a id="4500" class="Symbol">(</a><a id="4501" href="Monad.Instance.Delay.html#1263" class="Function">idC</a> <a id="4505" href="Categories.Category.Cocartesian.html#2133" class="Function Operator">+₁</a> <a id="4508" class="Symbol">(</a><a id="4509" href="Categories.Functor.Coalgebra.html#1411" class="Field">F-Coalgebra-Morphism.f</a> <a id="4532" class="Symbol">(</a><a id="4533" href="Categories.Object.Terminal.html#577" class="Function">Terminal.!</a> <a id="4544" class="Symbol">(</a><a id="4545" href="Monad.Instance.Delay.html#1864" class="Field">algebras</a> <a id="4554" href="Monad.Instance.Delay.html#3543" class="Bound">X</a><a id="4555" class="Symbol">)</a> <a id="4557" class="Symbol">{</a><a id="4558" class="Argument">A</a> <a id="4560" class="Symbol">=</a> <a id="4562" href="Monad.Instance.Delay.html#7957" class="Function">alg</a> <a id="4566" class="Symbol">(</a><a id="4567" href="Monad.Instance.Delay.html#2291" class="Function">now</a> <a id="4571" href="Monad.Instance.Delay.html#3543" class="Bound">X</a><a id="4572" class="Symbol">)})))</a> <a id="4578" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="4580" href="Categories.Object.Coproduct.html#512" class="Function">i₂</a> <a id="4583" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="4585" href="Categories.Object.Coproduct.html#492" class="Function">i₁</a> <a id="4588" href="Categories.Object.Coproduct.html#532" class="Function Operator">]</a> <a id="4590" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="4592" href="Monad.Instance.Delay.html#2272" class="Function">out</a> <a id="4596" href="Monad.Instance.Delay.html#3543" class="Bound">X</a> <a id="4613" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function">≈⟨</a> <a id="4616" class="Symbol">(</a><a id="4617" href="Categories.Object.Coproduct.html#816" class="Function">[]-cong₂</a> <a id="4626" href="Categories.Category.Cocartesian.html#2548" class="Function">+₁∘i₁</a> <a id="4632" class="Symbol">(</a><a id="4633" href="Categories.Morphism.Reasoning.Core.html#2048" class="Function">pullˡ</a> <a id="4639" href="Categories.Category.Cocartesian.html#2585" class="Function">+₁∘i₂</a><a id="4644" class="Symbol">))</a> <a id="4647" href="Categories.Category.Core.html#2837" class="Function Operator">⟩∘⟨refl</a> <a id="4655" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function"></a>
<a id="4665" href="Categories.Object.Coproduct.html#532" class="Function Operator">[</a> <a id="4667" href="Categories.Object.Coproduct.html#492" class="Function">i₁</a> <a id="4670" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="4672" href="Monad.Instance.Delay.html#1263" class="Function">idC</a> <a id="4676" href="Categories.Object.Coproduct.html#532" class="Function Operator">,</a> <a id="4678" class="Symbol">(</a><a id="4679" href="Categories.Object.Coproduct.html#512" class="Function">i₂</a> <a id="4682" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="4684" class="Symbol">(</a><a id="4685" href="Categories.Functor.Coalgebra.html#1411" class="Field">F-Coalgebra-Morphism.f</a> <a id="4708" class="Symbol">(</a><a id="4709" href="Categories.Object.Terminal.html#577" class="Function">Terminal.!</a> <a id="4720" class="Symbol">(</a><a id="4721" href="Monad.Instance.Delay.html#1864" class="Field">algebras</a> <a id="4730" href="Monad.Instance.Delay.html#3543" class="Bound">X</a><a id="4731" class="Symbol">)</a> <a id="4733" class="Symbol">{</a><a id="4734" class="Argument">A</a> <a id="4736" class="Symbol">=</a> <a id="4738" href="Monad.Instance.Delay.html#7957" class="Function">alg</a> <a id="4742" class="Symbol">(</a><a id="4743" href="Monad.Instance.Delay.html#2291" class="Function">now</a> <a id="4747" href="Monad.Instance.Delay.html#3543" class="Bound">X</a><a id="4748" class="Symbol">)})))</a> <a id="4754" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="4756" href="Categories.Object.Coproduct.html#492" class="Function">i₁</a> <a id="4759" href="Categories.Object.Coproduct.html#532" class="Function Operator">]</a> <a id="4761" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="4763" href="Monad.Instance.Delay.html#2272" class="Function">out</a> <a id="4767" href="Monad.Instance.Delay.html#3543" class="Bound">X</a> <a id="4780" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function">≈⟨</a> <a id="4783" class="Symbol">(</a><a id="4784" href="Categories.Object.Coproduct.html#816" class="Function">[]-cong₂</a> <a id="4793" href="Relation.Binary.Structures.html#1577" class="Function">refl</a> <a id="4798" href="Categories.Category.Core.html#715" class="Function">assoc</a><a id="4803" class="Symbol">)</a> <a id="4805" href="Categories.Category.Core.html#2837" class="Function Operator">⟩∘⟨refl</a> <a id="4813" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function"></a>
<a id="4823" href="Categories.Object.Coproduct.html#532" class="Function Operator">[</a> <a id="4825" href="Categories.Object.Coproduct.html#492" class="Function">i₁</a> <a id="4828" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="4830" href="Monad.Instance.Delay.html#1263" class="Function">idC</a> <a id="4834" href="Categories.Object.Coproduct.html#532" class="Function Operator">,</a> <a id="4836" href="Categories.Object.Coproduct.html#512" class="Function">i₂</a> <a id="4839" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="4841" class="Symbol">(</a><a id="4842" href="Monad.Instance.Delay.html#8193" class="Function">extend</a> <a id="4849" class="Symbol">(</a><a id="4850" href="Monad.Instance.Delay.html#2291" class="Function">now</a> <a id="4854" href="Monad.Instance.Delay.html#3543" class="Bound">X</a><a id="4855" class="Symbol">))</a> <a id="4858" href="Categories.Object.Coproduct.html#532" class="Function Operator">]</a> <a id="4860" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="4862" href="Monad.Instance.Delay.html#2272" class="Function">out</a> <a id="4866" href="Monad.Instance.Delay.html#3543" class="Bound">X</a> <a id="4938" href="Relation.Binary.Reasoning.Setoid.html#1162" class="Function">≈˘⟨</a> <a id="4942" href="Categories.Category.Cocartesian.html#2662" class="Function">[]∘+₁</a> <a id="4948" href="Categories.Category.Core.html#2837" class="Function Operator">⟩∘⟨refl</a> <a id="4956" href="Relation.Binary.Reasoning.Setoid.html#1162" class="Function"></a>
<a id="4966" class="Symbol">(</a><a id="4967" href="Categories.Object.Coproduct.html#532" class="Function Operator">[</a> <a id="4969" href="Categories.Object.Coproduct.html#492" class="Function">i₁</a> <a id="4972" href="Categories.Object.Coproduct.html#532" class="Function Operator">,</a> <a id="4974" href="Categories.Object.Coproduct.html#512" class="Function">i₂</a> <a id="4977" href="Categories.Object.Coproduct.html#532" class="Function Operator">]</a> <a id="4979" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="4981" class="Symbol">(</a><a id="4982" href="Monad.Instance.Delay.html#1263" class="Function">idC</a> <a id="4986" href="Categories.Category.Cocartesian.html#2133" class="Function Operator">+₁</a> <a id="4989" href="Monad.Instance.Delay.html#8193" class="Function">extend</a> <a id="4996" class="Symbol">(</a><a id="4997" href="Monad.Instance.Delay.html#2291" class="Function">now</a> <a id="5001" href="Monad.Instance.Delay.html#3543" class="Bound">X</a><a id="5002" class="Symbol">)))</a> <a id="5006" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="5008" href="Monad.Instance.Delay.html#2272" class="Function">out</a> <a id="5012" href="Monad.Instance.Delay.html#3543" class="Bound">X</a> <a id="5081" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function">≈⟨</a> <a id="5084" class="Symbol">(</a><a id="5085" href="Categories.Morphism.Reasoning.Core.html#2948" class="Function">elimˡ</a> <a id="5091" href="Categories.Category.Cocartesian.html#1729" class="Function">+-η</a><a id="5094" class="Symbol">)</a> <a id="5096" href="Categories.Category.Core.html#2837" class="Function Operator">⟩∘⟨refl</a> <a id="5104" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function"></a>
<a id="5114" class="Symbol">(</a><a id="5115" href="Monad.Instance.Delay.html#1263" class="Function">idC</a> <a id="5119" href="Categories.Category.Cocartesian.html#2133" class="Function Operator">+₁</a> <a id="5122" href="Monad.Instance.Delay.html#8193" class="Function">extend</a> <a id="5129" class="Symbol">(</a><a id="5130" href="Monad.Instance.Delay.html#2291" class="Function">now</a> <a id="5134" href="Monad.Instance.Delay.html#3543" class="Bound">X</a><a id="5135" class="Symbol">))</a> <a id="5138" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="5140" href="Monad.Instance.Delay.html#2272" class="Function">out</a> <a id="5144" href="Monad.Instance.Delay.html#3543" class="Bound">X</a> <a id="5229" href="Relation.Binary.Reasoning.Base.Single.html#2564" class="Function Operator"></a> <a id="5231" class="Symbol">})</a>
<a id="5240" class="Symbol">;</a> <a id="5242" href="Categories.Monad.Relative.html#1078" class="Field">assoc</a> <a id="5248" class="Symbol">=</a> <a id="5250" class="Hole">{! !}</a>
<a id="5264" class="Symbol">;</a> <a id="5266" href="Categories.Monad.Relative.html#1190" class="Field">sym-assoc</a> <a id="5276" class="Symbol">=</a> <a id="5278" class="Hole">{! !}</a>
<a id="5292" class="Symbol">;</a> <a id="5294" href="Categories.Monad.Relative.html#1306" class="Field">extend-≈</a> <a id="5303" class="Symbol">=</a> <a id="5305" class="Symbol">λ</a> <a id="5307" class="Symbol">{</a><a id="5308" href="Monad.Instance.Delay.html#5308" class="Bound">X</a><a id="5309" class="Symbol">}</a> <a id="5311" class="Symbol">{</a><a id="5312" href="Monad.Instance.Delay.html#5312" class="Bound">Y</a><a id="5313" class="Symbol">}</a> <a id="5315" class="Symbol">{</a><a id="5316" href="Monad.Instance.Delay.html#5316" class="Bound">f</a><a id="5317" class="Symbol">}</a> <a id="5319" class="Symbol">{</a><a id="5320" href="Monad.Instance.Delay.html#5320" class="Bound">g</a><a id="5321" class="Symbol">}</a> <a id="5323" href="Monad.Instance.Delay.html#5323" class="Bound">eq</a> <a id="5326" class="Symbol"></a> <a id="5328" class="Hole">{! !}</a>
<a id="5351" class="Comment">-- begin </a>
<a id="5369" class="Comment">-- extend f ≈⟨ sym (Terminal.!-unique (algebras Y) (record { f = extend f ; commutes = F-Coalgebra-Morphism.commutes {! !} })) ⟩ </a>
<a id="5511" class="Comment">-- F-Coalgebra-Morphism.f ((Terminal.! (algebras Y) {A = alg&#39; {X} {Y}})) ≈˘⟨ sym (Terminal.!-unique (algebras Y) (record { f = extend g ; commutes = {! !} })) ⟩</a>
<a id="5684" class="Comment">-- extend g ∎</a>
<a id="5715" class="Comment">-- let </a>
<a id="5731" class="Comment">-- h : F-Coalgebra-Morphism (alg f) (alg g)</a>
<a id="5785" class="Comment">-- h = record { f = idC ; commutes = begin </a>
<a id="5839" class="Comment">-- F-Coalgebra.α (alg g) ∘ idC ≈⟨ id-comm ⟩ </a>
<a id="5896" class="Comment">-- idC ∘ F-Coalgebra.α (alg g) ≈⟨ refl⟩∘⟨ []-cong₂ (([]-cong₂ (refl⟩∘⟨ (refl⟩∘⟨ (sym eq))) refl) ⟩∘⟨refl) refl ⟩ </a>
<a id="6022" class="Comment">-- idC ∘ F-Coalgebra.α (alg f) ≈˘⟨ ([]-cong₂ identityʳ identityʳ ○ +-η) ⟩∘⟨refl ⟩</a>
<a id="6116" class="Comment">-- (idC +₁ idC) ∘ F-Coalgebra.α (alg f) ∎ }</a>
<a id="6172" class="Comment">-- x : F-Coalgebra-Morphism (alg f) (Terminal. (algebras Y))</a>
<a id="6244" class="Comment">-- x = (F-Coalgebras (delayF Y)) [ Terminal.! (algebras Y) ∘ h ]</a>
<a id="6319" class="Comment">-- in Terminal.!-unique₂ (algebras Y) {f = Terminal.! (algebras Y)} {g = {! !} } ⟩∘⟨refl</a>
<a id="6427" class="Comment">-- extend f ≈⟨ insertˡ (_≅_.isoˡ (out-≅ Y)) ⟩ </a>
<a id="6482" class="Comment">-- out⁻¹ Y ∘ out Y ∘ extend f ≈⟨ refl⟩∘⟨ pullˡ (F-Coalgebra-Morphism.commutes (Terminal.! (algebras Y) {A = alg f})) ⟩</a>
<a id="6609" class="Comment">-- out⁻¹ Y ∘ ((idC +₁ (F-Coalgebra-Morphism.f (Terminal.! (algebras Y)))) ∘ [ [ [ i₁ , i₂ ∘ i₂ ] ∘ (out Y ∘ f) , i₂ ∘ i₁ ] ∘ out X , (idC +₁ i₂) ∘ out Y ]) ∘ i₁ ≈⟨ refl⟩∘⟨ ((+₁-cong₂ refl (Terminal.!-unique₂ (algebras Y) {f = Terminal.! (algebras Y) {A = alg f}} {g = Terminal.! (algebras Y) {A = alg f}}) ⟩∘⟨ ([]-cong₂ (([]-cong₂ (refl⟩∘⟨ (refl⟩∘⟨ eq)) refl) ⟩∘⟨refl) refl)) ⟩∘⟨refl) ⟩</a>
<a id="7004" class="Comment">-- out⁻¹ Y ∘ ((idC +₁ (F-Coalgebra-Morphism.f (Terminal.! (algebras Y)))) ∘ [ [ [ i₁ , i₂ ∘ i₂ ] ∘ (out Y ∘ g) , i₂ ∘ i₁ ] ∘ out X , (idC +₁ i₂) ∘ out Y ]) ∘ i₁ ≈⟨ refl⟩∘⟨ (((+₁-cong₂ refl (Terminal.!-unique₂ (algebras Y) {f = Terminal.! (algebras Y)} {g = record { f = F-Coalgebra-Morphism.f (Terminal.! (algebras Y)) ; commutes = {! !} }})) ⟩∘⟨refl) ⟩∘⟨refl) ⟩</a>
<a id="7377" class="Comment">-- out⁻¹ Y ∘ ((idC +₁ (F-Coalgebra-Morphism.f (Terminal.! (algebras Y)))) ∘ [ [ [ i₁ , i₂ ∘ i₂ ] ∘ (out Y ∘ g) , i₂ ∘ i₁ ] ∘ out X , (idC +₁ i₂) ∘ out Y ]) ∘ i₁ ≈˘⟨ refl⟩∘⟨ pullˡ (F-Coalgebra-Morphism.commutes (Terminal.! (algebras Y) {A = alg g})) ⟩</a>
<a id="7636" class="Comment">-- out⁻¹ Y ∘ out Y ∘ extend g ≈˘⟨ insertˡ (_≅_.isoˡ (out-≅ Y)) ⟩</a>
<a id="7709" class="Comment">-- extend g ∎</a>
<a id="7729" class="Symbol">})</a>
<a id="7738" class="Keyword">where</a>
<a id="7752" href="Monad.Instance.Delay.html#7752" class="Function">alg&#39;</a> <a id="7757" class="Symbol">:</a> <a id="7759" class="Symbol"></a> <a id="7761" class="Symbol">{</a><a id="7762" href="Monad.Instance.Delay.html#7762" class="Bound">X</a> <a id="7764" href="Monad.Instance.Delay.html#7764" class="Bound">Y</a><a id="7765" class="Symbol">}</a> <a id="7767" class="Symbol"></a> <a id="7769" href="Categories.Functor.Coalgebra.html#483" class="Record">F-Coalgebra</a> <a id="7781" class="Symbol">(</a><a id="7782" href="Monad.Instance.Delay.html#1567" class="Function">delayF</a> <a id="7789" href="Monad.Instance.Delay.html#7764" class="Bound">Y</a><a id="7790" class="Symbol">)</a>
<a id="7800" href="Monad.Instance.Delay.html#7752" class="Function">alg&#39;</a> <a id="7805" class="Symbol">{</a><a id="7806" href="Monad.Instance.Delay.html#7806" class="Bound">X</a><a id="7807" class="Symbol">}</a> <a id="7809" class="Symbol">{</a><a id="7810" href="Monad.Instance.Delay.html#7810" class="Bound">Y</a><a id="7811" class="Symbol">}</a> <a id="7813" class="Symbol">=</a> <a id="7815" class="Keyword">record</a> <a id="7822" class="Symbol">{</a> <a id="7824" href="Categories.Functor.Coalgebra.html#571" class="Field">A</a> <a id="7826" class="Symbol">=</a> <a id="7828" href="Monad.Instance.Delay.html#2092" class="Function">D₀</a> <a id="7831" href="Monad.Instance.Delay.html#7806" class="Bound">X</a> <a id="7833" class="Symbol">;</a> <a id="7835" href="Categories.Functor.Coalgebra.html#585" class="Field">α</a> <a id="7837" class="Symbol">=</a> <a id="7839" href="Categories.Object.Coproduct.html#512" class="Function">i₂</a> <a id="7842" class="Symbol">}</a>
<a id="7852" class="Keyword">module</a> <a id="7859" href="Monad.Instance.Delay.html#7859" class="Module">_</a> <a id="7861" class="Symbol">{</a><a id="7862" href="Monad.Instance.Delay.html#7862" class="Bound">X</a> <a id="7864" href="Monad.Instance.Delay.html#7864" class="Bound">Y</a> <a id="7866" class="Symbol">:</a> <a id="7868" href="Categories.Category.Core.html#559" class="Function">Obj</a><a id="7871" class="Symbol">}</a> <a id="7873" class="Symbol">(</a><a id="7874" href="Monad.Instance.Delay.html#7874" class="Bound">f</a> <a id="7876" class="Symbol">:</a> <a id="7878" href="Monad.Instance.Delay.html#7862" class="Bound">X</a> <a id="7880" href="Categories.Category.Core.html#575" class="Function Operator"></a> <a id="7882" href="Monad.Instance.Delay.html#2092" class="Function">D₀</a> <a id="7885" href="Monad.Instance.Delay.html#7864" class="Bound">Y</a><a id="7886" class="Symbol">)</a> <a id="7888" class="Keyword">where</a>
<a id="7904" class="Keyword">open</a> <a id="7909" href="Categories.Object.Terminal.html#860" class="Module">Terminal</a> <a id="7918" class="Symbol">(</a><a id="7919" href="Monad.Instance.Delay.html#1864" class="Field">algebras</a> <a id="7928" href="Monad.Instance.Delay.html#7864" class="Bound">Y</a><a id="7929" class="Symbol">)</a> <a id="7931" class="Keyword">using</a> <a id="7937" class="Symbol">(</a><a id="7938" href="Categories.Object.Terminal.html#577" class="Function">!</a><a id="7939" class="Symbol">;</a> <a id="7941" href="Categories.Object.Terminal.html#803" class="Function">-id</a><a id="7945" class="Symbol">)</a>
<a id="7957" href="Monad.Instance.Delay.html#7957" class="Function">alg</a> <a id="7961" class="Symbol">:</a> <a id="7963" href="Categories.Functor.Coalgebra.html#483" class="Record">F-Coalgebra</a> <a id="7975" class="Symbol">(</a><a id="7976" href="Monad.Instance.Delay.html#1567" class="Function">delayF</a> <a id="7983" href="Monad.Instance.Delay.html#7864" class="Bound">Y</a><a id="7984" class="Symbol">)</a>
<a id="7996" href="Monad.Instance.Delay.html#7957" class="Function">alg</a> <a id="8000" class="Symbol">=</a> <a id="8002" class="Keyword">record</a> <a id="8009" class="Symbol">{</a> <a id="8011" href="Categories.Functor.Coalgebra.html#571" class="Field">A</a> <a id="8013" class="Symbol">=</a> <a id="8015" href="Monad.Instance.Delay.html#2092" class="Function">D₀</a> <a id="8018" href="Monad.Instance.Delay.html#7862" class="Bound">X</a> <a id="8020" href="Categories.Category.Cocartesian.html#1549" class="Function Operator">+</a> <a id="8022" href="Monad.Instance.Delay.html#2092" class="Function">D₀</a> <a id="8025" href="Monad.Instance.Delay.html#7864" class="Bound">Y</a> <a id="8027" class="Symbol">;</a> <a id="8029" href="Categories.Functor.Coalgebra.html#585" class="Field">α</a> <a id="8031" class="Symbol">=</a> <a id="8033" href="Categories.Object.Coproduct.html#532" class="Function Operator">[</a> <a id="8035" href="Categories.Object.Coproduct.html#532" class="Function Operator">[</a> <a id="8037" href="Categories.Object.Coproduct.html#532" class="Function Operator">[</a> <a id="8039" href="Categories.Object.Coproduct.html#492" class="Function">i₁</a> <a id="8042" href="Categories.Object.Coproduct.html#532" class="Function Operator">,</a> <a id="8044" href="Categories.Object.Coproduct.html#512" class="Function">i₂</a> <a id="8047" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="8049" href="Categories.Object.Coproduct.html#512" class="Function">i₂</a> <a id="8052" href="Categories.Object.Coproduct.html#532" class="Function Operator">]</a> <a id="8054" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="8056" class="Symbol">(</a><a id="8057" href="Monad.Instance.Delay.html#2272" class="Function">out</a> <a id="8061" href="Monad.Instance.Delay.html#7864" class="Bound">Y</a> <a id="8063" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="8065" href="Monad.Instance.Delay.html#7874" class="Bound">f</a><a id="8066" class="Symbol">)</a> <a id="8068" href="Categories.Object.Coproduct.html#532" class="Function Operator">,</a> <a id="8070" href="Categories.Object.Coproduct.html#512" class="Function">i₂</a> <a id="8073" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="8075" href="Categories.Object.Coproduct.html#492" class="Function">i₁</a> <a id="8078" href="Categories.Object.Coproduct.html#532" class="Function Operator">]</a> <a id="8080" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="8082" href="Monad.Instance.Delay.html#2272" class="Function">out</a> <a id="8086" href="Monad.Instance.Delay.html#7862" class="Bound">X</a> <a id="8088" href="Categories.Object.Coproduct.html#532" class="Function Operator">,</a> <a id="8090" class="Symbol">(</a><a id="8091" href="Monad.Instance.Delay.html#1263" class="Function">idC</a> <a id="8095" href="Categories.Category.Cocartesian.html#2133" class="Function Operator">+₁</a> <a id="8098" href="Categories.Object.Coproduct.html#512" class="Function">i₂</a><a id="8100" class="Symbol">)</a> <a id="8102" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="8104" href="Monad.Instance.Delay.html#2272" class="Function">out</a> <a id="8108" href="Monad.Instance.Delay.html#7864" class="Bound">Y</a> <a id="8110" href="Categories.Object.Coproduct.html#532" class="Function Operator">]</a> <a id="8112" class="Symbol">}</a> <a id="8115" class="Comment">-- (idC +₁ (idC +₁ [ idC , idC ]) ∘ _≅_.to +-assoc ∘ _≅_.to +-comm)</a>
<a id="8193" href="Monad.Instance.Delay.html#8193" class="Function">extend</a> <a id="8200" class="Symbol">:</a> <a id="8202" href="Monad.Instance.Delay.html#2092" class="Function">D₀</a> <a id="8205" href="Monad.Instance.Delay.html#7862" class="Bound">X</a> <a id="8207" href="Categories.Category.Core.html#575" class="Function Operator"></a> <a id="8209" href="Monad.Instance.Delay.html#2092" class="Function">D₀</a> <a id="8212" href="Monad.Instance.Delay.html#7864" class="Bound">Y</a>
<a id="8224" href="Monad.Instance.Delay.html#8193" class="Function">extend</a> <a id="8231" class="Symbol">=</a> <a id="8233" href="Categories.Functor.Coalgebra.html#1411" class="Field">F-Coalgebra-Morphism.f</a> <a id="8256" class="Symbol">(</a><a id="8257" href="Categories.Object.Terminal.html#577" class="Function">!</a> <a id="8259" class="Symbol">{</a><a id="8260" class="Argument">A</a> <a id="8262" class="Symbol">=</a> <a id="8264" href="Monad.Instance.Delay.html#7957" class="Function">alg</a><a id="8267" class="Symbol">})</a> <a id="8270" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="8272" href="Categories.Object.Coproduct.html#492" class="Function">i₁</a> <a id="8275" class="Symbol">{</a><a id="8276" class="Argument">B</a> <a id="8278" class="Symbol">=</a> <a id="8280" href="Monad.Instance.Delay.html#2092" class="Function">D₀</a> <a id="8283" href="Monad.Instance.Delay.html#7864" class="Bound">Y</a><a id="8284" class="Symbol">}</a>
<a id="8296" href="Monad.Instance.Delay.html#8296" class="Function">!∘i₂</a> <a id="8301" class="Symbol">:</a> <a id="8303" href="Categories.Functor.Coalgebra.html#1411" class="Field">F-Coalgebra-Morphism.f</a> <a id="8326" class="Symbol">(</a><a id="8327" href="Categories.Object.Terminal.html#577" class="Function">!</a> <a id="8329" class="Symbol">{</a><a id="8330" class="Argument">A</a> <a id="8332" class="Symbol">=</a> <a id="8334" href="Monad.Instance.Delay.html#7957" class="Function">alg</a><a id="8337" class="Symbol">})</a> <a id="8340" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="8342" href="Categories.Object.Coproduct.html#512" class="Function">i₂</a> <a id="8345" href="Categories.Category.Core.html#595" class="Function Operator"></a> <a id="8347" href="Monad.Instance.Delay.html#1263" class="Function">idC</a>
<a id="8361" href="Monad.Instance.Delay.html#8296" class="Function">!∘i₂</a> <a id="8366" class="Symbol">=</a> <a id="8368" href="Categories.Object.Terminal.html#803" class="Function">-id</a> <a id="8373" class="Symbol">(</a><a id="8374" href="Categories.Category.Construction.F-Coalgebras.html#598" class="Function">F-Coalgebras</a> <a id="8387" class="Symbol">(</a><a id="8388" href="Monad.Instance.Delay.html#1567" class="Function">delayF</a> <a id="8395" href="Monad.Instance.Delay.html#7864" class="Bound">Y</a><a id="8396" class="Symbol">)</a> <a id="8398" href="Categories.Category.html#700" class="Function Operator">[</a> <a id="8400" href="Categories.Object.Terminal.html#577" class="Function">!</a> <a id="8402" href="Categories.Category.html#700" class="Function Operator"></a> <a id="8404" class="Keyword">record</a> <a id="8411" class="Symbol">{</a> <a id="8413" href="Categories.Functor.Coalgebra.html#1411" class="Field">f</a> <a id="8415" class="Symbol">=</a> <a id="8417" href="Categories.Object.Coproduct.html#512" class="Function">i₂</a> <a id="8420" class="Symbol">;</a> <a id="8422" href="Categories.Functor.Coalgebra.html#1433" class="Field">commutes</a> <a id="8431" class="Symbol">=</a> <a id="8433" href="Categories.Object.Coproduct.html#602" class="Function">inject₂</a> <a id="8441" class="Symbol">}</a> <a id="8443" href="Categories.Category.html#700" class="Function Operator">]</a> <a id="8445" class="Symbol">)</a>
<a id="8457" href="Monad.Instance.Delay.html#8457" class="Function">extendlaw</a> <a id="8467" class="Symbol">:</a> <a id="8469" href="Monad.Instance.Delay.html#2272" class="Function">out</a> <a id="8473" href="Monad.Instance.Delay.html#7864" class="Bound">Y</a> <a id="8475" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="8477" href="Monad.Instance.Delay.html#8193" class="Function">extend</a> <a id="8484" href="Categories.Category.Core.html#595" class="Function Operator"></a> <a id="8486" href="Categories.Object.Coproduct.html#532" class="Function Operator">[</a> <a id="8488" href="Monad.Instance.Delay.html#2272" class="Function">out</a> <a id="8492" href="Monad.Instance.Delay.html#7864" class="Bound">Y</a> <a id="8494" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="8496" href="Monad.Instance.Delay.html#7874" class="Bound">f</a> <a id="8498" href="Categories.Object.Coproduct.html#532" class="Function Operator">,</a> <a id="8500" href="Categories.Object.Coproduct.html#512" class="Function">i₂</a> <a id="8503" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="8505" href="Monad.Instance.Delay.html#8193" class="Function">extend</a> <a id="8512" href="Categories.Object.Coproduct.html#532" class="Function Operator">]</a> <a id="8514" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="8516" href="Monad.Instance.Delay.html#2272" class="Function">out</a> <a id="8520" href="Monad.Instance.Delay.html#7862" class="Bound">X</a>
<a id="8532" href="Monad.Instance.Delay.html#8457" class="Function">extendlaw</a> <a id="8542" class="Symbol">=</a> <a id="8544" href="Relation.Binary.Reasoning.Base.Single.html#1925" class="Function Operator">begin</a>
<a id="8563" href="Monad.Instance.Delay.html#2272" class="Function">out</a> <a id="8567" href="Monad.Instance.Delay.html#7864" class="Bound">Y</a> <a id="8569" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="8571" href="Monad.Instance.Delay.html#8193" class="Function">extend</a> <a id="8578" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function">≈⟨</a> <a id="8581" href="Categories.Morphism.Reasoning.Core.html#2048" class="Function">pullˡ</a> <a id="8587" class="Symbol">(</a><a id="8588" href="Categories.Functor.Coalgebra.html#1433" class="Field">F-Coalgebra-Morphism.commutes</a> <a id="8618" class="Symbol">(</a><a id="8619" href="Categories.Object.Terminal.html#577" class="Function">!</a> <a id="8621" class="Symbol">{</a><a id="8622" class="Argument">A</a> <a id="8624" class="Symbol">=</a> <a id="8626" href="Monad.Instance.Delay.html#7957" class="Function">alg</a><a id="8629" class="Symbol">}))</a> <a id="8633" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function"></a>
<a id="8648" class="Symbol">((</a><a id="8650" href="Monad.Instance.Delay.html#1263" class="Function">idC</a> <a id="8654" href="Categories.Category.Cocartesian.html#2133" class="Function Operator">+₁</a> <a id="8657" class="Symbol">(</a><a id="8658" href="Categories.Functor.Coalgebra.html#1411" class="Field">F-Coalgebra-Morphism.f</a> <a id="8681" href="Categories.Object.Terminal.html#577" class="Function">!</a><a id="8682" class="Symbol">))</a> <a id="8685" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="8687" href="Categories.Functor.Coalgebra.html#585" class="Field">F-Coalgebra.α</a> <a id="8701" href="Monad.Instance.Delay.html#7957" class="Function">alg</a><a id="8704" class="Symbol">)</a> <a id="8706" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="8708" href="Categories.Object.Coproduct.html#492" class="Function">coproduct.i₁</a> <a id="8739" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function">≈⟨</a> <a id="8742" href="Categories.Morphism.Reasoning.Core.html#1914" class="Function">pullʳ</a> <a id="8748" href="Categories.Object.Coproduct.html#569" class="Function">inject₁</a> <a id="8756" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function"></a>
<a id="8770" class="Symbol">(</a><a id="8771" href="Monad.Instance.Delay.html#1263" class="Function">idC</a> <a id="8775" href="Categories.Category.Cocartesian.html#2133" class="Function Operator">+₁</a> <a id="8778" class="Symbol">(</a><a id="8779" href="Categories.Functor.Coalgebra.html#1411" class="Field">F-Coalgebra-Morphism.f</a> <a id="8802" href="Categories.Object.Terminal.html#577" class="Function">!</a><a id="8803" class="Symbol">))</a> <a id="8806" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="8808" href="Categories.Object.Coproduct.html#532" class="Function Operator">[</a> <a id="8810" href="Categories.Object.Coproduct.html#532" class="Function Operator">[</a> <a id="8812" href="Categories.Object.Coproduct.html#492" class="Function">i₁</a> <a id="8815" href="Categories.Object.Coproduct.html#532" class="Function Operator">,</a> <a id="8817" href="Categories.Object.Coproduct.html#512" class="Function">i₂</a> <a id="8820" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="8822" href="Categories.Object.Coproduct.html#512" class="Function">i₂</a> <a id="8825" href="Categories.Object.Coproduct.html#532" class="Function Operator">]</a> <a id="8827" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="8829" class="Symbol">(</a><a id="8830" href="Monad.Instance.Delay.html#2272" class="Function">out</a> <a id="8834" href="Monad.Instance.Delay.html#7864" class="Bound">Y</a> <a id="8836" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="8838" href="Monad.Instance.Delay.html#7874" class="Bound">f</a><a id="8839" class="Symbol">)</a> <a id="8841" href="Categories.Object.Coproduct.html#532" class="Function Operator">,</a> <a id="8843" href="Categories.Object.Coproduct.html#512" class="Function">i₂</a> <a id="8846" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="8848" href="Categories.Object.Coproduct.html#492" class="Function">i₁</a> <a id="8851" href="Categories.Object.Coproduct.html#532" class="Function Operator">]</a> <a id="8853" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="8855" href="Monad.Instance.Delay.html#2272" class="Function">out</a> <a id="8859" href="Monad.Instance.Delay.html#7862" class="Bound">X</a> <a id="8861" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function">≈⟨</a> <a id="8864" href="Categories.Morphism.Reasoning.Core.html#2048" class="Function">pullˡ</a> <a id="8870" href="Categories.Category.Cocartesian.html#2736" class="Function">∘[]</a> <a id="8874" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function"></a>
<a id="8888" href="Categories.Object.Coproduct.html#532" class="Function Operator">[</a> <a id="8890" class="Symbol">(</a><a id="8891" href="Monad.Instance.Delay.html#1263" class="Function">idC</a> <a id="8895" href="Categories.Category.Cocartesian.html#2133" class="Function Operator">+₁</a> <a id="8898" class="Symbol">(</a><a id="8899" href="Categories.Functor.Coalgebra.html#1411" class="Field">F-Coalgebra-Morphism.f</a> <a id="8922" href="Categories.Object.Terminal.html#577" class="Function">!</a><a id="8923" class="Symbol">))</a> <a id="8926" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="8928" href="Categories.Object.Coproduct.html#532" class="Function Operator">[</a> <a id="8930" href="Categories.Object.Coproduct.html#492" class="Function">i₁</a> <a id="8933" href="Categories.Object.Coproduct.html#532" class="Function Operator">,</a> <a id="8935" href="Categories.Object.Coproduct.html#512" class="Function">i₂</a> <a id="8938" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="8940" href="Categories.Object.Coproduct.html#512" class="Function">i₂</a> <a id="8943" href="Categories.Object.Coproduct.html#532" class="Function Operator">]</a> <a id="8945" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="8947" class="Symbol">(</a><a id="8948" href="Monad.Instance.Delay.html#2272" class="Function">out</a> <a id="8952" href="Monad.Instance.Delay.html#7864" class="Bound">Y</a> <a id="8954" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="8956" href="Monad.Instance.Delay.html#7874" class="Bound">f</a><a id="8957" class="Symbol">)</a>
<a id="8972" href="Categories.Object.Coproduct.html#532" class="Function Operator">,</a> <a id="8974" class="Symbol">(</a><a id="8975" href="Monad.Instance.Delay.html#1263" class="Function">idC</a> <a id="8979" href="Categories.Category.Cocartesian.html#2133" class="Function Operator">+₁</a> <a id="8982" class="Symbol">(</a><a id="8983" href="Categories.Functor.Coalgebra.html#1411" class="Field">F-Coalgebra-Morphism.f</a> <a id="9006" href="Categories.Object.Terminal.html#577" class="Function">!</a><a id="9007" class="Symbol">))</a> <a id="9010" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="9012" href="Categories.Object.Coproduct.html#512" class="Function">i₂</a> <a id="9015" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="9017" href="Categories.Object.Coproduct.html#492" class="Function">i₁</a> <a id="9020" href="Categories.Object.Coproduct.html#532" class="Function Operator">]</a> <a id="9022" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="9024" href="Monad.Instance.Delay.html#2272" class="Function">out</a> <a id="9028" href="Monad.Instance.Delay.html#7862" class="Bound">X</a> <a id="9063" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function">≈⟨</a> <a id="9066" class="Symbol">(</a><a id="9067" href="Categories.Object.Coproduct.html#816" class="Function">[]-cong₂</a> <a id="9076" class="Symbol">(</a><a id="9077" href="Categories.Morphism.Reasoning.Core.html#2048" class="Function">pullˡ</a> <a id="9083" href="Categories.Category.Cocartesian.html#2736" class="Function">∘[]</a><a id="9086" class="Symbol">)</a> <a id="9088" class="Symbol">(</a><a id="9089" href="Categories.Morphism.Reasoning.Core.html#2048" class="Function">pullˡ</a> <a id="9095" href="Categories.Category.Cocartesian.html#2585" class="Function">+₁∘i₂</a><a id="9100" class="Symbol">))</a> <a id="9103" href="Categories.Category.Core.html#2837" class="Function Operator">⟩∘⟨refl</a> <a id="9111" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function"></a>
<a id="9125" href="Categories.Object.Coproduct.html#532" class="Function Operator">[</a> <a id="9127" href="Categories.Object.Coproduct.html#532" class="Function Operator">[</a> <a id="9129" class="Symbol">(</a><a id="9130" href="Monad.Instance.Delay.html#1263" class="Function">idC</a> <a id="9134" href="Categories.Category.Cocartesian.html#2133" class="Function Operator">+₁</a> <a id="9137" class="Symbol">(</a><a id="9138" href="Categories.Functor.Coalgebra.html#1411" class="Field">F-Coalgebra-Morphism.f</a> <a id="9161" href="Categories.Object.Terminal.html#577" class="Function">!</a><a id="9162" class="Symbol">))</a> <a id="9165" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="9167" href="Categories.Object.Coproduct.html#492" class="Function">i₁</a>
<a id="9185" href="Categories.Object.Coproduct.html#532" class="Function Operator">,</a> <a id="9187" class="Symbol">(</a><a id="9188" href="Monad.Instance.Delay.html#1263" class="Function">idC</a> <a id="9192" href="Categories.Category.Cocartesian.html#2133" class="Function Operator">+₁</a> <a id="9195" class="Symbol">(</a><a id="9196" href="Categories.Functor.Coalgebra.html#1411" class="Field">F-Coalgebra-Morphism.f</a> <a id="9219" href="Categories.Object.Terminal.html#577" class="Function">!</a><a id="9220" class="Symbol">))</a> <a id="9223" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="9225" href="Categories.Object.Coproduct.html#512" class="Function">i₂</a> <a id="9228" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="9230" href="Categories.Object.Coproduct.html#512" class="Function">i₂</a> <a id="9233" href="Categories.Object.Coproduct.html#532" class="Function Operator">]</a> <a id="9235" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="9237" class="Symbol">(</a><a id="9238" href="Monad.Instance.Delay.html#2272" class="Function">out</a> <a id="9242" href="Monad.Instance.Delay.html#7864" class="Bound">Y</a> <a id="9244" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="9246" href="Monad.Instance.Delay.html#7874" class="Bound">f</a><a id="9247" class="Symbol">)</a>
<a id="9262" href="Categories.Object.Coproduct.html#532" class="Function Operator">,</a> <a id="9264" class="Symbol">(</a><a id="9265" href="Categories.Object.Coproduct.html#512" class="Function">i₂</a> <a id="9268" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="9270" class="Symbol">(</a><a id="9271" href="Categories.Functor.Coalgebra.html#1411" class="Field">F-Coalgebra-Morphism.f</a> <a id="9294" href="Categories.Object.Terminal.html#577" class="Function">!</a><a id="9295" class="Symbol">))</a> <a id="9298" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="9300" href="Categories.Object.Coproduct.html#492" class="Function">i₁</a> <a id="9303" href="Categories.Object.Coproduct.html#532" class="Function Operator">]</a> <a id="9305" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="9307" href="Monad.Instance.Delay.html#2272" class="Function">out</a> <a id="9311" href="Monad.Instance.Delay.html#7862" class="Bound">X</a> <a id="9353" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function">≈⟨</a> <a id="9356" class="Symbol">(</a><a id="9357" href="Categories.Object.Coproduct.html#816" class="Function">[]-cong₂</a> <a id="9366" class="Symbol">((</a><a id="9368" href="Categories.Object.Coproduct.html#816" class="Function">[]-cong₂</a> <a id="9377" href="Categories.Category.Cocartesian.html#2548" class="Function">+₁∘i₁</a> <a id="9383" class="Symbol">(</a><a id="9384" href="Categories.Morphism.Reasoning.Core.html#2048" class="Function">pullˡ</a> <a id="9390" href="Categories.Category.Cocartesian.html#2585" class="Function">+₁∘i₂</a><a id="9395" class="Symbol">))</a> <a id="9398" href="Categories.Category.Core.html#2837" class="Function Operator">⟩∘⟨refl</a><a id="9405" class="Symbol">)</a> <a id="9407" href="Relation.Binary.Structures.html#1577" class="Function">refl</a><a id="9411" class="Symbol">)</a> <a id="9413" href="Categories.Category.Core.html#2837" class="Function Operator">⟩∘⟨refl</a> <a id="9421" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function"></a>
<a id="9435" href="Categories.Object.Coproduct.html#532" class="Function Operator">[</a> <a id="9437" href="Categories.Object.Coproduct.html#532" class="Function Operator">[</a> <a id="9439" href="Categories.Object.Coproduct.html#492" class="Function">i₁</a> <a id="9442" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="9444" href="Monad.Instance.Delay.html#1263" class="Function">idC</a> <a id="9448" href="Categories.Object.Coproduct.html#532" class="Function Operator">,</a> <a id="9450" class="Symbol">(</a><a id="9451" href="Categories.Object.Coproduct.html#512" class="Function">i₂</a> <a id="9454" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="9456" class="Symbol">(</a><a id="9457" href="Categories.Functor.Coalgebra.html#1411" class="Field">F-Coalgebra-Morphism.f</a> <a id="9480" href="Categories.Object.Terminal.html#577" class="Function">!</a><a id="9481" class="Symbol">))</a> <a id="9484" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="9486" href="Categories.Object.Coproduct.html#512" class="Function">i₂</a> <a id="9489" href="Categories.Object.Coproduct.html#532" class="Function Operator">]</a> <a id="9491" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="9493" class="Symbol">(</a><a id="9494" href="Monad.Instance.Delay.html#2272" class="Function">out</a> <a id="9498" href="Monad.Instance.Delay.html#7864" class="Bound">Y</a> <a id="9500" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="9502" href="Monad.Instance.Delay.html#7874" class="Bound">f</a><a id="9503" class="Symbol">)</a>
<a id="9518" href="Categories.Object.Coproduct.html#532" class="Function Operator">,</a> <a id="9520" class="Symbol">(</a><a id="9521" href="Categories.Object.Coproduct.html#512" class="Function">i₂</a> <a id="9524" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="9526" class="Symbol">(</a><a id="9527" href="Categories.Functor.Coalgebra.html#1411" class="Field">F-Coalgebra-Morphism.f</a> <a id="9550" href="Categories.Object.Terminal.html#577" class="Function">!</a><a id="9551" class="Symbol">))</a> <a id="9554" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="9556" href="Categories.Object.Coproduct.html#492" class="Function">i₁</a> <a id="9559" href="Categories.Object.Coproduct.html#532" class="Function Operator">]</a> <a id="9561" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="9563" href="Monad.Instance.Delay.html#2272" class="Function">out</a> <a id="9567" href="Monad.Instance.Delay.html#7862" class="Bound">X</a> <a id="9609" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function">≈⟨</a> <a id="9612" class="Symbol">(</a><a id="9613" href="Categories.Object.Coproduct.html#816" class="Function">[]-cong₂</a> <a id="9622" class="Symbol">(</a><a id="9623" href="Categories.Morphism.Reasoning.Core.html#2948" class="Function">elimˡ</a> <a id="9629" class="Symbol">((</a><a id="9631" href="Categories.Object.Coproduct.html#816" class="Function">[]-cong₂</a> <a id="9640" href="Categories.Category.Core.html#1145" class="Function">identityʳ</a> <a id="9650" class="Symbol">(</a><a id="9651" href="Categories.Morphism.Reasoning.Core.html#6665" class="Function">cancelʳ</a> <a id="9659" href="Monad.Instance.Delay.html#8296" class="Function">!∘i₂</a><a id="9663" class="Symbol">))</a> <a id="9666" href="Categories.Category.Core.html#3061" class="Function Operator"></a> <a id="9668" href="Categories.Category.Cocartesian.html#1729" class="Function">+-η</a><a id="9671" class="Symbol">))</a> <a id="9674" href="Categories.Category.Core.html#715" class="Function">assoc</a><a id="9679" class="Symbol">)</a> <a id="9681" href="Categories.Category.Core.html#2837" class="Function Operator">⟩∘⟨refl</a> <a id="9689" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function"></a>
<a id="9703" href="Categories.Object.Coproduct.html#532" class="Function Operator">[</a> <a id="9705" href="Monad.Instance.Delay.html#2272" class="Function">out</a> <a id="9709" href="Monad.Instance.Delay.html#7864" class="Bound">Y</a> <a id="9711" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="9713" href="Monad.Instance.Delay.html#7874" class="Bound">f</a> <a id="9715" href="Categories.Object.Coproduct.html#532" class="Function Operator">,</a> <a id="9717" href="Categories.Object.Coproduct.html#512" class="Function">i₂</a> <a id="9720" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="9722" href="Monad.Instance.Delay.html#8193" class="Function">extend</a> <a id="9729" href="Categories.Object.Coproduct.html#532" class="Function Operator">]</a> <a id="9731" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="9733" href="Monad.Instance.Delay.html#2272" class="Function">out</a> <a id="9737" href="Monad.Instance.Delay.html#7862" class="Bound">X</a> <a id="9739" href="Relation.Binary.Reasoning.Base.Single.html#2564" class="Function Operator"></a>
</pre> </pre>
<p>Now lets define the monad:</p> <h3 id="old-definitions">Old definitions:</h3>
<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> <pre class="Agda"> <a id="9779" class="Keyword">record</a> <a id="DelayMonad"></a><a id="9786" href="Monad.Instance.Delay.html#9786" class="Record">DelayMonad</a> <a id="9797" class="Symbol">:</a> <a id="9799" href="Agda.Primitive.html#320" class="Primitive">Set</a> <a id="9803" class="Symbol">(</a><a id="9804" href="Monad.Instance.Delay.html#1143" class="Bound">o</a> <a id="9806" href="Agda.Primitive.html#804" class="Primitive Operator"></a> <a id="9808" href="Monad.Instance.Delay.html#1145" class="Bound"></a> <a id="9810" href="Agda.Primitive.html#804" class="Primitive Operator"></a> <a id="9812" href="Monad.Instance.Delay.html#1147" class="Bound">e</a><a id="9813" class="Symbol">)</a> <a id="9815" class="Keyword">where</a>
<a id="2179" class="Keyword">field</a> <a id="9825" 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="DelayMonad.D₀"></a><a id="9837" href="Monad.Instance.Delay.html#9837" class="Field">D₀</a> <a id="9840" class="Symbol">:</a> <a id="9842" href="Categories.Category.Core.html#559" class="Function">Obj</a> <a id="9846" class="Symbol"></a> <a id="9848" href="Categories.Category.Core.html#559" class="Function">Obj</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="2237" class="Keyword">field</a> <a id="9857" class="Keyword">field</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="DelayMonad.now"></a><a id="9869" href="Monad.Instance.Delay.html#9869" class="Field">now</a> <a id="9873" class="Symbol">:</a> <a id="9875" class="Symbol"></a> <a id="9877" class="Symbol">{</a><a id="9878" href="Monad.Instance.Delay.html#9878" class="Bound">X</a><a id="9879" class="Symbol">}</a> <a id="9881" class="Symbol"></a> <a id="9883" href="Monad.Instance.Delay.html#9878" class="Bound">X</a> <a id="9885" href="Categories.Category.Core.html#575" class="Function Operator"></a> <a id="9887" href="Monad.Instance.Delay.html#9837" class="Field">D₀</a> <a id="9890" href="Monad.Instance.Delay.html#9878" class="Bound">X</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.later"></a><a id="9898" href="Monad.Instance.Delay.html#9898" class="Field">later</a> <a id="9904" class="Symbol">:</a> <a id="9906" class="Symbol"></a> <a id="9908" class="Symbol">{</a><a id="9909" href="Monad.Instance.Delay.html#9909" class="Bound">X</a><a id="9910" class="Symbol">}</a> <a id="9912" class="Symbol"></a> <a id="9914" href="Monad.Instance.Delay.html#9837" class="Field">D₀</a> <a id="9917" href="Monad.Instance.Delay.html#9909" class="Bound">X</a> <a id="9919" href="Categories.Category.Core.html#575" class="Function Operator"></a> <a id="9921" href="Monad.Instance.Delay.html#9837" class="Field">D₀</a> <a id="9924" href="Monad.Instance.Delay.html#9909" class="Bound">X</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.isIso"></a><a id="9932" href="Monad.Instance.Delay.html#9932" class="Field">isIso</a> <a id="9938" class="Symbol">:</a> <a id="9940" class="Symbol"></a> <a id="9942" class="Symbol">{</a><a id="9943" href="Monad.Instance.Delay.html#9943" class="Bound">X</a><a id="9944" class="Symbol">}</a> <a id="9946" class="Symbol"></a> <a id="9948" href="Categories.Morphism.html#1826" class="Record">IsIso</a> <a id="9954" class="Symbol">(</a><a id="9955" href="Categories.Object.Coproduct.html#532" class="Function Operator">[</a> <a id="9957" href="Monad.Instance.Delay.html#9869" class="Field">now</a> <a id="9961" class="Symbol">{</a><a id="9962" href="Monad.Instance.Delay.html#9943" class="Bound">X</a><a id="9963" class="Symbol">}</a> <a id="9965" href="Categories.Object.Coproduct.html#532" class="Function Operator">,</a> <a id="9967" href="Monad.Instance.Delay.html#9898" class="Field">later</a> <a id="9973" class="Symbol">{</a><a id="9974" href="Monad.Instance.Delay.html#9943" class="Bound">X</a><a id="9975" class="Symbol">}</a> <a id="9977" href="Categories.Object.Coproduct.html#532" class="Function Operator">]</a><a id="9978" class="Symbol">)</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="DelayMonad.out"></a><a id="9985" href="Monad.Instance.Delay.html#9985" class="Function">out</a> <a id="9989" class="Symbol">:</a> <a id="9991" class="Symbol"></a> <a id="9993" class="Symbol">{</a><a id="9994" href="Monad.Instance.Delay.html#9994" class="Bound">X</a><a id="9995" class="Symbol">}</a> <a id="9997" class="Symbol"></a> <a id="9999" href="Monad.Instance.Delay.html#9837" class="Field">D₀</a> <a id="10002" href="Monad.Instance.Delay.html#9994" class="Bound">X</a> <a id="10004" href="Categories.Category.Core.html#575" class="Function Operator"></a> <a id="10006" href="Monad.Instance.Delay.html#9994" class="Bound">X</a> <a id="10008" href="Categories.Category.Cocartesian.html#1549" class="Function Operator">+</a> <a id="10010" href="Monad.Instance.Delay.html#9837" class="Field">D₀</a> <a id="10013" href="Monad.Instance.Delay.html#9994" class="Bound">X</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="10019" href="Monad.Instance.Delay.html#9985" class="Function">out</a> <a id="10023" class="Symbol">{</a><a id="10024" href="Monad.Instance.Delay.html#10024" class="Bound">X</a><a id="10025" class="Symbol">}</a> <a id="10027" class="Symbol">=</a> <a id="10029" href="Categories.Morphism.html#1879" class="Field">IsIso.inv</a> <a id="10039" class="Symbol">(</a><a id="10040" href="Monad.Instance.Delay.html#9932" class="Field">isIso</a> <a id="10046" class="Symbol">{</a><a id="10047" href="Monad.Instance.Delay.html#10024" class="Bound">X</a><a id="10048" class="Symbol">})</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="10056" class="Keyword">field</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="DelayMonad.coit"></a><a id="10068" href="Monad.Instance.Delay.html#10068" class="Field">coit</a> <a id="10073" class="Symbol">:</a> <a id="10075" class="Symbol"></a> <a id="10077" class="Symbol">{</a><a id="10078" href="Monad.Instance.Delay.html#10078" class="Bound">X</a> <a id="10080" href="Monad.Instance.Delay.html#10080" class="Bound">Y</a><a id="10081" class="Symbol">}</a> <a id="10083" class="Symbol"></a> <a id="10085" href="Monad.Instance.Delay.html#10080" class="Bound">Y</a> <a id="10087" href="Categories.Category.Core.html#575" class="Function Operator"></a> <a id="10089" href="Monad.Instance.Delay.html#10078" class="Bound">X</a> <a id="10091" href="Categories.Category.Cocartesian.html#1549" class="Function Operator">+</a> <a id="10093" href="Monad.Instance.Delay.html#10080" class="Bound">Y</a> <a id="10095" class="Symbol"></a> <a id="10097" href="Monad.Instance.Delay.html#10080" class="Bound">Y</a> <a id="10099" href="Categories.Category.Core.html#575" class="Function Operator"></a> <a id="10101" href="Monad.Instance.Delay.html#9837" class="Field">D₀</a> <a id="10104" href="Monad.Instance.Delay.html#10078" class="Bound">X</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="DelayMonad.coit-law"></a><a id="10112" href="Monad.Instance.Delay.html#10112" class="Field">coit-law</a> <a id="10121" class="Symbol">:</a> <a id="10123" class="Symbol"></a> <a id="10125" class="Symbol">{</a><a id="10126" href="Monad.Instance.Delay.html#10126" class="Bound">X</a> <a id="10128" href="Monad.Instance.Delay.html#10128" class="Bound">Y</a><a id="10129" class="Symbol">}</a> <a id="10131" class="Symbol">{</a><a id="10132" href="Monad.Instance.Delay.html#10132" class="Bound">f</a> <a id="10134" class="Symbol">:</a> <a id="10136" href="Monad.Instance.Delay.html#10128" class="Bound">Y</a> <a id="10138" href="Categories.Category.Core.html#575" class="Function Operator"></a> <a id="10140" href="Monad.Instance.Delay.html#10126" class="Bound">X</a> <a id="10142" href="Categories.Category.Cocartesian.html#1549" class="Function Operator">+</a> <a id="10144" href="Monad.Instance.Delay.html#10128" class="Bound">Y</a><a id="10145" class="Symbol">}</a> <a id="10147" class="Symbol"></a> <a id="10149" href="Monad.Instance.Delay.html#9985" class="Function">out</a> <a id="10153" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="10155" class="Symbol">(</a><a id="10156" href="Monad.Instance.Delay.html#10068" class="Field">coit</a> <a id="10161" href="Monad.Instance.Delay.html#10132" class="Bound">f</a><a id="10162" class="Symbol">)</a> <a id="10164" href="Categories.Category.Core.html#595" class="Function Operator"></a> <a id="10166" class="Symbol">(</a><a id="10167" href="Monad.Instance.Delay.html#1263" class="Function">idC</a> <a id="10171" href="Categories.Category.Cocartesian.html#2133" class="Function Operator">+₁</a> <a id="10174" class="Symbol">(</a><a id="10175" href="Monad.Instance.Delay.html#10068" class="Field">coit</a> <a id="10180" href="Monad.Instance.Delay.html#10132" class="Bound">f</a><a id="10181" class="Symbol">))</a> <a id="10184" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="10186" href="Monad.Instance.Delay.html#10132" class="Bound">f</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="10193" class="Keyword">field</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="DelayMonad._*"></a><a id="10205" href="Monad.Instance.Delay.html#10205" class="Field Operator">_*</a> <a id="10208" class="Symbol">:</a> <a id="10210" class="Symbol"></a> <a id="10212" class="Symbol">{</a><a id="10213" href="Monad.Instance.Delay.html#10213" class="Bound">X</a> <a id="10215" href="Monad.Instance.Delay.html#10215" class="Bound">Y</a><a id="10216" class="Symbol">}</a> <a id="10218" class="Symbol"></a> <a id="10220" href="Monad.Instance.Delay.html#10213" class="Bound">X</a> <a id="10222" href="Categories.Category.Core.html#575" class="Function Operator"></a> <a id="10224" href="Monad.Instance.Delay.html#9837" class="Field">D₀</a> <a id="10227" href="Monad.Instance.Delay.html#10215" class="Bound">Y</a> <a id="10229" class="Symbol"></a> <a id="10231" href="Monad.Instance.Delay.html#9837" class="Field">D₀</a> <a id="10234" href="Monad.Instance.Delay.html#10213" class="Bound">X</a> <a id="10236" href="Categories.Category.Core.html#575" class="Function Operator"></a> <a id="10238" href="Monad.Instance.Delay.html#9837" class="Field">D₀</a> <a id="10241" href="Monad.Instance.Delay.html#10215" class="Bound">Y</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="DelayMonad.*-law"></a><a id="10249" href="Monad.Instance.Delay.html#10249" class="Field">*-law</a> <a id="10255" class="Symbol">:</a> <a id="10257" class="Symbol"></a> <a id="10259" class="Symbol">{</a><a id="10260" href="Monad.Instance.Delay.html#10260" class="Bound">X</a> <a id="10262" href="Monad.Instance.Delay.html#10262" class="Bound">Y</a><a id="10263" class="Symbol">}</a> <a id="10265" class="Symbol">{</a><a id="10266" href="Monad.Instance.Delay.html#10266" class="Bound">f</a> <a id="10268" class="Symbol">:</a> <a id="10270" href="Monad.Instance.Delay.html#10260" class="Bound">X</a> <a id="10272" href="Categories.Category.Core.html#575" class="Function Operator"></a> <a id="10274" href="Monad.Instance.Delay.html#9837" class="Field">D₀</a> <a id="10277" href="Monad.Instance.Delay.html#10262" class="Bound">Y</a><a id="10278" class="Symbol">}</a> <a id="10280" class="Symbol"></a> <a id="10282" href="Monad.Instance.Delay.html#9985" class="Function">out</a> <a id="10286" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="10288" class="Symbol">(</a><a id="10289" href="Monad.Instance.Delay.html#10266" class="Bound">f</a> <a id="10291" href="Monad.Instance.Delay.html#10205" class="Field Operator">*</a><a id="10292" class="Symbol">)</a> <a id="10294" href="Categories.Category.Core.html#595" class="Function Operator"></a> <a id="10296" href="Categories.Object.Coproduct.html#532" class="Function Operator">[</a> <a id="10298" href="Monad.Instance.Delay.html#9985" class="Function">out</a> <a id="10302" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="10304" href="Monad.Instance.Delay.html#10266" class="Bound">f</a> <a id="10306" href="Categories.Object.Coproduct.html#532" class="Function Operator">,</a> <a id="10308" href="Categories.Object.Coproduct.html#512" class="Function">i₂</a> <a id="10311" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="10313" class="Symbol">(</a><a id="10314" href="Monad.Instance.Delay.html#10266" class="Bound">f</a> <a id="10316" href="Monad.Instance.Delay.html#10205" class="Field Operator">*</a><a id="10317" class="Symbol">)</a> <a id="10319" href="Categories.Object.Coproduct.html#532" class="Function Operator">]</a> <a id="10321" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="10323" href="Monad.Instance.Delay.html#9985" class="Function">out</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="DelayMonad.*-unique"></a><a id="10333" href="Monad.Instance.Delay.html#10333" class="Field">*-unique</a> <a id="10342" class="Symbol">:</a> <a id="10344" class="Symbol"></a> <a id="10346" class="Symbol">{</a><a id="10347" href="Monad.Instance.Delay.html#10347" class="Bound">X</a> <a id="10349" href="Monad.Instance.Delay.html#10349" class="Bound">Y</a><a id="10350" class="Symbol">}</a> <a id="10352" class="Symbol">(</a><a id="10353" href="Monad.Instance.Delay.html#10353" class="Bound">f</a> <a id="10355" class="Symbol">:</a> <a id="10357" href="Monad.Instance.Delay.html#10347" class="Bound">X</a> <a id="10359" href="Categories.Category.Core.html#575" class="Function Operator"></a> <a id="10361" href="Monad.Instance.Delay.html#9837" class="Field">D₀</a> <a id="10364" href="Monad.Instance.Delay.html#10349" class="Bound">Y</a><a id="10365" class="Symbol">)</a> <a id="10367" class="Symbol">(</a><a id="10368" href="Monad.Instance.Delay.html#10368" class="Bound">h</a> <a id="10370" class="Symbol">:</a> <a id="10372" href="Monad.Instance.Delay.html#9837" class="Field">D₀</a> <a id="10375" href="Monad.Instance.Delay.html#10347" class="Bound">X</a> <a id="10377" href="Categories.Category.Core.html#575" class="Function Operator"></a> <a id="10379" href="Monad.Instance.Delay.html#9837" class="Field">D₀</a> <a id="10382" href="Monad.Instance.Delay.html#10349" class="Bound">Y</a><a id="10383" class="Symbol">)</a> <a id="10385" class="Symbol"></a> <a id="10387" href="Monad.Instance.Delay.html#10368" class="Bound">h</a> <a id="10389" href="Categories.Category.Core.html#595" class="Function Operator"></a> <a id="10391" href="Monad.Instance.Delay.html#10353" class="Bound">f</a> <a id="10393" href="Monad.Instance.Delay.html#10205" class="Field Operator">*</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="DelayMonad.*-resp-≈"></a><a id="10401" href="Monad.Instance.Delay.html#10401" class="Field">*-resp-≈</a> <a id="10410" class="Symbol">:</a> <a id="10412" class="Symbol"></a> <a id="10414" class="Symbol">{</a><a id="10415" href="Monad.Instance.Delay.html#10415" class="Bound">X</a> <a id="10417" href="Monad.Instance.Delay.html#10417" class="Bound">Y</a><a id="10418" class="Symbol">}</a> <a id="10420" class="Symbol">{</a><a id="10421" href="Monad.Instance.Delay.html#10421" class="Bound">f</a> <a id="10423" href="Monad.Instance.Delay.html#10423" class="Bound">h</a> <a id="10425" class="Symbol">:</a> <a id="10427" href="Monad.Instance.Delay.html#10415" class="Bound">X</a> <a id="10429" href="Categories.Category.Core.html#575" class="Function Operator"></a> <a id="10431" href="Monad.Instance.Delay.html#9837" class="Field">D₀</a> <a id="10434" href="Monad.Instance.Delay.html#10417" class="Bound">Y</a><a id="10435" class="Symbol">}</a> <a id="10437" class="Symbol"></a> <a id="10439" href="Monad.Instance.Delay.html#10421" class="Bound">f</a> <a id="10441" href="Categories.Category.Core.html#595" class="Function Operator"></a> <a id="10443" href="Monad.Instance.Delay.html#10423" class="Bound">h</a> <a id="10445" class="Symbol"></a> <a id="10447" href="Monad.Instance.Delay.html#10421" class="Bound">f</a> <a id="10449" href="Monad.Instance.Delay.html#10205" class="Field Operator">*</a> <a id="10451" href="Categories.Category.Core.html#595" class="Function Operator"></a> <a id="10453" href="Monad.Instance.Delay.html#10423" class="Bound">h</a> <a id="10455" href="Monad.Instance.Delay.html#10205" class="Field Operator">*</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="DelayMonad.unitLaw"></a><a id="10463" href="Monad.Instance.Delay.html#10463" class="Function">unitLaw</a> <a id="10471" class="Symbol">:</a> <a id="10473" class="Symbol"></a> <a id="10475" class="Symbol">{</a><a id="10476" href="Monad.Instance.Delay.html#10476" class="Bound">X</a><a id="10477" class="Symbol">}</a> <a id="10479" class="Symbol"></a> <a id="10481" href="Monad.Instance.Delay.html#9985" class="Function">out</a> <a id="10485" class="Symbol">{</a><a id="10486" href="Monad.Instance.Delay.html#10476" class="Bound">X</a><a id="10487" class="Symbol">}</a> <a id="10489" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="10491" href="Monad.Instance.Delay.html#9869" class="Field">now</a> <a id="10495" class="Symbol">{</a><a id="10496" href="Monad.Instance.Delay.html#10476" class="Bound">X</a><a id="10497" class="Symbol">}</a> <a id="10499" href="Categories.Category.Core.html#595" class="Function Operator"></a> <a id="10501" href="Categories.Object.Coproduct.html#492" class="Function">i₁</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="10508" href="Monad.Instance.Delay.html#10463" class="Function">unitLaw</a> <a id="10516" class="Symbol">=</a> <a id="10518" href="Relation.Binary.Reasoning.Base.Single.html#1925" class="Function Operator">begin</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="10531" href="Monad.Instance.Delay.html#9985" class="Function">out</a> <a id="10535" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="10537" href="Monad.Instance.Delay.html#9869" class="Field">now</a> <a id="10558" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function">≈⟨</a> <a id="10561" href="Categories.Category.Core.html#2734" class="Function Operator">refl⟩∘⟨</a> <a id="10569" href="Relation.Binary.Structures.html#1603" class="Function">sym</a> <a id="10573" href="Categories.Object.Coproduct.html#569" class="Function">inject₁</a> <a id="10581" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function"></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="10590" href="Monad.Instance.Delay.html#9985" class="Function">out</a> <a id="10594" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="10596" href="Categories.Object.Coproduct.html#532" class="Function Operator">[</a> <a id="10598" href="Monad.Instance.Delay.html#9869" class="Field">now</a> <a id="10602" href="Categories.Object.Coproduct.html#532" class="Function Operator">,</a> <a id="10604" href="Monad.Instance.Delay.html#9898" class="Field">later</a> <a id="10610" href="Categories.Object.Coproduct.html#532" class="Function Operator">]</a> <a id="10612" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="10614" href="Categories.Object.Coproduct.html#492" class="Function">i₁</a> <a id="10617" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function">≈⟨</a> <a id="10620" href="Categories.Morphism.Reasoning.Core.html#6851" class="Function">cancelˡ</a> <a id="10628" class="Symbol">(</a><a id="10629" href="Categories.Morphism.html#1586" class="Function">IsIso.isoˡ</a> <a id="10640" href="Monad.Instance.Delay.html#9932" class="Field">isIso</a><a id="10645" class="Symbol">)</a> <a id="10647" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function"></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="10655" href="Categories.Object.Coproduct.html#492" class="Function">i₁</a> <a id="10658" href="Relation.Binary.Reasoning.Base.Single.html#2564" class="Function Operator"></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> <a id="DelayMonad.toMonad"></a><a id="10665" href="Monad.Instance.Delay.html#10665" class="Function">toMonad</a> <a id="10673" class="Symbol">:</a> <a id="10675" href="Categories.Monad.Construction.Kleisli.html#882" class="Function">KleisliTriple</a> <a id="10689" href="Monad.Instance.Delay.html#1254" class="Field">C</a>
<a id="10695" href="Monad.Instance.Delay.html#10665" class="Function">toMonad</a> <a id="10703" class="Symbol">=</a> <a id="10705" class="Keyword">record</a>
<a id="10718" class="Symbol">{</a> <a id="10720" href="Categories.Monad.Relative.html#834" class="Field">F₀</a> <a id="10723" class="Symbol">=</a> <a id="10725" href="Monad.Instance.Delay.html#9837" class="Field">D₀</a>
<a id="10734" class="Symbol">;</a> <a id="10736" href="Categories.Monad.Relative.html#857" class="Field">unit</a> <a id="10741" class="Symbol">=</a> <a id="10743" href="Monad.Instance.Delay.html#9869" class="Field">now</a>
<a id="10753" class="Symbol">;</a> <a id="10755" href="Categories.Monad.Relative.html#895" class="Field">extend</a> <a id="10762" class="Symbol">=</a> <a id="10764" href="Monad.Instance.Delay.html#10205" class="Field Operator">_*</a>
<a id="10773" class="Symbol">;</a> <a id="10775" href="Categories.Monad.Relative.html#953" class="Field">identityʳ</a> <a id="10785" class="Symbol">=</a> <a id="10787" class="Symbol">λ</a> <a id="10789" class="Symbol">{</a><a id="10790" href="Monad.Instance.Delay.html#10790" class="Bound">X</a><a id="10791" class="Symbol">}</a> <a id="10793" class="Symbol">{</a><a id="10794" href="Monad.Instance.Delay.html#10794" class="Bound">Y</a><a id="10795" class="Symbol">}</a> <a id="10797" class="Symbol">{</a><a id="10798" href="Monad.Instance.Delay.html#10798" class="Bound">k</a><a id="10799" class="Symbol">}</a> <a id="10801" class="Symbol"></a> <a id="10803" href="Relation.Binary.Reasoning.Base.Single.html#1925" class="Function Operator">begin</a>
<a id="10818" href="Monad.Instance.Delay.html#10798" class="Bound">k</a> <a id="10820" href="Monad.Instance.Delay.html#10205" class="Field Operator">*</a> <a id="10822" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="10824" href="Monad.Instance.Delay.html#9869" class="Field">now</a> <a id="10875" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function">≈⟨</a> <a id="10878" href="Categories.Morphism.Reasoning.Core.html#3063" class="Function">introˡ</a> <a id="10885" class="Symbol">(</a><a id="10886" href="Categories.Morphism.html#1612" class="Function">IsIso.isoʳ</a> <a id="10897" href="Monad.Instance.Delay.html#9932" class="Field">isIso</a><a id="10902" class="Symbol">)</a> <a id="10904" href="Categories.Category.Core.html#2837" class="Function Operator">⟩∘⟨refl</a> <a id="10912" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function"></a>
<a id="10923" class="Symbol">((</a><a id="10925" href="Categories.Object.Coproduct.html#532" class="Function Operator">[</a> <a id="10927" href="Monad.Instance.Delay.html#9869" class="Field">now</a> <a id="10931" href="Categories.Object.Coproduct.html#532" class="Function Operator">,</a> <a id="10933" href="Monad.Instance.Delay.html#9898" class="Field">later</a> <a id="10939" href="Categories.Object.Coproduct.html#532" class="Function Operator">]</a> <a id="10941" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="10943" href="Monad.Instance.Delay.html#9985" class="Function">out</a><a id="10946" class="Symbol">)</a> <a id="10948" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="10950" href="Monad.Instance.Delay.html#10798" class="Bound">k</a> <a id="10952" href="Monad.Instance.Delay.html#10205" class="Field Operator">*</a><a id="10953" class="Symbol">)</a> <a id="10955" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="10957" href="Monad.Instance.Delay.html#9869" class="Field">now</a> <a id="10980" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function">≈⟨</a> <a id="10983" href="Categories.Morphism.Reasoning.Core.html#1914" class="Function">pullʳ</a> <a id="10989" href="Monad.Instance.Delay.html#10249" class="Field">*-law</a> <a id="10995" href="Categories.Category.Core.html#2837" class="Function Operator">⟩∘⟨refl</a> <a id="11003" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function"></a>
<a id="11013" class="Symbol">(</a><a id="11014" href="Categories.Object.Coproduct.html#532" class="Function Operator">[</a> <a id="11016" href="Monad.Instance.Delay.html#9869" class="Field">now</a> <a id="11020" href="Categories.Object.Coproduct.html#532" class="Function Operator">,</a> <a id="11022" href="Monad.Instance.Delay.html#9898" class="Field">later</a> <a id="11028" href="Categories.Object.Coproduct.html#532" class="Function Operator">]</a> <a id="11030" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="11032" href="Categories.Object.Coproduct.html#532" class="Function Operator">[</a> <a id="11034" href="Monad.Instance.Delay.html#9985" class="Function">out</a> <a id="11038" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="11040" href="Monad.Instance.Delay.html#10798" class="Bound">k</a> <a id="11042" href="Categories.Object.Coproduct.html#532" class="Function Operator">,</a> <a id="11044" href="Categories.Object.Coproduct.html#512" class="Function">i₂</a> <a id="11047" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="11049" class="Symbol">(</a><a id="11050" href="Monad.Instance.Delay.html#10798" class="Bound">k</a> <a id="11052" href="Monad.Instance.Delay.html#10205" class="Field Operator">*</a><a id="11053" class="Symbol">)</a> <a id="11055" href="Categories.Object.Coproduct.html#532" class="Function Operator">]</a> <a id="11057" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="11059" href="Monad.Instance.Delay.html#9985" class="Function">out</a><a id="11062" class="Symbol">)</a> <a id="11064" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="11066" href="Monad.Instance.Delay.html#9869" class="Field">now</a> <a id="11070" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function">≈⟨</a> <a id="11073" href="Categories.Morphism.Reasoning.Core.html#1914" class="Function">pullʳ</a> <a id="11079" class="Symbol">(</a><a id="11080" href="Categories.Morphism.Reasoning.Core.html#1914" class="Function">pullʳ</a> <a id="11086" href="Monad.Instance.Delay.html#10463" class="Function">unitLaw</a><a id="11093" class="Symbol">)</a> <a id="11095" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function"></a>
<a id="11105" href="Categories.Object.Coproduct.html#532" class="Function Operator">[</a> <a id="11107" href="Monad.Instance.Delay.html#9869" class="Field">now</a> <a id="11111" href="Categories.Object.Coproduct.html#532" class="Function Operator">,</a> <a id="11113" href="Monad.Instance.Delay.html#9898" class="Field">later</a> <a id="11119" href="Categories.Object.Coproduct.html#532" class="Function Operator">]</a> <a id="11121" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="11123" href="Categories.Object.Coproduct.html#532" class="Function Operator">[</a> <a id="11125" href="Monad.Instance.Delay.html#9985" class="Function">out</a> <a id="11129" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="11131" href="Monad.Instance.Delay.html#10798" class="Bound">k</a> <a id="11133" href="Categories.Object.Coproduct.html#532" class="Function Operator">,</a> <a id="11135" href="Categories.Object.Coproduct.html#512" class="Function">i₂</a> <a id="11138" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="11140" class="Symbol">(</a><a id="11141" href="Monad.Instance.Delay.html#10798" class="Bound">k</a> <a id="11143" href="Monad.Instance.Delay.html#10205" class="Field Operator">*</a><a id="11144" class="Symbol">)</a> <a id="11146" href="Categories.Object.Coproduct.html#532" class="Function Operator">]</a> <a id="11148" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="11150" href="Categories.Object.Coproduct.html#492" class="Function">i₁</a> <a id="11162" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function">≈⟨</a> <a id="11165" href="Categories.Category.Core.html#2734" class="Function Operator">refl⟩∘⟨</a> <a id="11173" href="Categories.Object.Coproduct.html#569" class="Function">inject₁</a> <a id="11181" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function"></a>
<a id="11191" href="Categories.Object.Coproduct.html#532" class="Function Operator">[</a> <a id="11193" href="Monad.Instance.Delay.html#9869" class="Field">now</a> <a id="11197" href="Categories.Object.Coproduct.html#532" class="Function Operator">,</a> <a id="11199" href="Monad.Instance.Delay.html#9898" class="Field">later</a> <a id="11205" href="Categories.Object.Coproduct.html#532" class="Function Operator">]</a> <a id="11207" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="11209" href="Monad.Instance.Delay.html#9985" class="Function">out</a> <a id="11213" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="11215" href="Monad.Instance.Delay.html#10798" class="Bound">k</a> <a id="11248" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function">≈⟨</a> <a id="11251" href="Categories.Morphism.Reasoning.Core.html#6851" class="Function">cancelˡ</a> <a id="11259" class="Symbol">(</a><a id="11260" href="Categories.Morphism.html#1612" class="Function">IsIso.isoʳ</a> <a id="11271" href="Monad.Instance.Delay.html#9932" class="Field">isIso</a><a id="11276" class="Symbol">)</a> <a id="11278" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function"></a>
<a id="11288" href="Monad.Instance.Delay.html#10798" class="Bound">k</a> <a id="11290" href="Relation.Binary.Reasoning.Base.Single.html#2564" class="Function Operator"></a>
<a id="11298" class="Symbol">;</a> <a id="11300" href="Categories.Monad.Relative.html#1025" class="Field">identityˡ</a> <a id="11310" class="Symbol">=</a> <a id="11312" class="Symbol">λ</a> <a id="11314" class="Symbol">{</a><a id="11315" href="Monad.Instance.Delay.html#11315" class="Bound">X</a><a id="11316" class="Symbol">}</a> <a id="11318" class="Symbol"></a> <a id="11320" href="Relation.Binary.Structures.html#1603" class="Function">sym</a> <a id="11324" class="Symbol">(</a><a id="11325" href="Monad.Instance.Delay.html#10333" class="Field">*-unique</a> <a id="11334" href="Monad.Instance.Delay.html#9869" class="Field">now</a> <a id="11338" href="Monad.Instance.Delay.html#1263" class="Function">idC</a><a id="11341" class="Symbol">)</a>
<a id="11349" class="Symbol">;</a> <a id="11351" href="Categories.Monad.Relative.html#1078" class="Field">assoc</a> <a id="11357" class="Symbol">=</a> <a id="11359" class="Symbol">λ</a> <a id="11361" class="Symbol">{</a><a id="11362" href="Monad.Instance.Delay.html#11362" class="Bound">X</a><a id="11363" class="Symbol">}</a> <a id="11365" class="Symbol">{</a><a id="11366" href="Monad.Instance.Delay.html#11366" class="Bound">Y</a><a id="11367" class="Symbol">}</a> <a id="11369" class="Symbol">{</a><a id="11370" href="Monad.Instance.Delay.html#11370" class="Bound">Z</a><a id="11371" class="Symbol">}</a> <a id="11373" class="Symbol">{</a><a id="11374" href="Monad.Instance.Delay.html#11374" class="Bound">f</a><a id="11375" class="Symbol">}</a> <a id="11377" class="Symbol">{</a><a id="11378" href="Monad.Instance.Delay.html#11378" class="Bound">g</a><a id="11379" class="Symbol">}</a> <a id="11381" class="Symbol"></a> <a id="11383" href="Relation.Binary.Structures.html#1603" class="Function">sym</a> <a id="11387" class="Symbol">(</a><a id="11388" href="Monad.Instance.Delay.html#10333" class="Field">*-unique</a> <a id="11397" class="Symbol">((</a><a id="11399" href="Monad.Instance.Delay.html#11378" class="Bound">g</a> <a id="11401" href="Monad.Instance.Delay.html#10205" class="Field Operator">*</a><a id="11402" class="Symbol">)</a> <a id="11404" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="11406" href="Monad.Instance.Delay.html#11374" class="Bound">f</a><a id="11407" class="Symbol">)</a> <a id="11409" class="Symbol">((</a><a id="11411" href="Monad.Instance.Delay.html#11378" class="Bound">g</a> <a id="11413" href="Monad.Instance.Delay.html#10205" class="Field Operator">*</a><a id="11414" class="Symbol">)</a> <a id="11416" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="11418" class="Symbol">(</a><a id="11419" href="Monad.Instance.Delay.html#11374" class="Bound">f</a> <a id="11421" href="Monad.Instance.Delay.html#10205" class="Field Operator">*</a><a id="11422" class="Symbol">)))</a>
<a id="11432" class="Symbol">;</a> <a id="11434" href="Categories.Monad.Relative.html#1190" class="Field">sym-assoc</a> <a id="11444" class="Symbol">=</a> <a id="11446" class="Symbol">λ</a> <a id="11448" class="Symbol">{</a><a id="11449" href="Monad.Instance.Delay.html#11449" class="Bound">X</a><a id="11450" class="Symbol">}</a> <a id="11452" class="Symbol">{</a><a id="11453" href="Monad.Instance.Delay.html#11453" class="Bound">Y</a><a id="11454" class="Symbol">}</a> <a id="11456" class="Symbol">{</a><a id="11457" href="Monad.Instance.Delay.html#11457" class="Bound">Z</a><a id="11458" class="Symbol">}</a> <a id="11460" class="Symbol">{</a><a id="11461" href="Monad.Instance.Delay.html#11461" class="Bound">f</a><a id="11462" class="Symbol">}</a> <a id="11464" class="Symbol">{</a><a id="11465" href="Monad.Instance.Delay.html#11465" class="Bound">g</a><a id="11466" class="Symbol">}</a> <a id="11468" class="Symbol"></a> <a id="11470" href="Monad.Instance.Delay.html#10333" class="Field">*-unique</a> <a id="11479" class="Symbol">((</a><a id="11481" href="Monad.Instance.Delay.html#11465" class="Bound">g</a> <a id="11483" href="Monad.Instance.Delay.html#10205" class="Field Operator">*</a><a id="11484" class="Symbol">)</a> <a id="11486" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="11488" href="Monad.Instance.Delay.html#11461" class="Bound">f</a><a id="11489" class="Symbol">)</a> <a id="11491" class="Symbol">((</a><a id="11493" href="Monad.Instance.Delay.html#11465" class="Bound">g</a> <a id="11495" href="Monad.Instance.Delay.html#10205" class="Field Operator">*</a><a id="11496" class="Symbol">)</a> <a id="11498" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="11500" class="Symbol">(</a><a id="11501" href="Monad.Instance.Delay.html#11461" class="Bound">f</a> <a id="11503" href="Monad.Instance.Delay.html#10205" class="Field Operator">*</a><a id="11504" class="Symbol">))</a>
<a id="11513" class="Symbol">;</a> <a id="11515" href="Categories.Monad.Relative.html#1306" class="Field">extend-≈</a> <a id="11524" class="Symbol">=</a> <a id="11526" href="Monad.Instance.Delay.html#10401" class="Field">*-resp-≈</a>
<a id="11541" class="Symbol">}</a>
</pre> </pre>
<h3 id="definition-30-search-algebras">Definition 30: <h3 id="definition-30-search-algebras">Definition 30:
Search-Algebras</h3> 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> <p>TODO</p>
<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 <h3
id="proposition-31-the-category-of-uniform-iteration-algebras-coincides-with-the-category-of-search-algebras">Proposition 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 31 : the category of uniform-iteration algebras coincides with the
category of search-algebras</h3> category of search-algebras</h3>
<p>TODOs:</p> <p>TODO</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>
</body> </body>
</html> </html>

View file

@ -1,127 +1,222 @@
<!-- <!--
<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> <pre class="Agda"><a id="14" class="Symbol">{-#</a> <a id="18" class="Keyword">OPTIONS</a> <a id="26" class="Pragma">--allow-unsolved-metas</a> <a id="49" class="Symbol">#-}</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="53" class="Keyword">open</a> <a id="58" class="Keyword">import</a> <a id="65" href="Level.html" class="Module">Level</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="71" class="Keyword">open</a> <a id="76" class="Keyword">import</a> <a id="83" href="Categories.Category.html" class="Module">Categories.Category</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="103" class="Keyword">open</a> <a id="108" class="Keyword">import</a> <a id="115" href="Categories.Monad.html" class="Module">Categories.Monad</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="132" class="Keyword">open</a> <a id="137" class="Keyword">import</a> <a id="144" href="Categories.Category.Distributive.html" class="Module">Categories.Category.Distributive</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="177" class="Keyword">open</a> <a id="182" class="Keyword">import</a> <a id="189" href="Categories.Category.Extensive.Bundle.html" class="Module">Categories.Category.Extensive.Bundle</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="226" class="Keyword">open</a> <a id="231" class="Keyword">import</a> <a id="238" href="Categories.Category.Extensive.html" class="Module">Categories.Category.Extensive</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="268" class="Keyword">open</a> <a id="273" class="Keyword">import</a> <a id="280" href="Categories.Category.BinaryProducts.html" class="Module">Categories.Category.BinaryProducts</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="315" class="Keyword">open</a> <a id="320" class="Keyword">import</a> <a id="327" href="Categories.Category.Cocartesian.html" class="Module">Categories.Category.Cocartesian</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="359" class="Keyword">open</a> <a id="364" class="Keyword">import</a> <a id="371" href="Categories.Category.Cartesian.html" class="Module">Categories.Category.Cartesian</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="401" class="Keyword">open</a> <a id="406" class="Keyword">import</a> <a id="413" href="Categories.Category.Cartesian.html" class="Module">Categories.Category.Cartesian</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="443" class="Keyword">open</a> <a id="448" class="Keyword">import</a> <a id="455" href="Categories.Object.Terminal.html" class="Module">Categories.Object.Terminal</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="482" class="Keyword">open</a> <a id="487" class="Keyword">import</a> <a id="494" href="Categories.Object.Coproduct.html" class="Module">Categories.Object.Coproduct</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="522" class="Keyword">open</a> <a id="527" class="Keyword">import</a> <a id="534" href="Categories.Category.Construction.F-Coalgebras.html" class="Module">Categories.Category.Construction.F-Coalgebras</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="580" class="Keyword">open</a> <a id="585" class="Keyword">import</a> <a id="592" href="Categories.Functor.Coalgebra.html" class="Module">Categories.Functor.Coalgebra</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="621" class="Keyword">open</a> <a id="626" class="Keyword">import</a> <a id="633" href="Categories.Functor.html" class="Module">Categories.Functor</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> <a id="652" class="Keyword">open</a> <a id="657" class="Keyword">import</a> <a id="664" href="Categories.Functor.Algebra.html" class="Module">Categories.Functor.Algebra</a>
<a id="691" class="Keyword">open</a> <a id="696" class="Keyword">import</a> <a id="703" href="Categories.Monad.Construction.Kleisli.html" class="Module">Categories.Monad.Construction.Kleisli</a>
<a id="741" class="Keyword">open</a> <a id="746" class="Keyword">import</a> <a id="753" href="Categories.Category.Construction.F-Coalgebras.html" class="Module">Categories.Category.Construction.F-Coalgebras</a>
<a id="799" class="Keyword">open</a> <a id="804" class="Keyword">import</a> <a id="811" href="Categories.NaturalTransformation.html" class="Module">Categories.NaturalTransformation</a>
<a id="844" class="Keyword">import</a> <a id="851" href="Categories.Morphism.html" class="Module">Categories.Morphism</a> <a id="871" class="Symbol">as</a> <a id="874" class="Module">M</a>
<a id="876" class="Keyword">import</a> <a id="883" href="Categories.Morphism.Reasoning.html" class="Module">Categories.Morphism.Reasoning</a> <a id="913" class="Symbol">as</a> <a id="916" class="Module">MR</a>
</pre>--> </pre>-->
## Summary ## Summary
This file introduces the delay monad ***D*** This file introduces the delay monad ***D***
- [X] *Proposition 1* Characterization of the delay monad ***D*** (here treated as definition) - [ ] *Proposition 1* Characterization of the delay monad ***D***
- [ ] *Proposition 2* ***D*** is commutative - [ ] *Proposition 2* ***D*** is commutative
## Code ## Code
<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> <pre class="Agda"><a id="1114" class="Keyword">module</a> <a id="1121" href="Monad.Instance.Delay.html" class="Module">Monad.Instance.Delay</a> <a id="1142" class="Symbol">{</a><a id="1143" href="Monad.Instance.Delay.html#1143" class="Bound">o</a> <a id="1145" href="Monad.Instance.Delay.html#1145" class="Bound"></a> <a id="1147" href="Monad.Instance.Delay.html#1147" class="Bound">e</a><a id="1148" class="Symbol">}</a> <a id="1150" class="Symbol">(</a><a id="1151" href="Monad.Instance.Delay.html#1151" class="Bound">ED</a> <a id="1154" class="Symbol">:</a> <a id="1156" href="Categories.Category.Extensive.Bundle.html#781" class="Record">ExtensiveDistributiveCategory</a> <a id="1186" href="Monad.Instance.Delay.html#1143" class="Bound">o</a> <a id="1188" href="Monad.Instance.Delay.html#1145" class="Bound"></a> <a id="1190" href="Monad.Instance.Delay.html#1147" class="Bound">e</a><a id="1191" class="Symbol">)</a> <a id="1193" class="Keyword">where</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="1201" class="Keyword">open</a> <a id="1206" href="Categories.Category.Extensive.Bundle.html#781" class="Module">ExtensiveDistributiveCategory</a> <a id="1236" href="Monad.Instance.Delay.html#1151" class="Bound">ED</a> <a id="1239" class="Keyword">renaming</a> <a id="1248" class="Symbol">(</a><a id="1249" href="Categories.Category.Extensive.Bundle.html#859" class="Field">U</a> <a id="1251" class="Symbol">to</a> <a id="1254" class="Field">C</a><a id="1255" class="Symbol">;</a> <a id="1257" href="Categories.Category.Core.html#630" class="Function">id</a> <a id="1260" class="Symbol">to</a> <a id="1263" class="Function">idC</a><a id="1266" 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="1270" class="Keyword">open</a> <a id="1275" href="Categories.Category.Cocartesian.html#3385" class="Module">Cocartesian</a> <a id="1287" class="Symbol">(</a><a id="1288" href="Categories.Category.Extensive.html#734" class="Field">Extensive.cocartesian</a> <a id="1310" href="Categories.Category.Extensive.Bundle.html#913" class="Field">extensive</a><a id="1319" 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="1323" class="Keyword">open</a> <a id="1328" href="Categories.Category.Cartesian.html#727" class="Module">Cartesian</a> <a id="1338" class="Symbol">(</a><a id="1339" href="Categories.Category.Extensive.Bundle.html#943" class="Field">ExtensiveDistributiveCategory.cartesian</a> <a id="1379" href="Monad.Instance.Delay.html#1151" class="Bound">ED</a><a id="1381" class="Symbol">)</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="1385" class="Keyword">open</a> <a id="1390" href="Categories.Category.BinaryProducts.html#812" class="Module">BinaryProducts</a> <a id="1405" href="Categories.Category.Cartesian.html#801" class="Function">products</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="1417" class="Keyword">open</a> <a id="1422" href="Categories.Morphism.html" class="Module">M</a> <a id="1424" href="Monad.Instance.Delay.html#1254" 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="1428" class="Keyword">open</a> <a id="1433" href="Categories.Morphism.Reasoning.html" class="Module">MR</a> <a id="1436" href="Monad.Instance.Delay.html#1254" class="Field">C</a>
<a id="1279" class="Keyword">open</a> <a id="1284" href="Categories.Category.Core.html#1530" class="Module">Equiv</a> <a id="1440" class="Keyword">open</a> <a id="1445" href="Categories.Category.Core.html#1530" class="Module">Equiv</a>
<a id="1292" class="Keyword">open</a> <a id="1297" href="Categories.Category.Core.html#2462" class="Module">HomReasoning</a> <a id="1453" class="Keyword">open</a> <a id="1458" 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> <a id="1473" class="Keyword">open</a> <a id="1478" 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***
First I postulate the Functor *D*, maybe I should derive it... <pre class="Agda"> <a id="delayF"></a><a id="1567" href="Monad.Instance.Delay.html#1567" class="Function">delayF</a> <a id="1574" class="Symbol">:</a> <a id="1576" href="Categories.Category.Core.html#559" class="Function">Obj</a> <a id="1580" class="Symbol"></a> <a id="1582" href="Categories.Functor.html#283" class="Function">Endofunctor</a> <a id="1594" href="Monad.Instance.Delay.html#1254" class="Field">C</a>
**TODO**: <a id="1598" href="Monad.Instance.Delay.html#1567" class="Function">delayF</a> <a id="1605" href="Monad.Instance.Delay.html#1605" class="Bound">Y</a> <a id="1607" class="Symbol">=</a> <a id="1609" class="Keyword">record</a>
- how to define using final coalgebra(s)? <a id="1620" class="Symbol">{</a> <a id="1622" href="Categories.Functor.Core.html#432" class="Field">F₀</a> <a id="1625" class="Symbol">=</a> <a id="1627" href="Monad.Instance.Delay.html#1605" class="Bound">Y</a> <a id="1629" href="Categories.Category.Cocartesian.html#1549" class="Function Operator">+_</a>
- DX can be defined as retract of infinite streams, how? <a id="1636" class="Symbol">;</a> <a id="1638" href="Categories.Functor.Core.html#455" class="Field">F₁</a> <a id="1641" class="Symbol">=</a> <a id="1643" href="Monad.Instance.Delay.html#1263" class="Function">idC</a> <a id="1647" href="Categories.Category.Cocartesian.html#2133" class="Function Operator">+₁_</a>
- how to express **Theorem 8** in agda? <a id="1655" class="Symbol">;</a> <a id="1657" href="Categories.Functor.Core.html#511" class="Field">identity</a> <a id="1666" class="Symbol">=</a> <a id="1668" href="Categories.Object.Coproduct.html#635" class="Function">CC.coproduct.unique</a> <a id="1688" href="Categories.Morphism.Reasoning.Core.html#1309" class="Function">id-comm-sym</a> <a id="1700" href="Categories.Morphism.Reasoning.Core.html#1309" class="Function">id-comm-sym</a>
<a id="1716" class="Symbol">;</a> <a id="1718" href="Categories.Functor.Core.html#565" class="Field">homomorphism</a> <a id="1731" class="Symbol">=</a> <a id="1733" href="Categories.Category.Core.html#3005" class="Function"></a> <a id="1735" class="Symbol">(</a><a id="1736" href="Categories.Category.Cocartesian.html#2699" class="Function">+₁∘+₁</a> <a id="1742" href="Categories.Category.Core.html#3061" class="Function Operator"></a> <a id="1744" href="Categories.Category.Cocartesian.html#2622" class="Function">+₁-cong₂</a> <a id="1753" href="Categories.Category.Core.html#1339" class="Function">identity²</a> <a id="1763" href="Relation.Binary.Structures.html#1577" class="Function">refl</a><a id="1767" class="Symbol">)</a>
<a id="1774" class="Symbol">;</a> <a id="1776" href="Categories.Functor.Core.html#696" class="Field">F-resp-≈</a> <a id="1785" class="Symbol">=</a> <a id="1787" href="Categories.Category.Cocartesian.html#2622" class="Function">+₁-cong₂</a> <a id="1796" href="Relation.Binary.Structures.html#1577" class="Function">refl</a>
<a id="1805" class="Symbol">}</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="1810" class="Keyword">record</a> <a id="DelayM"></a><a id="1817" href="Monad.Instance.Delay.html#1817" class="Record">DelayM</a> <a id="1824" class="Symbol">:</a> <a id="1826" href="Agda.Primitive.html#320" class="Primitive">Set</a> <a id="1830" class="Symbol">(</a><a id="1831" href="Monad.Instance.Delay.html#1143" class="Bound">o</a> <a id="1833" href="Agda.Primitive.html#804" class="Primitive Operator"></a> <a id="1835" href="Monad.Instance.Delay.html#1145" class="Bound"></a> <a id="1837" href="Agda.Primitive.html#804" class="Primitive Operator"></a> <a id="1839" href="Monad.Instance.Delay.html#1147" class="Bound">e</a><a id="1840" class="Symbol">)</a> <a id="1842" class="Keyword">where</a>
<a id="1668" class="Keyword">field</a> <a id="1852" 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="DelayM.algebras"></a><a id="1864" href="Monad.Instance.Delay.html#1864" class="Field">algebras</a> <a id="1873" class="Symbol">:</a> <a id="1875" class="Symbol"></a> <a id="1877" class="Symbol">(</a><a id="1878" href="Monad.Instance.Delay.html#1878" class="Bound">A</a> <a id="1880" class="Symbol">:</a> <a id="1882" href="Categories.Category.Core.html#559" class="Function">Obj</a><a id="1885" class="Symbol">)</a> <a id="1887" class="Symbol"></a> <a id="1889" href="Categories.Object.Terminal.html#860" class="Record">Terminal</a> <a id="1898" class="Symbol">(</a><a id="1899" href="Categories.Category.Construction.F-Coalgebras.html#598" class="Function">F-Coalgebras</a> <a id="1912" class="Symbol">(</a><a id="1913" href="Monad.Instance.Delay.html#1567" class="Function">delayF</a> <a id="1920" href="Monad.Instance.Delay.html#1878" class="Bound">A</a><a id="1921" class="Symbol">))</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="1933" class="Keyword">module</a> <a id="DelayM.D"></a><a id="1940" href="Monad.Instance.Delay.html#1940" class="Module">D</a> <a id="1942" href="Monad.Instance.Delay.html#1942" class="Bound">A</a> <a id="1944" class="Symbol">=</a> <a id="1946" href="Categories.Functor.Core.html#248" class="Module">Functor</a> <a id="1954" class="Symbol">(</a><a id="1955" href="Monad.Instance.Delay.html#1567" class="Function">delayF</a> <a id="1962" href="Monad.Instance.Delay.html#1942" class="Bound">A</a><a id="1963" class="Symbol">)</a>
<a id="1760" class="Keyword">field</a> <a id="1970" class="Keyword">module</a> <a id="1977" href="Monad.Instance.Delay.html#1977" class="Module">_</a> <a id="1979" class="Symbol">(</a><a id="1980" href="Monad.Instance.Delay.html#1980" class="Bound">X</a> <a id="1982" class="Symbol">:</a> <a id="1984" href="Categories.Category.Core.html#559" class="Function">Obj</a><a id="1987" class="Symbol">)</a> <a id="1989" class="Keyword">where</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="2001" class="Keyword">open</a> <a id="2006" href="Categories.Object.Terminal.html#860" class="Module">Terminal</a> <a id="2015" class="Symbol">(</a><a id="2016" href="Monad.Instance.Delay.html#1864" class="Field">algebras</a> <a id="2025" href="Monad.Instance.Delay.html#1980" class="Bound">X</a><a id="2026" class="Symbol">)</a> <a id="2028" class="Keyword">using</a> <a id="2034" class="Symbol">(</a><a id="2035" href="Categories.Object.Terminal.html#905" class="Field"></a><a id="2036" class="Symbol">;</a> <a id="2038" href="Categories.Object.Terminal.html#577" class="Function">!</a><a id="2039" class="Symbol">)</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="2047" class="Keyword">open</a> <a id="2052" href="Categories.Functor.Coalgebra.html#483" class="Module">F-Coalgebra</a> <a id="2064" href="Categories.Object.Terminal.html#905" class="Function"></a> <a id="2066" class="Keyword">renaming</a> <a id="2075" class="Symbol">(</a><a id="2076" href="Categories.Functor.Coalgebra.html#571" class="Field">A</a> <a id="2078" class="Symbol">to</a> <a id="2081" class="Field">DX</a><a id="2083" class="Symbol">)</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="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="2092" href="Monad.Instance.Delay.html#2092" class="Function">D₀</a> <a id="2095" class="Symbol">=</a> <a id="2097" href="Monad.Instance.Delay.html#2081" class="Function">DX</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="1957" class="Keyword">field</a> <a id="2107" href="Monad.Instance.Delay.html#2107" class="Function">out-≅</a> <a id="2113" class="Symbol">:</a> <a id="2115" href="Monad.Instance.Delay.html#2081" class="Function">DX</a> <a id="2118" href="Categories.Morphism.html#1958" class="Record Operator"></a> <a id="2120" href="Monad.Instance.Delay.html#1980" class="Bound">X</a> <a id="2122" href="Categories.Category.Cocartesian.html#1549" class="Function Operator">+</a> <a id="2124" href="Monad.Instance.Delay.html#2081" class="Function">DX</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="2133" href="Monad.Instance.Delay.html#2107" class="Function">out-≅</a> <a id="2139" class="Symbol">=</a> <a id="2141" href="Categories.Category.Construction.F-Coalgebras.html#3360" class="Function">colambek</a> <a id="2150" class="Symbol">{</a><a id="2151" class="Argument">F</a> <a id="2153" class="Symbol">=</a> <a id="2155" href="Monad.Instance.Delay.html#1567" class="Function">delayF</a> <a id="2162" href="Monad.Instance.Delay.html#1980" class="Bound">X</a><a id="2163" class="Symbol">}</a> <a id="2165" class="Symbol">(</a><a id="2166" href="Monad.Instance.Delay.html#1864" class="Field">algebras</a> <a id="2175" href="Monad.Instance.Delay.html#1980" class="Bound">X</a><a id="2176" class="Symbol">)</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="2185" class="Comment">-- note: out-≅.from ≡ .α</a>
<a id="2217" class="Keyword">open</a> <a id="2222" href="Categories.Morphism.html#1958" class="Module Operator">_≅_</a> <a id="2226" href="Monad.Instance.Delay.html#2107" class="Function">out-≅</a> <a id="2232" class="Keyword">using</a> <a id="2238" class="Symbol">()</a> <a id="2241" class="Keyword">renaming</a> <a id="2250" class="Symbol">(</a><a id="2251" href="Categories.Morphism.html#2023" class="Field">to</a> <a id="2254" class="Symbol">to</a> <a id="2257" class="Field">out⁻¹</a><a id="2262" class="Symbol">;</a> <a id="2264" href="Categories.Morphism.html#2006" class="Field">from</a> <a id="2269" class="Symbol">to</a> <a id="2272" class="Field">out</a><a id="2275" class="Symbol">)</a> <a id="2277" class="Keyword">public</a>
<a id="2291" href="Monad.Instance.Delay.html#2291" class="Function">now</a> <a id="2295" class="Symbol">:</a> <a id="2297" href="Monad.Instance.Delay.html#1980" class="Bound">X</a> <a id="2299" href="Categories.Category.Core.html#575" class="Function Operator"></a> <a id="2301" href="Monad.Instance.Delay.html#2081" class="Function">DX</a>
<a id="2310" href="Monad.Instance.Delay.html#2291" class="Function">now</a> <a id="2314" class="Symbol">=</a> <a id="2316" href="Monad.Instance.Delay.html#2257" class="Function">out⁻¹</a> <a id="2322" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="2324" href="Categories.Object.Coproduct.html#492" class="Function">i₁</a>
<a id="2334" href="Monad.Instance.Delay.html#2334" class="Function">later</a> <a id="2340" class="Symbol">:</a> <a id="2342" href="Monad.Instance.Delay.html#2081" class="Function">DX</a> <a id="2345" href="Categories.Category.Core.html#575" class="Function Operator"></a> <a id="2347" href="Monad.Instance.Delay.html#2081" class="Function">DX</a>
<a id="2356" href="Monad.Instance.Delay.html#2334" class="Function">later</a> <a id="2362" class="Symbol">=</a> <a id="2364" href="Monad.Instance.Delay.html#2257" class="Function">out⁻¹</a> <a id="2370" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="2372" href="Categories.Object.Coproduct.html#512" class="Function">i₂</a>
<a id="2382" class="Comment">-- TODO inline</a>
<a id="2403" href="Monad.Instance.Delay.html#2403" class="Function">unitlaw</a> <a id="2411" class="Symbol">:</a> <a id="2413" href="Monad.Instance.Delay.html#2272" class="Function">out</a> <a id="2417" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="2419" href="Monad.Instance.Delay.html#2291" class="Function">now</a> <a id="2423" href="Categories.Category.Core.html#595" class="Function Operator"></a> <a id="2425" href="Categories.Object.Coproduct.html#492" class="Function">i₁</a>
<a id="2434" href="Monad.Instance.Delay.html#2403" class="Function">unitlaw</a> <a id="2442" class="Symbol">=</a> <a id="2444" href="Categories.Morphism.Reasoning.Core.html#6851" class="Function">cancelˡ</a> <a id="2452" class="Symbol">(</a><a id="2453" href="Categories.Morphism.html#1612" class="Function">_≅_.isoʳ</a> <a id="2462" href="Monad.Instance.Delay.html#2107" class="Function">out-≅</a><a id="2467" class="Symbol">)</a>
<a id="2476" class="Keyword">module</a> <a id="2483" href="Monad.Instance.Delay.html#2483" class="Module">_</a> <a id="2485" class="Symbol">{</a><a id="2486" href="Monad.Instance.Delay.html#2486" class="Bound">Y</a> <a id="2488" class="Symbol">:</a> <a id="2490" href="Categories.Category.Core.html#559" class="Function">Obj</a><a id="2493" class="Symbol">}</a> <a id="2495" class="Keyword">where</a>
<a id="2510" href="Monad.Instance.Delay.html#2510" class="Function">coit</a> <a id="2515" class="Symbol">:</a> <a id="2517" href="Monad.Instance.Delay.html#2486" class="Bound">Y</a> <a id="2519" href="Categories.Category.Core.html#575" class="Function Operator"></a> <a id="2521" href="Monad.Instance.Delay.html#1980" class="Bound">X</a> <a id="2523" href="Categories.Category.Cocartesian.html#1549" class="Function Operator">+</a> <a id="2525" href="Monad.Instance.Delay.html#2486" class="Bound">Y</a> <a id="2527" class="Symbol"></a> <a id="2529" href="Monad.Instance.Delay.html#2486" class="Bound">Y</a> <a id="2531" href="Categories.Category.Core.html#575" class="Function Operator"></a> <a id="2533" href="Monad.Instance.Delay.html#2081" class="Function">DX</a>
<a id="2544" href="Monad.Instance.Delay.html#2510" class="Function">coit</a> <a id="2549" href="Monad.Instance.Delay.html#2549" class="Bound">f</a> <a id="2551" class="Symbol">=</a> <a id="2553" href="Categories.Functor.Coalgebra.html#1411" class="Field">F-Coalgebra-Morphism.f</a> <a id="2576" class="Symbol">(</a><a id="2577" href="Categories.Object.Terminal.html#577" class="Function">!</a> <a id="2579" class="Symbol">{</a><a id="2580" class="Argument">A</a> <a id="2582" class="Symbol">=</a> <a id="2584" class="Keyword">record</a> <a id="2591" class="Symbol">{</a> <a id="2593" href="Categories.Functor.Coalgebra.html#571" class="Field">A</a> <a id="2595" class="Symbol">=</a> <a id="2597" href="Monad.Instance.Delay.html#2486" class="Bound">Y</a> <a id="2599" class="Symbol">;</a> <a id="2601" href="Categories.Functor.Coalgebra.html#585" class="Field">α</a> <a id="2603" class="Symbol">=</a> <a id="2605" href="Monad.Instance.Delay.html#2549" class="Bound">f</a> <a id="2607" class="Symbol">}})</a>
<a id="2620" href="Monad.Instance.Delay.html#2620" class="Function">coit-commutes</a> <a id="2634" class="Symbol">:</a> <a id="2636" class="Symbol"></a> <a id="2638" class="Symbol">(</a><a id="2639" href="Monad.Instance.Delay.html#2639" class="Bound">f</a> <a id="2641" class="Symbol">:</a> <a id="2643" href="Monad.Instance.Delay.html#2486" class="Bound">Y</a> <a id="2645" href="Categories.Category.Core.html#575" class="Function Operator"></a> <a id="2647" href="Monad.Instance.Delay.html#1980" class="Bound">X</a> <a id="2649" href="Categories.Category.Cocartesian.html#1549" class="Function Operator">+</a> <a id="2651" href="Monad.Instance.Delay.html#2486" class="Bound">Y</a><a id="2652" class="Symbol">)</a> <a id="2654" class="Symbol"></a> <a id="2656" href="Monad.Instance.Delay.html#2272" class="Function">out</a> <a id="2660" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="2662" class="Symbol">(</a><a id="2663" href="Monad.Instance.Delay.html#2510" class="Function">coit</a> <a id="2668" href="Monad.Instance.Delay.html#2639" class="Bound">f</a><a id="2669" class="Symbol">)</a> <a id="2671" href="Categories.Category.Core.html#595" class="Function Operator"></a> <a id="2673" class="Symbol">(</a><a id="2674" href="Monad.Instance.Delay.html#1263" class="Function">idC</a> <a id="2678" href="Categories.Category.Cocartesian.html#2133" class="Function Operator">+₁</a> <a id="2681" href="Monad.Instance.Delay.html#2510" class="Function">coit</a> <a id="2686" href="Monad.Instance.Delay.html#2639" class="Bound">f</a><a id="2687" class="Symbol">)</a> <a id="2689" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="2691" href="Monad.Instance.Delay.html#2639" class="Bound">f</a>
<a id="2701" href="Monad.Instance.Delay.html#2620" class="Function">coit-commutes</a> <a id="2715" href="Monad.Instance.Delay.html#2715" class="Bound">f</a> <a id="2717" class="Symbol">=</a> <a id="2719" href="Categories.Functor.Coalgebra.html#1433" class="Field">F-Coalgebra-Morphism.commutes</a> <a id="2749" class="Symbol">(</a><a id="2750" href="Categories.Object.Terminal.html#577" class="Function">!</a> <a id="2752" class="Symbol">{</a><a id="2753" class="Argument">A</a> <a id="2755" class="Symbol">=</a> <a id="2757" class="Keyword">record</a> <a id="2764" class="Symbol">{</a> <a id="2766" href="Categories.Functor.Coalgebra.html#571" class="Field">A</a> <a id="2768" class="Symbol">=</a> <a id="2770" href="Monad.Instance.Delay.html#2486" class="Bound">Y</a> <a id="2772" class="Symbol">;</a> <a id="2774" href="Categories.Functor.Coalgebra.html#585" class="Field">α</a> <a id="2776" class="Symbol">=</a> <a id="2778" href="Monad.Instance.Delay.html#2715" class="Bound">f</a> <a id="2780" class="Symbol">}})</a>
<a id="DelayM.monad"></a><a id="2789" href="Monad.Instance.Delay.html#2789" class="Function">monad</a> <a id="2795" class="Symbol">:</a> <a id="2797" href="Categories.Monad.html#454" class="Record">Monad</a> <a id="2803" href="Monad.Instance.Delay.html#1254" class="Field">C</a>
<a id="2809" href="Monad.Instance.Delay.html#2789" class="Function">monad</a> <a id="2815" class="Symbol">=</a> <a id="2817" href="Categories.Monad.Construction.Kleisli.html#1000" class="Function">Kleisli⇒Monad</a> <a id="2831" href="Monad.Instance.Delay.html#1254" class="Field">C</a> <a id="2833" class="Symbol">(</a><a id="2834" class="Keyword">record</a>
<a id="2847" class="Symbol">{</a> <a id="2849" href="Categories.Monad.Relative.html#834" class="Field">F₀</a> <a id="2852" class="Symbol">=</a> <a id="2854" href="Monad.Instance.Delay.html#2092" class="Function">D₀</a>
<a id="2864" class="Symbol">;</a> <a id="2866" href="Categories.Monad.Relative.html#857" class="Field">unit</a> <a id="2871" class="Symbol">=</a> <a id="2873" class="Symbol">λ</a> <a id="2875" class="Symbol">{</a><a id="2876" href="Monad.Instance.Delay.html#2876" class="Bound">X</a><a id="2877" class="Symbol">}</a> <a id="2879" class="Symbol"></a> <a id="2881" href="Monad.Instance.Delay.html#2291" class="Function">now</a> <a id="2885" href="Monad.Instance.Delay.html#2876" class="Bound">X</a>
<a id="2893" class="Symbol">;</a> <a id="2895" href="Categories.Monad.Relative.html#895" class="Field">extend</a> <a id="2902" class="Symbol">=</a> <a id="2904" href="Monad.Instance.Delay.html#8193" class="Function">extend</a>
<a id="2917" class="Symbol">;</a> <a id="2919" href="Categories.Monad.Relative.html#953" class="Field">identityʳ</a> <a id="2929" class="Symbol">=</a> <a id="2931" class="Symbol">λ</a> <a id="2933" class="Symbol">{</a><a id="2934" href="Monad.Instance.Delay.html#2934" class="Bound">X</a><a id="2935" class="Symbol">}</a> <a id="2937" class="Symbol">{</a><a id="2938" href="Monad.Instance.Delay.html#2938" class="Bound">Y</a><a id="2939" class="Symbol">}</a> <a id="2941" class="Symbol">{</a><a id="2942" href="Monad.Instance.Delay.html#2942" class="Bound">f</a><a id="2943" class="Symbol">}</a> <a id="2945" class="Symbol"></a> <a id="2947" href="Relation.Binary.Reasoning.Base.Single.html#1925" class="Function Operator">begin</a>
<a id="2962" href="Monad.Instance.Delay.html#8193" class="Function">extend</a> <a id="2969" href="Monad.Instance.Delay.html#2942" class="Bound">f</a> <a id="2971" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="2973" href="Monad.Instance.Delay.html#2291" class="Function">now</a> <a id="2977" href="Monad.Instance.Delay.html#2934" class="Bound">X</a> <a id="3020" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function">≈⟨</a> <a id="3023" class="Symbol">(</a><a id="3024" href="Categories.Morphism.Reasoning.Core.html#6986" class="Function">insertˡ</a> <a id="3032" class="Symbol">(</a><a id="3033" href="Categories.Morphism.html#1586" class="Function">_≅_.isoˡ</a> <a id="3042" class="Symbol">(</a><a id="3043" href="Monad.Instance.Delay.html#2107" class="Function">out-≅</a> <a id="3049" href="Monad.Instance.Delay.html#2938" class="Bound">Y</a><a id="3050" class="Symbol">)))</a> <a id="3054" href="Categories.Category.Core.html#2837" class="Function Operator">⟩∘⟨refl</a> <a id="3062" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function"></a>
<a id="3073" class="Symbol">(</a><a id="3074" href="Monad.Instance.Delay.html#2257" class="Function">out⁻¹</a> <a id="3080" href="Monad.Instance.Delay.html#2938" class="Bound">Y</a> <a id="3082" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="3084" href="Monad.Instance.Delay.html#2272" class="Function">out</a> <a id="3088" href="Monad.Instance.Delay.html#2938" class="Bound">Y</a> <a id="3090" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="3092" href="Monad.Instance.Delay.html#8193" class="Function">extend</a> <a id="3099" href="Monad.Instance.Delay.html#2942" class="Bound">f</a><a id="3100" class="Symbol">)</a> <a id="3102" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="3104" href="Monad.Instance.Delay.html#2291" class="Function">now</a> <a id="3108" href="Monad.Instance.Delay.html#2934" class="Bound">X</a> <a id="3131" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function">≈⟨</a> <a id="3134" class="Symbol">(</a><a id="3135" href="Categories.Category.Core.html#2734" class="Function Operator">refl⟩∘⟨</a> <a id="3143" class="Symbol">(</a><a id="3144" href="Monad.Instance.Delay.html#8457" class="Function">extendlaw</a> <a id="3154" href="Monad.Instance.Delay.html#2942" class="Bound">f</a><a id="3155" class="Symbol">))</a> <a id="3158" href="Categories.Category.Core.html#2837" class="Function Operator">⟩∘⟨refl</a> <a id="3166" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function"></a>
<a id="3176" class="Symbol">(</a><a id="3177" href="Monad.Instance.Delay.html#2257" class="Function">out⁻¹</a> <a id="3183" href="Monad.Instance.Delay.html#2938" class="Bound">Y</a> <a id="3185" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="3187" href="Categories.Object.Coproduct.html#532" class="Function Operator">[</a> <a id="3189" href="Monad.Instance.Delay.html#2272" class="Function">out</a> <a id="3193" href="Monad.Instance.Delay.html#2938" class="Bound">Y</a> <a id="3195" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="3197" href="Monad.Instance.Delay.html#2942" class="Bound">f</a> <a id="3199" href="Categories.Object.Coproduct.html#532" class="Function Operator">,</a> <a id="3201" href="Categories.Object.Coproduct.html#512" class="Function">i₂</a> <a id="3204" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="3206" href="Monad.Instance.Delay.html#8193" class="Function">extend</a> <a id="3213" href="Monad.Instance.Delay.html#2942" class="Bound">f</a> <a id="3215" href="Categories.Object.Coproduct.html#532" class="Function Operator">]</a> <a id="3217" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="3219" href="Monad.Instance.Delay.html#2272" class="Function">out</a> <a id="3223" href="Monad.Instance.Delay.html#2934" class="Bound">X</a><a id="3224" class="Symbol">)</a> <a id="3226" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="3228" href="Monad.Instance.Delay.html#2291" class="Function">now</a> <a id="3232" href="Monad.Instance.Delay.html#2934" class="Bound">X</a> <a id="3234" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function">≈⟨</a> <a id="3237" href="Categories.Morphism.Reasoning.Core.html#1914" class="Function">pullʳ</a> <a id="3243" class="Symbol">(</a><a id="3244" href="Categories.Morphism.Reasoning.Core.html#1914" class="Function">pullʳ</a> <a id="3250" class="Symbol">(</a><a id="3251" href="Monad.Instance.Delay.html#2403" class="Function">unitlaw</a> <a id="3259" href="Monad.Instance.Delay.html#2934" class="Bound">X</a><a id="3260" class="Symbol">))</a> <a id="3263" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function"></a>
<a id="3273" href="Monad.Instance.Delay.html#2257" class="Function">out⁻¹</a> <a id="3279" href="Monad.Instance.Delay.html#2938" class="Bound">Y</a> <a id="3281" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="3283" href="Categories.Object.Coproduct.html#532" class="Function Operator">[</a> <a id="3285" href="Monad.Instance.Delay.html#2272" class="Function">out</a> <a id="3289" href="Monad.Instance.Delay.html#2938" class="Bound">Y</a> <a id="3291" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="3293" href="Monad.Instance.Delay.html#2942" class="Bound">f</a> <a id="3295" href="Categories.Object.Coproduct.html#532" class="Function Operator">,</a> <a id="3297" href="Categories.Object.Coproduct.html#512" class="Function">i₂</a> <a id="3300" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="3302" href="Monad.Instance.Delay.html#8193" class="Function">extend</a> <a id="3309" href="Monad.Instance.Delay.html#2942" class="Bound">f</a> <a id="3311" href="Categories.Object.Coproduct.html#532" class="Function Operator">]</a> <a id="3313" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="3315" href="Categories.Object.Coproduct.html#492" class="Function">i₁</a> <a id="3331" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function">≈⟨</a> <a id="3334" href="Categories.Category.Core.html#2734" class="Function Operator">refl⟩∘⟨</a> <a id="3342" href="Categories.Object.Coproduct.html#569" class="Function">inject₁</a> <a id="3350" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function"></a>
<a id="3360" href="Monad.Instance.Delay.html#2257" class="Function">out⁻¹</a> <a id="3366" href="Monad.Instance.Delay.html#2938" class="Bound">Y</a> <a id="3368" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="3370" href="Monad.Instance.Delay.html#2272" class="Function">out</a> <a id="3374" href="Monad.Instance.Delay.html#2938" class="Bound">Y</a> <a id="3376" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="3378" href="Monad.Instance.Delay.html#2942" class="Bound">f</a> <a id="3418" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function">≈⟨</a> <a id="3421" href="Categories.Morphism.Reasoning.Core.html#6851" class="Function">cancelˡ</a> <a id="3429" class="Symbol">(</a><a id="3430" href="Categories.Morphism.html#1586" class="Function">_≅_.isoˡ</a> <a id="3439" class="Symbol">(</a><a id="3440" href="Monad.Instance.Delay.html#2107" class="Function">out-≅</a> <a id="3446" href="Monad.Instance.Delay.html#2938" class="Bound">Y</a><a id="3447" class="Symbol">))</a> <a id="3450" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function"></a>
<a id="3460" href="Monad.Instance.Delay.html#2942" class="Bound">f</a> <a id="3518" href="Relation.Binary.Reasoning.Base.Single.html#2564" class="Function Operator"></a>
<a id="3526" class="Symbol">;</a> <a id="3528" href="Categories.Monad.Relative.html#1025" class="Field">identityˡ</a> <a id="3538" class="Symbol">=</a> <a id="3540" class="Symbol">λ</a> <a id="3542" class="Symbol">{</a><a id="3543" href="Monad.Instance.Delay.html#3543" class="Bound">X</a><a id="3544" class="Symbol">}</a> <a id="3546" class="Symbol"></a> <a id="3548" href="Categories.Object.Terminal.html#803" class="Function">Terminal.-id</a> <a id="3562" class="Symbol">(</a><a id="3563" href="Monad.Instance.Delay.html#1864" class="Field">algebras</a> <a id="3572" href="Monad.Instance.Delay.html#3543" class="Bound">X</a><a id="3573" class="Symbol">)</a> <a id="3575" class="Symbol">(</a><a id="3576" class="Keyword">record</a> <a id="3583" class="Symbol">{</a> <a id="3585" href="Categories.Functor.Coalgebra.html#1411" class="Field">f</a> <a id="3587" class="Symbol">=</a> <a id="3589" href="Monad.Instance.Delay.html#8193" class="Function">extend</a> <a id="3596" class="Symbol">(</a><a id="3597" href="Monad.Instance.Delay.html#2291" class="Function">now</a> <a id="3601" href="Monad.Instance.Delay.html#3543" class="Bound">X</a><a id="3602" class="Symbol">)</a> <a id="3604" class="Symbol">;</a> <a id="3606" href="Categories.Functor.Coalgebra.html#1433" class="Field">commutes</a> <a id="3615" class="Symbol">=</a> <a id="3617" href="Relation.Binary.Reasoning.Base.Single.html#1925" class="Function Operator">begin</a>
<a id="3632" href="Monad.Instance.Delay.html#2272" class="Function">out</a> <a id="3636" href="Monad.Instance.Delay.html#3543" class="Bound">X</a> <a id="3638" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="3640" href="Monad.Instance.Delay.html#8193" class="Function">extend</a> <a id="3647" class="Symbol">(</a><a id="3648" href="Monad.Instance.Delay.html#2291" class="Function">now</a> <a id="3652" href="Monad.Instance.Delay.html#3543" class="Bound">X</a><a id="3653" class="Symbol">)</a> <a id="3747" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function">≈⟨</a> <a id="3750" href="Categories.Morphism.Reasoning.Core.html#2048" class="Function">pullˡ</a> <a id="3756" class="Symbol">((</a><a id="3758" href="Categories.Functor.Coalgebra.html#1433" class="Field">F-Coalgebra-Morphism.commutes</a> <a id="3788" class="Symbol">(</a><a id="3789" href="Categories.Object.Terminal.html#577" class="Function">Terminal.!</a> <a id="3800" class="Symbol">(</a><a id="3801" href="Monad.Instance.Delay.html#1864" class="Field">algebras</a> <a id="3810" href="Monad.Instance.Delay.html#3543" class="Bound">X</a><a id="3811" class="Symbol">)</a> <a id="3813" class="Symbol">{</a><a id="3814" class="Argument">A</a> <a id="3816" class="Symbol">=</a> <a id="3818" href="Monad.Instance.Delay.html#7957" class="Function">alg</a> <a id="3822" class="Symbol">(</a><a id="3823" href="Monad.Instance.Delay.html#2291" class="Function">now</a> <a id="3827" href="Monad.Instance.Delay.html#3543" class="Bound">X</a><a id="3828" class="Symbol">)})))</a> <a id="3834" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function"></a>
<a id="3845" class="Symbol">((</a><a id="3847" href="Monad.Instance.Delay.html#1263" class="Function">idC</a> <a id="3851" href="Categories.Category.Cocartesian.html#2133" class="Function Operator">+₁</a> <a id="3854" class="Symbol">(</a><a id="3855" href="Categories.Functor.Coalgebra.html#1411" class="Field">F-Coalgebra-Morphism.f</a> <a id="3878" class="Symbol">(</a><a id="3879" href="Categories.Object.Terminal.html#577" class="Function">Terminal.!</a> <a id="3890" class="Symbol">(</a><a id="3891" href="Monad.Instance.Delay.html#1864" class="Field">algebras</a> <a id="3900" href="Monad.Instance.Delay.html#3543" class="Bound">X</a><a id="3901" class="Symbol">)</a> <a id="3903" class="Symbol">{</a><a id="3904" class="Argument">A</a> <a id="3906" class="Symbol">=</a> <a id="3908" href="Monad.Instance.Delay.html#7957" class="Function">alg</a> <a id="3912" class="Symbol">(</a><a id="3913" href="Monad.Instance.Delay.html#2291" class="Function">now</a> <a id="3917" href="Monad.Instance.Delay.html#3543" class="Bound">X</a><a id="3918" class="Symbol">)})))</a> <a id="3924" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="3926" href="Categories.Functor.Coalgebra.html#585" class="Field">F-Coalgebra.α</a> <a id="3940" class="Symbol">(</a><a id="3941" href="Monad.Instance.Delay.html#7957" class="Function">alg</a> <a id="3945" class="Symbol">(</a><a id="3946" href="Monad.Instance.Delay.html#2291" class="Function">now</a> <a id="3950" href="Monad.Instance.Delay.html#3543" class="Bound">X</a><a id="3951" class="Symbol">)))</a> <a id="3955" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="3957" href="Categories.Object.Coproduct.html#492" class="Function">i₁</a> <a id="3960" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function">≈⟨</a> <a id="3963" href="Categories.Morphism.Reasoning.Core.html#1914" class="Function">pullʳ</a> <a id="3969" href="Categories.Object.Coproduct.html#569" class="Function">inject₁</a> <a id="3977" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function"></a>
<a id="3987" class="Symbol">(</a><a id="3988" href="Monad.Instance.Delay.html#1263" class="Function">idC</a> <a id="3992" href="Categories.Category.Cocartesian.html#2133" class="Function Operator">+₁</a> <a id="3995" class="Symbol">(</a><a id="3996" href="Categories.Functor.Coalgebra.html#1411" class="Field">F-Coalgebra-Morphism.f</a> <a id="4019" class="Symbol">(</a><a id="4020" href="Categories.Object.Terminal.html#577" class="Function">Terminal.!</a> <a id="4031" class="Symbol">(</a><a id="4032" href="Monad.Instance.Delay.html#1864" class="Field">algebras</a> <a id="4041" href="Monad.Instance.Delay.html#3543" class="Bound">X</a><a id="4042" class="Symbol">)</a> <a id="4044" class="Symbol">{</a><a id="4045" class="Argument">A</a> <a id="4047" class="Symbol">=</a> <a id="4049" href="Monad.Instance.Delay.html#7957" class="Function">alg</a> <a id="4053" class="Symbol">(</a><a id="4054" href="Monad.Instance.Delay.html#2291" class="Function">now</a> <a id="4058" href="Monad.Instance.Delay.html#3543" class="Bound">X</a><a id="4059" class="Symbol">)})))</a>
<a id="4074" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="4076" href="Categories.Object.Coproduct.html#532" class="Function Operator">[</a> <a id="4078" href="Categories.Object.Coproduct.html#532" class="Function Operator">[</a> <a id="4080" href="Categories.Object.Coproduct.html#492" class="Function">i₁</a> <a id="4083" href="Categories.Object.Coproduct.html#532" class="Function Operator">,</a> <a id="4085" href="Categories.Object.Coproduct.html#512" class="Function">i₂</a> <a id="4088" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="4090" href="Categories.Object.Coproduct.html#512" class="Function">i₂</a> <a id="4093" href="Categories.Object.Coproduct.html#532" class="Function Operator">]</a> <a id="4095" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="4097" class="Symbol">(</a><a id="4098" href="Monad.Instance.Delay.html#2272" class="Function">out</a> <a id="4102" href="Monad.Instance.Delay.html#3543" class="Bound">X</a> <a id="4104" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="4106" class="Symbol">(</a><a id="4107" href="Monad.Instance.Delay.html#2291" class="Function">now</a> <a id="4111" href="Monad.Instance.Delay.html#3543" class="Bound">X</a><a id="4112" class="Symbol">))</a> <a id="4115" href="Categories.Object.Coproduct.html#532" class="Function Operator">,</a> <a id="4117" href="Categories.Object.Coproduct.html#512" class="Function">i₂</a> <a id="4120" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="4122" href="Categories.Object.Coproduct.html#492" class="Function">i₁</a> <a id="4125" href="Categories.Object.Coproduct.html#532" class="Function Operator">]</a> <a id="4127" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="4129" href="Monad.Instance.Delay.html#2272" class="Function">out</a> <a id="4133" href="Monad.Instance.Delay.html#3543" class="Bound">X</a> <a id="4189" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function">≈⟨</a> <a id="4192" href="Categories.Category.Core.html#2734" class="Function Operator">refl⟩∘⟨</a> <a id="4200" href="Categories.Object.Coproduct.html#816" class="Function">[]-cong₂</a> <a id="4209" class="Symbol">((</a><a id="4211" href="Categories.Category.Core.html#2734" class="Function Operator">refl⟩∘⟨</a> <a id="4219" class="Symbol">(</a><a id="4220" href="Monad.Instance.Delay.html#2403" class="Function">unitlaw</a> <a id="4228" href="Monad.Instance.Delay.html#3543" class="Bound">X</a><a id="4229" class="Symbol">))</a> <a id="4232" href="Categories.Category.Core.html#3061" class="Function Operator"></a> <a id="4234" href="Categories.Object.Coproduct.html#569" class="Function">inject₁</a><a id="4241" class="Symbol">)</a> <a id="4243" href="Relation.Binary.Structures.html#1577" class="Function">refl</a> <a id="4248" href="Categories.Category.Core.html#2837" class="Function Operator">⟩∘⟨refl</a> <a id="4256" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function"></a>
<a id="4266" class="Symbol">(</a><a id="4267" href="Monad.Instance.Delay.html#1263" class="Function">idC</a> <a id="4271" href="Categories.Category.Cocartesian.html#2133" class="Function Operator">+₁</a> <a id="4274" class="Symbol">(</a><a id="4275" href="Categories.Functor.Coalgebra.html#1411" class="Field">F-Coalgebra-Morphism.f</a> <a id="4298" class="Symbol">(</a><a id="4299" href="Categories.Object.Terminal.html#577" class="Function">Terminal.!</a> <a id="4310" class="Symbol">(</a><a id="4311" href="Monad.Instance.Delay.html#1864" class="Field">algebras</a> <a id="4320" href="Monad.Instance.Delay.html#3543" class="Bound">X</a><a id="4321" class="Symbol">)</a> <a id="4323" class="Symbol">{</a><a id="4324" class="Argument">A</a> <a id="4326" class="Symbol">=</a> <a id="4328" href="Monad.Instance.Delay.html#7957" class="Function">alg</a> <a id="4332" class="Symbol">(</a><a id="4333" href="Monad.Instance.Delay.html#2291" class="Function">now</a> <a id="4337" href="Monad.Instance.Delay.html#3543" class="Bound">X</a><a id="4338" class="Symbol">)})))</a> <a id="4344" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="4346" href="Categories.Object.Coproduct.html#532" class="Function Operator">[</a> <a id="4348" href="Categories.Object.Coproduct.html#492" class="Function">i₁</a> <a id="4351" href="Categories.Object.Coproduct.html#532" class="Function Operator">,</a> <a id="4353" href="Categories.Object.Coproduct.html#512" class="Function">i₂</a> <a id="4356" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="4358" href="Categories.Object.Coproduct.html#492" class="Function">i₁</a> <a id="4361" href="Categories.Object.Coproduct.html#532" class="Function Operator">]</a> <a id="4363" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="4365" href="Monad.Instance.Delay.html#2272" class="Function">out</a> <a id="4369" href="Monad.Instance.Delay.html#3543" class="Bound">X</a> <a id="4381" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function">≈⟨</a> <a id="4384" href="Categories.Morphism.Reasoning.Core.html#2048" class="Function">pullˡ</a> <a id="4390" href="Categories.Category.Cocartesian.html#2736" class="Function">∘[]</a> <a id="4394" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function"></a>
<a id="4404" href="Categories.Object.Coproduct.html#532" class="Function Operator">[</a> <a id="4406" class="Symbol">(</a><a id="4407" href="Monad.Instance.Delay.html#1263" class="Function">idC</a> <a id="4411" href="Categories.Category.Cocartesian.html#2133" class="Function Operator">+₁</a> <a id="4414" class="Symbol">(</a><a id="4415" href="Categories.Functor.Coalgebra.html#1411" class="Field">F-Coalgebra-Morphism.f</a> <a id="4438" class="Symbol">(</a><a id="4439" href="Categories.Object.Terminal.html#577" class="Function">Terminal.!</a> <a id="4450" class="Symbol">(</a><a id="4451" href="Monad.Instance.Delay.html#1864" class="Field">algebras</a> <a id="4460" href="Monad.Instance.Delay.html#3543" class="Bound">X</a><a id="4461" class="Symbol">)</a> <a id="4463" class="Symbol">{</a><a id="4464" class="Argument">A</a> <a id="4466" class="Symbol">=</a> <a id="4468" href="Monad.Instance.Delay.html#7957" class="Function">alg</a> <a id="4472" class="Symbol">(</a><a id="4473" href="Monad.Instance.Delay.html#2291" class="Function">now</a> <a id="4477" href="Monad.Instance.Delay.html#3543" class="Bound">X</a><a id="4478" class="Symbol">)})))</a> <a id="4484" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="4486" href="Categories.Object.Coproduct.html#492" class="Function">i₁</a>
<a id="4498" href="Categories.Object.Coproduct.html#532" class="Function Operator">,</a> <a id="4500" class="Symbol">(</a><a id="4501" href="Monad.Instance.Delay.html#1263" class="Function">idC</a> <a id="4505" href="Categories.Category.Cocartesian.html#2133" class="Function Operator">+₁</a> <a id="4508" class="Symbol">(</a><a id="4509" href="Categories.Functor.Coalgebra.html#1411" class="Field">F-Coalgebra-Morphism.f</a> <a id="4532" class="Symbol">(</a><a id="4533" href="Categories.Object.Terminal.html#577" class="Function">Terminal.!</a> <a id="4544" class="Symbol">(</a><a id="4545" href="Monad.Instance.Delay.html#1864" class="Field">algebras</a> <a id="4554" href="Monad.Instance.Delay.html#3543" class="Bound">X</a><a id="4555" class="Symbol">)</a> <a id="4557" class="Symbol">{</a><a id="4558" class="Argument">A</a> <a id="4560" class="Symbol">=</a> <a id="4562" href="Monad.Instance.Delay.html#7957" class="Function">alg</a> <a id="4566" class="Symbol">(</a><a id="4567" href="Monad.Instance.Delay.html#2291" class="Function">now</a> <a id="4571" href="Monad.Instance.Delay.html#3543" class="Bound">X</a><a id="4572" class="Symbol">)})))</a> <a id="4578" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="4580" href="Categories.Object.Coproduct.html#512" class="Function">i₂</a> <a id="4583" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="4585" href="Categories.Object.Coproduct.html#492" class="Function">i₁</a> <a id="4588" href="Categories.Object.Coproduct.html#532" class="Function Operator">]</a> <a id="4590" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="4592" href="Monad.Instance.Delay.html#2272" class="Function">out</a> <a id="4596" href="Monad.Instance.Delay.html#3543" class="Bound">X</a> <a id="4613" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function">≈⟨</a> <a id="4616" class="Symbol">(</a><a id="4617" href="Categories.Object.Coproduct.html#816" class="Function">[]-cong₂</a> <a id="4626" href="Categories.Category.Cocartesian.html#2548" class="Function">+₁∘i₁</a> <a id="4632" class="Symbol">(</a><a id="4633" href="Categories.Morphism.Reasoning.Core.html#2048" class="Function">pullˡ</a> <a id="4639" href="Categories.Category.Cocartesian.html#2585" class="Function">+₁∘i₂</a><a id="4644" class="Symbol">))</a> <a id="4647" href="Categories.Category.Core.html#2837" class="Function Operator">⟩∘⟨refl</a> <a id="4655" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function"></a>
<a id="4665" href="Categories.Object.Coproduct.html#532" class="Function Operator">[</a> <a id="4667" href="Categories.Object.Coproduct.html#492" class="Function">i₁</a> <a id="4670" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="4672" href="Monad.Instance.Delay.html#1263" class="Function">idC</a> <a id="4676" href="Categories.Object.Coproduct.html#532" class="Function Operator">,</a> <a id="4678" class="Symbol">(</a><a id="4679" href="Categories.Object.Coproduct.html#512" class="Function">i₂</a> <a id="4682" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="4684" class="Symbol">(</a><a id="4685" href="Categories.Functor.Coalgebra.html#1411" class="Field">F-Coalgebra-Morphism.f</a> <a id="4708" class="Symbol">(</a><a id="4709" href="Categories.Object.Terminal.html#577" class="Function">Terminal.!</a> <a id="4720" class="Symbol">(</a><a id="4721" href="Monad.Instance.Delay.html#1864" class="Field">algebras</a> <a id="4730" href="Monad.Instance.Delay.html#3543" class="Bound">X</a><a id="4731" class="Symbol">)</a> <a id="4733" class="Symbol">{</a><a id="4734" class="Argument">A</a> <a id="4736" class="Symbol">=</a> <a id="4738" href="Monad.Instance.Delay.html#7957" class="Function">alg</a> <a id="4742" class="Symbol">(</a><a id="4743" href="Monad.Instance.Delay.html#2291" class="Function">now</a> <a id="4747" href="Monad.Instance.Delay.html#3543" class="Bound">X</a><a id="4748" class="Symbol">)})))</a> <a id="4754" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="4756" href="Categories.Object.Coproduct.html#492" class="Function">i₁</a> <a id="4759" href="Categories.Object.Coproduct.html#532" class="Function Operator">]</a> <a id="4761" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="4763" href="Monad.Instance.Delay.html#2272" class="Function">out</a> <a id="4767" href="Monad.Instance.Delay.html#3543" class="Bound">X</a> <a id="4780" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function">≈⟨</a> <a id="4783" class="Symbol">(</a><a id="4784" href="Categories.Object.Coproduct.html#816" class="Function">[]-cong₂</a> <a id="4793" href="Relation.Binary.Structures.html#1577" class="Function">refl</a> <a id="4798" href="Categories.Category.Core.html#715" class="Function">assoc</a><a id="4803" class="Symbol">)</a> <a id="4805" href="Categories.Category.Core.html#2837" class="Function Operator">⟩∘⟨refl</a> <a id="4813" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function"></a>
<a id="4823" href="Categories.Object.Coproduct.html#532" class="Function Operator">[</a> <a id="4825" href="Categories.Object.Coproduct.html#492" class="Function">i₁</a> <a id="4828" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="4830" href="Monad.Instance.Delay.html#1263" class="Function">idC</a> <a id="4834" href="Categories.Object.Coproduct.html#532" class="Function Operator">,</a> <a id="4836" href="Categories.Object.Coproduct.html#512" class="Function">i₂</a> <a id="4839" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="4841" class="Symbol">(</a><a id="4842" href="Monad.Instance.Delay.html#8193" class="Function">extend</a> <a id="4849" class="Symbol">(</a><a id="4850" href="Monad.Instance.Delay.html#2291" class="Function">now</a> <a id="4854" href="Monad.Instance.Delay.html#3543" class="Bound">X</a><a id="4855" class="Symbol">))</a> <a id="4858" href="Categories.Object.Coproduct.html#532" class="Function Operator">]</a> <a id="4860" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="4862" href="Monad.Instance.Delay.html#2272" class="Function">out</a> <a id="4866" href="Monad.Instance.Delay.html#3543" class="Bound">X</a> <a id="4938" href="Relation.Binary.Reasoning.Setoid.html#1162" class="Function">≈˘⟨</a> <a id="4942" href="Categories.Category.Cocartesian.html#2662" class="Function">[]∘+₁</a> <a id="4948" href="Categories.Category.Core.html#2837" class="Function Operator">⟩∘⟨refl</a> <a id="4956" href="Relation.Binary.Reasoning.Setoid.html#1162" class="Function"></a>
<a id="4966" class="Symbol">(</a><a id="4967" href="Categories.Object.Coproduct.html#532" class="Function Operator">[</a> <a id="4969" href="Categories.Object.Coproduct.html#492" class="Function">i₁</a> <a id="4972" href="Categories.Object.Coproduct.html#532" class="Function Operator">,</a> <a id="4974" href="Categories.Object.Coproduct.html#512" class="Function">i₂</a> <a id="4977" href="Categories.Object.Coproduct.html#532" class="Function Operator">]</a> <a id="4979" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="4981" class="Symbol">(</a><a id="4982" href="Monad.Instance.Delay.html#1263" class="Function">idC</a> <a id="4986" href="Categories.Category.Cocartesian.html#2133" class="Function Operator">+₁</a> <a id="4989" href="Monad.Instance.Delay.html#8193" class="Function">extend</a> <a id="4996" class="Symbol">(</a><a id="4997" href="Monad.Instance.Delay.html#2291" class="Function">now</a> <a id="5001" href="Monad.Instance.Delay.html#3543" class="Bound">X</a><a id="5002" class="Symbol">)))</a> <a id="5006" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="5008" href="Monad.Instance.Delay.html#2272" class="Function">out</a> <a id="5012" href="Monad.Instance.Delay.html#3543" class="Bound">X</a> <a id="5081" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function">≈⟨</a> <a id="5084" class="Symbol">(</a><a id="5085" href="Categories.Morphism.Reasoning.Core.html#2948" class="Function">elimˡ</a> <a id="5091" href="Categories.Category.Cocartesian.html#1729" class="Function">+-η</a><a id="5094" class="Symbol">)</a> <a id="5096" href="Categories.Category.Core.html#2837" class="Function Operator">⟩∘⟨refl</a> <a id="5104" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function"></a>
<a id="5114" class="Symbol">(</a><a id="5115" href="Monad.Instance.Delay.html#1263" class="Function">idC</a> <a id="5119" href="Categories.Category.Cocartesian.html#2133" class="Function Operator">+₁</a> <a id="5122" href="Monad.Instance.Delay.html#8193" class="Function">extend</a> <a id="5129" class="Symbol">(</a><a id="5130" href="Monad.Instance.Delay.html#2291" class="Function">now</a> <a id="5134" href="Monad.Instance.Delay.html#3543" class="Bound">X</a><a id="5135" class="Symbol">))</a> <a id="5138" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="5140" href="Monad.Instance.Delay.html#2272" class="Function">out</a> <a id="5144" href="Monad.Instance.Delay.html#3543" class="Bound">X</a> <a id="5229" href="Relation.Binary.Reasoning.Base.Single.html#2564" class="Function Operator"></a> <a id="5231" class="Symbol">})</a>
<a id="5240" class="Symbol">;</a> <a id="5242" href="Categories.Monad.Relative.html#1078" class="Field">assoc</a> <a id="5248" class="Symbol">=</a> <a id="5250" class="Hole">{! !}</a>
<a id="5264" class="Symbol">;</a> <a id="5266" href="Categories.Monad.Relative.html#1190" class="Field">sym-assoc</a> <a id="5276" class="Symbol">=</a> <a id="5278" class="Hole">{! !}</a>
<a id="5292" class="Symbol">;</a> <a id="5294" href="Categories.Monad.Relative.html#1306" class="Field">extend-≈</a> <a id="5303" class="Symbol">=</a> <a id="5305" class="Symbol">λ</a> <a id="5307" class="Symbol">{</a><a id="5308" href="Monad.Instance.Delay.html#5308" class="Bound">X</a><a id="5309" class="Symbol">}</a> <a id="5311" class="Symbol">{</a><a id="5312" href="Monad.Instance.Delay.html#5312" class="Bound">Y</a><a id="5313" class="Symbol">}</a> <a id="5315" class="Symbol">{</a><a id="5316" href="Monad.Instance.Delay.html#5316" class="Bound">f</a><a id="5317" class="Symbol">}</a> <a id="5319" class="Symbol">{</a><a id="5320" href="Monad.Instance.Delay.html#5320" class="Bound">g</a><a id="5321" class="Symbol">}</a> <a id="5323" href="Monad.Instance.Delay.html#5323" class="Bound">eq</a> <a id="5326" class="Symbol"></a> <a id="5328" class="Hole">{! !}</a>
<a id="5351" class="Comment">-- begin </a>
<a id="5369" class="Comment">-- extend f ≈⟨ sym (Terminal.!-unique (algebras Y) (record { f = extend f ; commutes = F-Coalgebra-Morphism.commutes {! !} })) ⟩ </a>
<a id="5511" class="Comment">-- F-Coalgebra-Morphism.f ((Terminal.! (algebras Y) {A = alg&#39; {X} {Y}})) ≈˘⟨ sym (Terminal.!-unique (algebras Y) (record { f = extend g ; commutes = {! !} })) ⟩</a>
<a id="5684" class="Comment">-- extend g ∎</a>
<a id="5715" class="Comment">-- let </a>
<a id="5731" class="Comment">-- h : F-Coalgebra-Morphism (alg f) (alg g)</a>
<a id="5785" class="Comment">-- h = record { f = idC ; commutes = begin </a>
<a id="5839" class="Comment">-- F-Coalgebra.α (alg g) ∘ idC ≈⟨ id-comm ⟩ </a>
<a id="5896" class="Comment">-- idC ∘ F-Coalgebra.α (alg g) ≈⟨ refl⟩∘⟨ []-cong₂ (([]-cong₂ (refl⟩∘⟨ (refl⟩∘⟨ (sym eq))) refl) ⟩∘⟨refl) refl ⟩ </a>
<a id="6022" class="Comment">-- idC ∘ F-Coalgebra.α (alg f) ≈˘⟨ ([]-cong₂ identityʳ identityʳ ○ +-η) ⟩∘⟨refl ⟩</a>
<a id="6116" class="Comment">-- (idC +₁ idC) ∘ F-Coalgebra.α (alg f) ∎ }</a>
<a id="6172" class="Comment">-- x : F-Coalgebra-Morphism (alg f) (Terminal. (algebras Y))</a>
<a id="6244" class="Comment">-- x = (F-Coalgebras (delayF Y)) [ Terminal.! (algebras Y) ∘ h ]</a>
<a id="6319" class="Comment">-- in Terminal.!-unique₂ (algebras Y) {f = Terminal.! (algebras Y)} {g = {! !} } ⟩∘⟨refl</a>
<a id="6427" class="Comment">-- extend f ≈⟨ insertˡ (_≅_.isoˡ (out-≅ Y)) ⟩ </a>
<a id="6482" class="Comment">-- out⁻¹ Y ∘ out Y ∘ extend f ≈⟨ refl⟩∘⟨ pullˡ (F-Coalgebra-Morphism.commutes (Terminal.! (algebras Y) {A = alg f})) ⟩</a>
<a id="6609" class="Comment">-- out⁻¹ Y ∘ ((idC +₁ (F-Coalgebra-Morphism.f (Terminal.! (algebras Y)))) ∘ [ [ [ i₁ , i₂ ∘ i₂ ] ∘ (out Y ∘ f) , i₂ ∘ i₁ ] ∘ out X , (idC +₁ i₂) ∘ out Y ]) ∘ i₁ ≈⟨ refl⟩∘⟨ ((+₁-cong₂ refl (Terminal.!-unique₂ (algebras Y) {f = Terminal.! (algebras Y) {A = alg f}} {g = Terminal.! (algebras Y) {A = alg f}}) ⟩∘⟨ ([]-cong₂ (([]-cong₂ (refl⟩∘⟨ (refl⟩∘⟨ eq)) refl) ⟩∘⟨refl) refl)) ⟩∘⟨refl) ⟩</a>
<a id="7004" class="Comment">-- out⁻¹ Y ∘ ((idC +₁ (F-Coalgebra-Morphism.f (Terminal.! (algebras Y)))) ∘ [ [ [ i₁ , i₂ ∘ i₂ ] ∘ (out Y ∘ g) , i₂ ∘ i₁ ] ∘ out X , (idC +₁ i₂) ∘ out Y ]) ∘ i₁ ≈⟨ refl⟩∘⟨ (((+₁-cong₂ refl (Terminal.!-unique₂ (algebras Y) {f = Terminal.! (algebras Y)} {g = record { f = F-Coalgebra-Morphism.f (Terminal.! (algebras Y)) ; commutes = {! !} }})) ⟩∘⟨refl) ⟩∘⟨refl) ⟩</a>
<a id="7377" class="Comment">-- out⁻¹ Y ∘ ((idC +₁ (F-Coalgebra-Morphism.f (Terminal.! (algebras Y)))) ∘ [ [ [ i₁ , i₂ ∘ i₂ ] ∘ (out Y ∘ g) , i₂ ∘ i₁ ] ∘ out X , (idC +₁ i₂) ∘ out Y ]) ∘ i₁ ≈˘⟨ refl⟩∘⟨ pullˡ (F-Coalgebra-Morphism.commutes (Terminal.! (algebras Y) {A = alg g})) ⟩</a>
<a id="7636" class="Comment">-- out⁻¹ Y ∘ out Y ∘ extend g ≈˘⟨ insertˡ (_≅_.isoˡ (out-≅ Y)) ⟩</a>
<a id="7709" class="Comment">-- extend g ∎</a>
<a id="7729" class="Symbol">})</a>
<a id="7738" class="Keyword">where</a>
<a id="7752" href="Monad.Instance.Delay.html#7752" class="Function">alg&#39;</a> <a id="7757" class="Symbol">:</a> <a id="7759" class="Symbol"></a> <a id="7761" class="Symbol">{</a><a id="7762" href="Monad.Instance.Delay.html#7762" class="Bound">X</a> <a id="7764" href="Monad.Instance.Delay.html#7764" class="Bound">Y</a><a id="7765" class="Symbol">}</a> <a id="7767" class="Symbol"></a> <a id="7769" href="Categories.Functor.Coalgebra.html#483" class="Record">F-Coalgebra</a> <a id="7781" class="Symbol">(</a><a id="7782" href="Monad.Instance.Delay.html#1567" class="Function">delayF</a> <a id="7789" href="Monad.Instance.Delay.html#7764" class="Bound">Y</a><a id="7790" class="Symbol">)</a>
<a id="7800" href="Monad.Instance.Delay.html#7752" class="Function">alg&#39;</a> <a id="7805" class="Symbol">{</a><a id="7806" href="Monad.Instance.Delay.html#7806" class="Bound">X</a><a id="7807" class="Symbol">}</a> <a id="7809" class="Symbol">{</a><a id="7810" href="Monad.Instance.Delay.html#7810" class="Bound">Y</a><a id="7811" class="Symbol">}</a> <a id="7813" class="Symbol">=</a> <a id="7815" class="Keyword">record</a> <a id="7822" class="Symbol">{</a> <a id="7824" href="Categories.Functor.Coalgebra.html#571" class="Field">A</a> <a id="7826" class="Symbol">=</a> <a id="7828" href="Monad.Instance.Delay.html#2092" class="Function">D₀</a> <a id="7831" href="Monad.Instance.Delay.html#7806" class="Bound">X</a> <a id="7833" class="Symbol">;</a> <a id="7835" href="Categories.Functor.Coalgebra.html#585" class="Field">α</a> <a id="7837" class="Symbol">=</a> <a id="7839" href="Categories.Object.Coproduct.html#512" class="Function">i₂</a> <a id="7842" class="Symbol">}</a>
<a id="7852" class="Keyword">module</a> <a id="7859" href="Monad.Instance.Delay.html#7859" class="Module">_</a> <a id="7861" class="Symbol">{</a><a id="7862" href="Monad.Instance.Delay.html#7862" class="Bound">X</a> <a id="7864" href="Monad.Instance.Delay.html#7864" class="Bound">Y</a> <a id="7866" class="Symbol">:</a> <a id="7868" href="Categories.Category.Core.html#559" class="Function">Obj</a><a id="7871" class="Symbol">}</a> <a id="7873" class="Symbol">(</a><a id="7874" href="Monad.Instance.Delay.html#7874" class="Bound">f</a> <a id="7876" class="Symbol">:</a> <a id="7878" href="Monad.Instance.Delay.html#7862" class="Bound">X</a> <a id="7880" href="Categories.Category.Core.html#575" class="Function Operator"></a> <a id="7882" href="Monad.Instance.Delay.html#2092" class="Function">D₀</a> <a id="7885" href="Monad.Instance.Delay.html#7864" class="Bound">Y</a><a id="7886" class="Symbol">)</a> <a id="7888" class="Keyword">where</a>
<a id="7904" class="Keyword">open</a> <a id="7909" href="Categories.Object.Terminal.html#860" class="Module">Terminal</a> <a id="7918" class="Symbol">(</a><a id="7919" href="Monad.Instance.Delay.html#1864" class="Field">algebras</a> <a id="7928" href="Monad.Instance.Delay.html#7864" class="Bound">Y</a><a id="7929" class="Symbol">)</a> <a id="7931" class="Keyword">using</a> <a id="7937" class="Symbol">(</a><a id="7938" href="Categories.Object.Terminal.html#577" class="Function">!</a><a id="7939" class="Symbol">;</a> <a id="7941" href="Categories.Object.Terminal.html#803" class="Function">-id</a><a id="7945" class="Symbol">)</a>
<a id="7957" href="Monad.Instance.Delay.html#7957" class="Function">alg</a> <a id="7961" class="Symbol">:</a> <a id="7963" href="Categories.Functor.Coalgebra.html#483" class="Record">F-Coalgebra</a> <a id="7975" class="Symbol">(</a><a id="7976" href="Monad.Instance.Delay.html#1567" class="Function">delayF</a> <a id="7983" href="Monad.Instance.Delay.html#7864" class="Bound">Y</a><a id="7984" class="Symbol">)</a>
<a id="7996" href="Monad.Instance.Delay.html#7957" class="Function">alg</a> <a id="8000" class="Symbol">=</a> <a id="8002" class="Keyword">record</a> <a id="8009" class="Symbol">{</a> <a id="8011" href="Categories.Functor.Coalgebra.html#571" class="Field">A</a> <a id="8013" class="Symbol">=</a> <a id="8015" href="Monad.Instance.Delay.html#2092" class="Function">D₀</a> <a id="8018" href="Monad.Instance.Delay.html#7862" class="Bound">X</a> <a id="8020" href="Categories.Category.Cocartesian.html#1549" class="Function Operator">+</a> <a id="8022" href="Monad.Instance.Delay.html#2092" class="Function">D₀</a> <a id="8025" href="Monad.Instance.Delay.html#7864" class="Bound">Y</a> <a id="8027" class="Symbol">;</a> <a id="8029" href="Categories.Functor.Coalgebra.html#585" class="Field">α</a> <a id="8031" class="Symbol">=</a> <a id="8033" href="Categories.Object.Coproduct.html#532" class="Function Operator">[</a> <a id="8035" href="Categories.Object.Coproduct.html#532" class="Function Operator">[</a> <a id="8037" href="Categories.Object.Coproduct.html#532" class="Function Operator">[</a> <a id="8039" href="Categories.Object.Coproduct.html#492" class="Function">i₁</a> <a id="8042" href="Categories.Object.Coproduct.html#532" class="Function Operator">,</a> <a id="8044" href="Categories.Object.Coproduct.html#512" class="Function">i₂</a> <a id="8047" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="8049" href="Categories.Object.Coproduct.html#512" class="Function">i₂</a> <a id="8052" href="Categories.Object.Coproduct.html#532" class="Function Operator">]</a> <a id="8054" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="8056" class="Symbol">(</a><a id="8057" href="Monad.Instance.Delay.html#2272" class="Function">out</a> <a id="8061" href="Monad.Instance.Delay.html#7864" class="Bound">Y</a> <a id="8063" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="8065" href="Monad.Instance.Delay.html#7874" class="Bound">f</a><a id="8066" class="Symbol">)</a> <a id="8068" href="Categories.Object.Coproduct.html#532" class="Function Operator">,</a> <a id="8070" href="Categories.Object.Coproduct.html#512" class="Function">i₂</a> <a id="8073" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="8075" href="Categories.Object.Coproduct.html#492" class="Function">i₁</a> <a id="8078" href="Categories.Object.Coproduct.html#532" class="Function Operator">]</a> <a id="8080" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="8082" href="Monad.Instance.Delay.html#2272" class="Function">out</a> <a id="8086" href="Monad.Instance.Delay.html#7862" class="Bound">X</a> <a id="8088" href="Categories.Object.Coproduct.html#532" class="Function Operator">,</a> <a id="8090" class="Symbol">(</a><a id="8091" href="Monad.Instance.Delay.html#1263" class="Function">idC</a> <a id="8095" href="Categories.Category.Cocartesian.html#2133" class="Function Operator">+₁</a> <a id="8098" href="Categories.Object.Coproduct.html#512" class="Function">i₂</a><a id="8100" class="Symbol">)</a> <a id="8102" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="8104" href="Monad.Instance.Delay.html#2272" class="Function">out</a> <a id="8108" href="Monad.Instance.Delay.html#7864" class="Bound">Y</a> <a id="8110" href="Categories.Object.Coproduct.html#532" class="Function Operator">]</a> <a id="8112" class="Symbol">}</a> <a id="8115" class="Comment">-- (idC +₁ (idC +₁ [ idC , idC ]) ∘ _≅_.to +-assoc ∘ _≅_.to +-comm)</a>
<a id="8193" href="Monad.Instance.Delay.html#8193" class="Function">extend</a> <a id="8200" class="Symbol">:</a> <a id="8202" href="Monad.Instance.Delay.html#2092" class="Function">D₀</a> <a id="8205" href="Monad.Instance.Delay.html#7862" class="Bound">X</a> <a id="8207" href="Categories.Category.Core.html#575" class="Function Operator"></a> <a id="8209" href="Monad.Instance.Delay.html#2092" class="Function">D₀</a> <a id="8212" href="Monad.Instance.Delay.html#7864" class="Bound">Y</a>
<a id="8224" href="Monad.Instance.Delay.html#8193" class="Function">extend</a> <a id="8231" class="Symbol">=</a> <a id="8233" href="Categories.Functor.Coalgebra.html#1411" class="Field">F-Coalgebra-Morphism.f</a> <a id="8256" class="Symbol">(</a><a id="8257" href="Categories.Object.Terminal.html#577" class="Function">!</a> <a id="8259" class="Symbol">{</a><a id="8260" class="Argument">A</a> <a id="8262" class="Symbol">=</a> <a id="8264" href="Monad.Instance.Delay.html#7957" class="Function">alg</a><a id="8267" class="Symbol">})</a> <a id="8270" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="8272" href="Categories.Object.Coproduct.html#492" class="Function">i₁</a> <a id="8275" class="Symbol">{</a><a id="8276" class="Argument">B</a> <a id="8278" class="Symbol">=</a> <a id="8280" href="Monad.Instance.Delay.html#2092" class="Function">D₀</a> <a id="8283" href="Monad.Instance.Delay.html#7864" class="Bound">Y</a><a id="8284" class="Symbol">}</a>
<a id="8296" href="Monad.Instance.Delay.html#8296" class="Function">!∘i₂</a> <a id="8301" class="Symbol">:</a> <a id="8303" href="Categories.Functor.Coalgebra.html#1411" class="Field">F-Coalgebra-Morphism.f</a> <a id="8326" class="Symbol">(</a><a id="8327" href="Categories.Object.Terminal.html#577" class="Function">!</a> <a id="8329" class="Symbol">{</a><a id="8330" class="Argument">A</a> <a id="8332" class="Symbol">=</a> <a id="8334" href="Monad.Instance.Delay.html#7957" class="Function">alg</a><a id="8337" class="Symbol">})</a> <a id="8340" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="8342" href="Categories.Object.Coproduct.html#512" class="Function">i₂</a> <a id="8345" href="Categories.Category.Core.html#595" class="Function Operator"></a> <a id="8347" href="Monad.Instance.Delay.html#1263" class="Function">idC</a>
<a id="8361" href="Monad.Instance.Delay.html#8296" class="Function">!∘i₂</a> <a id="8366" class="Symbol">=</a> <a id="8368" href="Categories.Object.Terminal.html#803" class="Function">-id</a> <a id="8373" class="Symbol">(</a><a id="8374" href="Categories.Category.Construction.F-Coalgebras.html#598" class="Function">F-Coalgebras</a> <a id="8387" class="Symbol">(</a><a id="8388" href="Monad.Instance.Delay.html#1567" class="Function">delayF</a> <a id="8395" href="Monad.Instance.Delay.html#7864" class="Bound">Y</a><a id="8396" class="Symbol">)</a> <a id="8398" href="Categories.Category.html#700" class="Function Operator">[</a> <a id="8400" href="Categories.Object.Terminal.html#577" class="Function">!</a> <a id="8402" href="Categories.Category.html#700" class="Function Operator"></a> <a id="8404" class="Keyword">record</a> <a id="8411" class="Symbol">{</a> <a id="8413" href="Categories.Functor.Coalgebra.html#1411" class="Field">f</a> <a id="8415" class="Symbol">=</a> <a id="8417" href="Categories.Object.Coproduct.html#512" class="Function">i₂</a> <a id="8420" class="Symbol">;</a> <a id="8422" href="Categories.Functor.Coalgebra.html#1433" class="Field">commutes</a> <a id="8431" class="Symbol">=</a> <a id="8433" href="Categories.Object.Coproduct.html#602" class="Function">inject₂</a> <a id="8441" class="Symbol">}</a> <a id="8443" href="Categories.Category.html#700" class="Function Operator">]</a> <a id="8445" class="Symbol">)</a>
<a id="8457" href="Monad.Instance.Delay.html#8457" class="Function">extendlaw</a> <a id="8467" class="Symbol">:</a> <a id="8469" href="Monad.Instance.Delay.html#2272" class="Function">out</a> <a id="8473" href="Monad.Instance.Delay.html#7864" class="Bound">Y</a> <a id="8475" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="8477" href="Monad.Instance.Delay.html#8193" class="Function">extend</a> <a id="8484" href="Categories.Category.Core.html#595" class="Function Operator"></a> <a id="8486" href="Categories.Object.Coproduct.html#532" class="Function Operator">[</a> <a id="8488" href="Monad.Instance.Delay.html#2272" class="Function">out</a> <a id="8492" href="Monad.Instance.Delay.html#7864" class="Bound">Y</a> <a id="8494" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="8496" href="Monad.Instance.Delay.html#7874" class="Bound">f</a> <a id="8498" href="Categories.Object.Coproduct.html#532" class="Function Operator">,</a> <a id="8500" href="Categories.Object.Coproduct.html#512" class="Function">i₂</a> <a id="8503" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="8505" href="Monad.Instance.Delay.html#8193" class="Function">extend</a> <a id="8512" href="Categories.Object.Coproduct.html#532" class="Function Operator">]</a> <a id="8514" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="8516" href="Monad.Instance.Delay.html#2272" class="Function">out</a> <a id="8520" href="Monad.Instance.Delay.html#7862" class="Bound">X</a>
<a id="8532" href="Monad.Instance.Delay.html#8457" class="Function">extendlaw</a> <a id="8542" class="Symbol">=</a> <a id="8544" href="Relation.Binary.Reasoning.Base.Single.html#1925" class="Function Operator">begin</a>
<a id="8563" href="Monad.Instance.Delay.html#2272" class="Function">out</a> <a id="8567" href="Monad.Instance.Delay.html#7864" class="Bound">Y</a> <a id="8569" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="8571" href="Monad.Instance.Delay.html#8193" class="Function">extend</a> <a id="8578" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function">≈⟨</a> <a id="8581" href="Categories.Morphism.Reasoning.Core.html#2048" class="Function">pullˡ</a> <a id="8587" class="Symbol">(</a><a id="8588" href="Categories.Functor.Coalgebra.html#1433" class="Field">F-Coalgebra-Morphism.commutes</a> <a id="8618" class="Symbol">(</a><a id="8619" href="Categories.Object.Terminal.html#577" class="Function">!</a> <a id="8621" class="Symbol">{</a><a id="8622" class="Argument">A</a> <a id="8624" class="Symbol">=</a> <a id="8626" href="Monad.Instance.Delay.html#7957" class="Function">alg</a><a id="8629" class="Symbol">}))</a> <a id="8633" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function"></a>
<a id="8648" class="Symbol">((</a><a id="8650" href="Monad.Instance.Delay.html#1263" class="Function">idC</a> <a id="8654" href="Categories.Category.Cocartesian.html#2133" class="Function Operator">+₁</a> <a id="8657" class="Symbol">(</a><a id="8658" href="Categories.Functor.Coalgebra.html#1411" class="Field">F-Coalgebra-Morphism.f</a> <a id="8681" href="Categories.Object.Terminal.html#577" class="Function">!</a><a id="8682" class="Symbol">))</a> <a id="8685" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="8687" href="Categories.Functor.Coalgebra.html#585" class="Field">F-Coalgebra.α</a> <a id="8701" href="Monad.Instance.Delay.html#7957" class="Function">alg</a><a id="8704" class="Symbol">)</a> <a id="8706" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="8708" href="Categories.Object.Coproduct.html#492" class="Function">coproduct.i₁</a> <a id="8739" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function">≈⟨</a> <a id="8742" href="Categories.Morphism.Reasoning.Core.html#1914" class="Function">pullʳ</a> <a id="8748" href="Categories.Object.Coproduct.html#569" class="Function">inject₁</a> <a id="8756" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function"></a>
<a id="8770" class="Symbol">(</a><a id="8771" href="Monad.Instance.Delay.html#1263" class="Function">idC</a> <a id="8775" href="Categories.Category.Cocartesian.html#2133" class="Function Operator">+₁</a> <a id="8778" class="Symbol">(</a><a id="8779" href="Categories.Functor.Coalgebra.html#1411" class="Field">F-Coalgebra-Morphism.f</a> <a id="8802" href="Categories.Object.Terminal.html#577" class="Function">!</a><a id="8803" class="Symbol">))</a> <a id="8806" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="8808" href="Categories.Object.Coproduct.html#532" class="Function Operator">[</a> <a id="8810" href="Categories.Object.Coproduct.html#532" class="Function Operator">[</a> <a id="8812" href="Categories.Object.Coproduct.html#492" class="Function">i₁</a> <a id="8815" href="Categories.Object.Coproduct.html#532" class="Function Operator">,</a> <a id="8817" href="Categories.Object.Coproduct.html#512" class="Function">i₂</a> <a id="8820" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="8822" href="Categories.Object.Coproduct.html#512" class="Function">i₂</a> <a id="8825" href="Categories.Object.Coproduct.html#532" class="Function Operator">]</a> <a id="8827" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="8829" class="Symbol">(</a><a id="8830" href="Monad.Instance.Delay.html#2272" class="Function">out</a> <a id="8834" href="Monad.Instance.Delay.html#7864" class="Bound">Y</a> <a id="8836" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="8838" href="Monad.Instance.Delay.html#7874" class="Bound">f</a><a id="8839" class="Symbol">)</a> <a id="8841" href="Categories.Object.Coproduct.html#532" class="Function Operator">,</a> <a id="8843" href="Categories.Object.Coproduct.html#512" class="Function">i₂</a> <a id="8846" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="8848" href="Categories.Object.Coproduct.html#492" class="Function">i₁</a> <a id="8851" href="Categories.Object.Coproduct.html#532" class="Function Operator">]</a> <a id="8853" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="8855" href="Monad.Instance.Delay.html#2272" class="Function">out</a> <a id="8859" href="Monad.Instance.Delay.html#7862" class="Bound">X</a> <a id="8861" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function">≈⟨</a> <a id="8864" href="Categories.Morphism.Reasoning.Core.html#2048" class="Function">pullˡ</a> <a id="8870" href="Categories.Category.Cocartesian.html#2736" class="Function">∘[]</a> <a id="8874" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function"></a>
<a id="8888" href="Categories.Object.Coproduct.html#532" class="Function Operator">[</a> <a id="8890" class="Symbol">(</a><a id="8891" href="Monad.Instance.Delay.html#1263" class="Function">idC</a> <a id="8895" href="Categories.Category.Cocartesian.html#2133" class="Function Operator">+₁</a> <a id="8898" class="Symbol">(</a><a id="8899" href="Categories.Functor.Coalgebra.html#1411" class="Field">F-Coalgebra-Morphism.f</a> <a id="8922" href="Categories.Object.Terminal.html#577" class="Function">!</a><a id="8923" class="Symbol">))</a> <a id="8926" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="8928" href="Categories.Object.Coproduct.html#532" class="Function Operator">[</a> <a id="8930" href="Categories.Object.Coproduct.html#492" class="Function">i₁</a> <a id="8933" href="Categories.Object.Coproduct.html#532" class="Function Operator">,</a> <a id="8935" href="Categories.Object.Coproduct.html#512" class="Function">i₂</a> <a id="8938" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="8940" href="Categories.Object.Coproduct.html#512" class="Function">i₂</a> <a id="8943" href="Categories.Object.Coproduct.html#532" class="Function Operator">]</a> <a id="8945" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="8947" class="Symbol">(</a><a id="8948" href="Monad.Instance.Delay.html#2272" class="Function">out</a> <a id="8952" href="Monad.Instance.Delay.html#7864" class="Bound">Y</a> <a id="8954" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="8956" href="Monad.Instance.Delay.html#7874" class="Bound">f</a><a id="8957" class="Symbol">)</a>
<a id="8972" href="Categories.Object.Coproduct.html#532" class="Function Operator">,</a> <a id="8974" class="Symbol">(</a><a id="8975" href="Monad.Instance.Delay.html#1263" class="Function">idC</a> <a id="8979" href="Categories.Category.Cocartesian.html#2133" class="Function Operator">+₁</a> <a id="8982" class="Symbol">(</a><a id="8983" href="Categories.Functor.Coalgebra.html#1411" class="Field">F-Coalgebra-Morphism.f</a> <a id="9006" href="Categories.Object.Terminal.html#577" class="Function">!</a><a id="9007" class="Symbol">))</a> <a id="9010" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="9012" href="Categories.Object.Coproduct.html#512" class="Function">i₂</a> <a id="9015" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="9017" href="Categories.Object.Coproduct.html#492" class="Function">i₁</a> <a id="9020" href="Categories.Object.Coproduct.html#532" class="Function Operator">]</a> <a id="9022" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="9024" href="Monad.Instance.Delay.html#2272" class="Function">out</a> <a id="9028" href="Monad.Instance.Delay.html#7862" class="Bound">X</a> <a id="9063" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function">≈⟨</a> <a id="9066" class="Symbol">(</a><a id="9067" href="Categories.Object.Coproduct.html#816" class="Function">[]-cong₂</a> <a id="9076" class="Symbol">(</a><a id="9077" href="Categories.Morphism.Reasoning.Core.html#2048" class="Function">pullˡ</a> <a id="9083" href="Categories.Category.Cocartesian.html#2736" class="Function">∘[]</a><a id="9086" class="Symbol">)</a> <a id="9088" class="Symbol">(</a><a id="9089" href="Categories.Morphism.Reasoning.Core.html#2048" class="Function">pullˡ</a> <a id="9095" href="Categories.Category.Cocartesian.html#2585" class="Function">+₁∘i₂</a><a id="9100" class="Symbol">))</a> <a id="9103" href="Categories.Category.Core.html#2837" class="Function Operator">⟩∘⟨refl</a> <a id="9111" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function"></a>
<a id="9125" href="Categories.Object.Coproduct.html#532" class="Function Operator">[</a> <a id="9127" href="Categories.Object.Coproduct.html#532" class="Function Operator">[</a> <a id="9129" class="Symbol">(</a><a id="9130" href="Monad.Instance.Delay.html#1263" class="Function">idC</a> <a id="9134" href="Categories.Category.Cocartesian.html#2133" class="Function Operator">+₁</a> <a id="9137" class="Symbol">(</a><a id="9138" href="Categories.Functor.Coalgebra.html#1411" class="Field">F-Coalgebra-Morphism.f</a> <a id="9161" href="Categories.Object.Terminal.html#577" class="Function">!</a><a id="9162" class="Symbol">))</a> <a id="9165" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="9167" href="Categories.Object.Coproduct.html#492" class="Function">i₁</a>
<a id="9185" href="Categories.Object.Coproduct.html#532" class="Function Operator">,</a> <a id="9187" class="Symbol">(</a><a id="9188" href="Monad.Instance.Delay.html#1263" class="Function">idC</a> <a id="9192" href="Categories.Category.Cocartesian.html#2133" class="Function Operator">+₁</a> <a id="9195" class="Symbol">(</a><a id="9196" href="Categories.Functor.Coalgebra.html#1411" class="Field">F-Coalgebra-Morphism.f</a> <a id="9219" href="Categories.Object.Terminal.html#577" class="Function">!</a><a id="9220" class="Symbol">))</a> <a id="9223" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="9225" href="Categories.Object.Coproduct.html#512" class="Function">i₂</a> <a id="9228" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="9230" href="Categories.Object.Coproduct.html#512" class="Function">i₂</a> <a id="9233" href="Categories.Object.Coproduct.html#532" class="Function Operator">]</a> <a id="9235" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="9237" class="Symbol">(</a><a id="9238" href="Monad.Instance.Delay.html#2272" class="Function">out</a> <a id="9242" href="Monad.Instance.Delay.html#7864" class="Bound">Y</a> <a id="9244" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="9246" href="Monad.Instance.Delay.html#7874" class="Bound">f</a><a id="9247" class="Symbol">)</a>
<a id="9262" href="Categories.Object.Coproduct.html#532" class="Function Operator">,</a> <a id="9264" class="Symbol">(</a><a id="9265" href="Categories.Object.Coproduct.html#512" class="Function">i₂</a> <a id="9268" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="9270" class="Symbol">(</a><a id="9271" href="Categories.Functor.Coalgebra.html#1411" class="Field">F-Coalgebra-Morphism.f</a> <a id="9294" href="Categories.Object.Terminal.html#577" class="Function">!</a><a id="9295" class="Symbol">))</a> <a id="9298" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="9300" href="Categories.Object.Coproduct.html#492" class="Function">i₁</a> <a id="9303" href="Categories.Object.Coproduct.html#532" class="Function Operator">]</a> <a id="9305" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="9307" href="Monad.Instance.Delay.html#2272" class="Function">out</a> <a id="9311" href="Monad.Instance.Delay.html#7862" class="Bound">X</a> <a id="9353" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function">≈⟨</a> <a id="9356" class="Symbol">(</a><a id="9357" href="Categories.Object.Coproduct.html#816" class="Function">[]-cong₂</a> <a id="9366" class="Symbol">((</a><a id="9368" href="Categories.Object.Coproduct.html#816" class="Function">[]-cong₂</a> <a id="9377" href="Categories.Category.Cocartesian.html#2548" class="Function">+₁∘i₁</a> <a id="9383" class="Symbol">(</a><a id="9384" href="Categories.Morphism.Reasoning.Core.html#2048" class="Function">pullˡ</a> <a id="9390" href="Categories.Category.Cocartesian.html#2585" class="Function">+₁∘i₂</a><a id="9395" class="Symbol">))</a> <a id="9398" href="Categories.Category.Core.html#2837" class="Function Operator">⟩∘⟨refl</a><a id="9405" class="Symbol">)</a> <a id="9407" href="Relation.Binary.Structures.html#1577" class="Function">refl</a><a id="9411" class="Symbol">)</a> <a id="9413" href="Categories.Category.Core.html#2837" class="Function Operator">⟩∘⟨refl</a> <a id="9421" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function"></a>
<a id="9435" href="Categories.Object.Coproduct.html#532" class="Function Operator">[</a> <a id="9437" href="Categories.Object.Coproduct.html#532" class="Function Operator">[</a> <a id="9439" href="Categories.Object.Coproduct.html#492" class="Function">i₁</a> <a id="9442" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="9444" href="Monad.Instance.Delay.html#1263" class="Function">idC</a> <a id="9448" href="Categories.Object.Coproduct.html#532" class="Function Operator">,</a> <a id="9450" class="Symbol">(</a><a id="9451" href="Categories.Object.Coproduct.html#512" class="Function">i₂</a> <a id="9454" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="9456" class="Symbol">(</a><a id="9457" href="Categories.Functor.Coalgebra.html#1411" class="Field">F-Coalgebra-Morphism.f</a> <a id="9480" href="Categories.Object.Terminal.html#577" class="Function">!</a><a id="9481" class="Symbol">))</a> <a id="9484" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="9486" href="Categories.Object.Coproduct.html#512" class="Function">i₂</a> <a id="9489" href="Categories.Object.Coproduct.html#532" class="Function Operator">]</a> <a id="9491" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="9493" class="Symbol">(</a><a id="9494" href="Monad.Instance.Delay.html#2272" class="Function">out</a> <a id="9498" href="Monad.Instance.Delay.html#7864" class="Bound">Y</a> <a id="9500" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="9502" href="Monad.Instance.Delay.html#7874" class="Bound">f</a><a id="9503" class="Symbol">)</a>
<a id="9518" href="Categories.Object.Coproduct.html#532" class="Function Operator">,</a> <a id="9520" class="Symbol">(</a><a id="9521" href="Categories.Object.Coproduct.html#512" class="Function">i₂</a> <a id="9524" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="9526" class="Symbol">(</a><a id="9527" href="Categories.Functor.Coalgebra.html#1411" class="Field">F-Coalgebra-Morphism.f</a> <a id="9550" href="Categories.Object.Terminal.html#577" class="Function">!</a><a id="9551" class="Symbol">))</a> <a id="9554" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="9556" href="Categories.Object.Coproduct.html#492" class="Function">i₁</a> <a id="9559" href="Categories.Object.Coproduct.html#532" class="Function Operator">]</a> <a id="9561" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="9563" href="Monad.Instance.Delay.html#2272" class="Function">out</a> <a id="9567" href="Monad.Instance.Delay.html#7862" class="Bound">X</a> <a id="9609" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function">≈⟨</a> <a id="9612" class="Symbol">(</a><a id="9613" href="Categories.Object.Coproduct.html#816" class="Function">[]-cong₂</a> <a id="9622" class="Symbol">(</a><a id="9623" href="Categories.Morphism.Reasoning.Core.html#2948" class="Function">elimˡ</a> <a id="9629" class="Symbol">((</a><a id="9631" href="Categories.Object.Coproduct.html#816" class="Function">[]-cong₂</a> <a id="9640" href="Categories.Category.Core.html#1145" class="Function">identityʳ</a> <a id="9650" class="Symbol">(</a><a id="9651" href="Categories.Morphism.Reasoning.Core.html#6665" class="Function">cancelʳ</a> <a id="9659" href="Monad.Instance.Delay.html#8296" class="Function">!∘i₂</a><a id="9663" class="Symbol">))</a> <a id="9666" href="Categories.Category.Core.html#3061" class="Function Operator"></a> <a id="9668" href="Categories.Category.Cocartesian.html#1729" class="Function">+-η</a><a id="9671" class="Symbol">))</a> <a id="9674" href="Categories.Category.Core.html#715" class="Function">assoc</a><a id="9679" class="Symbol">)</a> <a id="9681" href="Categories.Category.Core.html#2837" class="Function Operator">⟩∘⟨refl</a> <a id="9689" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function"></a>
<a id="9703" href="Categories.Object.Coproduct.html#532" class="Function Operator">[</a> <a id="9705" href="Monad.Instance.Delay.html#2272" class="Function">out</a> <a id="9709" href="Monad.Instance.Delay.html#7864" class="Bound">Y</a> <a id="9711" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="9713" href="Monad.Instance.Delay.html#7874" class="Bound">f</a> <a id="9715" href="Categories.Object.Coproduct.html#532" class="Function Operator">,</a> <a id="9717" href="Categories.Object.Coproduct.html#512" class="Function">i₂</a> <a id="9720" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="9722" href="Monad.Instance.Delay.html#8193" class="Function">extend</a> <a id="9729" href="Categories.Object.Coproduct.html#532" class="Function Operator">]</a> <a id="9731" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="9733" href="Monad.Instance.Delay.html#2272" class="Function">out</a> <a id="9737" href="Monad.Instance.Delay.html#7862" class="Bound">X</a> <a id="9739" href="Relation.Binary.Reasoning.Base.Single.html#2564" class="Function Operator"></a>
</pre> </pre>
Now let's define the monad: ### Old definitions:
<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> <pre class="Agda"> <a id="9779" class="Keyword">record</a> <a id="DelayMonad"></a><a id="9786" href="Monad.Instance.Delay.html#9786" class="Record">DelayMonad</a> <a id="9797" class="Symbol">:</a> <a id="9799" href="Agda.Primitive.html#320" class="Primitive">Set</a> <a id="9803" class="Symbol">(</a><a id="9804" href="Monad.Instance.Delay.html#1143" class="Bound">o</a> <a id="9806" href="Agda.Primitive.html#804" class="Primitive Operator"></a> <a id="9808" href="Monad.Instance.Delay.html#1145" class="Bound"></a> <a id="9810" href="Agda.Primitive.html#804" class="Primitive Operator"></a> <a id="9812" href="Monad.Instance.Delay.html#1147" class="Bound">e</a><a id="9813" class="Symbol">)</a> <a id="9815" class="Keyword">where</a>
<a id="2179" class="Keyword">field</a> <a id="9825" 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="DelayMonad.D₀"></a><a id="9837" href="Monad.Instance.Delay.html#9837" class="Field">D₀</a> <a id="9840" class="Symbol">:</a> <a id="9842" href="Categories.Category.Core.html#559" class="Function">Obj</a> <a id="9846" class="Symbol"></a> <a id="9848" href="Categories.Category.Core.html#559" class="Function">Obj</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="2237" class="Keyword">field</a> <a id="9857" class="Keyword">field</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="DelayMonad.now"></a><a id="9869" href="Monad.Instance.Delay.html#9869" class="Field">now</a> <a id="9873" class="Symbol">:</a> <a id="9875" class="Symbol"></a> <a id="9877" class="Symbol">{</a><a id="9878" href="Monad.Instance.Delay.html#9878" class="Bound">X</a><a id="9879" class="Symbol">}</a> <a id="9881" class="Symbol"></a> <a id="9883" href="Monad.Instance.Delay.html#9878" class="Bound">X</a> <a id="9885" href="Categories.Category.Core.html#575" class="Function Operator"></a> <a id="9887" href="Monad.Instance.Delay.html#9837" class="Field">D₀</a> <a id="9890" href="Monad.Instance.Delay.html#9878" class="Bound">X</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.later"></a><a id="9898" href="Monad.Instance.Delay.html#9898" class="Field">later</a> <a id="9904" class="Symbol">:</a> <a id="9906" class="Symbol"></a> <a id="9908" class="Symbol">{</a><a id="9909" href="Monad.Instance.Delay.html#9909" class="Bound">X</a><a id="9910" class="Symbol">}</a> <a id="9912" class="Symbol"></a> <a id="9914" href="Monad.Instance.Delay.html#9837" class="Field">D₀</a> <a id="9917" href="Monad.Instance.Delay.html#9909" class="Bound">X</a> <a id="9919" href="Categories.Category.Core.html#575" class="Function Operator"></a> <a id="9921" href="Monad.Instance.Delay.html#9837" class="Field">D₀</a> <a id="9924" href="Monad.Instance.Delay.html#9909" class="Bound">X</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.isIso"></a><a id="9932" href="Monad.Instance.Delay.html#9932" class="Field">isIso</a> <a id="9938" class="Symbol">:</a> <a id="9940" class="Symbol"></a> <a id="9942" class="Symbol">{</a><a id="9943" href="Monad.Instance.Delay.html#9943" class="Bound">X</a><a id="9944" class="Symbol">}</a> <a id="9946" class="Symbol"></a> <a id="9948" href="Categories.Morphism.html#1826" class="Record">IsIso</a> <a id="9954" class="Symbol">(</a><a id="9955" href="Categories.Object.Coproduct.html#532" class="Function Operator">[</a> <a id="9957" href="Monad.Instance.Delay.html#9869" class="Field">now</a> <a id="9961" class="Symbol">{</a><a id="9962" href="Monad.Instance.Delay.html#9943" class="Bound">X</a><a id="9963" class="Symbol">}</a> <a id="9965" href="Categories.Object.Coproduct.html#532" class="Function Operator">,</a> <a id="9967" href="Monad.Instance.Delay.html#9898" class="Field">later</a> <a id="9973" class="Symbol">{</a><a id="9974" href="Monad.Instance.Delay.html#9943" class="Bound">X</a><a id="9975" class="Symbol">}</a> <a id="9977" href="Categories.Object.Coproduct.html#532" class="Function Operator">]</a><a id="9978" class="Symbol">)</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="DelayMonad.out"></a><a id="9985" href="Monad.Instance.Delay.html#9985" class="Function">out</a> <a id="9989" class="Symbol">:</a> <a id="9991" class="Symbol"></a> <a id="9993" class="Symbol">{</a><a id="9994" href="Monad.Instance.Delay.html#9994" class="Bound">X</a><a id="9995" class="Symbol">}</a> <a id="9997" class="Symbol"></a> <a id="9999" href="Monad.Instance.Delay.html#9837" class="Field">D₀</a> <a id="10002" href="Monad.Instance.Delay.html#9994" class="Bound">X</a> <a id="10004" href="Categories.Category.Core.html#575" class="Function Operator"></a> <a id="10006" href="Monad.Instance.Delay.html#9994" class="Bound">X</a> <a id="10008" href="Categories.Category.Cocartesian.html#1549" class="Function Operator">+</a> <a id="10010" href="Monad.Instance.Delay.html#9837" class="Field">D₀</a> <a id="10013" href="Monad.Instance.Delay.html#9994" class="Bound">X</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="10019" href="Monad.Instance.Delay.html#9985" class="Function">out</a> <a id="10023" class="Symbol">{</a><a id="10024" href="Monad.Instance.Delay.html#10024" class="Bound">X</a><a id="10025" class="Symbol">}</a> <a id="10027" class="Symbol">=</a> <a id="10029" href="Categories.Morphism.html#1879" class="Field">IsIso.inv</a> <a id="10039" class="Symbol">(</a><a id="10040" href="Monad.Instance.Delay.html#9932" class="Field">isIso</a> <a id="10046" class="Symbol">{</a><a id="10047" href="Monad.Instance.Delay.html#10024" class="Bound">X</a><a id="10048" class="Symbol">})</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="10056" class="Keyword">field</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="DelayMonad.coit"></a><a id="10068" href="Monad.Instance.Delay.html#10068" class="Field">coit</a> <a id="10073" class="Symbol">:</a> <a id="10075" class="Symbol"></a> <a id="10077" class="Symbol">{</a><a id="10078" href="Monad.Instance.Delay.html#10078" class="Bound">X</a> <a id="10080" href="Monad.Instance.Delay.html#10080" class="Bound">Y</a><a id="10081" class="Symbol">}</a> <a id="10083" class="Symbol"></a> <a id="10085" href="Monad.Instance.Delay.html#10080" class="Bound">Y</a> <a id="10087" href="Categories.Category.Core.html#575" class="Function Operator"></a> <a id="10089" href="Monad.Instance.Delay.html#10078" class="Bound">X</a> <a id="10091" href="Categories.Category.Cocartesian.html#1549" class="Function Operator">+</a> <a id="10093" href="Monad.Instance.Delay.html#10080" class="Bound">Y</a> <a id="10095" class="Symbol"></a> <a id="10097" href="Monad.Instance.Delay.html#10080" class="Bound">Y</a> <a id="10099" href="Categories.Category.Core.html#575" class="Function Operator"></a> <a id="10101" href="Monad.Instance.Delay.html#9837" class="Field">D₀</a> <a id="10104" href="Monad.Instance.Delay.html#10078" class="Bound">X</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="DelayMonad.coit-law"></a><a id="10112" href="Monad.Instance.Delay.html#10112" class="Field">coit-law</a> <a id="10121" class="Symbol">:</a> <a id="10123" class="Symbol"></a> <a id="10125" class="Symbol">{</a><a id="10126" href="Monad.Instance.Delay.html#10126" class="Bound">X</a> <a id="10128" href="Monad.Instance.Delay.html#10128" class="Bound">Y</a><a id="10129" class="Symbol">}</a> <a id="10131" class="Symbol">{</a><a id="10132" href="Monad.Instance.Delay.html#10132" class="Bound">f</a> <a id="10134" class="Symbol">:</a> <a id="10136" href="Monad.Instance.Delay.html#10128" class="Bound">Y</a> <a id="10138" href="Categories.Category.Core.html#575" class="Function Operator"></a> <a id="10140" href="Monad.Instance.Delay.html#10126" class="Bound">X</a> <a id="10142" href="Categories.Category.Cocartesian.html#1549" class="Function Operator">+</a> <a id="10144" href="Monad.Instance.Delay.html#10128" class="Bound">Y</a><a id="10145" class="Symbol">}</a> <a id="10147" class="Symbol"></a> <a id="10149" href="Monad.Instance.Delay.html#9985" class="Function">out</a> <a id="10153" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="10155" class="Symbol">(</a><a id="10156" href="Monad.Instance.Delay.html#10068" class="Field">coit</a> <a id="10161" href="Monad.Instance.Delay.html#10132" class="Bound">f</a><a id="10162" class="Symbol">)</a> <a id="10164" href="Categories.Category.Core.html#595" class="Function Operator"></a> <a id="10166" class="Symbol">(</a><a id="10167" href="Monad.Instance.Delay.html#1263" class="Function">idC</a> <a id="10171" href="Categories.Category.Cocartesian.html#2133" class="Function Operator">+₁</a> <a id="10174" class="Symbol">(</a><a id="10175" href="Monad.Instance.Delay.html#10068" class="Field">coit</a> <a id="10180" href="Monad.Instance.Delay.html#10132" class="Bound">f</a><a id="10181" class="Symbol">))</a> <a id="10184" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="10186" href="Monad.Instance.Delay.html#10132" class="Bound">f</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="10193" class="Keyword">field</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="DelayMonad._*"></a><a id="10205" href="Monad.Instance.Delay.html#10205" class="Field Operator">_*</a> <a id="10208" class="Symbol">:</a> <a id="10210" class="Symbol"></a> <a id="10212" class="Symbol">{</a><a id="10213" href="Monad.Instance.Delay.html#10213" class="Bound">X</a> <a id="10215" href="Monad.Instance.Delay.html#10215" class="Bound">Y</a><a id="10216" class="Symbol">}</a> <a id="10218" class="Symbol"></a> <a id="10220" href="Monad.Instance.Delay.html#10213" class="Bound">X</a> <a id="10222" href="Categories.Category.Core.html#575" class="Function Operator"></a> <a id="10224" href="Monad.Instance.Delay.html#9837" class="Field">D₀</a> <a id="10227" href="Monad.Instance.Delay.html#10215" class="Bound">Y</a> <a id="10229" class="Symbol"></a> <a id="10231" href="Monad.Instance.Delay.html#9837" class="Field">D₀</a> <a id="10234" href="Monad.Instance.Delay.html#10213" class="Bound">X</a> <a id="10236" href="Categories.Category.Core.html#575" class="Function Operator"></a> <a id="10238" href="Monad.Instance.Delay.html#9837" class="Field">D₀</a> <a id="10241" href="Monad.Instance.Delay.html#10215" class="Bound">Y</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="DelayMonad.*-law"></a><a id="10249" href="Monad.Instance.Delay.html#10249" class="Field">*-law</a> <a id="10255" class="Symbol">:</a> <a id="10257" class="Symbol"></a> <a id="10259" class="Symbol">{</a><a id="10260" href="Monad.Instance.Delay.html#10260" class="Bound">X</a> <a id="10262" href="Monad.Instance.Delay.html#10262" class="Bound">Y</a><a id="10263" class="Symbol">}</a> <a id="10265" class="Symbol">{</a><a id="10266" href="Monad.Instance.Delay.html#10266" class="Bound">f</a> <a id="10268" class="Symbol">:</a> <a id="10270" href="Monad.Instance.Delay.html#10260" class="Bound">X</a> <a id="10272" href="Categories.Category.Core.html#575" class="Function Operator"></a> <a id="10274" href="Monad.Instance.Delay.html#9837" class="Field">D₀</a> <a id="10277" href="Monad.Instance.Delay.html#10262" class="Bound">Y</a><a id="10278" class="Symbol">}</a> <a id="10280" class="Symbol"></a> <a id="10282" href="Monad.Instance.Delay.html#9985" class="Function">out</a> <a id="10286" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="10288" class="Symbol">(</a><a id="10289" href="Monad.Instance.Delay.html#10266" class="Bound">f</a> <a id="10291" href="Monad.Instance.Delay.html#10205" class="Field Operator">*</a><a id="10292" class="Symbol">)</a> <a id="10294" href="Categories.Category.Core.html#595" class="Function Operator"></a> <a id="10296" href="Categories.Object.Coproduct.html#532" class="Function Operator">[</a> <a id="10298" href="Monad.Instance.Delay.html#9985" class="Function">out</a> <a id="10302" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="10304" href="Monad.Instance.Delay.html#10266" class="Bound">f</a> <a id="10306" href="Categories.Object.Coproduct.html#532" class="Function Operator">,</a> <a id="10308" href="Categories.Object.Coproduct.html#512" class="Function">i₂</a> <a id="10311" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="10313" class="Symbol">(</a><a id="10314" href="Monad.Instance.Delay.html#10266" class="Bound">f</a> <a id="10316" href="Monad.Instance.Delay.html#10205" class="Field Operator">*</a><a id="10317" class="Symbol">)</a> <a id="10319" href="Categories.Object.Coproduct.html#532" class="Function Operator">]</a> <a id="10321" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="10323" href="Monad.Instance.Delay.html#9985" class="Function">out</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="DelayMonad.*-unique"></a><a id="10333" href="Monad.Instance.Delay.html#10333" class="Field">*-unique</a> <a id="10342" class="Symbol">:</a> <a id="10344" class="Symbol"></a> <a id="10346" class="Symbol">{</a><a id="10347" href="Monad.Instance.Delay.html#10347" class="Bound">X</a> <a id="10349" href="Monad.Instance.Delay.html#10349" class="Bound">Y</a><a id="10350" class="Symbol">}</a> <a id="10352" class="Symbol">(</a><a id="10353" href="Monad.Instance.Delay.html#10353" class="Bound">f</a> <a id="10355" class="Symbol">:</a> <a id="10357" href="Monad.Instance.Delay.html#10347" class="Bound">X</a> <a id="10359" href="Categories.Category.Core.html#575" class="Function Operator"></a> <a id="10361" href="Monad.Instance.Delay.html#9837" class="Field">D₀</a> <a id="10364" href="Monad.Instance.Delay.html#10349" class="Bound">Y</a><a id="10365" class="Symbol">)</a> <a id="10367" class="Symbol">(</a><a id="10368" href="Monad.Instance.Delay.html#10368" class="Bound">h</a> <a id="10370" class="Symbol">:</a> <a id="10372" href="Monad.Instance.Delay.html#9837" class="Field">D₀</a> <a id="10375" href="Monad.Instance.Delay.html#10347" class="Bound">X</a> <a id="10377" href="Categories.Category.Core.html#575" class="Function Operator"></a> <a id="10379" href="Monad.Instance.Delay.html#9837" class="Field">D₀</a> <a id="10382" href="Monad.Instance.Delay.html#10349" class="Bound">Y</a><a id="10383" class="Symbol">)</a> <a id="10385" class="Symbol"></a> <a id="10387" href="Monad.Instance.Delay.html#10368" class="Bound">h</a> <a id="10389" href="Categories.Category.Core.html#595" class="Function Operator"></a> <a id="10391" href="Monad.Instance.Delay.html#10353" class="Bound">f</a> <a id="10393" href="Monad.Instance.Delay.html#10205" class="Field Operator">*</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="DelayMonad.*-resp-≈"></a><a id="10401" href="Monad.Instance.Delay.html#10401" class="Field">*-resp-≈</a> <a id="10410" class="Symbol">:</a> <a id="10412" class="Symbol"></a> <a id="10414" class="Symbol">{</a><a id="10415" href="Monad.Instance.Delay.html#10415" class="Bound">X</a> <a id="10417" href="Monad.Instance.Delay.html#10417" class="Bound">Y</a><a id="10418" class="Symbol">}</a> <a id="10420" class="Symbol">{</a><a id="10421" href="Monad.Instance.Delay.html#10421" class="Bound">f</a> <a id="10423" href="Monad.Instance.Delay.html#10423" class="Bound">h</a> <a id="10425" class="Symbol">:</a> <a id="10427" href="Monad.Instance.Delay.html#10415" class="Bound">X</a> <a id="10429" href="Categories.Category.Core.html#575" class="Function Operator"></a> <a id="10431" href="Monad.Instance.Delay.html#9837" class="Field">D₀</a> <a id="10434" href="Monad.Instance.Delay.html#10417" class="Bound">Y</a><a id="10435" class="Symbol">}</a> <a id="10437" class="Symbol"></a> <a id="10439" href="Monad.Instance.Delay.html#10421" class="Bound">f</a> <a id="10441" href="Categories.Category.Core.html#595" class="Function Operator"></a> <a id="10443" href="Monad.Instance.Delay.html#10423" class="Bound">h</a> <a id="10445" class="Symbol"></a> <a id="10447" href="Monad.Instance.Delay.html#10421" class="Bound">f</a> <a id="10449" href="Monad.Instance.Delay.html#10205" class="Field Operator">*</a> <a id="10451" href="Categories.Category.Core.html#595" class="Function Operator"></a> <a id="10453" href="Monad.Instance.Delay.html#10423" class="Bound">h</a> <a id="10455" href="Monad.Instance.Delay.html#10205" class="Field Operator">*</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="DelayMonad.unitLaw"></a><a id="10463" href="Monad.Instance.Delay.html#10463" class="Function">unitLaw</a> <a id="10471" class="Symbol">:</a> <a id="10473" class="Symbol"></a> <a id="10475" class="Symbol">{</a><a id="10476" href="Monad.Instance.Delay.html#10476" class="Bound">X</a><a id="10477" class="Symbol">}</a> <a id="10479" class="Symbol"></a> <a id="10481" href="Monad.Instance.Delay.html#9985" class="Function">out</a> <a id="10485" class="Symbol">{</a><a id="10486" href="Monad.Instance.Delay.html#10476" class="Bound">X</a><a id="10487" class="Symbol">}</a> <a id="10489" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="10491" href="Monad.Instance.Delay.html#9869" class="Field">now</a> <a id="10495" class="Symbol">{</a><a id="10496" href="Monad.Instance.Delay.html#10476" class="Bound">X</a><a id="10497" class="Symbol">}</a> <a id="10499" href="Categories.Category.Core.html#595" class="Function Operator"></a> <a id="10501" href="Categories.Object.Coproduct.html#492" class="Function">i₁</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="10508" href="Monad.Instance.Delay.html#10463" class="Function">unitLaw</a> <a id="10516" class="Symbol">=</a> <a id="10518" href="Relation.Binary.Reasoning.Base.Single.html#1925" class="Function Operator">begin</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="10531" href="Monad.Instance.Delay.html#9985" class="Function">out</a> <a id="10535" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="10537" href="Monad.Instance.Delay.html#9869" class="Field">now</a> <a id="10558" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function">≈⟨</a> <a id="10561" href="Categories.Category.Core.html#2734" class="Function Operator">refl⟩∘⟨</a> <a id="10569" href="Relation.Binary.Structures.html#1603" class="Function">sym</a> <a id="10573" href="Categories.Object.Coproduct.html#569" class="Function">inject₁</a> <a id="10581" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function"></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="10590" href="Monad.Instance.Delay.html#9985" class="Function">out</a> <a id="10594" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="10596" href="Categories.Object.Coproduct.html#532" class="Function Operator">[</a> <a id="10598" href="Monad.Instance.Delay.html#9869" class="Field">now</a> <a id="10602" href="Categories.Object.Coproduct.html#532" class="Function Operator">,</a> <a id="10604" href="Monad.Instance.Delay.html#9898" class="Field">later</a> <a id="10610" href="Categories.Object.Coproduct.html#532" class="Function Operator">]</a> <a id="10612" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="10614" href="Categories.Object.Coproduct.html#492" class="Function">i₁</a> <a id="10617" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function">≈⟨</a> <a id="10620" href="Categories.Morphism.Reasoning.Core.html#6851" class="Function">cancelˡ</a> <a id="10628" class="Symbol">(</a><a id="10629" href="Categories.Morphism.html#1586" class="Function">IsIso.isoˡ</a> <a id="10640" href="Monad.Instance.Delay.html#9932" class="Field">isIso</a><a id="10645" class="Symbol">)</a> <a id="10647" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function"></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="10655" href="Categories.Object.Coproduct.html#492" class="Function">i₁</a> <a id="10658" href="Relation.Binary.Reasoning.Base.Single.html#2564" class="Function Operator"></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> <a id="DelayMonad.toMonad"></a><a id="10665" href="Monad.Instance.Delay.html#10665" class="Function">toMonad</a> <a id="10673" class="Symbol">:</a> <a id="10675" href="Categories.Monad.Construction.Kleisli.html#882" class="Function">KleisliTriple</a> <a id="10689" href="Monad.Instance.Delay.html#1254" class="Field">C</a>
<a id="10695" href="Monad.Instance.Delay.html#10665" class="Function">toMonad</a> <a id="10703" class="Symbol">=</a> <a id="10705" class="Keyword">record</a>
<a id="10718" class="Symbol">{</a> <a id="10720" href="Categories.Monad.Relative.html#834" class="Field">F₀</a> <a id="10723" class="Symbol">=</a> <a id="10725" href="Monad.Instance.Delay.html#9837" class="Field">D₀</a>
<a id="10734" class="Symbol">;</a> <a id="10736" href="Categories.Monad.Relative.html#857" class="Field">unit</a> <a id="10741" class="Symbol">=</a> <a id="10743" href="Monad.Instance.Delay.html#9869" class="Field">now</a>
<a id="10753" class="Symbol">;</a> <a id="10755" href="Categories.Monad.Relative.html#895" class="Field">extend</a> <a id="10762" class="Symbol">=</a> <a id="10764" href="Monad.Instance.Delay.html#10205" class="Field Operator">_*</a>
<a id="10773" class="Symbol">;</a> <a id="10775" href="Categories.Monad.Relative.html#953" class="Field">identityʳ</a> <a id="10785" class="Symbol">=</a> <a id="10787" class="Symbol">λ</a> <a id="10789" class="Symbol">{</a><a id="10790" href="Monad.Instance.Delay.html#10790" class="Bound">X</a><a id="10791" class="Symbol">}</a> <a id="10793" class="Symbol">{</a><a id="10794" href="Monad.Instance.Delay.html#10794" class="Bound">Y</a><a id="10795" class="Symbol">}</a> <a id="10797" class="Symbol">{</a><a id="10798" href="Monad.Instance.Delay.html#10798" class="Bound">k</a><a id="10799" class="Symbol">}</a> <a id="10801" class="Symbol"></a> <a id="10803" href="Relation.Binary.Reasoning.Base.Single.html#1925" class="Function Operator">begin</a>
<a id="10818" href="Monad.Instance.Delay.html#10798" class="Bound">k</a> <a id="10820" href="Monad.Instance.Delay.html#10205" class="Field Operator">*</a> <a id="10822" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="10824" href="Monad.Instance.Delay.html#9869" class="Field">now</a> <a id="10875" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function">≈⟨</a> <a id="10878" href="Categories.Morphism.Reasoning.Core.html#3063" class="Function">introˡ</a> <a id="10885" class="Symbol">(</a><a id="10886" href="Categories.Morphism.html#1612" class="Function">IsIso.isoʳ</a> <a id="10897" href="Monad.Instance.Delay.html#9932" class="Field">isIso</a><a id="10902" class="Symbol">)</a> <a id="10904" href="Categories.Category.Core.html#2837" class="Function Operator">⟩∘⟨refl</a> <a id="10912" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function"></a>
<a id="10923" class="Symbol">((</a><a id="10925" href="Categories.Object.Coproduct.html#532" class="Function Operator">[</a> <a id="10927" href="Monad.Instance.Delay.html#9869" class="Field">now</a> <a id="10931" href="Categories.Object.Coproduct.html#532" class="Function Operator">,</a> <a id="10933" href="Monad.Instance.Delay.html#9898" class="Field">later</a> <a id="10939" href="Categories.Object.Coproduct.html#532" class="Function Operator">]</a> <a id="10941" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="10943" href="Monad.Instance.Delay.html#9985" class="Function">out</a><a id="10946" class="Symbol">)</a> <a id="10948" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="10950" href="Monad.Instance.Delay.html#10798" class="Bound">k</a> <a id="10952" href="Monad.Instance.Delay.html#10205" class="Field Operator">*</a><a id="10953" class="Symbol">)</a> <a id="10955" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="10957" href="Monad.Instance.Delay.html#9869" class="Field">now</a> <a id="10980" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function">≈⟨</a> <a id="10983" href="Categories.Morphism.Reasoning.Core.html#1914" class="Function">pullʳ</a> <a id="10989" href="Monad.Instance.Delay.html#10249" class="Field">*-law</a> <a id="10995" href="Categories.Category.Core.html#2837" class="Function Operator">⟩∘⟨refl</a> <a id="11003" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function"></a>
<a id="11013" class="Symbol">(</a><a id="11014" href="Categories.Object.Coproduct.html#532" class="Function Operator">[</a> <a id="11016" href="Monad.Instance.Delay.html#9869" class="Field">now</a> <a id="11020" href="Categories.Object.Coproduct.html#532" class="Function Operator">,</a> <a id="11022" href="Monad.Instance.Delay.html#9898" class="Field">later</a> <a id="11028" href="Categories.Object.Coproduct.html#532" class="Function Operator">]</a> <a id="11030" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="11032" href="Categories.Object.Coproduct.html#532" class="Function Operator">[</a> <a id="11034" href="Monad.Instance.Delay.html#9985" class="Function">out</a> <a id="11038" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="11040" href="Monad.Instance.Delay.html#10798" class="Bound">k</a> <a id="11042" href="Categories.Object.Coproduct.html#532" class="Function Operator">,</a> <a id="11044" href="Categories.Object.Coproduct.html#512" class="Function">i₂</a> <a id="11047" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="11049" class="Symbol">(</a><a id="11050" href="Monad.Instance.Delay.html#10798" class="Bound">k</a> <a id="11052" href="Monad.Instance.Delay.html#10205" class="Field Operator">*</a><a id="11053" class="Symbol">)</a> <a id="11055" href="Categories.Object.Coproduct.html#532" class="Function Operator">]</a> <a id="11057" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="11059" href="Monad.Instance.Delay.html#9985" class="Function">out</a><a id="11062" class="Symbol">)</a> <a id="11064" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="11066" href="Monad.Instance.Delay.html#9869" class="Field">now</a> <a id="11070" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function">≈⟨</a> <a id="11073" href="Categories.Morphism.Reasoning.Core.html#1914" class="Function">pullʳ</a> <a id="11079" class="Symbol">(</a><a id="11080" href="Categories.Morphism.Reasoning.Core.html#1914" class="Function">pullʳ</a> <a id="11086" href="Monad.Instance.Delay.html#10463" class="Function">unitLaw</a><a id="11093" class="Symbol">)</a> <a id="11095" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function"></a>
<a id="11105" href="Categories.Object.Coproduct.html#532" class="Function Operator">[</a> <a id="11107" href="Monad.Instance.Delay.html#9869" class="Field">now</a> <a id="11111" href="Categories.Object.Coproduct.html#532" class="Function Operator">,</a> <a id="11113" href="Monad.Instance.Delay.html#9898" class="Field">later</a> <a id="11119" href="Categories.Object.Coproduct.html#532" class="Function Operator">]</a> <a id="11121" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="11123" href="Categories.Object.Coproduct.html#532" class="Function Operator">[</a> <a id="11125" href="Monad.Instance.Delay.html#9985" class="Function">out</a> <a id="11129" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="11131" href="Monad.Instance.Delay.html#10798" class="Bound">k</a> <a id="11133" href="Categories.Object.Coproduct.html#532" class="Function Operator">,</a> <a id="11135" href="Categories.Object.Coproduct.html#512" class="Function">i₂</a> <a id="11138" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="11140" class="Symbol">(</a><a id="11141" href="Monad.Instance.Delay.html#10798" class="Bound">k</a> <a id="11143" href="Monad.Instance.Delay.html#10205" class="Field Operator">*</a><a id="11144" class="Symbol">)</a> <a id="11146" href="Categories.Object.Coproduct.html#532" class="Function Operator">]</a> <a id="11148" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="11150" href="Categories.Object.Coproduct.html#492" class="Function">i₁</a> <a id="11162" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function">≈⟨</a> <a id="11165" href="Categories.Category.Core.html#2734" class="Function Operator">refl⟩∘⟨</a> <a id="11173" href="Categories.Object.Coproduct.html#569" class="Function">inject₁</a> <a id="11181" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function"></a>
<a id="11191" href="Categories.Object.Coproduct.html#532" class="Function Operator">[</a> <a id="11193" href="Monad.Instance.Delay.html#9869" class="Field">now</a> <a id="11197" href="Categories.Object.Coproduct.html#532" class="Function Operator">,</a> <a id="11199" href="Monad.Instance.Delay.html#9898" class="Field">later</a> <a id="11205" href="Categories.Object.Coproduct.html#532" class="Function Operator">]</a> <a id="11207" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="11209" href="Monad.Instance.Delay.html#9985" class="Function">out</a> <a id="11213" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="11215" href="Monad.Instance.Delay.html#10798" class="Bound">k</a> <a id="11248" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function">≈⟨</a> <a id="11251" href="Categories.Morphism.Reasoning.Core.html#6851" class="Function">cancelˡ</a> <a id="11259" class="Symbol">(</a><a id="11260" href="Categories.Morphism.html#1612" class="Function">IsIso.isoʳ</a> <a id="11271" href="Monad.Instance.Delay.html#9932" class="Field">isIso</a><a id="11276" class="Symbol">)</a> <a id="11278" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function"></a>
<a id="11288" href="Monad.Instance.Delay.html#10798" class="Bound">k</a> <a id="11290" href="Relation.Binary.Reasoning.Base.Single.html#2564" class="Function Operator"></a>
<a id="11298" class="Symbol">;</a> <a id="11300" href="Categories.Monad.Relative.html#1025" class="Field">identityˡ</a> <a id="11310" class="Symbol">=</a> <a id="11312" class="Symbol">λ</a> <a id="11314" class="Symbol">{</a><a id="11315" href="Monad.Instance.Delay.html#11315" class="Bound">X</a><a id="11316" class="Symbol">}</a> <a id="11318" class="Symbol"></a> <a id="11320" href="Relation.Binary.Structures.html#1603" class="Function">sym</a> <a id="11324" class="Symbol">(</a><a id="11325" href="Monad.Instance.Delay.html#10333" class="Field">*-unique</a> <a id="11334" href="Monad.Instance.Delay.html#9869" class="Field">now</a> <a id="11338" href="Monad.Instance.Delay.html#1263" class="Function">idC</a><a id="11341" class="Symbol">)</a>
<a id="11349" class="Symbol">;</a> <a id="11351" href="Categories.Monad.Relative.html#1078" class="Field">assoc</a> <a id="11357" class="Symbol">=</a> <a id="11359" class="Symbol">λ</a> <a id="11361" class="Symbol">{</a><a id="11362" href="Monad.Instance.Delay.html#11362" class="Bound">X</a><a id="11363" class="Symbol">}</a> <a id="11365" class="Symbol">{</a><a id="11366" href="Monad.Instance.Delay.html#11366" class="Bound">Y</a><a id="11367" class="Symbol">}</a> <a id="11369" class="Symbol">{</a><a id="11370" href="Monad.Instance.Delay.html#11370" class="Bound">Z</a><a id="11371" class="Symbol">}</a> <a id="11373" class="Symbol">{</a><a id="11374" href="Monad.Instance.Delay.html#11374" class="Bound">f</a><a id="11375" class="Symbol">}</a> <a id="11377" class="Symbol">{</a><a id="11378" href="Monad.Instance.Delay.html#11378" class="Bound">g</a><a id="11379" class="Symbol">}</a> <a id="11381" class="Symbol"></a> <a id="11383" href="Relation.Binary.Structures.html#1603" class="Function">sym</a> <a id="11387" class="Symbol">(</a><a id="11388" href="Monad.Instance.Delay.html#10333" class="Field">*-unique</a> <a id="11397" class="Symbol">((</a><a id="11399" href="Monad.Instance.Delay.html#11378" class="Bound">g</a> <a id="11401" href="Monad.Instance.Delay.html#10205" class="Field Operator">*</a><a id="11402" class="Symbol">)</a> <a id="11404" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="11406" href="Monad.Instance.Delay.html#11374" class="Bound">f</a><a id="11407" class="Symbol">)</a> <a id="11409" class="Symbol">((</a><a id="11411" href="Monad.Instance.Delay.html#11378" class="Bound">g</a> <a id="11413" href="Monad.Instance.Delay.html#10205" class="Field Operator">*</a><a id="11414" class="Symbol">)</a> <a id="11416" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="11418" class="Symbol">(</a><a id="11419" href="Monad.Instance.Delay.html#11374" class="Bound">f</a> <a id="11421" href="Monad.Instance.Delay.html#10205" class="Field Operator">*</a><a id="11422" class="Symbol">)))</a>
<a id="11432" class="Symbol">;</a> <a id="11434" href="Categories.Monad.Relative.html#1190" class="Field">sym-assoc</a> <a id="11444" class="Symbol">=</a> <a id="11446" class="Symbol">λ</a> <a id="11448" class="Symbol">{</a><a id="11449" href="Monad.Instance.Delay.html#11449" class="Bound">X</a><a id="11450" class="Symbol">}</a> <a id="11452" class="Symbol">{</a><a id="11453" href="Monad.Instance.Delay.html#11453" class="Bound">Y</a><a id="11454" class="Symbol">}</a> <a id="11456" class="Symbol">{</a><a id="11457" href="Monad.Instance.Delay.html#11457" class="Bound">Z</a><a id="11458" class="Symbol">}</a> <a id="11460" class="Symbol">{</a><a id="11461" href="Monad.Instance.Delay.html#11461" class="Bound">f</a><a id="11462" class="Symbol">}</a> <a id="11464" class="Symbol">{</a><a id="11465" href="Monad.Instance.Delay.html#11465" class="Bound">g</a><a id="11466" class="Symbol">}</a> <a id="11468" class="Symbol"></a> <a id="11470" href="Monad.Instance.Delay.html#10333" class="Field">*-unique</a> <a id="11479" class="Symbol">((</a><a id="11481" href="Monad.Instance.Delay.html#11465" class="Bound">g</a> <a id="11483" href="Monad.Instance.Delay.html#10205" class="Field Operator">*</a><a id="11484" class="Symbol">)</a> <a id="11486" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="11488" href="Monad.Instance.Delay.html#11461" class="Bound">f</a><a id="11489" class="Symbol">)</a> <a id="11491" class="Symbol">((</a><a id="11493" href="Monad.Instance.Delay.html#11465" class="Bound">g</a> <a id="11495" href="Monad.Instance.Delay.html#10205" class="Field Operator">*</a><a id="11496" class="Symbol">)</a> <a id="11498" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="11500" class="Symbol">(</a><a id="11501" href="Monad.Instance.Delay.html#11461" class="Bound">f</a> <a id="11503" href="Monad.Instance.Delay.html#10205" class="Field Operator">*</a><a id="11504" class="Symbol">))</a>
<a id="11513" class="Symbol">;</a> <a id="11515" href="Categories.Monad.Relative.html#1306" class="Field">extend-≈</a> <a id="11524" class="Symbol">=</a> <a id="11526" href="Monad.Instance.Delay.html#10401" class="Field">*-resp-≈</a>
<a id="11541" class="Symbol">}</a>
</pre> </pre>
### Definition 30: Search-Algebras ### 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> TODO
<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 ### Proposition 31 : the category of uniform-iteration algebras coincides with the category of search-algebras
TODOs:
- [ ] Define SearchAlgebras (and SearchAlgebra morphisms) TODO
- [ ] 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>

View file

@ -11,8 +11,11 @@
div.columns{display: flex; gap: min(4vw, 1.5em);} div.columns{display: flex; gap: min(4vw, 1.5em);}
div.column{flex: auto; overflow-x: auto;} div.column{flex: auto; overflow-x: auto;}
div.hanging-indent{margin-left: 1.5em; text-indent: -1.5em;} div.hanging-indent{margin-left: 1.5em; text-indent: -1.5em;}
ul.task-list{list-style: none;} /* The extra [class] is a hack that increases specificity enough to
override a similar rule in reveal.js */
ul.task-list[class]{list-style: none;}
ul.task-list li input[type="checkbox"] { ul.task-list li input[type="checkbox"] {
font-size: inherit;
width: 0.8em; width: 0.8em;
margin: 0 0.8em 0.2em -1.6em; margin: 0 0.8em 0.2em -1.6em;
vertical-align: middle; vertical-align: middle;
@ -47,24 +50,25 @@
<p>In this file I explore the monad <strong><em>K</em></strong> and its <p>In this file I explore the monad <strong><em>K</em></strong> and its
properties:</p> properties:</p>
<ul class="task-list"> <ul class="task-list">
<li><input type="checkbox" disabled="" checked="" /><em>Lemma 16</em> <li><label><input type="checkbox" checked="" /><em>Lemma 16</em>
Definition of the monad</li> Definition of the monad</label></li>
<li><input type="checkbox" disabled="" /><em>Lemma 16</em> <li><label><input type="checkbox" /><em>Lemma 16</em>
EilenbergMoore⇒UniformIterationAlgebras (use <a EilenbergMoore⇒UniformIterationAlgebras (use <a
href="https://agda.github.io/agda-categories/Categories.Adjoint.Monadic.Crude.html">crude href="https://agda.github.io/agda-categories/Categories.Adjoint.Monadic.Crude.html">crude
monadicity theorem</a>)</li> monadicity theorem</a>)</label></li>
<li><input type="checkbox" disabled="" /><em>Proposition 19</em> <li><label><input type="checkbox" /><em>Proposition 19</em>
<strong><em>K</em></strong> is strong</li> <strong><em>K</em></strong> is strong</label></li>
<li><input type="checkbox" disabled="" /><em>Theorem 22</em> <li><label><input type="checkbox" /><em>Theorem 22</em>
<strong><em>K</em></strong> is an equational lifting monad</li> <strong><em>K</em></strong> is an equational lifting monad</label></li>
<li><input type="checkbox" disabled="" /><em>Proposition 23</em> The <li><label><input type="checkbox" /><em>Proposition 23</em> The Kleisli
Kleisli category of <strong><em>K</em></strong> is enriched over pointed category of <strong><em>K</em></strong> is enriched over pointed partial
partial orders and strict monotone maps</li> orders and strict monotone maps</label></li>
<li><input type="checkbox" disabled="" /><em>Proposition 25</em> <li><label><input type="checkbox" /><em>Proposition 25</em>
<strong><em>K</em></strong> is copyable and weakly discardable</li> <strong><em>K</em></strong> is copyable and weakly
<li><input type="checkbox" disabled="" /><em>Theorem 29</em> discardable</label></li>
<li><label><input type="checkbox" /><em>Theorem 29</em>
<strong><em>K</em></strong> is an initial pre-Elgot monad and an initial <strong><em>K</em></strong> is an initial pre-Elgot monad and an initial
strong pre-Elgot monad</li> strong pre-Elgot monad</label></li>
</ul> </ul>
<h2 id="code">Code</h2> <h2 id="code">Code</h2>
<pre class="Agda"><a id="1375" class="Keyword">module</a> <a id="1382" href="MonadK.html" class="Module">MonadK</a> <a id="1389" class="Symbol">{</a><a id="1390" href="MonadK.html#1390" class="Bound">o</a> <a id="1392" href="MonadK.html#1392" class="Bound"></a> <a id="1394" href="MonadK.html#1394" class="Bound">e</a><a id="1395" class="Symbol">}</a> <a id="1397" class="Symbol">(</a><a id="1398" href="MonadK.html#1398" class="Bound">D</a> <a id="1400" class="Symbol">:</a> <a id="1402" href="Categories.Category.Extensive.Bundle.html#781" class="Record">ExtensiveDistributiveCategory</a> <a id="1432" href="MonadK.html#1390" class="Bound">o</a> <a id="1434" href="MonadK.html#1392" class="Bound"></a> <a id="1436" href="MonadK.html#1394" class="Bound">e</a><a id="1437" class="Symbol">)</a> <a id="1439" class="Keyword">where</a> <pre class="Agda"><a id="1375" class="Keyword">module</a> <a id="1382" href="MonadK.html" class="Module">MonadK</a> <a id="1389" class="Symbol">{</a><a id="1390" href="MonadK.html#1390" class="Bound">o</a> <a id="1392" href="MonadK.html#1392" class="Bound"></a> <a id="1394" href="MonadK.html#1394" class="Bound">e</a><a id="1395" class="Symbol">}</a> <a id="1397" class="Symbol">(</a><a id="1398" href="MonadK.html#1398" class="Bound">D</a> <a id="1400" class="Symbol">:</a> <a id="1402" href="Categories.Category.Extensive.Bundle.html#781" class="Record">ExtensiveDistributiveCategory</a> <a id="1432" href="MonadK.html#1390" class="Bound">o</a> <a id="1434" href="MonadK.html#1392" class="Bound"></a> <a id="1436" href="MonadK.html#1394" class="Bound">e</a><a id="1437" class="Symbol">)</a> <a id="1439" class="Keyword">where</a>

View file

@ -11,8 +11,11 @@
div.columns{display: flex; gap: min(4vw, 1.5em);} div.columns{display: flex; gap: min(4vw, 1.5em);}
div.column{flex: auto; overflow-x: auto;} div.column{flex: auto; overflow-x: auto;}
div.hanging-indent{margin-left: 1.5em; text-indent: -1.5em;} div.hanging-indent{margin-left: 1.5em; text-indent: -1.5em;}
ul.task-list{list-style: none;} /* The extra [class] is a hack that increases specificity enough to
override a similar rule in reveal.js */
ul.task-list[class]{list-style: none;}
ul.task-list li input[type="checkbox"] { ul.task-list li input[type="checkbox"] {
font-size: inherit;
width: 0.8em; width: 0.8em;
margin: 0 0.8em 0.2em -1.6em; margin: 0 0.8em 0.2em -1.6em;
vertical-align: middle; vertical-align: middle;
@ -35,8 +38,8 @@
<h2 id="summary">Summary</h2> <h2 id="summary">Summary</h2>
<p>This file introduces <em>Uniform-Iteration Algebras</em></p> <p>This file introduces <em>Uniform-Iteration Algebras</em></p>
<ul class="task-list"> <ul class="task-list">
<li><input type="checkbox" disabled="" checked="" /><em>Definition <li><label><input type="checkbox" checked="" /><em>Definition 12</em>
12</em> Uniform-Iteration Algebras</li> Uniform-Iteration Algebras</label></li>
</ul> </ul>
<h2 id="code">Code</h2> <h2 id="code">Code</h2>
<pre class="Agda"><a id="341" class="Keyword">module</a> <a id="348" href="UniformIterationAlgebra.html" class="Module">UniformIterationAlgebra</a> <a id="372" class="Symbol">{</a><a id="373" href="UniformIterationAlgebra.html#373" class="Bound">o</a> <a id="375" href="UniformIterationAlgebra.html#375" class="Bound"></a> <a id="377" href="UniformIterationAlgebra.html#377" class="Bound">e</a><a id="378" class="Symbol">}</a> <a id="380" class="Symbol">(</a><a id="381" href="UniformIterationAlgebra.html#381" class="Bound">D</a> <a id="383" class="Symbol">:</a> <a id="385" href="Categories.Category.Extensive.Bundle.html#781" class="Record">ExtensiveDistributiveCategory</a> <a id="415" href="UniformIterationAlgebra.html#373" class="Bound">o</a> <a id="417" href="UniformIterationAlgebra.html#375" class="Bound"></a> <a id="419" href="UniformIterationAlgebra.html#377" class="Bound">e</a><a id="420" class="Symbol">)</a> <a id="422" class="Keyword">where</a> <pre class="Agda"><a id="341" class="Keyword">module</a> <a id="348" href="UniformIterationAlgebra.html" class="Module">UniformIterationAlgebra</a> <a id="372" class="Symbol">{</a><a id="373" href="UniformIterationAlgebra.html#373" class="Bound">o</a> <a id="375" href="UniformIterationAlgebra.html#375" class="Bound"></a> <a id="377" href="UniformIterationAlgebra.html#377" class="Bound">e</a><a id="378" class="Symbol">}</a> <a id="380" class="Symbol">(</a><a id="381" href="UniformIterationAlgebra.html#381" class="Bound">D</a> <a id="383" class="Symbol">:</a> <a id="385" href="Categories.Category.Extensive.Bundle.html#781" class="Record">ExtensiveDistributiveCategory</a> <a id="415" href="UniformIterationAlgebra.html#373" class="Bound">o</a> <a id="417" href="UniformIterationAlgebra.html#375" class="Bound"></a> <a id="419" href="UniformIterationAlgebra.html#377" class="Bound">e</a><a id="420" class="Symbol">)</a> <a id="422" class="Keyword">where</a>

View file

@ -11,8 +11,11 @@
div.columns{display: flex; gap: min(4vw, 1.5em);} div.columns{display: flex; gap: min(4vw, 1.5em);}
div.column{flex: auto; overflow-x: auto;} div.column{flex: auto; overflow-x: auto;}
div.hanging-indent{margin-left: 1.5em; text-indent: -1.5em;} div.hanging-indent{margin-left: 1.5em; text-indent: -1.5em;}
ul.task-list{list-style: none;} /* The extra [class] is a hack that increases specificity enough to
override a similar rule in reveal.js */
ul.task-list[class]{list-style: none;}
ul.task-list li input[type="checkbox"] { ul.task-list li input[type="checkbox"] {
font-size: inherit;
width: 0.8em; width: 0.8em;
margin: 0 0.8em 0.2em -1.6em; margin: 0 0.8em 0.2em -1.6em;
vertical-align: middle; vertical-align: middle;
@ -37,8 +40,8 @@
<h2 id="summary">Summary</h2> <h2 id="summary">Summary</h2>
<p>This file introduces the category of Uniform-Iteration Algebras</p> <p>This file introduces the category of Uniform-Iteration Algebras</p>
<ul class="task-list"> <ul class="task-list">
<li><input type="checkbox" disabled="" checked="" /><em>Definition <li><label><input type="checkbox" checked="" /><em>Definition 12</em>
12</em> Uniform-Iteration Algebras</li> Uniform-Iteration Algebras</label></li>
</ul> </ul>
<h2 id="code">Code</h2> <h2 id="code">Code</h2>
<pre class="Agda"><a id="435" class="Keyword">module</a> <a id="442" href="UniformIterationAlgebras.html" class="Module">UniformIterationAlgebras</a> <a id="467" class="Symbol">{</a><a id="468" href="UniformIterationAlgebras.html#468" class="Bound">o</a> <a id="470" href="UniformIterationAlgebras.html#470" class="Bound"></a> <a id="472" href="UniformIterationAlgebras.html#472" class="Bound">e</a><a id="473" class="Symbol">}</a> <a id="475" class="Symbol">(</a><a id="476" href="UniformIterationAlgebras.html#476" class="Bound">D</a> <a id="478" class="Symbol">:</a> <a id="480" href="Categories.Category.Extensive.Bundle.html#781" class="Record">ExtensiveDistributiveCategory</a> <a id="510" href="UniformIterationAlgebras.html#468" class="Bound">o</a> <a id="512" href="UniformIterationAlgebras.html#470" class="Bound"></a> <a id="514" href="UniformIterationAlgebras.html#472" class="Bound">e</a><a id="515" class="Symbol">)</a> <a id="517" class="Keyword">where</a> <pre class="Agda"><a id="435" class="Keyword">module</a> <a id="442" href="UniformIterationAlgebras.html" class="Module">UniformIterationAlgebras</a> <a id="467" class="Symbol">{</a><a id="468" href="UniformIterationAlgebras.html#468" class="Bound">o</a> <a id="470" href="UniformIterationAlgebras.html#470" class="Bound"></a> <a id="472" href="UniformIterationAlgebras.html#472" class="Bound">e</a><a id="473" class="Symbol">}</a> <a id="475" class="Symbol">(</a><a id="476" href="UniformIterationAlgebras.html#476" class="Bound">D</a> <a id="478" class="Symbol">:</a> <a id="480" href="Categories.Category.Extensive.Bundle.html#781" class="Record">ExtensiveDistributiveCategory</a> <a id="510" href="UniformIterationAlgebras.html#468" class="Bound">o</a> <a id="512" href="UniformIterationAlgebras.html#470" class="Bound"></a> <a id="514" href="UniformIterationAlgebras.html#472" class="Bound">e</a><a id="515" class="Symbol">)</a> <a id="517" class="Keyword">where</a>

25
src/Coalgebra.lagda.md Normal file
View file

@ -0,0 +1,25 @@
## Coproducts in the category of Coalgebras (needs proper imports to be compiled)
```agda
module Coalgebra where
```
Coalg-cop : (F : Endofunctor C) → (alg₁ : F-Coalgebra F) → (alg₂ : F-Coalgebra F) → Coproduct (F-Coalgebras F) alg₁ alg₂
Coalg-cop F alg₁ alg₂ = record
{ A+B = record { A = A + B ; α = [ (F₁ i₁ ∘ α) , F₁ i₂ ∘ β ] }
; i₁ = record { f = i₁ ; commutes = inject₁ }
; i₂ = record { f = i₂ ; commutes = inject₂ }
; [_,_] = λ {CA} h i → record { f = [ F-Coalgebra-Morphism.f h , F-Coalgebra-Morphism.f i ] ; commutes = begin
F-Coalgebra.α CA ∘ [ F-Coalgebra-Morphism.f h , F-Coalgebra-Morphism.f i ] ≈⟨ ∘[] ⟩
[ F-Coalgebra.α CA ∘ F-Coalgebra-Morphism.f h , F-Coalgebra.α CA ∘ F-Coalgebra-Morphism.f i ] ≈⟨ ⟺ ([]-cong₂ (⟺ (F-Coalgebra-Morphism.commutes h)) ((⟺ (F-Coalgebra-Morphism.commutes i)))) ⟩
[ F₁ (F-Coalgebra-Morphism.f h) ∘ α , F₁ (F-Coalgebra-Morphism.f i) ∘ β ] ≈⟨ ⟺ ([]-cong₂ ((F-resp-≈ inject₁) ⟩∘⟨refl) ((F-resp-≈ inject₂) ⟩∘⟨refl)) ⟩
[ F₁ ([ F-Coalgebra-Morphism.f h , F-Coalgebra-Morphism.f i ] ∘ i₁) ∘ α , F₁ ([ F-Coalgebra-Morphism.f h , F-Coalgebra-Morphism.f i ] ∘ i₂) ∘ β ] ≈⟨ ⟺ ([]-cong₂ (pullˡ (⟺ homomorphism)) (pullˡ (⟺ homomorphism))) ⟩
[ F₁ ([ F-Coalgebra-Morphism.f h , F-Coalgebra-Morphism.f i ]) ∘ F₁ i₁ ∘ α , F₁ ([ F-Coalgebra-Morphism.f h , F-Coalgebra-Morphism.f i ]) ∘ F₁ i₂ ∘ β ] ≈⟨ ⟺ ∘[] ⟩
F₁ ([ F-Coalgebra-Morphism.f h , F-Coalgebra-Morphism.f i ]) ∘ [ F₁ i₁ ∘ α , F₁ i₂ ∘ β ] ∎ }
; inject₁ = inject₁
; inject₂ = inject₂
; unique = λ eq₁ eq₂ → +-unique eq₁ eq₂
}
where open Functor F
open F-Coalgebra alg₁
open F-Coalgebra alg₂ renaming (A to B; α to β)

View file

@ -1,5 +1,6 @@
<!-- <!--
```agda ```agda
{-# OPTIONS --allow-unsolved-metas #-}
open import Level open import Level
open import Categories.Category open import Categories.Category
open import Categories.Monad open import Categories.Monad
@ -27,7 +28,7 @@ import Categories.Morphism.Reasoning as MR
## Summary ## Summary
This file introduces the delay monad ***D*** This file introduces the delay monad ***D***
- [X] *Proposition 1* Characterization of the delay monad ***D*** (here treated as definition) - [ ] *Proposition 1* Characterization of the delay monad ***D***
- [ ] *Proposition 2* ***D*** is commutative - [ ] *Proposition 2* ***D*** is commutative
## Code ## Code
@ -47,40 +48,14 @@ module Monad.Instance.Delay {o e} (ED : ExtensiveDistributiveCategory o
``` ```
### *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
-- TODO use this to get i₂ as F-Coalgebra, then use -id below!!
Coalg-cop : ∀ {A B : Obj} → (F : Endofunctor C) → (alg₁ : F-Coalgebra-on F A) → (alg₂ : F-Coalgebra-on F B) → Coproduct (F-Coalgebras F) (record { A = A ; α = alg₁ }) (record { A = B ; α = alg₂ })
Coalg-cop {A} {B} F alg₁ alg₂ = record
{ A+B = record { A = A + B ; α = [ (F₁ i₁ ∘ alg₁) , F₁ i₂ ∘ alg₂ ] }
; i₁ = record { f = i₁ ; commutes = inject₁ }
; i₂ = record { f = i₂ ; commutes = inject₂ }
; [_,_] = λ {CA} h i → record { f = [ F-Coalgebra-Morphism.f h , F-Coalgebra-Morphism.f i ] ; commutes = begin
F-Coalgebra.α CA ∘ [ F-Coalgebra-Morphism.f h , F-Coalgebra-Morphism.f i ] ≈⟨ ∘[] ⟩
[ F-Coalgebra.α CA ∘ F-Coalgebra-Morphism.f h , F-Coalgebra.α CA ∘ F-Coalgebra-Morphism.f i ] ≈⟨ ⟺ ([]-cong₂ (⟺ (F-Coalgebra-Morphism.commutes h)) ((⟺ (F-Coalgebra-Morphism.commutes i)))) ⟩
[ F₁ (F-Coalgebra-Morphism.f h) ∘ alg₁ , F₁ (F-Coalgebra-Morphism.f i) ∘ alg₂ ] ≈⟨ ⟺ ([]-cong₂ ((F-resp-≈ inject₁) ⟩∘⟨refl) ((F-resp-≈ inject₂) ⟩∘⟨refl)) ⟩
[ F₁ ([ F-Coalgebra-Morphism.f h , F-Coalgebra-Morphism.f i ] ∘ i₁) ∘ alg₁ , F₁ ([ F-Coalgebra-Morphism.f h , F-Coalgebra-Morphism.f i ] ∘ i₂) ∘ alg₂ ] ≈⟨ ⟺ ([]-cong₂ (pullˡ (⟺ homomorphism)) (pullˡ (⟺ homomorphism))) ⟩
[ F₁ ([ F-Coalgebra-Morphism.f h , F-Coalgebra-Morphism.f i ]) ∘ F₁ i₁ ∘ alg₁ , F₁ ([ F-Coalgebra-Morphism.f h , F-Coalgebra-Morphism.f i ]) ∘ F₁ i₂ ∘ alg₂ ] ≈⟨ ⟺ ∘[] ⟩
F₁ ([ F-Coalgebra-Morphism.f h , F-Coalgebra-Morphism.f i ]) ∘ [ F₁ i₁ ∘ alg₁ , F₁ i₂ ∘ alg₂ ] ∎ }
; inject₁ = inject₁
; inject₂ = inject₂
; unique = λ eq₁ eq₂ → +-unique eq₁ eq₂
}
where open Functor F
delayF : Obj → Endofunctor C delayF : Obj → Endofunctor C
delayF Y = record delayF Y = record
{ F₀ = λ X → Y + X { F₀ = Y +_
; F₁ = λ f → idC +₁ f ; F₁ = idC +₁_
; identity = CC.coproduct.unique id-comm-sym id-comm-sym ; identity = CC.coproduct.unique id-comm-sym id-comm-sym
; homomorphism = ⟺ (+₁∘+₁ ○ +₁-cong₂ identity² refl) ; homomorphism = ⟺ (+₁∘+₁ ○ +₁-cong₂ identity² refl)
; F-resp-≈ = λ eq → +₁-cong₂ refl eq ; F-resp-≈ = +₁-cong₂ refl
} }
record DelayM : Set (o ⊔ ⊔ e) where record DelayM : Set (o ⊔ ⊔ e) where
@ -91,17 +66,14 @@ First I postulate the Functor *D*, maybe I should derive it...
module _ (X : Obj) where module _ (X : Obj) where
open Terminal (algebras X) using (; !) open Terminal (algebras X) using (; !)
open F-Coalgebra using (α) renaming (A to DX) open F-Coalgebra renaming (A to DX)
-- TODO figure out how to name things...
out' : DX ⇒ X + DX
out' = α
D₀ = DX D₀ = DX
out-≅ : DX ≅ X + DX out-≅ : DX ≅ X + DX
out-≅ = colambek {F = delayF X} (algebras X) out-≅ = colambek {F = delayF X} (algebras X)
-- note: out-≅.from ≡ .α
open _≅_ out-≅ using () renaming (to to out⁻¹; from to out) public open _≅_ out-≅ using () renaming (to to out⁻¹; from to out) public
now : X ⇒ DX now : X ⇒ DX
@ -110,6 +82,10 @@ First I postulate the Functor *D*, maybe I should derive it...
later : DX ⇒ DX later : DX ⇒ DX
later = out⁻¹ ∘ i₂ later = out⁻¹ ∘ i₂
-- TODO inline
unitlaw : out ∘ now ≈ i₁
unitlaw = cancelˡ (_≅_.isoʳ out-≅)
module _ {Y : Obj} where module _ {Y : Obj} where
coit : Y ⇒ X + Y → Y ⇒ DX coit : Y ⇒ X + Y → Y ⇒ DX
coit f = F-Coalgebra-Morphism.f (! {A = record { A = Y ; α = f }}) coit f = F-Coalgebra-Morphism.f (! {A = record { A = Y ; α = f }})
@ -122,66 +98,85 @@ First I postulate the Functor *D*, maybe I should derive it...
{ F₀ = D₀ { F₀ = D₀
; unit = λ {X} → now X ; unit = λ {X} → now X
; extend = extend ; extend = extend
; identityʳ = {! !} ; identityʳ = λ {X} {Y} {f} → begin
; identityˡ = {! !} extend f ∘ now X ≈⟨ (insertˡ (_≅_.isoˡ (out-≅ Y))) ⟩∘⟨refl ⟩
(out⁻¹ Y ∘ out Y ∘ extend f) ∘ now X ≈⟨ (refl⟩∘⟨ (extendlaw f)) ⟩∘⟨refl ⟩
(out⁻¹ Y ∘ [ out Y ∘ f , i₂ ∘ extend f ] ∘ out X) ∘ now X ≈⟨ pullʳ (pullʳ (unitlaw X)) ⟩
out⁻¹ Y ∘ [ out Y ∘ f , i₂ ∘ extend f ] ∘ i₁ ≈⟨ refl⟩∘⟨ inject₁ ⟩
out⁻¹ Y ∘ out Y ∘ f ≈⟨ cancelˡ (_≅_.isoˡ (out-≅ Y)) ⟩
f ∎
; identityˡ = λ {X} → Terminal.-id (algebras X) (record { f = extend (now X) ; commutes = begin
out X ∘ extend (now X) ≈⟨ pullˡ ((F-Coalgebra-Morphism.commutes (Terminal.! (algebras X) {A = alg (now X)}))) ⟩
((idC +₁ (F-Coalgebra-Morphism.f (Terminal.! (algebras X) {A = alg (now X)}))) ∘ F-Coalgebra.α (alg (now X))) ∘ i₁ ≈⟨ pullʳ inject₁ ⟩
(idC +₁ (F-Coalgebra-Morphism.f (Terminal.! (algebras X) {A = alg (now X)})))
∘ [ [ i₁ , i₂ ∘ i₂ ] ∘ (out X ∘ (now X)) , i₂ ∘ i₁ ] ∘ out X ≈⟨ refl⟩∘⟨ []-cong₂ ((refl⟩∘⟨ (unitlaw X)) ○ inject₁) refl ⟩∘⟨refl ⟩
(idC +₁ (F-Coalgebra-Morphism.f (Terminal.! (algebras X) {A = alg (now X)}))) ∘ [ i₁ , i₂ ∘ i₁ ] ∘ out X ≈⟨ pullˡ ∘[] ⟩
[ (idC +₁ (F-Coalgebra-Morphism.f (Terminal.! (algebras X) {A = alg (now X)}))) ∘ i₁
, (idC +₁ (F-Coalgebra-Morphism.f (Terminal.! (algebras X) {A = alg (now X)}))) ∘ i₂ ∘ i₁ ] ∘ out X ≈⟨ ([]-cong₂ +₁∘i₁ (pullˡ +₁∘i₂)) ⟩∘⟨refl ⟩
[ i₁ ∘ idC , (i₂ ∘ (F-Coalgebra-Morphism.f (Terminal.! (algebras X) {A = alg (now X)}))) ∘ i₁ ] ∘ out X ≈⟨ ([]-cong₂ refl assoc) ⟩∘⟨refl ⟩
[ i₁ ∘ idC , i₂ ∘ (extend (now X)) ] ∘ out X ≈˘⟨ []∘+₁ ⟩∘⟨refl ⟩
([ i₁ , i₂ ] ∘ (idC +₁ extend (now X))) ∘ out X ≈⟨ (elimˡ +-η) ⟩∘⟨refl ⟩
(idC +₁ extend (now X)) ∘ out X ∎ })
; assoc = {! !} ; assoc = {! !}
; sym-assoc = {! !} ; sym-assoc = {! !}
; extend-≈ = {! !} ; extend-≈ = λ {X} {Y} {f} {g} eq → {! !}
-- begin
-- extend f ≈⟨ sym (Terminal.!-unique (algebras Y) (record { f = extend f ; commutes = F-Coalgebra-Morphism.commutes {! !} })) ⟩
-- F-Coalgebra-Morphism.f ((Terminal.! (algebras Y) {A = alg' {X} {Y}})) ≈˘⟨ sym (Terminal.!-unique (algebras Y) (record { f = extend g ; commutes = {! !} })) ⟩
-- extend g ∎
-- let
-- h : F-Coalgebra-Morphism (alg f) (alg g)
-- h = record { f = idC ; commutes = begin
-- F-Coalgebra.α (alg g) ∘ idC ≈⟨ id-comm ⟩
-- idC ∘ F-Coalgebra.α (alg g) ≈⟨ refl⟩∘⟨ []-cong₂ (([]-cong₂ (refl⟩∘⟨ (refl⟩∘⟨ (sym eq))) refl) ⟩∘⟨refl) refl ⟩
-- idC ∘ F-Coalgebra.α (alg f) ≈˘⟨ ([]-cong₂ identityʳ identityʳ ○ +-η) ⟩∘⟨refl ⟩
-- (idC +₁ idC) ∘ F-Coalgebra.α (alg f) ∎ }
-- x : F-Coalgebra-Morphism (alg f) (Terminal. (algebras Y))
-- x = (F-Coalgebras (delayF Y)) [ Terminal.! (algebras Y) ∘ h ]
-- in Terminal.!-unique₂ (algebras Y) {f = Terminal.! (algebras Y)} {g = {! !} } ⟩∘⟨refl
-- extend f ≈⟨ insertˡ (_≅_.isoˡ (out-≅ Y)) ⟩
-- out⁻¹ Y ∘ out Y ∘ extend f ≈⟨ refl⟩∘⟨ pullˡ (F-Coalgebra-Morphism.commutes (Terminal.! (algebras Y) {A = alg f})) ⟩
-- out⁻¹ Y ∘ ((idC +₁ (F-Coalgebra-Morphism.f (Terminal.! (algebras Y)))) ∘ [ [ [ i₁ , i₂ ∘ i₂ ] ∘ (out Y ∘ f) , i₂ ∘ i₁ ] ∘ out X , (idC +₁ i₂) ∘ out Y ]) ∘ i₁ ≈⟨ refl⟩∘⟨ ((+₁-cong₂ refl (Terminal.!-unique₂ (algebras Y) {f = Terminal.! (algebras Y) {A = alg f}} {g = Terminal.! (algebras Y) {A = alg f}}) ⟩∘⟨ ([]-cong₂ (([]-cong₂ (refl⟩∘⟨ (refl⟩∘⟨ eq)) refl) ⟩∘⟨refl) refl)) ⟩∘⟨refl) ⟩
-- out⁻¹ Y ∘ ((idC +₁ (F-Coalgebra-Morphism.f (Terminal.! (algebras Y)))) ∘ [ [ [ i₁ , i₂ ∘ i₂ ] ∘ (out Y ∘ g) , i₂ ∘ i₁ ] ∘ out X , (idC +₁ i₂) ∘ out Y ]) ∘ i₁ ≈⟨ refl⟩∘⟨ (((+₁-cong₂ refl (Terminal.!-unique₂ (algebras Y) {f = Terminal.! (algebras Y)} {g = record { f = F-Coalgebra-Morphism.f (Terminal.! (algebras Y)) ; commutes = {! !} }})) ⟩∘⟨refl) ⟩∘⟨refl) ⟩
-- out⁻¹ Y ∘ ((idC +₁ (F-Coalgebra-Morphism.f (Terminal.! (algebras Y)))) ∘ [ [ [ i₁ , i₂ ∘ i₂ ] ∘ (out Y ∘ g) , i₂ ∘ i₁ ] ∘ out X , (idC +₁ i₂) ∘ out Y ]) ∘ i₁ ≈˘⟨ refl⟩∘⟨ pullˡ (F-Coalgebra-Morphism.commutes (Terminal.! (algebras Y) {A = alg g})) ⟩
-- out⁻¹ Y ∘ out Y ∘ extend g ≈˘⟨ insertˡ (_≅_.isoˡ (out-≅ Y)) ⟩
-- extend g ∎
}) })
where where
alg' : ∀ {X Y} → F-Coalgebra (delayF Y)
alg' {X} {Y} = record { A = D₀ X ; α = i₂ }
module _ {X Y : Obj} (f : X ⇒ D₀ Y) where module _ {X Y : Obj} (f : X ⇒ D₀ Y) where
open Terminal (algebras Y) using (!; -id) open Terminal (algebras Y) using (!; -id)
alg : F-Coalgebra (delayF Y) alg : F-Coalgebra (delayF Y)
alg = record { A = D₀ X + D₀ Y ; α = (idC +₁ idC +₁ [ idC , idC ]) ∘ (idC +₁ _≅_.to +-assoc ∘ _≅_.to +-comm) ∘ _≅_.to +-assoc ∘ ((out Y ∘ f) +₁ idC) ∘ _≅_.to +-assoc ∘ (out X +₁ idC) } -- _≅_.to +-assoc alg = record { A = D₀ X + D₀ Y ; α = [ [ [ i₁ , i₂ ∘ i₂ ] ∘ (out Y ∘ f) , i₂ ∘ i₁ ] ∘ out X , (idC +₁ i₂) ∘ out Y ] } -- (idC +₁ (idC +₁ [ idC , idC ]) ∘ _≅_.to +-assoc ∘ _≅_.to +-comm)
extend : D₀ X ⇒ D₀ Y extend : D₀ X ⇒ D₀ Y
extend = F-Coalgebra-Morphism.f (! {A = alg}) ∘ i₁ {B = D₀ Y} extend = F-Coalgebra-Morphism.f (! {A = alg}) ∘ i₁ {B = D₀ Y}
+-assocˡ∘i₁∘i₁ : +-assocˡ ∘ i₁ ∘ i₁ ≈ i₁ !∘i₂ : F-Coalgebra-Morphism.f (! {A = alg}) ∘ i₂ ≈ idC
+-assocˡ∘i₁∘i₁ = begin +-assocˡ ∘ i₁ ∘ i₁ ≈⟨ pullˡ inject₁ ⟩ [ i₁ , i₂ ∘ i₁ ] ∘ i₁ ≈⟨ inject₁ ⟩ i₁ ∎ !∘i₂ = -id (F-Coalgebras (delayF Y) [ ! ∘ record { f = i₂ ; commutes = inject₂ } ] )
-- i₂-morphism = record { f = i₂ ; commutes = {! !} } extendlaw : out Y ∘ extend ≈ [ out Y ∘ f , i₂ ∘ extend ] ∘ out X
i₂∘! : F-Coalgebra-Morphism.f (! {A = alg}) ∘ i₂ ≈ idC extendlaw = begin
i₂∘! = -id (F-Coalgebras (delayF Y) [ ! {A = alg} ∘ record { f = i₂ ; commutes = {! inject₂ !} } ]) out Y ∘ extend ≈⟨ pullˡ (F-Coalgebra-Morphism.commutes (! {A = alg})) ⟩
identityʳ' : extend ∘ now X ≈ f ((idC +₁ (F-Coalgebra-Morphism.f !)) ∘ F-Coalgebra.α alg) ∘ coproduct.i₁ ≈⟨ pullʳ inject₁ ⟩
identityʳ' = begin (idC +₁ (F-Coalgebra-Morphism.f !)) ∘ [ [ i₁ , i₂ ∘ i₂ ] ∘ (out Y ∘ f) , i₂ ∘ i₁ ] ∘ out X ≈⟨ pullˡ ∘[] ⟩
(F-Coalgebra-Morphism.f (! {A = alg}) ∘ i₁ {B = D₀ Y}) ∘ (out⁻¹ X ∘ i₁) ≈⟨ introˡ (_≅_.isoˡ (out-≅ Y)) ⟩ [ (idC +₁ (F-Coalgebra-Morphism.f !)) ∘ [ i₁ , i₂ ∘ i₂ ] ∘ (out Y ∘ f)
(out⁻¹ Y ∘ out Y) ∘ (F-Coalgebra-Morphism.f (! {A = alg}) ∘ i₁ {B = D₀ Y}) ∘ (out⁻¹ X ∘ i₁) ≈⟨ pullʳ (pullˡ (pullˡ (F-Coalgebra-Morphism.commutes (! {A = alg})))) ⟩ , (idC +₁ (F-Coalgebra-Morphism.f !)) ∘ i₂ ∘ i₁ ] ∘ out X ≈⟨ ([]-cong₂ (pullˡ ∘[]) (pullˡ +₁∘i₂)) ⟩∘⟨refl ⟩
out⁻¹ Y ∘ (((idC +₁ (F-Coalgebra-Morphism.f !)) ∘ F-Coalgebra.α alg) ∘ i₁) ∘ out⁻¹ X ∘ i₁ ≈⟨ refl⟩∘⟨ (pullʳ (pullʳ (pullʳ (pullʳ (pullʳ (pullʳ +₁∘i₁)))))) ⟩∘⟨refl ⟩ [ [ (idC +₁ (F-Coalgebra-Morphism.f !)) ∘ i₁
out⁻¹ Y ∘ ((idC +₁ F-Coalgebra-Morphism.f !) ∘ (idC +₁ idC +₁ [ idC , idC ]) ∘ (idC +₁ M._≅_.to +-assoc ∘ M._≅_.to +-comm) ∘ M._≅_.to +-assoc ∘ (out Y ∘ f +₁ idC) ∘ M._≅_.to +-assoc ∘ (i₁ ∘ out X)) ∘ out⁻¹ X ∘ i₁ ≈⟨ refl⟩∘⟨ (pullʳ (pullʳ (pullʳ (pullʳ (pullʳ (pullʳ (pullʳ (pullˡ (M._≅_.isoʳ (out-≅ X)))))))))) ⟩ , (idC +₁ (F-Coalgebra-Morphism.f !)) ∘ i₂ ∘ i₂ ] ∘ (out Y ∘ f)
out⁻¹ Y ∘ (idC +₁ F-Coalgebra-Morphism.f !) ∘ (idC +₁ idC +₁ [ idC , idC ]) ∘ (idC +₁ M._≅_.to +-assoc ∘ M._≅_.to +-comm) ∘ M._≅_.to +-assoc ∘ (out Y ∘ f +₁ idC) ∘ M._≅_.to +-assoc ∘ i₁ ∘ idC ∘ i₁ ≈⟨ refl⟩∘⟨ (refl⟩∘⟨ (refl⟩∘⟨ (refl⟩∘⟨ (refl⟩∘⟨ (refl⟩∘⟨ (refl⟩∘⟨ (refl⟩∘⟨ identityˡ))))))) ⟩ , (i₂ ∘ (F-Coalgebra-Morphism.f !)) ∘ i₁ ] ∘ out X ≈⟨ ([]-cong₂ (([]-cong₂ +₁∘i₁ (pullˡ +₁∘i₂)) ⟩∘⟨refl) refl) ⟩∘⟨refl ⟩
out⁻¹ Y ∘ (idC +₁ F-Coalgebra-Morphism.f !) ∘ (idC +₁ idC +₁ [ idC , idC ]) ∘ (idC +₁ +-assocˡ ∘ M._≅_.to +-comm) ∘ M._≅_.to +-assoc ∘ (out Y ∘ f +₁ idC) ∘ M._≅_.to +-assoc ∘ i₁ ∘ i₁ ≈⟨ refl⟩∘⟨ (refl⟩∘⟨ (refl⟩∘⟨ (refl⟩∘⟨ (refl⟩∘⟨ (refl⟩∘⟨ (+-assocˡ∘i₁∘i₁)))))) ⟩ [ [ i₁ ∘ idC , (i₂ ∘ (F-Coalgebra-Morphism.f !)) ∘ i₂ ] ∘ (out Y ∘ f)
out⁻¹ Y ∘ (idC +₁ F-Coalgebra-Morphism.f !) ∘ (idC +₁ idC +₁ [ idC , idC ]) ∘ (idC +₁ +-assocˡ ∘ M._≅_.to +-comm) ∘ M._≅_.to +-assoc ∘ (out Y ∘ f +₁ idC) ∘ i₁ ≈⟨ refl⟩∘⟨ refl⟩∘⟨ refl⟩∘⟨ refl⟩∘⟨ refl⟩∘⟨ +₁∘i₁ ⟩ , (i₂ ∘ (F-Coalgebra-Morphism.f !)) ∘ i₁ ] ∘ out X ≈⟨ ([]-cong₂ (elimˡ (([]-cong₂ identityʳ (cancelʳ !∘i₂)) ○ +-η)) assoc) ⟩∘⟨refl ⟩
out⁻¹ Y ∘ (idC +₁ F-Coalgebra-Morphism.f !) ∘ (idC +₁ idC +₁ [ idC , idC ]) ∘ (idC +₁ +-assocˡ ∘ M._≅_.to +-comm) ∘ M._≅_.to +-assoc ∘ (i₁ ∘ (out Y ∘ f)) ≈⟨ refl⟩∘⟨ refl⟩∘⟨ refl⟩∘⟨ refl⟩∘⟨ pullˡ inject₁ ⟩ [ out Y ∘ f , i₂ ∘ extend ] ∘ out X ∎
out⁻¹ Y ∘ (idC +₁ F-Coalgebra-Morphism.f !) ∘ (idC +₁ idC +₁ [ idC , idC ]) ∘ (idC +₁ +-assocˡ ∘ M._≅_.to +-comm) ∘ [ i₁ , i₂ ∘ i₁ ] ∘ (out Y ∘ f) ≈⟨ refl⟩∘⟨ refl⟩∘⟨ refl⟩∘⟨ pullˡ ∘[] ⟩
out⁻¹ Y ∘ (idC +₁ F-Coalgebra-Morphism.f !) ∘ (idC +₁ idC +₁ [ idC , idC ]) ∘ [ (idC +₁ +-assocˡ ∘ M._≅_.to +-comm) ∘ i₁ , (idC +₁ +-assocˡ ∘ M._≅_.to +-comm) ∘ i₂ ∘ i₁ ] ∘ (out Y ∘ f) ≈⟨ refl⟩∘⟨ refl⟩∘⟨ refl⟩∘⟨ ([]-cong₂ +₁∘i₁ (pullˡ +₁∘i₂)) ⟩∘⟨refl ⟩
out⁻¹ Y ∘ (idC +₁ F-Coalgebra-Morphism.f !) ∘ (idC +₁ idC +₁ [ idC , idC ]) ∘ [ i₁ ∘ idC , (i₂ ∘ (+-assocˡ ∘ M._≅_.to +-comm)) ∘ i₁ ] ∘ (out Y ∘ f) ≈⟨ refl⟩∘⟨ refl⟩∘⟨ refl⟩∘⟨ ([]-cong₂ identityʳ (pullʳ (pullʳ inject₁))) ⟩∘⟨refl ⟩
out⁻¹ Y ∘ (idC +₁ F-Coalgebra-Morphism.f !) ∘ (idC +₁ idC +₁ [ idC , idC ]) ∘ [ i₁ , i₂ ∘ (+-assocˡ ∘ i₂) ] ∘ (out Y ∘ f) ≈⟨ refl⟩∘⟨ refl⟩∘⟨ refl⟩∘⟨ ([]-cong₂ refl (refl⟩∘⟨ inject₂)) ⟩∘⟨refl ⟩
out⁻¹ Y ∘ (idC +₁ F-Coalgebra-Morphism.f !) ∘ (idC +₁ idC +₁ [ idC , idC ]) ∘ [ i₁ , i₂ ∘ i₂ ∘ i₂ ] ∘ (out Y ∘ f) ≈⟨ refl⟩∘⟨ refl⟩∘⟨ pullˡ ∘[] ⟩
out⁻¹ Y ∘ (idC +₁ F-Coalgebra-Morphism.f !) ∘ [ (idC +₁ idC +₁ [ idC , idC ]) ∘ i₁ , (idC +₁ idC +₁ [ idC , idC ]) ∘ i₂ ∘ i₂ ∘ i₂ ] ∘ (out Y ∘ f) ≈⟨ refl⟩∘⟨ refl⟩∘⟨ []-cong₂ +₁∘i₁ (pullˡ +₁∘i₂) ⟩∘⟨refl ⟩
out⁻¹ Y ∘ (idC +₁ F-Coalgebra-Morphism.f !) ∘ [ i₁ ∘ idC , (i₂ ∘ (idC +₁ [ idC , idC ])) ∘ i₂ ∘ i₂ ] ∘ (out Y ∘ f) ≈⟨ refl⟩∘⟨ refl⟩∘⟨ []-cong₂ identityʳ (pullˡ (pullʳ +₁∘i₂)) ⟩∘⟨refl ⟩
out⁻¹ Y ∘ (idC +₁ F-Coalgebra-Morphism.f !) ∘ [ i₁ , (i₂ ∘ (i₂ ∘ [ idC , idC ])) ∘ i₂ ] ∘ (out Y ∘ f) ≈⟨ refl⟩∘⟨ refl⟩∘⟨ []-cong₂ refl (pullʳ (pullʳ inject₂)) ⟩∘⟨refl ⟩
out⁻¹ Y ∘ (idC +₁ F-Coalgebra-Morphism.f !) ∘ [ i₁ , i₂ ∘ (i₂ ∘ idC) ] ∘ (out Y ∘ f) ≈⟨ refl⟩∘⟨ pullˡ ∘[] ⟩
out⁻¹ Y ∘ [ (idC +₁ F-Coalgebra-Morphism.f !) ∘ i₁ , (idC +₁ F-Coalgebra-Morphism.f !) ∘ i₂ ∘ (i₂ ∘ idC) ] ∘ (out Y ∘ f) ≈⟨ refl⟩∘⟨ (([]-cong₂ +₁∘i₁ (pullˡ +₁∘i₂)) ⟩∘⟨refl) ⟩
out⁻¹ Y ∘ [ i₁ ∘ idC , (i₂ ∘ F-Coalgebra-Morphism.f !) ∘ (i₂ ∘ idC) ] ∘ (out Y ∘ f) ≈⟨ refl⟩∘⟨ (([]-cong₂ identityʳ (refl⟩∘⟨ identityʳ ○ assoc ○ refl⟩∘⟨ -id {! !})) ⟩∘⟨refl) ⟩
out⁻¹ Y ∘ [ i₁ , i₂ ∘ idC ] ∘ (out Y ∘ f) ≈⟨ refl⟩∘⟨ (([]-cong₂ refl {! !}) ⟩∘⟨refl) ⟩
{! !} ≈⟨ {! !} ⟩
{! !} ≈⟨ {! !} ⟩
f ∎
-- +-assocˡ∘i₁ = begin +-assocˡ ∘ i₁ ≈⟨ inject₁ ⟩ [ i₁ , i₂ ∘ i₁ ] ∎
-- +-assocˡ∘i₁∘i₁ = begin +-assocˡ ∘ i₁ ∘ i₁ ≈⟨ inject₁ ⟩ [ i₁ , i₂ ∘ i₁ ] ∎
-- given: out ∘ ! ≈ (! +₁ idC) ∘ long
``` ```
Old definitions: ### Old definitions:
```agda ```agda
record DelayMonad : Set (o ⊔ ⊔ e) where
record DelayFunctor : Set (o ⊔ ⊔ e) where
field field
D : Endofunctor C D₀ : Obj → Obj
open Functor D public renaming (F₀ to D₀; F₁ to D₁)
field field
now : ∀ {X} → X ⇒ D₀ X now : ∀ {X} → X ⇒ D₀ X
@ -195,11 +190,6 @@ Old definitions:
coit : ∀ {X Y} → Y ⇒ X + Y → Y ⇒ D₀ X coit : ∀ {X Y} → Y ⇒ X + Y → Y ⇒ D₀ X
coit-law : ∀ {X Y} {f : Y ⇒ X + Y} → out ∘ (coit f) ≈ (idC +₁ (coit f)) ∘ f coit-law : ∀ {X Y} {f : Y ⇒ X + Y} → out ∘ (coit f) ≈ (idC +₁ (coit f)) ∘ f
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
@ -208,7 +198,7 @@ Old definitions:
unitLaw : ∀ {X} → out {X} ∘ now {X} ≈ i₁ unitLaw : ∀ {X} → out {X} ∘ now {X} ≈ i₁
unitLaw = begin unitLaw = begin
out ∘ now ≈⟨ refl⟩∘⟨ sym inject₁ ⟩ out ∘ now ≈⟨ refl⟩∘⟨ sym inject₁ ⟩
out ∘ [ now , later ] ∘ i₁ ≈⟨ cancelˡ (IsIso.isoˡ isIso) ⟩ out ∘ [ now , later ] ∘ i₁ ≈⟨ cancelˡ (IsIso.isoˡ isIso) ⟩
i₁ ∎ i₁ ∎
@ -218,11 +208,11 @@ Old definitions:
; unit = now ; unit = now
; extend = _* ; extend = _*
; identityʳ = λ {X} {Y} {k} → begin ; identityʳ = λ {X} {Y} {k} → begin
k * ∘ now ≈⟨ introˡ (IsIso.isoʳ isIso) ⟩∘⟨refl ⟩ k * ∘ now ≈⟨ introˡ (IsIso.isoʳ isIso) ⟩∘⟨refl ⟩
(([ now , later ] ∘ out) ∘ k *) ∘ now ≈⟨ pullʳ *-law ⟩∘⟨refl ⟩ (([ now , later ] ∘ out) ∘ k *) ∘ now ≈⟨ pullʳ *-law ⟩∘⟨refl ⟩
([ now , later ] ∘ [ out ∘ k , i₂ ∘ (k *) ] ∘ out) ∘ now ≈⟨ pullʳ (pullʳ unitLaw) ⟩ ([ now , later ] ∘ [ out ∘ k , i₂ ∘ (k *) ] ∘ out) ∘ now ≈⟨ pullʳ (pullʳ unitLaw) ⟩
[ now , later ] ∘ [ out ∘ k , i₂ ∘ (k *) ] ∘ i₁ ≈⟨ refl⟩∘⟨ inject₁ ⟩ [ now , later ] ∘ [ out ∘ k , i₂ ∘ (k *) ] ∘ i₁ ≈⟨ refl⟩∘⟨ inject₁ ⟩
[ now , later ] ∘ out ∘ k ≈⟨ cancelˡ (IsIso.isoʳ isIso) ⟩ [ now , later ] ∘ out ∘ k ≈⟨ cancelˡ (IsIso.isoʳ isIso) ⟩
k ∎ k ∎
; identityˡ = λ {X} → sym (*-unique now idC) ; identityˡ = λ {X} → sym (*-unique now idC)
; assoc = λ {X} {Y} {Z} {f} {g} → sym (*-unique ((g *) ∘ f) ((g *) ∘ (f *))) ; assoc = λ {X} {Y} {Z} {f} {g} → sym (*-unique ((g *) ∘ f) ((g *) ∘ (f *)))
@ -233,29 +223,8 @@ Old definitions:
### Definition 30: Search-Algebras ### Definition 30: Search-Algebras
```agda TODO
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 ### Proposition 31 : the category of uniform-iteration algebras coincides with the category of search-algebras
TODOs:
- [ ] Define SearchAlgebras (and SearchAlgebra morphisms) TODO
- [ ] show StrongEquivalence
- [ ] Show 'ElgotAlgebra⇔Search+***D***'
```agda
record SearchAlgebras (DF : DelayFunctor) : Set (o ⊔ ⊔ e) where
open DelayFunctor DF
```