# General Functions

In Hilbert Space, nobody can hear you scream...

The primary mathematical object in quantum theory is the Hilbert space. We consider only finite-dimensional

**Hilbert spaces**, denoted by$\mathcal{H}$

. Although we will be considering *finite-dimensional spaces*exclusively, we note here that many of the statements and claims extend directly to the case of separable,*infinite-dimensional Hilbert spaces*, especially for operationally-defined tasks and information quantities.A

$d$

-dimensional Hilbert space $(1 \le d < \infty)$

is defined to be a complex vector space equipped with an inner product. We use the notation $|\psi\rangle$

to denote a vector in $\mathcal{H}$

. More generally, a **Hilbert space**is a "**complete inner product**" space.**Completeness**is an issue that pops up only in

*infinite-dimensional spaces*, so all

*finite-dimensional inner-product spaces*are

**Hilbert spaces**.

A

**ket**is of the form$|v\rangle$

. Mathematically it denotes a vector, ${\boldsymbol {v}}$

, in an abstract (complex) vector space $V$

, and physically it represents a state of some quantum system. An example of a **Ket**can be$|r\rangle } = \begin{bmatrix} x \\ y\\ z\end{bmatrix$

represents a vector $\vec{r} } = \begin{bmatrix} x \\ y\\ z\end{bmatrix$

.A

**bra**is of the form$\langle f|$

. Mathematically it denotes a linear form $f:V\to \mathbb {C}$

, i.e. a linear map that maps each vector in $V$

to a number in the complex plane $\mathbb {C}$

. Letting the linear functional $\langle f|$

act on a vector $|v\rangle$

is written as $\langle f|v\rangle \in \mathbb {C}$

. The **bra**is similar to the**ket**, but the values are in a**row**, and each element is the complex conjugate of the**ket**'s elements.

In the simple case where we consider the vector space

$\mathbb {C} ^{n}$

, a **ket**can be identified with a column vector, and a**bra**as a row vector.

$\langle A| }=\begin{bmatrix}A_1&A_2&A_3&\dots\end{bmatrix$

& $|B\rangle }=\begin{bmatrix}B_1\\B_2\\B_3\\\vdots\end{bmatrix$

$|0\rangle }=\begin{bmatrix}1\\0\end{bmatrix$

, for two dimensional Hilbert Space ,

Defining a basis state

$|0\rangle$

, we can use the `ket`

module like this:from qutipy.general_functions import ket

# Defining a ket 0 in a 2Dimensional Hilbert space,

# The first argument takes a dimension of the Hilbert space,

# while the secind argument takes the ket value.

v = ket(2,0)

Here we have defined the

**ket**v for$|v\rangle } = \begin{bmatrix} 1 \\ 0 \end{bmatrix$

. In numpy, defining the same would need one to define the matrix manually, just as shown in the Overview section.The Partial Transpose plays an important role in quantum information theory due to its connection with entanglement. In fact, it leads to a sufficient condition for a bipartite state to be entangled.

Given quantum systems

$A$

and $B$

, the partial transpose on $B$

is denoted by $T_B\equiv id_A \otimes T_B$

, and it is defined as,

$T_B(X_{AB}) := \sum\limits^{d_B-1}_{j, j'=0} (\mathbf{1}_A \otimes \ket{i}\bra{i'}_B) X_{AB} (\mathbf{1}_A \otimes \ket{i}\bra{i'}_B)$

`partial_transpose(...)`

is a function that computes the partial transpose of a matrix. The transposition may be taken on any subset of the subsystems on which the matrix acts. Defining a state

`X`

with [ ... ]import numpy as np

X = np.array(

[

[ 1, 2, 3, 4],

[ 5, 6, 7, 8],

[ 9, 10, 11, 12],

[13, 14, 15, 16]

]

)

Now we can apply the

`partial_transpose`

function over our state `X`

: from qutipy.general_functions import partial_transpose

pt = partial_transpose(X, [1], X.shape)

Last modified 7mo ago