<rss version="2.0">
  <channel>
    <title>Robbie Lyman</title>
    <link>https://www.robbielyman.com</link>
    <description>Robbie Lyman - Blog</description>
    <generator>Zine -- https://zine-ssg.io</generator>
    <language>en-US</language>
    <lastBuildDate>Tue, 08 Sep 2026 18:11:12 +0000</lastBuildDate>
    
      <item>
        <title>Topologies on Free Products</title>
        <description>&lt;p&gt;In &lt;a href=&quot;https://www.robbielyman.com/blog/topologies-for-groups/&quot;&gt;a previous post&lt;/a&gt;, I introduced a set of axioms for identity neighborhoods in topological groups. In general, many of the familiar categorical constructions for topological groups appear to me to be extremely poorly understood so far. Some of this appears to me to be intrinsic to the subject, but plenty of it does not.&lt;/p&gt;&lt;p&gt;For example, in this post I want to describe a collection of group topologies on the free product &lt;script type=&quot;math/tex&quot;&gt;G * H&lt;/script&gt; of topological groups &lt;script type=&quot;math/tex&quot;&gt;G&lt;/script&gt; and &lt;script type=&quot;math/tex&quot;&gt;H&lt;/script&gt;, and determine which one makes the free product into the categorical coproduct in the category of topological groups.&lt;/p&gt;&lt;h2&gt;Free Products, A Refresher&lt;/h2&gt;&lt;p&gt;If &lt;script type=&quot;math/tex&quot;&gt;S&lt;/script&gt; is a set (called an “alphabet”), the “free monoid” &lt;script type=&quot;math/tex&quot;&gt;S^*&lt;/script&gt; over &lt;script type=&quot;math/tex&quot;&gt;S&lt;/script&gt;, also sometimes called the collection of “words” or “strings” in &lt;script type=&quot;math/tex&quot;&gt;S&lt;/script&gt; is the collection of finite sequences &lt;script type=&quot;math/tex&quot;&gt;s_1s_2\ldots s_n&lt;/script&gt;, where each &lt;script type=&quot;math/tex&quot;&gt;s_i \in S&lt;/script&gt;. Concatenation of strings is an associative, typically noncommutative  binary operation on &lt;script type=&quot;math/tex&quot;&gt;S^*&lt;/script&gt; with a two-sided identity, namely the empty string. (The operation, its associativity and identity are what make &lt;script type=&quot;math/tex&quot;&gt;S^*&lt;/script&gt; deserve the appellation “monoid”.)&lt;/p&gt;&lt;p&gt;In general, &lt;script type=&quot;math/tex&quot;&gt;S^*&lt;/script&gt; is not a group, because there is no inverse to concatenation. However, when &lt;script type=&quot;math/tex&quot;&gt;G&lt;/script&gt; and &lt;script type=&quot;math/tex&quot;&gt;H&lt;/script&gt; are groups, there is an equivalence relation on &lt;script type=&quot;math/tex&quot;&gt;(G \cup H)^*&lt;/script&gt; whose quotient is a group. If &lt;script type=&quot;math/tex&quot;&gt;\omega_1&lt;/script&gt; and &lt;script type=&quot;math/tex&quot;&gt;\omega_2&lt;/script&gt; are strings with equivalence classes &lt;script type=&quot;math/tex&quot;&gt;[\omega_1]&lt;/script&gt; and &lt;script type=&quot;math/tex&quot;&gt;[\omega_2]&lt;/script&gt; respectively, the group operation is&lt;/p&gt;&lt;script type=&quot;math/tex&quot;&gt;[\omega_1][\omega_2] = [\omega_1\omega_2].
&lt;/script&gt;&lt;p&gt;In other words, concatenation of strings descends to become the group operation.&lt;/p&gt;&lt;p&gt;Here is the equivalence relation: if &lt;script type=&quot;math/tex&quot;&gt;g_1 g_2 = g_3&lt;/script&gt; in &lt;script type=&quot;math/tex&quot;&gt;G&lt;/script&gt; or &lt;script type=&quot;math/tex&quot;&gt;h_1 h_2 = h_3&lt;/script&gt; in &lt;script type=&quot;math/tex&quot;&gt;H&lt;/script&gt;, we set&lt;/p&gt;&lt;script type=&quot;math/tex&quot;&gt;\omega_1 g_1 g_2 \omega_2 \sim \omega_1 g_3 \omega_2 \quad\text{and}\quad
\omega_1 h_1 h_2 \omega_2 \sim \omega_1 h_3 \omega_2,
&lt;/script&gt;&lt;p&gt;where &lt;script type=&quot;math/tex&quot;&gt;\omega_1&lt;/script&gt; and &lt;script type=&quot;math/tex&quot;&gt;\omega_2&lt;/script&gt; are arbitrary strings. Also if &lt;script type=&quot;math/tex&quot;&gt;1_G&lt;/script&gt; and &lt;script type=&quot;math/tex&quot;&gt;1_H&lt;/script&gt; are the identity elements of &lt;script type=&quot;math/tex&quot;&gt;G&lt;/script&gt; and &lt;script type=&quot;math/tex&quot;&gt;H&lt;/script&gt; respectively, we also set&lt;/p&gt;&lt;script type=&quot;math/tex&quot;&gt;\omega_1 1_G \omega_2 \sim \omega_1\omega_2 \quad\text{and}\quad
\omega_1 1_H \omega_2 \sim \omega_1\omega_2.
&lt;/script&gt;&lt;p&gt;Two strings are equivalent if one can be transformed into the other by a finite collection of moves.&lt;/p&gt;&lt;p&gt;The quotient of &lt;script type=&quot;math/tex&quot;&gt;(G \cup H)^*&lt;/script&gt; by the equivalence relation &lt;script type=&quot;math/tex&quot;&gt;\sim&lt;/script&gt; generated by these four operations is a group &lt;script type=&quot;math/tex&quot;&gt;G * H&lt;/script&gt;, which we call the &lt;em&gt;free product&lt;/em&gt; of &lt;script type=&quot;math/tex&quot;&gt;G&lt;/script&gt; and &lt;script type=&quot;math/tex&quot;&gt;H&lt;/script&gt;, where the inverse of a word &lt;script type=&quot;math/tex&quot;&gt;s_1\ldots s_n&lt;/script&gt; is represented by &lt;script type=&quot;math/tex&quot;&gt;s_n^{-1}\ldots s_1^{-1}&lt;/script&gt;, where the inversion of each letter happens in the group &lt;script type=&quot;math/tex&quot;&gt;G&lt;/script&gt; or &lt;script type=&quot;math/tex&quot;&gt;H&lt;/script&gt; as the case may be.&lt;/p&gt;&lt;p&gt;This equivalence relation is extremely nice from a theory of computation standpoint, by the way. Every word can be represented uniquely by a word which cannot be shortened by any of these four operations, and such words can be recognized by a finite state automaton with four states: &lt;strong&gt;START&lt;/strong&gt;, &lt;strong&gt;G&lt;/strong&gt;, &lt;strong&gt;H&lt;/strong&gt; and &lt;strong&gt;REJECT.&lt;/strong&gt; Only the &lt;strong&gt;REJECT&lt;/strong&gt; state is not an accept state, and the start state is &lt;strong&gt;START.&lt;/strong&gt; From &lt;strong&gt;START,&lt;/strong&gt; every nonidentity element of &lt;script type=&quot;math/tex&quot;&gt;G&lt;/script&gt; takes you to &lt;strong&gt;G&lt;/strong&gt;, and every nonidentity element of &lt;script type=&quot;math/tex&quot;&gt;H&lt;/script&gt; takes you to &lt;strong&gt;H&lt;/strong&gt;. At &lt;strong&gt;G&lt;/strong&gt; nonidentity elements of &lt;script type=&quot;math/tex&quot;&gt;H&lt;/script&gt; take you to &lt;strong&gt;H&lt;/strong&gt; and conversely at &lt;strong&gt;H&lt;/strong&gt;, nonidentity elements of &lt;script type=&quot;math/tex&quot;&gt;G&lt;/script&gt; take you to &lt;strong&gt;G&lt;/strong&gt;. All other possibilities take you to &lt;strong&gt;REJECT&lt;/strong&gt;.&lt;/p&gt;&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;
&lt;!-- Generator: Adobe Adobe Illustrator 24.2.0, SVG Export Plug-In . SVG Version: 6.00 Build 0)  --&gt;
&lt;svg version=&quot;1.1&quot; id=&quot;Layer_1&quot; xmlns=&quot;http://www.w3.org/2000/svg&quot; xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot; x=&quot;0px&quot; y=&quot;0px&quot;
	 viewBox=&quot;0 80 340 300&quot; style=&quot;enable-background:new 0 80 340 480;&quot; xml:space=&quot;preserve&quot;&gt;
&lt;style type=&quot;text/css&quot;&gt;
	.st2{
		fill: var(--subtext0);
	}
	.st1{
		fill: none;
		stroke: var(--subtext0);
		stroke-miterlimit: 10;
		stroke-width: 4;
	}
	.st1.accept{
		stroke: var(--teal);
	}
	.st1.reject{
		stroke: var(--red);
	}
	.math {
		stroke: var(--blue);
	}
&lt;/style&gt;
  &lt;defs&gt;
    &lt;!-- A marker to be used as an arrowhead --&gt;
    &lt;marker
      id=&quot;arrow&quot;
      viewBox=&quot;0 0 10 10&quot;
      refX=&quot;5&quot;
      refY=&quot;5&quot;
      markerWidth=&quot;4&quot;
      markerHeight=&quot;4&quot;
      orient=&quot;auto-start-reverse&quot;&gt;
      &lt;path class=&quot;st2&quot; d=&quot;M 0 0 L 10 5 L 0 10 z&quot; /&gt;
    &lt;/marker&gt;
  &lt;/defs&gt;
&lt;text fill=&quot;var(--teal)&quot; x=&quot;60&quot; y=&quot;110&quot;&gt;START&lt;/text&gt;
&lt;text fill=&quot;var(--red)&quot; x=&quot;110&quot; y=&quot;365&quot;&gt;REJECT&lt;/text&gt;
&lt;foreignObject width=&quot;50&quot; height=&quot;50&quot; transform=&quot;matrix(0.75 0 0 0.75 240 110)&quot; class=&quot;st1&quot;&gt;
	&lt;math xmlns = &quot;http://www.w3.org/1998/Math/MathML&quot;&gt;
	&lt;msub&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;mi&gt;G&lt;/mi&gt;&lt;/msub&gt;i
	&lt;mtext&gt;, &lt;/mtext&gt;&lt;mspace width=&quot;5px&quot; /&gt;
	&lt;msub&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;mi&gt;H&lt;/mi&gt;&lt;/msub&gt;
	&lt;/math&gt;
&lt;/foreignObject&gt; 
&lt;foreignObject width=&quot;100&quot; height=&quot;50&quot; transform=&quot;matrix(0.75 0 0 0.75 220 260)&quot; class=&quot;st1&quot;&gt;
	&lt;math xmlns = &quot;http://www.w3.org/1998/Math/MathML&quot;&gt;
	&lt;msub&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;mi&gt;G&lt;/mi&gt;&lt;/msub&gt;i
	&lt;mtext&gt;, &lt;/mtext&gt;&lt;mspace width=&quot;5px&quot; /&gt;
	&lt;msub&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;mi&gt;H&lt;/mi&gt;&lt;/msub&gt;
	&lt;mtext&gt;, &lt;/mtext&gt;&lt;mspace width=&quot;5px&quot; /&gt;
	&lt;mi&gt;g&lt;/mi&gt;
	&lt;/math&gt;
&lt;/foreignObject&gt; 
&lt;foreignObject width=&quot;100&quot; height=&quot;50&quot; transform=&quot;matrix(0.75 0 0 0.75 40 280)&quot; class=&quot;st1&quot;&gt;
	&lt;math xmlns = &quot;http://www.w3.org/1998/Math/MathML&quot;&gt;
	&lt;msub&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;mi&gt;G&lt;/mi&gt;&lt;/msub&gt;i
	&lt;mtext&gt;, &lt;/mtext&gt;&lt;mspace width=&quot;5px&quot; /&gt;
	&lt;msub&gt;&lt;mn&gt;1&lt;/mn&gt;&lt;mi&gt;H&lt;/mi&gt;&lt;/msub&gt;
	&lt;mtext&gt;, &lt;/mtext&gt;&lt;mspace width=&quot;5px&quot; /&gt;
	&lt;mi&gt;h&lt;/mi&gt;
	&lt;/math&gt;
&lt;/foreignObject&gt; 
&lt;foreignObject width=&quot;50&quot; height=&quot;50&quot; transform=&quot;matrix(0.75 0 0 0.75 145 255)&quot; class=&quot;st1&quot;&gt;
	&lt;math xmlns = &quot;http://www.w3.org/1998/Math/MathML&quot;&gt;
	&lt;mi&gt;g&lt;/mi&gt;
	&lt;/math&gt;
&lt;/foreignObject&gt; 
&lt;foreignObject width=&quot;50&quot; height=&quot;50&quot; transform=&quot;matrix(0.75 0 0 0.75 145 205)&quot; class=&quot;st1&quot;&gt;
	&lt;math xmlns = &quot;http://www.w3.org/1998/Math/MathML&quot;&gt;
	&lt;mi&gt;h&lt;/mi&gt;
	&lt;/math&gt;
&lt;/foreignObject&gt; 
&lt;foreignObject width=&quot;50&quot; height=&quot;50&quot; transform=&quot;matrix(0.75 0 0 0.75 65 155)&quot; class=&quot;st1&quot;&gt;
	&lt;math xmlns = &quot;http://www.w3.org/1998/Math/MathML&quot;&gt;
	&lt;mi&gt;h&lt;/mi&gt;
	&lt;/math&gt;
&lt;/foreignObject&gt; 
&lt;foreignObject width=&quot;50&quot; height=&quot;50&quot; transform=&quot;matrix(0.75 0 0 0.75 185 125)&quot; class=&quot;st1&quot;&gt;
	&lt;math xmlns = &quot;http://www.w3.org/1998/Math/MathML&quot;&gt;
	&lt;mi&gt;g&lt;/mi&gt;
	&lt;/math&gt;
&lt;/foreignObject&gt; 
&lt;foreignObject width=&quot;50&quot; height=&quot;50&quot; transform=&quot;matrix(1 0 0 1 255 215)&quot; class=&quot;st1&quot;&gt;
	&lt;math xmlns = &quot;http://www.w3.org/1998/Math/MathML&quot;&gt;
	&lt;mi&gt;G&lt;/mi&gt;
	&lt;/math&gt;
&lt;/foreignObject&gt; 
&lt;foreignObject width=&quot;50&quot; height=&quot;50&quot; transform=&quot;matrix(1 0 0 1 30 215)&quot; class=&quot;st1&quot;&gt;
	&lt;math xmlns = &quot;http://www.w3.org/1998/Math/MathML&quot;&gt;
	&lt;mi&gt;H&lt;/mi&gt;
	&lt;/math&gt;
&lt;/foreignObject&gt; 

