Documentation

LeanPool.Brouwer.Nash

Existence of mixed Nash equilibria #

This file defines finite games (FinGame), mixed strategy profiles, and the mixed Nash equilibrium predicate (FinGame.mixedNashEquilibrium). The best-response correspondence is turned into a continuous self-map of the product of strategy simplices, and ExistsNashEq derives the existence of a mixed Nash equilibrium in every finite game from Brouwer's fixed-point theorem on a product of simplices.

structure Game :
Type (u + 1)

A game: a finite-or-infinite set of players, each with a set of pure strategies and a real-valued payoff function on the profiles of all players.

  • I : Type u

    The set of players.

  • HI : Inhabited self.I
  • SS : self.IType u

    For each player, the set of pure strategies.

  • HSS (i : self.I) : Inhabited (self.SS i)
  • g : self.I((i : self.I) → self.SS i)

    The payoff of each player as a function of the strategy profile.

Instances For
    def Game.NashEquilibrium {G : Game} (x : (i : G.I) → G.SS i) :

    A strategy profile is a Nash equilibrium if no player can improve unilaterally.

    Equations
    Instances For
      @[implicit_reducible]
      instance Game.instInhabitedSS {G : Game} {i : G.I} :
      Equations
      structure FinGameextends Game :
      Type (u + 1)

      A finite game: a game with finitely many players and finite strategy sets.

      Instances For
        @[implicit_reducible]
        Equations
        @[implicit_reducible]
        instance FinGame.instFintypeSS {G : FinGame} {i : G.I} :
        Fintype (G.SS i)
        Equations
        @[reducible, inline]
        abbrev FinGame.mixedS (G : FinGame) :
        Type u_1

        A mixed strategy profile of a finite game: a simplex point per player.

        Equations
        Instances For
          noncomputable def FinGame.mixedG {G : FinGame} (i : G.I) (m : (i : G.I) → (MixedStrategy (G.SS i))) :

          The expected payoff of player i under a mixed strategy profile.

          Equations
          Instances For
            theorem FinGame.mixed_g_linear {G : FinGame} {i : G.I} {x : (a : G.I) → (MixedStrategy (G.SS a))} {y : (MixedStrategy (G.SS i))} :
            mixedG i (Function.update x i y) = s : G.SS i, y s * mixedG i (Function.update x i (stdSimplex.pure s))
            noncomputable def FinGame.FinGame2MixedGame (G : FinGame) :

            The mixed extension of a finite game, as a Game on simplices.

            Equations
            Instances For

              Notation μ G for the mixed extension of a finite game G.

              Equations
              Instances For

                A mixed strategy profile is a Nash equilibrium of the mixed game.

                Equations
                Instances For
                  def reindex {G : FinGame} {n : } (eI : G.I Fin n) :
                  G.mixedS(k : Fin n) → (stdSimplex (G.SS (eI.symm k)))

                  Reindex a mixed strategy profile along an equivalence G.IFin n.

                  Equations
                  Instances For
                    def reindexInv {G : FinGame} {n : } (eI : G.I Fin n) :
                    ((k : Fin n) → (stdSimplex (G.SS (eI.symm k))))G.mixedS

                    The inverse of reindex, transporting along the equivalence.

                    Equations
                    Instances For
                      theorem reindex_right_inv {G : FinGame} {n : } (eI : G.I Fin n) (y : (k : Fin n) → (stdSimplex (G.SS (eI.symm k)))) :
                      reindex eI (reindexInv eI y) = y
                      theorem reindex_left_inv {G : FinGame} {n : } (eI : G.I Fin n) :
                      have reindex := fun (w : G.mixedS) (k : Fin n) => w (eI.symm k); have reindexInv := fun (z : (k : Fin n) → (stdSimplex (G.SS (eI.symm k)))) (i : G.I) => z (eI i); ∀ (x : G.mixedS), reindexInv (reindex x) = x
                      def mapSimplex {n : Type u_1} {m : Type u_2} [Fintype n] [Fintype m] (e : n m) :
                      (stdSimplex n)(stdSimplex m)

                      Lifts an equivalence e : n ≃ m to a function between simplices.

                      Equations
                      Instances For
                        @[simp]
                        theorem map_simplex_apply {n : Type u_1} {m : Type u_2} [Fintype n] [Fintype m] (e : n m) (x : (stdSimplex n)) (i : m) :
                        (mapSimplex e x) i = x (e.symm i)
                        def mapSimplexEquiv {n : Type u_1} {m : Type u_2} [Fintype n] [Fintype m] (e : n m) :

                        The simplex map induced by an equivalence is itself an equivalence.

                        Equations
                        Instances For
                          def mapMixedSEquiv {G : FinGame} (e : (i : G.I) → G.SS i Fin (Fintype.card (G.SS i))) :
                          G.mixedS ((i : G.I) → (stdSimplex (Fin (Fintype.card (G.SS i)))))

                          Lifts component-wise equivalences to an equivalence on the space of mixed strategies.

                          Equations
                          • One or more equations did not get rendered due to their size.
                          Instances For
                            theorem Brouwer.mixedGame {G : FinGame} (f : G.mixedSG.mixedS) (hf : Continuous f) :
                            ∃ (x : G.mixedS), f x = x
                            @[reducible, inline]
                            noncomputable abbrev gFunction {G : FinGame} (i : G.I) (σ : G.mixedS) (a : G.SS i) :

                            The best-response improvement map used to build the Nash fixed-point map.

                            Equations
                            Instances For
                              theorem sigma_le_g_function {G : FinGame} (i : G.I) (σ : G.mixedS) (a : G.SS i) :
                              (σ i) a gFunction i σ a
                              theorem g_function_noneg {G : FinGame} (i : G.I) (σ : G.mixedS) (a : G.SS i) :
                              0 gFunction i σ a
                              theorem one_le_sum_g {G : FinGame} (i : G.I) (σ : G.mixedS) :
                              1 b : G.SS i, gFunction i σ b
                              @[reducible, inline]
                              noncomputable abbrev nashMapAux {G : FinGame} (σ : G.mixedS) (i : G.I) (a : G.SS i) :

                              The unnormalized best-response update on a product of strategy simplices.

                              Equations
                              Instances For
                                theorem nash_map_cert {G : FinGame} (σ : G.mixedS) (i : G.I) :
                                noncomputable def nashMap (G : FinGame) (σ : G.mixedS) :

                                The continuous self-map of the strategy product whose fixed points are Nash equilibria.

                                Equations
                                Instances For
                                  theorem cg (G : FinGame) {i : G.I} {s : G.SS i} :
                                  Continuous fun (a : G.mixedS) => gFunction i a s