<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Hacker News: igornotarobot</title><link>https://news.ycombinator.com/user?id=igornotarobot</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Wed, 29 Jul 2026 07:19:28 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=igornotarobot" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by igornotarobot in "Hunting a 16-year-old SQLite WAL bug with TLA+"]]></title><description><![CDATA[
<p>If the LaTeX-like syntax worries you, several projects aimed at providing PL-like syntaxes for TLA+. They vary by their degree of how much of the logic they throw away. I am not going to advertise these projects here, but you would find them on GitHub search by typing the tags like "#tlaplus #language", "#tlaplus #library", and "#tlaplus #pluscal".</p>
]]></description><pubDate>Sat, 04 Jul 2026 09:33:15 +0000</pubDate><link>https://news.ycombinator.com/item?id=48784086</link><dc:creator>igornotarobot</dc:creator><comments>https://news.ycombinator.com/item?id=48784086</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48784086</guid></item><item><title><![CDATA[New comment by igornotarobot in "I Built a Scheme Compiler with AI in 4 Days"]]></title><description><![CDATA[
<p>I have fixed the target data structures and also make Claude compare the generated code against a python reference via PBT. However, the vibe-coded code generator stumbles upon a missed clone/copy case every now and then. This is where I am less certain that it converges.</p>
]]></description><pubDate>Sun, 01 Mar 2026 19:18:01 +0000</pubDate><link>https://news.ycombinator.com/item?id=47209738</link><dc:creator>igornotarobot</dc:creator><comments>https://news.ycombinator.com/item?id=47209738</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47209738</guid></item><item><title><![CDATA[New comment by igornotarobot in "I Built a Scheme Compiler with AI in 4 Days"]]></title><description><![CDATA[
<p>> I run into bugs all the time so it’s probably not ready for anyone other than me to use, but I’ve managed to go pretty deep (if not wide) in just a few days of work.<p>Having similar experience with my experimental code generator to Rust. Every time a yet another example does not work, Claude fixes it. However, I am curious whether it would converge to a bullet-proof solution, or I have to carefully read the code and come up with proper abstractions.</p>
]]></description><pubDate>Sun, 01 Mar 2026 17:48:11 +0000</pubDate><link>https://news.ycombinator.com/item?id=47208918</link><dc:creator>igornotarobot</dc:creator><comments>https://news.ycombinator.com/item?id=47208918</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47208918</guid></item><item><title><![CDATA[New comment by igornotarobot in "Litex: Formal math for everyone – set theory examples with Lean comparison"]]></title><description><![CDATA[
<p>Litex is probably closer to TLA+ than to Lean. Both draw inspiration from untyped set theory and LaTeX.</p>
]]></description><pubDate>Thu, 25 Dec 2025 11:16:27 +0000</pubDate><link>https://news.ycombinator.com/item?id=46383715</link><dc:creator>igornotarobot</dc:creator><comments>https://news.ycombinator.com/item?id=46383715</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46383715</guid></item><item><title><![CDATA[New comment by igornotarobot in "Beginning January 2026, all ACM publications will be made open access"]]></title><description><![CDATA[
<p>> Just friendly remember that Open access publishing is the new business model that is more lucrative for publishing industry and it is basically a tax on research activities but paid to private entities and mostly paid by taxpayer money...<p>While I do not disagree with this statement, this makes a significant difference for the citizens who do not happen to work in academia. Before open access, the journals would try to charge me $30-50 per article, which is ridiculous, it's a price of a textbook. Since my taxes fund public research in any case, I would prefer to be able to read the papers.<p>I would also love to be able to watch the talks at academic conferences, which are, to very large extent, paid by the authors, too.</p>
]]></description><pubDate>Thu, 18 Dec 2025 17:09:26 +0000</pubDate><link>https://news.ycombinator.com/item?id=46315485</link><dc:creator>igornotarobot</dc:creator><comments>https://news.ycombinator.com/item?id=46315485</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46315485</guid></item><item><title><![CDATA[New comment by igornotarobot in "AI will make formal verification go mainstream"]]></title><description><![CDATA[
<p>It probably will, but not the way we all imagine. What we see now is an attempt to recycle the interactive provers that took decades to develop. Writing code, experimenting with new ideas and getting feedback has always been a very slow process in academia. Getting accepted at a top peer-reviewed conference takes months and even years. The essential knowledge is hidden inside big corps that only promote their "products" and rarely give the knowledge back.<p>LLMs enable code bootstrapping and experimentation faster not only for the vibe coders, but also for the researchers, many of them are not really good coders, btw. It may well be that we will see new wild verification tools soon that come as a result of quick iteration with LLMs.<p>For example, I recently wrote an experimental distributed bug finder for TLA+ with Claude in about three weeks. A couple of years ago that effort would require three months and a team of three people.</p>
]]></description><pubDate>Wed, 17 Dec 2025 11:37:26 +0000</pubDate><link>https://news.ycombinator.com/item?id=46300850</link><dc:creator>igornotarobot</dc:creator><comments>https://news.ycombinator.com/item?id=46300850</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46300850</guid></item><item><title><![CDATA[New comment by igornotarobot in "AI will make formal verification go mainstream"]]></title><description><![CDATA[
<p>Afaik, formal verification worked well for hardware because most of the things in hardware were deterministic and could be captured precisely. Most of the software these days is concurrent and distributed. Does the LLM + RL approach work for concurrent and distributed code? We barely know how to do systematic simulation there.</p>
]]></description><pubDate>Wed, 17 Dec 2025 11:05:55 +0000</pubDate><link>https://news.ycombinator.com/item?id=46300590</link><dc:creator>igornotarobot</dc:creator><comments>https://news.ycombinator.com/item?id=46300590</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46300590</guid></item><item><title><![CDATA[New comment by igornotarobot in "AI will make formal verification go mainstream"]]></title><description><![CDATA[
<p>This sounds amazing! What kind of systems take you a few hours to a few days now? Just curious whether it works in a niche (like sequential code), or does it work for concurrent and distributed systems as well?</p>
]]></description><pubDate>Wed, 17 Dec 2025 10:31:34 +0000</pubDate><link>https://news.ycombinator.com/item?id=46300301</link><dc:creator>igornotarobot</dc:creator><comments>https://news.ycombinator.com/item?id=46300301</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46300301</guid></item><item><title><![CDATA[New comment by igornotarobot in "AI will make formal verification go mainstream"]]></title><description><![CDATA[
<p>> TLA+ is not a silver bullet, and like all temporal logic, has constraints.
>
> You really have to be able to reduce your models to: “at some point in the future, this will happen," or "it will always be true from now on”<p>I think people get confused by the word "temporal" in the name of TLA+. Yes, it has temporal operators. If you throw them away, TLA+ (minus the temporal operators) would be still extremely useful for specifying the behavior of concurrent and distributed systems. I have been using TLA+ for writing specifications of distributed algorithms (e.g., distributed consensus) and checking them for about 6 years now. The question of liveness comes the last, and even then, the standard temporal logics are barely suitable for expressing liveness under partial synchrony. The value of temporal properties in TLA+ is overrated.</p>
]]></description><pubDate>Wed, 17 Dec 2025 09:41:28 +0000</pubDate><link>https://news.ycombinator.com/item?id=46299957</link><dc:creator>igornotarobot</dc:creator><comments>https://news.ycombinator.com/item?id=46299957</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46299957</guid></item><item><title><![CDATA[New comment by igornotarobot in "AI will make formal verification go mainstream"]]></title><description><![CDATA[
<p>> TLA+ can specify anything that could be specified in mathematics.<p>You are talking about the logic of TLA+, that is, its mathematical definition. No tool for TLA+ can handle all of mathematics at the moment. The language was designed for specifying systems, not all of mathematics.</p>
]]></description><pubDate>Wed, 17 Dec 2025 09:28:21 +0000</pubDate><link>https://news.ycombinator.com/item?id=46299891</link><dc:creator>igornotarobot</dc:creator><comments>https://news.ycombinator.com/item?id=46299891</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46299891</guid></item><item><title><![CDATA[New comment by igornotarobot in "AI will make formal verification go mainstream"]]></title><description><![CDATA[
<p>TLA+ is just a language for writing specifications (syntax + semantics). If you want to prove anything about it, at various degrees of confidence and effort, there are three tools:<p>- TLAPS is the interactive proof system that can automate some proof steps by delegating to SMT solvers: <a href="https://proofs.tlapl.us/doc/web/content/Home.html" rel="nofollow">https://proofs.tlapl.us/doc/web/content/Home.html</a><p>- Apalache is the symbolic model checker that delegates verification to Z3. It can prove properties without executing anything, or rather, executing specs symbolically. For instance, it can do proofs via inductive invariants but only for bounded data structures and unbounded integers. <a href="https://apalache-mc.org/" rel="nofollow">https://apalache-mc.org/</a><p>- Finally, TLC is an enumerative model checker and simulator. It simply produces states and enumerates them. So it terminates only if the specification produces a finite number of states. It may sound like executing your specification, but it is a bit smarter, e.g., when checking invariants it will never visit the same state twice. This gives TLC the ability to reason about infinite executions. Confusingly, TLC does not have its own page, as it was the first working tool for TLA+. Many people believe that TLA+ is TLC: <a href="https://github.com/tlaplus/tlaplus" rel="nofollow">https://github.com/tlaplus/tlaplus</a></p>
]]></description><pubDate>Wed, 17 Dec 2025 09:21:11 +0000</pubDate><link>https://news.ycombinator.com/item?id=46299847</link><dc:creator>igornotarobot</dc:creator><comments>https://news.ycombinator.com/item?id=46299847</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46299847</guid></item><item><title><![CDATA[New comment by igornotarobot in "The Coming Need for Formal Specification"]]></title><description><![CDATA[
<p>Producing positive and negative examples is exactly where model checkers shine. I always write "falsy" invariants to produce examples of the specification reaching interesting control states for at least one input. After that, I think about the system boundaries and where it should break. Then, the model checker shows that it indeed breaks there.<p>Having a specification does not mean that one should not touch it. It is just a different level of experimental thinking.</p>
]]></description><pubDate>Sat, 13 Dec 2025 11:54:49 +0000</pubDate><link>https://news.ycombinator.com/item?id=46253933</link><dc:creator>igornotarobot</dc:creator><comments>https://news.ycombinator.com/item?id=46253933</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46253933</guid></item><item><title><![CDATA[New comment by igornotarobot in "A High-Level View of TLA+"]]></title><description><![CDATA[
<p>It should be possible to write protocol specifications in Lean, e.g., this is a recent case study on specifying two-phase commit in Lean [1] and proving its safety [2].<p>However, there are no model checkers for Lean. Currently, you either have to write a full proof by hand, with some assistance from LLMs, or rely on random simulation, similar to property-based testing.<p>[1] <a href="https://protocols-made-fun.com/lean/2025/04/25/lean-two-phase.html" rel="nofollow">https://protocols-made-fun.com/lean/2025/04/25/lean-two-phas...</a>
[2] <a href="https://protocols-made-fun.com/lean/2025/05/10/lean-two-phase-proofs.html" rel="nofollow">https://protocols-made-fun.com/lean/2025/05/10/lean-two-phas...</a></p>
]]></description><pubDate>Tue, 03 Jun 2025 14:14:31 +0000</pubDate><link>https://news.ycombinator.com/item?id=44170400</link><dc:creator>igornotarobot</dc:creator><comments>https://news.ycombinator.com/item?id=44170400</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44170400</guid></item><item><title><![CDATA[New comment by igornotarobot in "The Future of TLA+ [pdf]"]]></title><description><![CDATA[
<p>When you say peer reviews, do you mean academic publications or testimonials? I imagine it would be difficult to publish a paper at an academic conference proposing an alternative syntax for anything, even if it were better.</p>
]]></description><pubDate>Fri, 30 Aug 2024 16:29:35 +0000</pubDate><link>https://news.ycombinator.com/item?id=41402252</link><dc:creator>igornotarobot</dc:creator><comments>https://news.ycombinator.com/item?id=41402252</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=41402252</guid></item><item><title><![CDATA[New comment by igornotarobot in "The Future of TLA+ [pdf]"]]></title><description><![CDATA[
<p>I believe this is really the tragedy of formal verification tools. Everybody wants a tool as robust as a compiler. At the same time, nobody wants to invest into development of such tools. Microsoft Research 20 years ago was probably an exception to that. The other companies wish to immediately hide these tools and the benchmarks behind the IP and closed source. As a result, we have early stage MVPs that are developed by 1-3 people.</p>
]]></description><pubDate>Fri, 30 Aug 2024 16:23:28 +0000</pubDate><link>https://news.ycombinator.com/item?id=41402175</link><dc:creator>igornotarobot</dc:creator><comments>https://news.ycombinator.com/item?id=41402175</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=41402175</guid></item><item><title><![CDATA[New comment by igornotarobot in "TLA+"]]></title><description><![CDATA[
<p>Depending on the problem that you are trying to solve with TLA+, you may prefer one encoding or another. For instance, here is one encoding for the proof system: <a href="https://hal.archives-ouvertes.fr/hal-01768750/" rel="nofollow">https://hal.archives-ouvertes.fr/hal-01768750/</a>. And here is another encoding for model checking: <a href="https://dl.acm.org/doi/10.1145/3360549" rel="nofollow">https://dl.acm.org/doi/10.1145/3360549</a></p>
]]></description><pubDate>Mon, 08 Mar 2021 18:07:31 +0000</pubDate><link>https://news.ycombinator.com/item?id=26389223</link><dc:creator>igornotarobot</dc:creator><comments>https://news.ycombinator.com/item?id=26389223</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=26389223</guid></item><item><title><![CDATA[New comment by igornotarobot in "Software Verification and Analysis Using Z3"]]></title><description><![CDATA[
<p>True. There are many frontends for Z3 that focus on various domains. For instance, those developed at Microsoft:<p>- Dafny: <a href="https://www.microsoft.com/en-us/research/project/dafny-a-language-and-program-verifier-for-functional-correctness/" rel="nofollow">https://www.microsoft.com/en-us/research/project/dafny-a-lan...</a><p>- Coral: <a href="https://www.microsoft.com/en-us/research/project/q-program-verifier/" rel="nofollow">https://www.microsoft.com/en-us/research/project/q-program-v...</a><p>- Ivy: <a href="https://github.com/microsoft/ivy" rel="nofollow">https://github.com/microsoft/ivy</a></p>
]]></description><pubDate>Sun, 31 Jan 2021 09:09:29 +0000</pubDate><link>https://news.ycombinator.com/item?id=25977323</link><dc:creator>igornotarobot</dc:creator><comments>https://news.ycombinator.com/item?id=25977323</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=25977323</guid></item><item><title><![CDATA[New comment by igornotarobot in "Modeling TLA+ in Z3Py"]]></title><description><![CDATA[
<p>> Of course decidability is desirable, but efficient sound procedures in the undecidable case would still solve many practical problems. I realize they are not as "nice" from a theoretical/academic standpoint, though.<p>This is interesting, because undecidability of SMT theories is a very practical issue. Actually, many people in academia have this point of view that solving many practical problems is useful. It helps us to drive research progress, but it is a completely useless metric for industry. What is better: (1) a tool that wins a competition by solving X out of Y benchmarks, (2) or a tool that solves your problem? In academia, (1) is a clear winner, as it gives you a free way to publish a paper, modulo peer review. In industry, you don't care about (1), because you have exactly 1 (one!) benchmark that is important for you, that is, case (2).<p>Imagine a compiler that works on 85% of syntactically-correct (and well-typed) programs, and you never know when it would hang on your code. This is exactly the behavior of SMT solvers when you start using quantifiers. By knowing the internals of SMT and its techniques, you can quite often work around these problems. However, TLA+ users do not want to know the guts of SMT; why would they? This is why Apalache implements a quantifier-free encoding. Sometimes, it hits us badly, but it is somewhat more predictable. Ivy does it differently, by providing the user with a language that is actually quite close to the theories implemented in z3. While it gives the user a finer control over the SMT constraints, the user has to understand first-order logic much better than in case of Apalache.</p>
]]></description><pubDate>Tue, 22 Dec 2020 09:15:40 +0000</pubDate><link>https://news.ycombinator.com/item?id=25504435</link><dc:creator>igornotarobot</dc:creator><comments>https://news.ycombinator.com/item?id=25504435</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=25504435</guid></item><item><title><![CDATA[New comment by igornotarobot in "Modeling TLA+ in Z3Py"]]></title><description><![CDATA[
<p>> Other examples would be checking liveness properties in the unbounded case, and possibly full Linear Temporal Logic, e.g., <>[]p ("eventually, property p is always satisfied").
I realize this is a tall order, but I think nuXmv [1] already implements some kind of SMT-based LTL model checking, so it should be possible to achieve something similar for TLA+ (or at least a subset).<p>There are several issues regarding liveness:<p>1. Afaik, NuSMV implements the standard propositional encoding of lasso detection with SAT [1], which should also work SMT (when we can guarantee that the transition system is finite). While I am sure this is the case for NuSMV, it is a bit of guessing in case of nuXmv as it is available in binaries, and its default license prohibits industrial use. Although the encoding [1] is linear in the formula size, it is still producing a lot of constraints. Unfortunately, practical TLA+ specifications are very heavy on fairness constraints (WF and SF), which are actually expressed as formulas over []<>p and <>[]q. So we first have to make Apalache scale to bounded model checking of safety, before trying it in a much harder setting.<p>2. Apalache also supports integer constants (under some syntactic assumptions), e.g., one can write \E x \in Int: P. While this makes Apalache quite useful in reasoning about timestamps, such specifications are infinite-state. That requires generalized liveness-to-safety reductions, such as the one implemented in Ivy.<p>3. Finally, distributed systems quite often require non-standard liveness. For instance, it is often the case that messages should be delivered within a predefined time interval. While we can model these systems by writing LTL formulas, this usually leads to huge LTL formulas, so see point 1. Moreover, some distributed systems have only probabilistic liveness guarantees. In this setting, the benefit of LTL is less obvious than the benefit of safety checking. It may be easier and more efficient to write a liveness monitor by hand, rather than rely on an automatically generated one, which will for sure explode.<p>[1] Armin Biere, Keijo Heljanko, Tommi A. Junttila, Timo Latvala, Viktor Schuppan:
Linear Encodings of Bounded LTL Model Checking. Log. Methods Comput. Sci. 2(5) (2006)</p>
]]></description><pubDate>Tue, 22 Dec 2020 08:50:57 +0000</pubDate><link>https://news.ycombinator.com/item?id=25504302</link><dc:creator>igornotarobot</dc:creator><comments>https://news.ycombinator.com/item?id=25504302</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=25504302</guid></item><item><title><![CDATA[New comment by igornotarobot in "Modeling TLA+ in Z3Py"]]></title><description><![CDATA[
<p>Just curious, what more complex properties do you like to be supported in Apalache? Many tools that are built on top of z3 are checking inductive invariants. By having a strong enough inductive invariant, you should be able to check safety.<p>If you like to check your specification for arbitrary parameters, then you will have to use quantifiers in z3, which would require a lot of care to write SMT constraints in a way that helps z3 to deal with the quantifiers. The mix of sets and cardinalities is especially hard for SMT. Although academia is making a lot of progress in this direction, e.g., see [1], the mainstream solvers are still leaving you with the problem of encoding sets and cardinalities all by yourself.<p>Some provers use quantifiers in z3. For instance, IVy [1] can check inductive invariants of systems that have arbitrary size. However, you have to rewrite your specification in uninterpreted first-order logic, e.g., you would have to think about abstracting away integers. Moreover, to make invariant checking decidable, you would have to transform your specification into a special fragment that is called EPR.<p>[1] Ruzica Piskac. Efficient Automated Reasoning About Sets and Multisets with Cardinality Constraints. VMCAI, 2020. <a href="https://link.springer.com/chapter/10.1007%2F978-3-030-51074-9_1" rel="nofollow">https://link.springer.com/chapter/10.1007%2F978-3-030-51074-...</a><p>[2] <a href="http://microsoft.github.io/ivy/" rel="nofollow">http://microsoft.github.io/ivy/</a></p>
]]></description><pubDate>Mon, 21 Dec 2020 19:36:55 +0000</pubDate><link>https://news.ycombinator.com/item?id=25498539</link><dc:creator>igornotarobot</dc:creator><comments>https://news.ycombinator.com/item?id=25498539</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=25498539</guid></item></channel></rss>