<!-- canonical: efficientnewlanguage.org/ai/examples/1001-three-litres-in-a-thin-tube-split-the-barrel | ai_layer_version: 0.1.0 | updated: 2026-09-24 -->

# Example 1001 — Three litres in a thin tube split the barrel

`three_litres_in_a_thin_tube_split_the_barrel.eml` - A sealed barrel full of water has a thin tube, 10 metres tall, fitted into its lid. Someone pours 3 litres of water into the tube and reasons that 3 litres on top of the 200 the barrel already holds, weighing 3 kg, cannot trouble a barrel built for 200 kg. What the 3 litres do to the lid is computed below.

## EML

```eml
# Self-authored for the EML case corpus (no external origin). A sealed barrel
# full of water has a thin tube, 10 metres tall, fitted into its lid. Someone
# pours 3 litres of water into the tube and reasons that 3 litres on top of the
# 200 the barrel already holds, weighing 3 kg, cannot trouble a barrel built for
# 200 kg. What the 3 litres do to the lid is computed below.
#
# The reasoning is careful. The tube really holds only 3 litres; 3 kg really is
# a small weight next to 200; the barrel really was built for its contents; and
# the intent is exactly 'is the barrel safe'.
#
# Water pushes on the lid with a pressure set by the height of the water above
# it, not by how much water there is. A column 10 metres tall adds 98100 pascals
# on every part of the lid, and over a lid of 3000 square centimetres that is
# the force of 3000 kg - a thousand times the weight of the water that made it.

200 => barrel_litres
3000 => lid_area_cm2
1000 => tube_height_cm
3 => tube_cross_section_cm2
1000 => water_kg_per_m3
981 => gravity_cm_per_s2

int(tube_cross_section_cm2 * tube_height_cm / 1000) => water_in_the_tube_litres
water_in_the_tube_litres => water_in_the_tube_kg
int(water_kg_per_m3 * gravity_cm_per_s2 * tube_height_cm / 10000) => pressure_from_the_column_pa
int(pressure_from_the_column_pa * lid_area_cm2 / 10000) => force_on_the_lid_newtons
int(force_on_the_lid_newtons * 100 / gravity_cm_per_s2) => force_on_the_lid_kg
int(force_on_the_lid_kg / water_in_the_tube_kg) => times_the_weight_of_the_water_poured
int(water_in_the_tube_litres * 1000 / barrel_litres) => water_poured_vs_barrel_per_mille

"barrel                          : " + str(barrel_litres) + " litres, lid " + str(lid_area_cm2) + " cm2" ^0
"tube                            : " + str(tube_height_cm) + " cm tall, " + str(tube_cross_section_cm2) + " cm2 across" ^0
"water poured into the tube      : " + str(water_in_the_tube_litres) + " litres, " + str(water_in_the_tube_kg) + " kg, " + str(water_poured_vs_barrel_per_mille) + " per mille of the barrel" ^0
"" ^0
"pressure the column adds        : " + str(pressure_from_the_column_pa) + " pascals" ^0
"force on the lid                : " + str(force_on_the_lid_newtons) + " newtons, the weight of " + str(force_on_the_lid_kg) + " kg" ^0
"force vs the water poured       : " + str(times_the_weight_of_the_water_poured) + " times its weight" ^0
"" ^0

# ---- what the pourer verified ----

"the few-litres reasoning" ^0
"  water poured : " + str(water_in_the_tube_litres) + " litres, " + str(water_in_the_tube_kg) + " kg" ^0
"  against the barrel : " + str(water_poured_vs_barrel_per_mille) + " per mille of what it already holds" ^0
"  the barrel : built for its " + str(barrel_litres) + " litres" ^0
"  intent : is the barrel safe" ^0
"  facts wrong : 0" ^0
"  verdict : THREE LITRES CANNOT HURT A BARREL THAT HOLDS TWO HUNDRED" ^0
"" ^0
"  weighing the water poured is the part done right here, and it" ^0
"  is why " + str(water_in_the_tube_kg) + " kg is exactly the extra weight the barrel now carries" ^0
"" ^0

# ---- what the column does to the lid ----

"pressure is height, not amount" ^0
"  what presses on the lid : the pressure of the water above it," ^0
"    and that is set by how tall the water stands" ^0
"  the column : " + str(tube_height_cm) + " cm of water, " + str(pressure_from_the_column_pa) + " pascals, whatever" ^0
"    its width" ^0
"  where it acts : on every square centimetre of the lid, not" ^0
"    just the one under the tube" ^0
"  over the whole lid : " + str(force_on_the_lid_newtons) + " newtons, the weight of " + str(force_on_the_lid_kg) + " kg" ^0
"  what the thin tube saved : water, not force; a wide tube of the" ^0
"    same height would press exactly as hard" ^0
"" ^0

# ---- what the pourer got ----

"the barrel" ^0
"  believed : " + str(water_in_the_tube_kg) + " kg more, nothing to notice" ^0
"  actual : the lid pushed with the weight of " + str(force_on_the_lid_kg) + " kg, and the" ^0
"    staves split" ^0
"  is the weight of the poured water wrong : no; it is " + str(water_in_the_tube_kg) + " kg" ^0
"  does the force follow the weight : no; it follows the height" ^0
"    of the column and the area it presses on" ^0
"" ^0

# ---- null control ----

# The same tube judged by the height of its water instead of by its weight.
3 => nc_load_read_from_the_water_poured_kg
3000 => nc_load_read_from_the_height_of_the_column_kg
2997 => nc_kg_the_height_adds

"null control - read the load from the height" ^0
"  load, read from the water poured : " + str(nc_load_read_from_the_water_poured_kg) + " kg" ^0
"  load, read from the height of the column : " + str(nc_load_read_from_the_height_of_the_column_kg) + " kg" ^0
"  kg the height adds : " + str(nc_kg_the_height_adds) ^0
"  no barrel and no water changed; the pressure was taken from" ^0
"  the height of the water and applied to the whole lid" ^0
"" ^0

# ---- the rule ----

"what pouring " + str(water_in_the_tube_litres) + " litres into the tube guarantees" ^0
"  the barrel holds " + str(water_in_the_tube_kg) + " kg more water : exactly" ^0
"  the barrel is loaded by " + str(water_in_the_tube_kg) + " kg more : not addressed; the" ^0
"    column stands " + str(tube_height_cm) + " cm tall, pressing " + str(pressure_from_the_column_pa) + " pascals on every part" ^0
"    of the lid, " + str(force_on_the_lid_newtons) + " newtons in all, the weight of " + str(force_on_the_lid_kg) + " kg" ^0
"" ^0

"water keeps no account of how much of it there is; it pushes with the" ^0
"height it stands at, and a thread of water ten metres tall pushes like a" ^0
"lake ten metres deep" ^0
"" ^0

"Three litres weigh " + str(water_in_the_tube_kg) + " kg - the weighing is right. But pressure follows height:" ^0
"a column " + str(tube_height_cm) + " cm tall adds " + str(pressure_from_the_column_pa) + " pascals to every part of the lid, and" ^0
"over " + str(lid_area_cm2) + " cm2 that is the weight of " + str(force_on_the_lid_kg) + " kg, " + str(times_the_weight_of_the_water_poured) + " times the water poured," ^0
"until the load is read from the height of the water and not its weight." ^0
```

