{"slug": "cbmc", "name": "CBMC", "category": "other", "category_name": "Other software", "description": "", "recommenders": 4, "commenters": 6, "warners": 0, "score": 3.948, "rising": -1.31, "first": "2025-12-02", "latest": "2026-10-25", "why": "I use C and C++ model checkers, like cbmc and its variants (esbmc) successfully", "why_is_quote": true, "has_verdict": false, "sentiment": {"recommend": 4, "neutral": 2, "compare": 0, "warn": 0}, "spark": [0, 3, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0], "listed": true, "loved": [], "caveat": "", "short_quote": "I use C and C++ model checkers, like cbmc and its variants (esbmc) successfully", "kind": "", "icon": false, "domain": "cprover.org", "github_repo": null, "official_url": "https://www.cprover.org/cbmc/", "pricing": "", "aliases": ["CBMC"], "verdict": null, "praise": [{"label": "", "summary": "", "quotes": [{"id": 785948704, "item_id": 49121794, "url": "https://news.ycombinator.com/item?id=49121794", "by": "touisteur", "date": "2026-07-31", "stance": "recommend", "quote": "GOTO is back ! So glad to see CBMC used.", "excerpt": "GOTO is back ! So glad to see CBMC used. I used to write translators to GOTO for simple code checking and was wondering where the recent state of the art was. Thanks for the pointers. Did you have a look at why3 and generating verification conditions from Rust or C code (as frama-c does) ?", "context": "", "use_case": "code verification", "switched_from": "", "story": "Why Don't People Use Formal Methods?"}, {"id": 740826464, "item_id": 46301654, "url": "https://news.ycombinator.com/item?id=46301654", "by": "rurban", "date": "2025-12-17", "stance": "recommend", "quote": "I use C and C++ model checkers, like cbmc and its variants (esbmc) successfully", "excerpt": "That's what we use when we can limit our loop count and recursion depth somehow. Prove it for small data, and infer from it for big data. I use C and C++ model checkers, like cbmc and its variants (esbmc) successfully, but you need to adjust your tests and loops a bit. Like #ifdef __VERIFIER__ or #ifdef __CPROVER__ https://diffblue.github.io/cbmc/cprover-manual/index.html", "context": "", "use_case": "bounded model checking C/C++", "switched_from": "", "story": "Dafny: Verification-Aware Programming Language"}, {"id": 737962128, "item_id": 46122633, "url": "https://news.ycombinator.com/item?id=46122633", "by": "throw-qqqqq", "date": "2025-12-02", "stance": "recommend", "quote": "CBMC and KLEE try to statically verify assertions", "excerpt": "I can't give a good, covering answer without writing a wall of text, sorry in advance. CBMC and KLEE try to statically verify assertions in one of three outcomes: 1. Verified: No counter-example was found, that breaks the assertion(s). 2. Rejected: A counter-example was found, that makes an assertion false. 3. Tool runs forever or exhausts system resources. That means, any test/verification you can do at runtime, can", "context": "", "use_case": "Static verification of C", "switched_from": "", "story": "Coq: The World's Best Macro Assembler? (2013) [pdf]"}]}], "caveats": [], "who": [{"by": "nanolith", "context": "formally verifies C software", "url": "https://news.ycombinator.com/item?id=46252770", "date": "2025-12-12"}], "tags": [], "use_cases": ["bounded model checking for c", "code verification", "formal verification", "bounded model checking c/c++", "static verification of c"], "compared": [], "makers": [], "threads": [{"url": "https://news.ycombinator.com/item?id=50223777", "title": "Bbtree: Fastest Ordered Map", "mentions": 1}, {"url": "https://news.ycombinator.com/item?id=49109026", "title": "Why Don't People Use Formal Methods?", "mentions": 1}, {"url": "https://news.ycombinator.com/item?id=47601858", "title": "Ask HN: Who wants to be hired? (April 2026)", "mentions": 1}, {"url": "https://news.ycombinator.com/item?id=46295792", "title": "Dafny: Verification-Aware Programming Language", "mentions": 1}, {"url": "https://news.ycombinator.com/item?id=46251667", "title": "The Coming Need for Formal Specification", "mentions": 1}, {"url": "https://news.ycombinator.com/item?id=46065698", "title": "Coq: The World's Best Macro Assembler? (2013) [pdf]", "mentions": 1}], "sentiment_by_month": {"2025-11": {}, "2025-12": {"recommend": 3}, "2026-01": {}, "2026-02": {}, "2026-03": {}, "2026-04": {"neutral": 1}, "2026-05": {}, "2026-06": {}, "2026-07": {"recommend": 1}, "2026-08": {}, "2026-09": {}, "2026-10": {"neutral": 1}}, "quotes": [{"id": 803643376, "item_id": 50227711, "url": "https://news.ycombinator.com/item?id=50227711", "by": "aw1621107", "date": "2026-10-25", "stance": "neutral", "quote": "C Bounded Model Checker [0] is a relatively well-known instance in the niche.", "excerpt": "My guess is https://en.wikipedia.org/wiki/Model_checking . C Bounded Model Checker [0] is a relatively well-known instance in the niche. [0]: https://www.cprover.org/cbmc/", "context": "", "use_case": "Bounded model checking for C", "switched_from": "", "story": "Bbtree: Fastest Ordered Map"}, {"id": 785948704, "item_id": 49121794, "url": "https://news.ycombinator.com/item?id=49121794", "by": "touisteur", "date": "2026-07-31", "stance": "recommend", "quote": "GOTO is back ! So glad to see CBMC used.", "excerpt": "GOTO is back ! So glad to see CBMC used. I used to write translators to GOTO for simple code checking and was wondering where the recent state of the art was. Thanks for the pointers. Did you have a look at why3 and generating verification conditions from Rust or C code (as frama-c does) ?", "context": "", "use_case": "code verification", "switched_from": "", "story": "Why Don't People Use Formal Methods?"}, {"id": 761809141, "item_id": 47613071, "url": "https://news.ycombinator.com/item?id=47613071", "by": "renoir42", "date": "2026-04-02", "stance": "neutral", "quote": "TLA+/PlusCal/CBMC formal verification", "excerpt": "Location: Seoul, South Korea & Le Mans, France Remote: Yes (EU & Asia \u2014 Seoul/Tokyo TZ preferred) Willing to relocate: Yes Technologies: C++ (primary \u2014 C++17/20, lock-free/wait-free, SIMD, CUDA, kernel-bypass networking), Rust, Go, Python (PyTorch/NumPy/Numba), Haskell, OCaml, Elixir/Erlang, Julia, VHDL \"with tools\" (that I have developed/ am developing). TLA+/PlusCal/CBMC formal verification \"with help\". R\u00e9sum\u00e9/CV: ", "context": "", "use_case": "Formal verification", "switched_from": "", "story": "Ask HN: Who wants to be hired? (April 2026)"}, {"id": 740826464, "item_id": 46301654, "url": "https://news.ycombinator.com/item?id=46301654", "by": "rurban", "date": "2025-12-17", "stance": "recommend", "quote": "I use C and C++ model checkers, like cbmc and its variants (esbmc) successfully", "excerpt": "That's what we use when we can limit our loop count and recursion depth somehow. Prove it for small data, and infer from it for big data. I use C and C++ model checkers, like cbmc and its variants (esbmc) successfully, but you need to adjust your tests and loops a bit. Like #ifdef __VERIFIER__ or #ifdef __CPROVER__ https://diffblue.github.io/cbmc/cprover-manual/index.html", "context": "", "use_case": "bounded model checking C/C++", "switched_from": "", "story": "Dafny: Verification-Aware Programming Language"}, {"id": 740044320, "item_id": 46252770, "url": "https://news.ycombinator.com/item?id=46252770", "by": "nanolith", "date": "2025-12-12", "stance": "recommend", "quote": "", "excerpt": "I have been formally verifying software written in C for a while now. > is that only for some problems is the specification simpler than the code. Indeed. I had to fall back to using a proof assistant to verify the code used to build container algorithms (e.g. balanced binary trees) because the problem space gets really difficult in SAT when needing to verify, for instance, memory safety for any arbitrary container o", "context": "formally verifies C software", "use_case": "", "switched_from": "", "story": "The Coming Need for Formal Specification"}, {"id": 737962128, "item_id": 46122633, "url": "https://news.ycombinator.com/item?id=46122633", "by": "throw-qqqqq", "date": "2025-12-02", "stance": "recommend", "quote": "CBMC and KLEE try to statically verify assertions", "excerpt": "I can't give a good, covering answer without writing a wall of text, sorry in advance. CBMC and KLEE try to statically verify assertions in one of three outcomes: 1. Verified: No counter-example was found, that breaks the assertion(s). 2. Rejected: A counter-example was found, that makes an assertion false. 3. Tool runs forever or exhausts system resources. That means, any test/verification you can do at runtime, can", "context": "", "use_case": "Static verification of C", "switched_from": "", "story": "Coq: The World's Best Macro Assembler? (2013) [pdf]"}]}