Difference between revisions of "Proofs without words"

m (Script: Adding asymptote category)
m (temp save)
Line 52: Line 52:
 
-->
 
-->
 
== Summations ==
 
== Summations ==
<center><asy>unitsize(15); defaultpen(linewidth(0.7));
+
<center><asy>defaultpen(linewidth(0.7)); unitsize(15); pen heavy = linewidth(2);  
int n = 6; pair shiftR = ((n+2),0); real r = 0.3;
 
pen colors(int i){ return rgb(i/n,0.4+i/(2n),1-i/n); } /* shading */
 
void htick(pair A, pair B,pair ticklength = (0.15,0)){ draw(A--B ^^ A-ticklength--A+ticklength ^^ B-ticklength--B+ticklength); }
 
 
 
/* triangle */
 
draw((-r,0)--(-r,-n+1)^^(r,-n+1)--(r,0),linetype("4 4"));
 
for(int i = 0; i < n; ++i)
 
draw((-i,-i)--(i,-i));
 
for(int i = 0; i < n; ++i)
 
for(int j = 0; j < 2*i+1; ++j)
 
  filldraw(CR((j-i,-i),r),colors(i));
 
 
 
/* square */
 
draw(r*expi(pi/4)+shiftR--(n-1,-n+1)+r*expi(pi/4)+shiftR^^r*expi(5*pi/4)+shiftR--r*expi(5*pi/4)+(n-1,-n+1)+shiftR,linetype("4 4"));
 
for(int i = 0; i < n; ++i)
 
draw(shiftR+(0,-i)--shiftR+(i,-i)--shiftR+(i,0));
 
for(int i = 0; i < n; ++i)
 
for(int j = 0; j < n; ++j)
 
  filldraw(CR((j,-i)+shiftR,r),colors((i>j)?i:j));
 
 
 
htick(shiftR+(-1,r),shiftR+(-1,-n+1-r)); label("$n$",shiftR+(-1,(-n+1)/2),W,fontsize(10));
 
</asy><br>
 
 
 
The sum of the first <math>n</math> odd natural numbers is <math>n^2</math>.<br><br>
 
</center>
 
 
 
<center><asy> defaultpen(linewidth(0.7)); unitsize(15);
 
int n = 6; pair shiftR = ((n+2),0); real r = 0.3;
 
pen colors(int i){ return rgb(0.4+i/(2n),i/n,1-i/n); } /* shading */
 
void htick(pair A, pair B,pair ticklength = (0.15,0)){
 
draw(A--B);
 
draw(A-ticklength--A+ticklength);
 
draw(B-ticklength--B+ticklength);
 
}
 
 
 
/* triangle */
 
draw((0.5,0)--(n-0.5,-n+1),linetype("4 4"));
 
for(int i = 0; i < n; ++i)
 
draw((0,-i)--(i,-i));
 
for(int i = 0; i < n; ++i)
 
for(int j = 0; j <= i; ++j)
 
  filldraw(CR((j,-i),r),colors(i));
 
 
/* arc arrow */
 
draw( arc((n,-n+1)/2, (1.5,-1.5), (n-1.5,-1.5), CW) );
 
fill((n-1.5,-1.5) -- (n-1.5,-1.5)+r*expi(5.2*pi/6) -- (n-1.5,-1.5)+r*expi(3.3*pi/6) -- cycle); /* manual arrowhead? avoid resizing */
 
 
 
/* square */
 
draw(shiftR+(0.5,0)--shiftR+(n-0.5,-n+1),linetype("4 4"));
 
for(int i = 0; i < n; ++i)
 
draw(shiftR+(0,-i)--shiftR+(i,-i)^^shiftR+(n,-n+1)-(0,-i)--shiftR+(n,-n+1)-(i,-i));
 
for(int i = 0; i < n; ++i)
 
for(int j = 0; j < n+1; ++j)
 
  filldraw(CR((j,-i)+shiftR,r),colors((j <= i) ? i : n-1-i));
 
 
 
/* labeling and ticks */
 
htick(shiftR+(-1,r),shiftR+(-1,-n+1-r)); label("$n$",shiftR+(-1,(-n+1)/2),W,fontsize(10));
 
htick(shiftR+(-r,-n),shiftR+(n+r-1,-n),(0,0.15)); label("$n$",shiftR+((n-1)/2,-n),S,fontsize(10));
 
htick(shiftR+(n-r,-n),shiftR+(n+r,-n),(0,0.15)); label("$1$",shiftR+(n,-n),S,fontsize(10));
 
</asy><br>
 
 
 
The sum of the first <math>n</math> positive integers is <math>n(n+1)/2</math>.<br><br>
 
</center>
 
 
 
<center><asy>unitsize(15); defaultpen(linewidth(0.7));
 
int n = 6; real r = 0.35, h = 3/4; /* radius size and horizontal spacing */
 
pair shiftR = (h*(n+1)+r, 0);
 
 
 
pen colors(int i){  /* shading */
 
if(i == n) return red;
 
return rgb(5/n,0.4+5/(2n),1-5/n);
 
}
 
void htick(pair A, pair B, pair ticklength = (0.15,0)){
 
draw(A--B ^^ A-ticklength--A+ticklength ^^ B-ticklength--B+ticklength);
 
}
 
void makeshiftarrow(pair A, real dir, real arrowlength = r){  /* Arrow option resizes */
 
  fill(A--A+arrowlength*expi(dir+pi/8)--A+arrowlength*expi(dir-pi/8)--cycle);
 
}
 
pair getCenter(int i, int j){ return ((2*j-i)*h,-i);}
 
 
 
/* triangle */
 
for(int i = 0; i < n+1; ++i){
 
draw((-i*h,-i)--(i*h,-i));  /* horizontal lining */
 
for(int j = 0; j <= i; ++j)
 
  filldraw(circle(getCenter(i,j),r), colors(i));
 
}
 
 
 
/* fill in circle in row 4, column 3 */
 
filldraw(circle(getCenter(3,2),r),blue);
 
draw(getCenter(n,2)-- getCenter(3,2)-- getCenter(n,n+2-3));
 
makeshiftarrow(getCenter(n,2),pi/4,0.5); makeshiftarrow(getCenter(n,n+2-3),3*pi/4,0.5);  
 
  
htick(shiftR+(-1,r),shiftR+(-1,-n+1-r)); label("$n$",shiftR+(-1,(-n+1)/2),E,fontsize(10));
+
/* global configurable variables */
</asy><br>
+
int n2 = 4, n = floor(n2*(n2+1)/2);      // number of colors, number of layers
 +