## Python (deterministic transpilation)

```python
barrel_litres = 200
lid_area_cm2 = 3000
tube_height_cm = 1000
tube_cross_section_cm2 = 3
water_kg_per_m3 = 1000
gravity_cm_per_s2 = 981
water_in_the_tube_litres = int(tube_cross_section_cm2 * tube_height_cm / 1000)
water_in_the_tube_kg = water_in_the_tube_litres
pressure_from_the_column_pa = int(water_kg_per_m3 * gravity_cm_per_s2 * tube_height_cm / 10000)
force_on_the_lid_newtons = int(pressure_from_the_column_pa * lid_area_cm2 / 10000)
force_on_the_lid_kg = int(force_on_the_lid_newtons * 100 / gravity_cm_per_s2)
times_the_weight_of_the_water_poured = int(force_on_the_lid_kg / water_in_the_tube_kg)
water_poured_vs_barrel_per_mille = int(water_in_the_tube_litres * 1000 / barrel_litres)
print("barrel                          : " + str(barrel_litres) + " litres, lid " + str(lid_area_cm2) + " cm2")
print("tube                            : " + str(tube_height_cm) + " cm tall, " + str(tube_cross_section_cm2) + " cm2 across")
print("water poured into the tube      : " + str(water_in_the_tube_litres) + " litres, " + str(water_in_the_tube_kg) + " kg, " + str(water_poured_vs_barrel_per_mille) + " per mille of the barrel")
print("")
print("pressure the column adds        : " + str(pressure_from_the_column_pa) + " pascals")
print("force on the lid                : " + str(force_on_the_lid_newtons) + " newtons, the weight of " + str(force_on_the_lid_kg) + " kg")
print("force vs the water poured       : " + str(times_the_weight_of_the_water_poured) + " times its weight")
print("")
print("the few-litres reasoning")
print("  water poured : " + str(water_in_the_tube_litres) + " litres, " + str(water_in_the_tube_kg) + " kg")
print("  against the barrel : " + str(water_poured_vs_barrel_per_mille) + " per mille of what it already holds")
print("  the barrel : built for its " + str(barrel_litres) + " litres")
print("  intent : is the barrel safe")
print("  facts wrong : 0")
print("  verdict : THREE LITRES CANNOT HURT A BARREL THAT HOLDS TWO HUNDRED")
print("")
print("  weighing the water poured is the part done right here, and it")
print("  is why " + str(water_in_the_tube_kg) + " kg is exactly the extra weight the barrel now carries")
print("")
print("pressure is height, not amount")
print("  what presses on the lid : the pressure of the water above it,")
print("    and that is set by how tall the water stands")
print("  the column : " + str(tube_height_cm) + " cm of water, " + str(pressure_from_the_column_pa) + " pascals, whatever")
print("    its width")
print("  where it acts : on every square centimetre of the lid, not")
print("    just the one under the tube")
print("  over the whole lid : " + str(force_on_the_lid_newtons) + " newtons, the weight of " + str(force_on_the_lid_kg) + " kg")
print("  what the thin tube saved : water, not force; a wide tube of the")
print("    same height would press exactly as hard")
print("")
print("the barrel")
print("  believed : " + str(water_in_the_tube_kg) + " kg more, nothing to notice")
print("  actual : the lid pushed with the weight of " + str(force_on_the_lid_kg) + " kg, and the")
print("    staves split")
print("  is the weight of the poured water wrong : no; it is " + str(water_in_the_tube_kg) + " kg")
print("  does the force follow the weight : no; it follows the height")
print("    of the column and the area it presses on")
print("")
nc_load_read_from_the_water_poured_kg = 3
nc_load_read_from_the_height_of_the_column_kg = 3000
nc_kg_the_height_adds = 2997
print("null control - read the load from the height")
print("  load, read from the water poured : " + str(nc_load_read_from_the_water_poured_kg) + " kg")
print("  load, read from the height of the column : " + str(nc_load_read_from_the_height_of_the_column_kg) + " kg")
print("  kg the height adds : " + str(nc_kg_the_height_adds))
print("  no barrel and no water changed; the pressure was taken from")
print("  the height of the water and applied to the whole lid")
print("")
print("what pouring " + str(water_in_the_tube_litres) + " litres into the tube guarantees")
print("  the barrel holds " + str(water_in_the_tube_kg) + " kg more water : exactly")
print("  the barrel is loaded by " + str(water_in_the_tube_kg) + " kg more : not addressed; the")
print("    column stands " + str(tube_height_cm) + " cm tall, pressing " + str(pressure_from_the_column_pa) + " pascals on every part")
print("    of the lid, " + str(force_on_the_lid_newtons) + " newtons in all, the weight of " + str(force_on_the_lid_kg) + " kg")
print("")
print("water keeps no account of how much of it there is; it pushes with the")
print("height it stands at, and a thread of water ten metres tall pushes like a")
print("lake ten metres deep")
print("")
print("Three litres weigh " + str(water_in_the_tube_kg) + " kg - the weighing is right. But pressure follows height:")
print("a column " + str(tube_height_cm) + " cm tall adds " + str(pressure_from_the_column_pa) + " pascals to every part of the lid, and")
print("over " + str(lid_area_cm2) + " cm2 that is the weight of " + str(force_on_the_lid_kg) + " kg, " + str(times_the_weight_of_the_water_poured) + " times the water poured,")
print("until the load is read from the height of the water and not its weight.")
```

