Documentation

EconCSLib.SocialChoice.FairDivision.Indivisible.RoundRobin

EconCSLib.SocialChoice.FairDivision.Indivisible.RoundRobin #

The choice round-robin algorithm and its EF1 correctness proof, stated on the canonical bundled AdditiveInstance interface.

Main definitions #

Main results #

Algorithm #

Agents are ordered 0, 1, ..., n-1, 0, 1, ... (cycling mod n). In each step the current agent picks their highest-weight remaining good. The implementation recurses on remaining.card with accumulator A : Allocation (Fin n) G.

EF1 proof outline #

Fix distinct agents i, j : Fin n.

Case i.val < j.val (i picks before j in every round): When i picks their r-th good i_r in round r, agent j's round-r good j_r is still in the pool (j hasn't picked yet that round). Since i picks optimally, v_i(i_r) ≥ v_i(j_r). Summing over rounds: v_i(A_i) ≥ v_i(A_j) — agent i does not envy j at all (stronger than EF1). Any good in A_j is therefore a valid EF1 witness (use monotonicity: removing a good can only decrease value).

Case j.val < i.val (j picks before i in every round): When i picks their r-th good i_r in round r, agent j's next good j_{r+1} is still in the pool (j picks in round r+1, after i picks in round r). So v_i(i_r) ≥ v_i(j_{r+1}). Telescoping over r = 0, …, |A_j| − 2: v_i(A_i) ≥ Σ_r v_i(j_{r+1}) = v_i(A_j) − v_i(j_0), i.e., v_i(A_j \ {j_0}) ≤ v_i(A_i), where j_0 is j's first picked good (EF1 witness).

Proof technique #

All proofs use strong induction on remaining.card via Finset.strongInductionOn, with case splits on turn = i, turn = j, turniturnj handled via Function.update_apply.

The EF1 correctness proofs use two-part invariants maintained across rounds:

References #

Raw implementation layer #

The public algorithm below is stated on AdditiveInstance. The recursive proof machinery is parameterized by the raw induced valuation to keep the induction lemmas independent of bundled-record projection noise.

Best-item selection #

Round-robin algorithm #

Unfolding lemmas #

Partition properties #

EF1 correctness #

Bundled additive-instance API #

noncomputable def SocialChoice.FairDivision.Indivisible.bestGood {n : } {G : Type u_1} [DecidableEq G] (I : AdditiveInstance (Fin n) G) (i : Fin n) (s : Finset G) (hs : s.Nonempty) :
G

bestGood I i s hs is a good in s maximizing agent i's item weight.

Equations
Instances For
    theorem SocialChoice.FairDivision.Indivisible.bestGood_mem {n : } {G : Type u_1} [DecidableEq G] (I : AdditiveInstance (Fin n) G) (i : Fin n) (s : Finset G) (hs : s.Nonempty) :
    bestGood I i s hs s

    bestGood lies in the candidate set.

    theorem SocialChoice.FairDivision.Indivisible.bestGood_le {n : } {G : Type u_1} [DecidableEq G] (I : AdditiveInstance (Fin n) G) (i : Fin n) (s : Finset G) (hs : s.Nonempty) {g : G} (hg : g s) :
    I.weight i g I.weight i (bestGood I i s hs)

    Every candidate good has no larger weight than bestGood.

    noncomputable def SocialChoice.FairDivision.Indivisible.roundRobinAux {n : } {G : Type u_1} [NeZero n] [DecidableEq G] (I : AdditiveInstance (Fin n) G) (turn : Fin n) (remaining : Finset G) (A : Allocation (Fin n) G) :

    Recursive core of round-robin for bundled additive instances.

    Equations
    Instances For

      The complete choice round-robin allocation for a bundled additive instance.

      Equations
      Instances For

        Round-robin as a feasible-allocation rule on bundled additive instances.

        Equations
        Instances For
          theorem SocialChoice.FairDivision.Indivisible.roundRobinAllocation_isEF1 {n : } {G : Type u_1} [NeZero n] [DecidableEq G] (I : AdditiveInstance (Fin n) G) (hnn : ∀ (i : Fin n) (g : G), 0 I.weight i g) :

          Round-robin gives EF1 for additive instances with nonnegative item weights.

          theorem SocialChoice.FairDivision.Indivisible.roundRobinRule_isEF1 {n : } {G : Type u_1} [NeZero n] [DecidableEq G] (I : AdditiveInstance (Fin n) G) (hnn : ∀ (i : Fin n) (g : G), 0 I.weight i g) :

          The bundled round-robin rule is EF1 under nonnegative item weights.