Consistency
The consistency criterion states that if a preference profile is split into disjoint subsets and a voting system selects the same candidate for both subsets, it must also select the same candidate when applied to the combined set.
Below, we will illustrate how the plurality method can violate the Consistency criterion. Consider the preference profile of $n=10$ voters for candidates $C = \{a,b,c\}$.
using RankChoiceVoting
system = InstantRunOff()
data = [[:a,:b,:c],[:b,:c,:a],[:c,:a,:b]]
counts = [8,8,12]
rankings = Ranks(counts, data)
Ranks
┌────────┬──────────────┐
│ Counts │ Ranks │
├────────┼──────────────┤
│ 8 │ [:a, :b, :c] │
│ 8 │ [:b, :c, :a] │
│ 12 │ [:c, :a, :b] │
└────────┴──────────────┘
The plurality method selects candidate $a$ because $a$ has the most first rank preferences. Now let's see how candidate $a$ performs in head-to-head compititions between canidates $b$ and $c$. In a head-to-head competition, candidate $a$ loses to candidate $b$:
- a vs. b: 4
- b vs. a: 6
In a head-to-head competition,candidate $a$ also loses to candidate $c$:
- a vs c: 4
- c vs a: 6
Candidate $a$, who was selected by the plurality method, is a Condorcet loser because $a$ lost each head-to-head competition.
Usage
The following examples illustrate various uses of the Consistency criterion.
Satisfies
We can see which systems are guaranteed to satisfy the Consistency criterion by calling satisfies
with the majority criterion object.
using RankChoiceVoting
criterion = Consistency()
satisfies(criterion)
2-element Vector{VotingSystem}:
Borda()
Plurality()
Example
In the next example, we will illustrate how to check whether the Bucklin system violates the Consistency criterion for a specific preference profile. Consider the following preference profile of $n=100$ voters for $m=4$ candidates.
ranks = [[:a,:b,:c],[:b,:c,:a],[:b,:a,:c],[:c,:a,:b]]
counts = [37,22,12,29]
rankings = Ranks(counts, ranks)
Ranks
┌────────┬──────────────┐
│ Counts │ Ranks │
├────────┼──────────────┤
│ 37 │ [:a, :b, :c] │
│ 22 │ [:b, :c, :a] │
│ 12 │ [:b, :a, :c] │
│ 29 │ [:c, :a, :b] │
└────────┴──────────────┘
Now, create an Bucklin voting system object:
system = Bucklin()
Bucklin()
In the code block below, we can determine the winner of the election with the function evaluate_winner
as follows:
evaluate_winner(system, rankings)
1-element Vector{Symbol}:
:a
In the next code block, we will use the function satisifies
to determine whether the Bucklin system complies with the Consistency criterion for the preference profile above.
criterion = Consistency()
satisfies(system, criterion, rankings)
true
Although the Bucklin system does not satisfy the Consistency criterion in general, it does satisfy it in this specific example.