Skip to content

18.0.0

Choose a tag to compare

@dlbbld dlbbld released this 04 Jun 21:03
· 422 commits to main since this release
0e30ba6

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), unwinnableFull decides 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 new WINNABLE_BY_THEOREM verdict (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

  • UnwinnabilityQuickVerdict becomes { UNWINNABLE, POSSIBLY_WINNABLE } (drops WINNABLE); UnwinnabilityQuickAnalysis is verdict-only (drops mateLine).
  • UnwinnabilityFullVerdict.WINNABLE splits into WINNABLE_HELPMATE (mate line present) and WINNABLE_BY_THEOREM (no line); isWinnable() covers both.
  • Dead-position queries move off Board to UnwinnableQuickAnalyzer.unwinnableQuick(board) / UnwinnableFullAnalyzer.unwinnableFull(board) (reuse the verdict enums; UNWINNABLE = dead). Removed Board.isDeadPosition()/isDeadPositionQuick()/isDeadPositionFull() and the DeadPositionQuick / DeadPositionFull enums.
  • Removed GameEndFacts, Board.calculateGameEndFacts(), and Board.isGameEnd(). Query the Board predicates and BasicChessUtility.calculateOutcome(board) directly.

Internal

  • Fixed a latent HelpmateSearchBoard buffer 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; added Score / Going-to-corner spec tests.

Full changelog: https://github.com/dlbbld/ashlar-chess/blob/main/CHANGELOG.md