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 verb | concrete models and registered fetch methods |
| generic relations: scaling laws, fluctuation–dissipation, Wick's theorem, topological invariants, FSS forms | reference 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β + γ - 2One 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 ofximplied 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) # trueEqualities 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_BA 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_Bbounded_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_LRFamily 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 gapEachOf 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 sweepPass 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)
- Scaling laws —
Rushbrooke,Widom,Fisher,Josephson, gated byexponents_consistent. - Fundamental equations —
FreeEnergyFromZ($F = -β^{-1}\ln Z$),FreeEnergyLegendre($F = U - TS$),EntropyResponse($S = -∂F/∂T$),GibbsHelmholtz($U = ∂(βF)/∂β$). - Distributions & statistics —
MicroCanonical/Canonical/GrandCanonical/Squeezedwithensemble_weight;Fermionic/Bosonicoccupationfunctions; theThermalAveragemarker ($⟨Q⟩_D$ at the type level). - Thermodynamic identities —
SpecificHeatFDT,SusceptibilityFDT,LinearResponseFDT(conventions: $c_v = β^2\,\mathrm{Var}(E)/N$, $χ = β\,\mathrm{Var}(M)/N$). - Wick's theorem —
wick_contraction,wick_density_correlation(number-conserving Gaussian fermion states; BdG/Pfaffian generalization tracked). - Topological invariants —
winding_number(1D two-band),chern_number(Fukui–Hatsugai–Suzuki),TKNN.
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
- 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:
Critical correspondence —
critical_scalingmaps each observable to the exponent governing its singularity (Susceptibility ↦ γ,SpontaneousMagnetization ↦ β, …). The singular and finite-size forms follow:singular_form,fss_size_exponent(soχ_max ∼ L^{γ/ν}is derived, not a hand-passed ratio),fss_peak,collapse_coordinates. Field-driven and distance-driven laws:critical_isotherm(δ),correlation_decay(η).The exponents' RG origin — the four scaling laws (
Rushbrooke,Widom,Fisher,Josephson) are not four independent axioms: they all follow from the homogeneity of the singular free energyf_s(t,h) = b^{-d} f_s(b^{y_t}t, b^{y_h}h), i.e. from just two RG eigenvalues plusd.ScalingDimensions(y_t, y_h, d)carries them andcritical_exponentsderives the whole set(α,β,γ,δ,ν,η)— for which every scaling relation has residual≡ 0by construction (exponents_consistentistruefor any input). The inversescaling_dimensions(; ν, η, d)recovers the eigenvalues, soδ,β,γ,αare all reconstructible from(ν, η, d)alone. Values are inputs; the map is the universal content:critical_exponents(ScalingDimensions(1//1, 15//8, 2)) # (α=0//1, β=1//8, γ=7//4, δ=15//1, ν=1//1, η=1//4) ← 2D Ising, exactTransition classification —
FirstOrder/ContinuousTransition/KosterlitzThouless, each carryingehrenfest_order,has_order_parameter,has_latent_heat,has_critical_exponents.Response genealogy —
derivative_edgeencodes the derivative tree rooted at a thermodynamic potential (M = −∂F/∂h,χ = ∂M/∂h,C = ∂U/∂Tat the free-energy root;N = −∂Ω/∂μat the grand-potential root).differentiation_chaintraces any response back to itspotential_root(FreeEnergyorGrandPotential);derivative_ordercounts field derivatives (χ = ∂²F/∂h²⇒ order 2);is_response,conjugate_field. The exact formulas are the paired relationsMagnetizationResponse,SusceptibilityResponse,GibbsHelmholtz— the definitionalχ = ∂M/∂hand the statisticalχ = β·Var(M)(SusceptibilityFDT) being the same response two ways.Dynamical / spectral graph —
spectral_origin/spectral_chaintrace the frequency-resolved quantities back to their sources (DensityOfStates ⟵ SpectralFunction ⟵ RetardedGreensFunction ⟵ SelfEnergy), andorigin_relationties each single-(q,ω)-point edge to its exact identity:Dyson(G⁻¹ = G₀⁻¹ − Σ),SpectralFromGreens(A = −Im Gᴿ/π), withSpectralSumRule,DetailedBalance(S(q,−ω) = e^{−βω} S(q,ω)) andNMRExponent(θ_NMR = 2Δ_op − 1). Transform / BZ-sum / limit edges have no pointwise form — their evaluation is the functional sibling's job.Keldysh RAK structure & fluctuation–dissipation — the real-time sibling of the Matsubara Dyson layer. The retarded/advanced/Keldysh components obey the state-independent identities
G^K = G^> + G^<andG^R − G^A = G^> − G^<(KeldyshComponent,KeldyshCausality) plus the adjoint tieG^A = (G^R)†(AdvancedRetardedConjugate, which also putsG^Aon the spectral graph via the:adjointedge). In equilibrium the Keldysh component is not independent: the fluctuation–dissipation theoremKeldyshFDTlocks it to the spectral part,G^K = h(ω)(G^R − G^A), with the distribution functionkeldysh_distributionh = coth(βω/2)(bosons)= tanh(βω/2)(fermions)= 1 ∓ 2n. Thathis itself a consequence of theKMSGreaterLesserdetailed-balance relationG^<(ω) = ζe^{−βω}G^>(ω)— FDT is derived, not assumed — andSpectralFromKeldyshA = i(G^R−G^A)/2πreduces to−Im G^R/π, bridging back to the normalized spectral function.
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 aQuantityEdge. ForSusceptibilitythis surfaces bothMagnetization(as∂/∂hand via the FDT) andStaticStructureFactor(via the structure-factor sum rule) at once.quantity_path(a, b)— the machine answer to "how areaandbrelated?": a shortest path of typed edges.SpecificHeatandMagnetizationconnect through their sharedFreeEnergyroot.quantity_neighbors(fam)— incident edges in both directions (so a derivative root likeFreeEnergystill surfaces the quantities that point at it), andquantity_graph_jsonlstreams 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→WidomTwo safety guarantees, because a chained result is weaker than a directly implemented one:
- Equalities only. Inequalities are excluded — their
solvereturns a saturation bound, not an equational value, so a bound can never masquerade as a derived quantity. - Auditable provenance.
derive(…; debug=true)returns aDerivationTrace— the value, the exact route (which relation produced each intermediate, from which inputs), and anindirectflag — so an indirectly derived number is inspected by its route, not trusted blindly. The route is discovered by calling the realsolve, 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ω → 0limit, 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
AbstractQAtlasThe model-independent layer of the QAtlas ecosystem, in the spirit of AbstractFFTs: concrete atlases (QAtlas) implement this package, never the reverse.
Layers:
core/ — the abstract type vocabulary for physical quantities:
AbstractQAtlasModel,BoundaryCondition(Infinite/OBC/PBC),AbstractQuantityand its hierarchy, the abstract fields, the genericfetchverb (+ itsfetch_cachedmemoization), and theUniversalitymachinery — so atlases and third packages share dispatch types without depending on a full atlas.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 atFreeEnergy/GrandPotential), the spectral and Fourier graphs, and the Maxwell relations derived from the potentials.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.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), andthermal_derivative/thermal_gradient(AD, in the ForwardDiff/Zygote extensions) — plus theKnowledgeGraphgraph 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.
AbstractQAtlas.Bits — Constant
BitsLogBase(2), S = -Tr ρ log₂ ρ, which is what the entanglement literature usually counts.
AbstractQAtlas.Nats — Constant
NatsLogBase(ℯ), the convention every entropy relation in this package is written in.
AbstractQAtlas.REPORT_ROUTES — Constant
REPORT_ROUTESThe 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.
AbstractQAtlas.RelationVariable — Type
RelationVariableUnion of the identity-bearing kinds a relation variable can key on: AbstractQuantity, AbstractField, AbstractCoordinate, AbstractExponent. The type is the variable's identity; the formula letter in the relation body is a private local binding.
AbstractQAtlas.AbstractCoordinate — Type
AbstractCoordinateParent 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.
AbstractQAtlas.AbstractDistribution — Type
AbstractDistributionAbstract parent type for statistical distributions and state families — the ρ an expectation value is taken against. Concrete subtypes carry their defining parameters as typed fields: the three classical ensembles (MicroCanonical, Canonical, GrandCanonical) and parameterized state families (Squeezed).
AbstractQAtlas.AbstractEntanglementMeasure — Type
AbstractEntanglementMeasure <: AbstractQuantityEntanglement measures (von Neumann / Rényi entropies, negativity, mutual information, …).
AbstractQAtlas.AbstractExponent — Type
AbstractExponentParent 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.
AbstractQAtlas.AbstractField — Type
AbstractFieldAbstract parent type for the intensive control fields a thermodynamic potential depends on. Concrete singleton tags — Temperature, InverseTemperature, MagneticField, ChemicalPotential — name the variable a response function is differentiated with respect to.
AbstractQAtlas.AbstractGap — Type
AbstractGap <: AbstractQuantitySpectral gaps (mass, charge, spin channels).
AbstractQAtlas.AbstractIndex — Type
AbstractIndexAbstract parent for the internal degrees of freedom a tensor quantity's indices run over. Concrete singleton tags — SpinAxis, SpatialDirection, OrbitalIndex — name what an index is, so index_spaces can report a quantity's index structure without enumerating the (model-dependent) range of values.
AbstractQAtlas.AbstractInequality — Type
AbstractInequality <: AbstractRelationA 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.
AbstractQAtlas.AbstractMagnetization — Type
AbstractMagnetization <: AbstractQuantityOrder-parameter expectation values ⟨M_α⟩ and their site-resolved variants.
AbstractQAtlas.AbstractNonlinearProcess — Type
AbstractNonlinearProcessA named nonlinear process, i.e. a choice of frequency arguments for χ⁽ⁿ⁾(ω₁, …, ωₙ). WaveMixing is the general (and currently only) concrete form.
A process is not a quantity — it is a cut through one. The quantity is the order-n DynamicalSusceptibility (or DynamicalConductivity in the current channel); the process says which of its frequency arguments to evaluate.
AbstractQAtlas.AbstractPropagator — Type
AbstractPropagator <: AbstractQuantitySingle-particle propagators — retarded/advanced/Matsubara Green's functions and the self-energy — the (q, ω)-resolved objects the Dyson equation relates.
AbstractQAtlas.AbstractQAtlasModel — Type
AbstractQAtlasModelAbstract parent type for every atlas model. Concrete subtypes carry their physics parameters as typed fields, e.g.
struct TFIM <: AbstractQAtlasModel
J::Float64
h::Float64
endImplementing packages (QAtlas and friends) subtype this and register fetch methods per (model, quantity, bc) triple.
AbstractQAtlas.AbstractQuantity — Type
AbstractQuantityAbstract 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.
AbstractQAtlas.AbstractRelation — Type
AbstractRelationAbstract 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 ofximplied 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 β.
AbstractQAtlas.AbstractRepresentation — Type
AbstractRepresentationThe space a quantity is expressed in. Spatial: RealSpace r ↔ MomentumSpace q. Temporal: TimeDomain t ↔ FrequencyDomain ω. Fourier-conjugate spaces are paired by fourier_conjugate.
AbstractQAtlas.AbstractResponse — Type
AbstractResponseParent 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).
AbstractQAtlas.AbstractStructureFactor — Type
AbstractStructureFactor <: AbstractQuantityMomentum-space structure factors S(q).
AbstractQAtlas.AbstractSusceptibility — Type
AbstractSusceptibility <: AbstractQuantityLinear and nonlinear response susceptibilities χ⁽ⁿ⁾_{α;β₁…βₙ} — see Susceptibility for the arbitrary-order tensor.
AbstractQAtlas.AbstractThermalPotential — Type
AbstractThermalPotential <: AbstractQuantityScalar thermodynamic potentials and their densities (energy, free energy, entropy, specific heat, …).
AbstractQAtlas.AbstractTransition — Type
AbstractTransitionAbstract parent type for phase-transition kinds. Concrete subtypes (FirstOrder, ContinuousTransition, KosterlitzThouless) are singleton tags carrying the generic classification traits (ehrenfest_order, has_order_parameter, has_latent_heat, has_critical_exponents).
The classification is anchored in the free energy: an n-th order transition is one whose n-th free-energy derivative is the first to be discontinuous or divergent.
AbstractQAtlas.AbstractTwoPointCorrelation — Type
AbstractTwoPointCorrelation <: AbstractQuantityTwo-point correlation functions ⟨Oi Oj⟩ (connected or full).
AbstractQAtlas.AbstractVelocity — Type
AbstractVelocity <: AbstractQuantityCharacteristic velocities (Fermi, Luttinger, Lieb-Robinson, …).
AbstractQAtlas.ActivatedExponent — Type
ActivatedExponent() <: AbstractQuantityThe 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.
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.
AbstractQAtlas.AdvancedGreensFunction — Type
AdvancedGreensFunction() <: AbstractPropagatorThe 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.
AbstractQAtlas.AdvancedSelfEnergy — Type
AdvancedSelfEnergy() <: AbstractPropagatorThe advanced self-energy Σ^A(q, ω) = (Σ^R)† — the advanced member of the Keldysh RAK triple; the self-energy counterpart of AdvancedGreensFunction.
AbstractQAtlas.AnomalousDimension — Type
AnomalousDimension() <: AbstractExponentη, the correlation function's decay at criticality, G(r) ∼ r^{-(d-2+η)}.
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.
AbstractQAtlas.AutoDiff — Type
AutoDiff() <: DerivativeRouteNested 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.
AbstractQAtlas.BB84KeyRate — Type
BB84KeyRate() <: AbstractQuantityThe 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.
AbstractQAtlas.Bag — Type
BagA type-keyed data bag: Dict{VariableKey,Any} mapping a variable's VariableKey to its value. Build one with bag.
AbstractQAtlas.BekensteinBound — Type
BekensteinBound() <: AbstractQuantityThe Bekenstein universal ceiling on the entropy of a system of radius R and energy E, S_max = 2π R E in units ħ = c = k_B = 1 ([4]). A bounding value.
Bounds BekensteinEntropyBound.
AbstractQAtlas.BerryCurvature — Type
BerryCurvature() <: AbstractQuantityThe 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.
AbstractQAtlas.Bosonic — Type
Bosonic()Bose–Einstein exchange statistics tag.
AbstractQAtlas.BoundaryCondition — Type
BoundaryConditionAbstract 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 finiteN.OBC(N::Int)— open boundary conditions at finiteN.
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.
AbstractQAtlas.BoundaryModeCount — Type
BoundaryModeCount() <: AbstractQuantityThe 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.
AbstractQAtlas.CHSHBound — Type
CHSHBound() <: AbstractQuantityThe 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.
AbstractQAtlas.Canonical — Type
Canonical(β)
Canonical(; β=nothing, T=nothing)Canonical (Gibbs) ensemble at inverse temperature β, weight w(E) = e^{−βE}. Constructible from either β or T.
AbstractQAtlas.Card — Type
CardOne 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.
AbstractQAtlas.CarrierDensity — Type
CarrierDensity() <: AbstractQuantityThe charge-carrier number density n — sets the electrical conductivity through the mobility (σ = n e μ) and the Hall coefficient (R_H = 1/n e).
AbstractQAtlas.CentralCharge — Type
CentralCharge() <: AbstractQuantityCentral charge c of the critical theory's CFT.
AbstractQAtlas.CentralDifference — Type
CentralDifference(h::Real) <: DerivativeRouteThe 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.
AbstractQAtlas.ChaosBound — Type
ChaosBound() <: AbstractQuantityThe 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.
AbstractQAtlas.ChargeGap — Type
ChargeGap() <: AbstractGapCharge (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.
AbstractQAtlas.ChemicalPotential — Type
ChemicalPotential <: AbstractFieldThe chemical potential μ. Conjugate to the particle number (N = −∂Ω/∂μ for the grand potential Ω); the defining field of the GrandCanonical ensemble.
AbstractQAtlas.ChernNumber — Type
ChernNumber() <: AbstractQuantityThe (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.
AbstractQAtlas.ChiralCondensate — Type
ChiralCondensate() <: AbstractQuantityVacuum 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.)
AbstractQAtlas.Concurrence — Type
Concurrence() <: AbstractEntanglementMeasureThe 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.
AbstractQAtlas.ConditionalEntropy — Type
ConditionalEntropy() <: AbstractEntanglementMeasureThe conditional entropy S(A|B) = S(AB) − S(B) — can be negative quantum-mechanically (a signature of entanglement), unlike its classical counterpart.
AbstractQAtlas.Conductivity — Type
Conductivity{I}() <: AbstractQuantity
Conductivity(μ, ν₁, …, νₙ) # each a SymbolThe 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 byTKNN;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.
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.
AbstractQAtlas.ConsistencyRow — Type
ConsistencyRowOne 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.
AbstractQAtlas.ContinuousTransition — Type
ContinuousTransition <: AbstractTransitionA 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.
AbstractQAtlas.Convention — Type
ConventionParent 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.
AbstractQAtlas.ConventionSet — Type
ConventionSetWhat 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.
AbstractQAtlas.CorrelationLength — Type
CorrelationLength() <: AbstractQuantityCorrelation length ξ (units of lattice spacing). In a gapped phase it is set by the gap and velocity, ξ = v/Δ (CorrelationLengthGap).
AbstractQAtlas.CorrelationLengthExponent — Type
CorrelationLengthExponent() <: AbstractExponentν, the correlation length's divergence, ξ ∼ |t|^{-ν}. The exponent, where CorrelationLength is the length itself.
AbstractQAtlas.CorrelationMatrixEigenvalue — Type
CorrelationMatrixEigenvalue() <: AbstractQuantityζ ∈ (0, 1), an eigenvalue of a Gaussian state's correlation matrix, which is the Fermi-Dirac occupation of one single-particle entanglement mode (Peschel, [15]). See EntanglementSpectrumCorrelation.
AbstractQAtlas.CriticalExponents — Type
CriticalExponents() <: AbstractQuantityStandard 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.
AbstractQAtlas.CriticalIsothermExponent — Type
CriticalIsothermExponent() <: AbstractExponentδ, the critical isotherm's shape, m ∼ h^{1/δ} at t = 0.
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|^{−α}).
AbstractQAtlas.CriticalTemperature — Type
CriticalTemperature() <: AbstractQuantityCritical temperature T_c of a finite-temperature phase transition.
Generic home for a tag that previously lived inside a model file.
AbstractQAtlas.CurrentCorrelation — Type
CurrentCorrelation{I}() <: AbstractQuantity
CurrentCorrelation(μ, ν₁, …, νₙ) # each a SymbolThe 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).
AbstractQAtlas.CurrentNoise — Type
CurrentNoise{I}() <: AbstractQuantity
CurrentNoise(μ, ν) # each a SymbolThe (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.
AbstractQAtlas.CurrentResponseKernel — Type
CurrentResponseKernel{I}() <: AbstractQuantity
CurrentResponseKernel(α, β₁, …, βₙ) # each a SymbolThe 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.
AbstractQAtlas.DensityOfStates — Type
DensityOfStates() <: AbstractQuantityThe density of states ρ(ω) = (1/N) Σ_q A(q, ω) — the Brillouin-zone average of the SpectralFunction.
AbstractQAtlas.DerivationRouteRow — Type
DerivationRouteRowOne 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.
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...).
AbstractQAtlas.DerivationTrace — Type
DerivationTraceThe 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.
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).
AbstractQAtlas.DerivativeRoute — Type
DerivativeRouteHow a derivative is evaluated: AutoDiff, CentralDifference, Richardson.
Open in the same way Convention is: a new route is a subtype plus an nth_derivative method, and the genealogy layer above it does not change. Which route a project uses is a property of what it measured, not of the physics, which is why it is named and passed rather than fixed here.
AbstractQAtlas.DerivativeRouteRow — Type
DerivativeRouteRowOne row of a derivative_report: the route, the value it returned, and the order it showed (observed_order; NaN for a route with no step to halve).
AbstractQAtlas.DiffusionConstant — Type
DiffusionConstant() <: AbstractQuantityThe (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).
AbstractQAtlas.DisorderAveraged — Type
DisorderAveraged(quantity::Q) <: AbstractQuantityThe 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}.
AbstractQAtlas.DisorderCorrelationExponent — Type
DisorderCorrelationExponent() <: AbstractQuantityThe 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.
AbstractQAtlas.DisorderStrength — Type
DisorderStrength() <: AbstractQuantityThe 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.
AbstractQAtlas.DrudeWeight — Type
DrudeWeight{I}() <: AbstractQuantity
DrudeWeight(μ, ν) # each a SymbolThe 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.
AbstractQAtlas.DynamicalConductivity — Type
DynamicalConductivity{I}() <: AbstractQuantity
DynamicalConductivity(μ, ν₁, …, νₙ) # each a SymbolThe 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).
AbstractQAtlas.DynamicalCorrelation — Type
DynamicalCorrelation{I}() <: AbstractQuantity
DynamicalCorrelation(α, β₁, …, βₙ) # each a SymbolThe 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.
AbstractQAtlas.DynamicalExponent — Type
DynamicalExponent() <: AbstractQuantityThe 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.
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}.
AbstractQAtlas.DynamicalStructureFactor — Type
DynamicalStructureFactor() <: AbstractStructureFactorThe dynamical structure factor S(q, ω) — the space-time Fourier transform of the DynamicalCorrelation; obeys detailed balance S(q, −ω) = e^{−βω} S(q, ω) and the fluctuation–dissipation link to the DynamicalSusceptibility.
AbstractQAtlas.DynamicalSusceptibility — Type
DynamicalSusceptibility{I}() <: AbstractSusceptibility
DynamicalSusceptibility(α, β₁, …, βₙ) # each a SymbolThe 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).
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.
AbstractQAtlas.EffectiveCentralCharge — Type
EffectiveCentralCharge() <: AbstractQuantityEffective 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).
AbstractQAtlas.EffectiveMass — Type
EffectiveMass() <: AbstractQuantityThe band effective mass m* — the inertial mass entering the Drude mobility μ = e τ / m*.
AbstractQAtlas.ElectricCurrent — Type
ElectricCurrent() <: AbstractQuantityThe electric (charge) current density j_μ — a rank-1 vector in SpatialDirection space; the response half of the Conductivity (j_μ = σ_μν E_ν) and one of the two currents of the Onsager transport matrix (with HeatCurrent).
AbstractQAtlas.Energy — Type
Energy{G}() <: AbstractThermalPotential
Energy() # G = :natural — model-and-BC-natural granularity
Energy(:total) # explicit ⟨H⟩
Energy(:per_site) # explicit ⟨H⟩ / NGround-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.
AbstractQAtlas.EnergyVariance — Type
EnergyVariance() <: AbstractQuantityThe energy variance Var(H) = ⟨H²⟩ − ⟨H⟩² — zero iff the state is an exact eigenstate, the convergence metric of a variational / DMRG calculation.
AbstractQAtlas.EntanglementSpectrumLevel — Type
EntanglementSpectrumLevel() <: AbstractQuantityε, one eigenvalue of the quadratic entanglement Hamiltonian, paired with a CorrelationMatrixEigenvalue by ε = ln((1 - ζ)/ζ).
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.
AbstractQAtlas.Fermionic — Type
Fermionic()Fermi–Dirac exchange statistics tag.
AbstractQAtlas.FermionicEntanglementEntropy — Type
FermionicEntanglementEntropy() <: AbstractEntanglementMeasureThe 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):
| region | spin | fermionic |
|---|---|---|
{1,2,3,4} | 0.628316 | 0.628316 |
{1,2,5,6} | 1.112324 | 1.224109 |
{1,3} | 1.166659 | 1.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.
AbstractQAtlas.FidelitySusceptibility — Type
FidelitySusceptibility() <: AbstractQuantityFidelity susceptibility χ_F(λ) = −∂²⟨ψ(λ)|ψ(λ + δλ)⟩/∂δλ².
AbstractQAtlas.FillingFactor — Type
FillingFactor() <: AbstractQuantityThe Landau-level filling factor ν = n h /(e B) — the number of filled Landau levels; quantizes the Hall resistance R_xy = h/(ν e²).
AbstractQAtlas.FiniteSizeRow — Type
FiniteSizeRowOne row of a finite_size_scaling_report: the relation matched, the quantity whose sweep it was read from, the sizes the secant was taken between, its residual, and pass.
AbstractQAtlas.FirstOrder — Type
FirstOrder <: AbstractTransitionA 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.
AbstractQAtlas.Force — Type
Force() <: AbstractQuantityThe mean force ⟨F⟩ = −⟨∂V/∂x⟩, which EhrenfestMomentum equates to d⟨p⟩/dt.
Not the free energy that wears the same letter in FreeEnergyLegendre, nor the cloning fidelity in CloningFidelityBound: three quantities share F across the registry, and the type is what keeps them apart when a bag is read rather than a symbol.
AbstractQAtlas.FractalDimension — Type
FractalDimension() <: AbstractQuantityHausdorff 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.
AbstractQAtlas.FreeEnergy — Type
FreeEnergy() <: AbstractThermalPotentialHelmholtz free energy per site, f = -β⁻¹ log Z / N.
AbstractQAtlas.Frequency — Type
Frequency <: AbstractCoordinateThe frequency ω at which a dynamical quantity is evaluated.
AbstractQAtlas.FrequencyDomain — Type
FrequencyDomain <: AbstractRepresentationFrequency-domain representation (ω) — conjugate to TimeDomain.
AbstractQAtlas.Global — Type
Global <: SupportThe trivial support: a bulk, whole-system quantity with no region/point decoration. The default support of every variable.
AbstractQAtlas.GrandCanonical — Type
GrandCanonical(β, μ)
GrandCanonical(; μ, β=nothing, T=nothing)Grand-canonical ensemble at inverse temperature β and chemical potential μ, weight w(E, N) = e^{−β(E − μN)}.
AbstractQAtlas.GrandPotential — Type
GrandPotential() <: AbstractThermalPotentialThe 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).
AbstractQAtlas.GreaterGreensFunction — Type
GreaterGreensFunction() <: AbstractPropagatorThe 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).
AbstractQAtlas.GroundStateDegeneracy — Type
GroundStateDegeneracy() <: AbstractQuantityDimension 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.
AbstractQAtlas.GrowthExponents — Type
GrowthExponents() <: AbstractQuantityKPZ-type growth / roughness / dynamic exponents. Returns (β_growth, α_rough, z) instead of the equilibrium set.
AbstractQAtlas.HallCoefficient — Type
HallCoefficient() <: AbstractQuantityThe 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.
AbstractQAtlas.HarrisCriterion — Type
HarrisCriterion() <: RelevanceCriterionUncorrelated 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.
AbstractQAtlas.HeatCurrent — Type
HeatCurrent() <: AbstractQuantityThe 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.
AbstractQAtlas.Infinite — Type
Infinite()Thermodynamic-limit boundary condition — no finite size.
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.
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…)AbstractQAtlas.InverseTemperature — Type
InverseTemperature <: AbstractFieldThe inverse temperature β = 1/T. The natural variable of the Gibbs–Helmholtz relation U = ∂(βF)/∂β.
AbstractQAtlas.IsobaricSpecificHeat — Type
IsobaricSpecificHeat() <: AbstractThermalPotentialSpecific heat at constant pressure, c_p. Exceeds the constant-volume SpecificHeat c_v by c_p − c_v = T v α² / κ_T (HeatCapacityDifference).
AbstractQAtlas.IsothermalCompressibility — Type
IsothermalCompressibility() <: AbstractQuantityThe isothermal compressibility κ_T = −(1/V)(∂V/∂p)_T.
AbstractQAtlas.KeldyshGreensFunction — Type
KeldyshGreensFunction() <: AbstractPropagatorThe 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.
AbstractQAtlas.KeldyshSelfEnergy — Type
KeldyshSelfEnergy() <: AbstractPropagatorThe 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).
AbstractQAtlas.KineticEnergy — Type
KineticEnergy() <: AbstractThermalPotentialThe kinetic-energy expectation ⟨T⟩ — the T of the virial theorem 2⟨T⟩ = n⟨V⟩ (homogeneous potential of degree n).
AbstractQAtlas.KnowledgeGraph — Type
KnowledgeGraph{N}(edges)A knowledge graph over nodes of type N: a list of TypedEdges. The generic parent the quantity / derivation / model graphs instantiate; iterate it to get its edges (for e in g, length(g), collect(g)). Query it with graph_nodes, graph_neighbors, graph_reachable, graph_shortest_path; export it with graph_jsonl.
AbstractQAtlas.KosterlitzThouless — Type
KosterlitzThouless <: AbstractTransitionThe 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.
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).
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.
AbstractQAtlas.LatentHeat — Type
LatentHeat() <: AbstractThermalPotentialThe 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).
AbstractQAtlas.LesserGreensFunction — Type
LesserGreensFunction() <: AbstractPropagatorThe lesser Green's function G^<(q, ω) ∼ ±i⟨A†(0)A(t)⟩. The occupied-state counterpart of GreaterGreensFunction; see there for the RAK and KMS relations tying the two.
AbstractQAtlas.LiebRobinsonVelocity — Type
LiebRobinsonVelocity() <: AbstractVelocityThe 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.
AbstractQAtlas.LogBase — Type
LogBase(base::Real) <: ConventionThe 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.
AbstractQAtlas.LogarithmicNegativity — Type
LogarithmicNegativity() <: AbstractEntanglementMeasureLogarithmic 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).
AbstractQAtlas.LoschmidtAmplitude — Type
LoschmidtAmplitude() <: AbstractQuantityThe 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.
AbstractQAtlas.LoschmidtRateFunction — Type
LoschmidtRateFunction() <: AbstractQuantityThe 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]).
AbstractQAtlas.LuckCriterion — Type
LuckCriterion() <: RelevanceCriterionLuck'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).
AbstractQAtlas.LuttingerParameter — Type
LuttingerParameter() <: AbstractQuantityLuttinger liquid parameter K. Meaningful for critical 1D models with U(1) symmetry (e.g. XXZ in the critical regime |Δ| < 1).
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.
AbstractQAtlas.MagneticField — Type
MagneticField <: AbstractFieldThe magnetic field h. Conjugate (via M = −∂F/∂h) to the magnetization — see conjugate_field.
AbstractQAtlas.MagneticFluxDensity — Type
MagneticFluxDensity() <: AbstractQuantityThe magnetic flux density B — sets the cyclotron frequency ω_c = eB/m and, in 2D, the Landau-level filling ν = n h / (e B).
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.
AbstractQAtlas.MarkovEntropy — Type
MarkovEntropy() <: AbstractEntanglementMeasureThe 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].
AbstractQAtlas.MassGap — Type
MassGap() <: AbstractGapThe 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.
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.
AbstractQAtlas.MeasurementEntropy — Type
MeasurementEntropy() <: AbstractEntanglementMeasureThe 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]).
AbstractQAtlas.MerminGHZBound — Type
MerminGHZBound() <: AbstractQuantityThe 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.
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).
AbstractQAtlas.MissingRouteBackend — Type
MissingRouteBackend(route) <: ExceptionThrown 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.
AbstractQAtlas.Mobility — Type
Mobility() <: AbstractQuantityThe 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.
AbstractQAtlas.Momentum — Type
Momentum <: AbstractCoordinateThe momentum / wavevector q at which a quantity is evaluated.
AbstractQAtlas.MomentumSpace — Type
MomentumSpace <: AbstractRepresentationMomentum / reciprocal-space representation (wavevector q) — conjugate to RealSpace.
AbstractQAtlas.MutualInformation — Type
MutualInformation() <: AbstractEntanglementMeasureThe 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).
AbstractQAtlas.NMRRelaxationExponent — Type
NMRRelaxationExponent() <: AbstractQuantityThe low-temperature scaling exponent θ_NMR of 1/T₁ ∝ T^{θ_NMR}, fixed by the operator scaling dimension via θ_NMR = 2Δ_op − 1.
AbstractQAtlas.NMRSpinRelaxationRate — Type
NMRSpinRelaxationRate() <: AbstractQuantityThe 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, ω)/ω.
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].
AbstractQAtlas.OptimalCloningFidelity — Type
OptimalCloningFidelity() <: AbstractQuantityThe optimal universal 1 → 2 qubit cloning fidelity F = 5/6 (Bužek & Hillery, [33]) — the no-cloning theorem made quantitative. A bounding value, and an UPPER one.
Bounds CloningFidelityBound.
AbstractQAtlas.OrbitalIndex — Type
OrbitalIndex <: AbstractIndexAn 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.
AbstractQAtlas.OrderParameterExponent — Type
OrderParameterExponent() <: AbstractExponentβ, the order parameter's vanishing, m ∼ (-t)^β. Not InverseTemperature, which wears the same letter across most of this registry.
AbstractQAtlas.OrderSupport — Type
OrderSupport(order) <: SupportThe 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.
AbstractQAtlas.PBC — Type
PBC(N::Int)
PBC(; N::Int = 0)Periodic boundary condition. See OBC for the N = 0 sentinel.
AbstractQAtlas.PageEntropy — Type
PageEntropy() <: AbstractEntanglementMeasureAverage 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.
AbstractQAtlas.ParticleNumber — Type
ParticleNumber() <: AbstractQuantityThe particle number N = −(∂Ω/∂μ)_{T,V} — conjugate to the chemical potential (ChemicalPotential).
AbstractQAtlas.ParticleStatistics — Type
ParticleStatisticsAbstract tag for exchange statistics: Fermionic or Bosonic. Used to dispatch statistics-dependent relations (occupation functions; Wick contractions — the current wick_contraction determinant is the fermionic case, the bosonic permanent is tracked as a follow-up).
AbstractQAtlas.PartitionFunction — Type
PartitionFunction() <: AbstractThermalPotentialThe 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.
AbstractQAtlas.PeltierCoefficient — Type
PeltierCoefficient{I}() <: AbstractQuantity
PeltierCoefficient(μ, ν) # each a SymbolThe 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.
AbstractQAtlas.Polarization — Type
Polarization() <: AbstractQuantityThe 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.
AbstractQAtlas.PotentialEnergy — Type
PotentialEnergy() <: AbstractThermalPotentialThe potential-energy expectation ⟨V⟩ — the V of the virial theorem 2⟨T⟩ = n⟨V⟩.
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).
AbstractQAtlas.Pressure — Type
Pressure() <: AbstractQuantityThe pressure p = −(∂F/∂V)_T — conjugate to the Volume.
AbstractQAtlas.Purity — Type
Purity() <: AbstractQuantityThe 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².
AbstractQAtlas.QuantityEdge — Type
QuantityEdgeA TypedEdge of the quantity-relationship graph (an alias for TypedEdge{Type}, nodes are quantity families). Its kind is one of
:derivative—tois the potential/quantityfromis a field-derivative of (the response genealogy,derivative_edge);detailnames the field ("∂/∂MagneticField", …).:spectral—fromis obtained fromtoby the dynamical-graph operation indetail(spectral_origin'svia:dyson,neg_im_over_pi, …).:fourier—fromandtoare Fourier conjugates (fourier_conjugate_quantity);detail == "fourier".:law—fromandtoare co-constrained by a universal relation (they appear together in somequantities(rel));detailnames the relation ("SusceptibilityFDT", …).
AbstractQAtlas.QuantumSpeedLimit — Type
QuantumSpeedLimit() <: AbstractQuantityThe 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.
AbstractQAtlas.RealSpace — Type
RealSpace <: AbstractRepresentationReal-space representation (position r / site index) — conjugate to MomentumSpace under the spatial Fourier transform.
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 # trueAbstractQAtlas.RegionFiniteSizeRow — Type
RegionFiniteSizeRowOne 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.
AbstractQAtlas.RegionReportRow — Type
RegionReportRowOne 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.
AbstractQAtlas.RegionSupport — Type
RegionSupport(region::Region) <: SupportThe 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.
AbstractQAtlas.RegionTEERow — Type
RegionTEERowOne 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₃).
AbstractQAtlas.RelativeEntropy — Type
RelativeEntropy() <: AbstractEntanglementMeasureThe 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]).
AbstractQAtlas.RelevanceCriterion — Type
RelevanceCriterionA predicate on critical exponents deciding whether a perturbation changes the fixed point. Answered by relevance; the underlying signed quantity is margin.
AbstractQAtlas.RenyiEntropy — Type
RenyiEntropy(α::Real) <: AbstractEntanglementMeasureThe 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.
AbstractQAtlas.ResidualEntropy — Type
ResidualEntropy() <: AbstractThermalPotentialZero-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.
AbstractQAtlas.Resistivity — Type
Resistivity{I}() <: AbstractQuantity
Resistivity(μ, ν) # each a SymbolThe 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.
AbstractQAtlas.ResponseKernel — Type
ResponseKernel{I}() <: AbstractQuantity
ResponseKernel(α, β₁, …, βₙ) # each a SymbolThe 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.
AbstractQAtlas.RetardedGreensFunction — Type
RetardedGreensFunction() <: AbstractPropagatorThe 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.
AbstractQAtlas.RetardedSelfEnergy — Type
RetardedSelfEnergy() <: AbstractPropagatorThe 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.
AbstractQAtlas.Richardson — Type
Richardson(h::Real; levels::Int = 3) <: DerivativeRouteCentralDifference 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.
AbstractQAtlas.ScalingDimension — Type
ScalingDimension() <: AbstractQuantityThe 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.
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, exactAbstractQAtlas.ScatteringTime — Type
ScatteringTime() <: AbstractQuantityThe transport (momentum-relaxation) time τ — the Drude scattering time setting the mobility μ = e τ / m.
AbstractQAtlas.ScramblingTime — Type
ScramblingTime() <: AbstractQuantityThe 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.
AbstractQAtlas.SelfEnergy — Type
SelfEnergy() <: AbstractPropagatorThe single-particle self-energy Σ(q, ω) — the Dyson correction G^{-1} = G₀^{-1} − Σ between the bare and full propagators.
AbstractQAtlas.SizeSupport — Type
SizeSupport(L) <: SupportThe 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.
AbstractQAtlas.SpatialDimension — Type
SpatialDimension() <: AbstractQuantityThe 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.
AbstractQAtlas.SpatialDirection — Type
SpatialDirection <: AbstractIndexA spatial / Cartesian direction index μ — the index of currents and transport tensors (e.g. the conductivity σ_μν).
AbstractQAtlas.SpecificHeat — Type
SpecificHeat() <: AbstractThermalPotentialSpecific heat (per site) at constant volume, c_v(β) = β² (⟨H²⟩ − ⟨H⟩²) / N.
Defining identities: the fluctuation form SpecificHeatFDT c_v = β² Var(E) / N, the entropy form SpecificHeatFromEntropy c_v = T ∂s/∂T, and the difference from the constant-pressure heat capacity HeatCapacityDifference.
AbstractQAtlas.SpecificHeatExponent — Type
SpecificHeatExponent() <: AbstractExponentα, the specific heat's divergence at a critical point, c ∼ |t|^{-α}.
AbstractQAtlas.SpectralFunction — Type
SpectralFunction() <: AbstractQuantityThe single-particle spectral function A(q, ω) = −(1/π) Im G^R(q, ω), normalized by ∫ A(q, ω) dω = 1.
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.
AbstractQAtlas.SpinAxis — Type
SpinAxis <: AbstractIndexA spin / order-parameter component index α ∈ {x, y, z, …} — the index of magnetizations, susceptibilities, spin correlations, structure factors.
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.
AbstractQAtlas.SpinGap — Type
SpinGap() <: AbstractGapSpin 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.
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).
AbstractQAtlas.SpinWaveVelocity — Type
SpinWaveVelocityAlias of LuttingerVelocity: in a gapless spin chain the bosonisation velocity IS the spin-wave velocity, so this is one quantity under two names and not a second slot.
AbstractQAtlas.SpontaneousMagnetization — Type
SpontaneousMagnetization() <: AbstractMagnetizationThe 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).
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).
AbstractQAtlas.StaticStructureFactor — Type
StaticStructureFactor() <: AbstractStructureFactorThe 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).
AbstractQAtlas.StringOrderParameter — Type
StringOrderParameter() <: AbstractQuantityKennedy-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.
AbstractQAtlas.Support — Type
SupportWhere / 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.
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.
AbstractQAtlas.SurfaceMagnetization — Type
SurfaceMagnetization() <: AbstractMagnetizationThe 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.
AbstractQAtlas.Susceptibility — Type
Susceptibility{I}() <: AbstractSusceptibility
Susceptibility(α, β₁, …, βₙ) # each a SymbolSusceptibility 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 fusedSusceptibilityXX/ZZnames 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).
AbstractQAtlas.SusceptibilityExponent — Type
SusceptibilityExponent() <: AbstractExponentγ, the susceptibility's divergence, χ ∼ |t|^{-γ}.
AbstractQAtlas.Tangle — Type
Tangle() <: AbstractEntanglementMeasureThe tangle τ = C² — the squared Concurrence; the bipartite entanglement measure obeying the CKW monogamy inequality τ(A:BC) ≥ τ(A:B) + τ(A:C).
AbstractQAtlas.Temperature — Type
Temperature <: AbstractFieldThe temperature T. Conjugate (via S = −∂F/∂T) to the entropy.
AbstractQAtlas.ThermalAverage — Type
ThermalAverage(quantity, distribution) <: AbstractQuantityMarker 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).
AbstractQAtlas.ThermalConductivity — Type
ThermalConductivity{I}() <: AbstractQuantity
ThermalConductivity(μ, ν) # each a SymbolThe (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.
AbstractQAtlas.ThermalEntropy — Type
ThermalEntropy() <: AbstractThermalPotentialThermal entropy per site, s = β(ε − f).
AbstractQAtlas.ThermalExpansionCoefficient — Type
ThermalExpansionCoefficient() <: AbstractQuantityThe (isobaric, volumetric) thermal-expansion coefficient α = (1/V)(∂V/∂T)_p.
AbstractQAtlas.ThermodynamicPotential — Type
ThermodynamicPotential(name, x::PotentialTerm, y::PotentialTerm)A thermodynamic potential Φ of the two natural variables x.variable, y.variable, with differential dΦ = x.sign·x.conjugate·d(x.variable) + y.sign·y.conjugate·d(y.variable). The four standard potentials are thermodynamic_potentials; the Maxwell relation falls out via maxwell_relation.
AbstractQAtlas.Thermopower — Type
Thermopower{I}() <: AbstractQuantity
Thermopower(μ, ν) # each a SymbolThe 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.
AbstractQAtlas.ThreeTangle — Type
ThreeTangle() <: AbstractEntanglementMeasureThe 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.
AbstractQAtlas.TimeDomain — Type
TimeDomain <: AbstractRepresentationTime-domain representation (t) — conjugate to FrequencyDomain under the temporal Fourier transform.
AbstractQAtlas.TopologicalEntanglementEntropy — Type
TopologicalEntanglementEntropy() <: AbstractEntanglementMeasureThe 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.
AbstractQAtlas.TopologicalInvariant — Type
TopologicalInvariant() <: AbstractQuantityThe 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).
AbstractQAtlas.TripartiteInformation — Type
TripartiteInformation() <: AbstractEntanglementMeasureThe tripartite information I₃(A:B:C) = I(A:B) + I(A:C) − I(A:BC) — can be negative (a diagnostic of scrambling / multipartite correlation).
AbstractQAtlas.TsallisEntropy — Type
TsallisEntropy(q::Real) <: AbstractEntanglementMeasureThe 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.
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).
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.
AbstractQAtlas.Typical — Type
Typical(quantity::Q) <: AbstractQuantityThe 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.
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 + _errAbstractQAtlas.UniversalityClass — Type
UniversalityClass() <: AbstractQuantityThe universality class a model's transition belongs to (returned as a Universality tag by implementing atlases).
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.
AbstractQAtlas.VectorPotential — Type
VectorPotential(components::Real...)
VectorPotential(a::Real) # one dimensionThe 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.
AbstractQAtlas.VectorPotentialField — Type
VectorPotentialField <: AbstractFieldThe 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.
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/Δ.
AbstractQAtlas.Volume — Type
Volume() <: AbstractQuantityThe volume V — conjugate to the Pressure.
AbstractQAtlas.VonNeumannEntropy — Type
VonNeumannEntropy() <: AbstractEntanglementMeasureThe 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.
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:
| process | WaveMixing | arguments | emits |
|---|---|---|---|
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.
AbstractQAtlas.WeinribHalperinCriterion — Type
WeinribHalperinCriterion() <: RelevanceCriterionDisorder 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.
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.
AbstractQAtlas.DifferenceFrequencyGeneration — Method
DifferenceFrequencyGeneration()Difference-frequency generation: χ⁽²⁾(ω₁, −ω₂), emitting at ω₁ − ω₂. OpticalRectification is its ω₂ = ω₁ case.
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.
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.
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.
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.
AbstractQAtlas.SumFrequencyGeneration — Method
SumFrequencyGeneration()Sum-frequency generation: χ⁽²⁾(ω₁, ω₂), emitting at ω₁ + ω₂. The generic second-order two-colour cut — HarmonicGeneration(2) is its ω₂ = ω₁ case, and the Pockels effect is its ω₂ = 0 case.
AbstractQAtlas._bc_size — Function
_bc_size(bc::BoundaryCondition, kwargs) -> IntReturn 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.
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.
AbstractQAtlas._unbounded — Method
An unbounded stand-in used only to re-check arithmetic; identity where none is needed.
AbstractQAtlas.all_relations — Method
all_relations(; domain=nothing) -> Vector{AbstractRelation}Every relation declared with @relation in this package, optionally filtered by domain. The registry is what makes the package adoptable in one call: a consumer never hand-lists relations (see relation_report).
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 ().
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 whichDisjoint 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.
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.
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 β).
AbstractQAtlas.at_size — Method
at_size(q::AbstractQuantity, L) -> VariableKey
at_size(::Type{<:AbstractQuantity}, L) -> VariableKeyThe 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.
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.
AbstractQAtlas.bag — Method
bag(cs::ConventionSet, pairs...) -> BagA 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 natsAbstractQAtlas.bag — Method
bag(pairs...) -> BagBuild 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^<)AbstractQAtlas.bound_direction — Method
bound_direction(rel::AbstractRelation) -> Union{Nothing,Symbol}Which way the bound constrains its subject:
:upper— declaredbounded ≤ bounding(the subject is bounded from above),:lower— declaredbounded ≥ 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.
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.
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.
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.
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()]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)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.
AbstractQAtlas.card_jsonl — Method
card_jsonl([io=stdout], cards) -> nothingStream 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.
AbstractQAtlas.causally_ordered — Method
causally_ordered(t̄...) -> BoolWhether 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.
AbstractQAtlas.check — Method
check(rel::AbstractRelation, b::Bag; atol=0, extras...) -> BoolType-keyed check: residual(rel, b; extras...) within atol (equalities |·| ≤ atol, inequalities · ≥ −atol).
AbstractQAtlas.check — Method
check(rel::AbstractRelation; atol=0, vars...) -> Boolabs(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.
AbstractQAtlas.check_all — Method
check_all(b::Bag; atol=0, domain=nothing, extras...) -> Booltrue iff every applicable type-keyed relation passes on the bag b — and at least one applies (an empty match is false).
AbstractQAtlas.check_all — Method
check_all(data::NamedTuple; atol=0, domain=nothing) -> Booltrue iff every applicable relation passes on data, and at least one relation applies: an empty match is false, never a silent green.
AbstractQAtlas.clear_fetch_cache! — Method
clear_fetch_cache!()Empty the fetch_cached memoization cache — e.g. after a model's parameters change, invalidating stored values. Returns nothing.
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.
AbstractQAtlas.conditional_mutual_information — Method
conditional_mutual_information(b::Bag, A::Region, B::Region, C::Region) -> NumberThe 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.
AbstractQAtlas.conjugate_field — Method
conjugate_field(quantity) -> AbstractField
conjugate_field(::Type{<:AbstractQuantity}) -> AbstractFieldThe 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.
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.
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.
Sis a ring's block entropy inCFTEntanglementPBCand an open chain's end block inCFTEntanglementOBC, 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.domainis the remedy. - A relation does not apply at the point the data describes. Classical 2D Ising exponents agree over
:scalinguntilzis added, at which pointQuantumHyperscalingjoins 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))AbstractQAtlas.consistent — Method
consistent(b::Bag; kwargs...) -> BoolWhether every row of the type-keyed consistency_report agrees.
AbstractQAtlas.consistent — Method
consistent(data::NamedTuple; atol = 0, rtol = 1e-8, domain = nothing,
exclude = ()) -> BoolWhether 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.
AbstractQAtlas.conventions — Method
conventions(pairs...) -> ConventionSetDeclare what this project's values are written in:
conventions(VonNeumannEntropy => Bits) # this one quantity
conventions(AbstractEntanglementMeasure => Bits) # every entropy that has a baseA 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.
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.
AbstractQAtlas.correlation_decay — Method
correlation_decay(::Type{<:AbstractTwoPointCorrelation}) -> SymbolThe 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).
AbstractQAtlas.critical_exponent — Method
critical_exponent(name::Symbol, s::InfiniteRandomness) -> RealA single derived exponent (:β, :ν, :ν_typ, :ψ, :x_m or :φ) of s.
AbstractQAtlas.critical_exponent — Method
critical_exponent(name::Symbol, s::ScalingDimensions) -> RealA single derived exponent (:α, :β, :γ, :δ, :ν, or :η) of s — a keyed view of critical_exponents.
AbstractQAtlas.critical_exponents — Method
critical_exponents(s::InfiniteRandomness) -> NamedTupleThe 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.
AbstractQAtlas.critical_exponents — Method
critical_exponents(s::ScalingDimensions) -> NamedTupleThe 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).
AbstractQAtlas.critical_isotherm — Method
critical_isotherm(::Type{SpontaneousMagnetization}) -> SymbolThe 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.
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|^{+β}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.
AbstractQAtlas.degeneracy_factor — Method
degeneracy_factor(process) -> IntThe 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 — (ω, ω, −ω)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.
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 reachableHonest, 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).
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.
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.
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)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.
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 rootAbstractQAtlas.derivative_order — Method
derivative_order(quantity, field::AbstractField) -> IntHow 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)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.
AbstractQAtlas.derive — Method
derive(target::Symbol; debug=false, knowns...) -> value | DerivationTraceLazily 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, β} → :fThe 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.
AbstractQAtlas.derive — Method
derive(Q::Type, bag::Bag; extras...) -> valueType-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.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.
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 ⟵ FThe 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.
AbstractQAtlas.dimension — Method
dimension(A::VectorPotential) -> IntHow many spatial components A has — the number of SpatialDirection slots, the same count tensor_rank reports.
AbstractQAtlas.disjoint — Method
disjoint(a::Region, b::Region) -> BoolWhether two regions share no site (a ∩ b == ∅) — the precondition of the bipartite entropy inequalities (subadditivity, Araki–Lieb).
AbstractQAtlas.domain — Function
domain(rel::AbstractRelation) -> SymbolThe 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 β).
AbstractQAtlas.ehrenfest_order — Method
ehrenfest_order(::AbstractTransition) -> Union{Int,Float64}The order of the transition in the (generalized) Ehrenfest sense: the index of the lowest free-energy derivative that is discontinuous or singular. 1 for FirstOrder, 2 for ContinuousTransition, Inf for the essential singularity of KosterlitzThouless.
AbstractQAtlas.emitted_frequency — Method
emitted_frequency(process, ω...) -> NumberThe 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 )AbstractQAtlas.ensemble_weight — Method
ensemble_weight(dist, E; N=0) -> RealThe 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).
AbstractQAtlas.entanglement_entropy — Method
entanglement_entropy(region::Region) -> VariableKey
entanglement_entropy(sites...) -> VariableKeyThe 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.)
AbstractQAtlas.fermionic_entanglement_entropy — Method
fermionic_entanglement_entropy(region::Region) -> VariableKey
fermionic_entanglement_entropy(sites...) -> VariableKeyThe bag key for the FermionicEntanglementEntropy S_f(region). The fermionic twin of entanglement_entropy, and a different key — the two entropies agree only on a single contiguous interval, so a bag may hold both and region_report will discover the inequalities within each family without ever mixing them.
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.
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.
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 canonicalAbstractQAtlas.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)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)AbstractQAtlas.fourier_conjugate — Method
fourier_conjugate(rep::AbstractRepresentation) -> AbstractRepresentationThe Fourier-conjugate representation: RealSpace ↔ MomentumSpace, TimeDomain ↔ FrequencyDomain. An involution (fourier_conjugate(fourier_conjugate(r)) == r).
AbstractQAtlas.fourier_conjugate_quantity — Method
fourier_conjugate_quantity(quantity) -> TypeThe 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.
AbstractQAtlas.fourier_pair — Method
fourier_pair(a, b) -> BoolWhether 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)AbstractQAtlas.frequency_arguments — Method
frequency_arguments(quantity) -> Int
frequency_arguments(::Type{<:AbstractQuantity}) -> IntThe 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.
AbstractQAtlas.fss_peak — Method
fss_peak(quantity, L; exponents::NamedTuple) -> RealFinite-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^{γ/ν}AbstractQAtlas.fss_size_exponent — Method
fss_size_exponent(quantity; exponents::NamedTuple) -> RealThe 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.
AbstractQAtlas.graph_edges — Method
graph_edges(g) -> Vector{TypedEdge}The edges of g (the backing vector).
AbstractQAtlas.graph_jsonl — Method
graph_jsonl([io=stdout], g; nodelabel=string) -> nothingStream 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.
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.
AbstractQAtlas.graph_nodes — Method
graph_nodes(g) -> SetEvery node that appears as an endpoint of some edge of g.
AbstractQAtlas.graph_reachable — Method
graph_reachable(g, start) -> SetThe set of nodes reachable from start following edge direction (directed edges from → to, symmetric edges both ways); includes start.
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.
AbstractQAtlas.has_critical_exponents — Method
has_critical_exponents(::AbstractTransition) -> BoolWhether power-law critical exponents in the CriticalExponents sense apply — true only for ContinuousTransition, where the correlation length diverges as a power law.
AbstractQAtlas.has_latent_heat — Method
has_latent_heat(::AbstractTransition) -> BoolWhether the transition releases a latent heat L = T ΔS — i.e. whether the entropy S = −∂F/∂T is discontinuous. Only FirstOrder.
AbstractQAtlas.has_order_parameter — Method
has_order_parameter(::AbstractTransition) -> BoolWhether the transition is characterized by a local order parameter that is nonzero on one side. false for KosterlitzThouless (a topological transition with only quasi-long-range order).
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.
AbstractQAtlas.index_spaces — Method
index_spaces(quantity) -> Tuple{Vararg{AbstractIndex}}
index_spaces(::Type{<:AbstractQuantity}) -> TupleThe 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.
AbstractQAtlas.indices — Method
indices(quantity) -> Tuple{Vararg{Symbol}}
indices(::Type{<:AbstractQuantity}) -> TupleThe 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.
AbstractQAtlas.infinite_randomness — Method
infinite_randomness(; ν, ν_typ, x_m, d) -> InfiniteRandomnessInvert 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//2AbstractQAtlas.intrinsic_permutation_symmetric — Method
intrinsic_permutation_symmetric(quantity) -> Bool
intrinsic_permutation_symmetric(::Type{<:AbstractQuantity}) -> BoolWhether 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).
AbstractQAtlas.is_response — Method
is_response(quantity) -> BoolWhether quantity is a response function — i.e. a derivative of another quantity in the genealogy (derivative_edge is non-nothing).
AbstractQAtlas.keldysh_distribution — Method
keldysh_distribution(stat::ParticleStatistics, ω; β=nothing, T=nothing) -> RealThe 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 classical2T/ω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.3130AbstractQAtlas.law_family — Method
law_family(rel::AbstractRelation) -> SymbolThe 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.
AbstractQAtlas.margin — Function
margin(c::RelevanceCriterion; kwargs...) -> RealThe 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.
AbstractQAtlas.maxwell_relation — Method
maxwell_relation(p::ThermodynamicPotential) -> MaxwellRelationDerive 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/∂TAbstractQAtlas.maxwell_residual — Method
maxwell_residual(m::MaxwellRelation; derivs) -> Number
maxwell_residual(p::ThermodynamicPotential; derivs) -> NumberThe 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//1AbstractQAtlas.mutual_information — Method
mutual_information(b::Bag, A::Region, B::Region; quantity=VonNeumannEntropy) -> NumberThe 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.4AbstractQAtlas.n_drives — Method
n_drives(process) -> IntHow many independent drive frequencies the process consumes — the number of arguments process_frequencies and emitted_frequency expect.
AbstractQAtlas.native_energy_granularity — Function
native_energy_granularity(model, bc) -> :total | :per_siteTrait 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.
AbstractQAtlas.nth_derivative — Method
nth_derivative(route::DerivativeRoute, f, x, n::Integer) -> valueThe 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.
AbstractQAtlas.obeys_entropy_inequalities — Method
obeys_entropy_inequalities(::Type) -> BoolWhether 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.
AbstractQAtlas.observed_order — Method
observed_order(route::DerivativeRoute, f, x, n::Integer) -> Float64The 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.
AbstractQAtlas.operation_scope — Method
operation_scope(via::Symbol) -> SymbolWhich 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).
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.
AbstractQAtlas.parity_forbidden — Method
parity_forbidden(order, observable_parity) -> Bool
parity_forbidden(process_or_quantity, observable_parity) -> BoolWhether 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 — χ⁽³⁾ survivesAbstractQAtlas.peierls_current — Method
peierls_current(H_of_A, A::VectorPotential) -> valueJ = -∂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.
AbstractQAtlas.peierls_phase — Method
peierls_phase(A::VectorPotential{N}, displacement::NTuple{N,<:Real}) -> RealA · 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.
AbstractQAtlas.permutation_equivalent — Method
permutation_equivalent(a, b) -> BoolWhether 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 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.
AbstractQAtlas.potential_root — Method
potential_root(quantity) -> TypeThe 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 Ξ.
AbstractQAtlas.principal_value_hilbert — Method
principal_value_hilbert(response::AbstractResponse, ω) -> NumberThe 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.
AbstractQAtlas.process_frequencies — Method
process_frequencies(process, ω...) -> NTupleThe 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)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.
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.
AbstractQAtlas.quantity_graph_jsonl — Function
quantity_graph_jsonl([io=stdout]) -> nothingStream the whole quantity_graph as JSONL for a network/graph view (node ids are the family type names). A thin wrapper over graph_jsonl.
AbstractQAtlas.quantity_neighbors — Method
quantity_neighbors(fam) -> Vector{QuantityEdge}Every edge of quantity_graph incident on quantity family fam (as from OR to) — its neighborhood. Unlike related_quantities this also surfaces edges naming fam as their to endpoint (e.g. the quantities whose derivative is fam). A thin wrapper over graph_neighbors.
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)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 ZThe dual of relations_constraining (a quantity → the laws it obeys); this is a quantity → the other quantities its laws connect it to.
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.
AbstractQAtlas.region_check_all — Method
region_check_all(b::Bag; atol=0) -> Booltrue 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.
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)whoseS(A),S(B),S(A∪B)are all present:I(A:B) = S(A)+S(B)−S(A∪B) ≥ 0andS(A∪B) ≥ |S(A)−S(B)|.Strong subadditivity, for every pairwise-disjoint triple
(A, B, C)whoseS(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 informationI(A:C|B) ≥ 0).Weak monotonicity, for every pairwise-disjoint triple
(A, B, C)whoseS(A),S(C),S(A∪B),S(B∪C)are present — no full-systemS(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_dimis given:S(A) ≤ |A| · ln(local_dim). This one is opt-in because aRegionis a set of site labels with no Hilbert space attached, so the sweep cannot knowd; omit it and an impossible entropy (5 nats on one qubit) produces no row.One uniform
dfor every site. On a mixed lattice the bound is then only as tight as the value passed, and too generous adMASKS a real violation —S = 1.75on two qubits fails atlocal_dim = 2and passes at3. 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 hereAbstractQAtlas.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)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")
# …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.
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)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()]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.
AbstractQAtlas.report — Method
report(model, quantity, bc;
value, route, provenance,
err=nothing, mechanism="", independent=(), atol=0, refs=()) -> CardPackage 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"])AbstractQAtlas.representation — Method
representation(quantity) -> Tuple{Vararg{AbstractRepresentation}}
representation(::Type{<:AbstractQuantity}) -> TupleThe 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.
AbstractQAtlas.residual — Method
residual(rel::AbstractRelation, b::Bag; extras...) -> NumberType-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))AbstractQAtlas.residual — Method
residual(rel::AbstractRelation; vars...) -> NumberSigned 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).
AbstractQAtlas.response_order — Method
response_order(quantity) -> Int
response_order(::Type{<:AbstractQuantity}) -> IntFor 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).
AbstractQAtlas.scaling_dimensions — Method
scaling_dimensions(; ν, η, d) -> ScalingDimensionsInvert 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)AbstractQAtlas.singular_form — Method
singular_form(quantity, t; exponents::NamedTuple) -> RealThe 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.
AbstractQAtlas.slack — Method
slack(ineq::AbstractInequality; vars...) -> NumberThe non-negativity margin of an inequality — its residual: how far from saturation, negative iff the inequality is violated.
AbstractQAtlas.solve — Method
solve(rel::AbstractRelation, Q::Type, b::Bag; extras...) -> NumberType-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)) # 5AbstractQAtlas.solve — Method
solve(rel::AbstractRelation, ::Val{x}; vars...) -> NumberThe 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.
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.AbstractQAtlas.spectral_moment — Method
spectral_moment(response::AbstractResponse, n::Integer) -> NumberThe 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.
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)AbstractQAtlas.step_size — Method
step_size(route::DerivativeRoute) -> Union{Real,Nothing}
with_step_size(route::DerivativeRoute, h::Real) -> DerivativeRouteThe 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.
AbstractQAtlas.tensor_rank — Method
tensor_rank(quantity) -> Int
tensor_rank(::Type{<:AbstractQuantity}) -> IntThe 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.
AbstractQAtlas.thermal_derivative — Method
thermal_derivative(quantity, potential, x) -> value
thermal_derivative(χ::Susceptibility, F, h⃗::AbstractVector, components) -> valueThe 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):
quantity | potential | result |
|---|---|---|
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)) # −1AbstractQAtlas.thermal_derivative — Method
thermal_derivative(quantity, potential, x, route::DerivativeRoute) -> valuethermal_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)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)]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 |
AbstractQAtlas.topological_entanglement_entropy — Method
topological_entanglement_entropy(b::Bag, A::Region, B::Region, C::Region) -> NumberThe 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.
AbstractQAtlas.tripartite_information — Method
tripartite_information(b::Bag, A::Region, B::Region, C::Region) -> NumberThe 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.
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).
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.
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).
AbstractQAtlas.variable_support — Method
variable_support(v) -> SupportThe 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).
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.
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.
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 formDeclare 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 - τ_ACIn 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.
AbstractQAtlas.@relation — Macro
@relation :domain Name(x, y, z, opt=default) = exprDeclare 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 throughrelation_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β + γ - 2AbstractQAtlas.StatisticalMechanics — Module
Equilibrium statistical mechanics: occupation statistics → ensembles → thermodynamic potentials → response, FDT & stability.
AbstractQAtlas.StatisticalMechanics.AnnealedFreeEnergyBound — Type
AnnealedFreeEnergyBound <: AbstractInequalityThe 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.
AbstractQAtlas.StatisticalMechanics.CanonicalTPQ — Type
CanonicalTPQ <: AbstractRelationThe 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.
AbstractQAtlas.StatisticalMechanics.ClausiusClapeyron — Type
ClausiusClapeyron <: AbstractRelationThe 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.
AbstractQAtlas.StatisticalMechanics.CompressibilityPositivity — Type
CompressibilityPositivity <: AbstractInequalityMechanical stability: the isothermal compressibility is non-negative,
κ_T ≥ 0
(slack κ_T), the convexity of the free energy in volume.
Variables: κT.
AbstractQAtlas.StatisticalMechanics.CrooksFluctuationTheorem — Type
CrooksFluctuationTheorem <: AbstractRelationThe 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).
AbstractQAtlas.StatisticalMechanics.ElectricCurrentResponse — Type
ElectricCurrentResponse <: AbstractRelationThe 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.
AbstractQAtlas.StatisticalMechanics.EntropyResponse — Type
EntropyResponse <: AbstractRelationEntropy 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.
AbstractQAtlas.StatisticalMechanics.FreeEnergyFromZ — Type
FreeEnergyFromZ <: AbstractRelationThe 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.
AbstractQAtlas.StatisticalMechanics.FreeEnergyLegendre — Type
FreeEnergyLegendre <: AbstractRelationThe 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.
AbstractQAtlas.StatisticalMechanics.GibbsDuhem — Type
GibbsDuhem <: AbstractRelationThe 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μ.
AbstractQAtlas.StatisticalMechanics.GibbsHelmholtz — Type
GibbsHelmholtz <: AbstractRelationThe 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.
AbstractQAtlas.StatisticalMechanics.GrandPotentialLegendre — Type
GrandPotentialLegendre <: AbstractRelationThe grand potential as the Legendre transform of the free energy that trades the particle number for the chemical potential,
Ω = F − μN.
The grand-canonical companion of FreeEnergyLegendre (F = U − TS): it opens the second root of the response genealogy (GrandPotential), from which N = −∂Ω/∂μ follows (ParticleNumberResponse).
Variables: Ω, F, μ, N.
AbstractQAtlas.StatisticalMechanics.HeatCapacityDifference — Type
HeatCapacityDifference <: AbstractRelationThe Mayer relation between the constant-pressure and constant-volume heat capacities,
c_p − c_v = T v α² / κ_T,
with α = (1/V)(∂V/∂T)_p the ThermalExpansionCoefficient, κ_T = −(1/V)(∂V/∂p)_T the IsothermalCompressibility, and v the (per-site) volume. Purely thermodynamic — always non-negative since κ_T > 0, so c_p ≥ c_v.
Variables: Cp, Cv, T, v, α, κT.
AbstractQAtlas.StatisticalMechanics.JarzynskiEquality — Type
JarzynskiEquality <: AbstractRelationJarzynski'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).
AbstractQAtlas.StatisticalMechanics.JarzynskiSecondLaw — Type
JarzynskiSecondLaw <: AbstractInequalityThe 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⟩.
AbstractQAtlas.StatisticalMechanics.LinearResponseFDT — Type
LinearResponseFDT <: AbstractRelationThe general static linear-response identity for a perturbation H(λ) = H₀ − λ·O with [O, H₀] = 0 (classical statistics or a commuting observable):
∂⟨O⟩/∂λ = β Var(O).
SusceptibilityFDT is this relation with O = M and a 1/N normalization.
AbstractQAtlas.StatisticalMechanics.MagnetizationResponse — Type
MagnetizationResponse <: AbstractRelationThe order parameter as the field-derivative of the free energy,
M = −∂F/∂h.
The first edge of the field-derivative genealogy (derivative_edge(Magnetization{:z})), stated exactly. Supplied-derivative convention: dF_dh is the caller-computed ∂F/∂h at the working point.
AbstractQAtlas.StatisticalMechanics.MaxwellEnthalpy — Type
MaxwellEnthalpy <: AbstractRelationThe Maxwell relation from the enthalpy H(S, p):
(∂T/∂p)_S = (∂V/∂S)_p.
Variables: dT_dp, dV_dS.
AbstractQAtlas.StatisticalMechanics.MaxwellGibbs — Type
MaxwellGibbs <: AbstractRelationThe Maxwell relation from the Gibbs free energy G(T, p):
(∂S/∂p)_T = −(∂V/∂T)_p.
Variables: dS_dp, dV_dT.
AbstractQAtlas.StatisticalMechanics.MaxwellHelmholtz — Type
MaxwellHelmholtz <: AbstractRelationThe Maxwell relation from the Helmholtz free energy F(T, V):
(∂S/∂V)_T = (∂p/∂T)_V.
Variables: dS_dV, dp_dT.
AbstractQAtlas.StatisticalMechanics.MaxwellInternal — Type
MaxwellInternal <: AbstractRelationThe Maxwell relation from the internal energy U(S, V):
(∂T/∂V)_S = −(∂p/∂S)_V.
Variables: dT_dV, dp_dS.
AbstractQAtlas.StatisticalMechanics.MicrocanonicalTemperature — Type
MicrocanonicalTemperature <: AbstractRelationThe 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.
AbstractQAtlas.StatisticalMechanics.ParticleNumberResponse — Type
ParticleNumberResponse <: AbstractRelationThe 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μ.
AbstractQAtlas.StatisticalMechanics.SpecificHeatFDT — Type
SpecificHeatFDT <: AbstractRelationThe 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 estimatorAbstractQAtlas.StatisticalMechanics.SpecificHeatFromEntropy — Type
SpecificHeatFromEntropy <: AbstractRelationThe 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.
AbstractQAtlas.StatisticalMechanics.SpecificHeatPositivity — Type
SpecificHeatPositivity <: AbstractInequalityThermal stability: the specific heat is non-negative,
C_v ≥ 0
(slack C_v; from C_v = β²·Var(E)/N, SpecificHeatFDT, a variance). A measured C_v < 0 is unphysical — a diagnostic that catches a broken simulation.
Variables: Cv.
AbstractQAtlas.StatisticalMechanics.StructureFactorSusceptibility — Type
StructureFactorSusceptibility <: AbstractRelationThe 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).
AbstractQAtlas.StatisticalMechanics.SusceptibilityFDT — Type
SusceptibilityFDT <: AbstractRelationThe 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.
AbstractQAtlas.StatisticalMechanics.SusceptibilityResponse — Type
SusceptibilityResponse <: AbstractRelationThe 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.
AbstractQAtlas.StatisticalMechanics.TypicalBelowAverage — Type
TypicalBelowAverage <: AbstractInequalityThe 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⟩.
AbstractQAtlas.StatisticalMechanics.boltzmann_occupation — Method
boltzmann_occupation(ε; β=nothing, T=nothing, μ=0) -> RealClassical (Maxwell–Boltzmann) occupation n(ε) = e^{−β(ε−μ)} — the common β(ε − μ) ≫ 1 limit of both quantum statistics.
AbstractQAtlas.StatisticalMechanics.occupation — Method
occupation(stat::ParticleStatistics, ε; β=nothing, T=nothing, μ=0) -> RealMean occupation number of a single-particle level at energy ε:
Fermionic(): Fermi–Diracn(ε) = 1 / (e^{β(ε−μ)} + 1)— bounded in[0, 1], particle–hole symmetric aboutn(μ) = 1/2.Bosonic(): Bose–Einsteinn(ε) = 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.
AbstractQAtlas.StatisticalMechanics.squeezed_mean_photons — Method
squeezed_mean_photons(r) -> RealMean photon number of the squeezed vacuum, ⟨n⟩ = sinh²(r) — equivalently (Var(x) + Var(p))/2 − 1/2, since ⟨x²⟩ + ⟨p²⟩ = 2⟨n⟩ + 1.
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.
AbstractQAtlas.Criticality — Module
Critical phenomena and conformal field theory: scaling laws, finite-size scaling, Cardy, the c-theorem.
AbstractQAtlas.Criticality.ActivatedAutocorrelation — Type
ActivatedAutocorrelation <: AbstractRelationAutocorrelation 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).
AbstractQAtlas.Criticality.ActivatedCriticalCorrelation — Type
ActivatedCriticalCorrelation <: AbstractRelationexp⟨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), ψ.
AbstractQAtlas.Criticality.ActivatedDynamicalScaling — Type
ActivatedDynamicalScaling <: AbstractRelationActivated 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].
AbstractQAtlas.Criticality.ActivatedFiniteSizeScaling — Type
ActivatedFiniteSizeScaling <: AbstractRelationFinite-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.
AbstractQAtlas.Criticality.ActivatedMomentGrowth — Type
ActivatedMomentGrowth <: AbstractRelationThe 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, ψ.
AbstractQAtlas.Criticality.ActivatedSpecificHeat — Type
ActivatedSpecificHeat <: AbstractRelationLow-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.
AbstractQAtlas.Criticality.ActivatedSusceptibility — Type
ActivatedSusceptibility <: AbstractRelationLow-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.
AbstractQAtlas.Criticality.CTheorem — Type
CTheorem <: AbstractInequalityZamolodchikov'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.
AbstractQAtlas.Criticality.CardyDensityOfStates — Type
CardyDensityOfStates <: AbstractRelationCardy'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, Δ.
AbstractQAtlas.Criticality.CasimirCentralCharge — Type
CasimirCentralCharge <: AbstractRelationThe 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.
AbstractQAtlas.Criticality.ConventionalFieldSpecificHeat — Type
ConventionalFieldSpecificHeat <: AbstractRelationSpecific 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.
AbstractQAtlas.Criticality.ConventionalFieldSusceptibility — Type
ConventionalFieldSusceptibility <: AbstractRelationSusceptibility 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.
AbstractQAtlas.Criticality.ConventionalFiniteSizeEnergy — Type
ConventionalFiniteSizeEnergy <: AbstractRelationThe 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.
AbstractQAtlas.Criticality.CriticalAutocorrelation — Type
CriticalAutocorrelation <: AbstractRelationAutocorrelation 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.
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.
AbstractQAtlas.Criticality.CriticalQuantumSpecificHeat — Type
CriticalQuantumSpecificHeat <: AbstractRelationLow-temperature specific heat at a conventional random quantum critical point,
c_V(T) ∼ T^{−α/νz} ⟹ d(ln c_V)/d(ln T)·νz + α = 0.
Same thermal length as CriticalQuantumSusceptibility, so the two together over-determine z from thermodynamics alone.
Variables: dlogc_dlogT, α, ν, z.
Reference: [2] Eq. (A.14), §A.2.
AbstractQAtlas.Criticality.CriticalQuantumSusceptibility — Type
CriticalQuantumSusceptibility <: AbstractRelationLow-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.
AbstractQAtlas.Criticality.CriticalSelfAveraging — Type
CriticalSelfAveraging <: AbstractRelationR_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.
AbstractQAtlas.Criticality.DynamicalScaling — Type
DynamicalScaling <: AbstractRelationThe 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.
AbstractQAtlas.Criticality.FiniteSizeGap — Type
FiniteSizeGap <: AbstractRelationThe 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.
AbstractQAtlas.Criticality.Fisher — Type
Fisher <: AbstractRelationThe Fisher identity γ = ν(2 − η), relating the susceptibility to the correlation function that produces it.
Reference: [58] (J. Math. Phys. 5, 944).
AbstractQAtlas.Criticality.FixedPointDisorderStrength — Type
FixedPointDisorderStrength <: AbstractRelationAt 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.
AbstractQAtlas.Criticality.GriffithsAutocorrelation — Type
GriffithsAutocorrelation <: AbstractRelationAutocorrelation 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.
AbstractQAtlas.Criticality.GriffithsExponentDivergence — Type
GriffithsExponentDivergence <: AbstractRelationWhy 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δ, ν, ψ.
AbstractQAtlas.Criticality.GriffithsSpecificHeat — Type
GriffithsSpecificHeat <: AbstractRelationThe 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.
AbstractQAtlas.Criticality.GriffithsSusceptibility — Type
GriffithsSusceptibility <: AbstractRelationThe 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.
AbstractQAtlas.Criticality.Josephson — Type
Josephson <: AbstractRelationThe 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ν.
AbstractQAtlas.Criticality.LargeSpinMoment — Type
LargeSpinMoment <: AbstractRelationThe 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κ).
AbstractQAtlas.Criticality.OrderParameterDimension — Type
OrderParameterDimension <: AbstractRelationThe 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.
AbstractQAtlas.Criticality.OrderedGriffithsEnergyScale — Type
OrderedGriffithsEnergyScale <: AbstractRelationThe 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).
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), ν.
AbstractQAtlas.Criticality.QuantumHyperscaling — Type
QuantumHyperscaling <: AbstractRelationHyperscaling 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.
AbstractQAtlas.Criticality.Rushbrooke — Type
Rushbrooke <: AbstractRelationThe 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//4AbstractQAtlas.Criticality.StrongSelfAveraging — Type
StrongSelfAveraging <: AbstractRelationR_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.
AbstractQAtlas.Criticality.TypicalCorrelationLength — Type
TypicalCorrelationLength <: AbstractRelationAt 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, ν, ψ.
AbstractQAtlas.Criticality.WeinribHalperinExponent — Type
WeinribHalperinExponent <: AbstractRelationWhen 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).
AbstractQAtlas.Criticality.Widom — Type
Widom <: AbstractRelationThe Widom identity γ = β(δ − 1).
Reference: [62] (J. Chem. Phys. 43, 3898), from the homogeneous equation of state.
AbstractQAtlas.Criticality.exponent_residuals — Method
exponent_residuals(nt::NamedTuple; d) -> NamedTuplePer-relation residuals of the scaling laws for the exponent set nt = (α, β, γ, δ, ν, η) at dimension d — the diagnostic companion of exponents_consistent, keyed by lowercase relation name.
AbstractQAtlas.Criticality.exponent_residuals — Method
exponent_residuals(s::ScalingDimensions) -> NamedTuple
exponent_residuals(s::InfiniteRandomness) -> NamedTuplePer-relation residuals of a fixed point that carries its own d, the diagnostic companion of exponents_consistent.
AbstractQAtlas.Criticality.exponents_consistent — Method
exponents_consistent(nt::NamedTuple; d, atol=0) -> BoolGate-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.
AbstractQAtlas.Criticality.exponents_consistent — Method
exponents_consistent(s::ScalingDimensions; atol=0) -> Bool
exponents_consistent(s::InfiniteRandomness; atol=0) -> BoolThe 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.
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.
AbstractQAtlas.Correlations.AdvancedRetardedConjugate — Type
AdvancedRetardedConjugate <: AbstractRelationThe 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.)
AbstractQAtlas.Correlations.BoseEinsteinContraction — Type
BoseEinsteinContraction <: AbstractRelationThe 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).
AbstractQAtlas.Correlations.CorrelationLengthGap — Type
CorrelationLengthGap <: AbstractRelationThe 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, Δ.
AbstractQAtlas.Correlations.DetailedBalance — Type
DetailedBalance <: AbstractRelationThe 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).
AbstractQAtlas.Correlations.DynamicalFDT — Type
DynamicalFDT <: AbstractRelationThe 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).
AbstractQAtlas.Correlations.Dyson — Type
Dyson <: AbstractRelationThe 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.
AbstractQAtlas.Correlations.FSumRule — Type
FSumRule <: AbstractRelationThe 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.
AbstractQAtlas.Correlations.FermiDiracContraction — Type
FermiDiracContraction <: AbstractRelationThe 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).
AbstractQAtlas.Correlations.KMSGreaterLesser — Type
KMSGreaterLesser <: AbstractRelationThe 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).
AbstractQAtlas.Correlations.KeldyshCausality — Type
KeldyshCausality <: AbstractRelationThe 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.
AbstractQAtlas.Correlations.KeldyshComponent — Type
KeldyshComponent <: AbstractRelationDefinition 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^<).
AbstractQAtlas.Correlations.KeldyshDistributionEquilibrium — Type
KeldyshDistributionEquilibrium <: AbstractRelationThe 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.
AbstractQAtlas.Correlations.KeldyshFDT — Type
KeldyshFDT <: AbstractRelationThe 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.
AbstractQAtlas.Correlations.KeldyshKineticGreater — Type
KeldyshKineticGreater <: AbstractRelationThe 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).
AbstractQAtlas.Correlations.KeldyshKineticLesser — Type
KeldyshKineticLesser <: AbstractRelationThe 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).
AbstractQAtlas.Correlations.KramersKronigImag — Type
KramersKronigImag <: AbstractRelationThe 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.
AbstractQAtlas.Correlations.KramersKronigReal — Type
KramersKronigReal <: AbstractRelationThe 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.
AbstractQAtlas.Correlations.LangrethProductAdvanced — Type
LangrethProductAdvanced <: AbstractRelationThe advanced component of a contour product C = A·B: C^A = A^A B^A (Langreth). Variables: Cadv, Aadv, Badv.
AbstractQAtlas.Correlations.LangrethProductGreater — Type
LangrethProductGreater <: AbstractRelationThe greater component of a contour product C = A·B, C^> = A^R B^> + A^> B^A (Langreth). Variables: Cgtr, Aret, Bgtr, Agtr, Badv.
AbstractQAtlas.Correlations.LangrethProductLesser — Type
LangrethProductLesser <: AbstractRelationThe 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.
AbstractQAtlas.Correlations.LangrethProductRetarded — Type
LangrethProductRetarded <: AbstractRelationThe retarded component of a contour product C = A·B: C^R = A^R B^R (Langreth). Matrix-valued in orbital space. Variables: Cret, Aret, Bret.
AbstractQAtlas.Correlations.MassGapPositivity — Type
MassGapPositivity <: AbstractInequalityThe 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: Δ.
AbstractQAtlas.Correlations.NMRExponent — Type
NMRExponent <: AbstractRelationThe 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.
AbstractQAtlas.Correlations.NonequilibriumDistribution — Type
NonequilibriumDistribution <: AbstractRelationThe 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).
AbstractQAtlas.Correlations.ResponseRealityImag — Type
ResponseRealityImag <: AbstractRelationThe 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.
AbstractQAtlas.Correlations.ResponseRealityReal — Type
ResponseRealityReal <: AbstractRelationThe 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.
AbstractQAtlas.Correlations.SelfEnergyKeldyshFDT — Type
SelfEnergyKeldyshFDT <: AbstractRelationThe 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).
AbstractQAtlas.Correlations.SpectralFromGreens — Type
SpectralFromGreens <: AbstractRelationThe 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.
AbstractQAtlas.Correlations.SpectralFromKeldysh — Type
SpectralFromKeldysh <: AbstractRelationThe 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.)
AbstractQAtlas.Correlations.SpectralSumRule — Type
SpectralSumRule <: AbstractRelationThe 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.
AbstractQAtlas.Correlations.StaticFromDynamicalStructureFactor — Type
StaticFromDynamicalStructureFactor <: AbstractRelationThe 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.
AbstractQAtlas.Correlations.StaticStructureFactorFromCorrelation — Type
StaticStructureFactorFromCorrelation <: AbstractRelationThe 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.
AbstractQAtlas.Correlations.TwoTerminalDistribution — Type
TwoTerminalDistribution <: AbstractRelationThe 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.
AbstractQAtlas.Correlations.wick_contraction — Method
wick_contraction(G::AbstractMatrix, cr::AbstractVector{<:Integer},
an::AbstractVector{<:Integer}) -> NumberWick'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.
AbstractQAtlas.Correlations.wick_density_correlation — Method
wick_density_correlation(G::AbstractMatrix, i::Integer, j::Integer) -> NumberDensity–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.
AbstractQAtlas.Correlations.wick_permanent — Method
wick_permanent(G::AbstractMatrix, cr::AbstractVector{<:Integer},
an::AbstractVector{<:Integer}) -> NumberWick'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.)
AbstractQAtlas.Correlations.wick_pfaffian — Method
wick_pfaffian(A::AbstractMatrix) -> NumberThe 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).
AbstractQAtlas.Transport — Module
Transport: DC/AC conductivity, thermal & thermoelectric coefficients, the Hall family, Onsager, Wiedemann–Franz, optical sum rule, Johnson–Nyquist.
AbstractQAtlas.Transport.CurrentNoiseFDT — Type
CurrentNoiseFDT <: AbstractRelationThe 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).
AbstractQAtlas.Transport.CyclotronFrequency — Type
CyclotronFrequency <: AbstractRelationThe cyclotron frequency of a carrier in a magnetic field,
ω_c = e B / m,
(MagneticFluxDensity B, EffectiveMass m); sets the Hall angle tan θ_H = ω_c τ (HallAngle).
Variables: ωc, e, B, m.
AbstractQAtlas.Transport.EinsteinRelation — Type
EinsteinRelation <: AbstractRelationThe 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).
AbstractQAtlas.Transport.HallAngle — Type
HallAngle <: AbstractRelationThe 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.
AbstractQAtlas.Transport.HallResistivity — Type
HallResistivity <: AbstractRelationThe 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.
AbstractQAtlas.Transport.IoffeRegel — Type
IoffeRegel <: AbstractInequalityThe 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 ℓ.
AbstractQAtlas.Transport.KelvinRelation — Type
KelvinRelation <: AbstractRelationThe Kelvin (second Thomson) relation — a consequence of Onsager reciprocity (Onsager, [68]) — tying the Peltier coefficient to the thermopower,
Π = T · S.
Variables: Π, S, T.
AbstractQAtlas.Transport.LongitudinalResistivity — Type
LongitudinalResistivity <: AbstractRelationThe 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.
AbstractQAtlas.Transport.MobilityConductivity — Type
MobilityConductivity <: AbstractRelationThe Drude relation between conductivity, carrier density and mobility,
σ = n e μ,
the current-channel definition of the Mobility μ (CarrierDensity n, charge e).
Variables: σ, n, e, μ.
AbstractQAtlas.Transport.MottFormula — Type
MottFormula <: AbstractRelationThe 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.
AbstractQAtlas.Transport.NernstCoefficient — Type
NernstCoefficient <: AbstractRelationThe Nernst coefficient — the transverse (off-diagonal) thermopower per unit magnetic field,
ν_N = S_xy / B,
the thermoelectric analogue of the Hall effect (MagneticFluxDensity B).
Variables: νN, S_xy, B.
AbstractQAtlas.Transport.OnsagerReciprocity — Type
OnsagerReciprocity <: AbstractRelationOnsager 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_νμ.
AbstractQAtlas.Transport.OpticalSumRule — Type
OpticalSumRule <: AbstractRelationThe 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.
AbstractQAtlas.Transport.PowerFactor — Type
PowerFactor <: AbstractRelationThe thermoelectric power factor,
PF = S² σ,
the numerator of ZT; the material's electrical thermoelectric quality (Thermopower S, Conductivity σ).
Variables: PF, S, σ.
AbstractQAtlas.Transport.RighiLeduc — Type
RighiLeduc <: AbstractRelationThe 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).
AbstractQAtlas.Transport.ThermoelectricFigureOfMerit — Type
ThermoelectricFigureOfMerit <: AbstractRelationThe dimensionless thermoelectric figure of merit,
ZT = S² σ T / κ,
setting the Carnot-fraction efficiency of a thermoelectric (Thermopower S, electrical Conductivity σ, total ThermalConductivity κ).
Variables: ZT, S, σ, T, κ.
AbstractQAtlas.Transport.VonKlitzing — Type
VonKlitzing <: AbstractRelationThe 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.
AbstractQAtlas.Transport.WiedemannFranz — Type
WiedemannFranz <: AbstractRelationThe 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).
AbstractQAtlas.QuantumInformation — Module
Quantum information & entanglement: the entropy zoo, its inequalities, multipartite entanglement, measurement and topological entanglement entropy.
AbstractQAtlas.QuantumInformation.ArakiLieb — Type
ArakiLieb <: AbstractInequalityThe 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.
AbstractQAtlas.QuantumInformation.CFTEntanglementChordSlope — Type
CFTEntanglementChordSlope <: AbstractRelationdS/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.
AbstractQAtlas.QuantumInformation.CFTEntanglementInfinite — Type
CFTEntanglementInfinite <: AbstractRelationThe 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.
AbstractQAtlas.QuantumInformation.CFTEntanglementOBC — Type
CFTEntanglementOBC <: AbstractRelationThe 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.
AbstractQAtlas.QuantumInformation.CFTEntanglementPBC — Type
CFTEntanglementPBC <: AbstractRelationEntanglement 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).
AbstractQAtlas.QuantumInformation.CFTEntanglementSlope — Type
CFTEntanglementSlope <: AbstractRelationLogarithmic 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:
| region | ncuts | |
|---|---|---|
| one interval on a ring | 2 | c/3 |
| block at an open end | 1 | c/6 |
| block in the bulk of an open chain | 2 | c/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.
AbstractQAtlas.QuantumInformation.ConcurrenceTangle — Type
ConcurrenceTangle <: AbstractRelationThe tangle is the squared concurrence (Wootters, [14]),
τ = C²,
(Tangle, Concurrence).
Variables: τ, C.
AbstractQAtlas.QuantumInformation.ConditionalEntropyDefinition — Type
ConditionalEntropyDefinition <: AbstractRelationThe quantum conditional entropy,
S(A|B) = S(AB) − S(B),
(ConditionalEntropy; can be negative — an entanglement witness).
Variables: S_cond, S_AB, S_B.
AbstractQAtlas.QuantumInformation.EntanglementSpectrumCorrelation — Type
EntanglementSpectrumCorrelation <: AbstractRelationThe 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: ε, ζ.
AbstractQAtlas.QuantumInformation.EntropyMixingConcavity — Type
EntropyMixingConcavity <: AbstractInequalityConcavity 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ᵢ ρᵢ).
AbstractQAtlas.QuantumInformation.EntropyNonNegativity — Type
EntropyNonNegativity <: AbstractInequalityThe von Neumann / Rényi entanglement entropy is non-negative, S ≥ 0 (slack S). Saturated by a pure (unentangled) subsystem.
Variables: S.
AbstractQAtlas.QuantumInformation.HalvedChainEntropyDifference — Type
HalvedChainEntropyDifference <: AbstractRelationCentral 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.
AbstractQAtlas.QuantumInformation.HolevoMixingBound — Type
HolevoMixingBound <: AbstractInequalityThe 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ᵢ ρᵢ).
AbstractQAtlas.QuantumInformation.InfiniteRandomnessEntanglementPBC — Type
InfiniteRandomnessEntanglementPBC <: AbstractRelationFinite-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.
AbstractQAtlas.QuantumInformation.InfiniteRandomnessEntanglementSlope — Type
InfiniteRandomnessEntanglementSlope <: AbstractRelationThe 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.
AbstractQAtlas.QuantumInformation.KitaevPreskillTEE — Type
KitaevPreskillTEE <: AbstractRelationThe 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.
AbstractQAtlas.QuantumInformation.MarkovEntropyDefinition — Type
MarkovEntropyDefinition <: AbstractRelationThe conditional mutual information (the MarkovEntropy),
I(A:C|B) = S(AB) + S(BC) − S(ABC) − S(B),
equal to the strong-subadditivity slack (StrongSubadditivity); its vanishing marks a quantum Markov chain A–B–C (Hayden, Jozsa, Petz & Winter, [30]).
Variables: I_cmi, S_AB, S_BC, S_ABC, S_B.
AbstractQAtlas.QuantumInformation.MaxEntropyBound — Type
MaxEntropyBound <: AbstractInequalityThe 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.
AbstractQAtlas.QuantumInformation.MeasurementEntropyIncrease — Type
MeasurementEntropyIncrease <: AbstractInequalityA projective measurement (dephasing) does not decrease the entropy,
S(Δρ) ≥ S(ρ)
(slack S_meas − S; MeasurementEntropy). Saturated iff ρ is already diagonal in the measurement basis (Δρ = ρ).
Variables: S = S(ρ) (the bounded one), S_meas = S(Δρ).
AbstractQAtlas.QuantumInformation.MeasurementEntropyRelative — Type
MeasurementEntropyRelative <: AbstractRelationThe entropy gain from a projective measurement equals the relative entropy to the dephased state,
S(Δρ) − S(ρ) = S(ρ‖Δρ),
tying the MeasurementEntropy to the RelativeEntropy (Vedral, [31]).
Variables: S_meas = S(Δρ), S = S(ρ), S_rel = S(ρ‖Δρ).
AbstractQAtlas.QuantumInformation.Monogamy — Type
Monogamy <: AbstractInequalityThe 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.
AbstractQAtlas.QuantumInformation.MutualInformationDefinition — Type
MutualInformationDefinition <: AbstractRelationThe quantum mutual information,
I(A:B) = S(A) + S(B) − S(AB),
(MutualInformation; non-negative by Subadditivity).
Variables: I, S_A, S_B, S_AB.
AbstractQAtlas.QuantumInformation.OffCriticalEntanglementSaturation — Type
OffCriticalEntanglementSaturation <: AbstractRelationAway from criticality the entropy stops growing with ℓ and saturates on the correlation length (Iglói & Lin, [73], Eq. 5, valid for ξ ≪ ℓ):
S ≃ ncuts · (c/6) ln ξ.
The source's b is ncuts (see entanglement_cuts): the same axis counts here, with ξ in the place ℓ held.
AbstractQAtlas.QuantumInformation.RelativeEntropyNonNegativity — Type
RelativeEntropyNonNegativity <: AbstractInequalityKlein'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(ρ‖σ).
AbstractQAtlas.QuantumInformation.RenyiEntropyMoment — Type
RenyiEntropyMoment <: AbstractRelationThe Rényi entropy from the density-matrix moment Tr ρ^α (α ≠ 1),
S_α = ln(Tr ρ^α) / (1 − α),
the general form behind RenyiTwoPurity (α = 2: S_2 = −ln Tr ρ²) and, as α → 1, the VonNeumannEntropy.
Variables: Sα, moment = Tr ρ^α, α.
AbstractQAtlas.QuantumInformation.RenyiMonotonicity — Type
RenyiMonotonicity <: AbstractInequalityThe 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).
AbstractQAtlas.QuantumInformation.RenyiTwoPurity — Type
RenyiTwoPurity <: AbstractRelationThe 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.
AbstractQAtlas.QuantumInformation.StrongSubadditivity — Type
StrongSubadditivity <: AbstractInequalityStrong 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.
AbstractQAtlas.QuantumInformation.Subadditivity — Type
Subadditivity <: AbstractInequalitySubadditivity 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.
AbstractQAtlas.QuantumInformation.ThreeTangleDefinition — Type
ThreeTangleDefinition <: AbstractRelationThe residual three-tangle — the genuinely tripartite entanglement beyond the pairwise budget (Coffman, Kundu & Wootters, [42]),
τ₃ = τ(A:BC) − τ(A:B) − τ(A:C),
the saturation gap of Monogamy.
Variables: τ3, τ_ABC, τ_AB, τ_AC.
AbstractQAtlas.QuantumInformation.TripartiteInformationDefinition — Type
TripartiteInformationDefinition <: AbstractRelationThe tripartite information,
I₃(A:B:C) = I(A:B) + I(A:C) − I(A:BC),
(TripartiteInformation); a negative I₃ signals genuinely multipartite (scrambled) correlation.
Variables: I3, I_AB, I_AC, I_ABC.
AbstractQAtlas.QuantumInformation.TsallisEntropyMoment — Type
TsallisEntropyMoment <: AbstractRelationThe Tsallis entropy from the moment Tr ρ^q (q ≠ 1; Tsallis, [44]),
S_q = (1 − Tr ρ^q) / (q − 1).
Variables: Sq, moment = Tr ρ^q, q.
AbstractQAtlas.QuantumInformation.WeakMonotonicity — Type
WeakMonotonicity <: AbstractInequalityWeak 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.
AbstractQAtlas.QuantumInformation.entanglement_cuts — Method
entanglement_cuts(bc::BoundaryCondition, A::Region) -> IntThe 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 bulkAbstractQAtlas.QuantumInformation.free_fermion_entanglement_entropy — Method
free_fermion_entanglement_entropy(ζ) -> Float64The 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.
AbstractQAtlas.QuantumInformation.free_fermion_renyi_entropy — Method
free_fermion_renyi_entropy(ζ, n) -> Float64The order-n Rényi entanglement entropy of a free-fermion region from the correlation-matrix eigenvalues ζ_k (n ≠ 1),
S_A^{(n)} = (1 − n)⁻¹ Σ_k ln[ζ_k^n + (1 − ζ_k)^n],
recovering free_fermion_entanglement_entropy as n → 1.
AbstractQAtlas.QuantumInformation.page_average_entropy — Method
page_average_entropy(dA, dB) -> Float64Page'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.
AbstractQAtlas.QuantumFoundations — Module
Quantum-mechanical foundations & bounds: virial, Hellmann–Feynman, Ehrenfest, zero-variance eigenstate, the uncertainty relation and the Lieb–Robinson bound.
AbstractQAtlas.QuantumFoundations.EhrenfestMomentum — Type
EhrenfestMomentum <: AbstractRelationThe 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.
AbstractQAtlas.QuantumFoundations.EhrenfestPosition — Type
EhrenfestPosition <: AbstractRelationThe Ehrenfest theorem for position (Ehrenfest, [76]): the mean position moves with the mean velocity,
d⟨x⟩/dt = ⟨p⟩ / m.
Variables: dx_dt, p = ⟨p⟩, m.
AbstractQAtlas.QuantumFoundations.EnergyVarianceEigenstate — Type
EnergyVarianceEigenstate <: AbstractRelationThe 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⟩.
AbstractQAtlas.QuantumFoundations.HellmannFeynman — Type
HellmannFeynman <: AbstractRelationThe 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λ.
AbstractQAtlas.QuantumFoundations.LiebRobinsonBound — Type
LiebRobinsonBound <: AbstractInequalityThe 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.
AbstractQAtlas.QuantumFoundations.LoschmidtRate — Type
LoschmidtRate <: AbstractRelationThe 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.
AbstractQAtlas.QuantumFoundations.MandelstamTammBound — Type
MandelstamTammBound <: AbstractInequalityThe 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.
AbstractQAtlas.QuantumFoundations.MargolusLevitinBound — Type
MargolusLevitinBound <: AbstractInequalityThe 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).
AbstractQAtlas.QuantumFoundations.RobertsonUncertainty — Type
RobertsonUncertainty <: AbstractInequalityThe 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]⟩.
AbstractQAtlas.QuantumFoundations.VelocityPositivity — Type
VelocityPositivity <: AbstractInequalityEvery 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.
AbstractQAtlas.QuantumFoundations.VirialTheorem — Type
VirialTheorem <: AbstractRelationThe 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.
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.
AbstractQAtlas.UniversalBounds.BekensteinEntropyBound — Type
BekensteinEntropyBound <: AbstractInequalityThe 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.
AbstractQAtlas.UniversalBounds.CHSHInequality — Type
CHSHInequality <: AbstractInequalityThe 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.
AbstractQAtlas.UniversalBounds.CloningFidelityBound — Type
CloningFidelityBound <: AbstractInequalityThe 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.
AbstractQAtlas.UniversalBounds.FastScramblingBound — Type
FastScramblingBound <: AbstractInequalityThe 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.
AbstractQAtlas.UniversalBounds.LyapunovChaosBound — Type
LyapunovChaosBound <: AbstractInequalityThe 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.
AbstractQAtlas.UniversalBounds.MerminInequality — Type
MerminInequality <: AbstractInequalityThe 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.
AbstractQAtlas.UniversalBounds.OrthogonalizationTimeBound — Type
OrthogonalizationTimeBound <: AbstractInequalityThe 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.
AbstractQAtlas.UniversalBounds.SecretKeyRateBound — Type
SecretKeyRateBound <: AbstractInequalityThe 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.
AbstractQAtlas.Topology — Module
Topological invariants: Chern number, TKNN, winding, bulk–boundary correspondence.
AbstractQAtlas.Topology.BulkBoundary — Type
BulkBoundary <: AbstractRelationThe 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).
AbstractQAtlas.Topology.ChernFromBerryCurvature — Type
ChernFromBerryCurvature <: AbstractRelationThe 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.
AbstractQAtlas.Topology.TKNN — Type
TKNN <: AbstractRelationThe 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.
AbstractQAtlas.Topology.chern_number — Method
chern_number(hk::Function, nbands::Int; nk::Int=24) -> IntChern 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.
AbstractQAtlas.Topology.winding_number — Method
winding_number(dvec::Function; nk::Int=1001) -> IntWinding 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.