Skip to main content

Life in Johnstone's Topological Topos 1 -- Fundamentals

03 Jul 2024 - Tags: life-in-the-topological-topos , featured , topos-theory

I’ve been thinking a lot about the internal logic of topoi again, and I want to have more examples of topoi that I understand well enough to externalize some statements. There’s more to life than just a localic Sh(B), and since I’m starting to feel like I understand that example pretty well, it’s time to push myself to understand other important examples too!

In particular, it would be nice to throw some gros topoi into the mix, and where better to start than Johnstone’s topological topos? This topos is fairly small (which makes explicit computation easy) and is very well studied (which makes finding references and examples merely annoying instead of totally impossible). Eventually I’ll want to learn about the effective topos1 (and other realizability topoi more generally), various smooth topoi, etc. but let’s take them on one-at-a-time!

The topological topos T is a world where every set is intrinsically a space. What does this mean?

Well, if we’re working in Set, then a space is a set X equipped with some ~bonus structure~. This structure can take a lot of forms, but one ubiquitous example is that of a topology τP(X).

Then if you want to work with spaces, you have to constantly keep track of what topology you’re working with. For example, there’s lots of topologies you can put on X×Y, and we need to make sure we choose the right one to act like the product of the spaces (X,τ) and (Y,σ).

Nowadays the “right” topology is usually “obvious2”, but this is only because we’re able to stand on the shoulders of countless 20th century mathematicians! I think most people would be hard-pressed to come up with, say, the compact-open topology if they hadn’t seen it before!

Of course, carrying around this ~bonus structure~ becomes most pronounced when working with continuous maps! Now, instead of just defining a function and moving on with your life, we’re constantly burdened to check that our function XY actually respects the topologies involved! Otherwise it isn’t a continuous function (X,τ)(Y,σ)! There are some friends of mine who are constantly complaining that algebraic topologists never check that things are continuous, and honestly I’m sympathetic. But it can be a real hassle to check these things all the time…

Thankfully there’s a better way!

Every set in T is, by its very nature, a space! There’s no need to choose the “right” topology, or to check that your function is “continuous”. Inside T, it’s literally impossible to write down a function that isn’t continuous, because there’s no ~bonus structure~ to respect! This is what we mean when we say the topology is intrinsic.

This is great for a couple reasons. First, say you build a type X in Martin-Löf Type Theory (MLTT). We know how to interpret MLTT in any topos, so by interpreting X in T we learn that our type X is automatically a space! Understanding this relationship between types and topology has been a staple in many people’s careers, but I want to single out Martín Escardó as someone whose papers I’ve been reading lately (and who I talk to fairly often on mastodon). These conversations were a big part of the reason I decided to spend some time trying to understand T.

Second, by the same logic, any theorem we’re able to prove constructively is automatically true in T. That is, any constructive theorem is automatically true “continuously”, giving us a theorem for topological structures! Of course, in order to use these theorems, we need to understand how objects inside the topological topos T relate to honest topological spaces in “the real world”3.

In the process of learning about T, I had to work out a bunch of examples, which I’d love to share! Even though all of this is probably “well known to experts”, I found a lot of it pretty hard to find, so hopefully this blog post is still useful for people ^_^.

Let’s get started!


What Is T?


First, what even is the topological topos? It’s sheaves on some site, of course, but which one?

Write N for the one point compactification of N. This is the space {0,1,2,3,,} topologized so that a convergent sequence (xn)x in X is exactly a continuous map NX4.

Then let’s look at the full subcategory of Top spanned by {1,N}. This becomes a site if we give it the canonical topology J, and we define the topological topos T to be sheaves on this site.

We’ll say more about this definition in a minute, but first let’s see how we can picture objects of T.

A presheaf on this site is a pair of sets X(1) and X(N) with a bunch of maps connecting them:

You should think of elements of X(1) as the points of X, and the elements of X(N) as (witnesses to) convergent sequences in X(1). Indeed, if pX(N), then we’ll write pn for n(p) (resp. p for p) and p should be thought of as a witness or proof that the sequence pn converges to p in X(1)5.

The unique map ! sends a point xX(1) to a distinguished proof that the constant x sequence converges to x, and the functions f “reindex” a convergent sequence. So if p is a proof that xnx, then fp is a proof that xfnxf too.

The sheaf condition for the canonical topology guarantees that if every subsequence of xn converges to x, the whole sequence xn converges to x too6.

Can you prove that this is reasonable?

If xnx in some topological space X, and f:NN is continuous, why must xfnxf?

You might find it helpful to case on whether f()= or not.

