| Hosted by CoCalc | Download
Kernel: Python 3 (system-wide)
from ipywidgets import interact, widget, interact_manual import ipywidgets as widgets from IPython.display import display, Math import math import matplotlib.pyplot as plt import numpy as np import seaborn as sns import collections

Tutorial on von Neumann-Morgenstern Theorem

import re a = 'a' b = 'b' c = 'c' X = set([a, b, c]) def is_relation_on_X(R): return all([((x[0] in X) and (x[1] in X)) for x in R]) def is_complete(X, R): is_comp = True exp = list() for x in X: for y in X: if (x, y) not in R and (y, x) not in R: if (x, y) not in exp: exp.append((x, y)) is_comp = False return is_comp, exp def is_transitive(relation): is_trans = True counter_examples = list() # try to find a counterexample for a, b in relation: for c, d in relation: if b == c and ((a, d) not in relation): counter_examples.append([(a, b), (b, d), (a, d)]) # print (a,b),(c,d) # uncomment for tests... is_trans = False return is_trans, counter_examples def check_relation(rel_string): _R = rel_string.strip()[1:-1] _R = re.findall('\([\s]*[\w][\s]*,[\s]*[\w][\s]*\)', _R) R = [(t.split(",")[0][1:].strip(), t.split(",")[1][:-1].strip()) for t in _R] if is_relation_on_X(R): is_comp, exp = is_complete(X, R) if is_comp: print(f"the entered relation is complete.") else: #exp_str = '\n'.join(exp) print(f"the entered relation is not complete:") for ex in exp: display( Math( f"({ex[0]}, {ex[1]})\\not\\in R, \\ \\ ({ex[1]}, {ex[0]})\\not\\in R" )) #display(Math(f"{exp_str}")) is_trans, exp = is_transitive(R) if is_trans: print(f"the entered relation is transitive.") else: print("the entered relation is not transitive:") for ex in exp: display( Math("(" + ex[0][0] + ", " + ex[0][1] + ")\\in R, " + "(" + ex[1][0] + ", " + ex[1][1] + ")\\in R, \\mbox{ but }" + "(" + ex[2][0] + ", " + ex[2][1] + ")\\not\\in R")) else: display( Math("\mbox{The entered relation: }" + rel_string + "\mbox{ is not a relation on $\{a,b,c\}$}"))

Preferences

Let XX be a set. A relation RR on a set XX is a subset of X×XX\times X (the set of pairs of elements from XX). That is, RR is a relation on XX means that RX×XR\subseteq X\times X. It is often convenient to write aRba\mathrel{R}b for (a,b)R(a,b)\in R. To simplify our notation we write xRyx\mathrel{R}y when (x,y)R(x,y)\in R.

An example of a relation on the set {a,b,c}\{a,b,c\} is {(a,a),(a,b),(b,c),(c,a)}\{(a,a), (a,b), (b,c), (c,a)\}

We are interested in using relations on a set XX to represent a decision maker's preferences over the objects in XX.

We are typically not interested in any relation on XX, but rather relations that satisfy certain properties. The key properties that we study are:

  • RR is reflexive provided that for all xXx\in X, xRxx\mathrel{R}x.

  • RR is irreflexive provided that for all xXx\in X, it is not the case that xRxx\mathrel{R} x.

  • RR is complete provided that for all x,yXx,y\in X, xRyx\mathrel{R} y or yRyy\mathrel{R} y (or both).

  • RR is transitive provided that for all x,y,zXx,y,z\in X, if xRyx\mathrel{R} y and yRzy\mathrel{R} z then xRzx\mathrel{R} z.

To illustrate, in the box below enter a relation. Find three different relations:

  1. A relation RR that is complete but not transitive.

  2. A relation RR that is transitive but not complete.

  3. A relation RR that is both transitive and complete.

interact(check_relation, rel_string=widgets.Text( value='{(a,b), (b,c), (c,c)}', placeholder='{(a,b), (b,c), (c,c)}', description='$R=$', disabled=False )) print("")

Let XX be a set and RX×XR\subseteq X\times X. We say that RR is a rational preference relation provided that RR is complete and transitive.

Example: Let X={a,b,c}X=\{a,b,c\} and R={(a,b),(b,a),(b,c),(a,c),(a,a),(b,b),(c,c)}R=\{(a,b), (b,a), (b,c), (a,c), (a,a), (b,b), (c,c)\}. Then, RR is complete and transitive, so RR is a rational preference relation on XX. This relation RR describes a decision maker that:

  1. is indifferent between aa and bb;

  2. strictly prefers aa over cc; and

  3. strictly prefers bb over cc.

Given a rational preference relation RR on XX, we define the following:

  • Strict Preference: PRX×XP_R\subseteq X\times X is the relation where for all x,yXx,y\in X, (x,y)PR(x,y)\in P_R if, and only if, (x,y)R(x,y)\in R and (y,x)∉R(y,x)\not\in R.

  • Indifference: IRX×XI_R\subseteq X\times X is the relation where for all x,yXx,y\in X, (x,y)IR(x,y)\in I_R if, and only if, (x,y)R(x,y)\in R and (y,x)R(y,x)\in R.

