Leibniz' Project
Home
Pure communism is the only redistribution which maximizes the social utility

Presentation

Utility is a kind of index of satisfaction: it is a number such that, the higher it is, the more satisfied you are. Then the social utility is the sum of all individual utilities and constitutes a kind of global index of satisfaction.

The present article states that, essentially, if everyone is assigned the same (standard) utility, pure communism is the (single) redistribution which maximizes the social utility.

One relies on this article.

Throughout this page, let \(I\) be the finite set of individuals (with \(N\) as the number of individuals) and \(gs \in \mathbb R\) is governement spending.

	
		variable {Individual : Type}
variable {eqInd : DecidableEq Individual}
variable {Society : Fintype Individual}

Utility

The more money you receive, the more you are satisfied: utility increases with money.

\(\mathbf{Definition}\)
The utility function \(u: \mathbb R \to \mathbb R\) is said to increase with money if it is monotone.

	
		def increases_with_money (utility : MonetaryValue -> ℝ) : Prop :=
  Monotone utility

You are more satisfied to get an extra euro when you already have only one euro than when you have 1000€.

\(\mathbf{Definition}\)
The utility function \(u: \mathbb R \to \mathbb R\) is said to (resp. strictly) satisfy the law of diminishing marginal utility if \(u''\) is (resp. strictly) concave on \({\mathbb R}^+\).

	
		def law_diminishing_marginal_utility (utility : MonetaryValue -> ℝ) : Prop :=
  ConcaveOn ℝ (Set.Ici (0 : ℝ)) utility

def law_diminishing_marginal_utility_strict (utility : MonetaryValue -> ℝ) : Prop :=
  StrictConcaveOn ℝ (Set.Ici (0 : ℝ)) utility

The social utility is just of all individual utilities.

\(\mathbf{Definition}\)
Let \(u: \mathbb R \to \mathbb R\) be a utility function and \(r : I \to \mathbb R\) be a profile of retributions given to individuals.
The social utility of \(u\) on \(r\) is \(\sum_{i \in I} u(r(i))\).

	
		def social_utility (utility : MonetaryValue -> ℝ) (retr : Individual -> ℝ) : ℝ :=
  ∑ i, utility (retr i)

Communism maximizes social utility

Pure communism is essentially the single redistribution maximizing the social utility.

\(\mathbf{Proposition}\)
Let \(u: \mathbb R \to \mathbb R\) be a utility function satisfying the law of diminishing marginal utility.
Let \(r : {\mathbb R}^I \to {\mathbb R}^I\) be a redistribution and \(c \in {\mathbb R}^I\) be a retribution profile, such that all indivdual retributions are nonnegative (this hypothesis is here only in order to be able to apply the law of diminishing marginal utility which regards only positive retributions).
Then the social utility on \(r(c)\) is less or equal to the social utility with pure communism instead of \(r\).

\(\mathbf{proof:}\)
The social utility on \(r(c)\) is \(su = \sum_{i \in I} u(r(c)(i))\).
\(u\) being concave, by Jensen’s inequality, \[u(\frac {\sum_{i \in I} r(c)(i)} N) \ge \frac {\sum_{i \in I} u(r(c)(i))} N\] So that \[su \le N \times u(\frac {\sum_{i \in I} r(c)(i)} N)\] By the equilibrium of accounts, \(\sum_{i \in I} r(c)(i) = \sum_{i \in I} c(i) - gs\), so \[su \le N \times u(\frac {(\sum_{i \in I} c(i)) - gs} N)\] The right hand side of the inequality above is the social utility which would have occurred in pure communism.

\(\mathbf{Proposition}\)
Let \(u: \mathbb R \to \mathbb R\) be a utility function strictly satisfying the law of diminishing marginal utility.
Let \(r : {\mathbb R}^I \to {\mathbb R}^I\) be a redistribution and \(c \in {\mathbb R}^I\) be a retribution profile, such that all indivdual retributions are nonnegative.
If the social utility on \(r(c)\) equals to the social utility with pure communism instead of \(r\) (that is if it is maximal), then \(r\) coincides with pure communism on \(c\).

