<!-- canonical: efficientnewlanguage.org/ai/examples/970-the-thermometer-said-rare-and-the-plate-said-medium | ai_layer_version: 0.1.0 | updated: 2026-09-22 -->

# Example 970 — The thermometer said rare and the plate said medium

`the_thermometer_said_rare_and_the_plate_said_medium.eml` - A cook wants a large roast at fifty-seven degrees in the centre, medium-rare, probes it with an accurate thermometer, pulls it from the oven the moment the centre reads fifty-seven, rests it, and carves it at sixty-four. Where the extra seven degrees came from after the oven was gone is computed below.

## EML

```eml
# Self-authored for the EML case corpus (no external origin). A cook wants a
# large roast at fifty-seven degrees in the centre, medium-rare, probes it with
# an accurate thermometer, pulls it from the oven the moment the centre reads
# fifty-seven, rests it, and carves it at sixty-four. Where the extra seven
# degrees came from after the oven was gone is computed below.
#
# The reasoning is careful. The thermometer is accurate; it was in the centre;
# fifty-seven is the right target; the roast was out of the oven; and the
# intent was exactly 'stop cooking at fifty-seven'.
#
# The probe reads the coldest point of a joint whose outer layers are far
# hotter, and heat keeps flowing inward from those layers after the oven is
# gone - a large roast climbs another seven degrees or so while it rests - so
# the centre that read fifty-seven finished at sixty-four, and the pull
# temperature that lands on fifty-seven is fifty.

57 => target_centre_c
57 => centre_when_pulled_c
90 => surface_when_pulled_c
7 => carryover_rise_for_a_large_roast_k
60 => medium_begins_at_c

centre_when_pulled_c + carryover_rise_for_a_large_roast_k => centre_after_resting_c
centre_after_resting_c - target_centre_c => degrees_past_the_target_k
centre_after_resting_c - medium_begins_at_c => degrees_into_medium_k
target_centre_c - carryover_rise_for_a_large_roast_k => pull_temperature_that_lands_on_target_c
surface_when_pulled_c - centre_when_pulled_c => gradient_from_surface_to_centre_when_pulled_k
int((surface_when_pulled_c + centre_when_pulled_c) / 2) => rough_mean_temperature_of_the_joint_when_pulled_c
rough_mean_temperature_of_the_joint_when_pulled_c - centre_when_pulled_c => how_far_the_centre_sat_below_the_joints_mean_k

"target                          : " + str(target_centre_c) + " C at the centre, medium-rare" ^0
"pulled when the probe read      : " + str(centre_when_pulled_c) + " C at the centre, " + str(surface_when_pulled_c) + " C at the surface" ^0
"gradient in the joint           : " + str(gradient_from_surface_to_centre_when_pulled_k) + " K from surface to centre" ^0
"rough mean of the joint         : " + str(rough_mean_temperature_of_the_joint_when_pulled_c) + " C, " + str(how_far_the_centre_sat_below_the_joints_mean_k) + " K above the centre" ^0
"" ^0
"carryover while resting         : about " + str(carryover_rise_for_a_large_roast_k) + " K for a joint this size" ^0
"centre after resting            : " + str(centre_after_resting_c) + " C, " + str(degrees_past_the_target_k) + " K past the target, " + str(degrees_into_medium_k) + " K into medium" ^0
"pull temperature for the target : " + str(pull_temperature_that_lands_on_target_c) + " C" ^0
"" ^0

# ---- what the cook verified ----

"the pull-at-target reasoning" ^0
"  thermometer : accurate, in the centre" ^0
"  target : " + str(target_centre_c) + " C, right for medium-rare" ^0
"  action : out of the oven the moment it read " + str(centre_when_pulled_c) ^0
"  intent : stop cooking at " + str(target_centre_c) ^0
"  facts wrong : 0" ^0
"  verdict : OUT OF THE OVEN IS OUT OF THE HEAT" ^0
"" ^0
"  probing the centre with an accurate thermometer is the part" ^0
"  done right here, and it is why " + str(centre_when_pulled_c) + " C really was the coldest" ^0
"  point of the joint at that moment" ^0
"" ^0

# ---- where the extra degrees came from ----

"the joint is its own oven" ^0
"  what the probe reads : the centre, the coldest point" ^0
"  what surrounds it : layers at up to " + str(surface_when_pulled_c) + " C, a " + str(gradient_from_surface_to_centre_when_pulled_k) + " K slope inward" ^0
"  what heat does on a slope : flows down it, oven or no oven" ^0
"  what the rest is : the outer layers giving their surplus to" ^0
"    the centre until the slope flattens, about " + str(carryover_rise_for_a_large_roast_k) + " K here" ^0
"  what the reading meant : not 'done' but 'done in " + str(carryover_rise_for_a_large_roast_k) + " K'" ^0
"  what lands on " + str(target_centre_c) + " : pulling at " + str(pull_temperature_that_lands_on_target_c) + " and letting the joint finish itself" ^0
"" ^0

# ---- what the cook got ----

"the plate" ^0
"  believed : medium-rare, " + str(target_centre_c) + " C" ^0
"  actual : " + str(centre_after_resting_c) + " C, medium, " + str(degrees_past_the_target_k) + " K over" ^0
"  was the thermometer wrong : no; the centre was " + str(centre_when_pulled_c) + " when it said so" ^0
"  was the oven the only heat : no; the roast's own outer layers" ^0
"    held enough to carry the centre another " + str(carryover_rise_for_a_large_roast_k) + " K" ^0
"" ^0

# ---- null control ----

# The same roast pulled at the temperature that rests up to the target instead
# of at the target itself.
64 => nc_centre_at_carving_pulled_at_the_target_c
57 => nc_centre_at_carving_pulled_early_c
7 => nc_degrees_the_early_pull_removes_k

"null control - pull early by the carryover" ^0
"  centre at carving, pulled at the target : " + str(nc_centre_at_carving_pulled_at_the_target_c) + " C" ^0
"  centre at carving, pulled early : " + str(nc_centre_at_carving_pulled_early_c) + " C" ^0
"  degrees the early pull removes : " + str(nc_degrees_the_early_pull_removes_k) ^0
"  no thermometer and no oven changed; the reading was treated" ^0
"  as the start of the rest, not the end of the cooking" ^0
"" ^0

# ---- the rule ----

"what an accurate centre reading of " + str(target_centre_c) + " guarantees" ^0
"  the centre was " + str(centre_when_pulled_c) + " C at that moment : exactly" ^0
"  the centre stays there once the oven is gone : not addressed;" ^0
"    the outer layers are " + str(gradient_from_surface_to_centre_when_pulled_k) + " K hotter and keep feeding the centre," ^0
"    which climbs about " + str(carryover_rise_for_a_large_roast_k) + " K to " + str(centre_after_resting_c) + " while it rests" ^0
"" ^0

"a thermometer reports a point and a roast is a slope; take it out when the" ^0
"point is right and the slope will finish the cooking for you, in the" ^0
"direction you did not want" ^0
"" ^0

"The probe was right: " + str(centre_when_pulled_c) + " C at the centre. But the surface was " + str(surface_when_pulled_c) + ", and heat" ^0
"runs down that slope with or without an oven, so the centre rested up to " + str(centre_after_resting_c) + "," ^0
"" + str(degrees_past_the_target_k) + " K past medium-rare, where pulling at " + str(pull_temperature_that_lands_on_target_c) + " would have finished at " + str(target_centre_c) + ", until the" ^0
"reading is treated as the start of the rest rather than the end of the cooking." ^0
```

