Reversal Symmetry

According to the reversal symmetry criterion, if a rank choice voting system selects candidate c as a winner, it cannot select c as a winner after reverse ranking the votes.

Usage

The code block below illustrates how to create a Majority criterion object.

using RankChoiceVoting
criterion = ReversalSymmetry()
ReversalSymmetry()

Satisfies

We can see which systems are guaranteed to satisfy the reversal symmetry criterion by calling satisfies with the majority criterion object.

satisfies(criterion)
1-element Vector{VotingSystem}:
 Borda()

Example

The following example demonstrates how to use RankChoiceVoting.jl to test whether the instant runoff voting system violates the reveral symmetry criterion in a specific example.

Let's use RankChoiceVoting.jl to check whether reversal symmetry is violated in this example.

Next, create the rankings in the first table above:

ranks = [[:a,:b,:c],[:b,:c,:a],[:c,:a,:b]]
counts = [4,3,2]
rankings = Ranks(counts, ranks)
Ranks
┌────────┬──────────────┐
│ Counts │ Ranks        │
├────────┼──────────────┤
│ 4      │ [:a, :b, :c] │
│ 3      │ [:b, :c, :a] │
│ 2      │ [:c, :a, :b] │
└────────┴──────────────┘

Now, create an instant runoff voting system object:

system = InstantRunOff()
InstantRunOff()

The winner of the election under an instant runoff voting system can be determined with the function evaluate_winner as follows:

evaluate_winner(system, rankings)
1-element Vector{Symbol}:
 :a

In agreement with the worked example above, the result is candidate a. In RankChoiceVoting.jl, the function satisfies determines whether a voting system complies with a given criterion for the provided rankings. This can be achieved with the following code:

criterion = ReversalSymmetry()
violations = satisfies(system, criterion, rankings)
false

which yields true for this example.

References

lô Gueye, A. (2014). Failures of reversal symmetry under two common voting rules. Economics Bulletin, 34(3), 1970-1975.