[HN Gopher] Category Theory Illustrated - Orders
___________________________________________________________________
Category Theory Illustrated - Orders
Author : boris_m
Score : 219 points
Date : 2026-04-18 06:40 UTC (16 hours ago)
(HTM) web link (abuseofnotation.github.io)
(TXT) w3m dump (abuseofnotation.github.io)
| arketyp wrote:
| There is a way to frame category theory such that _it 's all just
| arrows_ -- by associating the identity arrow (which all objects
| have by definition) with the object itself. In a sense, the
| object is syntactic sugar.
| nineteen999 wrote:
| This is obvious within about 3 seconds of opening the article,
| noticing it's filled with coloured M&M's, and closing it again.
| dgan wrote:
| I think it is pretty obvious that at the challenge with all
| abstract mathematics in general and the category theory in
| particular isnt the fact that people dont understand what a
| "linear order" is, but the fact it is so distant from daily
| routine that it seems completely pointless. It's like pouring
| water over pefectly smooth glass
| raincole wrote:
| Is there a "mind-blowing fact" about category theory? Like the
| first time I've heard that one can prove there is no analytical
| solution for a polynomial equation with a degree > 5 with
| _group theory_ , it was mind-blowing. What's the counterpart of
| category theory?
| tux3 wrote:
| Sure, category theory can't prove the unsolvability of the
| quintic. But did you know that a monad is really just a
| monoid object in the monoidal category of endofunctors on the
| category of types of your favorite language?
| auggierose wrote:
| Phil?
| SkiFire13 wrote:
| Isn't that just the definition?
| wholinator2 wrote:
| I think they're making a joke
| U4E4 wrote:
| A thing is its relationships. (Yoneda lemma.) Keep track of
| how an object connects to everything else, and you've
| recovered the object itself, up to isomorphism. It's why
| mathematicians study things by probing them: a group by its
| actions, a space by the maps into it, a scheme in algebraic
| geometry defined as the rule for what maps into it look like.
| (You do need the full pattern of connections, not just a list
| -- two different rings can have the same modules, for
| instance.) [0]
|
| Writing a program and proving a theorem are the same act.
| (Curry-Howard-Lambek.) For well-behaved programs, every
| program is a proof of something and every proof is a program.
| The match is exact for simple typed languages and leaks a bit
| once you add general recursion (an infinite loop "proves"
| anything in Haskell), but the underlying identity is real.
| Lambek added the third leg: these are also morphisms in a
| category. [1]
|
| Algebra and geometry are one thing wearing different
| costumes. (Stone duality and cousins.) A system of equations
| and the shape it cuts out aren't related, they're the same
| object seen from opposite sides. Grothendieck rebuilt
| algebraic geometry on this idea, with schemes (so you can do
| geometry on the integers themselves) and etale cohomology
| (topological invariants for shapes with no actual topology).
| His student Deligne used that machinery to settle the Weil
| conjectures in 1974. Wiles's Fermat proof lives in the same
| world, though it leans on much more than the categorical
| foundations. [2]
|
| [0] https://en.wikipedia.org/wiki/Yoneda_lemma
|
| [1] https://en.wikipedia.org/wiki/Curry%E2%80%93Howard_corres
| pon...
|
| [2] https://en.wikipedia.org/wiki/Stone_duality
| brador wrote:
| We should call it "relationship lemma". That way its
| function is contained within its name. And would not
| require the definition step every time.
|
| We should strive to name all things by their function not
| by their inventor or discoverer IMO. But people like their
| ribbons.
| wholinator2 wrote:
| In my study, it's basically never that the person names
| the thing after themselves. My theory goes: Often a
| discovery is presented in a paper by someone(s), who
| gives it a usually only barely passable name. For a time,
| only a handful of experts in the field know about it and
| none of them care to write general explainers for the
| layman. So they call it what's easy. "[Name] [concept]"
| because they're used to talking in names all the time.
| Academic experts have a large library of people's names
| tied to the concepts in their papers, i know my PI
| certainly did, every query was met with a name that had
| solved it to go look up.
|
| Anyways, the discussion begins with these people. Who all
| use the name to reference the paper which contains the
| result. As the discussion expand, it remains centered on
| this group and you have to talk _with_ them and not at
| them so you use the name they do. This usage slowly
| expands, until eventually it gets written in a textbook,
| taught to grad students, then to undergrads, and it
| becomes hopeless to change the name.
|
| I share the frustration with naming, we can come up with
| such better names for things now. But until we give
| stipend bonuses for good naming, the experts will never
| care to do so. But i wholeheartedly disagree that the
| problem as a whole can be reduced to "people like their
| ribbons". Naming something after yourself is so gauche
| and would not be tolerated in my field at least. The
| other professors would create a better name simply out of
| spite for your greed.
| throw567643u8 wrote:
| Just Yoneda Lemma. In fact it feels like the theory just
| restates Yoneda Lemma over and over in different ways.
| azan_ wrote:
| And the number of things you can prove using Yoneda lemma
| just proves how powerful category theory is.
| trenchgun wrote:
| How is this useful?
| IsTom wrote:
| I think that CT is more akin to just a different language for
| mathematics than a solid set of axioms from which you can
| prove things. The most fact-y proof I've personally seen was
| that you can't extend the usual definition of functions in
| set theory to work with parametric polymorphism (not that
| just some constructions won't work, but that there isn't one
| at all).
| renticulous wrote:
| https://en.wikipedia.org/wiki/Abstract_nonsense
|
| https://math.stackexchange.com/questions/823289/abstract-
| non...
|
| Sometimes the proof in category theory is trivial but we have
| no lower dimension or concrete intuition as to why that is
| true. This whole state of affairs is called abstract
| nonsense.
| Chinjut wrote:
| Well, group theory is a special case of category theory. A
| group is a one object category where all morphisms are
| invertible. You do group theory long enough and it leads you
| to start thinking about groupoids and monoids and categories
| more generally as well.
| pfortuny wrote:
| One of the most striking things is that cartesian products of
| objects do not correspond to set-cartesian products. This to
| me was mind-blowing when studying schemes.
| nagaiaida wrote:
| well, this is more applied and less straightforwardly
| categorical, but thinking along the lines of _solely_ looking
| at compositional structure rather than all the properties of
| functions we usually take as semantic bedrock in functional
| programming (namely referential transparency) is how you
| start doing neat arrowized tricks like tracking state in the
| middle of a big hitherto-functional pipeline (for instance
| automata, functions which return a new state /function
| alongside a value, can be neatly woven into pipelines
| composed via arrow composition in a way they can't be in a
| pipeline composed via function composition)
| gobdovan wrote:
| You're more right than you'd think. The whole point of
| mathematics is precise thinking, yet the article is very
| inaccurate.
|
| Nobody seems to care or notice. I'm watching in disbelief how
| nobody is pointing out the article is full of inaccuracies. See
| my sibling thread for a (very) incomplete list, which should
| disqualified this as a serious reading:
| https://news.ycombinator.com/item?id=47814213
|
| My conclusion cannot be other than this ought to be useless for
| the general practitioner, since even wrong mathematics is
| appreciated the same as correct mathematics.
| throw5 wrote:
| > Nobody seems to care or notice. I'm watching in disbelief
| how nobody is pointing out the article is full of
| inaccuracies.
|
| I don't know. I finished my graduate studies in math a few
| years ago, and pretty much every textbook by well-known
| mathematicians was packed with errors. I just stopped caring
| so much about inaccuracies. Every math book is going to have
| them. Human beings are imperfect, and great mathematicians
| are no exception. I'd just download the errata from the uni
| website and keep it open while reading.
| JPC21 wrote:
| You say pretty obvious, but it took me 2 years during my PhD to
| be consciously aware of this. And once I did, I immediately
| knew I wanted to leave my field as soon as I would finish.
| scotty79 wrote:
| I'm just curious. Do you play computer games?
| JPC21 wrote:
| I have played quite a lot of video games in the past yes.
| But not much anymore.
| goostavos wrote:
| >so distant from daily routine that it seems completely
| pointless
|
| imo, this is a problem with how it's taught! Order theory is
| super useful in programming. The main challenge, beyond
| breaking past that barrier of perceived "pointlessness," is
| getting away from the totally ordered / "Comparator" view of
| the world. Preorders are powerful.
|
| It gives us a different way to think about what correct means
| when we test. For example, state machine transitions can
| sometimes be viewed as a preorder. And if you can squeeze it
| into that shape, complicated tests can reduce down to asserting
| that <= holds. It usually takes a lot of thinking, because it
| IS far from the daily routine, but by the same rationale,
| forcing it into your daily routing makes it familiar. It let's
| you look at tests and go "oh, I bet that condition expression
| can be modeled as a preorder on [blah]"
| gobdovan wrote:
| Unless there's some idiosyncratic meaning for the `=>`, the
| Antisymmetry one basically says `Orange -> Yellow => Yellow -/>
| Orange`. The diagram is not acurate. The prose is very imprecise.
| "It also means that no ties are permitted - either I am better
| than my grandmother at soccer or she is better at it than me."
| NO. Antisymmetry doesn't exclude `x = y`. Ties are permitted in
| the equality case. Antisymmetry for a non-strict order says that
| if both directions hold, the two elements must in fact be the
| same element. The author is describing strict comparison or total
| comparability intuition, not antisymmetry.
| bubblyworld wrote:
| I don't think they are _completely_ wrong - "=>" is just
| implication. A hidden assumption in their diagrams is that
| circles of different colours are assumed to be different
| elements.
|
| A morphism from orange to yellow means "O <= Y". From this,
| antisymmetry (and the hidden assumption) implies that "Y not <=
| O".
|
| Totality is just the other way around (all two distinct
| elements are comparable in one direction).
| gobdovan wrote:
| If this is meant to be an explainer, that can't be simply
| implicit. The text actually seems full of imprecise claims,
| such as:
|
| "All diagrams that look something different than the said
| chain diagram represent partial orders"
|
| "The different linear orders that make up the partial order
| are called chains"
|
| The Birkhoff theorem statement, which is materially wrong. A
| finite distributive lattice is not isomorphic to "the
| inclusion order of its join-irreducible elements".
| mrkeen wrote:
| It really isn't a long enough section to get lost in.
|
| The 'not accurate' diagram says that orange-less-than-yellow
| implies yellow-not-less-than-orange. Hard to find fault with.
|
| > NO. Antisymmetry doesn't exclude `x = y`. Ties are permitted
| in the equality case. Antisymmetry for a non-strict order says
| that if both directions hold, the two elements must in fact be
| the same element. The author is describing strict comparison or
| total comparability intuition, not antisymmetry.
|
| I like the article's "imprecise prose" better:
| You have x <= y and y <= x only if x = y
| gobdovan wrote:
| My comment is not long enough either to get lost in.
|
| The prose "It also means that no ties are permitted - either
| I am better than my grandmother at soccer or she is better at
| it than me" is inaccurate for describing antisymmetry. In the
| same short section, you first state the correct condition:
|
| You have x <= y and y <= x only if x = y
|
| from which it doesn't follow that "It also means that no ties
| are permitted". The "no ties" idea belongs to a stronger
| notion such as a strict total order, not to antisymmetry.
| wasabi991011 wrote:
| The prose is correct.
|
| You (presumably) aren't your grandmother, so we have x=/=y.
| Therefore by the biimplication, (x <= y and y <= x) is
| false i.e. either x <= y (I am better than my grandmother)
| or y <= x (my grandmother is better than me). The "neither"
| case is excluded by the law of totality.
| gobdovan wrote:
| > The "neither" case is excluded by the law of totality.
|
| We literally said the same thing. It doesn't follow from
| antisymmetry.
|
| My point is precisely that:
|
| (x <= y /\ y <= x) -> x = y
|
| does not entail
|
| x <= y \/ y <= x
|
| The second statement is totality/comparability, not
| antisymmetry.
| somewhereoutth wrote:
| The first 90% of this is standard set theory.
|
| I'm unclear what the last 10% of 'category theory' gives us.
| gobdovan wrote:
| If someone does not want to check the mathematics line by line
| and prefers to give the article the benefit of the doubt, note
| that it also presents this JavaScript:
|
| [1, 3, 2].sort((a, b) => { if (a > b) { return true
| } else { return false }
|
| })
|
| This is not a valid comparator. It returns bools where the API
| expects a negative, zero or positive result, on my Chrome
| instance it returns `[1, 3, 2]`. That is roughly the level of
| correctness of the mathematics in the article as well, which I'm
| trying to present in sibling comment:
| https://news.ycombinator.com/item?id=47814213
| zaphar wrote:
| Why assume it is javascript? The article doesn't indicate the
| language anywhere that I can see.
| gobdovan wrote:
| Ok, let's say that it is not JS, but an untyped, closure-
| based programming language with a strikingly similar array
| and sort API to JS. Sadly, this comparator is still wrong for
| any sorting API that expects a general three-way comparison,
| because it does not handle equality as a separate case.
|
| And to tie it down to the mathematics: if a sorting algorithm
| asks for a full comparison between a and b, and your function
| returns only a bool, you are conflating the "no" (a is before
| b) with the "no" (a is the same as b). This fails to
| represent equality as a separate case, which is exactly the
| kind of imprecision the author should be trying to teach
| against.
| gopiandcode wrote:
| > an untyped closure-based programming language with a
| similar array and sort api to JS
|
| Ah! You're talking about Racket or Scheme!
|
| ```
|
| > (sort '(3 1 2) (lambda (a b) (< a b)))
|
| '(1,2,3)
|
| ```
|
| I suppose you ought to go and tell the r6rs standardisation
| team that a HN user vehemently disagrees with their api:
| https://www.r6rs.org/document/lib-html-5.96/r6rs-lib-
| Z-H-5.h...
|
| To address your actual pedantry, clearly you have some
| implicit normative belief about how a book about category
| theory should be written. That's cool, but this book has
| clearly chosen another approach, and appears to be clear
| and well explained enough to give a light introduction to
| category theory.
| gobdovan wrote:
| The syntax in the article is not scheme, you can clearly
| see it in my comment you're responding to.
|
| As for your 'light introduction' comment: even ignoring
| the code, these are not pedantic complaints but basic
| mathematical and factual errors.
|
| For example, the statement of Birkhoff's Representation
| Theorem is wrong. The article says:
|
| > Each distributive lattice is isomorphic to an inclusion
| order of its join-irreducible elements.
|
| That is simply not the theorem. The theorem says
| "Theorem. Any finite distributive lattice L is isomorphic
| to the lattice of lower sets of the partial order of the
| join-irreducible elements of L.". You can read the
| definition on Wikipedia [0]
|
| The article is plain wrong. The join-irreducibles
| themselves form a poset. The theorem is about the lattice
| of down-sets of that poset, ordered by inclusion. So the
| article is NOT simplifying, but misstating one of the
| central results it tries to explain. Call it a 'light
| introduction' as long as you want. This does not excuse
| the article from reversing the meaning of the theorem.
|
| It's basically like saying 'E=m*c' is a simplification of
| 'E=m*c^2'.
|
| [0] https://en.wikipedia.org/wiki/Birkhoff%27s_representa
| tion_th...
| throw5 wrote:
| > That is simply not the theorem.
|
| > The article is plain wrong.
|
| > This does not excuse the article from reversing the
| meaning of the theorem.
|
| What's with this hyperbole? Even the best math books have
| loads of errors (typographical, factual, missing
| conditions, insufficient reasoning, incorrect reasoning,
| ...). Just look at any errata list published by any
| university for their set books! Nobody does this kind of
| hyperbole for errors in math books. Only on HN do you see
| this kind of takedown, which is frankly very annoying. In
| universities, professors and students just publish errata
| and focus on understanding the material, not tearing it
| down with such dismissive tone. It's totally unnecessary.
|
| I don't know if you've got an axe to grind here or if
| you're generally this dismissive but calling it "simply
| not the theorem" or "plain wrong" is a very annoying kind
| of exaggeration that misses all nuance and human
| fallibility.
|
| Yes, the precise statement of Birkhoff's representation
| theorem involves down-sets of the poset of join-
| irreducibles. Yes, the article omits that. I agree that
| it is imprecise.
|
| But it's not "reversing the meaning". It still correctly
| points to reconstructing the lattice via an inclusion
| order built from join-irreducibles. What's missing is a
| condition. It is sloppy wording but not a fundamental
| error like you so want us to believe.
|
| Feels like the productive move here is just to suggest
| the missing wording to the author. I'm sure they'll
| appreciate it. I don't really get the impulse to frame it
| as a takedown and be so dismissive when it's a small fix.
| layer8 wrote:
| It could be a typed programming language where the sort
| function accepts a strict ordering predicate, like for
| example in C++
| (https://en.cppreference.com/cpp/named_req/Compare).
| mrkeen wrote:
| > Sadly, this comparator is still wrong for any sorting API
| that expects a general three-way comparison, because it
| does not handle equality as a separate case.
|
| Let's scroll up a little bit and read from the section
| you're finding fault with: the most
| straightforward type of order that you think of is linear
| order i.e. one in which every object has its place
| depending on every other object
|
| Rather than the usual "harrumph! This writer knows NOTHING
| of mathematics and has no business writing about it," maybe
| a simple counter-example would do, i.e. present an ordering
| "in which every object has its place depending on every
| other object" and "leaves no room for ambiguity in terms of
| which element comes before which" but also satisfies your
| requirement of allowing 'equal' ordering.
| gobdovan wrote:
| Your reply only works if the article were consistently
| talking about a strict order. However, it is not. It
| explicitly introduces linear order using reflexivity and
| antisymmetry, in other words, a non-strict `<=`-style
| relation, in which equality IS a real case.
|
| If the author wanted to describe a 'no ties' scenario
| where every object has its own unique place, they should
| have defined a strict total order.
|
| They may know everything about mathematics for all I
| care. I am critiquing what I am reading, not the author's
| knowledge.
|
| Edit: for anyone wanting a basic example, ["aa", "aa",
| "ab"] under the usual lexicographic <=. All elements are
| comparable, so "every object has its place depending on
| every other object." It also "leaves no room for
| ambiguity in terms of which element comes before which":
| aa = aa < ab. Linear order means everything is
| comparable, not that there are no ties. By claiming "no
| ties are permitted" while defining the order as a
| reflexive, antisymmetric relation, the author is mixing a
| strict-order intuition into a non-strict-order
| definition.
| mrkeen wrote:
| Definition: An order is a set of elements, together with
| a binary relation between the elements of the set, which
| obeys certain laws. the relationship between
| elements in an order is commonly denoted as <= in
| formulas, but it can also be represented with an arrow
| from first object to the second.
|
| All of the binary relations between the elements of your
| example are:
|
| "aa" <= "aa"
|
| "ab" <= "ab"
|
| "aa" <= "ab"
|
| > By claiming "no ties are permitted" while defining the
| order as a reflexive, antisymmetric relation, the author
| is mixing a strict-order intuition into a non-strict-
| order definition.
|
| There aren't any ties to permit or reject.
| we can formulate it the opposite way too and say that
| each object should not have the relationship to itself,
| in which case we would have a relation than resembles
| bigger than, as opposed to bigger or equal to and a
| slightly different type of order, sometimes called a
| strict order.
| furyofantares wrote:
| It's obviously not a general 3-way comparison API,
| _because_ it's returning bool!
|
| Extremely strange to see a sort that returns bool, which is
| one of two common sort comparator APIs, and assume it's a
| wrong implementation of the other common sort API.
|
| I do see why you're assuming JS, but you shouldn't assume
| it's any extant programming language. It's explanatory
| pseudocode.
| adaptit wrote:
| This resource is a really clear breakdown of order relations;
| visualizing the structure like this makes the abstract concepts
| much more digestible
| seanhunter wrote:
| If you want to learn category theory in a way that is more
| orthodox, a lot of people recommend Tom Leinster's Basic Category
| Theory, which is free[1]. I'm going to be working through it
| soon, but the bit I've skimmed through looks really good if more
| "mathsy" than things like TFA. It also does a better job (imo) of
| justifying the existence of category theory as a field of study.
|
| [1] https://arxiv.org/pdf/1612.09375
| gobdovan wrote:
| Disclaimer for the book, and for category theory in general:
| most books are optimized for people who already master
| mathematics at an undergraduate level. If you're not familiar
| with algebraic structures, linear algebra, or topology, be
| prepared to learn them along the way from different resources.
|
| Category theory is also not that impressive unless you already
| understand some of the semantics it is trying to unify. In this
| regards, the book itself presents, for example, the initial
| property as trivial at first hand, unless you notice that it
| does not simply hold for arbitrary structures.
| scotty79 wrote:
| I love how math is like a new language, in a new country, of
| culture you are not exactly familiar with.
|
| This article is like living there for few months. You see things,
| some of them you recognize as something similar to what you have
| at home, then you learn how the locals look at them and call
| them. And suddenly you can understand what somebody means when
| they say:
|
| "Each distributive lattice is isomorphic to an inclusion order of
| its join-irreducible elements."
|
| Having a charitable local (or expat with years there under their
| belt) that helps you grasp it because they know where you came
| from, just like the person who wrote this article, is such a
| treasure.
| ashCrafts62 wrote:
| binary relations defining order are more nuanced than they seem;
| a linear order isn't just about ranking, it's about the structure
| of the relationships themselves.
| theQuietCliff89 wrote:
| this reminds me of Haskell's type classes; they elegantly define
| order concepts through their own set of rules, capturing
| relationships in a clean way.
| eli_dove02 wrote:
| studying category theory for my master's in 2015 showed me how
| orders influence everything from data structures to algorithms.
| foundational stuff.
| throw567643u8 wrote:
| The author's writing style and overuse of parentheses is
| excruciating. True parenthetic material is rare, good technical
| writers use them sparely.
| postit wrote:
| I can read a person's ADHD level by their parentheses usage.
| Unless they are lisp programmers.
| kmstout wrote:
| I see parenthetical expressions overused all over the internet,
| especially in HN comments. (Don't worry, I do it sometimes,
| too.) A browser extension to collapse or strike through
| parenthetical text nested beyond a configurable level might be
| handy.
| ynac wrote:
| I once saw a man with a notebook and pencil drawing these kinds
| of diagrams, at the time I saw them as graph theory. I wasn't in
| an extrovert moment and missed my chance to ask. He seemed to be
| working recreationally on them. I'm wondering about puzzles that
| could be easily created using these theories / maths. You,
| practitioners, any suggestions?
| susam wrote:
| > I once saw a man with a notebook and pencil drawing these
| kinds of diagrams, at the time I saw them as graph theory.
|
| I have been engaged in some work on s-arc transitive graphs in
| algebraic graph theory. You'd be surprised how rarely I have to
| draw an actual graph. Most of the time my work involves
| reasoning about group actions, automorphisms, arc-stabilisers,
| etc.
|
| For anyone curious what this looks like in practice, I have
| some brief notes here: <https://susam.net/26c.html#algebraic-
| graph-theory>. They do not cover the specific results on s-arc-
| transitivity I have been working on but they give a flavour of
| the area. A large part of graph theory proceeds without ever
| needing to draw specific graphs.
| cubefox wrote:
| This does the standard thing of treating preorders as the default
| generalization of partial orders. But an (arguably) more natural,
| and more useful, generalization of partial orders is acyclicity.
|
| Unfortunately acyclicity isn't called an "order" so people assume
| it's something unrelated. But "orders" are just second-order
| properties that binary relations can fulfill, and acyclicity is
| also such a property.
|
| Acyclicity is a generalization of strict (irreflexive) partial
| orders, just like strict partial orders are a generalization of
| strict total (linear) orders. Every strict partial order relation
| is acyclic, but not every acyclic relation is a strict partial
| order.
|
| A strict partial order is a binary relation that is both acyclic
| and transitive, i.e. a strict partial order is the transitive
| closure of an acyclic relation.
|
| Binary relations of any kind can be represented as sets of pairs,
| or as directed graphs. If the binary relation in the directed
| graph is acyclic, that graph is called a "directed acyclic
| graph", or DAG. In a DAG the transitive closure (strict partial
| order) is called the reachability relation.
|
| Examples of common acyclic relations that are not strict partial
| orders: x[?]y (set membership), x causes y, x is a parent of y.
___________________________________________________________________
(page generated 2026-04-18 23:00 UTC)