## stdout (executed)

```text
barrel                          : 200 litres, lid 3000 cm2
tube                            : 1000 cm tall, 3 cm2 across
water poured into the tube      : 3 litres, 3 kg, 15 per mille of the barrel

pressure the column adds        : 98100 pascals
force on the lid                : 29430 newtons, the weight of 3000 kg
force vs the water poured       : 1000 times its weight

the few-litres reasoning
  water poured : 3 litres, 3 kg
  against the barrel : 15 per mille of what it already holds
  the barrel : built for its 200 litres
  intent : is the barrel safe
  facts wrong : 0
  verdict : THREE LITRES CANNOT HURT A BARREL THAT HOLDS TWO HUNDRED

  weighing the water poured is the part done right here, and it
  is why 3 kg is exactly the extra weight the barrel now carries

pressure is height, not amount
  what presses on the lid : the pressure of the water above it,
    and that is set by how tall the water stands
  the column : 1000 cm of water, 98100 pascals, whatever
    its width
  where it acts : on every square centimetre of the lid, not
    just the one under the tube
  over the whole lid : 29430 newtons, the weight of 3000 kg
  what the thin tube saved : water, not force; a wide tube of the
    same height would press exactly as hard

the barrel
  believed : 3 kg more, nothing to notice
  actual : the lid pushed with the weight of 3000 kg, and the
    staves split
  is the weight of the poured water wrong : no; it is 3 kg
  does the force follow the weight : no; it follows the height
    of the column and the area it presses on

null control - read the load from the height
  load, read from the water poured : 3 kg
  load, read from the height of the column : 3000 kg
  kg the height adds : 2997
  no barrel and no water changed; the pressure was taken from
  the height of the water and applied to the whole lid

what pouring 3 litres into the tube guarantees
  the barrel holds 3 kg more water : exactly
  the barrel is loaded by 3 kg more : not addressed; the
    column stands 1000 cm tall, pressing 98100 pascals on every part
    of the lid, 29430 newtons in all, the weight of 3000 kg

water keeps no account of how much of it there is; it pushes with the
height it stands at, and a thread of water ten metres tall pushes like a
lake ten metres deep

Three litres weigh 3 kg - the weighing is right. But pressure follows height:
a column 1000 cm tall adds 98100 pascals to every part of the lid, and
over 3000 cm2 that is the weight of 3000 kg, 1000 times the water poured,
until the load is read from the height of the water and not its weight.
```

## Round-trip

`ok: true` — round-trip fixpoint reached (python1 == python2)

## Trace event types

eml:run:start · eml:assign · eml:output · eml:run:done
