Compare changes

Choose any two refs to compare.

Changed files
+581
Martinfest
+581
Martinfest/main.typ
···
+
#import "@preview/touying:0.6.1": *
+
#import "@preview/fletcher:0.5.8" as fletcher: diagram, node, edge
+
+
#import themes.simple: *
+
#set text(font: "Junicode")
+
#show: simple-theme.with(
+
aspect-ratio: "16-9",
+
footer-right: [],
+
header: []
+
)
+
+
+
#title-slide[
+
== What Do Mapping Cylinders Classify?
+
#v(1em)
+
_In Celebration of Martín Escardó’s 60#super[th] Birthday_
+
+
#v(1.5em)
+
+
J. Sterling#footnote[Computer Laboratory, University of Cambridge]
+
+
#text(size: 0.8em)[17#super[th] December 2025]
+
]
+
+
== A parable inspired by Martín’s mathematics
+
I used to think about axioms as a way to “tame” the unruly environment.
+
#pause
+
+
So you put on your pith helmet and come in with your big and loud machines and terraform the mathematical world. It is a good day’s work.
+
#pause
+
+
Everything is very “civilised”: the sticky saps dry up, the buzzing insects zip away, and the last scurrying critters scatter to their holes.
+
#pause
+
+
Finally, all resistance muzzled, we can…show that the spectrum of a ring is a topological space.
+
+
==
+
+
But the thing about those little critters and buzzing bees and the sap that gets between your toes is—these entities were already an ecosystem with its own topology, geometry, arithmetic, computation—all intertwined together.
+
+
==
+
#pause
+
+
I now consider myself more of an _ecologist_ than a mathematician.#pause
+
+
I wish to be as quiet as I possibly can, so I may hear the chirping, #pause chittering, #pause barking, #pause and buzzing #pause of the little creatures of little mathematics who,\ #pause
+
\
+
#h(1em)like a soap bubble,\ #pause
+
\
+
vanish with the first application of force.
+
+
==
+
+
So thank you, Martín, for showing me by example how to listen.
+
+
==
+
+
I would like to share with you some things I have learned recently about partial map classifiers and their generalisations.
+
+
Some of this I learned from my collaborations with my students Leoni Pugh and Lingyuan Ye respectively.
+
+
== Synthetic topology in a lattice context
+
+
#let DL = $bold("DL")$
+
#let ALG = $bold("Alg")_Sigma$
+
#let TYPE = $bold("Type")$
+
#let PROP = $bold("Prop")$
+
#let SET = $bold("Set")$
+
#let Spec = $op("Spec", limits: #false)_Sigma$
+
#let Obs = $cal(O)_Sigma$
+
#let CoObs = $cal(O)_(Sigma^(op))$
+
+
#let myprod(x,X) = $product_((#x:#X))$
+
#let mysum(x,X) = $sum_((#x:#X))$
+
#let II = $bb(I)$
+
#let Horn = $Lambda^bold(2)_bold(1)$
+
#let CoLift = $sans("L")^bullet$
+
#let Lift = $sans("L")^bullet.stroked$
+
#let LiftFam = $op(sans("L"))^bullet.stroked$
+
#let MCyl = $sans("M")^bullet.stroked$
+
#let ClMCyl = $sans("M")^bullet$
+
#let MCylFam = $op(sans("M"))^bullet.stroked$
+
#let ret = $eta^bullet.stroked$
+
#let opmod(p) = $#math.class("unary", sym.circle)_#p$
+
#let clmod(p) = $#math.class("unary", sym.circle.filled)_#p$
+
#let fib(f,x) = $sans("fib")_#f (#x)$
+
+
Let $Sigma$ be a bounded distributive lattice, _i.e._ an object of #DL.
+
#pause
+
+
A $Sigma$-algebra is a bounded distributive lattice equipped with a homomorphism from $Sigma$, _i.e._ an object of $ALG :equiv Sigma arrow.b #DL$.
+
+
#pause
+
+
Each lattice $Sigma$ determines an “intrinsic” or “synthetic” topology, \ notions of open and closed subspace, partial map, _etc_.
+
#pause
+
+
Similar to _synthetic (domain theory, topology, algebraic geometry, _etc._)_ \ and _Abstract Stone Duality_ (Taylor), but we do not assume axioms\ globally: our language is HoTT/UF.
+
+
==
+
#pause
+
+
The _*spectrum*_ of a $Sigma$-algebra $A$ is the space of homomorphisms
+
$ Spec A :equiv ALG(A, Sigma), $
+
#pause
+
and the _*observational algebra*_ of a type $X$ is the product of algebras
+
$ Obs X :equiv Sigma^X $
+
+
#pause
+
This is a contravariant adjunction
+
$
+
Obs tack.l Spec colon ALG^"op" -> SET
+
$
+
whose fixed points we call _*quasi-coherent algebras*_ and _*affine sets*_ respectively.
+
+
==
+
+
Many basic shapes arise as spectrums. For example, cubes and simplices:
+
+
$
+
II^n &= Spec Sigma[sans(x)_1,...,sans(x)_n]\
+
Delta^n &= Spec Sigma[sans(x)_1,...,sans(x)_n] #math.class("relation", sym.slash) sans(x)_i >= sans(x)_(i+1)
+
$
+
+
Some important shapes are _not_ spectrums, _e.g._ the generic inner horn $Horn$ obtained by glueing the interval onto itself end-to-end.
+
+
==
+
+
The interval $II$ is both a space (the spectrum of $Sigma[sans(x)]$) and the underlying \ set of the algebra $Sigma$.
+
+
+ Geometrical: interval is a figure shape for _homotopy_.
+
+ Logical: the inclusion ${1} arrow.r.hook II$ determines a notion\ of _open subspace_.
+
+
+
+
+
== Example: Phoa's principle
+
The following are equivalent for a $Sigma$-algebra $A$:
+
+
+ The “generalised Phoa principle” (S. & Ye) holds for $A$.
+
+ For any element $alpha in A^II$ we have $alpha(i) = alpha(0) or floor.l i floor.r and alpha(1)$.
+
+ The path space $A^II$ classifies the canonical (lattice) order on $A$.
+
+ The polynomial $Sigma$-algebra $A[sans(x)]$ is quasi-coherent.
+
+
#line(length: 100%, stroke: gray)
+
+
Phoa's principle from _synthetic domain theory_ states $Sigma$ itself satisfies the property above. Implications for synthetic higher categories too.
+
+
==
+
Other useful assumptions emerge by studying the monotone indicator function
+
$ [-] colon Sigma -> PROP$ of the top element $1 in Sigma$.
+
+
+ $Sigma$ is _strict_ when $[-] colon Sigma -> PROP$ preserves the empty join.
+
+ $Sigma$ is _local_ when $[-] colon Sigma -> PROP$ preserves finite joins.
+
+ $Sigma$ is _conservative_ when $[-] colon Sigma -> PROP$ is an embedding.
+
+ $Sigma$ is _dominant_ when it is conservative and the subuniverse $[-]colon Sigma arrow.r.hook PROP$ is closed under internal sums.
+
+
*NB*: if every quotient of $Sigma$ by finitely many equations is quasi-coherent, then both $Sigma$ and $Sigma^(op)$ are dominant (S. & Ye; _cf._ Cherubini _et al._).
+
+
+
== Observations and open subspaces
+
+
Let $X$ be a space. An _observation_ of $X$ is an element of the observational algebra $Obs(X)$, _i.e._ a function $phi colon X -> II$.
+
+
Pulling back along ${1} arrow.r.hook II$, we obtain the corresponding _open subspace_:
+
+
#align(center)[
+
#diagram(
+
cell-size: 15mm,
+
label-sep: 0em,
+
$
+
X.phi edge(->) edge("d", "hook->") & {1} edge("d", "hook->")\
+
X edge(phi, ->, label-side: #right) & II
+
$,
+
node((.5,.5), [_cart._]),
+
)
+
]
+
+
== Open subspaces and open embeddings
+
+
We shall refer to an arrow of the form $U arrow.r.hook X$ arising from some observation as an _open embedding_. A _cloven open embedding_ is defined \ to be an open embedding equipped with an observation whence it arises.
+
+
When $Sigma$ is conservative, all open embeddings are canonically cloven.
+
+
== Closed subspaces and closed embedding
+
+
By duality, a _closed embedding_ is an embedding $K arrow.r.hook X$ arising from an observation $phi in CoObs(X)$ in the *dual lattice context*. In terms of $Sigma$, this\ is a pullback of the inclusion ${0} arrow.r.hook II$.
+
+
== Open partial maps
+
+
An open partial map from $X$ to $Y$ is defined to be a _span_
+
#align(center)[
+
#diagram(
+
cell-size: 15mm,
+
label-sep: 0em,
+
$
+
Y& U edge("d", "hook->") edge("l", ->)\
+
& X
+
$
+
)
+
]
+
in which $U arrow.r.hook X$ is an open embedding.
+
+
== Cloven open partial maps
+
+
A _cloven_ open partial map from $X$ to $Y$ is a partial map equipped with a _cleaving_ for its constituent open embedding:
+
#align(center)[
+
#diagram(
+
cell-size: 15mm,
+
label-sep: 0em,
+
$
+
Y& U edge("d", "hook->") edge("l", ->) edge("r", ->) & {1} edge("d", "hook->")\
+
& X edge("r", ->, label-side: #right) & II
+
$,
+
node((1.5,.5), [_cart._]),
+
)
+
]
+
+
== The (cloven) open partial map classifier
+
+
The _partial product_ of the generic open embedding ${1} arrow.r.hook II$ with a\ space $Y$ classifies cloven open partial maps into $Y$. Defining
+
$Lift(Y) :equiv mysum(i,II) Y^([i]) $, we consider the following open embedding:
+
#align(center)[
+
#diagram(
+
cell-size: 15mm,
+
label-sep: 0em,
+
$
+
Y edge("d", ret_Y, "hook->") edge("r", ->) & {1} edge("d", "hook->")\
+
Lift(Y) edge("r", label: pi, ->, label-side: #right) & II
+
$,
+
node((.5,.5), [_cart._]),
+
)
+
]
+
+
== The (cloven) open partial map classifier (_cntd._)
+
+
Every cloven open partial map from $X$ to $Y$ arises from a _unique_ function $X -> Lift(Y)$ in the following way:
+
#align(center)[
+
#diagram(
+
cell-size: 15mm,
+
label-sep: 0em,
+
$
+
Y edge("d", "hook->") & U edge("d", "hook->") edge("l", ->) edge("r", ->) & {1} edge("d", "hook->")\
+
Lift(Y) & X edge("l", "-->", label: exists!, label-side: #left) edge("r", ->, label-side: #right) & II
+
$,
+
node((1.5,.5), [_cart._]),
+
node((.5,.5), [_cart._]),
+
)
+
]
+
+
+
*Reminder:* when $Sigma$ is conservative, we can forget all the cleavings.
+
+
== The undefined partial element
+
+
When $Sigma$ is strict, _i.e._ we have $0 != 1$, the empty subset is open so we have:
+
#align(center)[
+
#diagram(
+
cell-size: 15mm,
+
label-sep: 0em,
+
$
+
X edge("d", "hook->") & bold(0) edge("d", "hook->") edge("l", "hook->", label: !_X) edge("r", ->) & {1} edge("d", "hook->")\
+
Lift(X) & bold(1) edge("l", "hook-->", label: "und"_X, label-side: #left) edge("r", ->, label-side: #right, label: "0") & II
+
$,
+
node((1.5,.5), [_cart._]),
+
node((.5,.5), [_cart._]),
+
)
+
]
+
+
Here, $"und"_X colon bold(1) arrow.r.hook Lift(X)$ is a _closed embedding_.
+
+
== The “other” universal property of the partial map classifier
+
+
In ordinary domain/category/topos theory, the open partial map classifier $Lift(X)$ is _also_ the *Sierpiński cone* $X_bot$, which freely adds a bottom point.
+
+
#align(center)[
+
#diagram(
+
cell-size: 15mm,
+
label-sep: 0em,
+
$
+
X edge("d", ->) edge("r", ->, label: 1_X) & X edge("d", "hook->", label: iota_X, label-side: #left)\
+
bold(1) edge("r", "hook->", label-side: #right, label: bot) & X_bot
+
$,
+
node((.5,.5), $arrow.tr.double$),
+
)
+
#h(2em)
+
#diagram(
+
cell-size: 15mm,
+
label-sep: 0em,
+
$
+
X edge("d", ->) edge("r", "hook->", label: (0,X)) & II times X edge("d", "hook->", label: gamma_X, label-side: #center) & edge("l", "hook->", (1,X)) X edge("dl", "hook->", label: iota_X, label-angle: #auto, label-side: #left)\
+
bold(1) edge("r", "hook->", label-side: #right, label: bot) & X_bot
+
$,
+
node((.5,.5), [_cocart._]),
+
)
+
]
+
+
*NB*: $bot$ is _closed_ in $X_bot$, and $iota_X$ is an _open embedding_ as soon as $Sigma$ is strict.
+
+
==
+
This is to say that the following evident square is cocartesian:
+
#align(center)[
+
#diagram(
+
cell-size: 15mm,
+
label-sep: 0em,
+
$
+
X edge("d", "hook->") edge("r", ->, label: (0, X)) & II times X edge("d", "hook->", label-side: #left, label: "glue"_X)\
+
bold(1) edge("r", label: "und"_X, ->, label-side: #right) & Lift(X)
+
$,
+
node((.5,.5), [_cocart._]),
+
)
+
]
+
where $"glue"_X$ is the evident inclusion.
+
+
*This _must not_ hold synthetically for _generic_ $X$.*
+
+
== A Brouwerian counterexample
+
+
If induced comparison map $X_bot -> Lift(X)$ is an equivalence for _generic_ $X$, then naturally each $[i]_bot -> Lift [i]$ is an equivalence. But
+
$
+
[i]_bot &= { j : II | j=0 or i=1}\
+
Lift [i] &= { j : II | j=1 -> i=1 }
+
$
+
+
and so for any $j <= i$ we may conclude either $j=0$ or $i=1$. Considering $j :equiv i$ we therefore have $i=0 or i=1$, which makes all spaces codiscrete. When $II$ is strict, this makes the boundary inclusion $bold(2) arrow.r.hook II$ an equivalence.
+
+
== Let the critters speak!
+
+
In domains/categories/toposes, $X_bot -> Lift(X)$ is an equivalence for _global_ $X$, not for _generic_ $X$. We could use a $flat$-modality or switch to the Mitchell--Bénabou language to safely assert it only for global things.
+
+
But I am more interested in powering down the engines so that we can _hear_ what the spaces are telling us in their own terms.
+
+
== What the critters told me
+
+
+ It is not fair to compare $X_bot$ with $Lift(X)$ without fixing a universe of discourse, which (in synthetic mathematics) means an _accessible reflective subuniverse_ in which to compute the pushout $X_bot$.
+
+
+ “All” the comparison maps $X_bot -> Lift(X)$ is far too large a left class to generate a reflective subuniverse, but *this localisation is nonetheless accessible and reflective*, and the presentation is _extremely_ small.
+
+
+ For free we get a _limit-style_ computation of _mapping cylinders_ (Artin glueings) without higher inductive types.
+
+
== The main result
+
+
_*Definition.*_ A type $X$ is called _$[0]$-connected_ when either of the following equivalent conditions hold:
+
+ The function space $X^[0]$ is contractible.
+
+ The injection $X -> [0] * X$ into the _join_ is an equivalence.
+
+
_*Remark.*_ The comparison map $X_bot -> Lift(X)$ exists as soon as $X$ is $[0]$-connected.
+
+
_*Definition.*_ A type $C$ is called _Sierpiński complete_ when the restriction map
+
$(Lift(X) -> C) -> (X_bot -> C)$
+
is an equivalence for generic $[0]$-connected $X$.
+
+
== The main result (_cntd._)
+
+
_*Theorem.*_ A type $C$ is Sierpiński complete if and only if the _little_ comparison map
+
$(Lift [i] -> C) -> ([i]_bot -> C)$ is an equivalence for all $i:II$.
+
+
_*Remark.*_ When $Sigma$ is conservative, the above is a slight _strengthening_ of the Segal condition for synthetic $(infinity,1)$-categories.
+
+
+
#line(length: 100%)
+
+
Last year I proved a restricted version for $0$-truncated $C$. Last month, I proved it unconditionally in Martin-Löf’s intensional type theory with function extensionality, for an arbitrary bounded partial order $Sigma$.
+
+
= Some dependently typed geometry
+
+
==
+
Many geometrical constructions expressed globally are actually _sums_ of simpler structures that can only be written down in type theory.
+
+
These type theoretic constructions are deeply suggestive…
+
+
== Open and closed modalities
+
Given $P:PROP$, we may form the _open modality_ $ opmod(P) X :equiv X^P $
+
and the _closed modality_ $ clmod(P) X :equiv P * X. $
+
+
Here, open/closed refers not to the topology induced by $Sigma$ but rather to the partitioning of the ambient higher topos $cal(E)$ into open/closed subtoposes. Nonetheless, there is a startling connection.
+
+
== $Lift(X)$ _vs._ $X_bot$ in terms of modalities
+
+
#let isf(i) = $chevron.l #i chevron.r$
+
+
The partial map classifier with respect to $Sigma$ is the _sum_ of all the open modalities $opmod([i])$, as we have $Lift(X) equiv mysum(i,II) opmod([i]) X$. Conversely, letting $ isf(-) colon II -> PROP $ be the indicator function for $0 in II$,
+
we will see that the Sierpiński cone is the sum of all the _closed modalities_ $clmod(isf(i))$, _i.e._
+
$X_bot tilde.equiv mysum(i,II) clmod(isf(i))X$.
+
+
A beautiful symmetry emerging from the failure of De Morgan’s laws in constructive mathematics, which I learned from Reid Barton.
+
+
+
+
== The Sierpiński cone is a sum of closed modalities
+
+
For generic $i:II$, we compute the closed modality $clmod(isf(i))X$.
+
#only("2-")[Then we apply the left adjoint $mysum(i,II) colon TYPE_(slash (i:II)) -> TYPE$, which preserves colimits.] #only("3-")[Then we simplify.]
+
+
#align(center)[
+
#only("1")[
+
#diagram(
+
cell-size: 15mm,
+
label-sep: 0em,
+
$
+
isf(i) times X edge("d", ->) edge("r", "hook->") & X edge("d", ->) \
+
isf(i) edge("r", ->) & clmod(isf(i)) X
+
$,
+
node((.5,.5), [_cocart._]),
+
)
+
]
+
#only("2")[
+
#diagram(
+
cell-size: 15mm,
+
label-sep: 0em,
+
$
+
mysum(i,II) isf(i) times X edge("d", ->) edge("r", "hook->") & mysum(i,II) X edge("d", ->) \
+
mysum(i,II) isf(i) edge("r", ->) & mysum(i,II) clmod(isf(i)) X
+
$,
+
node((.5,.5), [_cocart._]),
+
)
+
]
+
#only("3")[
+
#diagram(
+
cell-size: 15mm,
+
label-sep: 0em,
+
$
+
X edge("d", ->) edge("r", "hook->") & II times X edge("d", ->) \
+
bold(1) edge("r", ->) & mysum(i,II) clmod(isf(i)) X
+
$,
+
node((.5,.5), [_cocart._]),
+
)
+
]
+
]
+
+
== The open mapping cylinder
+
+
The Sierpiński cone $X_bot$ is a special case of the _open mapping cylinder_.
+
+
#align(center)[
+
#diagram(
+
cell-size: 15mm,
+
label-sep: 0em,
+
$
+
E edge("d", ->, label: f) edge("r", ->, label: 1_E) & E edge("d", "hook->", label: iota_f, label-side: #left)\
+
B edge("r", "hook->", label-side: #right, label: bot_f) & MCyl(f)
+
$,
+
node((.5,.5), $arrow.tr.double$),
+
)
+
#h(2em)
+
#diagram(
+
cell-size: 15mm,
+
label-sep: 0em,
+
$
+
E edge("d", ->) edge("r", "hook->", label: (0,E)) & II times E edge("d", "hook->", label: gamma_f, label-side: #center) & edge("l", "hook->", (1,E)) E edge("dl", "hook->", label: iota_f, label-angle: #auto, label-side: #left)\
+
B edge("r", "hook->", label-side: #right, label: bot_f) & MCyl(f)
+
$,
+
node((.5,.5), [_cocart._]),
+
)
+
]
+
+
*NB*: $B arrow.r.hook MCyl(f)$ is a closed embedding; when $f colon E -> B$ is a $[0]$-connected map, then $iota_f colon E arrow.r.hook MCyl(f)$ is an open embedding.
+
+
== The open mapping cylinder is a sum of Sierpiński cones
+
+
The open mapping cylinder $MCyl(f)$ turns out to be the sum of all the Sierpiński cones of the _fibres_ of $f$. #only("2-")[We compute generically in $x:B$.] #only("3-")[Then we apply the left adjoint $mysum(x,B) colon TYPE_(slash (x:B)) -> TYPE$.] #only("4-")[Simplify with Frobenius,] #only("5-")[ and straightening/unstraightening.]
+
+
#align(center)[
+
#only("2")[
+
#diagram(
+
cell-size: 15mm,
+
label-sep: 0em,
+
$
+
fib(f,x) edge("d", ->) edge("r", "hook->") & II times fib(f,x) edge("d", ->) \
+
bold(1) edge("r", ->) & fib(f,x)_bot
+
$,
+
node((.5,.5), [_cocart._]),
+
)
+
]
+
#only("3")[
+
#diagram(
+
cell-size: 15mm,
+
label-sep: 0em,
+
$
+
mysum(x,B) fib(f,x) edge("d", ->) edge("r", "hook->") & mysum(x,B) II times fib(f,x) edge("d", ->) \
+
mysum(x,B) bold(1) edge("r", ->) & mysum(x,B) fib(f,x)_bot
+
$,
+
node((.5,.5), [_cocart._]),
+
)
+
]
+
#only("4")[
+
#diagram(
+
cell-size: 15mm,
+
label-sep: 0em,
+
$
+
mysum(x,B) fib(f,x) edge("d", ->) edge("r", "hook->") & II times mysum(x,B) fib(f,x) edge("d", ->) \
+
mysum(x,B) bold(1) edge("r", ->) & mysum(x,B) fib(f,x)_bot
+
$,
+
node((.5,.5), [_cocart._]),
+
)
+
]
+
#only("5")[
+
#diagram(
+
cell-size: 15mm,
+
label-sep: 0em,
+
$
+
A edge("d", ->) edge("r", "hook->") & II times A edge("d", ->) \
+
B edge("r", ->) & mysum(x,B) fib(f,x)_bot
+
$,
+
node((.5,.5), [_cocart._]),
+
)
+
]
+
]
+
+
== The open mapping cylinder of a _family_
+
+
From a type theoretic point of view, the function $f colon E -> B$ could be viewed instead as a family $x:B tack.r E[-] : TYPE$, whose open mapping cylinder we can define more directly.
+
$
+
limits(MCylFam)_((x:B)) E[x] :equiv
+
mysum(x,B)
+
E[x]_bot
+
equiv
+
mysum(x,B)
+
mysum(i,II)
+
clmod(isf(i)) E[x]
+
$
+
+
(This is the open mapping cylinder of the fibration $pi colon mysum(x,B) E[x] -> B$.)
+
+
#let mathmute(x) = text(fill: luma(120), $#x$)
+
+
+
== The “logical” open mapping cylinder
+
+
All this suggests a “logical” or limit-style counterpart to the open mapping cylinder, using the partial map classifier:\
+
$
+
mathmute(
+
limits(MCylFam)_((x:B)) E[x]
+
&:equiv
+
mysum(x,B)
+
E[x]_bot
+
&tilde.equiv
+
&mysum(x,B)
+
mysum(i,II)
+
clmod(isf(i)) E[x]
+
)
+
\
+
limits(LiftFam)_((x:B)) E[x]
+
&:equiv
+
mysum(x,B) Lift(E[x])
+
&equiv
+
&mysum(x,B) mysum(i,II) opmod([i]) E[x]
+
$
+
+
== A corollary for mapping cylinders
+
+
Let $x:B tack.r E[x]$ be a family of $[0]$-connected types. Then we have an evident universal comparison map $MCylFam_((x:B)) E[x] -> LiftFam_((x:B)) E[x]$.
+
+
_*Corollary.*_ Let $C$ be Sierpínski complete. Then for any family $x:B tack.r E[x]$ of $[0]$-connected types, $C$ is orthogonal to this comparison map, _i.e._
+
$
+
(limits(LiftFam)_((x:B)) E[x] -> C)
+
->
+
(limits(MCylFam)_((x:B)) E[x] -> C)
+
$
+
is an equivalence.
+
+
== What does the mapping cylinder classify?
+
+
#set text(size: 0.95em)
+
+
Several years ago, I asked whether the Artin glueing of a geometric morphism classifies models of an interesting theory.
+
+
Our results imply an answer to the analogous question for *synthetic topology*: in suitable reflective subuniverses, mapping cylinders may be computed as sums of partial map classifiers. The subtlety is to ensure the reflective subuniverse is closed under mapping cylinders of _suitable_#footnote[Take care: the appropriate condition on the family is _not_ fiberwise: we need the _fibration_ $mysum(b,B)E[x] -> B$ and the base $B$ to be local.] families.
+
+
+ Leoni Pugh: automatic when $Sigma$ is local, dominant, and satisfies Phoa.
+
+ Otherwise we may adapt the theory of “well-completeness” from SDT.
+
+
+
= thank you!
+
+
+
== Future work
+
+
All these notions and results can be dualised to _closed embeddings_ by considering the dual lattice $Sigma^"op"$. We have Hyland's co-partial map classifier $CoLift(X)$ and the inverted Sierpiński cone $X^top$, and the closed mapping cylinders $ClMCyl(f)$.
+
+
What about more general glueings? That would be good, but I am not yet sure how to proceed.