Documentation

EconCSLib.MechanismDesign.Auction.Vickrey

EconCSLib.MechanismDesign.Auction.Vickrey #

Second-price (Vickrey) auction: the winner pays the second-highest bid.

Position in the hierarchy #

MechanismWithTransfers I (fun _ => U) I U        -- scalar bids, winner allocation, scalar payments
  └─ SecondPrice.mechanism                       -- winner + second-price payment rule
       └─ SecondPrice.game v                     -- induced StrategicGame at true values v

The auction is formalized as a MechanismWithTransfers (from MechanismDesign.Auction.Transfer). DSIC is stated as mechanism.isDSIC auctionUtility, inheriting the general definition.

Typeclass design #

The bid/utility type U requires (following Mathlib's unbundled style):

This is the unbundled equivalent of the former LinearOrderedAddCommGroup. No multiplication is needed — Vickrey payoff is v_iprice, pure additive. Satisfied by , , , and any LinearOrderedField.

Main definitions #

Main results #

References #

Winner and second price #

In the second-price auction, the winner is the highest bidder (Auction.argmaxBid). The price paid by the winner is the second-highest bid (highest bid excluding the winner).

noncomputable def Auction.SecondPrice.winner {I : Type u_1} [Fintype I] [Nontrivial I] {U : Type u_2} [LinearOrder U] (b : IU) :
I

The winner of the second-price auction: the bidder with the highest bid. Uses Auction.argmaxBid from MechanismDesign.Auction.AuctionBasic.

Equations
Instances For
    noncomputable def Auction.SecondPrice.secondPrice {I : Type u_1} [Fintype I] [Nontrivial I] [DecidableEq I] {U : Type u_2} [LinearOrder U] (b : IU) :
    U

    The second price: the highest bid among all bidders other than the winner.

    Equations
    Instances For

      Bridge lemmas #

      These restate key facts about winner and secondPrice using local names, so the proofs below do not need to spell out Auction.argmaxBid everywhere.

      theorem Auction.SecondPrice.secondPrice_le_bid_winner {I : Type u_1} [Fintype I] [Nontrivial I] [DecidableEq I] {U : Type u_2} [LinearOrder U] (b : IU) :

      The winner's bid is at least the second price.

      noncomputable def Auction.SecondPrice.utility {I : Type u_1} [Fintype I] [Nontrivial I] [DecidableEq I] {U : Type u_2} [AddCommGroup U] [LinearOrder U] (v b : IU) (i : I) :
      U

      Utility of bidder i in a second-price auction: winner gets v isecondPrice b, losers get 0.

      Equations
      Instances For
        theorem Auction.SecondPrice.utility_winner {I : Type u_1} [Fintype I] [Nontrivial I] [DecidableEq I] {U : Type u_2} [AddCommGroup U] [LinearOrder U] {v b : IU} {i : I} (h : i = winner b) :
        utility v b i = v i - secondPrice b

        If i is the winner, utility is v isecondPrice b.

        theorem Auction.SecondPrice.utility_loser {I : Type u_1} [Fintype I] [Nontrivial I] [DecidableEq I] {U : Type u_2} [AddCommGroup U] [LinearOrder U] {v b : IU} {i : I} (h : i winner b) :
        utility v b i = 0

        If i is not the winner, utility is 0.

        theorem Auction.SecondPrice.utility_nonneg {I : Type u_1} [Fintype I] [Nontrivial I] [DecidableEq I] {U : Type u_2} [AddCommGroup U] [LinearOrder U] [IsOrderedAddMonoid U] {v b : IU} {i : I} (htruth : b i = v i) :
        0 utility v b i

        Truthful bidding yields nonneg utility.

        theorem Auction.SecondPrice.valuation_is_dominant {I : Type u_1} [Fintype I] [Nontrivial I] [DecidableEq I] {U : Type u_2} [AddCommGroup U] [LinearOrder U] [IsOrderedAddMonoid U] (v : IU) (i : I) (b : IU) :
        utility v b i utility v (Function.update b i (v i)) i

        Vickrey's Theorem (core form): Truthful bidding dominates any other bid.

        For any bid profile b, replacing i's bid with v i does not decrease i's utility.

        noncomputable def Auction.SecondPrice.game {I : Type u_1} [Fintype I] [Nontrivial I] [DecidableEq I] {U : Type u_2} [AddCommGroup U] [LinearOrder U] (v : IU) :

        Second-price auction as a strategic game.

        This is also the game induced by mechanism via MechanismWithTransfers.toStrategicGame; see game_eq_toStrategicGame.

        Equations
        Instances For
          theorem Auction.SecondPrice.truthful_weakly_dominant {I : Type u_1} [Fintype I] [Nontrivial I] [DecidableEq I] {U : Type u_2} [AddCommGroup U] [LinearOrder U] [IsOrderedAddMonoid U] (v : IU) (i : I) :

          Vickrey's Theorem (strategic game form): Truthful bidding is a weakly dominant strategy in the second-price auction.

          Mechanism design formulation #

          noncomputable def Auction.SecondPrice.mechanism {I : Type u_1} [Fintype I] [Nontrivial I] [DecidableEq I] {U : Type u_2} [AddCommGroup U] [LinearOrder U] :
          MechanismWithTransfers I (fun (x : I) => U) I U

          The second-price auction as a MechanismWithTransfers.

          Agents report bids in U (their type space is homogeneous: T i = U).

          • Allocation: the winner index (element of I)
          • Payments: the winner pays secondPrice b; all losers pay 0.

          This is the canonical MechanismWithTransfers instance from which the strategic game and DSIC statement are derived. [AGT Ch. 9]

          Equations
          • One or more equations did not get rendered due to their size.
          Instances For
            theorem Auction.SecondPrice.game_eq_toStrategicGame {I : Type u_1} [Fintype I] [Nontrivial I] [DecidableEq I] {U : Type u_2} [AddCommGroup U] [LinearOrder U] (v : IU) :
            game v = mechanism.toStrategicGame (fun (w : I) (pay vals : IU) (i : I) => if i = w then vals i - pay i else 0) v

            game v equals the strategic game induced by mechanism.

            The payoffs agree because paymentRule b i = if i = winner b then secondPrice b else 0, so (fun w pay v i => if i = w then v i - pay i else 0) (winner b) (paymentRule b) v i = utility v b i.

            theorem Auction.SecondPrice.mechanism_isDSIC {I : Type u_1} [Fintype I] [Nontrivial I] [DecidableEq I] {U : Type u_2} [AddCommGroup U] [LinearOrder U] [IsOrderedAddMonoid U] :
            mechanism.isDSIC fun (w : I) (pay vals : IU) (i : I) => if i = w then vals i - pay i else 0

            Vickrey's Theorem (mechanism design form): The second-price auction satisfies dominant-strategy incentive compatibility.

            This is mechanism.isDSIC (fun w pay v i => if i = w then v i - pay i else 0), the general DSIC predicate from MechanismDesign.Auction.Transfer applied to the second-price mechanism. Proof follows from truthful_weakly_dominant via game_eq_toStrategicGame.