Jekyll2024-01-22T05:10:34+00:00https://younesse.net/feed.xmlyounesse.netPersonal website of Younesse Kaddar, theoretical computer science student at École Normale Supérieure Paris-Saclay, France.Younesse Kaddaryounesse.kaddar@ens-paris-saclay.fr[Cambridge Internship] Final Report2020-09-03T00:00:00+00:002020-09-03T00:00:00+00:00https://younesse.net/ARPE-report<h1 id="final-report-of-my-arpe-année-de-recherche-prédoctorale-à-létranger-research-internship-at-the-university-of-cambridge">Final report of my ARPE (Année de Recherche Prédoctorale à l’Étranger) research internship at the University of Cambridge</h1>
<blockquote>
<p>It is available <a href="/assets/ARPE_report.pdf">here</a>: <a href="/assets/ARPE_report.pdf">http://younesse.net/assets/ARPE_report.pdf</a></p>
</blockquote>
<p>You can also find the associated poster <a href="/assets/ARPE_poster.pdf">here</a>.</p>["Younesse Kaddar"]My ARPE internship report in pdf.[Sydney Internship] Final Report2019-08-29T00:00:00+00:002019-08-29T00:00:00+00:00https://younesse.net/M2-report<h1 id="final-report-of-my-m2-research-internship-at-macquarie-university-sydney">Final report of my M2 research internship at Macquarie University, Sydney</h1>
<blockquote>
<p>It is available <a href="/assets/M2_report.pdf">here</a>: <a href="/assets/M2_report.pdf">http://younesse.net/assets/M2_report.pdf</a></p>
</blockquote>
<p>You can also find the associated Why3 implementation <a href="/assets/Why3_tricocycloid/tricocyloid_to_effect-monoid.mlw">here</a> and the slides used for my presentation: <a href="/assets/Slides/M2-Internship/Final_Presentation.html">here</a>:
<a href="http://younesse.net/assets/Slides/M2-Internship/Final_Presentation.html" class="btn btn--info .btn--large"><i class="fas fa-newspaper" aria-hidden="true"></i> Sydney Internship Slides</a></p>["Younesse Kaddar"]My M2 internship report in pdf.[Oxford Internship] Final Report2018-09-05T00:00:00+00:002018-09-05T00:00:00+00:00https://younesse.net/M1-report<h1 id="final-report-of-my-m1-research-internship-at-oxford">Final report of my M1 research internship at Oxford</h1>
<blockquote>
<p>It is available <a href="/assets/M1_report.pdf">here</a>: <a href="/assets/M1_report.pdf">http://younesse.net/assets/M1_report.pdf</a></p>
</blockquote>
<p>You can also find the slides used for my presentation <a href="/assets/Slides/M1-Internship/Final_Presentation.html">here</a>:</p>
<p><a href="http://younesse.net/assets/Slides/M1-Internship/Final_Presentation.html" class="btn btn--info .btn--large"><i class="fas fa-newspaper" aria-hidden="true"></i> Oxford Internship Slides</a></p>["Younesse Kaddar"]My M1 internship report in pdf.[Oxford Internship] The Category of Event Structures2018-06-18T00:00:00+00:002018-06-18T00:00:00+00:00https://younesse.net/event-structures<style>
.notice {
margin: 2em 0 !important;
padding: 1em;
color: #494e52;
font-family: -apple-system,BlinkMacSystemFont,"Roboto","Segoe UI","Helvetica Neue","Lucida Grande",Arial,sans-serif;
font-size: .75em !important;
text-indent: initial;
background-color: #f8f9f9;
border-radius: 4px;
box-shadow: 0 1px 1px rgba(189,193,196,0.25);
}
</style>
\[\newcommand\Con[1][]{\mathrm{Con}_{#1}}
\newcommand\unit{\mathbb I}
\newcommand\carrier[1]{\underline{#1}}
\newcommand\Con[1][]{\mathrm{Con}_{#1}}
\newcommand\dc{\mathop{\downarrow}}
\newcommand\Conf[1][]{\mathcal C^{\mathrm o}(#1)}
\newcommand\Confstar[1][]{\mathcal C(#1)}
\newcommand\Path{\mathbb{P}}
\newcommand\Pathplus{\mathbb{P}_+}
\newcommand\ES{\mathcal{E}}
\newcommand\Comma[2]{#1\downarrow#2}
\newcommand\lub{\bigvee}
\newcommand\glb{\bigwedge}
\newcommand\restrict[1]{\left.\vphantom{\int}\right\lvert_{#1}}
\newcommand\C{\mathbb C}
\newcommand\D{\mathbb D}
\newcommand\Psh[1]{\hat{#1}}
\newcommand\Pshstar[1]{\widehat{#1}}
\newcommand{\Pfin}{\mathop{ {\mathcal P}_{\rm fin}}\nolimits}
\newcommand{\Hom}{\mathop{\rm Hom}\nolimits}\]
<p>My M1 intership has just begun! This time, it’s at Oxford University, under the supervision of <a href="http://www.cs.ox.ac.uk/people/ohad.kammar/main.html">Ohad Kammar</a>.</p>
<p>It will revolve around the foundations of <strong>concurrency semantics</strong>. To be more precise:</p>
<blockquote>
<p>different kinds of maps between Glynn Winskel’s event structures give rise to different kinds of concurrency models. These are expressible as monads over event structures with symmetry and rigid maps. The goal will be to describe these monads using algebraic operations and equations.</p>
</blockquote>
<p>Just like last year, I’ll try to write about it with blog posts.</p>
<p>To begin with, let’s begin with the main protagonists: <strong>event structures</strong>.</p>
<h1 id="the-category-of-event-structures">The Category of Event Structures</h1>
<h2 id="objects">Objects</h2>
<p>In broad strokes, event structures are a way to represent a set of <em>events</em> (that are part of a given process) depending on one another: events may be caused/cause/conflict with other events.</p>
<dl>
<dt>An event structure $E ≝ ⟨\carrier E, ≤_E, \Con[E]⟩$:</dt>
<dd>
<p>is given by:</p>
<ul>
<li>a poset $(\carrier E, ≤_E)$ of <em>events</em> (where $≤$ is thought of as the <em>causal dependency relation</em>) such that
<ul>
<li>for all $e∈ \carrier E$, $\dc e ≝ \lbrace e’∈\carrier E \mid e’ ≤_E e \rbrace$ (<em>downward closure</em>) is finite</li>
</ul>
</li>
<li>a <em>consistency relation</em> $\Con[E] ⊆ \Pfin(E)$ such that
<ul>
<li>for all $e∈ \carrier E$, $\lbrace e \rbrace ∈ \Con[E]$</li>
<li>$\Con[E]$ is stable under inclusion $⊆$</li>
<li>if $x ∈ \Con[E]$ and $e’ ≤_E e ∈ x$ then $x ∪ \lbrace e’ \rbrace ∈ \Con[E]$</li>
</ul>
</li>
</ul>
</dd>
<dt>Configurations of an event structure $E$:</dt>
<dd>
\[\Confstar[E] ≝ \lbrace x ⊆ \carrier E \mid x \text{ is consistent and down-closed} \rbrace\]
</dd>
</dl>
<p>where</p>
\[x \text{ is consistent} ⟺ \Pfin(x) ⊆ \Con[E]\]
<p>and</p>
\[x \text{ is down-closed} ⟺ \dc x ≝ \bigcup_{e∈ x} \dc e ⊆ x\]
<p><strong>NB</strong>: $\Conf[E]$ is the set of finite configurations.</p>
\[\left\langle E \right\rangle\]
<div class="notice">
<h3 id="section">1.</h3>
<blockquote>
\[∀ p∈\carrier E, \quad \dc p ∈ \Conf[E]\]
</blockquote>
<p>This stems from the fact that $\dc p$ is:</p>
<ul>
<li>finite by definition of $E$ being an event structure</li>
<li>down-closed, by transitivity of $≤_E$</li>
<li>
<p>consistent, as</p>
<ul>
<li>$\lbrace p \rbrace ∈ \Con[E]$</li>
<li>
<p>and by the third property of $\Con[E]$ (with $x = \lbrace p \rbrace$):
\(∀ p_1 ∈ \dc p, \lbrace p, p_1 \rbrace ∈ \Con[E]\)</p>
<p>as a result of which, by a straightforward recurrence (by setting $x = \lbrace p, p_1 \rbrace, \ldots, \lbrace p, p_1, ⋯, p_n \rbrace$):</p>
\[∀ p_1, \ldots, p_n ∈ \dc p, \, \lbrace p, p_1, \ldots, p_n \rbrace ∈ \Con[E]\]
<p>so by closure under inclusion:</p>
\[∀ p_1, \ldots, p_n ∈ \dc p, \, \underbrace{\lbrace p_1, \ldots, p_n \rbrace}_{\rlap{\text{any finite subset of } \dc p \text{ is of this form}}} ∈ \Con[E]\]
</li>
</ul>
</li>
</ul>
<h3 id="section-1">2.</h3>
<blockquote>
<p>A finite subset of events is in the consistency relation iff it occurs as a subset of a finite configuration.</p>
</blockquote>
<ul>
<li>
<p>$⟹$: if $x ∈ \Con[E]$, then $x ⊆ \dc x ≝ \bigcup_{e ∈ x} \dc e$, which is:</p>
<ul>
<li>finite, as it is a finite ($x$ is finite) union of finite (by the event structure definition) sets</li>
<li>down-closed, by transitivity of $≤_E$</li>
<li>
<p>consistent: like in the first exercise (and since any subset of $x$ is in $\Con[E]$ by closure by inclusion), we can show by recurrence that for all $y ≝ \lbrace e^{(1)}, \ldots, e^{(k)} \rbrace ∈ \Pfin(x)$:</p>
\[∀ e_1^{(1)}, \ldots, e_{n_1}^{(1)}, \dots, e_1^{(k)}, ⋯, e_{n_k}^{(k)} ∈ \dc x,\\
\, y ∪ \lbrace e_1^{(1)}, \ldots, e_{n_1}^{(1)}, \dots, e_1^{(k)}, ⋯, e_{n_k}^{(k)} \rbrace ∈ \Con[E]\]
<p>which implies, by closure under inclusion, that:</p>
\[∀ e_1^{(1)}, \ldots, e_{n_1}^{(1)}, \dots, e_1^{(k)}, ⋯, e_{n_k}^{(k)} ∈ \dc x,\\
\, \underbrace{\lbrace e_1^{(1)}, \ldots, e_{n_1}^{(1)}, \dots, e_1^{(k)}, ⋯, e_{n_k}^{(k)} \rbrace}_{\rlap{\text{any finite subset of } \dc x \text{ is of this form}}} ∈ \Con[E]\]
</li>
</ul>
</li>
<li>
<p>$⟸$: owing to the fact that any configuration is consistent.</p>
</li>
</ul>
<h3 id="section-2">3.</h3>
<blockquote>
<p>For all $e, e’∈\carrier E$, we have:
\(e ≤ e' ⟺ \Big(∀ x ∈ \Conf[E], e'∈ x ⟹ e∈ x\Big)\)</p>
</blockquote>
<ul>
<li>
<p>$⟹$: it’s due to the fact that $x$ is down-closed, as a configuration.</p>
</li>
<li>
<p>$⟸$: with $x ≝ \dc e’$, it results that $e ∈ \dc e’$, <em>i.e.</em> $e ≤ e’$</p>
</li>
</ul>
</div>
<h2 id="maps">Maps</h2>
<dl>
<dt>A map of event structures $f: E ⟶ F$:</dt>
<dd>
<p>is a function $f: \carrier E ⟶ \carrier F$ that is</p>
<ul>
<li><em>configuration preserving</em>: if $x ∈ \Conf[E]$, then $f[x] ∈ \Conf[F]$</li>
<li><em>locally injective</em>: for $x ∈ \Conf[E]$, if $e_1, e_2 ∈ x$ and $f(e_1) = f(e_2) ∈ F$, then $e_1 = e_2$</li>
</ul>
</dd>
<dt>A rigid map of event structures:</dt>
<dd>
<p>is a map that is also <em>monotone</em>: if $e_1 ≤_E e_2$, then $f(e_1) ≤_F f(e_2)$.</p>
</dd>
</dl>
<div class="notice">
<h3 id="section-3">4.</h3>
<blockquote>
<p>For any map $f: E ⟶ F$:</p>
\[∀ e ∈\carrier E, \quad \dc f e ⊆ f(\dc e)\]
</blockquote>
<p>$\dc f e$ is the smallest configuration containing $f e$, since</p>
<ul>
<li>it is a configuration</li>
<li>for any configuration $y$ such that $f e ∈ y$, $\dc f e ⊆ y$ as $y$ is down-closed</li>
</ul>
<p>And:</p>
<ul>
<li>as $f$ preserves configurations, $f[\dc e]$ is also a configuration</li>
<li>$f e ∈ f[\dc e]$</li>
</ul>
<p>so the result follows by minimality of $\dc f e$.</p>
<h3 id="section-4">5.</h3>
<blockquote>
<p>For any map $f: E ⟶ F$:</p>
\[∀ x ⊆ \carrier E, \quad \dc f [x] ⊆ f[\dc x]\]
</blockquote>
\[\begin{align*}
\dc f[x] & = \dc f\Big[\bigcup_{e∈ x} e\Big]\\
& = \dc \bigcup_{e∈ x} f(e) &&\text{(since the direct images preserve union)} \\
& = \bigcup_{e∈ x} \dc f(e) &&\text{(by definition of } \dc \text{ on sets)}\\
& ⊆ \bigcup_{e∈ x} f(\dc e) &&\text{(by the previous lemma)}\\
& = f\Big[\bigcup_{e∈ x} \dc e\Big]\\
& = f[\dc x] &&\text{(by definition of } \dc x \text{ )}
\end{align*}\]
<h3 id="section-5">6.</h3>
<blockquote>
<p>Any map $f: E ⟶ F$ is <em>causality reflecting</em> on configurations:</p>
\[∀ e_1, e_2 ∈ x ∈ \Confstar[E], \quad f e_1 ≤_F f e_2 ⟹ e_1 ≤_E e_2\]
</blockquote>
<p>If $f(e_1) ∈ \dc f (e_2) ⊆ f (\dc e_2)$, then there exists $e_0 ≤_E e_2$ such that</p>
\[f(e_1) = f(e_0)\]
<p>As the configuration $x$ is down-closed: $e_0 ∈ x$. On top of that, as $f$ is injective on the configuration $x \ni e_1, e_0$:</p>
\[e_1 = e_0\]
<p>and $e_1 = e_0 ≤_E e_2$</p>
<p><strong>NB</strong>: a map is not necessarily causality reflecting on the whole carrier set, as exemplfied by the following counter-example: if</p>
<ul>
<li>
\[\begin{align*}
\carrier E &≝ \lbrace a, b \rbrace \\
\Con[E] &≝ \lbrace \lbrace a \rbrace, \lbrace b \rbrace, ∅ \rbrace\\
a &\not≤_E b
\end{align*}\]
</li>
<li>
\[\begin{align*}
\carrier F &≝ \lbrace c \rbrace \\
\Con[F] &≝ \lbrace \lbrace c \rbrace, ∅ \rbrace&
\end{align*}\]
</li>
</ul>
<p>then the only map $f: E ⟶ F$ (sending all the elements to $c$) is not reflecting causality:</p>
\[c = f(a) ≤_F f(b) = c \quad\text{ but }\quad a \not≤ b\]
<h3 id="section-6">7.</h3>
<blockquote>
<p>Note that $f: \carrier E ⟶ \carrier F$ is</p>
<ul>
<li>monotone <em>iff</em> $∀ e ∈ \carrier E, \, f[\dc e] ⊆ \dc f(e)$</li>
<li>
<table>
<tbody>
<tr>
<td>causality reflecting on configurations <em>iff</em> $∀ x ∈ \Confstar[E], ∀ e∈ x, \, f^{-1}_{</td>
<td>x}[\dc f(e)] ⊆ \dc e$</td>
</tr>
</tbody>
</table>
</li>
</ul>
</blockquote>
<p>The proof is straightforward.</p>
<h3 id="section-7">8.</h3>
<blockquote>
<p>Any rigid map $f:E⟶F$ is configuration reflecting on configurations:</p>
\[∀ x' ⊆ x ∈ \Confstar[E], \; f[x'] ∈ \Confstar[F] ⟹ x' ∈ \Confstar[E]\]
</blockquote>
<p>Let’s show that any $x’ ⊆ x ∈ \Confstar[E]$ such that $f[x’] ∈ \Confstar[F]$ is a configuration of $E$.</p>
<ul>
<li>
<p>$x’$ is consistent, as $x$ is (and $⊆$ is transitive)</p>
</li>
<li>
<p>$x’$ is down-closed:</p>
<p>As $f[x’]$ is a configuration, hence down-closed:</p>
\[\dc f[x'] ⊆ f[x']\]
<p>But $f$ being monotone implies:</p>
\[f[\dc x'] ⊆ \dc f[x']\]
<p>So</p>
\[f[\dc x'] ⊆ f[x']\]
<p>and as taking preimages preserves inclusion and $f$ is injective on the configuration $x \supseteq x’$:</p>
\[\dc x' \overset{\small\text{injectivity}}{=} f^{-1}(f(\dc x')) ⊆ f^{-1}(f(x')) \overset{\small\text{injectivity}}{=} x'\]
</li>
</ul>
<h3 id="section-8">9.</h3>
<blockquote>
<p>Any map $f: E ⟶ F$ is rigid iff</p>
\[∀ x ∈\Conf[E], ∀ y ∈ \Conf[F], \quad y ⊆ f[x] ⟹ ∃ x' ∈ \Conf[E], \; x' ⊆ x \, ∧ \, f x' = y\]
</blockquote>
<ul>
<li>
<p>$⟹$: Let’s assume that $f$ is rigid and $y ⊆ f[x]$. Then $y ≝ f[x’]$, where $x’ ∈ \Pfin(x)$. All that remains to be shown is that $x$ is a configuration, which directly results from the previous lemma.</p>
</li>
<li>
<p>$⟸$: it’ll be sufficient to show that for all $e∈\carrier E$, $f[\dc e] ⊆ \dc f(e)$. As $f$ is a map:</p>
\[y ≝ \dc f(e) ⊆ f[\dc e]\]
<p>So there exists $\Conf[E] \ni x’ ⊆ \dc e$ such that $f x’ = y$. On top of that, $f(e) ∈ y$ so by injectivity of $f$ on the configuration $\dc e $:</p>
\[e ∈ x'\]
<p>Therefore:</p>
\[\begin{align*}
& \quad \dc e ⊆ x' &&\text{(as } x' \text{ is down-closed)} \\
⟹ & \quad f[\dc e] ⊆ \underbrace{f[x']}_{= \, y \; ≝ \; \dc f(e)} &&\text{(as images preserve inclusion)}\\
\end{align*}\]
</li>
</ul>
</div>
<h2 id="well-founded-posets">Well-founded posets</h2>
<dl>
<dt>A well-founded/finitary poset:</dt>
<dd>
<p>is a poset in which every element has only a finite number of elements below it.</p>
</dd>
</dl>
<div class="notice">
<h3 id="section-9">10.</h3>
<blockquote>
<p>Let $P$ be a well-founded poset. Then $⟨\carrier P , ≤_P , \Pfin(P)⟩$ is an event structure.</p>
</blockquote>
<p>All the properties to check are trivially true:</p>
<ul>
<li>
<p>$≤_P$ is indeed a partial order for which all the downard closures are finite (as $P$ is well-founded)</p>
</li>
<li>
<p>all the singletons are members of $\Pfin(P)$</p>
</li>
<li>
<p>$\Pfin(P)$ is stable under inclusion</p>
</li>
<li>
<p>the <em>augmentation property</em> holds, as $x ∪ \lbrace e’ \rbrace$ is finite provided $x$ is.</p>
</li>
</ul>
<h3 id="section-10">11.</h3>
<blockquote>
<p>Let $P, Q$ be well-founded posets, and $f : \carrier P
⟶ \carrier Q$ be any function. Then: $f$ is a rigid map iff $∀ p ∈ \carrier P, \; f[\dc p] = \dc f p$ and $f$ is causality reflecting.</p>
</blockquote>
<ul>
<li>
<p>$⟹$: if $f$ is a rigid map, then it is a map, and it is causality reflecting on configurations as showed previously, and for all $p ∈ \carrier P$:</p>
<ul>
<li>$f[\dc p] ⊆ \dc f p$ as $f$ is monotone</li>
<li>$\dc f p ⊆ f[\dc p]$ as shown previously (since $\dc f p$ is the smallest configuration containing $f p$)</li>
</ul>
</li>
<li>
<p>$⟸$: if $f$ is causality reflecting and $f[\dc p] = \dc fp$, then:</p>
<ul>
<li>$f$ is monotone as $f[\dc p] ⊆ \dc f p$ for all $p∈\carrier P$</li>
<li>$f$ is configuration preserving, as the image of a finite set is a finite set</li>
<li>
<p>$f$ is injective (and hence locally injective): if $f(e) = f(e’)$, then as $f$ is causality reflecting:</p>
<ul>
<li>$f(e) ≤_F f(e’)$ so $e ≤_E e’$</li>
<li>$f(e’) ≤_F f(e)$ so $e’ ≤_E e$</li>
</ul>
<p>thus $e = e’$ by antisymmetry.</p>
</li>
</ul>
</li>
</ul>
</div>
<h2 id="path-lifting-property">Path lifting property</h2>
<dl>
<dt>The category of paths $ℙ$:</dt>
<dd>
<ul>
<li><strong>Objects</strong>: finite posets (seen as event structures)</li>
<li><strong>Morphisms</strong>: rigid maps</li>
</ul>
</dd>
</dl>
<p>Let $I : ℙ ↪︎ \cal{E}$ be its full embedding in the category of event structures and rigid maps.</p>
<dl>
<dt>Comma category $I ↓ E$:</dt>
<dd>
<ul>
<li><strong>Objects</strong>: pairs $⟨P, f⟩$ where $P∈ℙ$ and $f: \carrier P ⟶ \carrier E$ is a rigid map</li>
<li><strong>Morphisms</strong>: $a : ⟨P,f⟩ ⟶ ⟨Q,g⟩$ where $a: \carrier P ⟶ \carrier Q$ is a rigid map and the following triangle commutes:</li>
</ul>
\[\begin{xy}
\xymatrix{
P \ar[rr]^a \ar[rd]_f & & Q \ar[ld]^g \\
& E &
}
\end{xy}\]
</dd>
<dt>A map $f: E ⟶ F$ satisifies the <em>path lifting property</em>:</dt>
<dd>
<p>iff any such commuting square where $P, Q ∈ ℙ$ factors into two commuting triangles:</p>
\[\begin{xy}
\xymatrix{
P \ar[r] \ar[d] & E \ar[d]^f \\
Q \ar[r] \ar@{.>}[ru] & F
}
\end{xy}\]
</dd>
</dl>
<div class="notice">
<h3 id="section-11">12.</h3>
<blockquote>
<p>We can regard $⟨\Conf[E], ⊆⟩$ as a sub-category of the comma $I ↓ E$. Is it full?</p>
</blockquote>
<p>It’s not: with</p>
<ul>
<li>$\carrier E ≝ \lbrace α, β \rbrace, \; α \not≤ β$</li>
<li>$x ≝ \lbrace α \rbrace ∈ \Conf[E]$</li>
<li>$f ≝ \begin{cases}
x &⟶ E <br />
α &\mapsto β
\end{cases}$</li>
</ul>
<p>then the following diagram commutes:</p>
\[\begin{xy}
\xymatrix{
x \ar[rr]^{f} \ar[rd]_f & & E \ar[ld]^{id} \\
& E &
}
\end{xy}\]
<p>so that $f ∈ \Hom_{I ↓ E}(x, E)$, but $f$ is not the inclusion map.</p>
<h3 id="section-12">13.</h3>
<blockquote>
<p>A rigid map $f : E ⟶ F$ satisfies the path lifting property iff:</p>
\[∀ x∈\Conf[E], ∀ y∈\Conf[F], \quad f[x] ⊆ y ⟹ ∃x'∈\Conf[E]; x⊆x' \; ∧ \; f[x'] = y\]
</blockquote>
<ul>
<li>
<p>$⟹$: Let $x∈\Conf[E]$ and $y∈\Conf[F]$ such that $f[x] ⊆ y$. Then by lifting property, the following square factors into these two triangles (where $ι_x$ and $ι_y$ are the inclusion maps):</p>
\[\begin{xy}
\xymatrix{
x \ar[r]^{ι_x} \ar[d]_{f_{|x}} & E \ar[d]^f \\
y \ar[r]_{ι_y} \ar@{.>}[ru]^{∃ \; φ} & F
}
\end{xy}\]
<p>By setting $x’ ≝ φ[y]$:</p>
<ul>
<li>$x’ ∈ \Conf[E]$: since is the image of a finite configuration by a configuration-preserving map</li>
<li>
<p>$x ⊆ x’$: as</p>
\[\begin{align*}
& \quad f[x] ⊆ y \\
⟺ & \quad \underbrace{φ[f[x]]}_{= \; ι_x[x] \, = \, x} ⊆ \underbrace{φ[y]}_{≝ \; x'} &&\text{(since taking images preserves inclusion)}\\
\end{align*}\]
</li>
<li>$f[x’] = f[φ[y]] = ι_y(y) = y$</li>
</ul>
</li>
<li>
<p>$⟸$: let $P, Q ∈ ℙ$ such that the following square commutes:</p>
\[\begin{xy}
\xymatrix{
P \ar[r]^p \ar[d]_g & E \ar[d]^f \\
Q \ar[r]_q & F
}
\end{xy}\]
<p>Then $x ≝ p[P] ∈ \Conf[E]$ and $y ≝ q[Q] ∈ \Conf[F]$ (images of finite configurations by configuration-preserving maps) are such that</p>
\[f[x] = f[p(P)] = q[g[P]] \overset{g[P] \, ⊆ \, Q}{⊆} q[Q] ≝ y\]
<p>so there exists a finite configuration $\Conf[E] \ni x’ \supseteq x$ such that $f[x’] = y$.</p>
<table>
<tbody>
<tr>
<td>By local injectivity, the function $f_{</td>
<td>x’}^{</td>
<td>y}: x’ ⟶ y$ (corestriction to $y$ of the restriction to $x’$) is <strong>bijective</strong>. One can check that its inverse ${f_{</td>
<td>x’}^{</td>
<td>y}}^{-1}$ remains a rigid map:</td>
</tr>
</tbody>
</table>
<ul>
<li>it is injective, thus locally injective.</li>
<li>it is monotone, since the map $f$ is causality reflecting on configurations (as seen previously)</li>
<li>
<p>it is configuration-preserving, that is:</p>
\[∀ \Conf[F] \ni y' ⊆ y, \; f^{-1}[y'] ∈ \Conf[E]\]
<p>It amounts to show that</p>
\[∀ x'' ⊆ x', \; y' ≝ f[x''] ∈ \Conf[F] ⟹ x'' ∈ \Conf[E]\]
<p>which results from $f$ being configuration-reflecting on the configuration $x’$ (as it is a rigid map: cf. lemma 8).</p>
</li>
</ul>
<table>
<tbody>
<tr>
<td>So by setting $φ ≝ {f_{</td>
<td>x’}^{</td>
<td>y}}^{-1} \circ q$, the result follows, as</td>
</tr>
</tbody>
</table>
\[\begin{align*}
φ \circ g & = {f_{|x'}^{|y}}^{-1} \circ \underbrace{q \circ g}_{= \, f \circ p} \\
& = p &&\text{(as } f\circ p: P ⟶ f[x] ⊆ f[x'] = y \text{ )} \\
\end{align*}\]
\[\begin{xy}
\xymatrix{
P \ar[r]^p \ar[d]_g & E \ar[d]^f \\
Q \ar[r]_q \ar@{.>}[ru]_{φ} & F
}
\end{xy}\]
</li>
</ul>
</div>["Younesse Kaddar"]Beginning of my M1 internship at Oxford University: it'll have to do with Glynn Winskel's event structures[Nottingham Internship] Final Report2017-08-15T00:00:00+00:002017-08-15T00:00:00+00:00https://younesse.net/L3-report<h1 id="final-report-of-my-research-internship">Final report of my research internship</h1>
<blockquote>
<p>It is available <a href="/assets/report_L3.pdf">here</a>: <a href="/assets/report_L3.pdf">http://younesse.net/assets/report_L3.pdf</a></p>
</blockquote>
<p>You can also find the slides used for my presentation <a href="/assets/Slides/Brunerie-omega-groupoids/Brunerie-groupoids-slides.html">here</a>:</p>
<p><a href="http://younesse.net/assets/Slides/Brunerie-omega-groupoids/Brunerie-groupoids-slides.html" class="btn btn--info .btn--large"><i class="fas fa-newspaper" aria-hidden="true"></i> Nottingham Internship Slides</a></p>["Younesse Kaddar"]My L3 internship report in pdf.[Nottingham Internship] Brunerie Type Theory, or how to concisely sum up the mess about $𝜔$-groupoids2017-07-19T00:00:00+00:002017-07-19T00:00:00+00:00https://younesse.net/Brunerie-type-theory<p>Now that you realize to what extent weak $𝜔$-groupoids are a mess, let’s have a look at a type theoretic and very concise way to define them, which is due to <a href="https://www.math.ias.edu/~gbrunerie/">Guillaume Brunerie</a>.</p>
\[\newcommand{\rec}{\mathop{\rm rec}\nolimits}
\newcommand{\ind}{\mathop{\rm ind}\nolimits} \newcommand{\inl}{\mathop{\rm inl}\nolimits} \newcommand{\inr}{\mathop{\rm inr}\nolimits}
\newcommand{\Hom}{\mathop{\rm Hom}\nolimits}
\newcommand{\Ty}{\mathop{\rm Ty}\nolimits}
\newcommand{\Tm}{\mathop{\rm Tm}\nolimits}
\newcommand{\op}{\mathop{\rm op}\nolimits}
\newcommand{\Set}{\mathop{\rm Set}\nolimits}
\newcommand{\1}{\mathbf{1}}
\newcommand{\isContr}{\mathop{\rm isContr}\nolimits}
\newcommand{\coh}{\mathop{\bf coh}\nolimits}\]
<h1 id="brunerie-type-theory-comes-in">Brunerie Type Theory comes in</h1>
<dl>
<dt>Brunerie type theory $𝔹$:</dt>
<dd>
<p>The Brunerie type theory $𝔹$ is given by these typing rules:</p>
\[𝔹\\
\cfrac{}{\bullet ⊢ \star}\quad\text{(Base type)}\\ \\ \\ \\
\cfrac{Γ ⊢ x, y : A}{Γ \vdash x ≃ y}\quad\text{(Equality rule)}\\ \\ \\ \\
\cfrac{\isContr Γ \qquad Γ ⊢ A}{Γ \vdash \coh_A^Γ : A}\quad\text{(Coherence rule)}\]
<p>where $\isContr$ (which stands for “is contractible”) is inductively defined as follows:</p>
<dl>
<dt>a context $Γ$ is contractible iff:</dt>
<dd>
<ul>
<li>$Γ = \bullet.\star$</li>
<li>or: $Γ ≝ Δ.(y:A).(p: y ≃ x)$ where $Δ$ is contractible and $x$ is a term of type $A$ in the context $Δ$</li>
</ul>
</dd>
</dl>
<p>In other words:</p>
\[\isContr (\bullet.\star) \\ \\ \\
\cfrac{\isContr Δ \qquad Δ ⊢ x: A}{\isContr Δ.(y:A).(p: x≃y)}\]
</dd>
</dl>
<hr />
<p>The intuition behind is that</p>
<ul>
<li>the elements of the base type $\star$ correspond to the elements of the set $G_0$ of the underlying globular set of the weak $ω$-groupoid.</li>
<li>if $x, y: \star$ the elements of $x ≃ y$ are the 1-arrows of $G_1(x, y)$</li>
<li>if $x, y: \star$ and $f, g: x ≃ y$, the elements of $f ≃ g$ are those of $G_1(f, g)$</li>
<li>and so on…</li>
</ul>
<p>Now, with this analogy in mind, a context $Γ ≝ \bullet.(x \; y:\star).(f \; g : x ≃ y).(α : f ≃ g)$ will be depicted as</p>
\[\begin{xy}
\xymatrix{
x\ar@/^2pc/[rr]|f="ab1"\ar@/_2pc/[rr]|{g}="ab2"&& y
}
\ar@2{->}@/_/"ab1";"ab2"|\alpha
\end{xy}\]
<hr />
<p>A context is <strong>contractible</strong> if it can be “reduced to a point”, by contracting along the arrows.</p>
<p><em>For instance</em>:</p>
<ul>
<li>
<p>the context $Γ ≝ \bullet.(x \; y \; z \; t:\star).(f : x ≃ y).(g : y ≃ z).(h : y ≃ t)$ <strong>is</strong> contractible</p>
\[\begin{xy}
\xymatrix{
&& && z \\
x\ar@/^/[rr]|f&& y\ar@/^/[rru]|g\ar@/_/[rrd]|h \\
&& && t
}
\end{xy}\]
<p>Indeed, you can contract $z$ and $y$ along $g$:</p>
\[\begin{xy}
\xymatrix{
x\ar@/^/[rr]|f&& y, z\ar@/_/[rrd]|h \\
&& && t
}
\end{xy}\]
<p>then $t$ and $y, z$ along $h$:</p>
\[\begin{xy}
\xymatrix{
x\ar@/^/[rr]|f&& y, z, t
}
\end{xy}\]
<p>and finally $x$ and $y, z, t$ along $f$:</p>
\[\begin{xy}
\xymatrix{
x, y, z, t
}
\end{xy}\]
</li>
<li>
<p>but the context $Γ’ ≝ \bullet.(x \; y \; z \; t:\star).(f : x ≃ y).(g : y ≃ z).(h \; i : y ≃ t)$ is <strong>not</strong> contractible</p>
\[\begin{xy}
\xymatrix{
&& && z \\
x\ar@/^/[rr]|f&& y\ar@/^/[rru]|g\ar@/_/[rrd]|h\ar@/^/[rrd]|i \\
&& && t
}
\end{xy}\]
<p>because there is a <em>hole</em> between $y$ and $t$ (thus, we can’t contract $y$ and $t$).</p>
<p>But if the hole is filled by a 2-arrow, like in $Γ’’ ≝ \bullet.(x \; y \; z \; t:\star).(f : x ≃ y).(g : y ≃ z).(h \; i : y ≃ t).(α ≃ h \; i)$</p>
\[\begin{xy}
\xymatrix{
&& && z \\
x\ar@/^/[rr]|f&& y\ar@/^/[rru]|g\ar@/_2pc/[rrd]|h="h"\ar@/^2pc/[rrd]|i="i" \\
&& && t
}
\ar@2{->}"h";"i"|\alpha
\end{xy}\]
<p>then it becomes contractible ($i$ and $h$ can be contracted, following which we procceed similarly to the previous example).</p>
</li>
</ul>
<hr />
<p>What about the laws (that become part of the structure, in $ω$-groupoids), such as the unit/associativity/interchange/coherence laws? They’re taken care of by Brunerie’s coherence rule, thanks to this notion of contractible contexts!</p>
<p>Let’s illustrate this with an example: for instance, the <em>associativity law</em> (along the $1$-arrows, to make things more simple (but the general case is quite similar)).</p>
<p>Let $x, y, z, t : \star, \; f : x≃y, \; g: y≃z, \; h: z≃t$ and $Γ_{x, y, z, t} ≝ \bullet.(x \; y \; z \; t : \star).(f : x ≃ y).(g : y ≃ z).(h : z ≃ t)$</p>
\[\begin{xy}
\xymatrix{
x\ar@/^/[rr]|f&& y\ar@/^/[rr]|g && z\ar@/^/[rr]|h && t
}
\end{xy}\]
<p>First, how to define composition along the $1$-arrows?</p>
<p>As</p>
<ul>
<li>
<p>the context $Γ_{x, y, z, t}$ is <em>contractible</em></p>
</li>
<li>
<p>and $Γ_{x, y, z, t} ⊢ x ≃ z$ (since $Γ_{x, y, z, t} ⊢ x, z : \star$)</p>
</li>
</ul>
<p><span>$f *_1^1 g : x ≃ z$ can be defined in $Γ_{x, y, z, t}$ as $\coh_{x ≃ z}^{Γ_{x, y, z, t}}$</span></p>
<p><span>Similarly, $(f *_1^1 g) *_1^1 h$ can be defined as $\coh_{x ≃ t}^{Γ_{x, y, z, t}}$, and we proceed analogously for $g *_1^1 h$ and $f *_1^1 (g *_1^1 h)$.</span></p>
<p>From now on, our aim is to show that there exists a term</p>
\[𝛼^1(f, g, h) : (f *_1^1 g) *_1^1 h ≃ f *_1^1 (g *_1^1 h)\]
<p>in $Γ_{x, y, z, t}$.</p>
<p>I think you’re beginning to get it: we use the contractibility of $Γ_{x, y, z, t}$ again (and the fact that $Γ_{x, y, z, t} ⊢ (f *_1^1 g) *_1^1 h ≃ f *_1^1 (g *_1^1 h)$)!</p>
<blockquote>
<p><strong>NB</strong>: Hence, Brunerie’s coherence rule is very practical when it comes to expressing the unit/associativity/interchange/coherence laws!</p>
<p><em>But there’s a catch (kind of):</em> therewith comes a whole bunch of redundant terms, such as: $\coh_{\star}^{\bullet.\star}, \; \coh_{\coh_{\star}^{\bullet.\star} ≃ x}^{\bullet.(x:\star)}, \; \ldots$</p>
</blockquote>
<hr />
<p>Right, so now we’re beginning to get the feeling as to why Brunerie’s type theory might be able to cover the notion of weak $ω$-groupoids.</p>["Younesse Kaddar"]Let's have a look at Brunerie Type Theory now![Nottingham Internship] Categories with Families: the true face of Type Theory2017-07-10T00:00:00+00:002017-07-10T00:00:00+00:00https://younesse.net/categories-with-families<blockquote>
<p>I owe special thanks to… guess who? Yes, you’ve figured it out: <a href="https://www.paolocapriotti.com/about/index.html">Paolo Capriotti</a>!</p>
</blockquote>
<p>Now it’s time to unleash the power of category theory!</p>
<p>By that, I mean that we’re about to give an algebraic notion of <strong>model of type theory</strong> <em>via</em> a particular kind of categories: the <strong>Categories with Families</strong> (which will be abbreviated <strong>CwF</strong>).</p>
\[\newcommand{\rec}{\mathop{\rm rec}\nolimits}
\newcommand{\ind}{\mathop{\rm ind}\nolimits} \newcommand{\inl}{\mathop{\rm inl}\nolimits} \newcommand{\inr}{\mathop{\rm inr}\nolimits}
\newcommand{\Hom}{\mathop{\rm Hom}\nolimits}
\newcommand{\Ty}{\mathop{\rm Ty}\nolimits}
\newcommand{\Tm}{\mathop{\rm Tm}\nolimits}
\newcommand{\op}{\mathop{\rm op}\nolimits}
\newcommand{\Set}{\mathop{\rm Set}\nolimits}
\newcommand{\1}{\mathbf{1}}
\newcommand{\b}{\bullet}\]
<h1 id="categories-with-families">Categories with Families</h1>
<dl>
<dt>a <strong>Category with Families</strong> (abbreviated CwF):</dt>
<dd>
<p>is given by</p>
<ul>
<li>a <strong>category</strong> $𝒞$, with a terminal object $\b$ (the <em>unit context</em>)</li>
<li>
<p>a <strong>presheaf</strong></p>
\[\Ty : 𝒞^{\,\op} ⟶ \Set\]
</li>
<li>
<p>a <strong>presheaf</strong> from the <a href="https://en.wikipedia.org/wiki/Category_of_elements">category of elements</a> of $\Ty$:</p>
\[\Tm : \bigg(\int_𝒞 \Ty \bigg)^{\,\op} ⟶ \Set\]
</li>
<li>
<p>for each $Γ : 𝒞, \; A : \Ty (Γ)$, the following presheaf from the <a href="https://en.wikipedia.org/wiki/Comma_category#Slice_category">slice category</a> $𝒞/Γ$</p>
\[\begin{cases}
(𝒞/Γ)^{\op} &⟶ \Set \\
(Δ, σ) &⟼ \Tm\big(Δ, \Ty(σ)(A)\big)
\end{cases}\]
<p>is <a href="https://en.wikipedia.org/wiki/Representable_functor">represented</a> by an object $(Γ.A, π_A)$</p>
</li>
</ul>
</dd>
</dl>
<p>What does all this mean?</p>
<p>For <strong>type theory</strong>, the analogy will be the following:</p>
<table>
<thead>
<tr>
<th>CwF</th>
<th>Type theory</th>
</tr>
</thead>
<tbody>
<tr>
<td>objects<br /> \(Γ, Δ, Θ, \ldots\)</td>
<td>contexts <br />\(Δ ≝ (x_1 : A_1, x_2 : A_2(x_1), x_3 : A_3(x_1, x_2), \ldots) \\≝ \b.A_1.A_2(x_1).A_3(x_1, x_2)\ldots \\ Γ ≝ (y_1 : B_1, y_2 : B_2(y_1), y_3 : B_3(y_1, y_2), \ldots)\)</td>
</tr>
<tr>
<td>morphisms<br /> \(σ : Δ ⟶ Γ, θ : Γ ⟶ Θ, \ldots\)</td>
<td>context morphisms / substitutions<br /> \(σ ≝ (t_1 : B_1, t_2 : B_1(t_1), t_3 : B_3(t_1, t_2), \ldots)\)</td>
</tr>
<tr>
<td>$\vert\Ty(𝒞)\vert$<br /> \(\Ty(Δ), \Ty(Γ), \ldots\)</td>
<td>types over a given context<br /> \(\begin{align*}\lbrace \text{ types over } Δ\rbrace &≝ \lbrace A \mid Δ ⊢ A \rbrace, \\ \lbrace \text{ types over } Γ\rbrace &≝ \lbrace B \mid Γ ⊢ B \rbrace, \ldots \\ \end{align*}\)</td>
</tr>
<tr>
<td>$\Hom_{\Ty}$<br /> \(\Ty(\underbrace{σ}_{\rlap{∈ \Hom_𝒞(Δ, Γ)}}) : \Ty(Γ) ⟶ \Ty(Δ), \ldots\)</td>
<td>type substitutions<br /> \(\begin{cases} \lbrace B \mid Γ ⊢ B \rbrace &⟶ \lbrace A \mid Δ ⊢ A \rbrace \\ \; B &⟼ B[σ]\end{cases}\)</td>
</tr>
<tr>
<td>$\bigg\vert\Tm\bigg(\int_𝒞 \Ty^{\,\op} \bigg)\bigg\vert$<br /> \(\Tm(Δ, A), \Tm(Γ, B), \ldots\)</td>
<td>terms of a given type over a given context<br /> \(\begin{align*} \lbrace \text{ terms of type } Δ \text{ over } Δ\rbrace &≝ \lbrace t \mid Δ ⊢ t : A \rbrace, \\ \lbrace \text{ terms of type } Γ \text{ over } Γ\rbrace &≝ \lbrace t \mid Γ ⊢ t : B \rbrace, \ldots \end{align*}\)</td>
</tr>
<tr>
<td>$\Hom_{\Tm}$<br /> \(\Tm(\underbrace{σ}_{\rlap{∈ \Hom_𝒞(Δ, Γ) \text{ and } \Ty(σ)(B) = A }}) : \Tm(Γ, B) ⟶ \Tm(Δ, A), \ldots\)</td>
<td>term substitutions<br /> \(\begin{cases} \lbrace t \mid Γ ⊢ t : B \rbrace &⟶ \lbrace t \mid Δ ⊢ t : A \rbrace \\ \; t &⟼ t[σ]\end{cases}\)</td>
</tr>
</tbody>
</table>
<p>But first, let’s address why it makes sense to resort to categories (in order to give a model of type theory).</p>["Younesse Kaddar"]Categories with Families[Nottingham Internship] Agda2017-06-30T00:00:00+00:002017-06-30T00:00:00+00:00https://younesse.net/agda-basics<p>Agda is a <em>dependently typed</em> functional programming language: I’ll try to make use of it to formalize $𝜔$-groupoids.</p>
<blockquote>
<p><strong>Watch out!</strong>: On macOS, when installing Agda with homebrew:</p>
<div class="language-sh highlighter-rouge"><div class="highlight"><pre class="highlight"><code> brew <span class="nb">install </span>agda
</code></pre></div> </div>
<p>if you have problems with emacs and the standard library (with errors such as <code class="language-plaintext highlighter-rouge">failed to find source of module Data.Nat</code> for instance), try this:</p>
<div class="language-sh highlighter-rouge"><div class="highlight"><pre class="highlight"><code> <span class="nb">mkdir</span> <span class="nt">-p</span> ~/.agda
<span class="nb">echo</span> /usr/local/lib/agda/standard-library.agda-lib <span class="o">>></span> ~/.agda/libraries
<span class="nb">echo </span>standard-library <span class="o">>></span> ~/.agda/defaults
</code></pre></div> </div>
<p>it took me a while to figure that out…</p>
</blockquote>
<p>For example, <a href="https://github.com/youqad/Type-Theory/blob/master/Demo/pigeonhole.agda">here</a> is my version of the <a href="https://en.wikipedia.org/wiki/Pigeonhole_principle">Pigeonhole Principle</a> in Agda:</p>
<div class="language-haskell highlighter-rouge"><div class="highlight"><pre class="highlight"><code><span class="n">open</span> <span class="kr">import</span> <span class="nn">Data.Nat</span>
<span class="n">open</span> <span class="kr">import</span> <span class="nn">Data.Nat.Base</span>
<span class="n">open</span> <span class="kr">import</span> <span class="nn">Relation.Nullary</span>
<span class="n">open</span> <span class="kr">import</span> <span class="nn">Data.Vec</span>
<span class="n">open</span> <span class="kr">import</span> <span class="nn">Data.Product</span>
<span class="n">open</span> <span class="kr">import</span> <span class="nn">Data.Empty</span>
<span class="n">open</span> <span class="kr">import</span> <span class="nn">Relation.Binary.PropositionalEquality</span>
<span class="c1">-- inspired by https://github.com/youqad/Coq_Project/blob/master/pigeonhole.v</span>
<span class="kr">module</span> <span class="err">pigeonhole</span> <span class="err">{</span><span class="nn">X</span> <span class="o">:</span> <span class="kt">Set</span><span class="p">}</span> <span class="kr">where</span>
<span class="kr">data</span> <span class="n">not</span><span class="o">-</span><span class="n">repeats</span> <span class="o">:</span> <span class="err">∀</span> <span class="p">{</span><span class="n">n</span><span class="p">}</span> <span class="err">→</span> <span class="kt">Vec</span> <span class="kt">X</span> <span class="n">n</span> <span class="err">→</span> <span class="kt">Set</span> <span class="kr">where</span>
<span class="n">base</span><span class="o">-</span><span class="n">not</span><span class="o">-</span><span class="n">repeats</span> <span class="o">:</span> <span class="n">not</span><span class="o">-</span><span class="n">repeats</span> <span class="kt">[]</span>
<span class="n">rec</span><span class="o">-</span><span class="n">not</span><span class="o">-</span><span class="n">repeats</span> <span class="o">:</span> <span class="err">∀</span> <span class="p">{</span><span class="n">x</span> <span class="n">n</span><span class="p">}</span> <span class="err">→</span> <span class="p">{</span><span class="n">l</span> <span class="o">:</span> <span class="kt">Vec</span> <span class="kt">X</span> <span class="n">n</span><span class="p">}</span> <span class="err">→</span> <span class="n">not</span><span class="o">-</span><span class="n">repeats</span> <span class="n">l</span> <span class="err">→</span> <span class="err">¬</span> <span class="p">(</span><span class="n">x</span> <span class="err">∈</span> <span class="n">l</span><span class="p">)</span> <span class="err">→</span> <span class="n">not</span><span class="o">-</span><span class="n">repeats</span> <span class="p">(</span><span class="n">x</span> <span class="err">∷</span> <span class="n">l</span><span class="p">)</span>
<span class="n">repeats</span> <span class="o">:</span> <span class="err">∀</span> <span class="p">{</span><span class="n">n</span><span class="p">}</span> <span class="err">→</span> <span class="kt">Vec</span> <span class="kt">X</span> <span class="n">n</span> <span class="err">→</span> <span class="kt">Set</span>
<span class="n">repeats</span> <span class="n">l</span> <span class="o">=</span> <span class="err">¬</span> <span class="n">not</span><span class="o">-</span><span class="n">repeats</span> <span class="n">l</span>
<span class="kr">_</span><span class="err">↪</span><span class="kr">_</span> <span class="o">:</span> <span class="err">∀</span> <span class="p">{</span><span class="n">n</span> <span class="n">m</span><span class="p">}</span> <span class="err">→</span> <span class="kt">Vec</span> <span class="kt">X</span> <span class="n">n</span> <span class="err">→</span> <span class="kt">Vec</span> <span class="kt">X</span> <span class="n">m</span> <span class="err">→</span> <span class="kt">Set</span>
<span class="n">l</span> <span class="err">↪</span> <span class="n">l'</span> <span class="o">=</span> <span class="err">∀</span> <span class="p">{</span><span class="n">x</span><span class="p">}</span> <span class="err">→</span> <span class="n">x</span> <span class="err">∈</span> <span class="n">l</span> <span class="err">→</span> <span class="n">x</span> <span class="err">∈</span> <span class="n">l'</span>
<span class="err">∈</span><span class="o">-</span><span class="n">delete</span> <span class="o">:</span> <span class="err">∀</span> <span class="p">{</span><span class="n">n</span><span class="p">}</span> <span class="err">→</span> <span class="p">(</span><span class="n">x</span> <span class="o">:</span> <span class="kt">X</span><span class="p">)</span> <span class="err">→</span> <span class="p">(</span><span class="n">l</span> <span class="o">:</span> <span class="kt">Vec</span> <span class="kt">X</span> <span class="p">(</span><span class="n">suc</span> <span class="n">n</span><span class="p">))</span> <span class="err">→</span> <span class="n">x</span> <span class="err">∈</span> <span class="n">l</span>
<span class="err">→</span> <span class="err">Σ</span><span class="p">[</span> <span class="n">l'</span> <span class="err">∈</span> <span class="kt">Vec</span> <span class="kt">X</span> <span class="n">n</span> <span class="p">]</span> <span class="p">(</span><span class="err">∀</span> <span class="p">{</span><span class="n">y</span><span class="p">}</span> <span class="err">→</span> <span class="n">y</span> <span class="err">≢</span> <span class="n">x</span> <span class="err">→</span> <span class="n">y</span> <span class="err">∈</span> <span class="n">l</span> <span class="err">→</span> <span class="n">y</span> <span class="err">∈</span> <span class="n">l'</span><span class="p">)</span>
<span class="err">∈</span><span class="o">-</span><span class="n">delete</span> <span class="n">x</span> <span class="p">(</span><span class="o">.</span><span class="n">x</span> <span class="err">∷</span> <span class="kt">[]</span><span class="p">)</span> <span class="n">here</span> <span class="o">=</span> <span class="kt">[]</span> <span class="p">,</span> <span class="n">lemma</span> <span class="p">{</span><span class="n">x</span><span class="p">}</span>
<span class="kr">where</span>
<span class="n">lemma</span> <span class="o">:</span> <span class="p">{</span><span class="n">x</span> <span class="n">y</span> <span class="o">:</span> <span class="kt">X</span><span class="p">}</span> <span class="err">→</span> <span class="n">y</span> <span class="err">≢</span> <span class="n">x</span> <span class="err">→</span> <span class="n">y</span> <span class="err">∈</span> <span class="n">x</span> <span class="err">∷</span> <span class="kt">[]</span> <span class="err">→</span> <span class="n">y</span> <span class="err">∈</span> <span class="kt">[]</span>
<span class="n">lemma</span> <span class="n">y</span><span class="err">≢</span><span class="n">x</span> <span class="n">here</span> <span class="o">=</span> <span class="err">⊥</span><span class="o">-</span><span class="n">elim</span> <span class="p">(</span><span class="n">y</span><span class="err">≢</span><span class="n">x</span> <span class="n">refl</span><span class="p">)</span>
<span class="n">lemma</span> <span class="n">y</span><span class="err">≢</span><span class="n">x</span> <span class="p">(</span><span class="n">there</span> <span class="nb">()</span><span class="p">)</span>
<span class="err">∈</span><span class="o">-</span><span class="n">delete</span> <span class="n">x</span> <span class="p">(</span><span class="n">x</span><span class="err">₁</span> <span class="err">∷</span> <span class="kt">[]</span><span class="p">)</span> <span class="p">(</span><span class="n">there</span> <span class="nb">()</span><span class="p">)</span>
<span class="err">∈</span><span class="o">-</span><span class="n">delete</span> <span class="n">x</span> <span class="p">(</span><span class="o">.</span><span class="n">x</span> <span class="err">∷</span> <span class="n">x</span><span class="err">₂</span> <span class="err">∷</span> <span class="n">l</span><span class="p">)</span> <span class="n">here</span> <span class="o">=</span> <span class="p">(</span><span class="n">x</span><span class="err">₂</span> <span class="err">∷</span> <span class="n">l</span><span class="p">)</span> <span class="p">,</span> <span class="n">lemma</span><span class="err">₂</span> <span class="p">{</span><span class="n">x</span><span class="p">}</span>
<span class="kr">where</span>
<span class="n">lemma</span><span class="err">₂</span> <span class="o">:</span> <span class="p">{</span><span class="n">x</span> <span class="n">y</span> <span class="o">:</span> <span class="kt">X</span><span class="p">}</span> <span class="err">→</span> <span class="n">y</span> <span class="err">≢</span> <span class="n">x</span> <span class="err">→</span> <span class="n">y</span> <span class="err">∈</span> <span class="n">x</span> <span class="err">∷</span> <span class="n">x</span><span class="err">₂</span> <span class="err">∷</span> <span class="n">l</span> <span class="err">→</span> <span class="n">y</span> <span class="err">∈</span> <span class="n">x</span><span class="err">₂</span> <span class="err">∷</span> <span class="n">l</span>
<span class="n">lemma</span><span class="err">₂</span> <span class="n">y</span><span class="err">≢</span><span class="n">x</span> <span class="n">here</span> <span class="o">=</span> <span class="err">⊥</span><span class="o">-</span><span class="n">elim</span> <span class="p">(</span><span class="n">y</span><span class="err">≢</span><span class="n">x</span> <span class="n">refl</span><span class="p">)</span>
<span class="n">lemma</span><span class="err">₂</span> <span class="n">y</span><span class="err">≢</span><span class="n">x</span> <span class="p">(</span><span class="n">there</span> <span class="n">y</span><span class="err">∈</span><span class="n">x</span><span class="err">∷</span><span class="n">x</span><span class="err">₂∷</span><span class="n">l</span><span class="p">)</span> <span class="o">=</span> <span class="n">y</span><span class="err">∈</span><span class="n">x</span><span class="err">∷</span><span class="n">x</span><span class="err">₂∷</span><span class="n">l</span>
<span class="err">∈</span><span class="o">-</span><span class="n">delete</span> <span class="n">x</span> <span class="p">(</span><span class="n">x</span><span class="err">₁</span> <span class="err">∷</span> <span class="n">x</span><span class="err">₂</span> <span class="err">∷</span> <span class="n">l</span><span class="p">)</span> <span class="p">(</span><span class="n">there</span> <span class="n">x</span><span class="err">∈</span><span class="n">l</span><span class="p">)</span> <span class="o">=</span> <span class="kr">let</span> <span class="n">l'</span> <span class="p">,</span> <span class="n">p</span> <span class="o">=</span> <span class="err">∈</span><span class="o">-</span><span class="n">delete</span> <span class="n">x</span> <span class="p">(</span><span class="n">x</span><span class="err">₂</span> <span class="err">∷</span> <span class="n">l</span><span class="p">)</span> <span class="n">x</span><span class="err">∈</span><span class="n">l</span>
<span class="kr">in</span> <span class="p">(</span><span class="n">x</span><span class="err">₁</span> <span class="err">∷</span> <span class="n">l'</span><span class="p">)</span> <span class="p">,</span> <span class="n">lemma</span><span class="err">₃</span> <span class="p">{</span><span class="n">p</span><span class="p">}</span>
<span class="kr">where</span>
<span class="n">lemma</span><span class="err">₃</span> <span class="o">:</span> <span class="p">{</span><span class="n">p</span> <span class="o">:</span> <span class="err">∀</span> <span class="p">{</span><span class="n">y'</span><span class="p">}</span> <span class="err">→</span> <span class="n">y'</span> <span class="err">≢</span> <span class="n">x</span> <span class="err">→</span> <span class="n">y'</span> <span class="err">∈</span> <span class="p">(</span><span class="n">x</span><span class="err">₂</span> <span class="err">∷</span> <span class="n">l</span><span class="p">)</span> <span class="err">→</span> <span class="n">y'</span> <span class="err">∈</span> <span class="n">proj</span><span class="err">₁</span> <span class="p">(</span><span class="err">∈</span><span class="o">-</span><span class="n">delete</span> <span class="n">x</span> <span class="p">(</span><span class="n">x</span><span class="err">₂</span> <span class="err">∷</span> <span class="n">l</span><span class="p">)</span> <span class="n">x</span><span class="err">∈</span><span class="n">l</span><span class="p">)}</span>
<span class="err">→</span> <span class="p">{</span><span class="n">y</span> <span class="o">:</span> <span class="kt">X</span><span class="p">}</span>
<span class="err">→</span> <span class="n">y</span> <span class="err">≢</span> <span class="n">x</span> <span class="err">→</span> <span class="n">y</span> <span class="err">∈</span> <span class="n">x</span><span class="err">₁</span> <span class="err">∷</span> <span class="n">x</span><span class="err">₂</span> <span class="err">∷</span> <span class="n">l</span>
<span class="err">→</span> <span class="n">y</span> <span class="err">∈</span> <span class="n">x</span><span class="err">₁</span> <span class="err">∷</span> <span class="n">proj</span><span class="err">₁</span> <span class="p">(</span><span class="err">∈</span><span class="o">-</span><span class="n">delete</span> <span class="n">x</span> <span class="p">(</span><span class="n">x</span><span class="err">₂</span> <span class="err">∷</span> <span class="n">l</span><span class="p">)</span> <span class="n">x</span><span class="err">∈</span><span class="n">l</span><span class="p">)</span>
<span class="n">lemma</span><span class="err">₃</span> <span class="n">y</span><span class="err">≢</span><span class="n">x</span> <span class="n">here</span> <span class="o">=</span> <span class="n">here</span>
<span class="n">lemma</span><span class="err">₃</span> <span class="p">{</span><span class="n">p</span><span class="p">}</span> <span class="n">y</span><span class="err">≢</span><span class="n">x</span> <span class="p">(</span><span class="n">there</span> <span class="n">y</span><span class="err">∈</span><span class="n">x</span><span class="err">₁∷</span><span class="n">x</span><span class="err">₂∷</span><span class="n">l</span><span class="p">)</span> <span class="o">=</span> <span class="n">there</span> <span class="p">(</span><span class="n">p</span> <span class="n">y</span><span class="err">≢</span><span class="n">x</span> <span class="n">y</span><span class="err">∈</span><span class="n">x</span><span class="err">₁∷</span><span class="n">x</span><span class="err">₂∷</span><span class="n">l</span><span class="p">)</span>
<span class="n">pigeonhole</span> <span class="o">:</span> <span class="err">∀</span> <span class="p">{</span><span class="n">n</span> <span class="n">m</span><span class="p">}</span> <span class="p">(</span><span class="n">l</span><span class="err">₁</span> <span class="o">:</span> <span class="kt">Vec</span> <span class="kt">X</span> <span class="n">n</span><span class="p">)</span> <span class="p">(</span><span class="n">l</span><span class="err">₂</span> <span class="o">:</span> <span class="kt">Vec</span> <span class="kt">X</span> <span class="n">m</span><span class="p">)</span> <span class="err">→</span> <span class="n">l</span><span class="err">₁</span> <span class="err">↪</span> <span class="n">l</span><span class="err">₂</span> <span class="err">→</span> <span class="n">m</span> <span class="o"><</span> <span class="n">n</span> <span class="err">→</span> <span class="n">repeats</span> <span class="n">l</span><span class="err">₁</span>
<span class="n">pigeonhole</span> <span class="kt">[]</span> <span class="n">l</span><span class="err">₂</span> <span class="n">l</span><span class="err">₁↪</span><span class="n">l</span><span class="err">₂</span> <span class="nb">()</span>
<span class="n">pigeonhole</span> <span class="p">(</span><span class="n">x</span> <span class="err">∷</span> <span class="n">l</span><span class="err">₁</span><span class="p">)</span> <span class="kt">[]</span> <span class="n">x</span><span class="err">∷</span><span class="n">l</span><span class="err">₁↪</span><span class="n">l</span><span class="err">₂</span> <span class="n">m</span><span class="o"><</span><span class="n">n</span> <span class="kr">_</span> <span class="n">with</span> <span class="p">(</span><span class="n">x</span><span class="err">∷</span><span class="n">l</span><span class="err">₁↪</span><span class="n">l</span><span class="err">₂</span> <span class="p">{</span><span class="n">x</span><span class="p">}</span> <span class="n">here</span><span class="p">)</span>
<span class="o">...</span> <span class="o">|</span> <span class="nb">()</span>
<span class="n">pigeonhole</span> <span class="p">{</span><span class="n">suc</span> <span class="n">n</span><span class="p">}</span> <span class="p">{</span><span class="n">suc</span> <span class="n">m</span><span class="p">}</span> <span class="n">l</span><span class="err">₁</span><span class="o">@</span><span class="p">(</span><span class="n">x</span> <span class="err">∷</span> <span class="n">l</span><span class="err">₁</span><span class="n">'</span><span class="p">)</span> <span class="n">l</span><span class="err">₂</span><span class="o">@</span><span class="p">(</span><span class="kr">_</span> <span class="err">∷</span> <span class="kr">_</span><span class="p">)</span> <span class="n">x</span><span class="err">∷</span><span class="n">l</span><span class="err">₁↪</span><span class="n">l</span><span class="err">₂</span> <span class="n">suc</span><span class="o">-</span><span class="n">m</span><span class="o"><</span><span class="n">suc</span><span class="o">-</span><span class="n">n</span>
<span class="p">(</span><span class="n">rec</span><span class="o">-</span><span class="n">not</span><span class="o">-</span><span class="n">repeats</span> <span class="n">not</span><span class="o">-</span><span class="n">repeats</span><span class="o">-</span><span class="n">l</span><span class="err">₁</span><span class="n">'</span> <span class="n">x</span><span class="err">∉</span><span class="n">l</span><span class="err">₁</span><span class="n">'</span><span class="p">)</span> <span class="n">with</span> <span class="p">(</span><span class="n">x</span><span class="err">∷</span><span class="n">l</span><span class="err">₁↪</span><span class="n">l</span><span class="err">₂</span> <span class="p">{</span><span class="n">x</span><span class="p">}</span> <span class="n">here</span><span class="p">)</span>
<span class="o">...</span> <span class="o">|</span> <span class="n">x</span><span class="err">∈</span><span class="n">l</span><span class="err">₂</span> <span class="n">with</span> <span class="p">(</span><span class="err">∈</span><span class="o">-</span><span class="n">delete</span> <span class="n">x</span> <span class="n">l</span><span class="err">₂</span> <span class="n">x</span><span class="err">∈</span><span class="n">l</span><span class="err">₂</span><span class="p">)</span>
<span class="o">...</span> <span class="o">|</span> <span class="p">(</span><span class="n">l</span><span class="err">₂</span><span class="n">'</span> <span class="p">,</span> <span class="n">p</span><span class="p">)</span> <span class="o">=</span> <span class="err">⊥</span><span class="o">-</span><span class="n">elim</span> <span class="p">((</span><span class="n">pigeonhole</span> <span class="n">l</span><span class="err">₁</span><span class="n">'</span> <span class="n">l</span><span class="err">₂</span><span class="n">'</span> <span class="n">l</span><span class="err">₁</span><span class="n">'</span><span class="err">↪</span><span class="n">l</span><span class="err">₂</span><span class="n">'</span> <span class="p">(</span><span class="n">m</span><span class="o"><</span><span class="n">n</span> <span class="n">suc</span><span class="o">-</span><span class="n">m</span><span class="o"><</span><span class="n">suc</span><span class="o">-</span><span class="n">n</span><span class="p">))</span> <span class="n">not</span><span class="o">-</span><span class="n">repeats</span><span class="o">-</span><span class="n">l</span><span class="err">₁</span><span class="n">'</span><span class="p">)</span> <span class="c1">-- p : (∀ {y} → y ≢ x → y ∈ l₂ → y ∈ l₂')</span>
<span class="kr">where</span>
<span class="n">l</span><span class="err">₁</span><span class="n">'</span><span class="err">↪</span><span class="n">l</span><span class="err">₂</span><span class="n">'</span> <span class="o">:</span> <span class="err">∀</span> <span class="p">{</span><span class="n">x'</span><span class="p">}</span> <span class="err">→</span> <span class="n">x'</span> <span class="err">∈</span> <span class="n">l</span><span class="err">₁</span><span class="n">'</span> <span class="err">→</span> <span class="n">x'</span> <span class="err">∈</span> <span class="n">l</span><span class="err">₂</span><span class="n">'</span>
<span class="n">l</span><span class="err">₁</span><span class="n">'</span><span class="err">↪</span><span class="n">l</span><span class="err">₂</span><span class="n">'</span> <span class="p">{</span><span class="n">x'</span><span class="p">}</span> <span class="n">x'</span><span class="err">∈</span><span class="n">l</span><span class="err">₁</span><span class="n">'</span> <span class="o">=</span> <span class="kr">let</span> <span class="n">x'</span><span class="err">∈</span><span class="n">l</span><span class="err">₂</span> <span class="o">=</span> <span class="p">(</span><span class="n">x</span><span class="err">∷</span><span class="n">l</span><span class="err">₁↪</span><span class="n">l</span><span class="err">₂</span> <span class="p">(</span><span class="n">there</span> <span class="n">x'</span><span class="err">∈</span><span class="n">l</span><span class="err">₁</span><span class="n">'</span><span class="p">))</span> <span class="c1">-- x' ∈ l₂ ≡ l₂' ∪ x</span>
<span class="kr">in</span> <span class="n">p</span> <span class="p">(</span><span class="n">not</span><span class="o">-</span><span class="kr">in</span><span class="o">-</span><span class="n">not</span><span class="o">-</span><span class="n">equal</span> <span class="n">x'</span><span class="err">∈</span><span class="n">l</span><span class="err">₁</span><span class="n">'</span> <span class="n">x</span><span class="err">∉</span><span class="n">l</span><span class="err">₁</span><span class="n">'</span><span class="p">)</span> <span class="n">x'</span><span class="err">∈</span><span class="n">l</span><span class="err">₂</span>
<span class="kr">where</span>
<span class="n">not</span><span class="o">-</span><span class="kr">in</span><span class="o">-</span><span class="n">not</span><span class="o">-</span><span class="n">equal</span> <span class="o">:</span> <span class="err">∀</span> <span class="p">{</span><span class="n">k</span><span class="p">}</span> <span class="p">{</span><span class="n">y</span> <span class="n">x'</span> <span class="o">:</span> <span class="kt">X</span><span class="p">}</span> <span class="p">{</span><span class="n">l</span> <span class="o">:</span> <span class="kt">Vec</span> <span class="kt">X</span> <span class="n">k</span><span class="p">}</span> <span class="err">→</span> <span class="p">(</span><span class="n">y</span> <span class="err">∈</span> <span class="n">l</span><span class="p">)</span> <span class="err">→</span> <span class="err">¬</span> <span class="p">(</span><span class="n">x'</span> <span class="err">∈</span> <span class="n">l</span><span class="p">)</span> <span class="err">→</span> <span class="n">y</span> <span class="err">≢</span> <span class="n">x'</span>
<span class="n">not</span><span class="o">-</span><span class="kr">in</span><span class="o">-</span><span class="n">not</span><span class="o">-</span><span class="n">equal</span> <span class="n">y</span><span class="err">∈</span><span class="n">l</span> <span class="n">x'</span><span class="err">∉</span><span class="n">l</span> <span class="n">y</span><span class="err">≡</span><span class="n">x</span> <span class="n">rewrite</span> <span class="n">y</span><span class="err">≡</span><span class="n">x</span> <span class="o">=</span> <span class="err">⊥</span><span class="o">-</span><span class="n">elim</span> <span class="p">(</span><span class="n">x'</span><span class="err">∉</span><span class="n">l</span> <span class="n">y</span><span class="err">∈</span><span class="n">l</span><span class="p">)</span>
<span class="n">m</span><span class="o"><</span><span class="n">n</span> <span class="o">:</span> <span class="err">∀</span> <span class="p">{</span><span class="n">m'</span> <span class="n">n'</span><span class="p">}</span> <span class="err">→</span> <span class="n">suc</span> <span class="n">m'</span> <span class="o"><</span> <span class="n">suc</span> <span class="n">n'</span> <span class="err">→</span> <span class="n">m'</span> <span class="o"><</span> <span class="n">n'</span>
<span class="n">m</span><span class="o"><</span><span class="n">n</span> <span class="p">(</span><span class="n">s</span><span class="err">≤</span><span class="n">s</span> <span class="n">suc</span><span class="o">-</span><span class="n">m</span><span class="o"><</span><span class="n">suc</span><span class="o">-</span><span class="n">n</span><span class="err">₁</span><span class="p">)</span> <span class="o">=</span> <span class="n">suc</span><span class="o">-</span><span class="n">m</span><span class="o"><</span><span class="n">suc</span><span class="o">-</span><span class="n">n</span><span class="err">₁</span>
</code></pre></div></div>["Younesse Kaddar"]Agda basics[Nottingham Internship] strict $∞$-categories in a nutshell2017-06-26T00:00:00+00:002017-06-26T00:00:00+00:00https://younesse.net/infinity-categories<blockquote>
<p>Is is still necessary to precise that <a href="https://www.paolocapriotti.com/about/index.html">Paolo Capriotti</a> is behind all that?</p>
</blockquote>
<p>$𝜔$-groupoids might be easier to grasp from a categorical point of view with strict $∞$-categories, about which I’m about to give a brief presentation <em>via</em> <strong>$2$-categories</strong> and <strong>globular sets</strong> (the latter have already been defined <a href="/strict-omega-groupoids/">here</a>).</p>
<h1 id="it-all-boils-down-to-2-categories">It all boils down to $2$-categories</h1>
<p>Everything is said in title! But wait, what are $2$-categories anyway?</p>
<h2 id="categories">Categories</h2>
<p>Let’s give yet another concise definition of <strong>categories</strong> first, which is deliberately circular, but will come in handy later when it comes to defining $2$-categories.</p>
<dl>
<dt>a <strong>category</strong> $𝒞$:</dt>
<dd>
<p>is a structure comprised of:</p>
<ul>
<li>
<p>a class of objects:</p>
\[\vert 𝒞 \vert : Set\]
</li>
<li>
<p>a function which associates a set of morphisms to each pair of objects (denoted $𝒞$ by abuse of notation):</p>
\[𝒞: \vert 𝒞 \vert ⟶ \vert 𝒞 \vert ⟶ Set\]
</li>
<li>
<p>a composition map:</p>
\[\circ: 𝒞(y, z) × 𝒞(x, y) ⟶ 𝒞(x, z)\]
</li>
<li>
<p>an identity morphism ${\rm id}_x: 𝒞(x, x)$, for all object $x$:</p>
\[{\rm id}: \prod\limits_{ x: \vert 𝒞 \vert } 𝒞(x, x)\]
</li>
</ul>
<p>such that:</p>
<ul>
<li>
<p>for each morphism $f : x ⟶ y$:</p>
\[{\rm id}_x \circ f = f = f \circ {\rm id}_y\]
</li>
<li>
<p>the following diagram commutes:</p>
\[\begin{xy}
\xymatrix{
𝒞(z, w) × 𝒞(y, z) × 𝒞(x, y)\ar@{->}[d] \ar@{->}[r] &
𝒞(y, w) × 𝒞(x, y) \ar@{->}[d] \\
𝒞(z, w) × 𝒞(x, z) \ar@{->}[r] & 𝒞(x, w)
}
\end{xy}\]
</li>
</ul>
</dd>
</dl>
<h2 id="2-categories">$2$-Categories</h2>
<p>$2$-categories come now into play!</p>
<dl>
<dt>a $2$-<strong>category</strong> $𝒞$:</dt>
<dd>
<p>is a structure comprised of:</p>
<ul>
<li>
<p>a class of objects:</p>
\[\vert 𝒞 \vert : Set\]
</li>
<li>
<p>a function which associates a <strong>category</strong> - whose objects (resp. arrows) are called <em>$1$-morphisms/$1$-cells</em> (resp. <em>$2$-morphisms/$2$-cells</em>) - to each pair of objects (still noted $𝒞$ by abuse of notation):</p>
\[𝒞: \vert 𝒞 \vert ⟶ \vert 𝒞 \vert ⟶ Cat\]
</li>
<li>
<p>a composition <strong>functor</strong>:</p>
\[\circ': 𝒞(y, z) × 𝒞(x, y) ⟶ 𝒞(x, z)\]
</li>
<li>
<p>an identity $1$-morphism ${\rm id}_x: \vert 𝒞(x, x) \vert$, for each object $x$:</p>
\[{\rm id}: \prod\limits_{ x: \vert 𝒞 \vert } \vert 𝒞(x, x) \vert\]
</li>
</ul>
<p>such that:</p>
<ul>
<li>
<p>for each object $x$, <span>${\rm id}_x$ ${\rm id}_{ {\rm id}_x}$ are identities of $\circ'$</span></p>
</li>
<li>
<p>the following diagram commutes:</p>
\[\begin{xy}
\xymatrix{
𝒞(z, w) × 𝒞(y, z) × 𝒞(x, y)\ar@{->}[d] \ar@{->}[r] &
𝒞(y, w) × 𝒞(x, y) \ar@{->}[d] \\
𝒞(z, w) × 𝒞(x, z) \ar@{->}[r] & 𝒞(x, w)
}
\end{xy}\]
</li>
</ul>
</dd>
</dl>
<hr />
<p><strong>NB</strong>: as <a href="/weak-omega-groupoids/">for 𝜔-groupoids</a>, we have a horizontal and a vertical composition:</p>
<ul>
<li>
<p><em>Horizontal Composition</em> (along the $1$-cells):</p>
\[\begin{xy}
\xymatrix{
x\ar@/^2pc/[rr]|f="ab1"\ar@/_2pc/[rr]|{f'}="ab2"&& x'\ar@/^2pc/[rr]|g="bc1"\ar@/_2pc/[rr]|{g'}="bc2" && x''
& \ar@{~>}[rr]|{\text{horizontal}}&&&
x\ar@/^2pc/[rrrr]|{g \circ' f}="a'c'1"\ar@/_2pc/[rrrr]|{g' \circ' f'}="a'c'2"&&&& x''
}
\ar@2{->}@/_/"ab1";"ab2"|\alpha
\ar@2{->}@/_/"bc1";"bc2"|{\alpha'}
\ar@2{->}@/_/"a'c'1";"a'c'2"|{\alpha' \circ' \alpha}
\end{xy}\]
</li>
<li>
<p><em>Vertical Composition</em> (along the $2$-cells):</p>
\[\begin{xy}
\xymatrix{
x\ar@/^3pc/[rr]|f="ab1"\ar[rr]|{f'}="ab2"\ar@/_3pc/[rr]|{f''}="ab3"&& x'
& \ar@{~>}[rr]|{\text{vertical}}
&&&
x\ar@/^2pc/[rr]|f="ac1"\ar@/_2pc/[rr]|{f''}="ac2"&& x'
}
\ar@2{->}"ab1";"ab2"|\alpha
\ar@2{->}"ab2";"ab3"|{\alpha'}
\ar@2{->}"ac1";"ac2"|{\alpha' \circ \alpha}
\end{xy}\]
</li>
</ul>
<p>An interchange law is given by the fact that $\circ’$ is a <strong>functor</strong>:</p>
\[\begin{cases}
\alpha: 𝒞(x, x')(f, f') \\ \alpha': 𝒞(x, x')(f', f'') \\ \beta: 𝒞(x', x'')(g, g') \\ \beta': 𝒞(x', x'')(g', g'') \\
\end{cases} ⟹ (\beta' \circ' \alpha') \circ (\beta \circ' \alpha) = (\beta' \circ \beta) \circ' (\alpha' \circ \alpha)\]
\[\begin{xy}
\xymatrix{
x\ar@/^3pc/[rr]|f="ab1"\ar[rr]|{f'}="ab2"\ar@/_3pc/[rr]|{f''}="ab3"&& x'\ar@/^3pc/[rr]|g="bc1"\ar[rr]|{g'}="bc2"\ar@/_3pc/[rr]|{g''}="bc3" && x'' \ar@{~>}@/_1pc/[rr]|{\text{horizontal}} &&
x\ar@/^3pc/[rr]|{g \circ' f}="ac1"\ar[rr]|{g' \circ' f'}="ac2"\ar@/_3pc/[rr]|{g'' \circ' f''}="ac3"&& x'
\\
&& \ar@{~>}[dd]|{\text{vertical}} && && && \ar@{~>}[dd]|{\text{vertical}} \\
&& && && && \\
&& && && && \\
x\ar@/^2pc/[rr]|f="a'b'1"\ar@/_2pc/[rr]|{f''}="a'b'2"&& x'\ar@/^2pc/[rr]|g="b'c'1"\ar@/_2pc/[rr]|{g''}="b'c'2" && x''
\ar@{~>}@/^1pc/[rr]|{\text{horizontal}}&& x\ar@/^2pc/[rrrr]|{g \circ' f}="a'c'1"\ar@/_2pc/[rrrr]|{g'' \circ' f''}="a'c'2"&&&& x''
}
\ar@2{->}"ab1";"ab2"|\alpha
\ar@2{->}"ab2";"ab3"|{\alpha'}
\ar@2{->}"bc1";"bc2"|\beta
\ar@2{->}"bc2";"bc3"|{\beta'}
\ar@2{->}"ac1";"ac2"|{\beta \circ' \alpha}
\ar@2{->}"ac2";"ac3"|{\beta' \circ' \alpha'}
\ar@2{->}"a'b'1";"a'b'2"|{\alpha' \circ \alpha}
\ar@2{->}"b'c'1";"b'c'2"|{\beta' \circ \beta}
\ar@2{->}"a'c'1";"a'c'2"|{(\beta' \circ' \alpha') \circ (\beta \circ' \alpha) = (\beta' \circ \beta) \circ' (\alpha' \circ \alpha)}
\end{xy}\]
<h1 id="strict--category">Strict $∞$-Category</h1>
<p>For a globular set $G$, <a href="/strict-omega-groupoids/">remember</a> that $j$-arrows could be seen as $i$-arrows, provided that $j>i$.</p>
<p>As a matter of fact, since</p>
\[\begin{cases}
ss = st \\
ts = tt
\end{cases}\]
<p>it follows that for all $n∈ℕ^\ast$ and $f_1, \ldots, f_n ∈ \lbrace s, t \rbrace$</p>
\[\begin{cases}
s \; f_1 \; \ldots \; f_n = s \\
t \; f_1 \; \ldots \; f_n = t
\end{cases}\]
<p>So if $i < j < k$,</p>
<ul>
<li>$G_k$ can be seen as a set of arrows whose sources and targets are in $G_j$</li>
<li>$G_j$ can be seen as a set of arrows whose sources and targets are in $G_i$</li>
</ul>
\[\begin{xy}
\xymatrix{
G_k\ar@<-.6ex>[d]|s="s1"\ar@<.6ex>[d]|t="t1" \\
\vdots\ar@<-.6ex>[d]|s="s1"\ar@<.6ex>[d]|t="t1" &&& G_k\ar@<-.6ex>[d]|s="s1"\ar@<.6ex>[d]|t="t1" \\
G_j\ar@<-.6ex>[d]|s="s1"\ar@<.6ex>[d]|t="t1" & \ar@{~>}[r] & & G_j\ar@<-.6ex>[d]|s="s1"\ar@<.6ex>[d]|t="t1" \\
\vdots\ar@<-.6ex>[d]|s="s1"\ar@<.6ex>[d]|t="t1" &&& G_i\\
G_i
}
\end{xy}\]
<dl>
<dt>a strict $∞$-<strong>category</strong> $𝒞$:</dt>
<dd>
<p>is a structure comprised of:</p>
<ul>
<li>a globular set $G ≝ \bigsqcup\limits_{n≥0} G_n$</li>
<li>
<p>For all $i, j$ with $i < j$, a category-structure on</p>
\[\begin{xy}
\xymatrix{
G_j\ar@<-.6ex>[d]|s="s1"\ar@<.6ex>[d]|t="t1" \\
G_i
}
\end{xy}\]
<p>such that for all $k > j$</p>
\[\begin{xy}
\xymatrix{
G_k\ar@<-.6ex>[d]|s="s1"\ar@<.6ex>[d]|t="t1" \\
G_j\ar@<-.6ex>[d]|s="s1"\ar@<.6ex>[d]|t="t1" \\
G_i
}
\end{xy}\]
<p>forms a 2-category</p>
<p>$\not\dashv$</p>
</li>
</ul>
</dd>
</dl>["Younesse Kaddar"]$𝜔$-groupoids might be easier to grasp from a categorical point of view with $∞$-categories[Nottingham Internship] weak $𝜔$-groupoids: the DIY way2017-06-23T00:00:00+00:002017-06-23T00:00:00+00:00https://younesse.net/weak-omega-groupoids<h1 id="handmade-partial-construction">Handmade partial construction</h1>
<p>Let’s take a look at what $G_1$ and $G_2$ look like in Type Theory, if $G ≝ \bigsqcup\limits_{n≥0} G_n$ is a <strong>weak</strong> $𝜔$-groupoid: the laws of $G_n$ now become elements of $G_{n+1}$, which themselves induce new coherence laws at level $G_{n+2}$, which themselves… and so on.</p>
<h3 id="g_1">$G_1$</h3>
<ul>
<li>
<p><em>Identity</em>:</p>
\[{\rm id}^1 (\_ ) : \prod\limits_{a: G_0} G_1(a, a)\]
</li>
<li>
<p><em>Inverse</em>:</p>
\[{\rm inv}^1 (\_ , \_ ) : \prod\limits_{a, b: G_0} G_1(a, b) ⟶ G_1(b, a)\]
</li>
<li>
<p><em>Composition</em>:</p>
\[*^1_1
(\_ , \_ , \_ ) : \prod\limits_{a, b, c: G_0} G_1(a, b) × G_1(b, c) ⟶ G_1(a, c)\]
</li>
</ul>
<h3 id="g_2">$G_2$</h3>
<ul>
<li>
<p><em>Associativity along the $1$-arrows</em>:</p>
\[𝛼^1
(\_ , \_ , \_ ) : \prod\limits_{f, g, h: G_1} G_2((f *_1^1 g) *_1^1 h, \; f *_1^1 (g *_1^1 h))\]
</li>
<li>
<p><em>Left identity law</em>:</p>
\[𝜆^1
(\_ ) : \prod\limits_{f: G_1} G_2(({\rm id}^1_{s f} *_1^1 f), \; f)\]
</li>
<li>
<p><em>Right identity law</em>:</p>
</li>
</ul>
\[𝜌^1
(\_ ) : \prod\limits_{f: G_1} G_2((f *_1^1 {\rm id}^1_{t f}), \; f)\]
<ul>
<li><em>Left inverse law</em>:</li>
</ul>
\[l^1
(\_ ) : \prod\limits_{f: G_1} G_2(({\rm inv}^1_{sf, tf}(f) *_1^1 f), \; {\rm id}^1_{t f})\]
<ul>
<li><em>Right inverse law</em>:</li>
</ul>
\[r^1
(\_ ) : \prod\limits_{f: G_1} G_2((f *_1^1 {\rm inv}^1_{sf, tf}(f)), \; {\rm id}^1_{s f})\]
<hr />
<ul>
<li>
<p><em>Identity</em>:</p>
\[{\rm id}^2 (\_ ) : \prod\limits_{f: G_1} G_2(f, f)\]
</li>
<li>
<p><em>Inverse</em>:</p>
\[{\rm inv}^2 (\_ , \_ ) : \prod\limits_{f, g: G_1} G_2(f, g) ⟶ G_2(g, f)\]
</li>
<li>
<p><em>Horizontal Composition</em> (along the $1$-arrows):</p>
\[*^2_1: \prod\limits_{x, x', x'': G_0}\prod\limits_{f, f': G_1(x, x'), g, g': G_1(x', x'')} G_2(f, f') × G_2(g, g') ⟶ G_2(f *_1^1 g, \, f' *_1^1 g')
\\
\begin{xy}
\xymatrix{
x\ar@/^2pc/[rr]|f="ab1"\ar@/_2pc/[rr]|{f'}="ab2"&& x'\ar@/^2pc/[rr]|g="bc1"\ar@/_2pc/[rr]|{g'}="bc2" && x''
}
\ar@2{->}@/_/"ab1";"ab2"|\alpha
\ar@2{->}@/_/"bc1";"bc2"|{\alpha'}
\end{xy}
\\
\cfrac{𝛼:G_1(x, x')\\ 𝛼': G_1(x', x'')}{𝛼 *_1^2 𝛼': G_1(x, x'')}\]
</li>
<li>
<p><em>Vertical Composition</em> (along the $2$-arrows):</p>
\[*^2_2: \prod\limits_{x, x': G_0}\prod\limits_{f, f', f'': G_1(x, x')} G_2(f, f') × G_2(f', f'') ⟶ G_2(f, f'') \\
\\
\begin{xy}
\xymatrix{
x\ar@/^3pc/[rr]|f="ab1"\ar[rr]|{f'}="ab2"\ar@/_3pc/[rr]|{f''}="ab3"&& x'
}
\ar@2{->}"ab1";"ab2"|\alpha
\ar@2{->}"ab2";"ab3"|{\alpha'}
\end{xy} \\
\\
\cfrac{𝛼:G_2(f, f')\\ 𝛼': G_2(f', f'')}{𝛼 *_2^2 𝛼': G_2(f, f'')}\]
</li>
</ul>
<h3 id="g_3-and-so-on">$G_3$, and so on</h3>
<p>At level $3$, in addition to that, we’ve got to take into account</p>
<ul>
<li>
<p><em>interchange law</em>:</p>
\[\begin{xy}
\xymatrix{
x\ar@/^3pc/[rr]|f="ab1"\ar[rr]|{f'}="ab2"\ar@/_3pc/[rr]|{f''}="ab3"&& x'\ar@/^3pc/[rr]|g="bc1"\ar[rr]|{g'}="bc2"\ar@/_3pc/[rr]|{g''}="bc3" && x'' \ar@{~>}@/_1pc/[rr]|{\text{horizontal}} &&
x\ar@/^3pc/[rr]|{f *_1^1 g}="ac1"\ar[rr]|{f' *_1^1 g'}="ac2"\ar@/_3pc/[rr]|{f'' *_1^1 g''}="ac3"&& x'
\\
&& \ar@{~>}[dd]|{\text{vertical}} && && && \ar@{~>}[dd]|{\text{vertical}} \\
&& && && && \\
&& && && && \\
x\ar@/^2pc/[rr]|f="a'b'1"\ar@/_2pc/[rr]|{f''}="a'b'2"&& x'\ar@/^2pc/[rr]|g="b'c'1"\ar@/_2pc/[rr]|{g''}="b'c'2" && x''
\ar@{~>}@/^1pc/[rr]|{\text{horizontal}}&& x\ar@/^2pc/[rrrr]|{f *_1^1 g}="a'c'1"\ar@/_2pc/[rrrr]|{f'' *_1^1 g''}="a'c'2"&&&& x''
}
\ar@2{->}"ab1";"ab2"|\alpha
\ar@2{->}"ab2";"ab3"|{\alpha'}
\ar@2{->}"bc1";"bc2"|\beta
\ar@2{->}"bc2";"bc3"|{\beta'}
\ar@2{->}"ac1";"ac2"|{\alpha *_1^2 \beta}
\ar@2{->}"ac2";"ac3"|{\alpha' *_1^2 \beta'}
\ar@2{->}"a'b'1";"a'b'2"|{\alpha *_2^2 \alpha'}
\ar@2{->}"b'c'1";"b'c'2"|{\beta *_2^2 \beta'}
\ar@2{->}"a'c'1";"a'c'2"|{(\alpha *_1^2 \beta) *_2^2 (\alpha' *_1^2 \beta') = (\alpha *_2^2 \alpha') *_1^2 (\beta *_2^2 \beta')}
\end{xy}\]
</li>
<li>
<p>the different compositions $*_1^3, *_2^3, *_3^3$</p>
</li>
<li>
<p>new coherence laws between the previous ones</p>
</li>
</ul>["Younesse Kaddar"]Handmade partial construction of a weak $𝜔$-groupoid.