About this map
Sections
What this is
Quantum algorithms are not written from scratch. They are assembled from a small number of reusable steps, and almost every published method is a different route through the same handful of them.
This is a map of those routes. Circles are the things an algorithm can be holding. Lines are the steps that carry you from one to the next. A method is a path across.
Nothing here is generated. Every line was read out of a paper and checked against it.
How to read it
- Something you can hold — a state, a matrix, a circuit, an answer.
- The same, in the middle of a step you have opened.
- A step. Someone has published a way through it.
- A step whose way through has not been pinned to one method.
- A step nothing published fills yet.
- A step you have opened. What is drawn inside it is how it was done.
- There is a record in the repository for this one.
How to move around
- Two fingers move the map. Pinch to zoom, or hold ctrl and scroll.
- Click a step to open it in place — everything else stays where it is.
- Click a name to read the full record without leaving the map.
- Arrow keys move, plus and minus zoom, zero puts it back.
What a line is claiming
A solid line means a paper puts those two steps together and we have the citation. A long-dashed line means the route is recorded but no single method has been named for that step. A short-dashed line means nothing published fills it — the step is real, the way through is not written yet.
A count after a step's name — ×T/h, ×O(κ) — means the route walks that step that many times rather than once. It is the source's own symbol, and the card says what it stands for and what one turn costs. A step with no count is a step no source we read said is repeated, which is not the same as one taken once.
A line drawn nested under another, on the soft shaded band behind it, is a narrower version of the line above it: the same construction, re-analysed or re-tuned, filling the same step. It is why two lines can draw the identical interior and still be two entries. Lines outside the band are alternatives to their neighbours, not versions of them.
The map does not hide the gaps. An empty step is drawn as an empty step.
What is not here yet
The map covers the algorithm literature. The repository covers circuits and primitives. They overlap less than you would expect, and where a method has no record we say so on its page rather than leaving the space blank.
Where something named here does have a record, its name links straight to it.
Method
Finding a lattice of periods
Some functions repeat in several independent directions at once, so what is hidden is not one period but a lattice of them. Sampling the dual lattice and reconstructing a basis from the samples replaces the continued fraction, and the rounding that makes real-valued directions representable is what limits how many directions can be handled.
Open the full recordFills the slot: Recover the period of a periodic function
Hallgren states the extension and its cost together: "Most of the success in solving this problem has been for abelian groups, including finite abelian groups, , , and . In this paper we extend the hidden subgroup problem to work for ." The gap between the integer and the real case is not a matter of constants — "While there is a straightforward solution of the HSP over , this does not appear to be the case for " — and the limit is stated with its cause rather than as a bound: the method "only appears to work for a constant number of dimensions because the rounding introduces new noise into the distribution that is not present in the integer lattice case". That is why the corpus records for both the unit group and the class group say *constant-degree* number field: the constant is the paper's, not ours.
A circuit evaluating f on a superposition of inputs, the promise that f is periodic, the kind of object its period is (an integer in a finite cyclic group, an irrational real, a lattice of rank r), and — where the period is not an integer — the precision wanted.
Function promised to be periodic → The period, recoveredFourier sample the oracle, then dualize
Hallgren accesses the hidden lattice only through a function with iff , a periodic-function oracle over rather than . Querying the discretized oracle in superposition over a coset of inside a cube leaves a state on points , approximation: each coordinate of rounded up or down by , not itself; the quantum Fourier transform of that state concentrates on the dual lattice . Because sampling this transform over directly "does not appear to be enough to recover the dual lattice," the transform is instead computed over a zero-padded domain for constant ; each measurement then lands within of a point of with probability at least . Repeated sampling yields a spanning set, a basis is extracted, and assumption: is well-conditioned, i.e. is bounded, so recovers a basis for itself.
approximationassumption
The period: an exact integer where the group is finite, or an approximation to the requested precision together with the classical post-processing that turned the measured samples into it.
None found yet.
given a constant-degree number field F, with unit rank r = s + t - 1 by
Dirichlet's unit theorem (s real embeddings, t pairs of complex
embeddings), r itself therefore held CONSTANT (Sec. 2)
problem size n = log|Delta| (Delta the field discriminant) (Sec. 3.2)
the target lattice L = Log O* subset R^r, the image of the unit
group under the Log embedding eps |-> (log|eps|_1, ..., log|eps|_r) (Sec. 2)
a discretized oracle f_N : Z^r -> I x Z^r built from reduced-ideal
computation, with f(x) = f(y) iff x - y in L (Sec. 3.1)
# f_N is only known to be computable in poly time for CONSTANT-degree
# fields -- via Thiel's unpublished ideal-scanning Algorithm 6.2.20,
# or equivalently Schoof's "Scan" algorithm (Sec. 3.1)
requires M = longest vector in a reduced basis of L
N >= n^r * r^2 * M, and N greater than 1/n times the minimum distance
between reduced ideals
q >= r^2 * M (Lemma 3.1)
zero-padding constant k >= 8r
# k >= 8r is NOT restated in Lemma 3.1's printed statement; it comes from
# the phase bound the lemma's proof rests on, a few lines earlier, which
# the paper gives no equation number (Sec. 3.2)
# these bounds are specific to reconstructing THIS lattice from a
# reduced-ideal oracle -- not a generic requirement of every HSP
# instance over R^r
# --- prepare a coset of L, sampled through the rounded oracle --------------
prepare (1/sqrt(q^r)) * sum_{a in Z_q^r} |a> |f_N(a)>
measure the oracle register -- collapses onto some fixed reduced ideal,
leaving a superposition over one coset k0 + L of L inside [0,q)^r
state ~ (1/sqrt(|L_q|)) * sum_{v in L, k0+v in [0,q)^r} |rnd(N*(k0+v))>
# rnd(.) rounds each coordinate up or down, the paper's own bracket
# notation [.] -- the sampled point APPROXIMATES N*v, it is not
# N*v itself, and this rounding is the source of the quantum-side
# noise discussed in the closing note (Sec. 3.2)
# valid once q is large enough relative to M that the fraction of
# coset points near the cube boundary is exponentially small (Sec. 3.2)
# --- zero-pad and Fourier sample the dual lattice ---------------------------
compute the QFT over the ENLARGED domain Z_{q*N*k}^r, not Z_{q*N}^r
# plain Fourier sampling over Z_{qN}^r "does not appear to be enough to
# recover the dual lattice"; the extra factor k must be a CONSTANT (Sec. 3.2)
measure; keep the outcome i in Z_{q*N*k}^r only if every coordinate
satisfies |i_j| <= q*N*k/n, else discard it (Lemma 3.1)
# the paper prints this test WITHOUT absolute-value bars, as
# "i_j <= qNk/n" and "points with any coordinate greater than qNk/n
# are discarded"; the bars are the usable reading, since i encodes
# dual coordinates that can be negative -- the very next line of the
# paper writes |w_i| <= N/n + 1 WITH bars. Use |i_j|; the source
# text says i_j. (Sec. 3.2, Lemma 3.1)
# --- repeat and extract a basis of the dual lattice -------------------------
repeat a constant number of times (Alg. 3.1, step 1a)
# Algorithm 3.1 names no explicit repeat count. Lemma 3.1 gives a
# per-measurement success probability of at least 1/(8(nk)^r) that
# a kept point i/(qk) lands within 1/q of a point of L_perp.
# Separately, the proof of Theorem 1 shows that, conditioned on that
# success, the point lies in a subgroup that generates L_perp with
# probability at least 1/4 -- independent of n -- once N >= 4rM.
# These are two different probabilities for two different questions. (Lemma 3.1; proof of Thm.
# 1)
collect the surviving points i/(qk), each within 1/q of a point of L_perp
extract a basis B for L_perp from the resulting spanning set
# "given a generating set, a basis can be computed" -- cites a separate
# reference, not re-derived here (Alg. 3.1, step 1b)
# --- dualize back to the unit lattice ----------------------------------------
compute B^(-T)
# this step additionally assumes L is WELL CONDITIONED, i.e. that
# ||B|| * ||B^-1|| is bounded -- the paper states this as a needed
# technical condition on the lattice, not something proved to hold (Sec. 3.2)
# inversion is numerically possible because det(L) >= 0.05, a bound
# taken from Thiel, so 1/det(L) does not blow up (Sec. 3.2)
return the columns of B^(-T), an approximate basis for L = Log O* (Alg. 3.1, step 2)
verify each returned vector is actually a unit; discard and repeat the
whole procedure if the check fails (Alg. 3.1, step 3)
# polynomial time is proved ONLY with r (equivalently the field degree)
# held CONSTANT, and the paper names TWO obstacles to lifting that, not
# one: "the quantum limitation of too much noise in Fourier sampling
# because of the rounding of lattice vectors, AS WELL AS the classical
# limitation of computing reduced ideals" -- the latter being the
# constant-degree restriction on f_N noted in the given block above.
# The rounding noise is the obstacle with no analogue in the integer-
# lattice (Z^n) case. Arbitrary degree is left explicitly open (Sec. 1)Section 3.2 holds , the dimension of the period lattice , fixed throughout: "an dimensional lattice , where is a constant." Write for the longest vector in a reduced basis of , for the field's discriminant, and for the problem size. Lemma 3.1 requires both and greater than times the minimum distance between ideals, together with ; the zero-padding factor comes not from the lemma's own statement but from the earlier phase bound it rests on. One Fourier sample over then lands within of a point of with probability at least . Algorithm 3.1 draws "a constant number" of samples and names no count; Theorem 1's proof separately gives a per-sample probability of at least , independent of , once . Polynomial time in is proved only with fixed.
None found yet.
None found yet.
Quipper's Class Number algorithm in Haskell, stage 4 unfinished
- Quipper: Concrete Resource Estimation in Quantum Algorithms
Jonathan M. Smith, Neil J. Ross, Peter Selinger, Benoît Valiron · 2014
About
The only source-code artefact I found for this method, and the entry earns its place by saying exactly how little of it exists. Quipper's CL, Class Number, was one of seven algorithms implemented in Quipper under IARPA's Quantum Computer Science program, and the QAPL report of that work describes it as approximating the class group of a real quadratic number field. Its own module header names the target as a real quadratic field specified by its discriminant, and says the implementation falls into five stages: stage 1 approximates the regulator with a quantum HSP algorithm, stages 2 and 3 refine that estimate and find a generating set for the class group classically, stage 4 computes relations between those generators, again using a version of the HSP algorithm, and stage 5 reads the group structure off a Smith normal form. Where the artefact belongs takes care, because Hallgren's Section 5 has two lattices in it and they are easy to weld into one. The hidden subgroup stage 4 looks for is the lattice of relations , a sublattice of ; this method's lattice is the other one, , and it enters because Section 5 can only evaluate that integer HSP's oracle by going through the unit group first — "start by computing the unit group of , resulting in basis " — since class-group elements are not known to have unique efficiently computable representatives. That is the ground the artefact is filed on, together with the corpus filing `class-group-of-a-number-field` under this method. What it never exercises is the machinery this method is named for: a real quadratic field has unit rank , so that lattice is one-dimensional, the ideals do sit on a line, and stage 4's entry point `structure_circuit` correspondingly takes the regulator as a scalar `CLReal` rather than as a basis. The implementation follows a detailed specification written for the program by Brian J. Matt, Durward McDonell and David Zaret, and the CL modules are credited to Keith Kim, Peter LeFanu Lumsdaine and Alexandr Virodov.
Methods
Stage 4's circuit is `structure_circuit` in `Quipper/Algorithms/CL/CL.hs`. It initialises one register of qubits for each class-group generator and applies a Hadamard to each, initialises four further registers whose widths — like itself — are destructured from a single call to `register_sizes`, applies Hadamards to the distance register to superpose distances, measures and discards `reg_fIN`, applies `qft_int` to each generator register separately, and measures. That measurement is the step whose comment calls it "used to project the system", but with the evaluation step commented out `reg_fIN` still holds the zero it was initialised to and the measurement projects nothing. Between the Hadamards and it sit the six steps that would make this an oracle circuit, and none of them runs. Five are commented out and marked Incomplete: the application of `q_compute_ghat` that would compute the ideal from the exponent registers, the evaluation `q_fJN`, the erasure `erase_at`, the uncomputation `uncompute_i_N_at`, and the second `q_compute_ghat` that would uncompute the ideal. The sixth, `compute_i_N_at`, is the only one left uncommented, and it is declared with a full type signature over a body that is `error "incomplete"`. The comment above the Fourier transform is a question rather than a decision: it says the transform seems to be applicable per register and asks that this be checked, then asks separately whether the endianness is right. The classical side of the same stage is finished: `fJN` and `fJN_d` in `RegulatorClassical.hs` compute the analogue of working within the cycle determined by a given ideal — which the circuit's own comment identifies with the the quantum side is missing — cited in the source to Hallgren's Section 5, and `SmithReduction.hs` supplies the normal form stage 5 needs. `RegulatorQuantum.hs`, whose header says it implements the quantum operations required in stages 1 and 4, states in the third paragraph of that same header that the key functions for stage 4 are not yet implemented.
Data
No dataset. The input is a handful of numbers on a command line: the discriminant , whose default is 28, together with stage-4 parameters left at toy defaults — an approximate regulator of 12.345 and , , , — plus the stage-1 bounds `-s` and `-i`, an optional generator list and a random seed. Everything else the circuit would need is computed rather than supplied: `compute_generators` enumerates, under the Generalized Riemann Hypothesis, the non-principal prime ideals arising as factors of for primes , at most two per prime, following Proposition 4.4 of Haase and Maier. The shipped tests are classical throughout, and neither of the two testing routines touches a quantity stage 4 produced. `test_SNF` runs the stage-5 Smith normal form over three hard-coded sample matrices rather than over any relation matrix stage 4 computed, and `period_of_ideals` walks the cycle of reduced ideals for a given by iterating until the unit ideal comes round again, reporting how many ideals that took and the sum of their distances. `Test.hs`'s own `main` calls neither of them: every line of it except `star_all_ideals 28` is commented out.
Code
The package is `quipper-algorithms`, and on 2026-08-27 its Hackage page listed exactly one version, 0.9.0.0, released — by the package's own ChangeLog — on December 29, 2019. The cabal file gives the licence as BSD3 with the text in COPYRIGHT, a three-clause BSD notice beginning "Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met", and that file also carries the IARPA funding acknowledgement and its disclaimer. Line counts read from that release on 2026-08-27: `CL.hs` 473, `RegulatorQuantum.hs` 504, `RegulatorClassical.hs` 417, `Types.hs` 639, `Auxiliary.hs` 482, `Main.hs` 395, `Test.hs` 227, `RegulatorTemplate.hs` 190, `SmithReduction.hs` 165, for 3,492 lines of Haskell across the nine CL modules. The README documents the `cl` executable's `-4` option as outputting the circuit for stage 4 of the algorithm; the function that option dispatches to, `main_stage4` in `Main.hs`, has a body of one `putStrLn` echoing the parsed options and nothing else. `structure_circuit`, `compute_relations` and `class_number` — the last being the driver that chains all five stages and hands the collected relations to the Smith normal form — appear nowhere outside `CL.hs`, so no command-line path in the shipped binary reaches any of them, and `programs/cl.hs` is a stub that re-exports `Quipper.Algorithms.CL.Main.main` and nothing more. A GitHub mirror last pushed in 2015, thephoeron/quipper-language, carries the same files under `Algorithms/CL/` with the same five Incomplete markers, the same `error "incomplete"`, and a `main_stage4` whose body is the same single `putStrLn`, so the state is not a regression introduced by the release: it is unchanged from at least 2015 through the 2019 version. The project homepage is Peter Selinger's Quipper page at Dalhousie.
Results
Nothing was run on quantum hardware and the package reports no simulator run. What the `cl` binary can actually produce is the stage-1 circuit and the individual subroutine circuits its `-S` option offers — rho, rhoinv, normalize, dotprod, starprod and fn — every one of them stage-1 machinery, with nothing from stage 4 on the list, plus three purely classical computations giving the regulator, the fundamental unit and the fundamental solution of Pell's equation for a given . The QAPL report's claim for all seven algorithms is hedged in the same direction: they are running, in the sense that one can generate the circuit and portion thereof. The single concrete count that report prints is for the triangle-finding algorithm, 30,189,977,982,990 total gates and 4676 qubits; it prints no gate count for CL. This record was written by reading the source, and the package was not built here, so what `cl -4` prints is read off the body of `main_stage4` rather than observed.
- Quipper: Concrete Resource Estimation in Quantum Algorithms
The class group of a constant-degree number field · Qiskit
From the repository — run, not written up from a paper · unsupported
About
The class group of a number field is the finite abelian group of ideals modulo principal ideals. Computing it means computing the structure of that abelian group, not merely its order.
Methods
None found yet.
Data
None found yet.
Code
Qiskit
Results
Literature record · problem statement and speedup class checked against the Quantum Algorithm Zoo entry · primary reference checked against its arXiv abs page
The unit group of a constant-degree number field · Qiskit
From the repository — run, not written up from a paper · unsupported
About
The unit group of a number field is the set of invertible algebraic integers inside it. By Dirichlet's unit theorem it is, up to a root of unity, free abelian of a rank determined by the field's real and complex embeddings, so computing it means finding a fundamental system of units.
Methods
None found yet.
Data
None found yet.
Code
Qiskit
Results
Literature record · problem statement and speedup class checked against the Quantum Algorithm Zoo entry · primary reference checked against its arXiv abs page
- The class group of a constant-degree number field
The class group of a number field is the finite abelian group of ideals modulo principal ideals. Computing it means computing the structure of that abelian group, not merely its order.
- The unit group of a constant-degree number field
The unit group of a number field is the set of invertible algebraic integers inside it. By Dirichlet's unit theorem it is, up to a root of unity, free abelian of a rank determined by the field's real and complex embeddings, so computing it means finding a fundamental system of units.
References
Where the routes meet
11 problems nothing else needs — the places a reader arrives. Open a line to see what is recorded inside it, or click its name to go there.
13 lines have something recorded inside that you have not opened.
Of the routes that have been taken apart, 15 are built entirely from named slots, 15 hand off part of the work and finish the rest themselves, and 20 are one undivided act. None of the three is a defect; they are different things to reuse.
Every line on this figure, in words
The lines on this figure
Solve a nonlinear ODE dy/dt = F(y)
- Embed a nonlinear system into a linear one — opens into 6 · a way across — click it to open it here
- Solve a linear ODE du/dt = A(t)u + b(t) — opens into 9 · a way across — click it to open it here
- Choose a time discretization or propagator approximation → Quantum linear solve — open
- Choose a time discretization or propagator approximation — opens into 6 · a way across — click it to open it here
- Quantum linear solve — opens into 5 · a way across — click it to open it here
- Simulate Hamiltonian evolution → Estimate an observable — open
- Simulate Hamiltonian evolution — opens into 3 · a way across — click it to open it here
- Estimate an observable — opens into 4 · a way across — click it to open it here
Estimate an excited-state energy
- Variational quantum deflation — opens into 3 · a way across — click it to open it here
- Subspace-search variational eigensolver — opens into 3 · a way across — click it to open it here
- Quantum subspace expansion
- Quantum equation of motion
- Folded-spectrum variational eigensolver — opens into 3 · a way across — click it to open it here
- Penalty-constrained variational eigensolver — opens into 3 · a way across — click it to open it here
- Multistate contracted variational eigensolver — opens into 3 · a way across — click it to open it here
Every step you can open
1 of these have an object recorded in the middle; the rest open into the methods that fill them.
- Solve a nonlinear ODE dy/dt = F(y)
- Replace a spatial domain with a finite grid
- Discretize a PDE into one linear system
- Embed a nonlinear system into a linear one
- Solve a linear ODE du/dt = A(t)u + b(t)
- Recast a non-Hermitian generator as Hamiltonian evolution
- Choose a time discretization or propagator approximation
- Quantum linear solve
- Matrix function
- QSP phase factors
- Polynomial approximation
- Block-encode a matrix
- Prepare an input state
- Amplify a success branch
- Simulate Hamiltonian evolution
- Estimate an observable
- Compile a circuit to a specific device
- Satisfy the hardware connectivity constraint
- Approximate a continuous rotation in a discrete gate set
- Recover a noiseless expectation value by post-processing
- Build logical qubits at a target logical error rate
- Estimate a Hamiltonian's ground-state energy
- Choose a parameterised trial state
- Minimise the objective over the parameters
- Estimate an excited-state energy
- Measure what the machine can actually do
- Recover the period of a periodic function
- Estimate the eigenphase of a unitary
- Find the item a check accepts
- Walk a graph to the vertex you want
- Search a cost Hamiltonian for the assignment it minimises
What is on this map, counted
What is here, counted
147 nodes — 31 slots and 116 methods.
76 of the 147 link to a record in the Atlas, between them naming 89 records. The rest name papers and nothing else: this graph describes work the catalogue has not got yet, and the nodes with no record are the list of what a corpus pass has to go and read.
0 slots have no method recorded, and 32 methods have not been taken apart. Both are shown as what they are rather than left blank.
Every claim here rests on a source. This graph cites 140 papers; they and the 172 the Atlas cites alone are registered in one place, with what each reports and everywhere it is cited from. Papers