We sometimes use \succeq to denote a preference relation instead of RR. Then, \succ is the strict preference relation generated by \succeq and \sim is the indifference relation generated by \succeq.

Utility

A utility on a set XX is a function u:XRu:X\rightarrow\mathbb{R}, where R\mathbb{R} is the set of real numbers.

Representing a Preference Ordering: Suppose that RX×XR\subseteq X\times X is a preference ordering. We say that RR is representable by a utility function provided that there is a u:XRu:X\rightarrow \mathbb{R} such that for all x,yXx,y\in X, xRyx R y iff u(x)u(y)u(x)\ge u(y).

For example, suppose that X={a,b,c,d}X=\{a,b,c,d\} and RR is the rational preference relation where:

  1. bPRab \mathrel{P_R} a

  2. aIRca \mathrel{I_R} c, and

  3. cPRdc \mathrel{P_R} d.

Find two utility functions that represent this preference relation.

def does_represent(a, b, c, d): if (b > a) and (a == c) and (c > d): display(Math("\mbox{The utility represents the preference ordering $R$}")) else: if not b > a: display(Math("u(b) \\not > u(a)")) if a != c: display(Math("u(a) \\ne u(c)")) if not c > d: display(Math("u(c) \\not > u(d)")) interact(does_represent, a=widgets.FloatText(value=None, description='$u(a)=$', disabled=False), b=widgets.FloatText(value=None, description='$u(b)=$', disabled=False), c=widgets.FloatText(value=None, description='$u(c)=$', disabled=False), d=widgets.FloatText(value=None, description='$u(d)=$', disabled=False)) print()

This section can be skipped on a first reading. It contains some of the mathematical details.

The key observation is that every rational preference relation is representable by a utility function.

Utility Theorem. Suppose that XX is a finite set. A relation X×X\succeq\subseteq X\times X is a rational preference ordering if, and only if, \succeq is representable by a utility function.

Proof. We leave it to the reader to show that if RR is representable by a utility function, then RR is transitive and complete.

We prove the following: For all nNn\in\mathbb{N}, any preference relation \succeq on a set of size nn is representable by a utility function u:XRu_\succeq:X\rightarrow\mathbb{R}. The proof is by induction on the size of the set of objects XX. The base case is when X=1|X|=1. In this case, X={a}X=\{a\} for some object aa. If \succeq is a transitive and complete ordering on XX, then ={(a,a)}\succeq=\{(a,a)\}. Then, u(a)=0u_\succeq(a)=0 (any real number would work here) clearly represents \succeq. The induction hypothesis is: if X=n|X|=n, then any preference ordering on XX is representable. Suppose that X=n+1|X|=n+1 and \succeq is a preference ordering on XX. Then, X=X{a}X=X'\cup \{a\} for some object aa, where X=n|X'|=n. Note that the restriction\footnote{If RR is a relation on XX and YXY\subseteq X, then RYY×YR_Y\subseteq Y\times Y is the {\bf restriction of RR to YY} provided for all a,bYa,b\in Y, aRYba\mathrel{R_Y} b iff aRba\mathrel{R} b.} of \succeq to XX', denoted \succeq', is a preference ordering on XX'. By the induction hypothesis, \succeq' is representable by a utility function u:XRu_{\succeq'}:X'\rightarrow \mathbb{R}. We will show how to extend uu_{\succeq'} to a utility function u:XRu_{\succeq}:X\rightarrow \mathbb{R} that represents \succeq. For all bXb\in X', let u(b)=u(b)u_\succeq(b)=u_{\succeq'}(b). For the object aa (the unique object in XX but not in XX'), there are four cases:

  1. aba\succ b for all bXb\in X'. Let u(a)=max{u(b)  bX}+1u_\succeq(a)=\max\{u_{\succeq'}(b)\ |\ b\in X'\}+1.

  2. bab\succ a for all bXb\in X'. Let u(a)=min{u(b)  bX}1u_\succeq(a)=\min\{u_{\succeq'}(b)\ |\ b\in X'\}-1.

  3. aba\sim b for some bXb\in X'. Let u(a)=u(b)u_\succeq(a)=u_{\succeq'}(b).

  4. There are b1,b2Xb_1, b_2\in X' such that bab2b_\succ a\succ b_2. Let u(a)=u(b1)+u(b2)2u_\succeq(a)=\frac{u_{\succeq'}(b_1)+ u_{\succeq'}(b_2)}{2}.

Then, it is straightforward to show that u:XRu_\succeq:X\rightarrow\mathbb{R} represents \succeq (the details are left to the reader). \blacksquare

Remark. The above proof can be extended to relations on infinite sets XX. However, additional technical assumptions are needed. It is beyond the scope of this article to discuss these technicalities here.

It is not hard to see that if a preference relation is representable by a utility function, then it is representable by {\em infinitely} many different utility functions. To make this more precise, say that a function f:RRf:\mathbb{R}\rightarrow\mathbb{R} is {\bf monotone} provided rrr\ge r' implies f(r)f(r)f(r)\ge f(r').

