elliptic_curve.mw

 > # Introduction to elliptic curves # A. Betten 12/4/05 # for M360 Colorado State University

 > f(x) := x * (x+1) * (x-1);

 > plot(f(x),x=-2..2);

 > # now take the square root:

 > plot(sqrt(f(x)),x=-2..2);

 > # actually, we have two branches, the positive # and the negative one. We get two components

 > plot([sqrt(f(x)),-sqrt(f(x))],x=-2..2);

 > # now a cubic with complex roots:

 > g(x) := x^3 + 73;

 >

 > plot(g(x),x=-5..5);

 > # this time, we have only one component. In both cases, # we say that we have a curve in the real x/y plane. # the equation of the curve is # y^2=g(x)

 > plot([sqrt(g(x)),-sqrt(g(x))],x=-5..5);

 > # save  the plot for future use.

 > C := plot([sqrt(g(x)),-sqrt(g(x))],x=-5..5):

 > with(plottools):

 > with(plots):

Warning, the previous binding of the name arrow has been removed and it now has an assigned value

 > display(C);

 > # there is a special command for plotting curves, # it is implicitplot

 > implicitplot(y^2-x^3-73,x=-5..5,y=-12..12);

 > C := implicitplot(y^2-x^3-73,x=-5..5,y=-12..12):

 > # x=3 gives y=9 (and y=-9), i.e. we have found # an integral point on the curve

 > P1 := pointplot({[2,9]});

 > display(C,P1);

 > # BTW, such a curve is called elliptic curve.

 > # x=3 gives y=10 (and -10), ie we have found another # integral point on the curve

 > P2 := pointplot({[3,10]});

 > display(C,P1,P2);

 > # Let's determine the line through the two points. # Its equation is y = x+7 # check: plugging in 2 gives 9, plugging in 3 gives 10.

 > L := plot(x+7,x=-5..5):

 > display(C,P1,P2,L);

 > # the line L intersects the curve in another point.

 > solve(sqrt(g(x))-(x+7),x);

 > # OK, the third point is at x=-4

 > simplify(eval(sqrt(g(x)),x=-4));

 > # that was a bit complicated, but the thrid # integral point is # P3 = (-4,3)

 > P3 := pointplot({[-4,3]});

 > display(C,L,P1,P2,P3);

 > # the main point was that knowing two (integral) # points on the curve # enabled us to produce another (integral) point.

 > # now comes a nice trick from algebraic geometry: # we substitute x=X/Z and y = Y/Z into the # equation of the curve to get # Y^2/Z^2 = X^3/Z^3 + 73 # and hence # Y^2Z = X^3 + 73Z^3 # this is an equation of a curve in 3 variables. # The equation is homogeneous of degree 3. # This means that whenever (X,Y,Z) is a solution, # then also any non-zero scalar multiple # (aX,aY,aZ) is a solution. # In particular, we find that the points (x,y,1) # are solutions, provided (x,y) was a solution # to the original equation. # In addition, there is the solution (0,1,0). # We may think of the scalar multiples of (X,Y,Z) # as being an entity, called a projective point. # To express the fact that we consider scalar multiples, # we write (X:Y:Z). # The new points (X:Y:1) behave much like the old points, # more precisely, they are in 1-1 correspondence. # In addition, the curve has the new point (0:1:0), # which we may imagine as sitting on top of the Y-axis. # (and also at the very bottom of the Y-axis). # We have just introduced the projective plane # over the reals. It looks much like the ordinary # (affine) plane except that it has points # (X:Y:0) which we may imagine as sitting far out. # We say that these are the points at infinity. # So, projectively, the elliptic curve has one more # point than it has in the affine plane.

 > # Let's look at what happens to lines. # The vertical lines of the form x=c, c a constant, # become X/Z=c or X=cZ. # Thus, the point at infinity (i.e. Z=0) # (0:1:0) is on all these vertical lines. # Lines of the form y = mx + c become # Y/Z = mX/Z + c or Y = mX + cZ. # The point at infinity (1:m:0) is on all those lines # for fixed m, i.e. for fixed slope. # That is, the parallel lines of the form # y = mx + b for fixed m and various b # all intersect in the point (1:m:0). # The vertical lines all intersect in (0:1:0). # Sadly enough, there is no Maple command to plot # curves in the projective plane. # As a curiosity, the line Z=0 is a line # which contains all the points at infinity. # This line contains no affine point, and hence # cannot be seen in the affine x/y-plane.

 > # From now on, let us identify (x,y) with (x:y:1). # Also, it is usual to denote (0:1:0) as infinity. # The main idea is to introduce a group structure # on the points of an elliptic curve as follows: # infinity is the identity element in the group. # For points P,Q,R we say that # P + Q + R = infinity (=0) # if and only if P,Q,R are collinear

 > display(C,L,P1,P2,P3);

 > # this is just saying that P1+P2+P3 = 0.

 > # It is a nice fact that in the projective plane, # a line intersects the elliptic curve in exactly # three points, provided one counts points with # the appropriate multiplicities, i.e. a # tangent point counts twice. # In other words, three points add to infinity # (ie zero in the group) if they are collinear # (collinear = being on a line). # Since the vertical lines intersect at infinity, # we automatically have that if P=(x,y) then -P=(x,-y) # since (x,y),(x,-y),infinity are collinear.

 > P3 := pointplot({[-4,3]});

 > P3minus := pointplot({[-4,-3]});

 > L3 := implicitplot(x+4,x=-5..5,y=-12..12):

 > display(C,P3,P3minus,L3);

 > # Thus, to add points P and Q, one rewrites # the fundamental equation P+Q+R=infinity as # P+Q=-R. Thus, to compute P+Q one has to take the # line through P and Q, intersect it with the curve # to get R = (x,y). Then P+Q = -R = (x,-y). # Thus, P1+P2=-P3, i.e.

 > display(C,P1,P2,P3minus,L,L3);

 > # The crucial point is that the resulting # addition is assiciative, i.e. # P+(Q+R) = (P+Q)+R. # Showing this is non-trivial.

 > # It is possible to write down general formulas # for the addition of points on the curve. # To add a point P to itself, one draws the tangent # line to the curve at that point and intersects # it with the curve. Negation of the y-coordinate # gives 2P.

 > # Example: let's add P3 to itself.

 > # the slope of the tanget of C at P3 is obtained by # implicitly differentiating the equation for C. # So y^2=x^3+73 differentiated implicitly gives # 2y dy = 3x^2 dx, i.e. # dy/dx = 3/2 x^2/y. # Plugging in the coordinates of P3=(-4,-3) gives # dy/dx at P3 = 3/2 * 16/(-3) = -8. # The equation of the langent line is therefore # -8 * (x+4) -3

 > T := plot(-8 * (x+4) -3,x=-5..5,y=-12..12):

 > display(C,T,P3);

 > # Let us find the "third" intersection point. # note that we have to take the # negative branch

 > solve(-sqrt(g(x))-((-8)*(x+4)-3),x);

 > # So, the third point is at (72,?)

 > simplify(eval(-sqrt(g(x)),x=72));

 > # OK the point is (72,-611)

 > P4 := pointplot({[72,-611]});

 > display([C,P3,P4,T]);

 > T := plot(-8 * (x+4) -3,x=-20..75,y=-650..650):

 > C := plot([sqrt(g(x)),-sqrt(g(x))],x=-20..75,y=-650..650):

 > display(C,T,P4);

 > P4negative := pointplot({[72,611]});

 > display(C,T,P3,P4negative);

 > # thus we have computed 2*P3

 > # In general, if the curve E is given by # y^2=x^3+bx+c # and if P1 = (x1,y1), P2=(x2,y2) # then P3 = (x3,y3) where # x3 = m^2 - x1-x2 # y3 = m(x1-x3)-y1 # and # m= (y2-y1)/(x2-x1) if P1 not equal P2 # and # m = (3*x1^2+b)/(2*y1) if P1 = P2. # If the slope m is infinite then P3 = infinity # Also, infinity + P = P for all points P. # This addition is associative, # infinity is the identity element, and # the inverse of P=(x,y) is -P=(x,-y). # Thus we have a group. # The group is abelian, as P+Q = Q+P # (as can be seen from the fact that the formulae # are symmetric in x and y (up to a minus sign # which cancels). # Thus we have an abelian group.

 >