real h = 0.6;                            // scale factor of diagram
 +
pair shiftR1 = (n*h+1,0),                 // middle diagram shift offset
 +
      shiftR2 = shiftR1 + (n*h+1,0);     // right diagram shift offset
  
The sum of the first <math>n</math> positive integers is <math>{n+1 \choose 2}</math>.{{ref|1}}<br><br>
+
int lvl(int i) { return ceil(((8*i+9)^.5-1)/2); } /* return level of square i */
</center>
 
  
<center><asy>defaultpen(linewidth(0.7)); unitsize(15); pen heavy = linewidth(2);
+
pen colors(int i) { return rgb(0.2+lvl(i)/6,0.3+lvl(i)/7,1-lvl(i)/6); } /* shading */  
int n2 = 4, n = floor(n2*(n2+1)/2); real h = 0.6; pair shiftR1 = (n*h+1,0), shiftR2 = shiftR1 + (n*h+1,0); /* global configurable variables */
 
  
int lvl(int i){ return ceil(((8*i+9)^.5-1)/2); }
+
/* draw tick line with label, segment between A and B */
pen colors(int i){ return rgb(0.2+lvl(i)/6,0.3+lvl(i)/7,1-lvl(i)/6); } /* shading */  
+
void htick(pair A, pair B,pair ticklength = (0.15,0)) { draw(A--B ^^ A-ticklength--A+ticklength ^^ B-ticklength--B+ticklength); }  
void htick(pair A, pair B,pair ticklength = (0.15,0)){ draw(A--B ^^ A-ticklength--A+ticklength ^^ B-ticklength--B+ticklength); }  
 
  
 
  /* gradient triangle */
 
  /* gradient triangle */
 
for(int i = 0; i < n; ++i){
 
for(int i = 0; i < n; ++i){
 
  for(int j = 0; j < 2*i+1; ++j){
 
  for(int j = 0; j < 2*i+1; ++j){
   filldraw(shift(shiftR1)*xscale(h)*yscale(h)*shift((j-i,-i))*unitsquare,colors(i));  
+
   filldraw(shift(shiftR1)*scale(h)*shift((j-i,-i))*unitsquare,colors(i));  
 +
  /*
 
   if(j % lvl(i) == 0 && j != lvl(i)^2)
 
   if(j % lvl(i) == 0 && j != lvl(i)^2)
   draw(shift(shiftR1)*xscale(h)*yscale(h)*shift((j-i,-i))*((0,0)--(0,1)--(1,1)), heavy);
+
   draw(shift(shiftR1)*scale(h)*shift((j-i,-i))*((0,0)--(0,1)--(1,1)), heavy);
   if(j == 2*i)  /* right border */
+
   if(j == 2*i)  // right border
   draw(shift(shiftR1)*xscale(h)*yscale(h)*shift((j-i,-i))*((1,0)--(1,1)--(0,1)), heavy);
+
   draw(shift(shiftR1)*scale(h)*shift((j-i,-i))*((1,0)--(1,1)--(0,1)), heavy);
 +
  */
 
  }
 
  }
 +
draw(shift(shiftR1)*scale(h)*shift((-i,-i))*((0,0)--(0,1)--(1,1)), heavy);
 +
draw(shift(shiftR1)*scale(h)*shift(( i,-i))*((1,0)--(1,1)--(0,1)), heavy);
 
}  
 
}  
  
for(int i = 0; i < n2; ++i)
+
// return kth triangular number (actually, 1+2+...+k)   
   draw(shift(shiftR1)*xscale(h)*yscale(h)*shift((-i*(i+1)/2,-i*(i+1)/2))*((0,1)--(2*i*(i+1)/2+1,1)), heavy);
+
int tri(int k) { return ((int) (k*(k+1)/2)); } 
draw(shift(shiftR1)*xscale(h)*yscale(h)*shift((-n2*(n2+1)/2,-n2*(n2+1)/2))*((1,1)--(2*n2*(n2+1)/2,1)), heavy);
+
 
 +
for(int i = 0; i < n2; ++i) {
 +
draw(shift(shiftR1)*scale(h)*shift((0-tri(i),0-tri(i)))*((0,1)--(2*tri(i)+1,1)), heavy);
 +
if(i % 2 == 0) {
 +
  // vertical heavy lines for odd layers
 +
   draw(shift(shiftR1)*scale(h)*((-i/2,1-tri(i))--(-i/2,-i-tri(i))), heavy);
 +
  draw(shift(shiftR1)*scale(h)*((1+i/2,1-tri(i))--(1+i/2,-i-tri(i))), heavy); 
 +
}
 +
else {
 +
  // jagged heavy lines for even layers
 +
  pair jag1 = (-(i+1)/2,-(i-1)/2-tri(i)), jag2 = (1+(i+1)/2,-(i-1)/2-tri(i));
 +
  draw(shift(shiftR1)*scale(h)*(jag1+(0,1+(i-1)/2) -- jag1 -- jag1+(1,0) -- jag1+( 1,-(i+1)/2)), heavy);
 +
  draw(shift(shiftR1)*scale(h)*(jag2+(0,1+(i-1)/2) -- jag2 -- jag2-(1,0) -- jag2+(-1,-(i+1)/2)), heavy);    
 +
}
 +
}
 +
draw(shift(shiftR1)*scale(h)*shift((-n2*(n2+1)/2,-n2*(n2+1)/2))*((1,1)--(2*n2*(n2+1)/2,1)), heavy);
  
 
  /* gradient square */
 
  /* gradient square */
for(int i = 0; i < n; ++i)
+
for(int i = 0; i < n; ++i)  
 
  for(int j = 0; j < n; ++j)
 
  for(int j = 0; j < n; ++j)
   filldraw(shift(shiftR2)*xscale(h)*yscale(h)*shift((j,-i))*unitsquare,colors((i>j)?i:j));
+
   filldraw(shift(shiftR2)*scale(h)*shift((j,-i))*unitsquare, colors((i>j)?i:j));
 +
for(int i = 0; i < n2; ++i) {
 +
draw(shift(shiftR2)*scale(h)*((0,0-tri(i))--(tri(i),0-tri(i))--(tri(i),0)),heavy);
 +
}
 +