Lemma. Suppose that \succeq is representable by a utility function uu_\succeq and f:RRf:\mathbb{R}\rightarrow\mathbb{R} is a monotone function. Then, fuf\circ u_\succeq also represents \succeq.

Proof. The proof is immediate from the definitions: Suppose that a,bXa,b\in X. Then, aba\succeq b iff u(a)u(b)u_\succeq(a)\ge u_\succeq(b) (since uu represents \succeq) iff f(u(a))f(u(b))f(u_\succeq(a))\ge f(u_\succeq(b)) (since ff is monotone). \blacksquare

Lotteries

Suppose that XX is a finite set. A probability on XX is a function p:X[0,1]p:X\rightarrow [0,1] such that xXp(x)=1\sum_{x\in X} p(x)=1. If SXS\subseteq X, then p(S)=xSp(x)p(S)=\sum_{x\in S} p(x). (Note: There are a number of mathematical details about probability measures that we are glossing over here. Our discussion in this section is greatly simplified since we assume that the set of objects XX is finite.) In the remainder of this section, elements of XX are called prizes, or outcomes.

Lottery. Suppose that Y={x1,,xn}Y=\{x_1,\ldots, x_n\} is a set of nn elements from XX. A lottery on YY is denoted as follows: [x1:p1,x2:p2,,xn:pn] [ x_1:p_1,x_2:p_2,\ldots, x_n:p_n ] where each pi0p_i\ge 0 and i=1npi=1\sum_{i=1}^n p_i=1.

We have defined lotteries for any subset of a fixed set XX. Without loss of generality, we can restrict attention to all lotteries on XX. For instance, suppose that X={x1,,xn,y1,,ym}X=\{x_1,\ldots, x_n,y_1,\ldots, y_m\} and LL is a lottery on Y={x1,,xn}Y=\{x_1,\ldots, x_n\}. That is, L=[x1:p1,,xn:pn]L=[x_1:p_1,\ldots, x_n:p_n]. This lottery can be trivially extended to a lottery LL' over XX as follows: L=[x1:p1,,xn:pn,y1:0,,ym:0].L'=[x_1:p_1,\ldots, x_n:p_n, y_1:0,\ldots, y_m:0].

Suppose that XX is a finite set. Let L(X)\mathcal{L}(X) be the set of lotteries on XX (we often write L\mathcal{L} instead of L(X)\mathcal{L}(X) to simplify notation). There are two technical issues that need to be addressed.

  1. First of all, we can identify elements xXx\in X with lotteries [x:1][x:1]. Thus, we may abuse notation and say that "XX is contained in L\mathcal{L}".

  2. Second, we will need the notion of a compound lottery. Suppose that L1,,LnL_1, \ldots, L_n are lotteries. Then, [L1:p1,,Ln:pn][L_1:p_1,\ldots, L_n:p_n] is the compound lottery, where i=1npi=1\sum_{i=1}^n p_i=1.

We are interested in decision makers that have preferences over the set L\mathcal{L} of lotteries (on some fixed set XX). We denote the decision maker's preferences on L\mathcal{L} by the relation L×L\succeq\mathcal{L}\times\mathcal{L}. That is, given two lotteries L1LL_1\in \mathcal{L} and L2LL_2\in\mathcal{L}, we assume that a decision maker has one of the following opinions:

  1. The decision maker strict prefers L1L_1 over L2L_2 (denoted L1L2L_1\succ L_2).

  2. The decision maker strict prefers L2L_2 over L1L_1 (denoted L2L1L_2\succ L_1)

  3. The decision maker is indifferent between L1L_1 and L2L_2 (denoted L1L2L_1\sim L_2).

  4. The decision maker cannot compare L1L_1 and L2L_2.

Assuming that the decision maker's preferences relation \succeq is complete rules out case number 4. One way to compare lotteries is to assign a number of each lottery and rank the lotteries according to the number assigned to them. That is, for a set of lotteries L\mathcal{L} and a function V:LRV:\mathcal{L}\rightarrow\mathbb{R} assigning a real number of teach lottery, define the relation V\succeq_V as follows: for all L,LLL, L'\in \mathcal{L}, LVLL\succeq_V L' if, and only if, V(L)V(L)V(L)\ge V(L').

One way to define a function V:LRV:\mathcal{L}\rightarrow\mathbb{R} for the set of lotteries L\mathcal{L} on XX is to start with a utility function on the set of prizes u:XRu:X\rightarrow\mathbb{R} and then for each LL(X)L\in\mathcal{L}(X) define V(L)V(L) as some function combining the probabilities in LL with the utility of the prizes in LL.

