Continuous-time discrete diffusion needs each forward kernel to be the exponential of a rate matrix, a generator. The uniform and absorbing kernels are, which is why they are the only two the score-entropy and generator-matching papers ever lift to continuous time. D3PM's discretized-Gaussian kernel, the ordinal one built to approach continuous diffusion on images, is not: in the regime it is actually used it provably has no generator, so it cannot be given a continuous-time formulation at all.
A forward transition matrix P has a continuous-time (CTMC, score-entropy) formulation only if
P = exp(Q) for a rate matrix Q: off-diagonals at least zero, rows summing to zero. Whether such a
Q exists is the classical embedding problem for Markov matrices. For a given P it is decidable in
float64 by two independent certificates.
- Principal-logarithm defect. When
Phas distinct positive eigenvalues its real logarithm is unique, soPis embeddable if and only if that unique real log is a generator. The defect is the smallest off-diagonal of the principal log; a negative defect is a definitive proof of non-embeddability. A reconstruction checkexp(log P) = Pto 1e-15 verifies the log is genuine. - Infinite divisibility. If
P = exp(Q)then every rootP^{1/n} = exp(Q/n)is a stochastic matrix. So a single negative entry in anyP^{1/n}rules out a generator. This needs no uniqueness assumption and is airtight.
The uniform kernel exp(sigma(11^T/K - I)) and the absorbing kernel exp(sigma(e_m 1^T - I)) are
embeddable by construction: their principal log is exactly the generator, defect 0 to machine
precision, and their roots stay nonnegative. These are precisely the two kernels the continuous-time
literature treats.
The discretized-Gaussian kernel is not. Its off-diagonal weight for a hop i - j is
exp(-4 (i-j)^2 / ((K-1)^2 beta)), and in the deployed regime its principal log has strictly negative
off-diagonals while its roots P^{1/n} are negative for every n:
| kernel | K | setting | defect (min off-diag log) | min P^{1/n}, n=2..1000 |
|---|---|---|---|---|
| uniform | 16 | sigma=0.5 | +0.0 |
nonnegative |
| absorbing | 16 | sigma=0.5 | +0.0 |
0 (never negative) |
| gaussian | 256 | beta=1e-4 | -0.16 |
-2.5e-3 ... -1.6e-4 |
| gaussian | 256 | beta=1e-3 | -2.10 |
negative |
| gaussian | 256 | beta=1e-2 | -14.2 |
negative |
The reconstruction error is 1e-15 throughout, so the negative logs are real, not numerical noise.
The Gaussian kernel depends on K and beta only through g = beta (K-1)^2, and the defect
collapses onto that single number: at fixed g it is the same across K from 16 to 256 (machine-exact
at small g, to a relative 1e-4 at larger g where big matrices lose precision to eigenvalue
underflow). The defect is smooth and monotone in g: below about g = 0.4 it sits under 1e-15, so
whether the kernel is exactly embeddable or non-embeddable by an exponentially small amount is not
decidable in float64, and no phase-boundary constant should be read off there. Above that it grows
steadily negative.
What is unambiguous is the deployed regime. A real image D3PM uses K = 256 with per-step
beta_t >= 1e-4, so g >= 6.5, where the defect is -0.16 at the smallest step and reaches -14
mid-schedule, many orders of magnitude above float64 noise. Every step of the deployed Gaussian
schedule is decisively non-embeddable.
transitions.py: the uniform, absorbing, and discretized-Gaussian kernels, and the Gaussian in its dimensionlessg = beta (K-1)^2form.embed.py: the principal-log defect, the reconstruction check, the distinct-spectrum uniqueness test, and the infinite-divisibility roots.law.py: the collapse of the defect ontog, the deployed K=256 defects, and the monotone curve that shows there is no sharp threshold.test_gaussnogen.py: the valid kernels, the embeddable baselines, the deployed non-embeddability, the infinite-divisibility certificate, the uniqueness justification, the dimensionless collapse, and the sub-resolution small-gbehavior.
python transitions.py
python embed.py
python law.py
python test_gaussnogen.py
The work is pure float64 linear algebra; Metal has no float64, so it runs on CPU. The connection to hardware is only that the certificate needs double precision to separate a genuine negative defect from rounding, which the reconstruction error verifies it does.
That the embedding problem is hard in general is classical, and the continuous-time discrete-diffusion
papers use only the uniform and absorbing kernels. What is here is the exact statement, with two
independent machine certificates, that the third deployed D3PM kernel, the discretized-Gaussian one,
is non-embeddable in the entire regime it is used: the uniform and absorbing kernels have defect zero
and nonnegative roots, the Gaussian kernel has a strictly negative principal-log off-diagonal and
negative roots for every n, the defect collapses onto the single group g = beta (K-1)^2, and the
deployed K=256 schedule sits at g >= 6.5 with a defect far above float64 noise. This is not a bug
in D3PM, which uses the kernel in discrete time; it is a provable no-go for ever giving that kernel a
continuous-time or score-entropy formulation. The extension is the reverse process: whether a
data-dependent reverse rate can approximate the discrete-time Gaussian step despite the forward kernel
having no generator, and how the approximation error scales with g.