Case 936

The owners asked twice what the buyers offered

the_owners_asked_twice_what_the_buyers_offered.eml - Half a room is handed a mug at random and asked the least they would sell it for; the other half is asked the most they would pay for one. The two halves are the same kind of people and the mug is the same mug. Standard theory says about half should trade. How many trades happen, and why, is computed below.

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

EML

eml
# Self-authored for the EML case corpus (no external origin). Half a room is
# handed a mug at random and asked the least they would sell it for; the other
# half is asked the most they would pay for one. The two halves are the same
# kind of people and the mug is the same mug. Standard theory says about half
# should trade. How many trades happen, and why, is computed below.
#
# The market is careful. Mugs were assigned at random, so owners and
# non-owners are alike; every asking and offering price is real; trades happen
# whenever an offer meets an ask; and the intent is exactly 'let the mugs flow
# to the people who value them most'.
#
# Being handed the mug raised its value in the owner's eyes to about twice
# what a buyer would pay, so the asks sit above the bids and few trades clear -
# the same object, valued by who holds it.

300 => median_offer_to_buy_cents
700 => median_ask_to_sell_cents
100 => pairs_of_owner_and_buyer
5000 => trades_standard_theory_predicts_per_myriad
15 => trades_that_actually_cleared

int(median_ask_to_sell_cents * 100 / median_offer_to_buy_cents) => ask_over_bid_hundredths
int(trades_that_actually_cleared * 10000 / pairs_of_owner_and_buyer) => trades_cleared_per_myriad
trades_standard_theory_predicts_per_myriad - trades_cleared_per_myriad => trades_the_endowment_prevented_per_myriad
median_ask_to_sell_cents - median_offer_to_buy_cents => cents_of_value_added_by_holding_it

"median offer to buy             : " + str(median_offer_to_buy_cents) + " cents" ^0
"median ask to sell              : " + str(median_ask_to_sell_cents) + " cents" ^0
"ask over bid                    : " + str(ask_over_bid_hundredths) + " hundredths, about twice" ^0
"value added by holding the mug  : " + str(cents_of_value_added_by_holding_it) + " cents" ^0
"" ^0
"trades predicted (random endowment) : " + str(trades_standard_theory_predicts_per_myriad) + " per ten thousand of pairs" ^0
"trades that cleared             : " + str(trades_cleared_per_myriad) + " per ten thousand of pairs" ^0
"trades the endowment prevented  : " + str(trades_the_endowment_prevented_per_myriad) + " per ten thousand of pairs" ^0
"" ^0

# ---- what the market verified ----

"the mug market" ^0
"  assignment : random, so owners and buyers are alike" ^0
"  prices : every ask and offer real" ^0
"  clearing : a trade whenever an offer meets an ask" ^0
"  intent : mugs flow to whoever values them most" ^0
"  rigged assignments : 0" ^0
"  verdict : ALMOST NOBODY TRADED" ^0
"" ^0
"  assigning the mugs at random is the part done right here," ^0
"  and it is why the owners cannot be people who simply" ^0
"  liked mugs more" ^0
"" ^0

# ---- why the asks sit above the bids ----

"the endowment" ^0
"  standard theory : a mug is worth what it is worth, whoever" ^0
"    holds it, so half the random pairs should find a price" ^0
"  what owners did : asked " + str(median_ask_to_sell_cents) + " for a mug buyers valued at " + str(median_offer_to_buy_cents) ^0
"  what changed between the halves : only who was holding it" ^0
"  so the asks : cleared the bids in " + str(trades_cleared_per_myriad) + " per ten thousand of" ^0
"    pairs, not " + str(trades_standard_theory_predicts_per_myriad) ^0
"" ^0

# ---- what the organiser got ----

"the outcome" ^0
"  mugs that moved to a higher-valuing hand : few" ^0
"  is any price misrecorded : no" ^0
"  is a mug worth the same to a holder and a non-holder :" ^0
"    not to the people asked; possession roughly doubled it" ^0
"" ^0

# ---- null control ----

# The same room with a third group that neither holds a mug nor is offered
# one, asked to choose between a mug and a sum of money - a valuation with no
# endowment on either side.
700 => nc_owners_median_valuation_cents
300 => nc_buyers_median_valuation_cents
310 => nc_choosers_with_no_endowment_median_valuation_cents

"null control - value the mug from neither side" ^0
"  owners' median : " + str(nc_owners_median_valuation_cents) + " cents" ^0
"  buyers' median : " + str(nc_buyers_median_valuation_cents) + " cents" ^0
"  choosers holding nothing : " + str(nc_choosers_with_no_endowment_median_valuation_cents) + " cents, close to the buyers" ^0
"  no mug and no person changed; the valuation was taken" ^0
"  from a hand that was not holding it" ^0
"" ^0

# ---- the rule ----

"what a randomly assigned market guarantees" ^0
"  owners and buyers are the same kind of people : exactly," ^0
"    random assignment" ^0
"  the mugs will flow to those who value them most : not" ^0
"    addressed; holding the mug raised its value to " + str(ask_over_bid_hundredths) + " hundredths" ^0
"    of a buyer's, and " + str(trades_cleared_per_myriad) + " per ten thousand of pairs traded instead of " + str(trades_standard_theory_predicts_per_myriad) ^0
"" ^0

"what a thing is worth to a person depends on whether the person already has" ^0
"it; the same mug in the hand asks twice what it bids from across the table," ^0
"and a market built on one value per object waits for trades that do not come" ^0
"" ^0

"The mugs were assigned at random and every price is real - the two halves are" ^0
"alike. But owners asked " + str(median_ask_to_sell_cents) + " cents where buyers offered " + str(median_offer_to_buy_cents) + ", " + str(ask_over_bid_hundredths) + " hundredths, so" ^0
"" + str(trades_cleared_per_myriad) + " per ten thousand of pairs traded where theory expected " + str(trades_standard_theory_predicts_per_myriad) + ", until the" ^0
"value was measured from a hand holding nothing." ^0

Python (deterministic transpilation)

python
median_offer_to_buy_cents = 300
median_ask_to_sell_cents = 700
pairs_of_owner_and_buyer = 100
trades_standard_theory_predicts_per_myriad = 5000
trades_that_actually_cleared = 15
ask_over_bid_hundredths = int(median_ask_to_sell_cents * 100 / median_offer_to_buy_cents)
trades_cleared_per_myriad = int(trades_that_actually_cleared * 10000 / pairs_of_owner_and_buyer)
trades_the_endowment_prevented_per_myriad = trades_standard_theory_predicts_per_myriad - trades_cleared_per_myriad
cents_of_value_added_by_holding_it = median_ask_to_sell_cents - median_offer_to_buy_cents
print("median offer to buy             : " + str(median_offer_to_buy_cents) + " cents")
print("median ask to sell              : " + str(median_ask_to_sell_cents) + " cents")
print("ask over bid                    : " + str(ask_over_bid_hundredths) + " hundredths, about twice")
print("value added by holding the mug  : " + str(cents_of_value_added_by_holding_it) + " cents")
print("")
print("trades predicted (random endowment) : " + str(trades_standard_theory_predicts_per_myriad) + " per ten thousand of pairs")
print("trades that cleared             : " + str(trades_cleared_per_myriad) + " per ten thousand of pairs")
print("trades the endowment prevented  : " + str(trades_the_endowment_prevented_per_myriad) + " per ten thousand of pairs")
print("")
print("the mug market")
print("  assignment : random, so owners and buyers are alike")
print("  prices : every ask and offer real")
print("  clearing : a trade whenever an offer meets an ask")
print("  intent : mugs flow to whoever values them most")
print("  rigged assignments : 0")
print("  verdict : ALMOST NOBODY TRADED")
print("")
print("  assigning the mugs at random is the part done right here,")
print("  and it is why the owners cannot be people who simply")
print("  liked mugs more")
print("")
print("the endowment")
print("  standard theory : a mug is worth what it is worth, whoever")
print("    holds it, so half the random pairs should find a price")
print("  what owners did : asked " + str(median_ask_to_sell_cents) + " for a mug buyers valued at " + str(median_offer_to_buy_cents))
print("  what changed between the halves : only who was holding it")
print("  so the asks : cleared the bids in " + str(trades_cleared_per_myriad) + " per ten thousand of")
print("    pairs, not " + str(trades_standard_theory_predicts_per_myriad))
print("")
print("the outcome")
print("  mugs that moved to a higher-valuing hand : few")
print("  is any price misrecorded : no")
print("  is a mug worth the same to a holder and a non-holder :")
print("    not to the people asked; possession roughly doubled it")
print("")
nc_owners_median_valuation_cents = 700
nc_buyers_median_valuation_cents = 300
nc_choosers_with_no_endowment_median_valuation_cents = 310
print("null control - value the mug from neither side")
print("  owners' median : " + str(nc_owners_median_valuation_cents) + " cents")
print("  buyers' median : " + str(nc_buyers_median_valuation_cents) + " cents")
print("  choosers holding nothing : " + str(nc_choosers_with_no_endowment_median_valuation_cents) + " cents, close to the buyers")
print("  no mug and no person changed; the valuation was taken")
print("  from a hand that was not holding it")
print("")
print("what a randomly assigned market guarantees")
print("  owners and buyers are the same kind of people : exactly,")
print("    random assignment")
print("  the mugs will flow to those who value them most : not")
print("    addressed; holding the mug raised its value to " + str(ask_over_bid_hundredths) + " hundredths")
print("    of a buyer's, and " + str(trades_cleared_per_myriad) + " per ten thousand of pairs traded instead of " + str(trades_standard_theory_predicts_per_myriad))
print("")
print("what a thing is worth to a person depends on whether the person already has")
print("it; the same mug in the hand asks twice what it bids from across the table,")
print("and a market built on one value per object waits for trades that do not come")
print("")
print("The mugs were assigned at random and every price is real - the two halves are")
print("alike. But owners asked " + str(median_ask_to_sell_cents) + " cents where buyers offered " + str(median_offer_to_buy_cents) + ", " + str(ask_over_bid_hundredths) + " hundredths, so")
print("" + str(trades_cleared_per_myriad) + " per ten thousand of pairs traded where theory expected " + str(trades_standard_theory_predicts_per_myriad) + ", until the")
print("value was measured from a hand holding nothing.")

