Documentation

CombinatorialGames.Misere.Quotients

def MisereSetoid {G : Type (u + 1)} [Form G] (A : G → Prop) :
Setoid { g : G // A g }

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

Equations
Instances For
    def MisereQuotient {G : Type (u + 1)} [Form G] (A : G → Prop) :
    Type (u + 1)

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

    Equations
    Instances For
      @[instance_reducible]
      instance instSetoidSubtype_combinatorialGames {G : Type (u + 1)} [Form G] (A : G → Prop) :
      Setoid { g : G // A g }
      Equations
      def Form.MisereQuotient.mk {G : Type (u + 1)} [Form G] {A : G → Prop} (g : { g : G // A g }) :

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

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

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

        Equations
        Instances For
          theorem Form.MisereQuotient.mk_eq_mk {G : Type (u + 1)} [Form G] {A : G → Prop} {g h : { g : G // A g }} :
          mk g = mk h ↔ ↑g =m A↑h
          theorem Form.MisereQuotient.sound {G : Type (u + 1)} [Form G] {A : G → Prop} {g h : { g : G // A g }} (hgh : ↑g =m A↑h) :
          mk g = mk h
          theorem Form.MisereQuotient.exact {G : Type (u + 1)} [Form G] {A : G → Prop} {g h : { g : G // A g }} (hgh : mk g = mk h) :
          ↑g =m A↑h
          @[simp]
          theorem Form.MisereQuotient.mk_out {G : Type (u + 1)} [Form G] {A : G → Prop} (x : MisereQuotient A) :
          mk (out x) = x
          theorem Form.MisereQuotient.out_equiv_self {G : Type (u + 1)} [Form G] {A : G → Prop} (g : { g : G // A g }) :
          ↑(out (mk g)) =m A↑g
          theorem Form.MisereQuotient.add_misereEQ_add {G : Type (u + 1)} [Form G] {A : G → Prop} [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 Form.MisereQuotient.add_misereGE_add_right {G : Type (u + 1)} [Form G] {A : G → Prop} [ClosedUnderAdd A] {k : G} (hk : A k) {g h : G} (hgh : g ≥m A h) :
          (g + k) ≥m A h + k
          @[instance_reducible]
          instance Form.MisereQuotient.instAdd {G : Type (u + 1)} [Form G] {A : G → Prop} [ClosedUnderAdd A] :
          Equations
          @[simp]
          theorem Form.MisereQuotient.mk_add_mk {G : Type (u + 1)} [Form G] {A : G → Prop} [ClosedUnderAdd A] (g h : { g : G // A g }) :
          mk g + mk h = mk ⟨↑g + ↑h, ⋯⟩
          @[instance_reducible]
          Equations
          @[instance_reducible]
          instance Form.MisereQuotient.instZero {G : Type (u + 1)} [Form G] {A : G → Prop} [HasZero A] :
          Equations
          @[simp]
          theorem Form.MisereQuotient.mk_zero {G : Type (u + 1)} [Form G] {A : G → Prop} [HasZero A] :
          mk ⟨0, ⋯⟩ = 0
          @[instance_reducible]
          Equations
          • One or more equations did not get rendered due to their size.
          @[instance_reducible]
          instance Form.MisereQuotient.instLE {G : Type (u + 1)} [Form G] {A : G → Prop} :

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

          Equations
          theorem Form.MisereQuotient.mk_le_mk {G : Type (u + 1)} [Form G] {A : G → Prop} (g h : { g : G // A g }) :
          mk g ≤ mk h ↔ ↑h ≥m A↑g
          @[instance_reducible]
          Equations
          theorem Form.MisereQuotient.out_le_out {G : Type (u + 1)} [Form G] {A : G → Prop} {a b : MisereQuotient A} :
          a ≤ b ↔ ↑(out b) ≥m A↑(out a)