As a cute exercise can you find a simple description of the arrows in T? That is, for a natural transformation between two sheaves?

solution A natural transformation between X and Y is a pair of functions f1:X(1)Y(1) fN:X(N)Y(N) So that whenever p is a proof that xnx, fN(p) is a proof that f1(xn)f1(x). Moreover, fN should respect the distinguished proofs that constant sequences converge (so fN(!x)=!f1(x)) as well as reindexing (so fN(gp)=g(fNp))


Now every topological space X gives an object X=Top(,X) in the topos7, where X(1)=X and X(N)={continuous functions f:NX}. That is, the underlying set of X is exactly the underlying set of X, and for every convergent sequence in X there is a unique proof that that sequence converges (represented by the sequence itself).

If we restrict attention to the full subcategory of sequential spaces, then is a fully faithful embedding into T. This shouldn’t be too surprising, since the sequential spaces are exactly those spaces whose topologies are determined by a knowledge of which sequences converge!

Importantly, you should think of this is a super mild condition, since lots of natural spaces of interest are sequential. Just to name a few:

This tells us that a huge subcategory of topological spaces embeds fully faithfully into T! Later we’ll say more about how computations in T translate to computations in the real world, but this is a good first indication that they should be closely related!



There’s another definition of T which you’re also likely to see.

Having X(1) around explicitly as a set of points is helpful for exposition and intuition, but it turns out to not change the topos if we work without it! Intuitively, we can recover the points from the constant maps n:NN.

With this in mind, some authors define T to be the sheaves on just the full subcategory of Top spanned by {N}. That is, they define it to be sheaves on the monoid of continuous endomorphisms of N. See, for instance, The Elephant (A2.1.11(j)).

This gives a different informal justification for the close connection between T and sequential spaces. Indeed, objects of a sheaf topos can be thought of as being glued together from objects of the underlying site. In case you’re working with a presheaf topos, we take all the ways to glue things together, but in general a grothendieck topology forces us to restrict attention to those gluings which are “nice” in some sense.

So, with this smaller site in hand, one way to think about objects in T is as copies of N that are “glued together nicely”. And one can show that the sequential spaces are exactly the quotients of disjoint unions of copies of N! This also tells us that, in some sense, the other objects of T are just copies of N glued together in more exotic ways, for instance by gluing two copies of N literally on top of each other to get multiple witnesses to the convergence of the same sequence!


But how do we know that these two definitions agree? I wasn’t able to find this written down anywhere, but it’s easy to check for ourselves!

The key observation is that {N} is a dense subsite of {N,1}. Here I’m using set-builder notation to mean a full subcategory of Top equipped with the canonical topology.

Indeed, to check this, we only need to show that every object in {N,1} is covered by maps with domain in {N}. But the identity function NN covers, and the unique map N1 covers too.

Since {N} is a full subcategory of {N,1}, the second condition of the comparison lemma is trivial, and we learn that the geometric map induced by the inclusion is an equivalence.

In particular, the two common definitions really do give equivalent topoi!


So, finally, what is the Canonical Topology?

For the site with two objects, {1,N}, every (nonempty) family of arrows {Xα1} is covering. So the interesting question is what a covering family of N looks like.

If S is an infinite subset of N, we write fS for the unique monotone map NN whose image is S{}.

A family {XαN} is covering if and only if both

  1. It contains every constant map 1N
  2. For every infinite TN, there is a further infinite subset ST with fS:NN in the family

In particular, if a family contains every constant map 1N and a “tail of an infinite sequence” f{xN} for some N, then that family is covering.

So, roughly, to prove that something “merely exists” in T, we have to provide a witness for every finite n, and these witnesses should converge to the witness for .

If we want to use the site with one object {N}, the condition is almost exactly the same. A family of maps is covering if and only if both

  1. every constant map NN is in the family
  2. For each infinite TN, there’s a further infinite ST so that fS is in the family.

This, unsurprisingly, doesn’t make too much difference. But note that the site with two objects is obviously local in the sense of The Elephant (C3.6.3(d)). So we learn that the global sections functor Γ:TSet which takes an object X to its set of points X(1) admits the usual left adjoint characteristic of geometric morphisms (giving a set X the discrete topology) but also a further right adjoint (giving a set X the indiscrete topology).

In the original paper, Johnstone moreoever shows that the essential point SetT given by this indiscrete arrow is the unique global point of T.


How Does T Relate to Top?


Here’s the tl;dr for this section, for ease of reference.

We have a sequence of fully-faithful embeddings of bicartesian closed categories, each of which admits a left adjoint, as shown below:

