Special relativity · Clock synchronization

How do distant clocks agree on a time?

A signal goes out, bounces off a distant clock, and comes back. Splitting the round-trip time in half is Einstein's stated procedure for giving a time to something far away. It is a stated agreement, not an independent measurement of the two one-way travel times.

An executable model

Clock synchronization with the event ledger

Static worked example

Model note
  • Assigned remote time (stated procedure) (assignedRemoteTime), Round-trip speed of light (roundTripSpeed) and Criterion check (declared clock B) (criterionOffset): Host calculation, by the site's own reference code. Computed in events.synchronizationRound.
  • Rod chase, outbound leg (section 2) (chaseOutboundLeg) and Rod chase, return leg (section 2) (chaseReturnLeg): Host calculation, by the site's own reference code. Computed in events.movingRodLegs.
  • Desynchronization of the moving pair (platform frame) (desynchronization): Host calculation, by the site's own reference code. Computed in events.desynchronizationObserved.
  • One-way speed of light (by convention) (oneWayLightSpeed): Host calculation, by the site's own reference code. Computed in events.byConvention.
  • Computed from the settings last applied (settings revision 1, result 1).
  • Not modeled: signal delays in cables or electronics; gravitational effects; accelerated or rotating clocks; clock mechanisms; the optical appearance of distant clocks; detector response times; any measurement of one-way light speed.

Predict before the numbers

A pair of clocks rides past at a steady speed, and the riders set their clocks with the same light-signal rule. Judged by our clocks, what do theirs show?

Three relations the model could have

The result appears when you choose, say you have one in mind, or skip.

Event ledger (frame of description: v/c = 0)
EventKindClockClock's own reading (s)Coordinate time (s)Coordinate position (ls)
emission-aemissionA000
reflection-breflectionB101010
reception-areceptionA20200
Assigned remote time (stated procedure)
10 s
Round-trip speed
1 ls/s
Criterion check (declared clock B)
synchronized by definition
Section 2 rod chase: outbound / return legs
10 s / 10 s
Desynchronization of the moving pair (platform frame)
6 s
One-way light speed
not applicable (The model defines the one-way light speed by convention (Einstein's synchronization procedure), rather than measuring it independently.)
Three-station transitivity (A, B, C, mutually at rest)
transitive
Presets:
Stations and signal
Motion
Experiment settings the emission time at A, the stations' motion, the pair's proper length, the frame of description

Changes here apply with Apply changes.

Worked example: the light-signal rule sets the clock at B, 10 ls from A, to 10 s; the pair moving at 0.6c, 10 ls apart, has clocks that read 6 s apart, judged from the platform.

Show the reference code & kernel bindings

Reference evaluator: src/physics/reference/events.ts

// desynchronizationObserved
const signed = kinematicDesynchronization(properSeparationLs, beta, 1 /* c, ls/s */);
const verdict = beta === 0 ? "they-agree" : beta > 0 ? "trailing-clock-ahead" : "leading-clock-ahead";

// synchronizationRound (Einstein's midpoint rule)
const assignedRemoteTime = (emissionTimeA + receptionTimeA) / 2;
const roundTripSpeedLsPerS = (2 * separationLs) / (receptionTimeA - emissionTimeA);

To give a time to something that happens far away, send a light signal there, let it bounce back, and take the moment halfway between sending and return. Two clocks set this way while riding together do not agree when they are judged from a platform they pass.

Section 1 starts from the fact that every statement of time is a statement about simultaneous events: the train arrives, and the small hand of my watch points to 7. A clock at A times the events near A, and a like clock at B times the events near B, but nothing yet gives A and B a common time. Einstein supplies one by definition: the time light takes from A to B is set equal to the time it takes from B back to A. A ray leaves A at A-time tA, is reflected at B at B-time tB, and returns at A-time t′A; the clocks run synchronously when tB − tA = t′A − tB. He then fixes, in agreement with experience, that 2AB/(t′A − tA) = V, the speed of light in empty space, is a universal constant. In the lab a flash sent at 0 s and returned at 10 s gives the reflection the time 5 s; the one-way speed is never measured, and the lab reports it as not applicable. Section 2 applies the same test to clocks at the ends of a rod of length rAB that moves at v, with the clocks set in the resting system. Riders find tB − tA = rAB/(V − v) and t′A − tB = rAB/(V + v), 25 s and 6.25 s for 10 light-seconds at 0.6V, so they judge the clocks out of step. By the transformation of section 3, a pair set in step by its own riders a distance L apart reads out of step on the platform by vL/V²: 6 s for L = 10 light-seconds at 0.6V, with the trailing clock ahead.

Modern qualifications

Einstein writes V for the speed of light (today's c) and states the rule 'durch Definition': the equal legs are a stipulation, the constancy of the round-trip speed is fixed 'der Erfahrung gemäß', and symmetry and transitivity are assumed. In 1900 Poincaré had described observers who set their clocks by exchanging light signals while moving through the ether and so obtain Lorentz's local time, to first order in v/V. Whether the equal-legs rule is a free choice was argued later, as a modern lens: Reichenbach (1928) wrote the reflection time as tA + ε(t′A − tA), with Einstein's choice ε = 1/2; Ellis and Bowman (1967) showed that slowly carried clocks agree with ε = 1/2 only in the limit of vanishing transport speed; Malament (1977) argued that the standard choice is the only one definable from the causal structure of one inertial frame, a claim still debated. The paper does not say that light is the only way to compare distant clocks.

Show the code

The site’s own reference code for this law, in TypeScript. It computes the numbers above when the page runs it, and it is what the page uses wherever a FrankenSim result is not available.

synchronizationRound · src/physics/reference/events.ts · this site’s source, as built · sha256:1557f3d2d285dee31050bddc7756e77ad268c548679ea2df033a0cc82ce8329b

This function computes the listed outputs when it runs.

In words

This is § 1's definition, computed. Given the time a signal left A, the time its echo returned to A, and the separation, it assigns the distant clock the average of the two local readings, and reports the round-trip speed over that separation. It also returns criterionOffset, which is the outward interval minus the return interval as the definition assigns them, and which is therefore zero by construction.

Implementation

export function synchronizationRound(
  input: SynchronizationRoundInput,
): KinematicResult<SynchronizationRoundResult> {
  const { emissionTimeA, receptionTimeA, separationLs } = input;
  if (!finite(emissionTimeA, receptionTimeA)) {
    return outsideDomain("nonfinite-input", "Emission and reception times must be finite.");
  }
  if (receptionTimeA <= emissionTimeA) {
    return outsideDomain(
      "invalid-round-trip",
      "A round trip's reception must occur strictly after its emission.",
    );
  }
  const badSeparation = refuseSeparation(separationLs);
  if (badSeparation) return badSeparation;

  const assignedRemoteTime = (emissionTimeA + receptionTimeA) / 2;
  const roundTripSpeedLsPerS = (2 * separationLs) / (receptionTimeA - emissionTimeA);
  const criterionOffset =
    assignedRemoteTime - emissionTimeA - (receptionTimeA - assignedRemoteTime);
  return ok({
    assignedRemoteTime,
    roundTripSpeedLsPerS,
    equalsC: Math.abs(roundTripSpeedLsPerS - C) <= 1e-9,
    criterionOffset,
  });
}

The site’s own reference code for this law, in TypeScript. It computes the numbers above when the page runs it, and it is what the page uses wherever a FrankenSim result is not available.

movingRodLegs · src/physics/reference/events.ts · this site’s source, as built · sha256:869f8dd7ae1e8ef5ed98cd28e30e035ff460262b1e9283049cf6506176530b22

This function computes the listed outputs when it runs.

In words

A light signal runs from one end of a moving rod to the other and back. Measured in the resting system the light travels at c while the far end runs away at beta, so the gap closes at c minus beta on the way out; on the return the near end runs to meet the light and the gap closes at c plus beta. The function returns both legs and, as criterionSatisfiedInStationaryFrame, whether they are equal, which happens only when beta is zero.

Implementation

export function movingRodLegs(input: MovingRodLegsInput): KinematicResult<MovingRodLegsResult> {
  const { separationLs, beta } = input;
  const badSeparation = refuseSeparation(separationLs);
  if (badSeparation) return badSeparation;
  const bad = refuseSuperluminal(beta);
  if (bad) return bad;
  const outboundLegS = separationLs / (C - beta);
  const returnLegS = separationLs / (C + beta);
  return ok({
    outboundLegS,
    returnLegS,
    criterionSatisfiedInStationaryFrame: beta === 0,
  });
}

The site’s own reference code for this law, in TypeScript. It computes the numbers above when the page runs it, and it is what the page uses wherever a FrankenSim result is not available.

desynchronizationObserved · src/physics/reference/events.ts · this site’s source, as built · sha256:1c9a8f695ba4e2c163566af44652e1a0b949caa26c80de55c70ab629d4c04dfb

This function computes the listed outputs when it runs.

In words

Two clocks synchronised in their own system are not synchronised in the system they move through: the trailing one reads ahead, by the separation times the speed over the square of the light speed, and the function returns that magnitude with which clock leads.

Implementation

export function desynchronizationObserved(
  input: DesynchronizationInput,
): KinematicResult<DesynchronizationResult> {
  const { properSeparationLs, beta } = input;
  const badSeparation = refuseSeparation(properSeparationLs);
  if (badSeparation) return badSeparation;
  const bad = refuseSuperluminal(beta);
  if (bad) return bad;
  const signed = kinematicDesynchronization(properSeparationLs, beta, C);
  if (signed.status !== "value") return signed;
  const verdict: DesynchronizationVerdict =
    beta === 0 ? "they-agree" : beta > 0 ? "trailing-clock-ahead" : "leading-clock-ahead";
  return ok({ desyncMagnitudeS: Math.abs(signed.value), verdict });
}

The two one-way transit times of the synchronizing signal are set equal by definition, not measured: Einstein's stated procedure (paper 3, section 1). Alternative: slow clock transport. Requires a dynamical assumption about how a clock's rate depends on its motion, not merely a convention about signals. In the limit of vanishingly slow transport, within one inertial frame, it agrees with the light convention; at any finite transport speed the two differ by an amount that goes to zero with the transport speed. This is a limiting statement, never an exact equivalence at finite speed.

Not modeled in this ideal reference calculation:

signal delays in cables or electronics · gravitational effects · accelerated or rotating clocks · clock mechanisms · the optical appearance of distant clocks · detector response times · any measurement of one-way light speed

Open the derivation

Einstein's criterion

A signal leaves clock A at time tAt_A, reflects at the distant clock B, and returns to A at tA′t'_A. The paper does not measure B's reading at reflection; it assigns it by definition as the midpoint:

tB=12(tA+tA′)t_B = \tfrac{1}{2}\left(t_A + t'_A\right)
Explain this equation

The round-trip speed 2⋅AB/(tA′−tA)2\cdot\mathrm{AB} / (t'_A - t_A) then equals c in the frame where the procedure is applied. The procedure was built to give that result; it does not measure the speed of light.

Section 2: the moving rod

Running the same procedure on the two ends of a moving rod gives two different leg times in the stationary frame: an outbound leg rAB/(c−u)r_{AB} / (c - u) and a return leg rAB/(c+u)r_{AB} / (c + u), because the receiving end has moved during the light's travel. For observers moving with the rod, the criterion that held for the stationary observer fails.

Clocks that move disagree, once you compare them

A pair of clocks synchronized this way in their own rest frame, but moving together at speed v, is found out of step by vL/c² in the platform frame, with the trailing clock ahead. Try the moving-pair preset above and predict the answer before revealing it.

Light is not the only way

The paper chooses light because it makes the assumption it is making visible, not because light is the only possible way to compare distant clocks. Slow clock transport is a coherent alternative: carry a clock, synchronized side by side with another, out to the distant station. It requires its own assumption, about how a clock's rate depends on its motion, and agrees with the light convention only in the limit of vanishingly slow transport.

Before you draw a conclusion

A common wrong turn this instrument speaks to

  • Einstein's 1905 argument about simultaneity uses lightning striking the two ends of a moving train.

    The paper's argument uses clocks at two places, A and B, and a light signal sent from A, reflected at B and returned. There is no train and no lightning in it.

    Read the full entry, with its sources

Embed this laboratory on another page. It starts from its worked defaults, not your current settings.