Case 942

Doubling the dose did not halve the wait

doubling_the_dose_did_not_halve_the_wait.eml - A patient on a once-a-day drug with a one-day half-life is told it takes about five days to reach its working level, wants it sooner, and reasons that twice the tablet will get there in half the time. What the doubled tablet actually changes is computed below.

ok: true — round-trip fixpoint reached (python1 == python2)updated 2026-09-21

EML

eml
# Self-authored for the EML case corpus (no external origin). A patient on a
# once-a-day drug with a one-day half-life is told it takes about five days to
# reach its working level, wants it sooner, and reasons that twice the tablet
# will get there in half the time. What the doubled tablet actually changes is
# computed below.
#
# The reasoning is careful. Five days to the plateau is the real figure; the
# tablet can be doubled; twice as much drug per day is genuinely twice the
# input; and the intent is exactly 'reach the working level sooner'.
#
# Doubling the dose doubles every number in the climb and leaves every fraction
# of it alone - day one is still half of the plateau, day five is still
# ninety-seven percent of it - so the wait is unchanged and the destination is
# doubled, while a single loading dose would have reached the original plateau
# on day one.

160 => maintenance_dose_mg
320 => doubled_dose_mg
1 => half_life_days

maintenance_dose_mg * 2 => plateau_on_maintenance_mg
doubled_dose_mg * 2 => plateau_on_doubled_mg

maintenance_dose_mg => m_day_one_mg
maintenance_dose_mg + int(m_day_one_mg / 2) => m_day_two_mg
maintenance_dose_mg + int(m_day_two_mg / 2) => m_day_three_mg
maintenance_dose_mg + int(m_day_three_mg / 2) => m_day_four_mg
maintenance_dose_mg + int(m_day_four_mg / 2) => m_day_five_mg

doubled_dose_mg => d_day_one_mg
doubled_dose_mg + int(d_day_one_mg / 2) => d_day_two_mg
doubled_dose_mg + int(d_day_two_mg / 2) => d_day_three_mg
doubled_dose_mg + int(d_day_three_mg / 2) => d_day_four_mg
doubled_dose_mg + int(d_day_four_mg / 2) => d_day_five_mg

int(m_day_one_mg * 10000 / plateau_on_maintenance_mg) => m_day_one_share_per_myriad
int(m_day_five_mg * 10000 / plateau_on_maintenance_mg) => m_day_five_share_per_myriad
int(d_day_one_mg * 10000 / plateau_on_doubled_mg) => d_day_one_share_per_myriad
int(d_day_five_mg * 10000 / plateau_on_doubled_mg) => d_day_five_share_per_myriad
d_day_five_mg - plateau_on_maintenance_mg => overshoot_of_the_wanted_level_by_day_five_mg

doubled_dose_mg => loading_day_one_mg
maintenance_dose_mg + int(loading_day_one_mg / 2) => loading_day_two_mg

"maintenance tablet              : " + str(maintenance_dose_mg) + " mg a day, plateau " + str(plateau_on_maintenance_mg) + " mg" ^0
"doubled tablet                  : " + str(doubled_dose_mg) + " mg a day, plateau " + str(plateau_on_doubled_mg) + " mg" ^0
"half-life                       : " + str(half_life_days) + " day" ^0
"" ^0
"maintenance, day one            : " + str(m_day_one_mg) + " mg, " + str(m_day_one_share_per_myriad) + " per ten thousand of its plateau" ^0
"maintenance, day five           : " + str(m_day_five_mg) + " mg, " + str(m_day_five_share_per_myriad) + " per ten thousand of its plateau" ^0
"doubled, day one                : " + str(d_day_one_mg) + " mg, " + str(d_day_one_share_per_myriad) + " per ten thousand of its plateau" ^0
"doubled, day five               : " + str(d_day_five_mg) + " mg, " + str(d_day_five_share_per_myriad) + " per ten thousand of its plateau" ^0
"doubled, above the wanted level : " + str(overshoot_of_the_wanted_level_by_day_five_mg) + " mg by day five" ^0
"loading dose then maintenance   : " + str(loading_day_one_mg) + " mg day one, " + str(loading_day_two_mg) + " mg day two" ^0
"" ^0

# ---- what the patient verified ----

"the twice-as-fast reasoning" ^0
"  time to plateau : five days, the real figure" ^0
"  input : twice the tablet is twice the drug per day" ^0
"  arithmetic : twice the rate covers the distance in half the time" ^0
"  intent : reach the working level sooner" ^0
"  facts wrong : 0" ^0
"  verdict : DOUBLE THE TABLET, HALVE THE WAIT" ^0
"" ^0
"  doubling the daily input is the part done right here, and" ^0
"  it is why every day's level in the doubled column is" ^0
"  exactly twice the maintenance column's" ^0
"" ^0

# ---- what the doubled tablet changes ----

"the climb" ^0
"  day one : half of the plateau, whichever plateau" ^0
"  day five : " + str(m_day_five_share_per_myriad) + " per ten thousand of the plateau, whichever plateau" ^0
"  what sets the speed : the half-life, which the tablet" ^0
"    does not touch" ^0
"  what the tablet sets : the plateau, which doubled from" ^0
"    " + str(plateau_on_maintenance_mg) + " to " + str(plateau_on_doubled_mg) + " mg" ^0
"  what reaches the wanted level in a day : one doubled tablet" ^0
"    followed by maintenance, " + str(loading_day_one_mg) + " then " + str(loading_day_two_mg) + " mg, flat" ^0
"" ^0

# ---- what the patient got ----

"the wait" ^0
"  believed : the working level in two or three days" ^0
"  actual : the working level passed on day one, and the climb" ^0
"    continued to " + str(d_day_five_mg) + " mg, " + str(overshoot_of_the_wanted_level_by_day_five_mg) + " mg above it, by day five" ^0
"  is twice the input twice the level : yes, at every point" ^0
"  is twice the level half the wait : no; the wait is a" ^0
"    property of the half-life and it did not move" ^0
"" ^0

# ---- null control ----

# The same wish granted with a loading dose instead of a doubled maintenance
# dose.
620 => nc_day_five_on_doubled_maintenance_mg
320 => nc_day_five_on_loading_then_maintenance_mg
300 => nc_excess_the_loading_dose_avoids_mg

"null control - load once, then maintain" ^0
"  day five, doubled maintenance : " + str(nc_day_five_on_doubled_maintenance_mg) + " mg" ^0
"  day five, loading then maintenance : " + str(nc_day_five_on_loading_then_maintenance_mg) + " mg" ^0
"  excess the loading dose avoids : " + str(nc_excess_the_loading_dose_avoids_mg) + " mg" ^0
"  no half-life changed; the extra tablet was given once," ^0
"  where the deficit was, instead of every day" ^0
"" ^0

# ---- the rule ----

"what doubling a daily dose guarantees" ^0
"  every level is doubled : exactly, on every day of the climb" ^0
"  the plateau arrives sooner : not addressed; the fraction of" ^0
"    the plateau reached on each day is fixed by the half-life," ^0
"    so day five is " + str(d_day_five_share_per_myriad) + " per ten thousand of a plateau that is now" ^0
"    " + str(plateau_on_doubled_mg) + " mg, twice the level that was wanted" ^0
"" ^0

"the dose chooses where the level ends up; the half-life chooses how long the" ^0
"trip takes; pushing harder on the first does nothing to the second, it only" ^0
"moves the destination past where you wanted to stop" ^0
"" ^0

"Doubling the tablet doubles every day's level - that part is exact. But the" ^0
"climb is a shape set by the half-life: day five is " + str(m_day_five_share_per_myriad) + " per ten thousand of the" ^0
"plateau on either dose, so the doubled tablet reaches " + str(d_day_five_mg) + " mg, " + str(overshoot_of_the_wanted_level_by_day_five_mg) + " mg past" ^0
"the wanted level, until one loading dose is given where the deficit is." ^0

Python (deterministic transpilation)

