<!-- canonical: efficientnewlanguage.org/ai/examples/882-both-cut-the-price-and-both-lost | ai_layer_version: 0.1.0 | updated: 2026-09-17 -->

# Example 882 — Both cut the price and both lost

`both_cut_the_price_and_both_lost.eml` - Two firms each choose whether to hold or cut their price, each chooses the option that is better for it whatever the other does, and each computes its payoffs correctly. Where two correct best responses land is computed below.

## EML

```eml
# Self-authored for the EML case corpus (no external origin). Two firms each
# choose whether to hold or cut their price, each chooses the option that is
# better for it whatever the other does, and each computes its payoffs
# correctly. Where two correct best responses land is computed below.
#
# Each firm's reasoning is careful. Its payoff table is accurate; it checks its
# best move against both of the other's moves; it picks the move that wins in
# both columns; and the intent is exactly 'maximise our profit'.
#
# Cutting is better for each firm whatever the other does, so both cut - and
# both end up at 40 when both holding would have given each 100.

100 => hold_hold_each
150 => cut_when_other_holds
20 => hold_when_other_cuts
40 => cut_cut_each

cut_when_other_holds - hold_hold_each => gain_from_cutting_if_other_holds
cut_cut_each - hold_when_other_cuts => gain_from_cutting_if_other_cuts
hold_hold_each - cut_cut_each => loss_per_firm_at_the_equilibrium
int(loss_per_firm_at_the_equilibrium * 10000 / hold_hold_each) => cooperative_profit_lost_per_myriad

"both hold                       : " + str(hold_hold_each) + " each" ^0
"I cut, other holds              : " + str(cut_when_other_holds) + " for me, " + str(hold_when_other_cuts) + " for the other" ^0
"both cut                        : " + str(cut_cut_each) + " each" ^0
"" ^0
"gain from cutting if other holds : " + str(gain_from_cutting_if_other_holds) ^0
"gain from cutting if other cuts  : " + str(gain_from_cutting_if_other_cuts) ^0
"so each firm cuts               : cutting wins in both columns" ^0
"outcome                         : both cut, " + str(cut_cut_each) + " each" ^0
"loss per firm vs both holding   : " + str(loss_per_firm_at_the_equilibrium) ^0
"cooperative profit lost         : " + str(cooperative_profit_lost_per_myriad) + " per ten thousand" ^0
"" ^0

# ---- what each firm verified ----

"each firm's decision" ^0
"  payoff table : accurate" ^0
"  checks : the best move against both of the other's moves" ^0
"  picks : the move that wins in both columns" ^0
"  intent : maximise our profit" ^0
"  columns unexamined : 0" ^0
"  verdict : CUT IS BETTER WHATEVER THE OTHER DOES" ^0
"" ^0
"  checking the best response in both columns is the part" ^0
"  done right here, and it is why neither firm could have" ^0
"  done better by changing its own move alone" ^0
"" ^0

# ---- where two best responses land ----

"the pair of choices" ^0
"  each firm's dominant move : cut" ^0
"  what both cutting yields : " + str(cut_cut_each) + " each" ^0
"  what both holding would yield : " + str(hold_hold_each) + " each" ^0
"  can either firm improve alone from both-cut : no; holding" ^0
"    alone drops it to " + str(hold_when_other_cuts) ^0
"  so the outcome is stable : and worse for both than the" ^0
"    outcome neither can reach alone" ^0
"" ^0

# ---- what the firms got ----

"the price war" ^0
"  each firm earned : " + str(cut_cut_each) ^0
"  each firm could have earned : " + str(hold_hold_each) ^0
"  is either payoff table wrong : no" ^0
"  is either choice a mistake, given the other : no; it is" ^0
"    the best response" ^0
"  is the joint outcome the best available : no; it is the" ^0
"    stable one" ^0
"" ^0

# ---- null control ----

# The same firms in a repeated game with a credible response - a cut is answered
# by a cut next round - so holding becomes each firm's best long-run move.
40 => nc_each_firm_one_shot_best_response
100 => nc_each_firm_repeated_with_retaliation
60 => nc_profit_per_firm_the_commitment_recovers

"null control - repeat the game with a credible answer to a cut" ^0
"  each firm, one-shot best response : " + str(nc_each_firm_one_shot_best_response) ^0
"  each firm, repeated with retaliation : " + str(nc_each_firm_repeated_with_retaliation) ^0
"  profit per firm the commitment recovers : " + str(nc_profit_per_firm_the_commitment_recovers) ^0
"  no payoff changed; the move that wins in both columns" ^0
"  stopped being the last word" ^0
"" ^0

# ---- the rule ----

"what a pair of dominant best responses guarantees" ^0
"  neither firm can gain by changing its own move : exactly," ^0
"    accurate tables, both columns checked" ^0
"  the firms reach the best outcome available to them : not" ^0
"    addressed; both cutting is stable at " + str(cut_cut_each) + " each while" ^0
"    both holding gives " + str(hold_hold_each) + ", and no single firm can get" ^0
"    from one to the other" ^0
"" ^0

"the best reply to every move is not the best outcome for the mover; a pair of" ^0
"correct individual choices can meet at a point both would leave if only they" ^0
"could leave together, and correctness at the seat is what keeps them there" ^0
"" ^0

"Each firm checks both columns and picks the move that wins in both - cut. Both" ^0
"cut and earn " + str(cut_cut_each) + " each where holding would earn " + str(hold_hold_each) + "; neither can improve" ^0
"alone, " + str(cooperative_profit_lost_per_myriad) + " per ten thousand of the cooperative profit lost, until a credible" ^0
"answer to a cut makes holding the best reply." ^0
```

## Python (deterministic transpilation)

```python
hold_hold_each = 100
cut_when_other_holds = 150
hold_when_other_cuts = 20
cut_cut_each = 40
gain_from_cutting_if_other_holds = cut_when_other_holds - hold_hold_each
gain_from_cutting_if_other_cuts = cut_cut_each - hold_when_other_cuts
loss_per_firm_at_the_equilibrium = hold_hold_each - cut_cut_each
cooperative_profit_lost_per_myriad = int(loss_per_firm_at_the_equilibrium * 10000 / hold_hold_each)
print("both hold                       : " + str(hold_hold_each) + " each")
print("I cut, other holds              : " + str(cut_when_other_holds) + " for me, " + str(hold_when_other_cuts) + " for the other")
print("both cut                        : " + str(cut_cut_each) + " each")
print("")
print("gain from cutting if other holds : " + str(gain_from_cutting_if_other_holds))
print("gain from cutting if other cuts  : " + str(gain_from_cutting_if_other_cuts))
print("so each firm cuts               : cutting wins in both columns")
print("outcome                         : both cut, " + str(cut_cut_each) + " each")
print("loss per firm vs both holding   : " + str(loss_per_firm_at_the_equilibrium))
print("cooperative profit lost         : " + str(cooperative_profit_lost_per_myriad) + " per ten thousand")
print("")
print("each firm's decision")
print("  payoff table : accurate")
print("  checks : the best move against both of the other's moves")
print("  picks : the move that wins in both columns")
print("  intent : maximise our profit")
print("  columns unexamined : 0")
print("  verdict : CUT IS BETTER WHATEVER THE OTHER DOES")
print("")
print("  checking the best response in both columns is the part")
print("  done right here, and it is why neither firm could have")
print("  done better by changing its own move alone")
print("")
print("the pair of choices")
print("  each firm's dominant move : cut")
print("  what both cutting yields : " + str(cut_cut_each) + " each")
print("  what both holding would yield : " + str(hold_hold_each) + " each")
print("  can either firm improve alone from both-cut : no; holding")
print("    alone drops it to " + str(hold_when_other_cuts))
print("  so the outcome is stable : and worse for both than the")
print("    outcome neither can reach alone")
print("")
print("the price war")
print("  each firm earned : " + str(cut_cut_each))
print("  each firm could have earned : " + str(hold_hold_each))
print("  is either payoff table wrong : no")
print("  is either choice a mistake, given the other : no; it is")
print("    the best response")
print("  is the joint outcome the best available : no; it is the")
print("    stable one")
print("")
nc_each_firm_one_shot_best_response = 40
nc_each_firm_repeated_with_retaliation = 100
nc_profit_per_firm_the_commitment_recovers = 60
print("null control - repeat the game with a credible answer to a cut")
print("  each firm, one-shot best response : " + str(nc_each_firm_one_shot_best_response))
print("  each firm, repeated with retaliation : " + str(nc_each_firm_repeated_with_retaliation))
print("  profit per firm the commitment recovers : " + str(nc_profit_per_firm_the_commitment_recovers))
print("  no payoff changed; the move that wins in both columns")
print("  stopped being the last word")
print("")
print("what a pair of dominant best responses guarantees")
print("  neither firm can gain by changing its own move : exactly,")
print("    accurate tables, both columns checked")
print("  the firms reach the best outcome available to them : not")
print("    addressed; both cutting is stable at " + str(cut_cut_each) + " each while")
print("    both holding gives " + str(hold_hold_each) + ", and no single firm can get")
print("    from one to the other")
print("")
print("the best reply to every move is not the best outcome for the mover; a pair of")
print("correct individual choices can meet at a point both would leave if only they")
print("could leave together, and correctness at the seat is what keeps them there")
print("")
print("Each firm checks both columns and picks the move that wins in both - cut. Both")
print("cut and earn " + str(cut_cut_each) + " each where holding would earn " + str(hold_hold_each) + "; neither can improve")
print("alone, " + str(cooperative_profit_lost_per_myriad) + " per ten thousand of the cooperative profit lost, until a credible")
print("answer to a cut makes holding the best reply.")
```

## stdout (executed)

```text
both hold                       : 100 each
I cut, other holds              : 150 for me, 20 for the other
both cut                        : 40 each

gain from cutting if other holds : 50
gain from cutting if other cuts  : 20
so each firm cuts               : cutting wins in both columns
outcome                         : both cut, 40 each
loss per firm vs both holding   : 60
cooperative profit lost         : 6000 per ten thousand

each firm's decision
  payoff table : accurate
  checks : the best move against both of the other's moves
  picks : the move that wins in both columns
  intent : maximise our profit
  columns unexamined : 0
  verdict : CUT IS BETTER WHATEVER THE OTHER DOES

  checking the best response in both columns is the part
  done right here, and it is why neither firm could have
  done better by changing its own move alone

the pair of choices
  each firm's dominant move : cut
  what both cutting yields : 40 each
  what both holding would yield : 100 each
  can either firm improve alone from both-cut : no; holding
    alone drops it to 20
  so the outcome is stable : and worse for both than the
    outcome neither can reach alone

the price war
  each firm earned : 40
  each firm could have earned : 100
  is either payoff table wrong : no
  is either choice a mistake, given the other : no; it is
    the best response
  is the joint outcome the best available : no; it is the
    stable one

null control - repeat the game with a credible answer to a cut
  each firm, one-shot best response : 40
  each firm, repeated with retaliation : 100
  profit per firm the commitment recovers : 60
  no payoff changed; the move that wins in both columns
  stopped being the last word

what a pair of dominant best responses guarantees
  neither firm can gain by changing its own move : exactly,
    accurate tables, both columns checked
  the firms reach the best outcome available to them : not
    addressed; both cutting is stable at 40 each while
    both holding gives 100, and no single firm can get
    from one to the other

the best reply to every move is not the best outcome for the mover; a pair of
correct individual choices can meet at a point both would leave if only they
could leave together, and correctness at the seat is what keeps them there

Each firm checks both columns and picks the move that wins in both - cut. Both
cut and earn 40 each where holding would earn 100; neither can improve
alone, 6000 per ten thousand of the cooperative profit lost, until a credible
answer to a cut makes holding the best reply.
```

## Round-trip

`ok: true` — round-trip fixpoint reached (python1 == python2)

## Trace event types

eml:run:start · eml:assign · eml:output · eml:run:done
