home

Operator Orderings

The six cyclic orderings of four points y1,y2,y3,y4y_1, y_2, y_3, y_4 on the real line compactified at ±∞\pm\infty, relevant to the different operator-ordering prescriptions of four-point correlators in quantum field theory. A conformal map sends three of the points to 0,1,∞0, 1, \infty, so each ordering is fixed by whether y1y_1 or y2y_2 sits at 00 (left vs. right column) and by which of the three intervals, marked by the brace, contains y4y_4.


Operator Orderings

Download

PNG PDF SVG

Code

operator-orderings.typ (49 lines)
#import "@preview/cetz:0.5.3": canvas, decorations, draw
#import draw: circle, content, line

#set page(width: auto, height: auto, margin: 4pt, fill: none)
#set text(size: 12pt)

#let pt-cm = 0.03528

// Match original TikZ geometry and label distances.
#let line-len = 8.0
#let x-anchor = (0.0, 3.0, 5.0, 8.0) // -infty, 0, 1, infty
#let tick-labels = ($-infinity$, $0$, $1$, $infinity$)
#let line-thickness = 0.8pt

// Numbered real line with y_1, y_2, y_3 above the points 0, 1, infty
// and a brace over the interval holding y_4.
#let real-line(ox, oy, above-labels, ordering-num, brace-span) = {
  line((ox, oy), (ox + line-len, oy), stroke: line-thickness)
  content((ox - 0.2, oy), str(ordering-num) + ".", anchor: "east")
  content((ox + line-len + 0.4, oy), [$bb(R)$], anchor: "west")

  for (dx, below-label) in x-anchor.zip(tick-labels) {
    circle((ox + dx, oy), radius: 0.1, fill: black)
    // Shared baseline so -infty, 0, 1, infty line up despite different glyph heights
    content((ox + dx, oy - 0.5), below-label, anchor: "base")
  }
  for (dx, label) in x-anchor.slice(1).zip(above-labels) {
    content((ox + dx, oy + 12.0 * pt-cm), label, anchor: "south")
  }

  let (start-x, end-x) = brace-span.map(x => ox + x)
  let brace-y = oy + 5.0 * pt-cm
  decorations.flat-brace(
    (start-x, brace-y),
    (end-x, brace-y),
    stroke: line-thickness,
    amplitude: 5.0 * pt-cm,
  )
  content(((start-x + end-x) / 2, brace-y + 8.0 * pt-cm), $y_4$, anchor: "south")
}

#canvas(length: 1cm, {
  // Row i puts y_4 in the i-th interval; the right column swaps y_1 and y_2.
  for (row-idx, brace-span) in x-anchor.windows(2).enumerate() {
    let row-y = -row-idx * 1.8
    real-line(0, row-y, ($y_1$, $y_2$, $y_3$), 2 * row-idx + 1, brace-span)
    real-line(line-len + 2.1, row-y, ($y_2$, $y_1$, $y_3$), 2 * row-idx + 2, brace-span)
  }
})