<!-- canonical: efficientnewlanguage.org/ai/examples/965-the-room-was-dry-and-the-cold-pane-was-wet | ai_layer_version: 0.1.0 | updated: 2026-09-22 -->

# Example 965 — The room was dry and the cold pane was wet

`the_room_was_dry_and_the_cold_pane_was_wet.eml` - A room reads sixty percent humidity on a good hygrometer, comfortably dry, and every morning the inside of its single-glazed window is streaming. What the same air is at the temperature of the glass is computed below.

## EML

```eml
# Self-authored for the EML case corpus (no external origin). A room reads
# sixty percent humidity on a good hygrometer, comfortably dry, and every
# morning the inside of its single-glazed window is streaming. What the same
# air is at the temperature of the glass is computed below.
#
# The reasoning is careful. The hygrometer is accurate; sixty percent is a
# dry, comfortable reading; the air in the room is one body of air; and the
# intent was exactly 'is this room too damp'.
#
# Relative humidity is relative to the temperature of the air it is measured
# in, and air holds less water the colder it is - the room's air carries 10.3
# grams per cubic metre, which is sixty percent of what 20-degree air can hold
# and 124 percent of what 8-degree air can, so the layer touching the glass is
# past saturation while the hygrometer in the middle of the room reads dry.

20 => room_air_c
60 => room_relative_humidity_percent
8 => single_pane_surface_c
15 => double_glazing_inner_pane_c
173 => saturation_at_20_c_tenths_of_a_gram_per_m3
83 => saturation_at_8_c_tenths_of_a_gram_per_m3
128 => saturation_at_15_c_tenths_of_a_gram_per_m3
12 => dew_point_of_the_room_air_c

int(saturation_at_20_c_tenths_of_a_gram_per_m3 * room_relative_humidity_percent / 100) => water_in_the_room_air_tenths_of_a_gram_per_m3
water_in_the_room_air_tenths_of_a_gram_per_m3 - saturation_at_8_c_tenths_of_a_gram_per_m3 => water_the_pane_air_cannot_hold_tenths_of_a_gram_per_m3
int(water_in_the_room_air_tenths_of_a_gram_per_m3 * 100 / saturation_at_8_c_tenths_of_a_gram_per_m3) => relative_humidity_at_the_pane_percent
saturation_at_15_c_tenths_of_a_gram_per_m3 - water_in_the_room_air_tenths_of_a_gram_per_m3 => margin_at_the_double_glazed_pane_tenths_of_a_gram_per_m3
int(water_in_the_room_air_tenths_of_a_gram_per_m3 * 100 / saturation_at_15_c_tenths_of_a_gram_per_m3) => relative_humidity_at_the_double_glazed_pane_percent
int(saturation_at_8_c_tenths_of_a_gram_per_m3 * 100 / saturation_at_20_c_tenths_of_a_gram_per_m3) => room_humidity_that_would_keep_the_single_pane_dry_percent
dew_point_of_the_room_air_c - single_pane_surface_c => degrees_the_pane_sits_below_the_dew_point_k

"room air                        : " + str(room_air_c) + " C at " + str(room_relative_humidity_percent) + " percent, " + str(water_in_the_room_air_tenths_of_a_gram_per_m3) + " tenths of a gram per m3" ^0
"what 20 C air can hold          : " + str(saturation_at_20_c_tenths_of_a_gram_per_m3) + " tenths of a gram per m3" ^0
"what 8 C air can hold           : " + str(saturation_at_8_c_tenths_of_a_gram_per_m3) + " tenths of a gram per m3" ^0
"dew point of the room air       : " + str(dew_point_of_the_room_air_c) + " C" ^0
"" ^0
"single pane surface             : " + str(single_pane_surface_c) + " C, " + str(degrees_the_pane_sits_below_the_dew_point_k) + " K below the dew point" ^0
"the same air at the pane        : " + str(relative_humidity_at_the_pane_percent) + " percent, " + str(water_the_pane_air_cannot_hold_tenths_of_a_gram_per_m3) + " tenths of a gram per m3 must come out as water" ^0
"room humidity that keeps it dry : under " + str(room_humidity_that_would_keep_the_single_pane_dry_percent) + " percent" ^0
"" ^0
"double glazing, inner pane      : " + str(double_glazing_inner_pane_c) + " C, the same air there is " + str(relative_humidity_at_the_double_glazed_pane_percent) + " percent, margin " + str(margin_at_the_double_glazed_pane_tenths_of_a_gram_per_m3) + " tenths" ^0
"" ^0

# ---- what the household verified ----

"the dry-room reasoning" ^0
"  hygrometer : accurate, " + str(room_relative_humidity_percent) + " percent" ^0
"  reading : comfortably dry" ^0
"  air : one body of air, well mixed" ^0
"  intent : is this room too damp" ^0
"  facts wrong : 0" ^0
"  verdict : THE ROOM IS DRY, THE GLASS MUST BE LEAKING" ^0
"" ^0
"  reading an accurate hygrometer is the part done right here," ^0
"  and it is why " + str(room_relative_humidity_percent) + " percent is exactly true of the air at " + str(room_air_c) + " C" ^0
"" ^0

# ---- what the same air is at the glass ----

"relative to what" ^0
"  what the hygrometer reports : water held as a share of what" ^0
"    air at ITS temperature could hold" ^0
"  what the air carries : " + str(water_in_the_room_air_tenths_of_a_gram_per_m3) + " tenths of a gram per m3, the same" ^0
"    everywhere in the room" ^0
"  what cold air can hold : less; at " + str(single_pane_surface_c) + " C only " + str(saturation_at_8_c_tenths_of_a_gram_per_m3) + " tenths" ^0
"  the layer on the glass : " + str(relative_humidity_at_the_pane_percent) + " percent, past saturation, and the" ^0
"    excess " + str(water_the_pane_air_cannot_hold_tenths_of_a_gram_per_m3) + " tenths runs down the pane" ^0
"  what the dew point names : the temperature below which this" ^0
"    air condenses, " + str(dew_point_of_the_room_air_c) + " C, and the pane is " + str(degrees_the_pane_sits_below_the_dew_point_k) + " K under it" ^0
"" ^0

# ---- what the household got ----

"the window" ^0
"  believed : a dry room and a leaking window" ^0
"  actual : the room's own water, condensed where the air meets" ^0
"    a surface " + str(degrees_the_pane_sits_below_the_dew_point_k) + " K below its dew point" ^0
"  is the hygrometer wrong : no; " + str(room_relative_humidity_percent) + " percent is right at " + str(room_air_c) + " C" ^0
"  is a dry reading a dry room : only at that temperature; the" ^0
"    same air is wet against anything colder than " + str(dew_point_of_the_room_air_c) + " C" ^0
"" ^0

# ---- null control ----

# The same air judged by its absolute water content against the coldest surface
# it touches, instead of by the hygrometer's relative reading.
60 => nc_humidity_read_at_the_hygrometer_percent
124 => nc_humidity_read_at_the_coldest_surface_percent
64 => nc_percentage_points_the_cold_surface_adds

"null control - read the humidity where the air is coldest" ^0
"  humidity, at the hygrometer : " + str(nc_humidity_read_at_the_hygrometer_percent) + " percent" ^0
"  humidity, at the coldest surface : " + str(nc_humidity_read_at_the_coldest_surface_percent) + " percent" ^0
"  percentage points the cold surface adds : " + str(nc_percentage_points_the_cold_surface_adds) ^0
"  no air and no water changed; the reading was taken relative" ^0
"  to the temperature where condensation decides" ^0
"" ^0

# ---- the rule ----

"what an accurate sixty-percent reading guarantees" ^0
"  the air at " + str(room_air_c) + " C holds sixty percent of its capacity : exactly" ^0
"  the room's surfaces stay dry : not addressed; capacity falls" ^0
"    with temperature, the same air is " + str(relative_humidity_at_the_pane_percent) + " percent at the " + str(single_pane_surface_c) + " C pane," ^0
"    and " + str(water_the_pane_air_cannot_hold_tenths_of_a_gram_per_m3) + " tenths of a gram per m3 have to come out there" ^0
"" ^0

"a percentage is a fraction of something, and this something changes with" ^0
"every degree; the room and the glass hold the same water and disagree about" ^0
"how full they are" ^0
"" ^0

"The hygrometer is right: " + str(room_relative_humidity_percent) + " percent at " + str(room_air_c) + " C, " + str(water_in_the_room_air_tenths_of_a_gram_per_m3) + " tenths of a gram per m3. But" ^0
"capacity falls with temperature, and at the " + str(single_pane_surface_c) + " C pane that same air is " + str(relative_humidity_at_the_pane_percent) + " percent," ^0
"" + str(degrees_the_pane_sits_below_the_dew_point_k) + " K past its dew point, so " + str(water_the_pane_air_cannot_hold_tenths_of_a_gram_per_m3) + " tenths of a gram per m3 run down the glass while the" ^0
"room reads dry, until the humidity is read at the coldest surface the air touches." ^0
```

