817 lines
228 KiB
HTML
817 lines
228 KiB
HTML
<!DOCTYPE html>
|
||
<html lang="en"><head>
|
||
<meta charset="utf-8">
|
||
<meta http-equiv="X-UA-Compatible" content="IE=edge">
|
||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||
<title>Exam: TSPL Exam file | Programming Language Foundations in Agda
|
||
</title><!-- Begin Jekyll SEO tag v2.6.1 -->
|
||
<meta name="generator" content="Jekyll v3.9.0" />
|
||
<meta property="og:title" content="Exam: TSPL Exam file" />
|
||
<meta property="og:locale" content="en_US" />
|
||
<meta name="description" content="Programming Language Foundations in Agda" />
|
||
<meta property="og:description" content="Programming Language Foundations in Agda" />
|
||
<link rel="canonical" href="https://plfa.github.io/20.07/TSPL/2019/Exam/" />
|
||
<meta property="og:url" content="https://plfa.github.io/20.07/TSPL/2019/Exam/" />
|
||
<meta property="og:site_name" content="Programming Language Foundations in Agda" />
|
||
<script type="application/ld+json">
|
||
{"url":"https://plfa.github.io/20.07/TSPL/2019/Exam/","headline":"Exam: TSPL Exam file","description":"Programming Language Foundations in Agda","@type":"WebPage","@context":"https://schema.org"}</script>
|
||
<!-- End Jekyll SEO tag -->
|
||
<link rel="stylesheet" href="/20.07/assets/main.css"></head>
|
||
<body><header class="site-header" role="banner">
|
||
|
||
<div class="wrapper">
|
||
|
||
<a class="site-title" href="/20.07/">Programming Language Foundations in Agda
|
||
</a>
|
||
|
||
<nav class="site-nav">
|
||
<span class="menu-icon">
|
||
<svg viewBox="0 0 18 15" width="18px" height="15px">
|
||
<path fill="#424242" d="M18,1.484c0,0.82-0.665,1.484-1.484,1.484H1.484C0.665,2.969,0,2.304,0,1.484l0,0C0,0.665,0.665,0,1.484,0 h15.031C17.335,0,18,0.665,18,1.484L18,1.484z"/>
|
||
<path fill="#424242" d="M18,7.516C18,8.335,17.335,9,16.516,9H1.484C0.665,9,0,8.335,0,7.516l0,0c0-0.82,0.665-1.484,1.484-1.484 h15.031C17.335,6.031,18,6.696,18,7.516L18,7.516z"/>
|
||
<path fill="#424242" d="M18,13.516C18,14.335,17.335,15,16.516,15H1.484C0.665,15,0,14.335,0,13.516l0,0 c0-0.82,0.665-1.484,1.484-1.484h15.031C17.335,12.031,18,12.696,18,13.516L18,13.516z"/>
|
||
</svg>
|
||
</span>
|
||
|
||
<div class="trigger">
|
||
<a class="page-link" href="/20.07/">The Book</a>
|
||
<a class="page-link" href="/20.07/Announcements/">Announcements</a>
|
||
<a class="page-link" href="/20.07/GettingStarted/">Getting Started</a>
|
||
<a class="page-link" href="/20.07/Citing/">Citing</a>
|
||
<a class="page-link" href="https://agda-zh.github.io/PLFA-zh/">中文</a>
|
||
</div>
|
||
</nav>
|
||
|
||
</div>
|
||
|
||
</header>
|
||
<main class="page-content" aria-label="Content">
|
||
<div class="wrapper">
|
||
<article class="post">
|
||
|
||
<header class="post-header">
|
||
<h1 class="post-title">Exam: TSPL Exam file</h1>
|
||
</header>
|
||
|
||
<p style="text-align:center;">
|
||
|
||
|
||
|
||
<a alt="Source code" href="https://github.com/plfa/plfa.github.io/blob/dev-20.07/courses/tspl/2019/Exam.lagda.md">Source</a>
|
||
|
||
|
||
|
||
</p>
|
||
|
||
|
||
<div class="post-content">
|
||
<pre class="Agda"><a id="96" class="Keyword">module</a> <a id="103" href="/20.07/TSPL/2019/Exam/" class="Module">Exam</a> <a id="108" class="Keyword">where</a>
|
||
</pre>
|
||
<p><strong>IMPORTANT</strong> For ease of marking, when modifying the given code please write</p>
|
||
|
||
<div class="language-plaintext highlighter-rouge"><div class="highlight"><pre class="highlight"><code>-- begin
|
||
-- end
|
||
</code></pre></div></div>
|
||
|
||
<p>before and after code you add, to indicate your changes.</p>
|
||
|
||
<h2 id="imports">Imports</h2>
|
||
|
||
<pre class="Agda"><a id="297" class="Keyword">import</a> <a id="304" href="https://agda.github.io/agda-stdlib/v1.1/Relation.Binary.PropositionalEquality.html" class="Module">Relation.Binary.PropositionalEquality</a> <a id="342" class="Symbol">as</a> <a id="345" class="Module">Eq</a>
|
||
<a id="348" class="Keyword">open</a> <a id="353" href="https://agda.github.io/agda-stdlib/v1.1/Relation.Binary.PropositionalEquality.html" class="Module">Eq</a> <a id="356" class="Keyword">using</a> <a id="362" class="Symbol">(</a><a id="363" href="Agda.Builtin.Equality.html#125" class="Datatype Operator">_≡_</a><a id="366" class="Symbol">;</a> <a id="368" href="Agda.Builtin.Equality.html#182" class="InductiveConstructor">refl</a><a id="372" class="Symbol">;</a> <a id="374" href="https://agda.github.io/agda-stdlib/v1.1/Relation.Binary.PropositionalEquality.Core.html#939" class="Function">sym</a><a id="377" class="Symbol">;</a> <a id="379" href="https://agda.github.io/agda-stdlib/v1.1/Relation.Binary.PropositionalEquality.Core.html#984" class="Function">trans</a><a id="384" class="Symbol">;</a> <a id="386" href="https://agda.github.io/agda-stdlib/v1.1/Relation.Binary.PropositionalEquality.Core.html#1090" class="Function">cong</a><a id="390" class="Symbol">;</a> <a id="392" href="https://agda.github.io/agda-stdlib/v1.1/Relation.Binary.PropositionalEquality.Core.html#799" class="Function Operator">_≢_</a><a id="395" class="Symbol">)</a>
|
||
<a id="397" class="Keyword">open</a> <a id="402" class="Keyword">import</a> <a id="409" href="https://agda.github.io/agda-stdlib/v1.1/Data.Empty.html" class="Module">Data.Empty</a> <a id="420" class="Keyword">using</a> <a id="426" class="Symbol">(</a><a id="427" href="https://agda.github.io/agda-stdlib/v1.1/Data.Empty.html#279" class="Datatype">⊥</a><a id="428" class="Symbol">;</a> <a id="430" href="https://agda.github.io/agda-stdlib/v1.1/Data.Empty.html#294" class="Function">⊥-elim</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="https://agda.github.io/agda-stdlib/v1.1/Data.Nat.html" class="Module">Data.Nat</a> <a id="459" class="Keyword">using</a> <a id="465" class="Symbol">(</a><a id="466" href="Agda.Builtin.Nat.html#165" class="Datatype">ℕ</a><a id="467" class="Symbol">;</a> <a id="469" href="Agda.Builtin.Nat.html#183" class="InductiveConstructor">zero</a><a id="473" class="Symbol">;</a> <a id="475" href="Agda.Builtin.Nat.html#196" class="InductiveConstructor">suc</a><a id="478" class="Symbol">)</a>
|
||
<a id="480" class="Keyword">open</a> <a id="485" class="Keyword">import</a> <a id="492" href="https://agda.github.io/agda-stdlib/v1.1/Data.List.html" class="Module">Data.List</a> <a id="502" class="Keyword">using</a> <a id="508" class="Symbol">(</a><a id="509" href="Agda.Builtin.List.html#121" class="Datatype">List</a><a id="513" class="Symbol">;</a> <a id="515" href="https://agda.github.io/agda-stdlib/v1.1/Data.List.Base.html#8786" class="InductiveConstructor">[]</a><a id="517" class="Symbol">;</a> <a id="519" href="Agda.Builtin.List.html#173" class="InductiveConstructor Operator">_∷_</a><a id="522" class="Symbol">;</a> <a id="524" href="https://agda.github.io/agda-stdlib/v1.1/Data.List.Base.html#1570" class="Function Operator">_++_</a><a id="528" class="Symbol">)</a>
|
||
<a id="530" class="Keyword">open</a> <a id="535" class="Keyword">import</a> <a id="542" href="https://agda.github.io/agda-stdlib/v1.1/Data.Product.html" class="Module">Data.Product</a> <a id="555" class="Keyword">using</a> <a id="561" class="Symbol">(</a><a id="562" href="https://agda.github.io/agda-stdlib/v1.1/Data.Product.html#1364" class="Function">∃</a><a id="563" class="Symbol">;</a> <a id="565" href="https://agda.github.io/agda-stdlib/v1.1/Data.Product.html#1783" class="Function">∃-syntax</a><a id="573" class="Symbol">)</a> <a id="575" class="Keyword">renaming</a> <a id="584" class="Symbol">(</a><a id="585" href="Agda.Builtin.Sigma.html#209" class="InductiveConstructor Operator">_,_</a> <a id="589" class="Symbol">to</a> <a id="592" href="Agda.Builtin.Sigma.html#209" class="InductiveConstructor Operator">⟨_,_⟩</a><a id="597" class="Symbol">)</a>
|
||
<a id="599" class="Keyword">open</a> <a id="604" class="Keyword">import</a> <a id="611" href="https://agda.github.io/agda-stdlib/v1.1/Data.String.html" class="Module">Data.String</a> <a id="623" class="Keyword">using</a> <a id="629" class="Symbol">(</a><a id="630" href="Agda.Builtin.String.html#206" class="Postulate">String</a><a id="636" class="Symbol">;</a> <a id="638" href="https://agda.github.io/agda-stdlib/v1.1/Data.String.Properties.html#2569" class="Function Operator">_≟_</a><a id="641" class="Symbol">)</a>
|
||
<a id="643" class="Keyword">open</a> <a id="648" class="Keyword">import</a> <a id="655" href="https://agda.github.io/agda-stdlib/v1.1/Relation.Nullary.html" class="Module">Relation.Nullary</a> <a id="672" class="Keyword">using</a> <a id="678" class="Symbol">(</a><a id="679" href="https://agda.github.io/agda-stdlib/v1.1/Relation.Nullary.html#535" class="Function Operator">¬_</a><a id="681" class="Symbol">;</a> <a id="683" href="https://agda.github.io/agda-stdlib/v1.1/Relation.Nullary.html#605" class="Datatype">Dec</a><a id="686" class="Symbol">;</a> <a id="688" href="https://agda.github.io/agda-stdlib/v1.1/Relation.Nullary.html#641" class="InductiveConstructor">yes</a><a id="691" class="Symbol">;</a> <a id="693" href="https://agda.github.io/agda-stdlib/v1.1/Relation.Nullary.html#668" class="InductiveConstructor">no</a><a id="695" class="Symbol">)</a>
|
||
<a id="697" class="Keyword">open</a> <a id="702" class="Keyword">import</a> <a id="709" href="https://agda.github.io/agda-stdlib/v1.1/Relation.Binary.html" class="Module">Relation.Binary</a> <a id="725" class="Keyword">using</a> <a id="731" class="Symbol">(</a><a id="732" href="https://agda.github.io/agda-stdlib/v1.1/Relation.Binary.Core.html#5557" class="Function">Decidable</a><a id="741" class="Symbol">)</a>
|
||
</pre>
|
||
<h2 id="problem-1">Problem 1</h2>
|
||
|
||
<pre class="Agda"><a id="766" class="Keyword">module</a> <a id="Problem1"></a><a id="773" href="/20.07/TSPL/2019/Exam/#773" class="Module">Problem1</a> <a id="782" class="Keyword">where</a>
|
||
|
||
<a id="791" class="Keyword">open</a> <a id="796" class="Keyword">import</a> <a id="803" href="https://agda.github.io/agda-stdlib/v1.1/Function.html" class="Module">Function</a> <a id="812" class="Keyword">using</a> <a id="818" class="Symbol">(</a><a id="819" href="https://agda.github.io/agda-stdlib/v1.1/Function.html#1099" class="Function Operator">_∘_</a><a id="822" class="Symbol">)</a>
|
||
</pre>
|
||
<p>Remember to indent all code by two spaces.</p>
|
||
|
||
<h3 id="a">(a)</h3>
|
||
|
||
<h3 id="b">(b)</h3>
|
||
|
||
<h2 id="problem-2">Problem 2</h2>
|
||
|
||
<p>Remember to indent all code by two spaces.</p>
|
||
|
||
<pre class="Agda"><a id="954" class="Keyword">module</a> <a id="Problem2"></a><a id="961" href="/20.07/TSPL/2019/Exam/#961" class="Module">Problem2</a> <a id="970" class="Keyword">where</a>
|
||
</pre>
|
||
<h3 id="infix-declarations">Infix declarations</h3>
|
||
|
||
<pre class="Agda"> <a id="1011" class="Keyword">infix</a> <a id="1018" class="Number">4</a> <a id="1020" href="/20.07/TSPL/2019/Exam/#1622" class="Datatype Operator">_⊢_</a>
|
||
<a id="1026" class="Keyword">infix</a> <a id="1033" class="Number">4</a> <a id="1035" href="/20.07/TSPL/2019/Exam/#1414" class="Datatype Operator">_∋_</a>
|
||
<a id="1041" class="Keyword">infixl</a> <a id="1048" class="Number">5</a> <a id="1050" href="/20.07/TSPL/2019/Exam/#1328" class="InductiveConstructor Operator">_,_</a>
|
||
|
||
<a id="1057" class="Keyword">infixr</a> <a id="1064" class="Number">7</a> <a id="1066" href="/20.07/TSPL/2019/Exam/#1234" class="InductiveConstructor Operator">_⇒_</a>
|
||
|
||
<a id="1073" class="Keyword">infix</a> <a id="1080" class="Number">5</a> <a id="1082" href="/20.07/TSPL/2019/Exam/#1723" class="InductiveConstructor Operator">ƛ_</a>
|
||
<a id="1087" class="Keyword">infix</a> <a id="1094" class="Number">5</a> <a id="1096" href="/20.07/TSPL/2019/Exam/#2110" class="InductiveConstructor Operator">μ_</a>
|
||
<a id="1101" class="Keyword">infixl</a> <a id="1108" class="Number">7</a> <a id="1110" href="/20.07/TSPL/2019/Exam/#1802" class="InductiveConstructor Operator">_·_</a>
|
||
<a id="1116" class="Keyword">infix</a> <a id="1123" class="Number">8</a> <a id="1125" href="/20.07/TSPL/2019/Exam/#1943" class="InductiveConstructor Operator">`suc_</a>
|
||
<a id="1133" class="Keyword">infix</a> <a id="1140" class="Number">9</a> <a id="1142" href="/20.07/TSPL/2019/Exam/#1660" class="InductiveConstructor Operator">`_</a>
|
||
<a id="1147" class="Keyword">infix</a> <a id="1154" class="Number">9</a> <a id="1156" href="/20.07/TSPL/2019/Exam/#1506" class="InductiveConstructor Operator">S_</a>
|
||
<a id="1161" class="Keyword">infix</a> <a id="1168" class="Number">9</a> <a id="1170" href="/20.07/TSPL/2019/Exam/#2600" class="Function Operator">#_</a>
|
||
</pre>
|
||
<h3 id="types-and-contexts">Types and contexts</h3>
|
||
|
||
<pre class="Agda"> <a id="1208" class="Keyword">data</a> <a id="Problem2.Type"></a><a id="1213" href="/20.07/TSPL/2019/Exam/#1213" class="Datatype">Type</a> <a id="1218" class="Symbol">:</a> <a id="1220" class="PrimitiveType">Set</a> <a id="1224" class="Keyword">where</a>
|
||
<a id="Problem2.Type._⇒_"></a><a id="1234" href="/20.07/TSPL/2019/Exam/#1234" class="InductiveConstructor Operator">_⇒_</a> <a id="1240" class="Symbol">:</a> <a id="1242" href="/20.07/TSPL/2019/Exam/#1213" class="Datatype">Type</a> <a id="1247" class="Symbol">→</a> <a id="1249" href="/20.07/TSPL/2019/Exam/#1213" class="Datatype">Type</a> <a id="1254" class="Symbol">→</a> <a id="1256" href="/20.07/TSPL/2019/Exam/#1213" class="Datatype">Type</a>
|
||
<a id="Problem2.Type.`ℕ"></a><a id="1265" href="/20.07/TSPL/2019/Exam/#1265" class="InductiveConstructor">`ℕ</a> <a id="1271" class="Symbol">:</a> <a id="1273" href="/20.07/TSPL/2019/Exam/#1213" class="Datatype">Type</a>
|
||
|
||
<a id="1281" class="Keyword">data</a> <a id="Problem2.Context"></a><a id="1286" href="/20.07/TSPL/2019/Exam/#1286" class="Datatype">Context</a> <a id="1294" class="Symbol">:</a> <a id="1296" class="PrimitiveType">Set</a> <a id="1300" class="Keyword">where</a>
|
||
<a id="Problem2.Context.∅"></a><a id="1310" href="/20.07/TSPL/2019/Exam/#1310" class="InductiveConstructor">∅</a> <a id="1314" class="Symbol">:</a> <a id="1316" href="/20.07/TSPL/2019/Exam/#1286" class="Datatype">Context</a>
|
||
<a id="Problem2.Context._,_"></a><a id="1328" href="/20.07/TSPL/2019/Exam/#1328" class="InductiveConstructor Operator">_,_</a> <a id="1332" class="Symbol">:</a> <a id="1334" href="/20.07/TSPL/2019/Exam/#1286" class="Datatype">Context</a> <a id="1342" class="Symbol">→</a> <a id="1344" href="/20.07/TSPL/2019/Exam/#1213" class="Datatype">Type</a> <a id="1349" class="Symbol">→</a> <a id="1351" href="/20.07/TSPL/2019/Exam/#1286" class="Datatype">Context</a>
|
||
</pre>
|
||
<h3 id="variables-and-the-lookup-judgment">Variables and the lookup judgment</h3>
|
||
|
||
<pre class="Agda"> <a id="1409" class="Keyword">data</a> <a id="Problem2._∋_"></a><a id="1414" href="/20.07/TSPL/2019/Exam/#1414" class="Datatype Operator">_∋_</a> <a id="1418" class="Symbol">:</a> <a id="1420" href="/20.07/TSPL/2019/Exam/#1286" class="Datatype">Context</a> <a id="1428" class="Symbol">→</a> <a id="1430" href="/20.07/TSPL/2019/Exam/#1213" class="Datatype">Type</a> <a id="1435" class="Symbol">→</a> <a id="1437" class="PrimitiveType">Set</a> <a id="1441" class="Keyword">where</a>
|
||
|
||
<a id="Problem2._∋_.Z"></a><a id="1452" href="/20.07/TSPL/2019/Exam/#1452" class="InductiveConstructor">Z</a> <a id="1454" class="Symbol">:</a> <a id="1456" class="Symbol">∀</a> <a id="1458" class="Symbol">{</a><a id="1459" href="/20.07/TSPL/2019/Exam/#1459" class="Bound">Γ</a> <a id="1461" href="/20.07/TSPL/2019/Exam/#1461" class="Bound">A</a><a id="1462" class="Symbol">}</a>
|
||
<a id="1472" class="Comment">----------</a>
|
||
<a id="1489" class="Symbol">→</a> <a id="1491" href="/20.07/TSPL/2019/Exam/#1459" class="Bound">Γ</a> <a id="1493" href="/20.07/TSPL/2019/Exam/#1328" class="InductiveConstructor Operator">,</a> <a id="1495" href="/20.07/TSPL/2019/Exam/#1461" class="Bound">A</a> <a id="1497" href="/20.07/TSPL/2019/Exam/#1414" class="Datatype Operator">∋</a> <a id="1499" href="/20.07/TSPL/2019/Exam/#1461" class="Bound">A</a>
|
||
|
||
<a id="Problem2._∋_.S_"></a><a id="1506" href="/20.07/TSPL/2019/Exam/#1506" class="InductiveConstructor Operator">S_</a> <a id="1509" class="Symbol">:</a> <a id="1511" class="Symbol">∀</a> <a id="1513" class="Symbol">{</a><a id="1514" href="/20.07/TSPL/2019/Exam/#1514" class="Bound">Γ</a> <a id="1516" href="/20.07/TSPL/2019/Exam/#1516" class="Bound">A</a> <a id="1518" href="/20.07/TSPL/2019/Exam/#1518" class="Bound">B</a><a id="1519" class="Symbol">}</a>
|
||
<a id="1527" class="Symbol">→</a> <a id="1529" href="/20.07/TSPL/2019/Exam/#1514" class="Bound">Γ</a> <a id="1531" href="/20.07/TSPL/2019/Exam/#1414" class="Datatype Operator">∋</a> <a id="1533" href="/20.07/TSPL/2019/Exam/#1516" class="Bound">A</a>
|
||
<a id="1543" class="Comment">---------</a>
|
||
<a id="1559" class="Symbol">→</a> <a id="1561" href="/20.07/TSPL/2019/Exam/#1514" class="Bound">Γ</a> <a id="1563" href="/20.07/TSPL/2019/Exam/#1328" class="InductiveConstructor Operator">,</a> <a id="1565" href="/20.07/TSPL/2019/Exam/#1518" class="Bound">B</a> <a id="1567" href="/20.07/TSPL/2019/Exam/#1414" class="Datatype Operator">∋</a> <a id="1569" href="/20.07/TSPL/2019/Exam/#1516" class="Bound">A</a>
|
||
</pre>
|
||
<h3 id="terms-and-the-typing-judgment">Terms and the typing judgment</h3>
|
||
|
||
<pre class="Agda"> <a id="1617" class="Keyword">data</a> <a id="Problem2._⊢_"></a><a id="1622" href="/20.07/TSPL/2019/Exam/#1622" class="Datatype Operator">_⊢_</a> <a id="1626" class="Symbol">:</a> <a id="1628" href="/20.07/TSPL/2019/Exam/#1286" class="Datatype">Context</a> <a id="1636" class="Symbol">→</a> <a id="1638" href="/20.07/TSPL/2019/Exam/#1213" class="Datatype">Type</a> <a id="1643" class="Symbol">→</a> <a id="1645" class="PrimitiveType">Set</a> <a id="1649" class="Keyword">where</a>
|
||
|
||
<a id="Problem2._⊢_.`_"></a><a id="1660" href="/20.07/TSPL/2019/Exam/#1660" class="InductiveConstructor Operator">`_</a> <a id="1663" class="Symbol">:</a> <a id="1665" class="Symbol">∀</a> <a id="1667" class="Symbol">{</a><a id="1668" href="/20.07/TSPL/2019/Exam/#1668" class="Bound">Γ</a><a id="1669" class="Symbol">}</a> <a id="1671" class="Symbol">{</a><a id="1672" href="/20.07/TSPL/2019/Exam/#1672" class="Bound">A</a><a id="1673" class="Symbol">}</a>
|
||
<a id="1681" class="Symbol">→</a> <a id="1683" href="/20.07/TSPL/2019/Exam/#1668" class="Bound">Γ</a> <a id="1685" href="/20.07/TSPL/2019/Exam/#1414" class="Datatype Operator">∋</a> <a id="1687" href="/20.07/TSPL/2019/Exam/#1672" class="Bound">A</a>
|
||
<a id="1697" class="Comment">------</a>
|
||
<a id="1710" class="Symbol">→</a> <a id="1712" href="/20.07/TSPL/2019/Exam/#1668" class="Bound">Γ</a> <a id="1714" href="/20.07/TSPL/2019/Exam/#1622" class="Datatype Operator">⊢</a> <a id="1716" href="/20.07/TSPL/2019/Exam/#1672" class="Bound">A</a>
|
||
|
||
<a id="Problem2._⊢_.ƛ_"></a><a id="1723" href="/20.07/TSPL/2019/Exam/#1723" class="InductiveConstructor Operator">ƛ_</a> <a id="1727" class="Symbol">:</a> <a id="1730" class="Symbol">∀</a> <a id="1732" class="Symbol">{</a><a id="1733" href="/20.07/TSPL/2019/Exam/#1733" class="Bound">Γ</a><a id="1734" class="Symbol">}</a> <a id="1736" class="Symbol">{</a><a id="1737" href="/20.07/TSPL/2019/Exam/#1737" class="Bound">A</a> <a id="1739" href="/20.07/TSPL/2019/Exam/#1739" class="Bound">B</a><a id="1740" class="Symbol">}</a>
|
||
<a id="1748" class="Symbol">→</a> <a id="1750" href="/20.07/TSPL/2019/Exam/#1733" class="Bound">Γ</a> <a id="1752" href="/20.07/TSPL/2019/Exam/#1328" class="InductiveConstructor Operator">,</a> <a id="1754" href="/20.07/TSPL/2019/Exam/#1737" class="Bound">A</a> <a id="1756" href="/20.07/TSPL/2019/Exam/#1622" class="Datatype Operator">⊢</a> <a id="1758" href="/20.07/TSPL/2019/Exam/#1739" class="Bound">B</a>
|
||
<a id="1768" class="Comment">----------</a>
|
||
<a id="1785" class="Symbol">→</a> <a id="1787" href="/20.07/TSPL/2019/Exam/#1733" class="Bound">Γ</a> <a id="1789" href="/20.07/TSPL/2019/Exam/#1622" class="Datatype Operator">⊢</a> <a id="1791" href="/20.07/TSPL/2019/Exam/#1737" class="Bound">A</a> <a id="1793" href="/20.07/TSPL/2019/Exam/#1234" class="InductiveConstructor Operator">⇒</a> <a id="1795" href="/20.07/TSPL/2019/Exam/#1739" class="Bound">B</a>
|
||
|
||
<a id="Problem2._⊢_._·_"></a><a id="1802" href="/20.07/TSPL/2019/Exam/#1802" class="InductiveConstructor Operator">_·_</a> <a id="1806" class="Symbol">:</a> <a id="1808" class="Symbol">∀</a> <a id="1810" class="Symbol">{</a><a id="1811" href="/20.07/TSPL/2019/Exam/#1811" class="Bound">Γ</a><a id="1812" class="Symbol">}</a> <a id="1814" class="Symbol">{</a><a id="1815" href="/20.07/TSPL/2019/Exam/#1815" class="Bound">A</a> <a id="1817" href="/20.07/TSPL/2019/Exam/#1817" class="Bound">B</a><a id="1818" class="Symbol">}</a>
|
||
<a id="1826" class="Symbol">→</a> <a id="1828" href="/20.07/TSPL/2019/Exam/#1811" class="Bound">Γ</a> <a id="1830" href="/20.07/TSPL/2019/Exam/#1622" class="Datatype Operator">⊢</a> <a id="1832" href="/20.07/TSPL/2019/Exam/#1815" class="Bound">A</a> <a id="1834" href="/20.07/TSPL/2019/Exam/#1234" class="InductiveConstructor Operator">⇒</a> <a id="1836" href="/20.07/TSPL/2019/Exam/#1817" class="Bound">B</a>
|
||
<a id="1844" class="Symbol">→</a> <a id="1846" href="/20.07/TSPL/2019/Exam/#1811" class="Bound">Γ</a> <a id="1848" href="/20.07/TSPL/2019/Exam/#1622" class="Datatype Operator">⊢</a> <a id="1850" href="/20.07/TSPL/2019/Exam/#1815" class="Bound">A</a>
|
||
<a id="1860" class="Comment">----------</a>
|
||
<a id="1877" class="Symbol">→</a> <a id="1879" href="/20.07/TSPL/2019/Exam/#1811" class="Bound">Γ</a> <a id="1881" href="/20.07/TSPL/2019/Exam/#1622" class="Datatype Operator">⊢</a> <a id="1883" href="/20.07/TSPL/2019/Exam/#1817" class="Bound">B</a>
|
||
|
||
<a id="Problem2._⊢_.`zero"></a><a id="1890" href="/20.07/TSPL/2019/Exam/#1890" class="InductiveConstructor">`zero</a> <a id="1896" class="Symbol">:</a> <a id="1898" class="Symbol">∀</a> <a id="1900" class="Symbol">{</a><a id="1901" href="/20.07/TSPL/2019/Exam/#1901" class="Bound">Γ</a><a id="1902" class="Symbol">}</a>
|
||
<a id="1912" class="Comment">----------</a>
|
||
<a id="1929" class="Symbol">→</a> <a id="1931" href="/20.07/TSPL/2019/Exam/#1901" class="Bound">Γ</a> <a id="1933" href="/20.07/TSPL/2019/Exam/#1622" class="Datatype Operator">⊢</a> <a id="1935" href="/20.07/TSPL/2019/Exam/#1265" class="InductiveConstructor">`ℕ</a>
|
||
|
||
<a id="Problem2._⊢_.`suc_"></a><a id="1943" href="/20.07/TSPL/2019/Exam/#1943" class="InductiveConstructor Operator">`suc_</a> <a id="1949" class="Symbol">:</a> <a id="1951" class="Symbol">∀</a> <a id="1953" class="Symbol">{</a><a id="1954" href="/20.07/TSPL/2019/Exam/#1954" class="Bound">Γ</a><a id="1955" class="Symbol">}</a>
|
||
<a id="1963" class="Symbol">→</a> <a id="1965" href="/20.07/TSPL/2019/Exam/#1954" class="Bound">Γ</a> <a id="1967" href="/20.07/TSPL/2019/Exam/#1622" class="Datatype Operator">⊢</a> <a id="1969" href="/20.07/TSPL/2019/Exam/#1265" class="InductiveConstructor">`ℕ</a>
|
||
<a id="1980" class="Comment">-------</a>
|
||
<a id="1994" class="Symbol">→</a> <a id="1996" href="/20.07/TSPL/2019/Exam/#1954" class="Bound">Γ</a> <a id="1998" href="/20.07/TSPL/2019/Exam/#1622" class="Datatype Operator">⊢</a> <a id="2000" href="/20.07/TSPL/2019/Exam/#1265" class="InductiveConstructor">`ℕ</a>
|
||
|
||
<a id="Problem2._⊢_.case"></a><a id="2008" href="/20.07/TSPL/2019/Exam/#2008" class="InductiveConstructor">case</a> <a id="2013" class="Symbol">:</a> <a id="2015" class="Symbol">∀</a> <a id="2017" class="Symbol">{</a><a id="2018" href="/20.07/TSPL/2019/Exam/#2018" class="Bound">Γ</a> <a id="2020" href="/20.07/TSPL/2019/Exam/#2020" class="Bound">A</a><a id="2021" class="Symbol">}</a>
|
||
<a id="2029" class="Symbol">→</a> <a id="2031" href="/20.07/TSPL/2019/Exam/#2018" class="Bound">Γ</a> <a id="2033" href="/20.07/TSPL/2019/Exam/#1622" class="Datatype Operator">⊢</a> <a id="2035" href="/20.07/TSPL/2019/Exam/#1265" class="InductiveConstructor">`ℕ</a>
|
||
<a id="2044" class="Symbol">→</a> <a id="2046" href="/20.07/TSPL/2019/Exam/#2018" class="Bound">Γ</a> <a id="2048" href="/20.07/TSPL/2019/Exam/#1622" class="Datatype Operator">⊢</a> <a id="2050" href="/20.07/TSPL/2019/Exam/#2020" class="Bound">A</a>
|
||
<a id="2058" class="Symbol">→</a> <a id="2060" href="/20.07/TSPL/2019/Exam/#2018" class="Bound">Γ</a> <a id="2062" href="/20.07/TSPL/2019/Exam/#1328" class="InductiveConstructor Operator">,</a> <a id="2064" href="/20.07/TSPL/2019/Exam/#1265" class="InductiveConstructor">`ℕ</a> <a id="2067" href="/20.07/TSPL/2019/Exam/#1622" class="Datatype Operator">⊢</a> <a id="2069" href="/20.07/TSPL/2019/Exam/#2020" class="Bound">A</a>
|
||
<a id="2079" class="Comment">-----------</a>
|
||
<a id="2097" class="Symbol">→</a> <a id="2099" href="/20.07/TSPL/2019/Exam/#2018" class="Bound">Γ</a> <a id="2101" href="/20.07/TSPL/2019/Exam/#1622" class="Datatype Operator">⊢</a> <a id="2103" href="/20.07/TSPL/2019/Exam/#2020" class="Bound">A</a>
|
||
|
||
<a id="Problem2._⊢_.μ_"></a><a id="2110" href="/20.07/TSPL/2019/Exam/#2110" class="InductiveConstructor Operator">μ_</a> <a id="2113" class="Symbol">:</a> <a id="2115" class="Symbol">∀</a> <a id="2117" class="Symbol">{</a><a id="2118" href="/20.07/TSPL/2019/Exam/#2118" class="Bound">Γ</a> <a id="2120" href="/20.07/TSPL/2019/Exam/#2120" class="Bound">A</a><a id="2121" class="Symbol">}</a>
|
||
<a id="2129" class="Symbol">→</a> <a id="2131" href="/20.07/TSPL/2019/Exam/#2118" class="Bound">Γ</a> <a id="2133" href="/20.07/TSPL/2019/Exam/#1328" class="InductiveConstructor Operator">,</a> <a id="2135" href="/20.07/TSPL/2019/Exam/#2120" class="Bound">A</a> <a id="2137" href="/20.07/TSPL/2019/Exam/#1622" class="Datatype Operator">⊢</a> <a id="2139" href="/20.07/TSPL/2019/Exam/#2120" class="Bound">A</a>
|
||
<a id="2149" class="Comment">----------</a>
|
||
<a id="2166" class="Symbol">→</a> <a id="2168" href="/20.07/TSPL/2019/Exam/#2118" class="Bound">Γ</a> <a id="2170" href="/20.07/TSPL/2019/Exam/#1622" class="Datatype Operator">⊢</a> <a id="2172" href="/20.07/TSPL/2019/Exam/#2120" class="Bound">A</a>
|
||
</pre>
|
||
<h3 id="abbreviating-de-bruijn-indices">Abbreviating de Bruijn indices</h3>
|
||
|
||
<pre class="Agda"> <a id="Problem2.lookup"></a><a id="2221" href="/20.07/TSPL/2019/Exam/#2221" class="Function">lookup</a> <a id="2228" class="Symbol">:</a> <a id="2230" href="/20.07/TSPL/2019/Exam/#1286" class="Datatype">Context</a> <a id="2238" class="Symbol">→</a> <a id="2240" href="Agda.Builtin.Nat.html#165" class="Datatype">ℕ</a> <a id="2242" class="Symbol">→</a> <a id="2244" href="/20.07/TSPL/2019/Exam/#1213" class="Datatype">Type</a>
|
||
<a id="2251" href="/20.07/TSPL/2019/Exam/#2221" class="Function">lookup</a> <a id="2258" class="Symbol">(</a><a id="2259" href="/20.07/TSPL/2019/Exam/#2259" class="Bound">Γ</a> <a id="2261" href="/20.07/TSPL/2019/Exam/#1328" class="InductiveConstructor Operator">,</a> <a id="2263" href="/20.07/TSPL/2019/Exam/#2263" class="Bound">A</a><a id="2264" class="Symbol">)</a> <a id="2266" href="Agda.Builtin.Nat.html#183" class="InductiveConstructor">zero</a> <a id="2275" class="Symbol">=</a> <a id="2278" href="/20.07/TSPL/2019/Exam/#2263" class="Bound">A</a>
|
||
<a id="2282" href="/20.07/TSPL/2019/Exam/#2221" class="Function">lookup</a> <a id="2289" class="Symbol">(</a><a id="2290" href="/20.07/TSPL/2019/Exam/#2290" class="Bound">Γ</a> <a id="2292" href="/20.07/TSPL/2019/Exam/#1328" class="InductiveConstructor Operator">,</a> <a id="2294" class="Symbol">_)</a> <a id="2297" class="Symbol">(</a><a id="2298" href="Agda.Builtin.Nat.html#196" class="InductiveConstructor">suc</a> <a id="2302" href="/20.07/TSPL/2019/Exam/#2302" class="Bound">n</a><a id="2303" class="Symbol">)</a> <a id="2306" class="Symbol">=</a> <a id="2309" href="/20.07/TSPL/2019/Exam/#2221" class="Function">lookup</a> <a id="2316" href="/20.07/TSPL/2019/Exam/#2290" class="Bound">Γ</a> <a id="2318" href="/20.07/TSPL/2019/Exam/#2302" class="Bound">n</a>
|
||
<a id="2322" href="/20.07/TSPL/2019/Exam/#2221" class="Function">lookup</a> <a id="2329" href="/20.07/TSPL/2019/Exam/#1310" class="InductiveConstructor">∅</a> <a id="2337" class="Symbol">_</a> <a id="2346" class="Symbol">=</a> <a id="2349" href="https://agda.github.io/agda-stdlib/v1.1/Data.Empty.html#294" class="Function">⊥-elim</a> <a id="2356" href="/20.07/TSPL/2019/Exam/#2387" class="Postulate">impossible</a>
|
||
<a id="2371" class="Keyword">where</a> <a id="2377" class="Keyword">postulate</a> <a id="2387" href="/20.07/TSPL/2019/Exam/#2387" class="Postulate">impossible</a> <a id="2398" class="Symbol">:</a> <a id="2400" href="https://agda.github.io/agda-stdlib/v1.1/Data.Empty.html#279" class="Datatype">⊥</a>
|
||
|
||
<a id="Problem2.count"></a><a id="2405" href="/20.07/TSPL/2019/Exam/#2405" class="Function">count</a> <a id="2411" class="Symbol">:</a> <a id="2413" class="Symbol">∀</a> <a id="2415" class="Symbol">{</a><a id="2416" href="/20.07/TSPL/2019/Exam/#2416" class="Bound">Γ</a><a id="2417" class="Symbol">}</a> <a id="2419" class="Symbol">→</a> <a id="2421" class="Symbol">(</a><a id="2422" href="/20.07/TSPL/2019/Exam/#2422" class="Bound">n</a> <a id="2424" class="Symbol">:</a> <a id="2426" href="Agda.Builtin.Nat.html#165" class="Datatype">ℕ</a><a id="2427" class="Symbol">)</a> <a id="2429" class="Symbol">→</a> <a id="2431" href="/20.07/TSPL/2019/Exam/#2416" class="Bound">Γ</a> <a id="2433" href="/20.07/TSPL/2019/Exam/#1414" class="Datatype Operator">∋</a> <a id="2435" href="/20.07/TSPL/2019/Exam/#2221" class="Function">lookup</a> <a id="2442" href="/20.07/TSPL/2019/Exam/#2416" class="Bound">Γ</a> <a id="2444" href="/20.07/TSPL/2019/Exam/#2422" class="Bound">n</a>
|
||
<a id="2448" href="/20.07/TSPL/2019/Exam/#2405" class="Function">count</a> <a id="2454" class="Symbol">{</a><a id="2455" href="/20.07/TSPL/2019/Exam/#2455" class="Bound">Γ</a> <a id="2457" href="/20.07/TSPL/2019/Exam/#1328" class="InductiveConstructor Operator">,</a> <a id="2459" class="Symbol">_}</a> <a id="2462" href="Agda.Builtin.Nat.html#183" class="InductiveConstructor">zero</a> <a id="2471" class="Symbol">=</a> <a id="2474" href="/20.07/TSPL/2019/Exam/#1452" class="InductiveConstructor">Z</a>
|
||
<a id="2478" href="/20.07/TSPL/2019/Exam/#2405" class="Function">count</a> <a id="2484" class="Symbol">{</a><a id="2485" href="/20.07/TSPL/2019/Exam/#2485" class="Bound">Γ</a> <a id="2487" href="/20.07/TSPL/2019/Exam/#1328" class="InductiveConstructor Operator">,</a> <a id="2489" class="Symbol">_}</a> <a id="2492" class="Symbol">(</a><a id="2493" href="Agda.Builtin.Nat.html#196" class="InductiveConstructor">suc</a> <a id="2497" href="/20.07/TSPL/2019/Exam/#2497" class="Bound">n</a><a id="2498" class="Symbol">)</a> <a id="2501" class="Symbol">=</a> <a id="2504" href="/20.07/TSPL/2019/Exam/#1506" class="InductiveConstructor Operator">S</a> <a id="2506" class="Symbol">(</a><a id="2507" href="/20.07/TSPL/2019/Exam/#2405" class="Function">count</a> <a id="2513" href="/20.07/TSPL/2019/Exam/#2497" class="Bound">n</a><a id="2514" class="Symbol">)</a>
|
||
<a id="2518" href="/20.07/TSPL/2019/Exam/#2405" class="Function">count</a> <a id="2524" class="Symbol">{</a><a id="2525" href="/20.07/TSPL/2019/Exam/#1310" class="InductiveConstructor">∅</a><a id="2526" class="Symbol">}</a> <a id="2532" class="Symbol">_</a> <a id="2541" class="Symbol">=</a> <a id="2544" href="https://agda.github.io/agda-stdlib/v1.1/Data.Empty.html#294" class="Function">⊥-elim</a> <a id="2551" href="/20.07/TSPL/2019/Exam/#2582" class="Postulate">impossible</a>
|
||
<a id="2566" class="Keyword">where</a> <a id="2572" class="Keyword">postulate</a> <a id="2582" href="/20.07/TSPL/2019/Exam/#2582" class="Postulate">impossible</a> <a id="2593" class="Symbol">:</a> <a id="2595" href="https://agda.github.io/agda-stdlib/v1.1/Data.Empty.html#279" class="Datatype">⊥</a>
|
||
|
||
<a id="Problem2.#_"></a><a id="2600" href="/20.07/TSPL/2019/Exam/#2600" class="Function Operator">#_</a> <a id="2603" class="Symbol">:</a> <a id="2605" class="Symbol">∀</a> <a id="2607" class="Symbol">{</a><a id="2608" href="/20.07/TSPL/2019/Exam/#2608" class="Bound">Γ</a><a id="2609" class="Symbol">}</a> <a id="2611" class="Symbol">→</a> <a id="2613" class="Symbol">(</a><a id="2614" href="/20.07/TSPL/2019/Exam/#2614" class="Bound">n</a> <a id="2616" class="Symbol">:</a> <a id="2618" href="Agda.Builtin.Nat.html#165" class="Datatype">ℕ</a><a id="2619" class="Symbol">)</a> <a id="2621" class="Symbol">→</a> <a id="2623" href="/20.07/TSPL/2019/Exam/#2608" class="Bound">Γ</a> <a id="2625" href="/20.07/TSPL/2019/Exam/#1622" class="Datatype Operator">⊢</a> <a id="2627" href="/20.07/TSPL/2019/Exam/#2221" class="Function">lookup</a> <a id="2634" href="/20.07/TSPL/2019/Exam/#2608" class="Bound">Γ</a> <a id="2636" href="/20.07/TSPL/2019/Exam/#2614" class="Bound">n</a>
|
||
<a id="2640" href="/20.07/TSPL/2019/Exam/#2600" class="Function Operator">#</a> <a id="2642" href="/20.07/TSPL/2019/Exam/#2642" class="Bound">n</a> <a id="2645" class="Symbol">=</a> <a id="2648" href="/20.07/TSPL/2019/Exam/#1660" class="InductiveConstructor Operator">`</a> <a id="2650" href="/20.07/TSPL/2019/Exam/#2405" class="Function">count</a> <a id="2656" href="/20.07/TSPL/2019/Exam/#2642" class="Bound">n</a>
|
||
</pre>
|
||
<h3 id="renaming">Renaming</h3>
|
||
|
||
<pre class="Agda"> <a id="Problem2.ext"></a><a id="2683" href="/20.07/TSPL/2019/Exam/#2683" class="Function">ext</a> <a id="2687" class="Symbol">:</a> <a id="2689" class="Symbol">∀</a> <a id="2691" class="Symbol">{</a><a id="2692" href="/20.07/TSPL/2019/Exam/#2692" class="Bound">Γ</a> <a id="2694" href="/20.07/TSPL/2019/Exam/#2694" class="Bound">Δ</a><a id="2695" class="Symbol">}</a> <a id="2697" class="Symbol">→</a> <a id="2699" class="Symbol">(∀</a> <a id="2702" class="Symbol">{</a><a id="2703" href="/20.07/TSPL/2019/Exam/#2703" class="Bound">A</a><a id="2704" class="Symbol">}</a> <a id="2706" class="Symbol">→</a> <a id="2708" href="/20.07/TSPL/2019/Exam/#2692" class="Bound">Γ</a> <a id="2710" href="/20.07/TSPL/2019/Exam/#1414" class="Datatype Operator">∋</a> <a id="2712" href="/20.07/TSPL/2019/Exam/#2703" class="Bound">A</a> <a id="2714" class="Symbol">→</a> <a id="2716" href="/20.07/TSPL/2019/Exam/#2694" class="Bound">Δ</a> <a id="2718" href="/20.07/TSPL/2019/Exam/#1414" class="Datatype Operator">∋</a> <a id="2720" href="/20.07/TSPL/2019/Exam/#2703" class="Bound">A</a><a id="2721" class="Symbol">)</a>
|
||
<a id="2729" class="Comment">-----------------------------------</a>
|
||
<a id="2769" class="Symbol">→</a> <a id="2771" class="Symbol">(∀</a> <a id="2774" class="Symbol">{</a><a id="2775" href="/20.07/TSPL/2019/Exam/#2775" class="Bound">A</a> <a id="2777" href="/20.07/TSPL/2019/Exam/#2777" class="Bound">B</a><a id="2778" class="Symbol">}</a> <a id="2780" class="Symbol">→</a> <a id="2782" href="/20.07/TSPL/2019/Exam/#2692" class="Bound">Γ</a> <a id="2784" href="/20.07/TSPL/2019/Exam/#1328" class="InductiveConstructor Operator">,</a> <a id="2786" href="/20.07/TSPL/2019/Exam/#2777" class="Bound">B</a> <a id="2788" href="/20.07/TSPL/2019/Exam/#1414" class="Datatype Operator">∋</a> <a id="2790" href="/20.07/TSPL/2019/Exam/#2775" class="Bound">A</a> <a id="2792" class="Symbol">→</a> <a id="2794" href="/20.07/TSPL/2019/Exam/#2694" class="Bound">Δ</a> <a id="2796" href="/20.07/TSPL/2019/Exam/#1328" class="InductiveConstructor Operator">,</a> <a id="2798" href="/20.07/TSPL/2019/Exam/#2777" class="Bound">B</a> <a id="2800" href="/20.07/TSPL/2019/Exam/#1414" class="Datatype Operator">∋</a> <a id="2802" href="/20.07/TSPL/2019/Exam/#2775" class="Bound">A</a><a id="2803" class="Symbol">)</a>
|
||
<a id="2807" href="/20.07/TSPL/2019/Exam/#2683" class="Function">ext</a> <a id="2811" href="/20.07/TSPL/2019/Exam/#2811" class="Bound">ρ</a> <a id="2813" href="/20.07/TSPL/2019/Exam/#1452" class="InductiveConstructor">Z</a> <a id="2820" class="Symbol">=</a> <a id="2823" href="/20.07/TSPL/2019/Exam/#1452" class="InductiveConstructor">Z</a>
|
||
<a id="2827" href="/20.07/TSPL/2019/Exam/#2683" class="Function">ext</a> <a id="2831" href="/20.07/TSPL/2019/Exam/#2831" class="Bound">ρ</a> <a id="2833" class="Symbol">(</a><a id="2834" href="/20.07/TSPL/2019/Exam/#1506" class="InductiveConstructor Operator">S</a> <a id="2836" href="/20.07/TSPL/2019/Exam/#2836" class="Bound">x</a><a id="2837" class="Symbol">)</a> <a id="2840" class="Symbol">=</a> <a id="2843" href="/20.07/TSPL/2019/Exam/#1506" class="InductiveConstructor Operator">S</a> <a id="2845" class="Symbol">(</a><a id="2846" href="/20.07/TSPL/2019/Exam/#2831" class="Bound">ρ</a> <a id="2848" href="/20.07/TSPL/2019/Exam/#2836" class="Bound">x</a><a id="2849" class="Symbol">)</a>
|
||
|
||
<a id="Problem2.rename"></a><a id="2854" href="/20.07/TSPL/2019/Exam/#2854" class="Function">rename</a> <a id="2861" class="Symbol">:</a> <a id="2863" class="Symbol">∀</a> <a id="2865" class="Symbol">{</a><a id="2866" href="/20.07/TSPL/2019/Exam/#2866" class="Bound">Γ</a> <a id="2868" href="/20.07/TSPL/2019/Exam/#2868" class="Bound">Δ</a><a id="2869" class="Symbol">}</a>
|
||
<a id="2875" class="Symbol">→</a> <a id="2877" class="Symbol">(∀</a> <a id="2880" class="Symbol">{</a><a id="2881" href="/20.07/TSPL/2019/Exam/#2881" class="Bound">A</a><a id="2882" class="Symbol">}</a> <a id="2884" class="Symbol">→</a> <a id="2886" href="/20.07/TSPL/2019/Exam/#2866" class="Bound">Γ</a> <a id="2888" href="/20.07/TSPL/2019/Exam/#1414" class="Datatype Operator">∋</a> <a id="2890" href="/20.07/TSPL/2019/Exam/#2881" class="Bound">A</a> <a id="2892" class="Symbol">→</a> <a id="2894" href="/20.07/TSPL/2019/Exam/#2868" class="Bound">Δ</a> <a id="2896" href="/20.07/TSPL/2019/Exam/#1414" class="Datatype Operator">∋</a> <a id="2898" href="/20.07/TSPL/2019/Exam/#2881" class="Bound">A</a><a id="2899" class="Symbol">)</a>
|
||
<a id="2907" class="Comment">------------------------</a>
|
||
<a id="2936" class="Symbol">→</a> <a id="2938" class="Symbol">(∀</a> <a id="2941" class="Symbol">{</a><a id="2942" href="/20.07/TSPL/2019/Exam/#2942" class="Bound">A</a><a id="2943" class="Symbol">}</a> <a id="2945" class="Symbol">→</a> <a id="2947" href="/20.07/TSPL/2019/Exam/#2866" class="Bound">Γ</a> <a id="2949" href="/20.07/TSPL/2019/Exam/#1622" class="Datatype Operator">⊢</a> <a id="2951" href="/20.07/TSPL/2019/Exam/#2942" class="Bound">A</a> <a id="2953" class="Symbol">→</a> <a id="2955" href="/20.07/TSPL/2019/Exam/#2868" class="Bound">Δ</a> <a id="2957" href="/20.07/TSPL/2019/Exam/#1622" class="Datatype Operator">⊢</a> <a id="2959" href="/20.07/TSPL/2019/Exam/#2942" class="Bound">A</a><a id="2960" class="Symbol">)</a>
|
||
<a id="2964" href="/20.07/TSPL/2019/Exam/#2854" class="Function">rename</a> <a id="2971" href="/20.07/TSPL/2019/Exam/#2971" class="Bound">ρ</a> <a id="2973" class="Symbol">(</a><a id="2974" href="/20.07/TSPL/2019/Exam/#1660" class="InductiveConstructor Operator">`</a> <a id="2976" href="/20.07/TSPL/2019/Exam/#2976" class="Bound">x</a><a id="2977" class="Symbol">)</a> <a id="2988" class="Symbol">=</a> <a id="2991" href="/20.07/TSPL/2019/Exam/#1660" class="InductiveConstructor Operator">`</a> <a id="2993" class="Symbol">(</a><a id="2994" href="/20.07/TSPL/2019/Exam/#2971" class="Bound">ρ</a> <a id="2996" href="/20.07/TSPL/2019/Exam/#2976" class="Bound">x</a><a id="2997" class="Symbol">)</a>
|
||
<a id="3001" href="/20.07/TSPL/2019/Exam/#2854" class="Function">rename</a> <a id="3008" href="/20.07/TSPL/2019/Exam/#3008" class="Bound">ρ</a> <a id="3010" class="Symbol">(</a><a id="3011" href="/20.07/TSPL/2019/Exam/#1723" class="InductiveConstructor Operator">ƛ</a> <a id="3013" href="/20.07/TSPL/2019/Exam/#3013" class="Bound">N</a><a id="3014" class="Symbol">)</a> <a id="3025" class="Symbol">=</a> <a id="3028" href="/20.07/TSPL/2019/Exam/#1723" class="InductiveConstructor Operator">ƛ</a> <a id="3030" class="Symbol">(</a><a id="3031" href="/20.07/TSPL/2019/Exam/#2854" class="Function">rename</a> <a id="3038" class="Symbol">(</a><a id="3039" href="/20.07/TSPL/2019/Exam/#2683" class="Function">ext</a> <a id="3043" href="/20.07/TSPL/2019/Exam/#3008" class="Bound">ρ</a><a id="3044" class="Symbol">)</a> <a id="3046" href="/20.07/TSPL/2019/Exam/#3013" class="Bound">N</a><a id="3047" class="Symbol">)</a>
|
||
<a id="3051" href="/20.07/TSPL/2019/Exam/#2854" class="Function">rename</a> <a id="3058" href="/20.07/TSPL/2019/Exam/#3058" class="Bound">ρ</a> <a id="3060" class="Symbol">(</a><a id="3061" href="/20.07/TSPL/2019/Exam/#3061" class="Bound">L</a> <a id="3063" href="/20.07/TSPL/2019/Exam/#1802" class="InductiveConstructor Operator">·</a> <a id="3065" href="/20.07/TSPL/2019/Exam/#3065" class="Bound">M</a><a id="3066" class="Symbol">)</a> <a id="3075" class="Symbol">=</a> <a id="3078" class="Symbol">(</a><a id="3079" href="/20.07/TSPL/2019/Exam/#2854" class="Function">rename</a> <a id="3086" href="/20.07/TSPL/2019/Exam/#3058" class="Bound">ρ</a> <a id="3088" href="/20.07/TSPL/2019/Exam/#3061" class="Bound">L</a><a id="3089" class="Symbol">)</a> <a id="3091" href="/20.07/TSPL/2019/Exam/#1802" class="InductiveConstructor Operator">·</a> <a id="3093" class="Symbol">(</a><a id="3094" href="/20.07/TSPL/2019/Exam/#2854" class="Function">rename</a> <a id="3101" href="/20.07/TSPL/2019/Exam/#3058" class="Bound">ρ</a> <a id="3103" href="/20.07/TSPL/2019/Exam/#3065" class="Bound">M</a><a id="3104" class="Symbol">)</a>
|
||
<a id="3108" href="/20.07/TSPL/2019/Exam/#2854" class="Function">rename</a> <a id="3115" href="/20.07/TSPL/2019/Exam/#3115" class="Bound">ρ</a> <a id="3117" class="Symbol">(</a><a id="3118" href="/20.07/TSPL/2019/Exam/#1890" class="InductiveConstructor">`zero</a><a id="3123" class="Symbol">)</a> <a id="3132" class="Symbol">=</a> <a id="3135" href="/20.07/TSPL/2019/Exam/#1890" class="InductiveConstructor">`zero</a>
|
||
<a id="3143" href="/20.07/TSPL/2019/Exam/#2854" class="Function">rename</a> <a id="3150" href="/20.07/TSPL/2019/Exam/#3150" class="Bound">ρ</a> <a id="3152" class="Symbol">(</a><a id="3153" href="/20.07/TSPL/2019/Exam/#1943" class="InductiveConstructor Operator">`suc</a> <a id="3158" href="/20.07/TSPL/2019/Exam/#3158" class="Bound">M</a><a id="3159" class="Symbol">)</a> <a id="3167" class="Symbol">=</a> <a id="3170" href="/20.07/TSPL/2019/Exam/#1943" class="InductiveConstructor Operator">`suc</a> <a id="3175" class="Symbol">(</a><a id="3176" href="/20.07/TSPL/2019/Exam/#2854" class="Function">rename</a> <a id="3183" href="/20.07/TSPL/2019/Exam/#3150" class="Bound">ρ</a> <a id="3185" href="/20.07/TSPL/2019/Exam/#3158" class="Bound">M</a><a id="3186" class="Symbol">)</a>
|
||
<a id="3190" href="/20.07/TSPL/2019/Exam/#2854" class="Function">rename</a> <a id="3197" href="/20.07/TSPL/2019/Exam/#3197" class="Bound">ρ</a> <a id="3199" class="Symbol">(</a><a id="3200" href="/20.07/TSPL/2019/Exam/#2008" class="InductiveConstructor">case</a> <a id="3205" href="/20.07/TSPL/2019/Exam/#3205" class="Bound">L</a> <a id="3207" href="/20.07/TSPL/2019/Exam/#3207" class="Bound">M</a> <a id="3209" href="/20.07/TSPL/2019/Exam/#3209" class="Bound">N</a><a id="3210" class="Symbol">)</a> <a id="3214" class="Symbol">=</a> <a id="3217" href="/20.07/TSPL/2019/Exam/#2008" class="InductiveConstructor">case</a> <a id="3222" class="Symbol">(</a><a id="3223" href="/20.07/TSPL/2019/Exam/#2854" class="Function">rename</a> <a id="3230" href="/20.07/TSPL/2019/Exam/#3197" class="Bound">ρ</a> <a id="3232" href="/20.07/TSPL/2019/Exam/#3205" class="Bound">L</a><a id="3233" class="Symbol">)</a> <a id="3235" class="Symbol">(</a><a id="3236" href="/20.07/TSPL/2019/Exam/#2854" class="Function">rename</a> <a id="3243" href="/20.07/TSPL/2019/Exam/#3197" class="Bound">ρ</a> <a id="3245" href="/20.07/TSPL/2019/Exam/#3207" class="Bound">M</a><a id="3246" class="Symbol">)</a> <a id="3248" class="Symbol">(</a><a id="3249" href="/20.07/TSPL/2019/Exam/#2854" class="Function">rename</a> <a id="3256" class="Symbol">(</a><a id="3257" href="/20.07/TSPL/2019/Exam/#2683" class="Function">ext</a> <a id="3261" href="/20.07/TSPL/2019/Exam/#3197" class="Bound">ρ</a><a id="3262" class="Symbol">)</a> <a id="3264" href="/20.07/TSPL/2019/Exam/#3209" class="Bound">N</a><a id="3265" class="Symbol">)</a>
|
||
<a id="3269" href="/20.07/TSPL/2019/Exam/#2854" class="Function">rename</a> <a id="3276" href="/20.07/TSPL/2019/Exam/#3276" class="Bound">ρ</a> <a id="3278" class="Symbol">(</a><a id="3279" href="/20.07/TSPL/2019/Exam/#2110" class="InductiveConstructor Operator">μ</a> <a id="3281" href="/20.07/TSPL/2019/Exam/#3281" class="Bound">N</a><a id="3282" class="Symbol">)</a> <a id="3293" class="Symbol">=</a> <a id="3296" href="/20.07/TSPL/2019/Exam/#2110" class="InductiveConstructor Operator">μ</a> <a id="3298" class="Symbol">(</a><a id="3299" href="/20.07/TSPL/2019/Exam/#2854" class="Function">rename</a> <a id="3306" class="Symbol">(</a><a id="3307" href="/20.07/TSPL/2019/Exam/#2683" class="Function">ext</a> <a id="3311" href="/20.07/TSPL/2019/Exam/#3276" class="Bound">ρ</a><a id="3312" class="Symbol">)</a> <a id="3314" href="/20.07/TSPL/2019/Exam/#3281" class="Bound">N</a><a id="3315" class="Symbol">)</a>
|
||
</pre>
|
||
<h3 id="simultaneous-substitution">Simultaneous Substitution</h3>
|
||
|
||
<pre class="Agda"> <a id="Problem2.exts"></a><a id="3359" href="/20.07/TSPL/2019/Exam/#3359" class="Function">exts</a> <a id="3364" class="Symbol">:</a> <a id="3366" class="Symbol">∀</a> <a id="3368" class="Symbol">{</a><a id="3369" href="/20.07/TSPL/2019/Exam/#3369" class="Bound">Γ</a> <a id="3371" href="/20.07/TSPL/2019/Exam/#3371" class="Bound">Δ</a><a id="3372" class="Symbol">}</a> <a id="3374" class="Symbol">→</a> <a id="3376" class="Symbol">(∀</a> <a id="3379" class="Symbol">{</a><a id="3380" href="/20.07/TSPL/2019/Exam/#3380" class="Bound">A</a><a id="3381" class="Symbol">}</a> <a id="3383" class="Symbol">→</a> <a id="3385" href="/20.07/TSPL/2019/Exam/#3369" class="Bound">Γ</a> <a id="3387" href="/20.07/TSPL/2019/Exam/#1414" class="Datatype Operator">∋</a> <a id="3389" href="/20.07/TSPL/2019/Exam/#3380" class="Bound">A</a> <a id="3391" class="Symbol">→</a> <a id="3393" href="/20.07/TSPL/2019/Exam/#3371" class="Bound">Δ</a> <a id="3395" href="/20.07/TSPL/2019/Exam/#1622" class="Datatype Operator">⊢</a> <a id="3397" href="/20.07/TSPL/2019/Exam/#3380" class="Bound">A</a><a id="3398" class="Symbol">)</a>
|
||
<a id="3406" class="Comment">----------------------------------</a>
|
||
<a id="3445" class="Symbol">→</a> <a id="3447" class="Symbol">(∀</a> <a id="3450" class="Symbol">{</a><a id="3451" href="/20.07/TSPL/2019/Exam/#3451" class="Bound">A</a> <a id="3453" href="/20.07/TSPL/2019/Exam/#3453" class="Bound">B</a><a id="3454" class="Symbol">}</a> <a id="3456" class="Symbol">→</a> <a id="3458" href="/20.07/TSPL/2019/Exam/#3369" class="Bound">Γ</a> <a id="3460" href="/20.07/TSPL/2019/Exam/#1328" class="InductiveConstructor Operator">,</a> <a id="3462" href="/20.07/TSPL/2019/Exam/#3453" class="Bound">B</a> <a id="3464" href="/20.07/TSPL/2019/Exam/#1414" class="Datatype Operator">∋</a> <a id="3466" href="/20.07/TSPL/2019/Exam/#3451" class="Bound">A</a> <a id="3468" class="Symbol">→</a> <a id="3470" href="/20.07/TSPL/2019/Exam/#3371" class="Bound">Δ</a> <a id="3472" href="/20.07/TSPL/2019/Exam/#1328" class="InductiveConstructor Operator">,</a> <a id="3474" href="/20.07/TSPL/2019/Exam/#3453" class="Bound">B</a> <a id="3476" href="/20.07/TSPL/2019/Exam/#1622" class="Datatype Operator">⊢</a> <a id="3478" href="/20.07/TSPL/2019/Exam/#3451" class="Bound">A</a><a id="3479" class="Symbol">)</a>
|
||
<a id="3483" href="/20.07/TSPL/2019/Exam/#3359" class="Function">exts</a> <a id="3488" href="/20.07/TSPL/2019/Exam/#3488" class="Bound">σ</a> <a id="3490" href="/20.07/TSPL/2019/Exam/#1452" class="InductiveConstructor">Z</a> <a id="3497" class="Symbol">=</a> <a id="3500" href="/20.07/TSPL/2019/Exam/#1660" class="InductiveConstructor Operator">`</a> <a id="3502" href="/20.07/TSPL/2019/Exam/#1452" class="InductiveConstructor">Z</a>
|
||
<a id="3506" href="/20.07/TSPL/2019/Exam/#3359" class="Function">exts</a> <a id="3511" href="/20.07/TSPL/2019/Exam/#3511" class="Bound">σ</a> <a id="3513" class="Symbol">(</a><a id="3514" href="/20.07/TSPL/2019/Exam/#1506" class="InductiveConstructor Operator">S</a> <a id="3516" href="/20.07/TSPL/2019/Exam/#3516" class="Bound">x</a><a id="3517" class="Symbol">)</a> <a id="3520" class="Symbol">=</a> <a id="3523" href="/20.07/TSPL/2019/Exam/#2854" class="Function">rename</a> <a id="3530" href="/20.07/TSPL/2019/Exam/#1506" class="InductiveConstructor Operator">S_</a> <a id="3533" class="Symbol">(</a><a id="3534" href="/20.07/TSPL/2019/Exam/#3511" class="Bound">σ</a> <a id="3536" href="/20.07/TSPL/2019/Exam/#3516" class="Bound">x</a><a id="3537" class="Symbol">)</a>
|
||
|
||
<a id="Problem2.subst"></a><a id="3542" href="/20.07/TSPL/2019/Exam/#3542" class="Function">subst</a> <a id="3548" class="Symbol">:</a> <a id="3550" class="Symbol">∀</a> <a id="3552" class="Symbol">{</a><a id="3553" href="/20.07/TSPL/2019/Exam/#3553" class="Bound">Γ</a> <a id="3555" href="/20.07/TSPL/2019/Exam/#3555" class="Bound">Δ</a><a id="3556" class="Symbol">}</a>
|
||
<a id="3562" class="Symbol">→</a> <a id="3564" class="Symbol">(∀</a> <a id="3567" class="Symbol">{</a><a id="3568" href="/20.07/TSPL/2019/Exam/#3568" class="Bound">A</a><a id="3569" class="Symbol">}</a> <a id="3571" class="Symbol">→</a> <a id="3573" href="/20.07/TSPL/2019/Exam/#3553" class="Bound">Γ</a> <a id="3575" href="/20.07/TSPL/2019/Exam/#1414" class="Datatype Operator">∋</a> <a id="3577" href="/20.07/TSPL/2019/Exam/#3568" class="Bound">A</a> <a id="3579" class="Symbol">→</a> <a id="3581" href="/20.07/TSPL/2019/Exam/#3555" class="Bound">Δ</a> <a id="3583" href="/20.07/TSPL/2019/Exam/#1622" class="Datatype Operator">⊢</a> <a id="3585" href="/20.07/TSPL/2019/Exam/#3568" class="Bound">A</a><a id="3586" class="Symbol">)</a>
|
||
<a id="3594" class="Comment">------------------------</a>
|
||
<a id="3623" class="Symbol">→</a> <a id="3625" class="Symbol">(∀</a> <a id="3628" class="Symbol">{</a><a id="3629" href="/20.07/TSPL/2019/Exam/#3629" class="Bound">A</a><a id="3630" class="Symbol">}</a> <a id="3632" class="Symbol">→</a> <a id="3634" href="/20.07/TSPL/2019/Exam/#3553" class="Bound">Γ</a> <a id="3636" href="/20.07/TSPL/2019/Exam/#1622" class="Datatype Operator">⊢</a> <a id="3638" href="/20.07/TSPL/2019/Exam/#3629" class="Bound">A</a> <a id="3640" class="Symbol">→</a> <a id="3642" href="/20.07/TSPL/2019/Exam/#3555" class="Bound">Δ</a> <a id="3644" href="/20.07/TSPL/2019/Exam/#1622" class="Datatype Operator">⊢</a> <a id="3646" href="/20.07/TSPL/2019/Exam/#3629" class="Bound">A</a><a id="3647" class="Symbol">)</a>
|
||
<a id="3651" href="/20.07/TSPL/2019/Exam/#3542" class="Function">subst</a> <a id="3657" href="/20.07/TSPL/2019/Exam/#3657" class="Bound">σ</a> <a id="3659" class="Symbol">(</a><a id="3660" href="/20.07/TSPL/2019/Exam/#1660" class="InductiveConstructor Operator">`</a> <a id="3662" href="/20.07/TSPL/2019/Exam/#3662" class="Bound">k</a><a id="3663" class="Symbol">)</a> <a id="3674" class="Symbol">=</a> <a id="3677" href="/20.07/TSPL/2019/Exam/#3657" class="Bound">σ</a> <a id="3679" href="/20.07/TSPL/2019/Exam/#3662" class="Bound">k</a>
|
||
<a id="3683" href="/20.07/TSPL/2019/Exam/#3542" class="Function">subst</a> <a id="3689" href="/20.07/TSPL/2019/Exam/#3689" class="Bound">σ</a> <a id="3691" class="Symbol">(</a><a id="3692" href="/20.07/TSPL/2019/Exam/#1723" class="InductiveConstructor Operator">ƛ</a> <a id="3694" href="/20.07/TSPL/2019/Exam/#3694" class="Bound">N</a><a id="3695" class="Symbol">)</a> <a id="3706" class="Symbol">=</a> <a id="3709" href="/20.07/TSPL/2019/Exam/#1723" class="InductiveConstructor Operator">ƛ</a> <a id="3711" class="Symbol">(</a><a id="3712" href="/20.07/TSPL/2019/Exam/#3542" class="Function">subst</a> <a id="3718" class="Symbol">(</a><a id="3719" href="/20.07/TSPL/2019/Exam/#3359" class="Function">exts</a> <a id="3724" href="/20.07/TSPL/2019/Exam/#3689" class="Bound">σ</a><a id="3725" class="Symbol">)</a> <a id="3727" href="/20.07/TSPL/2019/Exam/#3694" class="Bound">N</a><a id="3728" class="Symbol">)</a>
|
||
<a id="3732" href="/20.07/TSPL/2019/Exam/#3542" class="Function">subst</a> <a id="3738" href="/20.07/TSPL/2019/Exam/#3738" class="Bound">σ</a> <a id="3740" class="Symbol">(</a><a id="3741" href="/20.07/TSPL/2019/Exam/#3741" class="Bound">L</a> <a id="3743" href="/20.07/TSPL/2019/Exam/#1802" class="InductiveConstructor Operator">·</a> <a id="3745" href="/20.07/TSPL/2019/Exam/#3745" class="Bound">M</a><a id="3746" class="Symbol">)</a> <a id="3755" class="Symbol">=</a> <a id="3758" class="Symbol">(</a><a id="3759" href="/20.07/TSPL/2019/Exam/#3542" class="Function">subst</a> <a id="3765" href="/20.07/TSPL/2019/Exam/#3738" class="Bound">σ</a> <a id="3767" href="/20.07/TSPL/2019/Exam/#3741" class="Bound">L</a><a id="3768" class="Symbol">)</a> <a id="3770" href="/20.07/TSPL/2019/Exam/#1802" class="InductiveConstructor Operator">·</a> <a id="3772" class="Symbol">(</a><a id="3773" href="/20.07/TSPL/2019/Exam/#3542" class="Function">subst</a> <a id="3779" href="/20.07/TSPL/2019/Exam/#3738" class="Bound">σ</a> <a id="3781" href="/20.07/TSPL/2019/Exam/#3745" class="Bound">M</a><a id="3782" class="Symbol">)</a>
|
||
<a id="3786" href="/20.07/TSPL/2019/Exam/#3542" class="Function">subst</a> <a id="3792" href="/20.07/TSPL/2019/Exam/#3792" class="Bound">σ</a> <a id="3794" class="Symbol">(</a><a id="3795" href="/20.07/TSPL/2019/Exam/#1890" class="InductiveConstructor">`zero</a><a id="3800" class="Symbol">)</a> <a id="3809" class="Symbol">=</a> <a id="3812" href="/20.07/TSPL/2019/Exam/#1890" class="InductiveConstructor">`zero</a>
|
||
<a id="3820" href="/20.07/TSPL/2019/Exam/#3542" class="Function">subst</a> <a id="3826" href="/20.07/TSPL/2019/Exam/#3826" class="Bound">σ</a> <a id="3828" class="Symbol">(</a><a id="3829" href="/20.07/TSPL/2019/Exam/#1943" class="InductiveConstructor Operator">`suc</a> <a id="3834" href="/20.07/TSPL/2019/Exam/#3834" class="Bound">M</a><a id="3835" class="Symbol">)</a> <a id="3843" class="Symbol">=</a> <a id="3846" href="/20.07/TSPL/2019/Exam/#1943" class="InductiveConstructor Operator">`suc</a> <a id="3851" class="Symbol">(</a><a id="3852" href="/20.07/TSPL/2019/Exam/#3542" class="Function">subst</a> <a id="3858" href="/20.07/TSPL/2019/Exam/#3826" class="Bound">σ</a> <a id="3860" href="/20.07/TSPL/2019/Exam/#3834" class="Bound">M</a><a id="3861" class="Symbol">)</a>
|
||
<a id="3865" href="/20.07/TSPL/2019/Exam/#3542" class="Function">subst</a> <a id="3871" href="/20.07/TSPL/2019/Exam/#3871" class="Bound">σ</a> <a id="3873" class="Symbol">(</a><a id="3874" href="/20.07/TSPL/2019/Exam/#2008" class="InductiveConstructor">case</a> <a id="3879" href="/20.07/TSPL/2019/Exam/#3879" class="Bound">L</a> <a id="3881" href="/20.07/TSPL/2019/Exam/#3881" class="Bound">M</a> <a id="3883" href="/20.07/TSPL/2019/Exam/#3883" class="Bound">N</a><a id="3884" class="Symbol">)</a> <a id="3888" class="Symbol">=</a> <a id="3891" href="/20.07/TSPL/2019/Exam/#2008" class="InductiveConstructor">case</a> <a id="3896" class="Symbol">(</a><a id="3897" href="/20.07/TSPL/2019/Exam/#3542" class="Function">subst</a> <a id="3903" href="/20.07/TSPL/2019/Exam/#3871" class="Bound">σ</a> <a id="3905" href="/20.07/TSPL/2019/Exam/#3879" class="Bound">L</a><a id="3906" class="Symbol">)</a> <a id="3908" class="Symbol">(</a><a id="3909" href="/20.07/TSPL/2019/Exam/#3542" class="Function">subst</a> <a id="3915" href="/20.07/TSPL/2019/Exam/#3871" class="Bound">σ</a> <a id="3917" href="/20.07/TSPL/2019/Exam/#3881" class="Bound">M</a><a id="3918" class="Symbol">)</a> <a id="3920" class="Symbol">(</a><a id="3921" href="/20.07/TSPL/2019/Exam/#3542" class="Function">subst</a> <a id="3927" class="Symbol">(</a><a id="3928" href="/20.07/TSPL/2019/Exam/#3359" class="Function">exts</a> <a id="3933" href="/20.07/TSPL/2019/Exam/#3871" class="Bound">σ</a><a id="3934" class="Symbol">)</a> <a id="3936" href="/20.07/TSPL/2019/Exam/#3883" class="Bound">N</a><a id="3937" class="Symbol">)</a>
|
||
<a id="3941" href="/20.07/TSPL/2019/Exam/#3542" class="Function">subst</a> <a id="3947" href="/20.07/TSPL/2019/Exam/#3947" class="Bound">σ</a> <a id="3949" class="Symbol">(</a><a id="3950" href="/20.07/TSPL/2019/Exam/#2110" class="InductiveConstructor Operator">μ</a> <a id="3952" href="/20.07/TSPL/2019/Exam/#3952" class="Bound">N</a><a id="3953" class="Symbol">)</a> <a id="3964" class="Symbol">=</a> <a id="3967" href="/20.07/TSPL/2019/Exam/#2110" class="InductiveConstructor Operator">μ</a> <a id="3969" class="Symbol">(</a><a id="3970" href="/20.07/TSPL/2019/Exam/#3542" class="Function">subst</a> <a id="3976" class="Symbol">(</a><a id="3977" href="/20.07/TSPL/2019/Exam/#3359" class="Function">exts</a> <a id="3982" href="/20.07/TSPL/2019/Exam/#3947" class="Bound">σ</a><a id="3983" class="Symbol">)</a> <a id="3985" href="/20.07/TSPL/2019/Exam/#3952" class="Bound">N</a><a id="3986" class="Symbol">)</a>
|
||
</pre>
|
||
<h3 id="single-substitution">Single substitution</h3>
|
||
|
||
<pre class="Agda"> <a id="Problem2._[_]"></a><a id="4024" href="/20.07/TSPL/2019/Exam/#4024" class="Function Operator">_[_]</a> <a id="4029" class="Symbol">:</a> <a id="4031" class="Symbol">∀</a> <a id="4033" class="Symbol">{</a><a id="4034" href="/20.07/TSPL/2019/Exam/#4034" class="Bound">Γ</a> <a id="4036" href="/20.07/TSPL/2019/Exam/#4036" class="Bound">A</a> <a id="4038" href="/20.07/TSPL/2019/Exam/#4038" class="Bound">B</a><a id="4039" class="Symbol">}</a>
|
||
<a id="4051" class="Symbol">→</a> <a id="4053" href="/20.07/TSPL/2019/Exam/#4034" class="Bound">Γ</a> <a id="4055" href="/20.07/TSPL/2019/Exam/#1328" class="InductiveConstructor Operator">,</a> <a id="4057" href="/20.07/TSPL/2019/Exam/#4038" class="Bound">B</a> <a id="4059" href="/20.07/TSPL/2019/Exam/#1622" class="Datatype Operator">⊢</a> <a id="4061" href="/20.07/TSPL/2019/Exam/#4036" class="Bound">A</a>
|
||
<a id="4073" class="Symbol">→</a> <a id="4075" href="/20.07/TSPL/2019/Exam/#4034" class="Bound">Γ</a> <a id="4077" href="/20.07/TSPL/2019/Exam/#1622" class="Datatype Operator">⊢</a> <a id="4079" href="/20.07/TSPL/2019/Exam/#4038" class="Bound">B</a>
|
||
<a id="4093" class="Comment">---------</a>
|
||
<a id="4113" class="Symbol">→</a> <a id="4115" href="/20.07/TSPL/2019/Exam/#4034" class="Bound">Γ</a> <a id="4117" href="/20.07/TSPL/2019/Exam/#1622" class="Datatype Operator">⊢</a> <a id="4119" href="/20.07/TSPL/2019/Exam/#4036" class="Bound">A</a>
|
||
<a id="4123" href="/20.07/TSPL/2019/Exam/#4024" class="Function Operator">_[_]</a> <a id="4128" class="Symbol">{</a><a id="4129" href="/20.07/TSPL/2019/Exam/#4129" class="Bound">Γ</a><a id="4130" class="Symbol">}</a> <a id="4132" class="Symbol">{</a><a id="4133" href="/20.07/TSPL/2019/Exam/#4133" class="Bound">A</a><a id="4134" class="Symbol">}</a> <a id="4136" class="Symbol">{</a><a id="4137" href="/20.07/TSPL/2019/Exam/#4137" class="Bound">B</a><a id="4138" class="Symbol">}</a> <a id="4140" href="/20.07/TSPL/2019/Exam/#4140" class="Bound">N</a> <a id="4142" href="/20.07/TSPL/2019/Exam/#4142" class="Bound">M</a> <a id="4144" class="Symbol">=</a> <a id="4147" href="/20.07/TSPL/2019/Exam/#3542" class="Function">subst</a> <a id="4153" class="Symbol">{</a><a id="4154" href="/20.07/TSPL/2019/Exam/#4129" class="Bound">Γ</a> <a id="4156" href="/20.07/TSPL/2019/Exam/#1328" class="InductiveConstructor Operator">,</a> <a id="4158" href="/20.07/TSPL/2019/Exam/#4137" class="Bound">B</a><a id="4159" class="Symbol">}</a> <a id="4161" class="Symbol">{</a><a id="4162" href="/20.07/TSPL/2019/Exam/#4129" class="Bound">Γ</a><a id="4163" class="Symbol">}</a> <a id="4165" href="/20.07/TSPL/2019/Exam/#4187" class="Function">σ</a> <a id="4167" class="Symbol">{</a><a id="4168" href="/20.07/TSPL/2019/Exam/#4133" class="Bound">A</a><a id="4169" class="Symbol">}</a> <a id="4171" href="/20.07/TSPL/2019/Exam/#4140" class="Bound">N</a>
|
||
<a id="4177" class="Keyword">where</a>
|
||
<a id="4187" href="/20.07/TSPL/2019/Exam/#4187" class="Function">σ</a> <a id="4189" class="Symbol">:</a> <a id="4191" class="Symbol">∀</a> <a id="4193" class="Symbol">{</a><a id="4194" href="/20.07/TSPL/2019/Exam/#4194" class="Bound">A</a><a id="4195" class="Symbol">}</a> <a id="4197" class="Symbol">→</a> <a id="4199" href="/20.07/TSPL/2019/Exam/#4129" class="Bound">Γ</a> <a id="4201" href="/20.07/TSPL/2019/Exam/#1328" class="InductiveConstructor Operator">,</a> <a id="4203" href="/20.07/TSPL/2019/Exam/#4137" class="Bound">B</a> <a id="4205" href="/20.07/TSPL/2019/Exam/#1414" class="Datatype Operator">∋</a> <a id="4207" href="/20.07/TSPL/2019/Exam/#4194" class="Bound">A</a> <a id="4209" class="Symbol">→</a> <a id="4211" href="/20.07/TSPL/2019/Exam/#4129" class="Bound">Γ</a> <a id="4213" href="/20.07/TSPL/2019/Exam/#1622" class="Datatype Operator">⊢</a> <a id="4215" href="/20.07/TSPL/2019/Exam/#4194" class="Bound">A</a>
|
||
<a id="4221" href="/20.07/TSPL/2019/Exam/#4187" class="Function">σ</a> <a id="4223" href="/20.07/TSPL/2019/Exam/#1452" class="InductiveConstructor">Z</a> <a id="4230" class="Symbol">=</a> <a id="4233" href="/20.07/TSPL/2019/Exam/#4142" class="Bound">M</a>
|
||
<a id="4239" href="/20.07/TSPL/2019/Exam/#4187" class="Function">σ</a> <a id="4241" class="Symbol">(</a><a id="4242" href="/20.07/TSPL/2019/Exam/#1506" class="InductiveConstructor Operator">S</a> <a id="4244" href="/20.07/TSPL/2019/Exam/#4244" class="Bound">x</a><a id="4245" class="Symbol">)</a> <a id="4248" class="Symbol">=</a> <a id="4251" href="/20.07/TSPL/2019/Exam/#1660" class="InductiveConstructor Operator">`</a> <a id="4253" href="/20.07/TSPL/2019/Exam/#4244" class="Bound">x</a>
|
||
</pre>
|
||
<h3 id="values">Values</h3>
|
||
|
||
<pre class="Agda"> <a id="4278" class="Keyword">data</a> <a id="Problem2.Value"></a><a id="4283" href="/20.07/TSPL/2019/Exam/#4283" class="Datatype">Value</a> <a id="4289" class="Symbol">:</a> <a id="4291" class="Symbol">∀</a> <a id="4293" class="Symbol">{</a><a id="4294" href="/20.07/TSPL/2019/Exam/#4294" class="Bound">Γ</a> <a id="4296" href="/20.07/TSPL/2019/Exam/#4296" class="Bound">A</a><a id="4297" class="Symbol">}</a> <a id="4299" class="Symbol">→</a> <a id="4301" href="/20.07/TSPL/2019/Exam/#4294" class="Bound">Γ</a> <a id="4303" href="/20.07/TSPL/2019/Exam/#1622" class="Datatype Operator">⊢</a> <a id="4305" href="/20.07/TSPL/2019/Exam/#4296" class="Bound">A</a> <a id="4307" class="Symbol">→</a> <a id="4309" class="PrimitiveType">Set</a> <a id="4313" class="Keyword">where</a>
|
||
|
||
<a id="Problem2.Value.V-ƛ"></a><a id="4324" href="/20.07/TSPL/2019/Exam/#4324" class="InductiveConstructor">V-ƛ</a> <a id="4328" class="Symbol">:</a> <a id="4330" class="Symbol">∀</a> <a id="4332" class="Symbol">{</a><a id="4333" href="/20.07/TSPL/2019/Exam/#4333" class="Bound">Γ</a> <a id="4335" href="/20.07/TSPL/2019/Exam/#4335" class="Bound">A</a> <a id="4337" href="/20.07/TSPL/2019/Exam/#4337" class="Bound">B</a><a id="4338" class="Symbol">}</a> <a id="4340" class="Symbol">{</a><a id="4341" href="/20.07/TSPL/2019/Exam/#4341" class="Bound">N</a> <a id="4343" class="Symbol">:</a> <a id="4345" href="/20.07/TSPL/2019/Exam/#4333" class="Bound">Γ</a> <a id="4347" href="/20.07/TSPL/2019/Exam/#1328" class="InductiveConstructor Operator">,</a> <a id="4349" href="/20.07/TSPL/2019/Exam/#4335" class="Bound">A</a> <a id="4351" href="/20.07/TSPL/2019/Exam/#1622" class="Datatype Operator">⊢</a> <a id="4353" href="/20.07/TSPL/2019/Exam/#4337" class="Bound">B</a><a id="4354" class="Symbol">}</a>
|
||
<a id="4364" class="Comment">---------------------------</a>
|
||
<a id="4398" class="Symbol">→</a> <a id="4400" href="/20.07/TSPL/2019/Exam/#4283" class="Datatype">Value</a> <a id="4406" class="Symbol">(</a><a id="4407" href="/20.07/TSPL/2019/Exam/#1723" class="InductiveConstructor Operator">ƛ</a> <a id="4409" href="/20.07/TSPL/2019/Exam/#4341" class="Bound">N</a><a id="4410" class="Symbol">)</a>
|
||
|
||
<a id="Problem2.Value.V-zero"></a><a id="4417" href="/20.07/TSPL/2019/Exam/#4417" class="InductiveConstructor">V-zero</a> <a id="4424" class="Symbol">:</a> <a id="4426" class="Symbol">∀</a> <a id="4428" class="Symbol">{</a><a id="4429" href="/20.07/TSPL/2019/Exam/#4429" class="Bound">Γ</a><a id="4430" class="Symbol">}</a>
|
||
<a id="4440" class="Comment">-----------------</a>
|
||
<a id="4464" class="Symbol">→</a> <a id="4466" href="/20.07/TSPL/2019/Exam/#4283" class="Datatype">Value</a> <a id="4472" class="Symbol">(</a><a id="4473" href="/20.07/TSPL/2019/Exam/#1890" class="InductiveConstructor">`zero</a> <a id="4479" class="Symbol">{</a><a id="4480" href="/20.07/TSPL/2019/Exam/#4429" class="Bound">Γ</a><a id="4481" class="Symbol">})</a>
|
||
|
||
<a id="Problem2.Value.V-suc"></a><a id="4489" href="/20.07/TSPL/2019/Exam/#4489" class="InductiveConstructor">V-suc</a> <a id="4495" class="Symbol">:</a> <a id="4497" class="Symbol">∀</a> <a id="4499" class="Symbol">{</a><a id="4500" href="/20.07/TSPL/2019/Exam/#4500" class="Bound">Γ</a><a id="4501" class="Symbol">}</a> <a id="4503" class="Symbol">{</a><a id="4504" href="/20.07/TSPL/2019/Exam/#4504" class="Bound">V</a> <a id="4506" class="Symbol">:</a> <a id="4508" href="/20.07/TSPL/2019/Exam/#4500" class="Bound">Γ</a> <a id="4510" href="/20.07/TSPL/2019/Exam/#1622" class="Datatype Operator">⊢</a> <a id="4512" href="/20.07/TSPL/2019/Exam/#1265" class="InductiveConstructor">`ℕ</a><a id="4514" class="Symbol">}</a>
|
||
<a id="4522" class="Symbol">→</a> <a id="4524" href="/20.07/TSPL/2019/Exam/#4283" class="Datatype">Value</a> <a id="4530" href="/20.07/TSPL/2019/Exam/#4504" class="Bound">V</a>
|
||
<a id="4540" class="Comment">--------------</a>
|
||
<a id="4561" class="Symbol">→</a> <a id="4563" href="/20.07/TSPL/2019/Exam/#4283" class="Datatype">Value</a> <a id="4569" class="Symbol">(</a><a id="4570" href="/20.07/TSPL/2019/Exam/#1943" class="InductiveConstructor Operator">`suc</a> <a id="4575" href="/20.07/TSPL/2019/Exam/#4504" class="Bound">V</a><a id="4576" class="Symbol">)</a>
|
||
</pre>
|
||
<h3 id="reduction">Reduction</h3>
|
||
|
||
<pre class="Agda"> <a id="4604" class="Keyword">infix</a> <a id="4610" class="Number">2</a> <a id="4612" href="/20.07/TSPL/2019/Exam/#4625" class="Datatype Operator">_—→_</a>
|
||
|
||
<a id="4620" class="Keyword">data</a> <a id="Problem2._—→_"></a><a id="4625" href="/20.07/TSPL/2019/Exam/#4625" class="Datatype Operator">_—→_</a> <a id="4630" class="Symbol">:</a> <a id="4632" class="Symbol">∀</a> <a id="4634" class="Symbol">{</a><a id="4635" href="/20.07/TSPL/2019/Exam/#4635" class="Bound">Γ</a> <a id="4637" href="/20.07/TSPL/2019/Exam/#4637" class="Bound">A</a><a id="4638" class="Symbol">}</a> <a id="4640" class="Symbol">→</a> <a id="4642" class="Symbol">(</a><a id="4643" href="/20.07/TSPL/2019/Exam/#4635" class="Bound">Γ</a> <a id="4645" href="/20.07/TSPL/2019/Exam/#1622" class="Datatype Operator">⊢</a> <a id="4647" href="/20.07/TSPL/2019/Exam/#4637" class="Bound">A</a><a id="4648" class="Symbol">)</a> <a id="4650" class="Symbol">→</a> <a id="4652" class="Symbol">(</a><a id="4653" href="/20.07/TSPL/2019/Exam/#4635" class="Bound">Γ</a> <a id="4655" href="/20.07/TSPL/2019/Exam/#1622" class="Datatype Operator">⊢</a> <a id="4657" href="/20.07/TSPL/2019/Exam/#4637" class="Bound">A</a><a id="4658" class="Symbol">)</a> <a id="4660" class="Symbol">→</a> <a id="4662" class="PrimitiveType">Set</a> <a id="4666" class="Keyword">where</a>
|
||
|
||
<a id="Problem2._—→_.ξ-·₁"></a><a id="4677" href="/20.07/TSPL/2019/Exam/#4677" class="InductiveConstructor">ξ-·₁</a> <a id="4682" class="Symbol">:</a> <a id="4684" class="Symbol">∀</a> <a id="4686" class="Symbol">{</a><a id="4687" href="/20.07/TSPL/2019/Exam/#4687" class="Bound">Γ</a> <a id="4689" href="/20.07/TSPL/2019/Exam/#4689" class="Bound">A</a> <a id="4691" href="/20.07/TSPL/2019/Exam/#4691" class="Bound">B</a><a id="4692" class="Symbol">}</a> <a id="4694" class="Symbol">{</a><a id="4695" href="/20.07/TSPL/2019/Exam/#4695" class="Bound">L</a> <a id="4697" href="/20.07/TSPL/2019/Exam/#4697" class="Bound">L′</a> <a id="4700" class="Symbol">:</a> <a id="4702" href="/20.07/TSPL/2019/Exam/#4687" class="Bound">Γ</a> <a id="4704" href="/20.07/TSPL/2019/Exam/#1622" class="Datatype Operator">⊢</a> <a id="4706" href="/20.07/TSPL/2019/Exam/#4689" class="Bound">A</a> <a id="4708" href="/20.07/TSPL/2019/Exam/#1234" class="InductiveConstructor Operator">⇒</a> <a id="4710" href="/20.07/TSPL/2019/Exam/#4691" class="Bound">B</a><a id="4711" class="Symbol">}</a> <a id="4713" class="Symbol">{</a><a id="4714" href="/20.07/TSPL/2019/Exam/#4714" class="Bound">M</a> <a id="4716" class="Symbol">:</a> <a id="4718" href="/20.07/TSPL/2019/Exam/#4687" class="Bound">Γ</a> <a id="4720" href="/20.07/TSPL/2019/Exam/#1622" class="Datatype Operator">⊢</a> <a id="4722" href="/20.07/TSPL/2019/Exam/#4689" class="Bound">A</a><a id="4723" class="Symbol">}</a>
|
||
<a id="4731" class="Symbol">→</a> <a id="4733" href="/20.07/TSPL/2019/Exam/#4695" class="Bound">L</a> <a id="4735" href="/20.07/TSPL/2019/Exam/#4625" class="Datatype Operator">—→</a> <a id="4738" href="/20.07/TSPL/2019/Exam/#4697" class="Bound">L′</a>
|
||
<a id="4749" class="Comment">-----------------</a>
|
||
<a id="4773" class="Symbol">→</a> <a id="4775" href="/20.07/TSPL/2019/Exam/#4695" class="Bound">L</a> <a id="4777" href="/20.07/TSPL/2019/Exam/#1802" class="InductiveConstructor Operator">·</a> <a id="4779" href="/20.07/TSPL/2019/Exam/#4714" class="Bound">M</a> <a id="4781" href="/20.07/TSPL/2019/Exam/#4625" class="Datatype Operator">—→</a> <a id="4784" href="/20.07/TSPL/2019/Exam/#4697" class="Bound">L′</a> <a id="4787" href="/20.07/TSPL/2019/Exam/#1802" class="InductiveConstructor Operator">·</a> <a id="4789" href="/20.07/TSPL/2019/Exam/#4714" class="Bound">M</a>
|
||
|
||
<a id="Problem2._—→_.ξ-·₂"></a><a id="4796" href="/20.07/TSPL/2019/Exam/#4796" class="InductiveConstructor">ξ-·₂</a> <a id="4801" class="Symbol">:</a> <a id="4803" class="Symbol">∀</a> <a id="4805" class="Symbol">{</a><a id="4806" href="/20.07/TSPL/2019/Exam/#4806" class="Bound">Γ</a> <a id="4808" href="/20.07/TSPL/2019/Exam/#4808" class="Bound">A</a> <a id="4810" href="/20.07/TSPL/2019/Exam/#4810" class="Bound">B</a><a id="4811" class="Symbol">}</a> <a id="4813" class="Symbol">{</a><a id="4814" href="/20.07/TSPL/2019/Exam/#4814" class="Bound">V</a> <a id="4816" class="Symbol">:</a> <a id="4818" href="/20.07/TSPL/2019/Exam/#4806" class="Bound">Γ</a> <a id="4820" href="/20.07/TSPL/2019/Exam/#1622" class="Datatype Operator">⊢</a> <a id="4822" href="/20.07/TSPL/2019/Exam/#4808" class="Bound">A</a> <a id="4824" href="/20.07/TSPL/2019/Exam/#1234" class="InductiveConstructor Operator">⇒</a> <a id="4826" href="/20.07/TSPL/2019/Exam/#4810" class="Bound">B</a><a id="4827" class="Symbol">}</a> <a id="4829" class="Symbol">{</a><a id="4830" href="/20.07/TSPL/2019/Exam/#4830" class="Bound">M</a> <a id="4832" href="/20.07/TSPL/2019/Exam/#4832" class="Bound">M′</a> <a id="4835" class="Symbol">:</a> <a id="4837" href="/20.07/TSPL/2019/Exam/#4806" class="Bound">Γ</a> <a id="4839" href="/20.07/TSPL/2019/Exam/#1622" class="Datatype Operator">⊢</a> <a id="4841" href="/20.07/TSPL/2019/Exam/#4808" class="Bound">A</a><a id="4842" class="Symbol">}</a>
|
||
<a id="4850" class="Symbol">→</a> <a id="4852" href="/20.07/TSPL/2019/Exam/#4283" class="Datatype">Value</a> <a id="4858" href="/20.07/TSPL/2019/Exam/#4814" class="Bound">V</a>
|
||
<a id="4866" class="Symbol">→</a> <a id="4868" href="/20.07/TSPL/2019/Exam/#4830" class="Bound">M</a> <a id="4870" href="/20.07/TSPL/2019/Exam/#4625" class="Datatype Operator">—→</a> <a id="4873" href="/20.07/TSPL/2019/Exam/#4832" class="Bound">M′</a>
|
||
<a id="4884" class="Comment">--------------</a>
|
||
<a id="4905" class="Symbol">→</a> <a id="4907" href="/20.07/TSPL/2019/Exam/#4814" class="Bound">V</a> <a id="4909" href="/20.07/TSPL/2019/Exam/#1802" class="InductiveConstructor Operator">·</a> <a id="4911" href="/20.07/TSPL/2019/Exam/#4830" class="Bound">M</a> <a id="4913" href="/20.07/TSPL/2019/Exam/#4625" class="Datatype Operator">—→</a> <a id="4916" href="/20.07/TSPL/2019/Exam/#4814" class="Bound">V</a> <a id="4918" href="/20.07/TSPL/2019/Exam/#1802" class="InductiveConstructor Operator">·</a> <a id="4920" href="/20.07/TSPL/2019/Exam/#4832" class="Bound">M′</a>
|
||
|
||
<a id="Problem2._—→_.β-ƛ"></a><a id="4928" href="/20.07/TSPL/2019/Exam/#4928" class="InductiveConstructor">β-ƛ</a> <a id="4932" class="Symbol">:</a> <a id="4934" class="Symbol">∀</a> <a id="4936" class="Symbol">{</a><a id="4937" href="/20.07/TSPL/2019/Exam/#4937" class="Bound">Γ</a> <a id="4939" href="/20.07/TSPL/2019/Exam/#4939" class="Bound">A</a> <a id="4941" href="/20.07/TSPL/2019/Exam/#4941" class="Bound">B</a><a id="4942" class="Symbol">}</a> <a id="4944" class="Symbol">{</a><a id="4945" href="/20.07/TSPL/2019/Exam/#4945" class="Bound">N</a> <a id="4947" class="Symbol">:</a> <a id="4949" href="/20.07/TSPL/2019/Exam/#4937" class="Bound">Γ</a> <a id="4951" href="/20.07/TSPL/2019/Exam/#1328" class="InductiveConstructor Operator">,</a> <a id="4953" href="/20.07/TSPL/2019/Exam/#4939" class="Bound">A</a> <a id="4955" href="/20.07/TSPL/2019/Exam/#1622" class="Datatype Operator">⊢</a> <a id="4957" href="/20.07/TSPL/2019/Exam/#4941" class="Bound">B</a><a id="4958" class="Symbol">}</a> <a id="4960" class="Symbol">{</a><a id="4961" href="/20.07/TSPL/2019/Exam/#4961" class="Bound">W</a> <a id="4963" class="Symbol">:</a> <a id="4965" href="/20.07/TSPL/2019/Exam/#4937" class="Bound">Γ</a> <a id="4967" href="/20.07/TSPL/2019/Exam/#1622" class="Datatype Operator">⊢</a> <a id="4969" href="/20.07/TSPL/2019/Exam/#4939" class="Bound">A</a><a id="4970" class="Symbol">}</a>
|
||
<a id="4978" class="Symbol">→</a> <a id="4980" href="/20.07/TSPL/2019/Exam/#4283" class="Datatype">Value</a> <a id="4986" href="/20.07/TSPL/2019/Exam/#4961" class="Bound">W</a>
|
||
<a id="4996" class="Comment">-------------------</a>
|
||
<a id="5022" class="Symbol">→</a> <a id="5024" class="Symbol">(</a><a id="5025" href="/20.07/TSPL/2019/Exam/#1723" class="InductiveConstructor Operator">ƛ</a> <a id="5027" href="/20.07/TSPL/2019/Exam/#4945" class="Bound">N</a><a id="5028" class="Symbol">)</a> <a id="5030" href="/20.07/TSPL/2019/Exam/#1802" class="InductiveConstructor Operator">·</a> <a id="5032" href="/20.07/TSPL/2019/Exam/#4961" class="Bound">W</a> <a id="5034" href="/20.07/TSPL/2019/Exam/#4625" class="Datatype Operator">—→</a> <a id="5037" href="/20.07/TSPL/2019/Exam/#4945" class="Bound">N</a> <a id="5039" href="/20.07/TSPL/2019/Exam/#4024" class="Function Operator">[</a> <a id="5041" href="/20.07/TSPL/2019/Exam/#4961" class="Bound">W</a> <a id="5043" href="/20.07/TSPL/2019/Exam/#4024" class="Function Operator">]</a>
|
||
|
||
<a id="Problem2._—→_.ξ-suc"></a><a id="5050" href="/20.07/TSPL/2019/Exam/#5050" class="InductiveConstructor">ξ-suc</a> <a id="5056" class="Symbol">:</a> <a id="5058" class="Symbol">∀</a> <a id="5060" class="Symbol">{</a><a id="5061" href="/20.07/TSPL/2019/Exam/#5061" class="Bound">Γ</a><a id="5062" class="Symbol">}</a> <a id="5064" class="Symbol">{</a><a id="5065" href="/20.07/TSPL/2019/Exam/#5065" class="Bound">M</a> <a id="5067" href="/20.07/TSPL/2019/Exam/#5067" class="Bound">M′</a> <a id="5070" class="Symbol">:</a> <a id="5072" href="/20.07/TSPL/2019/Exam/#5061" class="Bound">Γ</a> <a id="5074" href="/20.07/TSPL/2019/Exam/#1622" class="Datatype Operator">⊢</a> <a id="5076" href="/20.07/TSPL/2019/Exam/#1265" class="InductiveConstructor">`ℕ</a><a id="5078" class="Symbol">}</a>
|
||
<a id="5086" class="Symbol">→</a> <a id="5088" href="/20.07/TSPL/2019/Exam/#5065" class="Bound">M</a> <a id="5090" href="/20.07/TSPL/2019/Exam/#4625" class="Datatype Operator">—→</a> <a id="5093" href="/20.07/TSPL/2019/Exam/#5067" class="Bound">M′</a>
|
||
<a id="5104" class="Comment">----------------</a>
|
||
<a id="5127" class="Symbol">→</a> <a id="5129" href="/20.07/TSPL/2019/Exam/#1943" class="InductiveConstructor Operator">`suc</a> <a id="5134" href="/20.07/TSPL/2019/Exam/#5065" class="Bound">M</a> <a id="5136" href="/20.07/TSPL/2019/Exam/#4625" class="Datatype Operator">—→</a> <a id="5139" href="/20.07/TSPL/2019/Exam/#1943" class="InductiveConstructor Operator">`suc</a> <a id="5144" href="/20.07/TSPL/2019/Exam/#5067" class="Bound">M′</a>
|
||
|
||
<a id="Problem2._—→_.ξ-case"></a><a id="5152" href="/20.07/TSPL/2019/Exam/#5152" class="InductiveConstructor">ξ-case</a> <a id="5159" class="Symbol">:</a> <a id="5161" class="Symbol">∀</a> <a id="5163" class="Symbol">{</a><a id="5164" href="/20.07/TSPL/2019/Exam/#5164" class="Bound">Γ</a> <a id="5166" href="/20.07/TSPL/2019/Exam/#5166" class="Bound">A</a><a id="5167" class="Symbol">}</a> <a id="5169" class="Symbol">{</a><a id="5170" href="/20.07/TSPL/2019/Exam/#5170" class="Bound">L</a> <a id="5172" href="/20.07/TSPL/2019/Exam/#5172" class="Bound">L′</a> <a id="5175" class="Symbol">:</a> <a id="5177" href="/20.07/TSPL/2019/Exam/#5164" class="Bound">Γ</a> <a id="5179" href="/20.07/TSPL/2019/Exam/#1622" class="Datatype Operator">⊢</a> <a id="5181" href="/20.07/TSPL/2019/Exam/#1265" class="InductiveConstructor">`ℕ</a><a id="5183" class="Symbol">}</a> <a id="5185" class="Symbol">{</a><a id="5186" href="/20.07/TSPL/2019/Exam/#5186" class="Bound">M</a> <a id="5188" class="Symbol">:</a> <a id="5190" href="/20.07/TSPL/2019/Exam/#5164" class="Bound">Γ</a> <a id="5192" href="/20.07/TSPL/2019/Exam/#1622" class="Datatype Operator">⊢</a> <a id="5194" href="/20.07/TSPL/2019/Exam/#5166" class="Bound">A</a><a id="5195" class="Symbol">}</a> <a id="5197" class="Symbol">{</a><a id="5198" href="/20.07/TSPL/2019/Exam/#5198" class="Bound">N</a> <a id="5200" class="Symbol">:</a> <a id="5202" href="/20.07/TSPL/2019/Exam/#5164" class="Bound">Γ</a> <a id="5204" href="/20.07/TSPL/2019/Exam/#1328" class="InductiveConstructor Operator">,</a> <a id="5206" href="/20.07/TSPL/2019/Exam/#1265" class="InductiveConstructor">`ℕ</a> <a id="5209" href="/20.07/TSPL/2019/Exam/#1622" class="Datatype Operator">⊢</a> <a id="5211" href="/20.07/TSPL/2019/Exam/#5166" class="Bound">A</a><a id="5212" class="Symbol">}</a>
|
||
<a id="5220" class="Symbol">→</a> <a id="5222" href="/20.07/TSPL/2019/Exam/#5170" class="Bound">L</a> <a id="5224" href="/20.07/TSPL/2019/Exam/#4625" class="Datatype Operator">—→</a> <a id="5227" href="/20.07/TSPL/2019/Exam/#5172" class="Bound">L′</a>
|
||
<a id="5238" class="Comment">--------------------------</a>
|
||
<a id="5271" class="Symbol">→</a> <a id="5273" href="/20.07/TSPL/2019/Exam/#2008" class="InductiveConstructor">case</a> <a id="5278" href="/20.07/TSPL/2019/Exam/#5170" class="Bound">L</a> <a id="5280" href="/20.07/TSPL/2019/Exam/#5186" class="Bound">M</a> <a id="5282" href="/20.07/TSPL/2019/Exam/#5198" class="Bound">N</a> <a id="5284" href="/20.07/TSPL/2019/Exam/#4625" class="Datatype Operator">—→</a> <a id="5287" href="/20.07/TSPL/2019/Exam/#2008" class="InductiveConstructor">case</a> <a id="5292" href="/20.07/TSPL/2019/Exam/#5172" class="Bound">L′</a> <a id="5295" href="/20.07/TSPL/2019/Exam/#5186" class="Bound">M</a> <a id="5297" href="/20.07/TSPL/2019/Exam/#5198" class="Bound">N</a>
|
||
|
||
<a id="Problem2._—→_.β-zero"></a><a id="5304" href="/20.07/TSPL/2019/Exam/#5304" class="InductiveConstructor">β-zero</a> <a id="5311" class="Symbol">:</a> <a id="5314" class="Symbol">∀</a> <a id="5316" class="Symbol">{</a><a id="5317" href="/20.07/TSPL/2019/Exam/#5317" class="Bound">Γ</a> <a id="5319" href="/20.07/TSPL/2019/Exam/#5319" class="Bound">A</a><a id="5320" class="Symbol">}</a> <a id="5322" class="Symbol">{</a><a id="5323" href="/20.07/TSPL/2019/Exam/#5323" class="Bound">M</a> <a id="5325" class="Symbol">:</a> <a id="5327" href="/20.07/TSPL/2019/Exam/#5317" class="Bound">Γ</a> <a id="5329" href="/20.07/TSPL/2019/Exam/#1622" class="Datatype Operator">⊢</a> <a id="5331" href="/20.07/TSPL/2019/Exam/#5319" class="Bound">A</a><a id="5332" class="Symbol">}</a> <a id="5334" class="Symbol">{</a><a id="5335" href="/20.07/TSPL/2019/Exam/#5335" class="Bound">N</a> <a id="5337" class="Symbol">:</a> <a id="5339" href="/20.07/TSPL/2019/Exam/#5317" class="Bound">Γ</a> <a id="5341" href="/20.07/TSPL/2019/Exam/#1328" class="InductiveConstructor Operator">,</a> <a id="5343" href="/20.07/TSPL/2019/Exam/#1265" class="InductiveConstructor">`ℕ</a> <a id="5346" href="/20.07/TSPL/2019/Exam/#1622" class="Datatype Operator">⊢</a> <a id="5348" href="/20.07/TSPL/2019/Exam/#5319" class="Bound">A</a><a id="5349" class="Symbol">}</a>
|
||
<a id="5359" class="Comment">-------------------</a>
|
||
<a id="5385" class="Symbol">→</a> <a id="5387" href="/20.07/TSPL/2019/Exam/#2008" class="InductiveConstructor">case</a> <a id="5392" href="/20.07/TSPL/2019/Exam/#1890" class="InductiveConstructor">`zero</a> <a id="5398" href="/20.07/TSPL/2019/Exam/#5323" class="Bound">M</a> <a id="5400" href="/20.07/TSPL/2019/Exam/#5335" class="Bound">N</a> <a id="5402" href="/20.07/TSPL/2019/Exam/#4625" class="Datatype Operator">—→</a> <a id="5405" href="/20.07/TSPL/2019/Exam/#5323" class="Bound">M</a>
|
||
|
||
<a id="Problem2._—→_.β-suc"></a><a id="5412" href="/20.07/TSPL/2019/Exam/#5412" class="InductiveConstructor">β-suc</a> <a id="5418" class="Symbol">:</a> <a id="5420" class="Symbol">∀</a> <a id="5422" class="Symbol">{</a><a id="5423" href="/20.07/TSPL/2019/Exam/#5423" class="Bound">Γ</a> <a id="5425" href="/20.07/TSPL/2019/Exam/#5425" class="Bound">A</a><a id="5426" class="Symbol">}</a> <a id="5428" class="Symbol">{</a><a id="5429" href="/20.07/TSPL/2019/Exam/#5429" class="Bound">V</a> <a id="5431" class="Symbol">:</a> <a id="5433" href="/20.07/TSPL/2019/Exam/#5423" class="Bound">Γ</a> <a id="5435" href="/20.07/TSPL/2019/Exam/#1622" class="Datatype Operator">⊢</a> <a id="5437" href="/20.07/TSPL/2019/Exam/#1265" class="InductiveConstructor">`ℕ</a><a id="5439" class="Symbol">}</a> <a id="5441" class="Symbol">{</a><a id="5442" href="/20.07/TSPL/2019/Exam/#5442" class="Bound">M</a> <a id="5444" class="Symbol">:</a> <a id="5446" href="/20.07/TSPL/2019/Exam/#5423" class="Bound">Γ</a> <a id="5448" href="/20.07/TSPL/2019/Exam/#1622" class="Datatype Operator">⊢</a> <a id="5450" href="/20.07/TSPL/2019/Exam/#5425" class="Bound">A</a><a id="5451" class="Symbol">}</a> <a id="5453" class="Symbol">{</a><a id="5454" href="/20.07/TSPL/2019/Exam/#5454" class="Bound">N</a> <a id="5456" class="Symbol">:</a> <a id="5458" href="/20.07/TSPL/2019/Exam/#5423" class="Bound">Γ</a> <a id="5460" href="/20.07/TSPL/2019/Exam/#1328" class="InductiveConstructor Operator">,</a> <a id="5462" href="/20.07/TSPL/2019/Exam/#1265" class="InductiveConstructor">`ℕ</a> <a id="5465" href="/20.07/TSPL/2019/Exam/#1622" class="Datatype Operator">⊢</a> <a id="5467" href="/20.07/TSPL/2019/Exam/#5425" class="Bound">A</a><a id="5468" class="Symbol">}</a>
|
||
<a id="5476" class="Symbol">→</a> <a id="5478" href="/20.07/TSPL/2019/Exam/#4283" class="Datatype">Value</a> <a id="5484" href="/20.07/TSPL/2019/Exam/#5429" class="Bound">V</a>
|
||
<a id="5494" class="Comment">-----------------------------</a>
|
||
<a id="5530" class="Symbol">→</a> <a id="5532" href="/20.07/TSPL/2019/Exam/#2008" class="InductiveConstructor">case</a> <a id="5537" class="Symbol">(</a><a id="5538" href="/20.07/TSPL/2019/Exam/#1943" class="InductiveConstructor Operator">`suc</a> <a id="5543" href="/20.07/TSPL/2019/Exam/#5429" class="Bound">V</a><a id="5544" class="Symbol">)</a> <a id="5546" href="/20.07/TSPL/2019/Exam/#5442" class="Bound">M</a> <a id="5548" href="/20.07/TSPL/2019/Exam/#5454" class="Bound">N</a> <a id="5550" href="/20.07/TSPL/2019/Exam/#4625" class="Datatype Operator">—→</a> <a id="5553" href="/20.07/TSPL/2019/Exam/#5454" class="Bound">N</a> <a id="5555" href="/20.07/TSPL/2019/Exam/#4024" class="Function Operator">[</a> <a id="5557" href="/20.07/TSPL/2019/Exam/#5429" class="Bound">V</a> <a id="5559" href="/20.07/TSPL/2019/Exam/#4024" class="Function Operator">]</a>
|
||
|
||
<a id="Problem2._—→_.β-μ"></a><a id="5566" href="/20.07/TSPL/2019/Exam/#5566" class="InductiveConstructor">β-μ</a> <a id="5570" class="Symbol">:</a> <a id="5572" class="Symbol">∀</a> <a id="5574" class="Symbol">{</a><a id="5575" href="/20.07/TSPL/2019/Exam/#5575" class="Bound">Γ</a> <a id="5577" href="/20.07/TSPL/2019/Exam/#5577" class="Bound">A</a><a id="5578" class="Symbol">}</a> <a id="5580" class="Symbol">{</a><a id="5581" href="/20.07/TSPL/2019/Exam/#5581" class="Bound">N</a> <a id="5583" class="Symbol">:</a> <a id="5585" href="/20.07/TSPL/2019/Exam/#5575" class="Bound">Γ</a> <a id="5587" href="/20.07/TSPL/2019/Exam/#1328" class="InductiveConstructor Operator">,</a> <a id="5589" href="/20.07/TSPL/2019/Exam/#5577" class="Bound">A</a> <a id="5591" href="/20.07/TSPL/2019/Exam/#1622" class="Datatype Operator">⊢</a> <a id="5593" href="/20.07/TSPL/2019/Exam/#5577" class="Bound">A</a><a id="5594" class="Symbol">}</a>
|
||
<a id="5604" class="Comment">---------------</a>
|
||
<a id="5626" class="Symbol">→</a> <a id="5628" href="/20.07/TSPL/2019/Exam/#2110" class="InductiveConstructor Operator">μ</a> <a id="5630" href="/20.07/TSPL/2019/Exam/#5581" class="Bound">N</a> <a id="5632" href="/20.07/TSPL/2019/Exam/#4625" class="Datatype Operator">—→</a> <a id="5635" href="/20.07/TSPL/2019/Exam/#5581" class="Bound">N</a> <a id="5637" href="/20.07/TSPL/2019/Exam/#4024" class="Function Operator">[</a> <a id="5639" href="/20.07/TSPL/2019/Exam/#2110" class="InductiveConstructor Operator">μ</a> <a id="5641" href="/20.07/TSPL/2019/Exam/#5581" class="Bound">N</a> <a id="5643" href="/20.07/TSPL/2019/Exam/#4024" class="Function Operator">]</a>
|
||
</pre>
|
||
|
||
<h3 id="reflexive-and-transitive-closure">Reflexive and transitive closure</h3>
|
||
|
||
<pre class="Agda"> <a id="5695" class="Keyword">infix</a> <a id="5702" class="Number">2</a> <a id="5704" href="/20.07/TSPL/2019/Exam/#5768" class="Datatype Operator">_—↠_</a>
|
||
<a id="5711" class="Keyword">infix</a> <a id="5718" class="Number">1</a> <a id="5720" href="/20.07/TSPL/2019/Exam/#5992" class="Function Operator">begin_</a>
|
||
<a id="5729" class="Keyword">infixr</a> <a id="5736" class="Number">2</a> <a id="5738" href="/20.07/TSPL/2019/Exam/#5882" class="InductiveConstructor Operator">_—→⟨_⟩_</a>
|
||
<a id="5748" class="Keyword">infix</a> <a id="5755" class="Number">3</a> <a id="5757" href="/20.07/TSPL/2019/Exam/#5820" class="InductiveConstructor Operator">_∎</a>
|
||
|
||
<a id="5763" class="Keyword">data</a> <a id="Problem2._—↠_"></a><a id="5768" href="/20.07/TSPL/2019/Exam/#5768" class="Datatype Operator">_—↠_</a> <a id="5773" class="Symbol">:</a> <a id="5775" class="Symbol">∀</a> <a id="5777" class="Symbol">{</a><a id="5778" href="/20.07/TSPL/2019/Exam/#5778" class="Bound">Γ</a> <a id="5780" href="/20.07/TSPL/2019/Exam/#5780" class="Bound">A</a><a id="5781" class="Symbol">}</a> <a id="5783" class="Symbol">→</a> <a id="5785" class="Symbol">(</a><a id="5786" href="/20.07/TSPL/2019/Exam/#5778" class="Bound">Γ</a> <a id="5788" href="/20.07/TSPL/2019/Exam/#1622" class="Datatype Operator">⊢</a> <a id="5790" href="/20.07/TSPL/2019/Exam/#5780" class="Bound">A</a><a id="5791" class="Symbol">)</a> <a id="5793" class="Symbol">→</a> <a id="5795" class="Symbol">(</a><a id="5796" href="/20.07/TSPL/2019/Exam/#5778" class="Bound">Γ</a> <a id="5798" href="/20.07/TSPL/2019/Exam/#1622" class="Datatype Operator">⊢</a> <a id="5800" href="/20.07/TSPL/2019/Exam/#5780" class="Bound">A</a><a id="5801" class="Symbol">)</a> <a id="5803" class="Symbol">→</a> <a id="5805" class="PrimitiveType">Set</a> <a id="5809" class="Keyword">where</a>
|
||
|
||
<a id="Problem2._—↠_._∎"></a><a id="5820" href="/20.07/TSPL/2019/Exam/#5820" class="InductiveConstructor Operator">_∎</a> <a id="5823" class="Symbol">:</a> <a id="5825" class="Symbol">∀</a> <a id="5827" class="Symbol">{</a><a id="5828" href="/20.07/TSPL/2019/Exam/#5828" class="Bound">Γ</a> <a id="5830" href="/20.07/TSPL/2019/Exam/#5830" class="Bound">A</a><a id="5831" class="Symbol">}</a> <a id="5833" class="Symbol">(</a><a id="5834" href="/20.07/TSPL/2019/Exam/#5834" class="Bound">M</a> <a id="5836" class="Symbol">:</a> <a id="5838" href="/20.07/TSPL/2019/Exam/#5828" class="Bound">Γ</a> <a id="5840" href="/20.07/TSPL/2019/Exam/#1622" class="Datatype Operator">⊢</a> <a id="5842" href="/20.07/TSPL/2019/Exam/#5830" class="Bound">A</a><a id="5843" class="Symbol">)</a>
|
||
<a id="5853" class="Comment">--------</a>
|
||
<a id="5868" class="Symbol">→</a> <a id="5870" href="/20.07/TSPL/2019/Exam/#5834" class="Bound">M</a> <a id="5872" href="/20.07/TSPL/2019/Exam/#5768" class="Datatype Operator">—↠</a> <a id="5875" href="/20.07/TSPL/2019/Exam/#5834" class="Bound">M</a>
|
||
|
||
<a id="Problem2._—↠_._—→⟨_⟩_"></a><a id="5882" href="/20.07/TSPL/2019/Exam/#5882" class="InductiveConstructor Operator">_—→⟨_⟩_</a> <a id="5890" class="Symbol">:</a> <a id="5892" class="Symbol">∀</a> <a id="5894" class="Symbol">{</a><a id="5895" href="/20.07/TSPL/2019/Exam/#5895" class="Bound">Γ</a> <a id="5897" href="/20.07/TSPL/2019/Exam/#5897" class="Bound">A</a><a id="5898" class="Symbol">}</a> <a id="5900" class="Symbol">(</a><a id="5901" href="/20.07/TSPL/2019/Exam/#5901" class="Bound">L</a> <a id="5903" class="Symbol">:</a> <a id="5905" href="/20.07/TSPL/2019/Exam/#5895" class="Bound">Γ</a> <a id="5907" href="/20.07/TSPL/2019/Exam/#1622" class="Datatype Operator">⊢</a> <a id="5909" href="/20.07/TSPL/2019/Exam/#5897" class="Bound">A</a><a id="5910" class="Symbol">)</a> <a id="5912" class="Symbol">{</a><a id="5913" href="/20.07/TSPL/2019/Exam/#5913" class="Bound">M</a> <a id="5915" href="/20.07/TSPL/2019/Exam/#5915" class="Bound">N</a> <a id="5917" class="Symbol">:</a> <a id="5919" href="/20.07/TSPL/2019/Exam/#5895" class="Bound">Γ</a> <a id="5921" href="/20.07/TSPL/2019/Exam/#1622" class="Datatype Operator">⊢</a> <a id="5923" href="/20.07/TSPL/2019/Exam/#5897" class="Bound">A</a><a id="5924" class="Symbol">}</a>
|
||
<a id="5932" class="Symbol">→</a> <a id="5934" href="/20.07/TSPL/2019/Exam/#5901" class="Bound">L</a> <a id="5936" href="/20.07/TSPL/2019/Exam/#4625" class="Datatype Operator">—→</a> <a id="5939" href="/20.07/TSPL/2019/Exam/#5913" class="Bound">M</a>
|
||
<a id="5947" class="Symbol">→</a> <a id="5949" href="/20.07/TSPL/2019/Exam/#5913" class="Bound">M</a> <a id="5951" href="/20.07/TSPL/2019/Exam/#5768" class="Datatype Operator">—↠</a> <a id="5954" href="/20.07/TSPL/2019/Exam/#5915" class="Bound">N</a>
|
||
<a id="5964" class="Comment">---------</a>
|
||
<a id="5980" class="Symbol">→</a> <a id="5982" href="/20.07/TSPL/2019/Exam/#5901" class="Bound">L</a> <a id="5984" href="/20.07/TSPL/2019/Exam/#5768" class="Datatype Operator">—↠</a> <a id="5987" href="/20.07/TSPL/2019/Exam/#5915" class="Bound">N</a>
|
||
|
||
<a id="Problem2.begin_"></a><a id="5992" href="/20.07/TSPL/2019/Exam/#5992" class="Function Operator">begin_</a> <a id="5999" class="Symbol">:</a> <a id="6001" class="Symbol">∀</a> <a id="6003" class="Symbol">{</a><a id="6004" href="/20.07/TSPL/2019/Exam/#6004" class="Bound">Γ</a><a id="6005" class="Symbol">}</a> <a id="6007" class="Symbol">{</a><a id="6008" href="/20.07/TSPL/2019/Exam/#6008" class="Bound">A</a><a id="6009" class="Symbol">}</a> <a id="6011" class="Symbol">{</a><a id="6012" href="/20.07/TSPL/2019/Exam/#6012" class="Bound">M</a> <a id="6014" href="/20.07/TSPL/2019/Exam/#6014" class="Bound">N</a> <a id="6016" class="Symbol">:</a> <a id="6018" href="/20.07/TSPL/2019/Exam/#6004" class="Bound">Γ</a> <a id="6020" href="/20.07/TSPL/2019/Exam/#1622" class="Datatype Operator">⊢</a> <a id="6022" href="/20.07/TSPL/2019/Exam/#6008" class="Bound">A</a><a id="6023" class="Symbol">}</a>
|
||
<a id="6029" class="Symbol">→</a> <a id="6031" href="/20.07/TSPL/2019/Exam/#6012" class="Bound">M</a> <a id="6033" href="/20.07/TSPL/2019/Exam/#5768" class="Datatype Operator">—↠</a> <a id="6036" href="/20.07/TSPL/2019/Exam/#6014" class="Bound">N</a>
|
||
<a id="6044" class="Comment">------</a>
|
||
<a id="6055" class="Symbol">→</a> <a id="6057" href="/20.07/TSPL/2019/Exam/#6012" class="Bound">M</a> <a id="6059" href="/20.07/TSPL/2019/Exam/#5768" class="Datatype Operator">—↠</a> <a id="6062" href="/20.07/TSPL/2019/Exam/#6014" class="Bound">N</a>
|
||
<a id="6066" href="/20.07/TSPL/2019/Exam/#5992" class="Function Operator">begin</a> <a id="6072" href="/20.07/TSPL/2019/Exam/#6072" class="Bound">M—↠N</a> <a id="6077" class="Symbol">=</a> <a id="6079" href="/20.07/TSPL/2019/Exam/#6072" class="Bound">M—↠N</a>
|
||
</pre>
|
||
|
||
<h3 id="progress">Progress</h3>
|
||
|
||
<pre class="Agda"> <a id="6110" class="Keyword">data</a> <a id="Problem2.Progress"></a><a id="6115" href="/20.07/TSPL/2019/Exam/#6115" class="Datatype">Progress</a> <a id="6124" class="Symbol">{</a><a id="6125" href="/20.07/TSPL/2019/Exam/#6125" class="Bound">A</a><a id="6126" class="Symbol">}</a> <a id="6128" class="Symbol">(</a><a id="6129" href="/20.07/TSPL/2019/Exam/#6129" class="Bound">M</a> <a id="6131" class="Symbol">:</a> <a id="6133" href="/20.07/TSPL/2019/Exam/#1310" class="InductiveConstructor">∅</a> <a id="6135" href="/20.07/TSPL/2019/Exam/#1622" class="Datatype Operator">⊢</a> <a id="6137" href="/20.07/TSPL/2019/Exam/#6125" class="Bound">A</a><a id="6138" class="Symbol">)</a> <a id="6140" class="Symbol">:</a> <a id="6142" class="PrimitiveType">Set</a> <a id="6146" class="Keyword">where</a>
|
||
|
||
<a id="Problem2.Progress.step"></a><a id="6157" href="/20.07/TSPL/2019/Exam/#6157" class="InductiveConstructor">step</a> <a id="6162" class="Symbol">:</a> <a id="6164" class="Symbol">∀</a> <a id="6166" class="Symbol">{</a><a id="6167" href="/20.07/TSPL/2019/Exam/#6167" class="Bound">N</a> <a id="6169" class="Symbol">:</a> <a id="6171" href="/20.07/TSPL/2019/Exam/#1310" class="InductiveConstructor">∅</a> <a id="6173" href="/20.07/TSPL/2019/Exam/#1622" class="Datatype Operator">⊢</a> <a id="6175" href="/20.07/TSPL/2019/Exam/#6125" class="Bound">A</a><a id="6176" class="Symbol">}</a>
|
||
<a id="6184" class="Symbol">→</a> <a id="6186" href="/20.07/TSPL/2019/Exam/#6129" class="Bound">M</a> <a id="6188" href="/20.07/TSPL/2019/Exam/#4625" class="Datatype Operator">—→</a> <a id="6191" href="/20.07/TSPL/2019/Exam/#6167" class="Bound">N</a>
|
||
<a id="6201" class="Comment">-------------</a>
|
||
<a id="6221" class="Symbol">→</a> <a id="6223" href="/20.07/TSPL/2019/Exam/#6115" class="Datatype">Progress</a> <a id="6232" href="/20.07/TSPL/2019/Exam/#6129" class="Bound">M</a>
|
||
|
||
<a id="Problem2.Progress.done"></a><a id="6239" href="/20.07/TSPL/2019/Exam/#6239" class="InductiveConstructor">done</a> <a id="6244" class="Symbol">:</a>
|
||
<a id="6254" href="/20.07/TSPL/2019/Exam/#4283" class="Datatype">Value</a> <a id="6260" href="/20.07/TSPL/2019/Exam/#6129" class="Bound">M</a>
|
||
<a id="6270" class="Comment">----------</a>
|
||
<a id="6287" class="Symbol">→</a> <a id="6289" href="/20.07/TSPL/2019/Exam/#6115" class="Datatype">Progress</a> <a id="6298" href="/20.07/TSPL/2019/Exam/#6129" class="Bound">M</a>
|
||
|
||
<a id="Problem2.progress"></a><a id="6303" href="/20.07/TSPL/2019/Exam/#6303" class="Function">progress</a> <a id="6312" class="Symbol">:</a> <a id="6314" class="Symbol">∀</a> <a id="6316" class="Symbol">{</a><a id="6317" href="/20.07/TSPL/2019/Exam/#6317" class="Bound">A</a><a id="6318" class="Symbol">}</a> <a id="6320" class="Symbol">→</a> <a id="6322" class="Symbol">(</a><a id="6323" href="/20.07/TSPL/2019/Exam/#6323" class="Bound">M</a> <a id="6325" class="Symbol">:</a> <a id="6327" href="/20.07/TSPL/2019/Exam/#1310" class="InductiveConstructor">∅</a> <a id="6329" href="/20.07/TSPL/2019/Exam/#1622" class="Datatype Operator">⊢</a> <a id="6331" href="/20.07/TSPL/2019/Exam/#6317" class="Bound">A</a><a id="6332" class="Symbol">)</a> <a id="6334" class="Symbol">→</a> <a id="6336" href="/20.07/TSPL/2019/Exam/#6115" class="Datatype">Progress</a> <a id="6345" href="/20.07/TSPL/2019/Exam/#6323" class="Bound">M</a>
|
||
<a id="6349" href="/20.07/TSPL/2019/Exam/#6303" class="Function">progress</a> <a id="6358" class="Symbol">(</a><a id="6359" href="/20.07/TSPL/2019/Exam/#1660" class="InductiveConstructor Operator">`</a> <a id="6361" class="Symbol">())</a>
|
||
<a id="6367" href="/20.07/TSPL/2019/Exam/#6303" class="Function">progress</a> <a id="6376" class="Symbol">(</a><a id="6377" href="/20.07/TSPL/2019/Exam/#1723" class="InductiveConstructor Operator">ƛ</a> <a id="6379" href="/20.07/TSPL/2019/Exam/#6379" class="Bound">N</a><a id="6380" class="Symbol">)</a> <a id="6407" class="Symbol">=</a> <a id="6410" href="/20.07/TSPL/2019/Exam/#6239" class="InductiveConstructor">done</a> <a id="6415" href="/20.07/TSPL/2019/Exam/#4324" class="InductiveConstructor">V-ƛ</a>
|
||
<a id="6421" href="/20.07/TSPL/2019/Exam/#6303" class="Function">progress</a> <a id="6430" class="Symbol">(</a><a id="6431" href="/20.07/TSPL/2019/Exam/#6431" class="Bound">L</a> <a id="6433" href="/20.07/TSPL/2019/Exam/#1802" class="InductiveConstructor Operator">·</a> <a id="6435" href="/20.07/TSPL/2019/Exam/#6435" class="Bound">M</a><a id="6436" class="Symbol">)</a> <a id="6438" class="Keyword">with</a> <a id="6443" href="/20.07/TSPL/2019/Exam/#6303" class="Function">progress</a> <a id="6452" href="/20.07/TSPL/2019/Exam/#6431" class="Bound">L</a>
|
||
<a id="6456" class="Symbol">...</a> <a id="6463" class="Symbol">|</a> <a id="6465" href="/20.07/TSPL/2019/Exam/#6157" class="InductiveConstructor">step</a> <a id="6470" href="/20.07/TSPL/2019/Exam/#6470" class="Bound">L—→L′</a> <a id="6496" class="Symbol">=</a> <a id="6499" href="/20.07/TSPL/2019/Exam/#6157" class="InductiveConstructor">step</a> <a id="6504" class="Symbol">(</a><a id="6505" href="/20.07/TSPL/2019/Exam/#4677" class="InductiveConstructor">ξ-·₁</a> <a id="6510" href="/20.07/TSPL/2019/Exam/#6470" class="Bound">L—→L′</a><a id="6515" class="Symbol">)</a>
|
||
<a id="6519" class="Symbol">...</a> <a id="6526" class="Symbol">|</a> <a id="6528" href="/20.07/TSPL/2019/Exam/#6239" class="InductiveConstructor">done</a> <a id="6533" href="/20.07/TSPL/2019/Exam/#4324" class="InductiveConstructor">V-ƛ</a> <a id="6537" class="Keyword">with</a> <a id="6542" href="/20.07/TSPL/2019/Exam/#6303" class="Function">progress</a> <a id="6551" class="Bound">M</a>
|
||
<a id="6555" class="Symbol">...</a> <a id="6566" class="Symbol">|</a> <a id="6568" href="/20.07/TSPL/2019/Exam/#6157" class="InductiveConstructor">step</a> <a id="6573" href="/20.07/TSPL/2019/Exam/#6573" class="Bound">M—→M′</a> <a id="6595" class="Symbol">=</a> <a id="6598" href="/20.07/TSPL/2019/Exam/#6157" class="InductiveConstructor">step</a> <a id="6603" class="Symbol">(</a><a id="6604" href="/20.07/TSPL/2019/Exam/#4796" class="InductiveConstructor">ξ-·₂</a> <a id="6609" href="/20.07/TSPL/2019/Exam/#4324" class="InductiveConstructor">V-ƛ</a> <a id="6613" href="/20.07/TSPL/2019/Exam/#6573" class="Bound">M—→M′</a><a id="6618" class="Symbol">)</a>
|
||
<a id="6622" class="Symbol">...</a> <a id="6633" class="Symbol">|</a> <a id="6635" href="/20.07/TSPL/2019/Exam/#6239" class="InductiveConstructor">done</a> <a id="6640" href="/20.07/TSPL/2019/Exam/#6640" class="Bound">VM</a> <a id="6662" class="Symbol">=</a> <a id="6665" href="/20.07/TSPL/2019/Exam/#6157" class="InductiveConstructor">step</a> <a id="6670" class="Symbol">(</a><a id="6671" href="/20.07/TSPL/2019/Exam/#4928" class="InductiveConstructor">β-ƛ</a> <a id="6675" href="/20.07/TSPL/2019/Exam/#6640" class="Bound">VM</a><a id="6677" class="Symbol">)</a>
|
||
<a id="6681" href="/20.07/TSPL/2019/Exam/#6303" class="Function">progress</a> <a id="6690" class="Symbol">(</a><a id="6691" href="/20.07/TSPL/2019/Exam/#1890" class="InductiveConstructor">`zero</a><a id="6696" class="Symbol">)</a> <a id="6721" class="Symbol">=</a> <a id="6724" href="/20.07/TSPL/2019/Exam/#6239" class="InductiveConstructor">done</a> <a id="6729" href="/20.07/TSPL/2019/Exam/#4417" class="InductiveConstructor">V-zero</a>
|
||
<a id="6738" href="/20.07/TSPL/2019/Exam/#6303" class="Function">progress</a> <a id="6747" class="Symbol">(</a><a id="6748" href="/20.07/TSPL/2019/Exam/#1943" class="InductiveConstructor Operator">`suc</a> <a id="6753" href="/20.07/TSPL/2019/Exam/#6753" class="Bound">M</a><a id="6754" class="Symbol">)</a> <a id="6756" class="Keyword">with</a> <a id="6761" href="/20.07/TSPL/2019/Exam/#6303" class="Function">progress</a> <a id="6770" href="/20.07/TSPL/2019/Exam/#6753" class="Bound">M</a>
|
||
<a id="6774" class="Symbol">...</a> <a id="6781" class="Symbol">|</a> <a id="6783" href="/20.07/TSPL/2019/Exam/#6157" class="InductiveConstructor">step</a> <a id="6788" href="/20.07/TSPL/2019/Exam/#6788" class="Bound">M—→M′</a> <a id="6814" class="Symbol">=</a> <a id="6817" href="/20.07/TSPL/2019/Exam/#6157" class="InductiveConstructor">step</a> <a id="6822" class="Symbol">(</a><a id="6823" href="/20.07/TSPL/2019/Exam/#5050" class="InductiveConstructor">ξ-suc</a> <a id="6829" href="/20.07/TSPL/2019/Exam/#6788" class="Bound">M—→M′</a><a id="6834" class="Symbol">)</a>
|
||
<a id="6838" class="Symbol">...</a> <a id="6845" class="Symbol">|</a> <a id="6847" href="/20.07/TSPL/2019/Exam/#6239" class="InductiveConstructor">done</a> <a id="6852" href="/20.07/TSPL/2019/Exam/#6852" class="Bound">VM</a> <a id="6878" class="Symbol">=</a> <a id="6881" href="/20.07/TSPL/2019/Exam/#6239" class="InductiveConstructor">done</a> <a id="6886" class="Symbol">(</a><a id="6887" href="/20.07/TSPL/2019/Exam/#4489" class="InductiveConstructor">V-suc</a> <a id="6893" href="/20.07/TSPL/2019/Exam/#6852" class="Bound">VM</a><a id="6895" class="Symbol">)</a>
|
||
<a id="6899" href="/20.07/TSPL/2019/Exam/#6303" class="Function">progress</a> <a id="6908" class="Symbol">(</a><a id="6909" href="/20.07/TSPL/2019/Exam/#2008" class="InductiveConstructor">case</a> <a id="6914" href="/20.07/TSPL/2019/Exam/#6914" class="Bound">L</a> <a id="6916" href="/20.07/TSPL/2019/Exam/#6916" class="Bound">M</a> <a id="6918" href="/20.07/TSPL/2019/Exam/#6918" class="Bound">N</a><a id="6919" class="Symbol">)</a> <a id="6921" class="Keyword">with</a> <a id="6926" href="/20.07/TSPL/2019/Exam/#6303" class="Function">progress</a> <a id="6935" href="/20.07/TSPL/2019/Exam/#6914" class="Bound">L</a>
|
||
<a id="6939" class="Symbol">...</a> <a id="6946" class="Symbol">|</a> <a id="6948" href="/20.07/TSPL/2019/Exam/#6157" class="InductiveConstructor">step</a> <a id="6953" href="/20.07/TSPL/2019/Exam/#6953" class="Bound">L—→L′</a> <a id="6979" class="Symbol">=</a> <a id="6982" href="/20.07/TSPL/2019/Exam/#6157" class="InductiveConstructor">step</a> <a id="6987" class="Symbol">(</a><a id="6988" href="/20.07/TSPL/2019/Exam/#5152" class="InductiveConstructor">ξ-case</a> <a id="6995" href="/20.07/TSPL/2019/Exam/#6953" class="Bound">L—→L′</a><a id="7000" class="Symbol">)</a>
|
||
<a id="7004" class="Symbol">...</a> <a id="7011" class="Symbol">|</a> <a id="7013" href="/20.07/TSPL/2019/Exam/#6239" class="InductiveConstructor">done</a> <a id="7018" href="/20.07/TSPL/2019/Exam/#4417" class="InductiveConstructor">V-zero</a> <a id="7044" class="Symbol">=</a> <a id="7047" href="/20.07/TSPL/2019/Exam/#6157" class="InductiveConstructor">step</a> <a id="7052" class="Symbol">(</a><a id="7053" href="/20.07/TSPL/2019/Exam/#5304" class="InductiveConstructor">β-zero</a><a id="7059" class="Symbol">)</a>
|
||
<a id="7063" class="Symbol">...</a> <a id="7070" class="Symbol">|</a> <a id="7072" href="/20.07/TSPL/2019/Exam/#6239" class="InductiveConstructor">done</a> <a id="7077" class="Symbol">(</a><a id="7078" href="/20.07/TSPL/2019/Exam/#4489" class="InductiveConstructor">V-suc</a> <a id="7084" href="/20.07/TSPL/2019/Exam/#7084" class="Bound">VL</a><a id="7086" class="Symbol">)</a> <a id="7103" class="Symbol">=</a> <a id="7106" href="/20.07/TSPL/2019/Exam/#6157" class="InductiveConstructor">step</a> <a id="7111" class="Symbol">(</a><a id="7112" href="/20.07/TSPL/2019/Exam/#5412" class="InductiveConstructor">β-suc</a> <a id="7118" href="/20.07/TSPL/2019/Exam/#7084" class="Bound">VL</a><a id="7120" class="Symbol">)</a>
|
||
<a id="7124" href="/20.07/TSPL/2019/Exam/#6303" class="Function">progress</a> <a id="7133" class="Symbol">(</a><a id="7134" href="/20.07/TSPL/2019/Exam/#2110" class="InductiveConstructor Operator">μ</a> <a id="7136" href="/20.07/TSPL/2019/Exam/#7136" class="Bound">N</a><a id="7137" class="Symbol">)</a> <a id="7164" class="Symbol">=</a> <a id="7167" href="/20.07/TSPL/2019/Exam/#6157" class="InductiveConstructor">step</a> <a id="7172" class="Symbol">(</a><a id="7173" href="/20.07/TSPL/2019/Exam/#5566" class="InductiveConstructor">β-μ</a><a id="7176" class="Symbol">)</a>
|
||
</pre>
|
||
<h3 id="evaluation">Evaluation</h3>
|
||
|
||
<pre class="Agda"> <a id="7205" class="Keyword">data</a> <a id="Problem2.Gas"></a><a id="7210" href="/20.07/TSPL/2019/Exam/#7210" class="Datatype">Gas</a> <a id="7214" class="Symbol">:</a> <a id="7216" class="PrimitiveType">Set</a> <a id="7220" class="Keyword">where</a>
|
||
<a id="Problem2.Gas.gas"></a><a id="7230" href="/20.07/TSPL/2019/Exam/#7230" class="InductiveConstructor">gas</a> <a id="7234" class="Symbol">:</a> <a id="7236" href="Agda.Builtin.Nat.html#165" class="Datatype">ℕ</a> <a id="7238" class="Symbol">→</a> <a id="7240" href="/20.07/TSPL/2019/Exam/#7210" class="Datatype">Gas</a>
|
||
|
||
<a id="7247" class="Keyword">data</a> <a id="Problem2.Finished"></a><a id="7252" href="/20.07/TSPL/2019/Exam/#7252" class="Datatype">Finished</a> <a id="7261" class="Symbol">{</a><a id="7262" href="/20.07/TSPL/2019/Exam/#7262" class="Bound">Γ</a> <a id="7264" href="/20.07/TSPL/2019/Exam/#7264" class="Bound">A</a><a id="7265" class="Symbol">}</a> <a id="7267" class="Symbol">(</a><a id="7268" href="/20.07/TSPL/2019/Exam/#7268" class="Bound">N</a> <a id="7270" class="Symbol">:</a> <a id="7272" href="/20.07/TSPL/2019/Exam/#7262" class="Bound">Γ</a> <a id="7274" href="/20.07/TSPL/2019/Exam/#1622" class="Datatype Operator">⊢</a> <a id="7276" href="/20.07/TSPL/2019/Exam/#7264" class="Bound">A</a><a id="7277" class="Symbol">)</a> <a id="7279" class="Symbol">:</a> <a id="7281" class="PrimitiveType">Set</a> <a id="7285" class="Keyword">where</a>
|
||
|
||
<a id="Problem2.Finished.done"></a><a id="7297" href="/20.07/TSPL/2019/Exam/#7297" class="InductiveConstructor">done</a> <a id="7302" class="Symbol">:</a>
|
||
<a id="7313" href="/20.07/TSPL/2019/Exam/#4283" class="Datatype">Value</a> <a id="7319" href="/20.07/TSPL/2019/Exam/#7268" class="Bound">N</a>
|
||
<a id="7330" class="Comment">----------</a>
|
||
<a id="7348" class="Symbol">→</a> <a id="7350" href="/20.07/TSPL/2019/Exam/#7252" class="Datatype">Finished</a> <a id="7359" href="/20.07/TSPL/2019/Exam/#7268" class="Bound">N</a>
|
||
|
||
<a id="Problem2.Finished.out-of-gas"></a><a id="7367" href="/20.07/TSPL/2019/Exam/#7367" class="InductiveConstructor">out-of-gas</a> <a id="7378" class="Symbol">:</a>
|
||
<a id="7389" class="Comment">----------</a>
|
||
<a id="7409" href="/20.07/TSPL/2019/Exam/#7252" class="Datatype">Finished</a> <a id="7418" href="/20.07/TSPL/2019/Exam/#7268" class="Bound">N</a>
|
||
|
||
<a id="7423" class="Keyword">data</a> <a id="Problem2.Steps"></a><a id="7428" href="/20.07/TSPL/2019/Exam/#7428" class="Datatype">Steps</a> <a id="7434" class="Symbol">:</a> <a id="7436" class="Symbol">∀</a> <a id="7438" class="Symbol">{</a><a id="7439" href="/20.07/TSPL/2019/Exam/#7439" class="Bound">A</a><a id="7440" class="Symbol">}</a> <a id="7442" class="Symbol">→</a> <a id="7444" href="/20.07/TSPL/2019/Exam/#1310" class="InductiveConstructor">∅</a> <a id="7446" href="/20.07/TSPL/2019/Exam/#1622" class="Datatype Operator">⊢</a> <a id="7448" href="/20.07/TSPL/2019/Exam/#7439" class="Bound">A</a> <a id="7450" class="Symbol">→</a> <a id="7452" class="PrimitiveType">Set</a> <a id="7456" class="Keyword">where</a>
|
||
|
||
<a id="Problem2.Steps.steps"></a><a id="7467" href="/20.07/TSPL/2019/Exam/#7467" class="InductiveConstructor">steps</a> <a id="7473" class="Symbol">:</a> <a id="7475" class="Symbol">∀</a> <a id="7477" class="Symbol">{</a><a id="7478" href="/20.07/TSPL/2019/Exam/#7478" class="Bound">A</a><a id="7479" class="Symbol">}</a> <a id="7481" class="Symbol">{</a><a id="7482" href="/20.07/TSPL/2019/Exam/#7482" class="Bound">L</a> <a id="7484" href="/20.07/TSPL/2019/Exam/#7484" class="Bound">N</a> <a id="7486" class="Symbol">:</a> <a id="7488" href="/20.07/TSPL/2019/Exam/#1310" class="InductiveConstructor">∅</a> <a id="7490" href="/20.07/TSPL/2019/Exam/#1622" class="Datatype Operator">⊢</a> <a id="7492" href="/20.07/TSPL/2019/Exam/#7478" class="Bound">A</a><a id="7493" class="Symbol">}</a>
|
||
<a id="7501" class="Symbol">→</a> <a id="7503" href="/20.07/TSPL/2019/Exam/#7482" class="Bound">L</a> <a id="7505" href="/20.07/TSPL/2019/Exam/#5768" class="Datatype Operator">—↠</a> <a id="7508" href="/20.07/TSPL/2019/Exam/#7484" class="Bound">N</a>
|
||
<a id="7516" class="Symbol">→</a> <a id="7518" href="/20.07/TSPL/2019/Exam/#7252" class="Datatype">Finished</a> <a id="7527" href="/20.07/TSPL/2019/Exam/#7484" class="Bound">N</a>
|
||
<a id="7537" class="Comment">----------</a>
|
||
<a id="7554" class="Symbol">→</a> <a id="7556" href="/20.07/TSPL/2019/Exam/#7428" class="Datatype">Steps</a> <a id="7562" href="/20.07/TSPL/2019/Exam/#7482" class="Bound">L</a>
|
||
|
||
<a id="Problem2.eval"></a><a id="7567" href="/20.07/TSPL/2019/Exam/#7567" class="Function">eval</a> <a id="7572" class="Symbol">:</a> <a id="7574" class="Symbol">∀</a> <a id="7576" class="Symbol">{</a><a id="7577" href="/20.07/TSPL/2019/Exam/#7577" class="Bound">A</a><a id="7578" class="Symbol">}</a>
|
||
<a id="7584" class="Symbol">→</a> <a id="7586" href="/20.07/TSPL/2019/Exam/#7210" class="Datatype">Gas</a>
|
||
<a id="7594" class="Symbol">→</a> <a id="7596" class="Symbol">(</a><a id="7597" href="/20.07/TSPL/2019/Exam/#7597" class="Bound">L</a> <a id="7599" class="Symbol">:</a> <a id="7601" href="/20.07/TSPL/2019/Exam/#1310" class="InductiveConstructor">∅</a> <a id="7603" href="/20.07/TSPL/2019/Exam/#1622" class="Datatype Operator">⊢</a> <a id="7605" href="/20.07/TSPL/2019/Exam/#7577" class="Bound">A</a><a id="7606" class="Symbol">)</a>
|
||
<a id="7614" class="Comment">-----------</a>
|
||
<a id="7630" class="Symbol">→</a> <a id="7632" href="/20.07/TSPL/2019/Exam/#7428" class="Datatype">Steps</a> <a id="7638" href="/20.07/TSPL/2019/Exam/#7597" class="Bound">L</a>
|
||
<a id="7642" href="/20.07/TSPL/2019/Exam/#7567" class="Function">eval</a> <a id="7647" class="Symbol">(</a><a id="7648" href="/20.07/TSPL/2019/Exam/#7230" class="InductiveConstructor">gas</a> <a id="7652" href="Agda.Builtin.Nat.html#183" class="InductiveConstructor">zero</a><a id="7656" class="Symbol">)</a> <a id="7661" href="/20.07/TSPL/2019/Exam/#7661" class="Bound">L</a> <a id="7683" class="Symbol">=</a> <a id="7686" href="/20.07/TSPL/2019/Exam/#7467" class="InductiveConstructor">steps</a> <a id="7692" class="Symbol">(</a><a id="7693" href="/20.07/TSPL/2019/Exam/#7661" class="Bound">L</a> <a id="7695" href="/20.07/TSPL/2019/Exam/#5820" class="InductiveConstructor Operator">∎</a><a id="7696" class="Symbol">)</a> <a id="7698" href="/20.07/TSPL/2019/Exam/#7367" class="InductiveConstructor">out-of-gas</a>
|
||
<a id="7711" href="/20.07/TSPL/2019/Exam/#7567" class="Function">eval</a> <a id="7716" class="Symbol">(</a><a id="7717" href="/20.07/TSPL/2019/Exam/#7230" class="InductiveConstructor">gas</a> <a id="7721" class="Symbol">(</a><a id="7722" href="Agda.Builtin.Nat.html#196" class="InductiveConstructor">suc</a> <a id="7726" href="/20.07/TSPL/2019/Exam/#7726" class="Bound">m</a><a id="7727" class="Symbol">))</a> <a id="7730" href="/20.07/TSPL/2019/Exam/#7730" class="Bound">L</a> <a id="7732" class="Keyword">with</a> <a id="7737" href="/20.07/TSPL/2019/Exam/#6303" class="Function">progress</a> <a id="7746" href="/20.07/TSPL/2019/Exam/#7730" class="Bound">L</a>
|
||
<a id="7750" class="Symbol">...</a> <a id="7754" class="Symbol">|</a> <a id="7756" href="/20.07/TSPL/2019/Exam/#6239" class="InductiveConstructor">done</a> <a id="7761" href="/20.07/TSPL/2019/Exam/#7761" class="Bound">VL</a> <a id="7791" class="Symbol">=</a> <a id="7794" href="/20.07/TSPL/2019/Exam/#7467" class="InductiveConstructor">steps</a> <a id="7800" class="Symbol">(</a><a id="7801" class="Bound">L</a> <a id="7803" href="/20.07/TSPL/2019/Exam/#5820" class="InductiveConstructor Operator">∎</a><a id="7804" class="Symbol">)</a> <a id="7806" class="Symbol">(</a><a id="7807" href="/20.07/TSPL/2019/Exam/#7297" class="InductiveConstructor">done</a> <a id="7812" href="/20.07/TSPL/2019/Exam/#7761" class="Bound">VL</a><a id="7814" class="Symbol">)</a>
|
||
<a id="7818" class="Symbol">...</a> <a id="7822" class="Symbol">|</a> <a id="7824" href="/20.07/TSPL/2019/Exam/#6157" class="InductiveConstructor">step</a> <a id="7829" class="Symbol">{</a><a id="7830" href="/20.07/TSPL/2019/Exam/#7830" class="Bound">M</a><a id="7831" class="Symbol">}</a> <a id="7833" href="/20.07/TSPL/2019/Exam/#7833" class="Bound">L—→M</a> <a id="7838" class="Keyword">with</a> <a id="7843" href="/20.07/TSPL/2019/Exam/#7567" class="Function">eval</a> <a id="7848" class="Symbol">(</a><a id="7849" href="/20.07/TSPL/2019/Exam/#7230" class="InductiveConstructor">gas</a> <a id="7853" class="Bound">m</a><a id="7854" class="Symbol">)</a> <a id="7856" href="/20.07/TSPL/2019/Exam/#7830" class="Bound">M</a>
|
||
<a id="7860" class="Symbol">...</a> <a id="7867" class="Symbol">|</a> <a id="7869" href="/20.07/TSPL/2019/Exam/#7467" class="InductiveConstructor">steps</a> <a id="7875" href="/20.07/TSPL/2019/Exam/#7875" class="Bound">M—↠N</a> <a id="7880" href="/20.07/TSPL/2019/Exam/#7880" class="Bound">fin</a> <a id="7901" class="Symbol">=</a> <a id="7904" href="/20.07/TSPL/2019/Exam/#7467" class="InductiveConstructor">steps</a> <a id="7910" class="Symbol">(</a><a id="7911" class="Bound">L</a> <a id="7913" href="/20.07/TSPL/2019/Exam/#5882" class="InductiveConstructor Operator">—→⟨</a> <a id="7917" class="Bound">L—→M</a> <a id="7922" href="/20.07/TSPL/2019/Exam/#5882" class="InductiveConstructor Operator">⟩</a> <a id="7924" href="/20.07/TSPL/2019/Exam/#7875" class="Bound">M—↠N</a><a id="7928" class="Symbol">)</a> <a id="7930" href="/20.07/TSPL/2019/Exam/#7880" class="Bound">fin</a>
|
||
</pre>
|
||
<h2 id="problem-3">Problem 3</h2>
|
||
|
||
<p>Remember to indent all code by two spaces.</p>
|
||
|
||
<pre class="Agda"><a id="8001" class="Keyword">module</a> <a id="Problem3"></a><a id="8008" href="/20.07/TSPL/2019/Exam/#8008" class="Module">Problem3</a> <a id="8017" class="Keyword">where</a>
|
||
</pre>
|
||
<h3 id="imports-1">Imports</h3>
|
||
|
||
<pre class="Agda"> <a id="8047" class="Keyword">import</a> <a id="8054" href="/20.07/DeBruijn/" class="Module">plfa.part2.DeBruijn</a> <a id="8074" class="Symbol">as</a> <a id="8077" class="Module">DB</a>
|
||
</pre>
|
||
<h3 id="syntax">Syntax</h3>
|
||
|
||
<pre class="Agda"> <a id="8103" class="Keyword">infix</a> <a id="8111" class="Number">4</a> <a id="8114" href="/20.07/TSPL/2019/Exam/#9123" class="Datatype Operator">_∋_⦂_</a>
|
||
<a id="8122" class="Keyword">infix</a> <a id="8130" class="Number">4</a> <a id="8133" href="/20.07/TSPL/2019/Exam/#9393" class="Datatype Operator">_⊢_↑_</a>
|
||
<a id="8141" class="Keyword">infix</a> <a id="8149" class="Number">4</a> <a id="8152" href="/20.07/TSPL/2019/Exam/#9437" class="Datatype Operator">_⊢_↓_</a>
|
||
<a id="8160" class="Keyword">infixl</a> <a id="8168" class="Number">5</a> <a id="8171" href="/20.07/TSPL/2019/Exam/#8516" class="InductiveConstructor Operator">_,_⦂_</a>
|
||
|
||
<a id="8180" class="Keyword">infix</a> <a id="8188" class="Number">5</a> <a id="8191" href="/20.07/TSPL/2019/Exam/#8806" class="InductiveConstructor Operator">ƛ_⇒_</a>
|
||
<a id="8198" class="Keyword">infix</a> <a id="8206" class="Number">5</a> <a id="8209" href="/20.07/TSPL/2019/Exam/#9004" class="InductiveConstructor Operator">μ_⇒_</a>
|
||
<a id="8216" class="Keyword">infix</a> <a id="8224" class="Number">6</a> <a id="8227" href="/20.07/TSPL/2019/Exam/#9054" class="InductiveConstructor Operator">_↑</a>
|
||
<a id="8232" class="Keyword">infix</a> <a id="8240" class="Number">6</a> <a id="8243" href="/20.07/TSPL/2019/Exam/#8733" class="InductiveConstructor Operator">_↓_</a>
|
||
<a id="8249" class="Keyword">infixl</a> <a id="8257" class="Number">7</a> <a id="8260" href="/20.07/TSPL/2019/Exam/#9577" class="InductiveConstructor Operator">_·_</a>
|
||
<a id="8266" class="Keyword">infix</a> <a id="8274" class="Number">8</a> <a id="8277" href="/20.07/TSPL/2019/Exam/#8893" class="InductiveConstructor Operator">`suc_</a>
|
||
<a id="8285" class="Keyword">infix</a> <a id="8293" class="Number">9</a> <a id="8296" href="/20.07/TSPL/2019/Exam/#8636" class="InductiveConstructor Operator">`_</a>
|
||
</pre>
|
||
<h3 id="types">Types</h3>
|
||
|
||
<pre class="Agda"> <a id="8321" class="Keyword">data</a> <a id="Problem3.Type"></a><a id="8326" href="/20.07/TSPL/2019/Exam/#8326" class="Datatype">Type</a> <a id="8331" class="Symbol">:</a> <a id="8333" class="PrimitiveType">Set</a> <a id="8337" class="Keyword">where</a>
|
||
<a id="Problem3.Type._⇒_"></a><a id="8347" href="/20.07/TSPL/2019/Exam/#8347" class="InductiveConstructor Operator">_⇒_</a> <a id="8353" class="Symbol">:</a> <a id="8355" href="/20.07/TSPL/2019/Exam/#8326" class="Datatype">Type</a> <a id="8360" class="Symbol">→</a> <a id="8362" href="/20.07/TSPL/2019/Exam/#8326" class="Datatype">Type</a> <a id="8367" class="Symbol">→</a> <a id="8369" href="/20.07/TSPL/2019/Exam/#8326" class="Datatype">Type</a>
|
||
<a id="Problem3.Type.`ℕ"></a><a id="8378" href="/20.07/TSPL/2019/Exam/#8378" class="InductiveConstructor">`ℕ</a> <a id="8384" class="Symbol">:</a> <a id="8386" href="/20.07/TSPL/2019/Exam/#8326" class="Datatype">Type</a>
|
||
</pre>
|
||
<h3 id="identifiers">Identifiers</h3>
|
||
|
||
<pre class="Agda"> <a id="Problem3.Id"></a><a id="8419" href="/20.07/TSPL/2019/Exam/#8419" class="Function">Id</a> <a id="8422" class="Symbol">:</a> <a id="8424" class="PrimitiveType">Set</a>
|
||
<a id="8430" href="/20.07/TSPL/2019/Exam/#8419" class="Function">Id</a> <a id="8433" class="Symbol">=</a> <a id="8435" href="Agda.Builtin.String.html#206" class="Postulate">String</a>
|
||
</pre>
|
||
<h3 id="contexts">Contexts</h3>
|
||
|
||
<pre class="Agda"> <a id="8467" class="Keyword">data</a> <a id="Problem3.Context"></a><a id="8472" href="/20.07/TSPL/2019/Exam/#8472" class="Datatype">Context</a> <a id="8480" class="Symbol">:</a> <a id="8482" class="PrimitiveType">Set</a> <a id="8486" class="Keyword">where</a>
|
||
<a id="Problem3.Context.∅"></a><a id="8496" href="/20.07/TSPL/2019/Exam/#8496" class="InductiveConstructor">∅</a> <a id="8502" class="Symbol">:</a> <a id="8504" href="/20.07/TSPL/2019/Exam/#8472" class="Datatype">Context</a>
|
||
<a id="Problem3.Context._,_⦂_"></a><a id="8516" href="/20.07/TSPL/2019/Exam/#8516" class="InductiveConstructor Operator">_,_⦂_</a> <a id="8522" class="Symbol">:</a> <a id="8524" href="/20.07/TSPL/2019/Exam/#8472" class="Datatype">Context</a> <a id="8532" class="Symbol">→</a> <a id="8534" href="/20.07/TSPL/2019/Exam/#8419" class="Function">Id</a> <a id="8537" class="Symbol">→</a> <a id="8539" href="/20.07/TSPL/2019/Exam/#8326" class="Datatype">Type</a> <a id="8544" class="Symbol">→</a> <a id="8546" href="/20.07/TSPL/2019/Exam/#8472" class="Datatype">Context</a>
|
||
</pre>
|
||
<h3 id="terms">Terms</h3>
|
||
|
||
<pre class="Agda"> <a id="8576" class="Keyword">data</a> <a id="Problem3.Term⁺"></a><a id="8581" href="/20.07/TSPL/2019/Exam/#8581" class="Datatype">Term⁺</a> <a id="8587" class="Symbol">:</a> <a id="8589" class="PrimitiveType">Set</a>
|
||
<a id="8595" class="Keyword">data</a> <a id="Problem3.Term⁻"></a><a id="8600" href="/20.07/TSPL/2019/Exam/#8600" class="Datatype">Term⁻</a> <a id="8606" class="Symbol">:</a> <a id="8608" class="PrimitiveType">Set</a>
|
||
|
||
<a id="8615" class="Keyword">data</a> <a id="8620" href="/20.07/TSPL/2019/Exam/#8581" class="Datatype">Term⁺</a> <a id="8626" class="Keyword">where</a>
|
||
<a id="Problem3.Term⁺.`_"></a><a id="8636" href="/20.07/TSPL/2019/Exam/#8636" class="InductiveConstructor Operator">`_</a> <a id="8662" class="Symbol">:</a> <a id="8664" href="/20.07/TSPL/2019/Exam/#8419" class="Function">Id</a> <a id="8667" class="Symbol">→</a> <a id="8669" href="/20.07/TSPL/2019/Exam/#8581" class="Datatype">Term⁺</a>
|
||
<a id="Problem3.Term⁺._·_"></a><a id="8679" href="/20.07/TSPL/2019/Exam/#8679" class="InductiveConstructor Operator">_·_</a> <a id="8705" class="Symbol">:</a> <a id="8707" href="/20.07/TSPL/2019/Exam/#8581" class="Datatype">Term⁺</a> <a id="8713" class="Symbol">→</a> <a id="8715" href="/20.07/TSPL/2019/Exam/#8600" class="Datatype">Term⁻</a> <a id="8721" class="Symbol">→</a> <a id="8723" href="/20.07/TSPL/2019/Exam/#8581" class="Datatype">Term⁺</a>
|
||
<a id="Problem3.Term⁺._↓_"></a><a id="8733" href="/20.07/TSPL/2019/Exam/#8733" class="InductiveConstructor Operator">_↓_</a> <a id="8759" class="Symbol">:</a> <a id="8761" href="/20.07/TSPL/2019/Exam/#8600" class="Datatype">Term⁻</a> <a id="8767" class="Symbol">→</a> <a id="8769" href="/20.07/TSPL/2019/Exam/#8326" class="Datatype">Type</a> <a id="8774" class="Symbol">→</a> <a id="8776" href="/20.07/TSPL/2019/Exam/#8581" class="Datatype">Term⁺</a>
|
||
|
||
<a id="8785" class="Keyword">data</a> <a id="8790" href="/20.07/TSPL/2019/Exam/#8600" class="Datatype">Term⁻</a> <a id="8796" class="Keyword">where</a>
|
||
<a id="Problem3.Term⁻.ƛ_⇒_"></a><a id="8806" href="/20.07/TSPL/2019/Exam/#8806" class="InductiveConstructor Operator">ƛ_⇒_</a> <a id="8831" class="Symbol">:</a> <a id="8833" href="/20.07/TSPL/2019/Exam/#8419" class="Function">Id</a> <a id="8836" class="Symbol">→</a> <a id="8838" href="/20.07/TSPL/2019/Exam/#8600" class="Datatype">Term⁻</a> <a id="8844" class="Symbol">→</a> <a id="8846" href="/20.07/TSPL/2019/Exam/#8600" class="Datatype">Term⁻</a>
|
||
<a id="Problem3.Term⁻.`zero"></a><a id="8856" href="/20.07/TSPL/2019/Exam/#8856" class="InductiveConstructor">`zero</a> <a id="8881" class="Symbol">:</a> <a id="8883" href="/20.07/TSPL/2019/Exam/#8600" class="Datatype">Term⁻</a>
|
||
<a id="Problem3.Term⁻.`suc_"></a><a id="8893" href="/20.07/TSPL/2019/Exam/#8893" class="InductiveConstructor Operator">`suc_</a> <a id="8918" class="Symbol">:</a> <a id="8920" href="/20.07/TSPL/2019/Exam/#8600" class="Datatype">Term⁻</a> <a id="8926" class="Symbol">→</a> <a id="8928" href="/20.07/TSPL/2019/Exam/#8600" class="Datatype">Term⁻</a>
|
||
<a id="Problem3.Term⁻.`case_[zero⇒_|suc_⇒_]"></a><a id="8938" href="/20.07/TSPL/2019/Exam/#8938" class="InductiveConstructor Operator">`case_[zero⇒_|suc_⇒_]</a> <a id="8963" class="Symbol">:</a> <a id="8965" href="/20.07/TSPL/2019/Exam/#8581" class="Datatype">Term⁺</a> <a id="8971" class="Symbol">→</a> <a id="8973" href="/20.07/TSPL/2019/Exam/#8600" class="Datatype">Term⁻</a> <a id="8979" class="Symbol">→</a> <a id="8981" href="/20.07/TSPL/2019/Exam/#8419" class="Function">Id</a> <a id="8984" class="Symbol">→</a> <a id="8986" href="/20.07/TSPL/2019/Exam/#8600" class="Datatype">Term⁻</a> <a id="8992" class="Symbol">→</a> <a id="8994" href="/20.07/TSPL/2019/Exam/#8600" class="Datatype">Term⁻</a>
|
||
<a id="Problem3.Term⁻.μ_⇒_"></a><a id="9004" href="/20.07/TSPL/2019/Exam/#9004" class="InductiveConstructor Operator">μ_⇒_</a> <a id="9029" class="Symbol">:</a> <a id="9031" href="/20.07/TSPL/2019/Exam/#8419" class="Function">Id</a> <a id="9034" class="Symbol">→</a> <a id="9036" href="/20.07/TSPL/2019/Exam/#8600" class="Datatype">Term⁻</a> <a id="9042" class="Symbol">→</a> <a id="9044" href="/20.07/TSPL/2019/Exam/#8600" class="Datatype">Term⁻</a>
|
||
<a id="Problem3.Term⁻._↑"></a><a id="9054" href="/20.07/TSPL/2019/Exam/#9054" class="InductiveConstructor Operator">_↑</a> <a id="9079" class="Symbol">:</a> <a id="9081" href="/20.07/TSPL/2019/Exam/#8581" class="Datatype">Term⁺</a> <a id="9087" class="Symbol">→</a> <a id="9089" href="/20.07/TSPL/2019/Exam/#8600" class="Datatype">Term⁻</a>
|
||
</pre>
|
||
<h3 id="lookup">Lookup</h3>
|
||
|
||
<pre class="Agda"> <a id="9118" class="Keyword">data</a> <a id="Problem3._∋_⦂_"></a><a id="9123" href="/20.07/TSPL/2019/Exam/#9123" class="Datatype Operator">_∋_⦂_</a> <a id="9129" class="Symbol">:</a> <a id="9131" href="/20.07/TSPL/2019/Exam/#8472" class="Datatype">Context</a> <a id="9139" class="Symbol">→</a> <a id="9141" href="/20.07/TSPL/2019/Exam/#8419" class="Function">Id</a> <a id="9144" class="Symbol">→</a> <a id="9146" href="/20.07/TSPL/2019/Exam/#8326" class="Datatype">Type</a> <a id="9151" class="Symbol">→</a> <a id="9153" class="PrimitiveType">Set</a> <a id="9157" class="Keyword">where</a>
|
||
|
||
<a id="Problem3._∋_⦂_.Z"></a><a id="9168" href="/20.07/TSPL/2019/Exam/#9168" class="InductiveConstructor">Z</a> <a id="9170" class="Symbol">:</a> <a id="9172" class="Symbol">∀</a> <a id="9174" class="Symbol">{</a><a id="9175" href="/20.07/TSPL/2019/Exam/#9175" class="Bound">Γ</a> <a id="9177" href="/20.07/TSPL/2019/Exam/#9177" class="Bound">x</a> <a id="9179" href="/20.07/TSPL/2019/Exam/#9179" class="Bound">A</a><a id="9180" class="Symbol">}</a>
|
||
<a id="9190" class="Comment">--------------------</a>
|
||
<a id="9217" class="Symbol">→</a> <a id="9219" href="/20.07/TSPL/2019/Exam/#9175" class="Bound">Γ</a> <a id="9221" href="/20.07/TSPL/2019/Exam/#8516" class="InductiveConstructor Operator">,</a> <a id="9223" href="/20.07/TSPL/2019/Exam/#9177" class="Bound">x</a> <a id="9225" href="/20.07/TSPL/2019/Exam/#8516" class="InductiveConstructor Operator">⦂</a> <a id="9227" href="/20.07/TSPL/2019/Exam/#9179" class="Bound">A</a> <a id="9229" href="/20.07/TSPL/2019/Exam/#9123" class="Datatype Operator">∋</a> <a id="9231" href="/20.07/TSPL/2019/Exam/#9177" class="Bound">x</a> <a id="9233" href="/20.07/TSPL/2019/Exam/#9123" class="Datatype Operator">⦂</a> <a id="9235" href="/20.07/TSPL/2019/Exam/#9179" class="Bound">A</a>
|
||
|
||
<a id="Problem3._∋_⦂_.S"></a><a id="9242" href="/20.07/TSPL/2019/Exam/#9242" class="InductiveConstructor">S</a> <a id="9244" class="Symbol">:</a> <a id="9246" class="Symbol">∀</a> <a id="9248" class="Symbol">{</a><a id="9249" href="/20.07/TSPL/2019/Exam/#9249" class="Bound">Γ</a> <a id="9251" href="/20.07/TSPL/2019/Exam/#9251" class="Bound">x</a> <a id="9253" href="/20.07/TSPL/2019/Exam/#9253" class="Bound">y</a> <a id="9255" href="/20.07/TSPL/2019/Exam/#9255" class="Bound">A</a> <a id="9257" href="/20.07/TSPL/2019/Exam/#9257" class="Bound">B</a><a id="9258" class="Symbol">}</a>
|
||
<a id="9266" class="Symbol">→</a> <a id="9268" href="/20.07/TSPL/2019/Exam/#9251" class="Bound">x</a> <a id="9270" href="https://agda.github.io/agda-stdlib/v1.1/Relation.Binary.PropositionalEquality.Core.html#799" class="Function Operator">≢</a> <a id="9272" href="/20.07/TSPL/2019/Exam/#9253" class="Bound">y</a>
|
||
<a id="9280" class="Symbol">→</a> <a id="9282" href="/20.07/TSPL/2019/Exam/#9249" class="Bound">Γ</a> <a id="9284" href="/20.07/TSPL/2019/Exam/#9123" class="Datatype Operator">∋</a> <a id="9286" href="/20.07/TSPL/2019/Exam/#9251" class="Bound">x</a> <a id="9288" href="/20.07/TSPL/2019/Exam/#9123" class="Datatype Operator">⦂</a> <a id="9290" href="/20.07/TSPL/2019/Exam/#9255" class="Bound">A</a>
|
||
<a id="9300" class="Comment">-----------------</a>
|
||
<a id="9324" class="Symbol">→</a> <a id="9326" href="/20.07/TSPL/2019/Exam/#9249" class="Bound">Γ</a> <a id="9328" href="/20.07/TSPL/2019/Exam/#8516" class="InductiveConstructor Operator">,</a> <a id="9330" href="/20.07/TSPL/2019/Exam/#9253" class="Bound">y</a> <a id="9332" href="/20.07/TSPL/2019/Exam/#8516" class="InductiveConstructor Operator">⦂</a> <a id="9334" href="/20.07/TSPL/2019/Exam/#9257" class="Bound">B</a> <a id="9336" href="/20.07/TSPL/2019/Exam/#9123" class="Datatype Operator">∋</a> <a id="9338" href="/20.07/TSPL/2019/Exam/#9251" class="Bound">x</a> <a id="9340" href="/20.07/TSPL/2019/Exam/#9123" class="Datatype Operator">⦂</a> <a id="9342" href="/20.07/TSPL/2019/Exam/#9255" class="Bound">A</a>
|
||
</pre>
|
||
<h3 id="bidirectional-type-checking">Bidirectional type checking</h3>
|
||
|
||
<pre class="Agda"> <a id="9388" class="Keyword">data</a> <a id="Problem3._⊢_↑_"></a><a id="9393" href="/20.07/TSPL/2019/Exam/#9393" class="Datatype Operator">_⊢_↑_</a> <a id="9399" class="Symbol">:</a> <a id="9401" href="/20.07/TSPL/2019/Exam/#8472" class="Datatype">Context</a> <a id="9409" class="Symbol">→</a> <a id="9411" href="/20.07/TSPL/2019/Exam/#8581" class="Datatype">Term⁺</a> <a id="9417" class="Symbol">→</a> <a id="9419" href="/20.07/TSPL/2019/Exam/#8326" class="Datatype">Type</a> <a id="9424" class="Symbol">→</a> <a id="9426" class="PrimitiveType">Set</a>
|
||
<a id="9432" class="Keyword">data</a> <a id="Problem3._⊢_↓_"></a><a id="9437" href="/20.07/TSPL/2019/Exam/#9437" class="Datatype Operator">_⊢_↓_</a> <a id="9443" class="Symbol">:</a> <a id="9445" href="/20.07/TSPL/2019/Exam/#8472" class="Datatype">Context</a> <a id="9453" class="Symbol">→</a> <a id="9455" href="/20.07/TSPL/2019/Exam/#8600" class="Datatype">Term⁻</a> <a id="9461" class="Symbol">→</a> <a id="9463" href="/20.07/TSPL/2019/Exam/#8326" class="Datatype">Type</a> <a id="9468" class="Symbol">→</a> <a id="9470" class="PrimitiveType">Set</a>
|
||
|
||
<a id="9477" class="Keyword">data</a> <a id="9482" href="/20.07/TSPL/2019/Exam/#9393" class="Datatype Operator">_⊢_↑_</a> <a id="9488" class="Keyword">where</a>
|
||
|
||
<a id="Problem3._⊢_↑_.⊢`"></a><a id="9499" href="/20.07/TSPL/2019/Exam/#9499" class="InductiveConstructor">⊢`</a> <a id="9502" class="Symbol">:</a> <a id="9504" class="Symbol">∀</a> <a id="9506" class="Symbol">{</a><a id="9507" href="/20.07/TSPL/2019/Exam/#9507" class="Bound">Γ</a> <a id="9509" href="/20.07/TSPL/2019/Exam/#9509" class="Bound">A</a> <a id="9511" href="/20.07/TSPL/2019/Exam/#9511" class="Bound">x</a><a id="9512" class="Symbol">}</a>
|
||
<a id="9520" class="Symbol">→</a> <a id="9522" href="/20.07/TSPL/2019/Exam/#9507" class="Bound">Γ</a> <a id="9524" href="/20.07/TSPL/2019/Exam/#9123" class="Datatype Operator">∋</a> <a id="9526" href="/20.07/TSPL/2019/Exam/#9511" class="Bound">x</a> <a id="9528" href="/20.07/TSPL/2019/Exam/#9123" class="Datatype Operator">⦂</a> <a id="9530" href="/20.07/TSPL/2019/Exam/#9509" class="Bound">A</a>
|
||
<a id="9540" class="Comment">-----------</a>
|
||
<a id="9558" class="Symbol">→</a> <a id="9560" href="/20.07/TSPL/2019/Exam/#9507" class="Bound">Γ</a> <a id="9562" href="/20.07/TSPL/2019/Exam/#9393" class="Datatype Operator">⊢</a> <a id="9564" href="/20.07/TSPL/2019/Exam/#8636" class="InductiveConstructor Operator">`</a> <a id="9566" href="/20.07/TSPL/2019/Exam/#9511" class="Bound">x</a> <a id="9568" href="/20.07/TSPL/2019/Exam/#9393" class="Datatype Operator">↑</a> <a id="9570" href="/20.07/TSPL/2019/Exam/#9509" class="Bound">A</a>
|
||
|
||
<a id="Problem3._⊢_↑_._·_"></a><a id="9577" href="/20.07/TSPL/2019/Exam/#9577" class="InductiveConstructor Operator">_·_</a> <a id="9581" class="Symbol">:</a> <a id="9583" class="Symbol">∀</a> <a id="9585" class="Symbol">{</a><a id="9586" href="/20.07/TSPL/2019/Exam/#9586" class="Bound">Γ</a> <a id="9588" href="/20.07/TSPL/2019/Exam/#9588" class="Bound">L</a> <a id="9590" href="/20.07/TSPL/2019/Exam/#9590" class="Bound">M</a> <a id="9592" href="/20.07/TSPL/2019/Exam/#9592" class="Bound">A</a> <a id="9594" href="/20.07/TSPL/2019/Exam/#9594" class="Bound">B</a><a id="9595" class="Symbol">}</a>
|
||
<a id="9603" class="Symbol">→</a> <a id="9605" href="/20.07/TSPL/2019/Exam/#9586" class="Bound">Γ</a> <a id="9607" href="/20.07/TSPL/2019/Exam/#9393" class="Datatype Operator">⊢</a> <a id="9609" href="/20.07/TSPL/2019/Exam/#9588" class="Bound">L</a> <a id="9611" href="/20.07/TSPL/2019/Exam/#9393" class="Datatype Operator">↑</a> <a id="9613" href="/20.07/TSPL/2019/Exam/#9592" class="Bound">A</a> <a id="9615" href="/20.07/TSPL/2019/Exam/#8347" class="InductiveConstructor Operator">⇒</a> <a id="9617" href="/20.07/TSPL/2019/Exam/#9594" class="Bound">B</a>
|
||
<a id="9625" class="Symbol">→</a> <a id="9627" href="/20.07/TSPL/2019/Exam/#9586" class="Bound">Γ</a> <a id="9629" href="/20.07/TSPL/2019/Exam/#9437" class="Datatype Operator">⊢</a> <a id="9631" href="/20.07/TSPL/2019/Exam/#9590" class="Bound">M</a> <a id="9633" href="/20.07/TSPL/2019/Exam/#9437" class="Datatype Operator">↓</a> <a id="9635" href="/20.07/TSPL/2019/Exam/#9592" class="Bound">A</a>
|
||
<a id="9645" class="Comment">-------------</a>
|
||
<a id="9665" class="Symbol">→</a> <a id="9667" href="/20.07/TSPL/2019/Exam/#9586" class="Bound">Γ</a> <a id="9669" href="/20.07/TSPL/2019/Exam/#9393" class="Datatype Operator">⊢</a> <a id="9671" href="/20.07/TSPL/2019/Exam/#9588" class="Bound">L</a> <a id="9673" href="/20.07/TSPL/2019/Exam/#8679" class="InductiveConstructor Operator">·</a> <a id="9675" href="/20.07/TSPL/2019/Exam/#9590" class="Bound">M</a> <a id="9677" href="/20.07/TSPL/2019/Exam/#9393" class="Datatype Operator">↑</a> <a id="9679" href="/20.07/TSPL/2019/Exam/#9594" class="Bound">B</a>
|
||
|
||
<a id="Problem3._⊢_↑_.⊢↓"></a><a id="9686" href="/20.07/TSPL/2019/Exam/#9686" class="InductiveConstructor">⊢↓</a> <a id="9689" class="Symbol">:</a> <a id="9691" class="Symbol">∀</a> <a id="9693" class="Symbol">{</a><a id="9694" href="/20.07/TSPL/2019/Exam/#9694" class="Bound">Γ</a> <a id="9696" href="/20.07/TSPL/2019/Exam/#9696" class="Bound">M</a> <a id="9698" href="/20.07/TSPL/2019/Exam/#9698" class="Bound">A</a><a id="9699" class="Symbol">}</a>
|
||
<a id="9707" class="Symbol">→</a> <a id="9709" href="/20.07/TSPL/2019/Exam/#9694" class="Bound">Γ</a> <a id="9711" href="/20.07/TSPL/2019/Exam/#9437" class="Datatype Operator">⊢</a> <a id="9713" href="/20.07/TSPL/2019/Exam/#9696" class="Bound">M</a> <a id="9715" href="/20.07/TSPL/2019/Exam/#9437" class="Datatype Operator">↓</a> <a id="9717" href="/20.07/TSPL/2019/Exam/#9698" class="Bound">A</a>
|
||
<a id="9727" class="Comment">---------------</a>
|
||
<a id="9749" class="Symbol">→</a> <a id="9751" href="/20.07/TSPL/2019/Exam/#9694" class="Bound">Γ</a> <a id="9753" href="/20.07/TSPL/2019/Exam/#9393" class="Datatype Operator">⊢</a> <a id="9755" class="Symbol">(</a><a id="9756" href="/20.07/TSPL/2019/Exam/#9696" class="Bound">M</a> <a id="9758" href="/20.07/TSPL/2019/Exam/#8733" class="InductiveConstructor Operator">↓</a> <a id="9760" href="/20.07/TSPL/2019/Exam/#9698" class="Bound">A</a><a id="9761" class="Symbol">)</a> <a id="9763" href="/20.07/TSPL/2019/Exam/#9393" class="Datatype Operator">↑</a> <a id="9765" href="/20.07/TSPL/2019/Exam/#9698" class="Bound">A</a>
|
||
|
||
<a id="9770" class="Keyword">data</a> <a id="9775" href="/20.07/TSPL/2019/Exam/#9437" class="Datatype Operator">_⊢_↓_</a> <a id="9781" class="Keyword">where</a>
|
||
|
||
<a id="Problem3._⊢_↓_.⊢ƛ"></a><a id="9792" href="/20.07/TSPL/2019/Exam/#9792" class="InductiveConstructor">⊢ƛ</a> <a id="9795" class="Symbol">:</a> <a id="9797" class="Symbol">∀</a> <a id="9799" class="Symbol">{</a><a id="9800" href="/20.07/TSPL/2019/Exam/#9800" class="Bound">Γ</a> <a id="9802" href="/20.07/TSPL/2019/Exam/#9802" class="Bound">x</a> <a id="9804" href="/20.07/TSPL/2019/Exam/#9804" class="Bound">N</a> <a id="9806" href="/20.07/TSPL/2019/Exam/#9806" class="Bound">A</a> <a id="9808" href="/20.07/TSPL/2019/Exam/#9808" class="Bound">B</a><a id="9809" class="Symbol">}</a>
|
||
<a id="9817" class="Symbol">→</a> <a id="9819" href="/20.07/TSPL/2019/Exam/#9800" class="Bound">Γ</a> <a id="9821" href="/20.07/TSPL/2019/Exam/#8516" class="InductiveConstructor Operator">,</a> <a id="9823" href="/20.07/TSPL/2019/Exam/#9802" class="Bound">x</a> <a id="9825" href="/20.07/TSPL/2019/Exam/#8516" class="InductiveConstructor Operator">⦂</a> <a id="9827" href="/20.07/TSPL/2019/Exam/#9806" class="Bound">A</a> <a id="9829" href="/20.07/TSPL/2019/Exam/#9437" class="Datatype Operator">⊢</a> <a id="9831" href="/20.07/TSPL/2019/Exam/#9804" class="Bound">N</a> <a id="9833" href="/20.07/TSPL/2019/Exam/#9437" class="Datatype Operator">↓</a> <a id="9835" href="/20.07/TSPL/2019/Exam/#9808" class="Bound">B</a>
|
||
<a id="9845" class="Comment">-------------------</a>
|
||
<a id="9871" class="Symbol">→</a> <a id="9873" href="/20.07/TSPL/2019/Exam/#9800" class="Bound">Γ</a> <a id="9875" href="/20.07/TSPL/2019/Exam/#9437" class="Datatype Operator">⊢</a> <a id="9877" href="/20.07/TSPL/2019/Exam/#8806" class="InductiveConstructor Operator">ƛ</a> <a id="9879" href="/20.07/TSPL/2019/Exam/#9802" class="Bound">x</a> <a id="9881" href="/20.07/TSPL/2019/Exam/#8806" class="InductiveConstructor Operator">⇒</a> <a id="9883" href="/20.07/TSPL/2019/Exam/#9804" class="Bound">N</a> <a id="9885" href="/20.07/TSPL/2019/Exam/#9437" class="Datatype Operator">↓</a> <a id="9887" href="/20.07/TSPL/2019/Exam/#9806" class="Bound">A</a> <a id="9889" href="/20.07/TSPL/2019/Exam/#8347" class="InductiveConstructor Operator">⇒</a> <a id="9891" href="/20.07/TSPL/2019/Exam/#9808" class="Bound">B</a>
|
||
|
||
<a id="Problem3._⊢_↓_.⊢zero"></a><a id="9898" href="/20.07/TSPL/2019/Exam/#9898" class="InductiveConstructor">⊢zero</a> <a id="9904" class="Symbol">:</a> <a id="9906" class="Symbol">∀</a> <a id="9908" class="Symbol">{</a><a id="9909" href="/20.07/TSPL/2019/Exam/#9909" class="Bound">Γ</a><a id="9910" class="Symbol">}</a>
|
||
<a id="9920" class="Comment">--------------</a>
|
||
<a id="9941" class="Symbol">→</a> <a id="9943" href="/20.07/TSPL/2019/Exam/#9909" class="Bound">Γ</a> <a id="9945" href="/20.07/TSPL/2019/Exam/#9437" class="Datatype Operator">⊢</a> <a id="9947" href="/20.07/TSPL/2019/Exam/#8856" class="InductiveConstructor">`zero</a> <a id="9953" href="/20.07/TSPL/2019/Exam/#9437" class="Datatype Operator">↓</a> <a id="9955" href="/20.07/TSPL/2019/Exam/#8378" class="InductiveConstructor">`ℕ</a>
|
||
|
||
<a id="Problem3._⊢_↓_.⊢suc"></a><a id="9963" href="/20.07/TSPL/2019/Exam/#9963" class="InductiveConstructor">⊢suc</a> <a id="9968" class="Symbol">:</a> <a id="9970" class="Symbol">∀</a> <a id="9972" class="Symbol">{</a><a id="9973" href="/20.07/TSPL/2019/Exam/#9973" class="Bound">Γ</a> <a id="9975" href="/20.07/TSPL/2019/Exam/#9975" class="Bound">M</a><a id="9976" class="Symbol">}</a>
|
||
<a id="9984" class="Symbol">→</a> <a id="9986" href="/20.07/TSPL/2019/Exam/#9973" class="Bound">Γ</a> <a id="9988" href="/20.07/TSPL/2019/Exam/#9437" class="Datatype Operator">⊢</a> <a id="9990" href="/20.07/TSPL/2019/Exam/#9975" class="Bound">M</a> <a id="9992" href="/20.07/TSPL/2019/Exam/#9437" class="Datatype Operator">↓</a> <a id="9994" href="/20.07/TSPL/2019/Exam/#8378" class="InductiveConstructor">`ℕ</a>
|
||
<a id="10005" class="Comment">---------------</a>
|
||
<a id="10027" class="Symbol">→</a> <a id="10029" href="/20.07/TSPL/2019/Exam/#9973" class="Bound">Γ</a> <a id="10031" href="/20.07/TSPL/2019/Exam/#9437" class="Datatype Operator">⊢</a> <a id="10033" href="/20.07/TSPL/2019/Exam/#8893" class="InductiveConstructor Operator">`suc</a> <a id="10038" href="/20.07/TSPL/2019/Exam/#9975" class="Bound">M</a> <a id="10040" href="/20.07/TSPL/2019/Exam/#9437" class="Datatype Operator">↓</a> <a id="10042" href="/20.07/TSPL/2019/Exam/#8378" class="InductiveConstructor">`ℕ</a>
|
||
|
||
<a id="Problem3._⊢_↓_.⊢case"></a><a id="10050" href="/20.07/TSPL/2019/Exam/#10050" class="InductiveConstructor">⊢case</a> <a id="10056" class="Symbol">:</a> <a id="10058" class="Symbol">∀</a> <a id="10060" class="Symbol">{</a><a id="10061" href="/20.07/TSPL/2019/Exam/#10061" class="Bound">Γ</a> <a id="10063" href="/20.07/TSPL/2019/Exam/#10063" class="Bound">L</a> <a id="10065" href="/20.07/TSPL/2019/Exam/#10065" class="Bound">M</a> <a id="10067" href="/20.07/TSPL/2019/Exam/#10067" class="Bound">x</a> <a id="10069" href="/20.07/TSPL/2019/Exam/#10069" class="Bound">N</a> <a id="10071" href="/20.07/TSPL/2019/Exam/#10071" class="Bound">A</a><a id="10072" class="Symbol">}</a>
|
||
<a id="10080" class="Symbol">→</a> <a id="10082" href="/20.07/TSPL/2019/Exam/#10061" class="Bound">Γ</a> <a id="10084" href="/20.07/TSPL/2019/Exam/#9393" class="Datatype Operator">⊢</a> <a id="10086" href="/20.07/TSPL/2019/Exam/#10063" class="Bound">L</a> <a id="10088" href="/20.07/TSPL/2019/Exam/#9393" class="Datatype Operator">↑</a> <a id="10090" href="/20.07/TSPL/2019/Exam/#8378" class="InductiveConstructor">`ℕ</a>
|
||
<a id="10099" class="Symbol">→</a> <a id="10101" href="/20.07/TSPL/2019/Exam/#10061" class="Bound">Γ</a> <a id="10103" href="/20.07/TSPL/2019/Exam/#9437" class="Datatype Operator">⊢</a> <a id="10105" href="/20.07/TSPL/2019/Exam/#10065" class="Bound">M</a> <a id="10107" href="/20.07/TSPL/2019/Exam/#9437" class="Datatype Operator">↓</a> <a id="10109" href="/20.07/TSPL/2019/Exam/#10071" class="Bound">A</a>
|
||
<a id="10117" class="Symbol">→</a> <a id="10119" href="/20.07/TSPL/2019/Exam/#10061" class="Bound">Γ</a> <a id="10121" href="/20.07/TSPL/2019/Exam/#8516" class="InductiveConstructor Operator">,</a> <a id="10123" href="/20.07/TSPL/2019/Exam/#10067" class="Bound">x</a> <a id="10125" href="/20.07/TSPL/2019/Exam/#8516" class="InductiveConstructor Operator">⦂</a> <a id="10127" href="/20.07/TSPL/2019/Exam/#8378" class="InductiveConstructor">`ℕ</a> <a id="10130" href="/20.07/TSPL/2019/Exam/#9437" class="Datatype Operator">⊢</a> <a id="10132" href="/20.07/TSPL/2019/Exam/#10069" class="Bound">N</a> <a id="10134" href="/20.07/TSPL/2019/Exam/#9437" class="Datatype Operator">↓</a> <a id="10136" href="/20.07/TSPL/2019/Exam/#10071" class="Bound">A</a>
|
||
<a id="10146" class="Comment">-------------------------------------</a>
|
||
<a id="10190" class="Symbol">→</a> <a id="10192" href="/20.07/TSPL/2019/Exam/#10061" class="Bound">Γ</a> <a id="10194" href="/20.07/TSPL/2019/Exam/#9437" class="Datatype Operator">⊢</a> <a id="10196" href="/20.07/TSPL/2019/Exam/#8938" class="InductiveConstructor Operator">`case</a> <a id="10202" href="/20.07/TSPL/2019/Exam/#10063" class="Bound">L</a> <a id="10204" href="/20.07/TSPL/2019/Exam/#8938" class="InductiveConstructor Operator">[zero⇒</a> <a id="10211" href="/20.07/TSPL/2019/Exam/#10065" class="Bound">M</a> <a id="10213" href="/20.07/TSPL/2019/Exam/#8938" class="InductiveConstructor Operator">|suc</a> <a id="10218" href="/20.07/TSPL/2019/Exam/#10067" class="Bound">x</a> <a id="10220" href="/20.07/TSPL/2019/Exam/#8938" class="InductiveConstructor Operator">⇒</a> <a id="10222" href="/20.07/TSPL/2019/Exam/#10069" class="Bound">N</a> <a id="10224" href="/20.07/TSPL/2019/Exam/#8938" class="InductiveConstructor Operator">]</a> <a id="10226" href="/20.07/TSPL/2019/Exam/#9437" class="Datatype Operator">↓</a> <a id="10228" href="/20.07/TSPL/2019/Exam/#10071" class="Bound">A</a>
|
||
|
||
<a id="Problem3._⊢_↓_.⊢μ"></a><a id="10235" href="/20.07/TSPL/2019/Exam/#10235" class="InductiveConstructor">⊢μ</a> <a id="10238" class="Symbol">:</a> <a id="10240" class="Symbol">∀</a> <a id="10242" class="Symbol">{</a><a id="10243" href="/20.07/TSPL/2019/Exam/#10243" class="Bound">Γ</a> <a id="10245" href="/20.07/TSPL/2019/Exam/#10245" class="Bound">x</a> <a id="10247" href="/20.07/TSPL/2019/Exam/#10247" class="Bound">N</a> <a id="10249" href="/20.07/TSPL/2019/Exam/#10249" class="Bound">A</a><a id="10250" class="Symbol">}</a>
|
||
<a id="10258" class="Symbol">→</a> <a id="10260" href="/20.07/TSPL/2019/Exam/#10243" class="Bound">Γ</a> <a id="10262" href="/20.07/TSPL/2019/Exam/#8516" class="InductiveConstructor Operator">,</a> <a id="10264" href="/20.07/TSPL/2019/Exam/#10245" class="Bound">x</a> <a id="10266" href="/20.07/TSPL/2019/Exam/#8516" class="InductiveConstructor Operator">⦂</a> <a id="10268" href="/20.07/TSPL/2019/Exam/#10249" class="Bound">A</a> <a id="10270" href="/20.07/TSPL/2019/Exam/#9437" class="Datatype Operator">⊢</a> <a id="10272" href="/20.07/TSPL/2019/Exam/#10247" class="Bound">N</a> <a id="10274" href="/20.07/TSPL/2019/Exam/#9437" class="Datatype Operator">↓</a> <a id="10276" href="/20.07/TSPL/2019/Exam/#10249" class="Bound">A</a>
|
||
<a id="10286" class="Comment">-----------------</a>
|
||
<a id="10310" class="Symbol">→</a> <a id="10312" href="/20.07/TSPL/2019/Exam/#10243" class="Bound">Γ</a> <a id="10314" href="/20.07/TSPL/2019/Exam/#9437" class="Datatype Operator">⊢</a> <a id="10316" href="/20.07/TSPL/2019/Exam/#9004" class="InductiveConstructor Operator">μ</a> <a id="10318" href="/20.07/TSPL/2019/Exam/#10245" class="Bound">x</a> <a id="10320" href="/20.07/TSPL/2019/Exam/#9004" class="InductiveConstructor Operator">⇒</a> <a id="10322" href="/20.07/TSPL/2019/Exam/#10247" class="Bound">N</a> <a id="10324" href="/20.07/TSPL/2019/Exam/#9437" class="Datatype Operator">↓</a> <a id="10326" href="/20.07/TSPL/2019/Exam/#10249" class="Bound">A</a>
|
||
|
||
<a id="Problem3._⊢_↓_.⊢↑"></a><a id="10333" href="/20.07/TSPL/2019/Exam/#10333" class="InductiveConstructor">⊢↑</a> <a id="10336" class="Symbol">:</a> <a id="10338" class="Symbol">∀</a> <a id="10340" class="Symbol">{</a><a id="10341" href="/20.07/TSPL/2019/Exam/#10341" class="Bound">Γ</a> <a id="10343" href="/20.07/TSPL/2019/Exam/#10343" class="Bound">M</a> <a id="10345" href="/20.07/TSPL/2019/Exam/#10345" class="Bound">A</a> <a id="10347" href="/20.07/TSPL/2019/Exam/#10347" class="Bound">B</a><a id="10348" class="Symbol">}</a>
|
||
<a id="10356" class="Symbol">→</a> <a id="10358" href="/20.07/TSPL/2019/Exam/#10341" class="Bound">Γ</a> <a id="10360" href="/20.07/TSPL/2019/Exam/#9393" class="Datatype Operator">⊢</a> <a id="10362" href="/20.07/TSPL/2019/Exam/#10343" class="Bound">M</a> <a id="10364" href="/20.07/TSPL/2019/Exam/#9393" class="Datatype Operator">↑</a> <a id="10366" href="/20.07/TSPL/2019/Exam/#10345" class="Bound">A</a>
|
||
<a id="10374" class="Symbol">→</a> <a id="10376" href="/20.07/TSPL/2019/Exam/#10345" class="Bound">A</a> <a id="10378" href="Agda.Builtin.Equality.html#125" class="Datatype Operator">≡</a> <a id="10380" href="/20.07/TSPL/2019/Exam/#10347" class="Bound">B</a>
|
||
<a id="10390" class="Comment">-------------</a>
|
||
<a id="10410" class="Symbol">→</a> <a id="10412" href="/20.07/TSPL/2019/Exam/#10341" class="Bound">Γ</a> <a id="10414" href="/20.07/TSPL/2019/Exam/#9437" class="Datatype Operator">⊢</a> <a id="10416" class="Symbol">(</a><a id="10417" href="/20.07/TSPL/2019/Exam/#10343" class="Bound">M</a> <a id="10419" href="/20.07/TSPL/2019/Exam/#9054" class="InductiveConstructor Operator">↑</a><a id="10420" class="Symbol">)</a> <a id="10422" href="/20.07/TSPL/2019/Exam/#9437" class="Datatype Operator">↓</a> <a id="10424" href="/20.07/TSPL/2019/Exam/#10347" class="Bound">B</a>
|
||
</pre>
|
||
|
||
<h3 id="type-equality">Type equality</h3>
|
||
|
||
<pre class="Agda"> <a id="Problem3._≟Tp_"></a><a id="10457" href="/20.07/TSPL/2019/Exam/#10457" class="Function Operator">_≟Tp_</a> <a id="10463" class="Symbol">:</a> <a id="10465" class="Symbol">(</a><a id="10466" href="/20.07/TSPL/2019/Exam/#10466" class="Bound">A</a> <a id="10468" href="/20.07/TSPL/2019/Exam/#10468" class="Bound">B</a> <a id="10470" class="Symbol">:</a> <a id="10472" href="/20.07/TSPL/2019/Exam/#8326" class="Datatype">Type</a><a id="10476" class="Symbol">)</a> <a id="10478" class="Symbol">→</a> <a id="10480" href="https://agda.github.io/agda-stdlib/v1.1/Relation.Nullary.html#605" class="Datatype">Dec</a> <a id="10484" class="Symbol">(</a><a id="10485" href="/20.07/TSPL/2019/Exam/#10466" class="Bound">A</a> <a id="10487" href="Agda.Builtin.Equality.html#125" class="Datatype Operator">≡</a> <a id="10489" href="/20.07/TSPL/2019/Exam/#10468" class="Bound">B</a><a id="10490" class="Symbol">)</a>
|
||
<a id="10494" href="/20.07/TSPL/2019/Exam/#8378" class="InductiveConstructor">`ℕ</a> <a id="10502" href="/20.07/TSPL/2019/Exam/#10457" class="Function Operator">≟Tp</a> <a id="10506" href="/20.07/TSPL/2019/Exam/#8378" class="InductiveConstructor">`ℕ</a> <a id="10522" class="Symbol">=</a> <a id="10525" href="https://agda.github.io/agda-stdlib/v1.1/Relation.Nullary.html#641" class="InductiveConstructor">yes</a> <a id="10529" href="Agda.Builtin.Equality.html#182" class="InductiveConstructor">refl</a>
|
||
<a id="10536" href="/20.07/TSPL/2019/Exam/#8378" class="InductiveConstructor">`ℕ</a> <a id="10544" href="/20.07/TSPL/2019/Exam/#10457" class="Function Operator">≟Tp</a> <a id="10548" class="Symbol">(</a><a id="10549" href="/20.07/TSPL/2019/Exam/#10549" class="Bound">A</a> <a id="10551" href="/20.07/TSPL/2019/Exam/#8347" class="InductiveConstructor Operator">⇒</a> <a id="10553" href="/20.07/TSPL/2019/Exam/#10553" class="Bound">B</a><a id="10554" class="Symbol">)</a> <a id="10564" class="Symbol">=</a> <a id="10567" href="https://agda.github.io/agda-stdlib/v1.1/Relation.Nullary.html#668" class="InductiveConstructor">no</a> <a id="10570" class="Symbol">λ()</a>
|
||
<a id="10576" class="Symbol">(</a><a id="10577" href="/20.07/TSPL/2019/Exam/#10577" class="Bound">A</a> <a id="10579" href="/20.07/TSPL/2019/Exam/#8347" class="InductiveConstructor Operator">⇒</a> <a id="10581" href="/20.07/TSPL/2019/Exam/#10581" class="Bound">B</a><a id="10582" class="Symbol">)</a> <a id="10584" href="/20.07/TSPL/2019/Exam/#10457" class="Function Operator">≟Tp</a> <a id="10588" href="/20.07/TSPL/2019/Exam/#8378" class="InductiveConstructor">`ℕ</a> <a id="10604" class="Symbol">=</a> <a id="10607" href="https://agda.github.io/agda-stdlib/v1.1/Relation.Nullary.html#668" class="InductiveConstructor">no</a> <a id="10610" class="Symbol">λ()</a>
|
||
<a id="10616" class="Symbol">(</a><a id="10617" href="/20.07/TSPL/2019/Exam/#10617" class="Bound">A</a> <a id="10619" href="/20.07/TSPL/2019/Exam/#8347" class="InductiveConstructor Operator">⇒</a> <a id="10621" href="/20.07/TSPL/2019/Exam/#10621" class="Bound">B</a><a id="10622" class="Symbol">)</a> <a id="10624" href="/20.07/TSPL/2019/Exam/#10457" class="Function Operator">≟Tp</a> <a id="10628" class="Symbol">(</a><a id="10629" href="/20.07/TSPL/2019/Exam/#10629" class="Bound">A′</a> <a id="10632" href="/20.07/TSPL/2019/Exam/#8347" class="InductiveConstructor Operator">⇒</a> <a id="10634" href="/20.07/TSPL/2019/Exam/#10634" class="Bound">B′</a><a id="10636" class="Symbol">)</a>
|
||
<a id="10642" class="Keyword">with</a> <a id="10647" href="/20.07/TSPL/2019/Exam/#10617" class="Bound">A</a> <a id="10649" href="/20.07/TSPL/2019/Exam/#10457" class="Function Operator">≟Tp</a> <a id="10653" href="/20.07/TSPL/2019/Exam/#10629" class="Bound">A′</a> <a id="10656" class="Symbol">|</a> <a id="10658" href="/20.07/TSPL/2019/Exam/#10621" class="Bound">B</a> <a id="10660" href="/20.07/TSPL/2019/Exam/#10457" class="Function Operator">≟Tp</a> <a id="10664" href="/20.07/TSPL/2019/Exam/#10634" class="Bound">B′</a>
|
||
<a id="10669" class="Symbol">...</a> <a id="10674" class="Symbol">|</a> <a id="10676" href="https://agda.github.io/agda-stdlib/v1.1/Relation.Nullary.html#668" class="InductiveConstructor">no</a> <a id="10679" href="/20.07/TSPL/2019/Exam/#10679" class="Bound">A≢</a> <a id="10685" class="Symbol">|</a> <a id="10687" class="Symbol">_</a> <a id="10697" class="Symbol">=</a> <a id="10700" href="https://agda.github.io/agda-stdlib/v1.1/Relation.Nullary.html#668" class="InductiveConstructor">no</a> <a id="10703" class="Symbol">λ{</a><a id="10705" href="Agda.Builtin.Equality.html#182" class="InductiveConstructor">refl</a> <a id="10710" class="Symbol">→</a> <a id="10712" href="/20.07/TSPL/2019/Exam/#10679" class="Bound">A≢</a> <a id="10715" href="Agda.Builtin.Equality.html#182" class="InductiveConstructor">refl</a><a id="10719" class="Symbol">}</a>
|
||
<a id="10723" class="Symbol">...</a> <a id="10728" class="Symbol">|</a> <a id="10730" href="https://agda.github.io/agda-stdlib/v1.1/Relation.Nullary.html#641" class="InductiveConstructor">yes</a> <a id="10734" class="Symbol">_</a> <a id="10739" class="Symbol">|</a> <a id="10741" href="https://agda.github.io/agda-stdlib/v1.1/Relation.Nullary.html#668" class="InductiveConstructor">no</a> <a id="10744" href="/20.07/TSPL/2019/Exam/#10744" class="Bound">B≢</a> <a id="10751" class="Symbol">=</a> <a id="10754" href="https://agda.github.io/agda-stdlib/v1.1/Relation.Nullary.html#668" class="InductiveConstructor">no</a> <a id="10757" class="Symbol">λ{</a><a id="10759" href="Agda.Builtin.Equality.html#182" class="InductiveConstructor">refl</a> <a id="10764" class="Symbol">→</a> <a id="10766" href="/20.07/TSPL/2019/Exam/#10744" class="Bound">B≢</a> <a id="10769" href="Agda.Builtin.Equality.html#182" class="InductiveConstructor">refl</a><a id="10773" class="Symbol">}</a>
|
||
<a id="10777" class="Symbol">...</a> <a id="10782" class="Symbol">|</a> <a id="10784" href="https://agda.github.io/agda-stdlib/v1.1/Relation.Nullary.html#641" class="InductiveConstructor">yes</a> <a id="10788" href="Agda.Builtin.Equality.html#182" class="InductiveConstructor">refl</a> <a id="10793" class="Symbol">|</a> <a id="10795" href="https://agda.github.io/agda-stdlib/v1.1/Relation.Nullary.html#641" class="InductiveConstructor">yes</a> <a id="10799" href="Agda.Builtin.Equality.html#182" class="InductiveConstructor">refl</a> <a id="10805" class="Symbol">=</a> <a id="10808" href="https://agda.github.io/agda-stdlib/v1.1/Relation.Nullary.html#641" class="InductiveConstructor">yes</a> <a id="10812" href="Agda.Builtin.Equality.html#182" class="InductiveConstructor">refl</a>
|
||
</pre>
|
||
<h3 id="prerequisites">Prerequisites</h3>
|
||
|
||
<pre class="Agda"> <a id="Problem3.dom≡"></a><a id="10847" href="/20.07/TSPL/2019/Exam/#10847" class="Function">dom≡</a> <a id="10852" class="Symbol">:</a> <a id="10854" class="Symbol">∀</a> <a id="10856" class="Symbol">{</a><a id="10857" href="/20.07/TSPL/2019/Exam/#10857" class="Bound">A</a> <a id="10859" href="/20.07/TSPL/2019/Exam/#10859" class="Bound">A′</a> <a id="10862" href="/20.07/TSPL/2019/Exam/#10862" class="Bound">B</a> <a id="10864" href="/20.07/TSPL/2019/Exam/#10864" class="Bound">B′</a><a id="10866" class="Symbol">}</a> <a id="10868" class="Symbol">→</a> <a id="10870" href="/20.07/TSPL/2019/Exam/#10857" class="Bound">A</a> <a id="10872" href="/20.07/TSPL/2019/Exam/#8347" class="InductiveConstructor Operator">⇒</a> <a id="10874" href="/20.07/TSPL/2019/Exam/#10862" class="Bound">B</a> <a id="10876" href="Agda.Builtin.Equality.html#125" class="Datatype Operator">≡</a> <a id="10878" href="/20.07/TSPL/2019/Exam/#10859" class="Bound">A′</a> <a id="10881" href="/20.07/TSPL/2019/Exam/#8347" class="InductiveConstructor Operator">⇒</a> <a id="10883" href="/20.07/TSPL/2019/Exam/#10864" class="Bound">B′</a> <a id="10886" class="Symbol">→</a> <a id="10888" href="/20.07/TSPL/2019/Exam/#10857" class="Bound">A</a> <a id="10890" href="Agda.Builtin.Equality.html#125" class="Datatype Operator">≡</a> <a id="10892" href="/20.07/TSPL/2019/Exam/#10859" class="Bound">A′</a>
|
||
<a id="10897" href="/20.07/TSPL/2019/Exam/#10847" class="Function">dom≡</a> <a id="10902" href="Agda.Builtin.Equality.html#182" class="InductiveConstructor">refl</a> <a id="10907" class="Symbol">=</a> <a id="10909" href="Agda.Builtin.Equality.html#182" class="InductiveConstructor">refl</a>
|
||
|
||
<a id="Problem3.rng≡"></a><a id="10917" href="/20.07/TSPL/2019/Exam/#10917" class="Function">rng≡</a> <a id="10922" class="Symbol">:</a> <a id="10924" class="Symbol">∀</a> <a id="10926" class="Symbol">{</a><a id="10927" href="/20.07/TSPL/2019/Exam/#10927" class="Bound">A</a> <a id="10929" href="/20.07/TSPL/2019/Exam/#10929" class="Bound">A′</a> <a id="10932" href="/20.07/TSPL/2019/Exam/#10932" class="Bound">B</a> <a id="10934" href="/20.07/TSPL/2019/Exam/#10934" class="Bound">B′</a><a id="10936" class="Symbol">}</a> <a id="10938" class="Symbol">→</a> <a id="10940" href="/20.07/TSPL/2019/Exam/#10927" class="Bound">A</a> <a id="10942" href="/20.07/TSPL/2019/Exam/#8347" class="InductiveConstructor Operator">⇒</a> <a id="10944" href="/20.07/TSPL/2019/Exam/#10932" class="Bound">B</a> <a id="10946" href="Agda.Builtin.Equality.html#125" class="Datatype Operator">≡</a> <a id="10948" href="/20.07/TSPL/2019/Exam/#10929" class="Bound">A′</a> <a id="10951" href="/20.07/TSPL/2019/Exam/#8347" class="InductiveConstructor Operator">⇒</a> <a id="10953" href="/20.07/TSPL/2019/Exam/#10934" class="Bound">B′</a> <a id="10956" class="Symbol">→</a> <a id="10958" href="/20.07/TSPL/2019/Exam/#10932" class="Bound">B</a> <a id="10960" href="Agda.Builtin.Equality.html#125" class="Datatype Operator">≡</a> <a id="10962" href="/20.07/TSPL/2019/Exam/#10934" class="Bound">B′</a>
|
||
<a id="10967" href="/20.07/TSPL/2019/Exam/#10917" class="Function">rng≡</a> <a id="10972" href="Agda.Builtin.Equality.html#182" class="InductiveConstructor">refl</a> <a id="10977" class="Symbol">=</a> <a id="10979" href="Agda.Builtin.Equality.html#182" class="InductiveConstructor">refl</a>
|
||
|
||
<a id="Problem3.ℕ≢⇒"></a><a id="10987" href="/20.07/TSPL/2019/Exam/#10987" class="Function">ℕ≢⇒</a> <a id="10991" class="Symbol">:</a> <a id="10993" class="Symbol">∀</a> <a id="10995" class="Symbol">{</a><a id="10996" href="/20.07/TSPL/2019/Exam/#10996" class="Bound">A</a> <a id="10998" href="/20.07/TSPL/2019/Exam/#10998" class="Bound">B</a><a id="10999" class="Symbol">}</a> <a id="11001" class="Symbol">→</a> <a id="11003" href="/20.07/TSPL/2019/Exam/#8378" class="InductiveConstructor">`ℕ</a> <a id="11006" href="https://agda.github.io/agda-stdlib/v1.1/Relation.Binary.PropositionalEquality.Core.html#799" class="Function Operator">≢</a> <a id="11008" href="/20.07/TSPL/2019/Exam/#10996" class="Bound">A</a> <a id="11010" href="/20.07/TSPL/2019/Exam/#8347" class="InductiveConstructor Operator">⇒</a> <a id="11012" href="/20.07/TSPL/2019/Exam/#10998" class="Bound">B</a>
|
||
<a id="11016" href="/20.07/TSPL/2019/Exam/#10987" class="Function">ℕ≢⇒</a> <a id="11020" class="Symbol">()</a>
|
||
</pre>
|
||
|
||
<h3 id="unique-lookup">Unique lookup</h3>
|
||
|
||
<pre class="Agda"> <a id="Problem3.uniq-∋"></a><a id="11054" href="/20.07/TSPL/2019/Exam/#11054" class="Function">uniq-∋</a> <a id="11061" class="Symbol">:</a> <a id="11063" class="Symbol">∀</a> <a id="11065" class="Symbol">{</a><a id="11066" href="/20.07/TSPL/2019/Exam/#11066" class="Bound">Γ</a> <a id="11068" href="/20.07/TSPL/2019/Exam/#11068" class="Bound">x</a> <a id="11070" href="/20.07/TSPL/2019/Exam/#11070" class="Bound">A</a> <a id="11072" href="/20.07/TSPL/2019/Exam/#11072" class="Bound">B</a><a id="11073" class="Symbol">}</a> <a id="11075" class="Symbol">→</a> <a id="11077" href="/20.07/TSPL/2019/Exam/#11066" class="Bound">Γ</a> <a id="11079" href="/20.07/TSPL/2019/Exam/#9123" class="Datatype Operator">∋</a> <a id="11081" href="/20.07/TSPL/2019/Exam/#11068" class="Bound">x</a> <a id="11083" href="/20.07/TSPL/2019/Exam/#9123" class="Datatype Operator">⦂</a> <a id="11085" href="/20.07/TSPL/2019/Exam/#11070" class="Bound">A</a> <a id="11087" class="Symbol">→</a> <a id="11089" href="/20.07/TSPL/2019/Exam/#11066" class="Bound">Γ</a> <a id="11091" href="/20.07/TSPL/2019/Exam/#9123" class="Datatype Operator">∋</a> <a id="11093" href="/20.07/TSPL/2019/Exam/#11068" class="Bound">x</a> <a id="11095" href="/20.07/TSPL/2019/Exam/#9123" class="Datatype Operator">⦂</a> <a id="11097" href="/20.07/TSPL/2019/Exam/#11072" class="Bound">B</a> <a id="11099" class="Symbol">→</a> <a id="11101" href="/20.07/TSPL/2019/Exam/#11070" class="Bound">A</a> <a id="11103" href="Agda.Builtin.Equality.html#125" class="Datatype Operator">≡</a> <a id="11105" href="/20.07/TSPL/2019/Exam/#11072" class="Bound">B</a>
|
||
<a id="11109" href="/20.07/TSPL/2019/Exam/#11054" class="Function">uniq-∋</a> <a id="11116" href="/20.07/TSPL/2019/Exam/#9168" class="InductiveConstructor">Z</a> <a id="11118" href="/20.07/TSPL/2019/Exam/#9168" class="InductiveConstructor">Z</a> <a id="11136" class="Symbol">=</a> <a id="11139" href="Agda.Builtin.Equality.html#182" class="InductiveConstructor">refl</a>
|
||
<a id="11146" href="/20.07/TSPL/2019/Exam/#11054" class="Function">uniq-∋</a> <a id="11153" href="/20.07/TSPL/2019/Exam/#9168" class="InductiveConstructor">Z</a> <a id="11155" class="Symbol">(</a><a id="11156" href="/20.07/TSPL/2019/Exam/#9242" class="InductiveConstructor">S</a> <a id="11158" href="/20.07/TSPL/2019/Exam/#11158" class="Bound">x≢y</a> <a id="11162" class="Symbol">_)</a> <a id="11173" class="Symbol">=</a> <a id="11176" href="https://agda.github.io/agda-stdlib/v1.1/Data.Empty.html#294" class="Function">⊥-elim</a> <a id="11183" class="Symbol">(</a><a id="11184" href="/20.07/TSPL/2019/Exam/#11158" class="Bound">x≢y</a> <a id="11188" href="Agda.Builtin.Equality.html#182" class="InductiveConstructor">refl</a><a id="11192" class="Symbol">)</a>
|
||
<a id="11196" href="/20.07/TSPL/2019/Exam/#11054" class="Function">uniq-∋</a> <a id="11203" class="Symbol">(</a><a id="11204" href="/20.07/TSPL/2019/Exam/#9242" class="InductiveConstructor">S</a> <a id="11206" href="/20.07/TSPL/2019/Exam/#11206" class="Bound">x≢y</a> <a id="11210" class="Symbol">_)</a> <a id="11213" href="/20.07/TSPL/2019/Exam/#9168" class="InductiveConstructor">Z</a> <a id="11223" class="Symbol">=</a> <a id="11226" href="https://agda.github.io/agda-stdlib/v1.1/Data.Empty.html#294" class="Function">⊥-elim</a> <a id="11233" class="Symbol">(</a><a id="11234" href="/20.07/TSPL/2019/Exam/#11206" class="Bound">x≢y</a> <a id="11238" href="Agda.Builtin.Equality.html#182" class="InductiveConstructor">refl</a><a id="11242" class="Symbol">)</a>
|
||
<a id="11246" href="/20.07/TSPL/2019/Exam/#11054" class="Function">uniq-∋</a> <a id="11253" class="Symbol">(</a><a id="11254" href="/20.07/TSPL/2019/Exam/#9242" class="InductiveConstructor">S</a> <a id="11256" class="Symbol">_</a> <a id="11258" href="/20.07/TSPL/2019/Exam/#11258" class="Bound">∋x</a><a id="11260" class="Symbol">)</a> <a id="11262" class="Symbol">(</a><a id="11263" href="/20.07/TSPL/2019/Exam/#9242" class="InductiveConstructor">S</a> <a id="11265" class="Symbol">_</a> <a id="11267" href="/20.07/TSPL/2019/Exam/#11267" class="Bound">∋x′</a><a id="11270" class="Symbol">)</a> <a id="11273" class="Symbol">=</a> <a id="11276" href="/20.07/TSPL/2019/Exam/#11054" class="Function">uniq-∋</a> <a id="11283" href="/20.07/TSPL/2019/Exam/#11258" class="Bound">∋x</a> <a id="11286" href="/20.07/TSPL/2019/Exam/#11267" class="Bound">∋x′</a>
|
||
</pre>
|
||
<h3 id="unique-synthesis">Unique synthesis</h3>
|
||
|
||
<pre class="Agda"> <a id="Problem3.uniq-↑"></a><a id="11323" href="/20.07/TSPL/2019/Exam/#11323" class="Function">uniq-↑</a> <a id="11330" class="Symbol">:</a> <a id="11332" class="Symbol">∀</a> <a id="11334" class="Symbol">{</a><a id="11335" href="/20.07/TSPL/2019/Exam/#11335" class="Bound">Γ</a> <a id="11337" href="/20.07/TSPL/2019/Exam/#11337" class="Bound">M</a> <a id="11339" href="/20.07/TSPL/2019/Exam/#11339" class="Bound">A</a> <a id="11341" href="/20.07/TSPL/2019/Exam/#11341" class="Bound">B</a><a id="11342" class="Symbol">}</a> <a id="11344" class="Symbol">→</a> <a id="11346" href="/20.07/TSPL/2019/Exam/#11335" class="Bound">Γ</a> <a id="11348" href="/20.07/TSPL/2019/Exam/#9393" class="Datatype Operator">⊢</a> <a id="11350" href="/20.07/TSPL/2019/Exam/#11337" class="Bound">M</a> <a id="11352" href="/20.07/TSPL/2019/Exam/#9393" class="Datatype Operator">↑</a> <a id="11354" href="/20.07/TSPL/2019/Exam/#11339" class="Bound">A</a> <a id="11356" class="Symbol">→</a> <a id="11358" href="/20.07/TSPL/2019/Exam/#11335" class="Bound">Γ</a> <a id="11360" href="/20.07/TSPL/2019/Exam/#9393" class="Datatype Operator">⊢</a> <a id="11362" href="/20.07/TSPL/2019/Exam/#11337" class="Bound">M</a> <a id="11364" href="/20.07/TSPL/2019/Exam/#9393" class="Datatype Operator">↑</a> <a id="11366" href="/20.07/TSPL/2019/Exam/#11341" class="Bound">B</a> <a id="11368" class="Symbol">→</a> <a id="11370" href="/20.07/TSPL/2019/Exam/#11339" class="Bound">A</a> <a id="11372" href="Agda.Builtin.Equality.html#125" class="Datatype Operator">≡</a> <a id="11374" href="/20.07/TSPL/2019/Exam/#11341" class="Bound">B</a>
|
||
<a id="11378" href="/20.07/TSPL/2019/Exam/#11323" class="Function">uniq-↑</a> <a id="11385" class="Symbol">(</a><a id="11386" href="/20.07/TSPL/2019/Exam/#9499" class="InductiveConstructor">⊢`</a> <a id="11389" href="/20.07/TSPL/2019/Exam/#11389" class="Bound">∋x</a><a id="11391" class="Symbol">)</a> <a id="11393" class="Symbol">(</a><a id="11394" href="/20.07/TSPL/2019/Exam/#9499" class="InductiveConstructor">⊢`</a> <a id="11397" href="/20.07/TSPL/2019/Exam/#11397" class="Bound">∋x′</a><a id="11400" class="Symbol">)</a> <a id="11408" class="Symbol">=</a> <a id="11411" href="/20.07/TSPL/2019/Exam/#11054" class="Function">uniq-∋</a> <a id="11418" href="/20.07/TSPL/2019/Exam/#11389" class="Bound">∋x</a> <a id="11421" href="/20.07/TSPL/2019/Exam/#11397" class="Bound">∋x′</a>
|
||
<a id="11427" href="/20.07/TSPL/2019/Exam/#11323" class="Function">uniq-↑</a> <a id="11434" class="Symbol">(</a><a id="11435" href="/20.07/TSPL/2019/Exam/#11435" class="Bound">⊢L</a> <a id="11438" href="/20.07/TSPL/2019/Exam/#9577" class="InductiveConstructor Operator">·</a> <a id="11440" href="/20.07/TSPL/2019/Exam/#11440" class="Bound">⊢M</a><a id="11442" class="Symbol">)</a> <a id="11444" class="Symbol">(</a><a id="11445" href="/20.07/TSPL/2019/Exam/#11445" class="Bound">⊢L′</a> <a id="11449" href="/20.07/TSPL/2019/Exam/#9577" class="InductiveConstructor Operator">·</a> <a id="11451" href="/20.07/TSPL/2019/Exam/#11451" class="Bound">⊢M′</a><a id="11454" class="Symbol">)</a> <a id="11457" class="Symbol">=</a> <a id="11460" href="/20.07/TSPL/2019/Exam/#10917" class="Function">rng≡</a> <a id="11465" class="Symbol">(</a><a id="11466" href="/20.07/TSPL/2019/Exam/#11323" class="Function">uniq-↑</a> <a id="11473" href="/20.07/TSPL/2019/Exam/#11435" class="Bound">⊢L</a> <a id="11476" href="/20.07/TSPL/2019/Exam/#11445" class="Bound">⊢L′</a><a id="11479" class="Symbol">)</a>
|
||
<a id="11483" href="/20.07/TSPL/2019/Exam/#11323" class="Function">uniq-↑</a> <a id="11490" class="Symbol">(</a><a id="11491" href="/20.07/TSPL/2019/Exam/#9686" class="InductiveConstructor">⊢↓</a> <a id="11494" href="/20.07/TSPL/2019/Exam/#11494" class="Bound">⊢M</a><a id="11496" class="Symbol">)</a> <a id="11498" class="Symbol">(</a><a id="11499" href="/20.07/TSPL/2019/Exam/#9686" class="InductiveConstructor">⊢↓</a> <a id="11502" href="/20.07/TSPL/2019/Exam/#11502" class="Bound">⊢M′</a><a id="11505" class="Symbol">)</a> <a id="11513" class="Symbol">=</a> <a id="11516" href="Agda.Builtin.Equality.html#182" class="InductiveConstructor">refl</a>
|
||
</pre>
|
||
<h2 id="lookup-type-of-a-variable-in-the-context">Lookup type of a variable in the context</h2>
|
||
|
||
<pre class="Agda"> <a id="Problem3.ext∋"></a><a id="11577" href="/20.07/TSPL/2019/Exam/#11577" class="Function">ext∋</a> <a id="11582" class="Symbol">:</a> <a id="11584" class="Symbol">∀</a> <a id="11586" class="Symbol">{</a><a id="11587" href="/20.07/TSPL/2019/Exam/#11587" class="Bound">Γ</a> <a id="11589" href="/20.07/TSPL/2019/Exam/#11589" class="Bound">B</a> <a id="11591" href="/20.07/TSPL/2019/Exam/#11591" class="Bound">x</a> <a id="11593" href="/20.07/TSPL/2019/Exam/#11593" class="Bound">y</a><a id="11594" class="Symbol">}</a>
|
||
<a id="11600" class="Symbol">→</a> <a id="11602" href="/20.07/TSPL/2019/Exam/#11591" class="Bound">x</a> <a id="11604" href="https://agda.github.io/agda-stdlib/v1.1/Relation.Binary.PropositionalEquality.Core.html#799" class="Function Operator">≢</a> <a id="11606" href="/20.07/TSPL/2019/Exam/#11593" class="Bound">y</a>
|
||
<a id="11612" class="Symbol">→</a> <a id="11614" href="https://agda.github.io/agda-stdlib/v1.1/Relation.Nullary.html#535" class="Function Operator">¬</a> <a id="11616" href="https://agda.github.io/agda-stdlib/v1.1/Data.Product.html#1783" class="Function">∃[</a> <a id="11619" href="/20.07/TSPL/2019/Exam/#11619" class="Bound">A</a> <a id="11621" href="https://agda.github.io/agda-stdlib/v1.1/Data.Product.html#1783" class="Function">]</a><a id="11622" class="Symbol">(</a> <a id="11624" href="/20.07/TSPL/2019/Exam/#11587" class="Bound">Γ</a> <a id="11626" href="/20.07/TSPL/2019/Exam/#9123" class="Datatype Operator">∋</a> <a id="11628" href="/20.07/TSPL/2019/Exam/#11591" class="Bound">x</a> <a id="11630" href="/20.07/TSPL/2019/Exam/#9123" class="Datatype Operator">⦂</a> <a id="11632" href="/20.07/TSPL/2019/Exam/#11619" class="Bound">A</a> <a id="11634" class="Symbol">)</a>
|
||
<a id="11642" class="Comment">-----------------------------</a>
|
||
<a id="11676" class="Symbol">→</a> <a id="11678" href="https://agda.github.io/agda-stdlib/v1.1/Relation.Nullary.html#535" class="Function Operator">¬</a> <a id="11680" href="https://agda.github.io/agda-stdlib/v1.1/Data.Product.html#1783" class="Function">∃[</a> <a id="11683" href="/20.07/TSPL/2019/Exam/#11683" class="Bound">A</a> <a id="11685" href="https://agda.github.io/agda-stdlib/v1.1/Data.Product.html#1783" class="Function">]</a><a id="11686" class="Symbol">(</a> <a id="11688" href="/20.07/TSPL/2019/Exam/#11587" class="Bound">Γ</a> <a id="11690" href="/20.07/TSPL/2019/Exam/#8516" class="InductiveConstructor Operator">,</a> <a id="11692" href="/20.07/TSPL/2019/Exam/#11593" class="Bound">y</a> <a id="11694" href="/20.07/TSPL/2019/Exam/#8516" class="InductiveConstructor Operator">⦂</a> <a id="11696" href="/20.07/TSPL/2019/Exam/#11589" class="Bound">B</a> <a id="11698" href="/20.07/TSPL/2019/Exam/#9123" class="Datatype Operator">∋</a> <a id="11700" href="/20.07/TSPL/2019/Exam/#11591" class="Bound">x</a> <a id="11702" href="/20.07/TSPL/2019/Exam/#9123" class="Datatype Operator">⦂</a> <a id="11704" href="/20.07/TSPL/2019/Exam/#11683" class="Bound">A</a> <a id="11706" class="Symbol">)</a>
|
||
<a id="11710" href="/20.07/TSPL/2019/Exam/#11577" class="Function">ext∋</a> <a id="11715" href="/20.07/TSPL/2019/Exam/#11715" class="Bound">x≢y</a> <a id="11719" class="Symbol">_</a> <a id="11722" href="Agda.Builtin.Sigma.html#209" class="InductiveConstructor Operator">⟨</a> <a id="11724" href="/20.07/TSPL/2019/Exam/#11724" class="Bound">A</a> <a id="11726" href="Agda.Builtin.Sigma.html#209" class="InductiveConstructor Operator">,</a> <a id="11728" href="/20.07/TSPL/2019/Exam/#9168" class="InductiveConstructor">Z</a> <a id="11730" href="Agda.Builtin.Sigma.html#209" class="InductiveConstructor Operator">⟩</a> <a id="11738" class="Symbol">=</a> <a id="11741" href="/20.07/TSPL/2019/Exam/#11715" class="Bound">x≢y</a> <a id="11745" href="Agda.Builtin.Equality.html#182" class="InductiveConstructor">refl</a>
|
||
<a id="11752" href="/20.07/TSPL/2019/Exam/#11577" class="Function">ext∋</a> <a id="11757" class="Symbol">_</a> <a id="11761" href="/20.07/TSPL/2019/Exam/#11761" class="Bound">¬∃</a> <a id="11764" href="Agda.Builtin.Sigma.html#209" class="InductiveConstructor Operator">⟨</a> <a id="11766" href="/20.07/TSPL/2019/Exam/#11766" class="Bound">A</a> <a id="11768" href="Agda.Builtin.Sigma.html#209" class="InductiveConstructor Operator">,</a> <a id="11770" href="/20.07/TSPL/2019/Exam/#9242" class="InductiveConstructor">S</a> <a id="11772" class="Symbol">_</a> <a id="11774" href="/20.07/TSPL/2019/Exam/#11774" class="Bound">⊢x</a> <a id="11777" href="Agda.Builtin.Sigma.html#209" class="InductiveConstructor Operator">⟩</a> <a id="11780" class="Symbol">=</a> <a id="11783" href="/20.07/TSPL/2019/Exam/#11761" class="Bound">¬∃</a> <a id="11786" href="Agda.Builtin.Sigma.html#209" class="InductiveConstructor Operator">⟨</a> <a id="11788" href="/20.07/TSPL/2019/Exam/#11766" class="Bound">A</a> <a id="11790" href="Agda.Builtin.Sigma.html#209" class="InductiveConstructor Operator">,</a> <a id="11792" href="/20.07/TSPL/2019/Exam/#11774" class="Bound">⊢x</a> <a id="11795" href="Agda.Builtin.Sigma.html#209" class="InductiveConstructor Operator">⟩</a>
|
||
|
||
<a id="Problem3.lookup"></a><a id="11800" href="/20.07/TSPL/2019/Exam/#11800" class="Function">lookup</a> <a id="11807" class="Symbol">:</a> <a id="11809" class="Symbol">∀</a> <a id="11811" class="Symbol">(</a><a id="11812" href="/20.07/TSPL/2019/Exam/#11812" class="Bound">Γ</a> <a id="11814" class="Symbol">:</a> <a id="11816" href="/20.07/TSPL/2019/Exam/#8472" class="Datatype">Context</a><a id="11823" class="Symbol">)</a> <a id="11825" class="Symbol">(</a><a id="11826" href="/20.07/TSPL/2019/Exam/#11826" class="Bound">x</a> <a id="11828" class="Symbol">:</a> <a id="11830" href="/20.07/TSPL/2019/Exam/#8419" class="Function">Id</a><a id="11832" class="Symbol">)</a>
|
||
<a id="11840" class="Comment">-----------------------</a>
|
||
<a id="11868" class="Symbol">→</a> <a id="11870" href="https://agda.github.io/agda-stdlib/v1.1/Relation.Nullary.html#605" class="Datatype">Dec</a> <a id="11874" class="Symbol">(</a><a id="11875" href="https://agda.github.io/agda-stdlib/v1.1/Data.Product.html#1783" class="Function">∃[</a> <a id="11878" href="/20.07/TSPL/2019/Exam/#11878" class="Bound">A</a> <a id="11880" href="https://agda.github.io/agda-stdlib/v1.1/Data.Product.html#1783" class="Function">]</a><a id="11881" class="Symbol">(</a><a id="11882" href="/20.07/TSPL/2019/Exam/#11812" class="Bound">Γ</a> <a id="11884" href="/20.07/TSPL/2019/Exam/#9123" class="Datatype Operator">∋</a> <a id="11886" href="/20.07/TSPL/2019/Exam/#11826" class="Bound">x</a> <a id="11888" href="/20.07/TSPL/2019/Exam/#9123" class="Datatype Operator">⦂</a> <a id="11890" href="/20.07/TSPL/2019/Exam/#11878" class="Bound">A</a><a id="11891" class="Symbol">))</a>
|
||
<a id="11896" href="/20.07/TSPL/2019/Exam/#11800" class="Function">lookup</a> <a id="11903" href="/20.07/TSPL/2019/Exam/#8496" class="InductiveConstructor">∅</a> <a id="11905" href="/20.07/TSPL/2019/Exam/#11905" class="Bound">x</a> <a id="11930" class="Symbol">=</a> <a id="11933" href="https://agda.github.io/agda-stdlib/v1.1/Relation.Nullary.html#668" class="InductiveConstructor">no</a> <a id="11937" class="Symbol">(λ</a> <a id="11940" class="Symbol">())</a>
|
||
<a id="11946" href="/20.07/TSPL/2019/Exam/#11800" class="Function">lookup</a> <a id="11953" class="Symbol">(</a><a id="11954" href="/20.07/TSPL/2019/Exam/#11954" class="Bound">Γ</a> <a id="11956" href="/20.07/TSPL/2019/Exam/#8516" class="InductiveConstructor Operator">,</a> <a id="11958" href="/20.07/TSPL/2019/Exam/#11958" class="Bound">y</a> <a id="11960" href="/20.07/TSPL/2019/Exam/#8516" class="InductiveConstructor Operator">⦂</a> <a id="11962" href="/20.07/TSPL/2019/Exam/#11962" class="Bound">B</a><a id="11963" class="Symbol">)</a> <a id="11965" href="/20.07/TSPL/2019/Exam/#11965" class="Bound">x</a> <a id="11967" class="Keyword">with</a> <a id="11972" href="/20.07/TSPL/2019/Exam/#11965" class="Bound">x</a> <a id="11974" href="https://agda.github.io/agda-stdlib/v1.1/Data.String.Properties.html#2569" class="Function Operator">≟</a> <a id="11976" href="/20.07/TSPL/2019/Exam/#11958" class="Bound">y</a>
|
||
<a id="11980" class="Symbol">...</a> <a id="11984" class="Symbol">|</a> <a id="11986" href="https://agda.github.io/agda-stdlib/v1.1/Relation.Nullary.html#641" class="InductiveConstructor">yes</a> <a id="11990" href="Agda.Builtin.Equality.html#182" class="InductiveConstructor">refl</a> <a id="12014" class="Symbol">=</a> <a id="12017" href="https://agda.github.io/agda-stdlib/v1.1/Relation.Nullary.html#641" class="InductiveConstructor">yes</a> <a id="12021" href="Agda.Builtin.Sigma.html#209" class="InductiveConstructor Operator">⟨</a> <a id="12023" class="Bound">B</a> <a id="12025" href="Agda.Builtin.Sigma.html#209" class="InductiveConstructor Operator">,</a> <a id="12027" href="/20.07/TSPL/2019/Exam/#9168" class="InductiveConstructor">Z</a> <a id="12029" href="Agda.Builtin.Sigma.html#209" class="InductiveConstructor Operator">⟩</a>
|
||
<a id="12033" class="Symbol">...</a> <a id="12037" class="Symbol">|</a> <a id="12039" href="https://agda.github.io/agda-stdlib/v1.1/Relation.Nullary.html#668" class="InductiveConstructor">no</a> <a id="12042" href="/20.07/TSPL/2019/Exam/#12042" class="Bound">x≢y</a> <a id="12046" class="Keyword">with</a> <a id="12051" href="/20.07/TSPL/2019/Exam/#11800" class="Function">lookup</a> <a id="12058" class="Bound">Γ</a> <a id="12060" class="Bound">x</a>
|
||
<a id="12064" class="Symbol">...</a> <a id="12080" class="Symbol">|</a> <a id="12082" href="https://agda.github.io/agda-stdlib/v1.1/Relation.Nullary.html#668" class="InductiveConstructor">no</a> <a id="12086" href="/20.07/TSPL/2019/Exam/#12086" class="Bound">¬∃</a> <a id="12098" class="Symbol">=</a> <a id="12101" href="https://agda.github.io/agda-stdlib/v1.1/Relation.Nullary.html#668" class="InductiveConstructor">no</a> <a id="12105" class="Symbol">(</a><a id="12106" href="/20.07/TSPL/2019/Exam/#11577" class="Function">ext∋</a> <a id="12111" class="Bound">x≢y</a> <a id="12115" href="/20.07/TSPL/2019/Exam/#12086" class="Bound">¬∃</a><a id="12117" class="Symbol">)</a>
|
||
<a id="12121" class="Symbol">...</a> <a id="12137" class="Symbol">|</a> <a id="12139" href="https://agda.github.io/agda-stdlib/v1.1/Relation.Nullary.html#641" class="InductiveConstructor">yes</a> <a id="12143" href="Agda.Builtin.Sigma.html#209" class="InductiveConstructor Operator">⟨</a> <a id="12145" href="/20.07/TSPL/2019/Exam/#12145" class="Bound">A</a> <a id="12147" href="Agda.Builtin.Sigma.html#209" class="InductiveConstructor Operator">,</a> <a id="12149" href="/20.07/TSPL/2019/Exam/#12149" class="Bound">⊢x</a> <a id="12152" href="Agda.Builtin.Sigma.html#209" class="InductiveConstructor Operator">⟩</a> <a id="12155" class="Symbol">=</a> <a id="12158" href="https://agda.github.io/agda-stdlib/v1.1/Relation.Nullary.html#641" class="InductiveConstructor">yes</a> <a id="12162" href="Agda.Builtin.Sigma.html#209" class="InductiveConstructor Operator">⟨</a> <a id="12164" href="/20.07/TSPL/2019/Exam/#12145" class="Bound">A</a> <a id="12166" href="Agda.Builtin.Sigma.html#209" class="InductiveConstructor Operator">,</a> <a id="12168" href="/20.07/TSPL/2019/Exam/#9242" class="InductiveConstructor">S</a> <a id="12170" class="Bound">x≢y</a> <a id="12174" href="/20.07/TSPL/2019/Exam/#12149" class="Bound">⊢x</a> <a id="12177" href="Agda.Builtin.Sigma.html#209" class="InductiveConstructor Operator">⟩</a>
|
||
</pre>
|
||
<h3 id="promoting-negations">Promoting negations</h3>
|
||
|
||
<pre class="Agda"> <a id="Problem3.¬arg"></a><a id="12215" href="/20.07/TSPL/2019/Exam/#12215" class="Function">¬arg</a> <a id="12220" class="Symbol">:</a> <a id="12222" class="Symbol">∀</a> <a id="12224" class="Symbol">{</a><a id="12225" href="/20.07/TSPL/2019/Exam/#12225" class="Bound">Γ</a> <a id="12227" href="/20.07/TSPL/2019/Exam/#12227" class="Bound">A</a> <a id="12229" href="/20.07/TSPL/2019/Exam/#12229" class="Bound">B</a> <a id="12231" href="/20.07/TSPL/2019/Exam/#12231" class="Bound">L</a> <a id="12233" href="/20.07/TSPL/2019/Exam/#12233" class="Bound">M</a><a id="12234" class="Symbol">}</a>
|
||
<a id="12240" class="Symbol">→</a> <a id="12242" href="/20.07/TSPL/2019/Exam/#12225" class="Bound">Γ</a> <a id="12244" href="/20.07/TSPL/2019/Exam/#9393" class="Datatype Operator">⊢</a> <a id="12246" href="/20.07/TSPL/2019/Exam/#12231" class="Bound">L</a> <a id="12248" href="/20.07/TSPL/2019/Exam/#9393" class="Datatype Operator">↑</a> <a id="12250" href="/20.07/TSPL/2019/Exam/#12227" class="Bound">A</a> <a id="12252" href="/20.07/TSPL/2019/Exam/#8347" class="InductiveConstructor Operator">⇒</a> <a id="12254" href="/20.07/TSPL/2019/Exam/#12229" class="Bound">B</a>
|
||
<a id="12260" class="Symbol">→</a> <a id="12262" href="https://agda.github.io/agda-stdlib/v1.1/Relation.Nullary.html#535" class="Function Operator">¬</a> <a id="12264" href="/20.07/TSPL/2019/Exam/#12225" class="Bound">Γ</a> <a id="12266" href="/20.07/TSPL/2019/Exam/#9437" class="Datatype Operator">⊢</a> <a id="12268" href="/20.07/TSPL/2019/Exam/#12233" class="Bound">M</a> <a id="12270" href="/20.07/TSPL/2019/Exam/#9437" class="Datatype Operator">↓</a> <a id="12272" href="/20.07/TSPL/2019/Exam/#12227" class="Bound">A</a>
|
||
<a id="12280" class="Comment">-------------------------</a>
|
||
<a id="12310" class="Symbol">→</a> <a id="12312" href="https://agda.github.io/agda-stdlib/v1.1/Relation.Nullary.html#535" class="Function Operator">¬</a> <a id="12314" href="https://agda.github.io/agda-stdlib/v1.1/Data.Product.html#1783" class="Function">∃[</a> <a id="12317" href="/20.07/TSPL/2019/Exam/#12317" class="Bound">B′</a> <a id="12320" href="https://agda.github.io/agda-stdlib/v1.1/Data.Product.html#1783" class="Function">]</a><a id="12321" class="Symbol">(</a><a id="12322" href="/20.07/TSPL/2019/Exam/#12225" class="Bound">Γ</a> <a id="12324" href="/20.07/TSPL/2019/Exam/#9393" class="Datatype Operator">⊢</a> <a id="12326" href="/20.07/TSPL/2019/Exam/#12231" class="Bound">L</a> <a id="12328" href="/20.07/TSPL/2019/Exam/#8679" class="InductiveConstructor Operator">·</a> <a id="12330" href="/20.07/TSPL/2019/Exam/#12233" class="Bound">M</a> <a id="12332" href="/20.07/TSPL/2019/Exam/#9393" class="Datatype Operator">↑</a> <a id="12334" href="/20.07/TSPL/2019/Exam/#12317" class="Bound">B′</a><a id="12336" class="Symbol">)</a>
|
||
<a id="12340" href="/20.07/TSPL/2019/Exam/#12215" class="Function">¬arg</a> <a id="12345" href="/20.07/TSPL/2019/Exam/#12345" class="Bound">⊢L</a> <a id="12348" href="/20.07/TSPL/2019/Exam/#12348" class="Bound">¬⊢M</a> <a id="12352" href="Agda.Builtin.Sigma.html#209" class="InductiveConstructor Operator">⟨</a> <a id="12354" href="/20.07/TSPL/2019/Exam/#12354" class="Bound">B′</a> <a id="12357" href="Agda.Builtin.Sigma.html#209" class="InductiveConstructor Operator">,</a> <a id="12359" href="/20.07/TSPL/2019/Exam/#12359" class="Bound">⊢L′</a> <a id="12363" href="/20.07/TSPL/2019/Exam/#9577" class="InductiveConstructor Operator">·</a> <a id="12365" href="/20.07/TSPL/2019/Exam/#12365" class="Bound">⊢M′</a> <a id="12369" href="Agda.Builtin.Sigma.html#209" class="InductiveConstructor Operator">⟩</a> <a id="12371" class="Keyword">rewrite</a> <a id="12379" href="/20.07/TSPL/2019/Exam/#10847" class="Function">dom≡</a> <a id="12384" class="Symbol">(</a><a id="12385" href="/20.07/TSPL/2019/Exam/#11323" class="Function">uniq-↑</a> <a id="12392" href="/20.07/TSPL/2019/Exam/#12345" class="Bound">⊢L</a> <a id="12395" href="/20.07/TSPL/2019/Exam/#12359" class="Bound">⊢L′</a><a id="12398" class="Symbol">)</a> <a id="12400" class="Symbol">=</a> <a id="12402" href="/20.07/TSPL/2019/Exam/#12348" class="Bound">¬⊢M</a> <a id="12406" href="/20.07/TSPL/2019/Exam/#12365" class="Bound">⊢M′</a>
|
||
|
||
<a id="Problem3.¬switch"></a><a id="12413" href="/20.07/TSPL/2019/Exam/#12413" class="Function">¬switch</a> <a id="12421" class="Symbol">:</a> <a id="12423" class="Symbol">∀</a> <a id="12425" class="Symbol">{</a><a id="12426" href="/20.07/TSPL/2019/Exam/#12426" class="Bound">Γ</a> <a id="12428" href="/20.07/TSPL/2019/Exam/#12428" class="Bound">M</a> <a id="12430" href="/20.07/TSPL/2019/Exam/#12430" class="Bound">A</a> <a id="12432" href="/20.07/TSPL/2019/Exam/#12432" class="Bound">B</a><a id="12433" class="Symbol">}</a>
|
||
<a id="12439" class="Symbol">→</a> <a id="12441" href="/20.07/TSPL/2019/Exam/#12426" class="Bound">Γ</a> <a id="12443" href="/20.07/TSPL/2019/Exam/#9393" class="Datatype Operator">⊢</a> <a id="12445" href="/20.07/TSPL/2019/Exam/#12428" class="Bound">M</a> <a id="12447" href="/20.07/TSPL/2019/Exam/#9393" class="Datatype Operator">↑</a> <a id="12449" href="/20.07/TSPL/2019/Exam/#12430" class="Bound">A</a>
|
||
<a id="12455" class="Symbol">→</a> <a id="12457" href="/20.07/TSPL/2019/Exam/#12430" class="Bound">A</a> <a id="12459" href="https://agda.github.io/agda-stdlib/v1.1/Relation.Binary.PropositionalEquality.Core.html#799" class="Function Operator">≢</a> <a id="12461" href="/20.07/TSPL/2019/Exam/#12432" class="Bound">B</a>
|
||
<a id="12469" class="Comment">---------------</a>
|
||
<a id="12489" class="Symbol">→</a> <a id="12491" href="https://agda.github.io/agda-stdlib/v1.1/Relation.Nullary.html#535" class="Function Operator">¬</a> <a id="12493" href="/20.07/TSPL/2019/Exam/#12426" class="Bound">Γ</a> <a id="12495" href="/20.07/TSPL/2019/Exam/#9437" class="Datatype Operator">⊢</a> <a id="12497" class="Symbol">(</a><a id="12498" href="/20.07/TSPL/2019/Exam/#12428" class="Bound">M</a> <a id="12500" href="/20.07/TSPL/2019/Exam/#9054" class="InductiveConstructor Operator">↑</a><a id="12501" class="Symbol">)</a> <a id="12503" href="/20.07/TSPL/2019/Exam/#9437" class="Datatype Operator">↓</a> <a id="12505" href="/20.07/TSPL/2019/Exam/#12432" class="Bound">B</a>
|
||
<a id="12509" href="/20.07/TSPL/2019/Exam/#12413" class="Function">¬switch</a> <a id="12517" href="/20.07/TSPL/2019/Exam/#12517" class="Bound">⊢M</a> <a id="12520" href="/20.07/TSPL/2019/Exam/#12520" class="Bound">A≢B</a> <a id="12524" class="Symbol">(</a><a id="12525" href="/20.07/TSPL/2019/Exam/#10333" class="InductiveConstructor">⊢↑</a> <a id="12528" href="/20.07/TSPL/2019/Exam/#12528" class="Bound">⊢M′</a> <a id="12532" href="/20.07/TSPL/2019/Exam/#12532" class="Bound">A′≡B</a><a id="12536" class="Symbol">)</a> <a id="12538" class="Keyword">rewrite</a> <a id="12546" href="/20.07/TSPL/2019/Exam/#11323" class="Function">uniq-↑</a> <a id="12553" href="/20.07/TSPL/2019/Exam/#12517" class="Bound">⊢M</a> <a id="12556" href="/20.07/TSPL/2019/Exam/#12528" class="Bound">⊢M′</a> <a id="12560" class="Symbol">=</a> <a id="12562" href="/20.07/TSPL/2019/Exam/#12520" class="Bound">A≢B</a> <a id="12566" href="/20.07/TSPL/2019/Exam/#12532" class="Bound">A′≡B</a>
|
||
</pre>
|
||
|
||
<h2 id="synthesize-and-inherit-types">Synthesize and inherit types</h2>
|
||
|
||
<pre class="Agda"> <a id="Problem3.synthesize"></a><a id="12616" href="/20.07/TSPL/2019/Exam/#12616" class="Function">synthesize</a> <a id="12627" class="Symbol">:</a> <a id="12629" class="Symbol">∀</a> <a id="12631" class="Symbol">(</a><a id="12632" href="/20.07/TSPL/2019/Exam/#12632" class="Bound">Γ</a> <a id="12634" class="Symbol">:</a> <a id="12636" href="/20.07/TSPL/2019/Exam/#8472" class="Datatype">Context</a><a id="12643" class="Symbol">)</a> <a id="12645" class="Symbol">(</a><a id="12646" href="/20.07/TSPL/2019/Exam/#12646" class="Bound">M</a> <a id="12648" class="Symbol">:</a> <a id="12650" href="/20.07/TSPL/2019/Exam/#8581" class="Datatype">Term⁺</a><a id="12655" class="Symbol">)</a>
|
||
<a id="12663" class="Comment">-----------------------</a>
|
||
<a id="12691" class="Symbol">→</a> <a id="12693" href="https://agda.github.io/agda-stdlib/v1.1/Relation.Nullary.html#605" class="Datatype">Dec</a> <a id="12697" class="Symbol">(</a><a id="12698" href="https://agda.github.io/agda-stdlib/v1.1/Data.Product.html#1783" class="Function">∃[</a> <a id="12701" href="/20.07/TSPL/2019/Exam/#12701" class="Bound">A</a> <a id="12703" href="https://agda.github.io/agda-stdlib/v1.1/Data.Product.html#1783" class="Function">]</a><a id="12704" class="Symbol">(</a><a id="12705" href="/20.07/TSPL/2019/Exam/#12632" class="Bound">Γ</a> <a id="12707" href="/20.07/TSPL/2019/Exam/#9393" class="Datatype Operator">⊢</a> <a id="12709" href="/20.07/TSPL/2019/Exam/#12646" class="Bound">M</a> <a id="12711" href="/20.07/TSPL/2019/Exam/#9393" class="Datatype Operator">↑</a> <a id="12713" href="/20.07/TSPL/2019/Exam/#12701" class="Bound">A</a><a id="12714" class="Symbol">))</a>
|
||
|
||
<a id="Problem3.inherit"></a><a id="12720" href="/20.07/TSPL/2019/Exam/#12720" class="Function">inherit</a> <a id="12728" class="Symbol">:</a> <a id="12730" class="Symbol">∀</a> <a id="12732" class="Symbol">(</a><a id="12733" href="/20.07/TSPL/2019/Exam/#12733" class="Bound">Γ</a> <a id="12735" class="Symbol">:</a> <a id="12737" href="/20.07/TSPL/2019/Exam/#8472" class="Datatype">Context</a><a id="12744" class="Symbol">)</a> <a id="12746" class="Symbol">(</a><a id="12747" href="/20.07/TSPL/2019/Exam/#12747" class="Bound">M</a> <a id="12749" class="Symbol">:</a> <a id="12751" href="/20.07/TSPL/2019/Exam/#8600" class="Datatype">Term⁻</a><a id="12756" class="Symbol">)</a> <a id="12758" class="Symbol">(</a><a id="12759" href="/20.07/TSPL/2019/Exam/#12759" class="Bound">A</a> <a id="12761" class="Symbol">:</a> <a id="12763" href="/20.07/TSPL/2019/Exam/#8326" class="Datatype">Type</a><a id="12767" class="Symbol">)</a>
|
||
<a id="12775" class="Comment">---------------</a>
|
||
<a id="12795" class="Symbol">→</a> <a id="12797" href="https://agda.github.io/agda-stdlib/v1.1/Relation.Nullary.html#605" class="Datatype">Dec</a> <a id="12801" class="Symbol">(</a><a id="12802" href="/20.07/TSPL/2019/Exam/#12733" class="Bound">Γ</a> <a id="12804" href="/20.07/TSPL/2019/Exam/#9437" class="Datatype Operator">⊢</a> <a id="12806" href="/20.07/TSPL/2019/Exam/#12747" class="Bound">M</a> <a id="12808" href="/20.07/TSPL/2019/Exam/#9437" class="Datatype Operator">↓</a> <a id="12810" href="/20.07/TSPL/2019/Exam/#12759" class="Bound">A</a><a id="12811" class="Symbol">)</a>
|
||
|
||
<a id="12816" href="/20.07/TSPL/2019/Exam/#12616" class="Function">synthesize</a> <a id="12827" href="/20.07/TSPL/2019/Exam/#12827" class="Bound">Γ</a> <a id="12829" class="Symbol">(</a><a id="12830" href="/20.07/TSPL/2019/Exam/#8636" class="InductiveConstructor Operator">`</a> <a id="12832" href="/20.07/TSPL/2019/Exam/#12832" class="Bound">x</a><a id="12833" class="Symbol">)</a> <a id="12835" class="Keyword">with</a> <a id="12840" href="/20.07/TSPL/2019/Exam/#11800" class="Function">lookup</a> <a id="12847" href="/20.07/TSPL/2019/Exam/#12827" class="Bound">Γ</a> <a id="12849" href="/20.07/TSPL/2019/Exam/#12832" class="Bound">x</a>
|
||
<a id="12853" class="Symbol">...</a> <a id="12857" class="Symbol">|</a> <a id="12859" href="https://agda.github.io/agda-stdlib/v1.1/Relation.Nullary.html#668" class="InductiveConstructor">no</a> <a id="12863" href="/20.07/TSPL/2019/Exam/#12863" class="Bound">¬∃</a> <a id="12879" class="Symbol">=</a> <a id="12882" href="https://agda.github.io/agda-stdlib/v1.1/Relation.Nullary.html#668" class="InductiveConstructor">no</a> <a id="12886" class="Symbol">(λ{</a> <a id="12890" href="Agda.Builtin.Sigma.html#209" class="InductiveConstructor Operator">⟨</a> <a id="12892" href="/20.07/TSPL/2019/Exam/#12892" class="Bound">A</a> <a id="12894" href="Agda.Builtin.Sigma.html#209" class="InductiveConstructor Operator">,</a> <a id="12896" href="/20.07/TSPL/2019/Exam/#9499" class="InductiveConstructor">⊢`</a> <a id="12899" href="/20.07/TSPL/2019/Exam/#12899" class="Bound">∋x</a> <a id="12902" href="Agda.Builtin.Sigma.html#209" class="InductiveConstructor Operator">⟩</a> <a id="12904" class="Symbol">→</a> <a id="12906" href="/20.07/TSPL/2019/Exam/#12863" class="Bound">¬∃</a> <a id="12909" href="Agda.Builtin.Sigma.html#209" class="InductiveConstructor Operator">⟨</a> <a id="12911" href="/20.07/TSPL/2019/Exam/#12892" class="Bound">A</a> <a id="12913" href="Agda.Builtin.Sigma.html#209" class="InductiveConstructor Operator">,</a> <a id="12915" href="/20.07/TSPL/2019/Exam/#12899" class="Bound">∋x</a> <a id="12918" href="Agda.Builtin.Sigma.html#209" class="InductiveConstructor Operator">⟩</a> <a id="12920" class="Symbol">})</a>
|
||
<a id="12925" class="Symbol">...</a> <a id="12929" class="Symbol">|</a> <a id="12931" href="https://agda.github.io/agda-stdlib/v1.1/Relation.Nullary.html#641" class="InductiveConstructor">yes</a> <a id="12935" href="Agda.Builtin.Sigma.html#209" class="InductiveConstructor Operator">⟨</a> <a id="12937" href="/20.07/TSPL/2019/Exam/#12937" class="Bound">A</a> <a id="12939" href="Agda.Builtin.Sigma.html#209" class="InductiveConstructor Operator">,</a> <a id="12941" href="/20.07/TSPL/2019/Exam/#12941" class="Bound">∋x</a> <a id="12944" href="Agda.Builtin.Sigma.html#209" class="InductiveConstructor Operator">⟩</a> <a id="12951" class="Symbol">=</a> <a id="12954" href="https://agda.github.io/agda-stdlib/v1.1/Relation.Nullary.html#641" class="InductiveConstructor">yes</a> <a id="12958" href="Agda.Builtin.Sigma.html#209" class="InductiveConstructor Operator">⟨</a> <a id="12960" href="/20.07/TSPL/2019/Exam/#12937" class="Bound">A</a> <a id="12962" href="Agda.Builtin.Sigma.html#209" class="InductiveConstructor Operator">,</a> <a id="12964" href="/20.07/TSPL/2019/Exam/#9499" class="InductiveConstructor">⊢`</a> <a id="12967" href="/20.07/TSPL/2019/Exam/#12941" class="Bound">∋x</a> <a id="12970" href="Agda.Builtin.Sigma.html#209" class="InductiveConstructor Operator">⟩</a>
|
||
<a id="12974" href="/20.07/TSPL/2019/Exam/#12616" class="Function">synthesize</a> <a id="12985" href="/20.07/TSPL/2019/Exam/#12985" class="Bound">Γ</a> <a id="12987" class="Symbol">(</a><a id="12988" href="/20.07/TSPL/2019/Exam/#12988" class="Bound">L</a> <a id="12990" href="/20.07/TSPL/2019/Exam/#8679" class="InductiveConstructor Operator">·</a> <a id="12992" href="/20.07/TSPL/2019/Exam/#12992" class="Bound">M</a><a id="12993" class="Symbol">)</a> <a id="12995" class="Keyword">with</a> <a id="13000" href="/20.07/TSPL/2019/Exam/#12616" class="Function">synthesize</a> <a id="13011" href="/20.07/TSPL/2019/Exam/#12985" class="Bound">Γ</a> <a id="13013" href="/20.07/TSPL/2019/Exam/#12988" class="Bound">L</a>
|
||
<a id="13017" class="Symbol">...</a> <a id="13021" class="Symbol">|</a> <a id="13023" href="https://agda.github.io/agda-stdlib/v1.1/Relation.Nullary.html#668" class="InductiveConstructor">no</a> <a id="13027" href="/20.07/TSPL/2019/Exam/#13027" class="Bound">¬∃</a> <a id="13043" class="Symbol">=</a> <a id="13046" href="https://agda.github.io/agda-stdlib/v1.1/Relation.Nullary.html#668" class="InductiveConstructor">no</a> <a id="13050" class="Symbol">(λ{</a> <a id="13054" href="Agda.Builtin.Sigma.html#209" class="InductiveConstructor Operator">⟨</a> <a id="13056" class="Symbol">_</a> <a id="13058" href="Agda.Builtin.Sigma.html#209" class="InductiveConstructor Operator">,</a> <a id="13060" href="/20.07/TSPL/2019/Exam/#13060" class="Bound">⊢L</a> <a id="13064" href="/20.07/TSPL/2019/Exam/#9577" class="InductiveConstructor Operator">·</a> <a id="13066" class="Symbol">_</a> <a id="13069" href="Agda.Builtin.Sigma.html#209" class="InductiveConstructor Operator">⟩</a> <a id="13072" class="Symbol">→</a> <a id="13075" href="/20.07/TSPL/2019/Exam/#13027" class="Bound">¬∃</a> <a id="13078" href="Agda.Builtin.Sigma.html#209" class="InductiveConstructor Operator">⟨</a> <a id="13080" class="Symbol">_</a> <a id="13082" href="Agda.Builtin.Sigma.html#209" class="InductiveConstructor Operator">,</a> <a id="13084" href="/20.07/TSPL/2019/Exam/#13060" class="Bound">⊢L</a> <a id="13087" href="Agda.Builtin.Sigma.html#209" class="InductiveConstructor Operator">⟩</a> <a id="13089" class="Symbol">})</a>
|
||
<a id="13094" class="Symbol">...</a> <a id="13098" class="Symbol">|</a> <a id="13100" href="https://agda.github.io/agda-stdlib/v1.1/Relation.Nullary.html#641" class="InductiveConstructor">yes</a> <a id="13104" href="Agda.Builtin.Sigma.html#209" class="InductiveConstructor Operator">⟨</a> <a id="13106" href="/20.07/TSPL/2019/Exam/#8378" class="InductiveConstructor">`ℕ</a> <a id="13109" href="Agda.Builtin.Sigma.html#209" class="InductiveConstructor Operator">,</a> <a id="13114" href="/20.07/TSPL/2019/Exam/#13114" class="Bound">⊢L</a> <a id="13117" href="Agda.Builtin.Sigma.html#209" class="InductiveConstructor Operator">⟩</a> <a id="13120" class="Symbol">=</a> <a id="13123" href="https://agda.github.io/agda-stdlib/v1.1/Relation.Nullary.html#668" class="InductiveConstructor">no</a> <a id="13127" class="Symbol">(λ{</a> <a id="13131" href="Agda.Builtin.Sigma.html#209" class="InductiveConstructor Operator">⟨</a> <a id="13133" class="Symbol">_</a> <a id="13135" href="Agda.Builtin.Sigma.html#209" class="InductiveConstructor Operator">,</a> <a id="13137" href="/20.07/TSPL/2019/Exam/#13137" class="Bound">⊢L′</a> <a id="13141" href="/20.07/TSPL/2019/Exam/#9577" class="InductiveConstructor Operator">·</a> <a id="13143" class="Symbol">_</a> <a id="13146" href="Agda.Builtin.Sigma.html#209" class="InductiveConstructor Operator">⟩</a> <a id="13149" class="Symbol">→</a> <a id="13152" href="/20.07/TSPL/2019/Exam/#10987" class="Function">ℕ≢⇒</a> <a id="13156" class="Symbol">(</a><a id="13157" href="/20.07/TSPL/2019/Exam/#11323" class="Function">uniq-↑</a> <a id="13164" href="/20.07/TSPL/2019/Exam/#13114" class="Bound">⊢L</a> <a id="13167" href="/20.07/TSPL/2019/Exam/#13137" class="Bound">⊢L′</a><a id="13170" class="Symbol">)</a> <a id="13172" class="Symbol">})</a>
|
||
<a id="13177" class="Symbol">...</a> <a id="13181" class="Symbol">|</a> <a id="13183" href="https://agda.github.io/agda-stdlib/v1.1/Relation.Nullary.html#641" class="InductiveConstructor">yes</a> <a id="13187" href="Agda.Builtin.Sigma.html#209" class="InductiveConstructor Operator">⟨</a> <a id="13189" href="/20.07/TSPL/2019/Exam/#13189" class="Bound">A</a> <a id="13191" href="/20.07/TSPL/2019/Exam/#8347" class="InductiveConstructor Operator">⇒</a> <a id="13193" href="/20.07/TSPL/2019/Exam/#13193" class="Bound">B</a> <a id="13195" href="Agda.Builtin.Sigma.html#209" class="InductiveConstructor Operator">,</a> <a id="13197" href="/20.07/TSPL/2019/Exam/#13197" class="Bound">⊢L</a> <a id="13200" href="Agda.Builtin.Sigma.html#209" class="InductiveConstructor Operator">⟩</a> <a id="13202" class="Keyword">with</a> <a id="13207" href="/20.07/TSPL/2019/Exam/#12720" class="Function">inherit</a> <a id="13215" class="Bound">Γ</a> <a id="13217" class="Bound">M</a> <a id="13219" href="/20.07/TSPL/2019/Exam/#13189" class="Bound">A</a>
|
||
<a id="13223" class="Symbol">...</a> <a id="13230" class="Symbol">|</a> <a id="13232" href="https://agda.github.io/agda-stdlib/v1.1/Relation.Nullary.html#668" class="InductiveConstructor">no</a> <a id="13236" href="/20.07/TSPL/2019/Exam/#13236" class="Bound">¬⊢M</a> <a id="13249" class="Symbol">=</a> <a id="13252" href="https://agda.github.io/agda-stdlib/v1.1/Relation.Nullary.html#668" class="InductiveConstructor">no</a> <a id="13256" class="Symbol">(</a><a id="13257" href="/20.07/TSPL/2019/Exam/#12215" class="Function">¬arg</a> <a id="13262" class="Bound">⊢L</a> <a id="13265" href="/20.07/TSPL/2019/Exam/#13236" class="Bound">¬⊢M</a><a id="13268" class="Symbol">)</a>
|
||
<a id="13272" class="Symbol">...</a> <a id="13279" class="Symbol">|</a> <a id="13281" href="https://agda.github.io/agda-stdlib/v1.1/Relation.Nullary.html#641" class="InductiveConstructor">yes</a> <a id="13285" href="/20.07/TSPL/2019/Exam/#13285" class="Bound">⊢M</a> <a id="13298" class="Symbol">=</a> <a id="13301" href="https://agda.github.io/agda-stdlib/v1.1/Relation.Nullary.html#641" class="InductiveConstructor">yes</a> <a id="13305" href="Agda.Builtin.Sigma.html#209" class="InductiveConstructor Operator">⟨</a> <a id="13307" class="Bound">B</a> <a id="13309" href="Agda.Builtin.Sigma.html#209" class="InductiveConstructor Operator">,</a> <a id="13311" class="Bound">⊢L</a> <a id="13314" href="/20.07/TSPL/2019/Exam/#9577" class="InductiveConstructor Operator">·</a> <a id="13316" href="/20.07/TSPL/2019/Exam/#13285" class="Bound">⊢M</a> <a id="13319" href="Agda.Builtin.Sigma.html#209" class="InductiveConstructor Operator">⟩</a>
|
||
<a id="13323" href="/20.07/TSPL/2019/Exam/#12616" class="Function">synthesize</a> <a id="13334" href="/20.07/TSPL/2019/Exam/#13334" class="Bound">Γ</a> <a id="13336" class="Symbol">(</a><a id="13337" href="/20.07/TSPL/2019/Exam/#13337" class="Bound">M</a> <a id="13339" href="/20.07/TSPL/2019/Exam/#8733" class="InductiveConstructor Operator">↓</a> <a id="13341" href="/20.07/TSPL/2019/Exam/#13341" class="Bound">A</a><a id="13342" class="Symbol">)</a> <a id="13344" class="Keyword">with</a> <a id="13349" href="/20.07/TSPL/2019/Exam/#12720" class="Function">inherit</a> <a id="13357" href="/20.07/TSPL/2019/Exam/#13334" class="Bound">Γ</a> <a id="13359" href="/20.07/TSPL/2019/Exam/#13337" class="Bound">M</a> <a id="13361" href="/20.07/TSPL/2019/Exam/#13341" class="Bound">A</a>
|
||
<a id="13365" class="Symbol">...</a> <a id="13369" class="Symbol">|</a> <a id="13371" href="https://agda.github.io/agda-stdlib/v1.1/Relation.Nullary.html#668" class="InductiveConstructor">no</a> <a id="13375" href="/20.07/TSPL/2019/Exam/#13375" class="Bound">¬⊢M</a> <a id="13391" class="Symbol">=</a> <a id="13394" href="https://agda.github.io/agda-stdlib/v1.1/Relation.Nullary.html#668" class="InductiveConstructor">no</a> <a id="13398" class="Symbol">(λ{</a> <a id="13402" href="Agda.Builtin.Sigma.html#209" class="InductiveConstructor Operator">⟨</a> <a id="13404" class="Symbol">_</a> <a id="13406" href="Agda.Builtin.Sigma.html#209" class="InductiveConstructor Operator">,</a> <a id="13408" href="/20.07/TSPL/2019/Exam/#9686" class="InductiveConstructor">⊢↓</a> <a id="13411" href="/20.07/TSPL/2019/Exam/#13411" class="Bound">⊢M</a> <a id="13414" href="Agda.Builtin.Sigma.html#209" class="InductiveConstructor Operator">⟩</a> <a id="13417" class="Symbol">→</a> <a id="13420" href="/20.07/TSPL/2019/Exam/#13375" class="Bound">¬⊢M</a> <a id="13424" href="/20.07/TSPL/2019/Exam/#13411" class="Bound">⊢M</a> <a id="13427" class="Symbol">})</a>
|
||
<a id="13432" class="Symbol">...</a> <a id="13436" class="Symbol">|</a> <a id="13438" href="https://agda.github.io/agda-stdlib/v1.1/Relation.Nullary.html#641" class="InductiveConstructor">yes</a> <a id="13442" href="/20.07/TSPL/2019/Exam/#13442" class="Bound">⊢M</a> <a id="13458" class="Symbol">=</a> <a id="13461" href="https://agda.github.io/agda-stdlib/v1.1/Relation.Nullary.html#641" class="InductiveConstructor">yes</a> <a id="13465" href="Agda.Builtin.Sigma.html#209" class="InductiveConstructor Operator">⟨</a> <a id="13467" class="Bound">A</a> <a id="13469" href="Agda.Builtin.Sigma.html#209" class="InductiveConstructor Operator">,</a> <a id="13471" href="/20.07/TSPL/2019/Exam/#9686" class="InductiveConstructor">⊢↓</a> <a id="13474" href="/20.07/TSPL/2019/Exam/#13442" class="Bound">⊢M</a> <a id="13477" href="Agda.Builtin.Sigma.html#209" class="InductiveConstructor Operator">⟩</a>
|
||
|
||
<a id="13482" href="/20.07/TSPL/2019/Exam/#12720" class="Function">inherit</a> <a id="13490" href="/20.07/TSPL/2019/Exam/#13490" class="Bound">Γ</a> <a id="13492" class="Symbol">(</a><a id="13493" href="/20.07/TSPL/2019/Exam/#8806" class="InductiveConstructor Operator">ƛ</a> <a id="13495" href="/20.07/TSPL/2019/Exam/#13495" class="Bound">x</a> <a id="13497" href="/20.07/TSPL/2019/Exam/#8806" class="InductiveConstructor Operator">⇒</a> <a id="13499" href="/20.07/TSPL/2019/Exam/#13499" class="Bound">N</a><a id="13500" class="Symbol">)</a> <a id="13502" href="/20.07/TSPL/2019/Exam/#8378" class="InductiveConstructor">`ℕ</a> <a id="13510" class="Symbol">=</a> <a id="13513" href="https://agda.github.io/agda-stdlib/v1.1/Relation.Nullary.html#668" class="InductiveConstructor">no</a> <a id="13517" class="Symbol">(λ())</a>
|
||
<a id="13525" href="/20.07/TSPL/2019/Exam/#12720" class="Function">inherit</a> <a id="13533" href="/20.07/TSPL/2019/Exam/#13533" class="Bound">Γ</a> <a id="13535" class="Symbol">(</a><a id="13536" href="/20.07/TSPL/2019/Exam/#8806" class="InductiveConstructor Operator">ƛ</a> <a id="13538" href="/20.07/TSPL/2019/Exam/#13538" class="Bound">x</a> <a id="13540" href="/20.07/TSPL/2019/Exam/#8806" class="InductiveConstructor Operator">⇒</a> <a id="13542" href="/20.07/TSPL/2019/Exam/#13542" class="Bound">N</a><a id="13543" class="Symbol">)</a> <a id="13545" class="Symbol">(</a><a id="13546" href="/20.07/TSPL/2019/Exam/#13546" class="Bound">A</a> <a id="13548" href="/20.07/TSPL/2019/Exam/#8347" class="InductiveConstructor Operator">⇒</a> <a id="13550" href="/20.07/TSPL/2019/Exam/#13550" class="Bound">B</a><a id="13551" class="Symbol">)</a> <a id="13553" class="Keyword">with</a> <a id="13558" href="/20.07/TSPL/2019/Exam/#12720" class="Function">inherit</a> <a id="13566" class="Symbol">(</a><a id="13567" href="/20.07/TSPL/2019/Exam/#13533" class="Bound">Γ</a> <a id="13569" href="/20.07/TSPL/2019/Exam/#8516" class="InductiveConstructor Operator">,</a> <a id="13571" href="/20.07/TSPL/2019/Exam/#13538" class="Bound">x</a> <a id="13573" href="/20.07/TSPL/2019/Exam/#8516" class="InductiveConstructor Operator">⦂</a> <a id="13575" href="/20.07/TSPL/2019/Exam/#13546" class="Bound">A</a><a id="13576" class="Symbol">)</a> <a id="13578" href="/20.07/TSPL/2019/Exam/#13542" class="Bound">N</a> <a id="13580" href="/20.07/TSPL/2019/Exam/#13550" class="Bound">B</a>
|
||
<a id="13584" class="Symbol">...</a> <a id="13588" class="Symbol">|</a> <a id="13590" href="https://agda.github.io/agda-stdlib/v1.1/Relation.Nullary.html#668" class="InductiveConstructor">no</a> <a id="13593" href="/20.07/TSPL/2019/Exam/#13593" class="Bound">¬⊢N</a> <a id="13612" class="Symbol">=</a> <a id="13615" href="https://agda.github.io/agda-stdlib/v1.1/Relation.Nullary.html#668" class="InductiveConstructor">no</a> <a id="13619" class="Symbol">(λ{</a> <a id="13623" class="Symbol">(</a><a id="13624" href="/20.07/TSPL/2019/Exam/#9792" class="InductiveConstructor">⊢ƛ</a> <a id="13627" href="/20.07/TSPL/2019/Exam/#13627" class="Bound">⊢N</a><a id="13629" class="Symbol">)</a> <a id="13632" class="Symbol">→</a> <a id="13635" href="/20.07/TSPL/2019/Exam/#13593" class="Bound">¬⊢N</a> <a id="13639" href="/20.07/TSPL/2019/Exam/#13627" class="Bound">⊢N</a> <a id="13642" class="Symbol">})</a>
|
||
<a id="13647" class="Symbol">...</a> <a id="13651" class="Symbol">|</a> <a id="13653" href="https://agda.github.io/agda-stdlib/v1.1/Relation.Nullary.html#641" class="InductiveConstructor">yes</a> <a id="13657" href="/20.07/TSPL/2019/Exam/#13657" class="Bound">⊢N</a> <a id="13675" class="Symbol">=</a> <a id="13678" href="https://agda.github.io/agda-stdlib/v1.1/Relation.Nullary.html#641" class="InductiveConstructor">yes</a> <a id="13682" class="Symbol">(</a><a id="13683" href="/20.07/TSPL/2019/Exam/#9792" class="InductiveConstructor">⊢ƛ</a> <a id="13686" href="/20.07/TSPL/2019/Exam/#13657" class="Bound">⊢N</a><a id="13688" class="Symbol">)</a>
|
||
<a id="13692" href="/20.07/TSPL/2019/Exam/#12720" class="Function">inherit</a> <a id="13700" href="/20.07/TSPL/2019/Exam/#13700" class="Bound">Γ</a> <a id="13702" href="/20.07/TSPL/2019/Exam/#8856" class="InductiveConstructor">`zero</a> <a id="13708" href="/20.07/TSPL/2019/Exam/#8378" class="InductiveConstructor">`ℕ</a> <a id="13720" class="Symbol">=</a> <a id="13723" href="https://agda.github.io/agda-stdlib/v1.1/Relation.Nullary.html#641" class="InductiveConstructor">yes</a> <a id="13727" href="/20.07/TSPL/2019/Exam/#9898" class="InductiveConstructor">⊢zero</a>
|
||
<a id="13735" href="/20.07/TSPL/2019/Exam/#12720" class="Function">inherit</a> <a id="13743" href="/20.07/TSPL/2019/Exam/#13743" class="Bound">Γ</a> <a id="13745" href="/20.07/TSPL/2019/Exam/#8856" class="InductiveConstructor">`zero</a> <a id="13751" class="Symbol">(</a><a id="13752" href="/20.07/TSPL/2019/Exam/#13752" class="Bound">A</a> <a id="13754" href="/20.07/TSPL/2019/Exam/#8347" class="InductiveConstructor Operator">⇒</a> <a id="13756" href="/20.07/TSPL/2019/Exam/#13756" class="Bound">B</a><a id="13757" class="Symbol">)</a> <a id="13763" class="Symbol">=</a> <a id="13766" href="https://agda.github.io/agda-stdlib/v1.1/Relation.Nullary.html#668" class="InductiveConstructor">no</a> <a id="13770" class="Symbol">(λ())</a>
|
||
<a id="13778" href="/20.07/TSPL/2019/Exam/#12720" class="Function">inherit</a> <a id="13786" href="/20.07/TSPL/2019/Exam/#13786" class="Bound">Γ</a> <a id="13788" class="Symbol">(</a><a id="13789" href="/20.07/TSPL/2019/Exam/#8893" class="InductiveConstructor Operator">`suc</a> <a id="13794" href="/20.07/TSPL/2019/Exam/#13794" class="Bound">M</a><a id="13795" class="Symbol">)</a> <a id="13797" href="/20.07/TSPL/2019/Exam/#8378" class="InductiveConstructor">`ℕ</a> <a id="13800" class="Keyword">with</a> <a id="13805" href="/20.07/TSPL/2019/Exam/#12720" class="Function">inherit</a> <a id="13813" href="/20.07/TSPL/2019/Exam/#13786" class="Bound">Γ</a> <a id="13815" href="/20.07/TSPL/2019/Exam/#13794" class="Bound">M</a> <a id="13817" href="/20.07/TSPL/2019/Exam/#8378" class="InductiveConstructor">`ℕ</a>
|
||
<a id="13822" class="Symbol">...</a> <a id="13826" class="Symbol">|</a> <a id="13828" href="https://agda.github.io/agda-stdlib/v1.1/Relation.Nullary.html#668" class="InductiveConstructor">no</a> <a id="13831" href="/20.07/TSPL/2019/Exam/#13831" class="Bound">¬⊢M</a> <a id="13850" class="Symbol">=</a> <a id="13853" href="https://agda.github.io/agda-stdlib/v1.1/Relation.Nullary.html#668" class="InductiveConstructor">no</a> <a id="13857" class="Symbol">(λ{</a> <a id="13861" class="Symbol">(</a><a id="13862" href="/20.07/TSPL/2019/Exam/#9963" class="InductiveConstructor">⊢suc</a> <a id="13867" href="/20.07/TSPL/2019/Exam/#13867" class="Bound">⊢M</a><a id="13869" class="Symbol">)</a> <a id="13872" class="Symbol">→</a> <a id="13875" href="/20.07/TSPL/2019/Exam/#13831" class="Bound">¬⊢M</a> <a id="13879" href="/20.07/TSPL/2019/Exam/#13867" class="Bound">⊢M</a> <a id="13882" class="Symbol">})</a>
|
||
<a id="13887" class="Symbol">...</a> <a id="13891" class="Symbol">|</a> <a id="13893" href="https://agda.github.io/agda-stdlib/v1.1/Relation.Nullary.html#641" class="InductiveConstructor">yes</a> <a id="13897" href="/20.07/TSPL/2019/Exam/#13897" class="Bound">⊢M</a> <a id="13915" class="Symbol">=</a> <a id="13918" href="https://agda.github.io/agda-stdlib/v1.1/Relation.Nullary.html#641" class="InductiveConstructor">yes</a> <a id="13922" class="Symbol">(</a><a id="13923" href="/20.07/TSPL/2019/Exam/#9963" class="InductiveConstructor">⊢suc</a> <a id="13928" href="/20.07/TSPL/2019/Exam/#13897" class="Bound">⊢M</a><a id="13930" class="Symbol">)</a>
|
||
<a id="13934" href="/20.07/TSPL/2019/Exam/#12720" class="Function">inherit</a> <a id="13942" href="/20.07/TSPL/2019/Exam/#13942" class="Bound">Γ</a> <a id="13944" class="Symbol">(</a><a id="13945" href="/20.07/TSPL/2019/Exam/#8893" class="InductiveConstructor Operator">`suc</a> <a id="13950" href="/20.07/TSPL/2019/Exam/#13950" class="Bound">M</a><a id="13951" class="Symbol">)</a> <a id="13953" class="Symbol">(</a><a id="13954" href="/20.07/TSPL/2019/Exam/#13954" class="Bound">A</a> <a id="13956" href="/20.07/TSPL/2019/Exam/#8347" class="InductiveConstructor Operator">⇒</a> <a id="13958" href="/20.07/TSPL/2019/Exam/#13958" class="Bound">B</a><a id="13959" class="Symbol">)</a> <a id="13962" class="Symbol">=</a> <a id="13965" href="https://agda.github.io/agda-stdlib/v1.1/Relation.Nullary.html#668" class="InductiveConstructor">no</a> <a id="13969" class="Symbol">(λ())</a>
|
||
<a id="13977" href="/20.07/TSPL/2019/Exam/#12720" class="Function">inherit</a> <a id="13985" href="/20.07/TSPL/2019/Exam/#13985" class="Bound">Γ</a> <a id="13987" class="Symbol">(</a><a id="13988" href="/20.07/TSPL/2019/Exam/#8938" class="InductiveConstructor Operator">`case</a> <a id="13994" href="/20.07/TSPL/2019/Exam/#13994" class="Bound">L</a> <a id="13996" href="/20.07/TSPL/2019/Exam/#8938" class="InductiveConstructor Operator">[zero⇒</a> <a id="14003" href="/20.07/TSPL/2019/Exam/#14003" class="Bound">M</a> <a id="14005" href="/20.07/TSPL/2019/Exam/#8938" class="InductiveConstructor Operator">|suc</a> <a id="14010" href="/20.07/TSPL/2019/Exam/#14010" class="Bound">x</a> <a id="14012" href="/20.07/TSPL/2019/Exam/#8938" class="InductiveConstructor Operator">⇒</a> <a id="14014" href="/20.07/TSPL/2019/Exam/#14014" class="Bound">N</a> <a id="14016" href="/20.07/TSPL/2019/Exam/#8938" class="InductiveConstructor Operator">]</a><a id="14017" class="Symbol">)</a> <a id="14019" href="/20.07/TSPL/2019/Exam/#14019" class="Bound">A</a> <a id="14021" class="Keyword">with</a> <a id="14026" href="/20.07/TSPL/2019/Exam/#12616" class="Function">synthesize</a> <a id="14037" href="/20.07/TSPL/2019/Exam/#13985" class="Bound">Γ</a> <a id="14039" href="/20.07/TSPL/2019/Exam/#13994" class="Bound">L</a>
|
||
<a id="14043" class="Symbol">...</a> <a id="14047" class="Symbol">|</a> <a id="14049" href="https://agda.github.io/agda-stdlib/v1.1/Relation.Nullary.html#668" class="InductiveConstructor">no</a> <a id="14052" href="/20.07/TSPL/2019/Exam/#14052" class="Bound">¬∃</a> <a id="14071" class="Symbol">=</a> <a id="14074" href="https://agda.github.io/agda-stdlib/v1.1/Relation.Nullary.html#668" class="InductiveConstructor">no</a> <a id="14078" class="Symbol">(λ{</a> <a id="14082" class="Symbol">(</a><a id="14083" href="/20.07/TSPL/2019/Exam/#10050" class="InductiveConstructor">⊢case</a> <a id="14089" href="/20.07/TSPL/2019/Exam/#14089" class="Bound">⊢L</a> <a id="14093" class="Symbol">_</a> <a id="14095" class="Symbol">_)</a> <a id="14098" class="Symbol">→</a> <a id="14100" href="/20.07/TSPL/2019/Exam/#14052" class="Bound">¬∃</a> <a id="14103" href="Agda.Builtin.Sigma.html#209" class="InductiveConstructor Operator">⟨</a> <a id="14105" href="/20.07/TSPL/2019/Exam/#8378" class="InductiveConstructor">`ℕ</a> <a id="14108" href="Agda.Builtin.Sigma.html#209" class="InductiveConstructor Operator">,</a> <a id="14110" href="/20.07/TSPL/2019/Exam/#14089" class="Bound">⊢L</a> <a id="14113" href="Agda.Builtin.Sigma.html#209" class="InductiveConstructor Operator">⟩</a><a id="14114" class="Symbol">})</a>
|
||
<a id="14119" class="Symbol">...</a> <a id="14123" class="Symbol">|</a> <a id="14125" href="https://agda.github.io/agda-stdlib/v1.1/Relation.Nullary.html#641" class="InductiveConstructor">yes</a> <a id="14129" href="Agda.Builtin.Sigma.html#209" class="InductiveConstructor Operator">⟨</a> <a id="14131" class="Symbol">_</a> <a id="14133" href="/20.07/TSPL/2019/Exam/#8347" class="InductiveConstructor Operator">⇒</a> <a id="14135" class="Symbol">_</a> <a id="14137" href="Agda.Builtin.Sigma.html#209" class="InductiveConstructor Operator">,</a> <a id="14139" href="/20.07/TSPL/2019/Exam/#14139" class="Bound">⊢L</a> <a id="14142" href="Agda.Builtin.Sigma.html#209" class="InductiveConstructor Operator">⟩</a> <a id="14147" class="Symbol">=</a> <a id="14150" href="https://agda.github.io/agda-stdlib/v1.1/Relation.Nullary.html#668" class="InductiveConstructor">no</a> <a id="14154" class="Symbol">(λ{</a> <a id="14158" class="Symbol">(</a><a id="14159" href="/20.07/TSPL/2019/Exam/#10050" class="InductiveConstructor">⊢case</a> <a id="14165" href="/20.07/TSPL/2019/Exam/#14165" class="Bound">⊢L′</a> <a id="14169" class="Symbol">_</a> <a id="14171" class="Symbol">_)</a> <a id="14174" class="Symbol">→</a> <a id="14176" href="/20.07/TSPL/2019/Exam/#10987" class="Function">ℕ≢⇒</a> <a id="14180" class="Symbol">(</a><a id="14181" href="/20.07/TSPL/2019/Exam/#11323" class="Function">uniq-↑</a> <a id="14188" href="/20.07/TSPL/2019/Exam/#14165" class="Bound">⊢L′</a> <a id="14192" href="/20.07/TSPL/2019/Exam/#14139" class="Bound">⊢L</a><a id="14194" class="Symbol">)</a> <a id="14196" class="Symbol">})</a>
|
||
<a id="14201" class="Symbol">...</a> <a id="14205" class="Symbol">|</a> <a id="14207" href="https://agda.github.io/agda-stdlib/v1.1/Relation.Nullary.html#641" class="InductiveConstructor">yes</a> <a id="14211" href="Agda.Builtin.Sigma.html#209" class="InductiveConstructor Operator">⟨</a> <a id="14213" href="/20.07/TSPL/2019/Exam/#8378" class="InductiveConstructor">`ℕ</a> <a id="14216" href="Agda.Builtin.Sigma.html#209" class="InductiveConstructor Operator">,</a> <a id="14221" href="/20.07/TSPL/2019/Exam/#14221" class="Bound">⊢L</a> <a id="14224" href="Agda.Builtin.Sigma.html#209" class="InductiveConstructor Operator">⟩</a> <a id="14226" class="Keyword">with</a> <a id="14231" href="/20.07/TSPL/2019/Exam/#12720" class="Function">inherit</a> <a id="14239" class="Bound">Γ</a> <a id="14241" class="Bound">M</a> <a id="14243" class="Bound">A</a>
|
||
<a id="14247" class="Symbol">...</a> <a id="14254" class="Symbol">|</a> <a id="14256" href="https://agda.github.io/agda-stdlib/v1.1/Relation.Nullary.html#668" class="InductiveConstructor">no</a> <a id="14259" href="/20.07/TSPL/2019/Exam/#14259" class="Bound">¬⊢M</a> <a id="14275" class="Symbol">=</a> <a id="14278" href="https://agda.github.io/agda-stdlib/v1.1/Relation.Nullary.html#668" class="InductiveConstructor">no</a> <a id="14282" class="Symbol">(λ{</a> <a id="14286" class="Symbol">(</a><a id="14287" href="/20.07/TSPL/2019/Exam/#10050" class="InductiveConstructor">⊢case</a> <a id="14293" class="Symbol">_</a> <a id="14295" href="/20.07/TSPL/2019/Exam/#14295" class="Bound">⊢M</a> <a id="14298" class="Symbol">_)</a> <a id="14301" class="Symbol">→</a> <a id="14303" href="/20.07/TSPL/2019/Exam/#14259" class="Bound">¬⊢M</a> <a id="14307" href="/20.07/TSPL/2019/Exam/#14295" class="Bound">⊢M</a> <a id="14310" class="Symbol">})</a>
|
||
<a id="14315" class="Symbol">...</a> <a id="14322" class="Symbol">|</a> <a id="14324" href="https://agda.github.io/agda-stdlib/v1.1/Relation.Nullary.html#641" class="InductiveConstructor">yes</a> <a id="14328" href="/20.07/TSPL/2019/Exam/#14328" class="Bound">⊢M</a> <a id="14331" class="Keyword">with</a> <a id="14336" href="/20.07/TSPL/2019/Exam/#12720" class="Function">inherit</a> <a id="14344" class="Symbol">(</a><a id="14345" class="Bound">Γ</a> <a id="14347" href="/20.07/TSPL/2019/Exam/#8516" class="InductiveConstructor Operator">,</a> <a id="14349" class="Bound">x</a> <a id="14351" href="/20.07/TSPL/2019/Exam/#8516" class="InductiveConstructor Operator">⦂</a> <a id="14353" href="/20.07/TSPL/2019/Exam/#8378" class="InductiveConstructor">`ℕ</a><a id="14355" class="Symbol">)</a> <a id="14357" class="Bound">N</a> <a id="14359" class="Bound">A</a>
|
||
<a id="14363" class="Symbol">...</a> <a id="14373" class="Symbol">|</a> <a id="14375" href="https://agda.github.io/agda-stdlib/v1.1/Relation.Nullary.html#668" class="InductiveConstructor">no</a> <a id="14378" href="/20.07/TSPL/2019/Exam/#14378" class="Bound">¬⊢N</a> <a id="14391" class="Symbol">=</a> <a id="14394" href="https://agda.github.io/agda-stdlib/v1.1/Relation.Nullary.html#668" class="InductiveConstructor">no</a> <a id="14398" class="Symbol">(λ{</a> <a id="14402" class="Symbol">(</a><a id="14403" href="/20.07/TSPL/2019/Exam/#10050" class="InductiveConstructor">⊢case</a> <a id="14409" class="Symbol">_</a> <a id="14411" class="Symbol">_</a> <a id="14413" href="/20.07/TSPL/2019/Exam/#14413" class="Bound">⊢N</a><a id="14415" class="Symbol">)</a> <a id="14417" class="Symbol">→</a> <a id="14419" href="/20.07/TSPL/2019/Exam/#14378" class="Bound">¬⊢N</a> <a id="14423" href="/20.07/TSPL/2019/Exam/#14413" class="Bound">⊢N</a> <a id="14426" class="Symbol">})</a>
|
||
<a id="14431" class="Symbol">...</a> <a id="14441" class="Symbol">|</a> <a id="14443" href="https://agda.github.io/agda-stdlib/v1.1/Relation.Nullary.html#641" class="InductiveConstructor">yes</a> <a id="14447" href="/20.07/TSPL/2019/Exam/#14447" class="Bound">⊢N</a> <a id="14459" class="Symbol">=</a> <a id="14462" href="https://agda.github.io/agda-stdlib/v1.1/Relation.Nullary.html#641" class="InductiveConstructor">yes</a> <a id="14466" class="Symbol">(</a><a id="14467" href="/20.07/TSPL/2019/Exam/#10050" class="InductiveConstructor">⊢case</a> <a id="14473" class="Bound">⊢L</a> <a id="14476" class="Bound">⊢M</a> <a id="14479" href="/20.07/TSPL/2019/Exam/#14447" class="Bound">⊢N</a><a id="14481" class="Symbol">)</a>
|
||
<a id="14485" href="/20.07/TSPL/2019/Exam/#12720" class="Function">inherit</a> <a id="14493" href="/20.07/TSPL/2019/Exam/#14493" class="Bound">Γ</a> <a id="14495" class="Symbol">(</a><a id="14496" href="/20.07/TSPL/2019/Exam/#9004" class="InductiveConstructor Operator">μ</a> <a id="14498" href="/20.07/TSPL/2019/Exam/#14498" class="Bound">x</a> <a id="14500" href="/20.07/TSPL/2019/Exam/#9004" class="InductiveConstructor Operator">⇒</a> <a id="14502" href="/20.07/TSPL/2019/Exam/#14502" class="Bound">N</a><a id="14503" class="Symbol">)</a> <a id="14505" href="/20.07/TSPL/2019/Exam/#14505" class="Bound">A</a> <a id="14507" class="Keyword">with</a> <a id="14512" href="/20.07/TSPL/2019/Exam/#12720" class="Function">inherit</a> <a id="14520" class="Symbol">(</a><a id="14521" href="/20.07/TSPL/2019/Exam/#14493" class="Bound">Γ</a> <a id="14523" href="/20.07/TSPL/2019/Exam/#8516" class="InductiveConstructor Operator">,</a> <a id="14525" href="/20.07/TSPL/2019/Exam/#14498" class="Bound">x</a> <a id="14527" href="/20.07/TSPL/2019/Exam/#8516" class="InductiveConstructor Operator">⦂</a> <a id="14529" href="/20.07/TSPL/2019/Exam/#14505" class="Bound">A</a><a id="14530" class="Symbol">)</a> <a id="14532" href="/20.07/TSPL/2019/Exam/#14502" class="Bound">N</a> <a id="14534" href="/20.07/TSPL/2019/Exam/#14505" class="Bound">A</a>
|
||
<a id="14538" class="Symbol">...</a> <a id="14542" class="Symbol">|</a> <a id="14544" href="https://agda.github.io/agda-stdlib/v1.1/Relation.Nullary.html#668" class="InductiveConstructor">no</a> <a id="14547" href="/20.07/TSPL/2019/Exam/#14547" class="Bound">¬⊢N</a> <a id="14566" class="Symbol">=</a> <a id="14569" href="https://agda.github.io/agda-stdlib/v1.1/Relation.Nullary.html#668" class="InductiveConstructor">no</a> <a id="14573" class="Symbol">(λ{</a> <a id="14577" class="Symbol">(</a><a id="14578" href="/20.07/TSPL/2019/Exam/#10235" class="InductiveConstructor">⊢μ</a> <a id="14581" href="/20.07/TSPL/2019/Exam/#14581" class="Bound">⊢N</a><a id="14583" class="Symbol">)</a> <a id="14585" class="Symbol">→</a> <a id="14587" href="/20.07/TSPL/2019/Exam/#14547" class="Bound">¬⊢N</a> <a id="14591" href="/20.07/TSPL/2019/Exam/#14581" class="Bound">⊢N</a> <a id="14594" class="Symbol">})</a>
|
||
<a id="14599" class="Symbol">...</a> <a id="14603" class="Symbol">|</a> <a id="14605" href="https://agda.github.io/agda-stdlib/v1.1/Relation.Nullary.html#641" class="InductiveConstructor">yes</a> <a id="14609" href="/20.07/TSPL/2019/Exam/#14609" class="Bound">⊢N</a> <a id="14627" class="Symbol">=</a> <a id="14630" href="https://agda.github.io/agda-stdlib/v1.1/Relation.Nullary.html#641" class="InductiveConstructor">yes</a> <a id="14634" class="Symbol">(</a><a id="14635" href="/20.07/TSPL/2019/Exam/#10235" class="InductiveConstructor">⊢μ</a> <a id="14638" href="/20.07/TSPL/2019/Exam/#14609" class="Bound">⊢N</a><a id="14640" class="Symbol">)</a>
|
||
<a id="14644" href="/20.07/TSPL/2019/Exam/#12720" class="Function">inherit</a> <a id="14652" href="/20.07/TSPL/2019/Exam/#14652" class="Bound">Γ</a> <a id="14654" class="Symbol">(</a><a id="14655" href="/20.07/TSPL/2019/Exam/#14655" class="Bound">M</a> <a id="14657" href="/20.07/TSPL/2019/Exam/#9054" class="InductiveConstructor Operator">↑</a><a id="14658" class="Symbol">)</a> <a id="14660" href="/20.07/TSPL/2019/Exam/#14660" class="Bound">B</a> <a id="14662" class="Keyword">with</a> <a id="14667" href="/20.07/TSPL/2019/Exam/#12616" class="Function">synthesize</a> <a id="14678" href="/20.07/TSPL/2019/Exam/#14652" class="Bound">Γ</a> <a id="14680" href="/20.07/TSPL/2019/Exam/#14655" class="Bound">M</a>
|
||
<a id="14684" class="Symbol">...</a> <a id="14688" class="Symbol">|</a> <a id="14690" href="https://agda.github.io/agda-stdlib/v1.1/Relation.Nullary.html#668" class="InductiveConstructor">no</a> <a id="14694" href="/20.07/TSPL/2019/Exam/#14694" class="Bound">¬∃</a> <a id="14712" class="Symbol">=</a> <a id="14715" href="https://agda.github.io/agda-stdlib/v1.1/Relation.Nullary.html#668" class="InductiveConstructor">no</a> <a id="14719" class="Symbol">(λ{</a> <a id="14723" class="Symbol">(</a><a id="14724" href="/20.07/TSPL/2019/Exam/#10333" class="InductiveConstructor">⊢↑</a> <a id="14727" href="/20.07/TSPL/2019/Exam/#14727" class="Bound">⊢M</a> <a id="14730" class="Symbol">_)</a> <a id="14733" class="Symbol">→</a> <a id="14735" href="/20.07/TSPL/2019/Exam/#14694" class="Bound">¬∃</a> <a id="14738" href="Agda.Builtin.Sigma.html#209" class="InductiveConstructor Operator">⟨</a> <a id="14740" class="Symbol">_</a> <a id="14742" href="Agda.Builtin.Sigma.html#209" class="InductiveConstructor Operator">,</a> <a id="14744" href="/20.07/TSPL/2019/Exam/#14727" class="Bound">⊢M</a> <a id="14747" href="Agda.Builtin.Sigma.html#209" class="InductiveConstructor Operator">⟩</a> <a id="14749" class="Symbol">})</a>
|
||
<a id="14754" class="Symbol">...</a> <a id="14758" class="Symbol">|</a> <a id="14760" href="https://agda.github.io/agda-stdlib/v1.1/Relation.Nullary.html#641" class="InductiveConstructor">yes</a> <a id="14764" href="Agda.Builtin.Sigma.html#209" class="InductiveConstructor Operator">⟨</a> <a id="14766" href="/20.07/TSPL/2019/Exam/#14766" class="Bound">A</a> <a id="14768" href="Agda.Builtin.Sigma.html#209" class="InductiveConstructor Operator">,</a> <a id="14770" href="/20.07/TSPL/2019/Exam/#14770" class="Bound">⊢M</a> <a id="14773" href="Agda.Builtin.Sigma.html#209" class="InductiveConstructor Operator">⟩</a> <a id="14775" class="Keyword">with</a> <a id="14780" href="/20.07/TSPL/2019/Exam/#14766" class="Bound">A</a> <a id="14782" href="/20.07/TSPL/2019/Exam/#10457" class="Function Operator">≟Tp</a> <a id="14786" class="Bound">B</a>
|
||
<a id="14790" class="Symbol">...</a> <a id="14796" class="Symbol">|</a> <a id="14798" href="https://agda.github.io/agda-stdlib/v1.1/Relation.Nullary.html#668" class="InductiveConstructor">no</a> <a id="14802" href="/20.07/TSPL/2019/Exam/#14802" class="Bound">A≢B</a> <a id="14818" class="Symbol">=</a> <a id="14821" href="https://agda.github.io/agda-stdlib/v1.1/Relation.Nullary.html#668" class="InductiveConstructor">no</a> <a id="14825" class="Symbol">(</a><a id="14826" href="/20.07/TSPL/2019/Exam/#12413" class="Function">¬switch</a> <a id="14834" class="Bound">⊢M</a> <a id="14837" href="/20.07/TSPL/2019/Exam/#14802" class="Bound">A≢B</a><a id="14840" class="Symbol">)</a>
|
||
<a id="14844" class="Symbol">...</a> <a id="14850" class="Symbol">|</a> <a id="14852" href="https://agda.github.io/agda-stdlib/v1.1/Relation.Nullary.html#641" class="InductiveConstructor">yes</a> <a id="14856" href="/20.07/TSPL/2019/Exam/#14856" class="Bound">A≡B</a> <a id="14872" class="Symbol">=</a> <a id="14875" href="https://agda.github.io/agda-stdlib/v1.1/Relation.Nullary.html#641" class="InductiveConstructor">yes</a> <a id="14879" class="Symbol">(</a><a id="14880" href="/20.07/TSPL/2019/Exam/#10333" class="InductiveConstructor">⊢↑</a> <a id="14883" class="Bound">⊢M</a> <a id="14886" href="/20.07/TSPL/2019/Exam/#14856" class="Bound">A≡B</a><a id="14889" class="Symbol">)</a>
|
||
</pre>
|
||
|
||
</div>
|
||
|
||
<p style="text-align:center;">
|
||
|
||
|
||
|
||
<a alt="Source code" href="https://github.com/plfa/plfa.github.io/blob/dev-20.07/courses/tspl/2019/Exam.lagda.md">Source</a>
|
||
|
||
|
||
|
||
</p>
|
||
|
||
|
||
</article>
|
||
|
||
</div>
|
||
</main><footer class="site-footer h-card">
|
||
<data class="u-url" href="/20.07/"></data>
|
||
|
||
<div class="wrapper">
|
||
|
||
<h2 class="footer-heading">Programming Language Foundations in Agda
|
||
</h2><div class="footer-col-wrapper">
|
||
<div class="footer-col footer-col-1">
|
||
<ul class="contact-list">
|
||
<li class="p-name">Philip Wadler</li>
|
||
<li><a class="u-email" href="mailto:wadler@inf.ed.ac.uk">wadler@inf.ed.ac.uk</a></li>
|
||
</ul>
|
||
</div>
|
||
|
||
<div class="footer-col footer-col-2"><ul class="social-media-list"><li><a href="https://github.com/wadler"><svg class="svg-icon"><use xlink:href="/20.07/assets/minima-social-icons.svg#github"></use></svg> <span class="username">wadler</span></a></li></ul>
|
||
</div>
|
||
|
||
<div class="footer-col footer-col-3"></div>
|
||
</div><div class="footer-col-wrapper">
|
||
<div class="footer-col footer-col-1">
|
||
<ul class="contact-list">
|
||
<li class="p-name">Wen Kokke</li>
|
||
<li><a class="u-email" href="mailto:wen.kokke@ed.ac.uk">wen.kokke@ed.ac.uk</a></li>
|
||
</ul>
|
||
</div>
|
||
|
||
<div class="footer-col footer-col-2"><ul class="social-media-list"><li><a href="https://github.com/wenkokke"><svg class="svg-icon"><use xlink:href="/20.07/assets/minima-social-icons.svg#github"></use></svg> <span class="username">wenkokke</span></a></li><li><a href="https://www.twitter.com/wenkokke"><svg class="svg-icon"><use xlink:href="/20.07/assets/minima-social-icons.svg#twitter"></use></svg> <span class="username">wenkokke</span></a></li></ul>
|
||
</div>
|
||
|
||
<div class="footer-col footer-col-3"></div>
|
||
</div><div class="footer-col-wrapper">
|
||
<div class="footer-col footer-col-1">
|
||
<ul class="contact-list">
|
||
<li class="p-name">Jeremy G. Siek</li>
|
||
<li><a class="u-email" href="mailto:jsiek@indiana.edu">jsiek@indiana.edu</a></li>
|
||
</ul>
|
||
</div>
|
||
|
||
<div class="footer-col footer-col-2"><ul class="social-media-list"><li><a href="https://github.com/jsiek"><svg class="svg-icon"><use xlink:href="/20.07/assets/minima-social-icons.svg#github"></use></svg> <span class="username">jsiek</span></a></li><li><a href="https://www.twitter.com/jeremysiek"><svg class="svg-icon"><use xlink:href="/20.07/assets/minima-social-icons.svg#twitter"></use></svg> <span class="username">jeremysiek</span></a></li></ul>
|
||
</div>
|
||
|
||
<div class="footer-col footer-col-3"></div>
|
||
</div>This work is licensed under a <a rel="license" href="https://creativecommons.org/licenses/by/4.0/">Creative Commons Attribution 4.0 International License</a>
|
||
</div>
|
||
</footer>
|
||
<!-- Import jQuery -->
|
||
<script type="text/javascript" src="/20.07/assets/jquery.js"></script>
|
||
|
||
<script src="https://cdnjs.cloudflare.com/ajax/libs/anchor-js/4.2.2/anchor.min.js" integrity="sha256-E4RlfxwyJVmkkk0szw7LYJxuPlp6evtPSBDlWHsYYL8=" crossorigin="anonymous"></script>
|
||
<script type="text/javascript">
|
||
anchors.add();
|
||
</script>
|
||
|
||
<script type="text/javascript">
|
||
|
||
// Makes sandwhich menu works
|
||
$('.menu-icon').click(function(){
|
||
$('.trigger').toggle();
|
||
});
|
||
|
||
// Script which allows for foldable code blocks
|
||
$('div.foldable pre').each(function(){
|
||
var autoHeight = $(this).height();
|
||
var lineHeight = parseFloat($(this).css('line-height'));
|
||
|
||
var plus = $("<div></div>");
|
||
var horLine = $("<div></div>");
|
||
var verLine = $("<div></div>");
|
||
$(this).prepend(plus);
|
||
plus.css({
|
||
'position' : 'relative',
|
||
'float' : 'right',
|
||
'right' : '-' + (0.5 * lineHeight - 1.5) + 'px',
|
||
'width' : lineHeight,
|
||
'height' : lineHeight});
|
||
verLine.css({
|
||
'position' : 'relative',
|
||
'height' : lineHeight,
|
||
'width' : '3px',
|
||
'background-color' : '#C1E0FF'});
|
||
horLine.css({
|
||
'position' : 'relative',
|
||
'top' : '-' + (0.5 * lineHeight + 1.5) + 'px',
|
||
'left' : '-' + (0.5 * lineHeight - 1.5) + 'px',
|
||
'height' : '3px',
|
||
'width' : lineHeight,
|
||
'background-color' : '#C1E0FF'});
|
||
plus.append(verLine);
|
||
plus.append(horLine);
|
||
|
||
$(this).height(2.0 * lineHeight);
|
||
$(this).css('overflow','hidden');
|
||
|
||
$(this).click(function(){
|
||
if ($(this).height() == autoHeight) {
|
||
$(this).height(2.0 * lineHeight);
|
||
plus.show();
|
||
}
|
||
else {
|
||
$(this).height('auto');
|
||
plus.hide();
|
||
}
|
||
});
|
||
});
|
||
</script>
|
||
|
||
<!-- Import KaTeX -->
|
||
<script type="text/javascript" src="/20.07/assets/katex.js"></script>
|
||
|
||
<!-- Script which renders TeX using KaTeX -->
|
||
<script type="text/javascript">
|
||
$("script[type='math/tex']").replaceWith(
|
||
function(){
|
||
var tex = $(this).text();
|
||
return "<span class=\"inline-equation\">" +
|
||
katex.renderToString(tex) +
|
||
"</span>";
|
||
});
|
||
$("script[type='math/tex; mode=display']").replaceWith(
|
||
function(){
|
||
var tex = $(this).text().replace(/%.*?(\n|$)/g,"");
|
||
return "<div class=\"equation\">" +
|
||
katex.renderToString("\\displaystyle "+tex) +
|
||
"</div>";
|
||
});
|
||
</script>
|
||
</body>
|
||
|
||
</html>
|