For example, let u:XRu:X\rightarrow\mathbb{R} be a utility function on XX. The following are examples of different ways to assign a value to lotteries:

  1. V1:LRV_1:\mathcal{L}\rightarrow\mathbb{R} is the function where for each L=[x1:p1,,xn:pn]L=[x_1:p_1,\ldots, x_n:p_n], V1(L)=min{u(x1),,u(xn)}V_1(L) = \min\{u(x_1), \ldots, u(x_n)\}

  2. V2:LRV_2:\mathcal{L}\rightarrow\mathbb{R} is the function where for each L=[x1:p1,,xn:pn]L=[x_1:p_1,\ldots, x_n:p_n], V2(L)=i=1nu(xi)V_2(L) = \sum_{i=1}^n u(x_i)

  3. V3:LRV_3:\mathcal{L}\rightarrow\mathbb{R} is the function where for each L=[x1:p1,,xn:pn]L=[x_1:p_1,\ldots, x_n:p_n], V3(L)=i=1npiu(xi)V_3(L) = \sum_{i=1}^n p_i * u(x_i)

  4. V4:LRV_4:\mathcal{L}\rightarrow\mathbb{R} is the function where for each L=[x1:p1,,xn:pn]L=[x_1:p_1,\ldots, x_n:p_n], V4(L)=(i=1npiu(xi))+0.2V_4(L) = (\sum_{i=1}^n p_i * u(x_i)) + 0.2

  5. V5:LRV_5:\mathcal{L}\rightarrow\mathbb{R} is the function where for each L=[x1:p1,,xn:pn]L=[x_1:p_1,\ldots, x_n:p_n], V5(L)=(i=1npi2u(xi))+0.2V_5(L) = (\sum_{i=1}^n p_i * 2 * u(x_i)) + 0.2

  6. V6:LRV_6:\mathcal{L}\rightarrow\mathbb{R} is the function where for each L=[x1:p1,,xn:pn]L=[x_1:p_1,\ldots, x_n:p_n], V7(L)=(i=1npiu(xi))4V_7(L) = (\sum_{i=1}^n p_i * u(x_i))^4

  7. V7:LRV_7:\mathcal{L}\rightarrow\mathbb{R} is the function where for each L=[x1:p1,,xn:pn]L=[x_1:p_1,\ldots, x_n:p_n], V7(L)=(i=1npi2u(xi))V_7(L) = (\sum_{i=1}^n p_i^2 * u(x_i))

We can also define functions that treat sure-things different than other lotteries: Let V7:LRV_7:\mathcal{L}\rightarrow\mathbb{R} be the function where:

ParseError: KaTeX parse error: Unexpected end of input in a macro argument, expected '}' at end of input: …(z) &\mbox{ if Lisequivalentto is equivalent to [z:1]forsome for some z\in XParseError: KaTeX parse error: Expected 'EOF', got '}' at position 2: }̲\\ \sum_{i=1}^n…L=[x_1:p_1,\ldots, x_n:p_n]ParseError: KaTeX parse error: Expected 'EOF', got '}' at position 42: …o probabilities}̲ \end{cases}

Note that function V3V_3 is the expected utility of lotteries with respect to the utility function uu. The key property of the expected utility valuation function is that it is linear:

A function V:LRV:\mathcal{L}\rightarrow \mathbb{R} is linear provided that for all L=[L1:p1,,Ln:pn]L=[L_1:p_1, \ldots, L_n:p_n], V(L)=i=1npiV(Li)V(L)=\sum_{i=1}^n p_i * V(L_i).

The functions V3,V4V_3, V_4 and V5V_5 are all linear.

To illustrate the above functions, let X={a,b,c}X=\{a,b,c\} and consider the utility function u:XRu:X\rightarrow \mathbb{R} where u(a)=1u(a)=1, u(b)=0.5u(b)=0.5 and u(c)=0u(c)=0. Enter the probability for the prizes to see the different values associated with the lottery.

