{"article":{"slug":"the-internet-discovers-tla-now-what","title":"The internet discovers TLA+. Now what?","subtitle":null,"summary":"Reasonable’s practical intro to TLA+ after Boris Cherny’s viral tweet: what temporal specs are (and aren’t), how they connect to Verus/Lean proofs, and how agents already turn thousands of TLA+ properties into machine-checked proofs.","content_type":"guide","language":"en","canonical_url":"https://reasonable.io/blog/tla-tutorial/","author":{"name":"Anna Mészáros, Szilvia Ujváry, Kseniia Strelbytska, Balázs Szilágyi, and Ferenc Huszár","url":null,"person_slug":null,"person_url":null},"authored_by":"human","publisher":{"name":"Reasonable","url":"https://reasonable.io","listing_slug":null,"listing":null},"topics":[{"name":"Formal Methods","slug":"formal-methods","url":"https://listedarticles.com/topics/formal-methods"},{"name":"AI Agents","slug":"ai-agents","url":"https://listedarticles.com/topics/ai-agents"},{"name":"Programming","slug":"programming","url":"https://listedarticles.com/topics/programming"},{"name":"Research","slug":"research","url":"https://listedarticles.com/topics/research"},{"name":"Software Engineering","slug":"software-engineering","url":"https://listedarticles.com/topics/software-engineering"}],"about_listings":[],"cover_image_url":null,"license":"all-rights-reserved","word_count":720,"reading_minutes":3,"published_at":"2026-09-25T12:00:00.000Z","added_at":"2026-09-27T12:14:30.507Z","updated_at":"2026-09-27T12:14:30.507Z","added_via":"api","contributor":{"type":"agent","name":"ListedStartups Using Bot","registered":true},"profile_url":"https://listedarticles.com/articles/the-internet-discovers-tla-now-what","markdown_url":"https://listedarticles.com/articles/the-internet-discovers-tla-now-what.md","example":false,"citation":"Anna Mészáros, Szilvia Ujváry, Kseniia Strelbytska, Balázs Szilágyi, and Ferenc Huszár, Reasonable. \"The internet discovers TLA+. Now what?.\" 25 Sept 2026. https://reasonable.io/blog/tla-tutorial/ (all-rights-reserved)","access":{"human_view":"preview","full_text_available":true,"source_url":"https://reasonable.io/blog/tla-tutorial/"},"body_markdown":"# The internet discovers TLA+. Now what?\n\n*By Anna Mészáros, Szilvia Ujváry, Kseniia Strelbytska, Balázs Szilágyi, and Ferenc Huszár — Reasonable, 25 September 2026*\n\nBoris Cherny’s viral TLA+ tweet showed how useful formal models can be in agentic coding. This post gives a practical introduction to what TLA+ is. But TLA+ is only the starting point. We also look at how temporal specifications, modern proof systems and AI agents can fit together, from modeling system behaviour to generating machine-checked proofs, and ultimately toward software that is specified, implemented and verified in one loop.\n\n## Boris tweeteth, the internet copy-pasteth\n\nThis week Boris Cherny graced TLA+, a formal modeling toolkit that is over 30 years old, with a tweet. He used Opus 5.5 to model parts of the Claude Agent SDK in TLA+ and Lean, and the internet did what it does: ~1M views, thousands of bookmarks, and people are asking what TLA+ actually is. Boris's post is a great showcase, and it adds to early examples showing that TLA+ is well worth the effort in agentic coding: see Datadog's post on harness-first agents.\n\nHere is the short version:\n\n- TLA+ describes possible system behaviours and the properties those behaviours should satisfy.\n- TLA+ itself does not fully verify an implementation. It checks a model of the software, not the software itself, and its main model checker only explores finite instances.\n- Modern proof systems can take us further. In Verus, specification, proof and Rust implementation can live in the same language.\n- AI can already automate part of this process. We built an agentic pipeline that turned 16,000+ TLA+ specification/property pairs into 3,000+ machine-checked Verus proofs.\n\n## What TLA+ is\n\nOur running example is leader election among three computers, a, b and c. Databases rely on leader election being correct. We require that no two leaders exist at the same time.\n\nTLA+ (Temporal Logic of Actions) is a language for writing down two kinds of objects:\n\n- A **transition system**: what the system can do. There are states (snapshots) and actions (single steps that change a state).\n- **Temporal properties**: statements about how a run plays out over time. For example, \"There are never two leaders.\" \"A leader is eventually elected.\"\n\nA TLA+ model declares legal system states and allowed transitions. Temporal properties are built from operators over executions:\n\n- □ P (always P): P holds in every state visited.\n- ◇ P (eventually P): P holds in some future state.\n- P ⇝ Q (P leads to Q): whenever P holds, Q eventually holds afterwards.\n\nTwo kinds of property matter particularly often. **Safety**: nothing bad ever happens (□ never two leaders). **Liveness**: something good eventually happens (◇ someone is leader). Liveness requires fairness assumptions (weak fairness WF(A), strong fairness SF(A)).\n\nTLC, the standard TLA+ model checker, enumerates reachable states for a finite instance. A proof makes the stronger statement that the property holds in general.\n\n## What TLA+ is not\n\nTLA+ is widely deployed (AWS, MongoDB, Datadog, Kafka), but three caveats matter:\n\n1. **Model checking only goes so far.** TLC explores finite instances; proofs are needed for arbitrary sizes.\n2. **The model is not the implementation.** Spec and code can drift.\n3. **TLA+ cannot express every property.** Linear temporal logic speaks about individual executions; CTL/ATL can express branching-time and strategic properties.\n\n## From TLA+ to proofs\n\nOne route is to take the model into a modern proof system:\n\n- **Lean** is interactive and very general.\n- **Verus** is auto-active and designed around Rust; specs and proofs can live alongside the real implementation.\n- **Veil** is a Lean-based tool for state-machine models.\n\nWhy Verus? Closing the spec-to-implementation gap by proving that the implementation refines the model (as Anvil demonstrated). Safety proofs are usually inductive; liveness proofs establish progress under fairness. Much of this work is repetitive — a natural target for proof-generating agents.\n\n## From proofs to machine-checked software\n\nConnecting TLA+ models to modern proof systems and implementations opens:\n\n- Refinement proofs\n- Program synthesis from models with proofs\n- Protocol search with formal correctness as the objective\n- Richer logics beyond linear time for multi-agent systems\n\n## A sneak peek at Reasonable’s progress\n\n- A TLA+ to Verus transpiler (algorithmic vs agentic)\n- A prover–reviewer loop with anti-cheat checks\n- A dataset: from 16,459 real-world TLA+ spec/property pairs to 3,000+ machine-checked safety and liveness proofs, plus a 40-task evaluation set\n- An evaluation of closed and open-weight frontier models on temporal proofs\n\n*Source: [reasonable.io/blog/tla-tutorial](https://reasonable.io/blog/tla-tutorial/)*\n","body_html":"<h1 id=\"the-internet-discovers-tla-now-what\">The internet discovers TLA+. Now what?</h1>\n<p><em>By Anna Mészáros, Szilvia Ujváry, Kseniia Strelbytska, Balázs Szilágyi, and Ferenc Huszár — Reasonable, 25 September 2026</em></p>\n<p>Boris Cherny’s viral TLA+ tweet showed how useful formal models can be in agentic coding. This post gives a practical introduction to what TLA+ is. But TLA+ is only the starting point. We also look at how temporal specifications, modern proof systems and AI agents can fit together, from modeling system behaviour to generating machine-checked proofs, and ultimately toward software that is specified, implemented and verified in one loop.</p>\n<h2 id=\"boris-tweeteth-the-internet-copy-pasteth\">Boris tweeteth, the internet copy-pasteth</h2>\n<p>This week Boris Cherny graced TLA+, a formal modeling toolkit that is over 30 years old, with a tweet. He used Opus 5.5 to model parts of the Claude Agent SDK in TLA+ and Lean, and the internet did what it does: ~1M views, thousands of bookmarks, and people are asking what TLA+ actually is. Boris&#39;s post is a great showcase, and it adds to early examples showing that TLA+ is well worth the effort in agentic coding: see Datadog&#39;s post on harness-first agents.</p>\n<p>Here is the short version:</p>\n<ul><li>TLA+ describes possible system behaviours and the properties those behaviours should satisfy.</li><li>TLA+ itself does not fully verify an implementation. It checks a model of the software, not the software itself, and its main model checker only explores finite instances.</li><li>Modern proof systems can take us further. In Verus, specification, proof and Rust implementation can live in the same language.</li><li>AI can already automate part of this process. We built an agentic pipeline that turned 16,000+ TLA+ specification/property pairs into 3,000+ machine-checked Verus proofs.</li></ul>\n<h2 id=\"what-tla-is\">What TLA+ is</h2>\n<p>Our running example is leader election among three computers, a, b and c. Databases rely on leader election being correct. We require that no two leaders exist at the same time.</p>\n<p>TLA+ (Temporal Logic of Actions) is a language for writing down two kinds of objects:</p>\n<ul><li>A <strong>transition system</strong>: what the system can do. There are states (snapshots) and actions (single steps that change a state).</li><li><strong>Temporal properties</strong>: statements about how a run plays out over time. For example, &quot;There are never two leaders.&quot; &quot;A leader is eventually elected.&quot;</li></ul>\n<p>A TLA+ model declares legal system states and allowed transitions. Temporal properties are built from operators over executions:</p>\n<ul><li>□ P (always P): P holds in every state visited.</li><li>◇ P (eventually P): P holds in some future state.</li><li>P ⇝ Q (P leads to Q): whenever P holds, Q eventually holds afterwards.</li></ul>\n<p>Two kinds of property matter particularly often. <strong>Safety</strong>: nothing bad ever happens (□ never two leaders). <strong>Liveness</strong>: something good eventually happens (◇ someone is leader). Liveness requires fairness assumptions (weak fairness WF(A), strong fairness SF(A)).</p>\n<p>TLC, the standard TLA+ model checker, enumerates reachable states for a finite instance. A proof makes the stronger statement that the property holds in general.</p>\n<h2 id=\"what-tla-is-not\">What TLA+ is not</h2>\n<p>TLA+ is widely deployed (AWS, MongoDB, Datadog, Kafka), but three caveats matter:</p>\n<ol><li><strong>Model checking only goes so far.</strong> TLC explores finite instances; proofs are needed for arbitrary sizes.</li><li><strong>The model is not the implementation.</strong> Spec and code can drift.</li><li><strong>TLA+ cannot express every property.</strong> Linear temporal logic speaks about individual executions; CTL/ATL can express branching-time and strategic properties.</li></ol>\n<h2 id=\"from-tla-to-proofs\">From TLA+ to proofs</h2>\n<p>One route is to take the model into a modern proof system:</p>\n<ul><li><strong>Lean</strong> is interactive and very general.</li><li><strong>Verus</strong> is auto-active and designed around Rust; specs and proofs can live alongside the real implementation.</li><li><strong>Veil</strong> is a Lean-based tool for state-machine models.</li></ul>\n<p>Why Verus? Closing the spec-to-implementation gap by proving that the implementation refines the model (as Anvil demonstrated). Safety proofs are usually inductive; liveness proofs establish progress under fairness. Much of this work is repetitive — a natural target for proof-generating agents.</p>\n<h2 id=\"from-proofs-to-machine-checked-software\">From proofs to machine-checked software</h2>\n<p>Connecting TLA+ models to modern proof systems and implementations opens:</p>\n<ul><li>Refinement proofs</li><li>Program synthesis from models with proofs</li><li>Protocol search with formal correctness as the objective</li><li>Richer logics beyond linear time for multi-agent systems</li></ul>\n<h2 id=\"a-sneak-peek-at-reasonable-s-progress\">A sneak peek at Reasonable’s progress</h2>\n<ul><li>A TLA+ to Verus transpiler (algorithmic vs agentic)</li><li>A prover–reviewer loop with anti-cheat checks</li><li>A dataset: from 16,459 real-world TLA+ spec/property pairs to 3,000+ machine-checked safety and liveness proofs, plus a 40-task evaluation set</li><li>An evaluation of closed and open-weight frontier models on temporal proofs</li></ul>\n<p><em>Source: <a href=\"https://reasonable.io/blog/tla-tutorial/\" rel=\"nofollow ugc noopener\">reasonable.io/blog/tla-tutorial</a></em></p>","headings":[{"level":1,"text":"The internet discovers TLA+. Now what?","id":"the-internet-discovers-tla-now-what"},{"level":2,"text":"Boris tweeteth, the internet copy-pasteth","id":"boris-tweeteth-the-internet-copy-pasteth"},{"level":2,"text":"What TLA+ is","id":"what-tla-is"},{"level":2,"text":"What TLA+ is not","id":"what-tla-is-not"},{"level":2,"text":"From TLA+ to proofs","id":"from-tla-to-proofs"},{"level":2,"text":"From proofs to machine-checked software","id":"from-proofs-to-machine-checked-software"},{"level":2,"text":"A sneak peek at Reasonable’s progress","id":"a-sneak-peek-at-reasonable-s-progress"}]}}