









InstallMethod(
rec(
    kind:="FUNCTION",
    name:="Size",
    sin:=[[grp^ell,"P"]],
    sou:=[[elt-ord^rat,"n"]],
    short:=
      "The number of points belonging to EC ",
    ex:=["EC:= EllipticCurve(5,[1,2]);;\nSize(EC);\n"
        ],
    see:=[]), _Size);



----------------------------------------------------------------------------------------------------------

InstallMethod(
rec(
kind := "FUNCTION",
name := "Points",
sin := [[grp^ell,"E"]],
sou := [[list,"L"]],
short :="Returns all Points of E as a list."
),_Points);

InstallMethod(
rec(
kind := "FUNCTION",
name := "ECSize",
sin := [[grp^ell,"E"]],
sou := [[elt-ord^rat,"N"]],
short :="Returns the number of Points of E."
),_ECSize);

InstallMethod(
rec(
kind := "FUNCTION",
name := "EllipticCurve",
sin := [[elt-ord^rat,"q"],[list,"L"]],
sou := [[grp^ell]],
short :=
"Constructs an elliptic curve over the finite field with q elements. If L has length 2, the curve is "+
"defined by the equation y^2 = x^3 + L[1]*x + L[2], if L has length 5, the curve is  "+
"defined by the equation y^2 + L[1]*x*y + L[2]*y = x^3 + L[3]*x^2 + L[4]*x + L[5]. "
),_EllipticCurve);


InstallMethod(
rec(
kind := "FUNCTION",
name := "Order",
sin := [[elt-grp^ell,"P"]],
sou := [[elt-ord^rat,"n"]],
short :="Returns the Order of P."
),_Order);

InstallMethod(
rec(
kind := "FUNCTION",
name := "RandomPoint",
sin := [[grp^ell,"EC"]],
sou := [[elt-grp^ell,"P"]],
short :="Returns a random point of EC."
),_RandomPoint);

InstallMethod(
rec(
kind := "FUNCTION",
name := "WeierstrassNormalForm",
sin := [[grp^ell,"EC"]],
sou := [[grp^ell,"EC2"]],
short :="Returns, if possible, a curve EC2 in short Weierstrass normal form, which is isomorphic to EC."
),_WeierstrassNormalForm);

InstallMethod(
rec(
kind := "FUNCTION",
name := "ECGenerator",
sin := [[grp^ell,"EC"]],
sou := [[list,"EC2"]],
short :="Returns a list of generator(s) of the group of _Points over EC."
),_ECGenerator);





InstallDocumentation(
rec(
kind := "FUNCTION",
name := "Points",
sin := [[grp^ell,"E"]],
sou := [[list,"L"]],
short :="Returns all Points of E as a list."
));

InstallDocumentation(
rec(
kind := "FUNCTION",
name := "EllipticFunctionField",
sin := [[grp^ell,"E"]],
sou := [[fld^fun,"F"]],
short :="Returns the function field defined by E"
));

InstallDocumentation(
rec(
kind := "FUNCTION",
name := "MakePoint",
sin := [[list(elt-fld^fin),"L"],[grp^ell,"EC"]],
sou := [[elt-grp^ell,"P"]],
short :="Returns,if possible, a point on EC, defined by the coordinates given in L."
));

InstallDocumentation(
rec(
kind := "FUNCTION",
name := "MakePoints",
sin := [[elt-fld^fin,"x"],[grp^ell,"EC"]],
sou := [[elt-grp^ell,"P"]],
short :="Returns the points on EC with x-coordinate x."
));




