Your favorite type theory podcast!

Joined September 2021
People often ask us: what is type theory and why is it useful? Type Theory is the academic study of type systems: formal frameworks for classifying terms, structuring computation, and specifying the behavior of programs. It investigates how types enforce invariants, guarantee safety properties, and shape the design of programming languages. Its impact is both theoretical and practical. 1) Programming language design and metatheory Type theory provides the tools to state and prove properties such as type safety, normalization, and parametricity. These results are not testing heuristics. They are mathematical guarantees. As Dijkstra wrote, “Program testing can be used to show the presence of bugs, but never to show their absence.” Tests explore a finite search space. Proofs quantify over infinite domains. Type theory is the foundation that makes such proofs possible in programming language research. 2) Industrial impact: Rust and RustBelt Careful type theoretic design eliminates entire classes of bugs at compile time. The RustBelt project went further and formally verified core aspects of Rust’s type system using the Rocq proof assistant, with peer reviewed results in top PL venues. This is not marketing. It is mechanized metatheory. 3) Proof assistants and formal verification Type theory is the theoretical backbone of systems such as Lean, Rocq, Agda, and also HOL based systems such as Isabelle/HOL. These are programmable logics where specifications and proofs coexist with code. In an era of AI assisted development, proof assistants offer a different paradigm. Instead of generating plausible text, we iteratively construct machine checked proofs against a formal specification. The result is not just confidence. It is correctness by construction. For students and engineers working on compilers, DSLs, or formal methods, type theory is not an abstract curiosity. It is the language in which we make precise claims about programs and then prove them. If you are interested in learning more about type theory, programming languages, and proof assistants, follow us here and subscribe on Youtube: youtube.com/@typetheoryforal….
2
7
88
8,349
Type Theory Forall retweeted
Lean v4.35.0 is out, and it ships with verified kernels. Run `lake check --paranoid` to recheck your project with every bundled kernel. Blog post: leodemoura.github.io/blog/20…
7
41
5
261
16,825
Type Theory Forall retweeted
Happy 70th birthday 🎂 FORTRAN fortran-lang.org/news/2026/0…
3
10
2
62
1,700
Clément was awarded the best teaching award from EPFL’s School of Computer and Communication Sciences Very well deserved. Zero surprises! He is one of the most curious and enthusiastic researchers I had the pleasure to meet. Congratulations Clément!! Btw the invitation to com chat at ttfa is always open for you! :)
9
647
Now this is good use of AI for marketing
What we are building will change how mission-critical software is built and verified Here's Rick & Morty to tell you all about @workersio
2
12
753
I certainly really hope for this. In fact just had a conversation with @bugarela exactly about that, I'll try to release that asap.
new job just dropped: Automation Engineer and the funny part is nobody can ask for "10 years of experience" because the job basically didn't exist Serval is already seeing companies hire people specifically for this feels like one of those job titles we're going to see everywhere in a few years:
4
523
Please show your FV ID card at the entry desk before tagging me please. Thank you. For those who don't have an FV ID card please get in touch with @typememetics, they're in charge with personnel profiling.
required reading to get on here talking about formal verification
1
4
1
55
3,201
Type Theory Forall retweeted
to know where you are going, you have to know where you have been: pldb.kirancodes.me Titles and abstracts of 22,324 programming languages papers, from the first POPL in 1973 to this year's proceedings.
10
29
3
164
11,938
Type Theory Forall retweeted
Job search in AI + FV/compilers #6 — three-week update LeetCode is still going strong: 3-4 problems every morning, when my brain is at its sharpest. I’ve started tackling harder problems now, and I can actually feel the progress. Things that would have intimidated me a few weeks ago are becoming approachable, which is awesome! This week, though, is completely packed with interviews. I had two today, with another one coming up later. Tomorrow I’m talking to a startup so early that it hasn’t really been born yet. On Thursday, I’m meeting the lead scientist of another startup AND recording the Quint episode for @ttforall. That’s a lot happening at once! My first interview today was a technical one for a company I’m extremely excited about. Which was exciting, yes, but it also meant I was SUPER nervous. I don’t think I performed at my best. Several questions were new to me because the role requires more customer-facing experience than my previous positions did. I’m very confident I would be good at that kind of work. Communication comes naturally to me. I’ve taught, mentored, given talks, hosted a technical podcast, and spent countless hours discussing difficult ideas with researchers and engineers. But I think it is pretty hard to convey how you communicate in the synthetic environment of an interview. For me, good communication isn’t simply explaining something clearly. It starts with relating to the other person and understanding what they actually need—sometimes almost at an emotional level. And people don’t always know what their real problem is. You have to listen, ask questions, understand the context, and keep digging until you reach the root of it. It’s a little like being a detective at a crime scene, except preferably nobody died and the crime was an underspecified API. Maybe I should have said that during the interview! But these are the conclusions you reach afterward, once the pressure is gone and you finally have time to think. So that’s one lesson I’m taking into the next one. The second half of the interview was a technical exercise. I swear I had seen this exercise a thousand times. In fact, I’ve taught it probably a hundred times. It should have been a breeze. BUT— I glossed over one definition because of a difference between Rocq and Lean. I then spent a good chunk of the interview reasoning from the wrong assumption until the interviewer called it out. I was mortified. It was a mixture of shame, embarrassment, and frustration with myself. I took a deep breath, recomposed myself, corrected the assumption, and continued. I think the rest went reasonably well, although I’m second-guessing the clarity of some of my explanations. A few times I would explain something, and immediately afterward the interviewer would ask what sounded to me like the exact question I had just answered. Maybe my answer wasn’t as clear as it felt from inside my own head. Maybe he was looking for something more specific. Who knows? Let’s see how it goes. My second interview today was more of an HR screening, although someone technical also joined. I think that one went really, really well. The technical interviewer knew the subjects I was talking about in depth, so we got into a pretty interesting conversation. At least it was interesting for me. Hehe. They’re sending me a take-home assignment. I’ll have a three-day window and eight hours to work on it, and I’m explicitly allowed to use AI. I’m getting a little tired of take-homes at this point, but the ones where I can use AI are usually the most fun. They’re a much better reflection of how I actually work now: directing the tools, checking their output, making technical decisions, and taking responsibility for the result. So I’m tired, but also kind of excited. In about an hour from now, I have another screening for a more compiler-oriented role, which should also be interesting. Then tomorrow I’m talking to the startup that hasn’t been born yet. That conversation came through an introduction from Leo de Moura. One of the best side effects of hosting Type Theory Forall has been getting to know people like him, and I'm grateful he thought of me. There’s something very appealing about joining a project while it’s still being invented. You get much more freedom to help shape the technical direction, the culture, and even the problem the company is trying to solve. Of course, it also means the whole thing might go nowhere within a year. That’s the deal with something that early: a lot of freedom, a lot of uncertainty, and hopefully some very interesting problems. Let’s see how the conversation goes. Anyways, I’m going to stop here because I need to prepare for the next interview. I’m genuinely happy with the number of interviews I’ve managed to land. Even when I make mistakes—and today certainly gave me something to think about—every interview is teaching me how to explain my experience better, where my gaps are, and what kinds of teams get me excited. Please keep wishing me luck! And if you know of openings in AI + formal verification, functional programming, or compilers, I’d greatly appreciate an introduction. I’m especially interested in roles involving theorem provers. My main expertise is in Rocq/Coq, and I’m learning more Lean 4 by the day (they're really not that different). If you don’t have an opening to send my way, interacting with this post—commenting, liking, or sharing—already helps it reach more people. Thanks to everyone following the search and rooting for me. Back to interview preparation!
4
2
14
901
Type Theory Forall retweeted
We put together a practical reference to formal verification tools: quint.sh/guides/formal-verif… If you're getting started, use it to explore the landscape. If you're already an expert, help us make it better. If you find a missing tool or any mistake, please tell us! We want this to be an accurate, useful, and current reference.
4
15
3
62
6,524
Type Theory Forall retweeted
About 50% of our applications so far for the formal methods hackathon the weekend of nov 1 are FM experts. Ideally, we want 1 expert for every 5 novices. If you've never done any FM, or maybe never even heard of formal methods, and want to participate, please apply! We specifically want you!! docs.google.com/forms/d/e/1F…
4
9
1
62
5,258
holy shit, I just found out there is a whole category of bugs that aren't related to memory safety is anyone working on creating a language to prevent these?
7
30
2
753
54,963
Our beloved patreons now get to watch first row @p_droabreu0 fumbling through the job search with monthly behind the scenes, stories and frustrations. Top notch entertainment for $5 patreon.com/11815939/join#no…
2
276
Type Theory Forall retweeted
We are organizing the most formal hackathon in all of SF! Inviting all FM nerds out there who want to show off their skills by building unbreakable things.
I am running a formal methods hackathon on November 1st, with a bunch of my friends. Contestants will compete to build normie software -- video games, AI agents, travel booking tools, etc. -- but formally verified. We are going to measure to what degree these tools are usable by SWEs with no prior FM background and no FM-specific education. This is a super exciting opportunity to see where the ergonomic gaps are that we, the FM community, need to fill in order to take advantage of our moment in the zeitgeist. If you want to get involved, please DM me! In particular, I think I've got location/food/tokens/photography all covered, but I need some sponsors for the prizes. If you make a cool gizmo or product we can give away and you're down to donate one, please do so!
9
7
2
60
5,798
Type Theory Forall retweeted
Job search in AI + FV/compilers #5 A few more applications this week, LeetCode every morning while my brain is still fresh, interview preparation, and so many meetings. I’m getting close to 50 applications now. But things are moving! Today I had a very pleasant technical interview with a small startup. The process has been refreshingly unbureaucratic, and I got to nerd out with someone who clearly understood the details of what I was talking about and asked some really interesting questions. Then I got to ask about their product and how they’re approaching it, and we had the kind of conversation that makes you think: yeah, I could see myself working with these people. Let’s see how it goes! Another company said they’ll probably have an answer for me next week. I also had a good conversation with HR at a larger company on Tuesday, and the first technical interview is next Tuesday. The person interviewing me seems extremely sharp and well connected in the field, so I’m excited. And I have some preparation to do. I also missed a take-home deadline. That one came down to Lean metaprogramming. And although I have a lot of background in metaprogramming coming from Rocq, there's some serious differences with Lean, and I couldn’t learn enough to finish the assignment in the time available. Disappointing, of course, but honestly, I’m glad I finally spent some time on something I’ve been postponing for a while. I came away knowing more than when I started. Oh look, as I’m writing this, another invitation for an HR screening just came in. Hell yeah. I really hope some of these conversations turn into offers soon. For now, I keep reminding myself that the job search is a little like looking for someone to marry: you can hear a hundred nos, but you only need one good yes. Preferably mutual 😂 One thing that has made these last two weeks much better is connecting with people in a similar position. This week I talked to three people who are also navigating this crazy market. We shared project ideas, compared experiences, and helped each other think through what to do next. One of them pitched a very interesting programming-languages project involving blockchain, and now I’m tempted to do some poking around with him. I also met with @buger, who has some VERY interesting ideas about using requirements and formal verification to build assurance around AI-generated software. We had a lot to talk about. Worth checking out what he’s building at ReqProof. That conversation connects to something I’ve been thinking about after the discussion around @bcherny’s tweet this week. I already posted my thoughts on what he was showing, but what stayed with me was how much of the conversation treated formal verification as a tool for finding bugs. And sure, finding bugs matters. If you’re trying to convince someone to invest in verification, showing them a concrete failure is a pretty good place to start. But I think we have so much more to offer. Before we can say that software is correct, we need to say what we expect it to do. Precisely enough that we can examine that expectation, question it, and check whether the implementation actually meets it. And often enough, we don’t really know what we want yet. We have an informal idea. Then someone asks what should happen when an operation fails halfway through, or two requests arrive at the same time, or a user does something we hadn’t considered. Suddenly there are decisions hiding inside what looked like a straightforward requirement. That’s already useful work for formal methods. Writing down the model and trying to establish its properties can expose contradictions, missing assumptions, and consequences we hadn’t thought through. Of course, you can prove the wrong specification. The proof doesn’t magically establish that you asked for the right thing. That’s why the specification itself needs attention, discussion, and review. This is where I think things get especially interesting with AI-generated software. We’re getting better at generating implementations quickly. But someone still has to decide what behavior is acceptable, what must never happen, and which assumptions are reasonable. If we’re commissioning or using the software, we need a way to understand and audit those decisions. AI can help us articulate requirements and explore their consequences. We still have to decide whether those requirements express what we actually intend. That’s a big part of why I’m excited about this field right now. There’s a lot of work to do in making that whole process accessible, from figuring out what we mean to obtaining evidence that the software does it. Which reminds me that I could finally schedule with @bugarela for @ttforall! This is super exciting because she's clearly thinking very hard about how to tackle this same problem I've outlined above. We’re recording next Thursday, and I’m aiming to have it out by mid-October. Anyways, busy week. Some progress, one missed deadline, a lot of good conversations, and hopefully some offers on the horizon. As always, my DMs are open. If you have an interesting project idea, let’s talk. If you know a team hiring in formal verification, compilers, or AI-assisted verification, please send them my way. And thanks to everyone following along, sharing opportunities, and talking through ideas with me. The search is a grind, but these conversations have been a really good part of it.
3
2
1
18
1,437
Type Theory Forall retweeted
I am running a formal methods hackathon on November 1st, with a bunch of my friends. Contestants will compete to build normie software -- video games, AI agents, travel booking tools, etc. -- but formally verified. We are going to measure to what degree these tools are usable by SWEs with no prior FM background and no FM-specific education. This is a super exciting opportunity to see where the ergonomic gaps are that we, the FM community, need to fill in order to take advantage of our moment in the zeitgeist. If you want to get involved, please DM me! In particular, I think I've got location/food/tokens/photography all covered, but I need some sponsors for the prizes. If you make a cool gizmo or product we can give away and you're down to donate one, please do so!
20
29
7
255
19,724
Type Theory Forall retweeted
A two-weekend fun project: Vermilion, an experimental Lean 4 backend for Verus verifier for Rust. Verification conditions are readable Lean theorems, provable with an SMT solver, Lean's grind, Mathlib lemmas, by hand, or by your favorite AI system. github.com/ilyasergey/vermil…
7
20
170
7,806
Type Theory Forall retweeted
Keep an eye out for: - plan for verifying all software coming very soon to @theoremlabs blog - verified (toy) sandbox demonstration in the coming weeks - verified production sandbox on Linux by end-of-year
Theorem co-founders @rajashree + @diagram_chaser on how you actually prove an AI agent can’t escape its sandbox, and what happens when the proof exposes a way out: Jason Gross: "Anything that the agent does inside the sandbox will not result in some canary file outside the sandbox getting changed." Rajashree Agrawal: "We intend to have one by the end of the year. We've got a verified sandbox now, and the goal is to keep adding features in collaboration with the AI labs." Jason Gross: "If the AI can guess the secret root key of the package server, then it can do anything. Either I try to prove that the AI is not going to be able to guess that, or I design the system so that the channel just doesn't allow it to authenticate that way." "You also want to prove that on most inputs there's no change in behavior. Because otherwise it could make it inescapable by saying, well, sandbox just shuts down as soon as it starts." @theoremlabs
8
9
2
107
15,841
Grab your popcorn, today we shit on IEE754 Floating Points
Job search in AI + FV/compilers #4 I look young, but I’ve been around a little. One thing I’ve been noticing during this job hunt is how hard it is to convey the breadth of my experience in a technical interview. You pick one or two stories, try to make a point, and suddenly the interview is over. There’s a lot that never comes up. So today I want to get a little more technical and tell you about my time at SiFive. There’s floating-point arithmetic, a bug that wasn’t a bug, and a bet that I still intend to collect on. Back in 2016, I went to OPLSS and had such an incredible time that I decided I wanted to return to the US for graduate school. Once I graduated, I spent my time studying for the TOEFL and GRE, working on applications, recommendation letters, and all that stuff. After submitting everything, I randomly saw an email on the Coq mailing list: a company in the Bay Area was hiring a Coq developer. That really grabbed my attention, so I emailed them asking whether they took interns. Next thing I knew, Murali Vijayaraghavan was on a call with me, opening Coq and asking me to prove a version of the pigeonhole principle. I didn’t finish on the call. But he was cool about it and told me to email him the proof once I was done. I got off the call, worked my ass off, and sent it back. Apparently he liked it, because they flew me out to California, and we got started. That first week, boy, I don’t think I’ve ever felt dumber in my life. Murali was showing me the Kami infrastructure, and there was so much to absorb. I would get to the office before him just to review what he had shown me the previous day and do hexadecimal arithmetic in my little notebook so I could follow what he was talking about. Little did I know that this was just my first taste of the entire grad school experience. But eventually things started clicking, and I was implementing floating-point specifications and checking them against the hardware. Let me explain a little about the setup. Kami is a hardware-description language deeply embedded in Coq. You can describe circuits, reason about them using its formal semantics, and compile those descriptions to Verilog: github.com/sifive/Kami The implementation we were checking was written in Chisel, which lets you describe and generate hardware using Scala. So you get to use all kinds of high-level programming to build circuits, which is pretty cool if you ask me. On my side, I was writing specifications in Kami. We would compile those to Verilog and use JasperGold for formal equivalence checking against the hardware generated from Chisel. That was a big part of my job: getting the specifications right, setting up the comparisons, and investigating why things didn’t agree. I worked on rounding, conversions between floating-point formats, conversions to and from integers, and fused multiply-add. Some of the completed equivalence checks had explicit restrictions on the recoded exponent, so the scope of each result mattered. The floating-point project is here: github.com/sifive/FpuKami I remember spending a LOT of time on multiply-add. Looking at ModMulAdd.v certainly brings back memories: github.com/sifive/FpuKami/bl… One annoying detail: as I remember it, the repository was moved at some point, and my contributions didn’t carry over into the history you see there now. So I don’t show up as a contributor. It has also been eight years, and I can’t tell you which parts of the current code are still mine. That particular structure does ring a bell, though! Anyways, I promised some technical content, so let me say this up front: floating point is NASTY. You have a sign, a significand, and an exponent, but only so many bits to store them. Most real numbers aren’t exactly representable. So you need rounding rules, and then rules for what happens near the limits of the format, and then exception flags—and every one of those details is part of the behavior you’re trying to get right. Fused multiply-add, for example, computes a × b + c with a single final rounding. If you round the multiplication first and then do the addition, you can get a different answer. But the example I want to tell you about came from converting a 64-bit float to 32 bits. In June 2018, I sent an email reporting what I thought was a bug. One of my inputs was 0x380fffffc0000001. With rounding toward positive infinity, the result was: 0x00800000 That’s the smallest positive NORMAL binary32 number, 2⁻¹²⁶. But the underflow and inexact flags were both set. Now, we were detecting tininess AFTER rounding. And the result was normal. So why on earth was it raising underflow? I found related cases with other rounding modes too. SoftFloat showed the same behavior. I wrote it up and sent it around, pretty convinced something was wrong. John Hauser replied and pointed me to a FAQ entry he had published less than two weeks earlier. Turns out the implementation was right. Here’s the subtlety: “detect tininess after rounding” doesn’t simply mean “look at the final floating-point result and check whether it’s subnormal.” For the tininess test, you round to the destination precision as though the exponent range were unbounded. Right at the boundary, that hypothetical rounded value can still be below the normal range. But rounding the original value to an actually representable binary32 number can give you the smallest normal number. So you can have a normal final result AND still satisfy the tininess condition. If the result is also inexact, underflow is required. That's floating points for you 😒 The FAQ walks through an example: jhauser.us/arithmetic/SoftFl… I thought I had found a bug in the implementation. What I had actually found was a hole in my understanding of the specification. And honestly, I think that’s a pretty good verification story. You can have a concrete input, a surprising result, and a very convincing explanation of why it must be wrong—and still be the one who needs correcting. But there was another thing I kept questioning: the compiler. We were taking something written in Kami, compiling it to Verilog, and using the result in our equivalence checks. So naturally I wanted to make sure the compilation path was behaving correctly too. During those first few weeks, I kept being extra careful about this. At some point, as I remember it, Murali got a little tired of my questions and made me a bet: if I found a bug, I could ask for whatever I wanted. And ladies and gentlemen, about three months later, I found one. He still owes me a really good reference letter because of that. Looking back, I like that these two stories happened during the same internship. I was learning to question the infrastructure while also learning that my own reading of the standard needed just as much scrutiny. That’s a lot of what I enjoy about formal verification. You get to follow a disagreement all the way down: through the specification, the implementation, the compiler, and the assumptions you put into the check. Sometimes you find a bug. Sometimes you discover that a sentence in the standard means something much more precise than you thought. Anyways, that’s a little of what’s hiding behind “floating-point verification at SiFive” on my CV—and some of the experience I’m bringing to my search for work in formal verification, compilers, and AI-assisted verification.
There's a new version of this post
2
100
Type Theory Forall retweeted
Very relevant today
5
25
235
4,679