Short games #
A combinatorial game is Short
[Conway, ch.9][conway2001] if it has only finitely many positions.
In particular, this means there is a finite set of moves at every point.
We prove that the order relations ≤
and <
, and the equivalence relation ≈
, are decidable on
short games, although unfortunately in practice decide
doesn't seem to be able to
prove anything using these instances.
A short game is a game with a finite set of moves at every turn.
- mk: {α β : Type u} → {L : α → SetTheory.PGame} → {R : β → SetTheory.PGame} → ((i : α) → (L i).Short) → ((j : β) → (R j).Short) → [inst : Fintype α] → [inst : Fintype β] → (SetTheory.PGame.mk α β L R).Short
Instances
Equations
- ⋯ = ⋯
A synonym for Short.mk
that specifies the pgame in an implicit argument.
Equations
- SetTheory.PGame.Short.mk' sL sR = ⋯.mpr (SetTheory.PGame.Short.mk sL sR)
Instances For
Extracting the Fintype
instance for the indexing type for Left's moves in a short game.
This is an unindexed typeclass, so it can't be made a global instance.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
- One or more equations did not get rendered due to their size.
Extracting the Fintype
instance for the indexing type for Right's moves in a short game.
This is an unindexed typeclass, so it can't be made a global instance.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
- One or more equations did not get rendered due to their size.
Equations
- One or more equations did not get rendered due to their size.
Extracting the Short
instance for a move by Left.
This would be a dangerous instance potentially introducing new metavariables
in typeclass search, so we only make it an instance locally.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
- One or more equations did not get rendered due to their size.
Extracting the Short
instance for a move by Right.
This would be a dangerous instance potentially introducing new metavariables
in typeclass search, so we only make it an instance locally.
Equations
- One or more equations did not get rendered due to their size.
Instances For
This leads to infinite loops if made into an instance.
Equations
- SetTheory.PGame.Short.ofIsEmpty = SetTheory.PGame.Short.mk (fun (a : l) => isEmptyElim a) fun (a : r) => isEmptyElim a
Instances For
Equations
- SetTheory.PGame.short0 = SetTheory.PGame.Short.ofIsEmpty
Equations
- One or more equations did not get rendered due to their size.
Evidence that every PGame
in a list is Short
.
- nil: SetTheory.PGame.ListShort []
- cons': {hd : SetTheory.PGame} → {tl : List SetTheory.PGame} → hd.Short → SetTheory.PGame.ListShort tl → SetTheory.PGame.ListShort (hd :: tl)
Instances
Equations
- SetTheory.PGame.ListShort.cons hd tl = SetTheory.PGame.ListShort.cons' short_hd short_tl
Equations
- SetTheory.PGame.listShortGet (head :: tail) 0 x_4 = S
- SetTheory.PGame.listShortGet (head :: tl) n.succ h = SetTheory.PGame.listShortGet tl n ⋯
Equations
- One or more equations did not get rendered due to their size.
If x
is a short game, and y
is a relabelling of x
, then y
is also short.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
- (SetTheory.PGame.mk xl xr xL xR).shortNeg = SetTheory.PGame.Short.mk (fun (i : xr) => (xR i).shortNeg) fun (i : xl) => (xL i).shortNeg
Equations
- One or more equations did not get rendered due to their size.
Equations
- SetTheory.PGame.shortNat 0 = SetTheory.PGame.short0
- SetTheory.PGame.shortNat n.succ = n.unaryCast.shortAdd 1
Equations
Equations
- x.shortBit0 = inferInstance
Auxiliary construction of decidability instances.
We build Decidable (x ≤ y)
and Decidable (x ⧏ y)
in a simultaneous induction.
Instances for the two projections separately are provided below.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Equations
- x.leDecidable y = (x.leLFDecidable y).1
Equations
- x.lfDecidable y = (x.leLFDecidable y).2
Equations
- x.ltDecidable y = inferInstanceAs (Decidable (x ≤ y ∧ x.LF y))