Category Theory
Zulip Server
Archive

You're reading the public-facing archive of the Category Theory Zulip server.
To join the server you need an invite. Anybody can get an invite by contacting Matteo Capucci at name dot surname at gmail dot com.
For all things related to this archive refer to the same person.


Stream: learning: questions

Topic: Aut(Torsor) = Inn(Torsor)?


view this post on Zulip Eric M Downes (Jun 24 2024 at 14:02):

(This is more an algebra question than category theory.)

The nLab alleges that the automorphism group of a 1-sorted torsor t:T3Tt:T^3\to T is the closure under composition of tt in Set\sf Set. (See point 3. under section 3, to which I linked)

Here, tt must obey (in case you don't want to visit nlab):
t(t×1×1)=t(1×1×t)t\circ(t\times1\times1)=t\circ(1\times1\times t) and
t(Δ×1)=πR; t(1×Δ)=πLt\circ(\Delta\times1)=\pi_R;~t\circ(1\times\Delta)=\pi_L
using standard Δ:TT2, πL,πR:T2T\Delta:T\to T^2,~\pi_L,\pi_R:T^2\to T.

Anyway, this surprises me. For a group GG, there is similarly a conjugation operation cx:yxyx1c_x:y\mapsto xyx^{-1}, but the Moore closure of this operation (say, starting from generators) only gives the "Inner" automorphisms Inn(G)Inn(G). There is no operation that generally yields also the "outer" automorphisms Out(G)=Aut(G)/Inn(G)Out(G)=Aut(G)/Inn(G), at least that I know of; how nice that would be!!

So I'm very surprised by this claim, that Aut(t)=tAut(t)=\langle t\rangle! Can anyone confirm whether this is actually true, or provide some insight as to why/how?

(FWIW nlab calls the 1-sorted theory a "heap" after the translation of груда itself a pun on the Russian for group... but heap is already something much more common in compsci; wikipedia also suggests "groud")

view this post on Zulip Eric M Downes (Jun 24 2024 at 14:54):

If it helps, the 1-sorted torsor operation tt in terms of an adjoint group operation g:T2Tg:T^2\to T is:
t=g(1×g)(1×v×1)t=g\circ(1\times g)\circ(1\times v\times1) where vv takes the inverse.

And specifically it is claimed that for all combinations of a,bTa,b\in T, the closure under composition of these maps
t(,a,b):TTt(-,a,b):T\to T
yields all of Aut(t)Aut(t).

I'll start poking through the literature but if anybody has any leads, would certainly appreciate them.

view this post on Zulip Ulrik Buchholtz (Jun 24 2024 at 18:52):

I think you're confusing automorphisms of the heap with automorphisms of the group! An analogy is that every group arises as the automorphism group of its Cayley graph. We wrote a section on heaps (/grouds) in the symmetry book, Sec. 4.17. (Don't call them torsors: they are equivalently pairs of a group G and a G-torsor, as also mentioned on the nLab page.

view this post on Zulip Eric M Downes (Jun 24 2024 at 19:24):

Thanks -- That's a very cool book!

view this post on Zulip Eric M Downes (Jun 24 2024 at 19:51):

FWIW, the nLab seems to be confused/inconsistent about this issue as well;
"""
More precisely, a torsor (also known as a heap when stated in a single-sorted form) is a set
TT equipped with a ternary operation T3TT^3\to T ...
"""
from [[torsor]] -- This is the first time I have read about heaps, so I admit I just took the nLab at its word, and only skimmed the page on heaps; will suggest an update once things are clearer to me.

Again, really cool book! I know it's still in production, but still exciting to see HoTT making its way into abstract algebra books! The standard curriculum sure could use a shake-up. ("What's a monoid? What's a rig?" "They are things we do not speak of, now go write Sylow's theorems on the board pkp^k times!")

view this post on Zulip John Baez (Jun 24 2024 at 19:59):

As Ulrik hinted, the usual concept of a torsor is: you've got a group G, and then a G-torsor is a nonempty set X with a free and transitive action of G. Another way to say it, which cleverly hides the annoying 'nonempty' condition, is to say a G-torsor is a set X with an action of G:

G×XX G\times X \to X
(g,x)gx (g,x) \mapsto g x

but also a 'division' operation

X×XGX \times X \to G
(x,y)x/y (x,y) \mapsto x/y

obeying

(x/y)y=x (x/y) y = x

I list about a dozen extremely familiar examples of torsors here:

For example: dates in a calendar, notes in the chromatic scale, points in the plane, electrical potentials, etc.

view this post on Zulip John Baez (Jun 24 2024 at 20:01):

If we want to package a group G and a G-torsor X into a single structure, we can use X, but we need to use a ternary operation: we can divide two elements of X and get an element of G, but if we're trying to avoid talking about G we should then have it act on another element of X! So we can call this ternary operation

X×X×XX X \times X \times X \to X
(x,y,z)(x/y)z (x,y,z) \mapsto (x/y) z

view this post on Zulip John Baez (Jun 24 2024 at 20:01):

and we can figure out the axioms this operation obeys from the axioms of a group and those of a G-torsor. This gives the definition of a heap.

view this post on Zulip John Baez (Jun 24 2024 at 20:02):

If someone could read the nLab article 'heap' and not learn all this stuff, there's something missing from it.

view this post on Zulip John Baez (Jun 24 2024 at 20:04):

Okay, I looked at the article and everything I said is there - but maybe not so easy to absorb?

view this post on Zulip John Baez (Jun 24 2024 at 20:10):

In particular, a heap is essentially the same as a group G and a torsor of this group. In particular, from a heap, no matter how you define it, you can extract a group G and a G-torsor.

For some reason the nLab calls this group the automorphism group of the heap. I'm not at all convinced that this is a good name. The automorphism group of a heap $H$ should be the group of all bijections $H \to H$ that preserve the ternary operation. Is that isomorphic to what the nLab is calling the automorphism group???

view this post on Zulip Eric M Downes (Jun 24 2024 at 20:30):

Thanks to you both!! I'll mark this topic resolved.

view this post on Zulip John Baez (Jun 24 2024 at 20:30):

Well, please don't yet.

view this post on Zulip Eric M Downes (Jun 24 2024 at 20:31):

oh ok!

view this post on Zulip John Baez (Jun 24 2024 at 20:31):

I realize I haven't really proved that what the nLab calls the automorphism group of the heap is not really the automorphism group!

view this post on Zulip Eric M Downes (Jun 24 2024 at 20:31):

But we can prove that it is the group now that I look at it

view this post on Zulip Eric M Downes (Jun 24 2024 at 20:31):

So unless the group is V4V_4... :)

