out(t) and in(t-1) would be better written as out
t and in
t-1. where
t is time, expressed as clock ticks.
The expression outt = int-1 means that the output during the current tick is whatever the input was during the prior tick. It is equivalent, and perhaps easier to visualize, to think that the output for the next tick is whatever the input is for this tick: outt+1 = int.
In math, there are function definitions like
f0 = 1,
f1 = 1,
fn = fn-1 + fn-2
where the next term in the sequence is the sum of the previous two terms. This particular function is the Fibonacci series: 1, 1, 2, 3, 5, 8, 13, ...
If you connect a DFF's output directly to its input, you get the function
f0 = 0,
fn = fn-1
The DFF will remain in its initial state forever.
f = 0, 0, 0, 0, ...
If you connect its output to its input through a NOT gate, you get the function
f0 = 0,
fn = NOT fn-1
It will change state every clock tick.
f = 0, 1, 0, 1, ...
It is important to understand that the DFF as used in synchronous logic is a delay element, not a long-term storage element. Additional circuitry must be added around the DFF to create a long-term storage element. This is what Bit.hdl does. It selectively connects the DFF's input to either the DFF's output or to the data to be stored.
--Mark