Logical layer
Each (player, card) pair becomes a Boolean variable: true iff that player holds the card. Every observation adds clauses: handful sizes are cardinality constraints, a shown card is a unit clause, a 'pass' is a conjunction of three negative literals, and a 'someone showed a card' is a ternary disjunction.
A DPLL-style SAT engine unit-propagates and detects forced cards โ both for the envelope and for individual hands โ yielding the certain deductions you see highlighted in the UI.
Probabilistic layer
Beyond the certain facts, BoardSolve runs Monte-Carlo sampling over models consistent with the clause set. Per-card marginals are reported as probabilities, and the suggestion picker scores trios by expected posterior reduction of the envelope tuples and by the Shannon entropy of the responder's reply.