## Python (deterministic transpilation)

```python
target_centre_c = 57
centre_when_pulled_c = 57
surface_when_pulled_c = 90
carryover_rise_for_a_large_roast_k = 7
medium_begins_at_c = 60
centre_after_resting_c = centre_when_pulled_c + carryover_rise_for_a_large_roast_k
degrees_past_the_target_k = centre_after_resting_c - target_centre_c
degrees_into_medium_k = centre_after_resting_c - medium_begins_at_c
pull_temperature_that_lands_on_target_c = target_centre_c - carryover_rise_for_a_large_roast_k
gradient_from_surface_to_centre_when_pulled_k = surface_when_pulled_c - centre_when_pulled_c
rough_mean_temperature_of_the_joint_when_pulled_c = int((surface_when_pulled_c + centre_when_pulled_c) / 2)
how_far_the_centre_sat_below_the_joints_mean_k = rough_mean_temperature_of_the_joint_when_pulled_c - centre_when_pulled_c
print("target                          : " + str(target_centre_c) + " C at the centre, medium-rare")
print("pulled when the probe read      : " + str(centre_when_pulled_c) + " C at the centre, " + str(surface_when_pulled_c) + " C at the surface")
print("gradient in the joint           : " + str(gradient_from_surface_to_centre_when_pulled_k) + " K from surface to centre")
print("rough mean of the joint         : " + str(rough_mean_temperature_of_the_joint_when_pulled_c) + " C, " + str(how_far_the_centre_sat_below_the_joints_mean_k) + " K above the centre")
print("")
print("carryover while resting         : about " + str(carryover_rise_for_a_large_roast_k) + " K for a joint this size")
print("centre after resting            : " + str(centre_after_resting_c) + " C, " + str(degrees_past_the_target_k) + " K past the target, " + str(degrees_into_medium_k) + " K into medium")
print("pull temperature for the target : " + str(pull_temperature_that_lands_on_target_c) + " C")
print("")
print("the pull-at-target reasoning")
print("  thermometer : accurate, in the centre")
print("  target : " + str(target_centre_c) + " C, right for medium-rare")
print("  action : out of the oven the moment it read " + str(centre_when_pulled_c))
print("  intent : stop cooking at " + str(target_centre_c))
print("  facts wrong : 0")
print("  verdict : OUT OF THE OVEN IS OUT OF THE HEAT")
print("")
print("  probing the centre with an accurate thermometer is the part")
print("  done right here, and it is why " + str(centre_when_pulled_c) + " C really was the coldest")
print("  point of the joint at that moment")
print("")
print("the joint is its own oven")
print("  what the probe reads : the centre, the coldest point")
print("  what surrounds it : layers at up to " + str(surface_when_pulled_c) + " C, a " + str(gradient_from_surface_to_centre_when_pulled_k) + " K slope inward")
print("  what heat does on a slope : flows down it, oven or no oven")
print("  what the rest is : the outer layers giving their surplus to")
print("    the centre until the slope flattens, about " + str(carryover_rise_for_a_large_roast_k) + " K here")
print("  what the reading meant : not 'done' but 'done in " + str(carryover_rise_for_a_large_roast_k) + " K'")
print("  what lands on " + str(target_centre_c) + " : pulling at " + str(pull_temperature_that_lands_on_target_c) + " and letting the joint finish itself")
print("")
print("the plate")
print("  believed : medium-rare, " + str(target_centre_c) + " C")
print("  actual : " + str(centre_after_resting_c) + " C, medium, " + str(degrees_past_the_target_k) + " K over")
print("  was the thermometer wrong : no; the centre was " + str(centre_when_pulled_c) + " when it said so")
print("  was the oven the only heat : no; the roast's own outer layers")
print("    held enough to carry the centre another " + str(carryover_rise_for_a_large_roast_k) + " K")
print("")
nc_centre_at_carving_pulled_at_the_target_c = 64
nc_centre_at_carving_pulled_early_c = 57
nc_degrees_the_early_pull_removes_k = 7
print("null control - pull early by the carryover")
print("  centre at carving, pulled at the target : " + str(nc_centre_at_carving_pulled_at_the_target_c) + " C")
print("  centre at carving, pulled early : " + str(nc_centre_at_carving_pulled_early_c) + " C")
print("  degrees the early pull removes : " + str(nc_degrees_the_early_pull_removes_k))
print("  no thermometer and no oven changed; the reading was treated")
print("  as the start of the rest, not the end of the cooking")
print("")
print("what an accurate centre reading of " + str(target_centre_c) + " guarantees")
print("  the centre was " + str(centre_when_pulled_c) + " C at that moment : exactly")
print("  the centre stays there once the oven is gone : not addressed;")
print("    the outer layers are " + str(gradient_from_surface_to_centre_when_pulled_k) + " K hotter and keep feeding the centre,")
print("    which climbs about " + str(carryover_rise_for_a_large_roast_k) + " K to " + str(centre_after_resting_c) + " while it rests")
print("")
print("a thermometer reports a point and a roast is a slope; take it out when the")
print("point is right and the slope will finish the cooking for you, in the")
print("direction you did not want")
print("")
print("The probe was right: " + str(centre_when_pulled_c) + " C at the centre. But the surface was " + str(surface_when_pulled_c) + ", and heat")
print("runs down that slope with or without an oven, so the centre rested up to " + str(centre_after_resting_c) + ",")
print("" + str(degrees_past_the_target_k) + " K past medium-rare, where pulling at " + str(pull_temperature_that_lands_on_target_c) + " would have finished at " + str(target_centre_c) + ", until the")
print("reading is treated as the start of the rest rather than the end of the cooking.")
```