## Python (deterministic transpilation)

```python
room_air_c = 20
room_relative_humidity_percent = 60
single_pane_surface_c = 8
double_glazing_inner_pane_c = 15
saturation_at_20_c_tenths_of_a_gram_per_m3 = 173
saturation_at_8_c_tenths_of_a_gram_per_m3 = 83
saturation_at_15_c_tenths_of_a_gram_per_m3 = 128
dew_point_of_the_room_air_c = 12
water_in_the_room_air_tenths_of_a_gram_per_m3 = int(saturation_at_20_c_tenths_of_a_gram_per_m3 * room_relative_humidity_percent / 100)
water_the_pane_air_cannot_hold_tenths_of_a_gram_per_m3 = water_in_the_room_air_tenths_of_a_gram_per_m3 - saturation_at_8_c_tenths_of_a_gram_per_m3
relative_humidity_at_the_pane_percent = int(water_in_the_room_air_tenths_of_a_gram_per_m3 * 100 / saturation_at_8_c_tenths_of_a_gram_per_m3)
margin_at_the_double_glazed_pane_tenths_of_a_gram_per_m3 = saturation_at_15_c_tenths_of_a_gram_per_m3 - water_in_the_room_air_tenths_of_a_gram_per_m3
relative_humidity_at_the_double_glazed_pane_percent = int(water_in_the_room_air_tenths_of_a_gram_per_m3 * 100 / saturation_at_15_c_tenths_of_a_gram_per_m3)
room_humidity_that_would_keep_the_single_pane_dry_percent = int(saturation_at_8_c_tenths_of_a_gram_per_m3 * 100 / saturation_at_20_c_tenths_of_a_gram_per_m3)
degrees_the_pane_sits_below_the_dew_point_k = dew_point_of_the_room_air_c - single_pane_surface_c
print("room air                        : " + str(room_air_c) + " C at " + str(room_relative_humidity_percent) + " percent, " + str(water_in_the_room_air_tenths_of_a_gram_per_m3) + " tenths of a gram per m3")
print("what 20 C air can hold          : " + str(saturation_at_20_c_tenths_of_a_gram_per_m3) + " tenths of a gram per m3")
print("what 8 C air can hold           : " + str(saturation_at_8_c_tenths_of_a_gram_per_m3) + " tenths of a gram per m3")
print("dew point of the room air       : " + str(dew_point_of_the_room_air_c) + " C")
print("")
print("single pane surface             : " + str(single_pane_surface_c) + " C, " + str(degrees_the_pane_sits_below_the_dew_point_k) + " K below the dew point")
print("the same air at the pane        : " + str(relative_humidity_at_the_pane_percent) + " percent, " + str(water_the_pane_air_cannot_hold_tenths_of_a_gram_per_m3) + " tenths of a gram per m3 must come out as water")
print("room humidity that keeps it dry : under " + str(room_humidity_that_would_keep_the_single_pane_dry_percent) + " percent")
print("")
print("double glazing, inner pane      : " + str(double_glazing_inner_pane_c) + " C, the same air there is " + str(relative_humidity_at_the_double_glazed_pane_percent) + " percent, margin " + str(margin_at_the_double_glazed_pane_tenths_of_a_gram_per_m3) + " tenths")
print("")
print("the dry-room reasoning")
print("  hygrometer : accurate, " + str(room_relative_humidity_percent) + " percent")
print("  reading : comfortably dry")
print("  air : one body of air, well mixed")
print("  intent : is this room too damp")
print("  facts wrong : 0")
print("  verdict : THE ROOM IS DRY, THE GLASS MUST BE LEAKING")
print("")
print("  reading an accurate hygrometer is the part done right here,")
print("  and it is why " + str(room_relative_humidity_percent) + " percent is exactly true of the air at " + str(room_air_c) + " C")
print("")
print("relative to what")
print("  what the hygrometer reports : water held as a share of what")
print("    air at ITS temperature could hold")
print("  what the air carries : " + str(water_in_the_room_air_tenths_of_a_gram_per_m3) + " tenths of a gram per m3, the same")
print("    everywhere in the room")
print("  what cold air can hold : less; at " + str(single_pane_surface_c) + " C only " + str(saturation_at_8_c_tenths_of_a_gram_per_m3) + " tenths")
print("  the layer on the glass : " + str(relative_humidity_at_the_pane_percent) + " percent, past saturation, and the")
print("    excess " + str(water_the_pane_air_cannot_hold_tenths_of_a_gram_per_m3) + " tenths runs down the pane")
print("  what the dew point names : the temperature below which this")
print("    air condenses, " + str(dew_point_of_the_room_air_c) + " C, and the pane is " + str(degrees_the_pane_sits_below_the_dew_point_k) + " K under it")
print("")
print("the window")
print("  believed : a dry room and a leaking window")
print("  actual : the room's own water, condensed where the air meets")
print("    a surface " + str(degrees_the_pane_sits_below_the_dew_point_k) + " K below its dew point")
print("  is the hygrometer wrong : no; " + str(room_relative_humidity_percent) + " percent is right at " + str(room_air_c) + " C")
print("  is a dry reading a dry room : only at that temperature; the")
print("    same air is wet against anything colder than " + str(dew_point_of_the_room_air_c) + " C")
print("")
nc_humidity_read_at_the_hygrometer_percent = 60
nc_humidity_read_at_the_coldest_surface_percent = 124
nc_percentage_points_the_cold_surface_adds = 64
print("null control - read the humidity where the air is coldest")
print("  humidity, at the hygrometer : " + str(nc_humidity_read_at_the_hygrometer_percent) + " percent")
print("  humidity, at the coldest surface : " + str(nc_humidity_read_at_the_coldest_surface_percent) + " percent")
print("  percentage points the cold surface adds : " + str(nc_percentage_points_the_cold_surface_adds))
print("  no air and no water changed; the reading was taken relative")
print("  to the temperature where condensation decides")
print("")
print("what an accurate sixty-percent reading guarantees")
print("  the air at " + str(room_air_c) + " C holds sixty percent of its capacity : exactly")
print("  the room's surfaces stay dry : not addressed; capacity falls")
print("    with temperature, the same air is " + str(relative_humidity_at_the_pane_percent) + " percent at the " + str(single_pane_surface_c) + " C pane,")
print("    and " + str(water_the_pane_air_cannot_hold_tenths_of_a_gram_per_m3) + " tenths of a gram per m3 have to come out there")
print("")
print("a percentage is a fraction of something, and this something changes with")
print("every degree; the room and the glass hold the same water and disagree about")
print("how full they are")
print("")
print("The hygrometer is right: " + str(room_relative_humidity_percent) + " percent at " + str(room_air_c) + " C, " + str(water_in_the_room_air_tenths_of_a_gram_per_m3) + " tenths of a gram per m3. But")
print("capacity falls with temperature, and at the " + str(single_pane_surface_c) + " C pane that same air is " + str(relative_humidity_at_the_pane_percent) + " percent,")
print("" + str(degrees_the_pane_sits_below_the_dew_point_k) + " K past its dew point, so " + str(water_the_pane_air_cannot_hold_tenths_of_a_gram_per_m3) + " tenths of a gram per m3 run down the glass while the")
print("room reads dry, until the humidity is read at the coldest surface the air touches.")
```

