Case 957

Each heater was within the rating and together they were not

each_heater_was_within_the_rating_and_together_they_were_not.eml - A four-socket extension lead is rated at ten amps, two 1500-watt heaters are plugged into it, each heater draws well under the rating, and the lead's plug melts. What two loads on one lead draw together is computed below.

ok: true — round-trip fixpoint reached (python1 == python2)updated 2026-09-22

EML

eml
# Self-authored for the EML case corpus (no external origin). A four-socket
# extension lead is rated at ten amps, two 1500-watt heaters are plugged into
# it, each heater draws well under the rating, and the lead's plug melts. What
# two loads on one lead draw together is computed below.
#
# The reasoning is careful. The lead's rating is real and was read off the
# label; each heater's draw was computed correctly from its wattage; each is
# genuinely under ten amps; and the intent was exactly 'stay within the rating'.
#
# Loads on one lead sit in parallel and their currents add, so two heaters at
# six and a half amps each put thirteen amps through one cord rated for ten -
# and the heat in that cord rises with the square of the current, so thirty
# percent over the rating is sixty-nine percent more heat in the conductor.

230 => supply_volts
1500 => heater_watts
2 => heaters_plugged_in
100 => lead_rating_tenths_of_an_amp

int(heater_watts * 10 / supply_volts) => one_heater_draw_tenths_of_an_amp
one_heater_draw_tenths_of_an_amp * heaters_plugged_in => both_heaters_draw_tenths_of_an_amp
lead_rating_tenths_of_an_amp - one_heater_draw_tenths_of_an_amp => one_heater_margin_under_the_rating_tenths
both_heaters_draw_tenths_of_an_amp - lead_rating_tenths_of_an_amp => both_heaters_over_the_rating_tenths
int(both_heaters_draw_tenths_of_an_amp * 100 / lead_rating_tenths_of_an_amp) => current_as_a_share_of_the_rating_per_hundred
int(both_heaters_draw_tenths_of_an_amp * both_heaters_draw_tenths_of_an_amp * 100 / (lead_rating_tenths_of_an_amp * lead_rating_tenths_of_an_amp)) => conductor_heat_as_a_share_of_the_rated_heat_per_hundred
conductor_heat_as_a_share_of_the_rated_heat_per_hundred - 100 => conductor_heat_over_the_rated_heat_percent
heater_watts * heaters_plugged_in => both_heaters_watts
int(lead_rating_tenths_of_an_amp * supply_volts / 10) => watts_the_rating_allows

"supply                          : " + str(supply_volts) + " V" ^0
"lead rating                     : " + str(lead_rating_tenths_of_an_amp) + " tenths of an amp, " + str(watts_the_rating_allows) + " W" ^0
"one heater                      : " + str(heater_watts) + " W, " + str(one_heater_draw_tenths_of_an_amp) + " tenths of an amp, " + str(one_heater_margin_under_the_rating_tenths) + " under the rating" ^0
"two heaters on the same lead    : " + str(both_heaters_watts) + " W, " + str(both_heaters_draw_tenths_of_an_amp) + " tenths of an amp, " + str(both_heaters_over_the_rating_tenths) + " over the rating" ^0
"current vs rating               : " + str(current_as_a_share_of_the_rating_per_hundred) + " per hundred" ^0
"heat in the conductor vs rated  : " + str(conductor_heat_as_a_share_of_the_rated_heat_per_hundred) + " per hundred, " + str(conductor_heat_over_the_rated_heat_percent) + " percent more" ^0
"" ^0

# ---- what the user verified ----

"the each-within-rating reasoning" ^0
"  rating : " + str(lead_rating_tenths_of_an_amp) + " tenths of an amp, read off the label" ^0
"  heater draw : " + str(one_heater_draw_tenths_of_an_amp) + " tenths of an amp, computed from " + str(heater_watts) + " W" ^0
"  comparison : each heater under the rating, with " + str(one_heater_margin_under_the_rating_tenths) + " to spare" ^0
"  sockets : four, so two heaters fit" ^0
"  intent : stay within the rating" ^0
"  facts wrong : 0" ^0
"  verdict : EACH HEATER IS WITHIN THE RATING" ^0
"" ^0
"  computing each heater's draw from its wattage is the part" ^0
"  done right here, and it is why the single-heater figure of" ^0
"  " + str(one_heater_draw_tenths_of_an_amp) + " tenths is exactly right" ^0
"" ^0

