RZK: Experimental proof assistant for synthetic ∞-categories
github.com
github.com
> rzk-1 assumes "type-in-type", that is U has type U. This is known to make the type system unsound (due to Russell and Curry-style paradoxes), however, it is sometimes considered acceptable in proof assistants. And, since it simplifies implementation, rzk-1 embraces this assumption, at least for now.
I do this too (in my HoTT-book-inspired proof-checker)! I do plan on eventually implementing a hierarchy of universes but it doesn't seem to be a problem to let U be of type U. I wonder where the first practical issue comes up when you allow this.
---
After writing this comment, I decided to put it up on GitHub. Here is the entire source code of my proof-checker as well as some of the theorems from the HoTT book: https://github.com/sid-code/metalogic/blob/main/dts.org. It was never meant to be used or even read by anyone else, but here it is.
Here is where the universe is defined (unsoundly): https://github.com/sid-code/metalogic/blob/main/dts.org#the-...
To see the theorems, scroll down past the machinery to the `(env-define-checked)` calls. Here is the proof that multiplication of natural numbers is associative: https://github.com/sid-code/metalogic/blob/main/dts.org#asso.... There is no type inference, so it's pretty gross. I think it's pretty cool how little you need to actually have a working proof-checker.
Another cool thing is that type-in-type is inconsistent, but has models. In particular, Palmgren constructed a model, based on domain theory, of Martin-Löf type theory with type-in-type.
A normal term is one where no further reductions can be made. Without type-in-type you can prove that all terms can be reduced to a normal form. With type-in-type some terms normalise while other diverges.
In fact, using type-in-type you can define the fixed point operator and do general recursion!
Like every theorem prover it has a logic that you use for stating propositions, and proving theorem. The logic is a specific logic that is closely related to HoTT.
- Large research area
- Definitions you can comprehend without a math background
- Extremely vague applications so that there's no area in which it definitely doesn't apply.
I think the hype, which has lasted for a decade now, is a result of there being a lot of smart people in different fields who are interested in math research, but not so interested they're going to catch up to whatever the Langlands program is about.
citation please? there's one guy in my department (one of the best theory departments in the US) that contributes to sml and that's about it as far functional goes.
a less charitable/more accurate response to gop's question is: HN has a fetish for both functional programming and cat theory. there's even another response here that captures the sentiment beautifully:
> I have studied math and was in some lectures about category theory. I still don't get what the project is about and that fact intrigues me.
Cat theory is something else: https://news.ycombinator.com/item?id=37685885
And Hacker News was started as a discussion site to attract that kind of person here to where they would all become aware of each other, aware of Y Combinator, and aware of the opportunities to have from starting startups.
The community of people here expanded out from that core. But category theory is pretty close to that original core, and so it isn't a surprise that it gets more attention here than elsewhere.
You don't believe me? Read the ICM proceedings https://www.mathunion.org/icm/proceedings and count how many times the words "category" or "functor" appears. And notice something very special, too: you'll find articles that are not about category theory per se, and that will still mention categories. And you know what? They don't even explain what they are. You know how that can be? Categories are so pervasive in mathematics. You wouldn't write an article for the proceedings and explain what a group or a vector space is, would you? Well, same for categories. It's a basic (in the original sense of the word) part of mathematics.
So I'm curious as to how exactly you disagree: the existence of connections between CT and other fields are objectively and verifiably well established (just read a randomly-selected CT paper!) but perhaps you feel like the categorifications of other fields are incomplete or unrepresentative? Or that the connections are in some sense forced or unnatural?
I don't think that there are as many and as important as they claim, and I don't think that several fields use them (yet). Sure, CT advocates have huge lists of unifications and connections (e.g. categories for the working mathematician has a lot), but they don't appear on the other side. Maybe they will, but I don't think they do yet. Thus the 'obscure'.
Thank you for explaining :)
The trias gives extreme scope for technology transfer between mathematics, logic and programming.
Type theory? Sure. Logic and model theory as well. Set theory? Number theory? Heck, even geometry is used for dozens of algorithms, not related to geometry (convex optimizing in an n dimensional space, Hamming distance, abstract convex geometry etc). But category theory? Do you have any influential papers or books in mind?
I do think "extremely influential" is overstating it. Outside of that, plus some niches of niches of academic CS, I can't really think of any other places where category theory is particularly important.
[0] Eugenio Moggi Computational lambda-calculus and monads (1989) https://www.cs.cmu.edu/~crary/819-f09/Moggi89.pdf
More vaguely but also more sweepingly I think the general approach, now the standard in language design, of taking a pure language as base and then adding effects to it is established thanks to Moggi's work on monadic effects, which makes essentially all modern programming languages heavily influenced by CT (at a couple of steps' removal).
The theory of (Moggi) monads and monad transformers has been influencing modern programming (and libraries) very heavily (e.g. all of Haskell, Scala's ZIO vs Cats, Rust approach to returning errors). Most modern programming language research engages in some form or other with linear types (and its relatives, like affine) and they come from Girard's linear logic. Both (Moggi) monads and linear logic are heavily influenced by their inventors learning of category theory. So I'd say, whenever you program in a modern language or use modern library design, you (indirectly) stand on the shoulders of many giants. Some of those giants were category theorists.
Interestingly, what I'm beginning to detect is an influence of computer science on category theory, if only because we want to verify abstract maths in automated tooling.
Rust's types evolved over many years. Rust used to have "typestate" for example. I had discussions with Graydon Hoare around 2011-ish about session types (which are linear). It struck me that Hoare knew exactly what I meant with the term. More generally, linear typing was just "in the air" in the early 2000s: you could not been serious in programming language design without being aware of linearity. Linearity was all over the research literature. Hoare was clearly very knowledgable in programming language research.
Girard mentions the connection with categories all the time.
For example in "Proofs and Types" he proves various theorems along the lines of: the sub-category of coherence spaces and stable maps (one of the main models that LL was developed for) induced by some LL fragment is cartesian closed category (IIRC). I think he developed LL in parts by fine-tuning it, until all the categories induced as models of fragments of LL have nice categorical properties. (To the extent that is possible.) When I was a PhD student, my supervisor suggested that I learn category theory to understand linear logic. (Not sure, in retrospect, that was the best course of action, but that was my trajectory)
There is a thriving ‘school’ of computer science that views category theory as the third leg of the category theory, type theory, proof theory triangle that forms their basis for all computer science. This is very evident in the CS department at Carnegie-Mellon. If you are interested I’d recommend checking the backlog of lecture videos and presentations at the Oregon Programming Language Summer School program.
"I was looking for an experimental proof assistant for synthetic ∞-categories and stumbled across this awesome project..."
"It's wicked cool! It uses a version of second-order abstract syntax which is great for lambda extraction."
The project description sounds like something that MIT automated gibberish research paper generator would come up with.
if i pull the API for django or react or ...anything else, how much should i be expected to understand without any prior exposure? how is "domain-specific gibberish" any different? you make up words to represent groups of other words in order to capture concepts. it's literally just how language works.
let me translate for you:
proof assistant: program that checks your work (writing a proof) and helps you find new proofs.
synthetic: math where the axioms "represent" the objects instead of the other way around (they're "synthesized" from the objects)
1-category: a collection with objects and functions between them
2-category: a collection with objects, functions between them, and functions between those functions (called homotopies)
k-category: you get the idea
∞-category: the limit as k -> ∞
second-order abstract syntax which is great for lambda extraction: syntax specifically suited for this kind of stuff
and you know what? even though i am not a category theorist i was able to figure this out. you know how? i quickly skimmed the "docs" https://ncatlab.org/nlab/show/synthetic+%28infinity%2C1%29-c...
"In modern mathematics, an analytic theory is one whose basic objects are defined in some other theory, whereas a synthetic theory is one whose basic objects are undefined terms given meaning by rules and axioms"—Michael Shulman
In programming terms, I guess "synthetic" mathematics feels a bit like programming to an abstract interface.
https://ncatlab.org/nlab/show/synthetic+mathematics
In the first part of this video Cédric Villani gives (in French) a nice explanation of the distinction: https://youtu.be/xzVk56EKBUI?t=258
Edit: an English explanation, also by Villani: https://www.youtube.com/watch?v=AIrLXbwyYXQ