Case 890

The money already spent voted to finish

the_money_already_spent_voted_to_finish.eml - A project is eighty percent through its budget, the spend and the remaining cost are real and exact, and the committee votes to finish rather than waste what was spent. Which numbers actually differ between finishing and stopping is computed below.

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

EML

eml
# Self-authored for the EML case corpus (no external origin). A project is
# eighty percent through its budget, the spend and the remaining cost are real
# and exact, and the committee votes to finish rather than waste what was spent.
# Which numbers actually differ between finishing and stopping is computed
# below.
#
# The vote is careful. The amount spent is the real ledger figure; the cost to
# finish is a real, current estimate; the percent complete is honest; and the
# intent is exactly 'do not throw away the investment'.
#
# The money already spent is spent in both futures - finish or stop - so it
# cancels out of the comparison, and the only numbers that differ are the cost
# still to pay and the value still to gain, which say stop.

1000 => original_budget
800 => spent_so_far
200 => cost_to_finish
150 => value_if_finished

int(spent_so_far * 10000 / original_budget) => complete_per_myriad
value_if_finished - cost_to_finish => net_of_finishing
0 => net_of_stopping
spent_so_far => sunk_if_finished
spent_so_far => sunk_if_stopped
net_of_finishing - net_of_stopping => finishing_relative_to_stopping
spent_so_far + cost_to_finish => total_if_finished
total_if_finished - value_if_finished => total_loss_if_finished

"original budget                 : " + str(original_budget) ^0
"spent so far                    : " + str(spent_so_far) + ", " + str(complete_per_myriad) + " per ten thousand complete" ^0
"cost to finish                  : " + str(cost_to_finish) ^0
"value if finished (revised)     : " + str(value_if_finished) ^0
"" ^0
"the spent money if we finish    : " + str(sunk_if_finished) + ", gone" ^0
"the spent money if we stop      : " + str(sunk_if_stopped) + ", gone" ^0
"net of finishing, from here     : " + str(net_of_finishing) ^0
"net of stopping, from here      : " + str(net_of_stopping) ^0
"finishing relative to stopping  : " + str(finishing_relative_to_stopping) ^0
"total loss if finished          : " + str(total_loss_if_finished) ^0
"" ^0

# ---- what the vote verified ----

"the finish-or-stop vote" ^0
"  spent : the real ledger figure, " + str(spent_so_far) ^0
"  cost to finish : a real, current estimate, " + str(cost_to_finish) ^0
"  percent complete : honest, " + str(complete_per_myriad) + " per ten thousand" ^0
"  intent : do not throw away the investment" ^0
"  figures misstated : 0" ^0
"  verdict : ONLY 200 MORE ON A 1000 PROJECT, FINISH" ^0
"" ^0
"  using the real ledger and a current estimate is the part" ^0
"  done right here, and it is why every number on the table" ^0
"  is true" ^0
"" ^0

# ---- which numbers differ between the two futures ----

"the comparison" ^0
"  in the finish future : " + str(spent_so_far) + " spent, " + str(cost_to_finish) + " more, " + str(value_if_finished) + " gained" ^0
"  in the stop future : " + str(spent_so_far) + " spent, nothing more, nothing" ^0
"    gained" ^0
"  what appears in both : the " + str(spent_so_far) + ", so it cannot decide" ^0
"    between them" ^0
"  what differs : pay " + str(cost_to_finish) + " to get " + str(value_if_finished) ^0
"  so finishing : is " + str(finishing_relative_to_stopping) + " relative to stopping" ^0
"" ^0

# ---- what the committee got ----

"the outcome of finishing" ^0
"  paid in total : " + str(total_if_finished) + " for a thing worth " + str(value_if_finished) ^0
"  total loss : " + str(total_loss_if_finished) ^0
"  total loss had they stopped : " + str(spent_so_far) ^0
"  is any figure wrong : no" ^0
"  did finishing protect the investment : no; it added " + str(cost_to_finish) ^0
"    to a loss that was already " + str(spent_so_far) + " and recovered " + str(value_if_finished) ^0
"" ^0

# ---- null control ----

# The same decision made only on the numbers that differ between the futures:
# cost still to pay against value still to gain.
1 => nc_finish_when_the_sunk_cost_is_on_the_table
0 => nc_finish_when_only_forward_numbers_count
50 => nc_further_loss_the_forward_view_avoids

