AbstractQAtlas.jl

The model-independent layer of the QAtlas ecosystem — abstract quantity vocabulary + generic physics relations as first-class, tested objects.

In the spirit of AbstractFFTs: concrete atlases (QAtlas.jl) implement this package, never the reverse.

Division of responsibility

lives here (AbstractQAtlas)lives in the implementing atlas
type vocabulary: AbstractQAtlasModel, AbstractQuantity, BoundaryCondition, the generic fetch verbconcrete models and registered fetch methods
generic relations: scaling laws, fluctuation–dissipation, Wick's theorem, topological invariants, FSS formsreference values (critical temperatures, exact magnetizations, exponent tables)

A relation is an identity among observables or exponents — a statement true independently of any model. Expressing each one once, as a tested object, means downstream packages stop re-deriving them ad hoc in comments and per-model tests.

Declare once, derive everything

A relation is written exactly once, with @relation:

@relation :scaling Rushbrooke(α, β, γ) = α + 2β + γ - 2

One declaration yields the struct, the residual kernel, the variables/domain introspection traits, registry membership, and — with no hand-written rearrangements — solve for every variable the expression is affine in (a non-affine variable is refused, never silently mis-solved).

The uniform verbs:

  • residual(rel; vars...) — signed violation; 0 ⇔ satisfied,
  • check(rel; atol=0, vars...) — |residual| ≤ atol,
  • solve(rel, Val(:x); vars...) — the value of x implied by the rest,

with an exact-arithmetic contract: Rational in ⇒ Rational out, so exactly-known values satisfy their relations exactly, not merely to floating-point tolerance. Relations taking an inverse temperature accept β or T at every verb; normalization happens once, in the verb layer.

using AbstractQAtlas
using AbstractQAtlas: residual, check, solve

