Case 966
The same spoon held twice the seasoning
the_same_spoon_held_twice_the_seasoning.eml - A recipe written for coarse flake salt calls for two teaspoons, a cook measures two level teaspoons of fine table salt with the same spoon, and the dish is twice as salty as intended. What a teaspoon of each holds 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 recipe written
# for coarse flake salt calls for two teaspoons, a cook measures two level
# teaspoons of fine table salt with the same spoon, and the dish is twice as
# salty as intended. What a teaspoon of each holds is computed below.
#
# The reasoning is careful. The spoon is a true teaspoon; both spoonfuls were
# level; two teaspoons is what the recipe says; salt is salt; and the intent
# was exactly 'the amount of salt the recipe intended'.
#
# A spoon measures volume, and how much salt fills a volume depends on the
# grain - fine grains pack tight and coarse flakes trap air - so a teaspoon of
# fine salt weighs six grams and a teaspoon of the flakes three, and the same
# two spoonfuls delivered twelve grams where six were meant, four and a half
# grams of sodium against a daily guide of two and three tenths.
3 => coarse_flake_salt_g_per_teaspoon
6 => fine_table_salt_g_per_teaspoon
2 => teaspoons_the_recipe_calls_for
393 => sodium_share_of_salt_per_mille
2300 => daily_sodium_guide_mg
coarse_flake_salt_g_per_teaspoon * teaspoons_the_recipe_calls_for => salt_the_recipe_intended_g
fine_table_salt_g_per_teaspoon * teaspoons_the_recipe_calls_for => salt_the_cook_added_g
int(salt_the_cook_added_g * 100 / salt_the_recipe_intended_g) => salt_added_as_a_share_of_intended_per_hundred
salt_the_cook_added_g - salt_the_recipe_intended_g => extra_salt_g
int(fine_table_salt_g_per_teaspoon / coarse_flake_salt_g_per_teaspoon) => fine_salt_packs_times_as_much_per_spoon
int(salt_the_recipe_intended_g * 1000 * sodium_share_of_salt_per_mille / 1000) => sodium_intended_mg
int(salt_the_cook_added_g * 1000 * sodium_share_of_salt_per_mille / 1000) => sodium_added_mg
int(sodium_added_mg * 100 / daily_sodium_guide_mg) => sodium_added_as_a_share_of_the_daily_guide_percent
int(salt_the_recipe_intended_g * 10 / fine_table_salt_g_per_teaspoon) => teaspoons_of_fine_salt_that_match_the_recipe_tenths
"recipe : " + str(teaspoons_the_recipe_calls_for) + " teaspoons of coarse flake salt, " + str(coarse_flake_salt_g_per_teaspoon) + " g each, " + str(salt_the_recipe_intended_g) + " g" ^0
"the cook : " + str(teaspoons_the_recipe_calls_for) + " teaspoons of fine table salt, " + str(fine_table_salt_g_per_teaspoon) + " g each, " + str(salt_the_cook_added_g) + " g" ^0
"salt added vs intended : " + str(salt_added_as_a_share_of_intended_per_hundred) + " per hundred, " + str(extra_salt_g) + " g extra" ^0
"fine salt per spoon : " + str(fine_salt_packs_times_as_much_per_spoon) + " times the flakes" ^0
"" ^0
"sodium intended : " + str(sodium_intended_mg) + " mg" ^0
"sodium added : " + str(sodium_added_mg) + " mg, " + str(sodium_added_as_a_share_of_the_daily_guide_percent) + " percent of the " + str(daily_sodium_guide_mg) + " mg daily guide" ^0
"fine salt that matches the recipe : " + str(teaspoons_of_fine_salt_that_match_the_recipe_tenths) + " tenths of a teaspoon" ^0
"" ^0
# ---- what the cook verified ----
"the salt-is-salt reasoning" ^0
" spoon : a true teaspoon" ^0
" measure : level, twice" ^0
" count : " + str(teaspoons_the_recipe_calls_for) + ", as written" ^0
" substance : salt, as written" ^0
" intent : the amount of salt the recipe intended" ^0
" facts wrong : 0" ^0
" verdict : TWO LEVEL TEASPOONS OF SALT" ^0
"" ^0
" levelling a true teaspoon twice is the part done right here," ^0
" and it is why the VOLUME of salt matches the recipe exactly" ^0
"" ^0
# ---- what a teaspoon of each holds ----
"volume is not mass" ^0
" what a spoon measures : space" ^0
" what the tongue and the body meet : grams of salt" ^0
" fine grains : pack close, " + str(fine_table_salt_g_per_teaspoon) + " g in the spoon" ^0
" coarse flakes : trap air between them, " + str(coarse_flake_salt_g_per_teaspoon) + " g in the same spoon" ^0
" the recipe's spoon : the author's flakes, " + str(salt_the_recipe_intended_g) + " g in two spoons" ^0
" the cook's spoon : " + str(salt_the_cook_added_g) + " g in the same two spoons, " + str(fine_salt_packs_times_as_much_per_spoon) + " times the salt" ^0
" what would have matched : " + str(teaspoons_of_fine_salt_that_match_the_recipe_tenths) + " tenths of a teaspoon of the fine," ^0
" or a scale reading " + str(salt_the_recipe_intended_g) + " g of either" ^0
"" ^0
# ---- what the cook got ----
"the dish" ^0
" believed : salted as the author salted it" ^0
" actual : " + str(salt_added_as_a_share_of_intended_per_hundred) + " per hundred of the author's salt, " + str(sodium_added_mg) + " mg of sodium" ^0
" was the spoon wrong : no; it held exactly a teaspoon" ^0
" is a teaspoon of salt an amount of salt : no; it is an amount" ^0
" of space, and the grain decides how much salt fits in it" ^0
"" ^0
# ---- null control ----
# The same recipe measured by weight instead of by spoon.
12 => nc_salt_measured_by_spoon_g
6 => nc_salt_measured_by_weight_g
6 => nc_grams_the_scale_removes
"null control - weigh the salt" ^0
" salt, measured by spoon : " + str(nc_salt_measured_by_spoon_g) + " g" ^0
" salt, measured by weight : " + str(nc_salt_measured_by_weight_g) + " g" ^0
" grams the scale removes : " + str(nc_grams_the_scale_removes) ^0
" no recipe and no salt changed; the quantity the recipe" ^0
" meant was measured in the unit that does not depend on grain" ^0
"" ^0
# ---- the rule ----
"what two level teaspoons of salt guarantee" ^0
" the volume the recipe named : exactly" ^0
" the mass the recipe meant : not addressed; the author's" ^0
" flakes fill a spoon at " + str(coarse_flake_salt_g_per_teaspoon) + " g and the cook's grains at " + str(fine_table_salt_g_per_teaspoon) + ", so the" ^0
" same two spoons carry " + str(salt_the_cook_added_g) + " g for " + str(salt_the_recipe_intended_g) + " intended, " + str(salt_added_as_a_share_of_intended_per_hundred) + " per hundred" ^0
"" ^0
"a spoon is honest about space and silent about what fills it; the recipe" ^0
"handed down a volume and meant a weight, and the grain in the cook's box" ^0
"chose which one arrived" ^0
"" ^0
"Two level teaspoons - the volume is exact. But the recipe's flakes fill a" ^0
"spoon at " + str(coarse_flake_salt_g_per_teaspoon) + " g and table salt at " + str(fine_table_salt_g_per_teaspoon) + ", so the same spoons delivered " + str(salt_the_cook_added_g) + " g where " + str(salt_the_recipe_intended_g) + " were" ^0
"meant, " + str(sodium_added_mg) + " mg of sodium against " + str(sodium_intended_mg) + ", until the salt is measured in grams and the" ^0
"spoon is left to measure space." ^0Python (deterministic transpilation)
pythoncoarse_flake_salt_g_per_teaspoon = 3
fine_table_salt_g_per_teaspoon = 6
teaspoons_the_recipe_calls_for = 2
sodium_share_of_salt_per_mille = 393
daily_sodium_guide_mg = 2300
salt_the_recipe_intended_g = coarse_flake_salt_g_per_teaspoon * teaspoons_the_recipe_calls_for
salt_the_cook_added_g = fine_table_salt_g_per_teaspoon * teaspoons_the_recipe_calls_for
salt_added_as_a_share_of_intended_per_hundred = int(salt_the_cook_added_g * 100 / salt_the_recipe_intended_g)
extra_salt_g = salt_the_cook_added_g - salt_the_recipe_intended_g
fine_salt_packs_times_as_much_per_spoon = int(fine_table_salt_g_per_teaspoon / coarse_flake_salt_g_per_teaspoon)
sodium_intended_mg = int(salt_the_recipe_intended_g * 1000 * sodium_share_of_salt_per_mille / 1000)
sodium_added_mg = int(salt_the_cook_added_g * 1000 * sodium_share_of_salt_per_mille / 1000)
sodium_added_as_a_share_of_the_daily_guide_percent = int(sodium_added_mg * 100 / daily_sodium_guide_mg)
teaspoons_of_fine_salt_that_match_the_recipe_tenths = int(salt_the_recipe_intended_g * 10 / fine_table_salt_g_per_teaspoon)
print("recipe : " + str(teaspoons_the_recipe_calls_for) + " teaspoons of coarse flake salt, " + str(coarse_flake_salt_g_per_teaspoon) + " g each, " + str(salt_the_recipe_intended_g) + " g")
print("the cook : " + str(teaspoons_the_recipe_calls_for) + " teaspoons of fine table salt, " + str(fine_table_salt_g_per_teaspoon) + " g each, " + str(salt_the_cook_added_g) + " g")
print("salt added vs intended : " + str(salt_added_as_a_share_of_intended_per_hundred) + " per hundred, " + str(extra_salt_g) + " g extra")
print("fine salt per spoon : " + str(fine_salt_packs_times_as_much_per_spoon) + " times the flakes")
print("")
print("sodium intended : " + str(sodium_intended_mg) + " mg")
print("sodium added : " + str(sodium_added_mg) + " mg, " + str(sodium_added_as_a_share_of_the_daily_guide_percent) + " percent of the " + str(daily_sodium_guide_mg) + " mg daily guide")
print("fine salt that matches the recipe : " + str(teaspoons_of_fine_salt_that_match_the_recipe_tenths) + " tenths of a teaspoon")
print("")
print("the salt-is-salt reasoning")
print(" spoon : a true teaspoon")
print(" measure : level, twice")
print(" count : " + str(teaspoons_the_recipe_calls_for) + ", as written")
print(" substance : salt, as written")
print(" intent : the amount of salt the recipe intended")
print(" facts wrong : 0")
print(" verdict : TWO LEVEL TEASPOONS OF SALT")
print("")
print(" levelling a true teaspoon twice is the part done right here,")
print(" and it is why the VOLUME of salt matches the recipe exactly")
print("")
print("volume is not mass")
print(" what a spoon measures : space")
print(" what the tongue and the body meet : grams of salt")
print(" fine grains : pack close, " + str(fine_table_salt_g_per_teaspoon) + " g in the spoon")
print(" coarse flakes : trap air between them, " + str(coarse_flake_salt_g_per_teaspoon) + " g in the same spoon")
print(" the recipe's spoon : the author's flakes, " + str(salt_the_recipe_intended_g) + " g in two spoons")
print(" the cook's spoon : " + str(salt_the_cook_added_g) + " g in the same two spoons, " + str(fine_salt_packs_times_as_much_per_spoon) + " times the salt")
print(" what would have matched : " + str(teaspoons_of_fine_salt_that_match_the_recipe_tenths) + " tenths of a teaspoon of the fine,")
print(" or a scale reading " + str(salt_the_recipe_intended_g) + " g of either")
print("")
print("the dish")
print(" believed : salted as the author salted it")
print(" actual : " + str(salt_added_as_a_share_of_intended_per_hundred) + " per hundred of the author's salt, " + str(sodium_added_mg) + " mg of sodium")
print(" was the spoon wrong : no; it held exactly a teaspoon")
print(" is a teaspoon of salt an amount of salt : no; it is an amount")
print(" of space, and the grain decides how much salt fits in it")
print("")
nc_salt_measured_by_spoon_g = 12
nc_salt_measured_by_weight_g = 6
nc_grams_the_scale_removes = 6
print("null control - weigh the salt")
print(" salt, measured by spoon : " + str(nc_salt_measured_by_spoon_g) + " g")
print(" salt, measured by weight : " + str(nc_salt_measured_by_weight_g) + " g")
print(" grams the scale removes : " + str(nc_grams_the_scale_removes))
print(" no recipe and no salt changed; the quantity the recipe")
print(" meant was measured in the unit that does not depend on grain")
print("")
print("what two level teaspoons of salt guarantee")
print(" the volume the recipe named : exactly")
print(" the mass the recipe meant : not addressed; the author's")
print(" flakes fill a spoon at " + str(coarse_flake_salt_g_per_teaspoon) + " g and the cook's grains at " + str(fine_table_salt_g_per_teaspoon) + ", so the")
print(" same two spoons carry " + str(salt_the_cook_added_g) + " g for " + str(salt_the_recipe_intended_g) + " intended, " + str(salt_added_as_a_share_of_intended_per_hundred) + " per hundred")
print("")
print("a spoon is honest about space and silent about what fills it; the recipe")
print("handed down a volume and meant a weight, and the grain in the cook's box")
print("chose which one arrived")
print("")
print("Two level teaspoons - the volume is exact. But the recipe's flakes fill a")
print("spoon at " + str(coarse_flake_salt_g_per_teaspoon) + " g and table salt at " + str(fine_table_salt_g_per_teaspoon) + ", so the same spoons delivered " + str(salt_the_cook_added_g) + " g where " + str(salt_the_recipe_intended_g) + " were")
print("meant, " + str(sodium_added_mg) + " mg of sodium against " + str(sodium_intended_mg) + ", until the salt is measured in grams and the")
print("spoon is left to measure space.")stdout (executed)
textrecipe : 2 teaspoons of coarse flake salt, 3 g each, 6 g
the cook : 2 teaspoons of fine table salt, 6 g each, 12 g
salt added vs intended : 200 per hundred, 6 g extra
fine salt per spoon : 2 times the flakes
sodium intended : 2358 mg
sodium added : 4716 mg, 205 percent of the 2300 mg daily guide
fine salt that matches the recipe : 10 tenths of a teaspoon
the salt-is-salt reasoning
spoon : a true teaspoon
measure : level, twice
count : 2, as written
substance : salt, as written
intent : the amount of salt the recipe intended
facts wrong : 0
verdict : TWO LEVEL TEASPOONS OF SALT
levelling a true teaspoon twice is the part done right here,
and it is why the VOLUME of salt matches the recipe exactly
volume is not mass
what a spoon measures : space
what the tongue and the body meet : grams of salt
fine grains : pack close, 6 g in the spoon
coarse flakes : trap air between them, 3 g in the same spoon
the recipe's spoon : the author's flakes, 6 g in two spoons
the cook's spoon : 12 g in the same two spoons, 2 times the salt
what would have matched : 10 tenths of a teaspoon of the fine,
or a scale reading 6 g of either
the dish
believed : salted as the author salted it
actual : 200 per hundred of the author's salt, 4716 mg of sodium
was the spoon wrong : no; it held exactly a teaspoon
is a teaspoon of salt an amount of salt : no; it is an amount
of space, and the grain decides how much salt fits in it
null control - weigh the salt
salt, measured by spoon : 12 g
salt, measured by weight : 6 g
grams the scale removes : 6
no recipe and no salt changed; the quantity the recipe
meant was measured in the unit that does not depend on grain
what two level teaspoons of salt guarantee
the volume the recipe named : exactly
the mass the recipe meant : not addressed; the author's
flakes fill a spoon at 3 g and the cook's grains at 6, so the
same two spoons carry 12 g for 6 intended, 200 per hundred
a spoon is honest about space and silent about what fills it; the recipe
handed down a volume and meant a weight, and the grain in the cook's box
chose which one arrived
Two level teaspoons - the volume is exact. But the recipe's flakes fill a
spoon at 3 g and table salt at 6, so the same spoons delivered 12 g where 6 were
meant, 4716 mg of sodium against 2358, until the salt is measured in grams and the
spoon is left to measure space.Trace event types
eml:run:starteml:assigneml:outputeml:run:done