Does Prolog support Threading? If so it'll be a simple case of flipping a bit every T milliseconds and feeding it to every sequential gate. So you'd just need a while loop with a Thread.wait(500) or something I think, flipping a global boolean after each Wait completes.
I always thought the hardest thing about this was to simulate the DFF not the clock?? (but I'm not using Prolog). I tried to do that via some animation software but haven't really made progress.
My Prolog skills are very rusty. Last time I played with it was around 1995 I think.
In any case it shouldn't be too hard to simulate the clock as a parameter to sequential circuit, with values TICK (or RISING), meaning the clock value is changing from 0 to 1, TOCK (or FALLING) for when the value is changing from 1 to 0. The clock should only be changing in the main "loop"; all other gates and circuits should just pass it through. DFFs should be the only gates which do care about the clock's value.