File size: 14,034 Bytes
80d7559
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
# Carry Quantum: Formal Architecture

**Goal:** Proof-carrying execution. The formal model is the source of truth.  
**Date:** 2026-08-21

---

## Layer Map

```

              FORMAL SEMANTICS (Source of Truth)

       β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”

       β”‚                  Agda                    β”‚

       β”‚   dependent types / illegal states       β”‚

       β”‚   unrepresentable at the type level      β”‚

       β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

                        β”‚ shared definitions

                        β–Ό

       β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”

       β”‚                 Lean 4                   β”‚

       β”‚   theorem obligations / proof engine     β”‚

       β”‚   normalization, purity, cycles,         β”‚

       β”‚   absorption, DAG, bounds, ownership     β”‚

       β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

                        β”‚ verified IR / spec

                        β–Ό

              RUNTIME CONTRACT

                        β”‚

       β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”

       β”‚                                 β”‚

       β–Ό                                 β–Ό

  F# reference backend             Rust minimal runtime

  executable semantics             low-level substrate

  conformance corpus               native / WASM / embedded

       β”‚                                 β”‚

       └──────────── conformance β”€β”€β”€β”€β”€β”€β”€β”€β”˜

                     test suite

```

**One specification, two proof perspectives, one reference interpreter, one execution substrate.**  
Agda and Lean are not two implementations β€” they are two views over one mathematical core.

---

## Four-Class Taxonomy

Every formal statement in this system belongs to exactly one class.

```

AXIOM          mathematical assumption β€” asserted, not proved

DEFINITION     what the machine means β€” gives semantic content

INVARIANT      property preserved by execution β€” proved by induction

REFINEMENT     proof that implementation matches semantics β€” closes the loop

```

Calling everything an "invariant" obscures which facts are load-bearing assumptions,
which are semantic choices, and which are correctness guarantees. The classes below
apply this taxonomy to all seven properties from the initial extraction.

---

## Agda: Dependent-Type Specification

The goal in Agda is to make **illegal states unrepresentable**, not to test them afterward.

### FSM State Type

```agda

module CarryQuantum.FSM where



data FSMState : Set where

  Init      : FSMState

  Prepare   : FSMState

  Entangle  : FSMState

  Compute   : FSMState

  Measure   : FSMState

  Verify    : FSMState

  Commit    : FSMState

  Halted    : FSMState

  CycleLimit : FSMState

```

### Allowed Transition β€” Encoded in the Type

Rather than a runtime predicate, make the allowed edge relation a **type index**.
A `Transition s s'` value can only be constructed when `(s, s')` is a legal edge.

```agda

data Transition : FSMState β†’ FSMState β†’ Set where

  T-Init-Prepare   : Transition Init     Prepare

  T-Prep-Entangle  : Transition Prepare  Entangle

  T-Ent-Compute    : Transition Entangle Compute

  T-Comp-Measure   : Transition Compute  Measure

  T-Meas-Verify    : Transition Measure  Verify

  T-Veri-Commit    : Transition Verify   Commit

  T-Comm-Prepare   : Transition Commit   Prepare   -- loop

  T-Comm-Commit    : Transition Commit   Commit    -- terminal

  T-Any-Halted     : βˆ€ {s} β†’ Transition s Halted  -- emergency

```

A value of type `Transition s s'` is a machine-checked proof that `(s, s')` is allowed.
There is no runtime check β€” **an illegal transition cannot be typed.**

### Step Function β€” INV-4 and INV-5 by Construction

```agda

record FSM : Set where

  field

    state     : FSMState

    cycle     : β„•

    max-cycle : β„•

    bounded   : cycle ≀ max-cycle



data StepResult : Set where

  ok    : FSM β†’ StepResult

  error : String β†’ StepResult



-- Terminal states cannot produce ok transitions

data Terminal : FSMState β†’ Set where

  T-Halted     : Terminal Halted

  T-CycleLimit : Terminal CycleLimit



step : FSM β†’ (s' : FSMState) β†’ Transition (FSM.state fsm) s' β†’ StepResult

```

This encodes the refinement theorem directly:
> `step f a = ok f' β†’ AllowedTransition f.state f'.state`

is not a theorem to prove β€” it is a **type guarantee**. `step` only accepts a
`Transition` witness, so `ok` can only be produced for allowed edges.

The terminal absorption invariant (INV-5) becomes:
> There is no value of type `Transition Halted s'` for any `s' β‰  Halted`.

Check: `T-Any-Halted` produces `Transition s Halted` β€” arriving at Halted.
No constructor produces `Transition Halted s'` for non-Halted `s'` β€” leaving Halted is
**unrepresentable**.

---

## Lean 4: Proof Engine

Lean proves the semantic content of the definitions. It does not redefine the FSM β€”
it imports the Agda definitions (or mirrors them exactly) and proves the theorem obligations.