residual(Rushbrooke(); α=0//1, β=1//8, γ=7//4)   # 0//1 — exact
solve(Widom(), Val(:δ); β=1//8, γ=7//4)           # 15//1 — derived, not hand-coded
check(Fisher(); γ=7//4, ν=1//1, η=1//4)           # true

Equalities and bounds. Most relations are equalities (check ≡ abs(residual) ≤ atol); bound-type constraints are declared with @bound as AbstractInequality, whose residual is the ≥ 0 slack — check tests that direction, slack reports the margin, and solve returns the saturation (tight-bound) value. The quantum-information entropy bounds are the first users: EntropyNonNegativity, MaxEntropyBound (S ≤ ln d), Subadditivity, ArakiLieb, StrongSubadditivity (Lieb–Ruskai), RenyiMonotonicity.

check(StrongSubadditivity(); S_AB, S_BC, S_ABC, S_B)   # S_AB + S_BC ≥ S_ABC + S_B ?
solve(Subadditivity(), Val(:S_AB); S_A, S_B)           # the tight bound S_A + S_B

A bound is declared as the statement it makes, subject first, so the roles are readable off the declaration rather than inferred from the sign of a slack expression:

@bound :thermodynamic SpecificHeatPositivity(Cv::SpecificHeat >= 0)
@bound :quantum LiebRobinsonBound(v <= v_LR::LiebRobinsonVelocity)
@bound :entanglement Subadditivity(S_A, S_B, S_AB) = S_AB <= S_A + S_B

bounded_slot, bounding_slot, bounding_constant and bound_direction expose those roles, and bounds_on answers the reverse question — what bounds this quantity?

bounds_on(SpecificHeat)              # [SpecificHeatPositivity()]
bound_direction(LiebRobinsonBound()) # :upper — v is bounded from above
bounding_slot(LiebRobinsonBound())   # :v_LR

Family and group slots. A slot may be keyed on a parametric family (χT::Susceptibility), and relation_report then auto-discovers every concrete component in the bag — one row per component. That is safe because a family's components are one quantity at different indices, so a law written on the family is component-agnostic by construction.

An abstract group is different in kind — MassGap, ChargeGap and SpinGap are different quantities — so the quantifier is written explicitly:

@bound :test EveryGapPositive(g::EachOf{AbstractGap} >= 0)   # holds for every gap
@relation :test OneGapSetsXi(g::AnyOf{AbstractGap}, ξ) = g * ξ - 1   # about ONE gap

EachOf enumerates like a family. AnyOf does not: the engine cannot know which member a one-member law is about, so such a relation is checkable with an explicit subject but is not auto-discovered — and ambiguous_relations lists them, so the gap is visible instead of absent. A bare abstract slot is refused at declaration, because guessing the quantifier turns a one-member law into false violations on its siblings.

Adopting from another package: one call

A consumer never hand-lists relations — applicable_relations selects by variable names, relation_report evaluates and reports, check_all gates (an empty match is false, never a silent green):

check_all((α=0//1, β=1//8, γ=7//4, δ=15//1, ν=1//1, η=1//4, d=2))   # exponent table gate
relation_report((C=c, var_E=v, T=T, N=N); atol=tol)                  # thermodynamics sweep

Pass domain= when a data set mixes families (physics overloads names: the exponent β vs the inverse temperature β). Downstream packages declare their own relations with the same @relation macro.

What is covered (v0.1)

Tensor structure — internal degrees of freedom

Quantities that are tensors carry their indices as type parameters and declare tensor_rank / index_spaces / indices, so they are not silently scalarized. Susceptibility(:x, :y) is the off-diagonal χ_xy; the design is order-extensible to nonlinear response — Susceptibility(:x, :y, :z) is χ⁽²⁾_{x;yz} = ∂²M_x/∂h_y∂h_z (response_order == 2, tensor_rank == 3) and the differentiation_chain extends recursively χ⁽ⁿ⁾ ⟵ χ⁽ⁿ⁻¹⁾ ⟵ … ⟵ M ⟵ F. Index spaces: SpinAxis, SpatialDirection (Conductivity, also nonlinear), OrbitalIndex (propagators). Dyson is written with inv, so the identity holds for scalar single-band and matrix orbital-space propagators alike.

frequency_arguments is a quantity's multi-time dimensionality — the count of independent frequency (⇔ time) variables. The static Susceptibility is the zero-frequency limit (0); the dynamical DynamicalSusceptibility(:x, :y, :z) is χ⁽²⁾(ω₁, ω₂) with frequency_arguments == 2 — an n-th order nonlinear response is intrinsically multi-time (2D coherent spectroscopy). Its microscopic origin is the Kubo formula (spectral_origin(DynamicalSusceptibility(:x,:y,:z)) == (DynamicalCorrelation{(:x,:y,:z)}, :kubo)): the retarded n-fold nested-commutator response function of the same-order correlation — an n-th order response is an n-time ((n+1)-point) correlation, so the Kubo edge preserves the frequency count on both sides. Response-theory and scaling/FDT references (Kubo 1957, Wan–Armitage 2019, Rushbrooke/Widom/Fisher/Josephson, Callen–Welton

  1. live in docs/references.bib, DOI-verified in CI.

Nonlinear-tensor symmetry & accumulated relations

The nonlinear susceptibility is essentially a higher-order tensor, and carries intrinsic permutation symmetry — χ⁽ⁿ⁾'s field indices (with their frequencies) are interchangeable, so Susceptibility(:x, :y, :z) == Susceptibility(:x, :z, :y) under permutation_equivalent (canonical_component sorts the field indices; the response index is fixed).

Known inter-quantity relationships accumulate as first-class relations: ChernFromBerryCurvature (C = (1/2π)∫Ω) with TKNN (σ_xy = C) and BulkBoundary (n = |ν|) for the topological side; SpecificHeatFromEntropy (c = T ∂s/∂T) and HeatCapacityDifference (Mayer's c_p − c_v = T v α²/κ_T) for heat capacity; MicrocanonicalTemperature (β = ∂S/∂E, the microcanonical–canonical bridge) and CanonicalTPQ (Z = D·⟨ψ₀|e^{−βH}|ψ₀⟩, Sugiura–Shimizu) for statistical ensembles and thermal-pure-quantum estimators. The transport family (Conductivity with its AC DynamicalConductivity, ThermalConductivity, Thermopower, PeltierCoefficient, DrudeWeight, and the ElectricCurrent / HeatCurrent) carries WiedemannFranz (κ = L₀σT), the Mott MottFormula (S = −(π²/3)T d ln σ/dε), the Kelvin KelvinRelation (Π = TS), OnsagerReciprocity (L_{μν} = L_{νμ}), and the optical OpticalSumRule (∫Re σ dω = πD + W_reg). References are DOI-verified in docs/references.bib.

Scope note. The Berry curvature is the imaginary part of the quantum geometric tensor; the real part (the quantum metric) and the mixed-state / Uhlmann generalizations are deliberately out of scope — this package stays at the model-independent textbook level.

Structure — definitional correspondences

The structure/ layer holds the generic facts that are true by definition, from which the forms above are derived rather than restated:

One queryable graph of physics

The genealogy, the spectral graph, the Fourier pairs and the relation ↔ quantity links are all the same shape — a typed edge between quantity kinds — so they fold into one queryable graph (quantity_graph), mirroring the vocabulary of QAtlas's model graph (relations(model)): the two atlases share one graph language, models ⊕ quantities.

  • related_quantities(q) — the neighborhood of a quantity: every edge it participates in, tagged by kind (:derivative, :spectral, :fourier, :law) as a QuantityEdge. For Susceptibility this surfaces both Magnetization (as ∂/∂h and via the FDT) and StaticStructureFactor (via the structure-factor sum rule) at once.
  • quantity_path(a, b) — the machine answer to "how are a and b related?": a shortest path of typed edges. SpecificHeat and Magnetization connect through their shared FreeEnergy root.
  • quantity_neighbors(fam) — incident edges in both directions (so a derivative root like FreeEnergy still surfaces the quantities that point at it), and quantity_graph_jsonl streams the whole network as stdlib-only JSONL for a graph view.

Nodes are quantity families (the index-erased Susceptibility, not Susceptibility{(:z,:z)}) so the structural graph is finite; the concrete index is still used to resolve an edge (χ⁽²⁾ ⟶ χ⁽¹⁾ ⟶ M) before the endpoints collapse to their families.

Under the hood this is one instance of a generic parent, the KnowledgeGraph{N} kernel — a bag of TypedEdges over nodes of type N, with the traversal/reachability/shortest-path/export (graph_reachable, graph_shortest_path, graph_jsonl) written once. quantity_graph() is a KnowledgeGraph{Type}; the derivation graph below is a KnowledgeGraph{Symbol} (derivation_graph); and QAtlas's model graph becomes a third instance once refactored onto this package — so a single graph-view renders models ⊕ quantities ⊕ derivations.

Deriving a quantity by route

Read each equality as a computation — solve turns a relation into "given all-but-one variable, produce the last" — and the whole registry becomes a directed derivation graph (derivation_steps): a node per variable, a directed edge for every variable a relation can be solved for. From a set of known quantities you can then ask what else is reachable and, lazily, get one route run for you:

derivable(; Z = 2.0, β = 1.0)                # Set([:Z, :β, :f, …])  reachable
derive(:f; Z = 2.0, β = 1.0)                 # -0.6931…   (F = −β⁻¹ ln Z)
derive(:δ; α = 0//1, β = 1//8)               # 15//1  — two exact hops, Rushbrooke→Widom

Two safety guarantees, because a chained result is weaker than a directly implemented one:

  • Equalities only. Inequalities are excluded — their solve returns a saturation bound, not an equational value, so a bound can never masquerade as a derived quantity.
  • Auditable provenance. derive(…; debug=true) returns a DerivationTrace — the value, the exact route (which relation produced each intermediate, from which inputs), and an indirect flag — so an indirectly derived number is inspected by its route, not trusted blindly. The route is discovered by calling the real solve, so a step whose relation is non-affine in its output is skipped, never faked; an unreachable target fails loudly.
derive(:δ; α = 0//1, β = 1//8, debug = true)
# DerivationTrace(:δ = 15//1  [indirect])
#   1. Rushbrooke: {α, β} → :γ
#   2. Widom: {β, γ} → :δ

The scope line: definitional vs functional

Where does a dynamical quantity's value come from — this package or the future ParaLA-based functional sibling? operation_scope draws the line (issue #14):

  • :definitional (here) — a pointwise identity relating quantity values at a single (q, ω), or a supplied scalar (an integral, a derivative): Dyson, SpectralFromGreens, the sum rules, KramersKronigReal/Imag, every @relation. This package holds these as stdlib-only tested identities.
  • :functional (sibling) — a transform / sum / limit that represents a quantity as a function and acts on it globally: the BZ average, the space-time Fourier transform, an ω → 0 limit, the Kubo response. Only the structural edge lives here; the numerical evaluation is deferred.

The grey zone (cf. #6) resolves by the supplied-value convention: a sum rule or Kramers–Kronig relation is :definitional — the relation checks a supplied number here, while computing that number from the function (the principal-value Hilbert transform, the spectral integral) is :functional, the sibling's job. So the boundary is exactly origin_relation's split: definitional ⟺ a pointwise @relation exists.

API reference

AbstractQAtlas.AbstractQAtlas — Module
AbstractQAtlas

The model-independent layer of the QAtlas ecosystem, in the spirit of AbstractFFTs: concrete atlases (QAtlas) implement this package, never the reverse.

Layers:

  1. core/ — the abstract type vocabulary for physical quantities: AbstractQAtlasModel, BoundaryCondition (Infinite/OBC/PBC), AbstractQuantity and its hierarchy, the abstract fields, the generic fetch verb (+ its fetch_cached memoization), and the Universality machinery — so atlases and third packages share dispatch types without depending on a full atlas.

  2. structure/ — the model-independent definitional correspondences between the core quantities: the transition classification, the quantity⇄exponent map behind the scaling forms, the response-function derivative genealogy (derivative_edge, rooted at FreeEnergy / GrandPotential), the spectral and Fourier graphs, and the Maxwell relations derived from the potentials.

  3. relations/ — generic, model-independent physics relations as first-class tested objects with a uniform three-verb interface (residual / check / solve): scaling laws, fluctuation–dissipation identities, Wick's theorem, topological invariants, the spectral/Keldysh web, and finite-size scaling forms.

  4. seams — generic verbs whose numerics/values live at the leaves: fetch (reference values, in QAtlas), report→Card (reported values), principal_value_hilbert/spectral_moment (functional numerics), and thermal_derivative/thermal_gradient (AD, in the ForwardDiff/Zygote extensions) — plus the KnowledgeGraph graph layer.

Values do not live here, and neither do model-specific laws. This package owns only what holds universally within a domain — independent of the system's symmetry, Hamiltonian, or any individual detail (Wick's theorem, the fluctuation–dissipation and Maxwell relations, the entropy inequalities, Kramers–Kronig, the scaling laws, …). Reference numbers (critical temperatures, exact magnetizations, exponent tables) AND model-specific relations (the Drude mobility μ=eτ/m, the ±J Nishimori- line energy, the SK de Almeida–Thouless line, single-band R_H=1/ne, …) belong to the implementing atlas (QAtlas), not here. The library is a universal yardstick: apply its relations to measured quantities to check whether a system obeys the laws that must hold regardless of its details.

source
AbstractQAtlas.Bits — Constant
Bits

LogBase(2), S = -Tr ρ log₂ ρ, which is what the entanglement literature usually counts.

source
AbstractQAtlas.REPORT_ROUTES — Constant
REPORT_ROUTES

The recognized routes a Card may carry — the how of the value. The cross-check routes are adopted verbatim from QAtlas's schema-v2 verify vocabulary; the measurement routes (:monte_carlo, :dmrg, :mps_qmc, :nrg, :tpq) are for the oracle reporters that push cards into the registry.

source
AbstractQAtlas.AbstractCoordinate — Type
AbstractCoordinate

Parent for evaluation-coordinate variables — a frequency ω, a momentum q: the point at which a quantity is evaluated, not a subject of the identity. Coordinates usually appear as lightweight supplied slots rather than typed keys (design note R3); the type exists so they can be keyed when it matters.

source
AbstractQAtlas.AbstractExponent — Type
AbstractExponent

Parent for critical-exponent variables (α, β, γ, δ, ν, η, z). Typing exponents separates the critical-exponent β from the inverse temperature InverseTemperature — the two :βs a symbol key conflates. Concrete exponents are introduced when the criticality domain migrates.

source
AbstractQAtlas.AbstractInequality — Type
AbstractInequality <: AbstractRelation

A relation asserting an inequality rather than an equality. Its residual is the slack in the ≥ 0 form: the relation holds iff residual ≥ 0 (within tolerance), so check tests that direction instead of abs(residual) ≤ atol. solve still returns the saturation value — where the slack vanishes, i.e. the tight bound (e.g. solve(Subadditivity(), Val(:S_AB)) gives the maximum S_A + S_B). Declared with @bound, which also records the statement's roles — bounded_slot, bounding_slot, bound_direction.

source
AbstractQAtlas.AbstractPropagator — Type
AbstractPropagator <: AbstractQuantity

Single-particle propagators — retarded/advanced/Matsubara Green's functions and the self-energy — the (q, ω)-resolved objects the Dyson equation relates.

source
AbstractQAtlas.AbstractQAtlasModel — Type
AbstractQAtlasModel

Abstract parent type for every atlas model. Concrete subtypes carry their physics parameters as typed fields, e.g.

struct TFIM <: AbstractQAtlasModel
    J::Float64
    h::Float64
end

Implementing packages (QAtlas and friends) subtype this and register fetch methods per (model, quantity, bc) triple.

source
AbstractQAtlas.AbstractQuantity — Type
AbstractQuantity

Abstract parent type for quantities. Concrete quantity structs (e.g. struct SpecificHeat <: AbstractQuantity end, or the index- parametric Susceptibility{A,B} for tensor quantities) make dispatch static and naming explicit (axis, entropy variant, …). Tensor character is carried by the tensor_rank / index_spaces / indices traits.

source
AbstractQAtlas.AbstractRelation — Type
AbstractRelation

Abstract parent type for physics relations. Concrete relations are declared with @relation and implement the three verbs:

  • residual(rel; vars...) — signed violation; 0 ⇔ satisfied.
  • check(rel; atol=0, vars...) — |residual| ≤ atol.
  • solve(rel, Val(:x); vars...) — the value of x implied by the remaining variables.

The three verbs also have a type-keyed form — residual(rel, b::Bag), check(rel, b), solve(rel, Q::Type, b) — that reads variables from a bag by their quantity/field TYPE instead of a formula symbol; see Bag.

Exact-arithmetic contract: residual and solve must not promote their inputs — Rational in ⇒ Rational out, so exactly-known values (e.g. the 2D Ising exponents) satisfy their relations exactly (residual == 0//1), not merely to floating-point tolerance.

Relations whose variables include an inverse temperature accept either β or T (exactly one) at every public verb; the normalization happens once, in the verb layer — kernels only ever see β.

source
AbstractQAtlas.AbstractResponse — Type
AbstractResponse

Parent type for a representation of a response FUNCTION over frequency (or (q, ω)) — an (ω, values) grid, an analytic pole–residue rep, … — that the functional sibling can transform. AbstractQAtlas owns only this abstract type and the evaluation verbs (principal_value_hilbert, spectral_moment); the concrete representations and their methods live in the functional package (the fetch-style seam: the interface here, the numerics there).

source
AbstractQAtlas.ActivatedExponent — Type
ActivatedExponent() <: AbstractQuantity

The exponent ψ of ACTIVATED dynamic scaling, ln(1/Δ) ∼ ξ^ψ — the law that replaces DynamicalExponent's Δ ∼ ξ^{−z} at an infinite-randomness fixed point, where the gap closes exponentially in a power of the length rather than as a power of it. No finite z describes such a point: the effective −d(ln Δ)/d(ln ξ) grows without bound.

ψ = 1/2 for the 1D random transverse-field Ising chain (Fisher, [1]).

Read off the Typical gap, not the DisorderAveraged one: at such a fixed point the average is set by rare weakly-disordered regions and follows a different law, so the two reductions give different exponents.

source
AbstractQAtlas.ActivatedMomentExponent — Type
ActivatedMomentExponent() <: AbstractExponent

φ of the infinite-disorder fixed point, where the moment grows in the logarithm of the energy scale rather than a power of it, μ ∼ |ln Ω|^φ ([2], §A.3). Pinned by ActivatedMomentGrowth, φψ = d - x_m.

The activated twin of LargeSpinMomentExponent. It is bookkeeping rather than a separately measured number, which is a statement about how it is obtained and not about whether it is a quantity of its own.

source
AbstractQAtlas.AdvancedGreensFunction — Type
AdvancedGreensFunction() <: AbstractPropagator

The advanced single-particle Green's function G^A(q, ω). The adjoint partner of the retarded one, G^A = (G^R)† (scalar: G^A(ω) = conj(G^R(ω))), so G^R − G^A = 2i Im G^R is the (un-normalized) spectral weight. Part of the Keldysh triple (G^R, G^A, G^K) — see relations/keldysh.jl.

source
AbstractQAtlas.AnyOf — Type
AnyOf{G}

Slot quantifier: the relation holds for one member of the abstract group G, and the caller says which (check(rel, b; subject = MassGap)).

Unlike EachOf, such a relation is not auto-discoverable: the engine cannot know which member a one-member law is about, so relation_report does not instantiate it and applicable_relations does not list it. ambiguous_relations lists them instead — the pending work is visible rather than silently absent.

source
AbstractQAtlas.AutoDiff — Type
AutoDiff() <: DerivativeRoute

Nested forward-mode automatic differentiation: exact to machine precision, and the only route that needs the potential to be a differentiable Julia function. Requires the ForwardDiff extension to be loaded.

source
AbstractQAtlas.BB84KeyRate — Type
BB84KeyRate() <: AbstractQuantity

The BB84 asymptotic secret-key rate R(e) = 1 − 2 H₂(e) at qubit error rate e, with H₂ the binary entropy (Shor & Preskill, [3]) — a provably ACHIEVABLE rate, so it bounds the extractable secret-key fraction from below; positive for e < 11%. A bounding value, and a LOWER one.

Bounds SecretKeyRateBound.

source
AbstractQAtlas.BerryCurvature — Type
BerryCurvature() <: AbstractQuantity

The Berry curvature Ω(k) of a band — the momentum-space field strength Ω = ∂_{k_x} A_y − ∂_{k_y} A_x of the Berry connection (Berry, [5]). Its Brillouin-zone integral is the ChernNumber; it also drives the intrinsic anomalous Hall effect (Xiao, Chang & Niu, [6]).

Note (scope): the Berry curvature is the imaginary part of the quantum geometric tensor; the real part (the quantum metric) and the mixed-state / Uhlmann generalizations are deliberately out of this package's scope.

source
AbstractQAtlas.BoundaryCondition — Type
BoundaryCondition

Abstract parent type. The three concrete subtypes carry system-size information where applicable, so fetch can read it from the BC instead of kwargs:

  • Infinite — thermodynamic limit; no size.
  • PBC(N::Int) — periodic boundary conditions at finite N.
  • OBC(N::Int) — open boundary conditions at finite N.

For backward compatibility, the zero-argument constructors PBC() and OBC() exist and set N = 0, which signals "caller will pass N via kwargs" — legacy fetch methods still look at kwargs[:N]. New fetch methods read bc.N directly.

source
AbstractQAtlas.BoundaryModeCount — Type
BoundaryModeCount() <: AbstractQuantity

The number of protected boundary (edge / surface) modes of a topological phase — fixed by the bulk topological invariant through the bulk–boundary correspondence, n = |ν| (Hasan & Kane, [7]). See BulkBoundary.

source
AbstractQAtlas.CHSHBound — Type
CHSHBound() <: AbstractQuantity

The largest CHSH correlator S = E(a,b) + E(a,b′) + E(a′,b) − E(a′,b′) a given physical theory admits: 2 for local hidden variables ([8]), 2√2 for quantum mechanics (Tsirelson, [9]), 4 for any no-signalling theory (Popescu–Rohrlich, [10]). A bounding value; which regime a fetched number belongs to is a scheme distinction on the consumer's registry row, not a separate quantity.

Bounds CHSHInequality.

source
AbstractQAtlas.Canonical — Type
Canonical(β)
Canonical(; β=nothing, T=nothing)

Canonical (Gibbs) ensemble at inverse temperature β, weight w(E) = e^{−βE}. Constructible from either β or T.

source
AbstractQAtlas.Card — Type
Card

One schema-v2 verification/report card: a computed subject value for hub = "TypeName(model)/TypeName(quantity)/TypeName(bc)", obtained via route, with its error_bar, independence class, status, any independent cross-check values, atol, refs, and a provenance discriminant. Build one with report; serialize a stream with card_jsonl.

status is :divergent (and subject is nothing) when the reported value is non-finite — a NaN/Inf is never emitted as a raw token.

source
AbstractQAtlas.CarrierDensity — Type
CarrierDensity() <: AbstractQuantity

The charge-carrier number density n — sets the electrical conductivity through the mobility (σ = n e μ) and the Hall coefficient (R_H = 1/n e).

source
AbstractQAtlas.CentralDifference — Type
CentralDifference(h::Real) <: DerivativeRoute

The symmetric difference quotient at step h, applied n times for an n-th derivative. Second-order accurate, and needs only that the potential can be called at points near x.

h has no default. The error is O(h²) + O(ε/hⁿ), so the best step depends on the order taken and on how noisy the potential is, and a default here would be a number chosen without either. observed_order is how to tell whether the h in hand is on the truncation side or the roundoff side.

source
AbstractQAtlas.ChaosBound — Type
ChaosBound() <: AbstractQuantity

The Maldacena–Shenker–Stanford ceiling on the OTOC Lyapunov exponent, λ_max = 2π/β in units ħ = k_B = 1 ([11]) — saturated by holographic and large-N SYK models. A bounding value.

Bounds LyapunovChaosBound.

source
AbstractQAtlas.ChargeGap — Type
ChargeGap() <: AbstractGap

Charge (Mott) gap of an electron system,

Δ_c = E₀(N+1) + E₀(N−1) − 2 E₀(N),

the cost of adding a particle plus the cost of removing one — equivalently the gap to the lowest charged excitation. Strictly positive in a Mott insulator and zero in a metal; rigorous closed form for the half-filled 1D Hubbard chain (Lieb & Wu, [12]).

Sector-resolved, and so not interchangeable with MassGap: the two agree only when the lowest excitation of the whole spectrum happens to be the charged one.

source
AbstractQAtlas.ChernNumber — Type
ChernNumber() <: AbstractQuantity

The (first) Chern number C ∈ ℤ of a set of bands — the Brillouin-zone integral of the Berry curvature, C = (1/2π) ∫_BZ Ω(k) d²k (Thouless, Kohmoto, Nightingale & den Nijs, [13]). It sets the quantized Hall conductance (TKNN) and, via the bulk–boundary correspondence, the number of chiral edge modes.

source
AbstractQAtlas.ChiralCondensate — Type
ChiralCondensate() <: AbstractQuantity

Vacuum expectation value ⟨ψ̄ψ⟩ of a fermion bilinear, signalling spontaneous (anomalous) chiral-symmetry breaking. The massless Schwinger model is the canonical 1+1-D example: even though the classical Lagrangian is chirally symmetric, the anomaly forces a non-zero condensate

⟨ψ̄ψ⟩ = − exp(γ_E) · e / (2π^{3/2}),    m_γ = e/√π.

(Schwinger 1962; Coleman-Jackiw-Susskind 1975.)

source
AbstractQAtlas.Concurrence — Type
Concurrence() <: AbstractEntanglementMeasure

The two-qubit concurrence C ∈ [0, 1] (Wootters, [14]) — an entanglement monotone; C = 0 for separable, C = 1 for a Bell pair. Its square is the Tangle.

source
AbstractQAtlas.ConditionalEntropy — Type
ConditionalEntropy() <: AbstractEntanglementMeasure

The conditional entropy S(A|B) = S(AB) − S(B) — can be negative quantum-mechanically (a signature of entanglement), unlike its classical counterpart.

source
AbstractQAtlas.Conductivity — Type
Conductivity{I}() <: AbstractQuantity
Conductivity(μ, ν₁, …, νₙ)            # each a Symbol

The DC (static) electrical conductivity of arbitrary response order — the n-th order current response j_μ = Σ σ⁽ⁿ⁾_{μ; ν₁…νₙ} E_{ν₁}…E_{νₙ}, a rank-(n+1) tensor in SpatialDirection space with one current direction μ and n field directions. response_order = length(I) − 1:

  • Conductivity(:x, :y) — linear σ_xy (order 1); its Hall component is quantized by TKNN;
  • Conductivity(:x, :y, :z) — second-order σ⁽²⁾, and so on.

This is the zero-frequency response (frequency_arguments == 0), the current-channel analogue of the static Susceptibility; like it, it carries intrinsic permutation symmetry over its field indices (at zero frequency). Its ω → 0 limit fixes it from the frequency-resolved AC DynamicalConductivity σ⁽ⁿ⁾(ω₁, …, ωₙ) (optical σ(ω), the photogalvanic σ⁽²⁾(ω₁, ω₂), Drude / f-sum rule) — the current-channel mirror of DynamicalSusceptibility.

source
AbstractQAtlas.ConnectedSpinCorrelation — Type
ConnectedSpinCorrelation{A,B}() <: AbstractTwoPointCorrelation
ConnectedSpinCorrelation(a::Symbol, b::Symbol)

The connected (cumulant) two-point spin correlation ⟨S^A_i S^B_j⟩_c = ⟨S^A_i S^B_j⟩ − ⟨S^A_i⟩⟨S^B_j⟩ — the disconnected product subtracted off, so it decays to zero at large separation even in a symmetry-broken phase. The connected companion of the (full) SpinCorrelation {A,B}; ConnectedSpinCorrelation(:z, :z) is ⟨σᶻ_i σᶻ_j⟩_c.

source
AbstractQAtlas.ConsistencyRow — Type
ConsistencyRow

One held-out variable and every route back to it: the target, a Symbol on the name-keyed report and a VariableKey on the type-keyed one, the value it was held out at, the steps that reproduced it, their values, the spread over those values and the held-out one, and whether they agree.

steps holds whichever step the report actually walked, DerivationStep or TypedStep, rather than translating one into the other: a TypedStep's output is a quantity type and a DerivationStep's is the relation's own variable symbol, so rewriting the first as the second would produce a step that cannot be replayed through solve.

source
AbstractQAtlas.ContinuousTransition — Type
ContinuousTransition <: AbstractTransition

A continuous (second-order / critical) transition: the free energy and its first derivatives are continuous, while second derivatives — the SpecificHeat C = −T ∂²F/∂T² and the susceptibility χ = −∂²F/∂h² — diverge. The correlation length diverges, so the singularities are power laws governed by CriticalExponents; the critical_scaling correspondence assigns each observable its exponent.

source
AbstractQAtlas.Convention — Type
Convention

Parent for the ways one quantity's value can be written: the base of the logarithm in an entropy, the normalisation of the operators an energy is built from, the statistic a disorder average reports.

Open by design. A new axis is a new subtype plus a convert_convention method and needs no change to this file, which is why the package ships the protocol rather than a list of axes. A quantity with two independent axes gets one subtype carrying both, since canonical_convention answers with a single value.

source
AbstractQAtlas.ConventionSet — Type
ConventionSet

What one project's numbers are written in, as a map from quantity type to Convention. Build one with conventions and hand it to bag.

Declared once next to the calculation, not repeated at each call, because the convention is a property of how the numbers were produced.

source
AbstractQAtlas.CriticalExponents — Type
CriticalExponents() <: AbstractQuantity

Standard set of equilibrium critical exponents {α, β, γ, δ, ν, η} of a universality class. Returns a NamedTuple.

For exact values: fields are Rational{Int}. For numerical estimates: fields are Float64 with corresponding _err fields (e.g., β_err) giving the uncertainty.

The scaling relations these exponents must satisfy are first-class objects in this package — see Rushbrooke, Widom, Fisher, Josephson and the convenience gate exponents_consistent.

source
AbstractQAtlas.CriticalScaling — Type
CriticalScaling(exponent, power)

The reduced-temperature critical law of a quantity: Q ∼ |t|^{power·e} where t = (T − T_c)/T_c and e is the critical exponent named exponent (a field of a CriticalExponents NamedTuple). power = +1 for a quantity that vanishes at criticality (e.g. the order parameter, M ∼ |t|^{+β}), power = −1 for one that diverges (e.g. χ ∼ |t|^{−γ}, ξ ∼ |t|^{−ν}, C ∼ |t|^{−α}).

source
AbstractQAtlas.CriticalTemperature — Type
CriticalTemperature() <: AbstractQuantity

Critical temperature T_c of a finite-temperature phase transition.

Generic home for a tag that previously lived inside a model file.

source
AbstractQAtlas.CurrentCorrelation — Type
CurrentCorrelation{I}() <: AbstractQuantity
CurrentCorrelation(μ, ν₁, …, νₙ)              # each a Symbol

The n-time current–current correlation — the microscopic Kubo kernel of the DynamicalConductivity, the current-channel analogue of the DynamicalCorrelation. The linear CurrentCorrelation(:x, :y) is the two-point ⟨j_x(t) j_y(0)⟩ whose retarded part gives σ_xy(ω); the order-n term is the (n+1)-point current correlation with n independent time differences (frequency_arguments == n), matching the order of the conductivity it feeds (order-faithful Kubo edge).

source
AbstractQAtlas.CurrentNoise — Type
CurrentNoise{I}() <: AbstractQuantity
CurrentNoise(μ, ν)                            # each a Symbol

The (symmetrized) current-noise spectral density S^j_μν(q, ω) — the current-channel structure factor: the space-time Fourier transform of the CurrentCorrelation (mirroring DynamicalStructureFactor ↔ DynamicalCorrelation) and the fluctuation partner of the dissipative Re σ_μν(ω) via the Johnson–Nyquist fluctuation–dissipation theorem (Nyquist, [16]; Callen & Welton, [17]). frequency_arguments == 1.

source
AbstractQAtlas.CurrentResponseKernel — Type
CurrentResponseKernel{I}() <: AbstractQuantity
CurrentResponseKernel(α, β₁, …, βₙ)          # each a Symbol

The current-channel mirror of ResponseKernel: the time-domain kernel whose Fourier transform is DynamicalConductivity. Same causal support, same order parametrisation; it exists so the response and current channels each have both sides of their Fourier edge, as the spin and current correlation channels already do.

source
AbstractQAtlas.DerivationRouteRow — Type
DerivationRouteRow

One route to a target: the relation, the inputs it consumed, and either the value it returned or the error it raised on the way.

A route that raised because of the DATA is a row rather than an absence: an impossible input makes a relation throw where it would otherwise have DISAGREED, and dropping it silently turns the strongest evidence the data is wrong into one fewer route to compare. A route the framework declines (_route_declined) is still an absence, since it was never applicable here.

source
AbstractQAtlas.DerivationStep — Type
DerivationStep(relation, output, inputs)

One directed edge of the derivation graph: relation computes the variable output::Symbol from the variables inputs::Tuple{Vararg{Symbol}} (its other variables), via solve(relation, Val(output); inputs...).

source
AbstractQAtlas.DerivationTrace — Type
DerivationTrace

The meta-information returned by derive(...; debug=true): the target symbol, its computed value, the ordered steps that produced it, and indirect — false only when the target was among the supplied knowns (a direct value), true when it was derived through one or more relations. The trace exists for SAFETY: an indirectly derived value is auditable by its route rather than trusted blindly.

source
AbstractQAtlas.DerivativeEdge — Type
DerivativeEdge(parent, field)

One edge of the response genealogy: the quantity carrying this edge is, up to a model-independent prefactor, ∂(parent)/∂(field) — a derivative of quantity type parent with respect to field type field. The exact prefactor/sign is supplied by the corresponding relation (e.g. GibbsHelmholtz for the energy's β-edge).

source
AbstractQAtlas.DiffusionConstant — Type
DiffusionConstant() <: AbstractQuantity

The (charge / particle) diffusion constant D — tied to the mobility by the Einstein relation μ = e D / k_B T and to the conductivity by σ = e² D N(ε_F).

source
AbstractQAtlas.DisorderAveraged — Type
DisorderAveraged(quantity::Q) <: AbstractQuantity

The arithmetic mean ⟨Q⟩ of quantity Q over an ensemble of disorder realisations. Where the distribution is broad it is set by the rare tail rather than by a representative sample, which is what separates it from Typical{Q}.

source
AbstractQAtlas.DisorderCorrelationExponent — Type
DisorderCorrelationExponent() <: AbstractQuantity

The decay exponent ρ of SPATIAL correlations in the disorder itself, [δ(r)δ(r')]_av = G_d(r-r') ∼ |r-r'|^{-ρ} ([2] Eqs. (10.1)-(10.2)). Uncorrelated disorder is the G_d = δ(r) limit, where ρ does not apply.

A property of the disorder ensemble rather than of the model, which is why it is its own subject: whether it matters is WeinribHalperinCriterion, and where it does, it sets the exponent on its own via WeinribHalperinExponent.

source
AbstractQAtlas.DisorderStrength — Type
DisorderStrength() <: AbstractQuantity

The strength of quenched disorder D, the broadness of the coupling distribution: D² is the variance of ln λ over the bond ensemble, for which [2] Eq. (A.1) takes P(λ) = D⁻¹λ^{-1+1/D} on 0 ≤ λ ≤ 1.

D is what the four fixed-point types of a random system are told apart by, so it is a subject rather than a parameter. It flows to a FINITE value at a conventional random critical point and in a Griffiths phase, where it is pinned to the dynamical exponent by FixedPointDisorderStrength (D = z/d); it flows to infinity at an infinite-randomness fixed point, which is what ActivatedExponent rather than DynamicalExponent then describes.

source
AbstractQAtlas.DrudeWeight — Type
DrudeWeight{I}() <: AbstractQuantity
DrudeWeight(μ, ν)                             # each a Symbol

The Drude weight (charge stiffness) tensor D_μν — the coefficient of the zero-frequency delta in the real optical conductivity, Re σ_μν(ω) = π D_μν δ(ω) + σ^reg_μν(ω) (Scalapino, White & Zhang, [18]). A rank-2 tensor in SpatialDirection space; D_μν > 0 signals a (perfect) conductor. Fixed by the DynamicalConductivity via the optical sum rule.

source
AbstractQAtlas.DynamicalConductivity — Type
DynamicalConductivity{I}() <: AbstractQuantity
DynamicalConductivity(μ, ν₁, …, νₙ)           # each a Symbol

The AC (frequency-resolved) electrical conductivity of arbitrary response order — the current-channel mirror of DynamicalSusceptibility and the frequency-resolved counterpart of the DC Conductivity (its ω → 0 limit).

The linear DynamicalConductivity(:x, :y) is the optical conductivity σ_xy(ω) (Drude peak, f-sum rule, Kramers–Kronig between Re and Im). The n-th order term DynamicalConductivity(μ, ν₁, …, νₙ) is σ⁽ⁿ⁾_{μ; ν₁…νₙ}(ω₁, …, ωₙ): the field acts at n distinct times, so the response is intrinsically multi-time — frequency_arguments == n == response_order. DynamicalConductivity(:x, :y, :z) is the second-order σ⁽²⁾(ω₁, ω₂) of the photogalvanic / second-harmonic response. Its microscopic Kubo expression is the retarded n-time current–current correlation (CurrentCorrelation; see structure/spectral.jl).

source
AbstractQAtlas.DynamicalCorrelation — Type
DynamicalCorrelation{I}() <: AbstractQuantity
DynamicalCorrelation(α, β₁, …, βₙ)             # each a Symbol

The space-and-time-resolved correlation of arbitrary order — the microscopic kernel of the Kubo response, carrying the same order as the DynamicalSusceptibility it feeds.

The linear DynamicalCorrelation(:x, :y) is the two-point ⟨A^x(r, t) A^y(0, 0)⟩ whose space-time Fourier transform is the DynamicalStructureFactor S(q, ω) — one time difference, frequency_arguments == 1.

The n-th order term DynamicalCorrelation(α, β₁, …, βₙ) is the (n+1)-point function ⟨A^α(t) A^{β₁}(t₁) ⋯ A^{βₙ}(tₙ)⟩ — n+1 operators at n independent time differences, so it is intrinsically n-time (frequency_arguments == n == response_order). Its n-fold nested-commutator (retarded) part is exactly the Kubo kernel of the order-n DynamicalSusceptibility(α, β₁, …, βₙ) (Kubo, [19] for n = 1; the n-th order generalisation is Peterson, [20]): an n-th order response is an n-time correlation.

source
AbstractQAtlas.DynamicalExponent — Type
DynamicalExponent() <: AbstractQuantity

The dynamical critical exponent z relating spatial and temporal scaling at a quantum critical point, Δ ∼ ξ^{−z} (equivalently ω ∼ k^z). z = 1 for a Lorentz-invariant (relativistic) critical point.

source
AbstractQAtlas.DynamicalSpinStructureFactor — Type
DynamicalSpinStructureFactor{A,B}() <: AbstractStructureFactor
DynamicalSpinStructureFactor(a::Symbol, b::Symbol)

The axis-resolved dynamical spin structure factor S^{AB}(q, ω) — the space-time Fourier transform of the SpinCorrelation ⟨S^A_i S^B_j⟩, a rank-2 tensor in SpinAxis space (DynamicalSpinStructureFactor(:z, :z) = S^{zz}(q, ω)). The component-resolved companion of the axis-agnostic DynamicalStructureFactor; its frequency integral gives the static SpinStructureFactor {A,B}.

source
AbstractQAtlas.DynamicalSusceptibility — Type
DynamicalSusceptibility{I}() <: AbstractSusceptibility
DynamicalSusceptibility(α, β₁, …, βₙ)          # each a Symbol

The dynamical susceptibility of arbitrary response order — the frequency-domain (multi-time) counterpart of the static Susceptibility. The linear DynamicalSusceptibility(:x, :y) is χ_xy(ω), one frequency argument, and its imaginary part χ''(q, ω) is the dissipative response of the fluctuation–dissipation theorem and the NMR relaxation rate.

The n-th order term DynamicalSusceptibility(α, β₁, …, βₙ) is χ⁽ⁿ⁾_{α;β₁…βₙ}(ω₁, …, ωₙ): the field is applied at n distinct times, so the response is intrinsically multi-time — frequency_arguments == n (response_order). DynamicalSusceptibility(:x, :y, :z) is the second-order χ⁽²⁾(ω₁, ω₂) of two-dimensional coherent spectroscopy (Wan & Armitage, [21]). Its microscopic Kubo expression is the n-fold nested-commutator response function (Kubo, [19] is the linear n = 1 case; the general n-th order formal theory is Peterson, [20]); see structure/spectral.jl.

The static Susceptibility{I} of the same order is the zero-frequency limit, χ⁽ⁿ⁾(0, …, 0).

source
AbstractQAtlas.EachOf — Type
EachOf{G}

Slot quantifier: the relation holds for every member of the abstract group G. Written as a slot key, g::EachOf{AbstractGap}, it behaves exactly like a parametric-family slot — relation_report auto-discovers each concrete member present in a bag and emits one row per member.

Use it only when the law really is member-agnostic (every gap ≥ 0). For a law about one member, use AnyOf — stating it with EachOf reports the other members as violated purely because they share a supertype.

source
AbstractQAtlas.EffectiveCentralCharge — Type
EffectiveCentralCharge() <: AbstractQuantity

Effective central charge c̃ of an infinite-randomness fixed point (Refael & Moore, [22]).

Not a CentralCharge: the fixed point is not conformally invariant, so c̃ is not fixed by a Virasoro algebra and is not restricted to the rational values a unitary CFT with c < 1 may take. It is named for the one thing it shares, the role in the entanglement law, where it enters exactly where c does (see InfiniteRandomnessEntanglementSlope).

source
AbstractQAtlas.EffectiveMass — Type
EffectiveMass() <: AbstractQuantity

The band effective mass m* — the inertial mass entering the Drude mobility μ = e τ / m*.

source
AbstractQAtlas.Energy — Type
Energy{G}() <: AbstractThermalPotential
Energy()                 # G = :natural — model-and-BC-natural granularity
Energy(:total)           # explicit ⟨H⟩
Energy(:per_site)        # explicit ⟨H⟩ / N

Ground-state / thermal energy expectation. The type parameter G makes the granularity (total vs per-site) a dispatch axis instead of a hidden docstring contract.

Energy() resolves to the model's native granularity via the native_energy_granularity trait. Use the explicit constructors when the caller needs a specific granularity.

source
AbstractQAtlas.EnergyVariance — Type
EnergyVariance() <: AbstractQuantity

The energy variance Var(H) = ⟨H²⟩ − ⟨H⟩² — zero iff the state is an exact eigenstate, the convergence metric of a variational / DMRG calculation.

source
AbstractQAtlas.FermiVelocity — Type
FermiVelocity = Velocity{:fermi}

Fermi velocity v_F = ∂ε/∂k |_{k = k_F} — the slope of the dispersion at the Fermi level. Well defined for a non-interacting or mean-field band structure (tight-binding lattices, Bogoliubov–de Gennes spectra, Dirac cones).

A kind of Velocity rather than a type of its own, so it reaches every relation whose v slot is typed on the family.

source
AbstractQAtlas.FermionicEntanglementEntropy — Type
FermionicEntanglementEntropy() <: AbstractEntanglementMeasure

The von Neumann entropy of the state restricted to the fermionic algebra of a region, S_f(A) = −Tr(ρ^f_A ln ρ^f_A), where ρ^f_A is obtained by restricting the Majorana covariance matrix to A's Majorana indices.

Distinct from VonNeumannEntropy and not interchangeable with it. Under a Jordan–Wigner map, the spin operators of a region carry a string that leaves the region unless the region is a single contiguous interval, so the spin algebra of A and the fermion algebra of A are the same algebra only in that case. Measured on the open Δ = 0 XXZ chain at N = 12 (QAtlas):

regionspinfermionic
{1,2,3,4}0.6283160.628316
{1,2,5,6}1.1123241.224109
{1,3}1.1666591.386294

Exact agreement on the contiguous region, and a gap of 0.1–0.2 nats on the disconnected ones — a gap that does not cancel in the mutual information (there I_spin is roughly twice I_f). Nothing in the entropy inequalities would flag a route that returned one where the other was asked for: both are honest von Neumann entropies of honest states, so both satisfy every one of them. That is why this is a separate quantity rather than a keyword on VonNeumannEntropy — a shared VariableKey would let the two mix inside one bag, and region_report keys its auto-discovery on that.

This is the quantity the multi-interval Calabrese–Cardy / Casini–Huerta closed forms predict: for free fermions the entanglement entropy of an arbitrary union of intervals is a signed sum of the bipartite chord kernel over the endpoint pairs, and the object it reproduces is S_f, not the spin entropy.

source
AbstractQAtlas.FillingFactor — Type
FillingFactor() <: AbstractQuantity

The Landau-level filling factor ν = n h /(e B) — the number of filled Landau levels; quantizes the Hall resistance R_xy = h/(ν e²).

source
AbstractQAtlas.FirstOrder — Type
FirstOrder <: AbstractTransition

A first-order (discontinuous) transition: the first derivative of the free energy jumps. Concretely — a discontinuity in the order parameter M = −∂F/∂h and/or the entropy S = −∂F/∂T (the latter giving a latent heat L = T ΔS). No diverging correlation length, hence no critical exponents in the continuous-transition sense.

source
AbstractQAtlas.FractalDimension — Type
FractalDimension() <: AbstractQuantity

Hausdorff dimension d_H of the random geometric set associated with a model — e.g. the SLEκ curve's `dH(κ) = min(2, 1 + κ/8)` (Beffara 2008). Real-valued, dimensionless, capped at the ambient space dimension.

source
AbstractQAtlas.Global — Type
Global <: Support

The trivial support: a bulk, whole-system quantity with no region/point decoration. The default support of every variable.

source
AbstractQAtlas.GrandCanonical — Type
GrandCanonical(β, μ)
GrandCanonical(; μ, β=nothing, T=nothing)

Grand-canonical ensemble at inverse temperature β and chemical potential μ, weight w(E, N) = e^{−β(E − μN)}.

source
AbstractQAtlas.GrandPotential — Type
GrandPotential() <: AbstractThermalPotential

The grand potential Ω = −β⁻¹ log Ξ = F − μN — the generating potential of the grand-canonical ensemble, the Legendre transform of the FreeEnergy that trades the particle number N for the chemical potential μ. It is the second root of the response genealogy: the particle number is its μ-derivative, N = −∂Ω/∂μ (the grand-canonical analogue of M = −∂F/∂h).

source
AbstractQAtlas.GreaterGreensFunction — Type
GreaterGreensFunction() <: AbstractPropagator

The greater Green's function G^>(q, ω) ∼ −i⟨A(t)A†(0)⟩. With its lesser partner it builds the RAK components: G^R − G^A = G^> − G^< and G^K = G^> + G^<; in equilibrium the two obey the KMS/detailed-balance relation G^<(ω) = ζ e^{−βω} G^>(ω) (ζ = +1 bosons, −1 fermions).

source
AbstractQAtlas.GroundStateDegeneracy — Type
GroundStateDegeneracy() <: AbstractQuantity

Dimension of the ground-state subspace as an Int. In topologically ordered phases this is a robust, lattice-independent invariant determined by the ambient surface (e.g. 4^g on a closed orientable genus-g surface for the toric code) and is set by the kwarg genus on the fetch call. Trivially 1 for any gapped, symmetry-unbroken phase.

source
AbstractQAtlas.GrowthExponents — Type
GrowthExponents() <: AbstractQuantity

KPZ-type growth / roughness / dynamic exponents. Returns (β_growth, α_rough, z) instead of the equilibrium set.

source
AbstractQAtlas.HallCoefficient — Type
HallCoefficient() <: AbstractQuantity

The Hall coefficient R_H = E_y / (j_x B_z) — for a single carrier band R_H = 1/(n e), fixing the carrier density and sign from the transverse (Hall) voltage.

source
AbstractQAtlas.HarrisCriterion — Type
HarrisCriterion() <: RelevanceCriterion

Uncorrelated quenched disorder is irrelevant at a clean fixed point with correlation-length exponent ν₀ in d dimensions when

ν₀ > 2/d,

so margin = ν₀ − 2/d. ν₀ is the exponent of the PURE system: the criterion asks what the clean fixed point does to a perturbation, not what the disordered one looks like.

The clean transverse-field Ising chain has ν₀ = 1 at d = 1, giving margin = −1: disorder is relevant, which is why the random chain flows to an infinite-randomness fixed point instead.

Reference: [23]; stated as Eq. (5.9) of [2].

source
AbstractQAtlas.HeatCurrent — Type
HeatCurrent() <: AbstractQuantity

The heat (thermal energy) current density j^Q_μ — a rank-1 vector in SpatialDirection space; the current driven by a temperature gradient (j^Q_μ = −κ_μν ∂_ν T at zero electric current) and the Onsager partner of the ElectricCurrent.

source
AbstractQAtlas.InfiniteRandomness — Type
InfiniteRandomness(ψ, ν, x_m, d)

The data of an infinite-randomness fixed point: the activated exponent ψ (ln(1/Δ) ∼ ξ^ψ), the average correlation-length exponent ν, the bulk order-parameter scaling dimension x_m, and the SPATIAL dimension d. The counterpart of ScalingDimensions for a fixed point that has no finite dynamical exponent, and the same contract: these are the inputs, every other exponent is derived by critical_exponents.

`d` is the chain's own dimension, not its classical image's

A random transverse-field Ising chain is d = 1. Atlases hand out d = 2 for its clean critical point's 2D classical image, so 2 is the number nearest to hand and it is wrong: φ comes out 3.618 rather than the golden mean 1.618, unflagged. Which d belongs to which system is SpatialDimension; holding it in the struct makes that one decision at construction rather than one per call, and at an infinite-randomness fixed point there is no finite d + z to confuse it with anyway.

Concretely: fetch(Universality(:IsingSDRG), CentralCharge(); d = 2) in QAtlas refuses any other d, d being the CFT's dimension there, and returns the EFFECTIVE charge under CentralCharge. Carrying either number straight here is the case above. Tracked as #157.

Arguments are promoted to a common type; pass Rationals where the values are rational. ψ ≤ 0 is refused rather than accepted: it names a conventional fixed point, which is ScalingDimensions's job, and it would divide by zero in φ.

critical_exponents(InfiniteRandomness(1//2, 2//1, (3-sqrt(5))/4, 1))
# (β = 0.381…, ν = 2.0, ν_typ = 1.0, ψ = 0.5, x_m = 0.190…, φ = 1.618…)
source
AbstractQAtlas.KeldyshGreensFunction — Type
KeldyshGreensFunction() <: AbstractPropagator

The Keldysh component G^K(q, ω) of the contour-ordered Green's function in the retarded–advanced–Keldysh (RAK) rotation. G^K = G^> + G^< carries the occupation/distribution information; in equilibrium it is fixed by the fluctuation–dissipation theorem G^K = h(ω)(G^R − G^A) with h = coth(βω/2) (bosons) or tanh(βω/2) (fermions) — see relations/keldysh.jl.

source
AbstractQAtlas.KeldyshSelfEnergy — Type
KeldyshSelfEnergy() <: AbstractPropagator

The Keldysh component of the self-energy Σ^K(q, ω) = Σ^> + Σ^< — the statistical (distribution-carrying) member of the RAK triple; the self-energy counterpart of KeldyshGreensFunction. In equilibrium it is locked to the broadening by the fluctuation–dissipation tie Σ^K = h(ω)(Σ^R − Σ^A).

source
AbstractQAtlas.KineticEnergy — Type
KineticEnergy() <: AbstractThermalPotential

The kinetic-energy expectation ⟨T⟩ — the T of the virial theorem 2⟨T⟩ = n⟨V⟩ (homogeneous potential of degree n).

source
AbstractQAtlas.KosterlitzThouless — Type
KosterlitzThouless <: AbstractTransition

The Berezinskii–Kosterlitz–Thouless transition (2D XY and relatives): an infinite-order transition with an essential singularity in the free energy (ξ ∼ exp(c/√(T−T_c)), not a power law) and no local order parameter (Mermin–Wagner). The standard equilibrium critical exponents do not apply; the transition is characterized instead by the universal helicity-modulus jump.

source
AbstractQAtlas.LargeSpinExponent — Type
LargeSpinExponent() <: AbstractExponent

ζ of the large-spin fixed point, where the effective moment GROWS under renormalization ([2], §A.5). A random-walk argument on the signs of the couplings gives ζ = 1/2.

Not the correlation-matrix eigenvalue that wears the same letter in EntanglementSpectrumCorrelation; one is an exponent and the other an occupation in (0, 1).

source
AbstractQAtlas.LargeSpinMomentExponent — Type
LargeSpinMomentExponent() <: AbstractExponent

κ of the large-spin fixed point, by which the effective moment grows as the energy scale falls, S_eff ∼ Ω^{-κ} ([2], §A.5, with §8.2 the 1D instance). Tied to the other two by LargeSpinMoment, κ = dζ/z, which is how a measured κ gives the dynamical exponent when ζ is known.

Named for its fixed point rather than for the physics, like LargeSpinExponent beside it: the infinite-disorder fixed point has a moment exponent too, ActivatedMomentExponent, and "effective moment" alone does not say which.

Not the thermal conductivity that wears the same letter in WiedemannFranz and ThermoelectricFigureOfMerit.

source
AbstractQAtlas.LatentHeat — Type
LatentHeat() <: AbstractThermalPotential

The latent heat L = T ΔS of a first-order transition — the entropy jump across the phase boundary times the temperature. Enters the Clausius–Clapeyron relation (ClausiusClapeyron).

source
AbstractQAtlas.LiebRobinsonVelocity — Type
LiebRobinsonVelocity() <: AbstractVelocity

The Lieb–Robinson velocity v_LR setting the linear light cone for information propagation in a local lattice quantum system: for local operators A_x, B_y separated by |x − y|,

‖[A_x(t), B_y(0)]‖ ≤ C exp(−μ (|x − y| − v_LR t)).

For free-fermion-mappable spin chains (TFIM, XY, the XX limit of XXZ) the bound is saturated and v_LR equals the maximum single-particle group velocity max_k |dΛ/dk|.

This is the v_LR slot of LiebRobinsonBound. The bound CHARACTER lives in that inequality — v ≤ v_LR — and not in a second quantity: an atlas that also wants to record "this number is a saturating upper bound" says so on the registry row (status = :bound), which is what the row's scheme key is for. QAtlas carried a separate LiebRobinsonBound quantity returning the identical closed form 2 min(|J|, |h|) for that reason, which made it a second type for one physical quantity.

Lieb & Robinson, [24]; Hastings & Koma, [25].

source
AbstractQAtlas.LogBase — Type
LogBase(base::Real) <: Convention

The base of the logarithm an entropy is measured with: Nats is LogBase(ℯ) and Bits is LogBase(2).

A coefficient multiplying a logarithm (c, c̃) is unchanged by the base, since it rescales entropy and logarithm alike. An additive constant (c₁, ln g) and a bare difference of entropies are not, and that is where a transcribed formula silently gains or loses a factor of ln 2.

source
AbstractQAtlas.LogarithmicNegativity — Type
LogarithmicNegativity() <: AbstractEntanglementMeasure

Logarithmic negativity E_N = log Tr|ρ^{T_B}|, the trace norm of the partial transpose. A mixed-state entanglement measure: unlike VonNeumannEntropy it stays meaningful when the two subsystems are not complementary halves of a pure state (finite β, or a traced-out remainder).

source
AbstractQAtlas.LoschmidtAmplitude — Type
LoschmidtAmplitude() <: AbstractQuantity

The Loschmidt echo L(t) = |⟨ψ₀|e^{-i H_f t}|ψ₀⟩|² ∈ [0, 1] after a sudden quench, at finite N. Not meaningful in the thermodynamic limit, where it vanishes identically because its cumulants are extensive — the intensive statement there is LoschmidtRateFunction.

Note the square: this is the echo itself, not the overlap.

source
AbstractQAtlas.LoschmidtRateFunction — Type
LoschmidtRateFunction() <: AbstractQuantity

The Loschmidt rate function

λ(t) = -log L(t) / N          (finite N)
λ(t) = -lim_{N→∞} log L(t)/N  (thermodynamic limit)

the intensive counterpart of LoschmidtAmplitude. Non-analytic cusps in λ(t) are dynamical quantum phase transitions (Heyl, Polkovnikov & Kehrein, [26]; review: Heyl, [27]).

source
AbstractQAtlas.LuckCriterion — Type
LuckCriterion() <: RelevanceCriterion

Luck's extension to APERIODIC modulation, where the perturbation is deterministic and its strength is set by how its fluctuations grow, Δ(L) ∼ L^ω. Irrelevant when

ν₀ > 1/(1 − ω),

so margin = ν₀ − 1/(1 − ω). ω = 1/2 is a random sequence and ω = −1 the Fibonacci one, whose bounded fluctuations make it irrelevant wherever ν₀ > 1/2.

At ω = 1/2 this IS HarrisCriterion in one dimension, since 1/(1−1/2) = 2 = 2/d. The two must agree there, which is a way to check either.

Reference: [28]; stated as Eq. (10.9) of [2], with the wandering exponent defined in its Eq. (10.8).

source
AbstractQAtlas.LuttingerParameter — Type
LuttingerParameter() <: AbstractQuantity

Luttinger liquid parameter K. Meaningful for critical 1D models with U(1) symmetry (e.g. XXZ in the critical regime |Δ| < 1).

source
AbstractQAtlas.LuttingerVelocity — Type
LuttingerVelocity = Velocity{:luttinger}

Luttinger-liquid (bosonisation) velocity u of the linear-dispersion mode of a 1D critical interacting system (Giamarchi, [29]). Coincides with FermiVelocity for free fermions; for an interacting system it carries the Luttinger renormalisation, so the two are distinct kinds rather than two names for one number.

source
AbstractQAtlas.MagneticFluxDensity — Type
MagneticFluxDensity() <: AbstractQuantity

The magnetic flux density B — sets the cyclotron frequency ω_c = eB/m and, in 2D, the Landau-level filling ν = n h / (e B).

source
AbstractQAtlas.Magnetization — Type
Magnetization{A}() <: AbstractMagnetization
Magnetization(a::Symbol)

Uniform magnetization component ⟨M_A⟩ per site — a rank-1 tensor in SpinAxis space, A ∈ {:x, :y, :z, …}. Magnetization(:z) replaces the old MagnetizationZ.

source
AbstractQAtlas.MarkovEntropy — Type
MarkovEntropy() <: AbstractEntanglementMeasure

The conditional mutual information I(A:C|B) = S(AB) + S(BC) − S(ABC) − S(B) — the deviation of ρ_ABC from a quantum Markov chain A–B–C (zero iff Markov). Non-negative by strong subadditivity (StrongSubadditivity); its vanishing is the structure theorem of Hayden, Jozsa, Petz & Winter, [30].

source
AbstractQAtlas.MassGap — Type
MassGap() <: AbstractGap

The spectral (mass) gap Δ = E₁ − E₀ between the ground state and the first excitation. Sets the correlation length ξ = v/Δ in a gapped phase, and vanishes as Δ ∼ ξ^{−z} (dynamical exponent z) on approach to a quantum critical point.

source
AbstractQAtlas.MaxwellRelation — Type
MaxwellRelation(potential, lhs, rhs, coeff)

The Maxwell relation DERIVED from a potential: ∂cₓ/∂y = coeff · ∂c_y/∂x, where lhs = (cₓ, y) names the derivative ∂cₓ/∂y, rhs = (c_y, x) names ∂c_y/∂x, and coeff = sₓ·s_y ∈ {+1,−1}. Its residual (zero ⇔ satisfied) is ∂cₓ/∂y − coeff·∂c_y/∂x. Built by maxwell_relation.

source
AbstractQAtlas.MeasurementEntropy — Type
MeasurementEntropy() <: AbstractEntanglementMeasure

The post-measurement (dephasing) entropy S(Δρ), where a projective measurement in a basis {|i⟩} maps ρ → Δρ = Σ_i ⟨i|ρ|i⟩ |i⟩⟨i|. Never below the pre-measurement S(ρ) (measurement does not decrease entropy), and the increase is exactly the relative entropy to the dephased state, S(Δρ) − S(ρ) = S(ρ‖Δρ) (Ohya & Petz; Vedral, [31]).

source
AbstractQAtlas.MerminGHZBound — Type
MerminGHZBound() <: AbstractQuantity

The largest Mermin three-party operator value |⟨M₃⟩| a theory admits: 2 under local realism, 4 in quantum mechanics, saturated by the GHZ state (Mermin, [32]). A bounding value, regime-selected the same way as CHSHBound.

Bounds MerminInequality.

source
AbstractQAtlas.MicroCanonical — Type
MicroCanonical(E; ΔE=0)

Microcanonical ensemble: equal weight on states in the energy window |Eᵢ − E| ≤ ΔE/2 (ΔE = 0 ⇒ exactly-degenerate shell).

source
AbstractQAtlas.MissingRouteBackend — Type
MissingRouteBackend(route) <: Exception

Thrown when a DerivativeRoute needs a package extension that is not loaded.

Its own type, because derivative_report has to tell it from every other way a route can fail. Catching Exception there would turn a diagnosed refusal, an off-diagonal susceptibility or a potential evaluated outside its domain, into the same NaN row as an unloaded backend.

source
AbstractQAtlas.Mobility — Type
Mobility() <: AbstractQuantity

The carrier mobility μ = v_drift / E — the drift response to a field; μ = e τ / m in the Drude picture, and μ = e D / k_B T by the Einstein relation.

source
AbstractQAtlas.MutualInformation — Type
MutualInformation() <: AbstractEntanglementMeasure

The quantum mutual information I(A:B) = S(A) + S(B) − S(AB) — the total (classical + quantum) correlation between A and B; non-negative by subadditivity (Subadditivity).

source
AbstractQAtlas.NMRRelaxationExponent — Type
NMRRelaxationExponent() <: AbstractQuantity

The low-temperature scaling exponent θ_NMR of 1/T₁ ∝ T^{θ_NMR}, fixed by the operator scaling dimension via θ_NMR = 2Δ_op − 1.

source
AbstractQAtlas.NMRSpinRelaxationRate — Type
NMRSpinRelaxationRate() <: AbstractQuantity

The NMR spin–lattice relaxation rate 1/T₁ — set by the low-frequency limit of the dissipative dynamical susceptibility (Moriya), 1/T₁ ∝ T · lim_{ω→0} Σ_q |A_hf(q)|² χ''(q, ω)/ω.

source
AbstractQAtlas.OBC — Type
OBC(N::Int)
OBC(; N::Int = 0)

Open boundary condition. N is the chain length. N = 0 is a legacy sentinel meaning "size unspecified — caller passes it via kwargs"; fetch methods that accept OBC(0) must look up kwargs[:N].

source
AbstractQAtlas.OrbitalIndex — Type
OrbitalIndex <: AbstractIndex

An orbital / band / sublattice index — the matrix index of single- particle propagators (G_ab, Σ_ab, A_ab). Its range is set by the model, so the interface names the space without enumerating it.

source
AbstractQAtlas.OrderSupport — Type
OrderSupport(order) <: Support

The support of a quantity that is a one-parameter FAMILY — the Rényi entropy S_α, the Tsallis entropy S_q — where the order is what distinguishes one member from another.

It exists because a VariableKey is (type, support) and the type alone cannot tell two orders apart. Carrying the order in a plain field does NOT help: _as_key builds the key from typeof(v), and typeof erases a non-parametric struct's field, so before this existed

bag(RenyiEntropy(2) => 0.5, RenyiEntropy(3) => 0.7)

silently kept only 0.7 — same key, second write wins, no error. MEASURED.

This is the order twin of RegionSupport: the support slot already existed for exactly this purpose, "same quantity, different instance", so a one-parameter family belongs in it rather than in a new type parameter per order.

source
AbstractQAtlas.PageEntropy — Type
PageEntropy() <: AbstractEntanglementMeasure

Average subsystem entropy of a Haar-random pure state on H_A ⊗ H_B: with m = dim H_A ≤ n = dim H_B,

⟨S_A⟩ = Σ_{k=n+1}^{mn} 1/k − (m−1)/(2n),

which is log m − 1/2 at m = n (Page, [34]). The reference value for "as entangled as a random state", hence the yardstick used in thermalisation and Page-curve arguments.

source
AbstractQAtlas.PartitionFunction — Type
PartitionFunction() <: AbstractThermalPotential

The partition function Z(β) = Σ exp(-βE) itself (finite systems).

Generic home for a tag that previously lived inside a model file: any statistical-mechanics model with a finite configuration space can register it.

source
AbstractQAtlas.PeltierCoefficient — Type
PeltierCoefficient{I}() <: AbstractQuantity
PeltierCoefficient(μ, ν)                      # each a Symbol

The Peltier coefficient tensor Π_μν — the heat current carried per unit electric current, j^Q_μ = Π_μν j_ν. Rank-2 in SpatialDirection space; the Kelvin (second Thomson) relation ties it to the Thermopower, Π = T S.

source
AbstractQAtlas.Polarization — Type
Polarization() <: AbstractQuantity

The bulk polarization density (or order parameter) per site. In an ordered phase it is the spontaneous polarization; where the order is staggered it is the spontaneous staggered polarization, which is why the sign convention belongs to the model rather than to the name.

source
AbstractQAtlas.PotentialEnergy — Type
PotentialEnergy() <: AbstractThermalPotential

The potential-energy expectation ⟨V⟩ — the V of the virial theorem 2⟨T⟩ = n⟨V⟩.

source
AbstractQAtlas.PotentialTerm — Type
PotentialTerm(variable, conjugate, sign)

One term of a thermodynamic potential's differential: dΦ ⊃ sign · conjugate · d(variable). The state variable conjugate is conjugate to the natural variable, carried with its sign (+1/−1).

source
AbstractQAtlas.Purity — Type
Purity() <: AbstractQuantity

The purity Tr(ρ_A²) ∈ (0, 1] of a (reduced) density matrix — 1 for a pure state, 1/d for the maximally mixed one. Fixes the Rényi-2 entropy via S_2 = −ln Tr ρ_A².

source
AbstractQAtlas.QuantityEdge — Type
QuantityEdge

A TypedEdge of the quantity-relationship graph (an alias for TypedEdge{Type}, nodes are quantity families). Its kind is one of

  • :derivative — to is the potential/quantity from is a field-derivative of (the response genealogy, derivative_edge); detail names the field ("∂/∂MagneticField", …).
  • :spectral — from is obtained from to by the dynamical-graph operation in detail (spectral_origin's via: dyson, neg_im_over_pi, …).
  • :fourier — from and to are Fourier conjugates (fourier_conjugate_quantity); detail == "fourier".
  • :law — from and to are co-constrained by a universal relation (they appear together in some quantities(rel)); detail names the relation ("SusceptibilityFDT", …).
source
AbstractQAtlas.QuantumSpeedLimit — Type
QuantumSpeedLimit() <: AbstractQuantity

The minimum time in which a state can evolve to an orthogonal one — the tighter of the Margolus–Levitin π/(2⟨E − E₀⟩) ([35]) and Mandelstam–Tamm π/(2ΔE) forms. A bounding value, and a LOWER one: it bounds the orthogonalization time from below.

Bounds OrthogonalizationTimeBound. The two closed forms themselves are MargolusLevitinBound and MandelstamTammBound, which state the bound directly from the energy data rather than from a fetched value.

source
AbstractQAtlas.Region — Type
Region(sites...)
Region(::AbstractSet)

A subsystem: a set of lattice sites, dimension-agnostic — a site is any hashable label (Int in 1D, NTuple{D,Int} in ND, a named block, …). Supports ∪, ∩, ⊆, disjoint, isempty, length. The support a VonNeumannEntropy is evaluated on; build a region-entropy bag key with entanglement_entropy.

A, B = Region(1, 2), Region(3, 4)
disjoint(A, B)          # true
A ∪ B                   # Region(1, 2, 3, 4)
Region(1) ⊆ A           # true
source
AbstractQAtlas.RegionFiniteSizeRow — Type
RegionFiniteSizeRow

One row of a finite_size_entropy_report: the relation it matched, the regions it was auto-instantiated on (one for a closed form, the pair a slope was taken across), its residual, and pass.

Separate from RegionReportRow because the residual means something else. There it is a slack, satisfied at ≥ 0; these are equalities, satisfied only near 0, and reading one as the other would call every negative residual a violation and every large positive one a success.

source
AbstractQAtlas.RegionReportRow — Type
RegionReportRow

One row of a region_report: the relation (an entropy inequality), the pairwise-disjoint regions it was auto-instantiated on ((A, B) for the bipartite inequalities, (A, B, C) for the triple ones — strong subadditivity and weak monotonicity), the slack (its residual; ≥ 0 ⇔ satisfied), and pass.

source
AbstractQAtlas.RegionSupport — Type
RegionSupport(region::Region) <: Support

The Support of a variable evaluated on a Region: VariableKey(VonNeumannEntropy, RegionSupport(A)) keys the entanglement entropy S(A). Value-based ==/hash (the Support contract), so two content-identical regions key the same bag entry.

source
AbstractQAtlas.RegionTEERow — Type
RegionTEERow

One row of a region_tee_report: the pairwise-disjoint tripartition regions (A, B, C) it was auto-instantiated on, the tripartite information tripartite_information (I₃), and the Kitaev–Preskill topological entanglement entropy topological_entanglement_entropy (γ = −I₃).

source
AbstractQAtlas.RelativeEntropy — Type
RelativeEntropy() <: AbstractEntanglementMeasure

The quantum relative entropy S(ρ‖σ) = Tr ρ(ln ρ − ln σ) — the distinguishability of ρ from σ; non-negative (Klein's inequality) and monotone under CPTP maps (Lindblad, [36]; Vedral, [31]).

source
AbstractQAtlas.RenyiEntropy — Type
RenyiEntropy(α::Real) <: AbstractEntanglementMeasure

The Rényi entanglement entropy S_α = (1−α)⁻¹ ln Tr(ρ_A^α). α = 2 is fixed by the Purity (S_2 = −ln Tr ρ_A²), and α → 1 recovers the VonNeumannEntropy.

The order is carried in the type's field rather than supplied separately at use: two Rényi entropies of different order are different quantities, and a bag keyed by type alone could not hold both. α = 1 is refused rather than silently aliased — S_1 is the limit, i.e. VonNeumannEntropy.

source
AbstractQAtlas.ResidualEntropy — Type
ResidualEntropy() <: AbstractThermalPotential

Zero-temperature configurational entropy density,

s_res = lim_{T → 0⁺} S(T) / N,

the entropy of the (possibly degenerate) ground-state manifold. Non-negative, and nonzero exactly when the ground state carries an extensive degeneracy — the antiferromagnetic Ising model on the triangular lattice (Wannier, [37]) and the hexagonal-lattice family (Houtappel, [38]) are the classic examples, as are the ice-rule models.

Kept separate from ThermalEntropy, which is the finite-β thermodynamic entropy: the T → 0 limit is its own closed form, not a β → ∞ extrapolation of the finite-β one.

source
AbstractQAtlas.Resistivity — Type
Resistivity{I}() <: AbstractQuantity
Resistivity(μ, ν)                             # each a Symbol

The resistivity tensor ρ_μν — the matrix inverse of the Conductivity σ_μν. Rank-2 in SpatialDirection space; in a magnetic field the 2×2 inversion gives ρ_xx = σ_xx/(σ_xx²+σ_xy²), ρ_xy = σ_xy/(σ_xx²+σ_xy²) — so a dissipationless Hall state (σ_xx = 0) has ρ_xy = 1/σ_xy, ρ_xx = 0.

source
AbstractQAtlas.ResponseKernel — Type
ResponseKernel{I}() <: AbstractQuantity
ResponseKernel(α, β₁, …, βₙ)          # each a Symbol

The time-domain nonlinear response kernel — the Volterra kernel χ⁽ⁿ⁾_{α;β₁…βₙ}(t̄₁, …, t̄ₙ) whose Fourier transform is DynamicalSusceptibility. This is the object a real-time method produces directly: the response is ⟨Q_α⟩⁽ⁿ⁾(t) = ∫ dt̄₁⋯dt̄ₙ χ⁽ⁿ⁾(t̄₁,…,t̄ₙ) f_{β₁}(t−t̄₁)⋯f_{βₙ}(t−t̄ₙ), and its microscopic form is the n-fold nested commutator ([19] is the linear n = 1 case; the general n-th order formal theory is Peterson, [20]).

It is not the frequency-domain object with the arguments renamed. The retarded kernel is supported only on the causally ordered region 0 ≤ t̄₁ ≤ ⋯ ≤ t̄ₙ (causally_ordered), so — unlike its transform — it is not permutation symmetric; the symmetrisation that produces χ̄⁽ⁿ⁾ happens on the frequency side. Integrating over the ordered region is what turns the kernel into the nested denominators of χ⁽ⁿ⁾(ω₁,…,ωₙ).

Order-parametric exactly like DynamicalSusceptibility: n time arguments for an n-th order response.

source
AbstractQAtlas.RetardedGreensFunction — Type
RetardedGreensFunction() <: AbstractPropagator

The retarded single-particle Green's function G^R(q, ω). Its spectral representation A = −Im G^R/π and the Dyson equation G^{-1} = G₀^{-1} − Σ are in relations/spectral.jl.

source
AbstractQAtlas.RetardedSelfEnergy — Type
RetardedSelfEnergy() <: AbstractPropagator

The retarded self-energy Σ^R(q, ω) — the Σ of the retarded Dyson equation, and the retarded member of the Keldysh RAK triple (Σ^R, Σ^A, Σ^K). Its anti-Hermitian part Σ^R − Σ^A is (minus) the level broadening.

source
AbstractQAtlas.Richardson — Type
Richardson(h::Real; levels::Int = 3) <: DerivativeRoute

CentralDifference evaluated at h, h/2, … and extrapolated, removing levels - 1 orders of the truncation error.

The accurate route when there is no AD backend: on a smooth potential it reaches AD to several digits where a single central difference at the same h reaches two or three.

source
AbstractQAtlas.ScalingDimension — Type
ScalingDimension() <: AbstractQuantity

The scaling dimension Δ_op of a local operator at a quantum critical point — the input to dynamical scaling relations such as the NMR exponent θ_NMR = 2Δ_op − 1.

source
AbstractQAtlas.ScalingDimensions — Type
ScalingDimensions(y_t, y_h, d)

The renormalization-group data of a continuous transition: the thermal and magnetic relevant eigenvalues y_t, y_h (the RG-flow exponents of the reduced temperature and the ordering field) and the spatial dimension d of the system this describes, which at a quantum critical point is the classical image rather than the quantum system: see SpatialDimension for which is which. These are the two-and-a-bit numbers the whole equilibrium exponent set is a function of, via the homogeneity of the singular free energy f_s(t,h) = b^{-d} f_s(b^{y_t}t, b^{y_h}h) — see critical_exponents.

Arguments are promoted to a common type; pass Rationals for an exact set (ScalingDimensions(1//1, 15//8, 2) is 2D Ising) or Float64 for a numerical fixed point.

critical_exponents(ScalingDimensions(1//1, 15//8, 2))
# (α = 0//1, β = 1//8, γ = 7//4, δ = 15//1, ν = 1//1, η = 1//4)   ← 2D Ising, exact
source
AbstractQAtlas.ScatteringTime — Type
ScatteringTime() <: AbstractQuantity

The transport (momentum-relaxation) time τ — the Drude scattering time setting the mobility μ = e τ / m.

source
AbstractQAtlas.ScramblingTime — Type
ScramblingTime() <: AbstractQuantity

The fast-scrambling time t_* = (β/2π) log N for a thermal system of N degrees of freedom (Sekino & Susskind, [39]) — the conjectured floor on how fast local information can be scrambled into global entanglement, saturated by black holes. A bounding value, and a LOWER one.

Bounds FastScramblingBound.

source
AbstractQAtlas.SelfEnergy — Type
SelfEnergy() <: AbstractPropagator

The single-particle self-energy Σ(q, ω) — the Dyson correction G^{-1} = G₀^{-1} − Σ between the bare and full propagators.

source
AbstractQAtlas.SizeSupport — Type
SizeSupport(L) <: Support

The support of a quantity measured on a FINITE SYSTEM of linear size L, where the size is what distinguishes one measurement from another.

The size twin of OrderSupport, and required for the same reason: a VariableKey is (type, support), so without it a finite-size sweep cannot even be written down. MEASURED, on the present bag:

bag(Typical(MassGap()) => 1e-2, Typical(MassGap()) => 1e-4)
# ERROR: bag: duplicate key VariableKey(Typical{MassGap}). Two entries claim
# the same identity slot; if they are different quantities, one of them needs
# a support that says so.

Build the key with at_size.

source
AbstractQAtlas.SpatialDimension — Type
SpatialDimension() <: AbstractQuantity

The number of spatial directions d of the system a law is about. A COUNT, and adjacent to ScalingDimension, an operator's x, so the two are read together rather than confused.

Every d in this package is this one. What varies is WHICH system, and only a quantum critical point has two: quenched disorder is constant along imaginary time, so it lives in the chain's own d = 1, while the classical image whose exponent table an atlas hands out has d + z = 2 directions. HarrisCriterion and the infinite-randomness relations read the first; Josephson applied to that image's table takes the second, and QuantumHyperscaling takes the first plus z and adds them itself. Classically there is one system and no distinction.

source
AbstractQAtlas.SpatialDirection — Type
SpatialDirection <: AbstractIndex

A spatial / Cartesian direction index μ — the index of currents and transport tensors (e.g. the conductivity σ_μν).

source
AbstractQAtlas.SpectralFunction — Type
SpectralFunction() <: AbstractQuantity

The single-particle spectral function A(q, ω) = −(1/π) Im G^R(q, ω), normalized by ∫ A(q, ω) dω = 1.

source
AbstractQAtlas.SpectralOrigin — Type
SpectralOrigin(from, via)

One edge of the dynamical-quantity graph: the quantity carrying it is obtained from quantity type from by the operation named via — one of :dyson, :neg_im_over_pi, :bz_average, :spacetime_fourier, :low_frequency_limit, :kubo, :spatial_integral_q0.

source
AbstractQAtlas.SpinAxis — Type
SpinAxis <: AbstractIndex

A spin / order-parameter component index α ∈ {x, y, z, …} — the index of magnetizations, susceptibilities, spin correlations, structure factors.

source
AbstractQAtlas.SpinCorrelation — Type
SpinCorrelation{A,B}() <: AbstractTwoPointCorrelation
SpinCorrelation(a::Symbol, b::Symbol)

Two-point spin correlation ⟨S^A_i S^B_j⟩ — a rank-2 tensor in SpinAxis space (SpinCorrelation(:z, :z) replaces the old ZZCorrelation). At criticality its decay is governed by the anomalous dimension η — see the correlation_decay correspondence.

source
AbstractQAtlas.SpinGap — Type
SpinGap() <: AbstractGap

Spin gap of an electron or spin system,

Δ_s = E₀(Sᶻ = 1) − E₀(Sᶻ = 0),

the lowest excitation energy at fixed particle number that flips one spin. Zero whenever the spinon branch is gapless — rigorously so for the half-filled 1D Hubbard chain (Lieb & Wu, [12]) — and positive in a spin-gapped phase (Haldane chain, BCS superconductor).

Sector-resolved like ChargeGap. A model can be gapless in the spin sector while gapped in the charge sector, which is why these are two quantities rather than one gap with a sector keyword.

source
AbstractQAtlas.SpinStructureFactor — Type
SpinStructureFactor{A,B}() <: AbstractStructureFactor
SpinStructureFactor(a::Symbol, b::Symbol)

The axis-resolved static spin structure factor S^{AB}(q) — the spatial Fourier transform of the SpinCorrelation ⟨S^A_i S^B_j⟩, a rank-2 tensor in SpinAxis space (SpinStructureFactor(:z, :z) = S^{zz}(q)). The component-resolved companion of the axis-agnostic StaticStructureFactor; its q → 0 limit fixes the component susceptibility χ_{AB} = β S^{AB}(q → 0) (classical).

source
AbstractQAtlas.SpontaneousMagnetization — Type
SpontaneousMagnetization() <: AbstractMagnetization

The spontaneous (symmetry-broken) order-parameter magnitude M(T) in the ordered phase; identically zero above T_c. A scalar — the magnitude, not a spin component — so tensor_rank == 0; its critical exponent is β (see critical_scaling).

source
AbstractQAtlas.Squeezed — Type
Squeezed(r; φ=0.0)

Single-mode squeezed-vacuum state family with squeezing parameter r and squeezing angle φ (φ = 0: x-quadrature squeezed). Not an ensemble but a parameterized pure-state family — included because its moments obey generic closed-form identities (see relations/statistics.jl: squeezed_variances, squeezed_mean_photons).

source
AbstractQAtlas.StaticStructureFactor — Type
StaticStructureFactor() <: AbstractStructureFactor

The static (equal-time) structure factor S(q) — the frequency integral of the DynamicalStructureFactor, S(q) = ∫ S(q, ω) dω/(2π) (Van Hove, [40]). Its q → 0 limit fixes the static susceptibility (χ = β S(q→0), classical). Rank-2 in spin space, one frequency integrated out (frequency_arguments == 0).

source
AbstractQAtlas.StringOrderParameter — Type
StringOrderParameter() <: AbstractQuantity

Kennedy-Tasaki non-local (string) order parameter

O_str = lim_{|i-j| -> infty} -<S^z_i exp[i pi sum_{i<k<j} S^z_k] S^z_j>

for S=1 chains. Detects the hidden Z2 x Z2 symmetry breaking that defines the Haldane phase (T. Kennedy and H. Tasaki, Phys. Rev. B 45, 304 (1992)). At the AKLT point the closed-form value is O_str = 4/9 (AKLT 1988), making it the canonical analytic test bed for any implementation that aims to detect topologically non-trivial gapped phases of integer-spin chains.

source
AbstractQAtlas.Support — Type
Support

Where / on what a variable is evaluated. Global — the whole system, no decoration — is the default and the only support the type-keyed prototype uses; region / point / pair supports arrive with the entanglement layer.

Equality contract

A VariableKey is a Dict key, so it hashes and compares by its support. Every Support subtype MUST therefore implement value-based Base.== and Base.hash (Julia's struct default is identity ===). Global satisfies this trivially as a zero-field singleton; a future Region = Set{AbstractSite} must define them explicitly, or two content-identical regions built separately would key distinct bag entries.

source
AbstractQAtlas.SurfaceMagnetization — Type
SurfaceMagnetization() <: AbstractMagnetization

The order parameter at the free end of an OPEN chain, with the far end held fixed to break the symmetry. Which Pauli component that is depends on the model's convention, so this package does not name one: the source writes m_s = ⟨σ₁ˣ⟩ for H = −ΣJσˣσˣ − Σhσᶻ, QAtlas's TFIM has the two swapped. A boundary observable: it has no PBC counterpart, and its scaling dimension x_m^s is a surface exponent, distinct from the bulk x_m.

It carries the finite-size story of an infinite-randomness fixed point because it is exactly computable per disorder realization at any L ([41]; [2] Eq. (4.4)). Its DisorderAveraged value then decays as L^{-x_m^s} (Eq. (4.7)) while its Typical value decays as exp(-c·L^ψ) (Eq. (4.6)): same observable, same L, different functional form. See ActivatedFiniteSizeScaling.

source
AbstractQAtlas.Susceptibility — Type
Susceptibility{I}() <: AbstractSusceptibility
Susceptibility(α, β₁, …, βₙ)          # each a Symbol

Susceptibility of arbitrary response order — the n-th order term of the order-parameter response to its conjugate field,

χ⁽ⁿ⁾_{α; β₁…βₙ} = ∂ⁿ⟨M_α⟩ / ∂h_{β₁}…∂h_{βₙ},

a rank-(n+1) tensor in SpinAxis space whose index parameter I = (α, β₁, …, βₙ) carries one response direction α and n field directions. The response order is n = length(I) − 1 (response_order):

  • Susceptibility(:x, :y) — linear χ_xy = ∂M_x/∂h_y (order 1), the off-diagonal component the fused SusceptibilityXX/ZZ names could not express;
  • Susceptibility(:x, :y, :z) — second-order nonlinear χ⁽²⁾_{x;yz} = ∂²M_x/∂h_y∂h_z (order 2);
  • Susceptibility(:x, :x, :x, :x) — third-order χ⁽³⁾, and so on.

The genealogy is recursive: χ⁽ⁿ⁾ ⟵ χ⁽ⁿ⁻¹⁾ ⟵ … ⟵ M ⟵ F (derivative_edge), so derivative_order(χ⁽ⁿ⁾, MagneticField) == n + 1. The linear component's defining identity is SusceptibilityFDT χ_AB = β·Cov(M_A, M_B).

source
AbstractQAtlas.Tangle — Type
Tangle() <: AbstractEntanglementMeasure

The tangle τ = C² — the squared Concurrence; the bipartite entanglement measure obeying the CKW monogamy inequality τ(A:BC) ≥ τ(A:B) + τ(A:C).

source
AbstractQAtlas.ThermalAverage — Type
ThermalAverage(quantity, distribution) <: AbstractQuantity

Marker pairing a quantity with the distribution it is averaged in — ⟨Q⟩_D at the type level. Being itself an AbstractQuantity, it composes with the fetch verb, so an atlas can make the ensemble an explicit dispatch axis:

fetch(model, ThermalAverage(Energy(), Canonical(β)), bc)

instead of the implicit "a β kwarg means canonical" convention. The tensor traits (indices, tensor_rank, index_spaces) pass through to the wrapped quantity, so a component average ⟨χ_xy⟩_D keeps its index structure through the marker.

Fields: quantity, distribution (accessed directly).

source
AbstractQAtlas.ThermalConductivity — Type
ThermalConductivity{I}() <: AbstractQuantity
ThermalConductivity(μ, ν)                     # each a Symbol

The (DC) thermal conductivity tensor κ_μν — the heat-current response to a temperature gradient, j^Q_μ = −κ_μν ∂_ν T. Rank-2 in SpatialDirection space; its ratio to the electrical Conductivity is fixed by the Wiedemann–Franz law.

source
AbstractQAtlas.Thermopower — Type
Thermopower{I}() <: AbstractQuantity
Thermopower(μ, ν)                             # each a Symbol

The thermopower (Seebeck coefficient) tensor S_μν — the electric field generated per unit temperature gradient at zero current, E_μ = S_μν ∂_ν T. Rank-2 in SpatialDirection space; fixed by the Mott formula and linked to the PeltierCoefficient by the Kelvin relation.

source
AbstractQAtlas.ThreeTangle — Type
ThreeTangle() <: AbstractEntanglementMeasure

The residual three-tangle τ₃ = τ(A:BC) − τ(A:B) − τ(A:C) (Coffman, Kundu & Wootters, [42]) — the genuinely tripartite entanglement left over after the monogamy budget; τ₃ = 1 for GHZ, 0 for W.

source
AbstractQAtlas.TopologicalEntanglementEntropy — Type
TopologicalEntanglementEntropy() <: AbstractEntanglementMeasure

The topological entanglement entropy γ = ln D (D the total quantum dimension) — the universal constant subleading term of the area law S(∂) = α|∂| − γ, extracted from a tripartition by the Kitaev–Preskill combination (Kitaev & Preskill, [43]; Levin & Wen 2006); nonzero signals topological order.

source
AbstractQAtlas.TopologicalInvariant — Type
TopologicalInvariant() <: AbstractQuantity

The model's topological invariant (winding number, Chern number, ℤ₂ index, Pfaffian sign, … — the concrete meaning is declared by the implementing model). Generic computations of standard invariants on Bloch maps live in this package's relations layer (winding_number, chern_number).

source
AbstractQAtlas.TripartiteInformation — Type
TripartiteInformation() <: AbstractEntanglementMeasure

The tripartite information I₃(A:B:C) = I(A:B) + I(A:C) − I(A:BC) — can be negative (a diagnostic of scrambling / multipartite correlation).

source
AbstractQAtlas.TsallisEntropy — Type
TsallisEntropy(q::Real) <: AbstractEntanglementMeasure

The Tsallis entropy S_q = (1 − Tr ρ_A^q)/(q − 1) (Tsallis, [44]) — the other one-parameter deformation of the VonNeumannEntropy (q → 1 limit), non-additive across independent subsystems.

The order lives in the type's field, and keys through OrderSupport, for the same reason RenyiEntropy does: two Tsallis entropies of different order are different quantities, and a bag keyed by type alone would hold only the last one written. q = 1 is refused rather than silently aliased — it is the von Neumann limit.

source
AbstractQAtlas.TypedEdge — Type
TypedEdge{N}(kind, from, to, detail, directed=true)

One typed edge of a KnowledgeGraph: a kind-labeled connection from node from to node to (both of type N), a human-readable detail, and whether it is directed (traversed from → to only) or symmetric (both ways).

source
AbstractQAtlas.TypedStep — Type
TypedStep(relation, output::VariableKey, inputs::Vector{VariableKey})

One directed edge of the TYPE-keyed derivation graph: relation computes the identity variable output (a VariableKey) from its other identity slots inputs (plus its supplied slots, provided as extras), via the type-keyed solve.

source
AbstractQAtlas.Typical — Type
Typical(quantity::Q) <: AbstractQuantity

The TYPICAL value of quantity Q over an ensemble of disorder realisations — the log-average exp⟨ln Q⟩, i.e. the value a single sample is most likely to show. Distinguished from DisorderAveraged{Q} because at a broad-distribution fixed point the two follow different laws; they coincide only when the distribution is narrow. Never above the average, by Jensen — see TypicalBelowAverage.

source
AbstractQAtlas.Universality — Type
Universality{C}

Parametric dispatch tag for universality classes. C is a Symbol identifying the class (:Ising, :XY, :Heisenberg, :Potts3, :Potts4, :Percolation, :KPZ, etc.).

Which symbols are legal is deliberately open — an atlas adds a class by adding methods, and this package cannot see them. That C is a Symbol at all is not open, and is checked here.

Use with CriticalExponents (equilibrium) or GrowthExponents (KPZ-type) and a d keyword to select the spatial dimension:

fetch(Universality(:Ising), CriticalExponents(); d=2)   # exact Rational
fetch(Universality(:Ising), CriticalExponents(); d=3)   # numerical + _err
source
AbstractQAtlas.VariableKey — Type
VariableKey(type::Type, support::Support = Global())

The identity of a relation variable: the quantity / field / coordinate / exponent type together with its support. This — never a formula-letter Symbol — is what the type-keyed bag, relation_report, and the derivation graph match on, so distinct types (and, later, distinct supports of one type) can never collide.

source
AbstractQAtlas.VectorPotential — Type
VectorPotential(components::Real...)
VectorPotential(a::Real)                # one dimension

The optical vector potential A, with its dimension in the type.

N IS THE DIMENSION OF THE SPACE DISPLACEMENTS LIVE IN — the ambient space the sites are embedded in — because peierls_phase contracts A with r_i - r_j. It is not a property of the site SET, and in particular it is not a Hausdorff dimension: a Sierpiński gasket drawn in the plane has sites whose set is log3/log2-dimensional and displacements that are ordinary 2-vectors, so its A is VectorPotential{2}.

For a cut-and-project quasicrystal it is the PARALLEL dimension (D_par in QuasiCrystal.jl's cut_and_project_dimensions), not the hyperspace D_hyper: a Fibonacci chain has D_par = 1, D_hyper = 2, and its optical A is VectorPotential{1} because the hops it multiplies are displacements in the physical line. A drive along the PERPENDICULAR directions is a phason, not a vector potential, and does not belong in this type — conflating the two is the mistake N exists to make impossible to write.

A bare number could say none of this.

source
AbstractQAtlas.VectorPotentialField — Type
VectorPotentialField <: AbstractField

The optical vector potential A. Conjugate (via j = −∂H/∂A) to the ElectricCurrent — the velocity-gauge analogue of M = −∂F/∂h, with the Hamiltonian in place of the free energy because A couples to the hopping rather than to a thermodynamic variable.

A VECTOR field: unlike the scalar tags above it carries a direction, and its values are VectorPotentials whose dimension is the number of SpatialDirection slots the model ranges over. See structure/velocity_gauge.jl for the phase it enters through and the length unit that phase depends on.

source
AbstractQAtlas.Velocity — Type
Velocity{K}() <: AbstractVelocity
Velocity()                # K = :characteristic — the unspecified one
Velocity(:fermi)          # [`FermiVelocity`](@ref)
Velocity(:luttinger)      # [`LuttingerVelocity`](@ref) / [`SpinWaveVelocity`](@ref)
Velocity(:sound)

A characteristic propagation velocity — the v of the correlation length ξ = v/Δ (CorrelationLengthGap) and of the CFT finite-size forms (FiniteSizeGap, CasimirCentralCharge).

The type parameter K makes which velocity a dispatch axis, exactly as G does for Energy's granularity. It is not decoration: a slot typed on the bare Velocity is a parametric family, so a bag holding Velocity(:fermi) matches it by auto-discovery. Before K existed the specific velocities were separate structs, typeof made them different bag keys from Velocity, and a relation typed on Velocity could not see them — the three relations above were unreachable for every atlas hub that knows its Fermi or Luttinger velocity rather than an anonymous "velocity".

LiebRobinsonVelocity is deliberately NOT a Velocity{K}: it bounds information propagation rather than naming the mode that propagates, and it is only equal to a characteristic velocity when the bound happens to be saturated. Keeping it outside the family keeps it out of ξ = v/Δ.

source
AbstractQAtlas.VonNeumannEntropy — Type
VonNeumannEntropy() <: AbstractEntanglementMeasure

The von Neumann entanglement entropy S = −Tr(ρ_A ln ρ_A) of a subsystem — the n → 1 limit of the RenyiEntropy. In a gapped phase it obeys an area law (Eisert, Cramer & Plenio, [45]); at a 1D critical point it grows logarithmically with the subsystem size, S = (ncuts · c/6) ln ℓ (Calabrese & Cardy, J. Stat. Mech. (2004) P06002) — c/3 for the two-cut geometries and c/6 for a region with a single cut. Which one applies is set by the region's cut count, not by the chain's boundary condition; see CFTEntanglementSlope.

source
AbstractQAtlas.WaveMixing — Type
WaveMixing(plus, minus)

A general wave-mixing process: M = length(plus) drive frequencies, where drive k enters the response plus[k] times as +ω_k and minus[k] times as −ω_k. The total response order is sum(plus) + sum(minus) and the emitted frequency is Σ (plus[k] − minus[k]) ω_k.

Every named process below is a constructor for one of these, so the layer covers arbitrary order and arbitrary numbers of colours without new machinery:

processWaveMixingargumentsemits
HarmonicGeneration(q)((q,), (0,))(ω, …, ω)qω
OpticalRectification((1,), (1,))(ω, −ω)0
SumFrequencyGeneration((1,1), (0,0))(ω₁, ω₂)ω₁+ω₂
DifferenceFrequencyGeneration((1,0), (0,1))(ω₁, −ω₂)ω₁−ω₂
FourWaveMixing((2,0), (0,1))(ω₁, ω₁, −ω₂)2ω₁−ω₂
KerrEffect((2,), (1,))(ω, ω, −ω)ω
CrossPhaseModulation((1,1), (1,0))(ω₁, −ω₁, ω₂)ω₂

Processes that are a special evaluation point rather than a distinct multiplicity pattern do not need their own name: the Pockels effect is SumFrequencyGeneration() at ω₂ = 0, and electric-field-induced second-harmonic generation is FourWaveMixing()-shaped with one drive held at zero frequency.

A drive that never enters is rejected — it would make the arity of process_frequencies disagree with the process being described.

source
AbstractQAtlas.WeinribHalperinCriterion — Type
WeinribHalperinCriterion() <: RelevanceCriterion

Disorder whose correlator decays as a power, G(r) ∼ r^{−ρ}, rather than being uncorrelated. Correlations are irrelevant, so the uncorrelated universality class survives, when

ρ > 2/ν,

so margin = ρ − 2/ν_dis. The keyword is ν_dis, not ν, on purpose: this is the correlation-length exponent of the UNCORRELATED DISORDERED fixed point, one subscript away from HarrisCriterion's clean ν₀ and a different number. Passing a clean exponent here is syntactically fine and physically wrong, so the two are not allowed to look alike.

The criteria ask different questions in sequence: Harris, whether disorder matters at all; this one, whether correlations move a fixed point disorder has already changed.

Reference: [46]; stated as Eq. (10.2) of [2].

source
AbstractQAtlas.CrossPhaseModulation — Method
CrossPhaseModulation()

Cross-phase modulation: χ⁽³⁾(ω₁, −ω₁, ω₂), emitting at ω₂ — a pump at ω₁ modulating a probe at ω₂. The pump enters twice with opposite signs, so it contributes no net frequency; this is the pump–probe shape.

source
AbstractQAtlas.FourWaveMixing — Method
FourWaveMixing()

Four-wave mixing: χ⁽³⁾(ω₁, ω₁, −ω₂), emitting at 2ω₁ − ω₂ — the third-order two-colour process behind coherent anti-Stokes Raman scattering ([47] for the permutation bookkeeping it obeys).

Optical phase conjugation is not this cut: it needs the fully degenerate case, all four waves at one frequency, which is KerrEffect here. At ω₁ ≠ ω₂ the output at 2ω₁ − ω₂ is in general not even at the probe's own frequency.

source
AbstractQAtlas.HarmonicGeneration — Method
HarmonicGeneration(q)

q-th harmonic generation: all q arguments equal, χ⁽q⁾(ω, …, ω), emitting at qω. q = 2 is second-harmonic generation ([48], the first observation of a nonlinear optical process); large q is high-harmonic generation, which needs no separate type.

source
AbstractQAtlas.KerrEffect — Method
KerrEffect()

The optical Kerr effect / self-phase modulation: χ⁽³⁾(ω, ω, −ω), emitting back at ω — an intensity-dependent refractive index. Single-colour, third order, degeneracy factor 3.

source
AbstractQAtlas.OpticalRectification — Method
OpticalRectification()

Optical rectification: χ⁽²⁾(ω, −ω), emitting at zero frequency — a static response induced by an oscillating field ([49]). The photovoltaic / photogalvanic effect is its current-channel counterpart.

The distinction this layer exists for is visible here: the frequency arguments are (ω, −ω) and nonzero, the emitted frequency is 0, and the degeneracy factor is 2. All three are different numbers.

source
AbstractQAtlas._bc_size — Function
_bc_size(bc::BoundaryCondition, kwargs) -> Int

Return the effective system size for bc. Prefers bc.N when it is positive; otherwise looks up kwargs[:N]; otherwise throws. Legacy fetch methods can use this helper to accept both OBC(N=24) and OBC(); N=24 call forms.

source
AbstractQAtlas._beta — Method
_beta(; β=nothing, T=nothing)

Resolve the β-or-T keyword convention used throughout this package: callers may pass either the inverse temperature β or the temperature T (exactly one). Private helper shared by constructors and relations.

source
AbstractQAtlas.also_constrains — Method
also_constrains(rel::AbstractRelation) -> Tuple{Vararg{Type}}

Extra quantity TYPES a relation constrains that do NOT appear as a typed identity slot — a quantity entering only through a SUPPLIED variance or derivative. The Var(M) in the susceptibility FDT constrains Magnetization; the dlnσ/dε in the Mott formula constrains Conductivity. Auto-derivation from variable_types cannot see these, so they are hand-declared and unioned into quantities (which keeps the physics graph complete without a full hand-written link). Defaults to ().

source
AbstractQAtlas.ambiguous_relations — Method
ambiguous_relations(b::Bag; domain=nothing, extras...) -> Vector{AbstractRelation}

Relations this bag could satisfy once you name a member — every slot is fillable, but one is an AnyOf group and the law is about ONE of its members, which the engine cannot choose:

check(rel, b; subject = MassGap)     # the caller says which

Disjoint from applicable_relations by construction, and that is the point: an AnyOf relation is deliberately excluded from auto-discovery, so without this query it would be absent from every report rather than pending in one. A gap you can list is a gap you can close.

source
AbstractQAtlas.applicable_relations — Method
applicable_relations(b::Bag; domain=nothing, extras...) -> Vector{AbstractRelation}

The type-keyed analogue of applicable_relations: every registered type-keyed relation whose identity variables' TYPES are all present in b (with Temperature ⇄ InverseTemperature accepted) and whose supplied slots are all in extras. No string matching, hence no cross-quantity collision — domain is only for scoping, never disambiguation.

source
AbstractQAtlas.applicable_relations — Method
applicable_relations(data::NamedTuple; domain=nothing) -> Vector{AbstractRelation}

The registered relations whose required variables are all present in data (after β-or-T normalization), optionally filtered by domain. This is how a consumer package discovers what can be checked against its observables — no hand-listing.

Pass domain when mixing families in one data set: variable names are matched literally, and physics overloads symbols across families (the critical exponent β vs the inverse temperature β).

source
AbstractQAtlas.at_size — Method
at_size(q::AbstractQuantity, L) -> VariableKey
at_size(::Type{<:AbstractQuantity}, L) -> VariableKey

The bag key for q measured on a system of size L, so one bag can hold a whole finite-size sweep:

b = bag(at_size(Typical(MassGap()), 16) => 1e-2,
        at_size(Typical(MassGap()), 32) => 1e-4)

The twin of entanglement_entropy for the size axis: it writes the key directly, because the size belongs to the measurement and not to the quantity. A quantity that already needs a support of its own is refused rather than silently losing it.

source
AbstractQAtlas.backend_package — Method
backend_package(route::DerivativeRoute) -> Union{Symbol,Nothing}

The package whose extension supplies route's nth_derivative, or nothing for a route that needs none.

A route declaring one and finding no method gets MissingRouteBackend rather than a bare "no method", which is the difference between "install this" and "this route does not exist". Declared here and not in the extension: the point is to answer when the extension is ABSENT.

source
AbstractQAtlas.bag — Method
bag(cs::ConventionSet, pairs...) -> Bag

A bag whose values are converted, on entry, out of the conventions cs declares and into the ones this package's relations are written in.

This is the only door: a relation never sees the project's convention, so there is no call that silently skips the conversion. A quantity cs says nothing about, or one with no convention axis, is stored unchanged.

cs = conventions(AbstractEntanglementMeasure => Bits)
bag(cs, VonNeumannEntropy() => 3.0)     # stored as 3.0 * log(2), in nats
source
AbstractQAtlas.bag — Method
bag(pairs...) -> Bag

Build a type-keyed Bag: bag(SpectralFunction => a, RetardedGreensFunction => g). A Type key (or a quantity/field INSTANCE, e.g. Susceptibility(:z, :z)) becomes VariableKey(Type) (global support); a VariableKey key is used as-is. The bag is matched by TYPE, never by a string — two distinct quantities can never share a key. A nothing value is rejected: a bag holds concrete measured values, and an absent variable must be omitted, not stored as nothing (which would be indistinguishable from absent).

b = bag(KeldyshGreensFunction => gk, GreaterGreensFunction => gg, LesserGreensFunction => gl)
residual(KeldyshComponent(), b)      # G^K − (G^> + G^<)
source
AbstractQAtlas.bound_direction — Method
bound_direction(rel::AbstractRelation) -> Union{Nothing,Symbol}

Which way the bound constrains its subject:

  • :upper — declared bounded ≤ bounding (the subject is bounded from above),
  • :lower — declared bounded ≥ bounding,
  • :slack — declared in the bare slack form, where no direction was stated,
  • nothing — not a bound at all (an equality relation).

Declared, so a consumer's own direction field can be checked against the statement instead of maintained beside it.

source
AbstractQAtlas.bounded_slot — Method
bounded_slot(rel::AbstractRelation) -> Union{Nothing,Symbol}

The variable a bound constrains — its subject, the quantity being bounded. nothing for an equality, and for a bound whose bounded side is an expression rather than a single declared variable (S_ABC + S_B ≤ S_AB + S_BC bounds no one variable). Filled in by @bound from the left of the declared comparison. See bounding_slot, bound_direction.

source
AbstractQAtlas.bounding_constant — Method
bounding_constant(rel::AbstractRelation) -> Union{Nothing,Number}

The literal on the bounding side, for a bound stated against a constant (C ≥ 0 → 0; kFℓ ≥ 1 → 1). nothing when the bounding side is a variable or an expression.

source
AbstractQAtlas.bounding_slot — Method
bounding_slot(rel::AbstractRelation) -> Union{Nothing,Symbol}

The variable that DOES the bounding — the right of the declared comparison, when that side is a single declared variable. nothing when the bound is a constant (see bounding_constant) or an expression, and for every equality.

Together with bounded_slot this is what makes "what bounds this?" a machine question: the roles are declared, not inferred from the sign of a slack expression.

source
AbstractQAtlas.bounds_on — Method
bounds_on(q) -> Vector{AbstractInequality}

Every registered bound whose subject is the quantity q — the answer to "what bounds this?". Matches on the identity type of bounded_slot, so a concrete component is found by a bound declared on its family. Accepts a quantity instance or its type.

The complement of relations_constraining, which is role-blind: a bound's bounding quantity (LiebRobinsonVelocity) is constrained by it too, but is not the thing being bounded.

bounds_on(SpecificHeat)   # [SpecificHeatPositivity()]
source
AbstractQAtlas.canonical_component — Method
canonical_component(χ) -> typeof(χ)

The canonical representative of χ's intrinsic-permutation-symmetry class: the same response tensor with its field indices sorted (the response index — the first — is fixed). Two components are forced equal by the symmetry iff they share a canonical_component (permutation_equivalent):

canonical_component(Susceptibility(:x, :z, :y)) === Susceptibility(:x, :y, :z)
source
AbstractQAtlas.canonical_convention — Method
canonical_convention(Q::Type) -> Union{Convention,Nothing}

The convention this package's relations are written in for Q, or nothing when Q has no convention axis at all.

nothing is the default and is deliberately not filled in by supertype: the Tsallis entropy is (1 - Tr ρ^q)/(q - 1), which carries no logarithm, so declaring a base for every AbstractEntanglementMeasure would give it an axis it does not have. Same opt-in reasoning as obeys_entropy_inequalities.

source
AbstractQAtlas.card_jsonl — Method
card_jsonl([io=stdout], cards) -> nothing

Stream cards (any iterable of Cards) as JSONL — one schema-v2 object per line — for the registry sink / a documenter. NaN/Inf-safe (a non-finite subject/error_bar is null, the card's status already :divergent). Matches the ecosystem *_jsonl idiom (graph_jsonl) so one consumer renders models ⊕ quantities ⊕ derivations ⊕ cards.

source
AbstractQAtlas.causally_ordered — Method
causally_ordered(t̄...) -> Bool

Whether the time arguments lie in the support of a retarded response kernel: 0 ≤ t̄₁ ≤ t̄₂ ≤ ⋯ ≤ t̄ₙ, with t̄ᵢ = t − tᵢ the delay from each field application to the measurement.

The kernel ResponseKernel vanishes outside this region — the fields must act before the measurement and, in the ordered form, in sequence. Two consequences a consumer should not have to rediscover: the kernel is not permutation symmetric (the ordering breaks it), while its Fourier transform is symmetrised into χ̄⁽ⁿ⁾; and integrating over the ordered region is what produces the nested denominators of the frequency-domain response.

source
AbstractQAtlas.check — Method
check(rel::AbstractRelation, b::Bag; atol=0, extras...) -> Bool

Type-keyed check: residual(rel, b; extras...) within atol (equalities |·| ≤ atol, inequalities · ≥ −atol).

source
AbstractQAtlas.check — Method
check(rel::AbstractRelation; atol=0, vars...) -> Bool

abs(residual(rel; vars...)) ≤ atol. With the default atol = 0 this is an exact test — appropriate for Rational inputs; pass an explicit atol for floating-point / error-bar data.

source
AbstractQAtlas.check_all — Method
check_all(b::Bag; atol=0, domain=nothing, extras...) -> Bool

true iff every applicable type-keyed relation passes on the bag b — and at least one applies (an empty match is false).

source
AbstractQAtlas.check_all — Method
check_all(data::NamedTuple; atol=0, domain=nothing) -> Bool

true iff every applicable relation passes on data, and at least one relation applies: an empty match is false, never a silent green.

source
AbstractQAtlas.collapse_coordinates — Method
collapse_coordinates(quantity, T, L, Tc; exponents::NamedTuple) -> (x, scale)

The finite-size-scaling data-collapse transform for quantity, with both exponent combinations derived from the correspondence. For an observable obeying O(T, L) = L^{−ρ} f((T − T_c)·L^{1/ν}) (with ρ = −fss_size_exponent), plotting O·scale against x collapses all sizes onto the universal curve f:

  • x = (T − Tc)·L^{1/ν},
  • scale = L^{−fss_size_exponent} = L^{ρ}.

At T = Tc, x = 0 for every L (the collapse pivot). The residual spread of the collapsed data across sizes is the quantitative universality test — and the exponents used are exactly the atlas's, never hand-typed.

source
AbstractQAtlas.conditional_mutual_information — Method
conditional_mutual_information(b::Bag, A::Region, B::Region, C::Region) -> Number

The conditional mutual information I(A:C|B) = S(A∪B) + S(B∪C) − S(A∪B∪C) − S(B), computed from the region entropies in b for pairwise-disjoint A, B, C (the StrongSubadditivity / MarkovEntropyDefinition slack; ≥ 0 by SSA). Errors if the regions are not a tripartition or if any of the four entropies is absent.

source
AbstractQAtlas.conjugate_field — Method
conjugate_field(quantity) -> AbstractField
conjugate_field(::Type{<:AbstractQuantity}) -> AbstractField

The field a quantity is thermodynamically conjugate to: the field whose derivative of the free energy is (up to sign) that quantity. The magnetization is conjugate to the MagneticField (M = −∂F/∂h); the entropy to the Temperature. Undefined for quantities that are not first field-derivatives of the free energy.

source
AbstractQAtlas.consistency_report — Method
consistency_report(b::Bag; atol = 0, rtol = 1e-8, domain = nothing, exclude = (),
                   extras...) -> Vector{ConsistencyRow}

The type-keyed cross-check: the same leave-one-out sweep as the NamedTuple method, over typed_derivation_steps instead of the symbol graph.

Sound where the other is not. A VariableKey is a quantity type and a support, so two relations meet at a node only when they are talking about the same thing, and the collision the name-keyed report cannot see does not arise: β is the order-parameter exponent in Rushbrooke and the inverse temperature in DetailedBalance, one symbol and two quantities, while InverseTemperature is a type of its own. The typed known-set is aliasing-aware too, so a bag never holds InverseTemperature and Temperature at once.

Narrower for the same reason. Only the 111 of 160 relations carrying at least one typed slot appear at all, and a relation is present only through those slots, so a route through an untyped variable is invisible here and visible to the name-keyed method. Run both: this one for what it can see soundly, that one where a caller can vouch that a shared name is a shared quantity.

Neither knows applicability; see the NamedTuple method.

source
AbstractQAtlas.consistency_report — Method
consistency_report(data::NamedTuple; atol = 0, rtol = 1e-8, domain = nothing,
                   exclude = ()) -> Vector{ConsistencyRow}

Hold out each variable of data in turn and solve for it by every relation that reaches it from the rest, then report whether those answers agree with each other and with the value held out.

The registry is a set of exact identities, so a variable two of them both reach must come back the same both ways and equal to what was removed. Where it does not, one of the identities is wrong, and the row names every route so the odd one out is visible. Nothing is hand-picked: the routes come from derivation_steps, the enumeration derive walks, and a step non-affine in its target or otherwise refused drops out rather than being counted, so a route appears only if it computes.

One step deep, from the remaining knowns. Chaining would compare a derived number against another derived number, where a disagreement no longer names the relation that caused it.

What is checked is the ALGEBRA, not the semantics. The registry is one namespace and the report assumes a shared symbol is a shared quantity; where it is not, the routes disagree and the row names them, but the fault is in the question rather than in the identities. Two ways that happens, both measured:

  • A name means different things in different relations, which the type-keyed method below does not have. S is a ring's block entropy in CFTEntanglementPBC and an open chain's end block in CFTEntanglementOBC, so one number cannot satisfy both and an unscoped report says they disagree. It is right to: the caller has described a state that does not exist. domain is the remedy.
  • A relation does not apply at the point the data describes. Classical 2D Ising exponents agree over :scaling until z is added, at which point QuantumHyperscaling joins the routes to α. It was excluded before only for want of an input, never for want of applicability, and nothing here knows the difference.

So a disagreement is a place to look, not a verdict. domain and exclude are how a caller states the scope the data belongs to: domain keeps one family, exclude drops named relations, and either is preferable to reading a row whose routes describe different physics.

A row agrees when every family does, and a family does when one of its members lands within max(atol, rtol * scale) of the held-out value, scale being the larger of that value's magnitude and the route's own. Judged against the held-out value rather than between routes, because a family's members are alternatives and are expected to differ; and per route rather than per row, so one large candidate cannot widen the tolerance for the others. spread is reported beside it as the range the routes actually covered, and is not what agree is computed from.

ising2d = (; α=0//1, β=1//8, γ=7//4, δ=15//1, ν=1//1, η=1//4, d=2//1)
all(r -> r.agree, consistency_report(ising2d; domain=:scaling))
source
AbstractQAtlas.consistent — Method
consistent(data::NamedTuple; atol = 0, rtol = 1e-8, domain = nothing,
           exclude = ()) -> Bool

Whether every row of consistency_report agrees.

An empty report is refused rather than returned as true. Nothing to check is not a pass, and the ways to reach it are quiet ones: a misspelled domain, an exclude that removed the last route, or an input outside a relation's domain, where the solve throws and the step is dropped. Read consistency_report directly when a vacuous answer is what you want.

source
AbstractQAtlas.conventions — Method
conventions(pairs...) -> ConventionSet

Declare what this project's values are written in:

conventions(VonNeumannEntropy => Bits)              # this one quantity
conventions(AbstractEntanglementMeasure => Bits)    # every entropy that has a base

A key may be a concrete type, an INSTANCE (reduced to its type), or an abstract supertype. The supertype form is the usable one when a bag holds several entropies: it reaches every subtype that declares a canonical_convention and skips the ones that have no such axis, so naming AbstractEntanglementMeasure does not claim a base for the Tsallis entropy. Naming a concrete type that has no axis is an error, since that is a claim about that type.

Lookup is most-specific-first, so a concrete entry overrides a supertype entry.

source
AbstractQAtlas.convert_convention — Method
convert_convention(to::Convention, from::Convention, Q::Type, v)

v, written in from, expressed in to.

Equal conventions return v untouched, so an exact-arithmetic value stays exact. Anything else refuses unless a method says the pair converts: two conventions that are not a rescaling have no conversion, and passing v through there would hand a relation a number from the wrong statistic.

source
AbstractQAtlas.correlation_decay — Method
correlation_decay(::Type{<:AbstractTwoPointCorrelation}) -> Symbol

The anomalous-dimension exponent: at T_c the two-point function decays as G(r) ∼ r^{−(d−2+η)}. Returns the exponent symbol :η (the full decay power needs the spatial dimension d, supplied at use).

source
AbstractQAtlas.critical_exponents — Method
critical_exponents(s::InfiniteRandomness) -> NamedTuple

The exponent set (β, ν, ν_typ, ψ, x_m, φ) of an infinite-randomness fixed point, DERIVED from s: the three independent inputs plus d, nothing hand-entered:

  • β = ν·x_m (order parameter, m ∼ |δ|^{+β})
  • ν_typ = ν·(1 − ψ) (typical correlation length, always < ν for ψ > 0)
  • φ = (d − x_m)/ψ (cluster-moment growth, μ ∼ |ln Ω|^φ)

ψ and x_m are inputs that are themselves exponents, so they appear in the set; d does not, matching critical_exponents(::ScalingDimensions). Use exponents_consistent(s) to sweep the registry without having to restate it.

The result satisfies OrderParameterDimension, TypicalCorrelationLength and ActivatedMomentGrowth with residual exactly zero for any s, which is a statement about the derivation and not a validation of it: those three ARE the formulas below. What keeps an s physical is the constructor, which is why it checks 0 < x_m < d and ψ ≤ 1 rather than leaving them to a sweep that cannot see them.

source
AbstractQAtlas.critical_exponents — Method
critical_exponents(s::ScalingDimensions) -> NamedTuple

The full equilibrium exponent set (α, β, γ, δ, ν, η) DERIVED from the RG eigenvalues in s — nothing hand-entered:

  • ν = 1/y_t (correlation length, ξ ∼ |t|^{-ν})
  • α = 2 − d/y_t (specific heat, C ∼ |t|^{-α})
  • β = (d − y_h)/y_t (order parameter, M ∼ |t|^{+β})
  • γ = (2y_h − d)/y_t (susceptibility, χ ∼ |t|^{-γ})
  • δ = y_h/(d − y_h) (critical isotherm, M ∼ h^{1/δ})
  • η = d + 2 − 2y_h (anomalous dimension, G(r) ∼ r^{-(d-2+η)})

With Rational eigenvalues the result is exact, and it satisfies Rushbrooke, Widom, Fisher and Josephson with residual ≡ 0 for any s (exponents_consistent is true by construction).

source
AbstractQAtlas.critical_isotherm — Method
critical_isotherm(::Type{SpontaneousMagnetization}) -> Symbol

The critical-isotherm exponent: exactly at T_c, the order parameter responds to its conjugate field as M ∼ h^{1/δ}. Returns the exponent symbol :δ. A distinct functional form from the reduced-temperature laws, hence its own accessor.

source
AbstractQAtlas.critical_scaling — Method
critical_scaling(quantity) -> Union{CriticalScaling,Nothing}
critical_scaling(::Type{<:AbstractQuantity}) -> Union{CriticalScaling,Nothing}

The reduced-temperature critical correspondence of quantity: which exponent governs its |t|-singularity, and with what sign — or nothing if the quantity has no reduced-temperature critical law (e.g. the partition function, or the field-driven δ / distance-driven η laws handled by critical_isotherm / correlation_decay).

critical_scaling(Susceptibility)          # CriticalScaling(:γ, -1) ⇒ χ ∼ |t|^{-γ}
critical_scaling(SpontaneousMagnetization) # CriticalScaling(:β, +1) ⇒ M ∼ |t|^{+β}
source
AbstractQAtlas.declared_convention — Method
declared_convention(cs::ConventionSet, Q::Type) -> Union{Convention,Nothing}

What cs says Q's values are written in, taking the most specific entry that Q is a subtype of; nothing when nothing in cs covers Q.

Matched by <:, not by walking supertype, because a parametric quantity's supertype chain SKIPS its own family: supertype(Energy{:per_site}) is AbstractThermalPotential, so a walk never reaches the Energy a project keyed its declaration on, and the value goes into the bag unconverted.

Covers with no unique most specific member are refused rather than resolved by Dict order. Decided after collecting every cover, not folded pairwise: two unrelated covers can be reconciled by a third that refines both, and a fold that errors on meeting the first incomparable pair reports a false ambiguity for four of the six orders that Dict iteration can hand it.

source
AbstractQAtlas.degeneracy_factor — Method
degeneracy_factor(process) -> Int

The number of distinct arrangements of the process's frequency arguments — the multinomial n! / ∏ mᵢ! over the multiplicities.

This is the bookkeeping between the response kernel and what a monochromatic drive produces: the frequency integral defining the order-n response sums over every arrangement of the applied frequencies that meets the emission condition, so a process whose arguments are all distinct collects more terms than a fully degenerate one. Second-harmonic generation has degeneracy 1 while sum-frequency generation has 2, which is why the two carry different prefactors in every textbook table and why the difference is worth stating once rather than per consumer.

degeneracy_factor(HarmonicGeneration(2))       # 1  — (ω, ω)
degeneracy_factor(SumFrequencyGeneration())    # 2  — (ω₁, ω₂)
degeneracy_factor(OpticalRectification())      # 2  — (ω, −ω)
degeneracy_factor(KerrEffect())                # 3  — (ω, ω, −ω)
source
AbstractQAtlas.derivable — Method
derivable(bag::Bag; extras...) -> Set{VariableKey}

Type-keyed derivable: the quantity/field TYPES computable from the bag bag (plus extras for supplied slots), through chains of the type-keyed solve. Matched by TYPE, so no formula-symbol collision — a ThermalEntropy in the bag can never pose as a Thermopower.

source
AbstractQAtlas.derivable — Method
derivable(; knowns...) -> Set{Symbol}

The set of quantity variables COMPUTABLE from the supplied known values — the honest reachability of the derivation graph. Each element is a variable that can be obtained, directly or through a chain of solves, from the knowns; the knowns themselves are included.

derivable(; Z = 2.0, β = 1.0)          # ⊇ Set([:Z, :β, :f])  — F = −β⁻¹ln Z reachable

Honest, not structural: a symbol appears only if some relation is actually affine-solvable for it along the way (non-affine steps are skipped, exactly as derive would skip them).

source
AbstractQAtlas.derivation_graph — Method
derivation_graph() -> KnowledgeGraph{Symbol}

The derivation graph as a KnowledgeGraph instance, for a network VIEW and structural inspection: one DIRECTED edge input →[relation] output per (step, input), the simple-graph projection of the derivation_steps hyperedges.

Structural, not computational

Each @relation's output needs ALL of its inputs, but the projection fans each hyperedge out to one edge per input — so graph_reachable on this graph OVER-APPROXIMATES computability (a single known input already "reaches" the output, and non-affine outputs are edges too). For the HONEST "can I actually compute it" use derivable / derive, which require every input and call the real solve. Use this graph for rendering and structural connectivity only.

Edge kind is the relation's name.

source
AbstractQAtlas.derivation_routes — Method
derivation_routes(target::Symbol; knowns...) -> Vector{DerivationRouteRow}
derivation_routes(Q::Type, bag::Bag; extras...) -> Vector{DerivationRouteRow}

EVERY relation that can produce target from the knowns, each with the value it gives, where derive runs whichever one the registry reaches first.

The target is held out of the data the routes are run against, as a given and as a derivable node both, so a route cannot read a value that was itself derived from the target and confirm itself. A route needing something only reachable through the target therefore does not appear, which is the correct answer for it.

Supplying the target is the useful case: the rows are then what the rest of the data predicts for a number already measured.

derivation_routes(:c; dS_dlogℓ = 0.1667, ncuts = 2)
source
AbstractQAtlas.derivation_steps — Method
derivation_steps() -> Vector{DerivationStep}

Every candidate directed edge of the derivation graph: for each registered relation and each of its variables, the edge that would compute that variable from the others. These are STRUCTURAL candidates — a relation appears as an edge for a variable it is not affine in too; derive is the honest evaluator that discovers, by actually calling solve, which edges fire. Built once and cached.

source
AbstractQAtlas.derivative_edge — Method
derivative_edge(quantity) -> Union{DerivativeEdge,Nothing}
derivative_edge(::Type{<:AbstractQuantity}) -> Union{DerivativeEdge,Nothing}

The genealogy edge of quantity: the (parent, field) it is a derivative of, or nothing for a root potential (the free energy) or a quantity outside the thermodynamic-derivative tree.

derivative_edge(Susceptibility(:z, :z))  # DerivativeEdge(Magnetization{:z}, MagneticField)  (χ_zz = ∂M_z/∂h)
derivative_edge(Magnetization(:z))       # DerivativeEdge(FreeEnergy, MagneticField)          (M_z = −∂F/∂h)
derivative_edge(FreeEnergy())            # nothing — the root
source
AbstractQAtlas.derivative_order — Method
derivative_order(quantity, field::AbstractField) -> Int

How many times quantity is differentiated with respect to field on the way up to the root — the order of quantity as a field-derivative of its root potential.

derivative_order(Susceptibility(:z,:z), MagneticField())  # 2  (χ = ∂²F/∂h²)
derivative_order(Magnetization(:z),   MagneticField())  # 1  (M = ∂F/∂h)
derivative_order(SpecificHeat(),     MagneticField())  # 0  (no field derivatives)
source
AbstractQAtlas.derivative_report — Method
derivative_report(quantity, potential, x, routes) -> Vector{DerivativeRouteRow}

quantity evaluated along each of routes, so the routes can be compared rather than trusted one at a time.

Two routes agreeing is evidence a single route cannot give: a step on the roundoff side and a step on the truncation side both return a number, and only the spread between them says which. A route that throws is reported as NaN rather than aborting the sweep, since the usual reason is a missing backend and the other rows are still the answer.

source
AbstractQAtlas.derive — Method
derive(target::Symbol; debug=false, knowns...) -> value | DerivationTrace

Lazily derive target from the supplied known values by finding ONE route through the derivation graph and running it. Returns the computed value; with debug=true returns a DerivationTrace instead — the value plus the exact route (which relation produced each intermediate, from which inputs) and whether it was indirect.

derive(:f; Z = 2.0, β = 1.0)                 # -0.6931…   (F = −β⁻¹ ln Z)
derive(:f; Z = 2.0, β = 1.0, debug = true)   # DerivationTrace: 1. FreeEnergyFromZ: {Z, β} → :f

The route is discovered by forward chaining with the REAL solve, so a step whose relation is non-affine in its output is skipped, not faked. Throws if target is not reachable from the knowns.

source
AbstractQAtlas.derive — Method
derive(Q::Type, bag::Bag; extras...) -> value

Type-keyed derive: the value of quantity/field TYPE Q computed from bag (+ extras), or an error if unreachable. Collision-proof — a relation fires only when the ACTUAL quantity types it needs are present:

derive(PeltierCoefficient, bag(Thermopower => s, Temperature => t))     # t·s (Kelvin)
derive(PeltierCoefficient, bag(ThermalEntropy => s, Temperature => t))  # ERROR: unreachable
#   — KelvinRelation needs a Thermopower, not the entropy; the silent
#   entropy-as-Seebeck derivation the symbol-keyed graph allowed is impossible here.
source
AbstractQAtlas.derive_crosschecked — Method
derive_crosschecked(target::Symbol; atol=0, rtol=1e-8, min_routes=1, knowns...)
derive_crosschecked(Q::Type, bag::Bag; atol=0, rtol=1e-8, min_routes=1, extras...)

derive, refusing when the data reaches the target two ways that differ by more than atol + rtol * max|value|, which is isapprox's rule.

atol defaults to 0, so small values are judged relatively. A quantity whose routes are genuinely noise-dominated near zero needs an atol saying so, rather than a floor built into the comparison.

One route returning a number is not evidence the data is consistent about it: several relations can produce one target, and which one derive ran was chosen by registry order.

Supplying the target is the case to reach for. derive hands it straight back without looking at anything else, and this compares it against every route the rest of the data affords, which is the question a measured number raises.

min_routes defaults to 1: data affording no independent route is refused, because returning a number from it is what this verb's name would otherwise be claiming it had checked. min_routes = 0 is the opt-out, and 2 or more is how to demand a genuine cross-check rather than a single unopposed route.

source
AbstractQAtlas.differentiation_chain — Method
differentiation_chain(quantity) -> Vector{Any}

The genealogy path from quantity up to its root potential, as the list of quantity types [typeof(quantity), parent, …, FreeEnergy]. A root (or non-genealogy) quantity returns the singleton [typeof(quantity)].

differentiation_chain(Susceptibility(:z, :z))
# [Susceptibility{:z,:z}, Magnetization{:z}, FreeEnergy]  — χ ⟵ M ⟵ F

The chain terminates because the genealogy is a finite tree rooted at a thermodynamic potential (the free energy, or the grand potential for the grand-canonical branch); a cycle in the declared edges would loop forever and is guarded against with an explicit depth cap.

source
AbstractQAtlas.disjoint — Method
disjoint(a::Region, b::Region) -> Bool

Whether two regions share no site (a ∩ b == ∅) — the precondition of the bipartite entropy inequalities (subadditivity, Araki–Lieb).

source
AbstractQAtlas.domain — Function
domain(rel::AbstractRelation) -> Symbol

The relation's family tag (:scaling, :thermodynamic, :fundamental, :topology, …) — for filtering in the registry API, and for disambiguating same-named variables across families (the exponent β vs the inverse temperature β).

source
AbstractQAtlas.emitted_frequency — Method
emitted_frequency(process, ω...) -> Number

The frequency at which the induced response appears: the SUM of process_frequencies, because the order-n response at total frequency ω collects the arguments obeying ω₁ + ⋯ + ωₙ = ω.

This is the frequency a measurement indexes by, and it is NOT the driving frequency: optical rectification emits at 0 while being driven at ω, and cross-phase modulation emits at the probe frequency while being driven by a pump as well.

emitted_frequency(HarmonicGeneration(2), 0.5)      # 1.0
emitted_frequency(OpticalRectification(), 0.5)     # 0.0
emitted_frequency(FourWaveMixing(), 1, 3)          # -1    ( = 2·1 − 3 )
source
AbstractQAtlas.ensemble_weight — Method
ensemble_weight(dist, E; N=0) -> Real

The unnormalized statistical weight the distribution assigns to a state of energy E (and particle number N, grand-canonical only):

  • MicroCanonical: indicator of the energy window (0 or 1),
  • Canonical: e^{−βE},
  • GrandCanonical: e^{−β(E − μN)}.

Normalization is the caller's partition function — summing canonical weights over a spectrum IS Z(β) (cf. FreeEnergyFromZ).

source
AbstractQAtlas.entanglement_entropy — Method
entanglement_entropy(region::Region) -> VariableKey
entanglement_entropy(sites...) -> VariableKey

The bag key for the von Neumann entanglement entropy S(region) — VariableKey(VonNeumannEntropy, RegionSupport(region)). Build a region-entropy bag and auto-discover its inequalities:

b = bag(entanglement_entropy(1) => 0.7, entanglement_entropy(2) => 0.7,
        entanglement_entropy(1, 2) => 1.0)          # S(A), S(B), S(A∪B)
region_report(b)                                    # subadditivity, Araki–Lieb

(Spelled out rather than entropy to avoid the very common StatsBase/Distributions entropy export collision.)

source
AbstractQAtlas.fetch — Method
fetch(model, quantity, bc; kwargs...)

Return the stored / computed value of quantity for model under boundary condition bc. The canonical signature takes a concrete model struct + concrete quantity struct + BC.

AbstractQAtlas owns the generic function only; each implementing package registers one method per supported (model, quantity, bc) triple. This top-level fallback throws an informative error for un-implemented triples.

source
AbstractQAtlas.fetch_cached — Method
fetch_cached(model, quantity, bc; kwargs...)

Memoizing wrapper over fetch: the first call for a given (model, quantity, bc) (plus kwargs) computes the value via fetch and stores it; later identical calls return the stored value without recomputing.

Safe because a reference value is a pure function of its key (the fetch contract), and the oracle behind it is expensive. The key compares the arguments by value, which is exactly right for the immutable model / quantity / BC structs (a mutable model caches per object identity). A fetch method with side effects must not be cached. Errors are not cached — a failed fetch propagates and leaves the cache untouched. Clear with clear_fetch_cache!.

Thread-safe: the value is computed outside the lock so distinct keys compute concurrently; a race on the same key keeps the first stored value.

source
AbstractQAtlas.field_permutation — Method
field_permutation(χ) -> NTuple{n,Int}

The permutation π of χ's n = response_order(χ) field slots that brings its field indices to canonical_component (sorted) order — Tuple(sortperm(collect(indices(χ)[2:end]))).

Because the intrinsic permutation symmetry pairs each field index with its frequency, π is also the permutation the symmetry applies to the frequency arguments:

χ_{α; β₁…βₙ}(ω₁, …, ωₙ) == canonical_component(χ)(ω_{π₁}, …, ω_{πₙ})

so it is exactly what a consumer needs to check one frequency-resolved component against another (or against the canonical representative). For a static Susceptibility (frequency_arguments == 0) there is nothing to permute and permutation-equivalent components are equal outright; π still reports the field-index sort.

field_permutation(DynamicalSusceptibility(:x, :z, :y))  # (2, 1) — swap the two frequencies
field_permutation(DynamicalSusceptibility(:x, :y, :z))  # (1, 2) — already canonical
source
AbstractQAtlas.finite_size_entropy_report — Method
finite_size_entropy_report(b::Bag, bc::BoundaryCondition; c₁, kwargs...)
    -> Vector{RegionFiniteSizeRow}

Check every region entropy in b against the finite-size form its geometry admits, under the boundary condition bc.

ℓ is the region's own length, L is bc.N, and the cut count comes from entanglement_cuts, so the three arguments most easily got wrong are read off the bag rather than passed. A region is matched only where its cut count is the one its equation was derived for: two on a ring or an infinite chain, one at an open end. Anything else is skipped, as a non-disjoint pair is skipped by region_report, which is what makes a mixed bag usable.

On an infinite chain two regions also give the slope relations their derivative exactly, since S is affine in ln ℓ there; a finite chain's abscissa is the chord, so the closed forms cover it instead. HalvedChainEntropyDifference is not reachable from one bag at all, needing entropies from two chain lengths.

The central charge is read from the bag, as CentralCharge and, when a random critical chain is being checked, EffectiveCentralCharge; the latter also needs f, the scaling function, and its own constant c₁′. The non-universal constants are arguments because they are not quantities: c₁, and ln_g for the boundary entropy an open chain carries. ln_g and c₁ enter CFTEntanglementOBC only as a sum, so no number of block sizes separates them; see that relation.

A single region is usually not evidence that c or c̃ is right. The four logarithmic forms each carry one free constant, so with one row that constant can be chosen after the fact to zero the residual for ANY central charge, and what passes is the mutual consistency of the triple rather than the charge. Two or more block sizes are what make the charge falsifiable there. The exceptions are the forms with no constant to spend, OffCriticalEntanglementSaturation and the slope relations, where one row does constrain the charge.

A region whose sites are not integers is skipped, having no adjacency to count cuts with. A region of integer sites lying off the chain bc declares is not skipped but refused, since that is the wrong bc for this bag and every later row would be wrong the same way.

b = bag(entanglement_entropy(Region(1:32...)) => 1.06, CentralCharge => 0.5)
finite_size_entropy_report(b, PBC(64); c₁=0.4785)
source
AbstractQAtlas.finite_size_scaling_report — Method
finite_size_scaling_report(b::Bag; atol = 0, rtol = 0, outputlevel = 0)
    -> Vector{FiniteSizeRow}

Read every finite-size sweep in b against the scaling law the exponents in b claim for it.

A sweep is the entries of one quantity keyed by at_size. Consecutive sizes give a secant, and that is the derivative the supplied-derivative relations take: d lnΩ / d lnL against ConventionalFiniteSizeEnergy when a DynamicalExponent is in the bag, and d ln[-ln O] / d lnL against ActivatedFiniteSizeScaling when an ActivatedExponent is. Both when both are, because that is the comparison a size sweep is usually run to settle: the same numbers cannot obey a power of L and a power of ln L, and the report says which they do. The secant is exact for any amplitude, which is an additive constant in log space and cancels in a difference.

pass at the default atol = 0 asks for an exact hit and measured data will not give one; the number to read there is residual. rtol is the practical knob, taken against the exponent being checked, so rtol = 0.02 accepts a secant within two percent of ψ or z.

The activated law is a statement about the TYPICAL value, so it is read only off Typical-keyed data. A DisorderAveraged or unreduced sweep gets no activated row: at an infinite-randomness fixed point the average is set by the rare regions ([2], §2.2) and carries a power of L rather than of ln L, so a secant off it would return a number that is not ψ. Its conventional row is still reported, and so are every other sweep's rows, which is why this is a skip and not a refusal: a bag holding typical and average data side by side is the normal shape of an infinite-randomness study, and one sweep must not blank the report. Pass outputlevel = 1 to be told what was skipped and why.

b = bag(at_size(Typical(MassGap()), 16) => exp(-1.0 * sqrt(16)),
        at_size(Typical(MassGap()), 64) => exp(-1.0 * sqrt(64)),
        ActivatedExponent => 0.5)
finite_size_scaling_report(b; rtol=1e-3)
source
AbstractQAtlas.fourier_conjugate — Method
fourier_conjugate(rep::AbstractRepresentation) -> AbstractRepresentation

The Fourier-conjugate representation: RealSpace ↔ MomentumSpace, TimeDomain ↔ FrequencyDomain. An involution (fourier_conjugate(fourier_conjugate(r)) == r).

source
AbstractQAtlas.fourier_conjugate_quantity — Method
fourier_conjugate_quantity(quantity) -> Type

The quantity obtained by Fourier-transforming quantity in every representation it carries — the real-space/time object of a momentum/frequency one and vice versa:

fourier_conjugate_quantity(StaticStructureFactor)   # SpinCorrelation   (spatial FT)
fourier_conjugate_quantity(DynamicalStructureFactor)# DynamicalCorrelation (space-time FT)

Its representation is the tuple of fourier_conjugates of the original's. Defined for the quantities with an unambiguous conjugate partner; others (representation-agnostic ones) have none.

source
AbstractQAtlas.fourier_pair — Method
fourier_pair(a, b) -> Bool

Whether quantities a and b are Fourier conjugates — the same physics in conjugate representations (their representations are elementwise fourier_conjugates, and one is the declared fourier_conjugate_quantity of the other).

fourier_pair(StaticStructureFactor(), SpinCorrelation(:z, :z))       # true (S(q) ↔ ⟨SS⟩(r))
fourier_pair(DynamicalStructureFactor(), DynamicalCorrelation(:x, :x)) # true (space-time FT)
source
AbstractQAtlas.frequency_arguments — Method
frequency_arguments(quantity) -> Int
frequency_arguments(::Type{<:AbstractQuantity}) -> Int

The number of independent frequency variables a quantity depends on — equivalently, by Fourier transform, the number of independent time variables: its multi-time dimensionality.

0 for a static / instantaneous quantity (a thermodynamic potential, or the static susceptibility χ⁽ⁿ⁾ = ∂ⁿM/∂hⁿ, which is the zero-frequency limit). 1 for a one-frequency dynamical quantity (G(ω), S(q, ω), the linear dynamical susceptibility χ(ω)). For an n-th order nonlinear dynamical response the field is applied at n distinct times, so the response is intrinsically multi-time: frequency_arguments == n, e.g. χ⁽²⁾(ω₁, ω₂) in 2D coherent spectroscopy (Wan & Armitage, [21]).

The static Susceptibility{I} and the dynamical DynamicalSusceptibility{I} of the same order are the zero-frequency limit and the full multi-time object respectively — see the Kubo formula in structure/spectral.jl.

source
AbstractQAtlas.fss_peak — Method
fss_peak(quantity, L; exponents::NamedTuple) -> Real

Finite-size scaling of quantity's critical peak with linear size L, Q(T_c, L) ∝ L^{fss_size_exponent} — the exponent derived from the critical_scaling correspondence, not passed by hand.

fss_peak(Susceptibility(:z, :z), 64; exponents=exps)   # ∝ 64^{γ/ν}
source
AbstractQAtlas.fss_size_exponent — Method
fss_size_exponent(quantity; exponents::NamedTuple) -> Real

The exponent of the linear size L in the finite-size scaling of quantity at criticality: Q(T_c, L) ∼ L^{fss_size_exponent}. Derived from the correspondence — a divergent quantity Q ∼ |t|^{−x} scales as L^{+x/ν}, a vanishing one Q ∼ |t|^{+x} as L^{−x/ν} — so the size exponent is always −(power·e)/ν:

fss_size_exponent(Susceptibility(:z, :z); exponents=exps)          # +γ/ν  (= 7/4)
fss_size_exponent(SpontaneousMagnetization(); exponents=exps)  # −β/ν  (= −1/8)
fss_size_exponent(CorrelationLength(); exponents=exps)         # +1    (ξ ∼ L)

Throws on a nonzero ψ in exponents, an infinite-randomness fixed point, unless the quantity names its reduction and that reduction still has a power of L. singular_form refuses alike; fss_peak and collapse_coordinates inherit it through here.

source
AbstractQAtlas.graph_jsonl — Method
graph_jsonl([io=stdout], g; nodelabel=string) -> nothing

Stream g as JSONL for a network/graph view. The first line is a summary {"nodes":N,"edges":M}; each following line is one edge object {"kind":…,"from":…,"to":…,"detail":…,"directed":…}, with node ids rendered by nodelabel (default string; quantity graphs pass nameof). No JSON dependency — matching QAtlas's graph export so one consumer renders models ⊕ quantities ⊕ derivations.

source
AbstractQAtlas.graph_neighbors — Method
graph_neighbors(g, node) -> Vector{TypedEdge}

Every edge of g incident on node (as from or to) — its neighborhood, direction ignored.

source
AbstractQAtlas.graph_reachable — Method
graph_reachable(g, start) -> Set

The set of nodes reachable from start following edge direction (directed edges from → to, symmetric edges both ways); includes start.

source
AbstractQAtlas.graph_shortest_path — Method
graph_shortest_path(g, a, b) -> Union{Vector{TypedEdge},Nothing}

A shortest path from node a to node b as the sequence of edges connecting them (respecting per-edge direction); nothing if b is unreachable from a, and the empty vector if a === b.

source
AbstractQAtlas.in_canonical_convention — Method
in_canonical_convention(cs::ConventionSet, Q::Type, v)

v rewritten in the convention this package's relations use for Q.

Returns v untouched when cs says nothing about Q, or when Q has no convention axis, which is what makes the layer opt-in: a project that declares nothing gets the behaviour it had before.

source
AbstractQAtlas.index_spaces — Method
index_spaces(quantity) -> Tuple{Vararg{AbstractIndex}}
index_spaces(::Type{<:AbstractQuantity}) -> Tuple

The internal index spaces of a quantity, one AbstractIndex per tensor slot (so length(index_spaces(q)) == tensor_rank(q)). Empty for a scalar; (SpinAxis(), SpinAxis()) for a susceptibility; (OrbitalIndex(), OrbitalIndex()) for a Green's function; etc.

source
AbstractQAtlas.indices — Method
indices(quantity) -> Tuple{Vararg{Symbol}}
indices(::Type{<:AbstractQuantity}) -> Tuple

The selected index values of a (component of a) tensor quantity, one symbol per slot — indices(Susceptibility(:x, :y)) == (:x, :y), indices(Magnetization(:z)) == (:z,), indices(Energy()) == (). This replaces the earlier fused component label (:xx): the honest form is one entry per index, so a quantity's component pairing is by the whole tuple. Length equals tensor_rank for a fully-specified component.

source
AbstractQAtlas.infinite_randomness — Method
infinite_randomness(; ν, ν_typ, x_m, d) -> InfiniteRandomness

Invert the exponent map: recover the defining ψ = 1 − ν_typ/ν from the two correlation lengths, at dimension d. Composing with critical_exponents closes the loop, the way scaling_dimensions does for the clean case.

s = infinite_randomness(; ν = 2//1, ν_typ = 1//1, x_m = 1//4, d = 1)
s.ψ            # 1//2
source
AbstractQAtlas.intrinsic_permutation_symmetric — Method
intrinsic_permutation_symmetric(quantity) -> Bool
intrinsic_permutation_symmetric(::Type{<:AbstractQuantity}) -> Bool

Whether the response tensor is invariant under permutation of its field indices (paired with their frequencies) — the intrinsic permutation symmetry of nonlinear response. true for the susceptibilities and the conductivity, false otherwise (the default).

source
AbstractQAtlas.keldysh_distribution — Method
keldysh_distribution(stat::ParticleStatistics, ω; β=nothing, T=nothing) -> Real

The equilibrium Keldysh distribution function h(ω) for exchange statistics stat:

  • Fermionic(): h(ω) = tanh(βω/2) — bounded in [-1, 1],
  • Bosonic(): h(ω) = coth(βω/2) — diverges as ω → 0 (the classical 2T/ω limit).

This is the function multiplying the spectral weight in the fluctuation–dissipation theorem G^K = h(ω)(G^R − G^A) (KeldyshFDT). It equals 1 ∓ 2n(ω) with n the Fermi–Dirac/Bose–Einstein occupation at μ = 0, and it is odd in ω and satisfies h(ω) → sign(ω) (fermions) / h(ω) → coth as T → 0.

keldysh_distribution(Fermionic(), 1.0; β=2.0)   # tanh(1.0) ≈ 0.7616
keldysh_distribution(Bosonic(), 1.0; T=0.5)     # coth(1.0) ≈ 1.3130
source
AbstractQAtlas.law_family — Method
law_family(rel::AbstractRelation) -> Symbol

The set of ALTERNATIVES a relation belongs to: laws for one observable at different fixed points, of which at most one holds at a given point.

Iglói and Monthus state the same menu of observables once per fixed-point type, [2] §A.2 conventional, §A.3 infinite-disorder, §A.4 Griffiths, so the field-driven χ(H) at Eq. (A.15) and the activated form at Eq. (A.25) are two readings of one quantity and never both true. Grouping them keeps consistency_report from calling that a contradiction: within a family one member matching is the family satisfied, while across families every route must agree, which is where a real inconsistency shows.

Defaults to the relation's own name, so a law with no alternative is alone in its family and is compared with everything as before.

source
AbstractQAtlas.margin — Function
margin(c::RelevanceCriterion; kwargs...) -> Real

The signed distance from marginality, in the convention > 0 irrelevant, 0 marginal, < 0 relevant. Same sign convention for every criterion, so relevance needs no per-criterion orientation.

source
AbstractQAtlas.maxwell_relation — Method
maxwell_relation(p::ThermodynamicPotential) -> MaxwellRelation

Derive the Maxwell relation from a potential's differential. Because ∂Φ/∂x = sₓ·cₓ and ∂Φ/∂y = s_y·c_y, the commuting mixed partials ∂²Φ/∂x∂y = ∂²Φ/∂y∂x give sₓ·∂cₓ/∂y = s_y·∂c_y/∂x, i.e. ∂cₓ/∂y = (sₓ·s_y)·∂c_y/∂x — the four Maxwell relations are the four instances of this ONE identity.

maxwell_relation(thermodynamic_potentials()[2])   # F: ∂S/∂V = ∂p/∂T
source
AbstractQAtlas.maxwell_residual — Method
maxwell_residual(m::MaxwellRelation; derivs) -> Number
maxwell_residual(p::ThermodynamicPotential; derivs) -> Number

The residual of the structure-derived Maxwell relation, ∂cₓ/∂y − coeff·∂c_y/∂x, with the two first-derivative values read from derivs (an AbstractDict keyed by the (conjugate, variable) tuples — the same keys m.lhs / m.rhs carry). Zero ⇔ the mixed partials of Φ commute. Preserves the input number type (Rational in ⇒ Rational out).

m = maxwell_relation(thermodynamic_potentials()[2])              # F: ∂S/∂V = ∂p/∂T
maxwell_residual(m; derivs = Dict((:S, :V) => 2 // 1, (:p, :T) => 2 // 1))   # 0//1
source
AbstractQAtlas.mutual_information — Method
mutual_information(b::Bag, A::Region, B::Region; quantity=VonNeumannEntropy) -> Number

The mutual information I(A:B) = S(A) + S(B) − S(A∪B), computed from the region entropies in the bag b (the Subadditivity slack; ≥ 0). Errors if any of the three entropies is absent.

quantity selects the entropy family — pass FermionicEntanglementEntropy to read the fermionic mutual information out of a bag built with fermionic_entanglement_entropy. The two are different numbers whenever a region is disconnected, and the difference does not cancel here, so the family is named rather than inferred.

mutual_information(bag(entanglement_entropy(1) => 0.7, entanglement_entropy(2) => 0.7,
                       entanglement_entropy(1, 2) => 1.0), Region(1), Region(2))   # 0.4
source
AbstractQAtlas.native_energy_granularity — Function
native_energy_granularity(model, bc) -> :total | :per_site

Trait declaring which granularity the given model returns natively for Energy at boundary condition bc. Every model that supports Energy must add a method per supported BC. A missing method is caught at the call site as a MethodError, which is intentional: it forces new models to declare the convention rather than silently inheriting an unrelated default.

source
AbstractQAtlas.nth_derivative — Method
nth_derivative(route::DerivativeRoute, f, x, n::Integer) -> value

The n-th derivative of the scalar function f at x, taken along route. n = 0 is f(x) on every route.

This is the one method a new route has to define.

source
AbstractQAtlas.obeys_entropy_inequalities — Method
obeys_entropy_inequalities(::Type) -> Bool

Whether a region-keyed quantity satisfies subadditivity, Araki–Lieb, strong subadditivity and weak monotonicity, and may therefore be swept by region_report.

Opt-in, defaulting to false, because "is an entanglement measure" is not the criterion: RenyiEntropy and TsallisEntropy live on the same regions and are not strongly subadditive away from the von Neumann limit, so a <: AbstractEntanglementMeasure test would auto-discover inequalities they are not required to satisfy and report correct data as broken. Declared true only for VonNeumannEntropy and FermionicEntanglementEntropy, each of which is the von Neumann entropy of an honest reduced state.

source
AbstractQAtlas.observed_order — Method
observed_order(route::DerivativeRoute, f, x, n::Integer) -> Float64

The convergence order the route actually shows on f at x, from the values at h, h/2 and h/4: log2(|D(h) - D(h/2)| / |D(h/2) - D(h/4)|).

The number to look at before trusting a step, rather than a tolerance guessed in advance. A central difference on a smooth potential returns close to 2. Anything else says the step or the potential is not what the route assumed, and the value does not identify which: h on the roundoff side and a non-smooth f both land off 2, and a kink gives exactly 1 rather than anything near 0.

Inf when only the second difference vanishes and NaN when both do, which is the quotient having stopped moving between halvings.

Meaningful only while the successive differences are above roundoff. A route that has already reached machine precision, which Richardson does on a smooth potential, is differencing noise and reports a number with no order in it.

Defined for any route reporting a step_size; AutoDiff reports nothing and is refused.

source
AbstractQAtlas.operation_scope — Method
operation_scope(via::Symbol) -> Symbol

Which layer owns the dynamical-graph operation via — the scope line of issue #14:

  • :definitional — a pointwise identity relating quantity values at a single (q, ω) (or a supplied scalar: an integral, a derivative). It lives HERE, in this stdlib-only definitional package, as an @relation (:dyson, :neg_im_over_pi; and every supplied-integral / supplied-derivative relation such as the sum rules and Kramers–Kronig).
  • :functional — a transform / sum / limit that must represent a quantity as a FUNCTION and act on it globally (a BZ average, a space-time Fourier transform, an ω → 0 limit, the Kubo response). Its evaluation belongs to the future ParaLA-based functional sibling; only its structural edge lives here (spectral_origin).

The line is exactly origin_relation's split: an operation is :definitional iff it has a pointwise @relation. Grey zone (issue #14, cf. #6): a sum rule is :definitional — the RELATION checks a supplied number here, while COMPUTING that number from the function is :functional (the sibling's job).

source
AbstractQAtlas.origin_relation — Method
origin_relation(via::Symbol) -> Union{AbstractRelation,Nothing}

The exact single-(q, ω)-point @relation that realizes the operation via, or nothing when the operation is a transform / sum / limit with no pointwise form (its evaluation belongs to the functional sibling, issue #14):

  • :dyson → Dyson,
  • :neg_im_over_pi → SpectralFromGreens,
  • :bz_average, :spacetime_fourier, :low_frequency_limit, :kubo → nothing (transform / sum / limit / commutator-response — no single-point form; evaluation is the functional sibling's job).

The Kubo edge (:kubo) is a transform of a multi-time correlation (Kubo, [19]), so it has no single-(q,ω)- point relation here.

source
AbstractQAtlas.parity_forbidden — Method
parity_forbidden(order, observable_parity) -> Bool
parity_forbidden(process_or_quantity, observable_parity) -> Bool

Whether a symmetry forces the order-n response to vanish identically.

If the system has a symmetry under which the driving field is odd (f → −f) and the observable transforms with parity s = ±1 (Q → sQ), then χ⁽ⁿ⁾ = s(−1)ⁿ χ⁽ⁿ⁾, so the response vanishes unless s(−1)ⁿ = +1:

  • an even observable (s = +1) in such a system has no odd-order response;
  • an odd observable (s = −1) has no even-order response.

Inversion in a centrosymmetric crystal is the standard instance: the current is inversion-odd, so χ⁽²⁾ ≡ 0 and second-harmonic generation is forbidden.

This is a selection rule, not a numeric identity, so it is structure and not an AbstractRelation: it tells a consumer when to EXPECT zero, which is what makes a measured zero informative rather than vacuous.

parity_forbidden(2, -1)                          # true  — no χ⁽²⁾ for an odd observable
parity_forbidden(HarmonicGeneration(2), -1)      # true
parity_forbidden(HarmonicGeneration(3), -1)      # false — χ⁽³⁾ survives
source
AbstractQAtlas.peierls_current — Method
peierls_current(H_of_A, A::VectorPotential) -> value

J = -∂H/∂A at A, by automatic differentiation of H_of_A.

The same shape as thermal_derivative and the same sign convention as the rest of the response genealogy (M = -∂F/∂h): a quantity IS a signed derivative of a potential, and the seam differentiates so no consumer hand-codes one. H_of_A takes a VectorPotential and returns the energy.

Currently implemented for VectorPotential{1} only, by forward mode; a higher dimension needs a gradient and is refused rather than silently reduced to one component. The length unit A is measured in stays the model's business — this seam supplies the derivative and the sign, nothing else.

Requires an automatic-differentiation backend; the method is provided by the ForwardDiff package extension. Without it, this throws an informative error.

source
AbstractQAtlas.peierls_phase — Method
peierls_phase(A::VectorPotential{N}, displacement::NTuple{N,<:Real}) -> Real

A · d, the phase a hopping picks up across a bond whose endpoints differ by displacement.

The hopping becomes exp(-i·peierls_phase(A, d)) in the forward direction and its conjugate in the reverse. Applying the same sign to both is not a gauge transformation, and shows up as an open chain whose energy moves with A.

displacement is measured in whatever length unit the model uses, and that unit is a choice the model must state: it is invisible to every static check and to the linear and second-order responses, and separates only at third order in the drive. This layer does not name it, because how far a bond spans is a fact about a lattice, not about a definition.

source
AbstractQAtlas.permutation_equivalent — Method
permutation_equivalent(a, b) -> Bool

Whether response tensors a and b are forced equal by intrinsic permutation symmetry — i.e. differ only by a permutation of their field indices. χ⁽²⁾_{x;yz} = χ⁽²⁾_{x;zy}, so they are equivalent; χ_{x;yz} and χ_{y;xz} are not (different response index).

the symmetry pairs field indices with frequencies

The intrinsic permutation symmetry acts on (field-index, frequency) pairs, so for a frequency-resolved response the equality holds only when the frequency arguments are permuted to match: χ⁽²⁾_{x;yz}(ω₁, ω₂) == χ⁽²⁾_{x;zy}(ω₂, ω₁), not χ⁽²⁾_{x;zy}(ω₁, ω₂). A static Susceptibility (frequency_arguments == 0) has no frequencies to permute, so permutation-equivalent components are numerically equal outright; for a DynamicalSusceptibility / Conductivity (frequency_arguments > 0) apply field_permutation to the frequency arguments before comparing.

source
AbstractQAtlas.potential_root — Method
potential_root(quantity) -> Type

The root potential of quantity's genealogy — the last entry of its differentiation_chain. For the canonical response tree this is FreeEnergy (M = −∂F/∂h, S = −∂F/∂T, …); for the grand-canonical branch it is GrandPotential (N = −∂Ω/∂μ). Each root is itself the Legendre-generating potential of its ensemble — F = −β⁻¹ ln Z, Ω = −β⁻¹ ln Ξ.

source
AbstractQAtlas.principal_value_hilbert — Method
principal_value_hilbert(response::AbstractResponse, ω) -> Number

The principal-value Hilbert transform P ∫ f(ω′)/(ω′ − ω) dω′ of response at ω — the pv_real / pv_imag a KramersKronigReal / KramersKronigImag check consumes (feed the imaginary part to obtain pv_imag, the real part for pv_real).

AbstractQAtlas owns the generic function only; the numerical transform is the functional sibling's job (#14 / #19), which adds a method for its own AbstractResponse representation. This fallback errors informatively.

source
AbstractQAtlas.process_frequencies — Method
process_frequencies(process, ω...) -> NTuple

The frequency arguments (ω₁, …, ωₙ) at which χ⁽ⁿ⁾ is to be evaluated for process, given the n_drives(process) driving frequencies actually applied. The result always has response_order(process) entries.

process_frequencies(HarmonicGeneration(3), 0.5)          # (0.5, 0.5, 0.5)
process_frequencies(OpticalRectification(), 0.5)         # (0.5, -0.5)
process_frequencies(SumFrequencyGeneration(), 0.5, 1.2)  # (0.5, 1.2)
process_frequencies(FourWaveMixing(), 0.5, 1.2)          # (0.5, 0.5, -1.2)
source
AbstractQAtlas.quantities — Method
quantities(rel::AbstractRelation) -> Tuple{Vararg{Type}}

The physical-quantity TYPES a relation directly constrains: the machine link to the vocabulary it speaks about, beyond the bare variable symbols of variables. For a type-keyed relation it is auto-derived, the AbstractQuantity subset of its variable_types (family-erased) unioned with also_constrains, e.g. quantities(SusceptibilityFDT()) == (Susceptibility, Magnetization): the typed χ plus the Var(M) association. With no typed slot @relation emits no auto-method and this fallback runs, giving also_constrains alone, so a hand-declared link still works; flattening this to () would drop such a link without saying so. A scaling or Maxwell relation, constraining parameters rather than named quantities, declares none and so still reports (). The reverse index is relations_constraining.

source
AbstractQAtlas.quantity_graph — Method
quantity_graph() -> KnowledgeGraph{Type}

The entire quantity-relationship graph as a KnowledgeGraph — every :derivative, :spectral, :fourier and :law edge among the constructible quantity families, deduplicated. Built once from the type hierarchy and cached; query it with the generic kernel (graph_neighbors, graph_shortest_path, …) or the quantity-specific wrappers below.

source
AbstractQAtlas.quantity_path — Method
quantity_path(a, b) -> Union{Vector{QuantityEdge},Nothing}

A shortest path in the quantity-relationship graph from quantity a to b (instances, families, or types) — the machine answer to "how are a and b related?". nothing if they are in different components, the empty vector if a and b are the same family. A thin wrapper over graph_shortest_path (structural edges are symmetric, so the search is undirected).

quantity_path(SpecificHeat(), Magnetization(:z))
# SpecificHeat — Energy — FreeEnergy — Magnetization   (through the common root)
source
AbstractQAtlas.reachable_quantities — Method
reachable_quantities(q) -> Vector{Type}

The physical-quantity TYPES structurally reachable from q through the type-keyed derivation graph — the quantity-first navigation over typed_derivation_graph. Accepts a quantity instance or its (concrete) type; the result is family-erased (Susceptibility{I} → Susceptibility), de-duplicated, name-sorted, and includes q's own family (trivially reachable).

reachable_quantities(PartitionFunction())   # ⊇ [FreeEnergy, PartitionFunction] — F = −β⁻¹ ln Z

The dual of relations_constraining (a quantity → the laws it obeys); this is a quantity → the other quantities its laws connect it to.

Structural, not computational

Reachability over typed_derivation_graph OVER-approximates what is actually computable (a hyperedge fans out to one edge per input, so a single known input already "reaches" the output; non-affine outputs are edges too). For the honest "can I compute it from these values" use derivable(bag) / derive(Q, bag), which require every input and call the real solve.

source
AbstractQAtlas.region_check_all — Method
region_check_all(b::Bag; atol=0) -> Bool

true iff every entropy inequality (bipartite + strong subadditivity) auto-discovered by region_report holds on the bag b — and at least one instance was found (an empty match is false, never a silent green).

true answers over the rows that were DISCOVERED, which for the maximum-entropy family means the ones local_dim enabled. Omitting it does not make that bound pass — it makes it absent, and a bag that violates it can still answer true on the strength of the inequalities that were checked. Pass local_dim to include it.

source
AbstractQAtlas.region_report — Method
region_report(b::Bag; atol=0) -> Vector{RegionReportRow}

Auto-discover the entanglement-entropy inequalities over the REGIONS in a bag of region-keyed entropies (bag(entanglement_entropy(A) => s_A, …)), with no A/B/AB hand-labeling — the region twin of relation_report:

  • Subadditivity and Araki–Lieb, for every disjoint pair (A, B) whose S(A), S(B), S(A∪B) are all present: I(A:B) = S(A)+S(B)−S(A∪B) ≥ 0 and S(A∪B) ≥ |S(A)−S(B)|.

  • Strong subadditivity, for every pairwise-disjoint triple (A, B, C) whose S(B), S(A∪B), S(B∪C), S(A∪B∪C) are present: S(A∪B) + S(B∪C) ≥ S(A∪B∪C) + S(B) (the conditional mutual information I(A:C|B) ≥ 0).

  • Weak monotonicity, for every pairwise-disjoint triple (A, B, C) whose S(A), S(C), S(A∪B), S(B∪C) are present — no full-system S(A∪B∪C), so it is found strictly more often than strong subadditivity: S(A∪B) + S(B∪C) ≥ S(A) + S(C).

  • Maximum entropy, for every region, when local_dim is given: S(A) ≤ |A| · ln(local_dim). This one is opt-in because a Region is a set of site labels with no Hilbert space attached, so the sweep cannot know d; omit it and an impossible entropy (5 nats on one qubit) produces no row.

    One uniform d for every site. On a mixed lattice the bound is then only as tight as the value passed, and too generous a d MASKS a real violation — S = 1.75 on two qubits fails at local_dim = 2 and passes at 3. Verify uniformity before relying on a pass; a per-site mapping is not supported yet.

A negative (conditional) mutual information — a broken MPS/ED entanglement calculation — is caught for whichever regions expose it.

Complementarity needs no relation of its own: for a bag in which S(A∪B) = 0, Araki–Lieb already reads 0 ≥ |S(A) − S(B)|, so a pure global state with S(A) ≠ S(B) fails on the row that is already there.

Every entropy family in the bag that declares obeys_entropy_inequalities is swept separately: a bag holding both entanglement_entropy(A) and fermionic_entanglement_entropy(A) on the same regions yields both sets of rows, and no inequality is ever built from one family's S(A) and another's S(A∪B).

b = bag(entanglement_entropy(1) => 0.7, entanglement_entropy(2) => 0.7,
        entanglement_entropy(1, 2) => 1.0)      # S(A), S(B), S(A∪B)
all(row -> row.pass, region_report(b))          # true — S is subadditive here
source
AbstractQAtlas.region_tee_report — Method
region_tee_report(b::Bag) -> Vector{RegionTEERow}

Auto-discover the tripartite information I₃ and the Kitaev–Preskill topological entanglement entropy γ = −I₃ over the REGIONS in a bag of region-keyed entropies — the multipartite twin of region_report (which handles the entropy inequalities). One row is emitted per pairwise-disjoint triple {A, B, C} whose seven sub-entropies S(A), S(B), S(C), S(A∪B), S(A∪C), S(B∪C), S(A∪B∪C) are all present; I₃ is symmetric in A, B, C, so each unordered triple gives exactly one row.

γ is the KitaevPreskillTEE constant ln 𝒟 — provided the regions form a KP tripartition (three sectors meeting so the boundary-law terms cancel). The set layer carries no geometry, so this reports the alternating sum for any admissible triple; whether it isolates the topological constant is the caller's (geometry-dependent) responsibility.

γ = log(2)
b = bag(entanglement_entropy(1) => 1.0, entanglement_entropy(2) => 1.0,
        entanglement_entropy(3) => 1.0, entanglement_entropy(1, 2) => 1.5,
        entanglement_entropy(1, 3) => 1.5, entanglement_entropy(2, 3) => 1.5,
        entanglement_entropy(1, 2, 3) => 1.5 - γ)   # area terms cancel, leaving −γ
only(region_tee_report(b)).topological_entanglement_entropy ≈ γ   # ln 2 (toric code)
source
AbstractQAtlas.related_quantities — Method
related_quantities(q) -> Vector{QuantityEdge}

The graph neighborhood of quantity q (a quantity instance or type): every QuantityEdge it participates in across ALL edge kinds — its response-genealogy parent (:derivative), its dynamical origin (:spectral), its Fourier conjugate (:fourier), and every quantity it is co-constrained with by a universal law (:law). Endpoints are quantity families (the index-erased UnionAll).

related_quantities(Susceptibility(:z, :z))
# TypedEdge(:derivative, Susceptibility — Magnetization, "∂/∂MagneticField")
# TypedEdge(:law, Susceptibility — Magnetization, "SusceptibilityFDT")
# …
source
AbstractQAtlas.relation_report — Method
relation_report(b::Bag; atol=0, domain=nothing, extras...)

Type-keyed relation_report: evaluate every applicable type-keyed relation against the bag b (plus extras for supplied slots) and report per-relation residuals. The collision-proof verify-engine front door.

source
AbstractQAtlas.relation_report — Method
relation_report(data::NamedTuple; atol=0, domain=nothing)
    -> Vector{@NamedTuple{relation, subject, residual, pass}}

Evaluate every applicable relation against data and report per-relation residuals. Each row also carries subject (nothing here — the type-keyed relation_report(::Bag) fills it with the auto-discovered component of a family-generic relation, §8a). The one-call integration point for downstream packages:

# gate an exponent table (an atlas registry, MC-extracted exponents, …):
relation_report((; α=0//1, β=1//8, γ=7//4, δ=15//1, ν=1//1, η=1//4, d=2))

# cross-check measured thermodynamics against every applicable identity:
relation_report((; C=c, var_E=v, β=β, N=N); atol=tol)
source
AbstractQAtlas.relations_constraining — Method
relations_constraining(q) -> Vector{AbstractRelation}

Every registered relation that directly constrains the quantity q (its type appears in the relation's quantities) — the reverse of quantities, so a consumer can ask a quantity "which universal laws must you obey?". Accepts a quantity instance or its type.

relations_constraining(Susceptibility(:z, :z))   # [SusceptibilityFDT(), SusceptibilityResponse()]
source
AbstractQAtlas.relevance — Method
relevance(c::RelevanceCriterion; atol=0, kwargs...) -> Symbol

:irrelevant, :marginal or :relevant, from the sign of margin.

atol widens the marginal band; it defaults to 0, so an exponent set that is marginal in exact arithmetic reports :marginal and a floating-point one very likely will not. Pass a tolerance when the exponents are estimates.

atol is reserved: it is consumed here and never reaches margin, so a criterion may not name a physics variable atol.

source
AbstractQAtlas.report — Method
report(model, quantity, bc;
       value, route, provenance,
       err=nothing, mechanism="", independent=(), atol=0, refs=()) -> Card

Package a computed value for the (model, quantity, bc) triple into a schema-valid Card — the reporter-facing sibling of fetch (fetch RETRIEVES a value; report PACKAGES one). The card's hub is "TypeName(model)/TypeName(quantity)/TypeName(bc)" (instances or types are both accepted). route must be one of REPORT_ROUTES; provenance names what produced the value (the reporter package + method). A non-finite value yields status = :divergent with subject = nothing, never a raw NaN.

value (and each independent entry) is a scalar Real/Complex; a complex value with a negligible imaginary part is taken as real.

report(TFIM(1.0, 0.5), VonNeumannEntropy(), PBC(64);
       value = 0.87, err = 0.01, route = :monte_carlo,
       provenance = "ClassicalMonteCarlo.jl@metropolis", refs = ["Calabrese2004"])
source
AbstractQAtlas.representation — Method
representation(quantity) -> Tuple{Vararg{AbstractRepresentation}}
representation(::Type{<:AbstractQuantity}) -> Tuple

The spatial and/or temporal representation(s) a quantity is expressed in — e.g. (MomentumSpace(), FrequencyDomain()) for S(q, ω), (RealSpace(),) for a real-space correlation, () for a global thermodynamic quantity with no space/time resolution.

source
AbstractQAtlas.residual — Method
residual(rel::AbstractRelation, b::Bag; extras...) -> Number

Type-keyed residual: read each identity-bearing variable from the bag b by its quantity / field TYPE, each supplied (untyped) slot from extras, and evaluate. Same value and exact-arithmetic contract as the symbol-keyed method — the collision-proof front door.

residual(SpectralFromGreens(), bag(SpectralFunction => A, RetardedGreensFunction => G))
source
AbstractQAtlas.residual — Method
residual(rel::AbstractRelation; vars...) -> Number

Signed violation of the relation at the given variable values; zero if and only if the relation is satisfied. Preserves the input number types (see the exact-arithmetic contract on AbstractRelation).

source
AbstractQAtlas.response_order — Method
response_order(quantity) -> Int
response_order(::Type{<:AbstractQuantity}) -> Int

For a response function χ⁽ⁿ⁾ = ∂ⁿ(output)/∂(field)ⁿ, the order n — the number of conjugate-field derivatives. Linear response is 1; the second-order nonlinear response is 2; etc. A response tensor carries one output index and n field indices, so n = tensor_rank − 1 for the response families (Susceptibility, Conductivity). Returns 0 for quantities that are not response functions (the default).

source
AbstractQAtlas.scaling_dimensions — Method
scaling_dimensions(; ν, η, d) -> ScalingDimensions

Invert the exponent map: recover the RG eigenvalues from the two independent exponents that fix them, y_t = 1/ν and y_h = (d + 2 − η)/2, at dimension d. Composing with critical_exponents closes the loop — every other exponent (α, β, γ, δ) is then reconstructed from just (ν, η, d), a direct expression of the two-eigenvalue structure:

s = scaling_dimensions(ν = 1//1, η = 1//4, d = 2)   # 2D Ising eigenvalues
critical_exponents(s).δ                              # 15//1  (δ from ν, η, d alone)
source
AbstractQAtlas.singular_form — Method
singular_form(quantity, t; exponents::NamedTuple) -> Real

The leading singular form of quantity at reduced temperature t, Q ∼ |t|^{power·e}, with the exponent looked up from the critical_scaling correspondence and its value taken from exponents. The correspondence — not the caller — decides which exponent and which sign:

exps = (α=0//1, β=1//8, γ=7//4, δ=15//1, ν=1//1, η=1//4)
singular_form(SpontaneousMagnetization(), -0.01; exponents=exps)  # |t|^{+1/8}
singular_form(Susceptibility(:z, :z), 0.01; exponents=exps)           # |t|^{-7/4}

Throws for a quantity with no reduced-temperature critical law.

source
AbstractQAtlas.slack — Method
slack(ineq::AbstractInequality; vars...) -> Number

The non-negativity margin of an inequality — its residual: how far from saturation, negative iff the inequality is violated.

source
AbstractQAtlas.solve — Method
solve(rel::AbstractRelation, Q::Type, b::Bag; extras...) -> Number

Type-keyed solve: the value of the variable whose identity type is Q, implied by the relation and the others (read from b / extras). Translates Q to its private slot and defers to the affine symbol-keyed solver, so exact arithmetic is preserved.

solve(KeldyshComponent(), KeldyshGreensFunction,
      bag(GreaterGreensFunction => 2, LesserGreensFunction => 3))    # 5
source
AbstractQAtlas.solve — Method
solve(rel::AbstractRelation, ::Val{x}; vars...) -> Number

The value of variable x implied by the relation and the remaining variables, e.g. solve(Widom(), Val(:γ); β=1//8, δ=15//1) == 7//4.

No per-variable rearrangements are hand-written: for any variable the relation is affine in (true of almost every identity here), the answer follows exactly from three kernel evaluations — see the generic _solve. A relation that is non-affine in some variable provides a specialized _solve for it (e.g. FreeEnergyFromZ for Z); attempting a generic solve for a non-affine variable throws instead of silently returning a wrong value. Preserves input number types.

source
AbstractQAtlas.spectral_chain — Method
spectral_chain(quantity) -> Vector{Any}

The dynamical-graph path from quantity back to its source, as the list of quantity types [typeof(quantity), from, …, source]. A source (or off-graph) quantity returns the singleton [typeof(quantity)].

spectral_chain(DensityOfStates())
# [DensityOfStates, SpectralFunction, RetardedGreensFunction, SelfEnergy]
# i.e. ρ ⟵ A ⟵ G^R ⟵ Σ : the density of states is built from the
# self-energy through Dyson, the spectral representation, and the BZ sum.
source
AbstractQAtlas.spectral_moment — Method
spectral_moment(response::AbstractResponse, n::Integer) -> Number

The n-th frequency moment ∫ ωⁿ f(ω) dω of response: n = 0 is the sum-rule / normalization integral a SpectralSumRule / StaticFromDynamicalStructureFactor check consumes (∫A, ∫S), and n = 1 the first moment a FSumRule check consumes (∫ω S).

AbstractQAtlas owns the generic function only; the quadrature is the functional sibling's job (#14 / #19). This fallback errors informatively.

source
AbstractQAtlas.spectral_origin — Method
spectral_origin(quantity) -> Union{SpectralOrigin,Nothing}
spectral_origin(::Type{<:AbstractQuantity}) -> Union{SpectralOrigin,Nothing}

The dynamical-graph edge of quantity: the (from, via) it is obtained from, or nothing for a source quantity (SelfEnergy, DynamicalCorrelation) or a quantity outside the graph.

spectral_origin(DensityOfStates())      # SpectralOrigin(SpectralFunction, :bz_average)
spectral_origin(SpectralFunction())     # SpectralOrigin(RetardedGreensFunction, :neg_im_over_pi)
spectral_origin(RetardedGreensFunction()) # SpectralOrigin(SelfEnergy, :dyson)
source
AbstractQAtlas.step_size — Method
step_size(route::DerivativeRoute) -> Union{Real,Nothing}
with_step_size(route::DerivativeRoute, h::Real) -> DerivativeRoute

The step route takes, and the same route at a different step. nothing means the route has no step, which is what AutoDiff reports.

Part of the route contract alongside nth_derivative, and the pair observed_order needs. Each missing half names itself: a route reporting a step_size with no with_step_size is told so by with_step_size, and one declaring neither is told it reports no step, which for it is true. A closed Union over the routes that happened to exist told a third route the second thing whether or not it was true.

source
AbstractQAtlas.tensor_rank — Method
tensor_rank(quantity) -> Int
tensor_rank(::Type{<:AbstractQuantity}) -> Int

The tensor rank of a quantity: 0 for a scalar (energy, specific heat, partition function, density of states, exponents), 1 for a vector (magnetization M_α), 2 for a rank-2 tensor (susceptibility χ_αβ, conductivity σ_μν, propagators G_ab, structure factors). Default 0; tensorial families override.

source
AbstractQAtlas.thermal_derivative — Method
thermal_derivative(quantity, potential, x) -> value
thermal_derivative(χ::Susceptibility, F, h⃗::AbstractVector, components) -> value

The value of quantity as the appropriate derivative of the potential function evaluated at the point x, via automatic differentiation — the AD realization of the response genealogy (derivative_edge):

quantitypotentialresult
Magnetization(α)F(h)M_α = −∂F/∂h
Susceptibility(α, β₁…βₙ)F(h)χ⁽ⁿ⁾ = −∂ⁿ⁺¹F/∂hⁿ⁺¹ (diagonal only — all indices equal)
ThermalEntropy()F(T)S = −∂F/∂T
SpecificHeat()U(T)C = ∂U/∂T
Energy()βF(β)U = ∂(βF)/∂β (Gibbs–Helmholtz)

A single-field F(h) fixes only the diagonal susceptibility (every index equal); an off-diagonal component is a mixed partial in distinct field directions and errors (rather than silently returning the diagonal). For the full tensor component pass a multi-field potential F(h⃗) and the field-direction ordering components:

χ⁽ⁿ⁾_{α;β₁…βₙ} = −∂ⁿ⁺¹F / ∂h_α ∂h_{β₁} … ∂h_{βₙ}

(the response index α is included; the diagonal reproduces the single-field result).

Requires an automatic-differentiation backend to be loaded; the methods are provided by the ForwardDiff package extension. Without it, this throws an informative error.

using ForwardDiff
F(h) = -log(2cosh(h)) / β                       # single-spin free energy
thermal_derivative(Magnetization(:z), F, 0.3)   # M = tanh(0.3·β)·…  (= −F'(0.3))

G(h⃗) = h⃗[1] * h⃗[2] * h⃗[3]                       # a cross-field free energy
thermal_derivative(Susceptibility(:x, :y, :z), G, [0.0, 0.0, 0.0], (:x, :y, :z))  # −1
source
AbstractQAtlas.thermal_derivative — Method
thermal_derivative(quantity, potential, x, route::DerivativeRoute) -> value

thermal_derivative along an explicit DerivativeRoute, so a project that measured its potential on a grid can traverse the response genealogy without an AD backend.

route = AutoDiff() is the three-argument method, and needs the extension. The finite-difference routes need nothing.

F(h) = -log(2cosh(h))
thermal_derivative(Magnetization(:z), F, 0.3, Richardson(1e-2))   # tanh(0.3)
source
AbstractQAtlas.thermal_gradient — Method
thermal_gradient(F, x) -> −∇F(x)

The full first-order response conjugate to a field VECTOR x, in a single REVERSE-mode pass: M_α = −∂F/∂h_α for every direction at once from a free energy F(h⃗) (magnetization for a magnetic-field vector, particle numbers for a chemical-potential vector, …). The reverse-mode companion of thermal_derivative, which takes one component at a time by forward mode — for a high-dimensional field vector, reverse mode gets every component in one pass instead of one pass per component.

Returns −∇F (the − is the extensive-response convention M = −∂F/∂h); a scalar x gives the scalar −F'(x), agreeing with the order-1 thermal_derivative.

Requires a reverse-mode AD backend; the method is provided by the Zygote package extension. Without it, this throws an informative error.

using Zygote
F(h⃗) = -sum(log(2cosh(β*hᵢ)) for hᵢ in h⃗) / β   # independent spins
thermal_gradient(F, [0.1, 0.4, -0.2])            # [tanh(β·0.1), tanh(β·0.4), tanh(-β·0.2)]
source
AbstractQAtlas.thermodynamic_potentials — Method
thermodynamic_potentials() -> NTuple{4,ThermodynamicPotential}

The four standard thermodynamic potentials with their differentials — the single structural source the Maxwell relations are derived from:

ΦdΦ
U(S,V)+T dS − p dV
F(T,V)−S dT − p dV
H(S,p)+T dS + V dp
G(T,p)−S dT + V dp
source
AbstractQAtlas.topological_entanglement_entropy — Method
topological_entanglement_entropy(b::Bag, A::Region, B::Region, C::Region) -> Number

The Kitaev–Preskill topological entanglement entropy γ = ln 𝒟 from a tripartition (Kitaev & Preskill, [43]), γ = −[S(A)+S(B)+S(C) − S(A∪B)−S(B∪C)−S(C∪A) + S(A∪B∪C)] — the area-law-independent constant isolated by the alternating tripartite sum (KitaevPreskillTEE; γ > 0 ⇒ topological order). Equals −tripartite_information.

source
AbstractQAtlas.tripartite_information — Method
tripartite_information(b::Bag, A::Region, B::Region, C::Region) -> Number

The tripartite (interaction) information I₃ = S(A)+S(B)+S(C) − S(A∪B)−S(A∪C)−S(B∪C) + S(A∪B∪C) = I(A:B) + I(A:C) − I(A:B∪C), from the region entropies in b for pairwise-disjoint A, B, C — equal to −topological_entanglement_entropy (the Kitaev–Preskill combination). Errors if the regions are not a tripartition or if any of the seven entropies is absent.

source
AbstractQAtlas.typed_derivation_graph — Method
typed_derivation_graph() -> KnowledgeGraph{VariableKey}

The type-keyed derivation graph: one directed edge input →[relation] output per (typed step, input), nodes are VariableKeys — the collision-proof counterpart of derivation_graph. Structural (over-approximates, like its symbol sibling; use derive(Q, bag) for honest reachability).

source
AbstractQAtlas.typed_derivation_steps — Method
typed_derivation_steps() -> Vector{TypedStep}

Every candidate directed edge of the type-keyed derivation graph: for each type-keyed relation and each of its identity slots, the edge computing that slot's TYPE from the other identity slots. Inequalities and symbol-only relations are skipped (an inequality gives a saturation bound, not a derivation; a symbol-only relation has no typed slots). Built once and cached.

source
AbstractQAtlas.variable_slots — Method
variable_slots(rel::AbstractRelation) -> Tuple{Vararg{Tuple{Symbol,Any}}}

For each required variable, its (private-symbol, key) pair, in declaration order. key is the variable's identity TYPE for an identity-bearing variable (a quantity / field / coordinate / exponent, written name::Type in the @relation) or nothing for a supplied slot (an untyped value — an evaluation coordinate, a supplied integral; design note R3). The private symbol is the formula letter used in the residual body; the key is what the type-keyed front door matches on. Filled in by @relation; ()-ish for legacy symbol-only relations (every slot nothing).

source
AbstractQAtlas.variable_support — Method
variable_support(v) -> Support

The support a variable INSTANCE keys under. Global() for everything whose type is its whole identity; overridden where an instance carries data that distinguishes it from another instance of the same type.

Add an override here whenever a quantity gains such a field — that is the one place that decides whether two instances share a bag slot, and the failure mode of getting it wrong is silent (see OrderSupport).

source
AbstractQAtlas.variable_types — Method
variable_types(rel::AbstractRelation) -> Tuple{Vararg{Type}}

The identity TYPES of a relation's identity-bearing variables, in declaration order (the non-nothing keys of variable_slots). Empty for a legacy symbol-only relation. quantities(rel) is the AbstractQuantity subset of this (family-erased), auto-derived and unioned with also_constrains — so a type-keyed relation needs a hand-written link only for a quantity that enters through a supplied variance/derivative slot.

source
AbstractQAtlas.variables — Function
variables(rel::AbstractRelation) -> Tuple{Vararg{Symbol}}

The required variables of the relation (optional variables with defaults, e.g. a site count N = 1, are not listed). Filled in by @relation; used for applicability matching in applicable_relations and by the β-or-T normalizer.

source
AbstractQAtlas.@bound — Macro
@bound :domain Name(bounded OP bounding)              # comparison form
@bound :domain Name(x, y, z, opt=default) = x OP expr # statement form
@bound :domain Name(x, y, z, opt=default) = slack     # bare-slack form

Declare a BOUND — a relation asserting an inequality rather than an equality. The generated struct subtypes AbstractInequality: residual returns the slack in ≥ 0 form, check tests slack ≥ −atol, and solve returns the saturation value. Everything @relation generates (kernel, variables, variable_slots, domain, auto-quantities, registry insertion, export) is generated here too.

OP is <=/≤ or >=/≥, and the bounded quantity is written first — the statement reads as a sentence about its subject. Strict </> are rejected: the criterion is slack ≥ −atol, so a strict declaration would be checked non-strictly.

The first two forms additionally record the roles — bounded_slot, bounding_slot, bounding_constant, bound_direction — so "what bounds this, and from which side?" is answerable from the declaration instead of being re-derived from the sign of a slack expression, or maintained a second time in a consumer's own direction field.

@bound :thermodynamic SpecificHeatPositivity(C::SpecificHeat >= 0)
@bound :quantum LiebRobinsonBound(v <= v_LR::LiebRobinsonVelocity)
@bound :entanglement Subadditivity(S_A, S_B, S_AB) = S_AB <= S_A + S_B
@bound :entanglement Monogamy(τ_ABC, τ_AB, τ_AC) = τ_ABC - τ_AB - τ_AC

In the comparison form the bounded side may be an untyped slot while the bounding side carries the quantity type (@bound :quantum Tsirelson(S <= S_max::CHSHBound)). That is what lets a bound be stated — and its bounding value fetched — before any quantity type names the bounded observable.

source
AbstractQAtlas.@relation — Macro
@relation :domain Name(x, y, z, opt=default) = expr

Declare a relation ONCE. Expands to the complete implementation:

  • struct Name <: AbstractRelation end (docstring-attachable),
  • the residual kernel _residual(::Name; x, y, z, opt=default) = expr (kernels tolerate extra keywords, so a whole data set can be splatted through relation_report),
  • variables(::Name) = (:x, :y, :z) — required variables only,
  • domain(::Name) = :domain,
  • registry insertion and export Name.

residual/check work immediately; solve works for every variable the expression is affine in. Note for downstream packages declaring their own relations: the struct and methods precompile fine, but the registry insertion is a load-time side effect — re-register from your module __init__ if you need registry visibility across sessions.

@relation :scaling Rushbrooke(α, β, γ) = α + 2β + γ - 2
source
AbstractQAtlas.StatisticalMechanics.AnnealedFreeEnergyBound — Type
AnnealedFreeEnergyBound <: AbstractInequality

The quenched free energy of a disordered system is never below its annealed counterpart,

F_quenched = −(1/β)⟨ln Z⟩ ≥ −(1/β) ln⟨Z⟩ = F_annealed

(slack F_quenched − F_annealed), the disordered-systems statement of TypicalBelowAverage: the same Jensen step on Z, with the direction reversed by the minus sign in F = −(1/β) ln Z. So the annealed calculation — the easy one, which averages Z before taking the log — is a LOWER bound and never the answer.

That ⟨ln Z⟩ and ln⟨Z⟩ are different objects is the reason the replica trick exists. The slack is zero exactly when Z does not fluctuate across realisations; nothing stronger than this inequality relates the two free energies in general. The ± J Nishimori line is where a DIFFERENT exact identity appears — the internal energy per bond, U = −J tanh(βJ), from gauge symmetry — which is an energy, not a relation between these two, and is model-specific, so it lives in the implementing atlas.

Variables: F_quenched (the bounded one), F_annealed.

source
AbstractQAtlas.StatisticalMechanics.CanonicalTPQ — Type
CanonicalTPQ <: AbstractRelation

The canonical thermal-pure-quantum estimator of the partition function (Sugiura & Shimizu, [50]),

Z(β) = D · ⟨ψ₀| e^{−βĤ} |ψ₀⟩,

where |ψ₀⟩ is a Haar-random normalized state in the D-dimensional Hilbert space and the bar is the random-state average — exact because ⟨ψ₀| Ô |ψ₀⟩ = Tr Ô / D on average, with fluctuations exponentially small in system size. Thermal averages follow the same way, ⟨Â⟩_β = ⟨ψ_β| Â |ψ_β⟩ / ⟨ψ_β|ψ_β⟩ with |ψ_β⟩ = e^{−βĤ/2}|ψ₀⟩.

Supplied-weight convention: tpq_weight = ⟨ψ₀| e^{−βĤ} |ψ₀⟩. Variables: Z, tpq_weight, D.

source
AbstractQAtlas.StatisticalMechanics.ClausiusClapeyron — Type
ClausiusClapeyron <: AbstractRelation

The Clausius–Clapeyron relation for the slope of a first-order phase boundary,

dp/dT = ΔS/ΔV = L/(T ΔV),

with L = T ΔS the LatentHeat and ΔV the volume jump across the transition. Connects to the FirstOrder transition type (the only one with has_latent_heat).

Variables: dp_dT, L, T, ΔV.

source
AbstractQAtlas.StatisticalMechanics.CrooksFluctuationTheorem — Type
CrooksFluctuationTheorem <: AbstractRelation

The Crooks fluctuation theorem (Crooks, [51]): the forward and time-reversed work distributions of a driven process obey

P_F(W) / P_R(−W) = e^{β (W − ΔF)},

crossing at W = ΔF (ratio = 1) and integrating over W to JarzynskiEquality. Supplied-ratio convention: ratio = P_F(W) / P_R(−W).

Variables: ratio = P_F(W)/P_R(−W), W, ΔF, β (or T).

source
AbstractQAtlas.StatisticalMechanics.ElectricCurrentResponse — Type
ElectricCurrentResponse <: AbstractRelation

The electric current as the field-derivative of the Hamiltonian in the velocity gauge,

j = −∂H/∂A.

The edge derivative_edge(ElectricCurrent) names, stated exactly — the same shape as MagnetizationResponse with the Hamiltonian in place of the free energy, because the vector potential couples to the hopping rather than to a thermodynamic variable. Supplied-derivative convention: dH_dA is the caller-computed ∂H/∂A at the working point.

source
AbstractQAtlas.StatisticalMechanics.EntropyResponse — Type
EntropyResponse <: AbstractRelation

Entropy as a free-energy response,

S = −∂F/∂T.

Supplied-derivative convention: the caller provides dF_dT however obtained (closed form, AD, finite difference). Reconciling this derivative route against the algebraic FreeEnergyLegendre route is the classic thermodynamic self-consistency check.

source
AbstractQAtlas.StatisticalMechanics.FreeEnergyFromZ — Type
FreeEnergyFromZ <: AbstractRelation

The statistical definition of the Helmholtz free energy,

f = −ln(Z) / (β N),

bridging the microscopic partition function and the macroscopic potential. N = 1 (default) gives the total free energy; N = number of sites gives the per-site density (the QAtlas FreeEnergy tag convention, f = -β⁻¹ log Z / N). Note the log makes this relation inherently floating-point — the exact-arithmetic contract applies only to the arithmetic around it. Non-affine in Z, so Val(:Z) has a specialized solve (the exp inverse); every other variable is generic.

source
AbstractQAtlas.StatisticalMechanics.FreeEnergyLegendre — Type
FreeEnergyLegendre <: AbstractRelation

The fundamental (Helmholtz–Legendre) relation among the potentials at fixed temperature,

F = U − T·S ⟺ S = β(U − F),

with all three potentials in the same granularity. Type-keyed on the per-site convention — F (FreeEnergy) and S (ThermalEntropy) are per-site tags, so U is keyed Energy{:per_site} to match (a total-energy value must be per-site-normalized before it goes in the bag). Purely algebraic: exact inputs give exact residuals.

source
AbstractQAtlas.StatisticalMechanics.GibbsDuhem — Type
GibbsDuhem <: AbstractRelation

The Gibbs–Duhem constraint among the intensive variations,

S dT − V dp + N dμ = 0,

expressing that the intensive parameters (T, p, μ) are not independent. Supplied-differential convention: dT, dp, dμ are the variations.

Variables: S, dT, V, dp, N, dμ.

source
AbstractQAtlas.StatisticalMechanics.GibbsHelmholtz — Type
GibbsHelmholtz <: AbstractRelation

The Gibbs–Helmholtz equation in the β form,

U = ∂(βF)/∂β.

Supplied-derivative convention: dβF_dβ is the caller-computed value of ∂(βF)/∂β (equivalently −∂ln Z/∂β, since βF = −ln Z) evaluated at the same state point as U.

source
AbstractQAtlas.StatisticalMechanics.JarzynskiEquality — Type
JarzynskiEquality <: AbstractRelation

Jarzynski's nonequilibrium equality (Jarzynski, [52]): the exponential average of the work W over many realizations of ANY protocol driving the system between two equilibrium states equals the exponentiated equilibrium free-energy difference, however far from equilibrium the driving is,

⟨e^{−βW}⟩ = e^{−β ΔF}, ΔF = F_B − F_A.

Supplied-average convention: exp_work = ⟨e^{−βW}⟩.

Variables: exp_work = ⟨e^{−βW}⟩, ΔF, β (or T).

source
AbstractQAtlas.StatisticalMechanics.JarzynskiSecondLaw — Type
JarzynskiSecondLaw <: AbstractInequality

The second law as the Jensen-inequality corollary of JarzynskiEquality (⟨e^{−βW}⟩ ≥ e^{−β⟨W⟩} by convexity ⇒ e^{−βΔF} ≥ e^{−β⟨W⟩}): the average work done on the system cannot be less than the free-energy difference,

⟨W⟩ ≥ ΔF

(slack W_avg − ΔF = the dissipated work W_diss ≥ 0). Saturated by a quasistatic (reversible) protocol; a strictly positive slack measures irreversibility.

Variables: ΔF (the bounded one), W_avg = ⟨W⟩.

source
AbstractQAtlas.StatisticalMechanics.MicrocanonicalTemperature — Type
MicrocanonicalTemperature <: AbstractRelation

The microcanonical (Boltzmann–Gibbs) definition of the inverse temperature as the energy-derivative of the entropy,

β = ∂S/∂E

with S(E) the microcanonical entropy (S = ln W(E), W the number of states in the energy shell). Supplied-derivative convention: dS_dE is the caller-computed ∂S/∂E at the working energy. Ensemble equivalence identifies this microcanonical β with the canonical control parameter at E = U(β) — the connection a finite-T calculation can cross-check.

Variables: β, dS_dE.

source
AbstractQAtlas.StatisticalMechanics.ParticleNumberResponse — Type
ParticleNumberResponse <: AbstractRelation

The particle number as the chemical-potential-derivative of the grand potential,

N = −∂Ω/∂μ.

The grand-canonical analogue of MagnetizationResponse (M = −∂F/∂h) — the first edge of the grand potential's genealogy (derivative_edge(ParticleNumber)), stated exactly. Supplied- derivative convention: dΩ_dμ is the caller-computed ∂Ω/∂μ at the working point.

Variables: N, dΩ_dμ.

source
AbstractQAtlas.StatisticalMechanics.SpecificHeatFDT — Type
SpecificHeatFDT <: AbstractRelation

The energy fluctuation–dissipation identity

c_v = β² (⟨E²⟩ − ⟨E⟩²) / N = β² Var(E) / N,

with E the total energy and N the site count (N = 1 ⇒ total specific heat). Equivalently c_v = −β² ∂⟨E⟩/∂β / N: the fluctuation route and the temperature-response route must agree — that is the content of the relation, and how it is tested.

residual(SpecificHeatFDT(); C=c, var_E=v, β=β, N=N)   # c − β²v/N
solve(SpecificHeatFDT(), Val(:C); var_E=v, T=T, N=N)  # the estimator
source
AbstractQAtlas.StatisticalMechanics.SpecificHeatFromEntropy — Type
SpecificHeatFromEntropy <: AbstractRelation

The specific heat as the temperature response of the entropy,

c = T ∂s/∂T

(at fixed volume, c = c_v). Supplied-derivative convention: dS_dT is the caller-computed ∂s/∂T at the working point. The fluctuation route (SpecificHeatFDT) and this thermodynamic route must agree.

Variables: C, dS_dT, T.

source
AbstractQAtlas.StatisticalMechanics.StructureFactorSusceptibility — Type
StructureFactorSusceptibility <: AbstractRelation

The static susceptibility as the q → 0 limit of the static structure factor (the classical / isothermal fluctuation–dissipation sum rule),

χ = β S(q → 0),

with S(q) the equal-time structure factor of the conjugate observable (the compressibility sum rule for the density channel). This is the static, classical limit of the DynamicalFDT; the response and fluctuation of the same observable, one more way the two routes to χ must agree.

Variables: χ, Sq0 = S(q → 0), β (or T).

source
AbstractQAtlas.StatisticalMechanics.SusceptibilityFDT — Type
SusceptibilityFDT <: AbstractRelation

The static (zero-frequency) fluctuation–dissipation identity, per tensor component:

χ_AB = β (⟨M_A M_B⟩ − ⟨M_A⟩⟨M_B⟩) / N = β Cov(M_A, M_B) / N,

with M_A the total (extensive) order-parameter component conjugate to the field h_B and N the site count (N = 1 ⇒ total susceptibility). Susceptibility is a rank-2 tensor χ_AB (Susceptibility{A,B}); this identity relates the (A, B) component to the (A, B) covariance, so var_M here is Cov(M_A, M_B) (the diagonal A = B case is the familiar Var(M_A)). It is the h → 0 limit of χ_AB = ∂⟨M_A⟩/∂h_B; response route and fluctuation route must agree.

source
AbstractQAtlas.StatisticalMechanics.SusceptibilityResponse — Type
SusceptibilityResponse <: AbstractRelation

The susceptibility as the field-derivative of the order parameter,

χ = ∂M/∂h ( = −∂²F/∂h² ).

The second field-derivative edge of the genealogy (derivative_edge(Susceptibility{:z,:z})), stated exactly — the definitional companion of the statistical SusceptibilityFDT (χ = β·Var(M)): the same response reached two ways. Supplied- derivative convention: dM_dh is the caller-computed ∂⟨M⟩/∂h.

source
AbstractQAtlas.StatisticalMechanics.TypicalBelowAverage — Type
TypicalBelowAverage <: AbstractInequality

The typical value of a positive quantity never exceeds its average,

exp⟨ln X⟩ ≤ ⟨X⟩

(slack ⟨X⟩ − exp⟨ln X⟩), which is Jensen's inequality for the concave ln, equivalently AM ≥ GM. Saturated exactly when the distribution is degenerate, so the slack measures how broad the ensemble is — and it is unbounded at an infinite-randomness fixed point, which is why Typical and DisorderAveraged are separate quantities there.

Holds for any positive random variable, so it needs no model and no fixed point: a calculation reporting a typical value above its own average has averaged in the wrong space, or swapped the two.

Variables: X_typ = exp⟨ln X⟩ (the bounded one), X_avg = ⟨X⟩.

source
AbstractQAtlas.StatisticalMechanics.occupation — Method
occupation(stat::ParticleStatistics, ε; β=nothing, T=nothing, μ=0) -> Real

Mean occupation number of a single-particle level at energy ε:

  • Fermionic(): Fermi–Dirac n(ε) = 1 / (e^{β(ε−μ)} + 1) — bounded in [0, 1], particle–hole symmetric about n(μ) = 1/2.
  • Bosonic(): Bose–Einstein n(ε) = 1 / (e^{β(ε−μ)} − 1) — requires ε > μ (throws otherwise: the mean occupation diverges as ε → μ⁺, and ε < μ is unphysical for ideal bosons).

Both reduce to the classical Boltzmann limit boltzmann_occupation for β(ε − μ) ≫ 1, and obey the exact structural identity n_B(ε) − n_F(ε) = 2 n_B(2ε) at μ = 0.

source
AbstractQAtlas.StatisticalMechanics.squeezed_variances — Method
squeezed_variances(r) -> (x=…, p=…)

Quadrature variances of the single-mode squeezed vacuum Squeezed(r) along its principal axes (φ = 0 convention, ħ = 1, vacuum variance 1/2):

Var(x) = e^{−2r}/2, Var(p) = e^{+2r}/2.

The product Var(x)·Var(p) = 1/4 saturates the Heisenberg bound for every r — squeezing redistributes, never creates, uncertainty. A squeezing angle φ ≠ 0 rotates the principal axes without changing these eigen-variances.

source
AbstractQAtlas.Criticality.ActivatedAutocorrelation — Type
ActivatedAutocorrelation <: AbstractRelation

Autocorrelation decay at an infinite-randomness fixed point is ULTRA-SLOW, logarithmic in time rather than a power of it,

G(t) ∼ (ln t)^{−x_m/ψ} ⟹ d(ln G)/d(ln ln t)·ψ + x_m = 0.

Not a small exponent in CriticalAutocorrelation: no power of t describes this at all. The reason is that disorder is strictly correlated along the time direction, so a region that is locally ordered at time 0 stays ordered, and the density of such rare regions is what decays.

Supplied-derivative convention: the slope of ln G against ln ln t, so t > e is required.

Variables: dlogG_dloglnt, x_m, ψ.

The field-driven susceptibility carries the same x_m/ψ on the ln H axis, χ(H)·H ∼ (ln H)^{−x_m/ψ} (Eq. (A.26)), so this relation reads that too.

Reference: [2] Eq. (A.23), §A.3, derived from the scaling form Eq. (A.22).

source
AbstractQAtlas.Criticality.ActivatedCriticalCorrelation — Type
ActivatedCriticalCorrelation <: AbstractRelation

exp⟨ln|C(r)|⟩ ∼ exp(-a r^ψ), so d ln(-⟨ln|C|⟩)/d ln r = ψ ([2], Eq. (6.26), derived there for the random singlet phase where ψ = 1/2).

The TYPICAL correlation, and the worse-conditioned of the two probes: on the same chains its uncorrected slope sits three of its own errors above 1/2 where CriticalCorrelationDecay's is already within one.

Variables: dloglogC_dlogr (caller-computed), ψ.

source
AbstractQAtlas.Criticality.ActivatedDynamicalScaling — Type
ActivatedDynamicalScaling <: AbstractRelation

Activated dynamic scaling at an infinite-randomness fixed point, where the gap closes exponentially in a power of the length rather than as a power of it,

ln(1/Δ) ∼ ξ^ψ ⟹ d(ln[ln(1/Δ)])/d(ln ξ) = ψ.

This is not DynamicalScaling with some other z: no finite z describes such a point at all, since −d(ln Δ)/d(ln ξ) = ψ·ln(1/Δ) grows without bound.

Supplied-derivative convention: dloglogΔ_dlogξ is the caller-computed slope of ln[ln(1/Δ)] against ln ξ; Δ < 1 is required for the inner log.

Variables: dloglogΔ_dlogξ, ψ.

Reference: [2] Eq. (4.13), §4.1.3, which defines ψ by ln t_r ∼ ξ^ψ and gives ψ = 1/2 for the 1D random transverse-field Ising chain; that value is Fisher's, [1].

source
AbstractQAtlas.Criticality.ActivatedFiniteSizeScaling — Type
ActivatedFiniteSizeScaling <: AbstractRelation

Finite-size scaling of a TYPICAL observable at an infinite-randomness fixed point, on an open chain of length L:

ln O_typ(L) ∼ −L^ψ ⟹ d(ln[−ln O_typ])/d(ln L) = ψ.

The counterpart of FiniteSizeGap, and the contrast is the point: a conformal critical point closes its finite-size gap as a POWER of L (2πvx/L, periodic chain), an infinite-randomness one as a STRETCHED EXPONENTIAL on an open one. One sweep in L tells them apart.

This is not ActivatedDynamicalScaling restated. That relation is about the correlation length ξ, which diverges at criticality and so constrains nothing at δ = 0; this one is about the system size, the only scale left there. The review states them as separate equations.

Supplied-derivative convention: dloglogO_dlogL is the caller-computed slope of ln[−ln O_typ] against ln L; O_typ < 1 is required for the inner log.

Variables: dloglogO_dlogL, ψ.

Reference: [2] Eq. (A.17), §A.3, which states it for any infinite-disorder fixed point (L^ψ ln m as the scaling combination is §2.4). The 1D instances are Eq. (4.12) for the gap and Eq. (4.6) for the surface magnetization, both in §4.1 and both stated for free boundary conditions.

source
AbstractQAtlas.Criticality.ActivatedMomentGrowth — Type
ActivatedMomentGrowth <: AbstractRelation

The moment of a surviving cluster grows as a power of the LOG energy scale, μ ∼ |ln Ω|^φ, with

φ = (d − x_m)/ψ.

This is where the fixed point's irrational exponents come from: it is not that φ is separately measured, but that ψ converts a length dimension into a log-energy one. For the 1D random transverse-field Ising chain (d = 1, x_m = (3−√5)/4, ψ = 1/2) it returns the golden mean (1+√5)/2.

Written multiplied through by ψ, keeping the residual affine in every variable.

Reference: [2] Eq. (A.21), §A.3, where d − x_m is identified as the fractal dimension of the cluster. The golden mean it returns for the RTFIC is that review's Eq. (3.18), §3.5, reached by a different route.

Variables: φ, d, x_m, ψ.

source
AbstractQAtlas.Criticality.ActivatedSpecificHeat — Type
ActivatedSpecificHeat <: AbstractRelation

Low-temperature specific heat at an infinite-randomness fixed point,

c_V(T) ∼ (ln T)^{−d/ψ} ⟹ d(ln c_V)/d(ln|ln T|)·ψ + d = 0,

from the rare low-energy excitations being a distance L_T ∼ (ln T)^{1/ψ} apart, so c_V ∼ L_T^{−d}. Note what is absent: no exponent of the ordered phase enters, only d and ψ, so this reads ψ off thermodynamics with nothing else fitted.

Unchanged on the field axis, c_V(H) ∼ (ln H)^{−d/ψ} (Eq. (A.26)).

Variables: dlogc_dloglnT, d, ψ.

Reference: [2] Eq. (A.25), §A.3.

source
AbstractQAtlas.Criticality.ActivatedSusceptibility — Type
ActivatedSusceptibility <: AbstractRelation

Low-temperature susceptibility at an infinite-randomness fixed point: a Curie law times a POWER OF THE LOG of the temperature,

χ(T) ∼ (ln T)^{(d−2x_m)/ψ} / T ⟹ d(ln[χT])/d(ln|ln T|)·ψ − (d − 2x_m) = 0.

The rare regions each contribute a Curie term, so the 1/T is not a critical singularity at all and has to be divided out before the exponent is read. Doing that is what the supplied-derivative convention says: the slope of ln(χT) against ln|ln T|.

Variables: dlogχT_dloglnT, d, x_m, ψ.

Reference: [2] Eq. (A.25), §A.3.

source
AbstractQAtlas.Criticality.CTheorem — Type
CTheorem <: AbstractInequality

Zamolodchikov's c-theorem (Zamolodchikov, JETP Lett. 43, 730 (1986)): the central charge decreases monotonically along renormalization-group flow from the ultraviolet to the infrared fixed point,

c_UV ≥ c_IR

(slack c_UV − c_IR). Irreversibility of RG flow — c counts the massless degrees of freedom, which can only be integrated out.

Variables: c_IR (the bounded one), c_UV.

source
AbstractQAtlas.Criticality.CardyDensityOfStates — Type
CardyDensityOfStates <: AbstractRelation

Cardy's asymptotic density of states of a 2D CFT (Cardy, [53]): the number of states at large scaling dimension Δ grows as

ln ρ(Δ) = 2π √(c Δ / 6)

(the modular-invariance image of the ground-state Casimir energy; fixes the microcanonical entropy of a CFT from its central charge c).

Variables: ln_ρ = ln ρ(Δ), c, Δ.

source
AbstractQAtlas.Criticality.CasimirCentralCharge — Type
CasimirCentralCharge <: AbstractRelation

The universal finite-size (Casimir) correction to the ground-state energy density of a periodic 1D critical chain reads off the central charge,

e₀(L) = e_∞ − π c v / (6 L²)

(Blöte, Cardy & Nightingale, [54]; Affleck, [55]). Supplied-value convention: dE = e₀(L) − e_∞ is the caller-computed finite-size correction to the ground-state energy per site.

Variables: dE, c, v, L.

source
AbstractQAtlas.Criticality.ConventionalFieldSpecificHeat — Type
ConventionalFieldSpecificHeat <: AbstractRelation

Specific heat of a conventional random quantum critical point against a small ordering field,

c_V(H) ∼ H^{−α/[ν(d+z−x_m)]}.

Same field length as ConventionalFieldSusceptibility, so the pair over-determines d + z − x_m from field sweeps alone, exactly as CriticalQuantumSusceptibility and CriticalQuantumSpecificHeat over-determine νz from temperature ones.

Variables: dlogc_dlogH, α, ν, d, z, x_m.

Reference: [2] Eq. (A.15), §A.2.

source
AbstractQAtlas.Criticality.ConventionalFieldSusceptibility — Type
ConventionalFieldSusceptibility <: AbstractRelation

Susceptibility of a conventional random quantum critical point against a small ORDERING FIELD rather than against temperature,

χ(H) ∼ H^{−γ/[ν(d+z−x_m)]}.

The denominator is the whole difference from CriticalQuantumSusceptibility: a field couples to the order parameter over a correlation volume, so the length it sets is L_H ∼ H^{−1/(d+z−x_m)} rather than the thermal L_T ∼ T^{−1/z}. The two are independent readings of z, and x_m enters only the field one.

Variables: dlogχ_dlogH, γ, ν, d, z, x_m.

Reference: [2] Eq. (A.15), §A.2.

source
AbstractQAtlas.Criticality.ConventionalFiniteSizeEnergy — Type
ConventionalFiniteSizeEnergy <: AbstractRelation

The finite-size energy scale of a random system whose excitations are localized,

Ω ∼ L^{−z} ⟹ d(ln Ω)/d(ln L) = −z.

The size-space counterpart of DynamicalScaling, and the form ActivatedFiniteSizeScaling replaces. Unlike FiniteSizeGap it carries no amplitude, so it applies where there is no conformal field theory to supply one: any z, periodic or open.

Variables: dlogΩ_dlogL, z.

Reference: [2] Eq. (A.8), §A.2, restated as Eq. (A.30), §A.4.1 for the Griffiths phase and as Eq. (A.38), §A.5 for the large-spin phase. One form, three fixed points.

source
AbstractQAtlas.Criticality.CriticalAutocorrelation — Type
CriticalAutocorrelation <: AbstractRelation

Autocorrelation decay at a conventional random critical point,

G(t) ∼ t^{−2x_m/z} ⟹ d(ln G)/d(ln t)·z + 2x_m = 0.

Both exponents enter, so a measured decay reads neither alone: pair it with ConventionalFiniteSizeEnergy for z, or with OrderParameterDimension for x_m. Multiplied through by z to stay affine in each variable.

Variables: dlogG_dlogt, x_m, z.

Reference: [2] Eq. (A.13), §A.2. Contrast ActivatedAutocorrelation, where t is replaced by ln t, and GriffithsAutocorrelation, where 2x_m is replaced by d.

source
AbstractQAtlas.Criticality.CriticalCorrelationDecay — Type
CriticalCorrelationDecay <: AbstractRelation

⟨C(r)⟩ ∼ r^{-2 x_m}, so d ln⟨C⟩/d ln r = -2 x_m ([2], Eq. (A.6); §A.3 carries it to an infinite-randomness point, where the average is dominated by rare pairs).

The AVERAGE correlation. Not interchangeable with ActivatedCriticalCorrelation, the typical one: the correlation function is non-self-averaging here, so the two read different exponents off one ground state.

Distance is a third scale, neither the L of ActivatedFiniteSizeScaling nor the ξ of ActivatedDynamicalScaling, which diverges at criticality.

Variables: dlogC_dlogr (caller-computed), x_m.

source
AbstractQAtlas.Criticality.CriticalQuantumSusceptibility — Type
CriticalQuantumSusceptibility <: AbstractRelation

Low-temperature susceptibility at a conventional random QUANTUM critical point,

χ(T) ∼ T^{−γ/νz} ⟹ d(ln χ)/d(ln T)·νz + γ = 0,

from T setting an energy scale and hence a thermal length L_T ∼ T^{−1/z}. The z is what makes this a quantum statement: at z = 1 it is the classical χ ∼ |t|^{−γ} read along the temperature axis.

Variables: dlogχ_dlogT, γ, ν, z.

Reference: [2] Eq. (A.14), §A.2. The Griffiths-phase counterpart is GriffithsSusceptibility and the infinite-randomness one is ActivatedSusceptibility; all three are different forms, not different values.

source
AbstractQAtlas.Criticality.CriticalSelfAveraging — Type
CriticalSelfAveraging <: AbstractRelation

R_X ∼ L^{α/ν} at criticality when the randomness is IRRELEVANT, so d ln R_X/d ln L = α/ν ([56]).

The exponents are the PURE system's, so they are α_pure and ν_pure and stay untyped: SpecificHeatExponent elsewhere in the registry means the system under study, and at a random fixed point that is a different number. Wiseman and Domany conjectured this form with the random fixed point's exponents; [56] and the simulations in [57] both contradict it, the width going to a constant there instead.

At α = 0, the marginal case this literature is largely about, the residual does not depend on ν and a passing check says nothing about it.

Variables: dlogR_dlogL (caller-computed), α_pure, ν_pure.

source
AbstractQAtlas.Criticality.DynamicalScaling — Type
DynamicalScaling <: AbstractRelation

The dynamical-exponent scaling of the gap with the correlation length on approach to a quantum critical point,

Δ ∼ ξ^{−z} ⟹ d(ln Δ)/d(ln ξ) = −z.

Supplied-derivative convention: dlogΔ_dlogξ is the caller-computed log–log slope of the gap against the correlation length. Reads the dynamical critical exponent z off measured (Δ, ξ) pairs.

Holds only where a finite z exists; see ActivatedDynamicalScaling for the infinite-randomness case, where none does.

Variables: dlogΔ_dlogξ, z.

Reference: [2] Eq. (4.14), §4.1.3 — t_r ∼ ξ^z, the same statement one inverse-time up.

source
AbstractQAtlas.Criticality.FiniteSizeGap — Type
FiniteSizeGap <: AbstractRelation

The finite-size energy gap of a periodic 1D critical chain gives the scaling dimension of the corresponding operator,

E_x(L) − E₀(L) = 2π v x / L

(Cardy, [53]): each primary/descendant with scaling dimension x appears as a level whose gap closes as 1/L with a universal amplitude 2πvx. Reads x off the measured finite-size gap.

Variables: gap = E_x(L) − E₀(L), x, v, L.

source
AbstractQAtlas.Criticality.Fisher — Type
Fisher <: AbstractRelation

The Fisher identity γ = ν(2 − η), relating the susceptibility to the correlation function that produces it.

Reference: [58] (J. Math. Phys. 5, 944).

source
AbstractQAtlas.Criticality.FixedPointDisorderStrength — Type
FixedPointDisorderStrength <: AbstractRelation

At a fixed point where the low-energy excitations are LOCALIZED, the disorder strength stops flowing at a finite value tied to the dynamical exponent,

D = z/d.

This is the statement that separates the two random fixed points that are not infinite-randomness ones. A conventional random critical point and a Griffiths phase both reach it, from the same argument: the gap distribution P(ε) ∼ ε^{−1+d/z} is a fixed point of the rescaling only at this D. An infinite-randomness point is exactly where it fails, D running away as the scale grows, and that is what makes z infinite there and ActivatedExponent the exponent that survives.

Variables: D, z, d.

Reference: [2] Eq. (A.10), §A.2 (conventional random critical scaling) and restated below Eq. (A.29), §A.4.1, for the Griffiths phase. The contrast is Eq. (A.18), §A.3.

source
AbstractQAtlas.Criticality.GriffithsAutocorrelation — Type
GriffithsAutocorrelation <: AbstractRelation

Autocorrelation decay in a Griffiths phase,

G(t) ∼ t^{−d/z} ⟹ d(ln G)/d(ln t)·z + d = 0.

A power law with a CONTINUOUSLY VARYING exponent: z = z(δ) depends on the distance from criticality, so unlike every other relation here the exponent is not universal, only the form is. Averaging exp(−t/t_r) over the algebraic tail p(t_r) ∼ t_r^{−d/z−1} of rare-region relaxation times is where it comes from, which is also why the decay is set by d rather than by x_m.

Reads the same z as GriffithsSusceptibility and GriffithsSpecificHeat, off dynamics rather than thermodynamics.

Variables: dlogG_dlogt, d, z.

Reference: [2] Eq. (A.27), §A.4.1. In the ORDERED Griffiths phase of a chain the same argument gives 2/z instead of d/z, because isolating a domain costs two weak bonds rather than a surface.

source
AbstractQAtlas.Criticality.GriffithsExponentDivergence — Type
GriffithsExponentDivergence <: AbstractRelation

Why the Griffiths dynamical exponent varies continuously and why it stops existing at the fixed point,

z ∼ ξ^ψ ∼ |δ|^{−νψ} ⟹ d(ln z)/d(ln|δ|) = −νψ.

Off criticality z(δ) is finite and non-universal, so DynamicalScaling holds with a z that drifts with distance from the transition; as δ → 0 it diverges, and ActivatedDynamicalScaling is what remains. The two dynamic scalings are endpoints of one law, and νψ is the rate.

Supplied-derivative convention: dlogz_dlogδ is the caller-computed log–log slope of z against |δ|.

Reference: [2] Eq. (9.5), §9.1.2. In 1D the Griffiths exponent is known in closed form, 1/z = 2|δ| (stated with Eq. (4.51), §4.4.2), whose slope is −1 — which is −νψ at that chain's ν = 2, ψ = 1/2.

Variables: dlogz_dlogδ, ν, ψ.

source
AbstractQAtlas.Criticality.GriffithsSpecificHeat — Type
GriffithsSpecificHeat <: AbstractRelation

The companion singularity in the same phase, s(T) ∼ c_V(T) ∼ T^{d/z}:

d(ln c_V)/d(ln T) = d/z.

Reads the same z as GriffithsSusceptibility off a different observable, which is the point — a z fitted from one alone is a fit, and the two together are a check. Multiplied through by z, as there.

Reference: [2] Eq. (4.51), §4.4.2 (s(T) ∼ c_V(T), so this reads the entropy too), under the same z → z/d of §9.1.2.

Variables: dlogc_dlogT, d, z.

source
AbstractQAtlas.Criticality.GriffithsSusceptibility — Type
GriffithsSusceptibility <: AbstractRelation

The Griffiths-phase susceptibility singularity, χ(T) ∼ T^{−1+d/z}, which is what makes a continuously varying z measurable:

d(ln χ)/d(ln T) = −1 + d/z.

Divergent for z > d and finite for z < d, so the Griffiths phase has a line inside it at z = d across which χ stops diverging while nothing else happens. Multiplied through by z, which keeps the residual affine in every variable (so generic solve works) and finite at z = 0.

The same combination on other axes is this relation too: the gap DISTRIBUTION P(ε) ∼ ε^{−1+d/z} (Eq. (A.29)), which is where the rest comes from, and the field-driven χ(H) ∼ H^{−1+d/z} (Eq. (A.33)).

Reference: [2] Eq. (4.56), §4.4.2, written there for the 1D chain, and Eq. (A.32), §A.4.1 in d dimensions. §9.1.2 states the d-dimensional form as the replacement z → z/d in Eqs. (4.51), (4.55) and (4.56), which is the d carried here.

Variables: dlogχ_dlogT, d, z.

source
AbstractQAtlas.Criticality.Josephson — Type
Josephson <: AbstractRelation

The Josephson (hyperscaling) identity 2 − α = d·ν, for a CLASSICAL critical point, below the upper critical dimension; at and above it mean-field exponents satisfy it only at d = d_upper (4 for Ising).

Its d counts the directions of the system it is about, so at a quantum critical point that is the classical IMAGE's: a chain maps to 2D Ising and takes 2, not 1. Given the chain's own d it reports a violation, correctly, classical hyperscaling not being what a quantum critical point obeys. That law is QuantumHyperscaling.

Reference: [59] (Proc. Phys. Soc. 92, 269, "Inequality for the specific heat: I. Derivation"), again an inequality first, 2 − α ≥ dν.

source
AbstractQAtlas.Criticality.LargeSpinMoment — Type
LargeSpinMoment <: AbstractRelation

The large-spin fixed point of a random chain with mixed ferromagnetic and antiferromagnetic couplings, where renormalization grows an effective spin rather than freezing singlets: S_eff ∼ L^{dζ} with Ω ∼ L^{−z} gives

S_eff ∼ Ω^{−κ}, κ = dζ/z.

The fourth kind of random fixed point, and the only one whose order parameter GROWS under renormalization. ζ = 1/2 follows from a random-walk argument on the signs of the couplings.

Variables: κ, d, ζ, z.

Reference: [2] Eqs. (A.37) and (A.38), §A.5; the 1D instance is Eqs. (8.6)-(8.8), §8.2, where ζ = 1/2 and κ = 0.22(1) is measured, giving z = 1/(2κ).

source
AbstractQAtlas.Criticality.OrderParameterDimension — Type
OrderParameterDimension <: AbstractRelation

The order-parameter exponent is its scaling dimension times the correlation exponent, β = ν·x_m, which is what the finite-size and the thermodynamic readings of one scaling form have to agree on: m(δ) ∼ δ^β as L → ∞, and m(δ=0, L) ∼ L^{−x_m} at fixed δ = 0.

Holds verbatim at a SURFACE with x_m replaced by the surface dimension x_m^s, giving β_s = ν·x_m^s (see SurfaceMagnetization). The two readings are independent measurements, so this is a check and not a definition.

Variables: β, ν, x_m.

Reference: [2] Eq. (A.11) and the paragraph below it, which states both the bulk and the surface form; the 1D instances are Table 1 (§4.1.2), where β = νx_m and β_s = νx_m^s are checked against each other.

source
AbstractQAtlas.Criticality.OrderedGriffithsEnergyScale — Type
OrderedGriffithsEnergyScale <: AbstractRelation

The ORDERED Griffiths phase above one dimension has an energy scale that is neither a power of the size nor a stretched exponential in it, but a power of the LOG of it,

|ln Ω| ∼ (ln L)^{1/d} ⟹ d(ln|ln Ω|)/d(ln ln L)·d = 1.

A fifth functional form, and the reason the ordered and the disordered Griffiths phases are not mirror images: isolating an ordered cluster of l^d sites needs a moat of width ∼ l^d, so the cost goes as l^{d²} and the rare-region statistics change shape. At d = 1 the slope is 1 and the law collapses back to ConventionalFiniteSizeEnergy, a plain power of L.

Variables: dloglogΩ_dloglogL, d.

The same |ln Ω| ∼ (ln L)^x form turns up elsewhere with an exponent that is not 1/d (§9.3 quotes x = 2 and x = 3/2 as conjectures for a 2D Dirac problem), where it reads as a divergent z or a vanishing ψ. This relation is the case where x is derived rather than fitted.

Reference: [2] Eq. (A.35), §A.4.2, with the companion autocorrelation G(t) ∼ exp(−A|ln t|^d) of Eq. (A.34) (= Eq. (9.7), §9.1.3).

source
AbstractQAtlas.Criticality.PseudocriticalWidthScaling — Type
PseudocriticalWidthScaling <: AbstractRelation

δT_c(L) ∼ L^{-1/ν}, so d ln δT_c/d ln L = -1/ν, where δT_c is the width of the sample-to-sample distribution of pseudocritical temperatures ([57], measured directly).

Not L^{-d/2}, the central-limit answer, which holds only where the Harris criterion does. The two are close and the measurement has to be good enough to tell them apart: the site-dilute Ising model in d = 3 gives 1.449(8) against d/2 = 1.5, six of its own errors away, agreeing with that model's separately fitted 1/ν = 1.467(5).

Variables: dlogδTc_dlogL (caller-computed), ν.

source
AbstractQAtlas.Criticality.QuantumHyperscaling — Type
QuantumHyperscaling <: AbstractRelation

Hyperscaling at a QUANTUM critical point, where imaginary time is a direction of the critical theory with its own exponent:

2 − α = (d + z)·ν.

Josephson about the same physics, taking the system's OWN d and z and summing them rather than the image's dimension pre-summed. That is what makes one exponent table plus (d, z) answer both, with neither handed a number meaning the other's system. z = 0 reduces the formula to Josephson, which is algebra and not a limit any quantum critical point reaches (Δ ∼ ξ^{-z} would never close); Josephson's d for a quantum system is its image's, not this one's with z zeroed. No finite z exists at an infinite-randomness fixed point (ActivatedExponent), so neither form applies there.

Variables: α, ν, d, z.

Reference: [60]; the Euclidean action of a d-dimensional quantum system at T = 0 lives in d + z EFFECTIVE directions, z being generally non-integer, so the count is scaling-theoretic and not geometric.

source
AbstractQAtlas.Criticality.Rushbrooke — Type
Rushbrooke <: AbstractRelation

The Rushbrooke identity α + 2β + γ = 2.

Reference: [61] (J. Chem. Phys. 39, 842), where it is derived thermodynamically as the INEQUALITY α′ + 2β + γ′ ≥ 2; equality is the scaling hypothesis, not the 1963 result.

residual(Rushbrooke(); α=0//1, β=1//8, γ=7//4)   # == 0//1 (2D Ising, exact)
solve(Rushbrooke(), Val(:γ); α=0//1, β=1//8)     # == 7//4
source
AbstractQAtlas.Criticality.StrongSelfAveraging — Type
StrongSelfAveraging <: AbstractRelation

R_X ∼ (L/ξ)^{-d} for L ≫ ξ, so d ln R_X/d ln(L/ξ) = -d, where R_X = Var(X)/[X]² over an ensemble of samples (Aharony & Harris, [56]).

Off criticality only, and the abscissa is L/ξ rather than L, which is also what keeps this slope a different variable from CriticalSelfAveraging's: one number cannot be both, and a graph that shared the name would read an off-critical law off a critical measurement.

Variables: dlogR_dlogLξ (caller-computed), d.

source
AbstractQAtlas.Criticality.TypicalCorrelationLength — Type
TypicalCorrelationLength <: AbstractRelation

At an infinite-randomness fixed point the typical correlation length is an anomalous POWER of the average one,

ξ_typ ∼ ξ^{1−ψ} ∼ |δ|^{−ν(1−ψ)} ⟹ ν_typ = ν(1 − ψ).

So C_typ(r) still decays exponentially off criticality — it is the length that is anomalous, not the functional form. ν_typ < ν for any ψ > 0: the typical correlation length is the SMALLER of the two, and the two coincide only where ψ = 0, i.e. where the fixed point is not infinite-randomness at all.

Reference: [2] Eq. (9.4), §9.1.2 — derived in d dimensions, and restated in the scaling-theory appendix just below Eq. (A.21). Not a 1D statement. The 1D values it is checked against are Table 1 (§4.1.2): ν = 2 is Eq. (4.9) and ν_typ = 1 is Eq. (4.10), obtained separately.

Variables: ν_typ, ν, ψ.

source
AbstractQAtlas.Criticality.WeinribHalperinExponent — Type
WeinribHalperinExponent <: AbstractRelation

When spatially correlated disorder IS relevant, the correlation-length exponent it flows to is fixed by the correlation decay alone,

ν = 2/ρ for G_d(r) ∼ r^{−ρ} with ρ < 2/ν_unc,

where ν_unc is the correlation-length exponent of the same model with UNCORRELATED disorder, not the clean ν₀ that HarrisCriterion takes.

The companion of WeinribHalperinCriterion, which decides whether that ρ matters at all: the criterion's marginal line ρ = 2/ν and this relation are the same equation, so the new exponent is exactly where the perturbation stops being relevant. Nothing about the clean model survives except through the threshold, which is why correlated disorder makes a new universality class rather than shifting the old one.

Not a 1D statement. The review derives it for the random transverse-field chain and then states it holds in higher dimensions too, on the general argument of Weinrib and Halperin ([46]).

Variables: ν_dis, ρ.

Reference: [2] Eq. (10.3), §10.1 for the 1D case and the paragraph below it for the general one; the relevance threshold is Eq. (10.2).

source
AbstractQAtlas.Criticality.exponents_consistent — Method
exponents_consistent(nt::NamedTuple; d, atol=0) -> Bool

Gate-check a CriticalExponents-style NamedTuple (α, β, γ, δ, ν, η) against all scaling relations at spatial dimension d. A thin wrapper over the generic registry sweep (check_all with domain = :scaling); kept as the domain-specific entry point atlases gate their exponent tables with.

source
AbstractQAtlas.Criticality.exponents_consistent — Method
exponents_consistent(s::ScalingDimensions; atol=0) -> Bool
exponents_consistent(s::InfiniteRandomness; atol=0) -> Bool

The same gate run on a fixed point that carries its own d, so the dimension cannot be restated wrongly at the call site. Equivalent to exponents_consistent(critical_exponents(s); d = s.d).

This is the door to prefer. Passing a bare NamedTuple leaves d to the caller, and a sweep silently SKIPS every relation whose variables are not all present (see applicable_relations), so forgetting d does not fail; it just stops checking every relation that needs it, which is most of the Appendix-A block.

source
AbstractQAtlas.Correlations — Module

Correlations, Green's functions and response: the spectral graph (Dyson, A=−ImG/π), the Keldysh RAK structure + fluctuation–dissipation, Wick / Bloch–De Dominicis (Gaussian factorization), Kramers–Kronig, detailed balance.

source
AbstractQAtlas.Correlations.AdvancedRetardedConjugate — Type
AdvancedRetardedConjugate <: AbstractRelation

The advanced propagator is the adjoint of the retarded one, G^A(ω) = conj(G^R(ω)) (scalar; (G^R)† in orbital space). So G^R − G^A = 2i Im G^R and the spectral weight is real.

Variables: GA, GR. (Complex-valued residual.)

source
AbstractQAtlas.Correlations.BoseEinsteinContraction — Type
BoseEinsteinContraction <: AbstractRelation

The finite-temperature two-point contraction for bosons — the mode occupation seeding the thermal Wick permanent,

⟨a†_ε a_ε⟩ = n_B(ε) = 1/(e^{βε} − 1) (ε > 0).

Variables: n, ε, β (or T).

source
AbstractQAtlas.Correlations.CorrelationLengthGap — Type
CorrelationLengthGap <: AbstractRelation

The correlation length of a gapped phase set by the gap and velocity,

ξ = v / Δ,

the real-space decay length of a relativistic dispersion E(k) = √(Δ² + v²k²) (⟨O(r)O(0)⟩ ∼ e^{−r/ξ}). A staple consistency check for a gapped MPS/DMRG calculation: the measured correlation length and the measured gap must satisfy ξΔ = v.

Variables: ξ, v, Δ.

source
AbstractQAtlas.Correlations.DetailedBalance — Type
DetailedBalance <: AbstractRelation

The finite-temperature detailed-balance condition on the dynamical structure factor,

S(q, −ω) = e^{−βω} S(q, ω),

a convention-independent consequence of the fluctuation–dissipation theorem. Variables: S_plus = S(q, ω), S_minus = S(q, −ω), ω, and β (or T).

source
AbstractQAtlas.Correlations.DynamicalFDT — Type
DynamicalFDT <: AbstractRelation

The finite-temperature fluctuation–dissipation theorem relating the dynamical structure factor to the dissipative part of the dynamical susceptibility,

S(q, ω) = χ''(q, ω) / [π (1 − e^{−βω})]

(Callen & Welton, [17]). Since χ'' is odd in ω, this convention reproduces detailed balance S(q,−ω) = e^{−βω} S(q, ω) (DetailedBalance) automatically.

Variables: S = S(q, ω), χpp = χ''(q, ω), ω, and β (or T).

source
AbstractQAtlas.Correlations.Dyson — Type
Dyson <: AbstractRelation

The Dyson equation relating the full and bare propagators through the self-energy, at fixed (q, ω):

G^{-1} = G₀^{-1} − Σ.

Written with inv rather than 1/…, so the SAME identity is honest about the orbital-tensor character of the propagators: it holds verbatim for scalar (single-band) G, G0, Σ AND for matrix-valued G_ab, Σ_ab in orbital/band space — residual returns the residual matrix, whose norm should vanish. (check/solve are scalar; matrix inputs use residual + a norm.) Complex-valued.

source
AbstractQAtlas.Correlations.FSumRule — Type
FSumRule <: AbstractRelation

The f-sum rule — the first frequency moment of the dynamical structure factor,

∫ ω S(q, ω) dω = N q² / (2m)

(ℏ = 1; N particles of mass m, with N = 1 the per-particle form). A model-independent identity: the first moment equals ½⟨[[H, ρ_q], ρ_{−q}]⟩, and for a q²/2m kinetic energy that double commutator is N q²/m regardless of the interactions (Pines & Nozières, The Theory of Quantum Liquids 1966; Thomas–Reiche–Kuhn 1925). Supplied-integral convention: first_moment = ∫ ω S(q, ω) dω is the caller-computed first moment at fixed q.

Variables: first_moment, q, m, N = 1.

source
AbstractQAtlas.Correlations.FermiDiracContraction — Type
FermiDiracContraction <: AbstractRelation

The finite-temperature two-point contraction of the Bloch–De Dominicis theorem (Bloch & De Dominicis, [63]) for fermions — the mode occupation that seeds the thermal Wick determinant/Pfaffian,

⟨c†_ε c_ε⟩ = n_F(ε) = 1/(e^{βε} + 1).

Variables: n, ε, β (or T).

source
AbstractQAtlas.Correlations.KMSGreaterLesser — Type
KMSGreaterLesser <: AbstractRelation

The Kubo–Martin–Schwinger / detailed-balance relation between the equilibrium greater and lesser correlators,

G^<(ω) = ζ e^{−βω} G^>(ω), ζ = +1 (bosons), ζ = −1 (fermions).

This is the root of the Keldysh FDT: with the RAK identities it forces G^K/(G^R − G^A) = (1 + ζe^{−βω})/(1 − ζe^{−βω}), which is exactly coth(βω/2) (ζ=+1) or tanh(βω/2) (ζ=−1) — see keldysh_distribution and KeldyshFDT. Mirrors the structure-factor DetailedBalance S(−ω) = e^{−βω} S(ω) on the propagator side.

Variables: Gles, Ggtr, ζ, ω, and β (or T).

source
AbstractQAtlas.Correlations.KeldyshCausality — Type
KeldyshCausality <: AbstractRelation

The retarded–advanced difference equals the greater–lesser difference, G^R − G^A = G^> − G^< — the (un-normalized) spectral weight, an identity independent of the state.

Variables: GR, GA, Ggtr, Gles.

source
AbstractQAtlas.Correlations.KeldyshComponent — Type
KeldyshComponent <: AbstractRelation

Definition of the Keldysh component from the greater/lesser correlators, G^K = G^> + G^< — an identity on the whole contour (equilibrium or not).

Variables: GK, Ggtr (G^>), Gles (G^<).

source
AbstractQAtlas.Correlations.KeldyshDistributionEquilibrium — Type
KeldyshDistributionEquilibrium <: AbstractRelation

The equilibrium value of the Keldysh distribution function,

h(ω) = coth(βω/2) (bosonic) or tanh(βω/2) (fermionic),

i.e. keldysh_distribution written as a relation so a supplied h can be checked rather than assumed.

KeldyshFDT alone cannot do this. It reads h as given, so it holds out of equilibrium by construction; this one is what makes "the system is thermal" a falsifiable claim about the same h.

Variables: h, ω, β (or T), stat (Fermionic / Bosonic).

source
AbstractQAtlas.Correlations.KeldyshFDT — Type
KeldyshFDT <: AbstractRelation

The fluctuation–dissipation theorem in Keldysh form: in equilibrium the Keldysh component is fixed by the spectral part through the distribution function h,

G^K(ω) = h(ω) · (G^R(ω) − G^A(ω)),

with h = coth(βω/2) (bosons) or tanh(βω/2) (fermions), supplied by keldysh_distribution. Fluctuation (G^K) on the left, dissipation (G^R − G^A ∝ Im G^R) on the right — the two are not independent in thermal equilibrium.

Supplied-h convention, and the caveat that comes with it: h here is whatever the caller says the distribution is, so this tests the FDT only when h was obtained independently. Setting h = G^K/(G^R − G^A) zeroes the residual for ANY state, a fully non-equilibrium one included, since that is the definition of h rather than a law about it. KeldyshDistributionEquilibrium is the half this one does not carry: it pins h to keldysh_distribution, and the two together are the theorem.

Variables: GK, h, GR, GA.

source
AbstractQAtlas.Correlations.KeldyshKineticGreater — Type
KeldyshKineticGreater <: AbstractRelation

The steady-state Keldysh Dyson (kinetic) equation for the greater propagator, G^>(ω) = G^R(ω) Σ^>(ω) G^A(ω) — the greater partner of KeldyshKineticLesser; together G^≷ fix the occupation and the in/out-scattering rates. Matrix-valued. Sgtr = Σ^> is a supplied component.

Variables: Ggtr (G^>), GR (G^R), Sgtr (Σ^>), GA (G^A).

source
AbstractQAtlas.Correlations.KeldyshKineticLesser — Type
KeldyshKineticLesser <: AbstractRelation

The steady-state Keldysh Dyson (kinetic) equation for the lesser propagator, G^<(ω) = G^R(ω) Σ^<(ω) G^A(ω) — the lesser self-energy Σ^< drives G^< (the occupation), the non-equilibrium generalization of the FDT lock; in equilibrium it reduces to KeldyshFDT/KMSGreaterLesser. Matrix-valued (a triple product). Sless = Σ^< is a supplied component (not a distinct named quantity).

Variables: Gless (G^<), GR (G^R), Sless (Σ^<), GA (G^A).

source
AbstractQAtlas.Correlations.KramersKronigImag — Type
KramersKronigImag <: AbstractRelation

The Kramers–Kronig relation fixing the imaginary part of a causal response function from the Hilbert transform of its real part,

χ''(ω) = −(1/π) P ∫ χ'(ω') / (ω' − ω) dω',

the companion of KramersKronigReal (Kronig, [64]; Toll, [65]). Supplied-integral convention: pv_real is the caller-computed principal-value Hilbert transform P ∫ χ'(ω')/(ω' − ω) dω'.

Variables: Imχ = χ''(ω), pv_real.

source
AbstractQAtlas.Correlations.KramersKronigReal — Type
KramersKronigReal <: AbstractRelation

The Kramers–Kronig relation fixing the real part of a causal (retarded, analytic-in-the-upper-half-plane) response function from the Hilbert transform of its imaginary part,

χ'(ω) = (1/π) P ∫ χ''(ω') / (ω' − ω) dω',

(Kronig, [64]; Toll, [65]). Applies to any causal response — the optical conductivity σ(ω), the susceptibility χ(ω), the retarded Green's function, the dielectric function ε(ω). Supplied-integral convention: pv_imag is the caller-computed principal-value Hilbert transform P ∫ χ''(ω')/(ω' − ω) dω'.

Variables: Reχ = χ'(ω), pv_imag.

source
AbstractQAtlas.Correlations.LangrethProductLesser — Type
LangrethProductLesser <: AbstractRelation

The lesser component of a contour product C = A·B, C^< = A^R B^< + A^< B^A (Langreth) — the non-equilibrium generation term. Matrix-valued. Variables: Cless, Aret, Bless, Aless, Badv.

source
AbstractQAtlas.Correlations.MassGapPositivity — Type
MassGapPositivity <: AbstractInequality

The spectral gap is non-negative,

Δ ≥ 0

(slack Δ), because Δ = E₁ − E₀ and E₀ is by definition the lowest level — so this is airtight rather than a modelling assumption. Saturated by any gapless phase. A measured Δ < 0 means the reported "ground state" was not the ground state: the variational state is above a level the solver missed, or two levels were ordered wrongly.

Stated on MassGap alone, NOT on the AbstractGap group. The sector-resolved gaps do not share it: SpinGap = E₀(Sᶻ=1) − E₀(Sᶻ=0) is negative whenever the ground state is polarised (a ferromagnet), and ChargeGap = E₀(N+1) + E₀(N−1) − 2E₀(N) is negative where E₀(N) is concave (phase separation). Both are excitation energies only when the reference sector holds the ground state, which is a statement about the model.

Variables: Δ.

source
AbstractQAtlas.Correlations.NMRExponent — Type
NMRExponent <: AbstractRelation

The dynamical scaling relation fixing the NMR spin–lattice relaxation exponent from the operator scaling dimension at a quantum critical point,

θ_NMR = 2 Δ_op − 1 (with 1/T₁ ∝ T^{θ_NMR} as T → 0).

Exact-arithmetic: Δ_op = 1//8 (1D TFIM QCP) gives θ_NMR = −3//4 exactly.

source
AbstractQAtlas.Correlations.NonequilibriumDistribution — Type
NonequilibriumDistribution <: AbstractRelation

The non-equilibrium parametrization of the Keldysh propagator by a DISTRIBUTION matrix F (the generalized, generally non-thermal, occupation),

G^K(ω) = G^R(ω) F(ω) − F(ω) G^A(ω).

This separates the spectral content (G^R, G^A) from the occupation (F); it reduces to the equilibrium KeldyshFDT G^K = h(G^R − G^A) when F = h(ω)·I is the thermal scalar distribution. Matrix-valued in orbital space (the ordering of the products is kept — F need not commute with G^{R,A}). F = Fdist is a supplied component. (Rammer & Smith, [66].)

Variables: GK (G^K), GR (G^R), Fdist (F), GA (G^A).

source
AbstractQAtlas.Correlations.ResponseRealityImag — Type
ResponseRealityImag <: AbstractRelation

The reality (parity) condition on the imaginary part of a causal response — the companion of ResponseRealityReal. From χ⁽ⁿ⁾(−ω⃗) = χ⁽ⁿ⁾(ω⃗)*, Im χ is ODD:

Im χ⁽ⁿ⁾(−ω⃗) = −Im χ⁽ⁿ⁾(ω⃗)

(linear: Im χ(−ω) = −Im χ(ω) — the dissipative part, the oddness the DetailedBalance/FDT convention already relies on). Pass Im_plus = Im χ⁽ⁿ⁾(ω⃗) and Im_minus = Im χ⁽ⁿ⁾(−ω⃗).

Variables: Im_plus, Im_minus.

source
AbstractQAtlas.Correlations.ResponseRealityReal — Type
ResponseRealityReal <: AbstractRelation

The reality (parity) condition on the real part of a causal response. The response of a real observable to a real field is real in time, so its Fourier transform is conjugate-symmetric under negating all frequencies, χ⁽ⁿ⁾(−ω⃗) = χ⁽ⁿ⁾(ω⃗)* — hence Re χ is EVEN:

Re χ⁽ⁿ⁾(−ω⃗) = Re χ⁽ⁿ⁾(ω⃗).

It holds at every order with the same shape (linear: Re χ(−ω) = Re χ(ω)). With ResponseRealityImag (Im χ odd) and intrinsic_permutation_symmetric (frequency exchange) this closes the model-independent symmetry web of the multi-time response functions (Kubo, J. Phys. Soc. Jpn. 12, 570 (1957)). Pass Re_plus = Re χ⁽ⁿ⁾(ω⃗) and Re_minus = Re χ⁽ⁿ⁾(−ω⃗).

Variables: Re_plus, Re_minus.

source
AbstractQAtlas.Correlations.SelfEnergyKeldyshFDT — Type
SelfEnergyKeldyshFDT <: AbstractRelation

The self-energy fluctuation–dissipation tie: in equilibrium the Keldysh self-energy is fixed by the retarded/advanced pair through the distribution function h,

Σ^K(ω) = h(ω) (Σ^R(ω) − Σ^A(ω)),

with h = coth(βω/2) (bosons) or tanh(βω/2) (fermions), supplied by keldysh_distribution. The self-energy mirror of KeldyshFDT (Rammer & Smith, [66]).

Variables: SigmaK (Σ^K), h, SigmaR (Σ^R), SigmaA (Σ^A).

source
AbstractQAtlas.Correlations.SpectralFromGreens — Type
SpectralFromGreens <: AbstractRelation

The spectral representation of the retarded Green's function at (q, ω):

A = −(1/π) Im G^R ⟺ A + Im(G^R)/π = 0.

Pass the full (complex) retarded Green's function G = G^R(q, ω) and the real spectral weight A; the imaginary part is taken in the kernel. Keyed on the RetardedGreensFunction TYPE — the same G as Dyson and the Keldysh relations, never a separate ImGR/GR symbol.

source
AbstractQAtlas.Correlations.SpectralFromKeldysh — Type
SpectralFromKeldysh <: AbstractRelation

The bridge between the Keldysh RAK components and the normalized spectral function A = −Im G^R/π (∫A dω = 1):

A(ω) = i (G^R(ω) − G^A(ω)) / (2π).

Reduces to SpectralFromGreens A = −Im G^R/π once G^A = conj(G^R) (AdvancedRetardedConjugate) is imposed, so the real-time and Matsubara spectral definitions agree.

Variables: A, GR, GA. (Complex-valued residual off equilibrium.)

source
AbstractQAtlas.Correlations.SpectralSumRule — Type
SpectralSumRule <: AbstractRelation

The single-band spectral normalization

∫ A(q, ω) dω = 1.

Supplied-integral convention: spectral_integral is the caller-computed frequency integral of the spectral function at fixed q.

source
AbstractQAtlas.Correlations.StaticFromDynamicalStructureFactor — Type
StaticFromDynamicalStructureFactor <: AbstractRelation

The static (equal-time) structure factor as the frequency integral of the dynamical one,

S(q) = ∫ S(q, ω) dω / (2π)

(Van Hove, [40]). Supplied-integral convention: sqw_integral = ∫ S(q, ω) dω/(2π) is the caller-computed frequency integral at fixed q.

Variables: Sq, sqw_integral.

source
AbstractQAtlas.Correlations.StaticStructureFactorFromCorrelation — Type
StaticStructureFactorFromCorrelation <: AbstractRelation

The static structure factor at zero wavevector as the spatial integral of the two-point correlation — the static fluctuation / compressibility sum rule,

S(q → 0) = ∫ G(r) dr

(Chaikin–Lubensky, Principles of Condensed Matter Physics). Supplied-integral convention: integral_G = ∫ G(r) dr is the caller-computed spatial integral of the correlation function (evaluating it is the functional sibling's job, issue #14). Together with StructureFactorSusceptibility (χ = β S(q→0)) this closes the static loop χ = ∫G(r)dr = S(q→0); the structural edge is spectral_origin(StaticStructureFactor).

Variables: Sq0, integral_G.

source
AbstractQAtlas.Correlations.TwoTerminalDistribution — Type
TwoTerminalDistribution <: AbstractRelation

The steady-state non-equilibrium distribution of a region coupled to two reservoirs L, R with level-broadenings Γ_L, Γ_R and occupations f_L, f_R,

f(ω) = [Γ_L(ω) f_L(ω) + Γ_R(ω) f_R(ω)] / [Γ_L(ω) + Γ_R(ω)],

the broadening-weighted average of the bath distributions — the non-thermal occupation that drives a current when f_L ≠ f_R (a bias), and the concrete F of NonequilibriumDistribution. Reduces to the common equilibrium occupation when f_L = f_R. (Haug & Jauho, Quantum Kinetics in Transport and Optics of Semiconductors.)

Variables: fdist (f), ΓL, fL, ΓR, fR.

source
AbstractQAtlas.Correlations.wick_contraction — Method
wick_contraction(G::AbstractMatrix, cr::AbstractVector{<:Integer},
                 an::AbstractVector{<:Integer}) -> Number

Wick's theorem for a number-conserving Gaussian fermion state with 2-point matrix G[i, j] = ⟨c†_i c_j⟩:

⟨c†_{cr[1]} ⋯ c†_{cr[n]} c_{an[n]} ⋯ c_{an[1]}⟩ = det(M), M[p, q] = G[cr[p], an[q]].

Ordering convention: creation operators appear left-to-right as cr[1], …, cr[n]; annihilation operators appear in reversed order an[n], …, an[1] (the nested ordering, so cr = [i], an = [j] gives ⟨c†_i c_j⟩ = G[i, j] and cr = an = [i, j] gives ⟨c†_i c†_j c_j c_i⟩ = ⟨n_i n_j⟩ for i ≠ j).

The state itself never enters — only G does. That is Wick's theorem: Gaussian states are fully determined by their 2-point data.

source
AbstractQAtlas.Correlations.wick_density_correlation — Method
wick_density_correlation(G::AbstractMatrix, i::Integer, j::Integer) -> Number

Density–density correlation of a number-conserving Gaussian fermion state from its 2-point matrix:

⟨n_i n_j⟩ = G_ii G_jj + G_ij (δ_ij − G_ji).

Derivation: for i ≠ j, Wick gives ⟨c†_i c†_j c_j c_i⟩ = G_ii G_jj − G_ij G_ji; for i = j, n_i² = n_i gives G_ii. Both cases are captured by the single formula above.

source
AbstractQAtlas.Correlations.wick_permanent — Method
wick_permanent(G::AbstractMatrix, cr::AbstractVector{<:Integer},
               an::AbstractVector{<:Integer}) -> Number

Wick's theorem for a Gaussian boson state with 2-point matrix G[i, j] = ⟨a†_i a_j⟩: the same sum over pairings as the fermionic wick_contraction but with all + signs, i.e. the PERMANENT instead of the determinant,

⟨a†_{cr[1]} ⋯ a†_{cr[n]} a_{an[n]} ⋯ a_{an[1]}⟩ = perm(M), M[p, q] = G[cr[p], an[q]].

(The Bose symmetry replaces the fermionic antisymmetric sign; at finite T the contraction is the Bose factor.)

source
AbstractQAtlas.Correlations.wick_pfaffian — Method
wick_pfaffian(A::AbstractMatrix) -> Number

The Pfaffian of a 2n × 2n antisymmetric matrix A — the number-non-conserving (BdG / paired) form of Wick's theorem: for a general Gaussian state the 2n-point Majorana correlation is the sum over all pairings, Pf(A), where A_ab = ⟨γ_a γ_b⟩ is the antisymmetric contraction matrix. Reduces to the wick_contraction determinant when the state is number-conserving (no anomalous ⟨cc⟩ pairing), since Pf(A)² = det(A).

Computed by the exact cofactor recursion Pf(A) = Σ_{j≥2} (−1)^j A_{1j} Pf(A_{1̂ĵ}) (small n; Pf = 0 for odd dimension, 1 for the empty matrix).

source
AbstractQAtlas.Transport — Module

Transport: DC/AC conductivity, thermal & thermoelectric coefficients, the Hall family, Onsager, Wiedemann–Franz, optical sum rule, Johnson–Nyquist.

source
AbstractQAtlas.Transport.CurrentNoiseFDT — Type
CurrentNoiseFDT <: AbstractRelation

The Johnson–Nyquist fluctuation–dissipation theorem — the fluctuation partner of the dissipative conductivity, the current-channel analogue of DynamicalFDT (S ↔ χ''). The symmetrized current-noise spectral density (CurrentNoise) is fixed by the real conductivity,

S^j(ω) = ω · coth(βω/2) · Re σ(ω),

(natural units ℏ = k_B = 1; Nyquist, [16]; Callen & Welton, [17]). The classical limit βω ≪ 1 gives the white Nyquist noise S^j = 2 T Re σ (ω coth(βω/2) → 2/β).

Variables: S_j = S^j(ω), Reσ = Re σ(ω), ω, β (or T).

source
AbstractQAtlas.Transport.EinsteinRelation — Type
EinsteinRelation <: AbstractRelation

The Einstein (Einstein–Smoluchowski) relation between mobility and the diffusion constant (Einstein, [67]),

μ = e D / k_B T = e D β,

the universal fluctuation–dissipation link for transport (DiffusionConstant D).

Variables: μ, e, D, and β (or T).

source
AbstractQAtlas.Transport.HallAngle — Type
HallAngle <: AbstractRelation

The Hall angle from the conductivity tensor,

tan θ_H = σ_xy / σ_xx (= ω_c τ in the Drude picture),

the ratio of the transverse (Hall) to longitudinal conductivity.

Variables: tanθ_H, σxy, σxx.

source
AbstractQAtlas.Transport.HallResistivity — Type
HallResistivity <: AbstractRelation

The Hall resistivity from the 2×2 magnetotransport tensor inversion,

ρ_xy = σ_xy / (σ_xx² + σ_xy²),

(standard quantum-Hall sign convention, ρ_xy and σ_xy carrying the same sign). A dissipationless Hall state (σ_xx = 0) gives the inverse Hall conductivity ρ_xy = 1/σ_xy.

Variables: ρxy, σxx, σxy.

source
AbstractQAtlas.Transport.IoffeRegel — Type
IoffeRegel <: AbstractInequality

The Mott–Ioffe–Regel criterion for coherent (metallic) transport (Ioffe & Regel, Prog. Semicond. 4, 237 (1960)): the mean free path must exceed the inverse Fermi wavevector,

k_F ℓ ≥ 1 (slack k_F ℓ − 1).

Its saturation k_F ℓ ≈ 1 marks the Mott–Ioffe–Regel limit, the breakdown of Boltzmann quasiparticle transport (the "bad-metal" regime).

Variables: kFℓ = k_F ℓ.

source
AbstractQAtlas.Transport.KelvinRelation — Type
KelvinRelation <: AbstractRelation

The Kelvin (second Thomson) relation — a consequence of Onsager reciprocity (Onsager, [68]) — tying the Peltier coefficient to the thermopower,

Π = T · S.

Variables: Π, S, T.

source
AbstractQAtlas.Transport.LongitudinalResistivity — Type
LongitudinalResistivity <: AbstractRelation

The longitudinal resistivity from the 2×2 magnetotransport tensor inversion ρ = σ⁻¹,

ρ_xx = σ_xx / (σ_xx² + σ_xy²),

(convention-free — the diagonal element of the inverse). In a dissipationless Hall state (σ_xx = 0) it vanishes.

Variables: ρxx, σxx, σxy.

source
AbstractQAtlas.Transport.MottFormula — Type
MottFormula <: AbstractRelation

The Mott formula for the diffusive thermopower (Cutler & Mott, [69]),

S = −(π²/3) · T · d ln σ(ε)/dε |_{ε_F},

(natural units k_B = e = 1, electron-like carriers), fixing the Seebeck coefficient from the energy derivative of the conductivity at the Fermi level.

Supplied-derivative convention: dlnσ_dε is the caller-computed d ln σ/dε |_{ε_F} (the conductivity's log-derivative at the Fermi level). Variables: S, dlnσ_dε, T.

source
AbstractQAtlas.Transport.OnsagerReciprocity — Type
OnsagerReciprocity <: AbstractRelation

Onsager reciprocity (Onsager, [68]; 38, 2265 (1931)): in the absence of a magnetic field the linear-transport matrix is symmetric,

L_{μν} = L_{νμ},

so a transport coefficient equals its index-transposed partner (σ_xy = σ_yx, κ_xy = κ_yx, …). In a field B the Onsager–Casimir form L_{μν}(B) = L_{νμ}(−B) holds instead.

Variables: L_μν, L_νμ.

source
AbstractQAtlas.Transport.OpticalSumRule — Type
OpticalSumRule <: AbstractRelation

The optical (f-sum) rule decomposing the frequency-integrated real conductivity into its Drude and regular parts,

∫ Re σ(ω) dω = π D + W_reg,

with D the DrudeWeight (the δ(ω) coefficient, Re σ = π D δ(ω) + σ^reg) and W_reg = ∫ σ^reg(ω) dω the regular spectral weight (Scalapino, White & Zhang, [18]).

Supplied-integral convention: sigma_integral = ∫ Re σ(ω) dω is the caller-computed f-sum weight (e.g. π n e²/m, or −π e²⟨T_kin⟩ on a lattice). Variables: sigma_integral, D, W_reg.

source
AbstractQAtlas.Transport.RighiLeduc — Type
RighiLeduc <: AbstractRelation

The Righi–Leduc (thermal Hall) effect: the thermal and electrical Hall conductivities obey the Wiedemann–Franz law in the transverse channel,

κ_xy = L₀ · T · σ_xy,

the off-diagonal companion of WiedemannFranz; L0 defaults to the same Sommerfeld π²/3, and supplying it carries the same caveat.

Variables: κxy, T, σxy, L0 (default π²/3).

source
AbstractQAtlas.Transport.VonKlitzing — Type
VonKlitzing <: AbstractRelation

The quantized Hall resistance of the integer quantum Hall effect (von Klitzing, Dorda & Pepper, [70]),

R_xy = h / (ν e²) = R_K / ν,

with the von Klitzing constant R_K = h/e² and the integer FillingFactor ν (R_xy·ν·e² = h).

Variables: Rxy, ν, e, h.

source
AbstractQAtlas.Transport.WiedemannFranz — Type
WiedemannFranz <: AbstractRelation

The Wiedemann–Franz law: the ratio of the thermal to the electrical conductivity is the temperature times the Lorenz number,

κ = L₀ · σ · T,

with the Sommerfeld value L₀ = π²/3 (in units k_B = e = 1; i.e. π²k_B²/3e²), which is L0's DEFAULT: omit it and this tests the law.

Supplying L0 does not test the law, it asserts a different Lorenz number, as a non-Fermi liquid has. Supplying κ/(σT) in particular makes the residual zero for any material, including one whose thermal conductivity is negative, so a pass there says nothing. Solving FOR L0 is the honest way to get that ratio out of a measurement.

Variables: κ, σ, T, L0 (default π²/3).

source
AbstractQAtlas.QuantumInformation — Module

Quantum information & entanglement: the entropy zoo, its inequalities, multipartite entanglement, measurement and topological entanglement entropy.

source
AbstractQAtlas.QuantumInformation.ArakiLieb — Type
ArakiLieb <: AbstractInequality

The Araki–Lieb triangle inequality, S(AB) ≥ |S(A) − S(B)| (slack S_AB − |S_A − S_B|; Araki & Lieb, [71]) — the lower companion of Subadditivity. Saturated when one subsystem purifies the other.

Variables: S_AB, S_A, S_B.

source
AbstractQAtlas.QuantumInformation.CFTEntanglementChordSlope — Type
CFTEntanglementChordSlope <: AbstractRelation

dS/d(ln[(L/π) sin(πℓ/L)]) = ncuts · c/6 (Calabrese & Cardy, [72]).

The finite-chain form. CFTEntanglementSlope carries no L and so cannot say how large ℓ may be, and out of range it returns a number rather than refusing: near ℓ = L the complement is a few sites and purity alone caps S, which no ncuts describes. This form holds over the whole chain and reduces to that one as ℓ/L → 0.

Variables: dS_dlogchord (caller-computed), c, ncuts.

source
AbstractQAtlas.QuantumInformation.CFTEntanglementInfinite — Type
CFTEntanglementInfinite <: AbstractRelation

The thermodynamic limit of CFTEntanglementPBC (Iglói & Lin, [73], Eq. 4):

S = (c/3) ln ℓ + c₁.

Still two cuts, and the same c₁: the chord tends to ℓ as ℓ ≪ L, so this is where the ring form goes rather than a separate law. It exists as its own relation because a bag on an infinite chain has no L to supply.

source
AbstractQAtlas.QuantumInformation.CFTEntanglementOBC — Type
CFTEntanglementOBC <: AbstractRelation

The same for the leftmost ℓ sites of a critical open chain of L (Iglói & Lin, [73], Eq. 3):

S = (c/6) ln[(2L/π) sin(πℓ/L)] + ln g + c₁/2.

Three things separate this from CFTEntanglementPBC, and only the first is the cut count: one cut gives c/6, the chord carries 2L/π rather than L/π, and an open chain has a boundary entropy ln g (Affleck & Ludwig) that a ring does not. c₁ is the same constant as in the ring, entering halved, so reading one geometry's data with the other's formula misses all three.

ln g and c₁ reach the residual only as the sum ln g + c₁/2, and neither depends on ℓ, so open-chain data cannot separate them at any number of block sizes: a caller who fits c₁ against this relation learns 2 ln g + c₁ and nothing more. c₁ has to come from the ring or the infinite chain, which is what "the same constant as in the ring" is for.

source
AbstractQAtlas.QuantumInformation.CFTEntanglementPBC — Type
CFTEntanglementPBC <: AbstractRelation

Entanglement entropy of a block of ℓ sites in a critical ring of L (Iglói & Lin, [73], Eq. 2):

S = (c/3) ln[(L/π) sin(πℓ/L)] + c₁.

Two cuts, hence c/3. c₁ is not universal and moves with the base (see the file header). As ℓ ≪ L the chord tends to ℓ and this becomes the infinite-chain S = (c/3) ln ℓ + c₁ of Eq. (4).

source
AbstractQAtlas.QuantumInformation.CFTEntanglementSlope — Type
CFTEntanglementSlope <: AbstractRelation

Logarithmic growth of a region's entanglement entropy in a 1D CFT, reading off the central charge (Calabrese & Cardy, [72]):

dS/d(ln ℓ) = ncuts · c/6.

ncuts counts the cuts bounding the region — set by where it sits, not by the chain's boundary condition:

regionncuts
one interval on a ring2c/3
block at an open end1c/6
block in the bulk of an open chain2c/3

The last row is the one "OBC ⇒ c/6" gets wrong.

Variables: dS_dlogℓ (caller-computed slope against ln ℓ), c, ncuts. c is the typed subject; VonNeumannEntropy arrives via the supplied derivative, hence also_constrains. For ℓ comparable to L this form is out of domain and CFTEntanglementChordSlope is the one to use. ncuts has no default: Region carries no adjacency or boundary, so nothing can compute it.

source
AbstractQAtlas.QuantumInformation.EntanglementSpectrumCorrelation — Type
EntanglementSpectrumCorrelation <: AbstractRelation

The free-fermion entanglement (single-particle) spectrum from the correlation-matrix eigenvalue ζ ∈ (0, 1) (Peschel, [15]),

ε = ln((1 − ζ)/ζ),

the eigenvalue of the quadratic entanglement Hamiltonian H_ent; inverting gives the Fermi-Dirac occupation ζ = 1/(e^ε + 1). A maximally-entangled mode ζ = ½ sits at ε = 0. Gaussian states only — the correlation matrix fixes ρ_A via Wick's theorem (wick_contraction).

Variables: ε, ζ.

source
AbstractQAtlas.QuantumInformation.EntropyMixingConcavity — Type
EntropyMixingConcavity <: AbstractInequality

Concavity of the von Neumann entropy — mixing states cannot decrease the entropy,

S(Σᵢ pᵢ ρᵢ) ≥ Σᵢ pᵢ S(ρᵢ)

(slack S_mix − S_avg; Wehrl, [74]). Saturated when every ρᵢ with pᵢ > 0 is the same state.

Variables: S_avg = the caller-supplied Σᵢ pᵢ S(ρᵢ) (the bounded one), S_mix = S(Σᵢ pᵢ ρᵢ).

source
AbstractQAtlas.QuantumInformation.HalvedChainEntropyDifference — Type
HalvedChainEntropyDifference <: AbstractRelation

Central charge from two chain lengths rather than from a fit (Iglói & Lin, [73], Sec. 3.1), with ΔS(L) = S_L(L/2) - S_{L/2}(L/4):

ΔS = ncuts · (c/6) ln 2.

Exact on the conformal forms, since halving the chain shifts the chord by a factor of two and the non-universal c₁ cancels: the estimator needs no constant, which is why the source uses it. The source reads ΔS = c/3 for a ring and c/6 for an open chain because it counts bits, where log₂ 2 = 1 absorbs the factor; in nats it does not, and dropping it returns c ln 2 for c. For the Ising chain that is (ln 2)/2, which is exactly the effective central charge of the random Ising chain, so the slip is numerically indistinguishable from having measured a different fixed point.

The finite-size approach differs by boundary condition in its exponent, not only its amplitude: the source measures c(L) = 1/2 - 0.623/L² + O(L⁻³) on a ring against c(L) = 1/2 + 1.339/L + O(L⁻²) on an open chain, so an open chain's leading correction is one power of L slower.

source
AbstractQAtlas.QuantumInformation.HolevoMixingBound — Type
HolevoMixingBound <: AbstractInequality

The upper companion of EntropyMixingConcavity: the entropy of a mixture exceeds the average component entropy by at most the classical mixing entropy,

S(Σᵢ pᵢ ρᵢ) ≤ Σᵢ pᵢ S(ρᵢ) + H(p), H(p) = −Σᵢ pᵢ ln pᵢ

(slack S_avg + H_weights − S_mix; Wehrl, [74]). Saturated when the ρᵢ have mutually orthogonal support; the gap S_mix − S_avg is the Holevo χ, bounded in [0, H(p)].

Variables: S_avg = Σᵢ pᵢ S(ρᵢ), H_weights = H(p), S_mix = S(Σᵢ pᵢ ρᵢ).

source
AbstractQAtlas.QuantumInformation.InfiniteRandomnessEntanglementPBC — Type
InfiniteRandomnessEntanglementPBC <: AbstractRelation

Finite-size entropy of a block in a random critical ring, at the infinite-randomness fixed point (Iglói & Lin, [73], Eq. 24):

S̄ = (c̃/3) ln[L f(ℓ/L)] + c₁′.

f is caller-supplied and is not the conformal chord. It is reflection symmetric, tends to v as v → 0, and expands as f(v) = Σₖ Aₖ sin((2k-1)πv) under Σₖ Aₖ(2k-1)π = 1, where the source notes that a conformally invariant model has only the first term. Keeping k = 1 forces A₁ = 1/π and returns L f = (L/π) sin(πℓ/L), which is CFTEntanglementPBC exactly, so at finite size the two differ by the higher harmonics and not by the coefficient alone.

Only the value of f reaches the relation, so L > 0 and f > 0 are all it can check and a small positive f still returns a large negative entropy; reached through finite_size_entropy_report, f is a callable sampled at v = ℓ/L from the region, which is where that is visible.

c̃ = (ln 2)/2 is reported universal here in a stronger sense than the slope alone requires, being independent of the form of the disorder, while c₁′ depends on it.

source
AbstractQAtlas.QuantumInformation.InfiniteRandomnessEntanglementSlope — Type
InfiniteRandomnessEntanglementSlope <: AbstractRelation

The same logarithmic growth at a one-dimensional infinite-randomness fixed point, with the effective central charge in place of the CFT one (Refael & Moore, [22]):

dS/d(ln ℓ) = ncuts · c̃/6.

No d slot, because there is no family to index: above one dimension the entropy obeys an area law, and whether the fixed point is reached at all is model-dependent and settled only numerically, the random transverse-field Ising model reaching one in d ≥ 2 where the random Heisenberg antiferromagnet does not ([2], Sec. 9).

The claim is the leading slope, not the finite-size form: see CFTEntanglementPBC and CFTEntanglementOBC for what else a boundary changes, none of which follows from a slope at a fixed point with no conformal map.

The fixed point is not conformally invariant, yet both the form and the geometry factor survive: ncuts means what it means in CFTEntanglementSlope, and only c becomes EffectiveCentralCharge. Refael and Moore's 2 ln √L (Eq. 13) is that same factor arriving from the RG, two cuts each contributing at Γ = √L; the source corrects that equation's rate three sentences later, and it is the two, which survives into Eq. (19), that is being leaned on here.

c̃ is measured per class, not derived: (ln 2)/2 for the random transverse field Ising chain, which grows as (ln 2/6) ln ℓ ≈ 0.1155 ln ℓ across two cuts, and ln 2 for the random singlet phase of the Heisenberg and XX chains. Both are ln 2 times the pure value, which the source reports for every chain it treats while calling a general law only possible, so that is not a relation here. c̃ is the same number in either base (see the file header).

Variables: dS_dlogℓ, c̃, ncuts; the entropy arrives through the supplied derivative, hence also_constrains. With a region and a boundary condition in hand, derive ncuts from entanglement_cuts rather than passing a literal.

source
AbstractQAtlas.QuantumInformation.KitaevPreskillTEE — Type
KitaevPreskillTEE <: AbstractRelation

The topological entanglement entropy from a tripartition (Kitaev & Preskill, [43]),

S_A + S_B + S_C − S_AB − S_BC − S_CA + S_ABC = −γ,

the universal constant γ = ln D isolated from the area law by the alternating tripartite sum (γ > 0 ⇒ topological order).

Variables: γ, S_A, S_B, S_C, S_AB, S_BC, S_CA, S_ABC.

source
AbstractQAtlas.QuantumInformation.MaxEntropyBound — Type
MaxEntropyBound <: AbstractInequality

The entropy of a subsystem cannot exceed the log of its Hilbert-space dimension, S ≤ ln d (slack ln d − S). Saturated by the maximally mixed state; the gap ln d − S is the maximal-entanglement deficit.

Variables: S, log_d = ln d.

source
AbstractQAtlas.QuantumInformation.Monogamy — Type
Monogamy <: AbstractInequality

The Coffman–Kundu–Wootters monogamy of entanglement (Coffman, Kundu & Wootters, [42]): the tangle of A with the rest bounds the sum of its pairwise tangles,

τ(A:BC) ≥ τ(A:B) + τ(A:C)

(slack τ_ABC − τ_AB − τ_AC = the ThreeTangle τ₃ ≥ 0). Entanglement cannot be freely shared.

Variables: τ_ABC, τ_AB, τ_AC.

source
AbstractQAtlas.QuantumInformation.RelativeEntropyNonNegativity — Type
RelativeEntropyNonNegativity <: AbstractInequality

Klein's inequality: the quantum relative entropy is non-negative,

S(ρ‖σ) ≥ 0,

(slack S_rel; zero iff ρ = σ). The bedrock positivity behind subadditivity and the second law (Lindblad, [36]; Vedral, [31]).

Variables: S_rel = S(ρ‖σ).

source
AbstractQAtlas.QuantumInformation.RenyiMonotonicity — Type
RenyiMonotonicity <: AbstractInequality

The Rényi entropy S_α is non-increasing in the order α: for α_low < α_high, S_{α_low} ≥ S_{α_high} (slack S_low − S_high). In particular S_0 ≥ S_1 (von Neumann) ≥ S_2 ≥ … ≥ S_∞.

Variables: S_high = S_{α_high} (the bounded one), S_low = S_{α_low} (with α_low < α_high).

source
AbstractQAtlas.QuantumInformation.RenyiTwoPurity — Type
RenyiTwoPurity <: AbstractRelation

The Rényi-2 entanglement entropy as (minus) the log purity,

S_2 = −ln Tr(ρ_A²) = −ln(purity)

— the n = 2 member of S_n = (1−n)⁻¹ ln Tr ρ_A^n, the one directly accessible from the Purity.

Variables: S2, purity.

source
AbstractQAtlas.QuantumInformation.StrongSubadditivity — Type
StrongSubadditivity <: AbstractInequality

Strong subadditivity of the quantum entropy, S(ABC) + S(B) ≤ S(AB) + S(BC) (slack S_AB + S_BC − S_ABC − S_B; Lieb & Ruskai, [75]) — equivalently the conditional mutual information I(A:C|B) ≥ 0. The deepest entropy inequality; the monogamy backbone of quantum information.

Variables: S_AB, S_BC, S_ABC, S_B.

source
AbstractQAtlas.QuantumInformation.Subadditivity — Type
Subadditivity <: AbstractInequality

Subadditivity of the von Neumann entropy, S(AB) ≤ S(A) + S(B) (slack S_A + S_B − S_AB — the mutual information I(A:B) ≥ 0; Araki & Lieb, [71]). Saturated by a product state ρ_AB = ρ_A ⊗ ρ_B.

Variables: S_A, S_B, S_AB.

source
AbstractQAtlas.QuantumInformation.WeakMonotonicity — Type
WeakMonotonicity <: AbstractInequality

Weak monotonicity of the quantum entropy, S(A) + S(C) ≤ S(AB) + S(BC) (slack S_AB + S_BC − S_A − S_C) — the purification dual of StrongSubadditivity (purify C; SSA on the purified state is weak monotonicity here), equivalent and equally universal, but stated in the outer regions A, C rather than ABC, B. Requires strictly less than SSA — no full-system S(ABC) — so it is checkable from partial data.

Variables: S_AB, S_BC, S_A, S_C.

source
AbstractQAtlas.QuantumInformation.entanglement_cuts — Method
entanglement_cuts(bc::BoundaryCondition, A::Region) -> Int

The number of cuts bounding A, which Iglói & Lin ([73], Eq. 5) call b, "the number of boundary points between the subsystem and the rest of the chain": the count of adjacent site pairs with exactly one member in A, with (N, 1) adjacent under PBC.

This is the ncuts the entanglement relations take, derived instead of asserted; CFTEntanglementSlope's table says what hand-supplying it gets wrong.

Region is a set with no adjacency, so the sites must be integers and the chain length must come from bc; anything else is refused rather than guessed. A block filling the whole ring returns 0, as it must.

entanglement_cuts(PBC(8), Region(2, 3, 4))   # 2
entanglement_cuts(OBC(8), Region(1, 2, 3))   # 1, it touches the end
entanglement_cuts(OBC(8), Region(2, 3, 4))   # 2, the same block in the bulk
source
AbstractQAtlas.QuantumInformation.free_fermion_entanglement_entropy — Method
free_fermion_entanglement_entropy(ζ) -> Float64

The von Neumann entanglement entropy of a free-fermion (Gaussian) region from the eigenvalues ζ_k ∈ [0, 1] of its restricted correlation matrix C_ij = ⟨c†_i c_j⟩ (Peschel, [15]),

S_A = −Σ_k [ζ_k ln ζ_k + (1 − ζ_k) ln(1 − ζ_k)]

(the sum of per-mode binary entropies). A fully occupied/empty mode (ζ = 0, 1) contributes nothing; a maximally-entangled mode (ζ = ½) contributes ln 2. Valid for Gaussian states only.

source
AbstractQAtlas.QuantumInformation.page_average_entropy — Method
page_average_entropy(dA, dB) -> Float64

Page's average entanglement entropy of the smaller subsystem A for a Haar-random pure state of a bipartite system A ⊗ B with Hilbert-space dimensions dA ≤ dB (Page, [34]):

⟨S_A⟩ = ( Σ_{k=dB+1}^{dA·dB} 1/k ) − (dA − 1)/(2 dB).

Nearly maximal, ⟨S_A⟩ ≈ ln dA − dA/(2 dB): a random state is almost maximally entangled, deficit dA/(2dB). dA > dB is symmetric — call with the smaller dimension first.

source
AbstractQAtlas.QuantumFoundations — Module

Quantum-mechanical foundations & bounds: virial, Hellmann–Feynman, Ehrenfest, zero-variance eigenstate, the uncertainty relation and the Lieb–Robinson bound.

source
AbstractQAtlas.QuantumFoundations.EhrenfestMomentum — Type
EhrenfestMomentum <: AbstractRelation

The Ehrenfest theorem for momentum (Ehrenfest, [76]): the mean momentum obeys the classical force law,

d⟨p⟩/dt = −⟨∂V/∂x⟩ = ⟨F⟩,

the quantum counterpart of Newton's second law. Variables: dp_dt, and F = ⟨F⟩ as a Force.

source
AbstractQAtlas.QuantumFoundations.EnergyVarianceEigenstate — Type
EnergyVarianceEigenstate <: AbstractRelation

The zero-variance eigenstate condition: an exact eigenstate has vanishing energy variance,

⟨H²⟩ = ⟨H⟩² ⟺ Var(H) = ⟨H²⟩ − E² = 0 (E = ⟨H⟩),

the standard convergence metric of a variational / DMRG ground-state calculation (Var(H) → 0 as the state approaches an eigenstate).

Variables: H2 = ⟨H²⟩, E = ⟨H⟩.

source
AbstractQAtlas.QuantumFoundations.HellmannFeynman — Type
HellmannFeynman <: AbstractRelation

The Hellmann–Feynman theorem (Feynman, [77]): the derivative of an eigenenergy with respect to a parameter is the expectation of the derivative of the Hamiltonian,

dE/dλ = ⟨∂H/∂λ⟩.

Supplied-derivative convention: dH_dλ is the caller-computed expectation ⟨∂H/∂λ⟩. Variables: dE_dλ, dH_dλ.

source
AbstractQAtlas.QuantumFoundations.LiebRobinsonBound — Type
LiebRobinsonBound <: AbstractInequality

The Lieb–Robinson bound (Lieb & Robinson, [24]): information in a locally-interacting quantum system spreads no faster than an emergent velocity v_LR — the group velocity of correlations is bounded,

v ≤ v_LR

(slack v_LR − v). An effective light cone; the many-body analogue of relativistic causality, setting entanglement-growth and thermalization rates.

v_LR is typed as LiebRobinsonVelocity, so the inequality is discoverable from the quantity (relations_constraining(LiebRobinsonVelocity)) the way the thermodynamic positivity inequalities are from theirs. v stays untyped: it is any independently measured information velocity, and no quantity names that yet — the atlases have the bound, not the measurement.

Variables: v, v_LR.

source
AbstractQAtlas.QuantumFoundations.LoschmidtRate — Type
LoschmidtRate <: AbstractRelation

The definition of the Loschmidt rate function in terms of the echo it is the intensive form of,

λ(t) = −log L(t) / N,

with L(t) = |⟨ψ₀|e^{-i H_f t}|ψ₀⟩|² the LoschmidtAmplitude and N the system size. The rate function exists in the thermodynamic limit precisely because the echo does not: L vanishes exponentially in N, and dividing its log by N is what makes the statement intensive. Non-analyticities of λ are dynamical quantum phase transitions (Heyl, [27]).

Affine in λ only — L enters through its logarithm, so solving for the echo is refused by the generic solver rather than silently linearised.

Variables: λ, L, N.

source
AbstractQAtlas.QuantumFoundations.MandelstamTammBound — Type
MandelstamTammBound <: AbstractInequality

The Mandelstam–Tamm quantum speed limit: the time to evolve to an orthogonal state is bounded below by the energy uncertainty (Mandelstam & Tamm, J. Phys. (USSR) 9, 249 (1945); ħ = 1),

τ⊥ ≥ π / (2 ΔE), ΔE = √(⟨H²⟩ − ⟨H⟩²)

(slack τ − π/(2 ΔE)). The energy–time bound: no state evolves to a distinguishable one faster than its energy spread allows.

Variables: τ = orthogonalization time, ΔE = energy uncertainty.

source
AbstractQAtlas.QuantumFoundations.MargolusLevitinBound — Type
MargolusLevitinBound <: AbstractInequality

The Margolus–Levitin quantum speed limit: the orthogonalization time is also bounded below by the mean energy above the ground state (Margolus & Levitin, [35]; ħ = 1),

τ⊥ ≥ π / (2 (E − E₀))

(slack τ − π/(2 E_above), E_above = E − E₀). Independent of and complementary to MandelstamTammBound; the true limit is set by whichever is tighter, τ⊥ ≥ (π/2) / min(ΔE, E − E₀).

Variables: τ = orthogonalization time, E_above = E − E₀ (mean energy above the ground state).

source
AbstractQAtlas.QuantumFoundations.RobertsonUncertainty — Type
RobertsonUncertainty <: AbstractInequality

The Robertson uncertainty relation (Robertson, [78]),

ΔA · ΔB ≥ ½ |⟨[A, B]⟩|

(slack ΔA·ΔB − ½|⟨[A,B]⟩|), generalizing Heisenberg Δx·Δp ≥ ℏ/2 (|⟨[x,p]⟩| = ℏ). Saturated by a minimum-uncertainty (coherent / squeezed) state.

Variables: ΔA, ΔB, comm = ⟨[A, B]⟩.

source
AbstractQAtlas.QuantumFoundations.VelocityPositivity — Type
VelocityPositivity <: AbstractInequality

Every characteristic velocity in this vocabulary is a propagation speed, so

v ≥ 0

(slack v) holds for each member of AbstractVelocity — the Velocity components (:fermi, :luttinger, :sound, …) and the LiebRobinsonVelocity. Not a convention: every relation that consumes one requires it positive — ξ = v/Δ (CorrelationLengthGap) would give a negative correlation length, and the CFT finite-size forms (FiniteSizeGap, CasimirCentralCharge) a negative gap. A measured v < 0 is a sign error in a dispersion derivative, which is exactly the mistake a group-wide check catches.

Declared with EachOf because the members are DIFFERENT quantities that happen to share this law — see docs/design/type-keyed-interface.md §8c, and the negative results recorded there for the groups that do NOT share one.

Variables: v.

source
AbstractQAtlas.QuantumFoundations.VirialTheorem — Type
VirialTheorem <: AbstractRelation

The quantum virial theorem for a homogeneous potential of degree n (V(λr) = λⁿ V(r)),

2⟨T⟩ = n⟨V⟩,

(Euler's theorem on the stationary state). Harmonic n = 2 gives ⟨T⟩ = ⟨V⟩; Coulomb n = −1 gives 2⟨T⟩ = −⟨V⟩, so E = −⟨T⟩ = ½⟨V⟩.

Variables: T = ⟨T⟩, V = ⟨V⟩, n.

source
AbstractQAtlas.UniversalBounds — Module

Universal bounds stated against a fetched bounding value: Bell (CHSH, Mermin), chaos (MSS), speed limits, fast scrambling, BB84 key rate, optimal cloning, Bekenstein.

source
AbstractQAtlas.UniversalBounds.BekensteinEntropyBound — Type
BekensteinEntropyBound <: AbstractInequality

The Bekenstein universal entropy bound ([4]): the entropy of a system confined to a region of radius R with total energy E cannot exceed

S ≤ S_max = 2π R E

(slack S_max − S; ħ = c = k_B = 1), with S_max the fetched BekensteinBound. Saturated by a black hole, where it reduces to the area law — the statement that made entropy a geometric quantity.

Variables: S (the bounded one), S_max.

source
AbstractQAtlas.UniversalBounds.CHSHInequality — Type
CHSHInequality <: AbstractInequality

The CHSH inequality ([8]): a measured CHSH correlator cannot exceed what the theory admits,

S ≤ S_max

(slack S_max − S). Which S_max — 2 (local hidden variables), 2√2 (quantum, Tsirelson [9]), 4 (no-signalling, [10]) — is a property of the fetched CHSHBound, not of this statement: the inequality is the same one in every regime, which is exactly why the regime belongs on the value.

S is untyped: it is a correlator someone measured, and no quantity names that.

Variables: S (the bounded one), S_max.

source
AbstractQAtlas.UniversalBounds.CloningFidelityBound — Type
CloningFidelityBound <: AbstractInequality

The no-cloning theorem, quantitatively (Bužek & Hillery, [33]): no universal 1 → 2 qubit cloner achieves a single-copy fidelity above the optimal one,

F ≤ F_max = 5/6

(slack F_max − F), with F_max the fetched OptimalCloningFidelity. A reported cloner fidelity above it is an error in the calculation, not a discovery.

Variables: F (the bounded one), F_max.

source
AbstractQAtlas.UniversalBounds.FastScramblingBound — Type
FastScramblingBound <: AbstractInequality

The fast-scrambling conjecture (Sekino & Susskind, [39]): no thermal system scrambles local information into global entanglement faster than

t_scr ≥ t_* = (β/2π) log N

(slack t_scr − t_*), with t_* the fetched ScramblingTime. Black holes are conjectured to saturate it, which is what makes them the fastest scramblers in nature.

A conjecture, not a theorem — stated here because it is universal in form and falsifiable by a measured t_scr, which is precisely what a bound in this package is for.

Variables: t_scr (the bounded one), t_min.

source
AbstractQAtlas.UniversalBounds.LyapunovChaosBound — Type
LyapunovChaosBound <: AbstractInequality

The Maldacena–Shenker–Stanford bound on quantum chaos ([11]): the Lyapunov exponent extracted from the exponential growth of an out-of-time-order correlator cannot exceed the thermal ceiling,

λ_L ≤ λ_max = 2π/β

(slack λ_max − λ_L; ħ = k_B = 1). Saturation is the diagnostic of maximal chaos — holographic duals and large-N SYK sit on the bound — but that a given model saturates it is a model-specific claim and belongs on a consumer's registry row, not here.

Variables: λ_L (the bounded one), λ_max.

source
AbstractQAtlas.UniversalBounds.MerminInequality — Type
MerminInequality <: AbstractInequality

The Mermin three-party inequality (Mermin, [32]): a measured Mermin operator value cannot exceed what the theory admits,

M ≤ M_max

(slack M_max − M), with M_max = 2 under local realism and 4 in quantum mechanics — saturated by the GHZ state, whose violation grows exponentially in the number of parties. Regime selection lives on MerminGHZBound, as for CHSHInequality.

Variables: M (the bounded one), M_max.

source
AbstractQAtlas.UniversalBounds.OrthogonalizationTimeBound — Type
OrthogonalizationTimeBound <: AbstractInequality

The quantum speed limit as a bound on a measured evolution time: the time in which a state actually reaches an orthogonal one cannot be shorter than the limit its energy data allows,

τ ≥ τ_min

(slack τ − τ_min), with τ_min the fetched QuantumSpeedLimit — the tighter of Margolus–Levitin ([35]) and Mandelstam–Tamm.

This is the value-fetching form. MargolusLevitinBound and MandelstamTammBound state the same physics directly from E_above and ΔE, with no fetched bound — use those when you have the energy data and this one when you have the limit.

Variables: τ (the bounded one), τ_min.

source
AbstractQAtlas.UniversalBounds.SecretKeyRateBound — Type
SecretKeyRateBound <: AbstractInequality

The BB84 secret-key rate is ACHIEVABLE, so it bounds the extractable key fraction from BELOW (Shor & Preskill, [3]):

r ≥ r_min = 1 − 2 H₂(e)

(slack r − r_min), with r_min the fetched BB84KeyRate at qubit error rate e, positive for e < 11%.

The direction is the one that is easy to state backwards: a protocol achieving less than the proven rate is the failure, not one achieving more.

Variables: r (the bounded one), r_min.

source
AbstractQAtlas.Topology.BulkBoundary — Type
BulkBoundary <: AbstractRelation

The bulk–boundary correspondence: the number of protected boundary (edge / surface) modes equals the magnitude of the bulk topological invariant,

n = |ν|,

(Hasan & Kane, [7]). For a Chern insulator ν = C and n counts the chiral edge modes; for a ℤ₂ insulator ν is the ℤ₂ index mod 2.

Variables: n (mode count), ν (invariant).

source
AbstractQAtlas.Topology.ChernFromBerryCurvature — Type
ChernFromBerryCurvature <: AbstractRelation

The Chern number as the Brillouin-zone integral of the Berry curvature,

C = (1/2π) ∫_BZ Ω(k) d²k,

(Berry, [5]; Thouless, Kohmoto, Nightingale & den Nijs, [13]). Supplied- integral convention: berry_flux = ∫_BZ Ω d²k is the caller-computed Berry-curvature flux over the Brillouin zone. With TKNN (σ_xy = C) this fixes the intrinsic anomalous Hall conductivity from the Berry curvature (Xiao, Chang & Niu, [6]).

Variables: C, berry_flux.

source
AbstractQAtlas.Topology.TKNN — Type
TKNN <: AbstractRelation

The TKNN quantization statement: the zero-temperature Hall conductivity of a gapped 2D band insulator is σ_xy = C · e²/h, with C the total Chern number of the occupied bands. σ_xy is the off-diagonal (x, y) component of the rank-2 conductivity tensor σ_μν (Conductivity(:x, :y)).

Variables (in units of e²/h): σxy, C.

source
AbstractQAtlas.Topology.chern_number — Method
chern_number(hk::Function, nbands::Int; nk::Int=24) -> Int

Chern number of the lowest nbands bands of a Bloch Hamiltonian hk(kx, ky) -> AbstractMatrix (Hermitian), via the Fukui–Hatsugai–Suzuki lattice field-strength method on an nk × nk Brillouin-zone grid.

FHS is gauge-invariant by construction and returns the exact integer already on coarse grids (provided the grid resolves the gap) — that is the method's selling point, and why the result is rounded to Int with a large-deviation guard rather than reported as a float.

Throws if the spectral gap between band nbands and nbands + 1 (numerically) closes anywhere on the grid.

source
AbstractQAtlas.Topology.winding_number — Method
winding_number(dvec::Function; nk::Int=1001) -> Int

Winding number of a planar map k ∈ [0, 2π) ↦ dvec(k) = (d_x, d_y) around the origin — the 1D two-band invariant (e.g. SSH: d(k) = (v + w cos k, w sin k) winds once for v < w, zero times for v > w).

Computed by accumulating the exterior-angle increments Δθ = atan(d₁×d₂, d₁⋅d₂) between successive grid points and rounding the total to an integer (exact for a polygon avoiding the origin).

Throws when the map is not resolved: |d(k)| must stay larger than twice the local polygon step everywhere, otherwise the curve passes within a grid step of the origin — a gap closing (invariant undefined) or an under-resolved map (increase nk). A grid-point check alone is NOT sufficient: a curve through the origin between samples still yields an integer polygon winding, silently wrong.

source