|
CDT++ 1.0.0
Causal Dynamical Triangulations in C++
|
CDT++ samples a triangulation T with target weight proportional to exp(-S(T)). For a proposed triangulation T', the implemented acceptance probability is
This extends the symmetric proposal rule introduced by Metropolis et al. Metropolis1953 with the proposal ratio from Hastings Hastings1970. The three-dimensional causal triangulations, Regge action, and local move set follow Ambjørn, Jurkiewicz, and Loll AmbjornJurkiewiczLoll2001-3D.
Each transition first chooses one of the five 3D move types uniformly. It then chooses one raw site uniformly from the move-specific domain below. The move is attempted only at that site. An inapplicable site, failed construction, or invalid geometry delta is an explicit rejected self-transition.
| Move | Raw proposal sites in T | Reverse move |
|---|---|---|
| (2,3) | N3_22(T) two-two cells | (3,2) |
| (3,2) | N1_TL(T) timelike edges | (2,3) |
| (2,6) | N3_13(T) one-three cells | (6,2) |
| (6,2) | N0(T) vertices | (2,6) |
| (4,4) | N1_SL(T) spacelike edges | (4,4) |
For a raw-site count C_m(T), a particular proposal has probability
The factor 1/5 cancels between a move and its reverse, giving
The site definitions give a unique inverse site for each successful local retriangulation: a (2,3) face becomes the timelike edge used by (3,2); a successful (2,6) move creates the vertex used by (6,2); and a (4,4) pivot edge becomes the opposite pivot edge. Each (2,6) proposal examines exactly one uniformly selected (1,3) cell. Failed raw sites are not silently skipped, because conditioning on only the movable subset would change q and invalidate the count ratio above.
Move-type selection, raw-site selection, internal candidate-construction ordering, and the acceptance draw all consume the same run-owned random engine. Given the same starting manifold, an explicit seed therefore replays the complete transition sequence, including the technical edge ordering used to construct a (6,2) candidate. Initialization uses a separate named stream derived from the same root seed, so changes in point-generation draw counts do not shift the transition sequence. The CLI, checkpoint metadata, stream ownership, and parallel stream policy are documented in Reproducible random runs.
Candidates are constructed off to the side and checked against the exact topology delta before the acceptance calculation. Only an accepted candidate replaces the canonical manifold. Thus every decision uses the state committed by the immediately preceding transition.
| Move | ΔN3 | ΔN3_31_13 | ΔN3_22 | ΔN1_TL |
|---|---|---|---|---|
| (2,3) | +1 | 0 | +1 | +1 |
| (3,2) | -1 | 0 | -1 | -1 |
| (2,6) | +4 | +4 | 0 | +2 |
| (6,2) | -4 | -4 | 0 | -2 |
| (4,4) | 0 | 0 | 0 | 0 |
In particular, (6,2) removes two (3,1) and two (1,3) simplices while leaving N3_22 unchanged. The runtime invariant check also covers N2, total and classified edges, spacelike edges, vertices, validity, and foliation bounds.
The counters obey two identities:
succeeded means that candidate construction produced a valid manifold. Such a candidate can still be rejected by Metropolis-Hastings. failed means the raw site was inapplicable or candidate construction violated an invariant; every failure is therefore also a rejection.
The one-argument attempt_transition() overload samples and resolves one transition from the strategy-owned stream. Its MetropolisTransition report names the move and exposes both successful() and accepted(), so an individual decision does not have to be inferred from these aggregate counters. The attempt_transition(move, trial) overload returns the same report while accepting deterministic inputs for focused tests and controlled experiments.
The action, action difference, exponential, proposal ratio, and acceptance probability remain MPFR values at 256-bit precision. Every MPFR operation uses round-to-nearest with ties to an even significand (MPFR_RNDN). Conversion to long double occurs only for diagnostic output; an acceptance draw is compared directly with the MPFR probability.
s3_bulk_action() returns the real generalized action for its validated physical domain alpha > 1/2. s3_bulk_action_alpha_one() retains the historical real expression with published three-decimal coefficients. s3_bulk_action_alpha_minus_one_imaginary_coefficient() is deliberately named differently: the expression at alpha = -1 is purely imaginary, while this real-valued API returns the coefficient of i. It neither returns a complex number nor silently labels that coefficient as a Wick-rotated action.
The reference fixtures use nonzero couplings and independently evaluate
for an interior probability, its inverse and clamp, an explicit rejection, and a delta whose positive MPFR probability lies below long double range.
Combinatorial fields and deterministic decisions are exact. The published cross-language protocol in reference/fixtures/v1/protocol.json names separate absolute and relative tolerances for coordinates, closed-form actions, and probabilities. Randomized post-repair simplex counts are implementation-specific rather than covered by a generic percentage.
The generalized alpha = 1 expression is not expected to equal the rounded historical formula to a generic percentage. Its test derives an absolute bound from the difference between each exact and three-decimal coefficient, multiplied by the actual (3,1)+(1,3) and (2,2) simplex counts, then adds the separate libm-to-MPFR conversion bound.
Bibliographic metadata for Metropolis1953, Hastings1970, and AmbjornJurkiewiczLoll2001-3D is maintained in the repository-wide REFERENCES.md.