Documentation

EconCSLib.Math.FixedPoint.Brouwer

EconCSLib.Math.FixedPoint.Brouwer #

Brouwer's fixed-point theorem for self-maps of the standard simplex, proved via Scarf's combinatorial lemma.

Main result #

Setup #

The proof works by discrete approximation. For each level l : ℕ+, define the discrete triangulation lattice

TT n l = { x : Πₗ (_ : Fin n), Fin (l+1) | ∑ i, (x i : ℕ) = l }

Each element of TT n l is a tuple of nonneg integers summing to l, which embeds into the standard simplex via TTtostdSimplex x j = x j / l.

The instance TT.ILO : IndexedLOrder (Fin n) (TT n l) gives TT n l a family of linear orders indexed by Fin n: for direction i, the order on TT n l is the lexicographic order on (x i, x).

Proof strategy #

  1. Coloring (Fcolor): For each x : TT n l, pick a coordinate j where (f x)_j ≥ x_j — i.e., f moves x in the j-th direction. This is well-defined since x j = 1 = ∑ (f x) j forces at least one coordinate to increase.

  2. Scarf's lemma (TT.ILO.Scarf): Applied with the coloring Fcolor, yields a colorful room (σ, C) at level l — a set of n lattice points covering all n directions.

  3. Limit (room_seq, hpkg): As l → ∞, extract a subsequence of colorful rooms via exists_subseq_constant_of_finite_image (pigeonhole on the finite color set C), then use compactness of the simplex to obtain a convergent subsequence of the representative room points.

  4. Fixed point: The limit point z satisfies f(z) ≥ z coordinatewise (by passing the coloring property through the limit). Since z_j = 1 = ∑ f(z)_j, coordinatewise inequality forces f(z) = z.

References #

instance Pi.Lex.finite {I : Type u_1} {X : IType u_2} [DecidableEq I] [Finite I] [∀ (a : I), Finite (X a)] :
Finite (Lex ((i : I) → (fun (a : I) => X a) i))

A dependent product of finite, indexed by finite, is a finite.

