Case 867

The abstainers were counted as no

the_abstainers_were_counted_as_no.eml - A referendum passes only if a majority of all eligible voters approve it, every ballot was counted exactly, and seventy percent of those who voted said yes. What the rule does with the people who did not vote is computed below.

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

EML

eml
# Self-authored for the EML case corpus (no external origin). A referendum passes
# only if a majority of all eligible voters approve it, every ballot was counted
# exactly, and seventy percent of those who voted said yes. What the rule does
# with the people who did not vote is computed below.
#
# The count is careful. It reads every real ballot cast; it applies the threshold
# exactly as written - more than half of the eligible electorate; it counts every
# eligible voter in the denominator; and the intent is exactly 'the measure passes
# if the voters approve it'.
#
# The threshold is a share of the eligible, not of the votes cast, so every
# eligible voter who stayed home is counted on the no side - six hundred thousand
# abstentions decided a vote that the voters approved by seventy to thirty.

1000000 => eligible_voters
280000 => votes_yes
120000 => votes_no

votes_yes + votes_no => votes_cast
eligible_voters - votes_cast => abstainers
int(eligible_voters / 2) + 1 => yes_votes_needed
yes_votes_needed - votes_yes => yes_shortfall
int(votes_yes * 10000 / votes_cast) => yes_share_of_votes_cast_per_myriad
int(votes_yes * 10000 / eligible_voters) => yes_share_of_eligible_per_myriad
votes_no + abstainers => effective_no_count

"eligible voters                 : " + str(eligible_voters) ^0
"votes cast                      : " + str(votes_cast) ^0
"  yes                           : " + str(votes_yes) ^0
"  no                            : " + str(votes_no) ^0
"abstained                       : " + str(abstainers) ^0
"" ^0
"yes, share of votes cast        : " + str(yes_share_of_votes_cast_per_myriad) + " per ten thousand" ^0
"yes, share of eligible          : " + str(yes_share_of_eligible_per_myriad) + " per ten thousand" ^0
"yes votes the rule needed       : " + str(yes_votes_needed) ^0
"shortfall                       : " + str(yes_shortfall) ^0
"result                          : FAILS" ^0
"votes effectively against       : " + str(effective_no_count) + " (no plus abstained)" ^0
"" ^0

# ---- what the count verified ----

"the referendum count" ^0
"  reads : every real ballot cast" ^0
"  threshold : more than half of the eligible, as written" ^0
"  denominator : every eligible voter" ^0
"  intent : the measure passes if the voters approve it" ^0
"  ballots miscounted : 0" ^0
"  verdict : YES FELL SHORT OF HALF THE ELECTORATE" ^0
"" ^0
"  counting every ballot and applying the written threshold" ^0
"  exactly is the part done right here, and it is why the" ^0
"  shortfall of " + str(yes_shortfall) + " is a true number" ^0
"" ^0

# ---- what the rule does with the abstainers ----

"a threshold over the eligible" ^0
"  what yes must exceed : half of everyone who could vote" ^0
"  what an abstention does to that : nothing to the bar," ^0
"    nothing to the yes count - it is a no" ^0
"  abstainers : " + str(abstainers) ^0
"  the no votes they are added to : " + str(votes_no) ^0
"  so the vote was really : " + str(votes_yes) + " yes against " + str(effective_no_count) + " no-or-absent" ^0
"  and a no voter's best move : stay home, it counts the same" ^0
"" ^0

# ---- what the voters got ----

"the outcome" ^0
"  of those who voted, approved : " + str(yes_share_of_votes_cast_per_myriad) + " per ten thousand" ^0
"  result : fails" ^0
"  is the count wrong : no; yes is " + str(votes_yes) + " and the bar is " + str(yes_votes_needed) ^0
"  did the voters approve it : yes, seven in ten" ^0
"  what decided it : the " + str(abstainers) + " who expressed no view, read as" ^0
"    a view" ^0
"" ^0

# ---- null control ----

# The same ballots under a threshold over votes cast (with any turnout requirement
# stated separately), so an abstention is not a vote.
0 => nc_passes_under_share_of_eligible
1 => nc_passes_under_share_of_votes_cast
600000 => nc_abstentions_no_longer_read_as_no

