Phases, first hitting times, and visit schedules in finite functional graphs #
Past the transient, two times give the same state exactly when they agree modulo the cycle
length (iterate_eq_iterate_iff_modEq). Given a linear order on the states, every state past
the transient is determined by the canonical cycle representative and its phase
(iterate_eq_iterate_phase), and iterating shifts the phase (phase_iterate).
These identities give the first hitting time of any target y from x in closed form
(hittingTime_spec). A periodic target is reached exactly when both have the same canonical
representative, first after the transient of x and the phase difference (cyclicDistance).
A transient target is reached only at the difference of the transient depths. In both cases the
time is below the number of states.
After the first visit to a target, subsequent visits form an arithmetic progression with step
Function.minimalPeriod f y, where period zero makes a single visit a special case of the same
formula (visit_schedule_of_first, visit_schedule), and the number of visits up to a deadline
T is given by arithmeticProgressionCount (visit_count_of_first).
The state type may live in any universe; it is finite, and representatives use a linear order.
Main definitions #
Cslib.FunctionalGraph.cyclicDistance: the phase difference fromxto a target on its cycle.Cslib.FunctionalGraph.reaches: whether the orbit ofxreachesy, in closed form.Cslib.FunctionalGraph.hittingTime: the first hitting time, in closed form.Cslib.FunctionalGraph.arithmeticProgressionCount: count of progression terms up to a deadline.
Main results #
Cslib.FunctionalGraph.iterate_eq_iterate_phase: states past the transient by phase.Cslib.FunctionalGraph.phase_iterate: iterating shifts the phase.Cslib.FunctionalGraph.cyclic_first_hit: the first hit of a periodic target.Cslib.FunctionalGraph.reaches_iff,Cslib.FunctionalGraph.hittingTime_spec: reachability and the exact first hitting time.Cslib.FunctionalGraph.visit_schedule_of_first,Cslib.FunctionalGraph.visit_before_deadline_of_first,Cslib.FunctionalGraph.visit_schedule: complete schedules of visits.Cslib.FunctionalGraph.arithmeticProgressionCount_spec,Cslib.FunctionalGraph.visit_count_of_first: counting visits up to a deadline.
References #
- Adapted from lean/Proofs/{HittingTimes,Navigation,VisitSchedules,VisitCounts}.lean in S. Schlesinger, Square-root circuit bounds for iterated functions.
The phase cancels the time of the first visit to the representative.
Past the transient, the state is the representative advanced by the phase plus the time.
Any visit to the representative determines the phase.
Iterating shifts the phase by the number of steps.
The number of steps after the transient of x to a target on the same cycle: the phase
difference modulo the cycle length.
Instances For
First hit of a periodic target. If y is periodic with the same canonical
representative as x, the orbit of x first reaches y after its transient and the cyclic
distance.
Whether the orbit of x reaches y: for a periodic target, whether both have the same
canonical representative; for a transient target, whether the state at the difference of the
transient depths is y.
Instances For
The first hitting time from x to y when y is reachable: the transient and the cyclic
distance for a periodic target, the difference of the transient depths otherwise.
Instances For
First hitting times. If y is reachable from x, then hittingTime f x y is the first
time the orbit of x visits y, and it is below the number of states. Nothing is claimed about
hittingTime f x y when y is unreachable.
Complete visit schedules and bounded visit counts #
After the first visit to y at time d, subsequent visits form an arithmetic progression
with step Function.minimalPeriod f y, where period zero makes a single visit a special case of
the same formula.
Complete visit schedule from x to y in terms of reaches, hittingTime, and
Function.minimalPeriod.
Number of progression terms d + k * p in {0, ..., T}, with p = 0 denoting a singleton
visit at d.