draw(shift(shiftR2)*scale(h)*shift((0,1-n))*scale(n)*unitsquare, heavy);
 +
 
  
 
  /* n nxn squares */
 
  /* n nxn squares */
 
for(int i = 0; i < n2; ++i){
 
for(int i = 0; i < n2; ++i){
  filldraw(xscale(h)*yscale(h)*shift((-i,-(i+1)*(i+2)/2+1))*xscale(i+1)*yscale(i+1)*unitsquare, colors(floor(i*(i+1)/2)), heavy);   
+
  filldraw(scale(h)*shift((-i,-(i+1)*(i+2)/2+1))*xscale(i+1)*yscale(i+1)*unitsquare, colors(floor(i*(i+1)/2)), heavy);   
 
}
 
}
 
</asy><br>
 
</asy><br>
Line 190: Line 123:
  
 
Another proof of the identity <math>1^3 + 2^3 + \cdots + n^3 = (1+2+\cdots + n)^2</math>.<br><br></center>
 
Another proof of the identity <math>1^3 + 2^3 + \cdots + n^3 = (1+2+\cdots + n)^2</math>.<br><br></center>
 
<center><asy>defaultpen(linewidth(0.7)); unitsize(15); pen sm = fontsize(10);
 
int n = 5, fib = 1, fib2 = 1, xsum = 1, ysum = 0; real h = 0.15;
 
void fillsq(pair A = (0,0), real s, pen p = invisible, pen l = linewidth(1)){ filldraw(shift(A)*xscale(s)*yscale(s)*unitsquare, p, l); }
 
void htick(pair A, pair B, pair ticklength = (0.15,0)){ draw(A--B ^^ A-ticklength--A+ticklength ^^ B-ticklength--B+ticklength); }
 
 
for(int i = 0; i < n; ++i) {
 
fillsq((0,h*ysum),h*fib2,rgb(0.9,1,0.9));
 
fillsq((h*xsum,0),h*fib,rgb(1,0.9,0.9));
 
if(i == n-1){
 
  label("$F_{n}^2$",h*(xsum+fib/2,fib/2),sm);
 
  label("$F_{n-1}^2$",h*(fib2/2,ysum+fib2/2),sm);
 
}
 
else if(i == n-2){
 
  label("$F_{n-2}^2$",h*(xsum+fib/2,fib/2),sm);
 
  label("$F_{n-3}^2$",h*(fib2/2,ysum+fib2/2),sm);
 
}
 
fib = fib + fib2; fib2 = fib - fib2;
 
xsum = fib;
 
ysum = fib2;
 
fib = fib + fib2; fib2 = fib - fib2;
 
}
 
htick(h*(xsum,0)+(1,0),h*(xsum,ysum)+(1,0)); label("$F_n$",h*(xsum,ysum/2)+(1,0), E, sm);
 
htick(h*(0,ysum)+(0,1),h*(xsum-fib+fib2,ysum)+(0,1),(0,0.15)); label("$F_{n-1}$",h*((xsum-fib+fib2)/2,ysum)+(0,1), N, sm);
 
htick(h*(xsum,ysum)+(0,1),h*(xsum-fib+fib2,ysum)+(0,1),(0,0.15)); label("$F_{n}$",h*((2*xsum-fib+fib2)/2,ysum)+(0,1), N, sm);
 
