Bondareva–Shapley theorem: the core of a TU game is nonempty iff the game is balanced
OpenBondarevaShapley.core_nonempty_iff_balancedThis is the Bondareva–Shapley theorem: the exact criterion for a cooperative game with transferable utility to have a nonempty core.
Let be a finite nonempty set of players. A game (with transferable utility) on is a function assigning a worth to every coalition , with . For a payoff vector and a coalition write . The core of is
A collection of nonempty subsets of is balanced if there are positive numbers , (a system of balancing weights), such that
that is, , where is the indicator vector of . The game is balanced if for every balanced collection with every system of balancing weights ,
Theorem (Bondareva 1963, Shapley 1967). The core of is nonempty if and only if is balanced:
The theorem characterizes, by finitely many linear inequalities on , exactly when the coalition constraints can be met by an efficient allocation of . It is the standard tool for proving that the cores of market games, linear production games, flow games and assignment games are nonempty, and it complements the results on cores of convex games.
Formalization Note Players form a finite nonempty type N, coalitions are Finset N, and the game is a function v : Finset N → ℝ with the hypothesis v ∅ = 0. A balanced collection is a finite set B of coalitions with ∅ ∉ B, together with weights δ : Finset N → ℝ that are positive on B (values of δ off B are irrelevant) and satisfy for every player . The core is written out inline as the existence of with and for every coalition .
import Mathlib
namespace BondarevaShapley
/-- Bondareva–Shapley theorem (Peleg–Sudhölter, Theorem 3.1.4): a TU game `(N, v)` with
`v ∅ = 0` has a nonempty core iff it is balanced, i.e. for every balanced collection `B`
of nonempty coalitions with (positive) balancing weights `δ`, `∑_{S ∈ B} δ_S v(S) ≤ v(N)`. -/
theorem core_nonempty_iff_balanced {N : Type*} [Fintype N] [DecidableEq N] [Nonempty N]
(v : Finset N → ℝ) (hv : v ∅ = 0) :
(∃ x : N → ℝ, ∑ i, x i = v Finset.univ ∧ ∀ S : Finset N, v S ≤ ∑ i ∈ S, x i) ↔
∀ (B : Finset (Finset N)) (δ : Finset N → ℝ),
∅ ∉ B → (∀ S ∈ B, 0 < δ S) →
(∀ i : N, ∑ S ∈ B.filter (fun S => i ∈ S), δ S = 1) →
∑ S ∈ B, δ S * v S ≤ v Finset.univ := by sorry
end BondarevaShapley