What This Prevents

Real incidents. Real cost. Each one preventable with a single proven property.

P1 Family P2 Friends / Investors P3 Engineers P4 Technical Investors
The Retrospective

Major Incidents. One Missing Property Each.

Every one of these failures was detectable before deployment. The property that would have caught it? A single declarative rule.

2021 Log4j / Log4Shell $10B+ damage
Remote Code Execution via Log Strings

User-controlled strings reached JNDI lookup in Log4j, enabling remote code execution on millions of servers worldwide.

"No user-controlled input reaches privileged system calls without sanitization"

The Violated Property

Taint safety: user-controlled data (HTTP headers, query params, form fields) must never flow to sensitive sinks (JNDI lookup, command execution, SQL queries) without passing through a sanitization function. This is a data-flow property that must hold across ALL code paths.

How Formal Verification Catches This

Declare user input as "tainted" source. Declare JNDI lookup as "sensitive sink." Prove: no path from tainted source to sensitive sink exists without sanitization. The AG framework traces this as inherited/synthesized attributes across the entire AST — covering ALL code paths, not just tested ones. A single taint-analysis property, checked at build time, would have flagged every vulnerable call site.

How verification prevents this
2020 SolarWinds / Sunburst 18,000 orgs compromised
Supply Chain Compromise via Build Pipeline

Malicious code injected into the build pipeline was distributed via legitimate software updates, compromising US government agencies and Fortune 500 companies.

"Build output is a pure function of checked-in source code"

The Violated Property

Build hermeticity: the compiled output must depend ONLY on tracked, versioned inputs. Any undeclared dependency, runtime injection, or build-time code modification violates this property. The Sunburst attack modified the build process itself, injecting backdoor code that never existed in the source repository.

How Formal Verification Catches This

Prove build pipeline hermeticity — that the compiled output depends ONLY on declared inputs. Model the build graph as a tree: source files as leaves, build steps as interior nodes. Declare a "provenance" attribute that flows up. Prove: every node in the output tree traces back to a checked-in source. Any undeclared dependency or runtime injection fails verification automatically.

How verification prevents this
2017 Equifax 147M records exposed
Unauthenticated Access to Personal Data

A public-facing web application endpoint lacked authentication, allowing direct access to internal databases containing 147 million personal records. Settlement exceeded $700M.

"All public endpoints enforce authentication before accessing user data"

The Violated Property

Authentication enforcement: every public endpoint that accesses user data must have an authentication middleware in the request path. This is an inherited attribute — the "is-authenticated" property must flow from the route definition down to every data-access node.

How Formal Verification Catches This

Declare authentication as an inherited attribute flowing from route definitions. Prove: no data-access node is reachable from a public endpoint without auth middleware in the path. The framework checks this for ALL endpoints — not just the ones you remember to test. One missing auth guard on one forgotten endpoint caused a $700M+ breach. Formal verification checks every single path.

How verification prevents this
2024 CrowdStrike 8.5M devices bricked
Faulty Update Causes Global Outage

A faulty sensor configuration update caused a null pointer dereference in a kernel-mode driver, bricking 8.5 million Windows devices and disrupting global airlines and banking.

"Driver update cannot cause kernel panic / system halt"

The Violated Property

Totality + null safety: all code paths in the driver handler must terminate without panic for all possible configuration inputs. No pointer dereference may occur without a null check on the path. The CrowdStrike driver read a field from a configuration blob without validating it wasn't null — for a single configuration variant.

How Formal Verification Catches This

Prove that all code paths in the update handler are total (terminate without panic) for all possible configuration inputs. Prove null safety — no pointer dereference without a null check on the path. This is exactly what Rust's type system enforces via Option<T>. The AG framework generalizes this: declare "nullable" as an attribute, prove every dereference has a check.

How verification prevents this
2014 OpenSSL / Heartbleed 66% of web servers
Memory Leak via Missing Bounds Check

A missing bounds check in OpenSSL's heartbeat extension allowed attackers to read arbitrary server memory, exposing private keys and credentials from an estimated 66% of web servers.

"All memory access is within declared bounds"

The Violated Property

Bounds safety: every array/buffer access index must be provably within the allocated range. The heartbeat handler copied payload_length bytes from the request without checking that the actual payload was that long — a single missing if statement that exposed the internet.

How Formal Verification Catches This

Prove bounds safety — that every array/buffer access index is provably within the allocated range. This is exactly what Rust's borrow checker does at compile time for Rust code. The AG framework generalizes this to arbitrary properties in any language: declare "buffer-size" and "access-index" as attributes, prove access-index < buffer-size at every access point.

How verification prevents this
1985-87 Therac-25 3 deaths, 3 injuries
Race Condition in Medical Radiation Device

A race condition in a concurrent state machine allowed a radiation therapy machine to fire a full-power beam with incorrect positioning, causing 6 patients to receive massive radiation overdoses.

"Concurrent state transitions cannot produce unsafe configurations"

The Violated Property

