Show HN: Llmll – AI agents fill typed holes, an SMT solver rejects wrong fills LLMLL (Large Language Model Logical Language), a programming language and verification pipeline whose primary author is an LLM agent, uses the Z3 SMT solver to prove each AI-written function body against its formal contract before a patch is applied, refuting type-correct but incorrect implementations. In the project's `conserve(from, to, amount)` example, a body that credits the destination one extra unit passes type-checking but fails verification with "implementation does not satisfy postcondition (constraint #0)," while the conserving body verifies as SAFE via liquid-fixpoint. The project's stated goal is to turn hallucination from a failure mode into a search strategy by having agents fill typed `?hole` contracts that `llmll patch` accepts only if the program still type-checks and the solver does not refute it. An experiment in letting AI write the code: the compiler proves each function against its contract, and refutes a type-correct but wrong body before it merges. LLMLL Large Language Model Logical Language is a programming language and verification pipeline built for experiments in which AI agents write code under formal contracts. Its primary author is an LLM agent, not a human: contracts state what a function must do, agents fill typed holes, and the compiler proves each body against its contract with Z3 before the patch is applied. Agents coordinate through those contracts, not through conversation. An agent can hallucinate an implementation and that's fine, as long as it satisfies the contract: verification turns hallucination from a failure mode into a search strategy generate a candidate, check it against the spec, accept or reject . Current version: see CHANGELOG.md § Latest https://github.com/machunter/llmll/blob/main/CHANGELOG.md Latest . Full release notes per version live in CHANGELOG; this README does not duplicate them. Learn more: docs/README.md https://github.com/machunter/llmll/blob/main/docs/README.md is the reading guide to the documentation · ROADMAP.md https://github.com/machunter/llmll/blob/main/ROADMAP.md says what has shipped and what is next · experiments/README.md https://github.com/machunter/llmll/blob/main/experiments/README.md indexes the experiments and their results. conserve from, to, amount returns both post-transfer balances, and its contract ties them together: first result + second result = from + to : the total is conserved, full stop. A deliberately wrong body that credits the destination one unit extra is type-correct and looks harmless on inspection, but it breaks conservation, and the SMT solver refutes it: body: pair - from amount + to + amount 1 ← type-correct, creates money $ llmll verify conserve-bad.llmll error: body verification of 'conserve-bad' failed — implementation does not satisfy postcondition constraint 0 body: pair - from amount + to amount ← correct, conserves the sum $ llmll verify conserve.llmll ✅ conserve.llmll — SAFE liquid-fixpoint The proof is over both return values at once: a relational invariant, not a bound on one number. The wrong body above is scripted to show the check firing; no agent produced it. Dafny, Liquid Haskell or F would refute it too; what LLMLL adds is the loop around the proof, below why-not-have-an-agent-write-dafny-liquid-haskell-or-f .