Hopfield energy: single-step dynamics (spec layer) #
This file proves the key “global dynamics” lemma from the Hopfield literature:
Under symmetric, zero-diagonal weights, the Hopfield energy is non-increasing under an asynchronous update.
We work over ℝ, where the classical energy argument is algebraic. The executable Hopfield
implementation uses IEEE32Exec; floating-point executions are connected to this theorem only
through explicit runtime/rounding bridge statements, not by silently reusing real arithmetic laws.
Symmetry condition on Hopfield weights: W i j = W j i.
Instances For
Zero-diagonal condition on Hopfield weights: W i i = 0.
Instances For
Instances For
noncomputable def
NN.MLTheory.Proofs.Hopfield.netx
{n : ℕ}
(p : Spec.Hopfield.Params ℝ n)
(x : Fin n → ℝ)
(u : Fin n)
:
Instances For
noncomputable def
NN.MLTheory.Proofs.Hopfield.quad
{n : ℕ}
(p : Spec.Hopfield.Params ℝ n)
(x : Fin n → ℝ)
:
Instances For
noncomputable def
NN.MLTheory.Proofs.Hopfield.energyU
{n : ℕ}
(p : Spec.Hopfield.Params ℝ n)
(x : Fin n → ℝ)
:
Instances For
theorem
NN.MLTheory.Proofs.Hopfield.energy_eq_energyU
{n : ℕ}
(p : Spec.Hopfield.Params ℝ n)
(s : Spec.Hopfield.State n)
:
theorem
NN.MLTheory.Proofs.Hopfield.net_eq_netx
{n : ℕ}
(p : Spec.Hopfield.Params ℝ n)
(s : Spec.Hopfield.State n)
(u : Fin n)
:
theorem
NN.MLTheory.Proofs.Hopfield.x_updateAt_eq_update
{n : ℕ}
(p : Spec.Hopfield.Params ℝ n)
(s : Spec.Hopfield.State n)
(u : Fin n)
:
x (Spec.Hopfield.updateAt p s u) = Function.update (x s) u (Spec.Hopfield.act (decide (p.θ u ≤ Spec.Hopfield.net p s u)))
theorem
NN.MLTheory.Proofs.Hopfield.quad_delta_update
{n : ℕ}
(p : Spec.Hopfield.Params ℝ n)
(hsym : SymmetricW p)
(hdiag : DiagonalZero p)
(x0 : Fin n → ℝ)
(u : Fin n)
(xu' : ℝ)
:
theorem
NN.MLTheory.Proofs.Hopfield.energy_updateAt_le
{n : ℕ}
(p : Spec.Hopfield.Params ℝ n)
(hsym : SymmetricW p)
(hdiag : DiagonalZero p)
(s : Spec.Hopfield.State n)
(u : Fin n)
:
theorem
NN.MLTheory.Proofs.Hopfield.energy_updateAt_delta
{n : ℕ}
(p : Spec.Hopfield.Params ℝ n)
(hsym : SymmetricW p)
(hdiag : DiagonalZero p)
(s : Spec.Hopfield.State n)
(u : Fin n)
:
have x0 := x s;
have xu' := Spec.Hopfield.act (decide (p.θ u ≤ Spec.Hopfield.net p s u));
Spec.Hopfield.energy p (Spec.Hopfield.updateAt p s u) - Spec.Hopfield.energy p s = -(xu' - x0 u) * (Spec.Hopfield.net p s u - p.θ u)
theorem
NN.MLTheory.Proofs.Hopfield.energy_updateAt_eq_of_net_eq_theta
{n : ℕ}
(p : Spec.Hopfield.Params ℝ n)
(hsym : SymmetricW p)
(hdiag : DiagonalZero p)
(s : Spec.Hopfield.State n)
(u : Fin n)
(hnet : Spec.Hopfield.net p s u = p.θ u)
:
theorem
NN.MLTheory.Proofs.Hopfield.energy_updateAt_lt_of_change_of_ne
{n : ℕ}
(p : Spec.Hopfield.Params ℝ n)
(hsym : SymmetricW p)
(hdiag : DiagonalZero p)
(s : Spec.Hopfield.State n)
(u : Fin n)
(hchange : Spec.Hopfield.updateAt p s u ≠ s)
(hne : Spec.Hopfield.net p s u ≠ p.θ u)
: