Calcul de la loi de groupe sur une courbe elliptique

In [1]:
from sympy import *
from sympy.interactive import printing
printing.init_printing(use_latex=True)
In [2]:
var('x y x1 x2 y1 y2 t u a b')
Out[2]:
$$\left ( x, \quad y, \quad x_{1}, \quad x_{2}, \quad y_{1}, \quad y_{2}, \quad t, \quad u, \quad a, \quad b\right )$$
In [3]:
E = y**2 - x**3 - a*x -b; E
Out[3]:
$$- a x - b - x^{3} + y^{2}$$
In [4]:
X = x1+t*(x2-x1); Y = y1+t*(y2-y1); X,Y
Out[4]:
$$\left ( t \left(- x_{1} + x_{2}\right) + x_{1}, \quad t \left(- y_{1} + y_{2}\right) + y_{1}\right )$$
In [5]:
E.subs({x:X, y:Y})
Out[5]:
$$- a \left(t \left(- x_{1} + x_{2}\right) + x_{1}\right) - b - \left(t \left(- x_{1} + x_{2}\right) + x_{1}\right)^{3} + \left(t \left(- y_{1} + y_{2}\right) + y_{1}\right)^{2}$$
In [6]:
expand(_)
Out[6]:
$$a t x_{1} - a t x_{2} - a x_{1} - b + t^{3} x_{1}^{3} - 3 t^{3} x_{1}^{2} x_{2} + 3 t^{3} x_{1} x_{2}^{2} - t^{3} x_{2}^{3} - 3 t^{2} x_{1}^{3} + 6 t^{2} x_{1}^{2} x_{2} - 3 t^{2} x_{1} x_{2}^{2} + t^{2} y_{1}^{2} - 2 t^{2} y_{1} y_{2} + t^{2} y_{2}^{2} + 3 t x_{1}^{3} - 3 t x_{1}^{2} x_{2} - 2 t y_{1}^{2} + 2 t y_{1} y_{2} - x_{1}^{3} + y_{1}^{2}$$
In [7]:
_ - E.subs({x:x1,y:y1})
Out[7]:
$$a t x_{1} - a t x_{2} + t^{3} x_{1}^{3} - 3 t^{3} x_{1}^{2} x_{2} + 3 t^{3} x_{1} x_{2}^{2} - t^{3} x_{2}^{3} - 3 t^{2} x_{1}^{3} + 6 t^{2} x_{1}^{2} x_{2} - 3 t^{2} x_{1} x_{2}^{2} + t^{2} y_{1}^{2} - 2 t^{2} y_{1} y_{2} + t^{2} y_{2}^{2} + 3 t x_{1}^{3} - 3 t x_{1}^{2} x_{2} - 2 t y_{1}^{2} + 2 t y_{1} y_{2}$$
In [8]:
simplify(_/t)
Out[8]:
$$a x_{1} - a x_{2} + t^{2} x_{1}^{3} - 3 t^{2} x_{1}^{2} x_{2} + 3 t^{2} x_{1} x_{2}^{2} - t^{2} x_{2}^{3} - 3 t x_{1}^{3} + 6 t x_{1}^{2} x_{2} - 3 t x_{1} x_{2}^{2} + t y_{1}^{2} - 2 t y_{1} y_{2} + t y_{2}^{2} + 3 x_{1}^{3} - 3 x_{1}^{2} x_{2} - 2 y_{1}^{2} + 2 y_{1} y_{2}$$
In [9]:
_.subs({t:1+u})
Out[9]:
$$a x_{1} - a x_{2} + x_{1}^{3} \left(u + 1\right)^{2} - 3 x_{1}^{3} \left(u + 1\right) + 3 x_{1}^{3} - 3 x_{1}^{2} x_{2} \left(u + 1\right)^{2} + 6 x_{1}^{2} x_{2} \left(u + 1\right) - 3 x_{1}^{2} x_{2} + 3 x_{1} x_{2}^{2} \left(u + 1\right)^{2} - 3 x_{1} x_{2}^{2} \left(u + 1\right) - x_{2}^{3} \left(u + 1\right)^{2} + y_{1}^{2} \left(u + 1\right) - 2 y_{1}^{2} - 2 y_{1} y_{2} \left(u + 1\right) + 2 y_{1} y_{2} + y_{2}^{2} \left(u + 1\right)$$
In [10]:
_ - _.subs({u:0})
Out[10]:
$$x_{1}^{3} \left(u + 1\right)^{2} - 3 x_{1}^{3} \left(u + 1\right) + 2 x_{1}^{3} - 3 x_{1}^{2} x_{2} \left(u + 1\right)^{2} + 6 x_{1}^{2} x_{2} \left(u + 1\right) - 3 x_{1}^{2} x_{2} + 3 x_{1} x_{2}^{2} \left(u + 1\right)^{2} - 3 x_{1} x_{2}^{2} \left(u + 1\right) - x_{2}^{3} \left(u + 1\right)^{2} + x_{2}^{3} + y_{1}^{2} \left(u + 1\right) - y_{1}^{2} - 2 y_{1} y_{2} \left(u + 1\right) + 2 y_{1} y_{2} + y_{2}^{2} \left(u + 1\right) - y_{2}^{2}$$
In [11]:
simplify(_/u)
Out[11]:
$$u x_{1}^{3} - 3 u x_{1}^{2} x_{2} + 3 u x_{1} x_{2}^{2} - u x_{2}^{3} - x_{1}^{3} + 3 x_{1} x_{2}^{2} - 2 x_{2}^{3} + y_{1}^{2} - 2 y_{1} y_{2} + y_{2}^{2}$$
In [12]:
solve(_,u)
Out[12]:
$$\left [ \frac{x_{1}^{3} - 3 x_{1} x_{2}^{2} + 2 x_{2}^{3} - y_{1}^{2} + 2 y_{1} y_{2} - y_{2}^{2}}{x_{1}^{3} - 3 x_{1}^{2} x_{2} + 3 x_{1} x_{2}^{2} - x_{2}^{3}}\right ]$$
In [13]:
t = simplify(1+_[0]);t
Out[13]:
$$\frac{2 x_{1}^{3} - 3 x_{1}^{2} x_{2} + x_{2}^{3} - y_{1}^{2} + 2 y_{1} y_{2} - y_{2}^{2}}{x_{1}^{3} - 3 x_{1}^{2} x_{2} + 3 x_{1} x_{2}^{2} - x_{2}^{3}}$$
In [14]:
t.factor()
Out[14]:
$$\frac{1}{\left(x_{1} - x_{2}\right)^{3}} \left(2 x_{1}^{3} - 3 x_{1}^{2} x_{2} + x_{2}^{3} - y_{1}^{2} + 2 y_{1} y_{2} - y_{2}^{2}\right)$$
In [15]:
x3 = simplify(x1+t*(x2-x1)); y3 = -simplify(y1+t*(y2-y1)); print x3;print y3
(-x1**3 + x1**2*x2 + x1*x2**2 - x2**3 + y1**2 - 2*y1*y2 + y2**2)/(x1**2 - 2*x1*x2 + x2**2)
-(y1*(x1**3 - 3*x1**2*x2 + 3*x1*x2**2 - x2**3) - (y1 - y2)*(2*x1**3 - 3*x1**2*x2 + x2**3 - y1**2 + 2*y1*y2 - y2**2))/(x1**3 - 3*x1**2*x2 + 3*x1*x2**2 - x2**3)

