From 8e1a27e4aa15788cb3294503a3cc78397400440c Mon Sep 17 00:00:00 2001 From: Sean Huh Date: Wed, 21 Oct 2026 17:45:37 -0700 Subject: [PATCH] Cover verifier behavior that no test exercised PiperOrigin-RevId: 1004364292 --- .../main/java/dev/cel/verifier/BUILD.bazel | 9 +- .../cel/verifier/CelAstToZ3Translator.java | 1262 +---------------- .../dev/cel/verifier/CelVerifierZ3Impl.java | 4 +- .../CelZ3ComprehensionTranslator.java | 535 +++++++ .../java/dev/cel/verifier/CelZ3Exprs.java | 162 +++ .../cel/verifier/CelZ3OperatorTranslator.java | 139 +- .../cel/verifier/CelZ3StructTranslator.java | 560 ++++++++ .../cel/verifier/CelZ3TranslationContext.java | 142 ++ .../CelZ3TypeConstraintGenerator.java | 231 +++ .../dev/cel/verifier/CelZ3TypeSystem.java | 137 +- .../dev/cel/verifier/TranslatedValue.java | 26 +- .../cel/verifier/axioms/OptionalAxioms.java | 7 +- .../dev/cel/verifier/axioms/TypeAxiom.java | 3 +- .../verifier/CelPolicyVerifierImplTest.java | 25 + .../cel/verifier/CelVerifierZ3ImplTest.java | 11 + 15 files changed, 1792 insertions(+), 1461 deletions(-) create mode 100644 verifier/src/main/java/dev/cel/verifier/CelZ3ComprehensionTranslator.java create mode 100644 verifier/src/main/java/dev/cel/verifier/CelZ3Exprs.java create mode 100644 verifier/src/main/java/dev/cel/verifier/CelZ3StructTranslator.java create mode 100644 verifier/src/main/java/dev/cel/verifier/CelZ3TranslationContext.java create mode 100644 verifier/src/main/java/dev/cel/verifier/CelZ3TypeConstraintGenerator.java diff --git a/verifier/src/main/java/dev/cel/verifier/BUILD.bazel b/verifier/src/main/java/dev/cel/verifier/BUILD.bazel index bd455ab50..6b498a162 100644 --- a/verifier/src/main/java/dev/cel/verifier/BUILD.bazel +++ b/verifier/src/main/java/dev/cel/verifier/BUILD.bazel @@ -112,7 +112,10 @@ java_library( java_library( name = "type_system", - srcs = ["CelZ3TypeSystem.java"], + srcs = [ + "CelZ3Exprs.java", + "CelZ3TypeSystem.java", + ], compatible_with = [], tags = [ ], @@ -157,10 +160,14 @@ java_library( "CelAstAlphaHasher.java", "CelAstToZ3Translator.java", "CelVerifierZ3Impl.java", + "CelZ3ComprehensionTranslator.java", "CelZ3CounterexampleGenerator.java", "CelZ3ExtensionalityAxioms.java", "CelZ3FunctionRegistry.java", "CelZ3OperatorTranslator.java", + "CelZ3StructTranslator.java", + "CelZ3TranslationContext.java", + "CelZ3TypeConstraintGenerator.java", "TranslatedValue.java", ], compatible_with = [], diff --git a/verifier/src/main/java/dev/cel/verifier/CelAstToZ3Translator.java b/verifier/src/main/java/dev/cel/verifier/CelAstToZ3Translator.java index 913582ee4..404ed9900 100644 --- a/verifier/src/main/java/dev/cel/verifier/CelAstToZ3Translator.java +++ b/verifier/src/main/java/dev/cel/verifier/CelAstToZ3Translator.java @@ -18,15 +18,11 @@ import com.google.common.collect.ImmutableSet; import com.google.common.collect.ImmutableSortedSet; import com.google.common.collect.Iterables; -import com.google.common.collect.Streams; -import com.microsoft.z3.ArithExpr; import com.microsoft.z3.ArrayExpr; import com.microsoft.z3.BoolExpr; import com.microsoft.z3.Context; import com.microsoft.z3.Expr; -import com.microsoft.z3.FPExpr; import com.microsoft.z3.FuncDecl; -import com.microsoft.z3.IntExpr; import com.microsoft.z3.Quantifier; import com.microsoft.z3.SeqExpr; import com.microsoft.z3.Sort; @@ -35,20 +31,11 @@ import dev.cel.common.ast.CelBlock; import dev.cel.common.ast.CelConstant; import dev.cel.common.ast.CelExpr; -import dev.cel.common.ast.CelExpr.CelComprehension; import dev.cel.common.ast.CelExpr.CelList; import dev.cel.common.ast.CelExpr.ExprKind; import dev.cel.common.types.CelKind; import dev.cel.common.types.CelType; import dev.cel.common.types.CelTypeProvider; -import dev.cel.common.types.CelTypes; -import dev.cel.common.types.ListType; -import dev.cel.common.types.MapType; -import dev.cel.common.types.NullableType; -import dev.cel.common.types.OptionalType; -import dev.cel.common.types.SimpleType; -import dev.cel.common.types.StructType; -import dev.cel.common.types.StructTypeReference; import dev.cel.common.types.TypeType; import java.util.ArrayList; import java.util.Arrays; @@ -58,14 +45,13 @@ import java.util.Map; import java.util.Optional; import java.util.Set; -import java.util.function.Supplier; /** * Internal translator from CEL AST to Z3 SMT expressions using a 4-valued logic tagged union. * *

Lifetime & Mutability: This translator is stateful and highly mutable. It accumulates - * type constraints, loop variables (via its symbol table), and uninterpreted functions (via field - * caches) during AST traversal. + * constraints and symbol bindings in a shared {@link CelZ3TranslationContext}, and literal caches + * in itself and its delegate translators. * *