Case 901
The deaths were divided by todays cases
the_deaths_were_divided_by_todays_cases.eml - A dashboard reports the fatality rate as today's deaths divided by today's cases, both counts are exact, and during a fast-growing outbreak the rate reads a reassuring half a percent. Which cases today's deaths came from is computed below.
ok: true — round-trip fixpoint reached (python1 == python2)updated 2026-09-18
EML
eml# Self-authored for the EML case corpus (no external origin). A dashboard
# reports the fatality rate as today's deaths divided by today's cases, both
# counts are exact, and during a fast-growing outbreak the rate reads a
# reassuring half a percent. Which cases today's deaths came from is computed
# below.
#
# The rate is careful. Both counts are real and current; the division is exact;
# it is recomputed every day from fresh data; and the intent is exactly 'what
# share of cases die'.
#
# A death today follows a case from two weeks ago, and two weeks ago there were
# a quarter as many cases, so dividing today's deaths by today's cases divides
# by a denominator four times too large.
8000 => cases_today
2000 => cases_two_weeks_ago
40 => deaths_today
2 => true_fatality_percent
int(deaths_today * 10000 / cases_today) => rate_on_todays_cases_per_myriad
int(deaths_today * 10000 / cases_two_weeks_ago) => rate_on_the_cases_that_died_per_myriad
int(cases_today / cases_two_weeks_ago) => growth_over_the_lag
int(rate_on_the_cases_that_died_per_myriad / rate_on_todays_cases_per_myriad) => understatement_factor
"cases today : " + str(cases_today) ^0
"cases two weeks ago : " + str(cases_two_weeks_ago) ^0
"deaths today : " + str(deaths_today) ^0
"growth over the two-week lag : " + str(growth_over_the_lag) + " times" ^0
"" ^0
"rate, deaths over today's cases : " + str(rate_on_todays_cases_per_myriad) + " per ten thousand" ^0
"rate, deaths over the cases they came from : " + str(rate_on_the_cases_that_died_per_myriad) + " per ten thousand" ^0
"true fatality : " + str(true_fatality_percent) + " percent" ^0
"understated by : a factor of " + str(understatement_factor) ^0
"" ^0
# ---- what the rate verified ----
"the dashboard rate" ^0
" counts : real and current, both" ^0
" division : exact" ^0
" refresh : every day, fresh data" ^0
" intent : what share of cases die" ^0
" stale numbers used : 0" ^0
" verdict : HALF A PERCENT OF CASES DIE" ^0
"" ^0
" dividing exact current deaths by exact current cases is" ^0
" the part done right here, and it is why the number is" ^0
" precisely today's deaths per today's case" ^0
"" ^0
# ---- which cases the deaths came from ----
"the lag between the numerator and the denominator" ^0
" a death today : follows a case from about two weeks ago" ^0
" cases two weeks ago : " + str(cases_two_weeks_ago) ^0
" cases today : " + str(cases_today) + ", " + str(growth_over_the_lag) + " times more" ^0
" so today's deaths over today's cases : divides the deaths" ^0
" of " + str(cases_two_weeks_ago) + " cases by " + str(cases_today) ^0
" during growth : the denominator always outruns the" ^0
" numerator by the growth over the lag" ^0
"" ^0
# ---- what the public got ----
"the reassurance" ^0
" fatality shown : " + str(rate_on_todays_cases_per_myriad) + " per ten thousand" ^0
" fatality of the cases that actually died : " + str(rate_on_the_cases_that_died_per_myriad) + " per ten thousand" ^0
" is either count wrong : no" ^0
" are the two counts about the same people : no; the deaths" ^0
" are two weeks behind the cases" ^0
" and when growth stops : the rate will appear to quadruple" ^0
" with no change in the disease" ^0
"" ^0
# ---- null control ----
# The same rate computed with deaths divided by the cases from the lag ago (or
# by cases whose outcome is known), aligning numerator and denominator.
50 => nc_rate_on_todays_cases_per_myriad
200 => nc_rate_on_lagged_cases_per_myriad
150 => nc_per_myriad_the_alignment_recovers
"null control - divide by the cases the deaths came from" ^0
" rate on today's cases : " + str(nc_rate_on_todays_cases_per_myriad) + " per ten thousand" ^0
" rate on lagged cases : " + str(nc_rate_on_lagged_cases_per_myriad) + " per ten thousand" ^0
" per ten thousand the alignment recovers : " + str(nc_per_myriad_the_alignment_recovers) ^0
" no death and no case changed; the numerator and the" ^0
" denominator stopped being two weeks apart" ^0
"" ^0
# ---- the rule ----
"what a deaths-over-cases-today rate guarantees" ^0
" the ratio of today's two counts is exact : exactly, real" ^0
" counts, exact division" ^0
" the ratio is the share of cases that die : not addressed;" ^0
" deaths lag cases by two weeks and cases grew " + str(growth_over_the_lag) + " times over" ^0
" that lag, so " + str(rate_on_the_cases_that_died_per_myriad) + " per ten thousand reads as " + str(rate_on_todays_cases_per_myriad) ^0
"" ^0
"a ratio is a claim that its two numbers are about the same thing; when one" ^0
"lags the other in a quantity that is growing, the fresh denominator is always" ^0
"larger than the one the numerator belongs to, and the rate is diluted by" ^0
"exactly the growth" ^0
"" ^0
"It divides exact current deaths by exact current cases - " + str(rate_on_todays_cases_per_myriad) + " per ten thousand" ^0
"is exactly today over today. But the deaths follow cases from two weeks ago," ^0
"when there were " + str(growth_over_the_lag) + " times fewer, so the fatality of the cases that died is " + str(rate_on_the_cases_that_died_per_myriad) + "," ^0
"understated " + str(understatement_factor) + "-fold, until the numerator and denominator are aligned." ^0Python (deterministic transpilation)
pythoncases_today = 8000
cases_two_weeks_ago = 2000
deaths_today = 40
true_fatality_percent = 2
rate_on_todays_cases_per_myriad = int(deaths_today * 10000 / cases_today)
rate_on_the_cases_that_died_per_myriad = int(deaths_today * 10000 / cases_two_weeks_ago)
growth_over_the_lag = int(cases_today / cases_two_weeks_ago)
understatement_factor = int(rate_on_the_cases_that_died_per_myriad / rate_on_todays_cases_per_myriad)
print("cases today : " + str(cases_today))
print("cases two weeks ago : " + str(cases_two_weeks_ago))
print("deaths today : " + str(deaths_today))
print("growth over the two-week lag : " + str(growth_over_the_lag) + " times")
print("")
print("rate, deaths over today's cases : " + str(rate_on_todays_cases_per_myriad) + " per ten thousand")
print("rate, deaths over the cases they came from : " + str(rate_on_the_cases_that_died_per_myriad) + " per ten thousand")
print("true fatality : " + str(true_fatality_percent) + " percent")
print("understated by : a factor of " + str(understatement_factor))
print("")
print("the dashboard rate")
print(" counts : real and current, both")
print(" division : exact")
print(" refresh : every day, fresh data")
print(" intent : what share of cases die")
print(" stale numbers used : 0")
print(" verdict : HALF A PERCENT OF CASES DIE")
print("")
print(" dividing exact current deaths by exact current cases is")
print(" the part done right here, and it is why the number is")
print(" precisely today's deaths per today's case")
print("")
print("the lag between the numerator and the denominator")
print(" a death today : follows a case from about two weeks ago")
print(" cases two weeks ago : " + str(cases_two_weeks_ago))
print(" cases today : " + str(cases_today) + ", " + str(growth_over_the_lag) + " times more")
print(" so today's deaths over today's cases : divides the deaths")
print(" of " + str(cases_two_weeks_ago) + " cases by " + str(cases_today))
print(" during growth : the denominator always outruns the")
print(" numerator by the growth over the lag")
print("")
print("the reassurance")
print(" fatality shown : " + str(rate_on_todays_cases_per_myriad) + " per ten thousand")
print(" fatality of the cases that actually died : " + str(rate_on_the_cases_that_died_per_myriad) + " per ten thousand")
print(" is either count wrong : no")
print(" are the two counts about the same people : no; the deaths")
print(" are two weeks behind the cases")
print(" and when growth stops : the rate will appear to quadruple")
print(" with no change in the disease")
print("")
nc_rate_on_todays_cases_per_myriad = 50
nc_rate_on_lagged_cases_per_myriad = 200
nc_per_myriad_the_alignment_recovers = 150
print("null control - divide by the cases the deaths came from")
print(" rate on today's cases : " + str(nc_rate_on_todays_cases_per_myriad) + " per ten thousand")
print(" rate on lagged cases : " + str(nc_rate_on_lagged_cases_per_myriad) + " per ten thousand")
print(" per ten thousand the alignment recovers : " + str(nc_per_myriad_the_alignment_recovers))
print(" no death and no case changed; the numerator and the")
print(" denominator stopped being two weeks apart")
print("")
print("what a deaths-over-cases-today rate guarantees")
print(" the ratio of today's two counts is exact : exactly, real")
print(" counts, exact division")
print(" the ratio is the share of cases that die : not addressed;")
print(" deaths lag cases by two weeks and cases grew " + str(growth_over_the_lag) + " times over")
print(" that lag, so " + str(rate_on_the_cases_that_died_per_myriad) + " per ten thousand reads as " + str(rate_on_todays_cases_per_myriad))
print("")
print("a ratio is a claim that its two numbers are about the same thing; when one")
print("lags the other in a quantity that is growing, the fresh denominator is always")
print("larger than the one the numerator belongs to, and the rate is diluted by")
print("exactly the growth")
print("")
print("It divides exact current deaths by exact current cases - " + str(rate_on_todays_cases_per_myriad) + " per ten thousand")
print("is exactly today over today. But the deaths follow cases from two weeks ago,")
print("when there were " + str(growth_over_the_lag) + " times fewer, so the fatality of the cases that died is " + str(rate_on_the_cases_that_died_per_myriad) + ",")
print("understated " + str(understatement_factor) + "-fold, until the numerator and denominator are aligned.")stdout (executed)
textcases today : 8000
cases two weeks ago : 2000
deaths today : 40
growth over the two-week lag : 4 times
rate, deaths over today's cases : 50 per ten thousand
rate, deaths over the cases they came from : 200 per ten thousand
true fatality : 2 percent
understated by : a factor of 4
the dashboard rate
counts : real and current, both
division : exact
refresh : every day, fresh data
intent : what share of cases die
stale numbers used : 0
verdict : HALF A PERCENT OF CASES DIE
dividing exact current deaths by exact current cases is
the part done right here, and it is why the number is
precisely today's deaths per today's case
the lag between the numerator and the denominator
a death today : follows a case from about two weeks ago
cases two weeks ago : 2000
cases today : 8000, 4 times more
so today's deaths over today's cases : divides the deaths
of 2000 cases by 8000
during growth : the denominator always outruns the
numerator by the growth over the lag
the reassurance
fatality shown : 50 per ten thousand
fatality of the cases that actually died : 200 per ten thousand
is either count wrong : no
are the two counts about the same people : no; the deaths
are two weeks behind the cases
and when growth stops : the rate will appear to quadruple
with no change in the disease
null control - divide by the cases the deaths came from
rate on today's cases : 50 per ten thousand
rate on lagged cases : 200 per ten thousand
per ten thousand the alignment recovers : 150
no death and no case changed; the numerator and the
denominator stopped being two weeks apart
what a deaths-over-cases-today rate guarantees
the ratio of today's two counts is exact : exactly, real
counts, exact division
the ratio is the share of cases that die : not addressed;
deaths lag cases by two weeks and cases grew 4 times over
that lag, so 200 per ten thousand reads as 50
a ratio is a claim that its two numbers are about the same thing; when one
lags the other in a quantity that is growing, the fresh denominator is always
larger than the one the numerator belongs to, and the rate is diluted by
exactly the growth
It divides exact current deaths by exact current cases - 50 per ten thousand
is exactly today over today. But the deaths follow cases from two weeks ago,
when there were 4 times fewer, so the fatality of the cases that died is 200,
understated 4-fold, until the numerator and denominator are aligned.Trace event types
eml:run:starteml:assigneml:outputeml:run:done