util={a:1, b:0.5, c:0} X=[a,b,c] def v1(ps): """V_1""" return min([util[a] for idx,a in enumerate(X) if ps[idx] != 0]) def v2(ps): """V_2""" return sum([util[a] for idx,a in enumerate(X) if ps[idx] != 0]) def v3(ps): """V_3""" return sum([ps[idx] * util[a] for idx,a in enumerate(X)]) def v4(ps): """V_4""" return sum([ps[idx] * util[a] for idx,a in enumerate(X)]) + 0.2 def v5(ps): """V_5""" return sum([ps[idx] * 2 * util[a] for idx,a in enumerate(X)]) + 0.2 def v6(ps): """V_6""" return (sum([ps[idx] * util[a] for idx,a in enumerate(X)]))**4 def v7(ps): """V_7""" return (sum([ps[idx]**2 * util[a] for idx,a in enumerate(X)])) def V8(ps): """V_8""" if any([ps[idx] == 1 for idx,a in enumerate(X)]): return [util[a] for idx,a in enumerate(X) if ps[idx] == 1][0] else: return (sum([ps[idx] * util[a] for idx,a in enumerate(X)])) + 0.2 def find_value(p1, p2, p3): ps=[p1, p2, p3] print("\n") if math.fabs(sum(ps) - 1.0) > 0.00000000001: print(f"{ps} is not a probability") else: display(Math("V_1(L) = \min(" + str(", ".join([str(util[a]) for idx, a in enumerate(X) if ps[idx] != 0])) + ") = " + str(v1(ps)))) display(Math("V_2(L) = " + str("+ ".join([str(util[a]) for idx, a in enumerate(X) if ps[idx] != 0])) + " = "+ str(v2(ps)))) display(Math("V_3(L) = " + str("+ ".join([str(ps[idx]) + "* " + str(util[a]) for idx, a in enumerate(X) if ps[idx] != 0])) + " = "+ str(round(v3(ps),3)))) display(Math("V_4(L) = " + str("+ ".join([str(ps[idx]) + "* " + str(util[a]) for idx, a in enumerate(X) if ps[idx] != 0])) + "+ 0.2" + " = "+ str(round(v4(ps), 3)))) display(Math("V_5(L) = " + str("+ ".join([str(ps[idx]) + "* 2 *" + str(util[a]) for idx, a in enumerate(X) if ps[idx] != 0])) + "+ 0.2" + " = "+ str(round(v5(ps), 3)))) display(Math("V_6(L) = (" + str("+ ".join([str(ps[idx]) + "* " + str(util[a]) for idx, a in enumerate(X) if ps[idx] != 0])) + ")^4 = "+ str(round(v6(ps), 3)))) display(Math("V_7(L) = (" + str("+ ".join([str(ps[idx]) + "^2 * " + str(util[a]) for idx, a in enumerate(X) if ps[idx] != 0])) + ") = "+ str(round(v7(ps), 3)))) if any([ps[idx] == 1 for idx,a in enumerate(X)]): display(Math("V_8(L) = " + str(V8(ps)))) else: display(Math("V_8(L) = " + str("+ ".join([str(ps[idx]) + "* " + str(util[a]) for idx, a in enumerate(X) if ps[idx] != 0])) + "+ 0.2 = "+ str(round(V8(ps),3)))) interact_manual(find_value, p1 = widgets.FloatSlider(min=0.0, max=1.0, value=0.0, step=0.01, description='$p(a)=$'), p2 = widgets.FloatSlider(min=0.0, max=1.0, value=0.0, step=0.01, description='$p(b)=$'), p3 = widgets.FloatSlider(min=0.0, max=1.0, value=0.0, step=0.01, description='$p(c)=$')) print()

It is also useful to compare the above 8 value functions based on the value that assign to the lottery L=[a:p,b:1p]L=[a:p, b:1-p] as pp ranges from 0 to 1.

sns.set() xs = np.arange(0.0, 1.0, 0.001) fig, ax = plt.subplots() ys=[v3([x, 1-x, 0]) for x in xs] ax.plot(xs, ys, lw=3, label="$" + v3.__doc__+ "([a:p, b:1-p])$") for v in [v1,v2,v4,v5,v6,v7, V8]: ys=[v([x, 1-x, 0]) for x in xs] ax.plot(xs, ys, lw=1.5, label="$" + v.__doc__+ "([a:p, b:1-p])$") ax.set(xlabel='probabilities', ylabel='value', title=' ') plt.legend(bbox_to_anchor=(1.05, 1), loc='upper left', borderaxespad=0.) plt.show()
Image in a Jupyter notebook

The von Neumann-Morgenstern Theorem characterizes the relations on the set of lotteries L\mathcal{L} that can be represented by linear utility functions. Suppose that XX is a set, L\mathcal{L} is the set of lotteries on XX, and \succeq is a relation on L\mathcal{L}. von Neumann and Morgenstern consider the following 4 axioms.

The first axiom is the standard assumption that rational preferences are complete and transitive:

Preference: The relation \succeq is a complete and transitive relation on L\mathcal{L}.

The next two axioms play a central role von Neumann-Morgenstern theorem.

Independence For all L1,L2,L3LL_1, L_2, L_3\in\mathcal{L} and p(0,1]p\in (0,1] , L1L2L_1\succ L_2 if, and only if, [L1:p,L3:(1p)][L2:p,L3:(1p)][L_1:p, L_3:(1-p)]\succ [L_2:p, L_3:(1-p)].

Continuity For all L1,L2,L3LL_1, L_2, L_3\in\mathcal{L}, if L1L2L3L_1\succ L_2\succ L_3, then there exists p(0,1)p\in (0,1) such that L2[L1:p,L3:(1p)]L_2\sim [L_1:p, L_3:(1-p)].

Both axioms have been criticized as rationality principles. For example, consider the continuity axiom. Consider the prizes x=x= "win $1000", y=y= "win $100" and z=z= "get hit by a car". Clearly, it is natural to assume that a decision make would have the preference xyzx\succ y\succ z. Now, Continuity implies that there is some number a(0,1)a\in (0,1) such that [x:a,z:(1a)][y:1][x:a, z:(1-a)]\succ [y:1]. Thus, the decision maker would strictly prefer a lottery in which there is some non-zero chance of getting hit by a car to a lottery in which gives a guaranteed payoff of $100. Arguably, many people would not hold such a preference no matter how small the chance is of getting hit by a car. Here we bracket this are related philosophical discussions about the above axioms and focus on what follows from the axioms. The first observation is a straightforward consequence of Independence and the assumption that the preference ordering is complete.

