Documentation

EconCSLib.Foundation.OrderedGroup

EconCSLib.Foundation.OrderedGroup #

Convenience lemmas for linearly ordered additive commutative groups, the standard utility/payoff type in game theory.

Typeclass convention #

Throughout EconCSLib, the payoff/utility type U uses the unbundled pattern from modern Mathlib:

[AddCommGroup U] [LinearOrder U] [IsOrderedAddMonoid U]

This is the unbundled equivalent of the former LinearOrderedAddCommGroup (which no longer exists as a standalone class). It provides:

No multiplication is needed for most game theory results (Nash equilibrium, dominance, Vickrey auction). Only specific results require more:

Standard instances: , , , and any LinearOrderedField.

Notation #

We use U consistently for the payoff type throughout the library.

Key Mathlib lemmas for game theory proofs #

The following Mathlib lemmas are especially useful when working with payoffs in an ordered additive group. They are not re-proved here (use the Mathlib names directly), but listed for reference:

Sign and comparison #

Monotonicity of subtraction #

Shifting by positive/negative #

Cancellation #

Note on linarith #

The linarith tactic does not work in abstract ordered additive groups — it requires LinearOrderedCommRing or similar. In proofs over abstract U, use the lemmas above directly, or use abel to normalize additive expressions before applying order lemmas.

Game-theory-specific lemmas #

theorem payoff_anti_payment {U : Type u_1} [AddCommGroup U] [LinearOrder U] [IsOrderedAddMonoid U] {value price₁ price₂ : U} (h : price₁ price₂) :
value - price₂ value - price₁

If paying less is better: price₁price₂value - price₂value - price₁. Useful for comparing utilities when the allocation is the same but payments differ.

theorem payoff_nonneg_iff {U : Type u_1} [AddCommGroup U] [LinearOrder U] [IsOrderedAddMonoid U] {value price : U} :
0 value - price price value

Winning is profitable iff the value exceeds the price.

theorem payoff_nonpos_iff {U : Type u_1} [AddCommGroup U] [LinearOrder U] [IsOrderedAddMonoid U] {value price : U} :
value - price 0 value price

Winning is unprofitable iff the price exceeds the value.

theorem payoff_lt_of_price_lt {U : Type u_1} [AddCommGroup U] [LinearOrder U] [IsOrderedAddMonoid U] {value price₁ price₂ : U} (h : price₁ < price₂) :
value - price₂ < value - price₁

Lowering the price by a positive amount strictly increases payoff.

theorem le_zero_of_add_le_self {U : Type u_1} [AddCommGroup U] [LinearOrder U] [IsOrderedAddMonoid U] {a b : U} (h : a + b a) :
b 0

In a zero-sum comparison: if a + ba then b0.

theorem nonneg_of_self_le_add {U : Type u_1} [AddCommGroup U] [LinearOrder U] [IsOrderedAddMonoid U] {a b : U} (h : a a + b) :
0 b

In a zero-sum comparison: if aa + b then 0b.