📚 Math in Society
⇩ Download ▾

3.3 A Look at Power

Consider the voting system [10:11,3,2]. Notice that in this system, player 1 can reach quota without the support of any other player. When this happens, we say that player 1 is a dictator.

In the voting system [8:6,3,2], no player is a dictator. However, in this system, the quota can only be reached if player 1 is in support of the proposal; player 2 and 3 cannot reach quota without player 1’s support. In this case, player 1 is said to have veto power. Notice that player 1 is not a dictator, since player 1 would still need player 2 or 3’s support to reach quota.

With the system [10:7,6,2], player 3 is said to be a dummy, meaning they have no influence in the outcome. The only way the quota can be met is with the support of both players 1 and 2 (both of which would have veto power here); the vote of player 3 cannot affect the outcome.

To better define power, we need to introduce the idea of a coalition. A coalition is a group of players voting the same way. In the example above, {P1,P2,P4} would represent the coalition of players 1, 2 and 4. This coalition has a combined weight of 7+6+3=16, which meets quota, so this would be a winning coalition.

A player is said to be critical in a coalition if them leaving the coalition would change it from a winning coalition to a losing coalition. In the coalition {P1,P2,P4}, every player is critical. In the coalition {P3,P4,P5}, no player is critical, since it wasn’t a winning coalition to begin with. In the coalition {P1,P2,P3,P4,P5}, only players 1 and 2 are critical; any other player could leave the coalition and it would still meet quota.

# Math in Society 3.3 -- A Look at Power: dictators, veto power, dummies
# A weighted voting system is written [q: w1, w2, ...] -- quota, then weights.
from itertools import combinations

def analyse(q, w, label=""):
    n, total = len(w), sum(w)
    idx = range(n)
    winning = [c for k in range(1, n + 1) for c in combinations(idx, k)
               if sum(w[i] for i in c) >= q]
    critical = [sum(1 for c in winning
                    if i in c and sum(w[j] for j in c if j != i) < q) for i in idx]
    print(f"{label}[{q}: {', '.join(map(str, w))}]   total weight {total}"
          f"   {len(winning)} of {2**n - 1} coalitions win")
    if q * 2 <= total:
        print("   !! the quota is not more than half the weight: two opposing")
        print("      coalitions could both reach quota, so nothing gets decided")
    if q > total:
        print("   !! the quota exceeds the total weight: nothing can ever pass")
    for i in idx:
        if w[i] >= q:
            tag = "DICTATOR -- reaches quota alone"
        elif critical[i] == 0:
            tag = "DUMMY -- never critical, so never matters"
        elif total - w[i] < q:
            tag = "VETO POWER -- critical in every winning coalition"
        else:
            tag = "ordinary player"
        print(f"   P{i+1}  weight {w[i]:>3}   critical {critical[i]:>3}x   {tag}")
    print()

analyse(16, [7, 6, 3, 3, 2])
analyse(10, [11, 3, 2])
for q in (10, 12, 16):            # EDIT: try other quotas for the same weights
    analyse(q, [10, 5, 3])
analyse(65, [47, 46, 17, 16, 2], "Scottish Parliament 2009  ")

print("Raising the quota on a fixed set of weights walks each player up the same")
print("ladder: dummy -> ordinary -> veto power. A dictator can only appear when one")
print("weight on its own already reaches the quota.")
print("Try it: analyse(q, [4, 4, 4, 1]) for every q from 5 to 13 and find the quota")
print("at which the 1-weight player stops being a dummy.")

Notice that a player with veto power will be critical in every winning coalition, since removing their support would prevent a proposal from passing.

Likewise, a dummy will never be critical, since their support will never change a losing coalition to a winning one.

Adapted from Math in Society by David Lippman, hosted on LibreTexts (math.libretexts.org) and licensed under CC BY-SA 3.0. Changes were made. License: CC-BY-SA-3.0.

These eBooks are a prerelease and are not yet certified conformant with WCAG 2.1 AA or ADA Title II. Every page is built against an automated accessibility gate, and the published editions will meet ADA Title II requirements when they release in late September 2026. If something is unusable, please tell us.