Lemma Suppose that \succeq is a preference relation on L\mathcal{L} satisfying the Independence axiom. For all lotteries L1,L2,L3LL_1, L_2, L_3\in \mathcal{L} and real numbers a[0,1]a\in [0,1], if L1L2L_1\sim L_2, then [L1:a,L3:(1a)][L2:a,L3:(1a)][L_1:a,L_3:(1-a)]\sim [L_2:a, L_3:(1-a)].

The second observation is that decision makers prefers lotteries in which there is a better chance of winning a more preferred prize.

Lemma If \succeq is a preference relation on L\mathcal{L} satisfying Compound Lotteries and Independence, then for all lotteries L1,L2LL_1, L_2\in \mathcal{L}, if L1L2L_1\succ L_2, and 1a>b01\ge a > b\ge 0, then [L1:a,L2:(1a)][L1:b,L2:(1b)][L_1:a, L_2:(1-a)] \succ [L_1:b, L_2:(1-b)].

The last axiom concerns compound lotteries:

Compound Lotteries: Suppose that [L1:p1,,Ln,pn][L_1:p_1,\ldots, L_n,p_n] is a compound lottery, where for each i=1,,ni=1,\ldots, n, we have Li=[x1:p1i,,xn:pni]L_i=[x_1:p_1^i,\ldots, x_n:p_n^i]. Then, [L1:p1,,Ln,pn][x1:(p1p11+p2p12+pnp1n),,x1:(p1pn1+p2pn2+pnpnn)][L_1:p_1,\ldots, L_n,p_n]\sim [x_1:(p_1p_1^1+ p_2p_1^2 + \cdots p_np_1^n),\ldots, x_1:(p_1p_n^1+ p_2p_n^2 + \cdots p_np_n^n)]

The axiom means that decision makers do not get any utility from the "thrill of gambling". That is, what matters to the decision maker is how likely she is to receive prizes that she prefers. For example, suppose that L1=[x:1]L_1=[x:1] and L2=[y1:0.2,y2:0.4,y3:0.4]L_2=[y_1:0.2, y_2:0.4, y_3:0.4]. Then, the decision maker is assumed to be indifferent between the compound lottery L3=[L1:0.3,L2:0.7]L_3=[L_1:0.3, L_2:0.7] and the simple lottery L4=[x:0.3,y1:0.14,y2:0.28,y3:0.28]L_4=[x:0.3, y_1:0.14, y_2:0.28, y_3:0.28].

The von Neumann-Morgentern Representation Theorem A binary relation \succeq on L\mathcal{L} satisfies Preference, Independence, Continuity and Compound Lotteries iff \succeq is representable by a linear utility function V:RV:\mathcal\rightarrow\mathbb{R}.

Moreover, V:LRV':\mathcal{L}\rightarrow\mathbb{R} represents \succeq iff there exists real numbers c>0c>0 and dd such that V()=cV()+dV'(\cdot)=cV(\cdot)+d. ("VV is unique up to linear transformations.")

One consequence of the von Neumann-Morgenstern Theorem is that a preference ordering generated by a value function that is not linear must violate at least one of the von Neumann-Morgenstern axioms. For instance, consider the value function V8V_8. This function is not linear: V8([a:0.5,c:0.5])=0.5u(a)+0.5u(c)+0.2=0.70.5V8([a:1])+0.5V8([c:1])=0.5V_8([a:0.5, c:0.5]) = 0.5* u(a) + 0.5 * u(c) + 0.2 = 0.7\ne 0.5*V_8([a:1]) + 0.5 * V_8([c:1]) = 0.5 (Recall that we identify each item in XX with the sure-thing lottery.)

This means that the preference ordering V8\succeq_{V_8} generated by V8V_8 must violate at least one the 4 axioms used in the von Neumann-Morgenstern Theorem.

Since V8\succeq_{V_8} is represented by a utility function on the lotteries (i.e., it assigns a real number to every lottery), the Utility Theorem shows that V8\succeq_{V_8} is complete and transitive. It is also easy to see that V8\succeq_{V_8} satisfies Compound Lotteries.

To show that V8\succeq_{V_8} violates the Independence Axiom, we must find three lotteries L1L_1, L2L_2, L3L_3 and a p(0,1]p\in (0,1] such that L1V8L2L_1\succeq_{V_8} L_2 but [L1:p,L3:(1p)]̸V8[L2:p,L3:(1p)][L_1:p, L_3:(1-p)]\not\succeq_{V_8} [L_2:p, L_3:(1-p) ].

