Hopfield cyclic-sweep convergence (finite-state argument) #
This file uses the tie-handling progress lemma from Progress.lean to prove the classical
finite-state global dynamics facts for cyclic sweeps:
- No nontrivial cycles for the full-sweep update
cycleUpdate(hence convergence). - A coarse convergence bound of at most
2^nsweeps (and thereforen * 2^nsingle-coordinate updates) from any initial state, by a pigeonhole argument on the finite state spaceBool^n.
The statements are at the “sweep level” (one full pass over coordinates), written with Mathlib's
iterate notation (cycleUpdate p)^[k]. Connecting this to seqStates with cyclicUseq is routine
and can be layered on top.
With symmetric weights and zero diagonal, a periodic orbit of the sweep is a fixed point.
This is the heart of the Hopfield convergence argument: energy never increases along a sweep, so on a cycle it must be constant, and then the active-unit count would have to strictly increase around the cycle and return to its starting value, which is impossible.
A fixed point is reached within Fintype.card (State n) sweeps.
Finitely many states plus no nontrivial cycles gives termination; the bound is the crude pigeonhole one, not a claim about how fast the network actually settles.
The same bound written as 2 ^ n, since a state is one bit per unit.