tate
system:sage


{{{id=27|
E = EllipticCurve(F,[1,2,3,4,5], allow_singular = True);
ainvsE = [E.a1(),E.a2(),E.a3(),E.a4(),E.a6()];
singular_point(ainvsE)
///
[(4 : 2 : 1)]
}}}

{{{id=16|
F=GF(11); a=F(1); b=F(2); c=F(3); d=F(4); e=F(5); 
ainvs=[a,b,c,d,e]; singular_point(ainvs)
///
[(4 : 2 : 1)]
}}}

{{{id=14|
def singular_point(ainvs):
    
    x,y,z = var('x,y,z')
    L = []
    a1 = ainvs[0]
    a2 = ainvs[1]
    a3 = ainvs[2]
    a4 = ainvs[3]
    a6 = ainvs[4]
    k =a1.base_ring()
    p = k.characteristic()
    Ex = a1*y*z - 3*x^2 - 2*a2*x*z - a4*z^2
    Ey = 2*y*z + a1*x*z + a3*z^2
    Ez = y^2 + a1*x*y + 2*a3*y*z - a2*x^2 - 2*a4*x*z - 3*a6*z^2
    Eeqn = y^2*z + a1*x*y*z + a3*y*z^2 - x^3 - a2*x^2*z - a4*x*z^2 - a6*z^3
    if p == 0:
        P.<x0,x1,x2> = ProjectiveSpace(2,QQ) 
        S1 = solve([Ex ==0, Ey==0, Ez==0, Eeqn == 0, z-1 == 0 ],x,y,z)
    
        S2 = solve([Ex==0, Ey==0, Ez==0, Eeqn == 0, z==0, y==1],x,y,z)
        if len(S1) != 0:
            
            x0 = S[0][0]
            x1 = S[0][1]
            x0 = x0.lhs() - x0.rhs()
            x0 = K(x0.coefficient(0)) 
            x1 = x1.lhs()-x1.rhs()
            x1 = K(x1.coefficient(0))
            pnt = P(x0,x1,1)
            L=L.append(P)
            
        if len(S2) != 0:
            pnt = P(0,1,0)
            L=L.append(L)
            
    if p != 0:
        P.<x,y,z> = ProjectiveSpace(2,F)
        A1=P.subscheme([a1*y*z - 3*x^2 - 2*a2*x*z - a4*z^2])
        A2=P.subscheme([2*y*z + a1*x*z + a3*z^2])
        A3=P.subscheme([y^2 + a1*x*y + 2*a3*y*z - a2*x^2 - 2*a4*x*z - 3*a6*z^2])
        A4=P.subscheme([y^2*z + a1*x*y*z + a3*y*z^2 - x^3 - a2*x^2*z - a4*x*z^2 - a6*z^3])
        A12 = A1.intersection(A2)
        A123 = A12.intersection(A3)
        A1234 = A123.intersection(A4)
        L=A1234.rational_points()
        
        
    return L
///
}}}

{{{id=15|
def linear_translate(self):
    E = self.curve()
    K = E.base_ring()
    a1 = K(E.a1())
    a2 = E.a2()
    a3 = E.a3()
    a4 = E.a4()
    a6 = E.a6()
    a = K(self[0])
    b = K(self[1])
    ET = EllipticCurve(K,[a1,-3*a+a2,-2*b-a1*a+a3,a1*b+3*a-2*a*a2+a4,-b^2-a*b+a3*b-a^3+a*a2-a*a4+a6], allow_singular = True)
    return ET
///
}}}

{{{id=11|
E=EllipticCurve([0,0,0,0,1], allow_singular = True); E; P=E(0,1); F=linear_translate(P); E.plot(); F.plot()
///
Elliptic Curve defined by y^2 = x^3 + 1 over Rational Field
<html><font color='black'><img src='cell://sage0.png'></font></html>

<html><font color='black'><img src='cell://sage1.png'></font></html>
}}}

{{{id=7|
def Tate(self):
    vpd = self.discriminant().valuation()
    K = self.base_ring()
    k = K.residue_field()
    #p = k.characteristic()
    if vpd == 0:
        return [vpd, 1, 0, 'I0', 1], self
        # change coordinates so that p|a3,a4,a6
    else:
        ainvs = [k(self.a1()), k(self.a2()), k(self.a3()), k(self.a4()), k(self.a6())]
        S = singular_point(ainvs)
        
        P = self(S[0][0],S[0][1])
        self = linear_translate(P)
        b2=E.b2()
        if b2.valuation() == 0:
            vpd = self.discriminant().valuation()
            R.<T> = k[]
            f = T^2+ k(self.a1())*T-k(self.a2())
           
            if not f.is_irreducible():
                c=vpd #split multiplicative
                return [vpd, vpd, 1, "In where n=", c],"split multiplicative"
            if f.is_irreducible() and is_odd(vpd):
                c=1
                return [vpd, vpd, 1, "In where n=", c], "non-split multiplicative"
            if  f.is_irreducible() and is_even(vpd) or vpd == +Infinity:
                c=2
                return [vpd, vpd, 1, "In where n=", c],"non-split multiplicative"
        #from now on additive reduction
        if b2.valuation() != 0 and self.a6().valuation() <2:
            return [vpd, 1, vpd, "Type II", 1]
        if self.a6().valuation >= 2 and self.b8().valuation() < 3:
            return [vpd, 2, vpd-1, "Type III", 2]
        if self.b8().valuation() >= 3 and self.b6().valuation() < 3:
            a31= k(1/p * self.a3())
            a62= k(1/p^2 * self.a6())
            R.<T> = k[]
            f = T^2 + a31*T - a62 
            if f.is_irreducible():
                c=1
                return [vpd, 3, vpd-2,"Type IV", c]
            if not f.is_irreducible():
                c=3
                return [vpd,3,vpd-2,"Type IV", c]
        if self.b6().valuation >=3:
            #another change of coordinates.. we are in stp6
///
}}}

{{{id=35|
E = EllipticCurve(pAdicField(11), [0,0,0,0,0], allow_singular=True);  E.b6()
///
0
}}}

{{{id=36|
Tate(E)
///
([3, 3, 1, 'In where n=', 3], 'split multiplicative')
}}}

{{{id=37|

///
}}}