The embeddings preserve all limits (as right adjoints) but moreover preserve the cartesian closed structure, as well as certain “nice” colimits (in particular, all colimits involved in the creation of CW-complexes). The exact definition of “nice” here is explained in Johnstone’s original paper, but includes the coproduct. Additionally, the image of a map XY of sequential spaces (with Y sequentially hausdorff) as computed in T is just the set theoretic image equipped with the quotient topology (Corollary 6.4 in the original paper).

The left adjoints preserve all colimits, and moreover preserve finite products (and thus, in particular, models of algebraic theories).

Lastly, in case we restrict to the full subcategory of “sequentially hausdorff spaces”, in the sense that every convergent sequence has a unique limit, then the adjunction SeqKur is an adjoint equivalence!


Here Seq is bicartesian closed, Kur is locally cartesian closed, T is a topos, and the embeddings preserve all of this structure. Thus one can say that at each level we add new “type constructors”, as shown in the following diagram (stolen from Martín Escardó):

Colimits in Seq are computed as in Top, so in particular the “nice colimits” that get preserved between Seq and T agree with colimits in Top.

The relationship of limits in Seq to limits in Top is more subtle. If you only care about (quotients of) second countable spaces, then the bicartesian closed structure on Seq (and thus in T) agrees with the usual bicartesian closed structure on the “convenient category” of compactly generated spaces. In particular, function spaces get the compact-open topology.

If your spaces are locally compact, then the (finite) product in Seq (and thus in T) agrees with the product in Top.


That’s a lot, so let’s go more in depth into what all of this means, haha.

We’ll start with the definition of a Kuratowski Limit Space (also called a subsequential space):

A Kuratowski Limit Space is a set X equipped with a set of Convergent Sequences in X subject to the following axioms:

  1. For every xX, the constant sequence (x) converges to x
  2. If (xn) converges to x, then every subsequence of (xn) converges to x too
  3. If, for some x, every subsequence of (xn) contains a further subsequence converging to x, then the whole sequence (xn) already converges to x.

We moreover call X Sequentially Hausdorff if it satisfies the bonus axiom

  1. If (xn) converges to x and (xn) converges to y, then x=y.


A function f:XY between limit spaces is called continuous if whenever xnx, we have fxnfx.

Every sequential topological space is automatically a limit space, where we just let the convergent sequences be the (topologically) convergent sequences. Moreover, there’s a fully faithful embedding of limit spaces into T where we let X(1)=X and X(N) be the set of convergent sequences in X.

As a (not so tricky) exercise, you might want to verify that this map from Kur to presheaves is actually always a sheaf.

This basically amounts to comparing axiom (3) for limit spaces to the definition of a cover of N.

Taken together, we have fully faithful embeddings

SeqKurT

In fact, Johnstone’s original paper shows that Kur is the quasitopos of ¬¬-separated sheaves in T! Thus the embedding KurT admits a finite product preserving left adjoint, and the locally cartesian closed structure of Kur agrees with that of T (see A1.5.9 in the elephant).

Concretely, this left adjoint takes an object of T and fogets how a sequence converges, only remembering that it converges! Said another way, it identifies any proofs p and q with pn=qn for all nN.

Moreover, the embedding SeqKur also admits a finite product preserving left adjoint!

We say a subset UX is Sequentially Open if whenever xnaU, some tail of xn is entirely contained in U. It’s easy to see that the set of sequential open subsets forms a topology on X, and indeed our reflector sends a limit space (X,{convergent sequences}) to the sequential space (X,{sequential opens}). This functor moreover preserves finite products8, which is Proposition 3.1 in Menni and Simpson’s Topological and limit-space subcategories of countably-based equilogical spaces9.

Also, notice that this reflection possibly adds new convergent sequences. Maybe our limit space X knows about some convergent sequences, but once we actually build a topology to make these sequences converge in the usual sense, there might accidentally be more convergent sequences than we started with!

Conversely, the subobjects of a space XT come from taking a subset of the points and a subset of the convergent sequences. So we see this is exactly what the kuratowski limit spaces are! They’re the subobjects of sequential spaces, where we may have forgotten about certain sequences that “would converge” if we still had our open sets.

In general, we can think of objects in Seq as honest spaces, with points and all the convergent sequences that should exist. Objects in Kur are almost honest spaces, we just might have forgotten about a few convergent sequences that “should” be there if we remembered the whole topology. But there’s still only “one way” for any given sequence to converge. Objects in T are like spaces which might have forgotten some convergent sequences, and which have ~bonus data~ attached to them giving multiple inequivalent proofs that these sequences converge!

But this intuitive picture tells us how to get an honest space from your favorite object XT! We take X(1) as our set of points, and a subset of X(1) is open exactly when it’s sequentially open, forgetting the data of the multiple proofs of convergence.

The fact that the reflectors preserve finite products tells us that the Seq and Kur are exponential ideals in T. Thus they’re both cartesian closed, and the embeddings preserve the cartesian closed structure! It’s not hard to see the embeddings SeqKur and KurT preserve coproducts, so that we get the promised embeddings of bicartesian closed categories.

Lastly, the cartesian closed structure on Seq is the one you would expect from viewing it as a “convenient category of spaces”. The exponential is (usually) the compact-open topology! You can read more about the subtleties in Escardó, Lawson, and Simpson’s Comparing Cartesian closed categories of (core) compactly generated spaces, but the gist is that you get the compact-open topology whenever you’re working with (quotients of) second countable spaces!


From this information, there’s a few simple corollaries that I want to mention explicitly, since they give more relationships between Top, Seq, and T.

First, fully faithful functors reflect isomorphisms, so if we can prove in T that two spaces are isomorphic, it means they must be isomorphic in Seq too. But then all functors preserve isomorphisms, so that we get an isomorphism in Top too! Thus, we can show two sequential spaces are homeomorphic by working entirely in T! The converse argument (using the fully faithful embedding SeqTop) shows that two homeomorphic sequential spaces are also isomorphic in T, so that we can detect every homeomorphism just by working in T.

Similarly, if A and B are both sequential, then a map AB is monic in Top, if and only if it’s monic in Seq if and only if it’s monic in T! In all cases, the monics are exactly the continuous injections10. This tells us that anything we “expect” to be a subobject in T actually is. But note that in Top we might have nonsequential subspaces of a sequential space (any non-frechet sequential space will do. see here) and similarly in T we might have nonsequential subspaces of a sequential space (indeed, every kuratowski limit space is a subobject in T of a sequential space). Nonetheless, open/closed subspaces of a sequential space will be sequential in both Top and in T.

Dually, if AB is an epi in T, then it’s an epi in Seq, and thus an epi in Top (since the inclusion SeqTop is a left adjoint, and preserves epis). But there’s no reason to suspect an epi in Top to remain an epi in T.


This is great and all, but the only way to really get some intuition for how computations in T relate to computations in Top is to actually do some computation and check! So let’s do that! Let’s start with a few important types representing various kinds of proposition. These will be important for building new types later, and for understanding how to externalize them.


2

This is the discrete space with two points {,}. This is sequential (every finite space is, and so is every discrete space), so behaves exactly as you would expect. Note that the convergent sequences are all eventually constant!

We think of 2 as the space of Decidable Propositions, so that maps X2 classify decidable properties of X. These are the same as clopen subsets of X, and thus might be quite rare. Notice that, in T, 2 doesn’t form a complete lattice! It has finite joins and meets, of course, and we can can build the continuous functions ,:2×22 quite easily. Thinking of 2 as classifying clopen subobjects, this corresponds to the fact that a finite union/intersection of clopen sets is clopen. Indeed, if A,BX are clopen, classified by maps χA,χB:X2, then the map λ(x:X).χA(x)χB(x) :X2 classifies exactly AB.