</asy><br>
 
 
The identity <math>F_1^2 + F_2^2 + \cdots + F_n^2 = F_{n} \cdot F_{n+1}</math>, where <math>F_i</math> is the <math>i</math>th [[Fibonacci number]].<br><br></center>
 
 
<center>[[#toc|Back to Top]]</center>
 
 
=== Geometric series ===
 
<center><asy>defaultpen(linewidth(0.7)); unitsize(15);
 
int n = 10;  /* # of iterations */
 
real s = 6; /* square size */
 
pair shiftR = (s+2,0); pen sm = fontsize(10);
 
void fillrect(pair A, pair B = (0,0), pen p = invisible, pen l = linewidth(1)){ filldraw(A--(A.x,B.y)--B--(B.x,A.y)--cycle, p, l); }
 
void htick(pair A, pair B, pair ticklength = (0,0.15)){ draw(A--B ^^ A-ticklength--A+ticklength ^^ B-ticklength--B+ticklength); }
 
 
for(int i = 0; i < 2; ++i) /* left */
 
fillrect((s/2^(ceil(i/2)),s/2^(floor(i/2))));
 
for(int i = 0; i < n; ++i) /* right */
 
fillrect(shiftR,shiftR + (s/2^(ceil(i/2)),s/2^(floor(i/2))));
 
label("$\frac 12$",(s*3/4,s/2),sm); label("$\cdots$",(s*1/4,s/2),sm);
 
label("$\frac 12$",shiftR+(s*3/4,s/2),sm); label("$\cdots$",shiftR+(s*1/4,s/2),sm);
 
label("$\frac 14$",shiftR+(s*1/4,s*3/4),sm); label("$\frac 18$",shiftR+(s*3/8,s/4),sm);
 
htick((0,-1), (s,-1)); htick(shiftR + (0,-1), shiftR + (s,-1));
 
label("$1$",(s/2,-1),S,sm); label("$1$",shiftR+(s/2,-1),S,sm);
 
</asy>
 
The infinite [[geometric series]] <math>\frac 12 + \frac {1}{2^2} + \frac {1}{2^3} + \cdots = 1</math>.<br><br>
 
</center>
 
 
<center><asy> defaultpen(linewidth(0.7)); unitsize(15);
 
int n = 4; real h = 2; pen colors[] = {rgb(0.8,0,0),rgb(0,0.8,0)};
 
void drawTriGrid(real s){
 
for(int i = 0; i < 4; ++i){
 
  draw( (-s*3/2,s*(3/2 - i)) -- (s*3/2,s*(3/2 - i)), linetype("2 2"));
 
  draw( (s*(3/2 - i),-s*3/2) -- (s*(3/2 - i),s*3/2), linetype("2 2"));
 
}
 
}
 
void fillrect(pair A, pair B, pen p){ filldraw(A--(A.x,B.y)--B--(B.x,A.y)--cycle, p, linewidth(1)); }
 
 
for(int i = 0; i < n; ++i) {
 
fillrect( ((-1)^i*-h/3^i*(3/2),-h/3^i*(3/2)) , ((-1)^i*-h/3^i*(1/2),h/3^i*(3/2)) , colors[0]);
 
fillrect(-((-1)^i*-h/3^i*(3/2),-h/3^i*(3/2)) ,-((-1)^i*-h/3^i*(1/2),h/3^i*(3/2)) , colors[1]);
 
fillrect( (-h/3^i*(1/2),(-1)^i*h/3^i*(1/2)) , (h/3^i*(1/2),(-1)^i*h/3^i*(3/2)), colors[0]);
 
fillrect(-(-h/3^i*(1/2),(-1)^i*h/3^i*(1/2)) ,-(h/3^i*(1/2),(-1)^i*h/3^i*(3/2)), colors[1]);
 
drawTriGrid(h/3^i);
 
}
 
</asy><br>
 
 
The infinite [[geometric series]] <math>\frac 13 + \frac {1}{3^2} + \frac {1}{3^3} + \cdots = \frac 12</math>.<br><br>
 
</center>
 
 
<center><asy> defaultpen(linewidth(0.7)); unitsize(15);
 
int n = 10; real h = 6; pen colors[] = {rgb(0.9,0,0),rgb(0,0.9,0),rgb(0,0,0.9)};
 
pair shiftR = (h+3,0);
 
 
void drawEquilaterals(pair A, real s){
 
filldraw(A--A+s*expi(2*pi/3)--A+(-s,0)--cycle,colors[0]);
 
filldraw(A--A+s*expi(2*pi/3)--A+s*expi(1*pi/3)--cycle,colors[1]);
 
filldraw(A--A+s*expi(1*pi/3)--A+(s,0)--cycle,colors[2]);
 
}
 
 
for(int i = 0; i < n; ++i)
 
drawEquilaterals(shiftR + (0,h-h/(2^i) ), (h/(2^(i+1))) *2/3^.5);
 
drawEquilaterals((0,0), h/3^.5); draw((-h/3^.5,0)--(h/3^.5,0)--(0,h)--cycle); label("$\vdots$",(0,3/4*h));
 
</asy><br>
 
 
The infinite [[geometric series]] <math>\frac 14 + \frac {1}{4^2} + \frac {1}{4^3} + \cdots = \frac 13</math>.<br><br>
 
</center>
 
 
<center><asy> defaultpen(linewidth(1)); unitsize(15);
 
int n = 8;  /* number of layers */
 
real h = 3; /* square height */
 
pen colors[] = {rgb(0.8,0,0),rgb(0,0.8,0),rgb(0,0,0.8)};
 
pair shiftL = (-3*h,0); /* amount to shift second square left by */
 
 
void drawSquares(real s, pair A = (0,0)){
 
filldraw(shift(A)*shift(-2*s,  -s)*xscale(s)*yscale(s)*unitsquare,colors[0]);
 
filldraw(shift(A)*shift(-2*s,-2*s)*xscale(s)*yscale(s)*unitsquare,colors[1]);
 
filldraw(shift(A)*shift(-s  ,-2*s)*xscale(s)*yscale(s)*unitsquare,colors[2]);
 
}
 
for(int i = 0; i < n; ++i)
 
drawSquares(h/2^i);
 
drawSquares(h,shiftL); draw(shift(shiftL+(-2*h,-2*h))*xscale(2*h)*yscale(2*h)*unitsquare);
 
label("$\cdots$",shiftL+(-h/2,-h/2));
 
</asy><br>
 
 
Another proof of the identity <math>\frac 14 + \frac {1}{4^2} + \frac {1}{4^3} + \cdots = \frac 13</math>. <br><br>
 
</center>
 
 
<center><asy> unitsize(15); defaultpen(linewidth(1)); pen sm = fontsize(10);
 
real r = 0.7, h = 4.5, n = 10, xsum = 0;
 
void htick(pair A, pair B, pair ticklength = (0,0.15)){ draw(A--B ^^ A-ticklength--A+ticklength ^^ B-ticklength--B+ticklength); }
 
 
filldraw(xscale(h)*yscale(h)*unitsquare,rgb(0.9,1,0.9)); draw((0,0)--(h/(1-r),0)--(0,h));
 
for(int i = 0; i < n; ++i){
 
xsum += r^i;
 
draw((h*xsum,0)--(h*xsum,h*(1-(1-r)*xsum)));
 
htick((h*(xsum-r^i),-1),(h*xsum,-1));
 
if(i < 6)
 
  label("$r^"+(string) i+"$",(h*(xsum-r^i/2),-1),S,sm);
 
else if(i == 8)
 
  label("$\cdots$",(h*(xsum-r^i/2),-1.2),S,sm);
 
}
 
 
/* htick((-1,0),(-1,h),(.15,0)); htick((0,h+1),(h,h+1)); */ htick((h+1,h),(h+1,h*r),(.15,0));
 
label("$1$",(0,h/2),W,sm); label("$1$",(h/2,h),N,sm); label("$1-r$",(h+1,h*(1+r)/2),E,sm);
 
</asy><br><br>
 
 
The infinite [[geometric series]] <math>\sum_{n=0}^{\infty} r^n = \frac{1}{1-r}</math>.<br><br></center>
 
 
<center><asy> unitsize(15); defaultpen(linewidth(1)); pen sm = fontsize(10);
 
real r = 0.55, h = 2.5, n = 7, xsum = 0; pair shiftD = -(0,h*r/(1-r)+2.5);
 
void htick(pair A, pair B, pair ticklength = (0,0.15)){ draw(A--B ^^ A-ticklength--A+ticklength ^^ B-ticklength--B+ticklength); }
 
 
draw((0,h*r/(1-r))--(0,0)--(h*n,0));
 
for(int i = 1; i < n+1; ++i){
 
draw((h*i,h*(r/(1-r)-xsum-r^(i)))--(h*i,h*(r/(1-r)-xsum))--(0,h*(r/(1-r)-xsum)));
 
if(i < 4)
 
  label("$r^"+(string) i+"$", (0,h*(r/(1-r)-xsum-r^(i)/2)), W, sm);
 
htick((h*i,-1),(h*(i-1),-1));
 
if(i < n)
 
  label("$1$",(h*(i-1/2),-1),S,sm);
 
else if(i == n)
 
  label("$\cdots$",(h*(i-1/2),-1.2),S,sm);
 
xsum += r^i;
 
}
 
draw((0,h*r/(1-r))+shiftD--shiftD--(h*n,0)+shiftD);
 
xsum = 0;
 
for(int i = 1; i < n+1; ++i){
 
draw(shiftD+(h*i,0)--shiftD+(h*i,h*(r/(1-r)-xsum))--shiftD+(h*(i-1),h*(r/(1-r)-xsum)));
 
draw(shiftD+(h*i,h*(r/(1-r)-xsum))--shiftD+(0,h*(r/(1-r)-xsum)),linetype("4 4")+linewidth(0.5));
 
if(i < 4)
 
  label("$r^"+(string) i+"$", shiftD+(h*i,h*(r/(1-r)-xsum-r^(i)/2)), ENE, sm);
 
htick(shiftD+(h*i,-1),shiftD+(h*(i-1),-1));
 
if(i < n)
 
  label("$1$",shiftD+(h*(i-1/2),-1),S,sm);
 
else if(i == n)
 
  label("$\cdots$",shiftD+(h*(i-1/2),-1.2),S,sm);
 
xsum += r^i;
 
}
 
</asy><br><br>
 
The [[arithmetic-geometric series]] <math>\sum_{n=1}^{\infty} nr^n = \sum_{n=1}^{\infty} \sum_{i=n}^{\infty} r^i = \sum_{n=1}^{\infty} \frac{r^{-n}}{1-r} = \frac{r}{(1-r)^2}</math>, also known as Gabriel's staircase.{{ref|2}}<br><br></center>
 
 
<center>[[#toc|Back to Top]]</center>
 
  
 
== Geometry ==
 
== Geometry ==

Revision as of 19:46, 22 January 2011

The following demonstrate proofs of various identities and theorems using pictures, inspired from this gallery.

Summations

[asy]defaultpen(linewidth(0.7)); unitsize(15); pen heavy = linewidth(2);   /* global configurable variables */ int n2 = 4, n = floor(n2*(n2+1)/2);       // number of colors, number of layers real h = 0.6;                             // scale factor of diagram pair shiftR1 = (n*h+1,0),                 // middle diagram shift offset        shiftR2 = shiftR1 + (n*h+1,0);     // right diagram shift offset  int lvl(int i) { return ceil(((8*i+9)^.5-1)/2); } /* return level of square i */  pen colors(int i) { return rgb(0.2+lvl(i)/6,0.3+lvl(i)/7,1-lvl(i)/6); } /* shading */   /* draw tick line with label, segment between A and B */ void htick(pair A, pair B,pair ticklength = (0.15,0)) { draw(A--B ^^ A-ticklength--A+ticklength ^^ B-ticklength--B+ticklength); }    /* gradient triangle */ for(int i = 0; i < n; ++i){  for(int j = 0; j < 2*i+1; ++j){   filldraw(shift(shiftR1)*scale(h)*shift((j-i,-i))*unitsquare,colors(i));    /*   if(j % lvl(i) == 0 && j != lvl(i)^2)    draw(shift(shiftR1)*scale(h)*shift((j-i,-i))*((0,0)--(0,1)--(1,1)), heavy);   if(j == 2*i)  // right border    draw(shift(shiftR1)*scale(h)*shift((j-i,-i))*((1,0)--(1,1)--(0,1)), heavy);   */  }  draw(shift(shiftR1)*scale(h)*shift((-i,-i))*((0,0)--(0,1)--(1,1)), heavy);  draw(shift(shiftR1)*scale(h)*shift(( i,-i))*((1,0)--(1,1)--(0,1)), heavy); }   // return kth triangular number (actually, 1+2+...+k)     int tri(int k) { return ((int) (k*(k+1)/2)); }     for(int i = 0; i < n2; ++i) {  draw(shift(shiftR1)*scale(h)*shift((0-tri(i),0-tri(i)))*((0,1)--(2*tri(i)+1,1)), heavy);  if(i % 2 == 0) {   // vertical heavy lines for odd layers   draw(shift(shiftR1)*scale(h)*((-i/2,1-tri(i))--(-i/2,-i-tri(i))), heavy);   draw(shift(shiftR1)*scale(h)*((1+i/2,1-tri(i))--(1+i/2,-i-tri(i))), heavy);     }  else {   // jagged heavy lines for even layers   pair jag1 = (-(i+1)/2,-(i-1)/2-tri(i)), jag2 = (1+(i+1)/2,-(i-1)/2-tri(i));   draw(shift(shiftR1)*scale(h)*(jag1+(0,1+(i-1)/2) -- jag1 -- jag1+(1,0) -- jag1+( 1,-(i+1)/2)), heavy);   draw(shift(shiftR1)*scale(h)*(jag2+(0,1+(i-1)/2) -- jag2 -- jag2-(1,0) -- jag2+(-1,-(i+1)/2)), heavy);       }  }  draw(shift(shiftR1)*scale(h)*shift((-n2*(n2+1)/2,-n2*(n2+1)/2))*((1,1)--(2*n2*(n2+1)/2,1)), heavy);   /* gradient square */ for(int i = 0; i < n; ++i)   for(int j = 0; j < n; ++j)   filldraw(shift(shiftR2)*scale(h)*shift((j,-i))*unitsquare, colors((i>j)?i:j)); for(int i = 0; i < n2; ++i) {  draw(shift(shiftR2)*scale(h)*((0,0-tri(i))--(tri(i),0-tri(i))--(tri(i),0)),heavy); } draw(shift(shiftR2)*scale(h)*shift((0,1-n))*scale(n)*unitsquare, heavy);    /* n nxn squares */ for(int i = 0; i < n2; ++i){  filldraw(scale(h)*shift((-i,-(i+1)*(i+2)/2+1))*xscale(i+1)*yscale(i+1)*unitsquare, colors(floor(i*(i+1)/2)), heavy);   } [/asy]

Nichomauss' Theorem: $n^3$ can be written as the sum of $n$ consecutive integers, and consequently that $1^3 + 2^3 + \cdots + n^3 = (1+2+\cdots + n)^2$.

COMING
Another proof of the identity $1^3 + 2^3 + \cdots + n^3 = (1+2+\cdots + n)^2$.

Geometry

[asy] defaultpen(linewidth(0.7)); unitsize(15); real a = 3.6, b = 4.8, c = (a^2 + b^2)^.5; pair shiftR = (a+b+2,0); pen sm = fontsize(10), heavy = linewidth(1.6); void htick(pair A, pair B, pair ticklength = (0.15,0)){ draw(A--B ^^ A-ticklength--A+ticklength ^^ B-ticklength--B+ticklength); } void makeshiftarrow(pair A, real dir, real arrowlength = 0.5){  /* Arrow option resizes */   fill(A--A+arrowlength*expi(dir+pi/8)--A+arrowlength*expi(dir-pi/8)--cycle); }  { /* left side */ filldraw(xscale(a+b)*yscale(a+b)*unitsquare, rgb(1,0.9,0.8));  filldraw((b,0)  --(b,a)--(0,a)  --cycle, rgb(0.9,1,0.9)); filldraw((0,a)  --(a,a)--(a,a+b)--cycle, rgb(0.9,1,0.9)); filldraw((a,a+b)--(a,b)--(a+b,b)--cycle, rgb(0.9,1,0.9)); filldraw((a+b,b)--(b,b)--(b,0)  --cycle, rgb(0.9,1,0.9));  htick((0,-c/10),(b,-c/10),(0,0.15)); htick((-c/10,0),(-c/10,a),(0.15,0)); label("$a$",(-c/10,a/2),W,sm); label("$b$",(b/2,-c/10),S,sm); label("$c$", (a/2,a+b/2),NW,sm); label("$b-a$",(b,(a+b)/2),E,sm); }  { /* right side */ filldraw(shift(shiftR)*xscale(a+b)*yscale(a+b)*unitsquare, rgb(1,0.9,0.8));  filldraw(shift(shiftR)*((0,a)  --(a,a)--(a,a+b)--cycle), rgb(0.9,1,0.9)); filldraw(shift(shiftR)*((a,a+b)--(a,b)--(a+b,b)--cycle), rgb(0.9,1,0.9)); fill(shift(shiftR      )*xscale(a)*yscale(a)*unitsquare,rgb(0.9,0.7,0.7));  fill(shift(shiftR+(a,0))*xscale(b)*yscale(b)*unitsquare,rgb(0.9,0.7,0.7)); filldraw(shift(shiftR)*((a+b,b)--(b,b)--(b,0)  --cycle), rgb(0.7,0.9,0.7)); filldraw(shift(shiftR)*((b,0)  --(b,a)--(0,a)  --cycle), rgb(0.7,0.9,0.7)); draw(shift(shiftR      )*xscale(a)*yscale(a)*unitsquare,heavy);  draw(shift(shiftR+(a,0))*xscale(b)*yscale(b)*unitsquare,heavy); draw(shift(shiftR)*((2*a/3,a+b/3)--(b/3,a/3) ^^ (a+b/3,b+a/3)--(b+2*a/3,b/3))); makeshiftarrow(shiftR+(b/3,a/3),angle((2*a/3,a+b/3)-(b/3,a/3))); makeshiftarrow(shiftR+(b+2*a/3,b/3),angle((a+b/3,b+a/3)-(b+2*a/3,b/3)));   label("$a$",shiftR+(0,a/2),W,sm);  label("$b$",shiftR+(a+b,b/2),E,sm);  label("$c$",shiftR+(a/2,a+b/2),NW,sm);  } [/asy]
The Pythagorean Theorem (first of many proofs): the left diagram shows that $c^2 = 4 \cdot \frac{ab}2 + (b-a)^2 = a^2 + b^2$, and the right diagram shows a second proof by re-arranging the first diagram (the area of the shaded part is equal to $a^2 + b^2$, but it is also the re-arranged version of the oblique square, which has area $c^2$).[3]

[asy] defaultpen(linewidth(0.7)); unitsize(15); pen sm = fontsize(10); real a = 3/1.2, b = 4/1.2, c = (a^2 + b^2)^.5, rot1 = acos(a/c); pair shiftR = (a+b+c,0); path top = (0,c)--a*expi(rot1)+(0,c)--(c,c), sq1=rotate(rot1*180/pi)*xscale(a)*yscale(a)*unitsquare, sq2=shift(c,0)*rotate(rot1*180/pi)*xscale(b)*yscale(b)*unitsquare; void htick(pair A, pair B, pair ticklength = (0.15,0)){ draw(A--B ^^ A-ticklength--A+ticklength ^^ B-ticklength--B+ticklength); }  { /* first picture */  filldraw((0,0)--(c,0)--a*expi(rot1)--cycle, rgb(1,0.85,0.7));  fill(sq1, rgb(0.95,1,0.95)); fill(sq2, rgb(0.95,1,0.95)); filldraw(rotate(270)*xscale(c)*yscale(c)*unitsquare, rgb(0.96,1,0.96)); filldraw((0,0)--top--(c,0)--a*expi(rot1)--cycle, rgb(0.5,0.9,0.5)); draw(sq1 ^^ sq2); draw(a*expi(rot1+pi/2)--top ^^ a*expi(rot1)--a*expi(rot1)+(0,c));   label("$a$",a/2*expi(rot1),NW,sm); label("$b$",a/2*expi(rot1)+(c/2,0),NE,sm); label("$c$",(c/2,0),S,sm); }  { /* second picture */ fill(shift(shiftR)*sq1, rgb(0.95,1,0.95)); fill(shift(shiftR)*sq2, rgb(0.95,1,0.95)); filldraw(shift(shiftR)*rotate(270)*xscale(c)*yscale(c)*unitsquare, rgb(0.96,1,0.96)); filldraw(shift(shiftR+(0,-c))*((0,0)--top--(c,0)--a*expi(rot1)--cycle), rgb(0.5,0.9,0.5)); filldraw(shift(shiftR+(0,-c))*((0,0)--(c,0)--a*expi(rot1)--cycle), rgb(1,0.85,0.7));  draw(shift(shiftR)*((0,0)--(c,0) ^^ sq1 ^^ sq2 ^^ a*expi(rot1+pi/2)--top ^^ a*expi(rot1)--a*expi(rot1)+(0,c)));   label("$a$",shiftR+a/2*expi(rot1),NW,sm); label("$b$",shiftR+a/2*expi(rot1)+(c/2,0),NE,sm); label("$c$",shiftR+(c/2,0),S,sm); } [/asy]
Another proof of the Pythagorean Theorem (animated version).

[asy] defaultpen(linewidth(0.7)); unitsize(15); pen sm = fontsize(10); real a = 3/1.2, b = 4/1.2, c = (a^2 + b^2)^.5, rot1 = acos(a/c); pair shiftR = (a+b+c,0); path top = (0,c)--a*expi(rot1)+(0,c)--(c,c), sq1=rotate(rot1*180/pi)*xscale(a)*yscale(a)*unitsquare, sq2=shift(c,0)*rotate(rot1*180/pi)*xscale(b)*yscale(b)*unitsquare, tri = (0,0)--(0,a)--(b,0)--cycle; void htick(pair A, pair B, pair ticklength = (0.15,0)){ draw(A--B ^^ A-ticklength--A+ticklength ^^ B-ticklength--B+ticklength); }  { /* first picture */  filldraw(xscale(a+b)*yscale(a+b)*unitsquare, rgb(1,0.85,0.75)); filldraw(tri, rgb(0.6,0.9,0.6)); filldraw(shift((a+b,0))*rotate(90)*tri, rgb(0.6,0.9,0.6)); filldraw(shift((a+b,a+b))*rotate(180)*tri, rgb(0.6,0.9,0.6)); filldraw(shift((0,a+b))*rotate(270)*tri, rgb(0.6,0.9,0.6)); draw((0,a)--(a+b,b), linetype("2 4")+linewidth(0.7));  label("$a$",(0,a/2),W,sm); label("$b$",(b/2,0),S,sm); label("$c$",(b/2,a/2),NE,sm); }  { /* second picture */ filldraw(shift(shiftR)*xscale(a+b)*yscale(a+b)*unitsquare, rgb(1,0.85,0.75)); filldraw(shift(shiftR+(a,a)  )*rotate(270)*reflect((0,0),(1,1))*tri, rgb(0.6,0.9,0.6));  filldraw(shift(shiftR+(a+b,0))*rotate(90)*reflect((0,0),(1,1))*tri, rgb(0.6,0.9,0.6));  filldraw(shift(shiftR+(a,a)  )*rotate(90)*tri, rgb(0.6,0.9,0.6));  filldraw(shift(shiftR+(0,a+b))*rotate(270)*tri, rgb(0.6,0.9,0.6));  label("$a$",shiftR+(0,a/2),W,sm); label("$a$",shiftR+(a/2,0),S,sm); label("$b$",shiftR+(a+b,a+b/2),E,sm); label("$b$",shiftR+(a+b/2,a+b),N,sm); } [/asy]
Another proof of the Pythagorean Theorem; the left-hand diagram suggests the identity $c^2 = (a+b)^2 - 4 \cdot \frac{ab}2 = a^2 + b^2$, and the right-hand diagram offers another re-arrangement proof.

[asy] defaultpen(linewidth(0.7)); unitsize(15); pen sm = fontsize(10); real a = 3/1.2, b = 4/1.2, c = (a^2 + b^2)^.5, rot1 = acos(a/c);  path top = (0,c)--a*expi(rot1)+(0,c)--(c,c), sq1=rotate(rot1*180/pi)*xscale(a)*yscale(a)*unitsquare, sq2=shift(c,0)*rotate(rot1*180/pi)*xscale(b)*yscale(b)*unitsquare; void htick(pair A, pair B, pair ticklength = (0.15,0)){ draw(A--B ^^ A-ticklength--A+ticklength ^^ B-ticklength--B+ticklength); }  filldraw((0,0)--(c,0)--a*expi(rot1)--cycle, rgb(1,0.85,0.7)); /* draw(rightanglemark((0,0),a*expi(rot1),(c,0))); */ filldraw(sq1, rgb(0.95,1,0.95)); filldraw(sq2, rgb(0.95,1,0.95)); filldraw(rotate(270)*xscale(c)*yscale(c)*unitsquare, rgb(0.96,1,0.96));  label("$a$",a/2*expi(rot1),SE,sm); label("$b$",a/2*expi(rot1)+(c/2,0),SW,sm); label("$c$",(c/2,-c),S,sm); [/asy]
COMING: The last (sixth) proof of the Pythagorean Theorem we shall present on this page, this one by dissection.

[asy] pathpen = linewidth(1); unitsize(15); pen dotted = linetype("2 4"); path xaxis = (-3,0)--(3,0); pair A = (-2,2), B = (1.5,1.5), B3 = (-1.5,0), B2 = (B.x,-B.y), C2 = IP(xaxis, A--B2);   D(xaxis,Arrows(8)); D(D(A)--D(C2)--D(B)); D(D(B2)--C2,dashed+linewidth(0.7));  D(A--D(B3)--B,dotted+linewidth(0.7)); D(B3--B2,dotted); MP("(a,b)",A,W); MP("(c,d)",B,E); MP("(c,-d)",B2,E); [/asy]
The smallest distance necessary to travel between $(a,b)$, the x-axis, and then $(c,d)$ for $b,d > 0$ is given by $\sqrt{(a-c)^2 + (b+d)^2}$.[4]

[asy]defaultpen(linewidth(1)); unitsize(15); pen dotted = linetype("2 4"), sm = fontsize(10); real r = 2; pair A = r*(0,0), B = (r*18/5,A.y), C = r*(16/5,12/5), D = (r*9/5,C.y); pair refl(pair a, pair b = (C+B)/2) { return a+2*(b-a); } void makeshiftarrow(pair a, real dir, real arrowlength = r){  /* Arrow option resizes */   fill(a--a+arrowlength*expi(dir+pi/8)--a+arrowlength*expi(dir-pi/8)--cycle); }  draw(A--B--C--D--cycle); draw(A--C^^B--D); draw(refl(A)--C--B--refl(D)--cycle ^^ C--refl(D), dotted); draw(rightanglemark(A,C,refl(D),15)^^rightanglemark(A,IP(A--C,B--D),B,15), linewidth(0.7)); label("$A$",A,S,sm);label("$B$",B,S,sm);label("$C$",C,N,sm);label("$D$",D,N,sm);label("$A'$",refl(A),N,sm);label("$D'$",refl(D),S,sm);    /* arrow */ draw(arc((B+C)/2,C.y,240,300),linewidth(0.7)); makeshiftarrow((B+C)/2+C.y*expi(pi*300/180),210*pi/180,r/4); [/asy]
In trapezoid $ABCD$ with $\overline{AB} \parallel \overline{CD}$, then $\overline{AC} \perp \overline{BD} \Longleftrightarrow AC^2 + BD^2 = (AB + CD)^2$.

Back to Top

Miscellaneous

[asy]unitsize(15); defaultpen(linewidth(0.7)); real a=2.5,b=5,s=a+b; pen colors[] = {rgb(0.9,0.2,0.2), rgb(0.2,0.9,0.2), rgb(0.2,0.2,0.9)}; pen sm = fontsize(8); void fillrect(pair A, pair B, pen p = invisible, pen l = linewidth(1)){ filldraw(A--(A.x,B.y)--B--(B.x,A.y)--cycle, p, l); } void htick(pair A, pair B, pair ticklength = (0.2,0)){  draw(A--B);  draw(A-ticklength--A+ticklength);  draw(B-ticklength--B+ticklength); }  fillrect((0,0),(s,s)); fillrect((a,b),(s,s),colors[0]); filldraw((0,a)--(a,a)--(s/2,s/2)--(a,b)--(a,s)--(0,s)--cycle,colors[1],linewidth(1)); filldraw((0,0)--(b,0)--(b,b)--(a,a)--(0,a)--cycle,colors[2],linewidth(1)); draw((0,0)--(a,a),linewidth(1));  draw((s/2,s/2)--(b,a)--(a,a)--(a,b),linewidth(0.7)+linetype("4 2")); htick((s+1,0),(s+1,b)); htick((s+1,b),(s+1,s));   /* in labels, a,b swapped */ label("$a$",(s+1,b/2),E);label("$b$",(s+1,(s+b)/2),E); label("$ab$",(a+s,b+s)/2,sm); label("$\frac{(a+b)^2}{4}$",(a,a+s)/2,sm); label("$\frac{a^2}2$",(s/2,a*2/3),sm); label("$\frac{b^2}2$",(a/4,a*2/3),sm);  [/asy]
The Root-Mean Square-Arithmetic Mean-Geometric Mean inequality, $\color{red}{ab} \color{black} \le \color{green} \frac{(a+b)^2}{4} \color{black} \le \color{blue} \frac{a^2 + b^2}{2}$.

[asy] unitsize(15); defaultpen(linewidth(0.7)); void htick(pair A, pair B,pair ticklength = (0,0.15)){  draw(A--B);  draw(A-ticklength--A+ticklength);  draw(B-ticklength--B+ticklength); } real a=10,b=3,r=(a+b)/2; pen sm = fontsize(8), dark = linewidth(1); pen colors[] = {rgb(0.9,0.2,0.2) + dark,    /* GM */                 rgb(0.2,0.9,0.2) + dark,    /* AM */                 rgb(0.2,0.2,0.9) + dark,    /* QM */                 rgb(0.2,0.9,0.9) + dark };  /* HM */ pair A = (r-b,(r^2-(r-a)^2)^.5),B=foot((A.x,0),(0,0),A);  draw(arc((0,0),r,0,180)--cycle); dot(A); dot((0,r)); dot((A.x,0)); dot((0,0)); draw(B--A,colors[3]);           label("HM",(A+B)/2, E, sm+colors[3]); draw((0,0)--(0,r),colors[1]);   label("AM",(0,r*2/3), NW, sm+colors[1]);  draw((A.x,0)--A,colors[0]);     label("GM",(A.x,A.y/2), SE, sm+colors[0]);  draw((A.x,0)--(0,r),colors[2]); label("RMS",(A.x/5,r*4/5), NE, sm+colors[2]);    draw((-r,0)--A--(r,0), linetype("4 2")); draw((0,0)--B--(A.x,0), linetype("4 2")); draw(rightanglemark((-r,0),A,(r,0))); draw(rightanglemark((0,0),B,(A.x,0)));  htick((-r,-1),(A.x,-1)); htick((A.x,-1),(r,-1)); label("$a$",((-r+A.x)/2,-1),S); label("$b$",((r+A.x)/2,-1),S); [/asy]

The Root-Mean Square-Arithmetic Mean-Geometric Mean-Harmonic mean Inequality.[5]

[asy] unitsize(15); defaultpen(linewidth(0.7)); real r = 0.3, row1 = 3.5, row2 = 0, row3 = -3.5; void necklace(pair k, pen colors[]){  draw(shift(k)*unitcircle);   for(int i = 0; i < colors.length; ++i){   pair p = k+expi(pi/2+2*pi*i/colors.length);   fill(Circle(p,r),colors[i]);   draw(Circle(p,r));  } } void htick(pair A, pair B,pair ticklength = (0.15,0)){  draw(A--B);  draw(A-ticklength--A+ticklength);  draw(B-ticklength--B+ticklength); }   /* draw necklaces */ pen BEADS1[] = {red,red,red},BEADS2[] = {blue,blue,blue},BEADS3[] = {red,red,blue},BEADS4[] = {blue,red,red},BEADS5[] = {red,blue,red},BEADS6[] = {blue,blue,red},BEADS7[] = {red,blue,blue},BEADS8[] = {blue,red,blue};  necklace((-10,(row2+row3)/2),BEADS1);necklace((-7.5,(row2+row3)/2),BEADS2);  necklace((-2.5,row2),BEADS3);necklace((0,row2),BEADS4);necklace((2.5,row2),BEADS5); necklace((-2.5,row3),BEADS6);necklace((0,row3),BEADS7);necklace((2.5,row3),BEADS8);   /* box them and label */ draw((-4,row2-1.3)--(4,row2-1.3)--(4,row2+1.6)--(-4,row2+1.6)--cycle,linewidth(0.9)+linetype("4 2")); draw((-4,row3-1.3)--(4,row3-1.3)--(4,row3+1.6)--(-4,row3+1.6)--cycle,linewidth(0.9)+linetype("4 2")); htick((-4,row2+2),(4,row2+2),(0,0.15)); label("$p$",(0,row2+2),N,fontsize(10));  htick((-11.5,(row2+row3)/2+2),(-6,(row2+row3)/2+2),(0,0.15)); label("$a$",(-17.5/2,(row2+row3)/2+2),N,fontsize(10));  [/asy]

Fermat's Little Theorem: $a^p \equiv a \pmod{p}$ for $\text{gcd}\,(a,p) = 1$ (above $a=2,p=3$).

Back to Top

References

  1. ^ MathOverflow
  2. ^ Wolfram MathWorld
  3. ^ Attributed to the Chinese text Zhou Bi Suan Jing.
  4. ^ This is more of a proof without words of the AM-GM inequality $\frac{a+b}{2} \ge \sqrt{ab}$; though the lengths of the segments labeled RMS and HM can easily be verified to have values of $\sqrt{\frac{a^2+b^2}{2}}, \frac{2}{\frac 1a + \frac 1b}$, respectively, it might not be obvious from the diagram. It still serves as a useful graphical demonstration of the inequality.