Cycle-spectrum reduction and canonical hitting-time identities #
Every fixed power of a map on a finite state type is determined by the eventual cycle length of
its argument: past the state-space cardinality, an exponent may be reduced modulo the cycle length
(iterate_eq_card_add_mod). The cycle length is recovered from the finite set of cycle lengths
(cycleSpectrum) by a divisibility test (spectrum_test, cycleSpectrum_test), and a permutation
is inverted by the power one below the cycle length (perm_symm_eq_iterate).
Given a linear order on the states, canonicalTime f x is the first time at which the trajectory
of x visits the least state of its eventual cycle (canonicalCycle f x). Off the cycles, one
step lowers canonicalTime by one (canonicalTime_apply). Past the transient depth, f^[T] x is
f^[a] (canonicalCycle f x) iff a + canonicalTime f x ≡ T [MOD cycleLength f x]
(iterate_eq_canonical_iff).
Main definitions #
Cslib.FunctionalGraph.cycleSpectrum: the finite set of cycle lengths off.
Main results #
Cslib.FunctionalGraph.iterate_add_cycleLength_mul: adding whole cycles past the transient preserves the state.Cslib.FunctionalGraph.iterate_eq_card_add_mod: exponent reduction pastFintype.card α.Cslib.FunctionalGraph.cycle_test_iff,Cslib.FunctionalGraph.spectrum_test,Cslib.FunctionalGraph.cycleSpectrum_test: recoveringcycleLength f xas the least candidate period dividing a return atFintype.card α.Cslib.FunctionalGraph.injective_cycle_test_iff,Cslib.FunctionalGraph.injective_spectrum_test,Cslib.FunctionalGraph.perm_symm_eq_iterate: specializations to injective maps and permutations.Cslib.FunctionalGraph.canonicalTime_apply: one transient step decrementscanonicalTime.Cslib.FunctionalGraph.iterate_eq_canonical_iff: characterization of states past the transient relative tocanonicalCycle.
References #
- Adapted from lean/Proofs/{Spectrum,PhaseIdentities}.lean at revision
c4cfa198of [S. Schlesinger, Square-root circuit bounds for iterated functions] [Sch26f].
Cycle-spectrum reduction #
Spectrum reduction. Every exponent T at least Fintype.card α can be replaced by
Fintype.card α + (T - Fintype.card α) % cycleLength f x.
The cycle-length divisibility test. f^[Fintype.card α + ℓ] x = f^[Fintype.card α] x
holds iff cycleLength f x ∣ ℓ.
Every cycle length belongs to the cycle spectrum.
Every element of the cycle spectrum is positive.
The spectrum test. Among any set S of positive candidates containing cycleLength f x,
the cycle length is the least element passing the return test at Fintype.card α.
cycleLength f x is the least element of cycleSpectrum f passing the return test at
Fintype.card α.
Permutations and injective maps #
For an injective map, every state has transient depth zero.
For an injective map, the cycle length of x is the minimal period of x.
For an injective map, f^[ℓ] x = x holds iff cycleLength f x ∣ ℓ.
The spectrum test for injective maps, without the shift by Fintype.card α.
A permutation is inverted by the power one below the cycle length of its argument.
Canonical hitting-time and phase identities #
(P1) One step from a transient state lowers canonicalTime by one.
(P2) Past the transient depth, f^[T] x is the state a steps after the least cyclic
state canonicalCycle f x iff a + canonicalTime f x ≡ T [MOD cycleLength f x].