rachel.cafe/agda/Axiom.UniquenessOfIdentityProofs.html

79 lines
23 KiB
HTML
Raw Permalink Normal View History

2022-06-23 22:12:24 +02:00
<!DOCTYPE HTML>
<html><head><meta charset="utf-8"><title>Axiom.UniquenessOfIdentityProofs</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">-- Results concerning uniqueness of identity proofs</a>
<a id="158" class="Comment">------------------------------------------------------------------------</a>
<a id="232" class="Symbol">{-#</a> <a id="236" class="Keyword">OPTIONS</a> <a id="244" class="Pragma">--without-K</a> <a id="256" class="Pragma">--safe</a> <a id="263" class="Symbol">#-}</a>
<a id="268" class="Keyword">module</a> <a id="275" href="Axiom.UniquenessOfIdentityProofs.html" class="Module">Axiom.UniquenessOfIdentityProofs</a> <a id="308" class="Keyword">where</a>
<a id="315" class="Keyword">open</a> <a id="320" class="Keyword">import</a> <a id="327" href="Data.Bool.Base.html" class="Module">Data.Bool.Base</a> <a id="342" class="Keyword">using</a> <a id="348" class="Symbol">(</a><a id="349" href="Agda.Builtin.Bool.html#188" class="InductiveConstructor">true</a><a id="353" class="Symbol">;</a> <a id="355" href="Agda.Builtin.Bool.html#182" class="InductiveConstructor">false</a><a id="360" class="Symbol">)</a>
<a id="362" class="Keyword">open</a> <a id="367" class="Keyword">import</a> <a id="374" href="Data.Empty.html" class="Module">Data.Empty</a>
<a id="385" class="Keyword">open</a> <a id="390" class="Keyword">import</a> <a id="397" href="Relation.Nullary.Reflects.html" class="Module">Relation.Nullary.Reflects</a> <a id="423" class="Keyword">using</a> <a id="429" class="Symbol">(</a><a id="430" href="Relation.Nullary.Reflects.html#1031" class="Function">invert</a><a id="436" class="Symbol">)</a>
<a id="438" class="Keyword">open</a> <a id="443" class="Keyword">import</a> <a id="450" href="Relation.Nullary.html" class="Module">Relation.Nullary</a> <a id="467" class="Keyword">hiding</a> <a id="474" class="Symbol">(</a><a id="475" href="Relation.Nullary.html#2040" class="Function">Irrelevant</a><a id="485" class="Symbol">)</a>
<a id="487" class="Keyword">open</a> <a id="492" class="Keyword">import</a> <a id="499" href="Relation.Binary.Core.html" class="Module">Relation.Binary.Core</a>
<a id="520" class="Keyword">open</a> <a id="525" class="Keyword">import</a> <a id="532" href="Relation.Binary.Definitions.html" class="Module">Relation.Binary.Definitions</a>
<a id="560" class="Keyword">open</a> <a id="565" class="Keyword">import</a> <a id="572" href="Relation.Binary.PropositionalEquality.Core.html" class="Module">Relation.Binary.PropositionalEquality.Core</a>
<a id="615" class="Keyword">open</a> <a id="620" class="Keyword">import</a> <a id="627" href="Relation.Binary.PropositionalEquality.Properties.html" class="Module">Relation.Binary.PropositionalEquality.Properties</a>
<a id="677" class="Comment">------------------------------------------------------------------------</a>
<a id="750" class="Comment">-- Definition</a>
<a id="764" class="Comment">--</a>
<a id="767" class="Comment">-- Uniqueness of Identity Proofs (UIP) states that all proofs of</a>
<a id="832" class="Comment">-- equality are themselves equal. In other words, the equality relation</a>
<a id="904" class="Comment">-- is irrelevant. Here we define UIP relative to a given type.</a>
<a id="UIP"></a><a id="968" href="Axiom.UniquenessOfIdentityProofs.html#968" class="Function">UIP</a> <a id="972" class="Symbol">:</a> <a id="974" class="Symbol"></a> <a id="976" class="Symbol">{</a><a id="977" href="Axiom.UniquenessOfIdentityProofs.html#977" class="Bound">a</a><a id="978" class="Symbol">}</a> <a id="980" class="Symbol">(</a><a id="981" href="Axiom.UniquenessOfIdentityProofs.html#981" class="Bound">A</a> <a id="983" class="Symbol">:</a> <a id="985" href="Agda.Primitive.html#326" class="Primitive">Set</a> <a id="989" href="Axiom.UniquenessOfIdentityProofs.html#977" class="Bound">a</a><a id="990" class="Symbol">)</a> <a id="992" class="Symbol"></a> <a id="994" href="Agda.Primitive.html#326" class="Primitive">Set</a> <a id="998" href="Axiom.UniquenessOfIdentityProofs.html#977" class="Bound">a</a>
<a id="1000" href="Axiom.UniquenessOfIdentityProofs.html#968" class="Function">UIP</a> <a id="1004" href="Axiom.UniquenessOfIdentityProofs.html#1004" class="Bound">A</a> <a id="1006" class="Symbol">=</a> <a id="1008" href="Relation.Binary.Definitions.html#5065" class="Function">Irrelevant</a> <a id="1019" class="Symbol">{</a><a id="1020" class="Argument">A</a> <a id="1022" class="Symbol">=</a> <a id="1024" href="Axiom.UniquenessOfIdentityProofs.html#1004" class="Bound">A</a><a id="1025" class="Symbol">}</a> <a id="1027" href="Agda.Builtin.Equality.html#151" class="Datatype Operator">_≡_</a>
<a id="1032" class="Comment">------------------------------------------------------------------------</a>
<a id="1105" class="Comment">-- Properties</a>
<a id="1120" class="Comment">-- UIP always holds when using axiom K</a>
<a id="1159" class="Comment">-- (see `Axiom.UniquenessOfIdentityProofs.WithK`).</a>
<a id="1211" class="Comment">-- The existence of a constant function over proofs of equality for</a>
<a id="1279" class="Comment">-- elements in A is enough to prove UIP for A. Indeed, we can relate any</a>
<a id="1352" class="Comment">-- proof to its image via this function which we then know is equal to</a>
<a id="1423" class="Comment">-- the image of any other proof.</a>
<a id="1457" class="Keyword">module</a> <a id="Constant⇒UIP"></a><a id="1464" href="Axiom.UniquenessOfIdentityProofs.html#1464" class="Module">Constant⇒UIP</a>
<a id="1479" class="Symbol">{</a><a id="1480" href="Axiom.UniquenessOfIdentityProofs.html#1480" class="Bound">a</a><a id="1481" class="Symbol">}</a> <a id="1483" class="Symbol">{</a><a id="1484" href="Axiom.UniquenessOfIdentityProofs.html#1484" class="Bound">A</a> <a id="1486" class="Symbol">:</a> <a id="1488" href="Agda.Primitive.html#326" class="Primitive">Set</a> <a id="1492" href="Axiom.UniquenessOfIdentityProofs.html#1480" class="Bound">a</a><a id="1493" class="Symbol">}</a> <a id="1495" class="Symbol">(</a><a id="1496" href="Axiom.UniquenessOfIdentityProofs.html#1496" class="Bound">f</a> <a id="1498" class="Symbol">:</a> <a id="1500" href="Agda.Builtin.Equality.html#151" class="Datatype Operator">_≡_</a> <a id="1504" class="Symbol">{</a><a id="1505" class="Argument">A</a> <a id="1507" class="Symbol">=</a> <a id="1509" href="Axiom.UniquenessOfIdentityProofs.html#1484" class="Bound">A</a><a id="1510" class="Symbol">}</a> <a id="1512" href="Relation.Binary.Core.html#1254" class="Function Operator"></a> <a id="1514" href="Agda.Builtin.Equality.html#151" class="Datatype Operator">_≡_</a><a id="1517" class="Symbol">)</a>
<a id="1521" class="Symbol">(</a><a id="1522" href="Axiom.UniquenessOfIdentityProofs.html#1522" class="Bound">f-constant</a> <a id="1533" class="Symbol">:</a> <a id="1535" class="Symbol"></a> <a id="1537" class="Symbol">{</a><a id="1538" href="Axiom.UniquenessOfIdentityProofs.html#1538" class="Bound">a</a> <a id="1540" href="Axiom.UniquenessOfIdentityProofs.html#1540" class="Bound">b</a><a id="1541" class="Symbol">}</a> <a id="1543" class="Symbol">(</a><a id="1544" href="Axiom.UniquenessOfIdentityProofs.html#1544" class="Bound">p</a> <a id="1546" href="Axiom.UniquenessOfIdentityProofs.html#1546" class="Bound">q</a> <a id="1548" class="Symbol">:</a> <a id="1550" href="Axiom.UniquenessOfIdentityProofs.html#1538" class="Bound">a</a> <a id="1552" href="Agda.Builtin.Equality.html#151" class="Datatype Operator"></a> <a id="1554" href="Axiom.UniquenessOfIdentityProofs.html#1540" class="Bound">b</a><a id="1555" class="Symbol">)</a> <a id="1557" class="Symbol"></a> <a id="1559" href="Axiom.UniquenessOfIdentityProofs.html#1496" class="Bound">f</a> <a id="1561" href="Axiom.UniquenessOfIdentityProofs.html#1544" class="Bound">p</a> <a id="1563" href="Agda.Builtin.Equality.html#151" class="Datatype Operator"></a> <a id="1565" href="Axiom.UniquenessOfIdentityProofs.html#1496" class="Bound">f</a> <a id="1567" href="Axiom.UniquenessOfIdentityProofs.html#1546" class="Bound">q</a><a id="1568" class="Symbol">)</a>
<a id="1572" class="Keyword">where</a>
<a id="Constant⇒UIP.≡-canonical"></a><a id="1581" href="Axiom.UniquenessOfIdentityProofs.html#1581" class="Function">≡-canonical</a> <a id="1593" class="Symbol">:</a> <a id="1595" class="Symbol"></a> <a id="1597" class="Symbol">{</a><a id="1598" href="Axiom.UniquenessOfIdentityProofs.html#1598" class="Bound">a</a> <a id="1600" href="Axiom.UniquenessOfIdentityProofs.html#1600" class="Bound">b</a><a id="1601" class="Symbol">}</a> <a id="1603" class="Symbol">(</a><a id="1604" href="Axiom.UniquenessOfIdentityProofs.html#1604" class="Bound">p</a> <a id="1606" class="Symbol">:</a> <a id="1608" href="Axiom.UniquenessOfIdentityProofs.html#1598" class="Bound">a</a> <a id="1610" href="Agda.Builtin.Equality.html#151" class="Datatype Operator"></a> <a id="1612" href="Axiom.UniquenessOfIdentityProofs.html#1600" class="Bound">b</a><a id="1613" class="Symbol">)</a> <a id="1615" class="Symbol"></a> <a id="1617" href="Relation.Binary.PropositionalEquality.Core.html#1729" class="Function">trans</a> <a id="1623" class="Symbol">(</a><a id="1624" href="Relation.Binary.PropositionalEquality.Core.html#1684" class="Function">sym</a> <a id="1628" class="Symbol">(</a><a id="1629" href="Axiom.UniquenessOfIdentityProofs.html#1496" class="Bound">f</a> <a id="1631" href="Agda.Builtin.Equality.html#208" class="InductiveConstructor">refl</a><a id="1635" class="Symbol">))</a> <a id="1638" class="Symbol">(</a><a id="1639" href="Axiom.UniquenessOfIdentityProofs.html#1496" class="Bound">f</a> <a id="1641" href="Axiom.UniquenessOfIdentityProofs.html#1604" class="Bound">p</a><a id="1642" class="Symbol">)</a> <a id="1644" href="Agda.Builtin.Equality.html#151" class="Datatype Operator"></a> <a id="1646" href="Axiom.UniquenessOfIdentityProofs.html#1604" class="Bound">p</a>
<a id="1650" href="Axiom.UniquenessOfIdentityProofs.html#1581" class="Function">≡-canonical</a> <a id="1662" href="Agda.Builtin.Equality.html#208" class="InductiveConstructor">refl</a> <a id="1667" class="Symbol">=</a> <a id="1669" href="Relation.Binary.PropositionalEquality.Properties.html#1062" class="Function">trans-symˡ</a> <a id="1680" class="Symbol">(</a><a id="1681" href="Axiom.UniquenessOfIdentityProofs.html#1496" class="Bound">f</a> <a id="1683" href="Agda.Builtin.Equality.html#208" class="InductiveConstructor">refl</a><a id="1687" class="Symbol">)</a>
<a id="Constant⇒UIP.≡-irrelevant"></a><a id="1692" href="Axiom.UniquenessOfIdentityProofs.html#1692" class="Function">≡-irrelevant</a> <a id="1705" class="Symbol">:</a> <a id="1707" href="Axiom.UniquenessOfIdentityProofs.html#968" class="Function">UIP</a> <a id="1711" href="Axiom.UniquenessOfIdentityProofs.html#1484" class="Bound">A</a>
<a id="1715" href="Axiom.UniquenessOfIdentityProofs.html#1692" class="Function">≡-irrelevant</a> <a id="1728" href="Axiom.UniquenessOfIdentityProofs.html#1728" class="Bound">p</a> <a id="1730" href="Axiom.UniquenessOfIdentityProofs.html#1730" class="Bound">q</a> <a id="1732" class="Symbol">=</a> <a id="1734" href="Relation.Binary.PropositionalEquality.Core.html#2806" class="Function Operator">begin</a>
<a id="1744" href="Axiom.UniquenessOfIdentityProofs.html#1728" class="Bound">p</a> <a id="1771" href="Relation.Binary.PropositionalEquality.Core.html#2923" class="Function">≡⟨</a> <a id="1774" href="Relation.Binary.PropositionalEquality.Core.html#1684" class="Function">sym</a> <a id="1778" class="Symbol">(</a><a id="1779" href="Axiom.UniquenessOfIdentityProofs.html#1581" class="Function">≡-canonical</a> <a id="1791" href="Axiom.UniquenessOfIdentityProofs.html#1728" class="Bound">p</a><a id="1792" class="Symbol">)</a> <a id="1794" href="Relation.Binary.PropositionalEquality.Core.html#2923" class="Function"></a>
<a id="1800" href="Relation.Binary.PropositionalEquality.Core.html#1729" class="Function">trans</a> <a id="1806" class="Symbol">(</a><a id="1807" href="Relation.Binary.PropositionalEquality.Core.html#1684" class="Function">sym</a> <a id="1811" class="Symbol">(</a><a id="1812" href="Axiom.UniquenessOfIdentityProofs.html#1496" class="Bound">f</a> <a id="1814" href="Agda.Builtin.Equality.html#208" class="InductiveConstructor">refl</a><a id="1818" class="Symbol">))</a> <a id="1821" class="Symbol">(</a><a id="1822" href="Axiom.UniquenessOfIdentityProofs.html#1496" class="Bound">f</a> <a id="1824" href="Axiom.UniquenessOfIdentityProofs.html#1728" class="Bound">p</a><a id="1825" class="Symbol">)</a> <a id="1827" href="Relation.Binary.PropositionalEquality.Core.html#2923" class="Function">≡⟨</a> <a id="1830" href="Relation.Binary.PropositionalEquality.Core.html#1130" class="Function">cong</a> <a id="1835" class="Symbol">(</a><a id="1836" href="Relation.Binary.PropositionalEquality.Core.html#1729" class="Function">trans</a> <a id="1842" class="Symbol">_)</a> <a id="1845" class="Symbol">(</a><a id="1846" href="Axiom.UniquenessOfIdentityProofs.html#1522" class="Bound">f-constant</a> <a id="1857" href="Axiom.UniquenessOfIdentityProofs.html#1728" class="Bound">p</a> <a id="1859" href="Axiom.UniquenessOfIdentityProofs.html#1730" class="Bound">q</a><a id="1860" class="Symbol">)</a> <a id="1862" href="Relation.Binary.PropositionalEquality.Core.html#2923" class="Function"></a>
<a id="1868" href="Relation.Binary.PropositionalEquality.Core.html#1729" class="Function">trans</a> <a id="1874" class="Symbol">(</a><a id="1875" href="Relation.Binary.PropositionalEquality.Core.html#1684" class="Function">sym</a> <a id="1879" class="Symbol">(</a><a id="1880" href="Axiom.UniquenessOfIdentityProofs.html#1496" class="Bound">f</a> <a id="1882" href="Agda.Builtin.Equality.html#208" class="InductiveConstructor">refl</a><a id="1886" class="Symbol">))</a> <a id="1889" class="Symbol">(</a><a id="1890" href="Axiom.UniquenessOfIdentityProofs.html#1496" class="Bound">f</a> <a id="1892" href="Axiom.UniquenessOfIdentityProofs.html#1730" class="Bound">q</a><a id="1893" class="Symbol">)</a> <a id="1895" href="Relation.Binary.PropositionalEquality.Core.html#2923" class="Function">≡⟨</a> <a id="1898" href="Axiom.UniquenessOfIdentityProofs.html#1581" class="Function">≡-canonical</a> <a id="1910" href="Axiom.UniquenessOfIdentityProofs.html#1730" class="Bound">q</a> <a id="1912" href="Relation.Binary.PropositionalEquality.Core.html#2923" class="Function"></a>
<a id="1918" href="Axiom.UniquenessOfIdentityProofs.html#1730" class="Bound">q</a> <a id="1945" href="Relation.Binary.PropositionalEquality.Core.html#3105" class="Function Operator"></a>
<a id="1951" class="Keyword">where</a> <a id="1957" class="Keyword">open</a> <a id="1962" href="Relation.Binary.PropositionalEquality.Core.html#2708" class="Module">≡-Reasoning</a>
<a id="1975" class="Comment">-- If equality is decidable for a given type, then we can prove UIP for</a>
<a id="2047" class="Comment">-- that type. Indeed, the decision procedure allows us to define a</a>
<a id="2114" class="Comment">-- function over proofs of equality which is constant: it returns the</a>
<a id="2184" class="Comment">-- proof produced by the decision procedure.</a>
<a id="2230" class="Keyword">module</a> <a id="Decidable⇒UIP"></a><a id="2237" href="Axiom.UniquenessOfIdentityProofs.html#2237" class="Module">Decidable⇒UIP</a>
<a id="2253" class="Symbol">{</a><a id="2254" href="Axiom.UniquenessOfIdentityProofs.html#2254" class="Bound">a</a><a id="2255" class="Symbol">}</a> <a id="2257" class="Symbol">{</a><a id="2258" href="Axiom.UniquenessOfIdentityProofs.html#2258" class="Bound">A</a> <a id="2260" class="Symbol">:</a> <a id="2262" href="Agda.Primitive.html#326" class="Primitive">Set</a> <a id="2266" href="Axiom.UniquenessOfIdentityProofs.html#2254" class="Bound">a</a><a id="2267" class="Symbol">}</a> <a id="2269" class="Symbol">(</a><a id="2270" href="Axiom.UniquenessOfIdentityProofs.html#2270" class="Bound Operator">_≟_</a> <a id="2274" class="Symbol">:</a> <a id="2276" href="Relation.Binary.Definitions.html#4575" class="Function">Decidable</a> <a id="2286" class="Symbol">{</a><a id="2287" class="Argument">A</a> <a id="2289" class="Symbol">=</a> <a id="2291" href="Axiom.UniquenessOfIdentityProofs.html#2258" class="Bound">A</a><a id="2292" class="Symbol">}</a> <a id="2294" href="Agda.Builtin.Equality.html#151" class="Datatype Operator">_≡_</a><a id="2297" class="Symbol">)</a>
<a id="2301" class="Keyword">where</a>
<a id="Decidable⇒UIP.≡-normalise"></a><a id="2310" href="Axiom.UniquenessOfIdentityProofs.html#2310" class="Function">≡-normalise</a> <a id="2322" class="Symbol">:</a> <a id="2324" href="Agda.Builtin.Equality.html#151" class="Datatype Operator">_≡_</a> <a id="2328" class="Symbol">{</a><a id="2329" class="Argument">A</a> <a id="2331" class="Symbol">=</a> <a id="2333" href="Axiom.UniquenessOfIdentityProofs.html#2258" class="Bound">A</a><a id="2334" class="Symbol">}</a> <a id="2336" href="Relation.Binary.Core.html#1254" class="Function Operator"></a> <a id="2338" href="Agda.Builtin.Equality.html#151" class="Datatype Operator">_≡_</a>
<a id="2344" href="Axiom.UniquenessOfIdentityProofs.html#2310" class="Function">≡-normalise</a> <a id="2356" class="Symbol">{</a><a id="2357" href="Axiom.UniquenessOfIdentityProofs.html#2357" class="Bound">a</a><a id="2358" class="Symbol">}</a> <a id="2360" class="Symbol">{</a><a id="2361" href="Axiom.UniquenessOfIdentityProofs.html#2361" class="Bound">b</a><a id="2362" class="Symbol">}</a> <a id="2364" href="Axiom.UniquenessOfIdentityProofs.html#2364" class="Bound">a≡b</a> <a id="2368" class="Keyword">with</a> <a id="2373" href="Axiom.UniquenessOfIdentityProofs.html#2357" class="Bound">a</a> <a id="2375" href="Axiom.UniquenessOfIdentityProofs.html#2270" class="Bound Operator"></a> <a id="2377" href="Axiom.UniquenessOfIdentityProofs.html#2361" class="Bound">b</a>
<a id="2381" class="Symbol">...</a> <a id="2385" class="Symbol">|</a> <a id="2387" href="Agda.Builtin.Bool.html#188" class="InductiveConstructor">true</a> <a id="2393" href="Relation.Nullary.html#1559" class="InductiveConstructor Operator">because</a> <a id="2402" href="Axiom.UniquenessOfIdentityProofs.html#2402" class="Bound">[p]</a> <a id="2406" class="Symbol">=</a> <a id="2408" href="Relation.Nullary.Reflects.html#1031" class="Function">invert</a> <a id="2415" href="Axiom.UniquenessOfIdentityProofs.html#2402" class="Bound">[p]</a>
<a id="2421" class="Symbol">...</a> <a id="2425" class="Symbol">|</a> <a id="2427" href="Agda.Builtin.Bool.html#182" class="InductiveConstructor">false</a> <a id="2433" href="Relation.Nullary.html#1559" class="InductiveConstructor Operator">because</a> <a id="2441" href="Axiom.UniquenessOfIdentityProofs.html#2441" class="Bound">[¬p]</a> <a id="2446" class="Symbol">=</a> <a id="2448" href="Data.Empty.html#628" class="Function">⊥-elim</a> <a id="2455" class="Symbol">(</a><a id="2456" href="Relation.Nullary.Reflects.html#1031" class="Function">invert</a> <a id="2463" href="Axiom.UniquenessOfIdentityProofs.html#2441" class="Bound">[¬p]</a> <a id="2468" class="Bound">a≡b</a><a id="2471" class="Symbol">)</a>
<a id="Decidable⇒UIP.≡-normalise-constant"></a><a id="2476" href="Axiom.UniquenessOfIdentityProofs.html#2476" class="Function">≡-normalise-constant</a> <a id="2497" class="Symbol">:</a> <a id="2499" class="Symbol"></a> <a id="2501" class="Symbol">{</a><a id="2502" href="Axiom.UniquenessOfIdentityProofs.html#2502" class="Bound">a</a> <a id="2504" href="Axiom.UniquenessOfIdentityProofs.html#2504" class="Bound">b</a><a id="2505" class="Symbol">}</a> <a id="2507" class="Symbol">(</a><a id="2508" href="Axiom.UniquenessOfIdentityProofs.html#2508" class="Bound">p</a> <a id="2510" href="Axiom.UniquenessOfIdentityProofs.html#2510" class="Bound">q</a> <a id="2512" class="Symbol">:</a> <a id="2514" href="Axiom.UniquenessOfIdentityProofs.html#2502" class="Bound">a</a> <a id="2516" href="Agda.Builtin.Equality.html#151" class="Datatype Operator"></a> <a id="2518" href="Axiom.UniquenessOfIdentityProofs.html#2504" class="Bound">b</a><a id="2519" class="Symbol">)</a> <a id="2521" class="Symbol"></a> <a id="2523" href="Axiom.UniquenessOfIdentityProofs.html#2310" class="Function">≡-normalise</a> <a id="2535" href="Axiom.UniquenessOfIdentityProofs.html#2508" class="Bound">p</a> <a id="2537" href="Agda.Builtin.Equality.html#151" class="Datatype Operator"></a> <a id="2539" href="Axiom.UniquenessOfIdentityProofs.html#2310" class="Function">≡-normalise</a> <a id="2551" href="Axiom.UniquenessOfIdentityProofs.html#2510" class="Bound">q</a>
<a id="2555" href="Axiom.UniquenessOfIdentityProofs.html#2476" class="Function">≡-normalise-constant</a> <a id="2576" class="Symbol">{</a><a id="2577" href="Axiom.UniquenessOfIdentityProofs.html#2577" class="Bound">a</a><a id="2578" class="Symbol">}</a> <a id="2580" class="Symbol">{</a><a id="2581" href="Axiom.UniquenessOfIdentityProofs.html#2581" class="Bound">b</a><a id="2582" class="Symbol">}</a> <a id="2584" href="Axiom.UniquenessOfIdentityProofs.html#2584" class="Bound">p</a> <a id="2586" href="Axiom.UniquenessOfIdentityProofs.html#2586" class="Bound">q</a> <a id="2588" class="Keyword">with</a> <a id="2593" href="Axiom.UniquenessOfIdentityProofs.html#2577" class="Bound">a</a> <a id="2595" href="Axiom.UniquenessOfIdentityProofs.html#2270" class="Bound Operator"></a> <a id="2597" href="Axiom.UniquenessOfIdentityProofs.html#2581" class="Bound">b</a>
<a id="2601" class="Symbol">...</a> <a id="2605" class="Symbol">|</a> <a id="2607" href="Agda.Builtin.Bool.html#188" class="InductiveConstructor">true</a> <a id="2613" href="Relation.Nullary.html#1559" class="InductiveConstructor Operator">because</a> <a id="2623" class="Symbol">_</a> <a id="2626" class="Symbol">=</a> <a id="2628" href="Agda.Builtin.Equality.html#208" class="InductiveConstructor">refl</a>
<a id="2635" class="Symbol">...</a> <a id="2639" class="Symbol">|</a> <a id="2641" href="Agda.Builtin.Bool.html#182" class="InductiveConstructor">false</a> <a id="2647" href="Relation.Nullary.html#1559" class="InductiveConstructor Operator">because</a> <a id="2655" href="Axiom.UniquenessOfIdentityProofs.html#2655" class="Bound">[¬p]</a> <a id="2660" class="Symbol">=</a> <a id="2662" href="Data.Empty.html#628" class="Function">⊥-elim</a> <a id="2669" class="Symbol">(</a><a id="2670" href="Relation.Nullary.Reflects.html#1031" class="Function">invert</a> <a id="2677" href="Axiom.UniquenessOfIdentityProofs.html#2655" class="Bound">[¬p]</a> <a id="2682" class="Bound">p</a><a id="2683" class="Symbol">)</a>
<a id="Decidable⇒UIP.≡-irrelevant"></a><a id="2688" href="Axiom.UniquenessOfIdentityProofs.html#2688" class="Function">≡-irrelevant</a> <a id="2701" class="Symbol">:</a> <a id="2703" href="Axiom.UniquenessOfIdentityProofs.html#968" class="Function">UIP</a> <a id="2707" href="Axiom.UniquenessOfIdentityProofs.html#2258" class="Bound">A</a>
<a id="2711" href="Axiom.UniquenessOfIdentityProofs.html#2688" class="Function">≡-irrelevant</a> <a id="2724" class="Symbol">=</a> <a id="2726" href="Axiom.UniquenessOfIdentityProofs.html#1692" class="Function">Constant⇒UIP.≡-irrelevant</a> <a id="2752" href="Axiom.UniquenessOfIdentityProofs.html#2310" class="Function">≡-normalise</a> <a id="2764" href="Axiom.UniquenessOfIdentityProofs.html#2476" class="Function">≡-normalise-constant</a>
</pre></body></html>