//basic tower example/////////////////////////////////////////// //Given (x_1+1)x_1(x_2+1)=x_2^2 and (x_2+1)x_2(x_4+1)=x_4^2,char=2 //define x_6:=x_2(x_4+1) and x_7:=x_1(x_2+1)(x_4+1) to get a //one-point curve description in terms of x_4,x_6,x_7, //with subscripts corresponding to pole orders at P_{\infty} F:=FiniteField(2); WT_MATRIX_S:=[[7,4]]; S:=PolynomialRing(F,2,"weight", [7,4,1,0]); AssignNames(~S, ["x" cat &cat [ "_" cat IntegerToString(WT_MATRIX_S[i,j]) : i in [1..#WT_MATRIX_S]] : j in [1..#WT_MATRIX_S[1]]]); WT_MATRIX_icS,integral_closure_S,I,delta,phi,psi:= integral_closure(F,S, 2, [[7,4]], [S|], S.1^4+S.2^7+S.1^3*S.2+S.2^6+S.1*S.2^4+S.1^3+S.1*S.2^2); AssignNames(~integral_closure_S, ["y" cat &cat [ "_" cat IntegerToString(WT_MATRIX_icS[i,j]) : i in [1..#WT_MATRIX_icS]] : j in [1..#WT_MATRIX_icS[1]]]); "I="; for i in [1..#Basis(I)] do i,Basis(I)[i]; end for; "delta=",delta; "phi="; for i in [1..#WT_MATRIX_icS[1]] do i,integral_closure_S.i@phi; end for; "psi="; for i in [1..Rank(S)] do i,S.i@psi; end for; //MAGMA's Integral Closure algorithm//////////////////// F:=FiniteField(2); FF:=FunctionField(F); P:=PolynomialRing(FF); f:=y^4+x^7+y^3*x+x^6+y*x^4+y^3+y*x^2; Ff:=FunctionField(f); C:=CoefficientRing(Ff); INT:=Integers(C); IC:=IntegralClosure(INT,Ff); B:=Basis(IC);B; //gives the result //[ 1, // Y, // 1/X*Y^2 + 1/X*Y, // 1/(X^5 + X^4 + X^3)*Y^3 + (X + 1)/X^3*Y^2 + (X + 1)/X^2*Y + 1/(X^2 + X + 1) ] // elements of orders 0,7,10, and 6 respectively, with B[3]-x*B[4]-B[2] (?) of order 5///////////////// //SINGULAR's normal function would give the following///////////// // LIB "normal.lib"; // ring r=2,(y,x),wp(7,4); // ideal i=y4+x7+y3x+x6+yx4+y3+yx2; // list nor=normal(i); // def R=nor[1]; // setring R; // normap;//corresponding to my psi/////////////////////// ////////////////////normap[1]=T(1)*T(3)+T(2) ////////////////////normap[2]=T(1) // norid;// a lex basis in T(1)=x,T(2), T(3), T(4), whatever they are////////////////////////////////// ///////norid[1]=T(1)^2+T(1)*T(2)+T(2)^2+T(3)^2+T(1)*T(4)+T(4)^2+T(1)+T(2)+T(4) ///////norid[2]=T(1)*T(2)*T(3)+T(2)^2*T(3)+T(3)^3+T(1)*T(3)*T(4)+T(3)*T(4)^2+T(3)^2+T(1)*T(4)+T(1)+T(4)+1 ///////norid[3]=T(2)^2*T(3)+T(1)*T(3)^2+T(2)*T(3)^2+T(1)*T(3)*T(4)+T(3)^2*T(4)+T(3)*T(4)^2+T(1)*T(2)+T(2)^2+T(1)*T(3)+T(3)^2+T(1)*T(4)+T(2)*T(4)+T(3)*T(4)+T(4)^2+T(1)+1 ///////norid[4]=T(2)^3+T(1)*T(3)^2+T(2)*T(3)^2+T(2)^2*T(4)+T(3)^2*T(4)+T(2)*T(4)^2+T(4)^3+T(2)^2+T(1)*T(3)+T(3)^2+T(4)^2+T(3) ///////norid[5]=T(1)*T(2)^2+T(1)*T(4)^2+T(1)*T(2)+T(3)^2+T(3)*T(4)+T(1)+T(4)+1