\(\mathbf{proof:}\)
If \(r\) does not coincide with pure communism, there would two individual retributions. So that, \(u\) being strictly concave, by the strict version of Jensen’s inequality, \[u(\frac {\sum_{i \in I} r(c)(i)} N) \gt \frac {\sum_{i \in I} u(r(c)(i))} N\] So that \[\sum_{i \in I} u(r(c)(i)) \lt N \times u(\frac {\sum_{i \in I} r(c)(i)} N)\] By the equilibrium of accounts, \(\sum_{i \in I} r(c)(i) = \sum_{i \in I} c(i) - gs\), so \[\sum_{i \in I} u(r(c)(i)) \lt N \times u(\frac {(\sum_{i \in I} c(i)) - gs} N)\] Therefore the social utility on \(r(c)\) (left-hand side of the inequality above) does not equal the social utility with pure communism instead of \(r\) (right-hand side of the inequality above).

	
		theorem communism_maximizes_social_utility {government_spending : MonetaryValue}
{utility : MonetaryValue -> ℝ}
{cont : Individual -> MonetaryValue}
{redi : @Redistribution Individual Society government_spending}
(inh : Fintype.card Individual ≠ 0) (ldmu : law_diminishing_marginal_utility utility)
(rpos : ∀ i, 0 ≤ redi.val cont i) :
@social_utility Individual Society utility (redi.val cont) ≤
@social_utility Individual Society utility (
  @pure_communism Individual Society government_spending cont
) := by
  unfold social_utility pure_communism total_value
  rw [Finset.sum_const]
  unfold law_diminishing_marginal_utility at ldmu
  let weight := fun _ : Individual => (1 : ℝ) / ↑(Fintype.card Individual)
  have h0 : ∀ i, 0 ≤ weight i := by
    unfold weight
    intro i
    exact Nat.one_div_cast_nonneg (Fintype.card Individual)
  have inh' : (Fintype.card Individual : ℝ) ≠ 0 := by
    exact Nat.cast_ne_zero.mpr inh
  have h1 : ∑ i, weight i = 1 := by
    unfold weight
    rw [Finset.sum_const]
    simp
    rw [Lean.Grind.Field.mul_inv_cancel]
    exact inh'
  have jens : (
    ∑ i, weight i * utility (redi.val cont i) ≤
    utility (∑ i, weight i * (redi.val cont i))
  ) := by
    apply ldmu.le_map_sum
    · intro i iin
      unfold weight
      simp
    · unfold weight
      rw [Finset.sum_const]
      simp
      rw [Lean.Grind.Field.mul_inv_cancel]
      exact inh'
    · intro i iin
      specialize (rpos i)
      simp
      exact rpos
  unfold weight at jens
  rw [sum_reals_mult_constant] at jens
  have equi := redi.property cont
  unfold accounts_at_equilibirum total_value at equi
  have equl : ∑ i, cont i - government_spending = ∑ i, redi.val cont i := by
    exact sub_eq_iff_eq_add.mpr (id (Eq.symm equi))
  rw [equl]
  have mulc : (
    ∑ i, redi.val cont i / ↑(Fintype.card Individual) =
    ∑ i, 1 / ↑(Fintype.card Individual) * redi.val cont i
  ) := by
    apply Fintype.sum_congr
    intro i
    field
  rw [<- mulc] at jens
  have nneg : 0 ≤ (Fintype.card Individual : ℝ) := by
    exact Nat.cast_nonneg' (Fintype.card Individual)
  apply Lean.Grind.OrderedRing.mul_le_mul_of_nonneg_left at jens
  specialize (jens nneg)
  rw [<- mul_assoc] at jens
  simp at jens
  rw [Lean.Grind.Field.mul_inv_cancel] at jens
  · rw [one_mul] at jens
    simp
    rw [sum_reals_div_constant] at jens
    · exact jens
    · exact Nat.cast_ne_zero.mpr inh
  · exact Nat.cast_ne_zero.mpr inh

theorem only_communism_maximizes_social_utility {government_spending : MonetaryValue}
{utility : MonetaryValue -> ℝ} {cont : Individual -> MonetaryValue}
{redi : @Redistribution Individual Society government_spending}
(inh : Fintype.card Individual ≠ 0) (ldmu : law_diminishing_marginal_utility_strict utility)
(rpos : ∀ i, 0 ≤ redi.val cont i) :
@social_utility Individual Society utility (redi.val cont) =
@social_utility Individual Society utility (
  @pure_communism Individual Society government_spending cont
) →
redi.val cont = @pure_communism Individual Society government_spending cont := by
  intro eqsu
  unfold social_utility pure_communism total_value at eqsu
  rw [Finset.sum_const] at eqsu
  let weight := fun _ : Individual => (1 : ℝ) / ↑(Fintype.card Individual)
  have equi := redi.property cont
  unfold total_value at equi
  have h0 : ∀ i, 0 < weight i := by
    unfold weight
    intro i
    exact Nat.one_div_cast_pos inh
  have inh' : (Fintype.card Individual : ℝ) ≠ 0 := by
    exact Nat.cast_ne_zero.mpr inh
  have h1 : ∑ i, weight i = 1 := by
    unfold weight
    rw [Finset.sum_const]
    simp
    rw [Lean.Grind.Field.mul_inv_cancel]
    exact inh'
  by_contra nerd
  have jens : (
    ∑ i, weight i * utility (redi.val cont i) <
    utility (∑ i, weight i * (redi.val cont i))
  ) := by
    apply ldmu.lt_map_sum
    · intro i iin
      unfold weight
      simp
      exact Nat.zero_lt_of_ne_zero inh
    · unfold weight
      rw [Finset.sum_const]
      simp
      rw [Lean.Grind.Field.mul_inv_cancel]
      exact inh'
    · intro i iin
      specialize (rpos i)
      simp
      exact rpos
    · contrapose nerd
      rw [not_exists] at nerd
      simp at nerd
      unfold pure_communism total_value
      apply funext
      intro i
      specialize (nerd i)
      have sumc : (
        ∑ j, redi.val cont j =
        ↑(Fintype.card Individual) * redi.val cont i
       ) := by
        rw [Fintype.sum_congr (fun j => redi.val cont j) (fun _ => redi.val cont i)]
        · rw [Finset.sum_const]
          simp
        · intro k
          rw [nerd]
      rw [<- equi]
      simp
      rw [sumc]
      rw [mul_comm]
      rw [mul_div_assoc]
      rw [div_self]
      · simp
      · exact inh'
  unfold weight at jens
  rw [sum_reals_mult_constant] at jens
  rw [sum_reals_mult_constant] at jens
  rw [eqsu] at jens
  simp at jens
  rw [<- mul_assoc] at jens
  rw [Lean.Grind.Field.inv_mul_cancel] at jens
  · rw [<- equi] at jens
    simp at jens
    rw [mul_comm] at jens
    rw [div_eq_mul_inv] at jens
    simp at jens
  · exact inh'
The proofs' code is currently in . To switch to , click on the following icon: