Dynamic Forcing Chains
A Dynamic Forcing Chain uses the same building blocks as an ordinary Forcing Chain – the same “if this digit is in, that one’s out; if this one’s out, that one’s forced in” steps. The difference is one thing only, and everything else follows from it: an ordinary chain reads from a frozen grid, while a dynamic chain edits the grid as it goes.
Here’s what that changes.
An ordinary Forcing Chain is one thread. You start from a single assumption and follow a straight line of consequences. Every step looks at the original grid, untouched, and each link has exactly one cause – the step right before it. It’s a single line of dominoes: A knocks over B, B knocks over C.
A dynamic chain rubs out candidates as it goes, so the threads start helping each other. When the dynamic version concludes “this digit is out of that cell,” it actually erases that candidate from its working copy before taking the next step. Now a later deduction can read a grid that several earlier steps have already changed. And that unlocks the move an ordinary chain can never make: a cell becoming forced because two separate threads each removed one of its candidates. Neither thread could finish the job alone, only their combined effect does.
That’s the whole distinction. An ordinary chain is a single line where each step rests on the one before it. A dynamic chain is a branching net where a step can rest on several earlier steps at once, because all of them have already edited the same shared grid. “Dynamic” just means the grid is changing underneath you.


