<!-- mobian-agent-page publisher="dailydev" canonical="https://daily.dev/posts/securing-the-agentic-era-introducing-formal-verification-for-cel-fpythtftu" -->

---
title: Securing the agentic era: Introducing formal...
description: Google's Common Expression Language (CEL) now has a Formal Verification Framework powered by the Z3 theorem prover, letting developers mathematically prove the...
canonical: https://daily.dev/posts/securing-the-agentic-era-introducing-formal-verification-for-cel-fpythtftu
twitter:card: summary_large_image
twitter:site: @dailydotdev
og:type: website
og:site_name: daily.dev
og:title: Securing the agentic era: Introducing formal verification for CEL | daily.dev
og:description: Google's Common Expression Language (CEL) now has a Formal Verification Framework powered by the Z3 theorem prover, letting developers mathematically prove the...
og:url: https://daily.dev/posts/securing-the-agentic-era-introducing-formal-verification-for-cel-fpythtftu
og:image: https://api.daily.dev/og/posts/fPytHTftu.png
og:image:alt: Securing the agentic era: Introducing formal verification for CEL
og:image:width: 1200
og:image:height: 630
og:locale: en
---

> ## Documentation Index
> Fetch the complete documentation index at: https://daily.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# Securing the agentic era: Introducing formal verification for CEL

**[Google Open Source Blog](https://daily.dev/sources/googleoss)** · 5 min read · 1 upvotes · 0 comments

## Summary

Google's Common Expression Language (CEL) now has a Formal Verification Framework powered by the Z3 theorem prover, letting developers mathematically prove the correctness and security of CEL expressions and policies. It targets the risk of AI agents autonomously authoring or refactoring policies where unit tests can't cover every possible input. The framework supports equivalence checks (verifying refactors preserve behavior), validity checks (proving a condition holds for all inputs), and invariant checks on CEL policies using assume/assert blocks, with examples showing how it catches operator-precedence bugs, incomplete port-range guardrails, and privilege-escalation flaws. It uses three-pass taint tracking to avoid false positives and bounded-model checking to control verification cost, and is available now via a REPL and GitHub repo for integration into CI/CD pipelines.

## Full article

daily.dev links to this article rather than hosting it. Read it at the original source: <http://opensource.googleblog.com/2026/08/securing-the-agentic-era-introducing-formal-verification-for-cel.html>

## Questions this post answers

### How can I formally verify that a refactored CEL expression behaves the same as the original?

Use the CEL Formal Verification Framework's equivalence checking with the 'equiv' syntax in the verifier REPL, which is powered by the Z3 theorem prover. It compares two expressions and reports 'Violated' with a concrete counterexample input if they diverge, or 'Verified' if they are provably equal across all inputs, catching subtle bugs like operator precedence errors in AND/OR grouping.

_Teams proving policy equivalence during AI-assisted refactors can track tooling changes like this via daily.dev._

### How does the CEL verifier avoid false positives when checking custom domain-specific functions?

It uses three-pass taint tracking: if a potential issue depends on an unmapped custom function or external variable the verifier doesn't fully understand, it isolates that part and reports the result as 'Inconclusive' instead of a false 'Violation'. This design guarantees that every reported Violation is a real, reproducible bug rather than a solver hallucination.

_Developers evaluating verification tools for CI pipelines can follow this kind of tooling detail on daily.dev._

### How can I write security invariants for a CEL policy that checks admission rules with assume and assert blocks?

Define an 'assume' block listing preconditions such as 'request.has_approval == false' and 'variables.is_admin == false', then an 'assert' block stating the required outcome such as 'rule.result == false'. The verifier proves the implication holds for all inputs or returns a concrete counterexample, such as a privileged production request lacking approval that still gets admitted.

_Engineers securing admission policies against AI-generated changes can track examples like this on daily.dev._

## Similar posts on daily.dev

- [Building a native C\# implementation of CEL engine](https://daily.dev/posts/building-a-native-c-implementation-of-cel-engine-wk392nkpt) · Hacker News · 0 upvotes · 0 comments
- [Prediction: AI will make formal verification go mainstream — Martin Kleppmann’s blog](https://daily.dev/posts/prediction-ai-will-make-formal-verification-go-mainstream-martin-kleppmann-s-blog-j1btzfnpe) · Lobsters · 2 upvotes · 0 comments
- [Announcing CEL-expr-python: the Common Expression Language in Python, now open source](https://daily.dev/posts/announcing-cel-expr-python-the-common-expression-language-in-python-now-open-source-wuz9idgyf) · Google Open Source Blog · 0 upvotes · 0 comments

---

Tags: [#ai-agents](https://daily.dev/tags/ai-agents), [#policy-as-code](https://daily.dev/tags/policy-as-code)

[View this post on daily.dev](https://daily.dev/posts/securing-the-agentic-era-introducing-formal-verification-for-cel-fpythtftu)

```json
{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://daily.dev/#organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180},"sameAs":["https://twitter.com/dailydotdev","https://github.com/dailydotdev","https://www.linkedin.com/company/daily-dev-ltd"]},{"@type":"WebSite","@id":"https://daily.dev/#website","url":"https://daily.dev","name":"daily.dev","publisher":{"@id":"https://daily.dev/#organization"},"potentialAction":{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://daily.dev/search?q={search_term_string}"},"query-input":"required name=search_term_string"}}]}
{"@context":"https://schema.org","@type":"TechArticle","headline":"Securing the agentic era: Introducing formal verification for CEL","url":"https://daily.dev/posts/securing-the-agentic-era-introducing-formal-verification-for-cel-fpythtftu","mainEntityOfPage":{"@type":"WebPage","@id":"https://daily.dev/posts/securing-the-agentic-era-introducing-formal-verification-for-cel-fpythtftu"},"datePublished":"2026-08-18T20:49:47.073Z","dateModified":"2026-09-14T07:18:01.310Z","description":"Google's Common Expression Language (CEL) now has a Formal Verification Framework powered by the Z3 theorem prover, letting developers mathematically prove the...","image":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/70e9ad4634a5b8c81114b721185343c0?_a=AQAEuop","thumbnailUrl":"https://media.daily.dev/image/upload/f_auto,q_auto/v1/posts/70e9ad4634a5b8c81114b721185343c0?_a=AQAEuop","isAccessibleForFree":true,"articleSection":"Google Open Source Blog","inLanguage":"en","publisher":{"@type":"Organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180}},"author":{"@type":"Organization","name":"Google Open Source Blog","logo":"https://media.daily.dev/image/upload/t_logo,f_auto/v1/logos/8a87f457bf1a481b80c313f66a71200b","url":"https://daily.dev/sources/googleoss"},"commentCount":0,"discussionUrl":"https://daily.dev/posts/securing-the-agentic-era-introducing-formal-verification-for-cel-fpythtftu","interactionStatistic":[{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":1},{"@type":"InteractionCounter","interactionType":{"@type":"CommentAction"},"userInteractionCount":0}],"keywords":"ai-agents,policy-as-code","timeRequired":"PT5M"}
{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://daily.dev"},{"@type":"ListItem","position":2,"name":"Google Open Source Blog","item":"https://daily.dev/sources/googleoss"},{"@type":"ListItem","position":3,"name":"Securing the agentic era: Introducing formal verification for CEL"}]}
{"@context":"https://schema.org","@type":"FAQPage","@id":"https://daily.dev/posts/securing-the-agentic-era-introducing-formal-verification-for-cel-fpythtftu#faq","mainEntity":[{"@type":"Question","name":"How can I formally verify that a refactored CEL expression behaves the same as the original?","acceptedAnswer":{"@type":"Answer","text":"Use the CEL Formal Verification Framework's equivalence checking with the 'equiv' syntax in the verifier REPL, which is powered by the Z3 theorem prover. It compares two expressions and reports 'Violated' with a concrete counterexample input if they diverge, or 'Verified' if they are provably equal across all inputs, catching subtle bugs like operator precedence errors in AND/OR grouping. Teams proving policy equivalence during AI-assisted refactors can track tooling changes like this via daily.dev."}},{"@type":"Question","name":"How does the CEL verifier avoid false positives when checking custom domain-specific functions?","acceptedAnswer":{"@type":"Answer","text":"It uses three-pass taint tracking: if a potential issue depends on an unmapped custom function or external variable the verifier doesn't fully understand, it isolates that part and reports the result as 'Inconclusive' instead of a false 'Violation'. This design guarantees that every reported Violation is a real, reproducible bug rather than a solver hallucination. Developers evaluating verification tools for CI pipelines can follow this kind of tooling detail on daily.dev."}},{"@type":"Question","name":"How can I write security invariants for a CEL policy that checks admission rules with assume and assert blocks?","acceptedAnswer":{"@type":"Answer","text":"Define an 'assume' block listing preconditions such as 'request.has_approval == false' and 'variables.is_admin == false', then an 'assert' block stating the required outcome such as 'rule.result == false'. The verifier proves the implication holds for all inputs or returns a concrete counterexample, such as a privileged production request lacking approval that still gets admitted. Engineers securing admission policies against AI-generated changes can track examples like this on daily.dev."}}]}
```