# define some variables to simplify the code A = "a" B = "b" C = "c" prizes = [A, B, C] utils = {A:1, B:0.5, C:0} # a lottery component is a named tuple with a prize element and pr (probability) element LC = collections.namedtuple('LC', 'prize pr') # lotteries are lists of LC objects def is_sure_thing(L): return any([lc.prize in prizes and lc.pr == 1 for lc in L]) def is_simple_lottery(L): return all([type(lc.prize) != list or is_sure_thing(lc.prize) for lc in L]) def get_prize(lc): prize = None if type(lc.prize) != list: prize = lc.prize elif is_sure_thing(lc.prize): prize = [_lc.prize for _lc in lc.prize if _lc.pr == 1][0] return prize def find_value(potential_lottery): if type(potential_lottery) != list: return utils[potential_lottery] else: return sum(find_value(_lc.prize) * _lc.pr for _lc in potential_lottery) - 0.1 def print_lottery(L): return "[" + ', '.join([str(lc.prize) + ": " + str(lc.pr) for lc in L]) + "]" def eu(L): assert sum(lc.pr for lc in L) == 1, "Probabilities in lotteries must sum to 1: {}".format(L) if is_simple_lottery(L): return sum(utils[get_prize(lc)] * lc.pr for lc in L) else: return sum(find_value(lc.prize) * lc.pr for lc in L) def v8(L): if L in prizes: assert L in utils.keys(), "Error: {} not assigned a utility".format(L) val = utils[L] else: assert sum(lc.pr for lc in L) == 1, "Probabilities in lotteries must sum to 1: {}".format(L) is_sure_thing = any([lc.prize in prizes and lc.pr == 1 for lc in L]) if is_sure_thing: val = utils[[lc.prize for lc in L if lc.prize in prizes and lc.pr == 1][0]] else: val = eu(L) + 0.2 return val
L1 = [LC(prize=A, pr=0.1), LC(prize=B,pr=0.0), LC(prize=C,pr=0.9)] L2 = [LC(prize=A, pr=0.0), LC(prize=B,pr=1.0), LC(prize=C,pr=0.0)] L = [LC(prize=A, pr=0.0), LC(prize=B,pr=0.0), LC(prize=C,pr=1.0)] def find_counter_indep(a): display(Math("V_8(L_1)=V_8(" + print_lottery(L1) + ")=" + str(round(v8(L1),3)))) display(Math("V_8(L_2)=V_8(" + print_lottery(L2) + ")=" + str(round(v8(L2),3)))) display(Math("L_2 \succ_{V_8} L_1")) L3 = [LC(prize=L1, pr=a), LC(prize=L,pr=1-a)] L4 = [LC(prize=L2, pr=a), LC(prize=L,pr=1-a)] if a == 0.0: print("The probability cannot be 0.") if not v8(L4) > v8(L3): print("This is a violation of the Indpendence Axiom: ") display(Math("V_8([L_1: " + str(round(a, 3)) + ", L_3: " + str(round(1-a, 3)) + "])=" + str(round(v8(L3), 3)))) display(Math("V_8([L_2: " + str(round(a, 3)) + ", L_3: " + str(round(1-a, 3)) + "])=" + str(round(v8(L4), 3)))) display(Math("[L_1: " + str(round(a, 3)) + ", L_3: " + str(round(1-a, 3)) + "] \\not\succ_{V_8}" + "[L_2: " + str(round(a,3)) + ", L_3: " + str(round(1-a, 3)) + "]")) else: print("This is not a violation of the Independence Axiom") display(Math("V_8([L_1: " + str(round(a, 3)) + ", L_3: " + str(round(1-a, 3)) + "])=" + str(v8(L3)))) display(Math("V_8([L_2: " +str(round(a, 3)) + ", L_3: " + str(round(1-a, 3)) + "])=" + str(v8(L4)))) display(Math("[L_2: " + str(round(a, 3)) + ", L_3: " + str(round(1-a, 3)) + "] \succ_{V_8}" + "[L_1: " + str(round(a, 3)) + ", L_3: " + str(round(1-a, 3)) + "]")) print("Consider the lotteries: ") display(Math("L_1 = " + print_lottery(L1) )) display(Math("L_2 = " + print_lottery(L2) )) display(Math("L_3 = " + print_lottery(L) )) #display(Math("L_2 = " + print_lottery(L2) )) print("Find a probability that illustrates a violation of the Independence Axiom") interact(find_counter_indep, a=widgets.FloatSlider(min=0, max=1.0, value=1.0, step=0.01, description="$p$=")) print()
Consider the lotteries:

L1=[a:0.1,b:0.0,c:0.9]\displaystyle L_1 = [a: 0.1, b: 0.0, c: 0.9]

L2=[a:0.0,b:1.0,c:0.0]\displaystyle L_2 = [a: 0.0, b: 1.0, c: 0.0]

L3=[a:0.0,b:0.0,c:1.0]\displaystyle L_3 = [a: 0.0, b: 0.0, c: 1.0]

Find a probability that illustrates a violation of the Independence Axiom

To show that V8\succeq_{V_8} violates the Continuity Axiom, we must find three lotteries L1L_1, L2L_2, L3L_3 and a such that L1V8L2L3L_1\succ_{V_8} L_2\succ L_3 but there is no p(0,1)p\in (0,1) such that L2[L1:p,L3:(1p)]L_2\sim [L_1:p, L_3:(1-p)].

