Case 962
The insulation was doubled and the heat left by the glass
the_insulation_was_doubled_and_the_heat_left_by_the_glass.eml - A house loses heat through a hundred square metres of wall and twenty of glass, the owner doubles the wall insulation because the walls are five times the area, the work is done well, and the heating bill falls by a sixth. Where the heat was actually leaving 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 house loses
# heat through a hundred square metres of wall and twenty of glass, the owner
# doubles the wall insulation because the walls are five times the area, the
# work is done well, and the heating bill falls by a sixth. Where the heat was
# actually leaving is computed below.
#
# The reasoning is careful. The areas are right; the wall is by far the larger
# surface; doubling insulation genuinely halves the wall's loss; and the intent
# was exactly 'cut the heat loss where most of the surface is'.
#
# Heat loss through a surface is its area times how conductive it is, and the
# glass conducts nine times as well as the wall per square metre, so the small
# glass area leaks more than the large wall - halving the wall's loss saves 15
# watts per degree while better glass saves 32, out of 86.
100 => wall_area_m2
20 => glass_area_m2
30 => wall_u_value_hundredths
15 => wall_u_value_after_doubling_insulation_hundredths
280 => glass_u_value_hundredths
120 => better_glass_u_value_hundredths
int(wall_area_m2 * wall_u_value_hundredths / 100) => wall_loss_watts_per_kelvin
int(glass_area_m2 * glass_u_value_hundredths / 100) => glass_loss_watts_per_kelvin
wall_loss_watts_per_kelvin + glass_loss_watts_per_kelvin => total_loss_watts_per_kelvin
int(glass_loss_watts_per_kelvin * 10000 / total_loss_watts_per_kelvin) => glass_share_of_the_loss_per_myriad
int(glass_u_value_hundredths / wall_u_value_hundredths) => glass_conducts_times_the_wall_per_square_metre
int(wall_area_m2 / glass_area_m2) => wall_is_times_the_glass_in_area
int(wall_area_m2 * wall_u_value_after_doubling_insulation_hundredths / 100) => wall_loss_after_doubling_insulation_watts_per_kelvin
wall_loss_watts_per_kelvin - wall_loss_after_doubling_insulation_watts_per_kelvin => saving_from_doubling_insulation_watts_per_kelvin
int(saving_from_doubling_insulation_watts_per_kelvin * 10000 / total_loss_watts_per_kelvin) => saving_from_insulation_per_myriad_of_total
int(glass_area_m2 * better_glass_u_value_hundredths / 100) => glass_loss_with_better_glass_watts_per_kelvin
glass_loss_watts_per_kelvin - glass_loss_with_better_glass_watts_per_kelvin => saving_from_better_glass_watts_per_kelvin
int(saving_from_better_glass_watts_per_kelvin * 10000 / total_loss_watts_per_kelvin) => saving_from_glass_per_myriad_of_total
"wall : " + str(wall_area_m2) + " m2 at U " + str(wall_u_value_hundredths) + " hundredths, " + str(wall_loss_watts_per_kelvin) + " W per degree" ^0
"glass : " + str(glass_area_m2) + " m2 at U " + str(glass_u_value_hundredths) + " hundredths, " + str(glass_loss_watts_per_kelvin) + " W per degree" ^0
"total : " + str(total_loss_watts_per_kelvin) + " W per degree" ^0
"glass share of the loss : " + str(glass_share_of_the_loss_per_myriad) + " per ten thousand, from a fifth of the area" ^0
"per square metre : glass conducts " + str(glass_conducts_times_the_wall_per_square_metre) + " times the wall" ^0
"" ^0
"double the wall insulation : wall to " + str(wall_loss_after_doubling_insulation_watts_per_kelvin) + " W per degree, saving " + str(saving_from_doubling_insulation_watts_per_kelvin) + ", " + str(saving_from_insulation_per_myriad_of_total) + " per ten thousand of the total" ^0
"better glass instead : glass to " + str(glass_loss_with_better_glass_watts_per_kelvin) + " W per degree, saving " + str(saving_from_better_glass_watts_per_kelvin) + ", " + str(saving_from_glass_per_myriad_of_total) + " per ten thousand of the total" ^0
"" ^0
# ---- what the owner verified ----
"the most-of-the-surface reasoning" ^0
" areas : wall " + str(wall_area_m2) + " m2, glass " + str(glass_area_m2) + " m2, " + str(wall_is_times_the_glass_in_area) + " to 1" ^0
" insulation : doubled, which halves the wall's loss" ^0
" workmanship : good" ^0
" intent : cut the heat loss where most of the surface is" ^0
" facts wrong : 0" ^0
" verdict : INSULATE THE BIG SURFACE" ^0
"" ^0
" doubling the insulation and halving the wall's loss is the" ^0
" part done right here, and it is why the wall's " + str(wall_loss_watts_per_kelvin) + " W per" ^0
" degree really did become " + str(wall_loss_after_doubling_insulation_watts_per_kelvin) ^0
"" ^0
# ---- where the heat was leaving ----
"area times conductance" ^0
" what each surface loses : its area times how well it conducts" ^0
" the wall : large area, small conductance, " + str(wall_loss_watts_per_kelvin) + " W per degree" ^0
" the glass : a fifth of the area, " + str(glass_conducts_times_the_wall_per_square_metre) + " times the conductance," ^0
" " + str(glass_loss_watts_per_kelvin) + " W per degree, " + str(glass_share_of_the_loss_per_myriad) + " per ten thousand of the whole" ^0
" halving the smaller leak : saves " + str(saving_from_doubling_insulation_watts_per_kelvin) ^0
" cutting the larger leak by half : saves " + str(saving_from_better_glass_watts_per_kelvin) ^0
" what area alone ranked : the surfaces; what the heat" ^0
" follows : the conductances" ^0
"" ^0
# ---- what the owner got ----
"the bill" ^0
" believed : the big surface fixed, most of the loss gone" ^0
" actual : " + str(saving_from_insulation_per_myriad_of_total) + " per ten thousand of the loss gone, a sixth" ^0
" was the insulation wasted : no; it saved " + str(saving_from_doubling_insulation_watts_per_kelvin) + " W per degree" ^0
" was it where the heat left : no; " + str(glass_share_of_the_loss_per_myriad) + " per ten thousand of the" ^0
" heat left through the fifth of the surface that is glass" ^0
"" ^0
# ---- null control ----
# The same budget spent on the surface ranked by watts per degree instead of
# by square metres.
15 => nc_saving_ranking_surfaces_by_area_watts_per_kelvin
32 => nc_saving_ranking_surfaces_by_loss_watts_per_kelvin
17 => nc_watts_per_kelvin_the_ranking_recovers
"null control - rank the surfaces by what they lose" ^0
" saving, ranking by area : " + str(nc_saving_ranking_surfaces_by_area_watts_per_kelvin) + " W per degree" ^0
" saving, ranking by loss : " + str(nc_saving_ranking_surfaces_by_loss_watts_per_kelvin) + " W per degree" ^0
" watts per degree the ranking recovers : " + str(nc_watts_per_kelvin_the_ranking_recovers) ^0
" no house and no budget changed; the leaks were ranked by" ^0
" area times conductance, not by area" ^0
"" ^0
# ---- the rule ----
"what doubling the insulation of the largest surface guarantees" ^0
" that surface loses half what it did : exactly, " + str(wall_loss_watts_per_kelvin) + " to " + str(wall_loss_after_doubling_insulation_watts_per_kelvin) ^0
" most of the house's loss is cut : not addressed; the loss" ^0
" follows area times conductance, the glass carries " + str(glass_share_of_the_loss_per_myriad) + " per" ^0
" ten thousand of it from a fifth of the area, and the wall" ^0
" work saves " + str(saving_from_doubling_insulation_watts_per_kelvin) + " of " + str(total_loss_watts_per_kelvin) ^0
"" ^0
"heat does not leave by the square metre; it leaves by the path of least" ^0
"resistance, and a small window is a wide door when the wall beside it is" ^0
"already shut" ^0
"" ^0
"The wall is " + str(wall_is_times_the_glass_in_area) + " times the glass in area and its loss really was halved. But" ^0
"loss is area times conductance, and the glass conducts " + str(glass_conducts_times_the_wall_per_square_metre) + " times as well:" ^0
"" + str(glass_loss_watts_per_kelvin) + " W per degree from the glass against " + str(wall_loss_watts_per_kelvin) + " from the wall, so the insulation saved" ^0
"" + str(saving_from_doubling_insulation_watts_per_kelvin) + " where better glass saves " + str(saving_from_better_glass_watts_per_kelvin) + ", until the surfaces are ranked by what they lose." ^0Python (deterministic transpilation)
pythonwall_area_m2 = 100
glass_area_m2 = 20
wall_u_value_hundredths = 30
wall_u_value_after_doubling_insulation_hundredths = 15
glass_u_value_hundredths = 280
better_glass_u_value_hundredths = 120
wall_loss_watts_per_kelvin = int(wall_area_m2 * wall_u_value_hundredths / 100)
glass_loss_watts_per_kelvin = int(glass_area_m2 * glass_u_value_hundredths / 100)
total_loss_watts_per_kelvin = wall_loss_watts_per_kelvin + glass_loss_watts_per_kelvin
glass_share_of_the_loss_per_myriad = int(glass_loss_watts_per_kelvin * 10000 / total_loss_watts_per_kelvin)
glass_conducts_times_the_wall_per_square_metre = int(glass_u_value_hundredths / wall_u_value_hundredths)
wall_is_times_the_glass_in_area = int(wall_area_m2 / glass_area_m2)
wall_loss_after_doubling_insulation_watts_per_kelvin = int(wall_area_m2 * wall_u_value_after_doubling_insulation_hundredths / 100)
saving_from_doubling_insulation_watts_per_kelvin = wall_loss_watts_per_kelvin - wall_loss_after_doubling_insulation_watts_per_kelvin
saving_from_insulation_per_myriad_of_total = int(saving_from_doubling_insulation_watts_per_kelvin * 10000 / total_loss_watts_per_kelvin)
glass_loss_with_better_glass_watts_per_kelvin = int(glass_area_m2 * better_glass_u_value_hundredths / 100)
saving_from_better_glass_watts_per_kelvin = glass_loss_watts_per_kelvin - glass_loss_with_better_glass_watts_per_kelvin
saving_from_glass_per_myriad_of_total = int(saving_from_better_glass_watts_per_kelvin * 10000 / total_loss_watts_per_kelvin)
print("wall : " + str(wall_area_m2) + " m2 at U " + str(wall_u_value_hundredths) + " hundredths, " + str(wall_loss_watts_per_kelvin) + " W per degree")
print("glass : " + str(glass_area_m2) + " m2 at U " + str(glass_u_value_hundredths) + " hundredths, " + str(glass_loss_watts_per_kelvin) + " W per degree")
print("total : " + str(total_loss_watts_per_kelvin) + " W per degree")
print("glass share of the loss : " + str(glass_share_of_the_loss_per_myriad) + " per ten thousand, from a fifth of the area")
print("per square metre : glass conducts " + str(glass_conducts_times_the_wall_per_square_metre) + " times the wall")
print("")
print("double the wall insulation : wall to " + str(wall_loss_after_doubling_insulation_watts_per_kelvin) + " W per degree, saving " + str(saving_from_doubling_insulation_watts_per_kelvin) + ", " + str(saving_from_insulation_per_myriad_of_total) + " per ten thousand of the total")
print("better glass instead : glass to " + str(glass_loss_with_better_glass_watts_per_kelvin) + " W per degree, saving " + str(saving_from_better_glass_watts_per_kelvin) + ", " + str(saving_from_glass_per_myriad_of_total) + " per ten thousand of the total")
print("")
print("the most-of-the-surface reasoning")
print(" areas : wall " + str(wall_area_m2) + " m2, glass " + str(glass_area_m2) + " m2, " + str(wall_is_times_the_glass_in_area) + " to 1")
print(" insulation : doubled, which halves the wall's loss")
print(" workmanship : good")
print(" intent : cut the heat loss where most of the surface is")
print(" facts wrong : 0")
print(" verdict : INSULATE THE BIG SURFACE")
print("")
print(" doubling the insulation and halving the wall's loss is the")
print(" part done right here, and it is why the wall's " + str(wall_loss_watts_per_kelvin) + " W per")
print(" degree really did become " + str(wall_loss_after_doubling_insulation_watts_per_kelvin))
print("")
print("area times conductance")
print(" what each surface loses : its area times how well it conducts")
print(" the wall : large area, small conductance, " + str(wall_loss_watts_per_kelvin) + " W per degree")
print(" the glass : a fifth of the area, " + str(glass_conducts_times_the_wall_per_square_metre) + " times the conductance,")
print(" " + str(glass_loss_watts_per_kelvin) + " W per degree, " + str(glass_share_of_the_loss_per_myriad) + " per ten thousand of the whole")
print(" halving the smaller leak : saves " + str(saving_from_doubling_insulation_watts_per_kelvin))
print(" cutting the larger leak by half : saves " + str(saving_from_better_glass_watts_per_kelvin))
print(" what area alone ranked : the surfaces; what the heat")
print(" follows : the conductances")
print("")
print("the bill")
print(" believed : the big surface fixed, most of the loss gone")
print(" actual : " + str(saving_from_insulation_per_myriad_of_total) + " per ten thousand of the loss gone, a sixth")
print(" was the insulation wasted : no; it saved " + str(saving_from_doubling_insulation_watts_per_kelvin) + " W per degree")
print(" was it where the heat left : no; " + str(glass_share_of_the_loss_per_myriad) + " per ten thousand of the")
print(" heat left through the fifth of the surface that is glass")
print("")
nc_saving_ranking_surfaces_by_area_watts_per_kelvin = 15
nc_saving_ranking_surfaces_by_loss_watts_per_kelvin = 32
nc_watts_per_kelvin_the_ranking_recovers = 17
print("null control - rank the surfaces by what they lose")
print(" saving, ranking by area : " + str(nc_saving_ranking_surfaces_by_area_watts_per_kelvin) + " W per degree")
print(" saving, ranking by loss : " + str(nc_saving_ranking_surfaces_by_loss_watts_per_kelvin) + " W per degree")
print(" watts per degree the ranking recovers : " + str(nc_watts_per_kelvin_the_ranking_recovers))
print(" no house and no budget changed; the leaks were ranked by")
print(" area times conductance, not by area")
print("")
print("what doubling the insulation of the largest surface guarantees")
print(" that surface loses half what it did : exactly, " + str(wall_loss_watts_per_kelvin) + " to " + str(wall_loss_after_doubling_insulation_watts_per_kelvin))
print(" most of the house's loss is cut : not addressed; the loss")
print(" follows area times conductance, the glass carries " + str(glass_share_of_the_loss_per_myriad) + " per")
print(" ten thousand of it from a fifth of the area, and the wall")
print(" work saves " + str(saving_from_doubling_insulation_watts_per_kelvin) + " of " + str(total_loss_watts_per_kelvin))
print("")
print("heat does not leave by the square metre; it leaves by the path of least")
print("resistance, and a small window is a wide door when the wall beside it is")
print("already shut")
print("")
print("The wall is " + str(wall_is_times_the_glass_in_area) + " times the glass in area and its loss really was halved. But")
print("loss is area times conductance, and the glass conducts " + str(glass_conducts_times_the_wall_per_square_metre) + " times as well:")
print("" + str(glass_loss_watts_per_kelvin) + " W per degree from the glass against " + str(wall_loss_watts_per_kelvin) + " from the wall, so the insulation saved")
print("" + str(saving_from_doubling_insulation_watts_per_kelvin) + " where better glass saves " + str(saving_from_better_glass_watts_per_kelvin) + ", until the surfaces are ranked by what they lose.")stdout (executed)
textwall : 100 m2 at U 30 hundredths, 30 W per degree
glass : 20 m2 at U 280 hundredths, 56 W per degree
total : 86 W per degree
glass share of the loss : 6511 per ten thousand, from a fifth of the area
per square metre : glass conducts 9 times the wall
double the wall insulation : wall to 15 W per degree, saving 15, 1744 per ten thousand of the total
better glass instead : glass to 24 W per degree, saving 32, 3720 per ten thousand of the total
the most-of-the-surface reasoning
areas : wall 100 m2, glass 20 m2, 5 to 1
insulation : doubled, which halves the wall's loss
workmanship : good
intent : cut the heat loss where most of the surface is
facts wrong : 0
verdict : INSULATE THE BIG SURFACE
doubling the insulation and halving the wall's loss is the
part done right here, and it is why the wall's 30 W per
degree really did become 15
area times conductance
what each surface loses : its area times how well it conducts
the wall : large area, small conductance, 30 W per degree
the glass : a fifth of the area, 9 times the conductance,
56 W per degree, 6511 per ten thousand of the whole
halving the smaller leak : saves 15
cutting the larger leak by half : saves 32
what area alone ranked : the surfaces; what the heat
follows : the conductances
the bill
believed : the big surface fixed, most of the loss gone
actual : 1744 per ten thousand of the loss gone, a sixth
was the insulation wasted : no; it saved 15 W per degree
was it where the heat left : no; 6511 per ten thousand of the
heat left through the fifth of the surface that is glass
null control - rank the surfaces by what they lose
saving, ranking by area : 15 W per degree
saving, ranking by loss : 32 W per degree
watts per degree the ranking recovers : 17
no house and no budget changed; the leaks were ranked by
area times conductance, not by area
what doubling the insulation of the largest surface guarantees
that surface loses half what it did : exactly, 30 to 15
most of the house's loss is cut : not addressed; the loss
follows area times conductance, the glass carries 6511 per
ten thousand of it from a fifth of the area, and the wall
work saves 15 of 86
heat does not leave by the square metre; it leaves by the path of least
resistance, and a small window is a wide door when the wall beside it is
already shut
The wall is 5 times the glass in area and its loss really was halved. But
loss is area times conductance, and the glass conducts 9 times as well:
56 W per degree from the glass against 30 from the wall, so the insulation saved
15 where better glass saves 32, until the surfaces are ranked by what they lose.Trace event types
eml:run:starteml:assigneml:outputeml:run:done