&lt;circle class=&quot;st1 accept&quot; cx=&quot;122.26&quot; cy=&quot;139.07&quot; r=&quot;11.25&quot;/&gt;
&lt;circle class=&quot;st1 accept&quot; cx=&quot;122.26&quot; cy=&quot;139.07&quot; r=&quot;20&quot;/&gt;
&lt;circle class=&quot;st1 accept&quot; cx=&quot;70.26&quot; cy=&quot;242.07&quot; r=&quot;11.25&quot;/&gt;
&lt;circle class=&quot;st1 accept&quot; cx=&quot;70.26&quot; cy=&quot;242.07&quot; r=&quot;20&quot;/&gt;
&lt;circle class=&quot;st1 accept&quot; cx=&quot;230.26&quot; cy=&quot;218.07&quot; r=&quot;11.25&quot;/&gt;
&lt;circle class=&quot;st1 accept&quot; cx=&quot;230.26&quot; cy=&quot;218.07&quot; r=&quot;20&quot;/&gt;
&lt;circle class=&quot;st1 reject&quot; cx=&quot;158.26&quot; cy=&quot;316.07&quot; r=&quot;20&quot;/&gt;
&lt;path class=&quot;st1&quot; d=&quot;M97.75,223.35c4.24-6.01,10.76-10.01,17.39-13.2c25.65-12.33,55.97-14.63,83.19-6.3&quot; marker-start=&quot;url(#arrow)&quot;/&gt;
&lt;path class=&quot;st1&quot; d=&quot;M104.74,247.48c3.94,3.28,9.06,4.76,14.08,5.81c28.68,5.98,59.69-0.19,83.9-16.69&quot; marker-end=&quot;url(#arrow)&quot;/&gt;
&lt;path class=&quot;st1&quot; d=&quot;M97.08,161.54c-12.39,13.47-21.56,29.89-26.53,47.5&quot; marker-end=&quot;url(#arrow)&quot;/&gt;
&lt;path class=&quot;st1&quot; d=&quot;M152.93,142.8c8.52,2.81,16.91,6,25.15,9.56c4.83,2.09,9.68,4.34,13.67,7.77c3.47,2.98,6.18,6.74,8.77,10.51
	c5.09,7.41,9.89,15.02,14.38,22.82&quot; marker-end=&quot;url(#arrow)&quot;/&gt;
&lt;path class=&quot;st1&quot; d=&quot;M138.35,115.26c19.51-13.62,46.25-11.37,68.5-2.93c30.48,11.57,56.99,34.1,71.73,63.18
	c14.74,29.08,17.1,64.55,4.7,94.7c-3.99,9.7-9.45,18.85-16.54,26.58c-19.18,20.94-49.87,29.89-77.78,24.61&quot; marker-end=&quot;url(#arrow)&quot;/&gt;
&lt;path class=&quot;st1&quot; d=&quot;M84.95,270.36c9.22,16.6,23.9,30.12,41.21,37.93&quot; marker-end=&quot;url(#arrow)&quot;/&gt;
&lt;path class=&quot;st1&quot; d=&quot;M225.61,249.1c-7.55,20.32-21.66,38.15-39.7,50.17&quot; marker-end=&quot;url(#arrow)&quot;/&gt;
&lt;/svg&gt;
&lt;p&gt;Provided you know how to compute in &lt;script type=&quot;math/tex&quot;&gt;G&lt;/script&gt; and &lt;script type=&quot;math/tex&quot;&gt;H&lt;/script&gt;, you can adapt the above automaton to help you do computations in &lt;script type=&quot;math/tex&quot;&gt;G * H&lt;/script&gt;. A “greedy algorithm”, for example, which works by seeing where in the word we move to &lt;strong&gt;REJECT&lt;/strong&gt; and performing corresponding one of our four basic operations which reduces word length and trying again will run in more or less linear time.&lt;/p&gt;&lt;p&gt;Free products of nontrivial groups &lt;script type=&quot;math/tex&quot;&gt;G&lt;/script&gt; and &lt;script type=&quot;math/tex&quot;&gt;H&lt;/script&gt; are always infinite, nonabelian (i.e. the group operation is noncommutative) and contain canonical copies of both &lt;script type=&quot;math/tex&quot;&gt;G&lt;/script&gt; and &lt;script type=&quot;math/tex&quot;&gt;H&lt;/script&gt; as (non-normal) subgroups.&lt;/p&gt;&lt;p&gt;The free product satisfies a “universal property”: If &lt;script type=&quot;math/tex&quot;&gt;K&lt;/script&gt; is a group and &lt;script type=&quot;math/tex&quot;&gt;G \to K&lt;/script&gt; and &lt;script type=&quot;math/tex&quot;&gt;H \to K&lt;/script&gt; are homomorphisms, there exists a unique homomorphism &lt;script type=&quot;math/tex&quot;&gt;G * H \to K&lt;/script&gt; such that the restriction of this homomorphism to the canonical copy of &lt;script type=&quot;math/tex&quot;&gt;G&lt;/script&gt; or &lt;script type=&quot;math/tex&quot;&gt;H&lt;/script&gt; respectively gives back the homomorphisms we started with.&lt;/p&gt;&lt;h2&gt;The Bass-Serre Tree&lt;/h2&gt;&lt;p&gt;The abstract group &lt;script type=&quot;math/tex&quot;&gt;G * H&lt;/script&gt; acts on a tree called the Bass-Serre tree with one orbit of edges and two orbits of vertices. The edges of the tree correspond to elements of the group, and vertices of the tree correspond to cosets of the canonical copies of &lt;script type=&quot;math/tex&quot;&gt;G&lt;/script&gt; and &lt;script type=&quot;math/tex&quot;&gt;H&lt;/script&gt;. The edge &lt;script type=&quot;math/tex&quot;&gt;g&lt;/script&gt; connects the vertices &lt;script type=&quot;math/tex&quot;&gt;g G&lt;/script&gt; and &lt;script type=&quot;math/tex&quot;&gt;g H&lt;/script&gt;. The action of &lt;script type=&quot;math/tex&quot;&gt;G * H&lt;/script&gt; is multiplication in the labels. The stabilizer of the vertex &lt;script type=&quot;math/tex&quot;&gt;g H&lt;/script&gt;, for example, is the conjugate &lt;script type=&quot;math/tex&quot;&gt;g H g^{-1}&lt;/script&gt; of the subgroup &lt;script type=&quot;math/tex&quot;&gt;H&lt;/script&gt; in &lt;script type=&quot;math/tex&quot;&gt;G * H&lt;/script&gt;.&lt;/p&gt;&lt;p&gt;It is perhaps not immediate to see that the graph so described is a tree; this is part of a very beautiful subject called Bass-Serre theory and named for Jean Pierre Serre, who wrote a book &lt;em&gt;Trees&lt;/em&gt; on the subject, and Hyman Bass who was his grad student at the time, contributed to the theory from the beginning and continued to develop the subject for some time after.&lt;/p&gt;&lt;p&gt;At the time of this writing, Serre is 99 years old and posted a math paper to the arXiv within the past two years.&lt;/p&gt;&lt;h2&gt;Some Topologies&lt;/h2&gt;&lt;blockquote&gt;&lt;p&gt;&lt;em&gt;Update, 16 August 2026:&lt;/em&gt; Just a note to say that some of this section is not correct. In particular, none of the proposed families of identity neighborhoods below appear to be closed under products. The problem being that while it is true that &lt;script type=&quot;math/tex&quot;&gt;(gUg^{-1})^2 = gU^2g^{-1}&lt;/script&gt;, the actual products of elements of the families below must contain elements which are not conjugate into any vertex stabilizer. I noticed this while thinking about the neighboring case of free topological groups. If I find a fix, it will appear in a later post.&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;In &lt;a href=&quot;https://www.robbielyman.com/blog/topologies-for-groups/&quot;&gt;the previous post alluded to earlier&lt;/a&gt;, we found a set of axioms characterizing group topologies in terms of their identity neighborhoods. In short, identity neighborhoods are closed under finite intersections, inversion, multiplication, and conjugation.&lt;/p&gt;&lt;p&gt;Supposing &lt;script type=&quot;math/tex&quot;&gt;G&lt;/script&gt; and &lt;script type=&quot;math/tex&quot;&gt;H&lt;/script&gt; are topological groups, we are interested in group topologies on &lt;script type=&quot;math/tex&quot;&gt;G * H&lt;/script&gt; such that the canonical inclusions of &lt;script type=&quot;math/tex&quot;&gt;G&lt;/script&gt; and &lt;script type=&quot;math/tex&quot;&gt;H&lt;/script&gt; are embeddings. To this end, we must allow any identity neighborhood in &lt;script type=&quot;math/tex&quot;&gt;G&lt;/script&gt; or &lt;script type=&quot;math/tex&quot;&gt;H&lt;/script&gt; to be at least contained in an identity neighborhood of &lt;script type=&quot;math/tex&quot;&gt;G * H&lt;/script&gt;. The challenges, however, are finite intersections between identity neighborhoods in &lt;script type=&quot;math/tex&quot;&gt;G&lt;/script&gt; with those in &lt;script type=&quot;math/tex&quot;&gt;H&lt;/script&gt;, as well as ensuring that conjugates of identity neighborhoods are identity neighborhoods.&lt;/p&gt;&lt;p&gt;Thinking about it this morning, the problem feels very similar to the question of topologizing Cartesian products of spaces. I have three families of sets, &lt;script type=&quot;math/tex&quot;&gt;\mathcal{B}&lt;/script&gt;, &lt;script type=&quot;math/tex&quot;&gt;\mathcal{C}&lt;/script&gt; and &lt;script type=&quot;math/tex&quot;&gt;\mathcal{P}&lt;/script&gt;, each of which satisfies the axioms and induces a different group topology on &lt;script type=&quot;math/tex&quot;&gt;G * H&lt;/script&gt;.&lt;/p&gt;&lt;p&gt;First, a little notation: let &lt;script type=&quot;math/tex&quot;&gt;T&lt;/script&gt; be the Bass-Serre tree from above and &lt;script type=&quot;math/tex&quot;&gt;v&lt;/script&gt; a vertex, and let &lt;script type=&quot;math/tex&quot;&gt;\mathop{\mathrm{Stab}}(v)&lt;/script&gt; be its stabilizer. As we saw above, &lt;script type=&quot;math/tex&quot;&gt;v&lt;/script&gt; corresponds to a coset of the form &lt;script type=&quot;math/tex&quot;&gt;g G&lt;/script&gt; or &lt;script type=&quot;math/tex&quot;&gt;g H&lt;/script&gt;, and we may choose a unique preferred representative of this coset by requiring that the reduced word representing &lt;script type=&quot;math/tex&quot;&gt;g&lt;/script&gt; either ends with an letter in &lt;script type=&quot;math/tex&quot;&gt;H&lt;/script&gt; in the case of &lt;script type=&quot;math/tex&quot;&gt;gG&lt;/script&gt; or with a letter in &lt;script type=&quot;math/tex&quot;&gt;G&lt;/script&gt; in the case of &lt;script type=&quot;math/tex&quot;&gt;gH&lt;/script&gt;. Call this element &lt;script type=&quot;math/tex&quot;&gt;g_v&lt;/script&gt;. In all cases below, let &lt;script type=&quot;math/tex&quot;&gt;U_v&lt;/script&gt; denote an identity neighborhood in &lt;script type=&quot;math/tex&quot;&gt;\mathop{\mathrm{Stab}}(v)&lt;/script&gt;.&lt;/p&gt;&lt;script type=&quot;math/tex&quot;&gt;\mathcal{P} = \left\{
\bigcup_{v \in T} U_v :
U_v = \mathop{\mathrm{Stab}}(v) \text{ for all but finitely many } v
\right\}
&lt;/script&gt;&lt;p&gt;I called this &lt;script type=&quot;math/tex&quot;&gt;\mathcal{P}&lt;/script&gt; because its definition is reminiscent to me of the &lt;em&gt;product&lt;/em&gt; topology on a Cartesian product.&lt;/p&gt;&lt;script type=&quot;math/tex&quot;&gt;\mathcal{C} = \left\{
\bigcup_{v \in T} U_v :
U_v = g_v U_G g_v^{-1} \text { or } g_v U_H g_v^{-1}
\text{ for fixed } U_H \subset H \text{ and } U_G \subset G
\right\}
&lt;/script&gt;&lt;p&gt;The identity neighborhoods feel a bit like “cylinders”, since you fix once and for all &lt;script type=&quot;math/tex&quot;&gt;U_H&lt;/script&gt; and &lt;script type=&quot;math/tex&quot;&gt;U_G&lt;/script&gt; and just conjugate them around, hence why I chose the name &lt;script type=&quot;math/tex&quot;&gt;\mathcal{C}&lt;/script&gt;.&lt;/p&gt;&lt;script type=&quot;math/tex&quot;&gt;\mathcal{B} = \left\{
\bigcup_{v \in T} U_v 
\right\}
&lt;/script&gt;&lt;p&gt;Beyond being open, there are no constraints here; one picks a separate identity neighborhood for each &lt;script type=&quot;math/tex&quot;&gt;v&lt;/script&gt;. This topology felt most similar to the &lt;em&gt;box&lt;/em&gt; topology on a Cartesian product, hence the name &lt;script type=&quot;math/tex&quot;&gt;\mathcal{B}&lt;/script&gt;.&lt;/p&gt;&lt;p&gt;A little elementary set theory should convince you that each element of &lt;script type=&quot;math/tex&quot;&gt;\mathcal{P}&lt;/script&gt; contains an element of &lt;script type=&quot;math/tex&quot;&gt;\mathcal{C}&lt;/script&gt;, and that each element of &lt;script type=&quot;math/tex&quot;&gt;\mathcal{C}&lt;/script&gt; is an element of &lt;script type=&quot;math/tex&quot;&gt;\mathcal{B}&lt;/script&gt;, so of the three resulting topologies, &lt;script type=&quot;math/tex&quot;&gt;\mathcal{B}&lt;/script&gt; is the &lt;em&gt;finest,&lt;/em&gt; meaning it has the &lt;em&gt;most&lt;/em&gt; open sets, while &lt;script type=&quot;math/tex&quot;&gt;\mathcal{P}&lt;/script&gt; is the &lt;em&gt;coarsest,&lt;/em&gt; having the fewest open sets.&lt;/p&gt;&lt;p&gt;Since the intersection of &lt;script type=&quot;math/tex&quot;&gt;\mathop{\mathrm{Stab}}(v)&lt;/script&gt; with &lt;script type=&quot;math/tex&quot;&gt;\mathop{\mathrm{Stab}}(w)&lt;/script&gt; is trivial (i.e. just the identity) when &lt;script type=&quot;math/tex&quot;&gt;v \ne w&lt;/script&gt;, you can work term by term to see that if &lt;script type=&quot;math/tex&quot;&gt;U&lt;/script&gt; and &lt;script type=&quot;math/tex&quot;&gt;V&lt;/script&gt; belong to one of the collections above, then so do &lt;script type=&quot;math/tex&quot;&gt;U^{-1}&lt;/script&gt;, &lt;script type=&quot;math/tex&quot;&gt;g U g^{-1}&lt;/script&gt; for any &lt;script type=&quot;math/tex&quot;&gt;g&lt;/script&gt; and &lt;script type=&quot;math/tex&quot;&gt;U \cap V&lt;/script&gt;. Likewise, for each &lt;script type=&quot;math/tex&quot;&gt;U&lt;/script&gt; there is a &lt;script type=&quot;math/tex&quot;&gt;W&lt;/script&gt; such that &lt;script type=&quot;math/tex&quot;&gt;W^2 \subset U&lt;/script&gt;. Therefore each of the collections &lt;script type=&quot;math/tex&quot;&gt;\mathcal{P}&lt;/script&gt;, &lt;script type=&quot;math/tex&quot;&gt;\mathcal{C}&lt;/script&gt; and &lt;script type=&quot;math/tex&quot;&gt;\mathcal{B}&lt;/script&gt; produces a group topology on &lt;script type=&quot;math/tex&quot;&gt;G * H&lt;/script&gt;.&lt;/p&gt;&lt;p&gt;For each of these topologies, the canonical inclusions of &lt;script type=&quot;math/tex&quot;&gt;G&lt;/script&gt; and &lt;script type=&quot;math/tex&quot;&gt;H&lt;/script&gt; are embeddings. Also for each of these topologies, one can show that if &lt;script type=&quot;math/tex&quot;&gt;\Phi\colon G \to K&lt;/script&gt; and &lt;script type=&quot;math/tex&quot;&gt;\Psi\colon H \to K&lt;/script&gt; are continuous homomorphisms of topological groups, the induced homomorphism &lt;script type=&quot;math/tex&quot;&gt;G * H \to K&lt;/script&gt; is continuous.&lt;/p&gt;&lt;p&gt;The idea I have for this is to begin by supposing that &lt;script type=&quot;math/tex&quot;&gt;g \in G&lt;/script&gt; and &lt;script type=&quot;math/tex&quot;&gt;h \in H&lt;/script&gt;, and considering an identity neighborhood &lt;script type=&quot;math/tex&quot;&gt;\Phi(g)\Psi(h)W&lt;/script&gt; in &lt;script type=&quot;math/tex&quot;&gt;K&lt;/script&gt;. By continuity of multiplication in &lt;script type=&quot;math/tex&quot;&gt;K&lt;/script&gt;, there are identity neighborhoods &lt;script type=&quot;math/tex&quot;&gt;V_g&lt;/script&gt; and &lt;script type=&quot;math/tex&quot;&gt;V_h&lt;/script&gt; in &lt;script type=&quot;math/tex&quot;&gt;K&lt;/script&gt; such that &lt;script type=&quot;math/tex&quot;&gt;\Phi(g)V_g \Psi(h)V_h \subset \Phi(g)\Psi(h)W&lt;/script&gt;. By continuity of &lt;script type=&quot;math/tex&quot;&gt;\Phi&lt;/script&gt; and &lt;script type=&quot;math/tex&quot;&gt;\Psi&lt;/script&gt;, there are identity neighborhoods &lt;script type=&quot;math/tex&quot;&gt;U_g \subset G&lt;/script&gt; and &lt;script type=&quot;math/tex&quot;&gt;U_h \subset H&lt;/script&gt; such that &lt;script type=&quot;math/tex&quot;&gt;\Phi(g U_g)\Psi(g U_h) \subset \Phi(g) V_g \Psi(h)V_h&lt;/script&gt;. We can then use &lt;script type=&quot;math/tex&quot;&gt;U_g&lt;/script&gt; and &lt;script type=&quot;math/tex&quot;&gt;U_h&lt;/script&gt; to define elements of the desired family of identity neighborhoods. Some careful induction should complete the proof.&lt;/p&gt;&lt;h2&gt;Differentiating the topologies&lt;/h2&gt;&lt;blockquote&gt;&lt;p&gt;&lt;strong&gt;Exercise.&lt;/strong&gt; The canonical homomorphism &lt;script type=&quot;math/tex&quot;&gt;G * H \to G \times H&lt;/script&gt;, where the latter has the product topology, is continuous for the &lt;script type=&quot;math/tex&quot;&gt;\mathcal{C}&lt;/script&gt;-topology (and hence the &lt;script type=&quot;math/tex&quot;&gt;\mathcal{B}&lt;/script&gt;-topology) but in general not for the &lt;script type=&quot;math/tex&quot;&gt;\mathcal{P}&lt;/script&gt;-topology.&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;The point, you should convince yourself in doing the exercise, is that the preimage of the basic identity neighborhood &lt;script type=&quot;math/tex&quot;&gt;U \times V&lt;/script&gt; contains the element of &lt;script type=&quot;math/tex&quot;&gt;\mathcal{C}&lt;/script&gt; determined by &lt;script type=&quot;math/tex&quot;&gt;U&lt;/script&gt; and &lt;script type=&quot;math/tex&quot;&gt;V&lt;/script&gt;, but contains no element of &lt;script type=&quot;math/tex&quot;&gt;\mathcal{P}&lt;/script&gt;.&lt;/p&gt;&lt;p&gt;It’s fairly obvious that the &lt;script type=&quot;math/tex&quot;&gt;\mathcal{B}&lt;/script&gt;-topology is in general genuinely finer than the &lt;script type=&quot;math/tex&quot;&gt;\mathcal{C}&lt;/script&gt;-topology, but I’m not aware of a universal construction that lets you readily see this. That is, I don’t know of a topological group &lt;script type=&quot;math/tex&quot;&gt;K&lt;/script&gt; not isomorphic to &lt;script type=&quot;math/tex&quot;&gt;G * H&lt;/script&gt; equipped with homomorphisms from the factors for which the abstract homomorphism &lt;script type=&quot;math/tex&quot;&gt;G * H \to K&lt;/script&gt; is continuous for the &lt;script type=&quot;math/tex&quot;&gt;\mathcal{B}&lt;/script&gt;-topology but not for the &lt;script type=&quot;math/tex&quot;&gt;\mathcal{C}&lt;/script&gt;-topology. If you can think of one, &lt;a href=&quot;mailto:robbie.lyman@rutgers.edu&quot;&gt;email me!&lt;/a&gt;, I’d love to hear about it.&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;strong&gt;Proposition.&lt;/strong&gt; The &lt;script type=&quot;math/tex&quot;&gt;\mathcal{B}&lt;/script&gt;-topology is the finest group topology on &lt;script type=&quot;math/tex&quot;&gt;G * H&lt;/script&gt; for which the inclusion maps &lt;script type=&quot;math/tex&quot;&gt;G \to G * H&lt;/script&gt; and &lt;script type=&quot;math/tex&quot;&gt;H \to G * H&lt;/script&gt; are continuous. It is therefore the coproduct of &lt;script type=&quot;math/tex&quot;&gt;G&lt;/script&gt; and &lt;script type=&quot;math/tex&quot;&gt;H&lt;/script&gt; in the category of topological groups.&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;em&gt;Proof.&lt;/em&gt; Suppose that &lt;script type=&quot;math/tex&quot;&gt;\tau&lt;/script&gt; is a group topology on &lt;script type=&quot;math/tex&quot;&gt;G * H&lt;/script&gt; as in the statement. We show that an arbitrary identity neighborhood in &lt;script type=&quot;math/tex&quot;&gt;\tau&lt;/script&gt; contains a &lt;script type=&quot;math/tex&quot;&gt;\mathcal{B}&lt;/script&gt;-identity neighborhood. This will show that &lt;script type=&quot;math/tex&quot;&gt;\tau&lt;/script&gt;-open sets are &lt;script type=&quot;math/tex&quot;&gt;\mathcal{B}&lt;/script&gt;-open, completing the proof.&lt;/p&gt;&lt;p&gt;If &lt;script type=&quot;math/tex&quot;&gt;U&lt;/script&gt; is a &lt;script type=&quot;math/tex&quot;&gt;\tau&lt;/script&gt;-identity neighborhood, we know that &lt;script type=&quot;math/tex&quot;&gt;U_G = U \cap G&lt;/script&gt; and &lt;script type=&quot;math/tex&quot;&gt;U_H = U \cap H&lt;/script&gt; are identity neighborhoods, as is &lt;script type=&quot;math/tex&quot;&gt;gUg^{-1}&lt;/script&gt; for any &lt;script type=&quot;math/tex&quot;&gt;g&lt;/script&gt;. More generally, if &lt;script type=&quot;math/tex&quot;&gt;g = g_v&lt;/script&gt; for &lt;script type=&quot;math/tex&quot;&gt;v \in T&lt;/script&gt;, notice that &lt;script type=&quot;math/tex&quot;&gt;g_v^{-1} U g_v \cap U \ni 1&lt;/script&gt; is an identity neighborhood, so we conclude that &lt;script type=&quot;math/tex&quot;&gt;U \supset g_v U_v g_v^{-1}&lt;/script&gt; for some identity neighborhood &lt;script type=&quot;math/tex&quot;&gt;U_v \subset \mathop{\mathrm{Stab}}(v)&lt;/script&gt;. This constructs an element of &lt;script type=&quot;math/tex&quot;&gt;\mathcal{B}&lt;/script&gt; contained in &lt;script type=&quot;math/tex&quot;&gt;U&lt;/script&gt;. &lt;script type=&quot;math/tex&quot;&gt;\QED&lt;/script&gt;&lt;/p&gt;</description>
        <link>https://www.robbielyman.com/blog/topologies-on-free-products/</link>
        <pubDate>Wed, 12 Aug 2026 00:30:00 +0000</pubDate>
        <guid>https://www.robbielyman.com/blog/topologies-on-free-products/</guid>
      </item>
    
      <item>
        <title>Who&apos;s afraid of a non sofic group</title>
        <description>&lt;p&gt;This is a post mostly about AI, I guess, and to complain about a bad definition which somehow managed to stay relevant in group theory despite having very few known consequences for twenty-five years or so.&lt;/p&gt;&lt;h2&gt;Dynamical Systems, Surjunctivity&lt;/h2&gt;&lt;p&gt;Suppose &lt;script type=&quot;math/tex&quot;&gt;X&lt;/script&gt; is a space and &lt;script type=&quot;math/tex&quot;&gt;\rho \colon G \times X \to X&lt;/script&gt; is an action of &lt;script type=&quot;math/tex&quot;&gt;G&lt;/script&gt; on &lt;script type=&quot;math/tex&quot;&gt;X&lt;/script&gt; by homeomorphisms. A continuous map &lt;script type=&quot;math/tex&quot;&gt;\Phi \colon X \to X&lt;/script&gt; is &lt;em&gt;&lt;script type=&quot;math/tex&quot;&gt;G&lt;/script&gt;-equivariant&lt;/em&gt; if for each &lt;script type=&quot;math/tex&quot;&gt;g \in G&lt;/script&gt; and &lt;script type=&quot;math/tex&quot;&gt;x \in X&lt;/script&gt;, we have &lt;script type=&quot;math/tex&quot;&gt;\Phi(\rho(g,x)) = \rho(g,\Phi(x))&lt;/script&gt;.&lt;/p&gt;&lt;p&gt;For example, &lt;script type=&quot;math/tex&quot;&gt;G&lt;/script&gt; might be the integers under addition, and &lt;script type=&quot;math/tex&quot;&gt;X = \mathbb{R}&lt;/script&gt;, where the action is &lt;script type=&quot;math/tex&quot;&gt;\rho(k,x) = x + k&lt;/script&gt;. In this setting, you can check that the maps &lt;script type=&quot;math/tex&quot;&gt;\Phi_1, \Phi_2\colon \mathbb{R} \to \mathbb{R}&lt;/script&gt; defined as&lt;/p&gt;&lt;script type=&quot;math/tex&quot;&gt;\Phi_1(x) = \pi x \qquad \Phi_2(x) = x + \pi
&lt;/script&gt;&lt;p&gt;have the property that &lt;script type=&quot;math/tex&quot;&gt;\Phi_1&lt;/script&gt; is &lt;em&gt;not&lt;/em&gt; equivariant, but &lt;script type=&quot;math/tex&quot;&gt;\Phi_2&lt;/script&gt; &lt;em&gt;is.&lt;/em&gt;&lt;/p&gt;&lt;p&gt;Suppose &lt;script type=&quot;math/tex&quot;&gt;S&lt;/script&gt; is some finite set (typically called an “alphabet”). Let &lt;script type=&quot;math/tex&quot;&gt;S^G&lt;/script&gt; denote all the functions &lt;script type=&quot;math/tex&quot;&gt;\omega \colon G \to S&lt;/script&gt;. This is also the &lt;em&gt;product&lt;/em&gt; of copies of &lt;script type=&quot;math/tex&quot;&gt;S&lt;/script&gt; indexed by &lt;script type=&quot;math/tex&quot;&gt;G&lt;/script&gt;. If we give &lt;script type=&quot;math/tex&quot;&gt;S&lt;/script&gt; the discrete topology and &lt;script type=&quot;math/tex&quot;&gt;S^G&lt;/script&gt; the &lt;em&gt;product topology,&lt;/em&gt; then by &lt;a href=&quot;https://en.wikipedia.org/wiki/Tychonoff%27s_theorem&quot;&gt;Tychonoff’s theorem&lt;/a&gt;, since &lt;script type=&quot;math/tex&quot;&gt;S&lt;/script&gt; is compact (it’s finite and discrete), so too is the (typically infinite) space &lt;script type=&quot;math/tex&quot;&gt;S^G&lt;/script&gt;. Any group &lt;script type=&quot;math/tex&quot;&gt;G&lt;/script&gt; always admits an action on this space by the rule &lt;script type=&quot;math/tex&quot;&gt;\rho(g,\omega)(h) = \omega(g h)&lt;/script&gt;.&lt;/p&gt;&lt;p&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Walter_Gottschalk&quot;&gt;Walter Gottschalk&lt;/a&gt; called a group &lt;script type=&quot;math/tex&quot;&gt;G&lt;/script&gt; &lt;em&gt;surjunctive&lt;/em&gt; if every equivariant continuous map &lt;script type=&quot;math/tex&quot;&gt;S^G \to S^G&lt;/script&gt; which is &lt;em&gt;injective&lt;/em&gt; is automatically &lt;em&gt;surjective.&lt;/em&gt;&lt;/p&gt;&lt;p&gt;Surjunctivity is sort of like finiteness: just by counting, you can see that any function from a finite set to itself which is injective is also surjective. On the other hand, it is much more mysterious: To my knowledge, there is still no known example of a non-surjunctive group.&lt;/p&gt;&lt;p&gt;There are actually lots of properties in mathematics which similarly evade our grasp. To name a couple off the top of my head: We do not know whether every finitely presented group with one end is semistable at infinity. We do not know whether every word hyperbolic group is residually finite. We do not know whether every finitely generated purely pseudo-Anosov subgroup of the mapping class group is also convex-cocompact. We do not know whether every Artin group is torsion free. We do not know whether every mapping class group (of a surface group of finite type) is linear.&lt;/p&gt;&lt;h2&gt;Sofic groups&lt;/h2&gt;&lt;p&gt;A finitely generated group is &lt;em&gt;sofic&lt;/em&gt; (forgive me for handwaving) if it has a Cayley graph with respect to a finite generating set which can be approximated to any desired specificity by finite graphs.&lt;/p&gt;&lt;p&gt;Explicitly, such a Cayley graph &lt;script type=&quot;math/tex&quot;&gt;\Gamma&lt;/script&gt; has edges labeled by the generating set. We seek for each &lt;script type=&quot;math/tex&quot;&gt;r &gt; 0&lt;/script&gt; and &lt;script type=&quot;math/tex&quot;&gt;\epsilon &gt; 0&lt;/script&gt; a &lt;em&gt;finite&lt;/em&gt; graph &lt;script type=&quot;math/tex&quot;&gt;(V,E)&lt;/script&gt; with edges similarly labeled such that there is a subset &lt;script type=&quot;math/tex&quot;&gt;V_0 \subset V&lt;/script&gt; of size at least &lt;script type=&quot;math/tex&quot;&gt;(1 - \epsilon)|V|&lt;/script&gt; such that the &lt;script type=&quot;math/tex&quot;&gt;r&lt;/script&gt;-neighborhood of each vertex &lt;script type=&quot;math/tex&quot;&gt;v_0 \in V_0&lt;/script&gt; is isomorphic (respecting labels) to the &lt;script type=&quot;math/tex&quot;&gt;r&lt;/script&gt;-neighborhood of any vertex in &lt;script type=&quot;math/tex&quot;&gt;\Gamma&lt;/script&gt;.&lt;/p&gt;&lt;p&gt;This is, I must say, a bad definition. The reason it is the way that it is is best explained by introducing ultraproducts, which are gorgeous things that I can’t waste your time with today.&lt;/p&gt;&lt;p&gt;The reason for the definition (perhaps), is twofold: on the one hand, one can prove that sofic groups are surjunctive. It was Gromov who did this first, in 1999. The second reason, which is quite pretty, but sort of difficult to explain quickly, is that two important but obviously limited families of groups are easily seen to be surjunctive: the &lt;em&gt;amenable&lt;/em&gt; groups and the &lt;em&gt;residually finite&lt;/em&gt; groups.&lt;/p&gt;&lt;p&gt;A group &lt;script type=&quot;math/tex&quot;&gt;G&lt;/script&gt; is &lt;em&gt;amenable&lt;/em&gt; if every continuous action on a compact space &lt;script type=&quot;math/tex&quot;&gt;X&lt;/script&gt; admits an invariant probability measure. The “volume” (Lebesgue) measure on a unit ball is an example of a probability measure. A math-pilled reader may be aware of the &lt;a href=&quot;https://en.wikipedia.org/wiki/Banach%E2%80%93Tarski_paradox&quot;&gt;Banach-Tarski paradox&lt;/a&gt; which doubles the volume of a 3-dimensional ball. Amenability was introduced by John von Neumann to name the phenomenon allowing (or disallowing) similar paradoxes to occur in various settings.&lt;/p&gt;&lt;p&gt;A group &lt;script type=&quot;math/tex&quot;&gt;G&lt;/script&gt; is &lt;em&gt;residually finite&lt;/em&gt; if whenever &lt;script type=&quot;math/tex&quot;&gt;g \in G&lt;/script&gt; is nontrivial, there is a homomorphism &lt;script type=&quot;math/tex&quot;&gt;\varphi\colon G \to H&lt;/script&gt; with &lt;script type=&quot;math/tex&quot;&gt;H&lt;/script&gt; finite so that &lt;script type=&quot;math/tex&quot;&gt;\varphi(g)&lt;/script&gt; is still nontrivial.&lt;/p&gt;&lt;p&gt;These two properties are ubiquitous and useful in group theory, but it is not difficult to come up with non-examples. If it were the case that every group is sofic, it would follow that every group is surjunctive. &lt;a href=&quot;https://www.jstor.org/stable/25051326&quot;&gt;Weiss, naming the term “sofic”,&lt;/a&gt; writes&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;It is not likely that all groups are sofic — but I don’t know of any definite example of a non sofic group. A concrete case that I haven’t been able to resolve is the universal Burnside group on a finite set of generators.&lt;/p&gt;&lt;/blockquote&gt;&lt;h2&gt;How to feel about non-sofic groups&lt;/h2&gt;&lt;p&gt;Recently, &lt;a href=&quot;https://openai.com/index/ten-advances-in-mathematics/&quot;&gt;OpenAI announced an example of a non-sofic group&lt;/a&gt;. OpenAI calls this a “central open question in group theory”. Respectfully, and I’m so sorry Alex Lubotsky, I do have to disagree. Many, if not &lt;em&gt;most&lt;/em&gt; papers about sofic groups cannot be bothered to really define them. Similar problems exist for open questions in K-theory with group theoretic interest, so this is not a problem unique to sofic groups, but it’s hard to defend a claim that such a question is central if its definition remains largely inaccessible.&lt;/p&gt;&lt;p&gt;I was heartened to read the &lt;a href=&quot;https://leidendeclaration.ai/&quot;&gt;Leiden declaration on AI and Mathematics&lt;/a&gt; recently. The declaration is clear-headed, and does a good job of steering clear of both hype and Luddism. OpenAI doesn’t really know what to do about this declaration, since the paper is very clearly not written by somebody who can understand the model’s output. This is a shame. They write&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;We hope the mathematical community will engage deeply with these results, place them in context, and bring the ideas behind them to life through new research and discovery.&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;I do have to ask, though: what ideas?&lt;/p&gt;&lt;p&gt;In terms of the existence of a non-sofic group, like most research-level results I’ve seen so far from LLMs, this one resolves the easier and less sexy (forgive me) direction of a question. A proof that all finitely generated groups &lt;em&gt;are&lt;/em&gt; sofic would necessarily be rather difficult, since the stated hypotheses give you nearly nothing to work with. OpenAI’s disproof just needs one non-sofic group.&lt;/p&gt;&lt;p&gt;I skimmed the non-sofic groups chapter of the OpenAI paper fairly quickly. The claimed group is apparently a group of units of a certain algebra. The algebra is simple to write down, but the model neglects to give a presentation of the claimed non-sofic group in a way that caught my eye. The method of (dis)-proof seemed more or less straightforward, but I wasn’t able to follow it mostly because I had other things to do with my day.&lt;/p&gt;&lt;p&gt;I think the deep idea here is this: &lt;strong&gt;we love our conjectures too much to give them the Riemann hypothesis treatment.&lt;/strong&gt; The Riemann hypothesis, asking about the pattern of zeros of the zeta function, has been tested extensively for more or less every reasonably computable value (at least, such is my non-expert understanding). Reading the AI disproofs we’ve seen so far, it appears to me that many well-known conjectures have not seriously been subject to the same sort of treatment.&lt;/p&gt;&lt;p&gt;I know a little bit about how this goes! Here’s a little story.&lt;/p&gt;&lt;p&gt;Over the lockdown era, one of my projects was about ends of the groups &lt;script type=&quot;math/tex&quot;&gt;\mathrm{Out}(A_1 * \cdots * A_n * F_k)&lt;/script&gt;, where the &lt;script type=&quot;math/tex&quot;&gt;A_i&lt;/script&gt; are all finite and &lt;script type=&quot;math/tex&quot;&gt;F_k&lt;/script&gt; is free of finite rank &lt;script type=&quot;math/tex&quot;&gt;k&lt;/script&gt;. I was following methods of Karen Vogtmann, with input from a paper of Collins and Zieschang with the delightful title &lt;a href=&quot;https://link.springer.com/article/10.1007/BF01236258&quot;&gt;Rescuing the Whitehead method for free products&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Vogtmann’s ideas got me pretty far: relying on her work I was able to reduce the problem to three cases. One case showed up in her work as well, but two were new, and it was these two that really had me stumped for a while. Since I wanted my proof to apply to all the relevant groups above, I kept wanting to choose some extra bit of information that was not guaranteed to exist.&lt;/p&gt;&lt;p&gt;Finally, one weekend in the fall after spending yet another summer more or less stumped, I decided to sit down and spend the weekend attempting to prove the opposite of my desired statement. To my great surprise, I found a beautiful little pattern waiting for me that showed that the very smallest case I was worried about did indeed not work out. That example, together with some supporting material, is my paper &lt;a href=&quot;https://doi.org/10.1142/S0218196725500134&quot;&gt;When is the Outer Space of a free product CAT(0)?&lt;/a&gt;. After a bit more hemming and hawing, I did manage to get the rest of the cases of my initial theorem to work out; that project is &lt;a href=&quot;https://arxiv.org/pdf/2305.04986&quot;&gt;One-endedness of outer automorphism groups of free products&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;More recently, having not learned my lesson, an LLM was able to set me straight on a joint project where we became enamored of a possibility which would be pretty and difficult to prove.&lt;/p&gt;&lt;h2&gt;Living without a moat&lt;/h2&gt;&lt;p&gt;I’ll close by offering some thoughts about AI in general. In software companies, apparently, there is this concept of a “moat”. The moat is what keeps your lunch from being stolen by another company willing to undercut you on cost. Sometimes your moat is a facet of your software, other times maybe it is a costly form of regulatory approval you’ve undergone.&lt;/p&gt;&lt;p&gt;Many people share their worries with me about AI as it impacts their work as mathematicians, musicians or programmers. A common thread I hear in all of these fears is a sort of identification of their worth as a person (at least, in an economic sense) being tied to skills that they are suddenly feeling like no longer provide them with much of a moat. Here are some things to ponder in that regard.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;&lt;strong&gt;You never had a moat.&lt;/strong&gt; I have not met anyone who is inarguably the single best person in their field. Even among exceptionally talented people, many of whom I haven’t met, many are either neck-and-neck with their “competition”, or have a niche where they’re better which doesn’t extend to the whole field. It’s really easy to tie your self-work to the worth of the work that you do: I do it too, all the time. It hurts every time for me too, so I’m trying not to.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;You do have the work, and your team.&lt;/strong&gt; If we accept the above as true, in our extremely connected era, perhaps the real reason that pure disinterested economics has not pushed all of us out of our jobs is that the job was always about more than the skillset. For example, my work as a university professor is not just about research or giving lectures on calculus. How I am doing at my job is also about connections I am able to build with and for my students, and support I’m able to give my colleagues.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;The reason for the work is not volume of production.&lt;/strong&gt; Many jobs which have aspects that are automatable are still alive and kicking. For example, although most clothing on earth is produced in bulk by machines and invisibilized workers typically far from where I live in the US, many, if not &lt;em&gt;most&lt;/em&gt; of the people working in fashion design know how to sew, and this skill serves them some purpose even if their work &lt;em&gt;does&lt;/em&gt; wind up mass-produced.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;First time?&lt;/strong&gt; If we’ve discovered that some of the purpose of the work that people did without LLMs has benefits not directly correlated to the output of the work (e.g. coding to figure out a problem space, even if you throw the code away before writing a final solution), we may have found some aspects of the work which are more like art or literature or craft. Many people continue to learn and build their skills in fields like this long after the market has “killed” it as a profession, and some do continue to have it be their main source of income. Once AI could produce coherent videos, why did the film industry not implode? I’m sure I don’t have a full answer, but it does appear that our culture values the skills involved in making a movie enough to pay a number of people to do that work full time.&lt;/li&gt;&lt;li&gt;&lt;strong&gt;“Theorem credits” was always the wrong metric.&lt;/strong&gt; Similarly, number of users on a given product, for example, is well-known to not correlate with the quality of the product. We have a whole new word about that, “enshittification”. If you haven’t read Bill Thurston’s &lt;a href=&quot;https://doi.org/10.1007/0-387-29831-2_3&quot;&gt;On Proof and Progress in Mathematics&lt;/a&gt; recently, you might find it comforting to read again.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Now, if you’ll forgive me, I have much more interesting stuff, which was even written by humans, to go read.&lt;/p&gt;</description>
        <link>https://www.robbielyman.com/blog/sofic-groups/</link>
        <pubDate>Sun, 02 Aug 2026 21:00:00 +0000</pubDate>
        <guid>https://www.robbielyman.com/blog/sofic-groups/</guid>
      </item>
    
      <item>
        <title>Topologies, Groups, Graphs</title>
        <description>&lt;p&gt;This is a post about topology and about groups. While theoretically it is possible and in scope for me to introduce topology from the bottom up, I suspect that you won’t get anything out of the story that I want to tell if it really is your first time seeing the definition of a topology, so I won’t. However, if you know topology and groups separately, this is a perfect place to meet topological groups, since I’m going to talk only about pretty elementary things.&lt;/p&gt;&lt;h2&gt;Topological Groups&lt;/h2&gt;&lt;p&gt;A &lt;em&gt;topological group&lt;/em&gt; is a group &lt;script type=&quot;math/tex&quot;&gt;G&lt;/script&gt; which is at the same time a topological space so that multiplication &lt;script type=&quot;math/tex&quot;&gt;(g,h) \mapsto g h&lt;/script&gt; and inversion &lt;script type=&quot;math/tex&quot;&gt;g \mapsto g^{-1}&lt;/script&gt; are continuous as maps &lt;script type=&quot;math/tex&quot;&gt;G \times G \to G&lt;/script&gt; and &lt;script type=&quot;math/tex&quot;&gt;G \to G&lt;/script&gt; respectively.&lt;/p&gt;&lt;p&gt;An &lt;em&gt;identity neighborhood&lt;/em&gt; is a an open subset of a topological group containing the identity, &lt;script type=&quot;math/tex&quot;&gt;1&lt;/script&gt;. Identity neighborhoods satisfy the following axioms.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;If &lt;script type=&quot;math/tex&quot;&gt;U, V&lt;/script&gt; are identity neighborhoods, so is &lt;script type=&quot;math/tex&quot;&gt;U \cap V&lt;/script&gt;.&lt;/li&gt;&lt;li&gt;If &lt;script type=&quot;math/tex&quot;&gt;U&lt;/script&gt; is an identity neighborhood, so is &lt;script type=&quot;math/tex&quot;&gt;g U g^{-1}&lt;/script&gt; and &lt;script type=&quot;math/tex&quot;&gt;U^{-1}&lt;/script&gt; for every &lt;script type=&quot;math/tex&quot;&gt;g \in G&lt;/script&gt;.&lt;/li&gt;&lt;li&gt;If &lt;script type=&quot;math/tex&quot;&gt;U&lt;/script&gt; is an identity neighborhood, there is another identity neighborhood &lt;script type=&quot;math/tex&quot;&gt;V&lt;/script&gt; such that &lt;script type=&quot;math/tex&quot;&gt;V^2 \subset U&lt;/script&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;To clarify notation, &lt;script type=&quot;math/tex&quot;&gt;g U g^{-1} = \{ g u g^{-1} : u \in U \}&lt;/script&gt;, &lt;script type=&quot;math/tex&quot;&gt;U^{-1} = \{ u^{-1} : u \in U \}&lt;/script&gt;, and &lt;script type=&quot;math/tex&quot;&gt;V^2 = \{ u v : u, v \in U \}&lt;/script&gt;. The second bullet point follows from continuity of the map &lt;script type=&quot;math/tex&quot;&gt;x \mapsto (g,x) \mapsto g x \mapsto (g x, g^{-1}) \mapsto g x g^{-1}&lt;/script&gt; and inversion, respectively, and the third bullet point follows from continuity of multiplication.&lt;/p&gt;&lt;p&gt;A slight weakening of these axioms suffice to characterize group topologies.&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;strong&gt;Proposition 1.&lt;/strong&gt; Suppose that &lt;script type=&quot;math/tex&quot;&gt;\mathcal{B}&lt;/script&gt; is a collection of subsets of a group &lt;script type=&quot;math/tex&quot;&gt;G&lt;/script&gt; satisfying the following axioms.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;We have &lt;script type=&quot;math/tex&quot;&gt;1 \in U&lt;/script&gt; for all &lt;script type=&quot;math/tex&quot;&gt;U \in \mathcal{B}&lt;/script&gt;.&lt;/li&gt;&lt;li&gt;For each &lt;script type=&quot;math/tex&quot;&gt;U, V \in \mathcal{B}&lt;/script&gt;, there exists &lt;script type=&quot;math/tex&quot;&gt;W \in \mathcal{B}&lt;/script&gt; satisfying &lt;script type=&quot;math/tex&quot;&gt;W \subset U \cap V&lt;/script&gt;.&lt;/li&gt;&lt;li&gt;For each &lt;script type=&quot;math/tex&quot;&gt;U \in \mathcal{B}&lt;/script&gt;, there exists &lt;script type=&quot;math/tex&quot;&gt;V \in \mathcal{B}&lt;/script&gt; satisfying &lt;script type=&quot;math/tex&quot;&gt;V^2 \subset U&lt;/script&gt;.&lt;/li&gt;&lt;li&gt;For each &lt;script type=&quot;math/tex&quot;&gt;U \in \mathcal{B}&lt;/script&gt;, there exists &lt;script type=&quot;math/tex&quot;&gt;V \in \mathcal{B}&lt;/script&gt; satisfying &lt;script type=&quot;math/tex&quot;&gt;V \subset U^{-1}&lt;/script&gt;.&lt;/li&gt;&lt;li&gt;For each &lt;script type=&quot;math/tex&quot;&gt;U \in \mathcal{B}&lt;/script&gt; and &lt;script type=&quot;math/tex&quot;&gt;g \in G&lt;/script&gt;, there exists &lt;script type=&quot;math/tex&quot;&gt;V \in \mathcal{B}&lt;/script&gt; satisfying &lt;script type=&quot;math/tex&quot;&gt;V \subset g U g^{-1}&lt;/script&gt;.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Then there is a group topology on &lt;script type=&quot;math/tex&quot;&gt;G&lt;/script&gt; where a subset &lt;script type=&quot;math/tex&quot;&gt;S&lt;/script&gt; is open if and only if for each &lt;script type=&quot;math/tex&quot;&gt;g \in S&lt;/script&gt; there exists &lt;script type=&quot;math/tex&quot;&gt;U \in \mathcal{B}&lt;/script&gt; such that &lt;script type=&quot;math/tex&quot;&gt;g U \subset S&lt;/script&gt;.&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;em&gt;Proof.&lt;/em&gt; The claimed topology really is a topology: the defining property of open sets is clearly closed under arbitrary unions. If &lt;script type=&quot;math/tex&quot;&gt;g \in g U \subset S&lt;/script&gt; and &lt;script type=&quot;math/tex&quot;&gt;g \in g V \subset T&lt;/script&gt;, then by assumption there exists &lt;script type=&quot;math/tex&quot;&gt;W \subset U \cap V&lt;/script&gt; so that &lt;script type=&quot;math/tex&quot;&gt;g W \subset S \cap T&lt;/script&gt;, so finite intersections of open sets are open.&lt;/p&gt;&lt;p&gt;Suppose &lt;script type=&quot;math/tex&quot;&gt;g h \in S&lt;/script&gt; where &lt;script type=&quot;math/tex&quot;&gt;S&lt;/script&gt; is open. To show that multiplication is continuous, we show that there are sets &lt;script type=&quot;math/tex&quot;&gt;U, V \in \mathcal{B}&lt;/script&gt; so that &lt;script type=&quot;math/tex&quot;&gt;g U h V \subset S&lt;/script&gt;. Indeed, since &lt;script type=&quot;math/tex&quot;&gt;S&lt;/script&gt; is open, it contains &lt;script type=&quot;math/tex&quot;&gt;g h W&lt;/script&gt; for &lt;script type=&quot;math/tex&quot;&gt;W \in \mathcal{B}&lt;/script&gt;, and we choose &lt;script type=&quot;math/tex&quot;&gt;U, V \in \mathcal{B}&lt;/script&gt; so that &lt;script type=&quot;math/tex&quot;&gt;V^2 \subset W&lt;/script&gt; and &lt;script type=&quot;math/tex&quot;&gt;U \subset h V h^{-1}&lt;/script&gt;. We compute:&lt;/p&gt;&lt;script type=&quot;math/tex&quot;&gt;g U h V \subset g h V h^{-1} h V = g h V^2 \subset g h W
&lt;/script&gt;&lt;p&gt;as required.&lt;/p&gt;&lt;p&gt;To show that inversion is continuous, given &lt;script type=&quot;math/tex&quot;&gt;U \in \mathcal{B}&lt;/script&gt;, take &lt;script type=&quot;math/tex&quot;&gt;V \subset g U g^{-1}&lt;/script&gt; and &lt;script type=&quot;math/tex&quot;&gt;W \subset V^{-1}&lt;/script&gt;. Then&lt;/p&gt;&lt;script type=&quot;math/tex&quot;&gt;g^{-1}W \subset g^{-1} V^{-1} \subset g^{-1} g U^{-1} g^{-1} = U^{-1} g^{-1} = {(g U)}^{-1}.
&lt;/script&gt;&lt;p&gt;Thus this topology makes &lt;script type=&quot;math/tex&quot;&gt;G&lt;/script&gt; a topological group. &lt;script type=&quot;math/tex&quot;&gt;\QED&lt;/script&gt;&lt;/p&gt;&lt;h2&gt;Groups acting on graphs&lt;/h2&gt;&lt;p&gt;Let &lt;script type=&quot;math/tex&quot;&gt;G&lt;/script&gt; be a group acting on a connected, simplicial graph &lt;script type=&quot;math/tex&quot;&gt;\Gamma&lt;/script&gt; by graph automorphisms without inversions in edges. &lt;em&gt;Simplicial&lt;/em&gt; means that between two vertices of &lt;script type=&quot;math/tex&quot;&gt;\Gamma&lt;/script&gt;, there is at most one edge, and that no edge forms a loop. &lt;em&gt;Without inversions in eges&lt;/em&gt; means that if an edge of &lt;script type=&quot;math/tex&quot;&gt;\Gamma&lt;/script&gt; is fixed setwise by a group element, it is fixed pointwise. A consequence of this latter condition is that the stabilizers of an edge &lt;script type=&quot;math/tex&quot;&gt;e&lt;/script&gt; incident to the vertices &lt;script type=&quot;math/tex&quot;&gt;v&lt;/script&gt; and &lt;script type=&quot;math/tex&quot;&gt;w&lt;/script&gt; is naturally a subgroup of the stabilizers of both &lt;script type=&quot;math/tex&quot;&gt;v&lt;/script&gt; and &lt;script type=&quot;math/tex&quot;&gt;w&lt;/script&gt;. Another is that the quotient map &lt;script type=&quot;math/tex&quot;&gt;\Gamma \to G \backslash \Gamma&lt;/script&gt; is a graph map.&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;strong&gt;Proposition 2.&lt;/strong&gt; Suppose &lt;script type=&quot;math/tex&quot;&gt;G&lt;/script&gt; acts on a connected, simplicial graph &lt;script type=&quot;math/tex&quot;&gt;\Gamma&lt;/script&gt; by graph automorphisms without inversions in edges, and that for each vertex &lt;script type=&quot;math/tex&quot;&gt;v \in \Gamma&lt;/script&gt;, the stabilizer &lt;script type=&quot;math/tex&quot;&gt;G_v&lt;/script&gt; is equipped with a group topology such that the following conditions hold.&lt;/p&gt;&lt;ul&gt;&lt;li&gt;For each &lt;script type=&quot;math/tex&quot;&gt;g \in G&lt;/script&gt;, conjugation by &lt;script type=&quot;math/tex&quot;&gt;g&lt;/script&gt; induces a homeomorphism &lt;script type=&quot;math/tex&quot;&gt;G_v \to g G_v g^{-1} = G_{g.v}&lt;/script&gt;.&lt;/li&gt;&lt;li&gt;If &lt;script type=&quot;math/tex&quot;&gt;e&lt;/script&gt; is an edge of &lt;script type=&quot;math/tex&quot;&gt;\Gamma&lt;/script&gt; incident to vertices &lt;script type=&quot;math/tex&quot;&gt;v&lt;/script&gt; and &lt;script type=&quot;math/tex&quot;&gt;w&lt;/script&gt;, the inclusion of the stabilizer &lt;script type=&quot;math/tex&quot;&gt;G_e&lt;/script&gt; into &lt;script type=&quot;math/tex&quot;&gt;G_v&lt;/script&gt; and &lt;script type=&quot;math/tex&quot;&gt;G_w&lt;/script&gt; yields the same topology on &lt;script type=&quot;math/tex&quot;&gt;G_e&lt;/script&gt;, such that both inclusions are open embeddings.&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;Then the family &lt;script type=&quot;math/tex&quot;&gt;\mathcal{B} = \{ U \subset G_v : U \text{ is an identity neighborhood } \}&lt;/script&gt; satisfies the hypotheses of Proposition 1. The induced topology on &lt;script type=&quot;math/tex&quot;&gt;G&lt;/script&gt; is the finest group topology on &lt;script type=&quot;math/tex&quot;&gt;G&lt;/script&gt; such that each inclusion &lt;script type=&quot;math/tex&quot;&gt;G_v \to G&lt;/script&gt; is an open embedding. In this topology the group &lt;script type=&quot;math/tex&quot;&gt;G&lt;/script&gt; acts continuously on &lt;script type=&quot;math/tex&quot;&gt;\Gamma&lt;/script&gt;.&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;&lt;em&gt;Proof.&lt;/em&gt; We verify the hypotheses of &lt;strong&gt;Proposition 1.&lt;/strong&gt; The first, that each &lt;script type=&quot;math/tex&quot;&gt;U \in \mathcal{B}&lt;/script&gt; contains the identity, is clear, as are the third and fourth, since each &lt;script type=&quot;math/tex&quot;&gt;G_v&lt;/script&gt; is a topological group. The final hypothesis, about conjugation, holds by definition. Thus we need only verify that &lt;script type=&quot;math/tex&quot;&gt;U \cap V&lt;/script&gt; contains an element of &lt;script type=&quot;math/tex&quot;&gt;\mathcal{B}&lt;/script&gt;. Supposing that &lt;script type=&quot;math/tex&quot;&gt;U \subset G_u&lt;/script&gt; and &lt;script type=&quot;math/tex&quot;&gt;V \subset G_v&lt;/script&gt; for vertices &lt;script type=&quot;math/tex&quot;&gt;u, v \in \Gamma&lt;/script&gt;, we will show this by induction on the distance between &lt;script type=&quot;math/tex&quot;&gt;u&lt;/script&gt; and &lt;script type=&quot;math/tex&quot;&gt;v&lt;/script&gt;. More precisely, given any geodesic edge path from &lt;script type=&quot;math/tex&quot;&gt;u&lt;/script&gt; to &lt;script type=&quot;math/tex&quot;&gt;v&lt;/script&gt;, we show that the subset of &lt;script type=&quot;math/tex&quot;&gt;U \cap V&lt;/script&gt; which additionally stabilizes this path pointwise belongs to &lt;script type=&quot;math/tex&quot;&gt;\mathcal{B}&lt;/script&gt;, and is in fact an identity neighborhood in both &lt;script type=&quot;math/tex&quot;&gt;G_u&lt;/script&gt; and &lt;script type=&quot;math/tex&quot;&gt;G_v&lt;/script&gt;.&lt;/p&gt;&lt;p&gt;The base case where the distance is &lt;script type=&quot;math/tex&quot;&gt;0&lt;/script&gt; (i.e. &lt;script type=&quot;math/tex&quot;&gt;u = v&lt;/script&gt;) holds because &lt;script type=&quot;math/tex&quot;&gt;G_v&lt;/script&gt; is a topological group. When &lt;script type=&quot;math/tex&quot;&gt;u&lt;/script&gt; and &lt;script type=&quot;math/tex&quot;&gt;v&lt;/script&gt; are connected by an edge &lt;script type=&quot;math/tex&quot;&gt;e&lt;/script&gt;, the intersection &lt;script type=&quot;math/tex&quot;&gt;U \cap V&lt;/script&gt; is contained in the edge stabilizer &lt;script type=&quot;math/tex&quot;&gt;G_e&lt;/script&gt;.&lt;/p&gt;&lt;p&gt;Suppose now that the result holds for all pairs &lt;script type=&quot;math/tex&quot;&gt;U&lt;/script&gt; and &lt;script type=&quot;math/tex&quot;&gt;V&lt;/script&gt; at distance at most &lt;script type=&quot;math/tex&quot;&gt;n&lt;/script&gt;, we prove the statement for vertices at distance &lt;script type=&quot;math/tex&quot;&gt;n + 1&lt;/script&gt;. Let &lt;script type=&quot;math/tex&quot;&gt;e_0 \ldots e_n&lt;/script&gt; be a geodesic edge path from &lt;script type=&quot;math/tex&quot;&gt;u&lt;/script&gt; to &lt;script type=&quot;math/tex&quot;&gt;v&lt;/script&gt;, and let &lt;script type=&quot;math/tex&quot;&gt;w&lt;/script&gt; be the initial vertex of &lt;script type=&quot;math/tex&quot;&gt;e_n&lt;/script&gt;.&lt;/p&gt;&lt;p&gt;By induction, the subset of the intersection &lt;script type=&quot;math/tex&quot;&gt;U \cap G_w&lt;/script&gt; which stabilizes the (possibly trivial) path &lt;script type=&quot;math/tex&quot;&gt;e_0 \ldots e_{n-1}&lt;/script&gt; is an identity neighborhood in both &lt;script type=&quot;math/tex&quot;&gt;G_u&lt;/script&gt; and &lt;script type=&quot;math/tex&quot;&gt;G_w&lt;/script&gt;. Call this subset &lt;script type=&quot;math/tex&quot;&gt;W&lt;/script&gt;.&lt;/p&gt;&lt;p&gt;Since &lt;script type=&quot;math/tex&quot;&gt;G_{e_n}&lt;/script&gt; inherits the same topology as an open subgroup of each of &lt;script type=&quot;math/tex&quot;&gt;G_v&lt;/script&gt; and &lt;script type=&quot;math/tex&quot;&gt;G_w&lt;/script&gt;, we see that &lt;script type=&quot;math/tex&quot;&gt;V \cap W \subset G_{e_n}&lt;/script&gt; is an open identity neighborhood in both &lt;script type=&quot;math/tex&quot;&gt;G_v&lt;/script&gt; and &lt;script type=&quot;math/tex&quot;&gt;G_w&lt;/script&gt;. The subset of &lt;script type=&quot;math/tex&quot;&gt;U \cap V&lt;/script&gt; stabilizing &lt;script type=&quot;math/tex&quot;&gt;e_0 \ldots e_n&lt;/script&gt; is clearly contained in &lt;script type=&quot;math/tex&quot;&gt;V \cap W&lt;/script&gt;, and the reverse is also true: if &lt;script type=&quot;math/tex&quot;&gt;g \in V \cap W&lt;/script&gt;, then by assumption &lt;script type=&quot;math/tex&quot;&gt;g \in U \cap V&lt;/script&gt; stabilizes the path &lt;script type=&quot;math/tex&quot;&gt;e_0 \ldots e_{n-1}&lt;/script&gt; and also &lt;script type=&quot;math/tex&quot;&gt;v&lt;/script&gt;, whence since &lt;script type=&quot;math/tex&quot;&gt;\Gamma&lt;/script&gt; is simplicial, it stabilizes the whole path.&lt;/p&gt;&lt;p&gt;Finally, to see that this topology &lt;script type=&quot;math/tex&quot;&gt;\tau&lt;/script&gt; is the finest group topology on &lt;script type=&quot;math/tex&quot;&gt;G&lt;/script&gt; such that each inclusion &lt;script type=&quot;math/tex&quot;&gt;G_v \to G&lt;/script&gt; is an open embedding, observe that any group topology &lt;script type=&quot;math/tex&quot;&gt;\tau&apos;&lt;/script&gt; satisfying this latter hypothesis actually makes each &lt;script type=&quot;math/tex&quot;&gt;U \in \mathcal{B}&lt;/script&gt; into an identity neighborhood, so the identity map &lt;script type=&quot;math/tex&quot;&gt;(G,\tau&apos;) \to (G,\tau)&lt;/script&gt; is continuous, as required. &lt;script type=&quot;math/tex&quot;&gt;\QED&lt;/script&gt;.&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Proposition 2&lt;/strong&gt; has an immediate consequence for certain (2-categorical) colimits in the category of topological groups.&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;strong&gt;Corollary 3.&lt;/strong&gt; Suppose &lt;script type=&quot;math/tex&quot;&gt;\mathcal{G}&lt;/script&gt; is a connected graph of topological groups such that each edge-to-vertex group homomorphism is an open embedding. The fundamental group of the graph of groups &lt;script type=&quot;math/tex&quot;&gt;\pi_1(\mathcal{G})&lt;/script&gt; is canonically a topological group. &lt;script type=&quot;math/tex&quot;&gt;\QED&lt;/script&gt;&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;One limitation of &lt;strong&gt;Corollary 3&lt;/strong&gt; is that it is not strong enough to topologize some of the most familiar tree-like constructions on groups. For example, I’ll close by leaving you to ponder the following.&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;strong&gt;Exercise 4.&lt;/strong&gt; Suppose &lt;script type=&quot;math/tex&quot;&gt;G_1,\ldots,G_n&lt;/script&gt; are groups. The only topology on their free product &lt;script type=&quot;math/tex&quot;&gt;G_1 * \cdots * G_n&lt;/script&gt; which makes the action on the natural Bass-Serre tree associated to the free product continuous is the discrete topology. &lt;script type=&quot;math/tex&quot;&gt;\QED&lt;/script&gt;&lt;/p&gt;&lt;/blockquote&gt;</description>
        <link>https://www.robbielyman.com/blog/topologies-for-groups/</link>
        <pubDate>Thu, 30 Jul 2026 14:00:00 +0000</pubDate>
        <guid>https://www.robbielyman.com/blog/topologies-for-groups/</guid>
      </item>
    
      <item>
        <title>Category Theory Day One</title>
        <description>&lt;p&gt;This is a repost of a post I wrote in February 2020 that got lost over the years with my tendency to reinvent myself.&lt;/p&gt;&lt;h2&gt;Category Theory Day One&lt;/h2&gt;&lt;p&gt;My office-mate asked me to give a “second lecture” in category theory in &lt;a href=&quot;http://www.danielkeliher.com/EminarCurrent.html&quot;&gt;Eminar&lt;/a&gt;, the Tufts graduate student seminar. I gave a first lecture last semester, but I thought it might be nice to have something to point to for people who missed it, in order to stick to my assignment and begin at the Yoneda lemma. So, here is yet another rendition of the first hour of a category theory class.&lt;/p&gt;&lt;p&gt;The treatment is brisk. To the interested reader, I would highly recommend Emily Riehl’s &lt;a href=&quot;http://www.math.jhu.edu/~eriehl/context.pdf&quot;&gt;&lt;em&gt;Category Theory in Context&lt;/em&gt;&lt;/a&gt;, which is the main inspiration here and has the advantage of being available on the author’s website. I also recommend Saunders Mac Lane’s &lt;em&gt;Category Theory for the Working Mathematician&lt;/em&gt; and Francis Borceux’s &lt;em&gt;Handbook of Categorical Algebra.&lt;/em&gt;&lt;/p&gt;&lt;h3&gt;Categories&lt;/h3&gt;&lt;p&gt;A &lt;em&gt;category&lt;/em&gt; &lt;script type=&quot;math/tex&quot;&gt;C&lt;/script&gt; is a collection of &lt;em&gt;objects,&lt;/em&gt; say &lt;script type=&quot;math/tex&quot;&gt;c, d&lt;/script&gt;, and &lt;em&gt;arrows&lt;/em&gt; between them, say &lt;script type=&quot;math/tex&quot;&gt;f\colon c \to d&lt;/script&gt;. Given a pair of arrows as below&lt;/p&gt;&lt;script type=&quot;math/tex&quot;&gt;f \colon a \to b \qquad g \colon b \to c
&lt;/script&gt;&lt;p&gt;we require the existence of their &lt;em&gt;composition,&lt;/em&gt; &lt;script type=&quot;math/tex&quot;&gt;gf\colon a \to c&lt;/script&gt;. Composition is associative, and for each object &lt;script type=&quot;math/tex&quot;&gt;c&lt;/script&gt;, there is a (unique) arrow &lt;script type=&quot;math/tex&quot;&gt;1_c\colon c \to c&lt;/script&gt; which acts as an identity for composition of arrows.&lt;/p&gt;&lt;p&gt;Many familiar mathematical objects assemble into categories. To wit, there is the &lt;em&gt;category of sets,&lt;/em&gt; where objects are sets and arrows are functions of sets, and the &lt;em&gt;category of topological spaces,&lt;/em&gt; where objects are topological spaces and arrows are continuous maps. However, the notion of a category is flexible: not all categories have “sets with additional structure” as objects. For instance, a &lt;em&gt;preorder&lt;/em&gt; is the same data as a category where there is at most one arrow between any two objects. Here an arrow &lt;script type=&quot;math/tex&quot;&gt;c \to d&lt;/script&gt; should be interpreted as saying &lt;script type=&quot;math/tex&quot;&gt;c \le d&lt;/script&gt;.&lt;/p&gt;&lt;p&gt;Note that I use the term &lt;em&gt;collection&lt;/em&gt; advisedly: Russell’s paradox says that there can be no set of all sets, so the category of sets has more than a set’s worth of objects! However, between any two sets, there is only a set’s worth of distinct functions. That is, if &lt;script type=&quot;math/tex&quot;&gt;A&lt;/script&gt; and &lt;script type=&quot;math/tex&quot;&gt;B&lt;/script&gt; are sets, there &lt;em&gt;is&lt;/em&gt; a set&lt;/p&gt;&lt;script type=&quot;math/tex&quot;&gt;\operatorname{Set}(A,B) = \{ f \colon A \to B : f \text{ is a function } \}.
&lt;/script&gt;&lt;p&gt;Categories where this is the case for all objects are called &lt;em&gt;locally small.&lt;/em&gt; If additionally there is only a set’s worth of arrows in the entire category (and thus only a set’s worth of objects!), the category is called &lt;em&gt;small.&lt;/em&gt;&lt;/p&gt;&lt;h3&gt;Functors&lt;/h3&gt;&lt;p&gt;If &lt;script type=&quot;math/tex&quot;&gt;C&lt;/script&gt; and &lt;script type=&quot;math/tex&quot;&gt;D&lt;/script&gt; are categories, a &lt;em&gt;functor&lt;/em&gt; &lt;script type=&quot;math/tex&quot;&gt;F \colon C \to D&lt;/script&gt; is an assignment&lt;/p&gt;&lt;script type=&quot;math/tex&quot;&gt;\begin{CD}
a @.{\mapsto} @.Fa \\
@VfVV @. @VVFfV \\
b @.{\mapsto} @.Fb.
\end{CD}
&lt;/script&gt;&lt;p&gt;I.e. for each object &lt;script type=&quot;math/tex&quot;&gt;a&lt;/script&gt; of &lt;script type=&quot;math/tex&quot;&gt;C&lt;/script&gt;, there is an object &lt;script type=&quot;math/tex&quot;&gt;Fa&lt;/script&gt; in &lt;script type=&quot;math/tex&quot;&gt;D&lt;/script&gt;, and for each arrow &lt;script type=&quot;math/tex&quot;&gt;f\colon a \to b&lt;/script&gt; in &lt;script type=&quot;math/tex&quot;&gt;C&lt;/script&gt;, there is an arrow &lt;script type=&quot;math/tex&quot;&gt;Ff\colon Fa \to Fb&lt;/script&gt;. Additionally, &lt;script type=&quot;math/tex&quot;&gt;F&lt;/script&gt; is required to satisfy&lt;/p&gt;&lt;script type=&quot;math/tex&quot;&gt;F1_a  = 1_{Fa}
&lt;/script&gt;&lt;p&gt;for each object &lt;script type=&quot;math/tex&quot;&gt;a&lt;/script&gt; in &lt;script type=&quot;math/tex&quot;&gt;C&lt;/script&gt;, and &lt;script type=&quot;math/tex&quot;&gt;F&lt;/script&gt; must respect composition in the sense that&lt;/p&gt;&lt;script type=&quot;math/tex&quot;&gt;F(gf) = Fg Ff.
&lt;/script&gt;&lt;p&gt;Functors are sometimes qualified with the adjective &lt;em&gt;covariant.&lt;/em&gt; The reason being that every category &lt;script type=&quot;math/tex&quot;&gt;C&lt;/script&gt; has an &lt;em&gt;opposite category&lt;/em&gt; &lt;script type=&quot;math/tex&quot;&gt;C^{\mathrm{op}}&lt;/script&gt;, which is obtained by formally reversing the direction of all the arrows. Thus if &lt;script type=&quot;math/tex&quot;&gt;C&lt;/script&gt; has arrows&lt;/p&gt;&lt;script type=&quot;math/tex&quot;&gt;\begin{CD} a @&gt;f&gt;&gt; b @&gt;g&gt;&gt; c, \end{CD}
&lt;/script&gt;&lt;p&gt;then &lt;script type=&quot;math/tex&quot;&gt;C^{\mathrm{op}}&lt;/script&gt; has arrows&lt;/p&gt;&lt;script type=&quot;math/tex&quot;&gt;\begin{CD} a @&lt;f^{\mathrm{op}}&lt;&lt; b @&lt;g^{\mathrm{op}}&lt;&lt; c. \end{CD}
&lt;/script&gt;&lt;p&gt;Any statement about objects and arrows in  has a &lt;em&gt;dual&lt;/em&gt; statement about objects and arrows in &lt;script type=&quot;math/tex&quot;&gt;C^{\mathrm{op}}&lt;/script&gt;, which is obtained by reversing the direction of all the arrows. If the proof of the original statement is categorical, dualizing the proof yields a proof of the dual statement for &lt;script type=&quot;math/tex&quot;&gt;C^{\mathrm{op}}&lt;/script&gt;.&lt;/p&gt;&lt;p&gt;The definition of a functor admits dualization in &lt;script type=&quot;math/tex&quot;&gt;C&lt;/script&gt; or in &lt;script type=&quot;math/tex&quot;&gt;D&lt;/script&gt;. The import is essentially the same as long as only one dualization is performed: the result is a &lt;em&gt;contravariant functor&lt;/em&gt; &lt;script type=&quot;math/tex&quot;&gt;G\colon C^{\mathrm{op}} \to D&lt;/script&gt;:&lt;/p&gt;&lt;script type=&quot;math/tex&quot;&gt;\begin{CD} a @.\mapsto  @.Ga \\ @VfVV @. @AAGfA \\ b @.\mapsto @.Gb. \end{CD}
&lt;/script&gt;&lt;p&gt;Functors abound in mathematics. Many are so simple that we hardly think about them: for instance the “forgetful”  functor from the category of groups and homomorphisms to sets that sends a group &lt;script type=&quot;math/tex&quot;&gt;G&lt;/script&gt; to its set of elements, and a group homomorphism to its action on underlying sets.&lt;/p&gt;&lt;p&gt;If &lt;script type=&quot;math/tex&quot;&gt;C&lt;/script&gt; is a locally small category and &lt;script type=&quot;math/tex&quot;&gt;c&lt;/script&gt; is an object, there are two particularly important functors &lt;script type=&quot;math/tex&quot;&gt;C \to{\operatorname{Set}}&lt;/script&gt;. Write &lt;script type=&quot;math/tex&quot;&gt;C(c,b)&lt;/script&gt; and &lt;script type=&quot;math/tex&quot;&gt;C(b,c)&lt;/script&gt; for the set of arrows in &lt;script type=&quot;math/tex&quot;&gt;C&lt;/script&gt; with domain and codomain &lt;script type=&quot;math/tex&quot;&gt;c&lt;/script&gt;, respectively. If &lt;script type=&quot;math/tex&quot;&gt;f\colon b\to d&lt;/script&gt; is an arrow in &lt;script type=&quot;math/tex&quot;&gt;C&lt;/script&gt;, there are functions&lt;/p&gt;&lt;script type=&quot;math/tex&quot;&gt;f_*\colon C(c,b) \to C(c,d) \text{ and }f^*\colon C(d,c) \to C(b,c)
&lt;/script&gt;&lt;p&gt;defined as &lt;script type=&quot;math/tex&quot;&gt;f_*(g) = fg&lt;/script&gt; and &lt;script type=&quot;math/tex&quot;&gt;f^*(h) = hf&lt;/script&gt;, respectively. The assignments&lt;/p&gt;&lt;script type=&quot;math/tex&quot;&gt;\begin{CD} b @.\mapsto  @.C(c,b) @.\qquad\qquad @.b @.\mapsto @.C(b,c) \\
    @VfVV @.\mapsto @VVf_*V @.\qquad\qquad @VfVV @.\mapsto @AAf*A \\
    d @.\mapsto  @.(c,d)  @.\qquad\qquad @.d @.\mapsto @. C(d,c)
  \end{CD}
&lt;/script&gt;&lt;p&gt;define covariant and contravariant functors &lt;script type=&quot;math/tex&quot;&gt;C(c,-)\colon C \to {\operatorname{Set}}&lt;/script&gt; and&lt;br&gt;&lt;script type=&quot;math/tex&quot;&gt;C(-,c)\colon C^{\mathrm{op}}\to{\operatorname{Set}}&lt;/script&gt;, respectively.&lt;/p&gt;&lt;h4&gt;Natural Transformations&lt;/h4&gt;&lt;p&gt;Just as we have defined functors between categories, it is  useful to consider &lt;em&gt;functor categories,&lt;/em&gt; whose elements are functors &lt;script type=&quot;math/tex&quot;&gt;C\to D&lt;/script&gt;. To do this, we need a  notion of a morphism between functors. It turns out that the right notion is a &lt;em&gt;natural transformation.&lt;/em&gt; If &lt;script type=&quot;math/tex&quot;&gt;F,G\colon C \to D&lt;/script&gt; are functors, a natural transformation&lt;/p&gt;&lt;script type=&quot;math/tex&quot;&gt;\eta\colon F\Rightarrow G
&lt;/script&gt;&lt;p&gt;is a collection of maps &lt;script type=&quot;math/tex&quot;&gt;\eta_c\colon Fc \to Gc&lt;/script&gt;, one for each object &lt;script type=&quot;math/tex&quot;&gt;c&lt;/script&gt; of &lt;script type=&quot;math/tex&quot;&gt;C&lt;/script&gt; such that for every arrow &lt;script type=&quot;math/tex&quot;&gt;f\colon c \to d&lt;/script&gt;, the following diagram commutes&lt;/p&gt;&lt;script type=&quot;math/tex&quot;&gt;\begin{CD}
  Fc @&gt;\eta_c&gt;&gt; Gc \\
  @VFfVV @VVGfV \\
  Fd @&gt;\eta_d&gt;&gt; Gd.
\end{CD}
&lt;/script&gt;&lt;p&gt;Any directed path in a diagram of objects and arrows within a category like the above yields an arrow from the initial “vertex” of the path to the terminal one by reading off the labelled arrows. A diagram &lt;em&gt;commutes&lt;/em&gt; if any two directed paths with the same endpoints yield equal arrows. Thus, to say that the above diagram commutes asserts the equality&lt;/p&gt;&lt;script type=&quot;math/tex&quot;&gt;Gf\eta_c = \eta_d Ff.
&lt;/script&gt;&lt;p&gt;The standard example of a natural transformation is the following. Let &lt;script type=&quot;math/tex&quot;&gt;k&lt;/script&gt; be a field, and consider the category of &lt;script type=&quot;math/tex&quot;&gt;k&lt;/script&gt;-vector spaces and linear transformations. There is a contravariant functor that sends a vector space &lt;script type=&quot;math/tex&quot;&gt;V&lt;/script&gt; to its &lt;em&gt;dual&lt;/em&gt; &lt;script type=&quot;math/tex&quot;&gt;V^*&lt;/script&gt;, namely the vector space of linear transformations &lt;script type=&quot;math/tex&quot;&gt;V\to k&lt;/script&gt;. A linear map &lt;script type=&quot;math/tex&quot;&gt;f\colon V \to W&lt;/script&gt; is sent to a map &lt;script type=&quot;math/tex&quot;&gt;f^*\colon W^*\to V^*&lt;/script&gt; which is defined as follows. If &lt;script type=&quot;math/tex&quot;&gt;\lambda\colon W \to k&lt;/script&gt; is an element of &lt;script type=&quot;math/tex&quot;&gt;W^*&lt;/script&gt;, &lt;script type=&quot;math/tex&quot;&gt;f^*(\lambda)&lt;/script&gt; is the linear  map&lt;/p&gt;&lt;script type=&quot;math/tex&quot;&gt;\lambda f\colon V\to k.
&lt;/script&gt;&lt;p&gt;Thus there is a &lt;em&gt;covariant&lt;/em&gt; functor sending a vector space &lt;script type=&quot;math/tex&quot;&gt;V&lt;/script&gt; to its “double dual” &lt;script type=&quot;math/tex&quot;&gt;V^{**}=(V^*)^*&lt;/script&gt;. There is a natural transformation &lt;script type=&quot;math/tex&quot;&gt;ev&lt;/script&gt; from the identity functor to the double dual functor. At a given vector space &lt;script type=&quot;math/tex&quot;&gt;V&lt;/script&gt;, the map &lt;script type=&quot;math/tex&quot;&gt;ev_V&lt;/script&gt; sends a vector &lt;script type=&quot;math/tex&quot;&gt;v&lt;/script&gt; to the linear map &lt;script type=&quot;math/tex&quot;&gt;V^*\to k&lt;/script&gt; defined by “evaluation at &lt;script type=&quot;math/tex&quot;&gt;v&lt;/script&gt;,” namely&lt;/p&gt;&lt;script type=&quot;math/tex&quot;&gt;\lambda \mapsto \lambda(v),\quad  \lambda \in V^*.
&lt;/script&gt;&lt;p&gt;Naturality of &lt;script type=&quot;math/tex&quot;&gt;ev&lt;/script&gt; asserts that for &lt;script type=&quot;math/tex&quot;&gt;f\colon V \to W&lt;/script&gt; a linear map, the following diagram commutes&lt;/p&gt;&lt;script type=&quot;math/tex&quot;&gt;\begin{CD}
  V @&gt;ev_V&gt;&gt; V^{**} \\
  @VfVV @VVf^{**}V \\
  W @&gt;ev_W&gt;&gt; W^{**}.
\end{CD}
&lt;/script&gt;&lt;p&gt;To show this, consider a vector &lt;script type=&quot;math/tex&quot;&gt;v \in V&lt;/script&gt;. The element &lt;script type=&quot;math/tex&quot;&gt;f^{**}(ev_V(v)) \in W^{**}&lt;/script&gt; is the linear map&lt;/p&gt;&lt;script type=&quot;math/tex&quot;&gt;ev_V(v)\circ f^*\colon W^*\to k,
&lt;/script&gt;&lt;p&gt;so its action on &lt;script type=&quot;math/tex&quot;&gt;\lambda \in W*&lt;/script&gt; is&lt;/p&gt;&lt;script type=&quot;math/tex&quot;&gt;ev_V(v)(f^*(\lambda)) = ev_V(v)(\lambda f) = 
\lambda (f(v)) = ev_W(f(v))(\lambda),
&lt;/script&gt;&lt;p&gt;demonstrating naturality.&lt;/p&gt;&lt;p&gt;The map &lt;script type=&quot;math/tex&quot;&gt;ev_V&lt;/script&gt; is an isomorphism when &lt;script type=&quot;math/tex&quot;&gt;V&lt;/script&gt; is finite dimensional. Thus we say that when restricted to the &lt;em&gt;subcategory&lt;/em&gt; of finite dimensional vector spaces, &lt;script type=&quot;math/tex&quot;&gt;ev&lt;/script&gt; is a &lt;em&gt;natural isomorphism.&lt;/em&gt;&lt;/p&gt;&lt;h4&gt;The Yoneda Lemma&lt;/h4&gt;&lt;p&gt;Perhaps the fundamental result in category theory is the following:&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;strong&gt;Theorem.&lt;/strong&gt; (The Yoneda Lemma)&lt;br&gt;Let &lt;script type=&quot;math/tex&quot;&gt;C&lt;/script&gt; be a locally small category and &lt;script type=&quot;math/tex&quot;&gt;F\colon C \to {\operatorname{Set}}&lt;/script&gt; a functor. For each object &lt;script type=&quot;math/tex&quot;&gt;c&lt;/script&gt; of &lt;script type=&quot;math/tex&quot;&gt;C&lt;/script&gt;, there is a bijection&lt;/p&gt;&lt;/blockquote&gt;&lt;script type=&quot;math/tex&quot;&gt;\{\alpha\colon C(c,-)\Rightarrow F\} \longleftrightarrow \{x \in Fc\}
&lt;/script&gt;&lt;blockquote&gt;&lt;p&gt;implemented by sending a natural transformation &lt;script type=&quot;math/tex&quot;&gt;\alpha&lt;/script&gt; to the element &lt;script type=&quot;math/tex&quot;&gt;\alpha_c(1_c)&lt;/script&gt;. This bijection is natural in &lt;script type=&quot;math/tex&quot;&gt;F&lt;/script&gt; and &lt;script type=&quot;math/tex&quot;&gt;c&lt;/script&gt;.&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;The proof is straightforward, once one figures out what needs proving. The utility of the Yoneda lemma is likely far from obvious when one first meets it, but it turns out to be a major tool in category theory.&lt;/p&gt;</description>
        <link>https://www.robbielyman.com/blog/category-theory-day-one/</link>
        <pubDate>Tue, 21 Jul 2026 17:00:00 +0000</pubDate>
        <guid>https://www.robbielyman.com/blog/category-theory-day-one/</guid>
      </item>
    
      <item>
        <title>Nuh-uh! Infinity plus one!</title>
        <description>&lt;p&gt;This is a blog post about ordinal numbers, ordinal arithmetic, and a brief advertisement for a result I proved with &lt;a href=&quot;https://sites.google.com/view/georgedomat/home&quot;&gt;George Domat&lt;/a&gt;, and &lt;a href=&quot;https://www.math.umd.edu/~hoganson/&quot;&gt;Hannah Hoganson&lt;/a&gt;. The paper is now available &lt;a href=&quot;https://arxiv.org/abs/2607.01196&quot;&gt;on the arXiv.&lt;/a&gt;&lt;/p&gt;&lt;h2&gt;Nuh-uh! Infinity plus one!&lt;/h2&gt;&lt;p&gt;I’m sure you’ve probably spent enough time with children or were once a child to remember a variant of the line above. Somehow you and a friend are competing to name bigger and bigger numbers. Maybe your friend thinks they’ve won because they know about infinity and say “Infinity!” and you &lt;em&gt;have&lt;/em&gt; to top that, so you say “Nuh-uh! Infinity &lt;em&gt;plus one!&lt;/em&gt;” At a vibes level, ordinal numbers in mathematics are a way to actually take that idea seriously.&lt;/p&gt;&lt;h2&gt;Two definitions&lt;/h2&gt;&lt;p&gt;A &lt;em&gt;totally ordered set&lt;/em&gt; is a set &lt;script type=&quot;math/tex&quot;&gt;S&lt;/script&gt; with an order &lt;script type=&quot;math/tex&quot;&gt;&gt;&lt;/script&gt;; given any two distinct elements &lt;script type=&quot;math/tex&quot;&gt;x&lt;/script&gt; and &lt;script type=&quot;math/tex&quot;&gt;y&lt;/script&gt; of the set, one is always bigger, maybe &lt;script type=&quot;math/tex&quot;&gt;x&lt;/script&gt; is bigger, so we say &lt;script type=&quot;math/tex&quot;&gt;x &gt; y&lt;/script&gt;. The order is transitive as usual.&lt;/p&gt;&lt;p&gt;Some total orders go on forever in one or both directions. For example, the integers &lt;script type=&quot;math/tex&quot;&gt;\mathbb{Z}&lt;/script&gt;. Given an integer like 16, there’s always an element smaller than it, and an element bigger than it. A set is &lt;em&gt;well-ordered&lt;/em&gt; if it only goes on forever as you get bigger. That is, a set is &lt;em&gt;well-ordered&lt;/em&gt; if any nonempty subset has a smallest element.&lt;/p&gt;&lt;p&gt;So the integers are not well-ordered, but the &lt;em&gt;natural numbers&lt;/em&gt; &lt;script type=&quot;math/tex&quot;&gt;\mathbb{N} = \{0,1,2,\ldots\}&lt;/script&gt; are well-ordered.&lt;/p&gt;&lt;p&gt;An &lt;em&gt;ordinal&lt;/em&gt; is the order-isomorphism class of a well-ordered set.&lt;/p&gt;&lt;p&gt;The &lt;em&gt;von Neumann&lt;/em&gt; definition of the ordinals provides a convenient (although initially very confusing because the quickest way to say it gets circular fast) way to represent ordinals:&lt;/p&gt;&lt;p&gt;We start with &lt;script type=&quot;math/tex&quot;&gt;\mathbf{0} = \varnothing&lt;/script&gt;. The empty set is the zero ordinal. Next &lt;script type=&quot;math/tex&quot;&gt;\mathbf{1} = \{\mathbf{0}\} = \{\varnothing\}&lt;/script&gt;. The set containing the empty set is the first successor ordinal. In general, given an ordinal &lt;script type=&quot;math/tex&quot;&gt;\alpha&lt;/script&gt;, there is an ordinal &lt;script type=&quot;math/tex&quot;&gt;\alpha + 1&lt;/script&gt; which, as a set, is the collection of all ordinals up to and including &lt;script type=&quot;math/tex&quot;&gt;\alpha&lt;/script&gt; in the order that they appear. So for example &lt;script type=&quot;math/tex&quot;&gt;\mathbf{2} = \mathbf{1} + 1 = \{\mathbf{0}, \mathbf{1}\}&lt;/script&gt;.&lt;/p&gt;&lt;p&gt;In this definition, each ordinal is a prefix of all ordinals which are bigger than it. Given an increasing sequence of ordinals &lt;script type=&quot;math/tex&quot;&gt;\{\alpha_n\}_{n \in \mathbb{N}}&lt;/script&gt;, their union is a well-ordered set which we call &lt;script type=&quot;math/tex&quot;&gt;\lim_{n\to\infty}\alpha_n&lt;/script&gt;. The first example is &lt;script type=&quot;math/tex&quot;&gt;\mathbb{N} = \omega = \lim_{n\to\infty} \mathbf{n}&lt;/script&gt;. The notation &lt;script type=&quot;math/tex&quot;&gt;\omega&lt;/script&gt; is standard when referring to the set of natural numbers as an ordinal, so we’ll use it throughout this post.&lt;/p&gt;&lt;p&gt;Every ordinal turns out to either be &lt;script type=&quot;math/tex&quot;&gt;\mathbf{0}&lt;/script&gt; or a &lt;em&gt;successor ordinal&lt;/em&gt; &lt;script type=&quot;math/tex&quot;&gt;\alpha + 1&lt;/script&gt;, or a &lt;em&gt;limit ordinal&lt;/em&gt; &lt;script type=&quot;math/tex&quot;&gt;\lambda = \lim_{n \to \infty} \alpha_n&lt;/script&gt;, where &lt;script type=&quot;math/tex&quot;&gt;\alpha&lt;/script&gt; and the &lt;script type=&quot;math/tex&quot;&gt;\alpha_n&lt;/script&gt; are previously constructed ordinals. This is the basis for a proof technique called &lt;a href=&quot;https://en.wikipedia.org/wiki/Transfinite_induction&quot;&gt;transfinite induction&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Notice, this definition makes it totally sensible to say &lt;script type=&quot;math/tex&quot;&gt;\omega + 1 = \omega \cup \{\omega\} = \mathbb{N} \cup \{\omega\}&lt;/script&gt;! Here is a picture representing &lt;script type=&quot;math/tex&quot;&gt;\omega + 1&lt;/script&gt;.&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;https://www.robbielyman.com/blog/infinity-plus-one/figure.svg&quot;&gt;&lt;/p&gt;&lt;h2&gt;Ordinal arithmetic&lt;/h2&gt;&lt;p&gt;Given two totally ordered sets &lt;script type=&quot;math/tex&quot;&gt;X&lt;/script&gt; and &lt;script type=&quot;math/tex&quot;&gt;Y&lt;/script&gt;, you can produce a new one &lt;script type=&quot;math/tex&quot;&gt;X + Y&lt;/script&gt; by sticking them “end-to-end” so that every element of &lt;script type=&quot;math/tex&quot;&gt;Y&lt;/script&gt; is bigger than every element of &lt;script type=&quot;math/tex&quot;&gt;X&lt;/script&gt;. When these sets &lt;script type=&quot;math/tex&quot;&gt;X&lt;/script&gt; and &lt;script type=&quot;math/tex&quot;&gt;Y&lt;/script&gt; are well-ordered, so too is &lt;script type=&quot;math/tex&quot;&gt;X + Y&lt;/script&gt;. This is &lt;em&gt;ordinal addition.&lt;/em&gt;&lt;/p&gt;&lt;p&gt;Ordinal addition is &lt;em&gt;not&lt;/em&gt; commutative: you should convince yourself that &lt;script type=&quot;math/tex&quot;&gt;\mathbf{1} + \omega = \omega&lt;/script&gt; but that &lt;script type=&quot;math/tex&quot;&gt;\omega + \mathbf{1}&lt;/script&gt; is different from &lt;script type=&quot;math/tex&quot;&gt;\omega&lt;/script&gt; by virtue of having a largest element.&lt;/p&gt;&lt;p&gt;There is also &lt;em&gt;ordinal multiplication.&lt;/em&gt; Given two totally ordered sets &lt;script type=&quot;math/tex&quot;&gt;X&lt;/script&gt; and &lt;script type=&quot;math/tex&quot;&gt;Y&lt;/script&gt;, their cartesian product &lt;script type=&quot;math/tex&quot;&gt;X \times Y&lt;/script&gt; is totally ordered by saying that &lt;script type=&quot;math/tex&quot;&gt;(x,y) &gt; (x&apos;,y&apos;)&lt;/script&gt; when either &lt;script type=&quot;math/tex&quot;&gt;y &gt; y&apos;&lt;/script&gt; or &lt;script type=&quot;math/tex&quot;&gt;y = y&apos;&lt;/script&gt; and &lt;script type=&quot;math/tex&quot;&gt;x &gt; x&apos;&lt;/script&gt;. This order is called &lt;em&gt;reverse lexicographic order,&lt;/em&gt; because the “second letter” in the “word” is more important, which is the opposite from when you alphabetize a bookshelf.&lt;/p&gt;&lt;p&gt;Again, when &lt;script type=&quot;math/tex&quot;&gt;X&lt;/script&gt; and &lt;script type=&quot;math/tex&quot;&gt;Y&lt;/script&gt; are totally ordered, the product with this reverse lexicographic order is totally ordered, and its order-isomorphism class is the &lt;em&gt;product&lt;/em&gt; &lt;script type=&quot;math/tex&quot;&gt;X\cdot Y&lt;/script&gt; of these ordinals. This product is also not commutative: you can convince yourself that &lt;script type=&quot;math/tex&quot;&gt;\mathbf{2} \cdot \omega = \omega&lt;/script&gt;, but it turns out that &lt;script type=&quot;math/tex&quot;&gt;\omega \cdot \mathbf{2} = \omega + \omega&lt;/script&gt; is different from &lt;script type=&quot;math/tex&quot;&gt;\omega&lt;/script&gt;.&lt;/p&gt;&lt;p&gt;One final operation I want to mention is &lt;em&gt;ordinal exponentiation.&lt;/em&gt; Here I’ll rely a little more on von Neumann’s terminology. A function &lt;script type=&quot;math/tex&quot;&gt;f \colon \alpha \to \beta&lt;/script&gt; where &lt;script type=&quot;math/tex&quot;&gt;\alpha&lt;/script&gt; and &lt;script type=&quot;math/tex&quot;&gt;\beta&lt;/script&gt; are ordinals is &lt;em&gt;finitely supported&lt;/em&gt; if for all but finitely many elements &lt;script type=&quot;math/tex&quot;&gt;x \in \alpha&lt;/script&gt;, we have &lt;script type=&quot;math/tex&quot;&gt;f(x) = 0 \in \beta&lt;/script&gt;.&lt;/p&gt;&lt;p&gt;Two finitely supported functions can be compared: take &lt;script type=&quot;math/tex&quot;&gt;x&lt;/script&gt; to be the largest element for which &lt;script type=&quot;math/tex&quot;&gt;f(x) \ne g(x)&lt;/script&gt;, and say that &lt;script type=&quot;math/tex&quot;&gt;f &gt; g&lt;/script&gt; if &lt;script type=&quot;math/tex&quot;&gt;f(x) &gt; g(x)&lt;/script&gt;. This makes the collection of finitely supported functions into a well-ordered set, which we denote &lt;script type=&quot;math/tex&quot;&gt;\beta^\alpha&lt;/script&gt;. Exponentiation with base &lt;script type=&quot;math/tex&quot;&gt;\omega&lt;/script&gt; has the nice property that &lt;script type=&quot;math/tex&quot;&gt;\omega^{\alpha + 1} = \omega^\alpha\cdot\omega&lt;/script&gt;.&lt;/p&gt;&lt;h2&gt;Picturing ordinals&lt;/h2&gt;&lt;p&gt;What we’ve talked about so far can help us visualize ordinals. For example&lt;/p&gt;&lt;script type=&quot;math/tex&quot;&gt;\omega^2 = \omega\cdot\omega = \lim_{n\to\infty}\omega\cdot n = \lim_{n\to\infty}\underbrace{\omega + \omega + \cdots + \omega}_{n\text{ times}}.
&lt;/script&gt;&lt;p&gt;So to picture &lt;script type=&quot;math/tex&quot;&gt;\omega^2&lt;/script&gt;, the rule for ordinal addition says that we should stitch together infinitely many copies of &lt;script type=&quot;math/tex&quot;&gt;\mathbb{N} = \omega&lt;/script&gt; end-to-end.&lt;/p&gt;&lt;p&gt;Actually, we can be even braver! Now that we can picture &lt;script type=&quot;math/tex&quot;&gt;\omega^2&lt;/script&gt;, we can stitch together &lt;em&gt;those&lt;/em&gt; to build &lt;script type=&quot;math/tex&quot;&gt;\omega^3&lt;/script&gt; and so on. The observation that if &lt;script type=&quot;math/tex&quot;&gt;\alpha &gt; \beta&lt;/script&gt;, then &lt;script type=&quot;math/tex&quot;&gt;\beta + \alpha = \alpha&lt;/script&gt; tells us that&lt;/p&gt;&lt;script type=&quot;math/tex&quot;&gt;\omega^\omega = \lim_{n\to\infty} \omega^n = \mathbf{1} + \omega + \omega^2 + \omega^3 + \cdots.
&lt;/script&gt;&lt;p&gt;So we can picture this ordinal by lining up a copy of &lt;script type=&quot;math/tex&quot;&gt;\omega^n&lt;/script&gt; for each finite &lt;script type=&quot;math/tex&quot;&gt;n&lt;/script&gt; in increasing order!&lt;/p&gt;&lt;p&gt;Okay I’ll finish this section with a challenge straight from your kid self: using the same strategies as before, we could picture &lt;script type=&quot;math/tex&quot;&gt;\omega^{\omega^\omega}&lt;/script&gt; and then &lt;script type=&quot;math/tex&quot;&gt;\omega^{\omega^{\omega^\omega}}&lt;/script&gt; (so four &lt;script type=&quot;math/tex&quot;&gt;\omega&lt;/script&gt;s, and then 5, and so on) and line up all of &lt;em&gt;those&lt;/em&gt; ordinals to picture their limit, which is called &lt;script type=&quot;math/tex&quot;&gt;\epsilon_0&lt;/script&gt;. The ordinal &lt;script type=&quot;math/tex&quot;&gt;\epsilon_0&lt;/script&gt; is a tower of repeated exponentiations with base &lt;script type=&quot;math/tex&quot;&gt;\omega&lt;/script&gt; and has the weird property that &lt;script type=&quot;math/tex&quot;&gt;\epsilon_0^\omega = \epsilon_0&lt;/script&gt;.&lt;/p&gt;&lt;p&gt;It turns out that &lt;a href=&quot;https://en.wikipedia.org/wiki/Large_countable_ordinal&quot;&gt;there may (or may not be!) many many many countable ordinals&lt;/a&gt; on beyond &lt;script type=&quot;math/tex&quot;&gt;\epsilon_0&lt;/script&gt;!&lt;/p&gt;&lt;h2&gt;Classifying homeomorphisms of ordinals&lt;/h2&gt;&lt;p&gt;&lt;a href=&quot;https://doi.org/10.1112/blms.70097&quot;&gt;In a 2025 paper with myself, Branman, Domat and Hoganson&lt;/a&gt;, we studied the group of &lt;em&gt;homeomorphisms&lt;/em&gt; of countable ordinals equipped with the order topology. The reason for studying homeomorphism, which is weaker than order isomorphism, is that by definition ordinals have &lt;em&gt;no&lt;/em&gt; order automorphisms, but they do have many homeomorphisms.&lt;/p&gt;&lt;p&gt;For example, the homeomorphism group of a finite ordinal &lt;script type=&quot;math/tex&quot;&gt;\mathbf{n}&lt;/script&gt; is the symmetric group &lt;script type=&quot;math/tex&quot;&gt;S_n&lt;/script&gt;. The homeomorphism group of &lt;script type=&quot;math/tex&quot;&gt;\omega&lt;/script&gt; or of &lt;script type=&quot;math/tex&quot;&gt;\omega + 1&lt;/script&gt; is the group &lt;script type=&quot;math/tex&quot;&gt;S_\omega&lt;/script&gt; of bijections of a countable set.&lt;/p&gt;&lt;p&gt;When &lt;script type=&quot;math/tex&quot;&gt;\alpha&lt;/script&gt; is a countable, &lt;em&gt;compact&lt;/em&gt; ordinal, the group &lt;script type=&quot;math/tex&quot;&gt;\mathop{\mathrm{Homeo}}(\alpha)&lt;/script&gt; is a &lt;a href=&quot;https://en.wikipedia.org/wiki/Polish_space&quot;&gt;Polish&lt;/a&gt; topological group with the &lt;a href=&quot;https://en.wikipedia.org/wiki/Compact-open_topology&quot;&gt;compact–open topology&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Such (nonempty) ordinals are classified up to homeomorphism by two pieces of data: a countable ordinal &lt;script type=&quot;math/tex&quot;&gt;\alpha&lt;/script&gt; and a natural number &lt;script type=&quot;math/tex&quot;&gt;n \ge 1&lt;/script&gt;. In the notation above, the ordinal is homeomorphic (although not necessarily equal) to &lt;script type=&quot;math/tex&quot;&gt;\omega^\alpha \cdot n + 1&lt;/script&gt;.&lt;/p&gt;&lt;p&gt;Using a framework introduced by &lt;a href=&quot;https://sites.google.com/view/christian-rosendal&quot;&gt;Christian Rosendal&lt;/a&gt;, we showed in that previous paper that the following properties hold.&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;strong&gt;Theorem&lt;/strong&gt; (Branman–Domat–Hoganson–Lyman, 2025). The groups &lt;script type=&quot;math/tex&quot;&gt;G(\alpha,n) = \mathop{\mathrm{Homeo}}(\omega^\alpha \cdot n + 1)&lt;/script&gt; have a well-defined &lt;a href=&quot;https://en.wikipedia.org/wiki/Coarse_structure&quot;&gt;&lt;em&gt;coarse structure.&lt;/em&gt;&lt;/a&gt; Moreover, they fall into three camps:&lt;/p&gt;&lt;ol&gt;&lt;li&gt;&lt;p&gt;If &lt;script type=&quot;math/tex&quot;&gt;n = 1&lt;/script&gt;, the group &lt;script type=&quot;math/tex&quot;&gt;G(\alpha,n)&lt;/script&gt; is coarsely bounded, so coarsely equivalent to a point.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;If &lt;script type=&quot;math/tex&quot;&gt;n &gt; 1&lt;/script&gt; and &lt;script type=&quot;math/tex&quot;&gt;\alpha&lt;/script&gt; is a successor ordinal &lt;script type=&quot;math/tex&quot;&gt;\alpha = \beta + 1&lt;/script&gt;, the group &lt;script type=&quot;math/tex&quot;&gt;G(\alpha,n)&lt;/script&gt; is generated by a coarsely bounded set, and has a well-defined, unbounded quasi-isometry type.&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;If &lt;script type=&quot;math/tex&quot;&gt;n &gt; 1&lt;/script&gt; and &lt;script type=&quot;math/tex&quot;&gt;\alpha&lt;/script&gt; is a limit ordinal, the group &lt;script type=&quot;math/tex&quot;&gt;G(\alpha,n)&lt;/script&gt; is &lt;em&gt;not&lt;/em&gt; generated by any coarsely bounded set.&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;/blockquote&gt;&lt;p&gt;In a forthcoming paper we will complete the classification of homeomorphism groups of countable, compact ordinals by proving the following result.&lt;/p&gt;&lt;blockquote&gt;&lt;p&gt;&lt;strong&gt;Theorem&lt;/strong&gt; (Branman–Domat–Hoganson–Lyman 2026). The groups &lt;script type=&quot;math/tex&quot;&gt;G(\alpha,n) = \mathop{\mathrm{Homeo}}(\omega^\alpha \cdot n + 1)&lt;/script&gt; fall into exactly three coarse equivalence classes as described above.&lt;/p&gt;&lt;/blockquote&gt;&lt;p&gt;That is, we show that all groups in any of the three camps above are coarsely equivalent to each other and not to ones from the other camps. This is obviously already known for the first camp by our previous work. For the other two camps, the result is to our knowledge one of the first of its kind in the setting of non-locally compact Polish groups.&lt;/p&gt;</description>
        <link>https://www.robbielyman.com/blog/infinity-plus-one/</link>
        <pubDate>Sat, 23 May 2026 21:00:00 +0000</pubDate>
        <guid>https://www.robbielyman.com/blog/infinity-plus-one/</guid>
      </item>
    
      <item>
        <title>Subgroupoids of Groups</title>
        <description>&lt;p&gt;There’s an annoying philistinism in some areas of mathematics, including my own area of geometric group theory, of pooh-poohing category theory.&lt;/p&gt;&lt;p&gt;It’s easy to see why: if you browse the &lt;a href=&quot;https://ncatlab.org/nlab/show/HomePage&quot;&gt;nLab&lt;/a&gt; or the &lt;a href=&quot;https://stacks.math.columbia.edu/&quot;&gt;Stacks project&lt;/a&gt; or talk to a PL theory person who knows too much Haskell, you mostly get what sounds like meaningless gobbledigook—excuse me, I meant &lt;em&gt;abstract nonsense.&lt;/em&gt; This isn’t to bash the work that went into these projects, which are valuable references once you learn how to read them. The problem is that many people don’t discover why they might want to.&lt;/p&gt;&lt;p&gt;Ostensibly, the aim of a field like geometric group theory, low-dimensional topology or analysis, is concerned with answering concrete questions about fairly specific objects. Such and such family of solitons, or Artin groups or knots, or what have you. Often a strong geometric intuition or a willingness to get one’s hands dirty with the simplest nontrivial example is a key part of the work. Knowledge of category theory often does not help here. Knowing that an HNN extension is an example of a &lt;em&gt;co-inserter&lt;/em&gt; is very different from being able to comfortably work with its Bass–Serre tree. Everyone in mathematics has met an approximation of the bright senior undergrad or first-year grad student who appears to have swallowed &lt;em&gt;Category Theory for the Working Mathematician&lt;/em&gt; whole. This student might use abstract nonsense as a deflection, a way of avoiding actually getting their hands dirty learning a field.&lt;/p&gt;&lt;p&gt;That being said, there really is a time for theory-building, and geometric group theory for the most part falls on its face at this step. It’s great for definitions to be difficult so that theorems can be easy, for instance, but &lt;a href=&quot;https://arxiv.org/pdf/2601.15410&quot;&gt;some definitions are still too difficult.&lt;/a&gt; To me, this signals a lack of time spent trying to fit tools into a bigger picture.&lt;/p&gt;&lt;p&gt;Anyway, that’s enough polemics from me for today. The purpose of this post is to introduce a concept familiar to folks working in category theory that suffers from a lack of attention from group theorists: the notion of a &lt;em&gt;subgroupoid&lt;/em&gt; of a group. In an effort to make it relevant to a geometric group theorist, I’ll close by reformulating the definitions of &lt;em&gt;height&lt;/em&gt; and &lt;em&gt;width&lt;/em&gt; of subgroups as properties of a subgroupoid.&lt;/p&gt;&lt;h2&gt;Background&lt;/h2&gt;&lt;p&gt;I’m going to &lt;em&gt;fly&lt;/em&gt; through this because you probably have seen this stuff before, and if you haven’t, you should do more work understanding it than this post is gonna provide.&lt;/p&gt;&lt;p&gt;A &lt;em&gt;groupoid&lt;/em&gt; is a small category where every arrow is invertible.&lt;/p&gt;&lt;p&gt;If that’s too fast for you, you have two sets &lt;script type=&quot;math/tex&quot;&gt;V \mathsf{G}&lt;/script&gt; of &lt;em&gt;objects&lt;/em&gt; and &lt;script type=&quot;math/tex&quot;&gt;E \mathsf{G}&lt;/script&gt; of &lt;em&gt;arrows.&lt;/em&gt; I’ll use function notation for arrows: &lt;script type=&quot;math/tex&quot;&gt;f\colon x \to y&lt;/script&gt; saying that &lt;script type=&quot;math/tex&quot;&gt;f \in E \mathsf{G}&lt;/script&gt; is an arrow with &lt;em&gt;source object&lt;/em&gt; &lt;script type=&quot;math/tex&quot;&gt;\iota(f) = x \in V\mathsf{G}&lt;/script&gt; and &lt;em&gt;target&lt;/em&gt; object &lt;script type=&quot;math/tex&quot;&gt;\tau(f) = y \in V\mathsf{G}&lt;/script&gt;. Arrows &lt;script type=&quot;math/tex&quot;&gt;f\colon x \to y&lt;/script&gt; and &lt;script type=&quot;math/tex&quot;&gt;g \colon y \to z&lt;/script&gt; can compose like functions as &lt;script type=&quot;math/tex&quot;&gt;g \circ f = g f \colon x \to z&lt;/script&gt;, and each object &lt;script type=&quot;math/tex&quot;&gt;x&lt;/script&gt; has an identity arrow &lt;script type=&quot;math/tex&quot;&gt;1_x \colon x \to x&lt;/script&gt;. Composition is associative and identity arrows are (two-sided) identities for composition. Finally if &lt;script type=&quot;math/tex&quot;&gt;f\colon x \to y&lt;/script&gt; is an arrow, there is an arrow &lt;script type=&quot;math/tex&quot;&gt;f^{-1}\colon y \to x&lt;/script&gt; such that &lt;script type=&quot;math/tex&quot;&gt;f \circ f^{-1} = 1_y&lt;/script&gt; and &lt;script type=&quot;math/tex&quot;&gt;f^{-1} \circ f = 1_x&lt;/script&gt;.&lt;/p&gt;&lt;p&gt;You might have heard “a group is a groupoid with one object.” This is true: if &lt;script type=&quot;math/tex&quot;&gt;G&lt;/script&gt; is a group, let &lt;script type=&quot;math/tex&quot;&gt;G&lt;/script&gt; itself denote the object and each element &lt;script type=&quot;math/tex&quot;&gt;g \in G&lt;/script&gt; becomes an arrow &lt;script type=&quot;math/tex&quot;&gt;g \colon G \to G&lt;/script&gt;. Composition is the group operation and inversion is inversion.&lt;/p&gt;&lt;p&gt;Morphisms of groupoids are &lt;em&gt;functors:&lt;/em&gt; &lt;script type=&quot;math/tex&quot;&gt;F \colon \mathsf{H} \to \mathsf{G}&lt;/script&gt; sends, for example &lt;script type=&quot;math/tex&quot;&gt;f \colon x \to y&lt;/script&gt; in &lt;script type=&quot;math/tex&quot;&gt;\mathsf{H}&lt;/script&gt; to &lt;script type=&quot;math/tex&quot;&gt;F f \colon F x \to F y&lt;/script&gt; in &lt;script type=&quot;math/tex&quot;&gt;\mathsf{G}&lt;/script&gt;, so there are assignments of objects to objects and arrows to arrows. Composition and identities must be respected.&lt;/p&gt;&lt;p&gt;A &lt;em&gt;natural transformation,&lt;/em&gt; &lt;em&gt;natural isomorphism,&lt;/em&gt; or my emerging favorite terminology, a &lt;em&gt;conjugacy&lt;/em&gt; &lt;script type=&quot;math/tex&quot;&gt;\eta&lt;/script&gt; between functors &lt;script type=&quot;math/tex&quot;&gt;F, K \colon \mathsf{H} \to \mathsf{G}&lt;/script&gt; is an assignment, for each object &lt;script type=&quot;math/tex&quot;&gt;x \in V \mathsf{H}&lt;/script&gt;, of an &lt;em&gt;arrow&lt;/em&gt; &lt;script type=&quot;math/tex&quot;&gt;\eta_x \colon F x \to K x&lt;/script&gt; in &lt;script type=&quot;math/tex&quot;&gt;\mathsf{G}&lt;/script&gt; such that for each arrow &lt;script type=&quot;math/tex&quot;&gt;f \colon x \to y&lt;/script&gt; in &lt;script type=&quot;math/tex&quot;&gt;\mathsf{H}&lt;/script&gt;, the equation&lt;/p&gt;&lt;script type=&quot;math/tex&quot;&gt;K f \circ \eta_x = \eta_y \circ F f
&lt;/script&gt;&lt;p&gt;is true in &lt;script type=&quot;math/tex&quot;&gt;\mathsf{G}&lt;/script&gt;. The notation is &lt;script type=&quot;math/tex&quot;&gt;\eta \colon F \Rightarrow K&lt;/script&gt;.&lt;/p&gt;&lt;p&gt;I like the word conjugacy because in the case where &lt;script type=&quot;math/tex&quot;&gt;H&lt;/script&gt; and &lt;script type=&quot;math/tex&quot;&gt;G&lt;/script&gt; are groups, a functor is a homomorphism and a conjugacy is simply a choice of an element &lt;script type=&quot;math/tex&quot;&gt;\eta \in G&lt;/script&gt; with the property that &lt;script type=&quot;math/tex&quot;&gt;K(h) = \eta F(h) \eta^{-1}&lt;/script&gt; for all elements &lt;script type=&quot;math/tex&quot;&gt;h \in H&lt;/script&gt;.&lt;/p&gt;&lt;p&gt;An &lt;em&gt;equivalence&lt;/em&gt; of groupoids &lt;script type=&quot;math/tex&quot;&gt;\mathsf{G}&lt;/script&gt; and &lt;script type=&quot;math/tex&quot;&gt;\mathsf{H}&lt;/script&gt; is a pair of functors &lt;script type=&quot;math/tex&quot;&gt;F \colon \mathsf{G} \to \mathsf{H}&lt;/script&gt; and &lt;script type=&quot;math/tex&quot;&gt;K \colon \mathsf{H} \to \mathsf{G}&lt;/script&gt; and conjugacies &lt;script type=&quot;math/tex&quot;&gt;\eta \colon 1_{\mathsf{G}} \Rightarrow K F&lt;/script&gt; and &lt;script type=&quot;math/tex&quot;&gt;\epsilon \colon F K \Rightarrow 1_{\mathsf{H}}&lt;/script&gt;.&lt;/p&gt;&lt;p&gt;Assuming the Axiom of Choice, a functor &lt;script type=&quot;math/tex&quot;&gt;F&lt;/script&gt; is an equivalence if and only if it is &lt;em&gt;full&lt;/em&gt; (surjective on arrows &lt;script type=&quot;math/tex&quot;&gt;Fx \to Fy&lt;/script&gt;), &lt;em&gt;faithful&lt;/em&gt; (injective on arrows &lt;script type=&quot;math/tex&quot;&gt;x \to y&lt;/script&gt;) and &lt;em&gt;essentially surjective&lt;/em&gt; (every object &lt;script type=&quot;math/tex&quot;&gt;y&lt;/script&gt; in the target groupoid is connected to an object &lt;script type=&quot;math/tex&quot;&gt;Fx&lt;/script&gt; by an arrow &lt;script type=&quot;math/tex&quot;&gt;Fx \to y&lt;/script&gt;).&lt;/p&gt;&lt;h2&gt;Group Systems are Groupoids&lt;/h2&gt;&lt;p&gt;A groupoid is &lt;em&gt;connected&lt;/em&gt; if between every pair of objects &lt;script type=&quot;math/tex&quot;&gt;x&lt;/script&gt; and &lt;script type=&quot;math/tex&quot;&gt;y&lt;/script&gt;, there is an arrow &lt;script type=&quot;math/tex&quot;&gt;x \to y&lt;/script&gt;. A groupoid is &lt;em&gt;contractible&lt;/em&gt; if it is connected and the aforementioned arrow is &lt;em&gt;unique.&lt;/em&gt; Every nonempty connected groupoid &lt;script type=&quot;math/tex&quot;&gt;\mathsf{H}&lt;/script&gt; is equivalent to the group &lt;script type=&quot;math/tex&quot;&gt;\mathsf{H}(v,v)&lt;/script&gt; of arrows &lt;script type=&quot;math/tex&quot;&gt;v \to v&lt;/script&gt; for some (and hence any) object &lt;script type=&quot;math/tex&quot;&gt;v \in V\mathsf{H}&lt;/script&gt;. A nonempty contractible groupoid is equivalent to the trivial group.&lt;/p&gt;&lt;p&gt;If &lt;script type=&quot;math/tex&quot;&gt;v \in V\mathsf{G}&lt;/script&gt; is an object, its &lt;em&gt;connected component&lt;/em&gt; is the set of objects &lt;script type=&quot;math/tex&quot;&gt;w&lt;/script&gt; in &lt;script type=&quot;math/tex&quot;&gt;\mathsf{G}&lt;/script&gt; such that there is an arrow &lt;script type=&quot;math/tex&quot;&gt;v \to w&lt;/script&gt;. Suppose &lt;script type=&quot;math/tex&quot;&gt;\{ [v_i] : i \in I \}&lt;/script&gt; is the set of connected components of &lt;script type=&quot;math/tex&quot;&gt;\mathsf{G}&lt;/script&gt;. We can construct a &lt;em&gt;spanning groupoid&lt;/em&gt; from this set by choosing for each &lt;script type=&quot;math/tex&quot;&gt;w \in [v_i]&lt;/script&gt; a unique arrow &lt;script type=&quot;math/tex&quot;&gt;s_w \colon v_i \to w&lt;/script&gt;, with the stipulation that the arrow &lt;script type=&quot;math/tex&quot;&gt;s_{v_i} \colon v_i \to v_i&lt;/script&gt; is &lt;script type=&quot;math/tex&quot;&gt;1_{v_i}&lt;/script&gt;. Completing this by addding in identities and compositions, we get a contractible groupoid &lt;script type=&quot;math/tex&quot;&gt;\mathsf{S}&lt;/script&gt; with vertex set &lt;script type=&quot;math/tex&quot;&gt;V\mathsf{G}&lt;/script&gt;. With all of this data, one can show that each arrow &lt;script type=&quot;math/tex&quot;&gt;f \colon v \to w&lt;/script&gt; factors uniquely as &lt;script type=&quot;math/tex&quot;&gt;f = s_w f_i s_v^{-1}&lt;/script&gt;, where &lt;script type=&quot;math/tex&quot;&gt;s_v \colon v_i \to v&lt;/script&gt; and &lt;script type=&quot;math/tex&quot;&gt;s_w \colon v_i \to w&lt;/script&gt; are in &lt;script type=&quot;math/tex&quot;&gt;\mathsf{S}&lt;/script&gt; and &lt;script type=&quot;math/tex&quot;&gt;f_i \colon v_i \to v_i&lt;/script&gt; is an element of the group &lt;script type=&quot;math/tex&quot;&gt;G_i = \mathsf{G}(v_i, v_i)&lt;/script&gt;.&lt;/p&gt;&lt;p&gt;Every groupoid, then, is equivalent to what &lt;a href=&quot;https://mutanguha.com&quot;&gt;J.P. Mutanguha&lt;/a&gt; denotes a &lt;em&gt;group system:&lt;/em&gt; an indexed disjoint union of groups. Explicitly, if &lt;script type=&quot;math/tex&quot;&gt;\{ [v_i] : i \in I \}&lt;/script&gt; is the set of connected components of &lt;script type=&quot;math/tex&quot;&gt;\mathsf{G}&lt;/script&gt;, then &lt;script type=&quot;math/tex&quot;&gt;\mathsf{G}&lt;/script&gt; is equivalent to the disjoint union of groups &lt;script type=&quot;math/tex&quot;&gt;\bigsqcup_{i \in I} G_i&lt;/script&gt;, where &lt;script type=&quot;math/tex&quot;&gt;G_i = \mathsf{G}(v_i,v_i)&lt;/script&gt;.&lt;/p&gt;&lt;h2&gt;Subgroupoids of Groups&lt;/h2&gt;&lt;p&gt;A &lt;em&gt;subgroupoid&lt;/em&gt; &lt;script type=&quot;math/tex&quot;&gt;\mathsf{H}&lt;/script&gt; of a group &lt;script type=&quot;math/tex&quot;&gt;G&lt;/script&gt; is a groupoid &lt;script type=&quot;math/tex&quot;&gt;\mathsf{H}&lt;/script&gt; together with a functor &lt;script type=&quot;math/tex&quot;&gt;F \colon \mathsf{H} \to G&lt;/script&gt; with &lt;em&gt;trivial kernel,&lt;/em&gt; meaning that if &lt;script type=&quot;math/tex&quot;&gt;F f = 1_G&lt;/script&gt;, then &lt;script type=&quot;math/tex&quot;&gt;f&lt;/script&gt; is an identity arrow.&lt;/p&gt;&lt;p&gt;Let’s analyze what this means. By our discussion in the previous section, we should consider the groups &lt;script type=&quot;math/tex&quot;&gt;H_i = \mathsf{H}(v_i,v_i)&lt;/script&gt; where &lt;script type=&quot;math/tex&quot;&gt;\{ [v_i] : i \in I \}&lt;/script&gt; is the set of connected components of &lt;script type=&quot;math/tex&quot;&gt;\mathsf{H}&lt;/script&gt;. On each such group &lt;script type=&quot;math/tex&quot;&gt;F&lt;/script&gt; restricts to an &lt;em&gt;injective homomorphism,&lt;/em&gt; so each group &lt;script type=&quot;math/tex&quot;&gt;H_i&lt;/script&gt; &lt;em&gt;is a subgroup&lt;/em&gt; of &lt;script type=&quot;math/tex&quot;&gt;G&lt;/script&gt;. Each arrow &lt;script type=&quot;math/tex&quot;&gt;s_v \colon v_i \to v&lt;/script&gt; maps to an &lt;em&gt;element&lt;/em&gt; &lt;script type=&quot;math/tex&quot;&gt;g_v \in G&lt;/script&gt; and the stipulation that no arrow (necessarily) of the form &lt;script type=&quot;math/tex&quot;&gt;s_w h_i s_v^{-1}&lt;/script&gt; maps to the identity says that if &lt;script type=&quot;math/tex&quot;&gt;v&lt;/script&gt; and &lt;script type=&quot;math/tex&quot;&gt;w&lt;/script&gt; are distinct elements of &lt;script type=&quot;math/tex&quot;&gt;[v_i]&lt;/script&gt;, the &lt;em&gt;cosets&lt;/em&gt; &lt;script type=&quot;math/tex&quot;&gt;g_v H_i&lt;/script&gt; are distinct in &lt;script type=&quot;math/tex&quot;&gt;G&lt;/script&gt;.&lt;/p&gt;&lt;p&gt;A &lt;em&gt;connected&lt;/em&gt; subgroupoid &lt;script type=&quot;math/tex&quot;&gt;\mathsf{H}&lt;/script&gt; of a group &lt;script type=&quot;math/tex&quot;&gt;G&lt;/script&gt; therefore corresponds to a set of cosets of a given subgroup &lt;script type=&quot;math/tex&quot;&gt;H \le G&lt;/script&gt;. The groupoid &lt;script type=&quot;math/tex&quot;&gt;\mathsf{H}&lt;/script&gt; therefore has at most &lt;script type=&quot;math/tex&quot;&gt;G / H&lt;/script&gt; many objects I’ll say that a component &lt;script type=&quot;math/tex&quot;&gt;\mathsf{H}_i&lt;/script&gt; of a subgroupoid &lt;script type=&quot;math/tex&quot;&gt;\mathsf{H}&lt;/script&gt; is &lt;em&gt;total&lt;/em&gt; if it has &lt;script type=&quot;math/tex&quot;&gt;G / H_i&lt;/script&gt; for its set of objects, and that &lt;script type=&quot;math/tex&quot;&gt;\mathsf{H}&lt;/script&gt; is &lt;em&gt;total&lt;/em&gt; if each component is. (I don’t love “total”. Maybe another name could be &lt;a href=&quot;https://ncatlab.org/nlab/show/wide+subcategory&quot;&gt;“wide”&lt;/a&gt;, which generally has a slightly different meaning; if you have a better name, please let me know.)&lt;/p&gt;&lt;h2&gt;Height and Width&lt;/h2&gt;&lt;p&gt;Suppose &lt;script type=&quot;math/tex&quot;&gt;G&lt;/script&gt; is a group. Typically &lt;script type=&quot;math/tex&quot;&gt;G&lt;/script&gt; should be finitely generated, perhaps even finitely presented, but the following definition makes some amount of sense for a group &lt;script type=&quot;math/tex&quot;&gt;G&lt;/script&gt;.&lt;/p&gt;&lt;p&gt;First, we say the &lt;em&gt;height&lt;/em&gt; of an infinite subgroup &lt;script type=&quot;math/tex&quot;&gt;H \le G&lt;/script&gt; is &lt;script type=&quot;math/tex&quot;&gt;n&lt;/script&gt; if there exist distinct cosets &lt;script type=&quot;math/tex&quot;&gt;\{ g_1H, \ldots, g_nH \}&lt;/script&gt; such that the intersection &lt;script type=&quot;math/tex&quot;&gt;\bigcap_{i=1}^n g_iHg_i^{-1}&lt;/script&gt; is infinite and &lt;script type=&quot;math/tex&quot;&gt;n&lt;/script&gt; is maximum possible.&lt;/p&gt;&lt;p&gt;Next, we say that the &lt;em&gt;width&lt;/em&gt; of an infinite subgroup &lt;script type=&quot;math/tex&quot;&gt;H \le G&lt;/script&gt; is &lt;script type=&quot;math/tex&quot;&gt;n&lt;/script&gt; if there are distinct cosets as above so that &lt;em&gt;pairwise&lt;/em&gt; we have that &lt;script type=&quot;math/tex&quot;&gt;g_iHg_i^{-1} \cap g_jHg_j^{-1}&lt;/script&gt; and again &lt;script type=&quot;math/tex&quot;&gt;n&lt;/script&gt; is maximum possible.&lt;/p&gt;&lt;p&gt;Finite width implies finite height.&lt;/p&gt;&lt;p&gt;This is phrased both simply and cleanly in the language of subgroupoids: If &lt;script type=&quot;math/tex&quot;&gt;\mathsf{H}&lt;/script&gt; is a total subgroupoid of &lt;script type=&quot;math/tex&quot;&gt;G&lt;/script&gt;, the inclusion witnesses “vertex” or “isotropy” groups &lt;script type=&quot;math/tex&quot;&gt;\mathsf{H}(v,v)&lt;/script&gt; as subgroups of &lt;script type=&quot;math/tex&quot;&gt;G&lt;/script&gt;. A component &lt;script type=&quot;math/tex&quot;&gt;\mathsf{H}_i&lt;/script&gt; of &lt;script type=&quot;math/tex&quot;&gt;\mathsf{H}&lt;/script&gt; has &lt;em&gt;width&lt;/em&gt; (or respectively &lt;em&gt;height&lt;/em&gt;) &lt;script type=&quot;math/tex&quot;&gt;n&lt;/script&gt; if &lt;script type=&quot;math/tex&quot;&gt;H_i = \mathsf{H}(v_i,v_i)&lt;/script&gt; is infinite and there is a collection of &lt;script type=&quot;math/tex&quot;&gt;n&lt;/script&gt; objects in &lt;script type=&quot;math/tex&quot;&gt;\mathsf{H}_i&lt;/script&gt; (which are, remember, subgroups of &lt;script type=&quot;math/tex&quot;&gt;G&lt;/script&gt; conjugate to &lt;script type=&quot;math/tex&quot;&gt;H_i&lt;/script&gt; by conjugators from distinct cosets) with pairwise (or respectively total) infinite intersection and &lt;script type=&quot;math/tex&quot;&gt;n&lt;/script&gt; is chosen maximum possible. A subgroupoid &lt;script type=&quot;math/tex&quot;&gt;\mathsf{H}&lt;/script&gt; therefore has width (or height) &lt;script type=&quot;math/tex&quot;&gt;n&lt;/script&gt; if &lt;script type=&quot;math/tex&quot;&gt;n&lt;/script&gt; is the maximum width (or height) among its components.&lt;/p&gt;</description>
        <link>https://www.robbielyman.com/blog/subgroupoids/</link>
        <pubDate>Wed, 25 Feb 2026 17:00:00 +0000</pubDate>
        <guid>https://www.robbielyman.com/blog/subgroupoids/</guid>
      </item>
    
      <item>
        <title>So, is coding dead yet or what? My students want to know</title>
        <description>&lt;p&gt;CEOs of AI startups have been claiming that software engineering is about 6 months away from total obsolescence more or less continuously since maybe 2023, with &lt;a href=&quot;https://www.entrepreneur.com/business-news/ai-ceo-says-software-engineers-could-be-replaced-in-months/502087&quot;&gt;Anthropic’s CEO the most recent to say so about three weeks ago&lt;/a&gt;. As in &lt;a href=&quot;https://en.wikipedia.org/wiki/The_Boy_Who_Cried_Wolf&quot;&gt;Aesop’s fable of the boy who cried wolf&lt;/a&gt;, I think there are diminishing returns to making these claims again and again. Even if or as LLM capabilities improve and the job of software engineering changes, the doomsday speak is tiresome.&lt;/p&gt;&lt;p&gt;To be sure, LLM models have increased dramatically in their ability to code, from laughably unable to do anything sensible in the pre-ChatGPT era to new “agentic” workflows starting to see widespread adoption. If you pattern-match, some of the stuff currently squarely in the “laughably unable to do anything sensible” camp, like &lt;a href=&quot;https://steve-yegge.medium.com/welcome-to-gas-town-4f25ee16dd04&quot;&gt;Gas Town&lt;/a&gt;, &lt;em&gt;may&lt;/em&gt; stand to see significant improvement over a timeline best measured in years, not months.&lt;/p&gt;&lt;p&gt;But: let’s cut the crying wolf routine. I don’t want to read any more blog posts about how coding is dead.&lt;/p&gt;&lt;p&gt;I would &lt;em&gt;love&lt;/em&gt; to read posts about how to focus on product engineering if the writing code step can be either mostly or completely outsourced to LLM agents. What have you learned about what makes that work successful or difficult? Are those skills complementary to being able to reason about code or orthogonal to it? Unfortunately, every post I read is either predicting the end of the world—at least, jobs-wise—suffers from a worrying lack of a grip on reality, or is obviously just trying to sell me something.&lt;/p&gt;&lt;p&gt;Here’s why it matters to me: I’m a relative outsider—my employment work is at a university, not a tech company. Most of my coding work goes into maintaining and building open source projects in Zig. Since I’m interested as much in building my own knowledge as I am about the quality of the code I produce, I’m more likely to implement a classical algorithm, (for example constructing a Delaunay triangulation of a point cloud) than to build a CRUD app with or without AI assistance.&lt;/p&gt;&lt;p&gt;However, as a teacher in a department of math and computer science, I know that my students are entering a very different technical landscape than I did graduating college. I’m sure that they need engineering skills that look a little different than being able to write depth-first search correctly, and I would love to help convey those skills to them so they can succeed.&lt;/p&gt;&lt;p&gt;None of the three kinds of LLM booster writing I diagnose above is helpful to me in that goal. In fact, little of it is good writing.&lt;/p&gt;&lt;p&gt;Folks in the first camp, appear to want to step to, e.g., &lt;a href=&quot;https://www.theguardian.com/us-news/ng-interactive/2026/jan/18/tech-ai-bubble-burst-reverse-centaur&quot;&gt;Cory Doctorow&lt;/a&gt;. The point of these posts is to be right about the future. That’s certainly interesting, but parrotting the kind of hype performances that AI CEOs put on for the benefit of their shareholders is not &lt;em&gt;particularly&lt;/em&gt; incisive insight, if I may be so bold.&lt;/p&gt;&lt;p&gt;Folks in the Steve Yegge camp, whether they’re right or not, are basically impossible to learn from. Steve’s article is compelling the way a train wreck is. Imagine reading programming classics like &lt;a href=&quot;https://www.craftinginterpreters.com/&quot;&gt;Crafting Interpreters&lt;/a&gt; or &lt;a href=&quot;https://pragprog.com/titles/btlang/seven-languages-in-seven-weeks/&quot;&gt;Seven Languages in Seven Weeks&lt;/a&gt; but having to worry at the same time about the wellness of the author. It’s hard to build credibility if you type like you’re halfway through a crazed 48-hour coding bender.&lt;/p&gt;&lt;p&gt;Then there’s the selling. Content works great as advertising! I’ve been on Instagram, I know how it is. That’s not to say that it can’t be educationally valuable at the same time, but this kind of stuff is ultimately aimed to entertain, rather than to teach. This kind of writing is all over the internet, of course, too, so it’s well-within ChatGPT’s training data to generate more.&lt;/p&gt;&lt;p&gt;Now, I’m not saying you have to write a book—although please don’t let me stop you! But, if you’re learning a lot using AI and are interested to be part of the public conversation as it shapes the future of coding, here’s my suggestion to you:&lt;/p&gt;&lt;p&gt;Write what you’ve learned about your work, now that you’re not nose-to-the-terminal in code all the time. As you do so, write in the kind of measured, informative tone of voice you remember from writing that has inspired you. You don’t need to sound like a textbook, but you do need to build trust, not provoke a reaction. Above all, do not cry wolf. Do not pass Go, do not collect $200.&lt;/p&gt;</description>
        <link>https://www.robbielyman.com/blog/crying-wolf/</link>
        <pubDate>Fri, 13 Feb 2026 19:30:00 +0000</pubDate>
        <guid>https://www.robbielyman.com/blog/crying-wolf/</guid>
      </item>
    
      <item>
        <title>Where to Put my Little Yops?</title>
        <description>&lt;h2&gt;Caring by Way of Tying Your Hands&lt;/h2&gt;&lt;p&gt;I got in on Twitter not quite on the ground floor, but pretty close. (It’s kind of fun being in your 30s, because you can almost truly say “back in the day” unironically, but the luster of that ability hasn’t gone away.) This was back in the day, like 2009. You could text 40404 or whatever it was and send and receive tweets. In fact, in those days, I think the 140 character limit was designed so that the rest of the message’s information (its “header”, if you will) could fit in the remaining 20 characters an SMS message gave you.&lt;/p&gt;&lt;p&gt;I don’t think I had anything truly interesting to say, nor, really, did anybody I followed. There was a woman I knew tangentially through some long-defunct website; I think at the time she must have been in her 20s or 30s, living in England, possibly a PhD student, and a self-published author of fantasy stories that I couldn’t tell you a thing about now (except that “Icahn” was a proper name in her world; when I see the signs for Icahn Stadium out the window of an airplane near LaGuardia, I think about her). A couple years later, early in college, when I tweeted sheepishly that my strategy of “stay up much too late, work very last-minute” appeared to have gone off without too much of a hitch, as far as my finals grades were concerned, I remember her saying words to the effect of “hey, maybe that’s what works for you”.&lt;/p&gt;&lt;p&gt;Anyway, by the end of college, I had a sneaking little worry that I was really thinking mostly in tweets. Like, developing a take that wouldn’t fit in 140 characters sometimes felt difficult. In grad school in 2017, reflecting that looking at Twitter really was not helping me feel any better about anything going on in the world, I deleted my account. I’m not sure that I ever actually really needed to worry about the way it was shaping my thinking, but I think it’s fair to say I can think &lt;a href=&quot;https://arxiv.org/abs/2203.08868&quot;&gt;at length&lt;/a&gt; now.&lt;/p&gt;&lt;h2&gt;Where do you Put your little Yops?&lt;/h2&gt;&lt;p&gt;Similar stories happened with other forms of (essentially) blogging, like Tumblr and previous iterations of this blog. I hopped back onto Twitter during the height of the pandemic, and then left quietly in 2022 as I started to feel like I was seeing a bit too much of the uglier sides of the communinity I ran with. I’m sure many people are &lt;em&gt;huge&lt;/em&gt; fans of X and Instagram lately, right?&lt;/p&gt;&lt;p&gt;There are lots of ways to choose your own social media adventure. I think lately the things I’m interested in are surprisingly “mailing list”-shaped. Unlike a blog, you can just reply to an email. Unlike a blog, the contents of an email are semi-impermanent by default. Unlike a blog (the &lt;a href=&quot;https://recurse.com&quot;&gt;Recurse Center&lt;/a&gt; community’s excellent “Blaggregator” project notwithstanding), newsletters arrive surrounded by their friends: other emails. A mailing list also allows for a little more community creation, although less so than something like a Discord server.&lt;/p&gt;&lt;p&gt;I want to share my little yops. Apparently it matters to me at least a little the company that the yops keep, and I want a certain amount of ownership over the yops.&lt;/p&gt;&lt;p&gt;Anyway so apparently &lt;a href=&quot;https://read.alonzo.zip&quot;&gt;I have a home for yops now&lt;/a&gt;.&lt;/p&gt;&lt;p&gt;Think of it like a trade offer: you give me one (1) email address, and I return to you many (eventually) fun (hopefully) things to read in your inbox.&lt;/p&gt;&lt;h2&gt;What are your Yops like?&lt;/h2&gt;&lt;p&gt;Some of them, surely a bit like this: a post that winds up telling me what it is by the writing of it. I like having these sorts of posts about culture and cultural artifacts (uhh, art pieces of varying kinds), about writing itself—I’m sure you’ll get the spirit quick. Another vibe I like is “the checkin”. A third, in a similar vein, is an idea I read on the &lt;a href=&quot;https://wanikani.com&quot;&gt;WaniKani&lt;/a&gt; forums: you &lt;em&gt;need&lt;/em&gt; to have adventures every day. I’m sure I don’t need to have a full little essay every day, but more frequently would be very welcome.&lt;/p&gt;&lt;p&gt;So, the first one is this post, essentially. A bit more and a bit less.&lt;/p&gt;</description>
        <link>https://www.robbielyman.com/blog/little-yops/</link>
        <pubDate>Sat, 13 Dec 2025 23:00:00 +0000</pubDate>
        <guid>https://www.robbielyman.com/blog/little-yops/</guid>
      </item>
    
      <item>
        <title>Reinit / How to Draw a Triangle in Three Years</title>
        <description>&lt;h2&gt;Reinit&lt;/h2&gt;&lt;p&gt;Hi again. This is Robbie. For most of a decade, I used to go by Rylee. I do math, I make music, I write code, I’m learning Japanese. I like graphic design, writing, cooking, some other stuff too. Lately I’ve been discovering that running and the gym are actually fun and good things, which would have blown my sixteen-year-old self’s mind.&lt;/p&gt;&lt;p&gt;This is a blog. Let’s go.&lt;/p&gt;&lt;h2&gt;How to Draw a Triangle in Three Years&lt;/h2&gt;&lt;p&gt;I am finally owning up to thinking that it would be fun to make a game. So I’m working on that, instead of, like, making a Lua environment ostensibly for music or wrapping Cocoa for easy access from Zig or any number of ways one could aim at making a game and miss perhaps deliberately.&lt;/p&gt;&lt;p&gt;Part of the discomfort that might cause one to miss, I think, is that making a game relies pretty fundamentally on other people’s code. Paraphrasing Carl Sagan, if you want to make a DAW from scratch, you must first invent the Zig programming language. Which is to say, software has the same problem as mathematics, and alas it is taking me about as long to recognize and resolve that problem.&lt;/p&gt;&lt;p&gt;Like in mathematics, in programming you can go all the way to the big bang if you’d like. You could write assembly. Or an assembler. Or an operating system. Or a C compiler. Or your own programming language. You could even write your own instruction set. Peeking one layer deeper into the abstraction is always at least theoretically possible.&lt;/p&gt;&lt;p&gt;For me, this leads directly to not-invented-here syndrome. Do &lt;em&gt;not&lt;/em&gt; pass “go”, do &lt;em&gt;not&lt;/em&gt; collect 10,000 hours of making-things time. If I don’t know how it works, how can I use it?&lt;/p&gt;&lt;p&gt;Unfortunately, being not-Andrew Kelley, I fear that if I attempt the same sort of from-first-principles exploration, I won’t even have demos of a game to show for it. (In fact, you don’t see Andrew Kelley reinventing Linux, for example, so picking on him obliquely is obviously unfair.)&lt;/p&gt;&lt;p&gt;Part of resolving the problem for me with math was intensifying the need to actually &lt;em&gt;do&lt;/em&gt; something. I told my advisor I wanted to graduate in a year, and then did what I needed to do to do that: get out of my head and prove a theorem.&lt;/p&gt;&lt;p&gt;Another part of it, and this is sort of what I’m leaning on with programming, is the realization that “understanding,” here, is not an objective quantity that can be possessed seperate from experience using the thing. Putting the pieces together is an important part of graduating from armchair enthusiast to expert.&lt;/p&gt;&lt;p&gt;So, here is how to draw a triangle.&lt;/p&gt;&lt;h3&gt;The First Year&lt;/h3&gt;&lt;p&gt;In the first year or so, you should not know that you want to draw a triangle. You should be interested primarily in learning a programming language sufficiently powerful to let you shoot yourself in the foot (that is to say, link against C). I’m resisting giving Rust my customary noogie here.&lt;/p&gt;&lt;p&gt;As a result of your programming efforts, maybe you’ve discovered the edges of an ability to draw pixels to the user’s screen.&lt;/p&gt;&lt;p&gt;By the way, you should be running on macOS. After all, we’re using Vulkan, so anything else would be easy mode.&lt;/p&gt;&lt;h3&gt;The Second Year&lt;/h3&gt;&lt;p&gt;In the second year, you should learn about graphics pipelines. Enough to follow the Vulkan tutorial, but not enough to, like, read their “Getting Started” documentation. Since you’re coding along, you should be able to verify that your program type-checks but then doesn’t work at all. Ideally it stalls out at the “have GLFW load Vulkan” step, so that you can believe that your code works, but that something is just broken about GLFW or Vulkan on macOS, but not really solve it.&lt;/p&gt;&lt;p&gt;Then you should learn about Metal. It’s actually pretty helpful to do, since Metal and Vulkan agree to an embarrassing (for Apple? for not cooperating? for Khronos? for not working harder to get them onboard? answering these questions is above your pay grade) degree about what a graphics card does and how to talk to it. Maybe you can draw a triangle with Metal!&lt;/p&gt;&lt;h3&gt;The Third Year&lt;/h3&gt;&lt;p&gt;In the third year, you should ideally burn out for most of it. Give everything a break and reconnect with what’s actually interesting to you and what you are doing in order to please other people.&lt;/p&gt;&lt;p&gt;Really find yourself, tho. Like, learn &lt;code&gt;jj&lt;/code&gt;. Delete and remake your website. Switch to &lt;code&gt;fish&lt;/code&gt;. Lose track of the little notes apps and things that you used to keep yourself on track and then find them months later as a sad Tigger, a sorry Tigger, an “Oh Rabbit, am I glad to see you,” Tigger.&lt;/p&gt;&lt;p&gt;Then, clear-eyed and rarin to go, here are the steps.&lt;/p&gt;&lt;h4&gt;Download Zig master&lt;/h4&gt;&lt;p&gt;This can be done by clicking, or by being a script kiddie. In the interests of embarrassing myself, here’s a script-kiddie approach.&lt;/p&gt;&lt;pre&gt;&lt;code class=&quot;sh&quot;&gt;&lt;span class=&quot;constant function&quot;&gt;mkdir&lt;/span&gt; &lt;span class=&quot;constant&quot;&gt;dwnld&lt;/span&gt; &lt;span class=&quot;operator&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&quot;constant function&quot;&gt;cd&lt;/span&gt; &lt;span class=&quot;constant&quot;&gt;dwnld&lt;/span&gt;
&lt;span class=&quot;constant function&quot;&gt;curl&lt;/span&gt; &lt;span class=&quot;constant&quot;&gt;https://ziglang.org/download/index.json&lt;/span&gt; &lt;span class=&quot;constant&quot;&gt;-o&lt;/span&gt; &lt;span class=&quot;constant&quot;&gt;zig_idx.json&lt;/span&gt;
&lt;span class=&quot;constant function&quot;&gt;cat&lt;/span&gt; &lt;span class=&quot;constant&quot;&gt;zig_idx.json&lt;/span&gt; &lt;span class=&quot;operator&quot;&gt;|&lt;/span&gt; \
    &lt;span class=&quot;constant function&quot;&gt;jq&lt;/span&gt; &lt;span class=&quot;string constant&quot;&gt;&amp;apos;&amp;quot;url = \(.master.[&amp;quot;aarch64-macos&amp;quot;].tarball)&amp;quot;&amp;apos;&lt;/span&gt; &lt;span class=&quot;constant&quot;&gt;-r&lt;/span&gt; &lt;span class=&quot;operator&quot;&gt;|&lt;/span&gt; \
    &lt;span class=&quot;constant function&quot;&gt;curl&lt;/span&gt; &lt;span class=&quot;constant&quot;&gt;-K-&lt;/span&gt; &lt;span class=&quot;constant&quot;&gt;-o&lt;/span&gt; &lt;span class=&quot;constant&quot;&gt;zig.tar.xz&lt;/span&gt;
&lt;span class=&quot;constant function&quot;&gt;cat&lt;/span&gt; &lt;span class=&quot;constant&quot;&gt;zig_idx.json&lt;/span&gt; &lt;span class=&quot;operator&quot;&gt;|&lt;/span&gt; \
    &lt;span class=&quot;constant function&quot;&gt;jq&lt;/span&gt; &lt;span class=&quot;string constant&quot;&gt;&amp;apos;&amp;quot;\(.master.[&amp;quot;aarch64-macos&amp;quot;].shasum)  zig.tar.xz&amp;quot;&amp;apos;&lt;/span&gt; &lt;span class=&quot;constant&quot;&gt;-r&lt;/span&gt; &lt;span class=&quot;operator&quot;&gt;|&lt;/span&gt; \
    &lt;span class=&quot;constant function&quot;&gt;shasum&lt;/span&gt; &lt;span class=&quot;constant&quot;&gt;-a&lt;/span&gt; &lt;span class=&quot;constant&quot;&gt;256&lt;/span&gt; &lt;span class=&quot;constant&quot;&gt;-c&lt;/span&gt; &lt;span class=&quot;constant&quot;&gt;-&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;These commands download the JSON blob from the zig website into a new directory named &lt;code&gt;dwnld&lt;/code&gt;, then grab and download the master tarball for aarch64-macos and check its sha256 checksum by using &lt;code&gt;jq&lt;/code&gt; to parse the JSON. You should probably not continue if the final command above doesn’t tell you that the sum was OK, but probably you shouldn’t even use this approach in the first place.&lt;/p&gt;&lt;pre&gt;&lt;code class=&quot;sh&quot;&gt;&lt;span class=&quot;constant function&quot;&gt;mkdir&lt;/span&gt; &lt;span class=&quot;constant&quot;&gt;zig&lt;/span&gt; &lt;span class=&quot;operator&quot;&gt;&amp;amp;&amp;amp;&lt;/span&gt; &lt;span class=&quot;constant function&quot;&gt;cd&lt;/span&gt; &lt;span class=&quot;constant&quot;&gt;zig&lt;/span&gt;
&lt;span class=&quot;constant function&quot;&gt;tar&lt;/span&gt; &lt;span class=&quot;constant&quot;&gt;-xf&lt;/span&gt; &lt;span class=&quot;constant&quot;&gt;../zig.tar.xz&lt;/span&gt; &lt;span class=&quot;constant&quot;&gt;--strip-components=1&lt;/span&gt;
&lt;span class=&quot;constant function&quot;&gt;cd&lt;/span&gt; &lt;span class=&quot;constant&quot;&gt;..&lt;/span&gt;
&lt;span class=&quot;constant function&quot;&gt;rm&lt;/span&gt; &lt;span class=&quot;constant&quot;&gt;-rf&lt;/span&gt; &lt;span class=&quot;constant&quot;&gt;~/bin/doc&lt;/span&gt; &lt;span class=&quot;constant&quot;&gt;~/bin/lib&lt;/span&gt;
&lt;span class=&quot;constant function&quot;&gt;mv&lt;/span&gt; &lt;span class=&quot;constant&quot;&gt;zig/*&lt;/span&gt; &lt;span class=&quot;constant&quot;&gt;~/bin&lt;/span&gt;
&lt;span class=&quot;constant function&quot;&gt;xattr&lt;/span&gt; &lt;span class=&quot;constant&quot;&gt;-d&lt;/span&gt; &lt;span class=&quot;constant&quot;&gt;com.apple.quarantine&lt;/span&gt; &lt;span class=&quot;constant&quot;&gt;~/bin/zig&lt;/span&gt;
&lt;span class=&quot;constant function&quot;&gt;cd&lt;/span&gt; &lt;span class=&quot;constant&quot;&gt;..&lt;/span&gt;
&lt;span class=&quot;constant function&quot;&gt;rm&lt;/span&gt; &lt;span class=&quot;constant&quot;&gt;-rf&lt;/span&gt; &lt;span class=&quot;constant&quot;&gt;dwnld&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The first pair of commands extracts the tarball into a new directory named &lt;code&gt;zig&lt;/code&gt;. Status quo is that the tarball packages everything under a folder named something like &lt;code&gt;zig-macos-aarch64-[VERSION-NAME-CRUFT]&lt;/code&gt;, which is fine as far as it goes, but not very conducive to script kiddie powers, hence the &lt;code&gt;--strip-components=1&lt;/code&gt; flag on the &lt;code&gt;tar&lt;/code&gt; command. As you can see, I put the zig compiler in &lt;code&gt;~/bin&lt;/code&gt;, which I had to add to my &lt;code&gt;PATH&lt;/code&gt;. The &lt;code&gt;xattr&lt;/code&gt; line avoids the “macOS won’t let you run this program bc you downloaded it” dance.&lt;/p&gt;&lt;h4&gt;Install GLFW and Vulkan&lt;/h4&gt;&lt;p&gt;For GLFW, you can just do&lt;/p&gt;&lt;pre&gt;&lt;code class=&quot;sh&quot;&gt;&lt;span class=&quot;constant function&quot;&gt;brew&lt;/span&gt; &lt;span class=&quot;constant&quot;&gt;install&lt;/span&gt; &lt;span class=&quot;constant&quot;&gt;glfw&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Probably a similar invocation could work for Vulkan, but you might as well &lt;a href=&quot;https://vulkan.lunarg.com/&quot;&gt;go to their website&lt;/a&gt; and download and install the SDK.&lt;/p&gt;&lt;h4&gt;Get started with Vulkan-Zig&lt;/h4&gt;&lt;p&gt;Go ahead and grab the repo&lt;/p&gt;&lt;pre&gt;&lt;code class=&quot;sh&quot;&gt;&lt;span class=&quot;constant function&quot;&gt;jj&lt;/span&gt; &lt;span class=&quot;constant&quot;&gt;git&lt;/span&gt; &lt;span class=&quot;constant&quot;&gt;clone&lt;/span&gt; &lt;span class=&quot;constant&quot;&gt;git@github.com:Snektron/vulkan-zig&lt;/span&gt;
&lt;span class=&quot;constant function&quot;&gt;cd&lt;/span&gt; &lt;span class=&quot;constant&quot;&gt;vulkan-zig&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;The repo &lt;em&gt;should&lt;/em&gt; build fine with&lt;/p&gt;&lt;pre&gt;&lt;code class=&quot;sh&quot;&gt;&lt;span class=&quot;constant function&quot;&gt;zig&lt;/span&gt; &lt;span class=&quot;constant&quot;&gt;build&lt;/span&gt; &lt;span class=&quot;constant&quot;&gt;--build-file&lt;/span&gt; &lt;span class=&quot;constant&quot;&gt;examples/build.zig&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;but probably it does not, complaining that GLFW cannot be found. The fix is pretty easy:&lt;/p&gt;&lt;pre&gt;&lt;code class=&quot;diff&quot;&gt;&lt;span class=&quot;punctuation_special diff_minus&quot;&gt;---&lt;/span&gt;&lt;span class=&quot;diff_minus&quot;&gt; &lt;/span&gt;&lt;span class=&quot;diff_minus string_special_path&quot;&gt;a/examples/build.zig&lt;/span&gt;
&lt;span class=&quot;punctuation_special diff_plus&quot;&gt;+++&lt;/span&gt;&lt;span class=&quot;diff_plus&quot;&gt; &lt;/span&gt;&lt;span class=&quot;string_special_path diff_plus&quot;&gt;b/examples/build.zig&lt;/span&gt;
&lt;span class=&quot;attribute&quot;&gt;@@ -22,7 +22,7 @@&lt;/span&gt;
         .use_llvm = true,
     });
     b.installArtifact(triangle_exe);
&lt;span class=&quot;punctuation_special diff_minus&quot;&gt;-&lt;/span&gt;&lt;span class=&quot;diff_minus&quot;&gt;    triangle_exe.linkSystemLibrary(&amp;quot;glfw&amp;quot;);&lt;/span&gt;
&lt;span class=&quot;punctuation_special diff_plus&quot;&gt;+&lt;/span&gt;&lt;span class=&quot;diff_plus&quot;&gt;    triangle_exe.linkSystemLibrary(&amp;quot;glfw3&amp;quot;);&lt;/span&gt;

     const registry_path: std.Build.LazyPath = 
        if (maybe_override_registry) |override_registry|
         .{ .cwd_relative = override_registry }
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;After this, the repo should build, but it should fail when you try to run it, complaining that Vulkan cannot be found. To fix this, you need to make it so that &lt;code&gt;dlopen&lt;/code&gt; can find Vulkan. This is much less scary than it sounds: for a development build it suffices to add a path to your &lt;code&gt;DYLD_LIBRARY_PATH&lt;/code&gt; variable. For me, since &lt;code&gt;DYLD_LIBRARY_PATH&lt;/code&gt; is empty, that looks like this:&lt;/p&gt;&lt;pre&gt;&lt;code class=&quot;fish&quot;&gt;&lt;span class=&quot;punctuation_bracket function&quot;&gt;set&lt;/span&gt; &lt;span class=&quot;operator&quot;&gt;-gx&lt;/span&gt; &lt;span class=&quot;operator&quot;&gt;DYLD_LIBRARY_PATH&lt;/span&gt; &lt;span class=&quot;string&quot;&gt;&amp;quot;/Users/robbie/VulkanSDK/1.4.328.1/macOS/lib&amp;quot;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;
&lt;p&gt;Then you can run the program and see a beautiful Vulkan triangle! It only took you three years! Maybe the rest will be much quicker ;)&lt;/p&gt;</description>
        <link>https://www.robbielyman.com/blog/reinit/</link>
        <pubDate>Wed, 12 Nov 2025 00:00:00 +0000</pubDate>
        <guid>https://www.robbielyman.com/blog/reinit/</guid>
      </item>
    
  </channel>
</rss>