python
maintenance_dose_mg = 160
doubled_dose_mg = 320
half_life_days = 1
plateau_on_maintenance_mg = maintenance_dose_mg * 2
plateau_on_doubled_mg = doubled_dose_mg * 2
m_day_one_mg = maintenance_dose_mg
m_day_two_mg = maintenance_dose_mg + int(m_day_one_mg / 2)
m_day_three_mg = maintenance_dose_mg + int(m_day_two_mg / 2)
m_day_four_mg = maintenance_dose_mg + int(m_day_three_mg / 2)
m_day_five_mg = maintenance_dose_mg + int(m_day_four_mg / 2)
d_day_one_mg = doubled_dose_mg
d_day_two_mg = doubled_dose_mg + int(d_day_one_mg / 2)
d_day_three_mg = doubled_dose_mg + int(d_day_two_mg / 2)
d_day_four_mg = doubled_dose_mg + int(d_day_three_mg / 2)
d_day_five_mg = doubled_dose_mg + int(d_day_four_mg / 2)
m_day_one_share_per_myriad = int(m_day_one_mg * 10000 / plateau_on_maintenance_mg)
m_day_five_share_per_myriad = int(m_day_five_mg * 10000 / plateau_on_maintenance_mg)
d_day_one_share_per_myriad = int(d_day_one_mg * 10000 / plateau_on_doubled_mg)
d_day_five_share_per_myriad = int(d_day_five_mg * 10000 / plateau_on_doubled_mg)
overshoot_of_the_wanted_level_by_day_five_mg = d_day_five_mg - plateau_on_maintenance_mg
loading_day_one_mg = doubled_dose_mg
loading_day_two_mg = maintenance_dose_mg + int(loading_day_one_mg / 2)
print("maintenance tablet              : " + str(maintenance_dose_mg) + " mg a day, plateau " + str(plateau_on_maintenance_mg) + " mg")
print("doubled tablet                  : " + str(doubled_dose_mg) + " mg a day, plateau " + str(plateau_on_doubled_mg) + " mg")
print("half-life                       : " + str(half_life_days) + " day")
print("")
print("maintenance, day one            : " + str(m_day_one_mg) + " mg, " + str(m_day_one_share_per_myriad) + " per ten thousand of its plateau")
print("maintenance, day five           : " + str(m_day_five_mg) + " mg, " + str(m_day_five_share_per_myriad) + " per ten thousand of its plateau")
print("doubled, day one                : " + str(d_day_one_mg) + " mg, " + str(d_day_one_share_per_myriad) + " per ten thousand of its plateau")
print("doubled, day five               : " + str(d_day_five_mg) + " mg, " + str(d_day_five_share_per_myriad) + " per ten thousand of its plateau")
print("doubled, above the wanted level : " + str(overshoot_of_the_wanted_level_by_day_five_mg) + " mg by day five")
print("loading dose then maintenance   : " + str(loading_day_one_mg) + " mg day one, " + str(loading_day_two_mg) + " mg day two")
print("")
print("the twice-as-fast reasoning")
print("  time to plateau : five days, the real figure")
print("  input : twice the tablet is twice the drug per day")
print("  arithmetic : twice the rate covers the distance in half the time")
print("  intent : reach the working level sooner")
print("  facts wrong : 0")
print("  verdict : DOUBLE THE TABLET, HALVE THE WAIT")
print("")
print("  doubling the daily input is the part done right here, and")
print("  it is why every day's level in the doubled column is")
print("  exactly twice the maintenance column's")
print("")
print("the climb")
print("  day one : half of the plateau, whichever plateau")
print("  day five : " + str(m_day_five_share_per_myriad) + " per ten thousand of the plateau, whichever plateau")
print("  what sets the speed : the half-life, which the tablet")
print("    does not touch")
print("  what the tablet sets : the plateau, which doubled from")
print("    " + str(plateau_on_maintenance_mg) + " to " + str(plateau_on_doubled_mg) + " mg")
print("  what reaches the wanted level in a day : one doubled tablet")
print("    followed by maintenance, " + str(loading_day_one_mg) + " then " + str(loading_day_two_mg) + " mg, flat")
print("")
print("the wait")
print("  believed : the working level in two or three days")
print("  actual : the working level passed on day one, and the climb")
print("    continued to " + str(d_day_five_mg) + " mg, " + str(overshoot_of_the_wanted_level_by_day_five_mg) + " mg above it, by day five")
print("  is twice the input twice the level : yes, at every point")
print("  is twice the level half the wait : no; the wait is a")
print("    property of the half-life and it did not move")
print("")
nc_day_five_on_doubled_maintenance_mg = 620
nc_day_five_on_loading_then_maintenance_mg = 320
nc_excess_the_loading_dose_avoids_mg = 300
print("null control - load once, then maintain")
print("  day five, doubled maintenance : " + str(nc_day_five_on_doubled_maintenance_mg) + " mg")
print("  day five, loading then maintenance : " + str(nc_day_five_on_loading_then_maintenance_mg) + " mg")
print("  excess the loading dose avoids : " + str(nc_excess_the_loading_dose_avoids_mg) + " mg")
print("  no half-life changed; the extra tablet was given once,")
print("  where the deficit was, instead of every day")
print("")
print("what doubling a daily dose guarantees")
print("  every level is doubled : exactly, on every day of the climb")
print("  the plateau arrives sooner : not addressed; the fraction of")
print("    the plateau reached on each day is fixed by the half-life,")
print("    so day five is " + str(d_day_five_share_per_myriad) + " per ten thousand of a plateau that is now")
print("    " + str(plateau_on_doubled_mg) + " mg, twice the level that was wanted")
print("")
print("the dose chooses where the level ends up; the half-life chooses how long the")
print("trip takes; pushing harder on the first does nothing to the second, it only")
print("moves the destination past where you wanted to stop")
print("")
print("Doubling the tablet doubles every day's level - that part is exact. But the")
print("climb is a shape set by the half-life: day five is " + str(m_day_five_share_per_myriad) + " per ten thousand of the")
print("plateau on either dose, so the doubled tablet reaches " + str(d_day_five_mg) + " mg, " + str(overshoot_of_the_wanted_level_by_day_five_mg) + " mg past")
print("the wanted level, until one loading dose is given where the deficit is.")

