Skip to content
Back to skills

Formal Spec Z3 Verifier

ASecurity

Expert guide for mathematical formal verification, SMT solver constraints (Z3, Dafny, TLA+), invariant theorem proving for FinTech billing state machines, RBAC/ABAC authorization, and zero-violation architecture / Panduan ahli verifikasi formal matematis, SMT solver (Z3, Dafny, TLA+), pembuktian invarian state machine billing FinTech, otorisasi RBAC/ABAC, dan arsitektur zero-violation.

  • 73 stars
  • 0 votes
  • 0 copies
  • 2 views
  • Added October 4, 2026
ai-agentstypescriptpythonrustgosqltestinggitapidatabasebackend

Works with

  • api

Security analysis

A100/100

Scanned October 4, 2026

npx -y skills add roedyrustam/vibes-plug --skill formal-spec-z3-verifier --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Formal Spec Z3 Verifier?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Formal Spec Z3 Verifier
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/roedyrustam-formal-spec-z3-verifier/badge)](https://www.skillsdirectory.com/skills/roedyrustam-formal-spec-z3-verifier)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: formal-spec-z3-verifier
description: "Expert guide for mathematical formal verification, SMT solver constraints (Z3, Dafny, TLA+), invariant theorem proving for FinTech billing state machines, RBAC/ABAC authorization, and zero-violation architecture / Panduan ahli verifikasi formal matematis, SMT solver (Z3, Dafny, TLA+), pembuktian invarian state machine billing FinTech, otorisasi RBAC/ABAC, dan arsitektur zero-violation."
author: "Roedy Rustam"
version: "4.2.0"
---

# formal-spec-z3-verifier — vibes-plug Skill

[English](#english) | [Bahasa Indonesia](#bahasa-indonesia)

---

<a name="english"></a>
## English

### Orchestration & Integration
Connects and orchestrates with `brainstorming`, `zero-to-prod-orchestrator`, `saas-billing`, `doku-payment-gateway`, `authentication-identity-expert`, and `database-orm-expert` to mathematically prove software invariants, state transitions, and authorization policies using formal SMT solvers before writing production code.

### Description
Production guide for applying formal methods, mathematical specifications, and SMT (Satisfiability Modulo Theories) solvers (Z3, Dafny, TLA+) to mission-critical software systems. Proves zero-invariant violation across double-entry ledger bookkeeping, billing subscription state machines, multi-tenant isolation boundaries, and cryptographic key lifecycle models.

### Trigger Conditions
Activate this skill when:
- Designing financial ledgers, wallets, or payment gateway state transition graphs.
- Verifying complex RBAC/ABAC permission rules to guarantee that privilege escalation is mathematically impossible.
- Modeling concurrent or distributed state machines where race conditions could cause state desynchronization.
- Formulating formal invariant specifications prior to backend ORM and database schema generation.

---

### Core Concepts & Patterns

#### 1. Invariant Specification Matrix

| System Domain | Mathematical Invariant | Solver Check |
| :--- | :--- | :--- |
| **Double-Entry FinTech Ledger** | $\sum \text{Debits} - \sum \text{Credits} = 0 \land \forall a, \text{balance}(a) \ge 0$ | Prove balance preservation across all concurrent transactions |
| **SaaS Billing State Machine** | $\text{State} \in \{ \text{Trial}, \text{Active}, \text{PastDue}, \text{Canceled} \}$ with strict monotonic transitions | Prove unreachable illegal transition (e.g. Canceled $\to$ Active without Payment) |
| **Multi-Tenant Authorization** | $\forall r \in \text{Resources}, \text{TenantId}(r) = \text{Session}(\text{TenantId})$ | Prove satisfiability of data leakage equals $\emptyset$ |

#### 2. Financial Ledger Invariant Verifier (Z3 TypeScript/Python Pattern)

```typescript
export interface LedgerEntry {
  accountId: string;
  debit: number;
  credit: number;
}

export interface VerificationResult {
  isSound: boolean;
  counterExample?: string;
  message: string;
}

export class LedgerFormalVerifier {
  public static verifyTransactionBalance(entries: LedgerEntry[]): VerificationResult {
    if (entries.length < 2) {
      return {
        isSound: false,
        message: 'A valid double-entry transaction must contain at least two entries.'
      };
    }

    let totalDebit = 0;
    let totalCredit = 0;

    for (const entry of entries) {
      if (entry.debit < 0 || entry.credit < 0) {
        return {
          isSound: false,
          counterExample: JSON.stringify(entry),
          message: 'Negative debit or credit amounts violate non-negative entry invariant.'
        };
      }
      if (entry.debit > 0 && entry.credit > 0) {
        return {
          isSound: false,
          counterExample: JSON.stringify(entry),
          message: 'Single entry cannot contain both debit and credit amounts simultaneously.'
        };
      }
      totalDebit += entry.debit;
      totalCredit += entry.credit;
    }

    const delta = Math.abs(totalDebit - totalCredit);
    if (delta > 0.0001) {
      return {
        isSound: false,
        counterExample: `Debits: ${totalDebit}, Credits: ${totalCredit}, Discrepancy: ${delta}`,
        message: 'Double-entry balance invariant violated: Debits must strictly equal Credits.'
      };
    }

    return {
      isSound: true,
      message: 'Ledger invariant mathematically verified: Zero discrepancy.'
    };
  }
}
```

#### 3. State Machine Transition Guard Validation
Before implementing database enum updates, model the allowable state graph as an adjacency matrix with strict precondition guards:

```
[Trial] ────────► [Active] ────────► [PastDue]
  │                  │                  │
  │                  ▼                  ▼
  └─────────────► [Canceled] ◄──────────┘
```
Any edge attempting to move from `Canceled` directly back to `Active` without passing through the `Checkout/Re-subscribe` gate is blocked by formal proof.

---

### Best Practices

1. **Specify Invariants Before Schema Generation**: Formulate formal invariants (e.g. balance conservation, role hierarchy) before creating tables or ORM migrations.
2. **Search for Counterexamples Actively**: Run SMT solvers in negation mode (`prove NOT invariant`) to discover edge-case input values that break assertions.
3. **Bind Formal Guards into Database Constraints**: Translate proven invariants into PostgreSQL `CHECK` constraints, foreign keys, and atomic database triggers.
4. **Never Rely Solely on Unit Tests for FinTech**: Unit tests only test known examples ($O(N)$); formal verification tests all possible states ($O(\infty)$).

---

### Common Pitfalls to Avoid

| Anti-Pattern | Critical Risk | Engineering Remedy |
| :--- | :--- | :--- |
| Floating point arithmetic for currency | Inexact decimal rounding creates ledger drift | Enforce integer cents/satoshis with strict SMT bounds |
| Unconstrained state transitions | Illegitimate subscription access without payment | Model transition matrix with formal guard preconditions |
| Relying on application-layer checks alone | Race condition during concurrent API calls bypasses check | Pair formal proof with database atomic constraints & row locks |

---

### Integration with Other Skills (MANDATORY)

- `saas-billing` — Formally prove subscription state transitions and balance deductions.
- `doku-payment-gateway` — Validate atomic idempotency and payment settlement invariants.
- `authentication-identity-expert` — Mathematically verify RBAC/ABAC role hierarchies.
- `database-orm-expert` — Implement proven invariants as SQL check constraints and foreign keys.

### Referenced By Orchestrators (MANDATORY)

- `brainstorming` — Added to "Testing & Keamanan" and "Desain API & Kontrak" matrix rows.
- `zero-to-prod-orchestrator` — Integrated in Phase 2 (Foundation) and Phase 6 (Testing & QA).

---

<a name="bahasa-indonesia"></a>
## Bahasa Indonesia

### Integrasi Orkestrasi
Terhubung dan mengorkestrasi dengan `brainstorming`, `zero-to-prod-orchestrator`, `saas-billing`, `doku-payment-gateway`, `authentication-identity-expert`, dan `database-orm-expert` untuk membuktikan invarian perangkat lunak, transisi state, dan kebijakan otorisasi secara matematis sebelum penulisan kode produksi.

### Deskripsi
Panduan produksi untuk menerapkan metode formal, spesifikasi matematis, dan SMT (*Satisfiability Modulo Theories*) solver (seperti Z3, Dafny, TLA+) pada sistem perangkat lunak misi kritis. Membuktikan ketiadaan pelanggaran invarian (*zero-invariant violation*) pada pembukuan entri ganda FinTech, transisi siklus langganan SaaS, batas isolasi multi-tenant, dan hierarki akses.

### Kondisi Pemicu
Aktifkan skill ini ketika:
- Merancang buku besar keuangan (*ledger*), dompet digital, atau state machine gateway pembayaran.
- Memverifikasi aturan perizinan RBAC/ABAC untuk memastikan eskalasi hak akses secara matematis mustahil terjadi.
- Memodelkan state machine konkuren atau terdistribusi di mana *race condition* dapat memicu desinkronisasi.
- Menyusun spesifikasi invarian formal sebelum membuat skema database dan ORM.

---

### Konsep Inti & Pola Praktik

#### 1. Pembuktian Invarian Buku Besar FinTech
Setiap transaksi keuangan wajib mematuhi aturan entri ganda:
1. **Konservasi Nilai**: Jumlah total debit harus sama persis dengan jumlah total kredit ($\sum \text{Debit} = \sum \text{Kredit}$).
2. **Ketiadaan Nilai Negatif**: Tidak boleh ada nilai debit atau kredit di bawah nol.
3. **Penyimpanan Integer**: Nilai moneter wajib disimpan dalam satuan terkecil (misalnya sen atau rupiah penuh) tanpa floating point.

#### 2. Verifikasi Transisi State Langganan
Pastikan tidak ada alur ilegal dalam sistem langganan:
- Akun yang sudah `Canceled` tidak boleh berubah menjadi `Active` tanpa melewati proses verifikasi pembayaran baru (*Re-checkout*).
- Status `PastDue` harus otomatis membatasi akses fitur premium sesuai aturan masa tenggang (*grace period*).

---

### Praktik Terbaik

1. **Spesifikasikan Invarian Sebelum Menulis Kode**: Tentukan rumus matematis invarian sebelum membuat tabel database atau API route.
2. **Cari *Counter-Example* Secara Aktif**: Gunakan solver untuk mencari kondisi tepi (*corner cases*) yang berpotensi melanggar asumsi sistem.
3. **Terjemahkan Invarian ke Constraint SQL**: Terapkan hasil pembuktian ke dalam `CHECK constraint` PostgreSQL dan atomic locks.
4. **Hindari Floating Point untuk Uang**: Gunakan bilangan bulat (integer) untuk mencegah kebocoran saldo akibat pembulatan desimal.

---

### Jebakan Umum yang Harus Dihindari

| Praktik Buruk | Dampak Buruk | Solusi Rekayasa |
| :--- | :--- | :--- |
| Menggunakan tipe data float untuk saldo keuangan | Selisih sen akibat rounding error yang menumpuk | Gunakan tipe integer (satuan sen) dengan validasi solver |
| Mengizinkan transisi state tanpa validasi prasyarat | Pengguna mendapat akses gratis setelah membatalkan langganan | Buktikan matriks transisi dengan formal state graph |
| Validasi hanya di lapisan aplikasi | Transaksi paralel dapat menembus pengecekan (race condition) | Gabungkan bukti formal dengan kunci transaksi database (`SELECT FOR UPDATE`) |

---

### Integrasi dengan Skill Lain (WAJIB)

- `saas-billing` — Membuktikan transisi state langganan dan deduksi kuota secara formal.
- `doku-payment-gateway` — Memvalidasi invarian idempotensi transaksi pembayaran.
- `authentication-identity-expert` — Memverifikasi hierarki peran RBAC/ABAC tanpa celah eskalasi.
- `database-orm-expert` — Mengimplementasikan invarian terbukti ke dalam constraint database.

### Direferensikan oleh Orchestrator (WAJIB)

- `brainstorming` — Tambahkan ke baris "Testing & Keamanan" dan "Desain API & Kontrak" pada Matriks Orkestrasi.
- `zero-to-prod-orchestrator` — Tambahkan ke Fase 2 (Pondasi Proyek) dan Fase 6 (Pengujian Otomatis & Keamanan).

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.