> Imperative programming is programming with time. Functional programming projects time on to space.
and:
> Constraint satisfaction treats each constraint variable as its own timeline
> Imperative programming is programming with time. Functional programming projects time on to space.
and:
> Constraint satisfaction treats each constraint variable as its own timeline
Monads are the (an?) ultimate exploration of this idea. You project the timeline of the entire world on to a space dimension. Each "bind" operation builds up a new world and you can have many forks of the world, as it's just a model, not the world itself. This model doesn't do anything until you "run" the monad by handing it off to some higher level interpreter.
As for constraint satisfaction, check out Sussman's talk "We Really Don't Know How To Compute" <https://www.youtube.com/watch?v=O3tVctB_VSU> - Even though they implement the propagator networks with a message queue and a single thread, you could in theory run each propagator in parallel, sending messages back and forth.