view this post on Zulip John Baez (Jun 24 2024 at 20:32):

What do you mean 'the group'? Which group?

view this post on Zulip John Baez (Jun 24 2024 at 20:32):

It would be nice to be a bit clearer.

view this post on Zulip John Baez (Jun 24 2024 at 20:33):

Anyway, if we can prove that what the nLab calls the automorphism group of a heap is not the group of all bijections of the heap preserving the ternary operation on the heap, then I can add a remark to the nLab saying the term 'automorphism group' is being used in a misleading way here.

view this post on Zulip Eric M Downes (Jun 24 2024 at 20:34):

Sorry.

The closure under recursion/composition of this operation t(t(,a,b),c,d)t(t(-,a,b),c,d) will clearly generate a group, which must be the group of the heap, by definitions. And as we know that generally HGrp0;HAut(H)\forall H\in {\sf Grp}_0; H\neq Aut(H) we can see that calling that closure the automorphism group is potentially misleading.

I'll write it up formally.

view this post on Zulip John Baez (Jun 24 2024 at 20:37):

Okay, thanks. I added a bunch of material to the section Heap: relation to torsors saying most of what I just said here on that subject.

view this post on Zulip Ulrik Buchholtz (Jun 24 2024 at 21:36):

John Baez said:

I realize I haven't really proved that what the nLab calls the automorphism group of the heap is not really the automorphism group!

Yes, of course that's a terrible name. If HH is a heap, then Aut(H)\mathrm{Aut}(H) should be the automorphism group of HH as a heap. Using the model of heaps as pairs of a group GG and a GG-torsor XX, an automorphism of (G,X)(G,X) is a pair of an automorphism of GG, φ:GG\varphi : G \simeq G, and an isomorphism of GG-torsors ψ:Bφ(X)X\psi : B\varphi(X) \simeq X. It's only when we look at automorphisms over the identity automorphism of GG that we get a group that (merely) identifies with GG (since any automorphism group of GG-torsors is merely isomorphic to GG).

So while this is related to one of the two retractions of Prin:GrpHeap\mathrm{Prin} : \mathrm{Grp} \to \mathrm{Heap}, it is in fact neither.

view this post on Zulip John Baez (Jun 24 2024 at 22:53):

Thanks. I'm wondering if there's a heap of heap theorists who use "automorphism group" in this terrible sense, and whether they'll be mortally offended if I change the nLab to improve the name of this particular group.

view this post on Zulip Ulrik Buchholtz (Jun 25 2024 at 06:44):

I say: go for it! And while you're at it, it would be great to point out that we have two natural functors from heaps to groups that return GG when given the pair of GG and the principal GG-torsor. (From (G,X)(G,X) we can take either GG or GG twisted by XX, i.e., Aut(X)\mathrm{Aut}(X)) I guess it depends on conventions which one is currently Prop. 3.1. Also: Under examples, you could put the set of homotopy classes of paths from point aa to point bb in a connected topological space. (I would do this myself, but I'm short on time this week.)

view this post on Zulip John Baez (Jun 25 2024 at 09:16):

I don't have the energy right now to do anything for this article that is not absolutely necessary to preserve the sanity of the mathematical community. However, I've clarified the relation between heaps and torsors, and asked on the nLab if I can go ahead and change the term "automorphism group" to "underlying group".

view this post on Zulip John Baez (Jun 25 2024 at 09:22):

There's still a mess in the article: at present, all sections except "Automorphism groups of heaps" relate a heap to a left torsor for a group, while that one section uses a right torsor.

view this post on Zulip Eric M Downes (Jun 25 2024 at 15:59):

Would having a page that collected non-canonical patterns of AutAut-terminology make these kinds of editing jobs easier?

I expect this one (Moore closure over an "obvious" set of bijections on a set) will be very common for old algebraic literature.

For this article, I might say for instance "The heap literature uses Aut(H)Aut(H) and 'automorphism group' to describe this concept, see Pattern 2 on non-canonical-aut-link, here we use instead ____ to avoid confusion with what has since become the more restrictive categorical usage [[automorphism]]".

Some people will never be happy, but I hope there's less of a sense that we are erasing or nostrifying the contributions of non-category-centric mathematicians that way...

view this post on Zulip Eric M Downes (Jun 25 2024 at 17:09):

In case I come back to this, I'm noting this diagram summarizes the heap H=(X,t,v)\mathcal{H}=(X,t,v) in terms of the GG-torsor α:GXX\alpha:GX\to X and group inverse ()1(-)^{-1}; the coherence diagrams for tt all follow from the familiar behavior for those.

Ideally there is a second diagram, as described by Ulrik above, explicating the relationship of the non-canonical "Aut" functor Aut:PrinGrpAut:Prin\to Grp to the closure over the curried right-actions {t~a,b:XX;a,bX}\set{\tilde{t}_{a,b}:X\to X; a,b\in X} via delooping, to GGrpG\in{\sf Grp}, and to the canonical AutPrin(H)Aut_{\sf Prin}(\mathcal{H}). But I have not been able to draw this yet.

view this post on Zulip John Baez (Jun 25 2024 at 18:38):

The page [[heap]] is now much improved:

view this post on Zulip John Baez (Jun 25 2024 at 19:41):

Eric M Downes said:

Would having a page that collected non-canonical patterns of Aut-terminology make these kinds of editing jobs easier?

Do you know more than one?

Some people will never be happy, but I hope there's less of a sense that we are erasing or nostrifying the contributions of non-category-centric mathematicians that way...

As I mentioned, Urs just stepped in and replace "Aut" with "Str" everywhere. But I have a question: do a bunch of heap theorists (assuming such exist) say "Aut" here?

view this post on Zulip John Baez (Jun 25 2024 at 19:48):

Eric M Downes said:

Ideally there is a second diagram, as described by Ulrik above, explicating the relationship of the non-canonical "Aut" functor Aut:PrinGrpAut:Prin\to Grp to ...

Do you mean Aut:HeapGrp\mathrm{Aut} : \mathsf{Heap} \to \mathsf{Grp}? There's no category on the nLab page called Prin\mathsf{Prin}. And again, the functor once called Aut\mathrm{Aut} is now called Str\mathsf{Str}. So what I now see on the nLab paper is a discussion of the functor Str:HeapGrp\mathrm{Str}: \mathsf{Heap} \to \mathsf{Grp}.

I don't know what a "non-canonical functor" is, but Str\mathrm{Str} seems plenty canonical to me. The person who wrote this page gave 3 descriptions of it; one involved an arbitrary choice of "identity element" for the heap, but the other two, don't involve any arbitrary choice. It's (implicitly) claimed all these functors are naturally isomorphic, but if there's any doubt of that, or if one just wants to avoid fussing with arbitrary choices, I'd use one of the other two.

view this post on Zulip Eric M Downes (Jun 25 2024 at 20:15):

My note was written prior to the updates, which I think addresses them; I have no complaints about Str\sf Str.

Yes, I have encountered people using Aut(X)Aut(X) to mean a closure of XX in some obvious way that turns out not to be AutC(X)Aut_{\sf C}(X), (also End(X)End(X) for some closure of appropriate maps in a monoid); it is often mostly pre-category theory algebra in obscure topics like semigroups, quasigroups, etc. If its important I can find them; that's why I was asking.

As to wether there's anyone who will be annoyed or who even use Aut canonically -- I'm looking for a 2017 book on Wagner's theory of Heaps to see exactly what terminology is used there, as it would presumably be the most up to date. I do not know any heap theorists, and I doubt you have anything to be concerned about, but please use your own judgement. I'll post back when I find what terminology is used for this in the most-up-to-date book(s).

By "non-canonical" I meant that Aut:HeapGrpAut:Heap\to Grp (now StrStr) is not AutHeap:HeapGrp;AutHeap(X)EndHeap(X)IsoHeap(X,)Aut_{\sf Heap}:{\sf Heap\to Grp}; Aut_{Heap}(X)\cong End_{Heap}(X)\cap Iso_{Heap}(X,-). To me the only canonical use of "Aut" should be the automorphisms within a category. So, the symmetries of the heap, as a heap, which could be different from its structure group or the automorphisms of said structure group etc etc. Again, nothing you and Ulrick haven't said, and now its fixed; my earlier comment is now outdated.

Re "Prin", sorry. I meant to write Heap, but was thinking of principal fiber bundles while writing. I often make such mistakes, and don't wish to waste your time worrying about them. Those were notes to myself when I thought I might have to fix the page.

view this post on Zulip Eric M Downes (Jun 25 2024 at 20:56):

Ok found it.

One interesting mathematical note in the book I'm reading is the claim that "the automorphism group of a heap" (back when they were called "Scharen", evidently) is the [[holomorph]] "of the corresponding group".. Not yet 100% sure its the same concept but sounds pretty damn close.

Okay evidently this is the paper:

Baer, R.: Zur Einführung des Scharbegriffs. J. reine angew. Math. 163, 199–207 (1929)
here in German

I definitely don't have access, but I'll check with a small non-abelian group to see if it checks out.

view this post on Zulip Eric M Downes (Jun 25 2024 at 21:20):

So, yes people have referred to the procedure used as "the automorphism group", and "Aut"; the papers I have found are from 70-100 years ago by Russian and German authors in algebra. Baer did important work here, as did Mal'cev. I expect anyone still using such terminology are just quoting the original, which of course we should not expect to coincide with nLab!

FWIW The people I have met who cite those algebraists and know about obscure algebra stuff, often work on loops (the algebra kind, not topological loops), and or Lie algebras.

I am happy to help out if anything more is needed here, but I consider the matter resolved!

Thanks to both of you.

view this post on Zulip John Baez (Jun 26 2024 at 05:37):

Okay, people often use "canonical" in a quasi-mathematical way, and people argue about its meaning, e.g. what Grothendieck meant by it, so I thought "non-canonical functor" might have some technical meaning for you that I didn't understand - like a functor which required some arbitrary choice for its definition. But you just meant "using the word Aut to mean something that ain't what it should mean". (You put it more politely.)

view this post on Zulip Eric M Downes (Jun 26 2024 at 05:39):

"them thar functors aint right I tella ya"

view this post on Zulip David Michael Roberts (Jun 26 2024 at 11:05):

Bill Messing has pointed out publicly a couple of times that Bourbaki had a technical working definition of a "canonical" mapping in their first edition of ch4 of Théorie des Ensembles, but they took it out of subsequent editions, with no explanation. From what I can tell, it seems sensible, but you have to understand things like how Bourbaki defines theories in terms of signatures and structures and whatnot. More or less it's "core natural" (as on the nLab [[core-natural transformation]]) plus a condition linked to how the context is specified as a theory: let's say something like it should exist in the free model of the theory).

view this post on Zulip John Baez (Jun 26 2024 at 20:52):

For those not in the know "core-natural" = "natural with respect to isomorphisms". I find the latter is a bit more self-explanatory.

James Dolan uses "canonical" to mean "natural with respect to isomorphisms", which is roughly what you're saying Bourbaki was saying - but simpler in that we can take any transformation between functors, possibly an unnatural transformation, and check to see if it's canonical in this sense - without the stuff about signatures and structures and free models and stuff.

view this post on Zulip David Michael Roberts (Jun 27 2024 at 01:27):

My only concern is that there seem to be maps Bourbaki (and in fact most people) call canonical that aren't any kind of transformations between functors, like the inclusion function of a subset in ZFC. But this is off-topic for this thread!

view this post on Zulip Eric M Downes (Jun 27 2024 at 06:14):

If you don't mind, I'd like to understand your comment better, @David Michael Roberts.

Why doesn't the following (phrased using topos-theoretic language) work in ZFC? Subset relations and powersets are primitive or close-to-primitive notions, so I'd have expected it to all "just work out".

The "natural inclusion" ι:SX  SX\iota:S\to X~\cong~S\subseteq X acts functorially to give the indicator function χS:X2\chi_S:X\to2 as a pushout.

(22 is the subobject classifier in Set\sf Set) and there are quite a few constructions preserved by using the powerset monad, which equivalently form commuting diagrams that ι\iota preserves; here is one:

You know all this of course, though maybe you'd phrase it differently. I'm just trying to set the stage for you to explain why this shouldn't be considered natural in ZFC.

(FWIW, this is all pretty related to anything involving group (or other) actions α~:GAut(X)\tilde{\alpha}:G\to Aut(X), because moore closures and working in 2End(X)2^{End(X)} for some XSet0X\in\mathsf{Set}_0 is where a lot of algebra lives when you concretize it... so I think its probably ok to discuss here. Or if you'd prefer to open a new topic please at me.)

view this post on Zulip David Michael Roberts (Jun 27 2024 at 07:56):

How does that pushout work? I'm not sure I see it. It feels more like it should be 1+Sc1+S^c, not {1,0}\{1,0\}.

If ιSX\iota S \hookrightarrow X is a literal subset inclusion in ZFC, what are the functors that there is supposedly a isomorphism-natural transformation between? I can imagine that if you replace XX by something isomorphic (as a set), then there is a subset of it that is in bijection with SS, via the restriction of the original bijection. But what are the functors?

Note that a characteristic function does determine a literal subset in ZFC via a pullback, but it's not the usual construction of the pullback using the Kuratowski ordered pairs construction of the product (which is really just a convention).

I'm not sure what you mean by me explaining why something shouldn't be considered natural. I'm raising the possibility that there are things we want to consider as natural morphisms that are not captured by the definition by "core-natural transformation".

view this post on Zulip Eric M Downes (Jun 27 2024 at 17:22):

Easy question first. :S2; :s1 sS\top:S\to2;~\top:s\mapsto 1~\forall s\in S and
χS:X2; χS(x)={1xS0x∉S\chi_S:X\to2;~\chi_S(x)=\begin{cases}1 & x\in S\\0 & x\not\in S\end{cases} where 2={0,1}2=\set{0,1} as you noted.

So, because these are material sets, we need to be evil and demand literal equality ι(xS)=xX\iota(x\in S)=x\in X, so the unique isomorphism between ιXS\iota\in X^S (built as a lookup table using \mapsto) and SXS\subseteq X is determined by the following: we can only draw that arrow SιXS\overset{\iota}{\to}X when we have element-wise agreement s=ι(s) sSs=\iota(s)~\forall s\in S.

We require the same of all the powersets (elements are subsets that agree element-wise with their containing sets) and functions use the !\forall\ldots\exists! definition. These are specific material sets, not sets unique up to unique isomorphism, because in ZFC they have to be.

This significantly weakens this approach, and introduces all kinds of annoying checks and the construction of explicit isomorphisms if we want to map into say, Grp\sf Grp, but the diagrams I drew still commute. ι\iota preserves certain commuting diagrams involving functions and their direct images etc. using material sets. So ι\iota is a natural transformation within Set\sf Set in ZFC.

It might be evil from a CT sense, and terribly weakened compared to standard CT practice, but it seems to me this still works internal to a ZFC model of Set\sf Set, and this is what I have always understood people to mean. Tom Leinster talks briefly about things like choosing specific privileged sets etc. in his ETCS preprint, and claims it works. I admit though that I have not looked carefully at the internals, and am no expert at set theory, so maybe losing "unique up to unique iso" isn't just annoying and inconvenient, but actually breaks something.

I agree with products it gets dicier, but strictly-set-theory people don't tend to use the term "categorical product" as much, while I have heard them use the term "natural inclusion".

It was less a demand that you demonstrate something doesn't work, and more an invitation to say something about what breaks if it was convenient to do so.

I want to be clear that I am not advocating working this way!! I just want to be more sure that if I say something categorical to a programmer new to category theory at work, who only knows naive set theory, that I'm not actually saying something badly wrong.

view this post on Zulip David Michael Roberts (Jun 27 2024 at 23:25):

Regarding the "easy question", did you check the universal property? Note that to be a pushout you need 1) a commutative square (you can make one by factoring your \top through {*}, and putting that singleton in the bottom left corner, opposite XX); and 2) the universal property.

view this post on Zulip David Michael Roberts (Jun 27 2024 at 23:30):

Now suppose you have some XX with at least one element and S=1S={1}, for some chosen 1X1\in X. The commuting square made from ! ⁣:S!\colon S \to *, ιS ⁣:SX\iota_S\colon S\hookrightarrow X, idXid_X and t ⁣:Xt\colon {*}\to X picking out 1 should induce a unique function u ⁣:{0,1}Xu\colon \{0,1\}\to X, if what you describe is the pushout, such that uχS=idXu\circ \chi_S = id_X. But this is only possible if χS\chi_S is injective. And hence that 0<X20<|X| \leq 2.

view this post on Zulip David Michael Roberts (Jun 27 2024 at 23:37):

I don't know what you mean about elements of XSX^S being isomorphic, what I'm talking about is independent of the cartesian closed structure of Set.

What I'm after is a nontrivial functor FF with codomain Set (for now, the category of ZFC sets) that takes the value XX on some object AA, another functor GG that takes the value SS on that same object, and also an isomorphism natural transformation from the second functor to the first. This means that if I have f ⁣:ABf\colon A\stackrel{\simeq}{\to} B, then F(B)F(B) contains G(B)G(B) as a literal subset, and then we have F(f)S=G(f) ⁣:SG(B)F(f)\big|_S = G(f)\colon S \stackrel{\simeq}{\to} G(B) as functions.

One can get this in a stupid way by saying the domain of FF and GG is the trivial, single object, single arrow category. But then this would imply that every single morphism in any category is 'canonical'.

view this post on Zulip Eric M Downes (Jun 28 2024 at 01:30):

David Michael Roberts said:

Now suppose you have some XX with at least one element and S=1S={1}, for some chosen 1X1\in X. The commuting square made from ! ⁣:S!\colon S \to *, ιS ⁣:SX\iota_S\colon S\hookrightarrow X, idXid_X and t ⁣:Xt\colon {*}\to X picking out 1 should induce a unique function u ⁣:{0,1}Xu\colon \{0,1\}\to X, if what you describe is the pushout, such that uχS=idXu\circ \chi_S = id_X. But this is only possible if χS\chi_S is injective. And hence that 0<X20<|X| \leq 2.

You're right its not a pushout, thank you. A pullback over inclusions is closer to what I mean, but even that isn't quite right. I was trying to say subsets of both SS and XX will also have indicator functions that factor through χS\chi_S. And because a map into 22 is isomorphic to a powerset on the domain of that map, we obtain many other commuting diagrams.

Thanks for communicating what you're looking for! That's very clear and I'll have to think about it.

view this post on Zulip David Michael Roberts (Jun 28 2024 at 01:37):

Yes, the square is a pullback, by the defining nature of the subobject classifier. We have in the category of ZFC sets a canonical choice of pullback of any injection, by taking any pullback, and then taking the canonical inclusion of the image of the resulting injection instead (which also satisfies the universal property of the pullback).

Thanks for giving the idea some thought!