Case 975
The car ten over was doing forty three where the other stopped
the_car_ten_over_was_doing_forty_three_where_the_other_stopped.eml - A crate falls off a truck 34.6 metres ahead of two cars. The car at the 50 km/h limit stops just short of it; the driver of the car at 60 had reasoned that ten over is only a fifth faster and would need only about a fifth more road to stop. How fast the second car is still going when it reaches the crate is computed below.
ok: true — round-trip fixpoint reached (python1 == python2)updated 2026-09-23
EML
eml# Self-authored for the EML case corpus (no external origin). A crate falls off a
# truck 34.6 metres ahead of two cars. The car at the 50 km/h limit stops just
# short of it; the driver of the car at 60 had reasoned that ten over is only a
# fifth faster and would need only about a fifth more road to stop. How fast the
# second car is still going when it reaches the crate is computed below.
#
# The reasoning is careful. 60 is exactly a fifth more than 50; the driver's
# reaction time is the same one and a half seconds at either speed; the brakes
# and the road are the same; and the intent is exactly 'keep a safe margin'.
#
# The reaction time is spent at full speed, so the faster car covers 25 metres
# before braking begins, where the slower one covers 20.8; and braking takes
# away the square of the speed, not the speed. Where the car at 50 stops, the
# car at 60 has braked for only 9.6 metres and is still doing 43 km/h, carrying
# half of its energy into the crate.
50 => limit_kmh
60 => speed_kmh
15 => reaction_tenths_of_a_second
70 => braking_tenths_of_a_m_per_s2
int(limit_kmh * 1000 * reaction_tenths_of_a_second / 360) => reaction_distance_at_the_limit_cm
int(speed_kmh * 1000 * reaction_tenths_of_a_second / 360) => reaction_distance_at_speed_cm
int(limit_kmh * limit_kmh * 10000000 / (259200 * braking_tenths_of_a_m_per_s2)) => braking_distance_at_the_limit_cm
int(speed_kmh * speed_kmh * 10000000 / (259200 * braking_tenths_of_a_m_per_s2)) => braking_distance_at_speed_cm
reaction_distance_at_the_limit_cm + braking_distance_at_the_limit_cm => stop_at_the_limit_cm
reaction_distance_at_speed_cm + braking_distance_at_speed_cm => stop_at_speed_cm
stop_at_the_limit_cm - reaction_distance_at_speed_cm => braking_done_before_the_crate_cm
int(braking_done_before_the_crate_cm * 259200 * braking_tenths_of_a_m_per_s2 / 10000000) => speed_squared_taken_away
speed_kmh * speed_kmh - speed_squared_taken_away => speed_squared_at_the_crate
43 => speed_at_the_crate_kmh
speed_at_the_crate_kmh * speed_at_the_crate_kmh => square_of_43
(speed_at_the_crate_kmh + 1) * (speed_at_the_crate_kmh + 1) => square_of_44
int(speed_squared_at_the_crate * 1000 / (speed_kmh * speed_kmh)) => energy_left_at_the_crate_per_mille
int((speed_kmh - limit_kmh) * 100 / limit_kmh) => faster_by_percent
int((stop_at_speed_cm - stop_at_the_limit_cm) * 100 / stop_at_the_limit_cm) => stopping_distance_longer_by_percent
"limit : " + str(limit_kmh) + " km/h" ^0
"the faster car : " + str(speed_kmh) + " km/h, " + str(faster_by_percent) + " percent over" ^0
"reaction : " + str(reaction_tenths_of_a_second) + " tenths of a second; braking " + str(braking_tenths_of_a_m_per_s2) + " tenths of a m/s2" ^0
"" ^0
"at the limit : reaction " + str(reaction_distance_at_the_limit_cm) + " cm, braking " + str(braking_distance_at_the_limit_cm) + " cm, stops in " + str(stop_at_the_limit_cm) + " cm" ^0
"at " + str(speed_kmh) + " : reaction " + str(reaction_distance_at_speed_cm) + " cm, braking " + str(braking_distance_at_speed_cm) + " cm, stops in " + str(stop_at_speed_cm) + " cm" ^0
"stopping distance longer by : " + str(stopping_distance_longer_by_percent) + " percent" ^0
"" ^0
"the crate, " + str(stop_at_the_limit_cm) + " cm ahead : the car at " + str(speed_kmh) + " has braked " + str(braking_done_before_the_crate_cm) + " cm" ^0
"speed squared left : " + str(speed_squared_at_the_crate) + ", between " + str(square_of_43) + " and " + str(square_of_44) ^0
"speed at the crate : " + str(speed_at_the_crate_kmh) + " km/h" ^0
"energy carried into the crate : " + str(energy_left_at_the_crate_per_mille) + " per mille of what it had" ^0
"" ^0
# ---- what the driver verified ----
"the only-a-fifth reasoning" ^0
" speed : " + str(speed_kmh) + ", exactly a fifth over " + str(limit_kmh) ^0
" reaction : the same " + str(reaction_tenths_of_a_second) + " tenths of a second" ^0
" brakes and road : the same" ^0
" intent : keep a safe margin" ^0
" facts wrong : 0" ^0
" verdict : A FIFTH FASTER NEEDS ABOUT A FIFTH MORE ROAD" ^0
"" ^0
" keeping reaction, brakes and road the same is the part done" ^0
" right here, and it is why the two cars differ in exactly one" ^0
" thing, the speed" ^0
"" ^0
# ---- where the extra speed goes ----
"two parts of a stop" ^0
" the reaction : spent at full speed, so it grows with the speed," ^0
" " + str(reaction_distance_at_the_limit_cm) + " cm at " + str(limit_kmh) + " and " + str(reaction_distance_at_speed_cm) + " at " + str(speed_kmh) ^0
" the braking : takes away the square of the speed, so it grows" ^0
" with the square, " + str(braking_distance_at_the_limit_cm) + " cm against " + str(braking_distance_at_speed_cm) ^0
" at the crate : the car at " + str(speed_kmh) + " is only " + str(braking_done_before_the_crate_cm) + " cm into its braking," ^0
" which has taken " + str(speed_squared_taken_away) + " off its " + str(speed_kmh * speed_kmh) + " of speed squared" ^0
" what is left : " + str(speed_at_the_crate_kmh) + " km/h, most of the speed, because the" ^0
" first metres of braking take the least of it" ^0
"" ^0
# ---- what the driver got ----
"the crate" ^0
" believed : a stop a fifth further on, a small margin used" ^0
" actual : " + str(speed_at_the_crate_kmh) + " km/h at the point where the other car stood still" ^0
" was the arithmetic wrong : no; " + str(speed_kmh) + " is a fifth over " + str(limit_kmh) ^0
" does a fifth more speed use a fifth more road : no; it uses" ^0
" " + str(stopping_distance_longer_by_percent) + " percent more, and arrives with " + str(energy_left_at_the_crate_per_mille) + " per mille of its energy" ^0
"" ^0
# ---- null control ----
# The same stop computed from its two parts instead of scaled by the speed.
4152 => nc_stop_scaled_by_the_speed_cm
4484 => nc_stop_computed_from_reaction_and_braking_cm
332 => nc_cm_the_square_adds
"null control - compute the stop, do not scale it" ^0
" stop, scaled by the speed : " + str(nc_stop_scaled_by_the_speed_cm) + " cm" ^0
" stop, from reaction and braking : " + str(nc_stop_computed_from_reaction_and_braking_cm) + " cm" ^0
" cm the square adds : " + str(nc_cm_the_square_adds) ^0
" no car and no road changed; the braking part was allowed to" ^0
" grow with the square it follows" ^0
"" ^0
# ---- the rule ----
"what driving a fifth over with the same brakes guarantees" ^0
" reaction, brakes and road as good as at the limit : exactly" ^0
" a stop about a fifth further on : not addressed; the reaction" ^0
" is spent at the higher speed and braking takes away speed" ^0
" squared, so where the car at " + str(limit_kmh) + " stops, the car at " + str(speed_kmh) + " is still" ^0
" doing " + str(speed_at_the_crate_kmh) + " km/h with " + str(energy_left_at_the_crate_per_mille) + " per mille of its energy" ^0
"" ^0
"a margin measured in speed is spent in distance, and distance is charged at" ^0
"the square; ten over is not a tenth of anything by the time the road runs out" ^0
"" ^0
"Sixty is a fifth over fifty - exactly. But the reaction is spent at sixty and" ^0
"braking removes the square of the speed, so the car at " + str(speed_kmh) + " needs " + str(stop_at_speed_cm) + " cm to" ^0
"stop, and at the " + str(stop_at_the_limit_cm) + " cm where the car at " + str(limit_kmh) + " stood still it is doing " + str(speed_at_the_crate_kmh) ^0
"km/h, until the stop is computed from its parts instead of scaled by the speed." ^0Python (deterministic transpilation)
pythonlimit_kmh = 50
speed_kmh = 60
reaction_tenths_of_a_second = 15
braking_tenths_of_a_m_per_s2 = 70
reaction_distance_at_the_limit_cm = int(limit_kmh * 1000 * reaction_tenths_of_a_second / 360)
reaction_distance_at_speed_cm = int(speed_kmh * 1000 * reaction_tenths_of_a_second / 360)
braking_distance_at_the_limit_cm = int(limit_kmh * limit_kmh * 10000000 / (259200 * braking_tenths_of_a_m_per_s2))
braking_distance_at_speed_cm = int(speed_kmh * speed_kmh * 10000000 / (259200 * braking_tenths_of_a_m_per_s2))
stop_at_the_limit_cm = reaction_distance_at_the_limit_cm + braking_distance_at_the_limit_cm
stop_at_speed_cm = reaction_distance_at_speed_cm + braking_distance_at_speed_cm
braking_done_before_the_crate_cm = stop_at_the_limit_cm - reaction_distance_at_speed_cm
speed_squared_taken_away = int(braking_done_before_the_crate_cm * 259200 * braking_tenths_of_a_m_per_s2 / 10000000)
speed_squared_at_the_crate = speed_kmh * speed_kmh - speed_squared_taken_away
speed_at_the_crate_kmh = 43
square_of_43 = speed_at_the_crate_kmh * speed_at_the_crate_kmh
square_of_44 = (speed_at_the_crate_kmh + 1) * (speed_at_the_crate_kmh + 1)
energy_left_at_the_crate_per_mille = int(speed_squared_at_the_crate * 1000 / (speed_kmh * speed_kmh))
faster_by_percent = int((speed_kmh - limit_kmh) * 100 / limit_kmh)
stopping_distance_longer_by_percent = int((stop_at_speed_cm - stop_at_the_limit_cm) * 100 / stop_at_the_limit_cm)
print("limit : " + str(limit_kmh) + " km/h")
print("the faster car : " + str(speed_kmh) + " km/h, " + str(faster_by_percent) + " percent over")
print("reaction : " + str(reaction_tenths_of_a_second) + " tenths of a second; braking " + str(braking_tenths_of_a_m_per_s2) + " tenths of a m/s2")
print("")
print("at the limit : reaction " + str(reaction_distance_at_the_limit_cm) + " cm, braking " + str(braking_distance_at_the_limit_cm) + " cm, stops in " + str(stop_at_the_limit_cm) + " cm")
print("at " + str(speed_kmh) + " : reaction " + str(reaction_distance_at_speed_cm) + " cm, braking " + str(braking_distance_at_speed_cm) + " cm, stops in " + str(stop_at_speed_cm) + " cm")
print("stopping distance longer by : " + str(stopping_distance_longer_by_percent) + " percent")
print("")
print("the crate, " + str(stop_at_the_limit_cm) + " cm ahead : the car at " + str(speed_kmh) + " has braked " + str(braking_done_before_the_crate_cm) + " cm")
print("speed squared left : " + str(speed_squared_at_the_crate) + ", between " + str(square_of_43) + " and " + str(square_of_44))
print("speed at the crate : " + str(speed_at_the_crate_kmh) + " km/h")
print("energy carried into the crate : " + str(energy_left_at_the_crate_per_mille) + " per mille of what it had")
print("")
print("the only-a-fifth reasoning")
print(" speed : " + str(speed_kmh) + ", exactly a fifth over " + str(limit_kmh))
print(" reaction : the same " + str(reaction_tenths_of_a_second) + " tenths of a second")
print(" brakes and road : the same")
print(" intent : keep a safe margin")
print(" facts wrong : 0")
print(" verdict : A FIFTH FASTER NEEDS ABOUT A FIFTH MORE ROAD")
print("")
print(" keeping reaction, brakes and road the same is the part done")
print(" right here, and it is why the two cars differ in exactly one")
print(" thing, the speed")
print("")
print("two parts of a stop")
print(" the reaction : spent at full speed, so it grows with the speed,")
print(" " + str(reaction_distance_at_the_limit_cm) + " cm at " + str(limit_kmh) + " and " + str(reaction_distance_at_speed_cm) + " at " + str(speed_kmh))
print(" the braking : takes away the square of the speed, so it grows")
print(" with the square, " + str(braking_distance_at_the_limit_cm) + " cm against " + str(braking_distance_at_speed_cm))
print(" at the crate : the car at " + str(speed_kmh) + " is only " + str(braking_done_before_the_crate_cm) + " cm into its braking,")
print(" which has taken " + str(speed_squared_taken_away) + " off its " + str(speed_kmh * speed_kmh) + " of speed squared")
print(" what is left : " + str(speed_at_the_crate_kmh) + " km/h, most of the speed, because the")
print(" first metres of braking take the least of it")
print("")
print("the crate")
print(" believed : a stop a fifth further on, a small margin used")
print(" actual : " + str(speed_at_the_crate_kmh) + " km/h at the point where the other car stood still")
print(" was the arithmetic wrong : no; " + str(speed_kmh) + " is a fifth over " + str(limit_kmh))
print(" does a fifth more speed use a fifth more road : no; it uses")
print(" " + str(stopping_distance_longer_by_percent) + " percent more, and arrives with " + str(energy_left_at_the_crate_per_mille) + " per mille of its energy")
print("")
nc_stop_scaled_by_the_speed_cm = 4152
nc_stop_computed_from_reaction_and_braking_cm = 4484
nc_cm_the_square_adds = 332
print("null control - compute the stop, do not scale it")
print(" stop, scaled by the speed : " + str(nc_stop_scaled_by_the_speed_cm) + " cm")
print(" stop, from reaction and braking : " + str(nc_stop_computed_from_reaction_and_braking_cm) + " cm")
print(" cm the square adds : " + str(nc_cm_the_square_adds))
print(" no car and no road changed; the braking part was allowed to")
print(" grow with the square it follows")
print("")
print("what driving a fifth over with the same brakes guarantees")
print(" reaction, brakes and road as good as at the limit : exactly")
print(" a stop about a fifth further on : not addressed; the reaction")
print(" is spent at the higher speed and braking takes away speed")
print(" squared, so where the car at " + str(limit_kmh) + " stops, the car at " + str(speed_kmh) + " is still")
print(" doing " + str(speed_at_the_crate_kmh) + " km/h with " + str(energy_left_at_the_crate_per_mille) + " per mille of its energy")
print("")
print("a margin measured in speed is spent in distance, and distance is charged at")
print("the square; ten over is not a tenth of anything by the time the road runs out")
print("")
print("Sixty is a fifth over fifty - exactly. But the reaction is spent at sixty and")
print("braking removes the square of the speed, so the car at " + str(speed_kmh) + " needs " + str(stop_at_speed_cm) + " cm to")
print("stop, and at the " + str(stop_at_the_limit_cm) + " cm where the car at " + str(limit_kmh) + " stood still it is doing " + str(speed_at_the_crate_kmh))
print("km/h, until the stop is computed from its parts instead of scaled by the speed.")stdout (executed)
textlimit : 50 km/h
the faster car : 60 km/h, 20 percent over
reaction : 15 tenths of a second; braking 70 tenths of a m/s2
at the limit : reaction 2083 cm, braking 1377 cm, stops in 3460 cm
at 60 : reaction 2500 cm, braking 1984 cm, stops in 4484 cm
stopping distance longer by : 29 percent
the crate, 3460 cm ahead : the car at 60 has braked 960 cm
speed squared left : 1859, between 1849 and 1936
speed at the crate : 43 km/h
energy carried into the crate : 516 per mille of what it had
the only-a-fifth reasoning
speed : 60, exactly a fifth over 50
reaction : the same 15 tenths of a second
brakes and road : the same
intent : keep a safe margin
facts wrong : 0
verdict : A FIFTH FASTER NEEDS ABOUT A FIFTH MORE ROAD
keeping reaction, brakes and road the same is the part done
right here, and it is why the two cars differ in exactly one
thing, the speed
two parts of a stop
the reaction : spent at full speed, so it grows with the speed,
2083 cm at 50 and 2500 at 60
the braking : takes away the square of the speed, so it grows
with the square, 1377 cm against 1984
at the crate : the car at 60 is only 960 cm into its braking,
which has taken 1741 off its 3600 of speed squared
what is left : 43 km/h, most of the speed, because the
first metres of braking take the least of it
the crate
believed : a stop a fifth further on, a small margin used
actual : 43 km/h at the point where the other car stood still
was the arithmetic wrong : no; 60 is a fifth over 50
does a fifth more speed use a fifth more road : no; it uses
29 percent more, and arrives with 516 per mille of its energy
null control - compute the stop, do not scale it
stop, scaled by the speed : 4152 cm
stop, from reaction and braking : 4484 cm
cm the square adds : 332
no car and no road changed; the braking part was allowed to
grow with the square it follows
what driving a fifth over with the same brakes guarantees
reaction, brakes and road as good as at the limit : exactly
a stop about a fifth further on : not addressed; the reaction
is spent at the higher speed and braking takes away speed
squared, so where the car at 50 stops, the car at 60 is still
doing 43 km/h with 516 per mille of its energy
a margin measured in speed is spent in distance, and distance is charged at
the square; ten over is not a tenth of anything by the time the road runs out
Sixty is a fifth over fifty - exactly. But the reaction is spent at sixty and
braking removes the square of the speed, so the car at 60 needs 4484 cm to
stop, and at the 3460 cm where the car at 50 stood still it is doing 43
km/h, until the stop is computed from its parts instead of scaled by the speed.Trace event types
eml:run:starteml:assigneml:outputeml:run:done