stdout (executed)

text
median offer to buy             : 300 cents
median ask to sell              : 700 cents
ask over bid                    : 233 hundredths, about twice
value added by holding the mug  : 400 cents

trades predicted (random endowment) : 5000 per ten thousand of pairs
trades that cleared             : 1500 per ten thousand of pairs
trades the endowment prevented  : 3500 per ten thousand of pairs

the mug market
  assignment : random, so owners and buyers are alike
  prices : every ask and offer real
  clearing : a trade whenever an offer meets an ask
  intent : mugs flow to whoever values them most
  rigged assignments : 0
  verdict : ALMOST NOBODY TRADED

  assigning the mugs at random is the part done right here,
  and it is why the owners cannot be people who simply
  liked mugs more

the endowment
  standard theory : a mug is worth what it is worth, whoever
    holds it, so half the random pairs should find a price
  what owners did : asked 700 for a mug buyers valued at 300
  what changed between the halves : only who was holding it
  so the asks : cleared the bids in 1500 per ten thousand of
    pairs, not 5000

the outcome
  mugs that moved to a higher-valuing hand : few
  is any price misrecorded : no
  is a mug worth the same to a holder and a non-holder :
    not to the people asked; possession roughly doubled it

null control - value the mug from neither side
  owners' median : 700 cents
  buyers' median : 300 cents
  choosers holding nothing : 310 cents, close to the buyers
  no mug and no person changed; the valuation was taken
  from a hand that was not holding it

what a randomly assigned market guarantees
  owners and buyers are the same kind of people : exactly,
    random assignment
  the mugs will flow to those who value them most : not
    addressed; holding the mug raised its value to 233 hundredths
    of a buyer's, and 1500 per ten thousand of pairs traded instead of 5000

what a thing is worth to a person depends on whether the person already has
it; the same mug in the hand asks twice what it bids from across the table,
and a market built on one value per object waits for trades that do not come

The mugs were assigned at random and every price is real - the two halves are
alike. But owners asked 700 cents where buyers offered 300, 233 hundredths, so
1500 per ten thousand of pairs traded where theory expected 5000, until the
value was measured from a hand holding nothing.

Trace event types

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