Computing conformal blocks

The library uses the Zamolodchikov recursion to compute four-point conformal blocks on the sphere, and one-point conformal blocks on the torus. Because it is common in bootstrap computations to have to evaluate a given block at hundreds of positions, the library first creates a Block object which stores the coefficients of the block's series expansion, which can then be evaluated at any number of positions.

Examples

The two blocks of code below can be copy-pasted and ran as is. More detailed documentation of the package's functionality can be found below.

Chiral conformal blocks

using BootstrapVirasoro
setprecision(BigFloat, 20, base=10) # work with 20 digits of precision
# define a central charge. big"..." is the syntax for abitrary precision numbers.
# b is the Liouville parameter
c = CC(b = big"0.523"+big"0.1"*im)
# if only standard (16-digit) precision is needed, just do c = CC(b=0.523+0.1*im)
# standard precision is *much* faster.
d1 = ConformalDimension(c, r=1, s=0) # Conformal dimension with Kac indices (r, s) = (1, 0).
d2 = CD(c, P=big"0.54") # CD is synonymous to ConformalDimension, P is the momentum.
d3 = CD(c, Δ=big"4.32") # Δ is the conformal dimension. Type it as \Delta, then tab or enter.
d4 = d3
d = CD(c, P=big"0.32"+big"0.1"*im)

# four-point block:
co1 = Correlation(d1, d2, d3, d4, 10) # Create a correlation object that stores the R_{m, n} up to Nmax=10.
b1 = ChiralBlock(co1, :s, d) # Create a chiral s-channel four-point block with dimension d in the channel.
b2 = CBlock(co1, :t, d) # t-channel block. CBlock is synonymous of ChiralBlock.
x = big"0.3" + big"0.2" * im
println(b1(x)) # print the value of the block at position `x`.

# one-point block:
co2 = Correlation(d1, 10)
b3 = ChiralBlock(co2, d) # chiral one-point block
τ = big"1.1" + big"0.3" * im
println(b3(τ))

Non-chiral conformal blocks

using BootstrapVirasoro
setprecision(BigFloat, 20, base=10) # work with 20 digits of precision
# define a central charge. big"..." is the syntax for abitrary precision numbers.
# b is the Liouville parameter
c = CC(b = big"0.523"+big"0.1"*im)
V2 = Field(c, P=big"0.54") # Field with momentum P=0.54.
V1 = Field(c, r=1, s=1) # non-diagonal field of dimensions (Δ_(1, 1), Δ_(1, -1))
V1 = Field(c, r=1, s=2, diagonal=true) # degenerate field with Kac indices (r, s) = (1, 2).
V3 = Field(c, Δ=big"4.32") # Δ is the conformal dimension. Type it as \Delta, then tab or enter.
V4 = V3
V = Field(c, P=big"0.32"+big"0.1"*im)
V_degenerate = Field(c, r=2, s=3, diagonal=true)

# four-point block:
co1 = Correlation(V1, V2, V3, V4, 10) # Create a correlation object that stores the R_{m, n} up to Nmax=10.
b1 = NonChiralBlock(co1, :s, V) # Create a non-chiral s-channel four-point block with field V in the channel.
b2 = NCBlock(co1, :t, V_degenerate) # regularised t-channel four-point block with degenerate field V_degenerate in the channel.
                                    # NCBlock is synonymous of NonChiralBlock
x = big"0.3" + big"0.2" * im
println(b1(x)) # print the value of the block at position `x`.

# one-point block:
co2 = Correlation(d1, 10)
b2 = NCBlock(co2, d) # non chiral one-point block
τ = big"1.1" + big"0.3" * im
println(b2(τ))

Documentation

The library provides a hierarchy of conformal block types:

BootstrapVirasoro.BlockType

Abstract supertype for all conformal block types.

Hierarchy

Block  (Abstract Type)
├─ ChiralBlock
├─ NonChiralBlock  (Abstract Type)
│  ├─ Factorised block
│  └─ LogBlock
└─ LinearCombinationBlock
source
BootstrapVirasoro.ChiralBlockType

Type

Type to represent the series expansion of a chiral block. Aliased to CBlock.

Constructors

    ChiralBlock(::ChiralCorrelation4, ::Symbol, ::CD, Δmax=co.Δmax::Int, der=false) # 4pt 𝕊² chiral block
    ChiralBlock(::ChiralCorrelation1, ::CD, Δmax=co.Δmax::Int, der=false)           # 1pt 𝕋² chiral block

Compute the series coefficients of a chiral block associated to the ChiralCorrelation co, in the channel chan. If V is a degenerate field, compute the $P$-regularisation of the block instead. If der=true, also compute the coefficients of the series expansion of the derivative of the block.

Aliased to CBlock.

Arguments

  • A chiral correlation object
  • A channel for the block. Only required for four-point blocks.
  • A channel ConformalDimension
  • Δmax: integer up to which the series is evaluated.
  • der: whether to compute the coefficients of the block's derivative as well.
source
BootstrapVirasoro.NonChiralBlockType

