Quantum singular value transformation

Quantum singular value transformation is a framework for designing quantum algorithms. It encompasses a variety of quantum algorithms for problems which can be solved with linear algebra, including Hamiltonian simulation, search problems, and linear system solving. It was introduced in 2018 by András Gilyén, Yuan Su, Guang Hao Low, and Nathan Wiebe, generalizing algorithms for Hamiltonian simulation of Guang Hao Low and Isaac Chuang inspired by signal processing.

High-level description
The basic primitive of quantum singular value transformation is the block-encoding. A quantum circuit is a block-encoding of a matrix A if it implements a unitary matrix U such that U contains A in a specified sub-matrix. For example, if $$(\langle 0 | \otimes I) U (|0\rangle |\phi\rangle) = A|\phi\rangle$$, then U is a block-encoding of A.

The fundamental algorithm of QSVT is one that converts a block-encoding of A to a block-encoding of $$p(A, A^\dagger)$$, where p is a polynomial of degree d and $$A^\dagger$$ denotes the conjugate transpose, with only d applications of the circuit and one ancilla qubit. This can be done for a large class of polynomials p which correspond to applying a polynomial to the singular values of A, giving a "singular value transformation".

A variant of this algorithm can also be performed when A is Hermitian, corresponding to an "eigenvalue transformation". That is, given a block-encoding of A with Eigendecomposition of a matrix $$A = \sum \lambda_i u_iu_i^\dagger$$, one can get a block-encoding for $$\sum p(\lambda_i) u_iu_i^\dagger$$, provided p is bounded.

Algorithm

 * Input: A matrix $$A$$ whose singular value decomposition is $$A = W\Sigma V^{\dagger}$$ where $$\Sigma$$ are the singular values of A
 * Input: A polynomial $$P$$
 * Output: A unitary where $$P$$ has been applied to the singular values of $$A$$: $$\begin{bmatrix}WP(\Sigma) V^{\dagger} & . \\. & . \end{bmatrix}$$


 * 1) Prepare a unitary $$U$$ that encodes $$A$$ on the top left side of $$U$$, that is $$U = \begin{bmatrix}A & .  \\. & . \end{bmatrix}$$
 * 2) Initialize an $$n$$ qubit state $$|0\rangle^{\otimes n}$$
 * 3) If the polynomial is odd, first apply $$\tilde{\Pi}_{\phi_{1}} U $$ and then $$ \prod_{k=1}^{\frac{d-1}{2}} \Pi_{\phi_{2k}}U^{\dagger}\tilde{\Pi}_{\phi_{2k+1}} U $$ to $$|0\rangle^{\otimes n}$$
 * 4) If the polynomial is even apply $$ \prod_{k=1}^{\frac{d}{2}} \Pi_{\phi_{2k}-1}U^{\dagger}\tilde{\Pi}_{\phi_{2k}} U  $$ to $$|0\rangle^{\otimes n}$$