fn null_move_pruning_can_be_applied<const PV: bool>(
    context: &mut SearchContext,
    depth: i8,
    beta: i16,
    allow_null_move: bool,
    friendly_king_checked: bool
) -> bool
Expand description

The main idea of the null move pruning is to prune all nodes, for which the search gives us score above beta even if we skip a move (which allows the opposite color to make two of them in a row). This is based on the null move observation, which says that there’s always a better alternative than doing nothing (except zugzwang).

Conditions:

  • only non-PV nodes
  • depth >= NULL_MOVE_PRUNING_MIN_DEPTH
  • game phase is not indicating endgame
  • beta score is not a mate score
  • friendly king is not checked
  • this is not the second null move in a row