This tells us immediately that 2 cannot have countable joins/meets. We can see this via continuity, since the map :2N2 with α={n.α(n)=otherwise is not continuous! (and neither is . In both cases, do you see why?)

We can instead see this by thinking of 2 as classifying clopen subsets, since if or existed, we could use them with classfiying maps to show the countable intersection/union of clopen sets is clopen. But of course we know this is false!

As a last aside, it’s not hard to see that 2 being countably complete corresponds exactly to the Weak Limited Principle of Omniscience (WLPO), so that this shows TWLPO. We’ll talk more about omniscience principles in part 3, but it’s nice to mention.


Σ

This is the sierpinski space, which also has two points {,}, but with the topology {,{},Σ}. This is sequential (every finite space is), where every sequence converges to and the sequences converging to are only the eventually constantly ones.

We think of Σ as the space of Open Propositions, since maps XΣ classify the open subspaces of X. By the same logic as before, it’s easy to show that Σ is a lattice with finite meets and joins (indeed, we can build the maps and using the yoneda lemma in Seq knowing that open subspaces are closed under finite unions and intersections).

A similar yoneda argument shows that Σ is a complete lattice, since homs into Σ are open subspaces, and arbitrary unions of opens are open, so these operations must be represented by joins on Σ. But it’s kind of fun to show directly that :ΣNΣ is continuous (and more generally so is :ΣκΣ for any cardinal κ).

As a cute aside, this tells us that Σ must be closed under arbitrary meets as well… But of course, the arbitrary intersection of open subspaces isn’t open. Do you see what’s going on there?


Σc

This is the “co-sierpinski space”. It has two points {,} but the topology is {,{},Σc}. Again it’s sequential, but now we see that every sequence converges to , while only the eventually constant sequences converge to .

Unsurprisingly, this is the space of Closed Propositions, and maps into Σc classify closed subspaces of X. The same logic as before shows Σc is a complete lattice, but now we have direct access to , since closed subspaces are closed under arbitrary intersection!


2=ꪪ

At this point you know what’s going on. This space has two points, {,} with the indiscrete topology (the only opens are and 2), so here every sequence coverges to both and . We think of this as the space of all “classical” propositions, since a map X2 is exactly the same thing as a “classical” subspace of X. That is, a subset of the points equipped with the induced topology.

This interpretation also makes it more believable that it should correspond to Ω¬¬, the double-negation closed propositions, as this does represent the “classical” propositions, where we really care about subsets of points (which are complemented, so satisfy LEM), and then take whatever topology makes the universal propety work (which happens to be the subspace topology).

Notice that this is again a complete lattice. We can see this either because 2 is indiscrete, so every function into it is continuous (in particular, the arbitrary join/meet functions are continuous), or by using yoneda again (since arbitrary unions/intersection of subsets of points are again subsets of points).


Ω

This is the subobject classifier, or the space of all propositions! Maps XΩ classify all subspaces, even the possibly nonclassical ones. That is, this is the first time we’re able to build a limit space, rather than an “honest” sequential space!

Notice that, for 2 (resp. for Σ, Σc, and 2) if we start with a sequential space X and a decidable (resp. open or closed or classical) proposition φ:X2 (resp. Σ, Σc, 2), then the pullback

exists in Seq, and is an honest clopen (resp. open, closed, classical) subspace of X.

Note that this Aφ is an object above X, so if we want to access it in the type theory we have to compose with the map from X1. That is, in the type theory Aφ (the subspace classified by φ) is represented by Σx:Xφ, as we would expect.

Now, what does the space of all propositions look like in T? Well, we know that 2, Σ, Σc, and 2 are all sequential spaces. So there’s a unique convergence proof for each sequence. It turns out the ability to “remember” only some convergent sequences (which puts is into the world of kuratowski limit spaces) can be coded up by more interesting proofs of convergence! Let’s see how!


Johnstone shows that Ω has two points and , and for any sequence xn of s and s

Here a “closed ideal of subsets of N” is a pair (E,I) where EN is called the extent of the closed ideal of subsets.

In the above, I is a family of infinite subsets of E, so that

  1. if S is an infinite subset of T and TI, then SI too
  2. if every infinite subset of T has a further infinite subset in I, then TI too.

These correspond, basically, to axioms (2) and (3) for limit spaces. This will make sense once we understand how this subobject classifier actually classifies subobjects!

Say that we have a subobject AX. That is, we remember only some of the points of X, and we only remember some of the (proofs of) convergent sequences. This had better be classified by a unique map (read: natural transformation) A:XΩ.

On points, we have A(x)={xAxA, but what do we do for a proof p that xnx?

Well, to what extent is (xn)A? Each point of the sequence is either in A or isn’t, so a sequence xn in X produces a sequence of s and s given by ωn=A(xn).

If xA (that is, if ω=), then life is easy. We send p to the unique proof that ωn. If instead xA, then there are lots of proofs that ωn, indexed by these closed ideals of subsets. So to decide where p should go, we need a natural choice of (E,I) associated to our sequence xn.

We’ll let E={nxnA} be the extent to which xnA. Next, we have to say which infinite subsets of E live in I. Given any infinite subset TE, we can restrict xn to a subsequence of indices in T. Since E is exactly the indices where xnA, this restriction xnT is a sequence in A. Now we say that TI if and only if the restriction pT proving that xnTx in X is one of the proofs we kept in A.

This shows where these conditions on “closed ideals of subsets” come from! If TI, that means that pT:xnTx is a convergence proof in A. So every subsequence of this (read: every infinite subset of T) must also converge in A. Also, if every subsequence has a further convergent subsequence (if every infinite subset of T has a further infinite subset in I), then pT must also be a convergence proof in A!


For example, say X=R with the usual topology, and A=R with the discrete topology. Then the identity AX is monic, so should be a subobject, but in order to classify this we need to only remember some convergent sequences (the eventually constant ones). Note that every sequence in X gets sent to the constant sequence in Ω, since A and X agree on points. But thankfully now there’s multiple proofs available that the constant sequence converges to ! We send a sequence (xn) to the proof indexed by (N,I) where a subset S is in I if and only if S is the set of indices of an eventually constant subsequence of (xn).

Lastly, note that if we reflect Ω into Seq, it becomes the humble indiscrete space 2. All of its power comes from the ability to carry extremely detailed information inside its multiple proofs of convergence. Storing “extra information” in the convergence proofs will come up again in part 2 when we look at quotients of topological algebras.


R

There’s an object R=HomTop(,R) in T since R is a separable space. But usually when people talk about a “real numbers object” in a topos, they mean the object of dedekind reals (points of a certain locale).

It turns out that in T this distinction doesn’t matter! Johnstone’s original paper computes that the object of points of the theory of dedekind reals is exactly the object R!

We won’t show this here because we’ll show something more general in just a few bullets!


2N

Since 2 and N are both sequential, their exponential in T agrees with their exponential in Seq. Since 2 and N are moreover second countable, 2N gets the compact open topology.

Now, in the realm of classical topology, since N is discrete the compact open topology on 2N is just the product topology, and we get cantor space (as expected!)

Again, one can also ask about the points of the locale object “cantor space”. And again, we find that the points of this locale are represented by 2N, which is the same thing as the internal 2N we just computed!


α:2Nn:N α(n+1)α(n)

For each n, the proposition α(n+1)α(n) is decidable (said another way, the subset An={αα(n+1)α(n)}2N is clopen for each n), but once we ask for this quantifier (which we interpret as an infinite meet), we’re forced to work in Σc.

So “n:N.α(n+1)α(n)” is a closed proposition, and α:2Nn:N α(n+1)α(n) is just the closed subspace it classifies.

So this space, externally, is the closed subspace of cantor space corresponding to the decreasing binary sequences. This space is homeomorphic to N, so we see these spaces are also isomorphic in T.


Regular Locales

Let X be a regular locale. Then the object of X models in T is represented by pt(X), the topological space of models of X in Set.

In particular, if X is a regular topological space, then the object of X-models in T is just X, as we might hope!

In particular again, the dedekind reals object is R, the cantor space object is 2N, and any regular locale with enough points classically has enough points in T.

Write XE for the object of X-models in some topos E. The points of XE are in bijection with the geometric maps ESh(X), and from here it’s a nice exercise to check that the A valued points of XE are in bijection with geometric maps E/ASh(X) for any object AE. Moreover, since X is a locale, the geometric maps ESh(X) are in bijection with continuous maps from the localic reflection of E to X.

Putting these facts together (in the special case of T), we see that XT(1)=Locale(Ω(1),X) and XT(N)=Locale(Ω(N),X).

We know that Ω(1)={,}, so locale maps from Ω(1) to X are just the ordinary set valued points of X. That is, XT(1)=XSet=pt(X).

Now let’s look at Locale(Ω(N),X), that is, frame homomorphisms X to Ω(N). Since X is regular, we know that every aX satisfies11

a={xxa}

where xa (read as “x is rather below a”) means that ¬xa=.

Then if f:XΩ(N) is a frame hom we see that each fa satisfies this same property. Indeed

fa=f({xxa})={fxfxfa}{yyfa}fa

But it’s not hard to see the only elements in Ω(N) that satisfy this property are the proofs (ωn) and the proofs (ωn) indexed by (E,I) where E is cofinite and I is the maximal ideal of all infinite subsets of E12. Since these are precisely the open subspaces of N (respectively, they’re any subset of N and any cofinite subset of N including {}), we see that every frame map XΩ(N) factors through the inclusion of the frame of opens of N. Of course, frame maps X to the opens of N are exactly locale maps NX. Since N is spatial, these are exactly the same thing as maps of topological spaces from N to pt(X).

So where did we start, and where did we end? We see that XT(1)pt(X)Top(1,pt(X)) and XT(N)Top(N,pt(X)) so that XTpt(X), as claimed.


Note that in this proof regularity was only used to check that the convergent sequences in XT are what we expected. Showing that global points of XT agree with the points of X in Set is easy, and true for every locale X! In particular, if X has enough points in Set, it also has enough points in T!

This result tells us that coherent locales (as defined in Set) have enough points in T, which I’m pretty sure is equivalent to the prime ideal theorem… But I would expect this to be false in T since it’s quite close to full AC, so we should be able to use it to build a discontinuous function (but I don’t know how).

Is there a flaw in this proof? Maybe we get out of this problem if the prime ideal theorem in T is actually equivalent to all coherent locales internal to T having enough points? There are locales internal to T which don’t exist in Set at all, so maybe that’s a stronger statement than what this theorem gets us…

I would be SUPER grateful if some experts chimed in! Feel free to leave a comment on this post, email me, or say something on mastodon.


How does T relate to sheaf topoi Sh(X)?

Like we said in the introduction, the topological topos T is a gros topos in the sense that it’s objects are productively thought of as spaces. However, to any individual topological space, we can associate a “petit topos” Sh(X) which should be thought of as a (generalized) space in its own right. Oftentimes, if B is a gros topos and X is a topological space which lives in B, there is a close connection between Sh(X) and the slice topos B/X.

For instance some authors13 say that “a” topological topos is a category of sheaves on a subcategory C of Top closed under finite limits and open subspaces. The grothendieck topology is the natural one where a covering family is an open cover in the usual sense. Then if XC, the usual sheaf topos Sh(X) is “homotopy equivalent” to the slice topos Sh(C,J)/X. This is made precise at the end of Mac Lane and Moerdijk, Chapter VI.10.

It’s natural to ask for a similar relationship between Sh(X) and T/X for a sequential space X. This is the subject of Section 9 in Johnstone’s original paper, where it’s shown that there is a geometric morphism T/XSh(X), but this relationship is somewhat less compelling than in the case of a more traditional gros topos. For instance, the direct image half of this morphism isn’t exact, so that cohomology of T/X does not agree with the cohomology of Sh(X). In particular, even for the (closed) unit interval I and a finite abelian group A Johnstone shows that H1(T/I;A) is not trivial!

Johnstone decides to not say anything more about the geometric morphisms Sh(X)T, and we’ll follow suit.

⚠ From this discussion, though, we learn that “the” topological topos T is not “a” topological topos in the sense of Moerdijk and Reyes (and other papers). In particular, we have to be careful when reading the literature which version of “topological topos” the author is talking about.


Characterizing “Honest Spaces” Internally

We saw earlier how every type we construct represents some space by interpreting that type in T and then reflecting back into Seq. This remains true even if we use certain principles that aren’t always true in type theory, but happen to be true in T (we’ll discuss this in Part 3).

From this point of view it’s natural to ask when a type we’ve constructed is already a space, without needing to do any reflection. Is there a way to internally characterize the “honest spaces” amongst all the objects in T?

The first step in this process is to recognize Kur as the ¬¬-separated objects. That is, an object XT is actually in Kur if and only if the internal logic thinks

is¬¬Separated(X)x,y:X¬¬(x=y)(x=y)

This is implicit in Propositions 3.6 and 4.3 of Johnstone’s original paper.

Then, we use the fact that the full subcategory of sequentially hausdorff sequential spaces is equivalent to the full subcategory of sequentially hausdorff limit spaces! With this in mind, we define

isSeqHaus(X)f,g:NX((n:Nf(n)=g(n))f()=g())

and it’s easy to show that T thinks, internally, that isSeqHaus(X) if and only if X is sequentially hausdorff in the real world.

In particular, this means that we can show an object of T represents an honest topological space by internally showing that it’s ¬¬-separated and sequentially hausdorff14!


Ok! That’s plenty for this post, where we’ve learned a lot of fundamentals about what T is, how we can think about its objects, how we can build new objects using type theory and various proposition classifiers, and most importantly we’ve learned how the things we build in T relate to topological spaces in “the real world”!

Next up we’ll talk about topological algebras, and learn how we can use the topological topos to reason smoothly about these things. This is a shorter palate cleanser between this post (which is quite long) and the third post on ~bonus axioms~ validated by T (which is slightly less long than this one, but with much heavier math).

Thanks for hanging in there, and for all the encouragement while I was writing this! It’s been really exciting to know how many people are interested in reading this series ^_^.

As a last request, I’ll be turning this series into a paper in the very near future. If you have any suggestions for other examples to add, or axioms to check, or if you notice any typos or outright mistakes, definitely let me know! Also, experts, if you have any additional context you think would fit well in what’s shaping up to be quite a long survey of the topological topos that you want to get into the literature, please let me know that too! It’ll be nice for future mathematicians to have this all in one place!

As always, thanks for reading all! Stay safe, and talk soon 💖


  1. I spent some time a few years ago (Feb of 2022, according to my Zotero) thinking hard about the effective topos. I think I was going to write a blog post about it, but I never got around to it.

    I think I should be able to remind myself what was going on, and in a perfect world I would understand it much better now that I know more things, so hopefully I’ll finally write that post. This is particularly relevant now that Andrej Bauer and James Hanson have posted their preprint constructing a realizability topos where the reals are countable. 

  2. And even then, it might not be obvious when you’re learning! I remember when I first learned pointset topology the idea of a “cylinder set” and the product topology made no sense to me! Honestly without the framework of topological categories or something similar, I could see people still being surprised that the box topology isn’t the “right” topology on an infinite product space! See, for instance, this old and highly upvoted mse question

  3. After my last post on a constructive extreme value theorem, I wanted to see how it externalizes in topoi other than Sh(B). I’m pretty sure in the effective topos we’ll get something that looks like an algorithm eating a function on a compact space and returning its max… But it’s super unclear what we should get interpreting this in T! After all, a frame in T is a topological lattice L. So a locale in L is a space whose frame of opens is itself a space…

    I still haven’t totally figured out this story (though I’m much less weirded out by the idea since I remembered that scott topologies exist as a natural topology on the frame of opens), so I won’t say anything more in this post, but trying to understand T well enough to externalize the constructive extreme value theorem was the second big motivator for this post. Of course, understanding T was so fun and interesting that I got distracted from my original goal, but that’s how these things tend to go for me, haha. 

  4. If you want a super concrete description, it’s equivalent to

    {1,12,13,14,,1n,,0}R

    with the subspace topology. 

  5. Note that it’s entirely possible for two different elements pqX(N) to witness convergence of the same sequence (so pn=qn for all n and )!

    Indeed, this will be crucial later, for instance in our discussion of the subobject classifier Ω

  6. This is spelled out quite clearly in Johnstone’s original paper On a Topological Topos. Indeed, Johnstone computes the covering sieves very explicitly, and I highly recommend reading about it there. Of course, I’ll say a few words about it in this post too! 

  7. It’s not immediately obvious that this presheaf is actually a sheaf, but it turns out to be. This is a nice exercise. 

  8. But we must remember that products in Seq are not products in Top in general! Indeed, for most “convenient categories of spaces” the product is not the product in Top. We can get the product in Seq by taking the product in Top and coreflecting back into Seq, but there’s also a convenient description:

    A sequence of pairs (an,bn) in A×B converges to (a,b) if and only if separately ana in A and bnb in B

  9. If you want to understand how to compute (co)limits in Seq or Kur, I highly recommend reading Section 3 of this paper. It’s really great, and has a lot of information!

    Particularly helpful is the observation that Kur is Topologically Concrete. See my old blog post here, and especially Adámek, Herrlich, and Strecker’s The Joy of Cats. This book writes Conv where we write Kur, and shows that it’s topologically concrete and concretely cartesian closed! This tells us very explicitly how we can compute (co)limits and exponentials in Kur, on top of the great description in Section 3 of Menni and Simpson. 

  10. Thanks to Morgan Rogers for letting me know that monics actually agree in all cases, which simplies the exposition of this section quite a lot. 

  11. Thanks to Graham Manuell for letting me know that there’s standard notation for this (which the post now uses) besides what’s shown in Johnstone’s “Stone Spaces”. 

  12. First, say we have a proof (ωn). That is a subset A of N. Then to have xA means that ¬xA=, which is the proof (ωn) indexed by (N,maxN), the ideal indexed by all infinite subsets of N. Since xA, it’s also just a subset of N (indeed, a subset of A), and its pseudocomplement ¬x is indexed by (xc,maxxc), the ideal of all infinite subsets of xc. So asking ¬xA= means asking for the closure of (N,maxxc) to equal (N,maxN). Expanding this out via the axioms for one of these “closed ideals of subsets” means that every subset of N should have a further subset inside maxxc. But this happens exactly when xc is cofinite! So asking for A={xA} means asking for A to be the union of the finite subsets of A, which is always true.

    Now let’s look at the more complicated case of a proof (ωn). We see x(E,I) if and only if ¬x(E,I)==(N,maxN), so that if x=(F,J) we must have FE and the closure of I should be maxN so that E must be cofinite! Since it’s not possible for a join of proofs (ωn) to equal a proof (E,I) that (ωn), this tells us that the only proofs with this property are those indexed by (E,maxE) with E cofinite! And, of course, it’s easy to see that (E,maxE)(E,maxE) when E is cofinite, so that moreover every maximal cofinite ideal is possible. 

  13. eg, Moerdijk and Reyes in their Smooth spaces versus continuous spaces in models for synthetic differential geometry 

  14. You might ask if there’s a way to characterize the whole of Seq inside T, rather than only the sequentially hausdorff spaces.

    I suspect there’s a way to do this, by defining the sequentially open subsets of X and demanding that every sequence that converges with respect to this topology already converges…

    But this sounds rather complicated, and I’m really looking to get this blog post done, haha. Especially since I still have to convert it into a paper!