Documentation

LeanPool.MisereGames.Misere.Blocking

Misere combinatorial games.

@[irreducible]
def MisereGames.Form.IsBlockedEnd {G : Type (u + 1)} [Form G] (p : Player) (g : G) :

A blocked end for player p: g is a p-end, and for every opponent move gr, either gr is again a p blocked end, or else p has a move from gr to a p blocked end. This is weaker than IsDeadEnd: every p dead end is a p blocked end (isBlockedEnd_of_isDeadEnd), but not the other way around.

Equations
  • One or more equations did not get rendered due to their size.
Instances For
    theorem MisereGames.Form.isBlockedEnd_def {G : Type (u + 1)} [Form G] (p : Player) (g : G) :
    IsBlockedEnd p g IsEnd p g grmoves (-p) g, IsBlockedEnd p gr ∃ (grl : G) (_ : grl moves p gr), IsBlockedEnd p grl
    theorem MisereGames.Form.isEnd_of_isBlockedEnd {G : Type (u + 1)} [Form G] {g : G} {p : Player} (h1 : IsBlockedEnd p g) :
    IsEnd p g
    theorem MisereGames.Form.IsBlockedEnd.hereditary_def {G : Type (u + 1)} [Form G] {g : G} {p : Player} (h1 : IsBlockedEnd p g) (gr : G) :
    gr moves (-p) gIsBlockedEnd p gr ∃ (grl : G) (_ : grl moves p gr), IsBlockedEnd p grl
    @[simp]
    theorem MisereGames.Form.not_mem_moves_of_isBlockedEnd {G : Type (u + 1)} [Form G] {g gp : G} {p : Player} (h1 : IsBlockedEnd p g) :
    gpmoves p g
    theorem MisereGames.Form.isBlockedEnd_of_isDeadEnd {G : Type (u + 1)} [Form G] {g : G} {p : Player} (h1 : IsDeadEnd p g) :

    A dead end is a blocked end.

    theorem MisereGames.Form.IsBlockedEnd.add {G : Type (u + 1)} [Form G] {g h : G} {p : Player} (h1 : IsBlockedEnd p g) (h2 : IsBlockedEnd p h) :
    IsBlockedEnd p (g + h)
    @[simp]
    theorem MisereGames.Form.IsBlockedEnd.neg_iff {G : Type (u + 1)} [Form G] {g : G} {p : Player} :
    @[irreducible]
    def MisereGames.Form.IsBlocking {G : Type (u + 1)} [Form G] (g : G) :

    A game is blocking if every end is a blocked end, hereditarily.

    Equations
    • One or more equations did not get rendered due to their size.
    Instances For
      @[simp]
      theorem MisereGames.Form.isBlockedEnd_of_isBlocking {G : Type (u + 1)} [Form G] {g : G} {p : Player} (h1 : IsBlocking g) (h2 : IsEnd p g) :
      theorem MisereGames.Form.isBlocking_of_mem_moves {G : Type (u + 1)} [Form G] {g h : G} {p : Player} (h1 : IsBlocking g) (h2 : h moves p g) :
      theorem MisereGames.Form.isBlocking_of_isOption {G : Type (u + 1)} [Form G] {g g' : G} (h1 : IsBlocking g) (h2 : IsOption g' g) :
      theorem MisereGames.Form.isBlocking_of_isDeadEnding {G : Type (u + 1)} [Form G] {g : G} (h1 : IsDeadEnding g) :

      Every dead-ending game is blocking.

      @[simp]
      theorem MisereGames.Form.IsBlocking.add {G : Type (u + 1)} [Form G] {g h : G} (h1 : IsBlocking g) (h2 : IsBlocking h) :
      @[simp]
      @[simp]
      theorem MisereGames.Form.isBlocking_natCast {G : Type (u + 1)} [Form G] (n : ) :
      @[simp]
      theorem MisereGames.Form.isBlocking_intCast {G : Type (u + 1)} [Form G] (k : ) :
      @[simp]
      structure MisereGames.Form.ShortBlocking {G : Type (u + 1)} [Form G] (g : G) :

      The short blocking universe.

      Instances For

        This is [Davies, Miller, Milley (Lemma 4.5 on p. 26)][davies:SumsPFreeForms:2025]