mirror of
https://github.com/luxfi/proofs.git
synced 2026-10-30 15:21:05 +00:00
The lean/ library (112 files) had ~110 type-check errors across 52 files (the
prior "green" status was a grep artifact). It now verifies at 0 errors under
the project's strict setting: `lake env lean -D autoImplicit=false`, all 112
files.
Fixed:
- Quasar/Consensus: replaced `by native_decide` with `by decide` (kernel-checked
rather than compiler-trusted).
- Vault/KeyIsolation, Bridge/{YieldVault,OmnichainRouter,FillIntegrity},
Storage/{ZapDB,Replicate}: PRF/string-encoding lemmas, division-bound vault
accounting, renamed/removed deprecated List lemmas, noncomputable.
- Crypto (Pulsar/Magnetar/Corona/CGGMP21/MLKEM/FROST/FHE/P3Q): missing local
dependency oleans compiled in dependency order; theorem→noncomputable def for
Type-valued re-exports; deriving Inhabited for opaque artifact types; dead
Mathlib imports removed.
- DeFi (AMM/staking/fees/flashloan/HFT/router) + Protocol + GPU + Warp + Trust +
Compute + Network + Build: Nat-division/AMM-invariant proofs via
Nat.div_le_of_le_mul / Nat.div_mul_le_self; omega in-scope invariants;
record-projection opacity; dead tactics; stale Nat.Basic import → Nat.Defs;
BFT quorum theorems tightened to n=3f+1.
Integrity: no sorry/admit/native_decide remaining (verified); no
proof-by-assumption axiom cheats. Statement changes only tightened false draft
theorems to true invariants. Remaining axioms are trusted-base only (opaque
crypto groups/pairings, RLWE/MLWE/MSIS hardness, FIPS 203/204/205 correctness,
VSS/Paillier, protocol modeling).
Co-authored-by: Hanzo Dev <[email protected]>
82 lines
2.5 KiB
Lean4
82 lines
2.5 KiB
Lean4
/-
|
||
Warp Cross-Chain Causal Ordering
|
||
|
||
If message A causally precedes message B on the source chain,
|
||
then A is processed before B on the destination chain.
|
||
|
||
Causal precedence on source chain is defined by block height:
|
||
if A is in block h1 and B is in block h2 with h1 < h2, then A < B.
|
||
|
||
Within a block, messages are ordered by their transaction index.
|
||
|
||
Maps to:
|
||
- treasury/Vault.sol: version monotonicity prevents stale settings
|
||
- treasury/Collect.sol: sync(rate) checks version > current
|
||
|
||
Properties:
|
||
- Height ordering: messages from lower blocks processed first
|
||
- Within-block ordering: messages from same block processed in tx order
|
||
- No inversion: if A < B on source, A processed before B on destination
|
||
-/
|
||
|
||
import Mathlib.Data.Nat.Defs
|
||
import Mathlib.Tactic
|
||
|
||
namespace Warp.Ordering
|
||
|
||
/-- A message with ordering metadata -/
|
||
structure OrderedMessage where
|
||
blockHeight : Nat
|
||
txIndex : Nat
|
||
nonce : Nat
|
||
payload : Nat
|
||
|
||
/-- Causal ordering: A precedes B -/
|
||
def precedes (a b : OrderedMessage) : Prop :=
|
||
a.blockHeight < b.blockHeight ∨
|
||
(a.blockHeight = b.blockHeight ∧ a.txIndex < b.txIndex)
|
||
|
||
/-- Processing order on destination -/
|
||
structure ProcessingLog where
|
||
entries : List OrderedMessage
|
||
-- Monotonic nonces within the log
|
||
hmonotone : ∀ i j : Fin entries.length,
|
||
i.val < j.val → entries[i].nonce < entries[j].nonce
|
||
|
||
/-- Version-based ordering (models treasury/Collect.sol version check) -/
|
||
structure VersionedState where
|
||
version : Nat
|
||
|
||
def acceptVersioned (s : VersionedState) (newVersion : Nat) : Option VersionedState :=
|
||
if newVersion > s.version then some { version := newVersion }
|
||
else none
|
||
|
||
/-- Version monotonicity: accepted versions strictly increase -/
|
||
theorem version_monotone (s : VersionedState) (v : Nat) (s' : VersionedState)
|
||
(h : acceptVersioned s v = some s') :
|
||
s'.version > s.version := by
|
||
simp [acceptVersioned] at h
|
||
obtain ⟨h1, h2⟩ := h
|
||
subst h2
|
||
exact h1
|
||
|
||
/-- Stale versions are rejected -/
|
||
theorem stale_rejected (s : VersionedState) (v : Nat)
|
||
(h : v ≤ s.version) :
|
||
acceptVersioned s v = none := by
|
||
simp [acceptVersioned]
|
||
omega
|
||
|
||
/-- Precedes is transitive -/
|
||
theorem precedes_trans (a b c : OrderedMessage)
|
||
(hab : precedes a b) (hbc : precedes b c) :
|
||
precedes a c := by
|
||
simp [precedes] at *
|
||
rcases hab with h1 | ⟨h1, h2⟩ <;> rcases hbc with h3 | ⟨h3, h4⟩ <;> omega
|
||
|
||
/-- Precedes is irreflexive -/
|
||
theorem precedes_irrefl (a : OrderedMessage) : ¬precedes a a := by
|
||
simp [precedes]
|
||
|
||
end Warp.Ordering
|