Misere combinatorial games.
@[irreducible]
A form is P-free if it and all of its options avoid outcome P.
Equations
- MisereGames.IsPFree g = (MisereGames.Form.Misere.Outcome.MisereOutcome g ≠ MisereGames.Outcome.P ∧ ∀ (p : MisereGames.Player), ∀ gp ∈ MisereGames.Moves.moves p g, MisereGames.IsPFree gp)
Instances For
theorem
MisereGames.isPFree_of_mem_moves
{G : Type (u + 1)}
[Form G]
{g h : G}
{p : Player}
(h1 : IsPFree g)
(h2 : h ∈ Moves.moves p g)
:
IsPFree h
theorem
MisereGames.isPFree_of_isOption
{G : Type (u + 1)}
[Form G]
{g g' : G}
(h1 : IsPFree g)
(h2 : Moves.IsOption g' g)
:
IsPFree g'
The P-free subpredicate of A.
Equations
- MisereGames.PFreeSubset A g = (A g ∧ MisereGames.IsPFree g)
Instances For
theorem
MisereGames.PFreeSubset.mem
{G : Type (u + 1)}
[Form G]
{A : G → Prop}
{g : G}
(h : PFreeSubset A g)
:
A g
theorem
MisereGames.PFreeSubset.isPFree
{G : Type (u + 1)}
[Form G]
{A : G → Prop}
{g : G}
(h : PFreeSubset A g)
:
IsPFree g
theorem
MisereGames.PFreeSubset.mk
{G : Type (u + 1)}
[Form G]
{A : G → Prop}
{g : G}
(h_mem : A g)
(h_isPFree : IsPFree g)
:
PFreeSubset A g
instance
MisereGames.instPFreePFreeSubset
{G : Type (u + 1)}
[Form G]
{A : G → Prop}
:
PFree (PFreeSubset A)
instance
MisereGames.instClosedUnderNegPFreeSubset
{G : Type (u + 1)}
[Form G]
{A : G → Prop}
[Form.ClosedUnderNeg A]
:
instance
MisereGames.instHasNatPFreeSubset
{G : Type (u + 1)}
[Form G]
{A : G → Prop}
[Form.HasNat A]
:
instance
MisereGames.instHasIntPFreeSubset
{G : Type (u + 1)}
[Form G]
{A : G → Prop}
[Form.HasInt A]
:
instance
MisereGames.instHereditaryPFreeSubset
{G : Type (u + 1)}
[Form G]
{A : G → Prop}
[Form.Hereditary A]
:
theorem
MisereGames.PFree.misereOutcome_ne_P_of_pfree
{A : GameForm → Prop}
[PFree A]
{g : GameForm}
(h1 : A g)
:
theorem
MisereGames.PFree.isPFree_ofMoves
{A : GameForm → Prop}
[PFree A]
{g gp : GameForm}
{p : Player}
(h1 : A g)
(h2 : gp ∈ Moves.moves p g)
:
IsPFree gp
theorem
MisereGames.PFree.exists_move_of_winsGoingFirst_not_isEnd
{A : GameForm → Prop}
[PFree A]
{g : GameForm}
{p : Player}
(h1 : ¬Form.IsEnd p g)
(h2 : A g)
(h3 : Form.Misere.Outcome.WinsGoingFirst p g)
:
∃ gr ∈ Moves.moves p g, Form.Misere.Outcome.WinsGoingFirst p gr
theorem
MisereGames.PFree.misereOutcome_add_one_R_of_misereOutcome_R
{A : GameForm → Prop}
[PFree A]
{g : GameForm}
(h0 : A g)
(h1 : Form.Misere.Outcome.MisereOutcome g = Outcome.R)
:
theorem
MisereGames.PFree.misereOutcome_add_natCast_R_of_misereOutcome_R
{A : GameForm → Prop}
[PFree A]
{g : GameForm}
(n : ℕ)
(h0 : A g)
(h1 : Form.Misere.Outcome.MisereOutcome g = Outcome.R)
:
theorem
MisereGames.PFree.misereOutcome_sub_one_L_of_misereOutcome_L
{A : GameForm → Prop}
[PFree A]
{g : GameForm}
(h0 : A g)
(h1 : Form.Misere.Outcome.MisereOutcome g = Outcome.L)
:
theorem
MisereGames.PFree.misereOutcome_sub_natCast_L_of_misereOutcome_L
{A : GameForm → Prop}
[PFree A]
{g : GameForm}
(n : ℕ)
(h0 : A g)
(h1 : Form.Misere.Outcome.MisereOutcome g = Outcome.L)
:
theorem
MisereGames.PFree.misereOutcome_of_isEnd
{A : GameForm → Prop}
[PFree A]
{g : GameForm}
{p : Player}
(h1 : A g)
(h2 : Form.IsEnd p g)
:
theorem
MisereGames.PFree.misereOutcome_of_isEnd_left
{A : GameForm → Prop}
[PFree A]
{g : GameForm}
(h1 : A g)
(h2 : Form.IsEnd Player.left g)
:
theorem
MisereGames.PFree.misereOutcome_of_isEnd_right
{A : GameForm → Prop}
[PFree A]
{g : GameForm}
(h1 : A g)
(h2 : Form.IsEnd Player.right g)
:
theorem
MisereGames.PFree.not_isEndLike_right_add_of_L
{A : GameForm → Prop}
[PFree A]
{g h : GameForm}
(hAg : A g)
(hLg : Form.Misere.Outcome.MisereOutcome g = Outcome.L)
:
¬Form.IsEndLike Player.right (g + h)
theorem
MisereGames.PFree.isStrongTest_left
{g : GameForm}
(hp : IsPFree g)
(ho : Form.Misere.Outcome.MisereOutcome g ≠ Outcome.R)
:
theorem
MisereGames.PFree.isStrongTest_right
{g : GameForm}
(h_isPFree : IsPFree g)
(h_outcome : Form.Misere.Outcome.MisereOutcome g ≠ Outcome.L)
: