{
  "slug": "zk-circuits",
  "name": "ZK circuit verification",
  "short": "circuit verification",
  "title": "ZK circuit formal verification frameworks: Clean, zkLean, Halva, Picus, LLZK and others compared",
  "summary": "Frameworks that prove or check that a zero-knowledge circuit (R1CS, PLONKish, AIR, Circom, Noir, Halo2, Cairo) does what its specification says. Proof-assistant frameworks (Clean, zkLean, Halva, sp1-lean, Garden, Lampe) produce machine-checked soundness and sometimes completeness theorems; SMT and static tools (Picus, CIVER, Circomspect, zkFuzz) find underconstrained signals automatically but do not prove absence of bugs.",
  "intro": [
    "Almost every exploitable bug found in production ZK systems is a circuit that accepts a witness it should reject. Verification of a circuit therefore centres on one question: does the set of satisfying assignments equal the set of behaviours the specification allows? Frameworks answer it at different strengths. A soundness theorem in Lean or Rocq answers it for all inputs; a uniqueness check from an SMT solver answers a narrower question (is every signal determined by the inputs?) for the circuit as compiled; a linter answers only for known patterns.",
    "The 2026 landscape has consolidated on Lean 4 for proof-assistant work, largely through the Ethereum Foundation's Verified zkEVM program, which funds Clean, zkLean, Halva, ArkLib, LLZK and several extraction pipelines. Shared infrastructure now exists: LLZK provides a common IR from Circom, Halo2 and Plonky3 frontends into Picus, zkLean and Rocq, and Clean is used as the substrate for Succinct's sp1-lean."
  ],
  "choose": [
    "Writing a new circuit and want it verified from day one: use **Clean** (AIR, PLONK, R1CS; sound and complete gadgets; Rust codegen on the roadmap) or **zkLean** (R1CS and lookup-based, Jolt-style).",
    "Verifying an existing Halo2 circuit: **Halva**. An existing Noir program: **Lampe** or **NAVe**. An existing gnark circuit: **proven-zk**. An existing Circom circuit: **Picus** or **CIVER** for automatic checks, **Garden** or **Coda** for proofs.",
    "Verifying a zkVM instruction set: **sp1-lean** (SP1, on Clean), **Clean Channels** for multi-table systems, or StarkWare's **Verified Cairo AIR** approach.",
    "Need something automatic today, proofs later: run **Picus** or **zkFuzz** now, feed the same circuits through **LLZK** into a proof backend when the specification is written.",
    "Require completeness as well as soundness (the circuit must never reject a valid input): only Clean, zk.golf submissions, Garden and CIVER's completeness mode state it explicitly; check the theorem statements of anything else."
  ],
  "tools": [
    {
      "name": "Clean",
      "page": "https://sorryfree.com/frameworks/clean/"
    },
    {
      "name": "sp1-lean",
      "page": "https://sorryfree.com/frameworks/sp1-lean/"
    },
    {
      "name": "zkLean",
      "page": "https://sorryfree.com/frameworks/zklean/"
    },
    {
      "name": "Halva",
      "page": "https://sorryfree.com/frameworks/halva/"
    },
    {
      "name": "Picus",
      "page": "https://sorryfree.com/frameworks/picus/"
    },
    {
      "name": "LLZK",
      "page": "https://sorryfree.com/frameworks/llzk/"
    },
    {
      "name": "Garden",
      "page": "https://sorryfree.com/frameworks/garden/"
    },
    {
      "name": "Lampe",
      "page": "https://sorryfree.com/frameworks/lampe/"
    },
    {
      "name": "proven-zk and gnark-lean-extractor",
      "page": "https://sorryfree.com/frameworks/proven-zk/"
    },
    {
      "name": "CIVER",
      "page": "https://sorryfree.com/frameworks/civer/"
    },
    {
      "name": "Circomspect",
      "page": "https://sorryfree.com/frameworks/circomspect/"
    },
    {
      "name": "zkFuzz",
      "page": "https://sorryfree.com/frameworks/zkfuzz/"
    },
    {
      "name": "Coda",
      "page": "https://sorryfree.com/frameworks/coda/"
    },
    {
      "name": "Ecne",
      "page": "https://sorryfree.com/frameworks/ecne/"
    },
    {
      "name": "NAVe",
      "page": "https://sorryfree.com/frameworks/nave/"
    },
    {
      "name": "Verified Cairo AIR (Stone and S-two)",
      "page": "https://sorryfree.com/frameworks/verified-cairo/"
    }
  ],
  "page": "https://sorryfree.com/categories/zk-circuits/",
  "updated": "2026-09-13"
}