Documentation

Arrow.Basic

Preorder' #

A total preorder over candidates α, representing an individual's preference ranking.

structure Preorder' (α : Type) :

A total preorder: reflexive, transitive, and total.

Instances For
    def Preorder'.lt {α : Type} (p : Preorder' α) (a b : α) :

    Strict preference: a is strictly preferred to b iff a ≤ b but not b ≤ a.

    Equations
    Instances For
      Equations
      • One or more equations did not get rendered due to their size.
      Instances For
        Equations
        • One or more equations did not get rendered due to their size.
        Instances For
          Equations
          • One or more equations did not get rendered due to their size.
          Instances For
            Equations
            • One or more equations did not get rendered due to their size.
            Instances For
              theorem Preorder'.lt_asymm {α : Type} {p : Preorder' α} {a b : α} :
              (b ≻[p] a) → ¬a ≻[p] b
              theorem Preorder'.not_lt {α : Type} {p : Preorder' α} {a b : α} :
              (¬b ≻[p] a) a ≽[p] b
              theorem Preorder'.lt_trans {α : Type} {p : Preorder' α} {a b c : α} (h1 : b ≻[p] a) (h2 : c ≻[p] b) :
              c ≻[p] a
              theorem Preorder'.lt_of_lt_of_le {α : Type} {p : Preorder' α} {a b c : α} (hab : b ≻[p] a) (hbc : c ≽[p] b) :
              c ≻[p] a
              inductive Cmp {α : Type} (p : Preorder' α) (a b : α) :

              The three possible outcomes when comparing two elements under a total preorder.

              Instances For
                noncomputable def Preorder'.cmp {α : Type} (p : Preorder' α) (a b : α) :
                Cmp p a b
                Equations
                Instances For

                  Social Welfare Function #

                  Core definitions for Arrow's theorem: profiles, SWFs, and the three key properties.

                  def Profile (α : Type) (N : ) :

                  A preference profile assigns each voter i ∈ Fin N their preference ordering.

                  Equations
                  Instances For
                    def SWF (α : Type) (N : ) :

                    A Social Welfare Function aggregates individual preferences into a social ordering.

                    Equations
                    Instances For
                      def Dictates {α : Type} {N : } (R : SWF α N) (k : Fin N) (a b : α) :

                      Voter k is a dictator for the pair (a, b) if whenever k prefers a over b, society also prefers a over b.

                      Equations
                      Instances For
                        def AgreeOn {α : Type} {N : } (p q : Profile α N) (a b : α) :

                        Two profiles agree on (a, b) if every voter ranks a vs b the same way in both.

                        Equations
                        Instances For
                          def Unanimity {α : Type} {N : } (R : SWF α N) :

                          Unanimity (Pareto): If all voters prefer a over b, so does society.

                          Equations
                          Instances For
                            def AIIA {α : Type} {N : } (R : SWF α N) :

                            Independence of Irrelevant Alternatives: The social ranking of a vs b depends only on individual rankings of a vs b.

                            Equations
                            Instances For
                              def NonDictatorship {α : Type} {N : } (R : SWF α N) :

                              Non-Dictatorship: No single voter dictates the outcome for all pairs.

                              Equations
                              Instances For

                                Preference Construction #

                                We construct concrete preference orderings to build test profiles for the proof. Given three alternatives, prefer a₀ a₁ a₂ tie ranks them with optional ties.

                                inductive Tie :

                                Where ties occur in a 3-element preference ranking

                                Instances For
                                  def prefer_ifs {α : Type} (x y a₀ _a₁ a₂ : α) (tie : Tie) :
                                  Equations
                                  Instances For
                                    def prefer {α : Type} (a₀ _a₁ a₂ : α) (tie : Tie) (h02 : a₀ a₂) :

                                    Construct a preference ordering with optional ties:

                                    • Tie.Not: a₀ > a₁ > a₂ (strict ranking)
                                    • Tie.Top: a₀ ~ a₁ > a₂ (top two tied)
                                    • Tie.Bot: a₀ > a₁ ~ a₂ (bottom two tied)
                                    Equations
                                    • prefer a₀ _a₁ a₂ tie h02 = { le := fun (x y : α) => prefer_ifs x y a₀ _a₁ a₂ tie, refl := , trans := , total := }
                                    Instances For

                                      Pivotal Voter #

                                      The key construction: we find the "pivotal voter" who flips society's preference. Starting from a profile where everyone prefers b ≻ a, we flip voters one by one to prefer a ≻ b. By unanimity, society eventually flips too. The first voter whose flip changes society's preference is the pivotal voter.

                                      def canonicalSwap {α : Type} {N : } (a b : α) (hab : a b) :
                                      Fin (N + 1)Profile α N

                                      A family of profiles indexed by k ∈ Fin (N+1): voters 0..k-1 prefer b ≻ a, voters k..N-1 prefer a ≻ b.

                                      Equations
                                      Instances For
                                        def flipping {α : Type} {N : } (R : SWF α N) (a b : α) (hab : a b) (k : Fin N) :

                                        flipping R a b hab k holds iff society prefers b ≻ a when voters 0..k prefer b ≻ a.

                                        Equations
                                        Instances For
                                          theorem flip_exists {α : Type} {N : } [NeZero N] (R : SWF α N) (a b : α) (hab : a b) (hu : Unanimity R) :
                                          ∃ (k : Fin N), flipping R a b hab k

                                          By unanimity, a flip must occur: when all voters prefer b ≻ a, so does society.

                                          noncomputable def pivoter {α : Type} {N : } [NeZero N] {R : SWF α N} (a b : α) (hab : a b) (hu : Unanimity R) :
                                          Fin N

                                          The pivotal voter for (a, b): the minimum k where society flips from a ≻ b to b ≻ a.

                                          Equations
                                          Instances For
                                            theorem no_flip {α : Type} {N : } [NeZero N] {R : SWF α N} (a b : α) {hab : a b} (i : Fin N) {hu : Unanimity R} :
                                            i < pivoter a b hab hua ≻[R (canonicalSwap a b hab i.succ)] b

                                            Before the pivotal voter, society still prefers a ≻ b.

                                            theorem flipped {α : Type} {N : } [NeZero N] {R : SWF α N} (a b : α) {hab : a b} {hu : Unanimity R} :
                                            b ≽[R (canonicalSwap a b hab (pivoter a b hab hu).succ)] a

                                            At the pivotal voter, society flips to b ≻ a.

                                            theorem nab_dictate_bc {α : Type} {N : } [NeZero N] {R : SWF α N} (a b c : α) (hab : a b) (hac : a c) (hbc : b c) (hu : Unanimity R) (hAIIA : AIIA R) :
                                            Dictates R (pivoter a b hab hu) b c

                                            The pivotal voter for (a, b) dictates the pair (b, c).

                                            theorem nab_le_nbc {α : Type} {N : } [NeZero N] {R : SWF α N} (a b c : α) (hab : a b) (hac : a c) (hbc : b c) (hu : Unanimity R) (hAIIA : AIIA R) :
                                            pivoter a b hab hu pivoter b c hbc hu

                                            The pivotal voter for (a, b) comes no later than the one for (b, c).

                                            theorem ncb_le_nab {α : Type} {N : } [NeZero N] {R : SWF α N} (a b c : α) (hab : a b) (hac : a c) (hbc : b c) (hu : Unanimity R) (hAIIA : AIIA R) :
                                            pivoter c b hu pivoter a b hab hu

                                            The pivotal voter for (c, b) comes no later than the one for (a, b).

                                            theorem ncb_le_nbc {α : Type} {N : } [NeZero N] {R : SWF α N} (a b c : α) (hab : a b) (hac : a c) (hbc : b c) (hu : Unanimity R) (hAIIA : AIIA R) :
                                            pivoter c b hu pivoter b c hbc hu

                                            Combining the above: pivoter (c, b) ≤ pivoter (b, c).

                                            theorem nab_eq_nbc_ncb {α : Type} {N : } [NeZero N] {R : SWF α N} (a b c : α) (hab : a b) (hac : a c) (hbc : b c) (hu : Unanimity R) (hAIIA : AIIA R) :
                                            pivoter b c hbc hu = pivoter c b hu pivoter c b hu = pivoter a b hab hu

                                            All pivotal voters for pairs in {a, b, c} are the same: pivoter (b, c) = pivoter (c, b) = pivoter (a, b).

                                            theorem nab_dictate_xy {α : Type} {N : } [NeZero N] {R : SWF α N} (a b c x y : α) (hab : a b) (hac : a c) (hbc : b c) (hxy : x y) (hu : Unanimity R) (hAIIA : AIIA R) :
                                            Dictates R (pivoter a b hab hu) x y

                                            The pivotal voter for any pair (a, b) dictates every pair (x, y).

                                            theorem Impossibility {α : Type} {N : } [NeZero N] [Fintype α] (ha : Fintype.card α 3) :
                                            ¬∃ (R : SWF α N), Unanimity R AIIA R NonDictatorship R

                                            Arrow's Impossibility Theorem: No SWF with ≥3 alternatives and ≥1 voters can satisfy Unanimity, IIA, and Non-Dictatorship simultaneously.