"null control - threshold over votes cast, turnout stated separately" ^0
"  passes, share of eligible : " + str(nc_passes_under_share_of_eligible) ^0
"  passes, share of votes cast : " + str(nc_passes_under_share_of_votes_cast) ^0
"  abstentions no longer read as no : " + str(nc_abstentions_no_longer_read_as_no) ^0
"  no ballot changed; silence stopped being counted as" ^0
"  opposition" ^0
"" ^0

# ---- the rule ----

"what a majority-of-eligible threshold guarantees" ^0
"  yes exceeded half the electorate, or the measure fails :" ^0
"    exactly, every ballot counted, the bar as written" ^0
"  the measure passes if the voters approve it : not" ^0
"    addressed; the bar is over the eligible, so the " + str(abstainers) ^0
"    abstainers count as no, and a " + str(yes_share_of_votes_cast_per_myriad) + "-per-ten-thousand yes" ^0
"    among the voters fails by " + str(yes_shortfall) ^0
"" ^0

"a denominator chooses who is voting; over the eligible, everyone who stays silent" ^0
"has voted no, and a measure is decided less by those who came than by how many" ^0
"did not, so opposition is cheapest when it does not show up" ^0
"" ^0

"It counts every ballot and applies the written bar exactly - yes at " + str(votes_yes) + " is" ^0
"short of " + str(yes_votes_needed) + ". But the bar is over the eligible, so the " + str(abstainers) + " who did not" ^0
"vote are counted as no; a measure approved " + str(yes_share_of_votes_cast_per_myriad) + " per ten thousand by those who" ^0
"voted fails by " + str(yes_shortfall) + ", until the threshold is taken over votes cast." ^0

Python (deterministic transpilation)

python
eligible_voters = 1000000
votes_yes = 280000
votes_no = 120000
votes_cast = votes_yes + votes_no
abstainers = eligible_voters - votes_cast
yes_votes_needed = int(eligible_voters / 2) + 1
yes_shortfall = yes_votes_needed - votes_yes
yes_share_of_votes_cast_per_myriad = int(votes_yes * 10000 / votes_cast)
yes_share_of_eligible_per_myriad = int(votes_yes * 10000 / eligible_voters)
effective_no_count = votes_no + abstainers
print("eligible voters                 : " + str(eligible_voters))
print("votes cast                      : " + str(votes_cast))
print("  yes                           : " + str(votes_yes))
print("  no                            : " + str(votes_no))
print("abstained                       : " + str(abstainers))
print("")
print("yes, share of votes cast        : " + str(yes_share_of_votes_cast_per_myriad) + " per ten thousand")
print("yes, share of eligible          : " + str(yes_share_of_eligible_per_myriad) + " per ten thousand")
print("yes votes the rule needed       : " + str(yes_votes_needed))
print("shortfall                       : " + str(yes_shortfall))
print("result                          : FAILS")
print("votes effectively against       : " + str(effective_no_count) + " (no plus abstained)")
print("")
print("the referendum count")
print("  reads : every real ballot cast")
print("  threshold : more than half of the eligible, as written")
print("  denominator : every eligible voter")
print("  intent : the measure passes if the voters approve it")
print("  ballots miscounted : 0")
print("  verdict : YES FELL SHORT OF HALF THE ELECTORATE")
print("")
print("  counting every ballot and applying the written threshold")
print("  exactly is the part done right here, and it is why the")
print("  shortfall of " + str(yes_shortfall) + " is a true number")
print("")
print("a threshold over the eligible")
print("  what yes must exceed : half of everyone who could vote")
print("  what an abstention does to that : nothing to the bar,")
print("    nothing to the yes count - it is a no")
print("  abstainers : " + str(abstainers))
print("  the no votes they are added to : " + str(votes_no))
print("  so the vote was really : " + str(votes_yes) + " yes against " + str(effective_no_count) + " no-or-absent")
print("  and a no voter's best move : stay home, it counts the same")
print("")
print("the outcome")
print("  of those who voted, approved : " + str(yes_share_of_votes_cast_per_myriad) + " per ten thousand")
print("  result : fails")
print("  is the count wrong : no; yes is " + str(votes_yes) + " and the bar is " + str(yes_votes_needed))
print("  did the voters approve it : yes, seven in ten")
print("  what decided it : the " + str(abstainers) + " who expressed no view, read as")
print("    a view")
print("")
nc_passes_under_share_of_eligible = 0
nc_passes_under_share_of_votes_cast = 1
nc_abstentions_no_longer_read_as_no = 600000
print("null control - threshold over votes cast, turnout stated separately")
print("  passes, share of eligible : " + str(nc_passes_under_share_of_eligible))
print("  passes, share of votes cast : " + str(nc_passes_under_share_of_votes_cast))
print("  abstentions no longer read as no : " + str(nc_abstentions_no_longer_read_as_no))
print("  no ballot changed; silence stopped being counted as")
print("  opposition")
print("")
print("what a majority-of-eligible threshold guarantees")
print("  yes exceeded half the electorate, or the measure fails :")
print("    exactly, every ballot counted, the bar as written")
print("  the measure passes if the voters approve it : not")
print("    addressed; the bar is over the eligible, so the " + str(abstainers))
print("    abstainers count as no, and a " + str(yes_share_of_votes_cast_per_myriad) + "-per-ten-thousand yes")
print("    among the voters fails by " + str(yes_shortfall))
print("")
print("a denominator chooses who is voting; over the eligible, everyone who stays silent")
print("has voted no, and a measure is decided less by those who came than by how many")
print("did not, so opposition is cheapest when it does not show up")
print("")
print("It counts every ballot and applies the written bar exactly - yes at " + str(votes_yes) + " is")
print("short of " + str(yes_votes_needed) + ". But the bar is over the eligible, so the " + str(abstainers) + " who did not")
print("vote are counted as no; a measure approved " + str(yes_share_of_votes_cast_per_myriad) + " per ten thousand by those who")
print("voted fails by " + str(yes_shortfall) + ", until the threshold is taken over votes cast.")

stdout (executed)

text
eligible voters                 : 1000000
votes cast                      : 400000
  yes                           : 280000
  no                            : 120000
abstained                       : 600000

yes, share of votes cast        : 7000 per ten thousand
yes, share of eligible          : 2800 per ten thousand
yes votes the rule needed       : 500001
shortfall                       : 220001
result                          : FAILS
votes effectively against       : 720000 (no plus abstained)

the referendum count
  reads : every real ballot cast
  threshold : more than half of the eligible, as written
  denominator : every eligible voter
  intent : the measure passes if the voters approve it
  ballots miscounted : 0
  verdict : YES FELL SHORT OF HALF THE ELECTORATE

  counting every ballot and applying the written threshold
  exactly is the part done right here, and it is why the
  shortfall of 220001 is a true number

a threshold over the eligible
  what yes must exceed : half of everyone who could vote
  what an abstention does to that : nothing to the bar,
    nothing to the yes count - it is a no
  abstainers : 600000
  the no votes they are added to : 120000
  so the vote was really : 280000 yes against 720000 no-or-absent
  and a no voter's best move : stay home, it counts the same

the outcome
  of those who voted, approved : 7000 per ten thousand
  result : fails
  is the count wrong : no; yes is 280000 and the bar is 500001
  did the voters approve it : yes, seven in ten
  what decided it : the 600000 who expressed no view, read as
    a view

null control - threshold over votes cast, turnout stated separately
  passes, share of eligible : 0
  passes, share of votes cast : 1
  abstentions no longer read as no : 600000
  no ballot changed; silence stopped being counted as
  opposition

what a majority-of-eligible threshold guarantees
  yes exceeded half the electorate, or the measure fails :
    exactly, every ballot counted, the bar as written
  the measure passes if the voters approve it : not
    addressed; the bar is over the eligible, so the 600000
    abstainers count as no, and a 7000-per-ten-thousand yes
    among the voters fails by 220001

a denominator chooses who is voting; over the eligible, everyone who stays silent
has voted no, and a measure is decided less by those who came than by how many
did not, so opposition is cheapest when it does not show up

It counts every ballot and applies the written bar exactly - yes at 280000 is
short of 500001. But the bar is over the eligible, so the 600000 who did not
vote are counted as no; a measure approved 7000 per ten thousand by those who
voted fails by 220001, until the threshold is taken over votes cast.

Trace event types

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