### Four-Class Breakdown

#### AXIOMS

```lean

-- AX-1: Complex arithmetic is sound (we trust Lean's β„‚ library)

-- AX-2: IEEE 754 f64 is a sufficient approximation for simulation purposes

-- AX-3: Random measurement outcomes are sampled from the Born distribution

--       (randomness is external; we prove properties conditioned on valid samples)

```

These are not proved. They are stated explicitly so the proof chain is honest.

#### DEFINITIONS

```lean

namespace CarryQuantum



-- DEF-1: Normalized state

def normalized {n : β„•} (ψ : Fin (2^n) β†’ β„‚) : Prop :=

  βˆ‘ i, Complex.normSq (ψ i) = 1



-- DEF-2: Allowed transition (mirrors Agda, used for statement of refinement theorems)

def AllowedTransition : QFSMState β†’ QFSMState β†’ Prop

  | .Init,     .Prepare   => True

  | .Prepare,  .Entangle  => True

  | .Entangle, .Compute   => True

  | .Compute,  .Measure   => True

  | .Measure,  .Verify    => True

  | .Verify,   .Commit    => True

  | .Commit,   .Prepare   => True

  | .Commit,   .Commit    => True

  | _,         .Halted    => True

  | _,         _          => False



-- DEF-3: Terminal FSM state

def Terminal : QFSMState β†’ Prop

  | .Halted    => True

  | .CycleLimit => True

  | _          => False



-- DEF-4: Unitary gate (norm-preserving linear map)

def IsUnitary {n : β„•} (U : (Fin (2^n) β†’ β„‚) β†’ (Fin (2^n) β†’ β„‚)) : Prop :=

  βˆ€ ψ, normalized ψ β†’ normalized (U ψ)



-- DEF-5: Agent ownership disjointness

def OwnershipDisjoint (a b : Finset β„•) : Prop := Disjoint a b



end CarryQuantum

```

#### INVARIANTS

```lean

namespace CarryQuantum.Invariants



-- INV-1: Normalization is preserved by unitary gate application

theorem gate_preserves_norm

    {n : β„•} (ψ : Fin (2^n) β†’ β„‚) (U : _)

    (h_norm : normalized ψ)

    (h_unit : IsUnitary U) :

    normalized (U ψ) :=

  h_unit ψ h_norm



-- INV-2: Purity is bounded in (0, 1]

-- OPEN: requires ρ βͺ° 0 ∧ Tr(ρ) = 1 β€” pending Mathlib matrix assembly

theorem purity_bounded : sorry := sorry



-- INV-3: Cycle counter is strictly monotone

theorem cycle_monotone (fsm : QFSM)

    (h_valid : AllowedTransition fsm.state s')

    (h_limit : fsm.cycle < fsm.max_cycle) :

    βˆƒ fsm' : QFSM,

      fsm'.state = s' ∧

      fsm'.cycle = fsm.cycle + 1 ∧

      fsm'.cycle ≀ fsm'.max_cycle := by

  exact ⟨⟨s', fsm.cycle + 1, fsm.max_cycle, by omega⟩, rfl, rfl, by omega⟩



-- INV-4: Transition DAG confinement

-- NOTE: In the Agda layer this is a type guarantee, not a theorem.

-- In Lean it is a semantic consequence of AllowedTransition.

-- The proof obligation is that the runtime (F# / Rust) only calls step with

-- a valid AllowedTransition witness (see REFINEMENT section).



-- INV-5: Terminal states are absorbing

theorem terminal_no_step (s : QFSMState)

    (h_term : Terminal s) :

    βˆ€ s', Β¬ AllowedTransition s s' ∨ s' = QFSMState.Halted := by

  intro s'

  cases s <;> simp [Terminal, AllowedTransition] at *



-- INV-6: Gate targets are in-bounds and distinct

def targets_valid (n : β„•) (targets : List β„•) : Prop :=

  targets.Nodup ∧ βˆ€ t ∈ targets, t < n



-- INV-7: All agent qubit ownership sets are pairwise disjoint

def AllAgentsDisjoint (owners : List (Finset β„•)) : Prop :=

  βˆ€ i j (hi : i < owners.length) (hj : j < owners.length),

    i β‰  j β†’ Disjoint (owners[i]'hi) (owners[j]'hj)



end CarryQuantum.Invariants

```

#### REFINEMENT THEOREMS

These are the class the original INVARIANTS.md was missing. They close the gap
between the formal spec and the running implementation.

