mirror of
https://git8.cs.fau.de/theses/bsc-leon-vatthauer.git
synced 2024-05-31 07:28:34 +02:00
267 lines
94 KiB
HTML
267 lines
94 KiB
HTML
|
<!DOCTYPE HTML>
|
|||
|
<html><head><meta charset="utf-8"><title>Induction.WellFounded</title><link rel="stylesheet" href="Agda.css"></head><body><pre class="Agda"><a id="1" class="Comment">------------------------------------------------------------------------</a>
|
|||
|
<a id="74" class="Comment">-- The Agda standard library</a>
|
|||
|
<a id="103" class="Comment">--</a>
|
|||
|
<a id="106" class="Comment">-- Well-founded induction</a>
|
|||
|
<a id="132" class="Comment">------------------------------------------------------------------------</a>
|
|||
|
|
|||
|
<a id="206" class="Symbol">{-#</a> <a id="210" class="Keyword">OPTIONS</a> <a id="218" class="Pragma">--cubical-compatible</a> <a id="239" class="Pragma">--safe</a> <a id="246" class="Symbol">#-}</a>
|
|||
|
|
|||
|
<a id="251" class="Keyword">module</a> <a id="258" href="Induction.WellFounded.html" class="Module">Induction.WellFounded</a> <a id="280" class="Keyword">where</a>
|
|||
|
|
|||
|
<a id="287" class="Keyword">open</a> <a id="292" class="Keyword">import</a> <a id="299" href="Data.Product.Base.html" class="Module">Data.Product.Base</a> <a id="317" class="Keyword">using</a> <a id="323" class="Symbol">(</a><a id="324" href="Agda.Builtin.Sigma.html#165" class="Record">Σ</a><a id="325" class="Symbol">;</a> <a id="327" href="Agda.Builtin.Sigma.html#235" class="InductiveConstructor Operator">_,_</a><a id="330" class="Symbol">;</a> <a id="332" href="Data.Product.Base.html#636" class="Field">proj₁</a><a id="337" class="Symbol">;</a> <a id="339" href="Data.Product.Base.html#650" class="Field">proj₂</a><a id="344" class="Symbol">)</a>
|
|||
|
<a id="346" class="Keyword">open</a> <a id="351" class="Keyword">import</a> <a id="358" href="Function.Base.html" class="Module">Function.Base</a> <a id="372" class="Keyword">using</a> <a id="378" class="Symbol">(</a><a id="379" href="Function.Base.html#1115" class="Function Operator">_∘_</a><a id="382" class="Symbol">;</a> <a id="384" href="Function.Base.html#1638" class="Function">flip</a><a id="388" class="Symbol">;</a> <a id="390" href="Function.Base.html#6209" class="Function Operator">_on_</a><a id="394" class="Symbol">)</a>
|
|||
|
<a id="396" class="Keyword">open</a> <a id="401" class="Keyword">import</a> <a id="408" href="Induction.html" class="Module">Induction</a>
|
|||
|
<a id="418" class="Keyword">open</a> <a id="423" class="Keyword">import</a> <a id="430" href="Level.html" class="Module">Level</a> <a id="436" class="Keyword">using</a> <a id="442" class="Symbol">(</a><a id="443" href="Agda.Primitive.html#742" class="Postulate">Level</a><a id="448" class="Symbol">;</a> <a id="450" href="Agda.Primitive.html#961" class="Primitive Operator">_⊔_</a><a id="453" class="Symbol">)</a>
|
|||
|
<a id="455" class="Keyword">open</a> <a id="460" class="Keyword">import</a> <a id="467" href="Relation.Binary.Core.html" class="Module">Relation.Binary.Core</a> <a id="488" class="Keyword">using</a> <a id="494" class="Symbol">(</a><a id="495" href="Relation.Binary.Core.html#896" class="Function">Rel</a><a id="498" class="Symbol">)</a>
|
|||
|
<a id="500" class="Keyword">open</a> <a id="505" class="Keyword">import</a> <a id="512" href="Relation.Binary.Definitions.html" class="Module">Relation.Binary.Definitions</a>
|
|||
|
<a id="542" class="Keyword">using</a> <a id="548" class="Symbol">(</a><a id="549" href="Relation.Binary.Definitions.html#1587" class="Function">Symmetric</a><a id="558" class="Symbol">;</a> <a id="560" href="Relation.Binary.Definitions.html#2590" class="Function">Asymmetric</a><a id="570" class="Symbol">;</a> <a id="572" href="Relation.Binary.Definitions.html#2478" class="Function">Irreflexive</a><a id="583" class="Symbol">;</a> <a id="585" href="Relation.Binary.Definitions.html#5663" class="Function Operator">_Respects₂_</a><a id="596" class="Symbol">;</a>
|
|||
|
<a id="602" href="Relation.Binary.Definitions.html#5335" class="Function Operator">_Respectsʳ_</a><a id="613" class="Symbol">;</a> <a id="615" href="Relation.Binary.Definitions.html#5179" class="Function Operator">_Respects_</a><a id="625" class="Symbol">)</a>
|
|||
|
<a id="627" class="Keyword">open</a> <a id="632" class="Keyword">import</a> <a id="639" href="Relation.Binary.PropositionalEquality.Core.html" class="Module">Relation.Binary.PropositionalEquality.Core</a> <a id="682" class="Keyword">using</a> <a id="688" class="Symbol">(</a><a id="689" href="Agda.Builtin.Equality.html#150" class="Datatype Operator">_≡_</a><a id="692" class="Symbol">;</a> <a id="694" href="Agda.Builtin.Equality.html#207" class="InductiveConstructor">refl</a><a id="698" class="Symbol">)</a>
|
|||
|
<a id="700" class="Keyword">open</a> <a id="705" class="Keyword">import</a> <a id="712" href="Relation.Binary.Consequences.html" class="Module">Relation.Binary.Consequences</a> <a id="741" class="Keyword">using</a> <a id="747" class="Symbol">(</a><a id="748" href="Relation.Binary.Consequences.html#4494" class="Function">asym⇒irr</a><a id="756" class="Symbol">)</a>
|
|||
|
<a id="758" class="Keyword">open</a> <a id="763" class="Keyword">import</a> <a id="770" href="Relation.Unary.html" class="Module">Relation.Unary</a>
|
|||
|
<a id="785" class="Keyword">open</a> <a id="790" class="Keyword">import</a> <a id="797" href="Relation.Nullary.Negation.Core.html" class="Module">Relation.Nullary.Negation.Core</a> <a id="828" class="Keyword">using</a> <a id="834" class="Symbol">(</a><a id="835" href="Relation.Nullary.Negation.Core.html#698" class="Function Operator">¬_</a><a id="837" class="Symbol">)</a>
|
|||
|
|
|||
|
<a id="840" class="Keyword">private</a>
|
|||
|
<a id="850" class="Keyword">variable</a>
|
|||
|
<a id="863" href="Induction.WellFounded.html#863" class="Generalizable">a</a> <a id="865" href="Induction.WellFounded.html#865" class="Generalizable">b</a> <a id="867" href="Induction.WellFounded.html#867" class="Generalizable">ℓ</a> <a id="869" href="Induction.WellFounded.html#869" class="Generalizable">ℓ₁</a> <a id="872" href="Induction.WellFounded.html#872" class="Generalizable">ℓ₂</a> <a id="875" href="Induction.WellFounded.html#875" class="Generalizable">r</a> <a id="877" class="Symbol">:</a> <a id="879" href="Agda.Primitive.html#742" class="Postulate">Level</a>
|
|||
|
<a id="889" href="Induction.WellFounded.html#889" class="Generalizable">A</a> <a id="891" class="Symbol">:</a> <a id="893" href="Agda.Primitive.html#388" class="Primitive">Set</a> <a id="897" href="Induction.WellFounded.html#863" class="Generalizable">a</a>
|
|||
|
<a id="903" href="Induction.WellFounded.html#903" class="Generalizable">B</a> <a id="905" class="Symbol">:</a> <a id="907" href="Agda.Primitive.html#388" class="Primitive">Set</a> <a id="911" href="Induction.WellFounded.html#865" class="Generalizable">b</a>
|
|||
|
|
|||
|
<a id="914" class="Comment">------------------------------------------------------------------------</a>
|
|||
|
<a id="987" class="Comment">-- Definitions</a>
|
|||
|
|
|||
|
<a id="1003" class="Comment">-- When using well-founded recursion you can recurse arbitrarily, as</a>
|
|||
|
<a id="1072" class="Comment">-- long as the arguments become smaller, and "smaller" is</a>
|
|||
|
<a id="1130" class="Comment">-- well-founded.</a>
|
|||
|
|
|||
|
<a id="WfRec"></a><a id="1148" href="Induction.WellFounded.html#1148" class="Function">WfRec</a> <a id="1154" class="Symbol">:</a> <a id="1156" href="Relation.Binary.Core.html#896" class="Function">Rel</a> <a id="1160" href="Induction.WellFounded.html#889" class="Generalizable">A</a> <a id="1162" href="Induction.WellFounded.html#875" class="Generalizable">r</a> <a id="1164" class="Symbol">→</a> <a id="1166" class="Symbol">∀</a> <a id="1168" class="Symbol">{</a><a id="1169" href="Induction.WellFounded.html#1169" class="Bound">ℓ</a><a id="1170" class="Symbol">}</a> <a id="1172" class="Symbol">→</a> <a id="1174" href="Induction.html#777" class="Function">RecStruct</a> <a id="1184" href="Induction.WellFounded.html#889" class="Generalizable">A</a> <a id="1186" href="Induction.WellFounded.html#1169" class="Bound">ℓ</a> <a id="1188" class="Symbol">_</a>
|
|||
|
<a id="1190" href="Induction.WellFounded.html#1148" class="Function">WfRec</a> <a id="1196" href="Induction.WellFounded.html#1196" class="Bound Operator">_<_</a> <a id="1200" href="Induction.WellFounded.html#1200" class="Bound">P</a> <a id="1202" href="Induction.WellFounded.html#1202" class="Bound">x</a> <a id="1204" class="Symbol">=</a> <a id="1206" class="Symbol">∀</a> <a id="1208" class="Symbol">{</a><a id="1209" href="Induction.WellFounded.html#1209" class="Bound">y</a><a id="1210" class="Symbol">}</a> <a id="1212" class="Symbol">→</a> <a id="1214" href="Induction.WellFounded.html#1209" class="Bound">y</a> <a id="1216" href="Induction.WellFounded.html#1196" class="Bound Operator"><</a> <a id="1218" href="Induction.WellFounded.html#1202" class="Bound">x</a> <a id="1220" class="Symbol">→</a> <a id="1222" href="Induction.WellFounded.html#1200" class="Bound">P</a> <a id="1224" href="Induction.WellFounded.html#1209" class="Bound">y</a>
|
|||
|
|
|||
|
<a id="1227" class="Comment">-- The accessibility predicate: x is accessible if everything which is</a>
|
|||
|
<a id="1298" class="Comment">-- smaller than x is also accessible (inductively).</a>
|
|||
|
|
|||
|
<a id="1351" class="Keyword">data</a> <a id="Acc"></a><a id="1356" href="Induction.WellFounded.html#1356" class="Datatype">Acc</a> <a id="1360" class="Symbol">{</a><a id="1361" href="Induction.WellFounded.html#1361" class="Bound">A</a> <a id="1363" class="Symbol">:</a> <a id="1365" href="Agda.Primitive.html#388" class="Primitive">Set</a> <a id="1369" href="Induction.WellFounded.html#863" class="Generalizable">a</a><a id="1370" class="Symbol">}</a> <a id="1372" class="Symbol">(</a><a id="1373" href="Induction.WellFounded.html#1373" class="Bound Operator">_<_</a> <a id="1377" class="Symbol">:</a> <a id="1379" href="Relation.Binary.Core.html#896" class="Function">Rel</a> <a id="1383" href="Induction.WellFounded.html#1361" class="Bound">A</a> <a id="1385" href="Induction.WellFounded.html#867" class="Generalizable">ℓ</a><a id="1386" class="Symbol">)</a> <a id="1388" class="Symbol">(</a><a id="1389" href="Induction.WellFounded.html#1389" class="Bound">x</a> <a id="1391" class="Symbol">:</a> <a id="1393" href="Induction.WellFounded.html#1361" class="Bound">A</a><a id="1394" class="Symbol">)</a> <a id="1396" class="Symbol">:</a> <a id="1398" href="Agda.Primitive.html#388" class="Primitive">Set</a> <a id="1402" class="Symbol">(</a><a id="1403" href="Induction.WellFounded.html#1369" class="Bound">a</a> <a id="1405" href="Agda.Primitive.html#961" class="Primitive Operator">⊔</a> <a id="1407" href="Induction.WellFounded.html#1385" class="Bound">ℓ</a><a id="1408" class="Symbol">)</a> <a id="1410" class="Keyword">where</a>
|
|||
|
<a id="Acc.acc"></a><a id="1418" href="Induction.WellFounded.html#1418" class="InductiveConstructor">acc</a> <a id="1422" class="Symbol">:</a> <a id="1424" class="Symbol">(</a><a id="1425" href="Induction.WellFounded.html#1425" class="Bound">rs</a> <a id="1428" class="Symbol">:</a> <a id="1430" href="Induction.WellFounded.html#1148" class="Function">WfRec</a> <a id="1436" href="Induction.WellFounded.html#1373" class="Bound Operator">_<_</a> <a id="1440" class="Symbol">(</a><a id="1441" href="Induction.WellFounded.html#1356" class="Datatype">Acc</a> <a id="1445" href="Induction.WellFounded.html#1373" class="Bound Operator">_<_</a><a id="1448" class="Symbol">)</a> <a id="1450" href="Induction.WellFounded.html#1389" class="Bound">x</a><a id="1451" class="Symbol">)</a> <a id="1453" class="Symbol">→</a> <a id="1455" href="Induction.WellFounded.html#1356" class="Datatype">Acc</a> <a id="1459" href="Induction.WellFounded.html#1373" class="Bound Operator">_<_</a> <a id="1463" href="Induction.WellFounded.html#1389" class="Bound">x</a>
|
|||
|
|
|||
|
<a id="1466" class="Comment">-- The accessibility predicate encodes what it means to be</a>
|
|||
|
<a id="1525" class="Comment">-- well-founded; if all elements are accessible, then _<_ is</a>
|
|||
|
<a id="1586" class="Comment">-- well-founded.</a>
|
|||
|
|
|||
|
<a id="WellFounded"></a><a id="1604" href="Induction.WellFounded.html#1604" class="Function">WellFounded</a> <a id="1616" class="Symbol">:</a> <a id="1618" href="Relation.Binary.Core.html#896" class="Function">Rel</a> <a id="1622" href="Induction.WellFounded.html#889" class="Generalizable">A</a> <a id="1624" href="Induction.WellFounded.html#867" class="Generalizable">ℓ</a> <a id="1626" class="Symbol">→</a> <a id="1628" href="Agda.Primitive.html#388" class="Primitive">Set</a> <a id="1632" class="Symbol">_</a>
|
|||
|
<a id="1634" href="Induction.WellFounded.html#1604" class="Function">WellFounded</a> <a id="1646" href="Induction.WellFounded.html#1646" class="Bound Operator">_<_</a> <a id="1650" class="Symbol">=</a> <a id="1652" class="Symbol">∀</a> <a id="1654" href="Induction.WellFounded.html#1654" class="Bound">x</a> <a id="1656" class="Symbol">→</a> <a id="1658" href="Induction.WellFounded.html#1356" class="Datatype">Acc</a> <a id="1662" href="Induction.WellFounded.html#1646" class="Bound Operator">_<_</a> <a id="1666" href="Induction.WellFounded.html#1654" class="Bound">x</a>
|
|||
|
|
|||
|
<a id="1669" class="Comment">------------------------------------------------------------------------</a>
|
|||
|
<a id="1742" class="Comment">-- Basic properties</a>
|
|||
|
|
|||
|
<a id="acc-inverse"></a><a id="1763" href="Induction.WellFounded.html#1763" class="Function">acc-inverse</a> <a id="1775" class="Symbol">:</a> <a id="1777" class="Symbol">∀</a> <a id="1779" class="Symbol">{</a><a id="1780" href="Induction.WellFounded.html#1780" class="Bound Operator">_<_</a> <a id="1784" class="Symbol">:</a> <a id="1786" href="Relation.Binary.Core.html#896" class="Function">Rel</a> <a id="1790" href="Induction.WellFounded.html#889" class="Generalizable">A</a> <a id="1792" href="Induction.WellFounded.html#867" class="Generalizable">ℓ</a><a id="1793" class="Symbol">}</a> <a id="1795" class="Symbol">{</a><a id="1796" href="Induction.WellFounded.html#1796" class="Bound">x</a> <a id="1798" class="Symbol">:</a> <a id="1800" href="Induction.WellFounded.html#889" class="Generalizable">A</a><a id="1801" class="Symbol">}</a> <a id="1803" class="Symbol">(</a><a id="1804" href="Induction.WellFounded.html#1804" class="Bound">q</a> <a id="1806" class="Symbol">:</a> <a id="1808" href="Induction.WellFounded.html#1356" class="Datatype">Acc</a> <a id="1812" href="Induction.WellFounded.html#1780" class="Bound Operator">_<_</a> <a id="1816" href="Induction.WellFounded.html#1796" class="Bound">x</a><a id="1817" class="Symbol">)</a> <a id="1819" class="Symbol">→</a>
|
|||
|
<a id="1835" href="Induction.WellFounded.html#1148" class="Function">WfRec</a> <a id="1841" href="Induction.WellFounded.html#1780" class="Bound Operator">_<_</a> <a id="1845" class="Symbol">(</a><a id="1846" href="Induction.WellFounded.html#1356" class="Datatype">Acc</a> <a id="1850" href="Induction.WellFounded.html#1780" class="Bound Operator">_<_</a><a id="1853" class="Symbol">)</a> <a id="1855" href="Induction.WellFounded.html#1796" class="Bound">x</a>
|
|||
|
<a id="1857" href="Induction.WellFounded.html#1763" class="Function">acc-inverse</a> <a id="1869" class="Symbol">(</a><a id="1870" href="Induction.WellFounded.html#1418" class="InductiveConstructor">acc</a> <a id="1874" href="Induction.WellFounded.html#1874" class="Bound">rs</a><a id="1876" class="Symbol">)</a> <a id="1878" href="Induction.WellFounded.html#1878" class="Bound">y<x</a> <a id="1882" class="Symbol">=</a> <a id="1884" href="Induction.WellFounded.html#1874" class="Bound">rs</a> <a id="1887" href="Induction.WellFounded.html#1878" class="Bound">y<x</a>
|
|||
|
|
|||
|
<a id="1892" class="Keyword">module</a> <a id="1899" href="Induction.WellFounded.html#1899" class="Module">_</a> <a id="1901" class="Symbol">{</a><a id="1902" href="Induction.WellFounded.html#1902" class="Bound Operator">_≈_</a> <a id="1906" class="Symbol">:</a> <a id="1908" href="Relation.Binary.Core.html#896" class="Function">Rel</a> <a id="1912" href="Induction.WellFounded.html#889" class="Generalizable">A</a> <a id="1914" href="Induction.WellFounded.html#869" class="Generalizable">ℓ₁</a><a id="1916" class="Symbol">}</a> <a id="1918" class="Symbol">{</a><a id="1919" href="Induction.WellFounded.html#1919" class="Bound Operator">_<_</a> <a id="1923" class="Symbol">:</a> <a id="1925" href="Relation.Binary.Core.html#896" class="Function">Rel</a> <a id="1929" href="Induction.WellFounded.html#889" class="Generalizable">A</a> <a id="1931" href="Induction.WellFounded.html#872" class="Generalizable">ℓ₂</a><a id="1933" class="Symbol">}</a> <a id="1935" class="Keyword">where</a>
|
|||
|
|
|||
|
<a id="1944" href="Induction.WellFounded.html#1944" class="Function">Acc-resp-flip-≈</a> <a id="1960" class="Symbol">:</a> <a id="1962" href="Induction.WellFounded.html#1919" class="Bound Operator">_<_</a> <a id="1966" href="Relation.Binary.Definitions.html#5335" class="Function Operator">Respectsʳ</a> <a id="1976" class="Symbol">(</a><a id="1977" href="Function.Base.html#1638" class="Function">flip</a> <a id="1982" href="Induction.WellFounded.html#1902" class="Bound Operator">_≈_</a><a id="1985" class="Symbol">)</a> <a id="1987" class="Symbol">→</a> <a id="1989" class="Symbol">(</a><a id="1990" href="Induction.WellFounded.html#1356" class="Datatype">Acc</a> <a id="1994" href="Induction.WellFounded.html#1919" class="Bound Operator">_<_</a><a id="1997" class="Symbol">)</a> <a id="1999" href="Relation.Binary.Definitions.html#5179" class="Function Operator">Respects</a> <a id="2008" href="Induction.WellFounded.html#1902" class="Bound Operator">_≈_</a>
|
|||
|
<a id="2014" href="Induction.WellFounded.html#1944" class="Function">Acc-resp-flip-≈</a> <a id="2030" href="Induction.WellFounded.html#2030" class="Bound">respʳ</a> <a id="2036" href="Induction.WellFounded.html#2036" class="Bound">x≈y</a> <a id="2040" class="Symbol">(</a><a id="2041" href="Induction.WellFounded.html#1418" class="InductiveConstructor">acc</a> <a id="2045" href="Induction.WellFounded.html#2045" class="Bound">rec</a><a id="2048" class="Symbol">)</a> <a id="2050" class="Symbol">=</a> <a id="2052" href="Induction.WellFounded.html#1418" class="InductiveConstructor">acc</a> <a id="2056" class="Symbol">λ</a> <a id="2058" href="Induction.WellFounded.html#2058" class="Bound">z<y</a> <a id="2062" class="Symbol">→</a> <a id="2064" href="Induction.WellFounded.html#2045" class="Bound">rec</a> <a id="2068" class="Symbol">(</a><a id="2069" href="Induction.WellFounded.html#2030" class="Bound">respʳ</a> <a id="2075" href="Induction.WellFounded.html#2036" class="Bound">x≈y</a> <a id="2079" href="Induction.WellFounded.html#2058" class="Bound">z<y</a><a id="2082" class="Symbol">)</a>
|
|||
|
|
|||
|
<a id="2087" href="Induction.WellFounded.html#2087" class="Function">Acc-resp-≈</a> <a id="2098" class="Symbol">:</a> <a id="2100" href="Relation.Binary.Definitions.html#1587" class="Function">Symmetric</a> <a id="2110" href="Induction.WellFounded.html#1902" class="Bound Operator">_≈_</a> <a id="2114" class="Symbol">→</a> <a id="2116" href="Induction.WellFounded.html#1919" class="Bound Operator">_<_</a> <a id="2120" href="Relation.Binary.Definitions.html#5335" class="Function Operator">Respectsʳ</a> <a id="2130" href="Induction.WellFounded.html#1902" class="Bound Operator">_≈_</a> <a id="2134" class="Symbol">→</a> <a id="2136" class="Symbol">(</a><a id="2137" href="Induction.WellFounded.html#1356" class="Datatype">Acc</a> <a id="2141" href="Induction.WellFounded.html#1919" class="Bound Operator">_<_</a><a id="2144" class="Symbol">)</a> <a id="2146" href="Relation.Binary.Definitions.html#5179" class="Function Operator">Respects</a> <a id="2155" href="Induction.WellFounded.html#1902" class="Bound Operator">_≈_</a>
|
|||
|
<a id="2161" href="Induction.WellFounded.html#2087" class="Function">Acc-resp-≈</a> <a id="2172" href="Induction.WellFounded.html#2172" class="Bound">sym</a> <a id="2176" href="Induction.WellFounded.html#2176" class="Bound">respʳ</a> <a id="2182" href="Induction.WellFounded.html#2182" class="Bound">x≈y</a> <a id="2186" href="Induction.WellFounded.html#2186" class="Bound">wf</a> <a id="2189" class="Symbol">=</a> <a id="2191" href="Induction.WellFounded.html#1944" class="Function">Acc-resp-flip-≈</a> <a id="2207" class="Symbol">(</a><a id="2208" href="Induction.WellFounded.html#2176" class="Bound">respʳ</a> <a id="2214" href="Function.Base.html#1115" class="Function Operator">∘</a> <a id="2216" href="Induction.WellFounded.html#2172" class="Bound">sym</a><a id="2219" class="Symbol">)</a> <a id="2221" href="Induction.WellFounded.html#2182" class="Bound">x≈y</a> <a id="2225" href="Induction.WellFounded.html#2186" class="Bound">wf</a>
|
|||
|
|
|||
|
<a id="2229" class="Comment">------------------------------------------------------------------------</a>
|
|||
|
<a id="2302" class="Comment">-- Well-founded induction for the subset of accessible elements:</a>
|
|||
|
|
|||
|
<a id="2368" class="Keyword">module</a> <a id="Some"></a><a id="2375" href="Induction.WellFounded.html#2375" class="Module">Some</a> <a id="2380" class="Symbol">{</a><a id="2381" href="Induction.WellFounded.html#2381" class="Bound Operator">_<_</a> <a id="2385" class="Symbol">:</a> <a id="2387" href="Relation.Binary.Core.html#896" class="Function">Rel</a> <a id="2391" href="Induction.WellFounded.html#889" class="Generalizable">A</a> <a id="2393" href="Induction.WellFounded.html#875" class="Generalizable">r</a><a id="2394" class="Symbol">}</a> <a id="2396" class="Symbol">{</a><a id="2397" href="Induction.WellFounded.html#2397" class="Bound">ℓ</a><a id="2398" class="Symbol">}</a> <a id="2400" class="Keyword">where</a>
|
|||
|
|
|||
|
<a id="Some.wfRecBuilder"></a><a id="2409" href="Induction.WellFounded.html#2409" class="Function">wfRecBuilder</a> <a id="2422" class="Symbol">:</a> <a id="2424" href="Induction.html#1578" class="Function">SubsetRecursorBuilder</a> <a id="2446" class="Symbol">(</a><a id="2447" href="Induction.WellFounded.html#1356" class="Datatype">Acc</a> <a id="2451" href="Induction.WellFounded.html#2381" class="Bound Operator">_<_</a><a id="2454" class="Symbol">)</a> <a id="2456" class="Symbol">(</a><a id="2457" href="Induction.WellFounded.html#1148" class="Function">WfRec</a> <a id="2463" href="Induction.WellFounded.html#2381" class="Bound Operator">_<_</a> <a id="2467" class="Symbol">{</a><a id="2468" class="Argument">ℓ</a> <a id="2470" class="Symbol">=</a> <a id="2472" href="Induction.WellFounded.html#2397" class="Bound">ℓ</a><a id="2473" class="Symbol">})</a>
|
|||
|
<a id="2478" href="Induction.WellFounded.html#2409" class="Function">wfRecBuilder</a> <a id="2491" href="Induction.WellFounded.html#2491" class="Bound">P</a> <a id="2493" href="Induction.WellFounded.html#2493" class="Bound">f</a> <a id="2495" href="Induction.WellFounded.html#2495" class="Bound">x</a> <a id="2497" class="Symbol">(</a><a id="2498" href="Induction.WellFounded.html#1418" class="InductiveConstructor">acc</a> <a id="2502" href="Induction.WellFounded.html#2502" class="Bound">rs</a><a id="2504" class="Symbol">)</a> <a id="2506" class="Symbol">=</a> <a id="2508" class="Symbol">λ</a> <a id="2510" href="Induction.WellFounded.html#2510" class="Bound">y<x</a> <a id="2514" class="Symbol">→</a> <a id="2516" href="Induction.WellFounded.html#2493" class="Bound">f</a> <a id="2518" class="Symbol">_</a> <a id="2520" class="Symbol">(</a><a id="2521" href="Induction.WellFounded.html#2409" class="Function">wfRecBuilder</a> <a id="2534" href="Induction.WellFounded.html#2491" class="Bound">P</a> <a id="2536" href="Induction.WellFounded.html#2493" class="Bound">f</a> <a id="2538" class="Symbol">_</a> <a id="2540" class="Symbol">(</a><a id="2541" href="Induction.WellFounded.html#2502" class="Bound">rs</a> <a id="2544" href="Induction.WellFounded.html#2510" class="Bound">y<x</a><a id="2547" class="Symbol">))</a>
|
|||
|
|
|||
|
<a id="Some.wfRec"></a><a id="2553" href="Induction.WellFounded.html#2553" class="Function">wfRec</a> <a id="2559" class="Symbol">:</a> <a id="2561" href="Induction.html#1754" class="Function">SubsetRecursor</a> <a id="2576" class="Symbol">(</a><a id="2577" href="Induction.WellFounded.html#1356" class="Datatype">Acc</a> <a id="2581" href="Induction.WellFounded.html#2381" class="Bound Operator">_<_</a><a id="2584" class="Symbol">)</a> <a id="2586" class="Symbol">(</a><a id="2587" href="Induction.WellFounded.html#1148" class="Function">WfRec</a> <a id="2593" href="Induction.WellFounded.html#2381" class="Bound Operator">_<_</a><a id="2596" class="Symbol">)</a>
|
|||
|
<a id="2600" href="Induction.WellFounded.html#2553" class="Function">wfRec</a> <a id="2606" class="Symbol">=</a> <a id="2608" href="Induction.html#1905" class="Function">subsetBuild</a> <a id="2620" href="Induction.WellFounded.html#2409" class="Function">wfRecBuilder</a>
|
|||
|
|
|||
|
<a id="Some.unfold-wfRec"></a><a id="2636" href="Induction.WellFounded.html#2636" class="Function">unfold-wfRec</a> <a id="2649" class="Symbol">:</a> <a id="2651" class="Symbol">(</a><a id="2652" href="Induction.WellFounded.html#2652" class="Bound">P</a> <a id="2654" class="Symbol">:</a> <a id="2656" href="Relation.Unary.html#1232" class="Function">Pred</a> <a id="2661" href="Induction.WellFounded.html#2391" class="Bound">A</a> <a id="2663" href="Induction.WellFounded.html#2397" class="Bound">ℓ</a><a id="2664" class="Symbol">)</a> <a id="2666" class="Symbol">(</a><a id="2667" href="Induction.WellFounded.html#2667" class="Bound">f</a> <a id="2669" class="Symbol">:</a> <a id="2671" href="Induction.WellFounded.html#1148" class="Function">WfRec</a> <a id="2677" href="Induction.WellFounded.html#2381" class="Bound Operator">_<_</a> <a id="2681" href="Induction.WellFounded.html#2652" class="Bound">P</a> <a id="2683" href="Relation.Unary.html#2539" class="Function Operator">⊆′</a> <a id="2686" href="Induction.WellFounded.html#2652" class="Bound">P</a><a id="2687" class="Symbol">)</a> <a id="2689" class="Symbol">{</a><a id="2690" href="Induction.WellFounded.html#2690" class="Bound">x</a> <a id="2692" class="Symbol">:</a> <a id="2694" href="Induction.WellFounded.html#2391" class="Bound">A</a><a id="2695" class="Symbol">}</a> <a id="2697" class="Symbol">(</a><a id="2698" href="Induction.WellFounded.html#2698" class="Bound">q</a> <a id="2700" class="Symbol">:</a> <a id="2702" href="Induction.WellFounded.html#1356" class="Datatype">Acc</a> <a id="2706" href="Induction.WellFounded.html#2381" class="Bound Operator">_<_</a> <a id="2710" href="Induction.WellFounded.html#2690" class="Bound">x</a><a id="2711" class="Symbol">)</a> <a id="2713" class="Symbol">→</a>
|
|||
|
<a id="2732" href="Induction.WellFounded.html#2553" class="Function">wfRec</a> <a id="2738" href="Induction.WellFounded.html#2652" class="Bound">P</a> <a id="2740" href="Induction.WellFounded.html#2667" class="Bound">f</a> <a id="2742" href="Induction.WellFounded.html#2690" class="Bound">x</a> <a id="2744" href="Induction.WellFounded.html#2698" class="Bound">q</a> <a id="2746" href="Agda.Builtin.Equality.html#150" class="Datatype Operator">≡</a> <a id="2748" href="Induction.WellFounded.html#2667" class="Bound">f</a> <a id="2750" href="Induction.WellFounded.html#2690" class="Bound">x</a> <a id="2752" class="Symbol">λ</a> <a id="2754" href="Induction.WellFounded.html#2754" class="Bound">y<x</a> <a id="2758" class="Symbol">→</a> <a id="2760" href="Induction.WellFounded.html#2553" class="Function">wfRec</a> <a id="2766" href="Induction.WellFounded.html#2652" class="Bound">P</a> <a id="2768" href="Induction.WellFounded.html#2667" class="Bound">f</a> <a id="2770" class="Symbol">_</a> <a id="2772" class="Symbol">(</a><a id="2773" href="Induction.WellFounded.html#1763" class="Function">acc-inverse</a> <a id="2785" href="Induction.WellFounded.html#2698" class="Bound">q</a> <a id="2787" href="Induction.WellFounded.html#2754" class="Bound">y<x</a><a id="2790" class="Symbol">)</a>
|
|||
|
<a id="2794" href="Induction.WellFounded.html#2636" class="Function">unfold-wfRec</a> <a id="2807" href="Induction.WellFounded.html#2807" class="Bound">P</a> <a id="2809" href="Induction.WellFounded.html#2809" class="Bound">f</a> <a id="2811" class="Symbol">(</a><a id="2812" href="Induction.WellFounded.html#1418" class="InductiveConstructor">acc</a> <a id="2816" href="Induction.WellFounded.html#2816" class="Bound">rs</a><a id="2818" class="Symbol">)</a> <a id="2820" class="Symbol">=</a> <a id="2822" href="Agda.Builtin.Equality.html#207" class="InductiveConstructor">refl</a>
|
|||
|
|
|||
|
|
|||
|
<a id="2829" class="Comment">------------------------------------------------------------------------</a>
|
|||
|
<a id="2902" class="Comment">-- Well-founded induction for all elements, assuming they are all</a>
|
|||
|
<a id="2968" class="Comment">-- accessible:</a>
|
|||
|
|
|||
|
<a id="2984" class="Keyword">module</a> <a id="All"></a><a id="2991" href="Induction.WellFounded.html#2991" class="Module">All</a> <a id="2995" class="Symbol">{</a><a id="2996" href="Induction.WellFounded.html#2996" class="Bound Operator">_<_</a> <a id="3000" class="Symbol">:</a> <a id="3002" href="Relation.Binary.Core.html#896" class="Function">Rel</a> <a id="3006" href="Induction.WellFounded.html#889" class="Generalizable">A</a> <a id="3008" href="Induction.WellFounded.html#875" class="Generalizable">r</a><a id="3009" class="Symbol">}</a> <a id="3011" class="Symbol">(</a><a id="3012" href="Induction.WellFounded.html#3012" class="Bound">wf</a> <a id="3015" class="Symbol">:</a> <a id="3017" href="Induction.WellFounded.html#1604" class="Function">WellFounded</a> <a id="3029" href="Induction.WellFounded.html#2996" class="Bound Operator">_<_</a><a id="3032" class="Symbol">)</a> <a id="3034" href="Induction.WellFounded.html#3034" class="Bound">ℓ</a> <a id="3036" class="Keyword">where</a>
|
|||
|
|
|||
|
<a id="All.wfRecBuilder"></a><a id="3045" href="Induction.WellFounded.html#3045" class="Function">wfRecBuilder</a> <a id="3058" class="Symbol">:</a> <a id="3060" href="Induction.html#965" class="Function">RecursorBuilder</a> <a id="3076" class="Symbol">(</a><a id="3077" href="Induction.WellFounded.html#1148" class="Function">WfRec</a> <a id="3083" href="Induction.WellFounded.html#2996" class="Bound Operator">_<_</a> <a id="3087" class="Symbol">{</a><a id="3088" class="Argument">ℓ</a> <a id="3090" class="Symbol">=</a> <a id="3092" href="Induction.WellFounded.html#3034" class="Bound">ℓ</a><a id="3093" class="Symbol">})</a>
|
|||
|
<a id="3098" href="Induction.WellFounded.html#3045" class="Function">wfRecBuilder</a> <a id="3111" href="Induction.WellFounded.html#3111" class="Bound">P</a> <a id="3113" href="Induction.WellFounded.html#3113" class="Bound">f</a> <a id="3115" href="Induction.WellFounded.html#3115" class="Bound">x</a> <a id="3117" class="Symbol">=</a> <a id="3119" href="Induction.WellFounded.html#2409" class="Function">Some.wfRecBuilder</a> <a id="3137" href="Induction.WellFounded.html#3111" class="Bound">P</a> <a id="3139" href="Induction.WellFounded.html#3113" class="Bound">f</a> <a id="3141" href="Induction.WellFounded.html#3115" class="Bound">x</a> <a id="3143" class="Symbol">(</a><a id="3144" href="Induction.WellFounded.html#3012" class="Bound">wf</a> <a id="3147" href="Induction.WellFounded.html#3115" class="Bound">x</a><a id="3148" class="Symbol">)</a>
|
|||
|
|
|||
|
<a id="All.wfRec"></a><a id="3153" href="Induction.WellFounded.html#3153" class="Function">wfRec</a> <a id="3159" class="Symbol">:</a> <a id="3161" href="Induction.html#1166" class="Function">Recursor</a> <a id="3170" class="Symbol">(</a><a id="3171" href="Induction.WellFounded.html#1148" class="Function">WfRec</a> <a id="3177" href="Induction.WellFounded.html#2996" class="Bound Operator">_<_</a><a id="3180" class="Symbol">)</a>
|
|||
|
<a id="3184" href="Induction.WellFounded.html#3153" class="Function">wfRec</a> <a id="3190" class="Symbol">=</a> <a id="3192" href="Induction.html#1337" class="Function">build</a> <a id="3198" href="Induction.WellFounded.html#3045" class="Function">wfRecBuilder</a>
|
|||
|
|
|||
|
<a id="All.wfRec-builder"></a><a id="3214" href="Induction.WellFounded.html#3214" class="Function">wfRec-builder</a> <a id="3228" class="Symbol">=</a> <a id="3230" href="Induction.WellFounded.html#3045" class="Function">wfRecBuilder</a>
|
|||
|
|
|||
|
<a id="3244" class="Keyword">module</a> <a id="FixPoint"></a><a id="3251" href="Induction.WellFounded.html#3251" class="Module">FixPoint</a>
|
|||
|
<a id="3262" class="Symbol">{</a><a id="3263" href="Induction.WellFounded.html#3263" class="Bound Operator">_<_</a> <a id="3267" class="Symbol">:</a> <a id="3269" href="Relation.Binary.Core.html#896" class="Function">Rel</a> <a id="3273" href="Induction.WellFounded.html#889" class="Generalizable">A</a> <a id="3275" href="Induction.WellFounded.html#875" class="Generalizable">r</a><a id="3276" class="Symbol">}</a> <a id="3278" class="Symbol">(</a><a id="3279" href="Induction.WellFounded.html#3279" class="Bound">wf</a> <a id="3282" class="Symbol">:</a> <a id="3284" href="Induction.WellFounded.html#1604" class="Function">WellFounded</a> <a id="3296" href="Induction.WellFounded.html#3263" class="Bound Operator">_<_</a><a id="3299" class="Symbol">)</a>
|
|||
|
<a id="3303" class="Symbol">(</a><a id="3304" href="Induction.WellFounded.html#3304" class="Bound">P</a> <a id="3306" class="Symbol">:</a> <a id="3308" href="Relation.Unary.html#1232" class="Function">Pred</a> <a id="3313" href="Induction.WellFounded.html#889" class="Generalizable">A</a> <a id="3315" href="Induction.WellFounded.html#867" class="Generalizable">ℓ</a><a id="3316" class="Symbol">)</a> <a id="3318" class="Symbol">(</a><a id="3319" href="Induction.WellFounded.html#3319" class="Bound">f</a> <a id="3321" class="Symbol">:</a> <a id="3323" href="Induction.WellFounded.html#1148" class="Function">WfRec</a> <a id="3329" href="Induction.WellFounded.html#3263" class="Bound Operator">_<_</a> <a id="3333" href="Induction.WellFounded.html#3304" class="Bound">P</a> <a id="3335" href="Relation.Unary.html#2539" class="Function Operator">⊆′</a> <a id="3338" href="Induction.WellFounded.html#3304" class="Bound">P</a><a id="3339" class="Symbol">)</a>
|
|||
|
<a id="3343" class="Symbol">(</a><a id="3344" href="Induction.WellFounded.html#3344" class="Bound">f-ext</a> <a id="3350" class="Symbol">:</a> <a id="3352" class="Symbol">(</a><a id="3353" href="Induction.WellFounded.html#3353" class="Bound">x</a> <a id="3355" class="Symbol">:</a> <a id="3357" href="Induction.WellFounded.html#889" class="Generalizable">A</a><a id="3358" class="Symbol">)</a> <a id="3360" class="Symbol">{</a><a id="3361" href="Induction.WellFounded.html#3361" class="Bound">IH</a> <a id="3364" href="Induction.WellFounded.html#3364" class="Bound">IH′</a> <a id="3368" class="Symbol">:</a> <a id="3370" href="Induction.WellFounded.html#1148" class="Function">WfRec</a> <a id="3376" href="Induction.WellFounded.html#3263" class="Bound Operator">_<_</a> <a id="3380" href="Induction.WellFounded.html#3304" class="Bound">P</a> <a id="3382" href="Induction.WellFounded.html#3353" class="Bound">x</a><a id="3383" class="Symbol">}</a> <a id="3385" class="Symbol">→</a>
|
|||
|
<a id="3398" class="Symbol">(∀</a> <a id="3401" class="Symbol">{</a><a id="3402" href="Induction.WellFounded.html#3402" class="Bound">y</a><a id="3403" class="Symbol">}</a> <a id="3405" href="Induction.WellFounded.html#3405" class="Bound">y<x</a> <a id="3409" class="Symbol">→</a> <a id="3411" href="Induction.WellFounded.html#3361" class="Bound">IH</a> <a id="3414" class="Symbol">{</a><a id="3415" href="Induction.WellFounded.html#3402" class="Bound">y</a><a id="3416" class="Symbol">}</a> <a id="3418" href="Induction.WellFounded.html#3405" class="Bound">y<x</a> <a id="3422" href="Agda.Builtin.Equality.html#150" class="Datatype Operator">≡</a> <a id="3424" href="Induction.WellFounded.html#3364" class="Bound">IH′</a> <a id="3428" href="Induction.WellFounded.html#3405" class="Bound">y<x</a><a id="3431" class="Symbol">)</a> <a id="3433" class="Symbol">→</a>
|
|||
|
<a id="3446" href="Induction.WellFounded.html#3319" class="Bound">f</a> <a id="3448" href="Induction.WellFounded.html#3353" class="Bound">x</a> <a id="3450" href="Induction.WellFounded.html#3361" class="Bound">IH</a> <a id="3453" href="Agda.Builtin.Equality.html#150" class="Datatype Operator">≡</a> <a id="3455" href="Induction.WellFounded.html#3319" class="Bound">f</a> <a id="3457" href="Induction.WellFounded.html#3353" class="Bound">x</a> <a id="3459" href="Induction.WellFounded.html#3364" class="Bound">IH′</a><a id="3462" class="Symbol">)</a>
|
|||
|
<a id="3466" class="Keyword">where</a>
|
|||
|
|
|||
|
<a id="FixPoint.some-wfrec-Irrelevant"></a><a id="3475" href="Induction.WellFounded.html#3475" class="Function">some-wfrec-Irrelevant</a> <a id="3497" class="Symbol">:</a> <a id="3499" href="Relation.Unary.html#1232" class="Function">Pred</a> <a id="3504" href="Induction.WellFounded.html#3273" class="Bound">A</a> <a id="3506" class="Symbol">_</a>
|
|||
|
<a id="3510" href="Induction.WellFounded.html#3475" class="Function">some-wfrec-Irrelevant</a> <a id="3532" href="Induction.WellFounded.html#3532" class="Bound">x</a> <a id="3534" class="Symbol">=</a> <a id="3536" class="Symbol">∀</a> <a id="3538" href="Induction.WellFounded.html#3538" class="Bound">q</a> <a id="3540" href="Induction.WellFounded.html#3540" class="Bound">q′</a> <a id="3543" class="Symbol">→</a> <a id="3545" href="Induction.WellFounded.html#2553" class="Function">Some.wfRec</a> <a id="3556" href="Induction.WellFounded.html#3304" class="Bound">P</a> <a id="3558" href="Induction.WellFounded.html#3319" class="Bound">f</a> <a id="3560" href="Induction.WellFounded.html#3532" class="Bound">x</a> <a id="3562" href="Induction.WellFounded.html#3538" class="Bound">q</a> <a id="3564" href="Agda.Builtin.Equality.html#150" class="Datatype Operator">≡</a> <a id="3566" href="Induction.WellFounded.html#2553" class="Function">Some.wfRec</a> <a id="3577" href="Induction.WellFounded.html#3304" class="Bound">P</a> <a id="3579" href="Induction.WellFounded.html#3319" class="Bound">f</a> <a id="3581" href="Induction.WellFounded.html#3532" class="Bound">x</a> <a id="3583" href="Induction.WellFounded.html#3540" class="Bound">q′</a>
|
|||
|
|
|||
|
<a id="FixPoint.some-wfRec-irrelevant"></a><a id="3589" href="Induction.WellFounded.html#3589" class="Function">some-wfRec-irrelevant</a> <a id="3611" class="Symbol">:</a> <a id="3613" class="Symbol">∀</a> <a id="3615" href="Induction.WellFounded.html#3615" class="Bound">x</a> <a id="3617" class="Symbol">→</a> <a id="3619" href="Induction.WellFounded.html#3475" class="Function">some-wfrec-Irrelevant</a> <a id="3641" href="Induction.WellFounded.html#3615" class="Bound">x</a>
|
|||
|
<a id="3645" href="Induction.WellFounded.html#3589" class="Function">some-wfRec-irrelevant</a> <a id="3667" class="Symbol">=</a> <a id="3669" href="Induction.WellFounded.html#3153" class="Function">All.wfRec</a> <a id="3679" href="Induction.WellFounded.html#3279" class="Bound">wf</a> <a id="3682" class="Symbol">_</a> <a id="3684" href="Induction.WellFounded.html#3475" class="Function">some-wfrec-Irrelevant</a>
|
|||
|
<a id="3710" class="Symbol">λ</a> <a id="3712" class="Symbol">{</a> <a id="3714" href="Induction.WellFounded.html#3714" class="Bound">x</a> <a id="3716" href="Induction.WellFounded.html#3716" class="Bound">IH</a> <a id="3719" class="Symbol">(</a><a id="3720" href="Induction.WellFounded.html#1418" class="InductiveConstructor">acc</a> <a id="3724" href="Induction.WellFounded.html#3724" class="Bound">rs</a><a id="3726" class="Symbol">)</a> <a id="3728" class="Symbol">(</a><a id="3729" href="Induction.WellFounded.html#1418" class="InductiveConstructor">acc</a> <a id="3733" href="Induction.WellFounded.html#3733" class="Bound">rs′</a><a id="3736" class="Symbol">)</a> <a id="3738" class="Symbol">→</a> <a id="3740" href="Induction.WellFounded.html#3344" class="Bound">f-ext</a> <a id="3746" href="Induction.WellFounded.html#3714" class="Bound">x</a> <a id="3748" class="Symbol">λ</a> <a id="3750" href="Induction.WellFounded.html#3750" class="Bound">y<x</a> <a id="3754" class="Symbol">→</a> <a id="3756" href="Induction.WellFounded.html#3716" class="Bound">IH</a> <a id="3759" href="Induction.WellFounded.html#3750" class="Bound">y<x</a> <a id="3763" class="Symbol">(</a><a id="3764" href="Induction.WellFounded.html#3724" class="Bound">rs</a> <a id="3767" href="Induction.WellFounded.html#3750" class="Bound">y<x</a><a id="3770" class="Symbol">)</a> <a id="3772" class="Symbol">(</a><a id="3773" href="Induction.WellFounded.html#3733" class="Bound">rs′</a> <a id="3777" href="Induction.WellFounded.html#3750" class="Bound">y<x</a><a id="3780" class="Symbol">)</a> <a id="3782" class="Symbol">}</a>
|
|||
|
|
|||
|
<a id="3787" class="Keyword">open</a> <a id="3792" href="Induction.WellFounded.html#2991" class="Module">All</a> <a id="3796" href="Induction.WellFounded.html#3279" class="Bound">wf</a> <a id="3799" href="Induction.WellFounded.html#3315" class="Bound">ℓ</a>
|
|||
|
|
|||
|
<a id="FixPoint.wfRecBuilder-wfRec"></a><a id="3804" href="Induction.WellFounded.html#3804" class="Function">wfRecBuilder-wfRec</a> <a id="3823" class="Symbol">:</a> <a id="3825" class="Symbol">∀</a> <a id="3827" class="Symbol">{</a><a id="3828" href="Induction.WellFounded.html#3828" class="Bound">x</a> <a id="3830" href="Induction.WellFounded.html#3830" class="Bound">y</a><a id="3831" class="Symbol">}</a> <a id="3833" href="Induction.WellFounded.html#3833" class="Bound">y<x</a> <a id="3837" class="Symbol">→</a> <a id="3839" href="Induction.WellFounded.html#3045" class="Function">wfRecBuilder</a> <a id="3852" href="Induction.WellFounded.html#3304" class="Bound">P</a> <a id="3854" href="Induction.WellFounded.html#3319" class="Bound">f</a> <a id="3856" href="Induction.WellFounded.html#3828" class="Bound">x</a> <a id="3858" href="Induction.WellFounded.html#3833" class="Bound">y<x</a> <a id="3862" href="Agda.Builtin.Equality.html#150" class="Datatype Operator">≡</a> <a id="3864" href="Induction.WellFounded.html#3153" class="Function">wfRec</a> <a id="3870" href="Induction.WellFounded.html#3304" class="Bound">P</a> <a id="3872" href="Induction.WellFounded.html#3319" class="Bound">f</a> <a id="3874" href="Induction.WellFounded.html#3830" class="Bound">y</a>
|
|||
|
<a id="3878" href="Induction.WellFounded.html#3804" class="Function">wfRecBuilder-wfRec</a> <a id="3897" class="Symbol">{</a><a id="3898" href="Induction.WellFounded.html#3898" class="Bound">x</a><a id="3899" class="Symbol">}</a> <a id="3901" class="Symbol">{</a><a id="3902" href="Induction.WellFounded.html#3902" class="Bound">y</a><a id="3903" class="Symbol">}</a> <a id="3905" href="Induction.WellFounded.html#3905" class="Bound">y<x</a> <a id="3909" class="Keyword">with</a> <a id="3914" href="Induction.WellFounded.html#1418" class="InductiveConstructor">acc</a> <a id="3918" href="Induction.WellFounded.html#3918" class="Bound">rs</a> ← <a id="3923" href="Induction.WellFounded.html#3279" class="Bound">wf</a> <a id="3926" href="Induction.WellFounded.html#3898" class="Bound">x</a>
|
|||
|
<a id="3931" class="Symbol">=</a> <a id="3933" href="Induction.WellFounded.html#3589" class="Function">some-wfRec-irrelevant</a> <a id="3955" href="Induction.WellFounded.html#3902" class="Bound">y</a> <a id="3957" class="Symbol">(</a><a id="3958" href="Induction.WellFounded.html#3918" class="Bound">rs</a> <a id="3961" href="Induction.WellFounded.html#3905" class="Bound">y<x</a><a id="3964" class="Symbol">)</a> <a id="3966" class="Symbol">(</a><a id="3967" href="Induction.WellFounded.html#3279" class="Bound">wf</a> <a id="3970" href="Induction.WellFounded.html#3902" class="Bound">y</a><a id="3971" class="Symbol">)</a>
|
|||
|
|
|||
|
<a id="FixPoint.unfold-wfRec"></a><a id="3976" href="Induction.WellFounded.html#3976" class="Function">unfold-wfRec</a> <a id="3989" class="Symbol">:</a> <a id="3991" class="Symbol">∀</a> <a id="3993" class="Symbol">{</a><a id="3994" href="Induction.WellFounded.html#3994" class="Bound">x</a><a id="3995" class="Symbol">}</a> <a id="3997" class="Symbol">→</a> <a id="3999" href="Induction.WellFounded.html#3153" class="Function">wfRec</a> <a id="4005" href="Induction.WellFounded.html#3304" class="Bound">P</a> <a id="4007" href="Induction.WellFounded.html#3319" class="Bound">f</a> <a id="4009" href="Induction.WellFounded.html#3994" class="Bound">x</a> <a id="4011" href="Agda.Builtin.Equality.html#150" class="Datatype Operator">≡</a> <a id="4013" href="Induction.WellFounded.html#3319" class="Bound">f</a> <a id="4015" href="Induction.WellFounded.html#3994" class="Bound">x</a> <a id="4017" class="Symbol">λ</a> <a id="4019" href="Induction.WellFounded.html#4019" class="Symbol">_</a> <a id="4021" class="Symbol">→</a> <a id="4023" href="Induction.WellFounded.html#3153" class="Function">wfRec</a> <a id="4029" href="Induction.WellFounded.html#3304" class="Bound">P</a> <a id="4031" href="Induction.WellFounded.html#3319" class="Bound">f</a> <a id="4033" class="Symbol">_</a>
|
|||
|
<a id="4037" href="Induction.WellFounded.html#3976" class="Function">unfold-wfRec</a> <a id="4050" class="Symbol">{</a><a id="4051" href="Induction.WellFounded.html#4051" class="Bound">x</a><a id="4052" class="Symbol">}</a> <a id="4054" class="Symbol">=</a> <a id="4056" href="Induction.WellFounded.html#3344" class="Bound">f-ext</a> <a id="4062" href="Induction.WellFounded.html#4051" class="Bound">x</a> <a id="4064" href="Induction.WellFounded.html#3804" class="Function">wfRecBuilder-wfRec</a>
|
|||
|
|
|||
|
<a id="4084" class="Comment">------------------------------------------------------------------------</a>
|
|||
|
<a id="4157" class="Comment">-- Well-founded relations are asymmetric and irreflexive.</a>
|
|||
|
|
|||
|
<a id="4216" class="Keyword">module</a> <a id="4223" href="Induction.WellFounded.html#4223" class="Module">_</a> <a id="4225" class="Symbol">{</a><a id="4226" href="Induction.WellFounded.html#4226" class="Bound Operator">_<_</a> <a id="4230" class="Symbol">:</a> <a id="4232" href="Relation.Binary.Core.html#896" class="Function">Rel</a> <a id="4236" href="Induction.WellFounded.html#889" class="Generalizable">A</a> <a id="4238" href="Induction.WellFounded.html#875" class="Generalizable">r</a><a id="4239" class="Symbol">}</a> <a id="4241" class="Keyword">where</a>
|
|||
|
<a id="4249" href="Induction.WellFounded.html#4249" class="Function">acc⇒asym</a> <a id="4258" class="Symbol">:</a> <a id="4260" class="Symbol">∀</a> <a id="4262" class="Symbol">{</a><a id="4263" href="Induction.WellFounded.html#4263" class="Bound">x</a> <a id="4265" href="Induction.WellFounded.html#4265" class="Bound">y</a><a id="4266" class="Symbol">}</a> <a id="4268" class="Symbol">→</a> <a id="4270" href="Induction.WellFounded.html#1356" class="Datatype">Acc</a> <a id="4274" href="Induction.WellFounded.html#4226" class="Bound Operator">_<_</a> <a id="4278" href="Induction.WellFounded.html#4263" class="Bound">x</a> <a id="4280" class="Symbol">→</a> <a id="4282" href="Induction.WellFounded.html#4263" class="Bound">x</a> <a id="4284" href="Induction.WellFounded.html#4226" class="Bound Operator"><</a> <a id="4286" href="Induction.WellFounded.html#4265" class="Bound">y</a> <a id="4288" class="Symbol">→</a> <a id="4290" href="Relation.Nullary.Negation.Core.html#698" class="Function Operator">¬</a> <a id="4292" class="Symbol">(</a><a id="4293" href="Induction.WellFounded.html#4265" class="Bound">y</a> <a id="4295" href="Induction.WellFounded.html#4226" class="Bound Operator"><</a> <a id="4297" href="Induction.WellFounded.html#4263" class="Bound">x</a><a id="4298" class="Symbol">)</a>
|
|||
|
<a id="4302" href="Induction.WellFounded.html#4249" class="Function">acc⇒asym</a> <a id="4311" class="Symbol">{</a><a id="4312" href="Induction.WellFounded.html#4312" class="Bound">x</a><a id="4313" class="Symbol">}</a> <a id="4315" href="Induction.WellFounded.html#4315" class="Bound">hx</a> <a id="4318" class="Symbol">=</a>
|
|||
|
<a id="4324" href="Induction.WellFounded.html#2553" class="Function">Some.wfRec</a> <a id="4335" class="Symbol">(λ</a> <a id="4338" href="Induction.WellFounded.html#4338" class="Bound">x</a> <a id="4340" class="Symbol">→</a> <a id="4342" class="Symbol">∀</a> <a id="4344" class="Symbol">{</a><a id="4345" href="Induction.WellFounded.html#4345" class="Bound">y</a><a id="4346" class="Symbol">}</a> <a id="4348" class="Symbol">→</a> <a id="4350" href="Induction.WellFounded.html#4338" class="Bound">x</a> <a id="4352" href="Induction.WellFounded.html#4226" class="Bound Operator"><</a> <a id="4354" href="Induction.WellFounded.html#4345" class="Bound">y</a> <a id="4356" class="Symbol">→</a> <a id="4358" href="Relation.Nullary.Negation.Core.html#698" class="Function Operator">¬</a> <a id="4360" class="Symbol">(</a><a id="4361" href="Induction.WellFounded.html#4345" class="Bound">y</a> <a id="4363" href="Induction.WellFounded.html#4226" class="Bound Operator"><</a> <a id="4365" href="Induction.WellFounded.html#4338" class="Bound">x</a><a id="4366" class="Symbol">))</a> <a id="4369" class="Symbol">(λ</a> <a id="4372" href="Induction.WellFounded.html#4372" class="Bound">_</a> <a id="4374" href="Induction.WellFounded.html#4374" class="Bound">hx</a> <a id="4377" href="Induction.WellFounded.html#4377" class="Bound">x<y</a> <a id="4381" href="Induction.WellFounded.html#4381" class="Bound">y<x</a> <a id="4385" class="Symbol">→</a> <a id="4387" href="Induction.WellFounded.html#4374" class="Bound">hx</a> <a id="4390" href="Induction.WellFounded.html#4381" class="Bound">y<x</a> <a id="4394" href="Induction.WellFounded.html#4381" class="Bound">y<x</a> <a id="4398" href="Induction.WellFounded.html#4377" class="Bound">x<y</a><a id="4401" class="Symbol">)</a> <a id="4403" class="Symbol">_</a> <a id="4405" href="Induction.WellFounded.html#4315" class="Bound">hx</a>
|
|||
|
|
|||
|
<a id="4411" href="Induction.WellFounded.html#4411" class="Function">wf⇒asym</a> <a id="4419" class="Symbol">:</a> <a id="4421" href="Induction.WellFounded.html#1604" class="Function">WellFounded</a> <a id="4433" href="Induction.WellFounded.html#4226" class="Bound Operator">_<_</a> <a id="4437" class="Symbol">→</a> <a id="4439" href="Relation.Binary.Definitions.html#2590" class="Function">Asymmetric</a> <a id="4450" href="Induction.WellFounded.html#4226" class="Bound Operator">_<_</a>
|
|||
|
<a id="4456" href="Induction.WellFounded.html#4411" class="Function">wf⇒asym</a> <a id="4464" href="Induction.WellFounded.html#4464" class="Bound">wf</a> <a id="4467" class="Symbol">=</a> <a id="4469" href="Induction.WellFounded.html#4249" class="Function">acc⇒asym</a> <a id="4478" class="Symbol">(</a><a id="4479" href="Induction.WellFounded.html#4464" class="Bound">wf</a> <a id="4482" class="Symbol">_)</a>
|
|||
|
|
|||
|
<a id="4488" href="Induction.WellFounded.html#4488" class="Function">wf⇒irrefl</a> <a id="4498" class="Symbol">:</a> <a id="4500" class="Symbol">{</a><a id="4501" href="Induction.WellFounded.html#4501" class="Bound Operator">_≈_</a> <a id="4505" class="Symbol">:</a> <a id="4507" href="Relation.Binary.Core.html#896" class="Function">Rel</a> <a id="4511" href="Induction.WellFounded.html#4236" class="Bound">A</a> <a id="4513" href="Induction.WellFounded.html#867" class="Generalizable">ℓ</a><a id="4514" class="Symbol">}</a> <a id="4516" class="Symbol">→</a> <a id="4518" href="Induction.WellFounded.html#4226" class="Bound Operator">_<_</a> <a id="4522" href="Relation.Binary.Definitions.html#5663" class="Function Operator">Respects₂</a> <a id="4532" href="Induction.WellFounded.html#4501" class="Bound Operator">_≈_</a> <a id="4536" class="Symbol">→</a>
|
|||
|
<a id="4552" href="Relation.Binary.Definitions.html#1587" class="Function">Symmetric</a> <a id="4562" href="Induction.WellFounded.html#4501" class="Bound Operator">_≈_</a> <a id="4566" class="Symbol">→</a> <a id="4568" href="Induction.WellFounded.html#1604" class="Function">WellFounded</a> <a id="4580" href="Induction.WellFounded.html#4226" class="Bound Operator">_<_</a> <a id="4584" class="Symbol">→</a> <a id="4586" href="Relation.Binary.Definitions.html#2478" class="Function">Irreflexive</a> <a id="4598" href="Induction.WellFounded.html#4501" class="Bound Operator">_≈_</a> <a id="4602" href="Induction.WellFounded.html#4226" class="Bound Operator">_<_</a>
|
|||
|
<a id="4608" href="Induction.WellFounded.html#4488" class="Function">wf⇒irrefl</a> <a id="4618" href="Induction.WellFounded.html#4618" class="Bound">r</a> <a id="4620" href="Induction.WellFounded.html#4620" class="Bound">s</a> <a id="4622" href="Induction.WellFounded.html#4622" class="Bound">wf</a> <a id="4625" class="Symbol">=</a> <a id="4627" href="Relation.Binary.Consequences.html#4494" class="Function">asym⇒irr</a> <a id="4636" href="Induction.WellFounded.html#4618" class="Bound">r</a> <a id="4638" href="Induction.WellFounded.html#4620" class="Bound">s</a> <a id="4640" class="Symbol">(</a><a id="4641" href="Induction.WellFounded.html#4411" class="Function">wf⇒asym</a> <a id="4649" href="Induction.WellFounded.html#4622" class="Bound">wf</a><a id="4651" class="Symbol">)</a>
|
|||
|
|
|||
|
<a id="4654" class="Comment">------------------------------------------------------------------------</a>
|
|||
|
<a id="4727" class="Comment">-- It might be useful to establish proofs of Acc or Well-founded using</a>
|
|||
|
<a id="4798" class="Comment">-- combinators such as the ones below (see, for instance,</a>
|
|||
|
<a id="4856" class="Comment">-- "Constructing Recursion Operators in Intuitionistic Type Theory" by</a>
|
|||
|
<a id="4927" class="Comment">-- Lawrence C Paulson).</a>
|
|||
|
|
|||
|
<a id="4952" class="Keyword">module</a> <a id="Subrelation"></a><a id="4959" href="Induction.WellFounded.html#4959" class="Module">Subrelation</a> <a id="4971" class="Symbol">{</a><a id="4972" href="Induction.WellFounded.html#4972" class="Bound Operator">_<₁_</a> <a id="4977" class="Symbol">:</a> <a id="4979" href="Relation.Binary.Core.html#896" class="Function">Rel</a> <a id="4983" href="Induction.WellFounded.html#889" class="Generalizable">A</a> <a id="4985" href="Induction.WellFounded.html#869" class="Generalizable">ℓ₁</a><a id="4987" class="Symbol">}</a> <a id="4989" class="Symbol">{</a><a id="4990" href="Induction.WellFounded.html#4990" class="Bound Operator">_<₂_</a> <a id="4995" class="Symbol">:</a> <a id="4997" href="Relation.Binary.Core.html#896" class="Function">Rel</a> <a id="5001" href="Induction.WellFounded.html#889" class="Generalizable">A</a> <a id="5003" href="Induction.WellFounded.html#872" class="Generalizable">ℓ₂</a><a id="5005" class="Symbol">}</a>
|
|||
|
<a id="5026" class="Symbol">(</a><a id="5027" href="Induction.WellFounded.html#5027" class="Bound"><₁⇒<₂</a> <a id="5033" class="Symbol">:</a> <a id="5035" class="Symbol">∀</a> <a id="5037" class="Symbol">{</a><a id="5038" href="Induction.WellFounded.html#5038" class="Bound">x</a> <a id="5040" href="Induction.WellFounded.html#5040" class="Bound">y</a><a id="5041" class="Symbol">}</a> <a id="5043" class="Symbol">→</a> <a id="5045" href="Induction.WellFounded.html#5038" class="Bound">x</a> <a id="5047" href="Induction.WellFounded.html#4972" class="Bound Operator"><₁</a> <a id="5050" href="Induction.WellFounded.html#5040" class="Bound">y</a> <a id="5052" class="Symbol">→</a> <a id="5054" href="Induction.WellFounded.html#5038" class="Bound">x</a> <a id="5056" href="Induction.WellFounded.html#4990" class="Bound Operator"><₂</a> <a id="5059" href="Induction.WellFounded.html#5040" class="Bound">y</a><a id="5060" class="Symbol">)</a> <a id="5062" class="Keyword">where</a>
|
|||
|
|
|||
|
<a id="Subrelation.accessible"></a><a id="5071" href="Induction.WellFounded.html#5071" class="Function">accessible</a> <a id="5082" class="Symbol">:</a> <a id="5084" href="Induction.WellFounded.html#1356" class="Datatype">Acc</a> <a id="5088" href="Induction.WellFounded.html#4990" class="Bound Operator">_<₂_</a> <a id="5093" href="Relation.Unary.html#1882" class="Function Operator">⊆</a> <a id="5095" href="Induction.WellFounded.html#1356" class="Datatype">Acc</a> <a id="5099" href="Induction.WellFounded.html#4972" class="Bound Operator">_<₁_</a>
|
|||
|
<a id="5106" href="Induction.WellFounded.html#5071" class="Function">accessible</a> <a id="5117" class="Symbol">(</a><a id="5118" href="Induction.WellFounded.html#1418" class="InductiveConstructor">acc</a> <a id="5122" href="Induction.WellFounded.html#5122" class="Bound">rs</a><a id="5124" class="Symbol">)</a> <a id="5126" class="Symbol">=</a> <a id="5128" href="Induction.WellFounded.html#1418" class="InductiveConstructor">acc</a> <a id="5132" class="Symbol">λ</a> <a id="5134" href="Induction.WellFounded.html#5134" class="Bound">y<x</a> <a id="5138" class="Symbol">→</a> <a id="5140" href="Induction.WellFounded.html#5071" class="Function">accessible</a> <a id="5151" class="Symbol">(</a><a id="5152" href="Induction.WellFounded.html#5122" class="Bound">rs</a> <a id="5155" class="Symbol">(</a><a id="5156" href="Induction.WellFounded.html#5027" class="Bound"><₁⇒<₂</a> <a id="5162" href="Induction.WellFounded.html#5134" class="Bound">y<x</a><a id="5165" class="Symbol">))</a>
|
|||
|
|
|||
|
<a id="Subrelation.wellFounded"></a><a id="5171" href="Induction.WellFounded.html#5171" class="Function">wellFounded</a> <a id="5183" class="Symbol">:</a> <a id="5185" href="Induction.WellFounded.html#1604" class="Function">WellFounded</a> <a id="5197" href="Induction.WellFounded.html#4990" class="Bound Operator">_<₂_</a> <a id="5202" class="Symbol">→</a> <a id="5204" href="Induction.WellFounded.html#1604" class="Function">WellFounded</a> <a id="5216" href="Induction.WellFounded.html#4972" class="Bound Operator">_<₁_</a>
|
|||
|
<a id="5223" href="Induction.WellFounded.html#5171" class="Function">wellFounded</a> <a id="5235" href="Induction.WellFounded.html#5235" class="Bound">wf</a> <a id="5238" class="Symbol">=</a> <a id="5240" class="Symbol">λ</a> <a id="5242" href="Induction.WellFounded.html#5242" class="Bound">x</a> <a id="5244" class="Symbol">→</a> <a id="5246" href="Induction.WellFounded.html#5071" class="Function">accessible</a> <a id="5257" class="Symbol">(</a><a id="5258" href="Induction.WellFounded.html#5235" class="Bound">wf</a> <a id="5261" href="Induction.WellFounded.html#5242" class="Bound">x</a><a id="5262" class="Symbol">)</a>
|
|||
|
|
|||
|
|
|||
|
<a id="5266" class="Comment">-- DEPRECATED in v1.4.</a>
|
|||
|
<a id="5289" class="Comment">-- Please use proofs in `Relation.Binary.Construct.On` instead.</a>
|
|||
|
<a id="5353" class="Keyword">module</a> <a id="InverseImage"></a><a id="5360" href="Induction.WellFounded.html#5360" class="Module">InverseImage</a> <a id="5373" class="Symbol">{</a><a id="5374" href="Induction.WellFounded.html#5374" class="Bound Operator">_<_</a> <a id="5378" class="Symbol">:</a> <a id="5380" href="Relation.Binary.Core.html#896" class="Function">Rel</a> <a id="5384" href="Induction.WellFounded.html#903" class="Generalizable">B</a> <a id="5386" href="Induction.WellFounded.html#867" class="Generalizable">ℓ</a><a id="5387" class="Symbol">}</a> <a id="5389" class="Symbol">(</a><a id="5390" href="Induction.WellFounded.html#5390" class="Bound">f</a> <a id="5392" class="Symbol">:</a> <a id="5394" href="Induction.WellFounded.html#889" class="Generalizable">A</a> <a id="5396" class="Symbol">→</a> <a id="5398" href="Induction.WellFounded.html#903" class="Generalizable">B</a><a id="5399" class="Symbol">)</a> <a id="5401" class="Keyword">where</a>
|
|||
|
|
|||
|
<a id="InverseImage.accessible"></a><a id="5410" href="Induction.WellFounded.html#5410" class="Function">accessible</a> <a id="5421" class="Symbol">:</a> <a id="5423" class="Symbol">∀</a> <a id="5425" class="Symbol">{</a><a id="5426" href="Induction.WellFounded.html#5426" class="Bound">x</a><a id="5427" class="Symbol">}</a> <a id="5429" class="Symbol">→</a> <a id="5431" href="Induction.WellFounded.html#1356" class="Datatype">Acc</a> <a id="5435" href="Induction.WellFounded.html#5374" class="Bound Operator">_<_</a> <a id="5439" class="Symbol">(</a><a id="5440" href="Induction.WellFounded.html#5390" class="Bound">f</a> <a id="5442" href="Induction.WellFounded.html#5426" class="Bound">x</a><a id="5443" class="Symbol">)</a> <a id="5445" class="Symbol">→</a> <a id="5447" href="Induction.WellFounded.html#1356" class="Datatype">Acc</a> <a id="5451" class="Symbol">(</a><a id="5452" href="Induction.WellFounded.html#5374" class="Bound Operator">_<_</a> <a id="5456" href="Function.Base.html#6209" class="Function Operator">on</a> <a id="5459" href="Induction.WellFounded.html#5390" class="Bound">f</a><a id="5460" class="Symbol">)</a> <a id="5462" href="Induction.WellFounded.html#5426" class="Bound">x</a>
|
|||
|
<a id="5466" href="Induction.WellFounded.html#5410" class="Function">accessible</a> <a id="5477" class="Symbol">(</a><a id="5478" href="Induction.WellFounded.html#1418" class="InductiveConstructor">acc</a> <a id="5482" href="Induction.WellFounded.html#5482" class="Bound">rs</a><a id="5484" class="Symbol">)</a> <a id="5486" class="Symbol">=</a> <a id="5488" href="Induction.WellFounded.html#1418" class="InductiveConstructor">acc</a> <a id="5492" class="Symbol">λ</a> <a id="5494" href="Induction.WellFounded.html#5494" class="Bound">fy<fx</a> <a id="5500" class="Symbol">→</a> <a id="5502" href="Induction.WellFounded.html#5410" class="Function">accessible</a> <a id="5513" class="Symbol">(</a><a id="5514" href="Induction.WellFounded.html#5482" class="Bound">rs</a> <a id="5517" href="Induction.WellFounded.html#5494" class="Bound">fy<fx</a><a id="5522" class="Symbol">)</a>
|
|||
|
|
|||
|
<a id="InverseImage.wellFounded"></a><a id="5527" href="Induction.WellFounded.html#5527" class="Function">wellFounded</a> <a id="5539" class="Symbol">:</a> <a id="5541" href="Induction.WellFounded.html#1604" class="Function">WellFounded</a> <a id="5553" href="Induction.WellFounded.html#5374" class="Bound Operator">_<_</a> <a id="5557" class="Symbol">→</a> <a id="5559" href="Induction.WellFounded.html#1604" class="Function">WellFounded</a> <a id="5571" class="Symbol">(</a><a id="5572" href="Induction.WellFounded.html#5374" class="Bound Operator">_<_</a> <a id="5576" href="Function.Base.html#6209" class="Function Operator">on</a> <a id="5579" href="Induction.WellFounded.html#5390" class="Bound">f</a><a id="5580" class="Symbol">)</a>
|
|||
|
<a id="5584" href="Induction.WellFounded.html#5527" class="Function">wellFounded</a> <a id="5596" href="Induction.WellFounded.html#5596" class="Bound">wf</a> <a id="5599" class="Symbol">=</a> <a id="5601" class="Symbol">λ</a> <a id="5603" href="Induction.WellFounded.html#5603" class="Bound">x</a> <a id="5605" class="Symbol">→</a> <a id="5607" href="Induction.WellFounded.html#5410" class="Function">accessible</a> <a id="5618" class="Symbol">(</a><a id="5619" href="Induction.WellFounded.html#5596" class="Bound">wf</a> <a id="5622" class="Symbol">(</a><a id="5623" href="Induction.WellFounded.html#5390" class="Bound">f</a> <a id="5625" href="Induction.WellFounded.html#5603" class="Bound">x</a><a id="5626" class="Symbol">))</a>
|
|||
|
|
|||
|
<a id="InverseImage.well-founded"></a><a id="5632" href="Induction.WellFounded.html#5632" class="Function">well-founded</a> <a id="5645" class="Symbol">=</a> <a id="5647" href="Induction.WellFounded.html#5527" class="Function">wellFounded</a>
|
|||
|
<a id="5661" class="Symbol">{-#</a> <a id="5665" class="Keyword">WARNING_ON_USAGE</a> <a id="5682" class="Pragma">accessible</a>
|
|||
|
<a id="5695" class="String">"Warning: accessible was deprecated in v1.4.
|
|||
|
\ \Please use accessible from `Relation.Binary.Construct.On` instead."</a>
|
|||
|
<a id="5813" class="Symbol">#-}</a>
|
|||
|
<a id="5819" class="Symbol">{-#</a> <a id="5823" class="Keyword">WARNING_ON_USAGE</a> <a id="5840" class="Pragma">wellFounded</a>
|
|||
|
<a id="5854" class="String">"Warning: wellFounded was deprecated in v1.4.
|
|||
|
\ \Please use wellFounded from `Relation.Binary.Construct.On` instead."</a>
|
|||
|
<a id="5974" class="Symbol">#-}</a>
|
|||
|
|
|||
|
|
|||
|
<a id="5980" class="Comment">-- DEPRECATED in v1.5.</a>
|
|||
|
<a id="6003" class="Comment">-- Please use `TransClosure` from `Relation.Binary.Construct.Closure.Transitive` instead.</a>
|
|||
|
<a id="6093" class="Keyword">module</a> <a id="TransitiveClosure"></a><a id="6100" href="Induction.WellFounded.html#6100" class="Module">TransitiveClosure</a> <a id="6118" class="Symbol">{</a><a id="6119" href="Induction.WellFounded.html#6119" class="Bound">A</a> <a id="6121" class="Symbol">:</a> <a id="6123" href="Agda.Primitive.html#388" class="Primitive">Set</a> <a id="6127" href="Induction.WellFounded.html#863" class="Generalizable">a</a><a id="6128" class="Symbol">}</a> <a id="6130" class="Symbol">(</a><a id="6131" href="Induction.WellFounded.html#6131" class="Bound Operator">_<_</a> <a id="6135" class="Symbol">:</a> <a id="6137" href="Relation.Binary.Core.html#896" class="Function">Rel</a> <a id="6141" href="Induction.WellFounded.html#6119" class="Bound">A</a> <a id="6143" href="Induction.WellFounded.html#867" class="Generalizable">ℓ</a><a id="6144" class="Symbol">)</a> <a id="6146" class="Keyword">where</a>
|
|||
|
|
|||
|
<a id="6155" class="Keyword">infix</a> <a id="6161" class="Number">4</a> <a id="6163" href="Induction.WellFounded.html#6176" class="Datatype Operator">_<⁺_</a>
|
|||
|
|
|||
|
<a id="6171" class="Keyword">data</a> <a id="TransitiveClosure._<⁺_"></a><a id="6176" href="Induction.WellFounded.html#6176" class="Datatype Operator">_<⁺_</a> <a id="6181" class="Symbol">:</a> <a id="6183" href="Relation.Binary.Core.html#896" class="Function">Rel</a> <a id="6187" href="Induction.WellFounded.html#6119" class="Bound">A</a> <a id="6189" class="Symbol">(</a><a id="6190" href="Induction.WellFounded.html#6127" class="Bound">a</a> <a id="6192" href="Agda.Primitive.html#961" class="Primitive Operator">⊔</a> <a id="6194" href="Induction.WellFounded.html#6143" class="Bound">ℓ</a><a id="6195" class="Symbol">)</a> <a id="6197" class="Keyword">where</a>
|
|||
|
<a id="TransitiveClosure._<⁺_.[_]"></a><a id="6207" href="Induction.WellFounded.html#6207" class="InductiveConstructor Operator">[_]</a> <a id="6213" class="Symbol">:</a> <a id="6215" class="Symbol">∀</a> <a id="6217" class="Symbol">{</a><a id="6218" href="Induction.WellFounded.html#6218" class="Bound">x</a> <a id="6220" href="Induction.WellFounded.html#6220" class="Bound">y</a><a id="6221" class="Symbol">}</a> <a id="6223" class="Symbol">(</a><a id="6224" href="Induction.WellFounded.html#6224" class="Bound">x<y</a> <a id="6228" class="Symbol">:</a> <a id="6230" href="Induction.WellFounded.html#6218" class="Bound">x</a> <a id="6232" href="Induction.WellFounded.html#6131" class="Bound Operator"><</a> <a id="6234" href="Induction.WellFounded.html#6220" class="Bound">y</a><a id="6235" class="Symbol">)</a> <a id="6237" class="Symbol">→</a> <a id="6239" href="Induction.WellFounded.html#6218" class="Bound">x</a> <a id="6241" href="Induction.WellFounded.html#6176" class="Datatype Operator"><⁺</a> <a id="6244" href="Induction.WellFounded.html#6220" class="Bound">y</a>
|
|||
|
<a id="TransitiveClosure._<⁺_.trans"></a><a id="6250" href="Induction.WellFounded.html#6250" class="InductiveConstructor">trans</a> <a id="6256" class="Symbol">:</a> <a id="6258" class="Symbol">∀</a> <a id="6260" class="Symbol">{</a><a id="6261" href="Induction.WellFounded.html#6261" class="Bound">x</a> <a id="6263" href="Induction.WellFounded.html#6263" class="Bound">y</a> <a id="6265" href="Induction.WellFounded.html#6265" class="Bound">z</a><a id="6266" class="Symbol">}</a> <a id="6268" class="Symbol">(</a><a id="6269" href="Induction.WellFounded.html#6269" class="Bound">x<y</a> <a id="6273" class="Symbol">:</a> <a id="6275" href="Induction.WellFounded.html#6261" class="Bound">x</a> <a id="6277" href="Induction.WellFounded.html#6176" class="Datatype Operator"><⁺</a> <a id="6280" href="Induction.WellFounded.html#6263" class="Bound">y</a><a id="6281" class="Symbol">)</a> <a id="6283" class="Symbol">(</a><a id="6284" href="Induction.WellFounded.html#6284" class="Bound">y<z</a> <a id="6288" class="Symbol">:</a> <a id="6290" href="Induction.WellFounded.html#6263" class="Bound">y</a> <a id="6292" href="Induction.WellFounded.html#6176" class="Datatype Operator"><⁺</a> <a id="6295" href="Induction.WellFounded.html#6265" class="Bound">z</a><a id="6296" class="Symbol">)</a> <a id="6298" class="Symbol">→</a> <a id="6300" href="Induction.WellFounded.html#6261" class="Bound">x</a> <a id="6302" href="Induction.WellFounded.html#6176" class="Datatype Operator"><⁺</a> <a id="6305" href="Induction.WellFounded.html#6265" class="Bound">z</a>
|
|||
|
|
|||
|
<a id="TransitiveClosure.downwardsClosed"></a><a id="6310" href="Induction.WellFounded.html#6310" class="Function">downwardsClosed</a> <a id="6326" class="Symbol">:</a> <a id="6328" class="Symbol">∀</a> <a id="6330" class="Symbol">{</a><a id="6331" href="Induction.WellFounded.html#6331" class="Bound">x</a> <a id="6333" href="Induction.WellFounded.html#6333" class="Bound">y</a><a id="6334" class="Symbol">}</a> <a id="6336" class="Symbol">→</a> <a id="6338" href="Induction.WellFounded.html#1356" class="Datatype">Acc</a> <a id="6342" href="Induction.WellFounded.html#6176" class="Datatype Operator">_<⁺_</a> <a id="6347" href="Induction.WellFounded.html#6333" class="Bound">y</a> <a id="6349" class="Symbol">→</a> <a id="6351" href="Induction.WellFounded.html#6331" class="Bound">x</a> <a id="6353" href="Induction.WellFounded.html#6176" class="Datatype Operator"><⁺</a> <a id="6356" href="Induction.WellFounded.html#6333" class="Bound">y</a> <a id="6358" class="Symbol">→</a> <a id="6360" href="Induction.WellFounded.html#1356" class="Datatype">Acc</a> <a id="6364" href="Induction.WellFounded.html#6176" class="Datatype Operator">_<⁺_</a> <a id="6369" href="Induction.WellFounded.html#6331" class="Bound">x</a>
|
|||
|
<a id="6373" href="Induction.WellFounded.html#6310" class="Function">downwardsClosed</a> <a id="6389" class="Symbol">(</a><a id="6390" href="Induction.WellFounded.html#1418" class="InductiveConstructor">acc</a> <a id="6394" href="Induction.WellFounded.html#6394" class="Bound">rs</a><a id="6396" class="Symbol">)</a> <a id="6398" href="Induction.WellFounded.html#6398" class="Bound">x<y</a> <a id="6402" class="Symbol">=</a> <a id="6404" href="Induction.WellFounded.html#1418" class="InductiveConstructor">acc</a> <a id="6408" class="Symbol">λ</a> <a id="6410" href="Induction.WellFounded.html#6410" class="Bound">z<x</a> <a id="6414" class="Symbol">→</a> <a id="6416" href="Induction.WellFounded.html#6394" class="Bound">rs</a> <a id="6419" class="Symbol">(</a><a id="6420" href="Induction.WellFounded.html#6250" class="InductiveConstructor">trans</a> <a id="6426" href="Induction.WellFounded.html#6410" class="Bound">z<x</a> <a id="6430" href="Induction.WellFounded.html#6398" class="Bound">x<y</a><a id="6433" class="Symbol">)</a>
|
|||
|
|
|||
|
<a id="6438" class="Keyword">mutual</a>
|
|||
|
|
|||
|
<a id="TransitiveClosure.accessible"></a><a id="6450" href="Induction.WellFounded.html#6450" class="Function">accessible</a> <a id="6461" class="Symbol">:</a> <a id="6463" class="Symbol">∀</a> <a id="6465" class="Symbol">{</a><a id="6466" href="Induction.WellFounded.html#6466" class="Bound">x</a><a id="6467" class="Symbol">}</a> <a id="6469" class="Symbol">→</a> <a id="6471" href="Induction.WellFounded.html#1356" class="Datatype">Acc</a> <a id="6475" href="Induction.WellFounded.html#6131" class="Bound Operator">_<_</a> <a id="6479" href="Induction.WellFounded.html#6466" class="Bound">x</a> <a id="6481" class="Symbol">→</a> <a id="6483" href="Induction.WellFounded.html#1356" class="Datatype">Acc</a> <a id="6487" href="Induction.WellFounded.html#6176" class="Datatype Operator">_<⁺_</a> <a id="6492" href="Induction.WellFounded.html#6466" class="Bound">x</a>
|
|||
|
<a id="6498" href="Induction.WellFounded.html#6450" class="Function">accessible</a> <a id="6509" href="Induction.WellFounded.html#6509" class="Bound">acc-x</a> <a id="6515" class="Symbol">=</a> <a id="6517" href="Induction.WellFounded.html#1418" class="InductiveConstructor">acc</a> <a id="6521" class="Symbol">(</a><a id="6522" href="Induction.WellFounded.html#6546" class="Function">accessible′</a> <a id="6534" href="Induction.WellFounded.html#6509" class="Bound">acc-x</a><a id="6539" class="Symbol">)</a>
|
|||
|
|
|||
|
<a id="TransitiveClosure.accessible′"></a><a id="6546" href="Induction.WellFounded.html#6546" class="Function">accessible′</a> <a id="6558" class="Symbol">:</a> <a id="6560" class="Symbol">∀</a> <a id="6562" class="Symbol">{</a><a id="6563" href="Induction.WellFounded.html#6563" class="Bound">x</a><a id="6564" class="Symbol">}</a> <a id="6566" class="Symbol">→</a> <a id="6568" href="Induction.WellFounded.html#1356" class="Datatype">Acc</a> <a id="6572" href="Induction.WellFounded.html#6131" class="Bound Operator">_<_</a> <a id="6576" href="Induction.WellFounded.html#6563" class="Bound">x</a> <a id="6578" class="Symbol">→</a> <a id="6580" href="Induction.WellFounded.html#1148" class="Function">WfRec</a> <a id="6586" href="Induction.WellFounded.html#6176" class="Datatype Operator">_<⁺_</a> <a id="6591" class="Symbol">(</a><a id="6592" href="Induction.WellFounded.html#1356" class="Datatype">Acc</a> <a id="6596" href="Induction.WellFounded.html#6176" class="Datatype Operator">_<⁺_</a><a id="6600" class="Symbol">)</a> <a id="6602" href="Induction.WellFounded.html#6563" class="Bound">x</a>
|
|||
|
<a id="6608" href="Induction.WellFounded.html#6546" class="Function">accessible′</a> <a id="6620" class="Symbol">(</a><a id="6621" href="Induction.WellFounded.html#1418" class="InductiveConstructor">acc</a> <a id="6625" href="Induction.WellFounded.html#6625" class="Bound">rs</a><a id="6627" class="Symbol">)</a> <a id="6629" href="Induction.WellFounded.html#6207" class="InductiveConstructor Operator">[</a> <a id="6631" href="Induction.WellFounded.html#6631" class="Bound">y<x</a> <a id="6635" href="Induction.WellFounded.html#6207" class="InductiveConstructor Operator">]</a> <a id="6645" class="Symbol">=</a> <a id="6647" href="Induction.WellFounded.html#6450" class="Function">accessible</a> <a id="6658" class="Symbol">(</a><a id="6659" href="Induction.WellFounded.html#6625" class="Bound">rs</a> <a id="6662" href="Induction.WellFounded.html#6631" class="Bound">y<x</a><a id="6665" class="Symbol">)</a>
|
|||
|
<a id="6671" href="Induction.WellFounded.html#6546" class="CatchallClause Function">accessible′</a><a id="6682" class="CatchallClause"> </a><a id="6683" href="Induction.WellFounded.html#6683" class="CatchallClause Bound">acc-x</a><a id="6688" class="CatchallClause"> </a><a id="6692" class="CatchallClause Symbol">(</a><a id="6693" href="Induction.WellFounded.html#6250" class="CatchallClause InductiveConstructor">trans</a><a id="6698" class="CatchallClause"> </a><a id="6699" href="Induction.WellFounded.html#6699" class="CatchallClause Bound">y<z</a><a id="6702" class="CatchallClause"> </a><a id="6703" href="Induction.WellFounded.html#6703" class="CatchallClause Bound">z<x</a><a id="6706" class="CatchallClause Symbol">)</a> <a id="6708" class="Symbol">=</a>
|
|||
|
<a id="6716" href="Induction.WellFounded.html#6310" class="Function">downwardsClosed</a> <a id="6732" class="Symbol">(</a><a id="6733" href="Induction.WellFounded.html#6546" class="Function">accessible′</a> <a id="6745" href="Induction.WellFounded.html#6683" class="Bound">acc-x</a> <a id="6751" href="Induction.WellFounded.html#6703" class="Bound">z<x</a><a id="6754" class="Symbol">)</a> <a id="6756" href="Induction.WellFounded.html#6699" class="Bound">y<z</a>
|
|||
|
|
|||
|
<a id="TransitiveClosure.wellFounded"></a><a id="6763" href="Induction.WellFounded.html#6763" class="Function">wellFounded</a> <a id="6775" class="Symbol">:</a> <a id="6777" href="Induction.WellFounded.html#1604" class="Function">WellFounded</a> <a id="6789" href="Induction.WellFounded.html#6131" class="Bound Operator">_<_</a> <a id="6793" class="Symbol">→</a> <a id="6795" href="Induction.WellFounded.html#1604" class="Function">WellFounded</a> <a id="6807" href="Induction.WellFounded.html#6176" class="Datatype Operator">_<⁺_</a>
|
|||
|
<a id="6814" href="Induction.WellFounded.html#6763" class="Function">wellFounded</a> <a id="6826" href="Induction.WellFounded.html#6826" class="Bound">wf</a> <a id="6829" class="Symbol">=</a> <a id="6831" class="Symbol">λ</a> <a id="6833" href="Induction.WellFounded.html#6833" class="Bound">x</a> <a id="6835" class="Symbol">→</a> <a id="6837" href="Induction.WellFounded.html#6450" class="Function">accessible</a> <a id="6848" class="Symbol">(</a><a id="6849" href="Induction.WellFounded.html#6826" class="Bound">wf</a> <a id="6852" href="Induction.WellFounded.html#6833" class="Bound">x</a><a id="6853" class="Symbol">)</a>
|
|||
|
|
|||
|
<a id="6858" class="Symbol">{-#</a> <a id="6862" class="Keyword">WARNING_ON_USAGE</a> <a id="6879" class="Pragma">_<⁺_</a>
|
|||
|
<a id="6886" class="String">"Warning: _<⁺_ was deprecated in v1.5.
|
|||
|
\ \Please use TransClosure from Relation.Binary.Construct.Closure.Transitive instead."</a>
|
|||
|
<a id="7014" class="Symbol">#-}</a>
|
|||
|
|
|||
|
|
|||
|
<a id="7020" class="Comment">-- DEPRECATED in v1.3.</a>
|
|||
|
<a id="7043" class="Comment">-- Please use `×-Lex` from `Data.Product.Relation.Binary.Lex.Strict` instead.</a>
|
|||
|
<a id="7121" class="Keyword">module</a> <a id="Lexicographic"></a><a id="7128" href="Induction.WellFounded.html#7128" class="Module">Lexicographic</a> <a id="7142" class="Symbol">{</a><a id="7143" href="Induction.WellFounded.html#7143" class="Bound">A</a> <a id="7145" class="Symbol">:</a> <a id="7147" href="Agda.Primitive.html#388" class="Primitive">Set</a> <a id="7151" href="Induction.WellFounded.html#863" class="Generalizable">a</a><a id="7152" class="Symbol">}</a> <a id="7154" class="Symbol">{</a><a id="7155" href="Induction.WellFounded.html#7155" class="Bound">B</a> <a id="7157" class="Symbol">:</a> <a id="7159" href="Induction.WellFounded.html#7143" class="Bound">A</a> <a id="7161" class="Symbol">→</a> <a id="7163" href="Agda.Primitive.html#388" class="Primitive">Set</a> <a id="7167" href="Induction.WellFounded.html#865" class="Generalizable">b</a><a id="7168" class="Symbol">}</a>
|
|||
|
<a id="7191" class="Symbol">(</a><a id="7192" href="Induction.WellFounded.html#7192" class="Bound">RelA</a> <a id="7197" class="Symbol">:</a> <a id="7199" href="Relation.Binary.Core.html#896" class="Function">Rel</a> <a id="7203" href="Induction.WellFounded.html#7143" class="Bound">A</a> <a id="7205" href="Induction.WellFounded.html#869" class="Generalizable">ℓ₁</a><a id="7207" class="Symbol">)</a>
|
|||
|
<a id="7230" class="Symbol">(</a><a id="7231" href="Induction.WellFounded.html#7231" class="Bound">RelB</a> <a id="7236" class="Symbol">:</a> <a id="7238" class="Symbol">∀</a> <a id="7240" href="Induction.WellFounded.html#7240" class="Bound">x</a> <a id="7242" class="Symbol">→</a> <a id="7244" href="Relation.Binary.Core.html#896" class="Function">Rel</a> <a id="7248" class="Symbol">(</a><a id="7249" href="Induction.WellFounded.html#7155" class="Bound">B</a> <a id="7251" href="Induction.WellFounded.html#7240" class="Bound">x</a><a id="7252" class="Symbol">)</a> <a id="7254" href="Induction.WellFounded.html#872" class="Generalizable">ℓ₂</a><a id="7256" class="Symbol">)</a> <a id="7258" class="Keyword">where</a>
|
|||
|
|
|||
|
<a id="7267" class="Keyword">infix</a> <a id="7273" class="Number">4</a> <a id="7275" href="Induction.WellFounded.html#7286" class="Datatype Operator">_<_</a>
|
|||
|
<a id="7281" class="Keyword">data</a> <a id="Lexicographic._<_"></a><a id="7286" href="Induction.WellFounded.html#7286" class="Datatype Operator">_<_</a> <a id="7290" class="Symbol">:</a> <a id="7292" href="Relation.Binary.Core.html#896" class="Function">Rel</a> <a id="7296" class="Symbol">(</a><a id="7297" href="Agda.Builtin.Sigma.html#165" class="Record">Σ</a> <a id="7299" href="Induction.WellFounded.html#7143" class="Bound">A</a> <a id="7301" href="Induction.WellFounded.html#7155" class="Bound">B</a><a id="7302" class="Symbol">)</a> <a id="7304" class="Symbol">(</a><a id="7305" href="Induction.WellFounded.html#7151" class="Bound">a</a> <a id="7307" href="Agda.Primitive.html#961" class="Primitive Operator">⊔</a> <a id="7309" href="Induction.WellFounded.html#7167" class="Bound">b</a> <a id="7311" href="Agda.Primitive.html#961" class="Primitive Operator">⊔</a> <a id="7313" href="Induction.WellFounded.html#7205" class="Bound">ℓ₁</a> <a id="7316" href="Agda.Primitive.html#961" class="Primitive Operator">⊔</a> <a id="7318" href="Induction.WellFounded.html#7254" class="Bound">ℓ₂</a><a id="7320" class="Symbol">)</a> <a id="7322" class="Keyword">where</a>
|
|||
|
<a id="Lexicographic._<_.left"></a><a id="7332" href="Induction.WellFounded.html#7332" class="InductiveConstructor">left</a> <a id="7338" class="Symbol">:</a> <a id="7340" class="Symbol">∀</a> <a id="7342" class="Symbol">{</a><a id="7343" href="Induction.WellFounded.html#7343" class="Bound">x₁</a> <a id="7346" href="Induction.WellFounded.html#7346" class="Bound">y₁</a> <a id="7349" href="Induction.WellFounded.html#7349" class="Bound">x₂</a> <a id="7352" href="Induction.WellFounded.html#7352" class="Bound">y₂</a><a id="7354" class="Symbol">}</a> <a id="7356" class="Symbol">(</a><a id="7357" href="Induction.WellFounded.html#7357" class="Bound">x₁<x₂</a> <a id="7363" class="Symbol">:</a> <a id="7365" href="Induction.WellFounded.html#7192" class="Bound">RelA</a> <a id="7372" href="Induction.WellFounded.html#7343" class="Bound">x₁</a> <a id="7375" href="Induction.WellFounded.html#7349" class="Bound">x₂</a><a id="7377" class="Symbol">)</a> <a id="7379" class="Symbol">→</a> <a id="7381" class="Symbol">(</a><a id="7382" href="Induction.WellFounded.html#7343" class="Bound">x₁</a> <a id="7385" href="Agda.Builtin.Sigma.html#235" class="InductiveConstructor Operator">,</a> <a id="7387" href="Induction.WellFounded.html#7346" class="Bound">y₁</a><a id="7389" class="Symbol">)</a> <a id="7391" href="Induction.WellFounded.html#7286" class="Datatype Operator"><</a> <a id="7393" class="Symbol">(</a><a id="7394" href="Induction.WellFounded.html#7349" class="Bound">x₂</a> <a id="7397" href="Agda.Builtin.Sigma.html#235" class="InductiveConstructor Operator">,</a> <a id="7399" href="Induction.WellFounded.html#7352" class="Bound">y₂</a><a id="7401" class="Symbol">)</a>
|
|||
|
<a id="Lexicographic._<_.right"></a><a id="7407" href="Induction.WellFounded.html#7407" class="InductiveConstructor">right</a> <a id="7413" class="Symbol">:</a> <a id="7415" class="Symbol">∀</a> <a id="7417" class="Symbol">{</a><a id="7418" href="Induction.WellFounded.html#7418" class="Bound">x</a> <a id="7420" href="Induction.WellFounded.html#7420" class="Bound">y₁</a> <a id="7423" href="Induction.WellFounded.html#7423" class="Bound">y₂</a><a id="7425" class="Symbol">}</a> <a id="7431" class="Symbol">(</a><a id="7432" href="Induction.WellFounded.html#7432" class="Bound">y₁<y₂</a> <a id="7438" class="Symbol">:</a> <a id="7440" href="Induction.WellFounded.html#7231" class="Bound">RelB</a> <a id="7445" href="Induction.WellFounded.html#7418" class="Bound">x</a> <a id="7447" href="Induction.WellFounded.html#7420" class="Bound">y₁</a> <a id="7450" href="Induction.WellFounded.html#7423" class="Bound">y₂</a><a id="7452" class="Symbol">)</a> <a id="7454" class="Symbol">→</a> <a id="7456" class="Symbol">(</a><a id="7457" href="Induction.WellFounded.html#7418" class="Bound">x</a> <a id="7460" href="Agda.Builtin.Sigma.html#235" class="InductiveConstructor Operator">,</a> <a id="7462" href="Induction.WellFounded.html#7420" class="Bound">y₁</a><a id="7464" class="Symbol">)</a> <a id="7466" href="Induction.WellFounded.html#7286" class="Datatype Operator"><</a> <a id="7468" class="Symbol">(</a><a id="7469" href="Induction.WellFounded.html#7418" class="Bound">x</a> <a id="7472" href="Agda.Builtin.Sigma.html#235" class="InductiveConstructor Operator">,</a> <a id="7474" href="Induction.WellFounded.html#7423" class="Bound">y₂</a><a id="7476" class="Symbol">)</a>
|
|||
|
|
|||
|
<a id="7481" class="Keyword">mutual</a>
|
|||
|
|
|||
|
<a id="Lexicographic.accessible"></a><a id="7493" href="Induction.WellFounded.html#7493" class="Function">accessible</a> <a id="7504" class="Symbol">:</a> <a id="7506" class="Symbol">∀</a> <a id="7508" class="Symbol">{</a><a id="7509" href="Induction.WellFounded.html#7509" class="Bound">x</a> <a id="7511" href="Induction.WellFounded.html#7511" class="Bound">y</a><a id="7512" class="Symbol">}</a> <a id="7514" class="Symbol">→</a>
|
|||
|
<a id="7533" href="Induction.WellFounded.html#1356" class="Datatype">Acc</a> <a id="7537" href="Induction.WellFounded.html#7192" class="Bound">RelA</a> <a id="7542" href="Induction.WellFounded.html#7509" class="Bound">x</a> <a id="7544" class="Symbol">→</a> <a id="7546" class="Symbol">(∀</a> <a id="7549" class="Symbol">{</a><a id="7550" href="Induction.WellFounded.html#7550" class="Bound">x</a><a id="7551" class="Symbol">}</a> <a id="7553" class="Symbol">→</a> <a id="7555" href="Induction.WellFounded.html#1604" class="Function">WellFounded</a> <a id="7567" class="Symbol">(</a><a id="7568" href="Induction.WellFounded.html#7231" class="Bound">RelB</a> <a id="7573" href="Induction.WellFounded.html#7550" class="Bound">x</a><a id="7574" class="Symbol">))</a> <a id="7577" class="Symbol">→</a>
|
|||
|
<a id="7596" href="Induction.WellFounded.html#1356" class="Datatype">Acc</a> <a id="7600" href="Induction.WellFounded.html#7286" class="Datatype Operator">_<_</a> <a id="7604" class="Symbol">(</a><a id="7605" href="Induction.WellFounded.html#7509" class="Bound">x</a> <a id="7607" href="Agda.Builtin.Sigma.html#235" class="InductiveConstructor Operator">,</a> <a id="7609" href="Induction.WellFounded.html#7511" class="Bound">y</a><a id="7610" class="Symbol">)</a>
|
|||
|
<a id="7616" href="Induction.WellFounded.html#7493" class="Function">accessible</a> <a id="7627" href="Induction.WellFounded.html#7627" class="Bound">accA</a> <a id="7632" href="Induction.WellFounded.html#7632" class="Bound">wfB</a> <a id="7636" class="Symbol">=</a> <a id="7638" href="Induction.WellFounded.html#1418" class="InductiveConstructor">acc</a> <a id="7642" class="Symbol">(</a><a id="7643" href="Induction.WellFounded.html#7679" class="Function">accessible′</a> <a id="7655" href="Induction.WellFounded.html#7627" class="Bound">accA</a> <a id="7660" class="Symbol">(</a><a id="7661" href="Induction.WellFounded.html#7632" class="Bound">wfB</a> <a id="7665" class="Symbol">_)</a> <a id="7668" href="Induction.WellFounded.html#7632" class="Bound">wfB</a><a id="7671" class="Symbol">)</a>
|
|||
|
|
|||
|
|
|||
|
<a id="Lexicographic.accessible′"></a><a id="7679" href="Induction.WellFounded.html#7679" class="Function">accessible′</a> <a id="7691" class="Symbol">:</a>
|
|||
|
<a id="7699" class="Symbol">∀</a> <a id="7701" class="Symbol">{</a><a id="7702" href="Induction.WellFounded.html#7702" class="Bound">x</a> <a id="7704" href="Induction.WellFounded.html#7704" class="Bound">y</a><a id="7705" class="Symbol">}</a> <a id="7707" class="Symbol">→</a>
|
|||
|
<a id="7715" href="Induction.WellFounded.html#1356" class="Datatype">Acc</a> <a id="7719" href="Induction.WellFounded.html#7192" class="Bound">RelA</a> <a id="7724" href="Induction.WellFounded.html#7702" class="Bound">x</a> <a id="7726" class="Symbol">→</a> <a id="7728" href="Induction.WellFounded.html#1356" class="Datatype">Acc</a> <a id="7732" class="Symbol">(</a><a id="7733" href="Induction.WellFounded.html#7231" class="Bound">RelB</a> <a id="7738" href="Induction.WellFounded.html#7702" class="Bound">x</a><a id="7739" class="Symbol">)</a> <a id="7741" href="Induction.WellFounded.html#7704" class="Bound">y</a> <a id="7743" class="Symbol">→</a> <a id="7745" class="Symbol">(∀</a> <a id="7748" class="Symbol">{</a><a id="7749" href="Induction.WellFounded.html#7749" class="Bound">x</a><a id="7750" class="Symbol">}</a> <a id="7752" class="Symbol">→</a> <a id="7754" href="Induction.WellFounded.html#1604" class="Function">WellFounded</a> <a id="7766" class="Symbol">(</a><a id="7767" href="Induction.WellFounded.html#7231" class="Bound">RelB</a> <a id="7772" href="Induction.WellFounded.html#7749" class="Bound">x</a><a id="7773" class="Symbol">))</a> <a id="7776" class="Symbol">→</a>
|
|||
|
<a id="7784" href="Induction.WellFounded.html#1148" class="Function">WfRec</a> <a id="7790" href="Induction.WellFounded.html#7286" class="Datatype Operator">_<_</a> <a id="7794" class="Symbol">(</a><a id="7795" href="Induction.WellFounded.html#1356" class="Datatype">Acc</a> <a id="7799" href="Induction.WellFounded.html#7286" class="Datatype Operator">_<_</a><a id="7802" class="Symbol">)</a> <a id="7804" class="Symbol">(</a><a id="7805" href="Induction.WellFounded.html#7702" class="Bound">x</a> <a id="7807" href="Agda.Builtin.Sigma.html#235" class="InductiveConstructor Operator">,</a> <a id="7809" href="Induction.WellFounded.html#7704" class="Bound">y</a><a id="7810" class="Symbol">)</a>
|
|||
|
<a id="7816" href="Induction.WellFounded.html#7679" class="Function">accessible′</a> <a id="7828" class="Symbol">(</a><a id="7829" href="Induction.WellFounded.html#1418" class="InductiveConstructor">acc</a> <a id="7833" href="Induction.WellFounded.html#7833" class="Bound">rsA</a><a id="7836" class="Symbol">)</a> <a id="7838" class="Symbol">_</a> <a id="7843" href="Induction.WellFounded.html#7843" class="Bound">wfB</a> <a id="7847" class="Symbol">(</a><a id="7848" href="Induction.WellFounded.html#7332" class="InductiveConstructor">left</a> <a id="7854" href="Induction.WellFounded.html#7854" class="Bound">x′<x</a><a id="7858" class="Symbol">)</a> <a id="7860" class="Symbol">=</a> <a id="7862" href="Induction.WellFounded.html#7493" class="Function">accessible</a> <a id="7873" class="Symbol">(</a><a id="7874" href="Induction.WellFounded.html#7833" class="Bound">rsA</a> <a id="7878" href="Induction.WellFounded.html#7854" class="Bound">x′<x</a><a id="7882" class="Symbol">)</a> <a id="7884" href="Induction.WellFounded.html#7843" class="Bound">wfB</a>
|
|||
|
<a id="7892" href="Induction.WellFounded.html#7679" class="CatchallClause Function">accessible′</a><a id="7903" class="CatchallClause"> </a><a id="7904" href="Induction.WellFounded.html#7904" class="CatchallClause Bound">accA</a><a id="7908" class="CatchallClause"> </a><a id="7909" class="CatchallClause Symbol">(</a><a id="7910" href="Induction.WellFounded.html#1418" class="CatchallClause InductiveConstructor">acc</a><a id="7913" class="CatchallClause"> </a><a id="7914" href="Induction.WellFounded.html#7914" class="CatchallClause Bound">rsB</a><a id="7917" class="CatchallClause Symbol">)</a><a id="7918" class="CatchallClause"> </a><a id="7919" href="Induction.WellFounded.html#7919" class="CatchallClause Bound">wfB</a><a id="7922" class="CatchallClause"> </a><a id="7923" class="CatchallClause Symbol">(</a><a id="7924" href="Induction.WellFounded.html#7407" class="CatchallClause InductiveConstructor">right</a><a id="7929" class="CatchallClause"> </a><a id="7930" href="Induction.WellFounded.html#7930" class="CatchallClause Bound">y′<y</a><a id="7934" class="CatchallClause Symbol">)</a> <a id="7936" class="Symbol">=</a>
|
|||
|
<a id="7944" href="Induction.WellFounded.html#1418" class="InductiveConstructor">acc</a> <a id="7948" class="Symbol">(</a><a id="7949" href="Induction.WellFounded.html#7679" class="Function">accessible′</a> <a id="7961" href="Induction.WellFounded.html#7904" class="Bound">accA</a> <a id="7966" class="Symbol">(</a><a id="7967" href="Induction.WellFounded.html#7914" class="Bound">rsB</a> <a id="7971" href="Induction.WellFounded.html#7930" class="Bound">y′<y</a><a id="7975" class="Symbol">)</a> <a id="7977" href="Induction.WellFounded.html#7919" class="Bound">wfB</a><a id="7980" class="Symbol">)</a>
|
|||
|
|
|||
|
<a id="Lexicographic.wellFounded"></a><a id="7985" href="Induction.WellFounded.html#7985" class="Function">wellFounded</a> <a id="7997" class="Symbol">:</a> <a id="7999" href="Induction.WellFounded.html#1604" class="Function">WellFounded</a> <a id="8011" href="Induction.WellFounded.html#7192" class="Bound">RelA</a> <a id="8016" class="Symbol">→</a> <a id="8018" class="Symbol">(∀</a> <a id="8021" class="Symbol">{</a><a id="8022" href="Induction.WellFounded.html#8022" class="Bound">x</a><a id="8023" class="Symbol">}</a> <a id="8025" class="Symbol">→</a> <a id="8027" href="Induction.WellFounded.html#1604" class="Function">WellFounded</a> <a id="8039" class="Symbol">(</a><a id="8040" href="Induction.WellFounded.html#7231" class="Bound">RelB</a> <a id="8045" href="Induction.WellFounded.html#8022" class="Bound">x</a><a id="8046" class="Symbol">))</a> <a id="8049" class="Symbol">→</a>
|
|||
|
<a id="8067" href="Induction.WellFounded.html#1604" class="Function">WellFounded</a> <a id="8079" href="Induction.WellFounded.html#7286" class="Datatype Operator">_<_</a>
|
|||
|
<a id="8085" href="Induction.WellFounded.html#7985" class="Function">wellFounded</a> <a id="8097" href="Induction.WellFounded.html#8097" class="Bound">wfA</a> <a id="8101" href="Induction.WellFounded.html#8101" class="Bound">wfB</a> <a id="8105" href="Induction.WellFounded.html#8105" class="Bound">p</a> <a id="8107" class="Symbol">=</a> <a id="8109" href="Induction.WellFounded.html#7493" class="Function">accessible</a> <a id="8120" class="Symbol">(</a><a id="8121" href="Induction.WellFounded.html#8097" class="Bound">wfA</a> <a id="8125" class="Symbol">(</a><a id="8126" href="Data.Product.Base.html#636" class="Field">proj₁</a> <a id="8132" href="Induction.WellFounded.html#8105" class="Bound">p</a><a id="8133" class="Symbol">))</a> <a id="8136" href="Induction.WellFounded.html#8101" class="Bound">wfB</a>
|
|||
|
|
|||
|
<a id="Lexicographic.well-founded"></a><a id="8143" href="Induction.WellFounded.html#8143" class="Function">well-founded</a> <a id="8156" class="Symbol">=</a> <a id="8158" href="Induction.WellFounded.html#7985" class="Function">wellFounded</a>
|
|||
|
|
|||
|
<a id="8173" class="Symbol">{-#</a> <a id="8177" class="Keyword">WARNING_ON_USAGE</a> <a id="8194" class="Pragma">_<_</a>
|
|||
|
<a id="8200" class="String">"Warning: _<_ was deprecated in v1.3.
|
|||
|
\ \Please use `×-Lex` from `Data.Product.Relation.Binary.Lex.Strict` instead."</a>
|
|||
|
<a id="8319" class="Symbol">#-}</a>
|
|||
|
<a id="8325" class="Symbol">{-#</a> <a id="8329" class="Keyword">WARNING_ON_USAGE</a> <a id="8346" class="Pragma">accessible</a>
|
|||
|
<a id="8359" class="String">"Warning: accessible was deprecated in v1.3."</a>
|
|||
|
<a id="8407" class="Symbol">#-}</a>
|
|||
|
<a id="8413" class="Symbol">{-#</a> <a id="8417" class="Keyword">WARNING_ON_USAGE</a> <a id="8434" class="Pragma">accessible′</a>
|
|||
|
<a id="8448" class="String">"Warning: accessible′ was deprecated in v1.3."</a>
|
|||
|
<a id="8497" class="Symbol">#-}</a>
|
|||
|
<a id="8503" class="Symbol">{-#</a> <a id="8507" class="Keyword">WARNING_ON_USAGE</a> <a id="8524" class="Pragma">wellFounded</a>
|
|||
|
<a id="8538" class="String">"Warning: wellFounded was deprecated in v1.3.
|
|||
|
\ \Please use `×-wellFounded` from `Data.Product.Relation.Binary.Lex.Strict` instead."</a>
|
|||
|
<a id="8673" class="Symbol">#-}</a>
|
|||
|
|
|||
|
|
|||
|
|
|||
|
<a id="8680" class="Comment">------------------------------------------------------------------------</a>
|
|||
|
<a id="8753" class="Comment">-- DEPRECATED NAMES</a>
|
|||
|
<a id="8773" class="Comment">------------------------------------------------------------------------</a>
|
|||
|
<a id="8846" class="Comment">-- Please use the new names as continuing support for the old names is</a>
|
|||
|
<a id="8917" class="Comment">-- not guaranteed.</a>
|
|||
|
|
|||
|
<a id="8937" class="Comment">-- Version 1.0</a>
|
|||
|
|
|||
|
<a id="8953" class="Keyword">module</a> <a id="Inverse-image"></a><a id="8960" href="Induction.WellFounded.html#8960" class="Module">Inverse-image</a> <a id="8974" class="Symbol">=</a> <a id="8976" href="Induction.WellFounded.html#5360" class="Module">InverseImage</a>
|
|||
|
<a id="8989" class="Keyword">module</a> <a id="Transitive-closure"></a><a id="8996" href="Induction.WellFounded.html#8996" class="Module">Transitive-closure</a> <a id="9015" class="Symbol">=</a> <a id="9017" href="Induction.WellFounded.html#6100" class="Module">TransitiveClosure</a>
|
|||
|
</pre></body></html>
|