@[reducible, inline]
abbrev TT (n l : ℕ+) :
Set (Lex ((i : Fin n) → (fun (x : Fin n) => Fin (l + 1)) i))
Equations
Instances For
    instance TT.finite (n l : ℕ+) :
    Finite (TT n l)
    @[implicit_reducible]
    instance TT.inhabited (n l : ℕ+) :
    Inhabited (TT n l)
    Equations
    @[implicit_reducible]
    instance TT.funlike (n l : ℕ+) :
    FunLike (↑(TT n l)) (Fin n) (Fin (l + 1))
    Equations
    • TT.funlike n l = { coe := fun (a : (TT n l)) => a, coe_injective' := }
    noncomputable def TTtostdSimplex {n l : ℕ+} (x : (TT n l)) :
    (stdSimplex (Fin n))
    Equations
    Instances For
      @[implicit_reducible]
      noncomputable instance TT.CoestdSimplex (n l : ℕ+) :
      CoeOut (TT n l) (stdSimplex (Fin n))
      Equations
      @[reducible, inline]
      abbrev TT.Ilt {n l : ℕ+} (i : Fin n) (x y : (TT n l)) :
      Equations
      Instances For
        instance TT.IST (n l : ℕ+) (i : Fin n) :
        IsStrictTotalOrder (↑(TT n l)) (Ilt i)
        @[implicit_reducible]
        noncomputable instance TT.ILO {n l : ℕ+} :
        IndexedLOrder (Fin n) (TT n l)
        Equations
        theorem TT.Ilt_def (n l : ℕ+) (i : Fin n) (a b : (TT n l)) :
        a < b Ilt i a b
        theorem TT.Ilt_keyprop (n l : ℕ+) (i : Fin n) (a b : (TT n l)) :
        a i < b ia < b
        theorem size_bound_key (n l : ℕ+) (σ : Finset (TT n l)) (C : Finset (Fin n)) (h : IndexedLOrder.isDominant σ C) (h2 : σ.Nonempty) :
        l < kC, (Finset.image (fun (x : (TT n l)) => (x k)) σ).min' + C.card
        theorem size_bound_in (n l : ℕ+) (σ : Finset (TT n l)) (C : Finset (Fin n)) (h : IndexedLOrder.isDominant σ C) (x : (TT n l)) :
        x σyσ, ∀ (i : Fin n), |(x i) - (y i)| < 2 * (n + 1)
        theorem size_bound_out (n l : ℕ+) (σ : Finset (TT n l)) (C : Finset (Fin n)) (h : IndexedLOrder.isDominant σ C) (x : (TT n l)) :
        x σiC, (x i) < n + 1
        instance stdSimplex.upidx {n : ℕ+} (x y : (stdSimplex (Fin n))) :
        Nonempty {i : Fin n | x i y i}
        noncomputable def stdSimplex.pick {n : ℕ+} (x y : (stdSimplex (Fin n))) :
        {i : Fin n | x i y i}
        Equations
        Instances For
          noncomputable def Fcolor {n l : ℕ+} (f : (stdSimplex (Fin n))(stdSimplex (Fin n))) (x : (TT n l)) :
          Fin n
          Equations
          Instances For
            noncomputable def room_seq {n : ℕ+} (f : (stdSimplex (Fin n))(stdSimplex (Fin n))) (l' : ) :
            Equations
            Instances For
              noncomputable def room_point_seq {n : ℕ+} (f : (stdSimplex (Fin n))(stdSimplex (Fin n))) (l' : ) :
              (TT n l' + 1, )
              Equations
              Instances For
                def mk_subseq (f : ) (h : ∀ (n : ), n < f n) :
                Equations
                Instances For
                  theorem exists_subseq_constant_of_finite_image {X : Type u_1} {s : Finset X} (e : X) (he : ∀ (n : ), e n s) :
                  as, ∃ (g : ↪o ), ∀ (n : ), e (g n) = a
                  theorem constant_index_set_nonempty {n : ℕ+} (f : (stdSimplex (Fin n))(stdSimplex (Fin n))) :
                  Nonempty {(a, g) : Finset (Fin n) × ( ↪o ) | ∀ (l' : ), (↑(room_seq f (g l'))).2 = a}
                  noncomputable def gpkg {n : ℕ+} (f : (stdSimplex (Fin n))(stdSimplex (Fin n))) :
                  {(a, g) : Finset (Fin n) × ( ↪o ) | ∀ (l' : ), (↑(room_seq f (g l'))).2 = a}
                  Equations
                  Instances For
                    @[reducible, inline]
                    noncomputable abbrev g1 {n : ℕ+} (f : (stdSimplex (Fin n))(stdSimplex (Fin n))) :
                    Equations
                    Instances For
                      theorem dominant_coords_tend_to_zero {n : ℕ+} (f : (stdSimplex (Fin n))(stdSimplex (Fin n))) (C : Finset (Fin n)) (g : ↪o ) (h_const : ∀ (l' : ), (↑(room_seq f (g l'))).2 = C) (i : Fin n) :
                      iCFilter.Tendsto (fun (l' : ) => (TTtostdSimplex (room_point_seq f (g l'))) i) Filter.atTop (nhds 0)
                      @[reducible]
                      def hpkg_aux {n : ℕ+} (f : (stdSimplex (Fin n))(stdSimplex (Fin n))) :
                      Nonempty {(z, h) : (stdSimplex (Fin n)) × () | StrictMono h Filter.Tendsto ((fun (l' : ) => TTtostdSimplex (room_point_seq f ((g1 f) l'))) h) Filter.atTop (nhds z)}
                      Equations
                      • =
                      Instances For
                        noncomputable def hpkg {n : ℕ+} (f : (stdSimplex (Fin n))(stdSimplex (Fin n))) :
                        {(z, h) : (stdSimplex (Fin n)) × () | StrictMono h Filter.Tendsto ((fun (l' : ) => TTtostdSimplex (room_point_seq f ((g1 f) l'))) h) Filter.atTop (nhds z)}
                        Equations
                        Instances For
                          theorem tendsto_diam_to_zero {n : ℕ+} (f : (stdSimplex (Fin n))(stdSimplex (Fin n))) :
                          Filter.Tendsto (fun (k : ) => Metric.diam (Finset.image (fun (x : (TT n (g1 f) ((↑(hpkg f)).2 k) + 1, )) => TTtostdSimplex x) (↑(room_seq f ((g1 f) ((↑(hpkg f)).2 k)))).1)) Filter.atTop (nhds 0)
                          theorem f_coords_ge_z_coords {n : ℕ+} (f : (stdSimplex (Fin n))(stdSimplex (Fin n))) (hf : Continuous f) (i : Fin n) :
                          i (↑(gpkg f)).1(f (↑(hpkg f)).1) i (↑(hpkg f)).1 i
                          theorem Brouwer {n : ℕ+} (f : (stdSimplex (Fin n))(stdSimplex (Fin n))) (hf : Continuous f) :
                          ∃ (x : (stdSimplex (Fin n))), f x = x