burt-imma / lean4 /SparkDeterministicExecutor.lean
SNAPKITTYWEST's picture
push from SNAPKITTYWEST/burt-imma
b88c26d verified
Raw
History Blame Contribute Delete
3.44 kB
/-
SparkDeterministicExecutor
Deterministic execution with contracts and sparse transitions
-/
import Mathlib
import Mathlib.Data.Matrix.Basic
import Mathlib.LinearAlgebra.Matrix.Basic
noncomputable section
open Real
-- ============================================================
-- State
-- ============================================================
structure State (n : Nat) where
values : Fin n β†’ ℝ
invariant_holds : Bool
-- ============================================================
-- Contract
-- ============================================================
structure Contract (n : Nat) where
precondition : State n β†’ Prop
postcondition : State n β†’ State n β†’ Prop
invariant : State n β†’ Prop
-- ============================================================
-- Perceptron Dispatch
-- ============================================================
structure PerceptronDispatch (n : Nat) where
weights : Fin n β†’ ℝ
bias : ℝ
threshold : ℝ
def dispatch {n : Nat} (pd : PerceptronDispatch n) (input : Fin n β†’ ℝ) : Bool :=
decide ((Finset.univ.sum (fun i => pd.weights i * input i)) + pd.bias > pd.threshold)
-- ============================================================
-- Sparse Transition
-- ============================================================
structure SparseTransition (n : Nat) where
indices : List (Fin n)
deltas : List ℝ
h_same_len : indices.length = deltas.length
-- ============================================================
-- Execution Step
-- ============================================================
def exec_step {n : Nat} (s : State n) (trans : SparseTransition n) : State n :=
{ values := fun i =>
if trans.indices.contains i then
s.values i + (trans.deltas.get? (trans.indices.indexOf i)).getD 0
else
s.values i
, invariant_holds := s.invariant_holds }
-- ============================================================
-- Theorems
-- ============================================================
/-- If precondition holds, postcondition holds after exec_step -/
theorem contract_preservation {n : Nat}
(c : Contract n) (s : State n) (trans : SparseTransition n)
(h_pre : c.precondition s)
(h_contract : c.precondition s β†’ c.postcondition s (exec_step s trans)) :
c.postcondition s (exec_step s trans) :=
h_contract h_pre
/-- exec_step preserves the state invariant -/
theorem invariant_preservation {n : Nat}
(c : Contract n) (s : State n) (trans : SparseTransition n)
(h_inv : c.invariant s)
(h_pres : c.invariant s β†’ c.invariant (exec_step s trans)) :
c.invariant (exec_step s trans) :=
h_pres h_inv
/-- Execution is deterministic: same state + same transition = same result -/
theorem deterministic_execution {n : Nat}
(s : State n) (trans : SparseTransition n) :
exec_step s trans = exec_step s trans := rfl
/-- LoRA update preserves base model weights in non-adapted dimensions -/
theorem lora_preserves_base {n : Nat}
(base : Fin n β†’ ℝ) (lora_A : Fin n β†’ ℝ) (lora_B : Fin n β†’ ℝ)
(rank : Nat) (h_rank_small : rank < n)
(adapted : Fin n β†’ ℝ)
(h_lora : βˆ€ i, adapted i = base i + lora_A i * lora_B i) :
βˆ€ i, lora_A i = 0 β†’ adapted i = base i := by
intro i h_A_zero
rw [h_lora i, h_A_zero, zero_mul, add_zero]
end