Repository navigation
18.0.0
Endgame theorem and unwinnability API
Breaking release. Adds a proved basic-helpmate-existence theorem to the full unwinnability analysis, realigns the quick analyzer to a faithful two-valued port of CHA 2.6.1, and simplifies the dead-position / game-end API.
Notable
- Basic-helpmate-existence theorem. For KRvK, KQvK, KBBvK (opposite bishops), KBNvK, KRvKB, and KRvKN (and colour-reversed),
unwinnableFulldecides winnability directly from a finite-state theorem instead of the helpmate search - faster and always decisive on these classes. A theorem-decided win reports the newWINNABLE_BY_THEOREMverdict (no mate line). - Quick analyzer is now a faithful port of CHA 2.6.1
quick_analysis- two-valued, proves unwinnability or leaves it open, never claims winnability.
Breaking
UnwinnabilityQuickVerdictbecomes{ UNWINNABLE, POSSIBLY_WINNABLE }(dropsWINNABLE);UnwinnabilityQuickAnalysisis verdict-only (dropsmateLine).UnwinnabilityFullVerdict.WINNABLEsplits intoWINNABLE_HELPMATE(mate line present) andWINNABLE_BY_THEOREM(no line);isWinnable()covers both.- Dead-position queries move off
BoardtoUnwinnableQuickAnalyzer.unwinnableQuick(board)/UnwinnableFullAnalyzer.unwinnableFull(board)(reuse the verdict enums;UNWINNABLE= dead). RemovedBoard.isDeadPosition()/isDeadPositionQuick()/isDeadPositionFull()and theDeadPositionQuick/DeadPositionFullenums. - Removed
GameEndFacts,Board.calculateGameEndFacts(), andBoard.isGameEnd(). Query theBoardpredicates andBasicChessUtility.calculateOutcome(board)directly.
Internal
- Fixed a latent
HelpmateSearchBoardbuffer overflow on searches past 128 plies. - Regenerated the Ambrona unwinnability oracle from CHA 2.6.1.
- Rewrote the
Score(FUN22 Fig 12) loser branch to CHA's accumulator; addedScore/ Going-to-corner spec tests.
Full changelog: https://github.com/dlbbld/ashlar-chess/blob/main/CHANGELOG.md