purification_mps¶
full name: tenpy.networks.purification_mps
parent module:
tenpy.networks
type: module
Classes

An MPS representing a finitetemperature ensemble using purification. 
Module description
This module contains an MPS class representing an density matrix by purification.
Usually, an MPS represents a pure state, i.e. the density matrix is \(\rho = \psi><\psi\), describing observables as \(<O> = Tr(O\psi><\psi) = <\psiO\psi>\). Clearly, if \(\psi>\) is the ground state of a Hamiltonian, this is the density matrix at T=0.
At finite temperatures \(T > 0\), we want to describe a nonpure density matrix \(\rho = \exp(H/T)\). This can be accieved by the socalled purification: in addition to the physical space P, we introduce a second ‘auxiliar’ space Q and define the density matrix of the physical system as \(\rho = Tr_Q(\phi><\phi)\), where \(\phi>\) is a pure state in the combined phyisical and auxiliar system.
For \(T=\infty\), the density matrix \(\rho_\infty\) is the identity matrix.
In other words, expectation values are sums over all possible states
\(<O> = Tr_P(\rho_\infty O) = Tr_P(O)\).
Saying that each :
on top is to be connected with the corresponding :
on the bottom,
the trace is simply a contraction:
 : : : : : :
      
 
  O 
 
      
 : : : : : :
Clearly, we get the same result, if we insert an identity operator, written as MPO, on the top and bottom:
 : : : : : :
      
 BBBBBB
      
 
  O 
 
      
 B*B*B*B*B*B*
      
 : : : : : :
We use the following label convention:
 q
 ^
 
 vL > B > vR
 
 ^
 p
You can view the MPO as an MPS by combining the p and q leg and defining every physical operator to act trivial on the q leg. In expecation values, you would then sum over over the q legs, which is exactly what we need. In other words, the choice \(B = \delta_{p,q}\) with trivial (length1) virtual bonds yields infinite temperature expectation values for operators action only on the p legs!
Now, you go a step further and also apply imaginary time evolution (acting only on p legs) to the initial infinite temperature state. For example, the normalized state \(\psi> \propto \exp(\beta/2 H)\phi>\) yields expecation values
An additional realtime evolution allows to calculate time correlation functions:
See also [Karrasch2013] for additional tricks! On of their crucial observations is, that
one can apply arbitrary unitaries on the auxiliar space (i.e. the q) without changing the result.
This can actually be used to reduce the necessary virtual bond dimensions:
From the definition, it is easy to see that if we apply \(exp(i H t)\) to the p legs of
\(\phi>\), and \(\exp(+iHt)\) to the q legs, they just cancel out!
(They commute with \(\exp(\beta H/2)\)…)
If the state is modified (e.g. by applying A or B to calculate correlation functions),
this is not true any more. However, we still can find unitaries, which are ‘optimal’ in the sense
of reducing the entanglement of the MPS/MPO to the minimal value.
For a discussion of Disentanglers (implemented in purification_tebd
),
see [Hauschild2018].
Note
The classes MPSEnvironment
and
TransferMatrix
should also work for the
PurificationMPS
defined here.
For example, you can use expectation_value()
for the expectation value of operators between different PurificationMPS.
However, this makes only sense if the same disentangler was applied
to the bra and ket PurificationMPS.
Note
The literature (e.g. section 7.2 of [Schollwoeck2011] or [Karrasch2013]) suggests to use a singlet as a maximally entangled state. Here, we use instead the identity \(\delta_{p,q}\), since it is easier to generalize for p running over more than two indices, and allows a simple use of charge conservation with the above qconj convention. Moreover, we don’t split the physical and auxiliar space into separate sites, which makes TEBD as costly as \(O(d^6 \chi^3)\).
Todo
One can also look at the canonical ensembles by defining the conserved quantities differently, see Barthel (2016), arXiv:1607.01696 for details. Idea: usual charges on p, trivial charges on q; fix total charge to desired value. I think it should suffice to implement another from_infiniteT.