You say that the last step is due to symmetry but that doesn’t mean much when you assume the thing it is asking you to prove. Hence the proof is invalid. ]]>

L := []:

T := combinat:-cartprod([seq([1, 2, 3, 4], i = 1 .. 4)]):

while `not`(T[finished]) do L := [op(L), Matrix(2, 2, T[nextvalue]())] end do:

select(proc (x) LinearAlgebra:-Equal(`mod`(Transpose(x).Matrix([[2, 0], [0, 3]]).x, 5), IdentityMatrix(2)) end proc, L);

“…&& position.getPiece(lastMove.getToSqi()) == Chess.ROOK)…”

Given that we’ve found our solution, wouldn’t the getPiece method always return KNIGHT on this square, since the position is the final (checkmate) position?

Thanks.

]]>Other than that, the argument should be correct. Thanks for pointing this out!

]]>I think this is incorrect. From Hall’s theorem, if there is no matching, then there has to be a set of *k* days in which there are fewer than *k* winners. But k doesn’t have to be n! k can be any number from 1 to the number of nodes, which in this case is 2n-1!

I.e., it is possible that *all* sets of n days have n winners, but still there is no matching because there is another set, larger than n, that violates Hall’s condition.

]]>