# ---- what two loads on one lead draw ----

"parallel loads add" ^0
"  what the sockets share : one cord, one plug, one pair of conductors" ^0
"  what each heater draws : its own " + str(one_heater_draw_tenths_of_an_amp) + " tenths, regardless of the other" ^0
"  what the cord carries : both, " + str(both_heaters_draw_tenths_of_an_amp) + " tenths, because every socket's" ^0
"    current comes down the same wire" ^0
"  what the rating limits : the cord's heat, which rises with" ^0
"    the square of the current" ^0
"  " + str(current_as_a_share_of_the_rating_per_hundred) + " per hundred of the current : " + str(conductor_heat_as_a_share_of_the_rated_heat_per_hundred) + " per hundred of the heat" ^0
"" ^0

# ---- what the user got ----

"the plug" ^0
"  believed : two loads, each within the rating" ^0
"  actual : one cord at " + str(both_heaters_draw_tenths_of_an_amp) + " tenths, " + str(conductor_heat_over_the_rated_heat_percent) + " percent more heat than it was" ^0
"    built to shed" ^0
"  is either heater over the rating : no" ^0
"  is the rating per socket : no; it is per cord, and the cord" ^0
"    carries the sum" ^0
"" ^0

# ---- null control ----

# The same two heaters with the second one on a different circuit instead of a
# second socket of the same lead.
130 => nc_cord_current_two_heaters_one_lead_tenths
65 => nc_cord_current_one_heater_per_lead_tenths
65 => nc_current_the_second_lead_takes_off_this_cord_tenths

"null control - one heater per cord" ^0
"  cord current, two heaters on one lead : " + str(nc_cord_current_two_heaters_one_lead_tenths) + " tenths of an amp" ^0
"  cord current, one heater per lead : " + str(nc_cord_current_one_heater_per_lead_tenths) + " tenths of an amp" ^0
"  current the second cord takes off this one : " + str(nc_current_the_second_lead_takes_off_this_cord_tenths) + " tenths of an amp" ^0
"  no heater and no rating changed; the loads stopped sharing" ^0
"  a conductor" ^0
"" ^0

# ---- the rule ----

"what a per-heater check against the lead's rating guarantees" ^0
"  each heater alone is within the rating : exactly, " + str(one_heater_draw_tenths_of_an_amp) + " under " + str(lead_rating_tenths_of_an_amp) ^0
"  the lead is within its rating : not addressed; the sockets" ^0
"    share one cord, the currents add to " + str(both_heaters_draw_tenths_of_an_amp) + " tenths, and the" ^0
"    cord's heat is " + str(conductor_heat_as_a_share_of_the_rated_heat_per_hundred) + " per hundred of what the rating allows" ^0
"" ^0

"a rating on a cord is a promise about the cord, not about anything plugged" ^0
"into it; four sockets are four doors into one corridor, and the corridor is" ^0
"what burns" ^0
"" ^0

"Each heater draws " + str(one_heater_draw_tenths_of_an_amp) + " tenths of an amp, under the rating - that check was right." ^0
"But both come down one cord: " + str(both_heaters_draw_tenths_of_an_amp) + " tenths against a rating of " + str(lead_rating_tenths_of_an_amp) + ", and since" ^0
"heat goes with the square, " + str(current_as_a_share_of_the_rating_per_hundred) + " per hundred of the current is " + str(conductor_heat_as_a_share_of_the_rated_heat_per_hundred) + " per hundred of" ^0
"the heat, until the rating is checked against the sum the cord carries." ^0

Python (deterministic transpilation)

