UPB

UPB is a function that generates an unextendible product basis (UPB). The user may either request a specific UPB from the literature such as 'Tiles' or 'Pyramid', or they may request a minimal UPB of specified dimensions.

Syntax

 * U = UPB(NAME)
 * U = UPB(NAME,OPT_PAR)
 * [U,V,W,...] = UPB(NAME,OPT_PAR)
 * U = UPB(DIM)
 * U = UPB(DIM,VERBOSE)
 * [U,V,W,...] = UPB(DIM,VERBOSE)</tt>

Input arguments
Important: Do not specify both NAME</tt> and DIM</tt>: just one or the other!
 * NAME</tt>: The name of a UPB that is found in the literature. Accepted values are:
 * 'GenShifts'</tt>: A minimal UPB in $(\mathbb{C}^2)^{\otimes p}$ (only valid when p &ge; 3 is odd) constructed in . Note that OPT_PAR</tt> must be the number of parties (i.e., the integer p) in this case.
 * 'Min4x4'</tt>: A minimal UPB in $\mathbb{C}^4 \otimes \mathbb{C}^4$ constructed in.
 * 'Pyramid'</tt>: A minimal UPB in $\mathbb{C}^3 \otimes \mathbb{C}^3$ constructed in.
 * 'QuadRes'</tt>: A minimal UPB in $\mathbb{C}^d \otimes \mathbb{C}^d$ (only valid when 2d-1 is prime and d is odd) constructed in . Note that you must set OPT_PAR</tt> equal to d (the local dimension) in this case.
 * 'Shifts'</tt>: A minimal UPB in $\mathbb{C}^2 \otimes \mathbb{C}^2 \otimes \mathbb{C}^2$ introduced in.
 * 'SixParam'</tt>: The six-parameter UPB in $\mathbb{C}^3 \otimes \mathbb{C}^3$ introduced in Section IV.A of . Note that OPT_PAR</tt> must be a vector containing the six parameters in this case.
 * 'Tiles'</tt>: A minimal UPB in $\mathbb{C}^3 \otimes \mathbb{C}^3$ constructed in.
 * DIM</tt>: A vector containing the local dimensions of the desired UPB. In all cases, the smallest known UPB of the desired dimensionality is returned. If no unextendible product basis is known for the specified dimensions, an error is produced.
 * VERBOSE</tt> (optional, default <tt>1</tt>): A flag (either 1 or 0) indicating whether or not a reference to a journal article that contains the UPB (or a description of how to construct the UPB) returned by this script will be displayed.

Output arguments
If only one output argument is specified (e.g., <tt>U = UPB(DIM)</tt>) then <tt>U</tt> is a matrix whose columns are the product states in the desired UPB.

If multiple output arguments are specified (e.g., <tt>[U,V,W,...] = UPB(DIM)</tt>) then the unextendible product basis is obtained by tensoring the columns of <tt>U, V, W, ...</tt> together. That is, <tt>U, V, W, ...</tt> are the local vectors in the unextendible product basis.

Generating the "Shifts" UPB
The following code returns the "Shifts" UPB, which is a UPB of 4 states on $\mathbb{C}^2 \otimes \mathbb{C}^2 \otimes \mathbb{C}^2$:

Alternatively, we can request that the local vectors on each copy of $\mathbb{C}^2$ are returned, rather than the total product vectors on $\mathbb{C}^2 \otimes \mathbb{C}^2 \otimes \mathbb{C}^2$:

Generating bound entangled states
As noted in, if $$\big\{|v_i\rangle\big\}$$ is an unextendible product basis, then $I - \sum_i |v_i\rangle\langle v_i|$ is (up to scaling) a bound entangled state. The following code illustrates this fact in $\mathbb{C}^3 \otimes \mathbb{C}^5$ by first constructing a UPB in this space, then constructing the corresponding state, and then verifying that this state is bound entangled.

Generating multipartite UPBs
Many multipartite minimal UPBs can be constructed via this script. For example, the following code generates a minimal UPB (of 6 states) in $$\mathbb{C}^2 \otimes \mathbb{C}^2 \otimes \mathbb{C}^3$$:

However, the minimum size of UPBs is still unknown in many multipartite cases – an error is returned in these cases: