bsc-leon-vatthauer/public/Monad.Instance.Delay.html
2023-08-21 16:27:12 +02:00

161 lines
48 KiB
HTML
Raw Blame History

This file contains ambiguous Unicode characters

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

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml" lang="" xml:lang="">
<head>
<meta charset="utf-8" />
<meta name="generator" content="pandoc" />
<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes" />
<title>Monad.Instance.Delay</title>
<style>
code{white-space: pre-wrap;}
span.smallcaps{font-variant: small-caps;}
div.columns{display: flex; gap: min(4vw, 1.5em);}
div.column{flex: auto; overflow-x: auto;}
div.hanging-indent{margin-left: 1.5em; text-indent: -1.5em;}
ul.task-list{list-style: none;}
ul.task-list li input[type="checkbox"] {
width: 0.8em;
margin: 0 0.8em 0.2em -1.6em;
vertical-align: middle;
}
.display.math{display: block; text-align: center; margin: 0.5rem auto;}
</style>
<link rel="stylesheet" href="Agda.css" />
<!--[if lt IE 9]>
<script src="//cdnjs.cloudflare.com/ajax/libs/html5shiv/3.7.3/html5shiv-printshiv.min.js"></script>
<![endif]-->
</head>
<body>
<!--
<pre class="Agda"><a id="14" class="Keyword">open</a> <a id="19" class="Keyword">import</a> <a id="26" href="Level.html" class="Module">Level</a>
<a id="32" class="Keyword">open</a> <a id="37" class="Keyword">import</a> <a id="44" href="Categories.Category.Core.html" class="Module">Categories.Category.Core</a>
<a id="69" class="Keyword">open</a> <a id="74" class="Keyword">import</a> <a id="81" href="Categories.Category.Distributive.html" class="Module">Categories.Category.Distributive</a>
<a id="114" class="Keyword">open</a> <a id="119" class="Keyword">import</a> <a id="126" href="Categories.Category.Extensive.Bundle.html" class="Module">Categories.Category.Extensive.Bundle</a>
<a id="163" class="Keyword">open</a> <a id="168" class="Keyword">import</a> <a id="175" href="Categories.Category.Extensive.html" class="Module">Categories.Category.Extensive</a>
<a id="205" class="Keyword">open</a> <a id="210" class="Keyword">import</a> <a id="217" href="Categories.Category.BinaryProducts.html" class="Module">Categories.Category.BinaryProducts</a>
<a id="252" class="Keyword">open</a> <a id="257" class="Keyword">import</a> <a id="264" href="Categories.Category.Cocartesian.html" class="Module">Categories.Category.Cocartesian</a>
<a id="296" class="Keyword">open</a> <a id="301" class="Keyword">import</a> <a id="308" href="Categories.Category.Cartesian.html" class="Module">Categories.Category.Cartesian</a>
<a id="338" class="Keyword">open</a> <a id="343" class="Keyword">import</a> <a id="350" href="Categories.Object.Terminal.html" class="Module">Categories.Object.Terminal</a>
<a id="377" class="Keyword">open</a> <a id="382" class="Keyword">import</a> <a id="389" href="Categories.Category.Construction.F-Coalgebras.html" class="Module">Categories.Category.Construction.F-Coalgebras</a>
<a id="435" class="Keyword">open</a> <a id="440" class="Keyword">import</a> <a id="447" href="Categories.Functor.Coalgebra.html" class="Module">Categories.Functor.Coalgebra</a>
<a id="476" class="Keyword">open</a> <a id="481" class="Keyword">import</a> <a id="488" href="Categories.Functor.html" class="Module">Categories.Functor</a>
<a id="507" class="Keyword">open</a> <a id="512" class="Keyword">import</a> <a id="519" href="Categories.Functor.Algebra.html" class="Module">Categories.Functor.Algebra</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="596" class="Keyword">open</a> <a id="601" class="Keyword">import</a> <a id="608" href="Categories.Category.Construction.F-Coalgebras.html" class="Module">Categories.Category.Construction.F-Coalgebras</a>
<a id="654" class="Keyword">import</a> <a id="661" href="Categories.Morphism.html" class="Module">Categories.Morphism</a> <a id="681" class="Symbol">as</a> <a id="684" class="Module">M</a>
<a id="686" class="Keyword">import</a> <a id="693" href="Categories.Morphism.Reasoning.html" class="Module">Categories.Morphism.Reasoning</a> <a id="723" class="Symbol">as</a> <a id="726" class="Module">MR</a>
</pre>-->
<h2 id="summary">Summary</h2>
<p>This file introduces the delay monad <strong><em>D</em></strong></p>
<ul class="task-list">
<li><input type="checkbox" disabled="" checked="" /><em>Proposition
1</em> Characterization of the delay monad <strong><em>D</em></strong>
(here treated as definition)</li>
<li><input type="checkbox" disabled="" /><em>Proposition 2</em>
<strong><em>D</em></strong> is commutative</li>
</ul>
<h2 id="code">Code</h2>
<pre class="Agda"><a id="953" class="Keyword">module</a> <a id="960" href="Monad.Instance.Delay.html" class="Module">Monad.Instance.Delay</a> <a id="981" class="Symbol">{</a><a id="982" href="Monad.Instance.Delay.html#982" class="Bound">o</a> <a id="984" href="Monad.Instance.Delay.html#984" class="Bound"></a> <a id="986" href="Monad.Instance.Delay.html#986" class="Bound">e</a><a id="987" class="Symbol">}</a> <a id="989" class="Symbol">(</a><a id="990" href="Monad.Instance.Delay.html#990" class="Bound">ED</a> <a id="993" class="Symbol">:</a> <a id="995" href="Categories.Category.Extensive.Bundle.html#781" class="Record">ExtensiveDistributiveCategory</a> <a id="1025" href="Monad.Instance.Delay.html#982" class="Bound">o</a> <a id="1027" href="Monad.Instance.Delay.html#984" class="Bound"></a> <a id="1029" href="Monad.Instance.Delay.html#986" class="Bound">e</a><a id="1030" class="Symbol">)</a> <a id="1032" class="Keyword">where</a>
<a id="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="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="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="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="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="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="1279" class="Keyword">open</a> <a id="1284" 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="1312" class="Keyword">open</a> <a id="1317" href="Categories.Category.Construction.F-Coalgebras.html#2828" class="Module">CoLambek</a>
</pre>
<h3
id="proposition-1-characterization-of-the-delay-monad-d"><em>Proposition
1</em>: Characterization of the delay monad
<strong><em>D</em></strong></h3>
<p>First I postulate the Functor <em>D</em>, maybe I should derive it…
<strong>TODO</strong>: - how to define using final coalgebra(s)? - DX
can be defined as retract of infinite streams, how? - how to express
<strong>Theorem 8</strong> in agda?</p>
<pre class="Agda"> <a id="1620" class="Keyword">record</a> <a id="DelayFunctor"></a><a id="1627" href="Monad.Instance.Delay.html#1627" class="Record">DelayFunctor</a> <a id="1640" class="Symbol">:</a> <a id="1642" href="Agda.Primitive.html#320" class="Primitive">Set</a> <a id="1646" class="Symbol">(</a><a id="1647" href="Monad.Instance.Delay.html#982" class="Bound">o</a> <a id="1649" href="Agda.Primitive.html#804" class="Primitive Operator"></a> <a id="1651" href="Monad.Instance.Delay.html#984" class="Bound"></a> <a id="1653" href="Agda.Primitive.html#804" class="Primitive Operator"></a> <a id="1655" href="Monad.Instance.Delay.html#986" class="Bound">e</a><a id="1656" class="Symbol">)</a> <a id="1658" class="Keyword">where</a>
<a id="1668" class="Keyword">field</a>
<a id="DelayFunctor.D"></a><a id="1680" href="Monad.Instance.Delay.html#1680" class="Field">D</a> <a id="1682" class="Symbol">:</a> <a id="1684" href="Categories.Functor.html#283" class="Function">Endofunctor</a> <a id="1696" href="Monad.Instance.Delay.html#1093" class="Field">C</a>
<a id="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="1760" class="Keyword">field</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="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="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>
</pre>
<p>Now lets define the monad:</p>
<pre class="Agda"> <a id="2133" class="Keyword">record</a> <a id="DelayMonad"></a><a id="2140" href="Monad.Instance.Delay.html#2140" class="Record">DelayMonad</a> <a id="2151" class="Symbol">:</a> <a id="2153" href="Agda.Primitive.html#320" class="Primitive">Set</a> <a id="2157" class="Symbol">(</a><a id="2158" href="Monad.Instance.Delay.html#982" class="Bound">o</a> <a id="2160" href="Agda.Primitive.html#804" class="Primitive Operator"></a> <a id="2162" href="Monad.Instance.Delay.html#984" class="Bound"></a> <a id="2164" href="Agda.Primitive.html#804" class="Primitive Operator"></a> <a id="2166" href="Monad.Instance.Delay.html#986" class="Bound">e</a><a id="2167" class="Symbol">)</a> <a id="2169" class="Keyword">where</a>
<a id="2179" class="Keyword">field</a>
<a id="DelayMonad.D"></a><a id="2191" href="Monad.Instance.Delay.html#2191" class="Field">D</a> <a id="2193" class="Symbol">:</a> <a id="2195" href="Monad.Instance.Delay.html#1627" class="Record">DelayFunctor</a>
<a id="2212" class="Keyword">open</a> <a id="2217" href="Monad.Instance.Delay.html#1627" class="Module">DelayFunctor</a> <a id="2230" href="Monad.Instance.Delay.html#2191" class="Field">D</a>
<a id="2237" 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.*-law"></a><a id="2293" href="Monad.Instance.Delay.html#2293" class="Field">*-law</a> <a id="2299" class="Symbol">:</a> <a id="2301" class="Symbol"></a> <a id="2303" class="Symbol">{</a><a id="2304" href="Monad.Instance.Delay.html#2304" class="Bound">X</a> <a id="2306" href="Monad.Instance.Delay.html#2306" class="Bound">Y</a><a id="2307" class="Symbol">}</a> <a id="2309" class="Symbol">{</a><a id="2310" href="Monad.Instance.Delay.html#2310" class="Bound">f</a> <a id="2312" class="Symbol">:</a> <a id="2314" href="Monad.Instance.Delay.html#2304" class="Bound">X</a> <a id="2316" href="Categories.Category.Core.html#575" class="Function Operator"></a> <a id="2318" href="Monad.Instance.Delay.html#1741" class="Function">D₀</a> <a id="2321" href="Monad.Instance.Delay.html#2306" class="Bound">Y</a><a id="2322" class="Symbol">}</a> <a id="2324" class="Symbol"></a> <a id="2326" href="Monad.Instance.Delay.html#1886" class="Function">out</a> <a id="2330" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="2332" class="Symbol">(</a><a id="2333" href="Monad.Instance.Delay.html#2310" class="Bound">f</a> <a id="2335" href="Monad.Instance.Delay.html#2249" class="Field Operator">*</a><a id="2336" class="Symbol">)</a> <a id="2338" href="Categories.Category.Core.html#595" class="Function Operator"></a> <a id="2340" href="Categories.Object.Coproduct.html#532" class="Function Operator">[</a> <a id="2342" href="Monad.Instance.Delay.html#1886" class="Function">out</a> <a id="2346" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="2348" href="Monad.Instance.Delay.html#2310" class="Bound">f</a> <a id="2350" href="Categories.Object.Coproduct.html#532" class="Function Operator">,</a> <a id="2352" href="Categories.Object.Coproduct.html#512" class="Function">i₂</a> <a id="2355" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="2357" class="Symbol">(</a><a id="2358" href="Monad.Instance.Delay.html#2310" class="Bound">f</a> <a id="2360" href="Monad.Instance.Delay.html#2249" class="Field Operator">*</a><a id="2361" class="Symbol">)</a> <a id="2363" href="Categories.Object.Coproduct.html#532" class="Function Operator">]</a> <a id="2365" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="2367" href="Monad.Instance.Delay.html#1886" class="Function">out</a>
<a id="DelayMonad.*-unique"></a><a id="2377" href="Monad.Instance.Delay.html#2377" class="Field">*-unique</a> <a id="2386" class="Symbol">:</a> <a id="2388" class="Symbol"></a> <a id="2390" class="Symbol">{</a><a id="2391" href="Monad.Instance.Delay.html#2391" class="Bound">X</a> <a id="2393" href="Monad.Instance.Delay.html#2393" class="Bound">Y</a><a id="2394" class="Symbol">}</a> <a id="2396" class="Symbol">(</a><a id="2397" href="Monad.Instance.Delay.html#2397" class="Bound">f</a> <a id="2399" class="Symbol">:</a> <a id="2401" href="Monad.Instance.Delay.html#2391" class="Bound">X</a> <a id="2403" href="Categories.Category.Core.html#575" class="Function Operator"></a> <a id="2405" href="Monad.Instance.Delay.html#1741" class="Function">D₀</a> <a id="2408" href="Monad.Instance.Delay.html#2393" class="Bound">Y</a><a id="2409" class="Symbol">)</a> <a id="2411" class="Symbol">(</a><a id="2412" href="Monad.Instance.Delay.html#2412" class="Bound">h</a> <a id="2414" class="Symbol">:</a> <a id="2416" href="Monad.Instance.Delay.html#1741" class="Function">D₀</a> <a id="2419" href="Monad.Instance.Delay.html#2391" class="Bound">X</a> <a id="2421" href="Categories.Category.Core.html#575" class="Function Operator"></a> <a id="2423" href="Monad.Instance.Delay.html#1741" class="Function">D₀</a> <a id="2426" href="Monad.Instance.Delay.html#2393" class="Bound">Y</a><a id="2427" class="Symbol">)</a> <a id="2429" class="Symbol"></a> <a id="2431" href="Monad.Instance.Delay.html#2412" class="Bound">h</a> <a id="2433" href="Categories.Category.Core.html#595" class="Function Operator"></a> <a id="2435" href="Monad.Instance.Delay.html#2397" class="Bound">f</a> <a id="2437" href="Monad.Instance.Delay.html#2249" class="Field Operator">*</a>
<a id="DelayMonad.*-resp-≈"></a><a id="2445" href="Monad.Instance.Delay.html#2445" class="Field">*-resp-≈</a> <a id="2454" class="Symbol">:</a> <a id="2456" class="Symbol"></a> <a id="2458" class="Symbol">{</a><a id="2459" href="Monad.Instance.Delay.html#2459" class="Bound">X</a> <a id="2461" href="Monad.Instance.Delay.html#2461" class="Bound">Y</a><a id="2462" class="Symbol">}</a> <a id="2464" class="Symbol">{</a><a id="2465" href="Monad.Instance.Delay.html#2465" class="Bound">f</a> <a id="2467" href="Monad.Instance.Delay.html#2467" class="Bound">h</a> <a id="2469" class="Symbol">:</a> <a id="2471" href="Monad.Instance.Delay.html#2459" class="Bound">X</a> <a id="2473" href="Categories.Category.Core.html#575" class="Function Operator"></a> <a id="2475" href="Monad.Instance.Delay.html#1741" class="Function">D₀</a> <a id="2478" href="Monad.Instance.Delay.html#2461" class="Bound">Y</a><a id="2479" class="Symbol">}</a> <a id="2481" class="Symbol"></a> <a id="2483" href="Monad.Instance.Delay.html#2465" class="Bound">f</a> <a id="2485" href="Categories.Category.Core.html#595" class="Function Operator"></a> <a id="2487" href="Monad.Instance.Delay.html#2467" class="Bound">h</a> <a id="2489" class="Symbol"></a> <a id="2491" href="Monad.Instance.Delay.html#2465" class="Bound">f</a> <a id="2493" href="Monad.Instance.Delay.html#2249" class="Field Operator">*</a> <a id="2495" href="Categories.Category.Core.html#595" class="Function Operator"></a> <a id="2497" href="Monad.Instance.Delay.html#2467" class="Bound">h</a> <a id="2499" href="Monad.Instance.Delay.html#2249" class="Field Operator">*</a>
<a id="DelayMonad.unitLaw"></a><a id="2507" href="Monad.Instance.Delay.html#2507" class="Function">unitLaw</a> <a id="2515" class="Symbol">:</a> <a id="2517" class="Symbol"></a> <a id="2519" class="Symbol">{</a><a id="2520" href="Monad.Instance.Delay.html#2520" class="Bound">X</a><a id="2521" class="Symbol">}</a> <a id="2523" class="Symbol"></a> <a id="2525" href="Monad.Instance.Delay.html#1886" class="Function">out</a> <a id="2529" class="Symbol">{</a><a id="2530" href="Monad.Instance.Delay.html#2520" class="Bound">X</a><a id="2531" class="Symbol">}</a> <a id="2533" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="2535" href="Monad.Instance.Delay.html#1772" class="Function">now</a> <a id="2539" class="Symbol">{</a><a id="2540" href="Monad.Instance.Delay.html#2520" class="Bound">X</a><a id="2541" class="Symbol">}</a> <a id="2543" href="Categories.Category.Core.html#595" class="Function Operator"></a> <a id="2545" href="Categories.Object.Coproduct.html#492" class="Function">i₁</a>
<a id="2552" href="Monad.Instance.Delay.html#2507" class="Function">unitLaw</a> <a id="2560" class="Symbol">=</a> <a id="2562" href="Relation.Binary.Reasoning.Base.Single.html#1925" class="Function Operator">begin</a>
<a id="2575" href="Monad.Instance.Delay.html#1886" class="Function">out</a> <a id="2579" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="2581" href="Monad.Instance.Delay.html#1772" class="Function">now</a> <a id="2585" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function">≈⟨</a> <a id="2588" href="Categories.Category.Core.html#2734" class="Function Operator">refl⟩∘⟨</a> <a id="2596" href="Relation.Binary.Structures.html#1603" class="Function">sym</a> <a id="2600" href="Categories.Object.Coproduct.html#569" class="Function">inject₁</a> <a id="2608" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function"></a>
<a id="2617" href="Monad.Instance.Delay.html#1886" class="Function">out</a> <a id="2621" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="2623" href="Categories.Object.Coproduct.html#532" class="Function Operator">[</a> <a id="2625" href="Monad.Instance.Delay.html#1772" class="Function">now</a> <a id="2629" href="Categories.Object.Coproduct.html#532" class="Function Operator">,</a> <a id="2631" href="Monad.Instance.Delay.html#1801" class="Function">later</a> <a id="2637" href="Categories.Object.Coproduct.html#532" class="Function Operator">]</a> <a id="2639" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="2641" href="Categories.Object.Coproduct.html#492" class="Function">i₁</a> <a id="2644" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function">≈⟨</a> <a id="2647" href="Categories.Morphism.Reasoning.Core.html#6851" class="Function">cancelˡ</a> <a id="2655" class="Symbol">(</a><a id="2656" href="Categories.Morphism.html#1586" class="Function">IsIso.isoˡ</a> <a id="2667" href="Monad.Instance.Delay.html#1835" class="Function">isIso</a><a id="2672" class="Symbol">)</a> <a id="2674" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function"></a>
<a id="2682" href="Categories.Object.Coproduct.html#492" class="Function">i₁</a> <a id="2685" href="Relation.Binary.Reasoning.Base.Single.html#2564" class="Function Operator"></a>
<a id="DelayMonad.toMonad"></a><a id="2692" href="Monad.Instance.Delay.html#2692" class="Function">toMonad</a> <a id="2700" class="Symbol">:</a> <a id="2702" href="Categories.Monad.Construction.Kleisli.html#882" class="Function">KleisliTriple</a> <a id="2716" href="Monad.Instance.Delay.html#1093" class="Field">C</a>
<a id="2722" href="Monad.Instance.Delay.html#2692" class="Function">toMonad</a> <a id="2730" class="Symbol">=</a> <a id="2732" class="Keyword">record</a>
<a id="2745" class="Symbol">{</a> <a id="2747" href="Categories.Monad.Relative.html#834" class="Field">F₀</a> <a id="2750" class="Symbol">=</a> <a id="2752" href="Monad.Instance.Delay.html#1741" class="Function">D₀</a>
<a id="2761" class="Symbol">;</a> <a id="2763" href="Categories.Monad.Relative.html#857" class="Field">unit</a> <a id="2768" class="Symbol">=</a> <a id="2770" href="Monad.Instance.Delay.html#1772" class="Function">now</a>
<a id="2780" class="Symbol">;</a> <a id="2782" href="Categories.Monad.Relative.html#895" class="Field">extend</a> <a id="2789" class="Symbol">=</a> <a id="2791" href="Monad.Instance.Delay.html#2249" class="Field Operator">_*</a>
<a id="2800" class="Symbol">;</a> <a id="2802" href="Categories.Monad.Relative.html#953" class="Field">identityʳ</a> <a id="2812" class="Symbol">=</a> <a id="2814" class="Symbol">λ</a> <a id="2816" class="Symbol">{</a><a id="2817" href="Monad.Instance.Delay.html#2817" class="Bound">X</a><a id="2818" class="Symbol">}</a> <a id="2820" class="Symbol">{</a><a id="2821" href="Monad.Instance.Delay.html#2821" class="Bound">Y</a><a id="2822" class="Symbol">}</a> <a id="2824" class="Symbol">{</a><a id="2825" href="Monad.Instance.Delay.html#2825" class="Bound">k</a><a id="2826" class="Symbol">}</a> <a id="2828" class="Symbol"></a> <a id="2830" href="Relation.Binary.Reasoning.Base.Single.html#1925" class="Function Operator">begin</a>
<a id="2845" href="Monad.Instance.Delay.html#2825" class="Bound">k</a> <a id="2847" href="Monad.Instance.Delay.html#2249" class="Field Operator">*</a> <a id="2849" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="2851" href="Monad.Instance.Delay.html#1772" class="Function">now</a> <a id="2855" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function">≈⟨</a> <a id="2858" href="Categories.Morphism.Reasoning.Core.html#3063" class="Function">introˡ</a> <a id="2865" class="Symbol">(</a><a id="2866" href="Categories.Morphism.html#1612" class="Function">IsIso.isoʳ</a> <a id="2877" href="Monad.Instance.Delay.html#1835" class="Function">isIso</a><a id="2882" class="Symbol">)</a> <a id="2884" href="Categories.Category.Core.html#2837" class="Function Operator">⟩∘⟨refl</a> <a id="2892" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function"></a>
<a id="2903" class="Symbol">((</a><a id="2905" href="Categories.Object.Coproduct.html#532" class="Function Operator">[</a> <a id="2907" href="Monad.Instance.Delay.html#1772" class="Function">now</a> <a id="2911" href="Categories.Object.Coproduct.html#532" class="Function Operator">,</a> <a id="2913" href="Monad.Instance.Delay.html#1801" class="Function">later</a> <a id="2919" href="Categories.Object.Coproduct.html#532" class="Function Operator">]</a> <a id="2921" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="2923" href="Monad.Instance.Delay.html#1886" class="Function">out</a><a id="2926" class="Symbol">)</a> <a id="2928" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="2930" href="Monad.Instance.Delay.html#2825" class="Bound">k</a> <a id="2932" href="Monad.Instance.Delay.html#2249" class="Field Operator">*</a><a id="2933" class="Symbol">)</a> <a id="2935" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="2937" href="Monad.Instance.Delay.html#1772" class="Function">now</a> <a id="2941" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function">≈⟨</a> <a id="2944" href="Categories.Morphism.Reasoning.Core.html#1914" class="Function">pullʳ</a> <a id="2950" href="Monad.Instance.Delay.html#2293" class="Field">*-law</a> <a id="2956" href="Categories.Category.Core.html#2837" class="Function Operator">⟩∘⟨refl</a> <a id="2964" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function"></a>
<a id="2974" class="Symbol">(</a><a id="2975" href="Categories.Object.Coproduct.html#532" class="Function Operator">[</a> <a id="2977" href="Monad.Instance.Delay.html#1772" class="Function">now</a> <a id="2981" href="Categories.Object.Coproduct.html#532" class="Function Operator">,</a> <a id="2983" href="Monad.Instance.Delay.html#1801" class="Function">later</a> <a id="2989" href="Categories.Object.Coproduct.html#532" class="Function Operator">]</a> <a id="2991" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="2993" href="Categories.Object.Coproduct.html#532" class="Function Operator">[</a> <a id="2995" href="Monad.Instance.Delay.html#1886" class="Function">out</a> <a id="2999" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="3001" href="Monad.Instance.Delay.html#2825" class="Bound">k</a> <a id="3003" href="Categories.Object.Coproduct.html#532" class="Function Operator">,</a> <a id="3005" href="Categories.Object.Coproduct.html#512" class="Function">i₂</a> <a id="3008" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="3010" class="Symbol">(</a><a id="3011" href="Monad.Instance.Delay.html#2825" class="Bound">k</a> <a id="3013" href="Monad.Instance.Delay.html#2249" class="Field Operator">*</a><a id="3014" class="Symbol">)</a> <a id="3016" href="Categories.Object.Coproduct.html#532" class="Function Operator">]</a> <a id="3018" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="3020" href="Monad.Instance.Delay.html#1886" class="Function">out</a><a id="3023" class="Symbol">)</a> <a id="3025" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="3027" href="Monad.Instance.Delay.html#1772" class="Function">now</a> <a id="3031" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function">≈⟨</a> <a id="3034" href="Categories.Morphism.Reasoning.Core.html#1914" class="Function">pullʳ</a> <a id="3040" class="Symbol">(</a><a id="3041" href="Categories.Morphism.Reasoning.Core.html#1914" class="Function">pullʳ</a> <a id="3047" href="Monad.Instance.Delay.html#2507" class="Function">unitLaw</a><a id="3054" class="Symbol">)</a> <a id="3056" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function"></a>
<a id="3066" href="Categories.Object.Coproduct.html#532" class="Function Operator">[</a> <a id="3068" href="Monad.Instance.Delay.html#1772" class="Function">now</a> <a id="3072" href="Categories.Object.Coproduct.html#532" class="Function Operator">,</a> <a id="3074" href="Monad.Instance.Delay.html#1801" class="Function">later</a> <a id="3080" href="Categories.Object.Coproduct.html#532" class="Function Operator">]</a> <a id="3082" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="3084" href="Categories.Object.Coproduct.html#532" class="Function Operator">[</a> <a id="3086" href="Monad.Instance.Delay.html#1886" class="Function">out</a> <a id="3090" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="3092" href="Monad.Instance.Delay.html#2825" class="Bound">k</a> <a id="3094" href="Categories.Object.Coproduct.html#532" class="Function Operator">,</a> <a id="3096" href="Categories.Object.Coproduct.html#512" class="Function">i₂</a> <a id="3099" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="3101" class="Symbol">(</a><a id="3102" href="Monad.Instance.Delay.html#2825" class="Bound">k</a> <a id="3104" href="Monad.Instance.Delay.html#2249" class="Field Operator">*</a><a id="3105" class="Symbol">)</a> <a id="3107" href="Categories.Object.Coproduct.html#532" class="Function Operator">]</a> <a id="3109" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="3111" href="Categories.Object.Coproduct.html#492" class="Function">i₁</a> <a id="3114" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function">≈⟨</a> <a id="3117" href="Categories.Category.Core.html#2734" class="Function Operator">refl⟩∘⟨</a> <a id="3125" href="Categories.Object.Coproduct.html#569" class="Function">inject₁</a> <a id="3133" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function"></a>
<a id="3143" href="Categories.Object.Coproduct.html#532" class="Function Operator">[</a> <a id="3145" href="Monad.Instance.Delay.html#1772" class="Function">now</a> <a id="3149" href="Categories.Object.Coproduct.html#532" class="Function Operator">,</a> <a id="3151" href="Monad.Instance.Delay.html#1801" class="Function">later</a> <a id="3157" href="Categories.Object.Coproduct.html#532" class="Function Operator">]</a> <a id="3159" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="3161" href="Monad.Instance.Delay.html#1886" class="Function">out</a> <a id="3165" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="3167" href="Monad.Instance.Delay.html#2825" class="Bound">k</a> <a id="3169" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function">≈⟨</a> <a id="3172" href="Categories.Morphism.Reasoning.Core.html#6851" class="Function">cancelˡ</a> <a id="3180" class="Symbol">(</a><a id="3181" href="Categories.Morphism.html#1612" class="Function">IsIso.isoʳ</a> <a id="3192" href="Monad.Instance.Delay.html#1835" class="Function">isIso</a><a id="3197" class="Symbol">)</a> <a id="3199" href="Relation.Binary.Reasoning.Setoid.html#1061" class="Function"></a>
<a id="3209" href="Monad.Instance.Delay.html#2825" class="Bound">k</a> <a id="3211" href="Relation.Binary.Reasoning.Base.Single.html#2564" class="Function Operator"></a>
<a id="3219" class="Symbol">;</a> <a id="3221" href="Categories.Monad.Relative.html#1025" class="Field">identityˡ</a> <a id="3231" class="Symbol">=</a> <a id="3233" class="Symbol">λ</a> <a id="3235" class="Symbol">{</a><a id="3236" href="Monad.Instance.Delay.html#3236" class="Bound">X</a><a id="3237" class="Symbol">}</a> <a id="3239" class="Symbol"></a> <a id="3241" href="Relation.Binary.Structures.html#1603" class="Function">sym</a> <a id="3245" class="Symbol">(</a><a id="3246" href="Monad.Instance.Delay.html#2377" class="Field">*-unique</a> <a id="3255" href="Monad.Instance.Delay.html#1772" class="Function">now</a> <a id="3259" href="Monad.Instance.Delay.html#1102" class="Function">idC</a><a id="3262" class="Symbol">)</a>
<a id="3270" class="Symbol">;</a> <a id="3272" href="Categories.Monad.Relative.html#1078" class="Field">assoc</a> <a id="3278" class="Symbol">=</a> <a id="3280" class="Symbol">λ</a> <a id="3282" class="Symbol">{</a><a id="3283" href="Monad.Instance.Delay.html#3283" class="Bound">X</a><a id="3284" class="Symbol">}</a> <a id="3286" class="Symbol">{</a><a id="3287" href="Monad.Instance.Delay.html#3287" class="Bound">Y</a><a id="3288" class="Symbol">}</a> <a id="3290" class="Symbol">{</a><a id="3291" href="Monad.Instance.Delay.html#3291" class="Bound">Z</a><a id="3292" class="Symbol">}</a> <a id="3294" class="Symbol">{</a><a id="3295" href="Monad.Instance.Delay.html#3295" class="Bound">f</a><a id="3296" class="Symbol">}</a> <a id="3298" class="Symbol">{</a><a id="3299" href="Monad.Instance.Delay.html#3299" class="Bound">g</a><a id="3300" class="Symbol">}</a> <a id="3302" class="Symbol"></a> <a id="3304" href="Relation.Binary.Structures.html#1603" class="Function">sym</a> <a id="3308" class="Symbol">(</a><a id="3309" href="Monad.Instance.Delay.html#2377" class="Field">*-unique</a> <a id="3318" class="Symbol">((</a><a id="3320" href="Monad.Instance.Delay.html#3299" class="Bound">g</a> <a id="3322" href="Monad.Instance.Delay.html#2249" class="Field Operator">*</a><a id="3323" class="Symbol">)</a> <a id="3325" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="3327" href="Monad.Instance.Delay.html#3295" class="Bound">f</a><a id="3328" class="Symbol">)</a> <a id="3330" class="Symbol">((</a><a id="3332" href="Monad.Instance.Delay.html#3299" class="Bound">g</a> <a id="3334" href="Monad.Instance.Delay.html#2249" class="Field Operator">*</a><a id="3335" class="Symbol">)</a> <a id="3337" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="3339" class="Symbol">(</a><a id="3340" href="Monad.Instance.Delay.html#3295" class="Bound">f</a> <a id="3342" href="Monad.Instance.Delay.html#2249" class="Field Operator">*</a><a id="3343" class="Symbol">)))</a>
<a id="3353" class="Symbol">;</a> <a id="3355" href="Categories.Monad.Relative.html#1190" class="Field">sym-assoc</a> <a id="3365" class="Symbol">=</a> <a id="3367" class="Symbol">λ</a> <a id="3369" class="Symbol">{</a><a id="3370" href="Monad.Instance.Delay.html#3370" class="Bound">X</a><a id="3371" class="Symbol">}</a> <a id="3373" class="Symbol">{</a><a id="3374" href="Monad.Instance.Delay.html#3374" class="Bound">Y</a><a id="3375" class="Symbol">}</a> <a id="3377" class="Symbol">{</a><a id="3378" href="Monad.Instance.Delay.html#3378" class="Bound">Z</a><a id="3379" class="Symbol">}</a> <a id="3381" class="Symbol">{</a><a id="3382" href="Monad.Instance.Delay.html#3382" class="Bound">f</a><a id="3383" class="Symbol">}</a> <a id="3385" class="Symbol">{</a><a id="3386" href="Monad.Instance.Delay.html#3386" class="Bound">g</a><a id="3387" class="Symbol">}</a> <a id="3389" class="Symbol"></a> <a id="3391" href="Monad.Instance.Delay.html#2377" class="Field">*-unique</a> <a id="3400" class="Symbol">((</a><a id="3402" href="Monad.Instance.Delay.html#3386" class="Bound">g</a> <a id="3404" href="Monad.Instance.Delay.html#2249" class="Field Operator">*</a><a id="3405" class="Symbol">)</a> <a id="3407" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="3409" href="Monad.Instance.Delay.html#3382" class="Bound">f</a><a id="3410" class="Symbol">)</a> <a id="3412" class="Symbol">((</a><a id="3414" href="Monad.Instance.Delay.html#3386" class="Bound">g</a> <a id="3416" href="Monad.Instance.Delay.html#2249" class="Field Operator">*</a><a id="3417" class="Symbol">)</a> <a id="3419" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="3421" class="Symbol">(</a><a id="3422" href="Monad.Instance.Delay.html#3382" class="Bound">f</a> <a id="3424" href="Monad.Instance.Delay.html#2249" class="Field Operator">*</a><a id="3425" class="Symbol">))</a>
<a id="3434" class="Symbol">;</a> <a id="3436" href="Categories.Monad.Relative.html#1306" class="Field">extend-≈</a> <a id="3445" class="Symbol">=</a> <a id="3447" href="Monad.Instance.Delay.html#2445" class="Field">*-resp-≈</a>
<a id="3462" class="Symbol">}</a>
</pre>
<h3 id="definition-30-search-algebras">Definition 30:
Search-Algebras</h3>
<pre class="Agda"> <a id="3515" class="Keyword">record</a> <a id="SearchAlgebra"></a><a id="3522" href="Monad.Instance.Delay.html#3522" class="Record">SearchAlgebra</a> <a id="3536" class="Symbol">(</a><a id="3537" href="Monad.Instance.Delay.html#3537" class="Bound">DF</a> <a id="3540" class="Symbol">:</a> <a id="3542" href="Monad.Instance.Delay.html#1627" class="Record">DelayFunctor</a><a id="3554" class="Symbol">)</a> <a id="3556" class="Symbol">:</a> <a id="3558" href="Agda.Primitive.html#320" class="Primitive">Set</a> <a id="3562" class="Symbol">(</a><a id="3563" href="Monad.Instance.Delay.html#982" class="Bound">o</a> <a id="3565" href="Agda.Primitive.html#804" class="Primitive Operator"></a> <a id="3567" href="Monad.Instance.Delay.html#984" class="Bound"></a> <a id="3569" href="Agda.Primitive.html#804" class="Primitive Operator"></a> <a id="3571" href="Monad.Instance.Delay.html#986" class="Bound">e</a><a id="3572" class="Symbol">)</a> <a id="3574" class="Keyword">where</a>
<a id="3584" class="Keyword">open</a> <a id="3589" href="Monad.Instance.Delay.html#1627" class="Module">DelayFunctor</a> <a id="3602" href="Monad.Instance.Delay.html#3537" class="Bound">DF</a>
<a id="3614" class="Keyword">field</a>
<a id="SearchAlgebra.FA"></a><a id="3626" href="Monad.Instance.Delay.html#3626" class="Field">FA</a> <a id="3629" class="Symbol">:</a> <a id="3631" href="Categories.Functor.Algebra.html#487" class="Record">F-Algebra</a> <a id="3641" href="Monad.Instance.Delay.html#1680" class="Function">D</a>
<a id="3648" class="Keyword">open</a> <a id="3653" href="Categories.Functor.Algebra.html#487" class="Module">F-Algebra</a> <a id="3663" href="Monad.Instance.Delay.html#3626" class="Field">FA</a>
<a id="3671" class="Keyword">field</a>
<a id="SearchAlgebra.now-id"></a><a id="3683" href="Monad.Instance.Delay.html#3683" class="Field">now-id</a> <a id="3690" class="Symbol">:</a> <a id="3692" href="Categories.Functor.Algebra.html#587" class="Function">α</a> <a id="3694" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="3696" href="Monad.Instance.Delay.html#1772" class="Function">now</a> <a id="3700" href="Categories.Category.Core.html#595" class="Function Operator"></a> <a id="3702" href="Monad.Instance.Delay.html#1102" class="Function">idC</a>
<a id="SearchAlgebra.later-same"></a><a id="3716" href="Monad.Instance.Delay.html#3716" class="Field">later-same</a> <a id="3727" class="Symbol">:</a> <a id="3729" href="Categories.Functor.Algebra.html#587" class="Function">α</a> <a id="3731" href="Categories.Category.Core.html#656" class="Function Operator"></a> <a id="3733" href="Monad.Instance.Delay.html#1801" class="Function">later</a> <a id="3739" href="Categories.Category.Core.html#595" class="Function Operator"></a> <a id="3741" href="Categories.Functor.Algebra.html#587" class="Function">α</a>
</pre>
<h3
id="proposition-31-the-category-of-uniform-iteration-algebras-coincides-with-the-category-of-search-algebras">Proposition
31 : the category of uniform-iteration algebras coincides with the
category of search-algebras</h3>
<p>TODOs:</p>
<ul class="task-list">
<li><input type="checkbox" disabled="" />Define SearchAlgebras (and
SearchAlgebra morphisms)</li>
<li><input type="checkbox" disabled="" />show StrongEquivalence</li>
<li><input type="checkbox" disabled="" />Show
ElgotAlgebra⇔Search+<strong><em>D</em></strong></li>
</ul>
<pre class="Agda"> <a id="4007" class="Keyword">record</a> <a id="SearchAlgebras"></a><a id="4014" href="Monad.Instance.Delay.html#4014" class="Record">SearchAlgebras</a> <a id="4029" class="Symbol">(</a><a id="4030" href="Monad.Instance.Delay.html#4030" class="Bound">DF</a> <a id="4033" class="Symbol">:</a> <a id="4035" href="Monad.Instance.Delay.html#1627" class="Record">DelayFunctor</a><a id="4047" class="Symbol">)</a> <a id="4049" class="Symbol">:</a> <a id="4051" href="Agda.Primitive.html#320" class="Primitive">Set</a> <a id="4055" class="Symbol">(</a><a id="4056" href="Monad.Instance.Delay.html#982" class="Bound">o</a> <a id="4058" href="Agda.Primitive.html#804" class="Primitive Operator"></a> <a id="4060" href="Monad.Instance.Delay.html#984" class="Bound"></a> <a id="4062" href="Agda.Primitive.html#804" class="Primitive Operator"></a> <a id="4064" href="Monad.Instance.Delay.html#986" class="Bound">e</a><a id="4065" class="Symbol">)</a> <a id="4067" class="Keyword">where</a>
<a id="4077" class="Keyword">open</a> <a id="4082" href="Monad.Instance.Delay.html#1627" class="Module">DelayFunctor</a> <a id="4095" href="Monad.Instance.Delay.html#4030" class="Bound">DF</a>
</pre>
</body>
</html>