Misere combinatorial games.
Solved #
Intuitively, a position is solved for a given player if they win regardless of the moves they make.
Equations
- One or more equations did not get rendered due to their size.
Instances For
Integers #
Zero is the only game solved for both players
Strides #
Stride measures exactly how many moves away each player is from a solved position.
Stride is not well-defined for all game forms.
Equations
- One or more equations did not get rendered due to their size.
- MisereGames.GameForm.HasStride p g 0 = MisereGames.GameForm.IsSolved p g
Instances For
Opponent moves have stride ≤ n.
A variant of hasStride_succ_iff that simplifies condition B' when we know the
(-p)-stride. Instead of requiring the good move to have the max (-p)-stride
among all p-moves, we simply require the good move to preserve the (-p)-stride
exactly.
Variant of hasStride_succ_exists_best with known opponent stride
Addition #
Integers #
Outcomes #
A predicate containing games with prescribed Left and Right strides.
- mk_with_strides (l r : ℕ) : ∃ (g : GameForm), A g ∧ HasStride Player.left g l ∧ HasStride Player.right g r
Instances
The stride difference characterises misère equivalence for strided games.
The misère quotient of a strided class is totally ordered. This follows from the fact that the ordering is determined by stride differences.
The stride difference of a game in a strided class A. This is the left stride
minus the right stride, as an integer.
Equations
- MisereGames.GameForm.Strided.strideDiff g hg = ↑⋯.choose - ↑⋯.choose
Instances For
The stride difference is well-defined regardless of which stride witnesses are used.
Misère equivalent games have the same stride difference.
The stride difference function on the misère quotient, defined via representative. This is well-defined because misère equivalent games have the same stride difference.
Equations
- MisereGames.GameForm.MisereQuotient.strideDiff = Quotient.lift (fun (g : { g : MisereGames.GameForm // A g }) => MisereGames.GameForm.Strided.strideDiff ↑g ⋯) ⋯
Instances For
The stride difference function on the quotient is injective.
The misère quotient of a strided class is equivalent to the integers. The equivalence sends each equivalence class to its stride difference.
Equations
Instances For
If g ≥m A h then the stride difference of g is ≤ that of h. The
converse of misereGE_of_stride_diff_le.
Misère GE is equivalent to stride difference inequality.
The ordering on the misère quotient corresponds to ≥ on stride differences:
mk A g hg ≤ mk A h hh iff strideDiff A g hg ≥ strideDiff A h hh.
The misère quotient ordering via the integer equivalence: a ≤ b iff the image
of a under the equivalence is ≥ the image of b. Equivalently, the
equivalence is an order-reversing bijection.