Case 1000
The tube two thirds as wide passed a fifth as much
the_tube_two_thirds_as_wide_passed_a_fifth_as_much.eml - A lubrication line feeds thick oil through a 3 mm bore tube at 900 mL a minute. The only spare tube has a 2 mm bore, and the technician reasons that flow goes with the area of the opening, so two-thirds the bore passes four-ninths of the oil and the job will take a little over twice as long. What the thinner tube really passes is computed below.
ok: true — round-trip fixpoint reached (python1 == python2)updated 2026-09-24
EML
eml# Self-authored for the EML case corpus (no external origin). A lubrication line
# feeds thick oil through a 3 mm bore tube at 900 mL a minute. The only spare
# tube has a 2 mm bore, and the technician reasons that flow goes with the area
# of the opening, so two-thirds the bore passes four-ninths of the oil and the
# job will take a little over twice as long. What the thinner tube really
# passes is computed below.
#
# The reasoning is careful. The bores really are 3 and 2 mm; the pressure
# driving the oil is the same; the area of the opening really does fall to
# four-ninths; and the intent is exactly 'how long will the 9 litres take'.
#
# In slow, viscous flow the oil touching the wall does not move and the speed
# peaks in the middle, and at the same pressure that middle speed itself falls
# with the square of the bore. Flow is area times average speed, so it goes with
# the fourth power of the bore: two-thirds the bore passes 197 per mille of the
# oil, not 444, and the job takes 50 minutes, not 22.
3 => wide_bore_mm
2 => narrow_bore_mm
900 => wide_tube_flow_ml_per_min
9000 => oil_to_deliver_ml
int(narrow_bore_mm * narrow_bore_mm * 1000 / (wide_bore_mm * wide_bore_mm)) => opening_area_ratio_per_mille
int(narrow_bore_mm^4 * 1000 / wide_bore_mm^4) => flow_ratio_per_mille
int(wide_tube_flow_ml_per_min * narrow_bore_mm * narrow_bore_mm / (wide_bore_mm * wide_bore_mm)) => narrow_flow_by_area_ml_per_min
int(wide_tube_flow_ml_per_min * narrow_bore_mm^4 / wide_bore_mm^4) => narrow_flow_actual_ml_per_min
narrow_flow_by_area_ml_per_min - narrow_flow_actual_ml_per_min => flow_the_fourth_power_removes_ml_per_min
int(oil_to_deliver_ml * 10 / wide_tube_flow_ml_per_min) => wide_tube_tenths_of_a_minute
int(oil_to_deliver_ml * 10 * wide_bore_mm * wide_bore_mm / (wide_tube_flow_ml_per_min * narrow_bore_mm * narrow_bore_mm)) => narrow_tube_by_area_tenths_of_a_minute
int(oil_to_deliver_ml * 10 * wide_bore_mm^4 / (wide_tube_flow_ml_per_min * narrow_bore_mm^4)) => narrow_tube_actual_tenths_of_a_minute
"wide tube : " + str(wide_bore_mm) + " mm bore, " + str(wide_tube_flow_ml_per_min) + " mL a minute" ^0
"narrow tube : " + str(narrow_bore_mm) + " mm bore" ^0
"opening area, narrow vs wide : " + str(opening_area_ratio_per_mille) + " per mille" ^0
"flow, narrow vs wide : " + str(flow_ratio_per_mille) + " per mille" ^0
"" ^0
"narrow flow, going by the area : " + str(narrow_flow_by_area_ml_per_min) + " mL a minute" ^0
"narrow flow, actual : " + str(narrow_flow_actual_ml_per_min) + " mL a minute" ^0
"" ^0
"time for " + str(oil_to_deliver_ml) + " mL, wide tube : " + str(wide_tube_tenths_of_a_minute) + " tenths of a minute" ^0
" narrow tube, by the area : " + str(narrow_tube_by_area_tenths_of_a_minute) + " tenths of a minute" ^0
" narrow tube, actual : " + str(narrow_tube_actual_tenths_of_a_minute) + " tenths of a minute" ^0
"" ^0
# ---- what the technician verified ----
"the flow-goes-with-the-area reasoning" ^0
" bores : " + str(wide_bore_mm) + " and " + str(narrow_bore_mm) + " mm, measured" ^0
" pressure : the same" ^0
" opening area : " + str(opening_area_ratio_per_mille) + " per mille, four-ninths" ^0
" intent : how long will the " + str(oil_to_deliver_ml) + " mL take" ^0
" facts wrong : 0" ^0
" verdict : TWO-THIRDS THE BORE, FOUR-NINTHS THE FLOW" ^0
"" ^0
" measuring both bores is the part done right here, and it is" ^0
" why the opening really is " + str(opening_area_ratio_per_mille) + " per mille of the old one" ^0
"" ^0
# ---- what the thinner tube passes ----
"area times speed, and the speed shrinks too" ^0
" at the wall : the oil does not move at all" ^0
" in the middle : it moves fastest, and at the same pressure" ^0
" that speed falls with the square of the bore" ^0
" the flow : the area, which falls with the square, times the" ^0
" speed, which falls with the square again" ^0
" two-thirds the bore : " + str(flow_ratio_per_mille) + " per mille of the flow, not " + str(opening_area_ratio_per_mille) ^0
" the job : " + str(narrow_tube_actual_tenths_of_a_minute) + " tenths of a minute, where the area predicted " + str(narrow_tube_by_area_tenths_of_a_minute) ^0
"" ^0
# ---- what the technician got ----
"the job" ^0
" believed : " + str(narrow_flow_by_area_ml_per_min) + " mL a minute" ^0
" actual : " + str(narrow_flow_actual_ml_per_min) + " mL a minute" ^0
" is the bore mis-measured : no" ^0
" does the flow go with the opening : no; in viscous flow it" ^0
" goes with the opening times the speed the opening allows" ^0
"" ^0
# ---- null control ----
# The same tube judged by the fourth power of its bore instead of by the area
# of its opening.
400 => nc_flow_read_from_the_area_ml_per_min
177 => nc_flow_read_from_the_fourth_power_ml_per_min
223 => nc_ml_per_min_the_fourth_power_removes
"null control - use the fourth power of the bore" ^0
" flow, read from the area : " + str(nc_flow_read_from_the_area_ml_per_min) + " mL a minute" ^0
" flow, read from the fourth power : " + str(nc_flow_read_from_the_fourth_power_ml_per_min) + " mL a minute" ^0
" mL a minute the fourth power removes : " + str(nc_ml_per_min_the_fourth_power_removes) ^0
" no tube and no oil changed; the speed was allowed to shrink" ^0
" with the bore as well as the area" ^0
"" ^0
# ---- the rule ----
"what a tube two-thirds as wide guarantees" ^0
" its opening is four-ninths as big : exactly" ^0
" it passes four-ninths of the flow : not addressed; in viscous" ^0
" flow the speed shrinks with the square of the bore as well," ^0
" so the flow is " + str(flow_ratio_per_mille) + " per mille, " + str(narrow_flow_actual_ml_per_min) + " mL a minute, not " + str(narrow_flow_by_area_ml_per_min) ^0
"" ^0
"narrowing a tube costs twice: once in the opening, once in the speed the" ^0
"wall will allow through it, and the second cost is the one nobody sees" ^0
"" ^0
"The opening is four-ninths as big - that is exact. But viscous oil clings to" ^0
"the wall and the middle slows with the square of the bore, so the flow falls" ^0
"to " + str(flow_ratio_per_mille) + " per mille, " + str(narrow_flow_actual_ml_per_min) + " mL a minute, and the " + str(oil_to_deliver_ml) + " mL take " + str(narrow_tube_actual_tenths_of_a_minute) + " tenths of a" ^0
"minute instead of " + str(narrow_tube_by_area_tenths_of_a_minute) + ", until the flow is scaled by the fourth power of the bore." ^0Python (deterministic transpilation)
pythonwide_bore_mm = 3
narrow_bore_mm = 2
wide_tube_flow_ml_per_min = 900
oil_to_deliver_ml = 9000
opening_area_ratio_per_mille = int(narrow_bore_mm * narrow_bore_mm * 1000 / (wide_bore_mm * wide_bore_mm))
flow_ratio_per_mille = int(narrow_bore_mm**4 * 1000 / wide_bore_mm**4)
narrow_flow_by_area_ml_per_min = int(wide_tube_flow_ml_per_min * narrow_bore_mm * narrow_bore_mm / (wide_bore_mm * wide_bore_mm))
narrow_flow_actual_ml_per_min = int(wide_tube_flow_ml_per_min * narrow_bore_mm**4 / wide_bore_mm**4)
flow_the_fourth_power_removes_ml_per_min = narrow_flow_by_area_ml_per_min - narrow_flow_actual_ml_per_min
wide_tube_tenths_of_a_minute = int(oil_to_deliver_ml * 10 / wide_tube_flow_ml_per_min)
narrow_tube_by_area_tenths_of_a_minute = int(oil_to_deliver_ml * 10 * wide_bore_mm * wide_bore_mm / (wide_tube_flow_ml_per_min * narrow_bore_mm * narrow_bore_mm))
narrow_tube_actual_tenths_of_a_minute = int(oil_to_deliver_ml * 10 * wide_bore_mm**4 / (wide_tube_flow_ml_per_min * narrow_bore_mm**4))
print("wide tube : " + str(wide_bore_mm) + " mm bore, " + str(wide_tube_flow_ml_per_min) + " mL a minute")
print("narrow tube : " + str(narrow_bore_mm) + " mm bore")
print("opening area, narrow vs wide : " + str(opening_area_ratio_per_mille) + " per mille")
print("flow, narrow vs wide : " + str(flow_ratio_per_mille) + " per mille")
print("")
print("narrow flow, going by the area : " + str(narrow_flow_by_area_ml_per_min) + " mL a minute")
print("narrow flow, actual : " + str(narrow_flow_actual_ml_per_min) + " mL a minute")
print("")
print("time for " + str(oil_to_deliver_ml) + " mL, wide tube : " + str(wide_tube_tenths_of_a_minute) + " tenths of a minute")
print(" narrow tube, by the area : " + str(narrow_tube_by_area_tenths_of_a_minute) + " tenths of a minute")
print(" narrow tube, actual : " + str(narrow_tube_actual_tenths_of_a_minute) + " tenths of a minute")
print("")
print("the flow-goes-with-the-area reasoning")
print(" bores : " + str(wide_bore_mm) + " and " + str(narrow_bore_mm) + " mm, measured")
print(" pressure : the same")
print(" opening area : " + str(opening_area_ratio_per_mille) + " per mille, four-ninths")
print(" intent : how long will the " + str(oil_to_deliver_ml) + " mL take")
print(" facts wrong : 0")
print(" verdict : TWO-THIRDS THE BORE, FOUR-NINTHS THE FLOW")
print("")
print(" measuring both bores is the part done right here, and it is")
print(" why the opening really is " + str(opening_area_ratio_per_mille) + " per mille of the old one")
print("")
print("area times speed, and the speed shrinks too")
print(" at the wall : the oil does not move at all")
print(" in the middle : it moves fastest, and at the same pressure")
print(" that speed falls with the square of the bore")
print(" the flow : the area, which falls with the square, times the")
print(" speed, which falls with the square again")
print(" two-thirds the bore : " + str(flow_ratio_per_mille) + " per mille of the flow, not " + str(opening_area_ratio_per_mille))
print(" the job : " + str(narrow_tube_actual_tenths_of_a_minute) + " tenths of a minute, where the area predicted " + str(narrow_tube_by_area_tenths_of_a_minute))
print("")
print("the job")
print(" believed : " + str(narrow_flow_by_area_ml_per_min) + " mL a minute")
print(" actual : " + str(narrow_flow_actual_ml_per_min) + " mL a minute")
print(" is the bore mis-measured : no")
print(" does the flow go with the opening : no; in viscous flow it")
print(" goes with the opening times the speed the opening allows")
print("")
nc_flow_read_from_the_area_ml_per_min = 400
nc_flow_read_from_the_fourth_power_ml_per_min = 177
nc_ml_per_min_the_fourth_power_removes = 223
print("null control - use the fourth power of the bore")
print(" flow, read from the area : " + str(nc_flow_read_from_the_area_ml_per_min) + " mL a minute")
print(" flow, read from the fourth power : " + str(nc_flow_read_from_the_fourth_power_ml_per_min) + " mL a minute")
print(" mL a minute the fourth power removes : " + str(nc_ml_per_min_the_fourth_power_removes))
print(" no tube and no oil changed; the speed was allowed to shrink")
print(" with the bore as well as the area")
print("")
print("what a tube two-thirds as wide guarantees")
print(" its opening is four-ninths as big : exactly")
print(" it passes four-ninths of the flow : not addressed; in viscous")
print(" flow the speed shrinks with the square of the bore as well,")
print(" so the flow is " + str(flow_ratio_per_mille) + " per mille, " + str(narrow_flow_actual_ml_per_min) + " mL a minute, not " + str(narrow_flow_by_area_ml_per_min))
print("")
print("narrowing a tube costs twice: once in the opening, once in the speed the")
print("wall will allow through it, and the second cost is the one nobody sees")
print("")
print("The opening is four-ninths as big - that is exact. But viscous oil clings to")
print("the wall and the middle slows with the square of the bore, so the flow falls")
print("to " + str(flow_ratio_per_mille) + " per mille, " + str(narrow_flow_actual_ml_per_min) + " mL a minute, and the " + str(oil_to_deliver_ml) + " mL take " + str(narrow_tube_actual_tenths_of_a_minute) + " tenths of a")
print("minute instead of " + str(narrow_tube_by_area_tenths_of_a_minute) + ", until the flow is scaled by the fourth power of the bore.")stdout (executed)
textwide tube : 3 mm bore, 900 mL a minute
narrow tube : 2 mm bore
opening area, narrow vs wide : 444 per mille
flow, narrow vs wide : 197 per mille
narrow flow, going by the area : 400 mL a minute
narrow flow, actual : 177 mL a minute
time for 9000 mL, wide tube : 100 tenths of a minute
narrow tube, by the area : 225 tenths of a minute
narrow tube, actual : 506 tenths of a minute
the flow-goes-with-the-area reasoning
bores : 3 and 2 mm, measured
pressure : the same
opening area : 444 per mille, four-ninths
intent : how long will the 9000 mL take
facts wrong : 0
verdict : TWO-THIRDS THE BORE, FOUR-NINTHS THE FLOW
measuring both bores is the part done right here, and it is
why the opening really is 444 per mille of the old one
area times speed, and the speed shrinks too
at the wall : the oil does not move at all
in the middle : it moves fastest, and at the same pressure
that speed falls with the square of the bore
the flow : the area, which falls with the square, times the
speed, which falls with the square again
two-thirds the bore : 197 per mille of the flow, not 444
the job : 506 tenths of a minute, where the area predicted 225
the job
believed : 400 mL a minute
actual : 177 mL a minute
is the bore mis-measured : no
does the flow go with the opening : no; in viscous flow it
goes with the opening times the speed the opening allows
null control - use the fourth power of the bore
flow, read from the area : 400 mL a minute
flow, read from the fourth power : 177 mL a minute
mL a minute the fourth power removes : 223
no tube and no oil changed; the speed was allowed to shrink
with the bore as well as the area
what a tube two-thirds as wide guarantees
its opening is four-ninths as big : exactly
it passes four-ninths of the flow : not addressed; in viscous
flow the speed shrinks with the square of the bore as well,
so the flow is 197 per mille, 177 mL a minute, not 400
narrowing a tube costs twice: once in the opening, once in the speed the
wall will allow through it, and the second cost is the one nobody sees
The opening is four-ninths as big - that is exact. But viscous oil clings to
the wall and the middle slows with the square of the bore, so the flow falls
to 197 per mille, 177 mL a minute, and the 9000 mL take 506 tenths of a
minute instead of 225, until the flow is scaled by the fourth power of the bore.Trace event types
eml:run:starteml:assigneml:outputeml:run:done