Basic #
We define basic notions related to apportionment methods, such as elections, apportionments, apportionment rules, and properties of apportionment rules. We also prove the Balinski-Young impossibility theorem.
All definitions follow those given in a textbook by F. Pukelsheim [Puk17]. Distinction between weak and strong exactness is added, following [PPR16].
Main definitions #
ElectionElection.quotaApportionmentRuleIsAnonymousIsBalancedIsConcordantIsDecentIsExactIsQuotaRuleIsPopulationMonotone
Main statements #
Election.n_pos: the number of parties in an election is positive.IsConcordant_of_IsPopulationMonotone: anonymity and population monotonicity imply concordance.balinski_young: Balinski-Young impossibility theorem, without anonymity (or any other property).
References #
- M. L. Balinski, H. P. Young, Fair Representation: Meeting the Ideal of One Man, One Vote
- P. Gölz, D. Peters, A. D. Procaccia, In This Apportionment Lottery, the House Always Wins
- A. Palomares, F. Pukelsheim, J. A. Ramírez, The whole and its parts: On the coherence theorem of Balinski and Young
- F. Pukelsheim, Proportional Representation: Apportionment Methods and Their Applications
An election with a vector of votes for n parties and the total number of seats to be
allocated.
The number of votes cast for each of the
nparties, at the corresponding index.- houseSize : ℕ+
The number of seats to be allocated between the parties.
At least one vote is cast, so that the standard quotas are well defined.
Instances For
Equations
- One or more equations did not get rendered due to their size.
Notation for an election with a literal house size and vote distribution, as in
election![8; [66, 67, 245, 622]].
Equations
- One or more equations did not get rendered due to their size.
Instances For
This instance enables rendering of elections using the #html command. For example,
#html election![8; [66, 67, 245, 622]]
Equations
- Apportionmentlib.instHtmlEvalElection = { eval := fun (e : Apportionmentlib.Election n) => pure (Apportionmentlib.Election.toHtml✝ e) }
Create a new election by permuting the vote distribution of parties according to permutation
σ.
Equations
Instances For
Create a new election by scaling all votes by a positive constant k.
Equations
Instances For
The number of parties in an election is positive.
An apportionment is a vector of natural numbers representing the number of seats allocated to each party (at the corresponding index).
Equations
Instances For
Equations
- Apportionmentlib.instReprApportionment = { reprPrec := fun (e : Apportionmentlib.Apportionment n) (x : ℕ) => Std.Format.text "#v" ++ repr (Vector.toList e) }
An apportionment rule is a function that, given an election, returns a set of apportionments satisfying three properties:
- Non-emptiness: there is at least one apportionment returned;
- Inheritance of zeros: parties with zero votes are allocated zero seats;
- House size feasibility: the total number of seats allocated is equal to the house size.
- res {n : ℕ} : Election n → Finset (Apportionment n)
The set of apportionments that the rule returns for a given election.
- house_size_feasibility {n : ℕ} (election : Election n) (App : Apportionment n) : App ∈ self.res election → Vector.sum App = ↑election.houseSize
Instances For
A rule is anonymous if permuting the votes of the parties permutes the allocation of seats in the same way.
Instances
A rule is balanced if whenever two parties have the same number of votes, then the difference in the number of seats allocated to them is at most one.
Instances
A rule is concordant if whenever one party has fewer votes than another, then it is allocated no more seats than that other party.
Instances
A rule is decent if scaling the number of votes for each party by the same positive integer does not change the apportionment.
Instances
A rule is weakly exact if every Apportionment, when viewed as an input vote distribution
Election.votes, is reproduced as the unique solution.
Instances
A rule is a quota rule if the number of seats allocated to each party is either the floor or the ceiling of its Hare-quota.
Instances
A quota rule allocates at most m seats to party i whenever its quota is at most m.
A quota rule allocates at least m seats to party i whenever its quota is at least m.
A rule is population monotone (or vote ratio monotone) if population paradoxes do not occur.
A population paradox occurs when the support for party i increases at a faster rate than that for
party j, but i loses seats while j gains seats.
- population_monotone {n : ℕ} (election₁ election₂ : Election n) (i j : Fin n) : election₁.houseSize = election₂.houseSize → election₂.votes[i] * election₁.votes[j] > election₂.votes[j] * election₁.votes[i] → ∀ App₁ ∈ rule.res election₁, ∀ App₂ ∈ rule.res election₂, ¬(App₁[i] > App₂[i] ∧ App₁[j] < App₂[j])
Instances
If an anonymous rule is population monotone, then it is concordant.
Balinski-Young impossibility theorem: a quota rule is never population monotone, so no apportionment method can satisfy both properties simultaneously. Anonymity is not assumed (nor any other property).
Gölz, Peters and Procaccia [GPP25] prove this for five or more parties, leaving four open in this generality; the witness used here has only four parties, settling that case.