Type

Abstract supertype to represent the series expansion of a non chiral block, either left-right factorised or logarithmic.

Aliased to NCBlock.

Constructors

    NCBlock(::NonChiralCorrelation, ::Symbol, ::Field, Δmax=co.Δmax::Int) # 4pt 𝕊² chiral block
    NCBlock(::NonChiralCorrelation, ::Field, Δmax=co.Δmax::Int)           # 1pt 𝕋² chiral block

Compute the series coefficients of the left and right blocks associated to the non chiral correlation co, in the channel chan. If the channel field is degenerate, compute the $P$-regularisation of the block instead. If the channel field is a non-diagonal field of the type $V_{(r, s>0)}$, the block is logarithmic, except if the residue $R_{r,s}$ vanishes.

Arguments

  • A NonChiralCorrelation object
  • A channel for the block. Only required for four-point blocks.
  • A channel Field
  • Δmax: integer up to which the series is evaluated. Defaults to the correlation's Δmax.
source
BootstrapVirasoro.LinearCombinationBlockType

Type

Type to represent linear combinations of blocks. Contains

  • an array of Blocks
  • an array of coefficients of the linear combination.

Constructors

LinearCombinationBlocks are constructed by summing blocks

Examples

# define a correlation co, two fields V1, V2.
b1 = CBlock(co, :s, V1)
b2 = CBlock(co, :s, V2)
b = b1 - 2b2 # LinearCombinationBlock
source

Defining and computing blocks requires defining a central charge, and conformal dimensions of the external and channel fields.

BootstrapVirasoro.CentralChargeType
    CentralCharge(; β, c, B, b)

Create a CentralCharge object from one of the parameters $β, c = 13 - 6 β^2 - 6 β^{-2}, b = i β, B = b^2$.

Aliased to CC.

Examples

c1 = CentralCharge(β=0.5+0.3im)
c2 = CC(c=big"0.4")
c2.c ≈ big"0.4" # access any of the parameters
source
BootstrapVirasoro.ConformalDimensionType
    ConformalDimension(c::CC; Δ, δ, P, p, r, s)

Create a ConformalDimension object from one of the parameters $P, p = iP, δ = P^2, Δ = δ + \frac{c-1}{24}$ or from Kac indices r, s ($P_{(r, s)} = \frac{1}{2}(rβ - sβ^{-1})$). The index r must be integer or rational, s can be arbitrary.

Aliased to CD.

Examples

c = CC(β = big"0.3"+big"0.1"*im)
d1 = CD(c, P=big"0.5"*im)
d2 = CD(c, r=2, s=1//2)
d3 = CD(c, r=0, s=big"0.1")
d2.r == 2 # true
source
BootstrapVirasoro.FieldType
    Field(c::CC; Δ, δ, P, p, r, s, diagonal)

Create a Field object from one of the parameters P, p, δ, Δ (see ConformalDimension) or from Kac indices r, s. The index r must be integer or rational, s can be arbitrary. Left and right dimensions are accessed with [:left], [:right]. The conformal spin of the field is computed with spin(V).

Examples

c = CC(β = big"0.3"+big"0.1"*im)
V1 = Field(c, r=2, s=1//2) # non-diagonal, (Δ(2, 1//2), Δ(2, -1//2))
V2 = Field(c, P=0.5)       # diagonal
V3 = Field(c, r=1, s=2, diagonal=true) # degenerate
V3[:left].Δ == V3[:right].Δ # true
spin(V1) == 1 # true
source

The parameters of the external fields are stored in a Correlation object, that also stores the residues $R_{m, n}$ for each channel, and their sums

\[C^N_{m,n} = R_{m,n}\left(\delta_{N-mn,0} + \sum_{m'n'\leq N-mn} \frac{C^{N-mn}_{m',n'}}{\delta_{(m,-n)}-\delta_{(m',n')}} \right)\]

used in the Zamolodchikov recursion.

They are all created via a common interface

BootstrapVirasoro.CorrelationType

Abstract supertype for all correlation types.

Hierarchy

Correlation  (Abstract Type)
├─ Correlation1  (Abstract Type)
│  ├─ ChiralCorrelation1
│  └─ NonChiralCorrelation1
└─ Correlation4  (Abstract Type)
   ├─ ChiralCorrelation4
   └─ NonChiralCorrelation4

Constructors

    Correlation(fields, Δmax)

Create a Correlation object. The fields can be passed as independent arguments or as collections, there can be 1 or 4 of them. The Correlation object stores residues $R_{m, n}$ and $C^N_{m, n}$ up to Δmax.

Aliased to Corr, Co.

Examples

c = CC(β = 0.5)
V = Field(c, r=2, s=1//2)
co1 = Correlation(V, V, V, V, 10) # NonChiralCorrelation4
co2 = Corr(V, 10) # NonChiralCorrelation1
co3 = Corr(Tuple(V[:left] for _ in 1:4), 20) # ChiralCorrelation4
co3.fields[1] == V[:left]
source