State safety: no reachable combination of concurrent states may violate a safety invariant. The Therac-25 had a race condition where the operator could change the beam type while the machine was still configuring, resulting in full-power radiation without the correct shielding.

How Formal Verification Catches This

Model the state machine as a tree. Declare safety invariants as attributes. Prove: no reachable state combination violates the safety property. Formal verification of state machines is one of the oldest and most proven applications of the technique — it's how hardware vendors have verified chip designs since the 1990s. The same mathematics applies to software.

How verification prevents this

Every one of these incidents has the same shape

1
A Property That SHOULD Hold

Auth required. Bounds checked. Input sanitized. Build is hermetic.

2
An Assumption It DOES Hold

Convention, code review, testing, "best practices," manual checklists.

3
A Case Where It DOESN'T

One endpoint, one code path, one config variant — missed by all of the above.

4
Catastrophic Consequences

Billions in damage. Millions of users affected. Lives lost.

Testing
(samples)
Formal Verification
(all inputs)

Testing checks specific inputs. Code review checks what the reviewer remembers to look for. Formal verification checks ALL possible cases. The incidents above were all detectable — if anyone had been checking comprehensively.

The Properties You Can Prove

Organized by What They Protect

Each property is a single declarative rule. Each prevents an entire class of failures.

Security Proofs
Taint Analysis

Prove no user-controlled input reaches sensitive sinks without sanitization.

Prevents: Log4Shell, SQL injection, XSS

Authentication Enforcement

Prove all public endpoints enforce auth before accessing user data.

Prevents: Equifax-class data breaches

CVE Reachability

Prove known-vulnerable functions are not reachable from production code paths.

Prevents: exploitation of unpatched dependencies

Input Validation Completeness

Prove every external input is validated before processing.

Prevents: injection, buffer overflow, DoS

Privilege Escalation Paths

Prove no code path transitions from low to high privilege without explicit authorization.

Prevents: unauthorized access escalation

Architecture Proofs
Module Boundary Enforcement

Prove no cross-boundary imports exist — internal modules stay internal.

Prevents: architecture erosion, coupling debt

Dependency Direction

Prove the dependency graph is acyclic and respects declared layer ordering.

Prevents: circular dependencies, layer violations

Integration Layer Exclusivity

Prove external calls only happen through designated integration layers.

Prevents: SolarWinds-class supply chain attacks

Data Access Encapsulation

Prove database access only happens through the designated data layer.

Prevents: unaudited data access, schema drift

Behavioral Proofs
Idempotency

Prove calling a function twice produces the same result as calling it once.

Prevents: duplicate charges, double submissions

Purity / Side-Effect Freedom

Prove a function has no observable side effects beyond its return value.

Prevents: hidden state mutations, test flakiness

Totality

Prove a function terminates and returns a value for all possible inputs.

Prevents: CrowdStrike-class crashes, null panics

Null Safety

Prove no pointer or reference dereference occurs without a prior null check.

Prevents: Heartbleed-class memory corruption

Commutativity

Prove order independence — processing items in any order yields the same result.

Prevents: race conditions, ordering bugs

Monotonicity

Prove adding input never removes output — the function only grows.

Prevents: data loss, vanishing results

Compliance Proofs
Data Privacy Paths

Prove PII never reaches logs, analytics, or third-party services without consent.

Prevents: GDPR violations, accidental data leaks

Audit Trail Completeness

Prove all state mutations are logged to the audit system.

Prevents: compliance audit failures, SOX violations

Regulatory Surface Mapping

Prove exactly which code paths handle regulated data — no more, no less.

Prevents: scope creep, unknown regulatory exposure

Data Residency

Prove data doesn't leave designated geographic regions or environments.

Prevents: sovereignty violations, cross-border leaks

Shifting Up Layers of Abstraction

Proven Properties Compose

Individual proofs at the function level build into system-level guarantees. Each layer inherits the certainty of the layer below.

L1
Function
Individual function guarantees
pure validates-input null-safe bounds-checked
composes into
L2
Module
Module-level invariants
side-effect-free all-inputs-validated encapsulated
composes into
L3
Service
Service-level contracts
idempotent authenticated audited
composes into
L4
Architecture
System-wide proof
safe-to-call-from-anywhere fully-verified
API Gateway authenticated, rate-limited Auth Service pure, audited Core Business idempotent, validated Data Layer encapsulated, bounded Database authenticated idempotent bounded encapsulated verified

Your architecture diagram isn't just documentation — it's a proof. Each arrow is a verified property. Each box is a composition of proven guarantees. When something changes, the proofs re-evaluate automatically.

The Economics

The cost of NOT proving far exceeds the cost of proving

Log4Shell
$10B+

Preventable with one taint analysis property

Equifax
$700M+

Preventable with one auth enforcement property

CrowdStrike
8.5M devices

Preventable with one null safety property

Therac-25
3 lives

Preventable with one state safety property

The cost of NOT proving >> the cost of proving