Before any proof, let us name every object and draw it, so no symbol sneaks in unexplained.
Now the two arrows living on that loop:
Kelvin's claim, which we will now earn picture by picture, is that this number is exactly zero under three conditions (inviscid, conservative body force, barotropic — each defined the moment we need it).
WHAT. We open up DtD∮Cu⋅dℓ with the product rule.
WHY. Look at the drawing: as time passes, two things happen at once. (1) The flow arrow u on each bead can grow, shrink, or turn. (2) The little step dℓ itself gets stretched and rotated because the beads at its two ends move at slightly different speeds. A change in a product of two changing things needs the product rule — one term for each cause.
= \underbrace{\oint_C \frac{D\mathbf{u}}{Dt}\cdot d\boldsymbol{\ell}}_{\text{velocity changes}}
\;+\; \underbrace{\oint_C \mathbf{u}\cdot \frac{D(d\boldsymbol{\ell})}{Dt}}_{\text{the step stretches}}$$
- $\dfrac{D\mathbf{u}}{Dt}$ = the **acceleration** of the fluid particle (how its own velocity changes as it rides along).
- $\dfrac{D(d\boldsymbol{\ell})}{Dt}$ = how the tiny step vector itself changes as the loop deforms.
**PICTURE.** The blue arrow in the figure is term one (arrow turning). The amber stretch of the loop segment is term two. We now kill each term in turn.
---
## Step 2 — The stretching term is a perfect differential (= 0)
**WHAT.** We show the second term equals zero.
**WHY.** Take two neighbouring beads: one at position $\mathbf{x}$, the other at $\mathbf{x}+d\boldsymbol{\ell}$. Their separation *is* $d\boldsymbol{\ell}$. How fast does a separation change? By the difference of the two beads' velocities. Call that velocity difference $d\mathbf{u}$. So:
$$\frac{D(d\boldsymbol{\ell})}{Dt} = d\mathbf{u}
\qquad
\begin{array}{l}
d\boldsymbol{\ell}=\text{ gap between beads}\\
d\mathbf{u}=\text{ difference in their velocities}
\end{array}$$
![[deepdives/dd-physics-2.2.30-d2-s03.png]]
Substitute this into the stretching term:
$$\oint_C \mathbf{u}\cdot d\mathbf{u}
= \oint_C d\!\left(\tfrac12\,|\mathbf{u}|^2\right) = 0$$
- $\mathbf{u}\cdot d\mathbf{u}$ is the tiny change in $\tfrac12|\mathbf{u}|^2$, the same way $x\,dx = d(\tfrac12 x^2)$ in ordinary calculus.
- $\tfrac12|\mathbf{u}|^2$ is (per unit mass) the **kinetic energy** — a single-valued number attached to each point.
**WHY zero.** Walking once around a *closed* loop, you return to the exact starting point, so any quantity that has one value per point returns to its starting value. Its total change around the loop is $0$. The amber curve in the figure shows $\tfrac12|\mathbf u|^2$ climbing and falling and landing back where it began.
$$\boxed{\;\frac{D\Gamma}{Dt} = \oint_C \frac{D\mathbf{u}}{Dt}\cdot d\boldsymbol{\ell}\;}$$
Only the **acceleration term** survives. Good — now we ask *what causes the acceleration.*
---
## Step 3 — What accelerates the fluid: Euler's equation
**WHAT.** We replace the acceleration $\dfrac{D\mathbf{u}}{Dt}$ with the forces that cause it.
**WHY.** Newton's law $F=ma$ for a smooth (frictionless) fluid is the [[Euler equation for ideal fluids]]. Two things can push a fluid particle: a **pressure difference** pushing from high to low pressure, and a **body force** like gravity. Here we introduce our first assumption:
> [!definition] Inviscid
> ==Inviscid== means **no viscosity** — no internal stickiness or friction between fluid layers. This is exactly what lets us use Euler's equation, which has *no friction term*. (A real syrup would have one, and the proof would break — see Step 7.)
![[deepdives/dd-physics-2.2.30-d2-s04.png]]
$$\frac{D\mathbf{u}}{Dt}
= \underbrace{-\frac{1}{\rho}\nabla p}_{\text{push from pressure}}
\;\underbrace{-\,\nabla\Phi}_{\text{body force}}$$
- $\rho$ = density (mass per volume) of the fluid.
- $p$ = pressure; $\nabla p$ (the **gradient**) is an arrow pointing toward fastest pressure increase. *Why a gradient?* Because a particle is squeezed from high pressure toward low pressure; $-\nabla p$ is exactly that push.
- $\Phi$ = the **potential** of the body force; $-\nabla\Phi$ is the force (e.g. gravity pulling downhill in potential).
Putting this into our surviving term:
$$\frac{D\Gamma}{Dt}
= \oint_C \left(-\frac{1}{\rho}\nabla p - \nabla\Phi\right)\cdot d\boldsymbol{\ell}$$
Two pieces remain to kill. We take the easier one first.
---
## Step 4 — The body-force term vanishes (conservative force)
**WHAT.** We show $\oint_C \nabla\Phi\cdot d\boldsymbol{\ell}=0$.
**WHY.** This needs our second assumption:
> [!definition] Conservative body force
> A ==conservative== force is one that can be written as $-\nabla\Phi$ for some single-valued potential $\Phi$ (gravity qualifies). "Conservative" literally means: **the work done going around any closed loop is zero.**
![[deepdives/dd-physics-2.2.30-d2-s05.png]]
$$\oint_C \nabla\Phi\cdot d\boldsymbol{\ell} = \oint_C d\Phi = 0$$
- $\nabla\Phi\cdot d\boldsymbol{\ell}$ is the tiny change $d\Phi$ in the potential as we take one step along the loop.
- Summing $d\Phi$ around a closed loop returns $\Phi$ to its starting value — same "back to start" logic as Step 2.
**PICTURE.** The figure shows a potential landscape (contour lines). Walk a closed path on any hillside and your net altitude change is zero. Body force contributes **nothing** to the change in circulation.
$$\frac{D\Gamma}{Dt}
= -\oint_C \frac{1}{\rho}\nabla p\cdot d\boldsymbol{\ell}$$
One term left.
---
## Step 5 — The pressure term vanishes (barotropic flow)
**WHAT.** We show $\oint_C \dfrac{1}{\rho}\nabla p\cdot d\boldsymbol{\ell}=0$ — but *only* under our third assumption.
**WHY.** The trouble is the factor $\dfrac1\rho$ multiplying $\nabla p$. If $\rho$ varied independently of $p$, this product would *not* be a clean gradient, and the loop integral would not cancel. It becomes a perfect differential only when:
> [!definition] Barotropic
> ==Barotropic== means pressure alone determines density: $\rho = \rho(p)$. Then surfaces of constant pressure and constant density coincide. We can define a **pressure function**
> $$P(p) = \int \frac{dp}{\rho(p)},\qquad \text{so that}\qquad \frac{1}{\rho}\nabla p = \nabla P.$$
![[deepdives/dd-physics-2.2.30-d2-s06.png]]
$$\oint_C \frac{1}{\rho}\nabla p\cdot d\boldsymbol{\ell}
= \oint_C \nabla P\cdot d\boldsymbol{\ell}
= \oint_C dP = 0$$
- $P$ is now a single-valued quantity per point (built purely from $p$), so its trip around the closed loop nets to zero — the same "return to start" argument a third time.
**PICTURE.** Left panel (barotropic): constant-$p$ lines and constant-$\rho$ lines lie parallel, so pressure force is a pure gradient and cancels around the loop. Right panel (baroclinic): the two families cross, leaving a *twisting* net push — see the edge case in Step 7.
$$\boxed{\;\frac{D\Gamma}{Dt} = -0 - 0 = 0\;}\qquad\blacksquare$$
The swirl in the drifting loop is frozen for all time. See [[Stokes' theorem]] for why $\Gamma$ also equals the [[Vorticity and the vorticity equation|vorticity]] flux through the loop.
---
## Step 6 — The all-important edge case: what if the loop shrinks?
**WHAT.** Kelvin freezes $\Gamma$, *not* the vorticity. If the loop's area shrinks, the swirl-per-area must rise. This is **vortex stretching**.
**WHY.** By [[Stokes' theorem]], $\Gamma = \omega A$ for a small flat loop (with $\omega$ the vorticity component through it and $A$ the enclosed area). Since $\Gamma$ is constant on the material loop:
$$\omega_1 A_1 = \omega_2 A_2 \;\Rightarrow\; \omega \propto \frac{1}{A}.$$
![[deepdives/dd-physics-2.2.30-d2-s07.png]]
- If $A_2 = A_1/4$, then $\omega_2 = 4\,\omega_1$: quarter the area, quadruple the spin.
- This is *literally* the ice-skater pulling in her arms — [[Helmholtz vortex theorems]] and conservation of angular momentum in disguise.
**PICTURE.** The figure shows a fat, slow vortex tube (left) squeezed into a thin, fast one (right); the amber arrows spin faster on the right.
---
## Step 7 — The degenerate cases where the theorem FAILS
**WHAT.** We show *exactly which* assumption, if broken, revives a killed term.
**WHY.** Each of the three cancellations above leaned on one assumption. Remove it and $D\Gamma/Dt\neq 0$:
![[deepdives/dd-physics-2.2.30-d2-s08.png]]
| Broken assumption | Term that revives | Physical effect |
|---|---|---|
| **Viscous** (not inviscid) | Euler gains a friction term | Vorticity **diffuses** into the loop; boundary layers create the circulation that gives an aerofoil its lift |
| **Non-conservative** force | $\oint\nabla\Phi\ne0$ | External torque forces swirl |
| **Baroclinic** ($\rho\ne\rho(p)$) | $\oint\frac1\rho\nabla p\ne 0$ | [[Baroclinic vorticity generation]]: sea breezes, weather fronts spin up |
The baroclinic case is the important one. When constant-$p$ and constant-$\rho$ surfaces **cross**, the leftover term is proportional to $\nabla\rho \times \nabla p$ — a genuine twisting push that *creates* circulation from nothing. That is why cool sea air meeting warm land air rolls into a breeze.
> [!mistake] "Kelvin means vorticity can never appear."
> **Why it feels right:** Steps 1–5 look airtight. **The fix:** they assumed inviscid *and* barotropic. Break either and circulation is born — which is precisely how real lift ([[Kutta–Joukowski lift theorem]]) and real weather work.
---
## The one-picture summary
![[deepdives/dd-physics-2.2.30-d2-s09.png]]
Read the figure left to right: the product-rule split (Step 1) sends the stretch term to zero as a perfect differential (Step 2); Euler feeds in pressure + body force (Step 3); body force dies (Step 4); pressure dies under barotropicity (Step 5); nothing is left, so $\Gamma$ is frozen — unless viscosity or baroclinicity revives a term (Step 7).
```mermaid
graph TD
A["D Gamma over Dt"] --> B["split by product rule"]
B --> C["stretch term = perfect differential = 0"]
B --> D["acceleration term"]
D --> E["use Euler equation"]
E --> F["body force = 0 conservative"]
E --> G["pressure = 0 barotropic"]
F --> H["D Gamma over Dt = 0"]
G --> H
C --> H
H --> I["swirl frozen on material loop"]
```
> [!recall]- Feynman: the whole walk in plain words
> You lasso a patch of river with floating beads. You ask: does the total spin caught inside my lasso change as the river drags it? The change has two causes — the water speeds up, and my lasso stretches. The stretching part is a wash: it's like walking a loop trail and returning to the same altitude, net change zero. For the speeding-up part, ask *what* speeds the water up: only pressure and gravity, since the water is frictionless. Gravity around a loop nets to zero (back to the same hill). Pressure nets to zero *too*, but only if density is set by pressure alone (barotropic) — otherwise the pressure push twists the loop and makes new spin. With all three conditions met, nothing changes the spin. Squeeze the lasso smaller and the trapped water simply spins faster to keep the total the same — the skater tucking in her arms.
> [!recall]- Quick self-check
> Why does the stretch term vanish? ::: It equals $\oint d(\tfrac12|\mathbf u|^2)$, a perfect differential around a closed loop, so it's zero.
> Which assumption kills the pressure term, and how? ::: Barotropic ($\rho=\rho(p)$) lets $\frac1\rho\nabla p=\nabla P$, a gradient, whose loop integral is zero.
> If a material loop's area is cut to one-third, what happens to its vorticity? ::: It triples, since $\Gamma=\omega A$ is conserved so $\omega\propto1/A$.
> Which single term revives if the fluid is viscous? ::: The acceleration/Euler term gains a friction contribution, so vorticity diffuses and $D\Gamma/Dt\ne0$.
See also: [[Bernoulli's principle]] shares the same $\tfrac12|\mathbf u|^2$ perfect-differential idea, and the parent note [[Kelvin's circulation theorem]] for worked lift and vortex-ring examples.