python
supply_volts = 230
heater_watts = 1500
heaters_plugged_in = 2
lead_rating_tenths_of_an_amp = 100
one_heater_draw_tenths_of_an_amp = int(heater_watts * 10 / supply_volts)
both_heaters_draw_tenths_of_an_amp = one_heater_draw_tenths_of_an_amp * heaters_plugged_in
one_heater_margin_under_the_rating_tenths = lead_rating_tenths_of_an_amp - one_heater_draw_tenths_of_an_amp
both_heaters_over_the_rating_tenths = both_heaters_draw_tenths_of_an_amp - lead_rating_tenths_of_an_amp
current_as_a_share_of_the_rating_per_hundred = int(both_heaters_draw_tenths_of_an_amp * 100 / lead_rating_tenths_of_an_amp)
conductor_heat_as_a_share_of_the_rated_heat_per_hundred = int(both_heaters_draw_tenths_of_an_amp * both_heaters_draw_tenths_of_an_amp * 100 / (lead_rating_tenths_of_an_amp * lead_rating_tenths_of_an_amp))
conductor_heat_over_the_rated_heat_percent = conductor_heat_as_a_share_of_the_rated_heat_per_hundred - 100
both_heaters_watts = heater_watts * heaters_plugged_in
watts_the_rating_allows = int(lead_rating_tenths_of_an_amp * supply_volts / 10)
print("supply                          : " + str(supply_volts) + " V")
print("lead rating                     : " + str(lead_rating_tenths_of_an_amp) + " tenths of an amp, " + str(watts_the_rating_allows) + " W")
print("one heater                      : " + str(heater_watts) + " W, " + str(one_heater_draw_tenths_of_an_amp) + " tenths of an amp, " + str(one_heater_margin_under_the_rating_tenths) + " under the rating")
print("two heaters on the same lead    : " + str(both_heaters_watts) + " W, " + str(both_heaters_draw_tenths_of_an_amp) + " tenths of an amp, " + str(both_heaters_over_the_rating_tenths) + " over the rating")
print("current vs rating               : " + str(current_as_a_share_of_the_rating_per_hundred) + " per hundred")
print("heat in the conductor vs rated  : " + str(conductor_heat_as_a_share_of_the_rated_heat_per_hundred) + " per hundred, " + str(conductor_heat_over_the_rated_heat_percent) + " percent more")
print("")
print("the each-within-rating reasoning")
print("  rating : " + str(lead_rating_tenths_of_an_amp) + " tenths of an amp, read off the label")
print("  heater draw : " + str(one_heater_draw_tenths_of_an_amp) + " tenths of an amp, computed from " + str(heater_watts) + " W")
print("  comparison : each heater under the rating, with " + str(one_heater_margin_under_the_rating_tenths) + " to spare")
print("  sockets : four, so two heaters fit")
print("  intent : stay within the rating")
print("  facts wrong : 0")
print("  verdict : EACH HEATER IS WITHIN THE RATING")
print("")
print("  computing each heater's draw from its wattage is the part")
print("  done right here, and it is why the single-heater figure of")
print("  " + str(one_heater_draw_tenths_of_an_amp) + " tenths is exactly right")
print("")
print("parallel loads add")
print("  what the sockets share : one cord, one plug, one pair of conductors")
print("  what each heater draws : its own " + str(one_heater_draw_tenths_of_an_amp) + " tenths, regardless of the other")
print("  what the cord carries : both, " + str(both_heaters_draw_tenths_of_an_amp) + " tenths, because every socket's")
print("    current comes down the same wire")
print("  what the rating limits : the cord's heat, which rises with")
print("    the square of the current")
print("  " + str(current_as_a_share_of_the_rating_per_hundred) + " per hundred of the current : " + str(conductor_heat_as_a_share_of_the_rated_heat_per_hundred) + " per hundred of the heat")
print("")
print("the plug")
print("  believed : two loads, each within the rating")
print("  actual : one cord at " + str(both_heaters_draw_tenths_of_an_amp) + " tenths, " + str(conductor_heat_over_the_rated_heat_percent) + " percent more heat than it was")
print("    built to shed")
print("  is either heater over the rating : no")
print("  is the rating per socket : no; it is per cord, and the cord")
print("    carries the sum")
print("")
nc_cord_current_two_heaters_one_lead_tenths = 130
nc_cord_current_one_heater_per_lead_tenths = 65
nc_current_the_second_lead_takes_off_this_cord_tenths = 65
print("null control - one heater per cord")
print("  cord current, two heaters on one lead : " + str(nc_cord_current_two_heaters_one_lead_tenths) + " tenths of an amp")
print("  cord current, one heater per lead : " + str(nc_cord_current_one_heater_per_lead_tenths) + " tenths of an amp")
print("  current the second cord takes off this one : " + str(nc_current_the_second_lead_takes_off_this_cord_tenths) + " tenths of an amp")
print("  no heater and no rating changed; the loads stopped sharing")
print("  a conductor")
print("")
print("what a per-heater check against the lead's rating guarantees")
print("  each heater alone is within the rating : exactly, " + str(one_heater_draw_tenths_of_an_amp) + " under " + str(lead_rating_tenths_of_an_amp))
print("  the lead is within its rating : not addressed; the sockets")
print("    share one cord, the currents add to " + str(both_heaters_draw_tenths_of_an_amp) + " tenths, and the")
print("    cord's heat is " + str(conductor_heat_as_a_share_of_the_rated_heat_per_hundred) + " per hundred of what the rating allows")
print("")
print("a rating on a cord is a promise about the cord, not about anything plugged")
print("into it; four sockets are four doors into one corridor, and the corridor is")
print("what burns")
print("")
print("Each heater draws " + str(one_heater_draw_tenths_of_an_amp) + " tenths of an amp, under the rating - that check was right.")
print("But both come down one cord: " + str(both_heaters_draw_tenths_of_an_amp) + " tenths against a rating of " + str(lead_rating_tenths_of_an_amp) + ", and since")
print("heat goes with the square, " + str(current_as_a_share_of_the_rating_per_hundred) + " per hundred of the current is " + str(conductor_heat_as_a_share_of_the_rated_heat_per_hundred) + " per hundred of")
print("the heat, until the rating is checked against the sum the cord carries.")

