Fair Division:

(^a)ij : Value of good i to person j.
(^x)ij : Allocation of good i that person j recieves.
μ : Amount of money to be divided.
(Subscript[d, j]) : Allocation of money person j recieves.
m : Number of people claiming equal ownership of the goods.
n : Number of goods being divided.

Feasible Region:

(Underoverscript[ ∑, (j=1), m])(Subscript[x, ij]) = 1   and   (Underoverscript[ ∑, (j=1), m])(Subscript[d, j]) = μ  for 0≤(Subscript[x, ij])≤1 and  (Subscript[d, j]) ≥ 0.
Assumptions: Goods are divisible, additive and proportionate. There can be no negeative transactions.

Each point of the payoff region: {(Subscript[d, j])+(Underoverscript[ ∑, (i=1), n])(Subscript[a, i1])(Subscript[x, i1]), (Subscript[d, j])+(Underoverscript[ ∑, (i=1), n])(Subscript[a, i2])(Subscript[x, i2]), ... ,  (Underoverscript[(Subscript[d, j])+ ∑, (i=1), n])(Subscript[a, im])(Subscript[x, im])}

Efficient:

An allocation x, d is efficient if there does not exist an allocation y,e, where  d+(Underoverscript[ ∑, (i=1), n]) (Subscript[a, ij])x ≤ e+(Underoverscript[ ∑, (i=1), n])(Subscript[a, ij])y  for all j and  d+(Underoverscript[ ∑, (i=1), n]) (Subscript[a, ij])x < e+(Underoverscript[ ∑, (i=1), n])(Subscript[a, ij])y  for at least one j.

Value Equitable:

For all j and k, (Subscript[d, j])+(Underoverscript[ ∑, (i=1), n])(Subscript[a, ij])(Subscript[x, ij]) = (Subscript[d, k])+(Underoverscript[ ∑, (i=1), n])(Subscript[a, ik])(Subscript[x, ik])

Share Equitable:

For all j and k, (((Subscript[d, j])+(Underoverscript[ ∑, (i=1), n])(Subscript[a, ij])(Subscript[x, ij]))/(d+(Underoverscript[ ∑, (i=1), n])(Subscript[a, ij]))) = (((Subscript[d, k])+(Underoverscript[ ∑, (i=1), n])(Subscript[a, ik])(Subscript[x, ik]))/(d+(Underoverscript[ ∑, (i=1), n])(Subscript[a, ik])))

Envy Free:

For all j and k, (Subscript[d, j])+(Underoverscript[ ∑, (i=1), n])(Subscript[a, ij])(Subscript[x, ij]) ≥ (Subscript[d, k])+(Underoverscript[ ∑, (i=1), n])(Subscript[a, ij])(Subscript[x, ik])