To illustrate, let L1=[a:0.5,c:0.5]L_1=[a:0.5, c:0.5], L2=[b:1]L_2=[b:1] and L3=[c:1]L_3=[c:1]. We have L1V8L2V8L3L_1\succ_{V_8}L_2\succ_{V_8}L_3, and note in th graph below that for p=0.8p=0.8, L2[L1:p,L3:(1p)]L_2\sim [L_1:p, L_3:(1-p)].

xs = np.arange(0.0, 1.0, 0.001) L2 = [LC(prize=A, pr=0.0), LC(prize=B, pr=1.0), LC(prize=C, pr=0.0)] L1 = [LC(prize=A, pr=0.5), LC(prize=B, pr=0.0), LC(prize=C, pr=0.5)] L3 = [LC(prize=A, pr=0.0), LC(prize=B, pr=0.0), LC(prize=C, pr=1.0)] ys = [v8([LC(prize=L1, pr=p), LC(prize=L3, pr=(1-p))]) for p in xs] #ys_EU = [eu([LC(prize=L1, pr=p), LC(prize=L3, pr=(1-p))]) for p in xs] fig, ax = plt.subplots() ax.plot(xs, ys, lw=3, label="$V_8([L1:p, L3:1-p])$") #ax.plot(xs, ys_EU, "--", alpha=0.6, lw=2, label="$EU([L1:p, L3:1-p])$") ax.plot([0,1], [v8(L1), v8(L1)], label="L1: $V_8({})$".format(print_lottery(L1))) ax.plot([0,1], [v8(L2), v8(L2)], label="L2: $V_8({})$".format(print_lottery(L2))) ax.plot([0,1], [v8(L3), v8(L3)], label="L3: $V_8({})$".format(print_lottery(L3))) ax.set(xlabel='probabilities', ylabel='value', title=' ') plt.legend(bbox_to_anchor=(1.05, 1), loc='upper left', borderaxespad=0.) plt.show()
Image in a Jupyter notebook

For the above lotteries: L1=[a:0.5,c:0.5]L_1=[a:0.5, c:0.5] and L3=[c:1]L_3=[c:1], find a lottery L2L_2 such that:

  1. L1L2L3L_1\succ L_2\succ L_3

  2. There is no pp such that L2[L1:p,L3:(1p)]L_2\sim [L_1:p, L_3:(1-p)].

def counter_example_continuity(p1,p2,p3): xs = np.arange(0.0, 1.0, 0.001) if math.fabs((p1+p2+p3) - 1) > 0.000000001: print(f"Not a probability: {p1}, {p2}, {p3}") else: L1 = [LC(prize=A, pr=0.5), LC(prize=B, pr=0.0), LC(prize=C, pr=0.5)] L2 = [LC(prize=A, pr=p1), LC(prize=B, pr=p2), LC(prize=C, pr=p3)] L3 = [LC(prize=A, pr=0.0), LC(prize=B, pr=0.0), LC(prize=C, pr=1.0)] if v8(L1) > v8(L2) and v8(L2)> v8(L3): ys = [v8([LC(prize=L1, pr=p), LC(prize=L3, pr=(1-p))]) for p in xs] fig, ax = plt.subplots() ax.plot(xs, ys, lw=3, label="$V_8([L1:p, L3:1-p])$") ax.plot([0,1], [v8(L1), v8(L1)], label="L1: $V_8({})$".format(print_lottery(L1))) ax.plot([0,1], [v8(L2), v8(L2)], label="L2: $V_8({})$".format(print_lottery(L2))) ax.plot([0,1], [v8(L3), v8(L3)], label="L3: $V_8({})$".format(print_lottery(L3))) ax.set(xlabel='probabilities', ylabel='value', title=' ') plt.legend(bbox_to_anchor=(1.05, 1), loc='upper left', borderaxespad=0.) plt.show() else: if not v8(L1) > v8(L2): display(Math("L_1 = " + print_lottery(L1))) display(Math("L_2 = " + print_lottery(L2))) display(Math("V_8(L_1) = " + str(round(v8(L1), 3)))) display(Math("V_8(L_2) = " + str(round(v8(L2), 3)))) display(Math("L_1\\not\succ L_2")) if not v8(L2)> v8(L3): display(Math("L_2 = " + print_lottery(L2))) display(Math("L_3 = " + print_lottery(L3))) display(Math("V_8(L_2) = " + str(round(v8(L2), 3)))) display(Math("V_8(L_3) = " + str(round(v8(L3), 3)))) display(Math("L2\\not\succ L_3")) interact_manual(counter_example_continuity, p1=widgets.FloatSlider(min=0.0, max=1.0, value=0.0, step=0.01, description="$p(a)=$"), p2=widgets.FloatSlider(min=0.0, max=1.0, value=0.0, step=0.01, description="$p(b)=$"), p3=widgets.FloatSlider(min=0.0, max=1.0, value=0.0, step=0.01, description="$p(c)=$")) print()