stdout (executed)

text
supply                          : 230 V
lead rating                     : 100 tenths of an amp, 2300 W
one heater                      : 1500 W, 65 tenths of an amp, 35 under the rating
two heaters on the same lead    : 3000 W, 130 tenths of an amp, 30 over the rating
current vs rating               : 130 per hundred
heat in the conductor vs rated  : 169 per hundred, 69 percent more

the each-within-rating reasoning
  rating : 100 tenths of an amp, read off the label
  heater draw : 65 tenths of an amp, computed from 1500 W
  comparison : each heater under the rating, with 35 to spare
  sockets : four, so two heaters fit
  intent : stay within the rating
  facts wrong : 0
  verdict : EACH HEATER IS WITHIN THE RATING

  computing each heater's draw from its wattage is the part
  done right here, and it is why the single-heater figure of
  65 tenths is exactly right

parallel loads add
  what the sockets share : one cord, one plug, one pair of conductors
  what each heater draws : its own 65 tenths, regardless of the other
  what the cord carries : both, 130 tenths, because every socket's
    current comes down the same wire
  what the rating limits : the cord's heat, which rises with
    the square of the current
  130 per hundred of the current : 169 per hundred of the heat

the plug
  believed : two loads, each within the rating
  actual : one cord at 130 tenths, 69 percent more heat than it was
    built to shed
  is either heater over the rating : no
  is the rating per socket : no; it is per cord, and the cord
    carries the sum

null control - one heater per cord
  cord current, two heaters on one lead : 130 tenths of an amp
  cord current, one heater per lead : 65 tenths of an amp
  current the second cord takes off this one : 65 tenths of an amp
  no heater and no rating changed; the loads stopped sharing
  a conductor

what a per-heater check against the lead's rating guarantees
  each heater alone is within the rating : exactly, 65 under 100
  the lead is within its rating : not addressed; the sockets
    share one cord, the currents add to 130 tenths, and the
    cord's heat is 169 per hundred of what the rating allows

a rating on a cord is a promise about the cord, not about anything plugged
into it; four sockets are four doors into one corridor, and the corridor is
what burns

Each heater draws 65 tenths of an amp, under the rating - that check was right.
But both come down one cord: 130 tenths against a rating of 100, and since
heat goes with the square, 130 per hundred of the current is 169 per hundred of
the heat, until the rating is checked against the sum the cord carries.

Trace event types

eml:run:starteml:assigneml:outputeml:run:done