Manipulate[
range=300;
trans[x_,y_]:={a*x+y,b(1-x)+100-y};
transB[x_,y_]:={1-x,100-y};
maxX=trans[1,100][[1]];
maxY=trans[0,0][[2]];
max=Max[maxX,maxY];
axes=Which[view=="Proportionate",All,view=="Scaled",{{0,max},{0,max}},view=="Fixed",{{0,range+100},{0,range+100}}];
ev1y=-(1/2)*a+50;
ev1x =((1/2)*a+50)/a;
ev2y =-(1/2)*b+50;
ev2x = ((1/2)*b+50)/b;
se1y=If[((b+100)*(a+100))/(b+a+200)>100,100,((b+100)*(a+100))/(b+a+200)];
se1x=If[se1y==100,((b+100)*(a+100)-(a+b+200)*100)/(2a*b+100(a+b)),0];
se2x=If[((b+100)*(a+100))/(2a*b+100(a+b))>1,1,((b+100)*(a+100))/(2a*b+100(a+b))];
se2y=If[se2x==1,((b+100)*(a+100)-2a*b-100(a+b))/(a+b+200),0];
ve1y=If[(b+100)/2>100,100,(b+100)/2];
ve1x=If[ve1y==100,(b-100)/(a+b),0];
ve2x=If[(b+100)/(a+b)>1,1,(b+100)/(a+b)];
ve2y=If[ve2x==1,(100-a)/2,0];
TabView[{{"pay","Payoffs" -> Column[{PopupMenu[Dynamic[view],{"Proportionate","Scaled","Fixed"}],Dynamic[
LocatorPane[Dynamic[p3],If[a≠b,p1={(p3[[1]]+p3[[2]]-b-100)/(a-b),(a*b+100a-b*p3[[1]]-a*p3[[2]])/(a-b)};p2={1-(p3[[1]]+p3[[2]]-b-100)/(a-b),100-(a*b+100a-b*p3[[1]]-a*p3[[2]])/(a-b)};,payPt={Max[0,Min[p3[[1]],trans[1,100][[1]]]],trans[0,0][[2]]-Max[0,Min[p3[[1]],trans[1,100][[1]]]]};p1={0,payPt[[1]]};p2=transB[0,payPt[[1]]];clicked=p1;
ptToLine={If[0≤payPt[[1]]≤100,{0,payPt[[1]]},{(payPt[[1]]-100)/a,100}],If[0≤(payPt[[1]]-a)≤100,{1,payPt[[1]]-a},{payPt[[1]]/a,0}]};];
Style[Graphics[
{Opacity[.5],
Blue,
If[a≠b,Polygon[{{trans[0,0],trans[0,100],trans[1,100],trans[1,0]}}],Line[{trans[0,0],trans[1,100]}]],
Red,Thickness[.01],
If[eff==True,
Which[a>b,Line[{trans[0,0],trans[1,0],trans[1,100]}],a<b,Line[{trans[0,0],trans[0,100],trans[1,100]}],a==b,Line[{trans[0,0],trans[1,100]}]]],
Purple,
If[equS==True,Line[{trans[se1x,se1y],trans[se2x,se2y]}]],
Orange,
If[equV==True,Line[{trans[ve1x,ve1y],trans[ve2x,ve2y]}]],
Green,
If[evf==True,
Which[a>b,
If[ev2y≥0&&ev1x≤1,Polygon[{trans[1/2,50],trans[1,ev2y],trans[1,0],trans[ev1x,0]}],
If[ev1y≥0,Polygon[{trans[1/2,50],trans[1,ev2y],trans[1,ev1y]}],
Polygon[{trans[1/2,50],trans[ev2x,0],trans[ev1x,0]}]]],
a<b,If[ev1y≥0&&ev2x≤1,Polygon[{trans[1/2,50],trans[0,100-ev1y],trans[0,100],trans[1-ev2x,100]}],
If[ev2y≥0,Polygon[{trans[1/2,50],trans[0,100-ev1y],trans[0,100-ev2y]}],
Polygon[{trans[1/2,50],trans[1-ev1x,100],trans[1-ev2x,100]}]]],
a==b,Line[{trans[se1x,se1y],trans[se2x,se2y]}]]],
Black,PointSize[Large],Opacity[1],
If[a≠b,Dynamic[Point[trans[Max[0,Min[p1[[1]],1]],
Max[0,Min[p1[[2]],100]]]]],Dynamic[Point[{payPt}]]]
},
Axes->True,AspectRatio->1/1,PlotRegion->{{0,.95},{0,.95}},PlotRange->axes, AxesLabel->{"Juan's Payoff","Lucy's Payoff"},ImageSize->Medium],Antialiasing->True],
Appearance->None
]]},Right]},
{"share","Shares" -> Dynamic[
LocatorPane[Dynamic[p3],If[a≠b,p1={(p3[[1]]+p3[[2]]-b-100)/(a-b),(a*b+100a-b*p3[[1]]-a*p3[[2]])/(a-b)};p2={1-(p3[[1]]+p3[[2]]-b-100)/(a-b),100-(a*b+100a-b*p3[[1]]-a*p3[[2]])/(a-b)};,payPt={Max[0,Min[p3[[1]],trans[1,100][[1]]]],trans[0,0][[2]]-Max[0,Min[p3[[1]],trans[1,100][[1]]]]};p1={0,payPt[[1]]};p2=transB[0,payPt[[1]]];clicked=p1;
ptToLine={If[0≤payPt[[1]]≤100,{0,payPt[[1]]},{(payPt[[1]]-100)/a,100}],If[0≤(payPt[[1]]-a)≤100,{1,payPt[[1]]-a},{payPt[[1]]/a,0}]};];
Style[Graphics[
{Opacity[.5],
Blue,
If[a≠b,Polygon[{{trans[0,0],trans[0,100],trans[1,100],trans[1,0]}}],Line[{trans[0,0],trans[1,100]}]],
Red,Thickness[.01],
If[eff==True,
Which[a>b,Line[{trans[0,0],trans[1,0],trans[1,100]}],a<b,Line[{trans[0,0],trans[0,100],trans[1,100]}],a==b,Line[{trans[0,0],trans[1,100]}]]],
Purple,
If[equS==True,Line[{trans[se1x,se1y],trans[se2x,se2y]}]],
Orange,
If[equV==True,Line[{trans[ve1x,ve1y],trans[ve2x,ve2y]}]],
Green,
If[evf==True,
Which[a>b,
If[ev2y≥0&&ev1x≤1,Polygon[{trans[1/2,50],trans[1,ev2y],trans[1,0],trans[ev1x,0]}],
If[ev1y≥0,Polygon[{trans[1/2,50],trans[1,ev2y],trans[1,ev1y]}],
Polygon[{trans[1/2,50],trans[ev2x,0],trans[ev1x,0]}]]],
a<b,If[ev1y≥0&&ev2x≤1,Polygon[{trans[1/2,50],trans[0,100-ev1y],trans[0,100],trans[1-ev2x,100]}],
If[ev2y≥0,Polygon[{trans[1/2,50],trans[0,100-ev1y],trans[0,100-ev2y]}],
Polygon[{trans[1/2,50],trans[1-ev1x,100],trans[1-ev2x,100]}]]],
a==b,Line[{trans[se1x,se1y],trans[se2x,se2y]}]]],
Black,PointSize[Large],Opacity[1],
If[a≠b,Dynamic[Point[trans[Max[0,Min[p1[[1]],1]],
Max[0,Min[p1[[2]],100]]]]],Dynamic[Point[{payPt}]]]
},
Axes->True,AspectRatio->1/1,PlotRegion->{{0,.95},{0,.95}},PlotRange->All, Ticks-> Table[Table[{i(n/10),10i},{i,0,10}],{n,{maxX,maxY}}],AxesLabel->{"Juan's Payoff","Lucy's Payoff"},ImageSize->Medium],Antialiasing->True],
Appearance->None
]]},
{"juan","Juan's Portion" -> Dynamic[
LocatorPane[Dynamic[p1],p2={1-p1[[1]],100-p1[[2]]};p3=trans[p1[[1]],p1[[2]]];If[clicked≠p1 || a≠b,ptToLine={}];
Graphics[{
Opacity[.5],
Blue,
Polygon[{{0,0},{0,100},{1,100},{1,0}}],
Red,Thickness[.02],
If[eff==True,
Which[a>b,Line[{{0,0},{1,0},{1,100}}],a<b,Line[{{0,0},{0,100},{1,100}}],a==b,Polygon[{{0,0},{0,100},{1,100},{1,0}}]]],
Purple,Thickness[.01],
If[equS==True,Line[{{se1x,se1y},{se2x,se2y}}]],
Orange,
If[equV==True,Line[{{ve1x,ve1y},{ve2x,ve2y}}]],
Green,
If[evf==True,
Which[a>b,
If[ev2y≥0&&ev1x≤1,Polygon[{{1/2,50},{1,ev2y},{1,0},{ev1x,0}}],
If[ev1y≥0,Polygon[{{1/2,50},{1,ev2y},{1,ev1y}}],
Polygon[{{1/2,50},{ev2x,0},{ev1x,0}}]]],
a<b,If[ev1y≥0&&ev2x≤1,Polygon[{{1/2,50},{0,100-ev1y},{0,100},{1-ev2x,100}}],
If[ev2y≥0,Polygon[{{1/2,50},{0,100-ev1y},{0,100-ev2y}}],
Polygon[{{1/2,50},{1-ev1x,100},{1-ev2x,100}}]]],
a==b,Line[{{se1x,se1y},{se2x,se2y}}]]],
Black,PointSize[Large],Opacity[1],
If[ptToLine=={},Dynamic[Point[{Max[0,Min[p1[[1]],1]],Max[0,Min[p1[[2]],100]]}]],Line[ptToLine]]
},
Axes->True,AspectRatio->1/1,PlotRegion->{{0,.95},{0,.95}},AxesLabel->{"Good","Cash"}],Appearance->None
]]},
{"lucy","Lucy's Portion" -> Dynamic[
LocatorPane[Dynamic[p2],p1={1-p2[[1]],100-p2[[2]]};p3=trans[1-p2[[1]],100-p2[[2]]];If[clicked≠p1 || a≠b,ptToLine={}];
Graphics[{
Opacity[.5],
Blue,
Polygon[{{0,0},{0,100},{1,100},{1,0}}],
Red,Thickness[.02],
If[eff==True,
Which[a<b,Line[{{0,0},{1,0},{1,100}}],a>b,Line[{{0,0},{0,100},{1,100}}],a==b,Polygon[{{0,0},{0,100},{1,100},{1,0}}]]],
Purple,Thickness[.01],
If[equS==True,Line[{transB[se1x,se1y],transB[se2x,se2y]}]],
Orange,
If[equV==True,Line[{transB[ve1x,ve1y],transB[ve2x,ve2y]}]],
Green,
If[evf==True,
Which[a>b,
If[ev2y≥0&&ev1x≤1,Polygon[{transB[1/2,50],transB[1,ev2y],transB[1,0],transB[ev1x,0]}],
If[ev1y≥0,Polygon[{transB[1/2,50],transB[1,ev2y],transB[1,ev1y]}],
Polygon[{transB[1/2,50],transB[ev2x,0],transB[ev1x,0]}]]],
a<b,If[ev1y≥0&&ev2x≤1,Polygon[{transB[1/2,50],transB[0,100-ev1y],transB[0,100],transB[1-ev2x,100]}],
If[ev2y≥0,Polygon[{transB[1/2,50],transB[0,100-ev1y],transB[0,100-ev2y]}],
Polygon[{transB[1/2,50],transB[1-ev1x,100],transB[1-ev2x,100]}]]],
a==b,Line[{{se1x,se1y},{se2x,se2y}}]]],
Black,PointSize[Large],Opacity[1],
If[ptToLine=={},Dynamic[Point[{Max[0,Min[p2[[1]],1]],Max[0,Min[p2[[2]],100]]}]],Line[{transB[ptToLine[[1,1]],ptToLine[[1,2]]],transB[ptToLine[[2,1]],ptToLine[[2,2]]]}]]
},
Axes->True,AspectRatio->1/1,PlotRegion->{{0,.95},{0,.95}},AxesLabel->{"Good","Cash"},Frame->False],Appearance->None
]]}},Dynamic[choice],ImageSize-> All],
{{a,220,"Juan's Valuation"},1,range,1,ControlType->Slider,Appearance->"Labeled"},{{b,20,"Lucy's Valuation"},1,range,1,ControlType->Slider,Appearance->"Labeled"},{{choice,"juan"},None},{{view,"Scaled"},None},{{p1,{0,0}},None},{{p2,{0,0}},None},{{p3,trans[.4,60]},None},{{ptToLine,{}},None},{{clicked,{-50,-50}},None},Row[{Control[{{eff,False,Style["Efficient",FontColor->RGBColor[.8,0,.2]]},{True,False}}],Control[{{equS,False,Style["Share Equitable",FontColor->RGBColor[.5,0,.6]]},{True,False}}],Control[{{equV,False,Style["Value Equitable",FontColor->RGBColor[.7,.3,.2]]},{True,False}}],Control[{{evf,False,Style["Envy Free",FontColor->RGBColor[0,.5,.5]]},{True,False}}]},Spacer[10]],TrackedSymbols:>{a,b,eff,equS,equV,evf,choice,view,p1,p2,p3}
]