```lean

namespace CarryQuantum.Refinement



-- REF-1: F# / Rust `transition` only succeeds for allowed edges

-- (This is stated as a specification obligation on the runtime implementation)

axiom rust_transition_correct :

  βˆ€ (fsm : QFSM) (s' : QFSMState),

    RustRuntime.transition fsm s' = .ok fsm' β†’

    AllowedTransition fsm.state s'



-- REF-2: F# / Rust `transition` fails on terminal states

axiom rust_terminal_halts :

  βˆ€ (fsm : QFSM) (s' : QFSMState),

    Terminal fsm.state β†’

    RustRuntime.transition fsm s' = .err "FSM_TERMINAL"



-- REF-3: F# apply_gate preserves normalization

axiom fsharp_gate_norm :

  βˆ€ (ψ : StateVector) (g : Gate),

    normalized ψ.amplitudes β†’

    normalized (FSharpRuntime.apply_gate g ψ).amplitudes



-- These axioms become theorems once the conformance test suite is built

-- and the F# reference interpreter is verified against it.

-- REF-1 and REF-2 are discharged by the conformance corpus.

-- REF-3 is discharged by numeric verification of each gate matrix.



end CarryQuantum.Refinement

```

---

## F# Reference Backend

F# is the **executable semantic reference**. It is not the production runtime β€”
it is the thing Rust must agree with on all conformance inputs.

```fsharp

module CarryQuantum.Reference



type FSMState =

    | Init | Prepare | Entangle | Compute

    | Measure | Verify | Commit | Halted | CycleLimit



type StepError = InvalidTransition | TerminalState | CycleLimitReached



let allowedTransition (s : FSMState) (s' : FSMState) : bool =

    match s, s' with

    | Init,     Prepare   -> true

    | Prepare,  Entangle  -> true

    | Entangle, Compute   -> true

    | Compute,  Measure   -> true

    | Measure,  Verify    -> true

    | Verify,   Commit    -> true

    | Commit,   Prepare   -> true

    | Commit,   Commit    -> true

    | _,        Halted    -> true

    | _,        _         -> false



let isTerminal = function Halted | CycleLimit -> true | _ -> false



// step : FSM β†’ FSMState β†’ Result<FSM, StepError>

// This is the executable version of the Agda `step` β€” same semantics, runnable.

let step (fsm : FSM) (target : FSMState) : Result<FSM, StepError> =

    if isTerminal fsm.State then

        Error TerminalState           // REF-2

    elif fsm.Cycle >= fsm.MaxCycle then

        Ok { fsm with State = CycleLimit }

    elif not (allowedTransition fsm.State target) then

        Error InvalidTransition       // REF-1

    else

        Ok { fsm with State = target; Cycle = fsm.Cycle + 1 }

```

The conformance test suite runs F# `step` and Rust `transition` on the same
inputs and asserts identical outputs. Any divergence is a Rust bug, not a proof gap.

---

## Rust: Minimal Runtime

Rust is **not** where the mathematics lives. It is an implementation of
the formally specified machine, constrained to:

```

minimal state

minimal allocator

minimal scheduler

minimal numerical kernel

minimal FFI

minimal error model

```

The single change required by the invariant extraction (INV-5 bug):

```rust

// carry-agent/runtime/quantum/fsm.rs

pub fn transition(&mut self, target: QuantumFSMState, ...) -> Result<...> {

    // REFINEMENT REF-2: terminal states are absorbing

    if matches!(self.state, QuantumFSMState::Halted | QuantumFSMState::CycleLimit) {

        return Err(format!("FSM_TERMINAL: cannot transition from {:?}", self.state));

    }

    // ... rest unchanged

}

```

---

## Execution Chain

```

Agda (illegal states unrepresentable)

      β”‚

      β”‚ shared definitions

      β–Ό

Lean 4 (INV-1,2,3,4,5,6,7 + REF-1,2,3 proven)

      β”‚

      β”‚ verified spec / IR

      β–Ό

F# reference interpreter (executable semantics)

      β”‚

      β”‚ conformance corpus

      β–Ό

Rust minimal runtime (conformance-tested implementation)

      β”‚

      β–Ό

native / WASM / embedded target

```

---

## Open Obligations

| ID | Class | Description | Path to closure |
|----|-------|-------------|----------------|
| AX-3 | AXIOM | Born rule randomness is external | Accept as axiom; document explicitly |
| INV-2 | INVARIANT | `0 < Tr(ρ²) ≀ 1` | Mathlib `Matrix.PosSemidef` + Cauchy-Schwarz |
| INV-1 full | INVARIANT | Replace `IsUnitary` hypothesis with proof from gate matrices | Prove each gate matrix is unitary in Lean |
| REF-1 | REFINEMENT | Rust `transition` only accepts allowed edges | Conformance corpus + property test |
| REF-2 | REFINEMENT | Rust `transition` fails on terminal states | Fix INV-5 bug first, then property test |
| REF-3 | REFINEMENT | F# `apply_gate` preserves normalization | Numeric verification of each gate matrix |
| Agda-Lean bridge | ARCHITECTURE | Shared definition import so neither diverges | Decide: shared file or auto-generated Lean from Agda |