Documentation

LeanPool.MisereGames.Misere.Quotients

Misere combinatorial games.

def MisereGames.MisereSetoid {G : Type (u + 1)} [Form G] (A : GProp) :
Setoid { g : G // A g }

Restricted misère equality modulo A, as a setoid on A's games.

Equations
Instances For
    def MisereGames.MisereQuotient {G : Type (u + 1)} [Form G] (A : GProp) :
    Type (u + 1)

    The games in A taken up to misère equality modulo A.

    Equations
    Instances For
      @[implicit_reducible]
      instance MisereGames.instSetoidSubtypeLeanPool {G : Type (u + 1)} [Form G] (A : GProp) :
      Setoid { g : G // A g }
      Equations
      def MisereGames.Form.MisereQuotient.mk {G : Type (u + 1)} [Form G] {A : GProp} (g : { g : G // A g }) :

      The class of a game in the misère quotient.

      Equations
      Instances For
        noncomputable def MisereGames.Form.MisereQuotient.out {G : Type (u + 1)} [Form G] {A : GProp} (x : MisereQuotient A) :
        { g : G // A g }

        A chosen representative of a misère-quotient class.

        Equations
        Instances For
          theorem MisereGames.Form.MisereQuotient.mk_eq_mk {G : Type (u + 1)} [Form G] {A : GProp} {g h : { g : G // A g }} :
          mk g = mk h g =m Ah
          theorem MisereGames.Form.MisereQuotient.sound {G : Type (u + 1)} [Form G] {A : GProp} {g h : { g : G // A g }} (hgh : g =m Ah) :
          mk g = mk h
          theorem MisereGames.Form.MisereQuotient.exact {G : Type (u + 1)} [Form G] {A : GProp} {g h : { g : G // A g }} (hgh : mk g = mk h) :
          g =m Ah
          @[simp]
          theorem MisereGames.Form.MisereQuotient.mk_out {G : Type (u + 1)} [Form G] {A : GProp} (x : MisereQuotient A) :
          theorem MisereGames.Form.MisereQuotient.out_equiv_self {G : Type (u + 1)} [Form G] {A : GProp} (g : { g : G // A g }) :
          (Quotient.out (mk g)) =m Ag
          theorem MisereGames.Form.MisereQuotient.add_misereEQ_add {G : Type (u + 1)} [Form G] {A : GProp} [ClosedUnderAdd A] {g g' h h' : G} (hh : A h) (hg' : A g') (hg : g =m A g') (hh' : h =m A h') :
          (g + h) =m A g' + h'
          theorem MisereGames.Form.MisereQuotient.add_misereGE_add_right {G : Type (u + 1)} [Form G] {A : GProp} [ClosedUnderAdd A] {k : G} (hk : A k) {g h : G} (hgh : g ≥m A h) :
          (g + k) ≥m A h + k
          @[implicit_reducible]
          Equations
          • One or more equations did not get rendered due to their size.
          @[simp]
          theorem MisereGames.Form.MisereQuotient.mk_add_mk {G : Type (u + 1)} [Form G] {A : GProp} [ClosedUnderAdd A] (g h : { g : G // A g }) :
          mk g + mk h = mk g + h,
          @[simp]
          theorem MisereGames.Form.MisereQuotient.mk_zero {G : Type (u + 1)} [Form G] {A : GProp} [HasZero A] :
          mk 0, = 0
          @[implicit_reducible]
          Equations
          • One or more equations did not get rendered due to their size.
          @[implicit_reducible]
          instance MisereGames.Form.MisereQuotient.instLE {G : Type (u + 1)} [Form G] {A : GProp} :

          The order on the quotient: mk g ≤ mk h exactly when h ≥m A g.

          Equations
          theorem MisereGames.Form.MisereQuotient.mk_le_mk {G : Type (u + 1)} [Form G] {A : GProp} (g h : { g : G // A g }) :
          mk g mk h h ≥m Ag
          @[implicit_reducible]
          Equations
          theorem MisereGames.Form.MisereQuotient.out_le_out {G : Type (u + 1)} [Form G] {A : GProp} {a b : MisereQuotient A} :
          a b (Quotient.out b) ≥m A(Quotient.out a)