## stdout (executed)

```text
room air                        : 20 C at 60 percent, 103 tenths of a gram per m3
what 20 C air can hold          : 173 tenths of a gram per m3
what 8 C air can hold           : 83 tenths of a gram per m3
dew point of the room air       : 12 C

single pane surface             : 8 C, 4 K below the dew point
the same air at the pane        : 124 percent, 20 tenths of a gram per m3 must come out as water
room humidity that keeps it dry : under 47 percent

double glazing, inner pane      : 15 C, the same air there is 80 percent, margin 25 tenths

the dry-room reasoning
  hygrometer : accurate, 60 percent
  reading : comfortably dry
  air : one body of air, well mixed
  intent : is this room too damp
  facts wrong : 0
  verdict : THE ROOM IS DRY, THE GLASS MUST BE LEAKING

  reading an accurate hygrometer is the part done right here,
  and it is why 60 percent is exactly true of the air at 20 C

relative to what
  what the hygrometer reports : water held as a share of what
    air at ITS temperature could hold
  what the air carries : 103 tenths of a gram per m3, the same
    everywhere in the room
  what cold air can hold : less; at 8 C only 83 tenths
  the layer on the glass : 124 percent, past saturation, and the
    excess 20 tenths runs down the pane
  what the dew point names : the temperature below which this
    air condenses, 12 C, and the pane is 4 K under it

the window
  believed : a dry room and a leaking window
  actual : the room's own water, condensed where the air meets
    a surface 4 K below its dew point
  is the hygrometer wrong : no; 60 percent is right at 20 C
  is a dry reading a dry room : only at that temperature; the
    same air is wet against anything colder than 12 C

null control - read the humidity where the air is coldest
  humidity, at the hygrometer : 60 percent
  humidity, at the coldest surface : 124 percent
  percentage points the cold surface adds : 64
  no air and no water changed; the reading was taken relative
  to the temperature where condensation decides

what an accurate sixty-percent reading guarantees
  the air at 20 C holds sixty percent of its capacity : exactly
  the room's surfaces stay dry : not addressed; capacity falls
    with temperature, the same air is 124 percent at the 8 C pane,
    and 20 tenths of a gram per m3 have to come out there

a percentage is a fraction of something, and this something changes with
every degree; the room and the glass hold the same water and disagree about
how full they are

The hygrometer is right: 60 percent at 20 C, 103 tenths of a gram per m3. But
capacity falls with temperature, and at the 8 C pane that same air is 124 percent,
4 K past its dew point, so 20 tenths of a gram per m3 run down the glass while the
room reads dry, until the humidity is read at the coldest surface the air touches.
```

## Round-trip

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

## Trace event types

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