stdout (executed)

text
maintenance tablet              : 160 mg a day, plateau 320 mg
doubled tablet                  : 320 mg a day, plateau 640 mg
half-life                       : 1 day

maintenance, day one            : 160 mg, 5000 per ten thousand of its plateau
maintenance, day five           : 310 mg, 9687 per ten thousand of its plateau
doubled, day one                : 320 mg, 5000 per ten thousand of its plateau
doubled, day five               : 620 mg, 9687 per ten thousand of its plateau
doubled, above the wanted level : 300 mg by day five
loading dose then maintenance   : 320 mg day one, 320 mg day two

the twice-as-fast reasoning
  time to plateau : five days, the real figure
  input : twice the tablet is twice the drug per day
  arithmetic : twice the rate covers the distance in half the time
  intent : reach the working level sooner
  facts wrong : 0
  verdict : DOUBLE THE TABLET, HALVE THE WAIT

  doubling the daily input is the part done right here, and
  it is why every day's level in the doubled column is
  exactly twice the maintenance column's

the climb
  day one : half of the plateau, whichever plateau
  day five : 9687 per ten thousand of the plateau, whichever plateau
  what sets the speed : the half-life, which the tablet
    does not touch
  what the tablet sets : the plateau, which doubled from
    320 to 640 mg
  what reaches the wanted level in a day : one doubled tablet
    followed by maintenance, 320 then 320 mg, flat

the wait
  believed : the working level in two or three days
  actual : the working level passed on day one, and the climb
    continued to 620 mg, 300 mg above it, by day five
  is twice the input twice the level : yes, at every point
  is twice the level half the wait : no; the wait is a
    property of the half-life and it did not move

null control - load once, then maintain
  day five, doubled maintenance : 620 mg
  day five, loading then maintenance : 320 mg
  excess the loading dose avoids : 300 mg
  no half-life changed; the extra tablet was given once,
  where the deficit was, instead of every day

what doubling a daily dose guarantees
  every level is doubled : exactly, on every day of the climb
  the plateau arrives sooner : not addressed; the fraction of
    the plateau reached on each day is fixed by the half-life,
    so day five is 9687 per ten thousand of a plateau that is now
    640 mg, twice the level that was wanted

the dose chooses where the level ends up; the half-life chooses how long the
trip takes; pushing harder on the first does nothing to the second, it only
moves the destination past where you wanted to stop

Doubling the tablet doubles every day's level - that part is exact. But the
climb is a shape set by the half-life: day five is 9687 per ten thousand of the
plateau on either dose, so the doubled tablet reaches 620 mg, 300 mg past
the wanted level, until one loading dose is given where the deficit is.

Trace event types

eml:run:starteml:assigneml:outputeml:run:done