"null control - compare only what is still to come" ^0
"  finish, with the spent money on the table : " + str(nc_finish_when_the_sunk_cost_is_on_the_table) ^0
"  finish, forward numbers only : " + str(nc_finish_when_only_forward_numbers_count) ^0
"  further loss the forward view avoids : " + str(nc_further_loss_the_forward_view_avoids) ^0
"  no ledger figure changed; the money that is gone either" ^0
"  way stopped casting a vote" ^0
"" ^0

# ---- the rule ----

"what an eighty-percent-complete vote guarantees" ^0
"  the spend, the remainder and the percentage are true :" ^0
"    exactly, real ledger, current estimate" ^0
"  finishing is better than stopping : not addressed; the" ^0
"    " + str(spent_so_far) + " is spent in both futures and cancels, leaving " + str(cost_to_finish) ^0
"    to pay for " + str(value_if_finished) + " of value - finishing is " + str(finishing_relative_to_stopping) + " against stopping" ^0
"" ^0

"what has been paid is the same in every future and so decides none of them;" ^0
"a choice is made only by what differs between its branches, and the largest" ^0
"number on the table was the one that could not differ" ^0
"" ^0

"Every figure is true: " + str(spent_so_far) + " spent, " + str(cost_to_finish) + " to finish, " + str(complete_per_myriad) + " per ten thousand" ^0
"complete. But the " + str(spent_so_far) + " is gone whether the project finishes or stops, so the" ^0
"choice is " + str(cost_to_finish) + " against " + str(value_if_finished) + ", " + str(finishing_relative_to_stopping) + " for finishing; the vote to protect the investment" ^0
"added " + str(cost_to_finish) + " to the loss, until only the forward numbers were allowed to vote." ^0

Python (deterministic transpilation)

python
original_budget = 1000
spent_so_far = 800
cost_to_finish = 200
value_if_finished = 150
complete_per_myriad = int(spent_so_far * 10000 / original_budget)
net_of_finishing = value_if_finished - cost_to_finish
net_of_stopping = 0
sunk_if_finished = spent_so_far
sunk_if_stopped = spent_so_far
finishing_relative_to_stopping = net_of_finishing - net_of_stopping
total_if_finished = spent_so_far + cost_to_finish
total_loss_if_finished = total_if_finished - value_if_finished
print("original budget                 : " + str(original_budget))
print("spent so far                    : " + str(spent_so_far) + ", " + str(complete_per_myriad) + " per ten thousand complete")
print("cost to finish                  : " + str(cost_to_finish))
print("value if finished (revised)     : " + str(value_if_finished))
print("")
print("the spent money if we finish    : " + str(sunk_if_finished) + ", gone")
print("the spent money if we stop      : " + str(sunk_if_stopped) + ", gone")
print("net of finishing, from here     : " + str(net_of_finishing))
print("net of stopping, from here      : " + str(net_of_stopping))
print("finishing relative to stopping  : " + str(finishing_relative_to_stopping))
print("total loss if finished          : " + str(total_loss_if_finished))
print("")
print("the finish-or-stop vote")
print("  spent : the real ledger figure, " + str(spent_so_far))
print("  cost to finish : a real, current estimate, " + str(cost_to_finish))
print("  percent complete : honest, " + str(complete_per_myriad) + " per ten thousand")
print("  intent : do not throw away the investment")
print("  figures misstated : 0")
print("  verdict : ONLY 200 MORE ON A 1000 PROJECT, FINISH")
print("")
print("  using the real ledger and a current estimate is the part")
print("  done right here, and it is why every number on the table")
print("  is true")
print("")
print("the comparison")
print("  in the finish future : " + str(spent_so_far) + " spent, " + str(cost_to_finish) + " more, " + str(value_if_finished) + " gained")
print("  in the stop future : " + str(spent_so_far) + " spent, nothing more, nothing")
print("    gained")
print("  what appears in both : the " + str(spent_so_far) + ", so it cannot decide")
print("    between them")
print("  what differs : pay " + str(cost_to_finish) + " to get " + str(value_if_finished))
print("  so finishing : is " + str(finishing_relative_to_stopping) + " relative to stopping")
print("")
print("the outcome of finishing")
print("  paid in total : " + str(total_if_finished) + " for a thing worth " + str(value_if_finished))
print("  total loss : " + str(total_loss_if_finished))
print("  total loss had they stopped : " + str(spent_so_far))
print("  is any figure wrong : no")
print("  did finishing protect the investment : no; it added " + str(cost_to_finish))
print("    to a loss that was already " + str(spent_so_far) + " and recovered " + str(value_if_finished))
print("")
nc_finish_when_the_sunk_cost_is_on_the_table = 1
nc_finish_when_only_forward_numbers_count = 0
nc_further_loss_the_forward_view_avoids = 50
print("null control - compare only what is still to come")
print("  finish, with the spent money on the table : " + str(nc_finish_when_the_sunk_cost_is_on_the_table))
print("  finish, forward numbers only : " + str(nc_finish_when_only_forward_numbers_count))
print("  further loss the forward view avoids : " + str(nc_further_loss_the_forward_view_avoids))
print("  no ledger figure changed; the money that is gone either")
print("  way stopped casting a vote")
print("")
print("what an eighty-percent-complete vote guarantees")
print("  the spend, the remainder and the percentage are true :")
print("    exactly, real ledger, current estimate")
print("  finishing is better than stopping : not addressed; the")
print("    " + str(spent_so_far) + " is spent in both futures and cancels, leaving " + str(cost_to_finish))
print("    to pay for " + str(value_if_finished) + " of value - finishing is " + str(finishing_relative_to_stopping) + " against stopping")
print("")
print("what has been paid is the same in every future and so decides none of them;")
print("a choice is made only by what differs between its branches, and the largest")
print("number on the table was the one that could not differ")
print("")
print("Every figure is true: " + str(spent_so_far) + " spent, " + str(cost_to_finish) + " to finish, " + str(complete_per_myriad) + " per ten thousand")
print("complete. But the " + str(spent_so_far) + " is gone whether the project finishes or stops, so the")
print("choice is " + str(cost_to_finish) + " against " + str(value_if_finished) + ", " + str(finishing_relative_to_stopping) + " for finishing; the vote to protect the investment")
print("added " + str(cost_to_finish) + " to the loss, until only the forward numbers were allowed to vote.")

stdout (executed)

text
original budget                 : 1000
spent so far                    : 800, 8000 per ten thousand complete
cost to finish                  : 200
value if finished (revised)     : 150

the spent money if we finish    : 800, gone
the spent money if we stop      : 800, gone
net of finishing, from here     : -50
net of stopping, from here      : 0
finishing relative to stopping  : -50
total loss if finished          : 850

the finish-or-stop vote
  spent : the real ledger figure, 800
  cost to finish : a real, current estimate, 200
  percent complete : honest, 8000 per ten thousand
  intent : do not throw away the investment
  figures misstated : 0
  verdict : ONLY 200 MORE ON A 1000 PROJECT, FINISH

  using the real ledger and a current estimate is the part
  done right here, and it is why every number on the table
  is true

the comparison
  in the finish future : 800 spent, 200 more, 150 gained
  in the stop future : 800 spent, nothing more, nothing
    gained
  what appears in both : the 800, so it cannot decide
    between them
  what differs : pay 200 to get 150
  so finishing : is -50 relative to stopping

the outcome of finishing
  paid in total : 1000 for a thing worth 150
  total loss : 850
  total loss had they stopped : 800
  is any figure wrong : no
  did finishing protect the investment : no; it added 200
    to a loss that was already 800 and recovered 150

null control - compare only what is still to come
  finish, with the spent money on the table : 1
  finish, forward numbers only : 0
  further loss the forward view avoids : 50
  no ledger figure changed; the money that is gone either
  way stopped casting a vote

what an eighty-percent-complete vote guarantees
  the spend, the remainder and the percentage are true :
    exactly, real ledger, current estimate
  finishing is better than stopping : not addressed; the
    800 is spent in both futures and cancels, leaving 200
    to pay for 150 of value - finishing is -50 against stopping

what has been paid is the same in every future and so decides none of them;
a choice is made only by what differs between its branches, and the largest
number on the table was the one that could not differ

Every figure is true: 800 spent, 200 to finish, 8000 per ten thousand
complete. But the 800 is gone whether the project finishes or stops, so the
choice is 200 against 150, -50 for finishing; the vote to protect the investment
added 200 to the loss, until only the forward numbers were allowed to vote.

Trace event types

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