Combinatorial games #
In this file we construct the quotient of games IGame under equivalence, and prove that it forms
an OrderedAddCommGroup. We take advantage of this structure to prove two particularly tedious
theorems on IGame, namely IGame.mul_add_equiv and IGame.mul_assoc_equiv.
It might be tempting to write mk (x * y) as mk x * mk y, but the latter is not well-defined, as
there exist x₁ ≈ x₂ and y₁ ≈ y₂ with x₁ * y₁ ≉ x₂ * y₂. See
CombinatorialGames.Counterexamples.Multiplication for a proof.
Games up to equivalence.
If x and y are combinatorial games (IGame), we say that x ≈ y when both x ≤ y and y ≤ x.
Broadly, this means neither player has a preference in playing either game, as a component of a
larger game. This is the standard meaning of x = y in the literature, though it is not a strict
equality, e.g. {0, 1 | 0} and {1 | 0} are equivalent, but not identical as the former has an
extra move for Left.
In particular, note that a Game has no well-defined notion of left and right options. This means
you should prefer IGame when analyzing specific games.
Instances For
Alias of the reverse direction of Game.mk_eq_mk.
Equations
- Game.instAdd = { add := Quotient.map₂ HAdd.hAdd @IGame.add_congr }
Equations
- Game.instNeg = { neg := Quotient.map Neg.neg @IGame.neg_congr }
Equations
- Game.instPartialOrder = inferInstanceAs (PartialOrder (Antisymmetrization IGame fun (x1 x2 : IGame) => x1 ≤ x2))
Equations
- One or more equations did not get rendered due to their size.