## stdout (executed)

```text
target                          : 57 C at the centre, medium-rare
pulled when the probe read      : 57 C at the centre, 90 C at the surface
gradient in the joint           : 33 K from surface to centre
rough mean of the joint         : 73 C, 16 K above the centre

carryover while resting         : about 7 K for a joint this size
centre after resting            : 64 C, 7 K past the target, 4 K into medium
pull temperature for the target : 50 C

the pull-at-target reasoning
  thermometer : accurate, in the centre
  target : 57 C, right for medium-rare
  action : out of the oven the moment it read 57
  intent : stop cooking at 57
  facts wrong : 0
  verdict : OUT OF THE OVEN IS OUT OF THE HEAT

  probing the centre with an accurate thermometer is the part
  done right here, and it is why 57 C really was the coldest
  point of the joint at that moment

the joint is its own oven
  what the probe reads : the centre, the coldest point
  what surrounds it : layers at up to 90 C, a 33 K slope inward
  what heat does on a slope : flows down it, oven or no oven
  what the rest is : the outer layers giving their surplus to
    the centre until the slope flattens, about 7 K here
  what the reading meant : not 'done' but 'done in 7 K'
  what lands on 57 : pulling at 50 and letting the joint finish itself

the plate
  believed : medium-rare, 57 C
  actual : 64 C, medium, 7 K over
  was the thermometer wrong : no; the centre was 57 when it said so
  was the oven the only heat : no; the roast's own outer layers
    held enough to carry the centre another 7 K

null control - pull early by the carryover
  centre at carving, pulled at the target : 64 C
  centre at carving, pulled early : 57 C
  degrees the early pull removes : 7
  no thermometer and no oven changed; the reading was treated
  as the start of the rest, not the end of the cooking

what an accurate centre reading of 57 guarantees
  the centre was 57 C at that moment : exactly
  the centre stays there once the oven is gone : not addressed;
    the outer layers are 33 K hotter and keep feeding the centre,
    which climbs about 7 K to 64 while it rests

a thermometer reports a point and a roast is a slope; take it out when the
point is right and the slope will finish the cooking for you, in the
direction you did not want

The probe was right: 57 C at the centre. But the surface was 90, and heat
runs down that slope with or without an oven, so the centre rested up to 64,
7 K past medium-rare, where pulling at 50 would have finished at 57, until the
reading is treated as the start of the rest rather than the end of the cooking.
```

## Round-trip

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

## Trace event types

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