In [16]:
x3 = x3.factor();x3
Out[16]:
$$- \frac{1}{\left(x_{1} - x_{2}\right)^{2}} \left(x_{1}^{3} - x_{1}^{2} x_{2} - x_{1} x_{2}^{2} + x_{2}^{3} - y_{1}^{2} + 2 y_{1} y_{2} - y_{2}^{2}\right)$$
In [17]:
y3 = y3.factor();y3
Out[17]:
$$\frac{1}{\left(x_{1} - x_{2}\right)^{3}} \left(x_{1}^{3} y_{1} - 2 x_{1}^{3} y_{2} + 3 x_{1}^{2} x_{2} y_{2} - 3 x_{1} x_{2}^{2} y_{1} + 2 x_{2}^{3} y_{1} - x_{2}^{3} y_{2} - y_{1}^{3} + 3 y_{1}^{2} y_{2} - 3 y_{1} y_{2}^{2} + y_{2}^{3}\right)$$
In [18]:
x3.as_numer_denom()
Out[18]:
$$\left ( - x_{1}^{3} + x_{1}^{2} x_{2} + x_{1} x_{2}^{2} - x_{2}^{3} + y_{1}^{2} - 2 y_{1} y_{2} + y_{2}^{2}, \quad \left(x_{1} - x_{2}\right)^{2}\right )$$
In [19]:
expand(_[0]-(y2-y1)**2)
Out[19]:
$$- x_{1}^{3} + x_{1}^{2} x_{2} + x_{1} x_{2}^{2} - x_{2}^{3}$$
In [20]:
_.factor()
Out[20]:
$$- \left(x_{1} - x_{2}\right)^{2} \left(x_{1} + x_{2}\right)$$
In [21]:
%%latex
$$x_3 = -x_1-x_2 +s^2,\quad s=\frac{y_2-y_1}{x_2-x_1}$$
$$x_3 = -x_1-x_2 +s^2,\quad s=\frac{y_2-y_1}{x_2-x_1}$$
In [22]:
y3.as_numer_denom()
Out[22]:
$$\left ( x_{1}^{3} y_{1} - 2 x_{1}^{3} y_{2} + 3 x_{1}^{2} x_{2} y_{2} - 3 x_{1} x_{2}^{2} y_{1} + 2 x_{2}^{3} y_{1} - x_{2}^{3} y_{2} - y_{1}^{3} + 3 y_{1}^{2} y_{2} - 3 y_{1} y_{2}^{2} + y_{2}^{3}, \quad \left(x_{1} - x_{2}\right)^{3}\right )$$
In [23]:
expand(_[0]-(y2-y1)**3)
Out[23]:
$$x_{1}^{3} y_{1} - 2 x_{1}^{3} y_{2} + 3 x_{1}^{2} x_{2} y_{2} - 3 x_{1} x_{2}^{2} y_{1} + 2 x_{2}^{3} y_{1} - x_{2}^{3} y_{2}$$
In [24]:
_.factor()
Out[24]:
$$\left(x_{1} - x_{2}\right)^{2} \left(x_{1} y_{1} - 2 x_{1} y_{2} + 2 x_{2} y_{1} - x_{2} y_{2}\right)$$
In [25]:
%%latex
$$y_3= -s(s^2-x_1-x_2) -t,\quad t=\frac{x_1y_2-x_2y_1}{x_1-x_2}$$
$$y_3= -s(s^2-x_1-x_2) -t,\quad t=\frac{x_1y_2-x_2y_1}{x_1-x_2}$$
In []: