|
| 1 | +/- |
| 2 | +Copyright (c) 2023 Yury Kudryashov. All rights reserved. |
| 3 | +Released under Apache 2.0 license as described in the file LICENSE. |
| 4 | +Authors: Yury Kudryashov |
| 5 | +-/ |
| 6 | +import Mathlib.Dynamics.BirkhoffSum.Basic |
| 7 | +import Mathlib.Algebra.Module.Basic |
| 8 | + |
| 9 | +/-! |
| 10 | +# Birkhoff average |
| 11 | +
|
| 12 | +In this file we define `birkhoffAverage f g n x` to be |
| 13 | +$$ |
| 14 | +\frac{1}{n}\sum_{k=0}^{n-1}g(f^{[k]}(x)), |
| 15 | +$$ |
| 16 | +where `f : α → α` is a self-map on some type `α`, |
| 17 | +`g : α → M` is a function from `α` to a module over a division semiring `R`, |
| 18 | +and `R` is used to formalize division by `n` as `(n : R)⁻¹ • _`. |
| 19 | +
|
| 20 | +While we need an auxiliary division semiring `R` to define `birkhoffAverage`, |
| 21 | +the definition does not depend on the choice of `R`, |
| 22 | +see `birkhoffAverage_congr_ring`. |
| 23 | +
|
| 24 | +-/ |
| 25 | + |
| 26 | +section birkhoffAverage |
| 27 | + |
| 28 | +variable (R : Type _) {α M : Type _} [DivisionSemiring R] [AddCommMonoid M] [Module R M] |
| 29 | + |
| 30 | +/-- The average value of `g` on the first `n` points of the orbit of `x` under `f`, |
| 31 | +i.e. the Birkhoff sum `∑ k in Finset.range n, g (f^[k] x)` divided by `n`. |
| 32 | +
|
| 33 | +This average appears in many ergodic theorems |
| 34 | +which say that `(birkhoffAverage R f g · x)` |
| 35 | +converges to the "space average" `⨍ x, g x ∂μ` as `n → ∞`. |
| 36 | +
|
| 37 | +We use an auxiliary `[DivisionSemiring R]` to define division by `n`. |
| 38 | +However, the definition does not depend on the choice of `R`, |
| 39 | +see `birkhoffAverage_congr_ring`. -/ |
| 40 | +def birkhoffAverage (f : α → α) (g : α → M) (n : ℕ) (x : α) : M := (n : R)⁻¹ • birkhoffSum f g n x |
| 41 | + |
| 42 | +theorem birkhoffAverage_zero (f : α → α) (g : α → M) (x : α) : |
| 43 | + birkhoffAverage R f g 0 x = 0 := by simp [birkhoffAverage] |
| 44 | + |
| 45 | +@[simp] theorem birkhoffAverage_zero' (f : α → α) (g : α → M) : birkhoffAverage R f g 0 = 0 := |
| 46 | + funext <| birkhoffAverage_zero _ _ _ |
| 47 | + |
| 48 | +theorem birkhoffAverage_one (f : α → α) (g : α → M) (x : α) : |
| 49 | + birkhoffAverage R f g 1 x = g x := by simp [birkhoffAverage] |
| 50 | + |
| 51 | +@[simp] |
| 52 | +theorem birkhoffAverage_one' (f : α → α) (g : α → M) : birkhoffAverage R f g 1 = g := |
| 53 | + funext <| birkhoffAverage_one R f g |
| 54 | + |
| 55 | +theorem map_birkhoffAverage (S : Type _) {F N : Type _} |
| 56 | + [DivisionSemiring S] [AddCommMonoid N] [Module S N] |
| 57 | + [AddMonoidHomClass F M N] (g' : F) (f : α → α) (g : α → M) (n : ℕ) (x : α) : |
| 58 | + g' (birkhoffAverage R f g n x) = birkhoffAverage S f (g' ∘ g) n x := by |
| 59 | + simp only [birkhoffAverage, map_inv_nat_cast_smul g' R S, map_birkhoffSum] |
| 60 | + |
| 61 | +theorem birkhoffAverage_congr_ring (S : Type _) [DivisionSemiring S] [Module S M] |
| 62 | + (f : α → α) (g : α → M) (n : ℕ) (x : α) : |
| 63 | + birkhoffAverage R f g n x = birkhoffAverage S f g n x := |
| 64 | + map_birkhoffAverage R S (AddMonoidHom.id M) f g n x |
| 65 | + |
| 66 | +theorem birkhoffAverage_congr_ring' (S : Type _) [DivisionSemiring S] [Module S M] : |
| 67 | + birkhoffAverage (α := α) (M := M) R = birkhoffAverage S := by |
| 68 | + ext; apply birkhoffAverage_congr_ring |
| 69 | + |
| 70 | +theorem Function.IsFixedPt.birkhoffAverage_eq [CharZero R] {f : α → α} {x : α} (h : IsFixedPt f x) |
| 71 | + (g : α → M) {n : ℕ} (hn : n ≠ 0) : birkhoffAverage R f g n x = g x := by |
| 72 | + rw [birkhoffAverage, h.birkhoffSum_eq, nsmul_eq_smul_cast R, inv_smul_smul₀] |
| 73 | + rwa [Nat.cast_ne_zero] |
| 74 | + |
| 75 | +end birkhoffAverage |
| 76 | + |
| 77 | +/-- Birkhoff average is "almost invariant" under `f`: |
| 78 | +the difference between `birkhoffAverage R f g n (f x)` and `birkhoffAverage R f g n x` |
| 79 | +is equal to `(n : R)⁻¹ • (g (f^[n] x) - g x)`. -/ |
| 80 | +theorem birkhoffAverage_apply_sub_birkhoffAverage (R : Type _) [DivisionRing R] |
| 81 | + [AddCommGroup M] [Module R M] (f : α → α) (g : α → M) (n : ℕ) (x : α) : |
| 82 | + birkhoffAverage R f g n (f x) - birkhoffAverage R f g n x = |
| 83 | + (n : R)⁻¹ • (g (f^[n] x) - g x) := by |
| 84 | + simp only [birkhoffAverage, birkhoffSum_apply_sub_birkhoffSum, ← smul_sub] |
0 commit comments