--- name: formal-spec-z3-verifier description: "Master guide for mathematical formal verification, SMT solver constraints (Z3 WebAssembly, Python Z3, TLA+, Dafny), invariant theorem proving for FinTech billing, RBAC authorization, and zero-violation architectures / Panduan utama verifikasi formal matematis, batasan SMT solver (Z3 WASM, Python Z3, TLA+, Dafny), pembuktian teorema invarian billing FinTech, otorisasi RBAC, dan arsitektur zero-violation." author: "Roedy Rustam" version: "4.4.2" --- # Formal Spec & Z3 Verifier (2026 Sovereign Edition) [English](#english) | [Bahasa Indonesia](#bahasa-indonesia) --- ## English ### Executive Directive & The Formal Verification Imperative Unit tests sample points along an execution curve: $N$ tests cover $N$ scenarios. However, in financial ledgers, subscription state machines, multi-tenant boundaries, and cryptographic custody, edge-case race conditions exist in the infinitely large space of untested inputs ($O(\infty)$). **Formal Specification & SMT Verification** shifts quality assurance from empirical sampling to **mathematical theorem proving**. By encoding software constraints into formal first-order logic and Satisfiability Modulo Theories (SMT), we use automated theorem provers (Microsoft Z3, TLA+, Dafny) to **exhaustively prove** that: 1. Double-entry financial ledgers can never create or destroy fractional currency. 2. Subscription billing state machines contain zero illegal transition paths. 3. Multi-tenant RBAC trees permit mathematically zero privilege escalations across tenant boundaries. --- ### Orchestration & Integration - **FinTech & SaaS Subscriptions**: `saas-billing`, `doku-payment-gateway`, `payment-gateway-expert`, `agentic-m2m-settlement`. - **Identity & Boundary Verification**: `authentication-identity-expert`, `saas-multi-tenant`, `zero-trust-secret-vault`. - **Database & Constraint Enforcement**: `database-orm-expert`, `spec-driven-development-expert`. - **Autonomous Testing & Red Teaming**: `property-mutation-testing-expert`, `autonomous-tdd-debugger`, `autonomous-red-teamer`, `anti-slop`. - **Lifecycle & Governance**: `brainstorming`, `zero-to-prod-orchestrator`, `session-memory-manager`. --- ### Core Verification Methodologies (The 4 Pillars) ``` ┌────────────────────────────────────────────────────────────────────────┐ │ FORMAL VERIFICATION & THEOREM PROVING FLOW │ ├────────────────────────────────────────────────────────────────────────┤ │ 1. Define Mathematical Invariants (Conservation, Monotonicity, Leak) │ │ │ │ │ ▼ │ │ 2. Encode into SMT / Formal Logic (Z3 First-Order Logic, TLA+, Dafny) │ │ │ │ │ ▼ │ │ 3. Automated SMT Solver Check (solver.check() -> SAT or UNSAT) │ │ ┌─────────────────┴─────────────────┐ │ │ ▼ ▼ │ │ [UNSAT: Theorem Proven] [SAT: Bug Found!] │ │ │ │ │ │ │ Extract Counter-Example │ │ │ (Exact attack/failure state) │ │ ▼ │ │ │ 4. Emit Verified PostgreSQL Constraints ▼ │ │ (CHECK, Row-Level Locks, Types) Patch Business Logic & Rerun │ └────────────────────────────────────────────────────────────────────────┘ ``` #### 1. Real Z3 SMT Solver (WebAssembly & Python) Instead of manual assertion loops, use the real Microsoft Z3 theorem prover. Define symbolic integer/boolean variables, assert preconditions and transition rules, and invert the invariant: - Asking the solver to find a solution where the invariant is violated (`solver.add(Not(Invariant))`). - If the solver returns `unsat` (unsatisfiable), the property is **mathematically proven for all possible inputs**. - If the solver returns `sat`, Z3 generates the exact **counter-example model** exposing the bug. #### 2. TLA+ Specification for Distributed Concurrency Models concurrent states, temporal properties, and step transitions without implementation noise. Proves absence of deadlocks and state corruption across distributed payment microservices. #### 3. Dafny Contract-First Verification Compiles mathematically proven algorithms directly to C#, Java, or JavaScript with built-in preconditions (`requires`), postconditions (`ensures`), and loop invariants. #### 4. PostgreSQL DDL Constraint Compilation Every proven invariant must be compiled directly into database-enforced schemas: PostgreSQL domain types, `CHECK` constraints, foreign keys, and exclusion constraints (`EXCLUDE USING`). --- ### Production Implementation Blueprints #### Blueprint 1: Real Z3 SMT Ledger Invariant Prover in TypeScript (`engine/z3-ledger-prover.ts`) Uses the official WebAssembly build of Microsoft Z3 (`z3-solver`): ```typescript import { init } from 'z3-solver'; export interface LedgerVerificationResult { isSound: boolean; theoremProven: boolean; counterExample?: Record; diagnosticMessage: string; } export class Z3LedgerProver { public static async verifyAtomicTransfer( maxAccounts: number = 4 ): Promise { const { Context } = await init(); const { Solver, Int, And, Or, Not } = new Context('main'); const solver = new Solver(); // 1. Symbolic Variables: Balances before and after transaction const initialSource = Int.const('initial_source'); const initialDest = Int.const('initial_dest'); const transferAmount = Int.const('transfer_amount'); const finalSource = Int.const('final_source'); const finalDest = Int.const('final_dest'); // 2. Preconditions & Domain Rules // All currency must be represented in integer atomic units (cents/satoshis >= 0) solver.add(initialSource.ge(0)); solver.add(initialDest.ge(0)); solver.add(transferAmount.gt(0)); // Transfers must be strictly positive solver.add(initialSource.ge(transferAmount)); // Source must have sufficient funds // 3. State Transition Logic solver.add(finalSource.eq(initialSource.sub(transferAmount))); solver.add(finalDest.eq(initialDest.add(transferAmount))); // 4. Invariant: Conservation of Total Money (Sum Before == Sum After) const initialTotal = initialSource.add(initialDest); const finalTotal = finalSource.add(finalDest); const moneyConservation = initialTotal.eq(finalTotal); // 5. Invariant: Solvency (No balance drops below zero) const solvency = And(finalSource.ge(0), finalDest.ge(0)); const totalSystemInvariant = And(moneyConservation, solvency); // 6. Negation Mode: Ask Z3 to prove that a violation is POSSIBLE solver.add(Not(totalSystemInvariant)); const checkResult = await solver.check(); if (checkResult === 'unsat') { return { isSound: true, theoremProven: true, diagnosticMessage: 'THEOREM PROVEN: Double-entry money conservation and solvency hold for all infinite integer inputs.', }; } // Violation found: Extract exact counter-example const model = solver.model(); const counterExample: Record = { initialSource: model.eval(initialSource).toString(), initialDest: model.eval(initialDest).toString(), transferAmount: model.eval(transferAmount).toString(), finalSource: model.eval(finalSource).toString(), finalDest: model.eval(finalDest).toString(), }; return { isSound: false, theoremProven: false, counterExample, diagnosticMessage: 'COUNTEREXAMPLE DETECTED: Ledger invariant violated under model state.', }; } } ``` --- #### Blueprint 2: SaaS Subscription State Machine Prover in Python Z3 (`verifier/billing_state_prover.py`) ```python from z3 import ( Datatype, Solver, EnumSort, Function, Int, Bool, And, Or, Not, Implies, ForAll, sat, unsat ) def verify_subscription_lifecycle(): """ Formally verifies that a canceled subscription can NEVER reach the Active state without a verified payment confirmation token. """ solver = Solver() # Define State Enum Sort State, (TRIAL, ACTIVE, PAST_DUE, CANCELED) = EnumSort( 'State', ('TRIAL', 'ACTIVE', 'PAST_DUE', 'CANCELED') ) # State variables across step N and N+1 s_current = State('s_current') s_next = State('s_next') payment_verified = Bool('payment_verified') admin_override = Bool('admin_override') # Legal Transition Rules transition_legal = Or( # Trial can transition to Active with payment And(s_current == TRIAL, s_next == ACTIVE, payment_verified), # Active can become PastDue if recurring billing fails And(s_current == ACTIVE, s_next == PAST_DUE), # PastDue can recover to Active upon payment And(s_current == PAST_DUE, s_next == ACTIVE, payment_verified), # Any state can transition to Canceled s_next == CANCELED, # Re-activation from Canceled strictly requires explicit payment verification And(s_current == CANCELED, s_next == ACTIVE, payment_verified) ) solver.add(transition_legal) # Invariant to test: # "A user in CANCELED state can NEVER become ACTIVE if payment_verified is False" # To prove: (s_current == CANCELED and s_next == ACTIVE) -> payment_verified desired_invariant = Implies( And(s_current == CANCELED, s_next == ACTIVE), payment_verified ) # Negate the invariant to search for illegal exploits solver.add(Not(desired_invariant)) result = solver.check() if result == unsat: return { "status": "PROVEN", "message": "Mathematical proof holds: Unauthorized re-activation is impossible." } else: model = solver.model() return { "status": "VIOLATION", "counter_example": { "s_current": str(model[s_current]), "s_next": str(model[s_next]), "payment_verified": str(model[payment_verified]) } } if __name__ == "__main__": result = verify_subscription_lifecycle() print(f"Formal Verification: {result}") ``` --- #### Blueprint 3: TLA+ Atomic Ledger Specification (`spec/Ledger.tla`) ```tla ---------------------------- MODULE Ledger ---------------------------- EXTENDS Naturals, FiniteSets CONSTANTS Accounts, MaxBalance VARIABLES balances, pendingTransfers TypeOK == /\ balances \in [Accounts -> 0..MaxBalance] /\ pendingTransfers \subseteq (Accounts \X Accounts \X 1..MaxBalance) Init == /\ balances = [a \in Accounts |-> 1000] /\ pendingTransfers = {} InitiateTransfer(src, dst, amt) == /\ amt > 0 /\ balances[src] >= amt /\ balances' = [balances EXCEPT ![src] = balances[src] - amt] /\ pendingTransfers' = pendingTransfers \cup {<>} CompleteTransfer(src, dst, amt) == /\ <> \in pendingTransfers /\ balances' = [balances EXCEPT ![dst] = balances[dst] + amt] /\ pendingTransfers' = pendingTransfers \ {<>} Next == \/ \E s, d \in Accounts, a \in 1..MaxBalance: InitiateTransfer(s, d, a) \/ \E s, d \in Accounts, a \in 1..MaxBalance: CompleteTransfer(s, d, a) \* Crucial Invariant: Money Conservation (Sum of Balances + In-Flight Transfers) TotalSystemWealth == LET SumBalances == balances[Accounts] IN SumBalances Spec == Init /\ [][Next]_<> ============================================================================= ``` --- #### Blueprint 4: Dafny Contract-Verified Balance Transfer (`spec/Transfer.dfy`) ```dafny class Account { var balance: nat constructor(initial: nat) ensures balance == initial { balance := initial; } } method AtomicTransfer(source: Account, dest: Account, amount: nat) requires source != dest requires source.balance >= amount modifies source, dest ensures source.balance == old(source.balance) - amount ensures dest.balance == old(dest.balance) + amount ensures source.balance + dest.balance == old(source.balance) + old(dest.balance) { source.balance := source.balance - amount; dest.balance := dest.balance + amount; } ``` --- ### Database Schema Constraint Translation Once verified by SMT solvers, the invariants are translated directly into PostgreSQL schemas: ```sql -- Production PostgreSQL DDL compiled from Z3 verified constraints CREATE DOMAIN monetary_cents AS BIGINT CHECK (VALUE >= 0); CREATE TABLE ledger_entries ( id UUID PRIMARY KEY DEFAULT gen_random_uuid(), transaction_id UUID NOT NULL, account_id UUID NOT NULL, debit_cents monetary_cents NOT NULL DEFAULT 0, credit_cents monetary_cents NOT NULL DEFAULT 0, created_at TIMESTAMPTZ NOT NULL DEFAULT now(), -- Invariant 1: Single direction per entry CONSTRAINT chk_single_direction CHECK ( (debit_cents > 0 AND credit_cents = 0) OR (credit_cents > 0 AND debit_cents = 0) ) ); -- Transaction balanced invariant enforcement via deferred trigger CREATE OR REPLACE FUNCTION verify_transaction_balance() RETURNS TRIGGER AS $$ DECLARE total_debit BIGINT; total_credit BIGINT; BEGIN SELECT COALESCE(SUM(debit_cents), 0), COALESCE(SUM(credit_cents), 0) INTO total_debit, total_credit FROM ledger_entries WHERE transaction_id = NEW.transaction_id; IF total_debit <> total_credit THEN RAISE EXCEPTION 'Ledger balance invariant violated: Debits (%) != Credits (%)', total_debit, total_credit; END IF; RETURN NEW; END; $$ LANGUAGE plpgsql; CREATE CONSTRAINT TRIGGER trg_verify_transaction_balance AFTER INSERT OR UPDATE ON ledger_entries DEFERRABLE INITIALLY DEFERRED FOR EACH ROW EXECUTE FUNCTION verify_transaction_balance(); ``` ### Sovereign Execution, Token Efficiency & Invariants | Dimension | Sovereign Mandate & Deterministic Contract | | :--- | :--- | | **Frontier Model Cascade** | High Fast / High (`Grok 4.7 High Fast`, `Claude Sonnet 5.5 High`, `Gemini 4 Pro`) | | **Availability Fallback** | `Gemini 4 Pro` -> `Gemini 3.8 Flash`; `Claude Opus 5.5` -> `Claude Opus 4.6`; `Grok 4.7` -> `Grok 4.6 High Fast` (Zero unhandled missing-model errors) | | **KV-Cache & Token Protocol** | Pin static instructions & schemas at prompt prefix (`kv-cache-prefix-optimizer`); pass surgical `CONTEXT_MAP.md` slices (<250 tokens/call) during Swarm Fan-Out | | **SaaT CLI & MCP Dispatch** | CLI: `vibes skill exec formal-spec-z3-verifier ` / MCP: `vibes_skill_dispatch`, `vibes_critic_validate`, `vibes_self_heal`, `vibes_eval_sandbox`, `vibes_verify_invariants` | | **NFR & Anti-Slop Invariants** | Zero OWASP Top 10 vectors, 0 hardcoded secrets, >= 90% branch coverage on domain logic, 0 Anti-Slop violations; 100% complete zero-placeholder output verified via `node scripts/check-anti-slop.js --strict` | --- --- ## Bahasa Indonesia ### Direktif Eksekutif & Kebutuhan Verifikasi Formal Unit test konvensional hanya mengambil sampel titik acak: $N$ pengujian hanya mencakup $N$ skenario. Namun pada buku besar FinTech, state machine penagihan langganan, batas isolasi multi-tenant, dan pengelolaan kunci kriptografi, celah *race condition* tersembunyi di dalam ruang tak terhingga dari skenario yang belum diuji ($O(\infty)$). **Spesifikasi Formal & Verifikasi SMT** mengubah paradigma penjaminan kualitas dari sampel empiris menjadi **pembuktian teorema matematis**. Dengan memformulasikan batasan logika tingkat pertama dan SMT (*Satisfiability Modulo Theories*), kita memanfaatkan mesin pembuktian teorema otomatis (Microsoft Z3, TLA+, Dafny) untuk **membuktikan secara tuntas** bahwa: 1. Buku besar keuangan entri ganda mustahil menciptakan atau menghilangkan saldo secara ilegal. 2. State machine langganan tidak memiliki jalur transisi terlarang (misal akun dibatalkan tiba-tiba aktif kembali tanpa pembayaran). 3. Pohon otorisasi RBAC/ABAC secara matematis memiliki celah eskalasi hak akses sebesar nol. --- ### Integrasi Orkestrasi - **FinTech & Penagihan SaaS**: `saas-billing`, `doku-payment-gateway`, `payment-gateway-expert`, `agentic-m2m-settlement`. - **Verifikasi Identitas & Isolasi**: `authentication-identity-expert`, `saas-multi-tenant`, `zero-trust-secret-vault`. - **Database & Batasan Constraint**: `database-orm-expert`, `spec-driven-development-expert`. - **Pengujian Otonom & Red Teaming**: `property-mutation-testing-expert`, `autonomous-tdd-debugger`, `autonomous-red-teamer`, `anti-slop`. - **Siklus Hidup & Tata Kelola**: `brainstorming`, `zero-to-prod-orchestrator`, `session-memory-manager`. --- ### 4 Pilar Metodologi Verifikasi Formal ``` ┌────────────────────────────────────────────────────────────────────────┐ │ ALUR VERIFIKASI FORMAL & PEMBUKTIAN TEOREMA │ ├────────────────────────────────────────────────────────────────────────┤ │ 1. Definisikan Invarian Matematis (Konservasi Saldo, Monotonik) │ │ │ │ │ ▼ │ │ 2. Enkode ke Logika SMT / Formal (Z3 Logika Orde-1, TLA+, Dafny) │ │ │ │ │ ▼ │ │ 3. Pengecekan Mesin Solver SMT (solver.check() -> SAT atau UNSAT) │ │ ┌─────────────────┴─────────────────┐ │ │ ▼ ▼ │ │ [UNSAT: Teorema Terbukti] [SAT: Bug Ditemukan!] │ │ │ │ │ │ │ Ekstrak Counter-Example │ │ │ (State persis kegagalan) │ │ ▼ │ │ │ 4. Terapkan Constraint Database PostgreSQL ▼ │ │ (CHECK, Row-Level Locks, Types) Perbaiki Logika & Uji Ulang │ └────────────────────────────────────────────────────────────────────────┘ ``` #### 1. Mesin SMT Solver Z3 Nyata (WebAssembly & Python) Gunakan mesin pembukti teorema Microsoft Z3 asli. Definisikan variabel simbolik, masukkan kondisi awal serta aturan transisi, lalu balikkan invarian (`Not(Invariant)`): - Jika solver menghasilkan `unsat` (tidak dapat dipenuhi), properti tersebut **terbukti benar secara matematis untuk semua kemungkinan input**. - Jika solver menghasilkan `sat`, Z3 secara otomatis memberikan **model *counter-example*** yang membongkar skenario kegagalan spesifik. #### 2. Spesifikasi TLA+ untuk Konkurensi Terdistribusi Memodelkan state konkuren dan transisi langkah tanpa gangguan detail implementasi. Membuktikan ketiadaan *deadlock* dan desinkronisasi pada sistem pembayaran terdistribusi. #### 3. Kontrak Terverifikasi Dafny Menghasilkan kode terverifikasi matematis dengan prasyarat (`requires`) dan pascasyarat (`ensures`) yang terbukti benar sebelum kompilasi. #### 4. Kompilasi ke Constraint Database PostgreSQL Setiap invarian yang terbukti wajib dikompilasi langsung ke skema database: domain PostgreSQL, klausa `CHECK`, foreign key, dan trigger penundaan transaksi (*deferred triggers*). --- ### Standar Penegakan Anti-Slop 1. **Dilarang Menggunakan Simulasi Kode Palsu**: Modul verifikasi formal wajib memanfaatkan antarmuka SMT solver nyata (Z3 WASM atau Z3 Python), bukan sekadar perulangan *if-else* biasa. 2. **Keluaran Kode 100% Utuh**: Tidak boleh ada placeholder `// TODO` atau fungsi yang belum diimplementasikan. 3. **Verifikasi Lulus Bersih**: Kode wajib tervalidasi bebas dari segala bentuk slop menggunakan `node scripts/check-anti-slop.js`. ### Matriks Eksekusi Berdaulat, Efisiensi Token & Invarian | Dimensi | Mandat Berdaulat & Kontrak Deterministik | | :--- | :--- | | **Kaskade Model Frontier** | High Fast / High (`Grok 4.7 High Fast`, `Claude Sonnet 5.5 High`, `Gemini 4 Pro`) | | **Invarian Fallback Ketersediaan** | `Gemini 4 Pro` -> `Gemini 3.8 Flash`; `Claude Opus 5.5` -> `Claude Opus 4.6`; `Grok 4.7` -> `Grok 4.6 High Fast` (Bebas gagal saat model belum tersedia/kuota penuh) | | **Protokol Hemat Token & KV-Cache** | Kunci instruksi & skema statis di prefix awal (`kv-cache-prefix-optimizer`); kirim potongan `CONTEXT_MAP.md` (<250 token/panggilan) saat Fan-Out | | **Eksekusi SaaT CLI & MCP** | CLI: `vibes skill exec formal-spec-z3-verifier ` / MCP: `vibes_skill_dispatch`, `vibes_critic_validate`, `vibes_self_heal`, `vibes_eval_sandbox`, `vibes_verify_invariants` | | **Invarian NFR & Anti-Slop** | Nol celah OWASP Top 10, 0 kredensial hardcoded, cakupan pengujian >= 90% pada logika domain, 0 pelanggaran Anti-Slop; kode 100% tuntas tanpa placeholder diverifikasi melalui `node scripts/check-anti-slop.js --strict` |