在有限域中计算平方根时的 Sage 误差

Sage error while calculating square root in finite field

提问人:fepaul 提问时间:10/12/2023 最后编辑:Adafepaul 更新时间:10/14/2023 访问量:18

问:

错误信息: TypeError:不在主子字段中

在处理上述异常的过程中,发生了另一个异常:

TypeError:无法将 z^3 + z + 1 转换为有理数

在处理上述异常的过程中,发生了另一个异常:

ValueError: z^3 + z + 1 不在图像中(映射到强制系统内部 -- 使用前复制) 环形: 寄件人:大小为 2 的有限域 收件人:z 中大小为 2^4 的有限域

我只想在鼠尾草的有限域中计算多项式的平方根。我知道它存在,并且可以通过将每个系数的平方根乘以变量^(exponent/2)来计算,因为只有偶数指数出现 - 我该如何实现?

我的代码适用于二进制 Goppa 多项式 G,但不适用于一般 Goppa 多项式 - 问题在于某些东西的转换

这些是使用的变量

K ist 定义如下(所以 F_2^m):

f = irreducibles_z[0]
    #Now we can initialise the field
    K.<z> =  GF(2^m, modulus = f)
return K

西格玛 [z^2, z^3 + z^2 + 1, z^3 + z^2 + z, z, 0, z^3 + z, z^3 + z + 1, 1, z + 1, z^3, z^3 + 1, z^3 + z^2 + z + 1, z^3 + z^2, z^2 + z + 1, z^2 + z, z^2 + 1]

g (z^2 + z + 1)*x^3 + (z^3 + z^2 + z + 1)*x^2 + (z^3 + z^2 + 1)*x + z^3 + z + 1

z 中的 K 有限域,大小为 2^4

吨 3

米 4

n 16

米 r

G 单元商多项式环 x 在有限域上,z 大小为 2^4,模量为 x^3 + z^2 x^2 + z^3 x + z^3 +z^2+ z + 1

SW (z^2 + z)x^2 + z^2 x + z^2+ z + 1

此函数被调用

v = calculate_v(g, K, t, Sw, verbose)

它执行以下操作

def calculate_v(g, K, t, Sw, verbose):
    #This helper field with indeterminate b is used 
    # to check for all x's if they are a square, 
    #as this functionality is not available for 
    # F_{2^m}[x]/g(x,z), but is available for F_{2^t}
    G.<x> = K.extension(g)
    _.<b> = GF(2)[]
    --> ERROR: SqrtField.<b> = GF(2^t, modulus = g(b))

    #This helper function checks for all pairs of 
    # C_i*x^i if c_i is a square and x^i is a square, 
    #because only then c_i*x^i is a square
    def is_square_f2mx(el):
        coefs = list(el)
        result = True
        for index,coef in enumerate(coefs):
            if coef != 0:
                result = result and (b^index).is_square() and coef.is_square()
        return result

    #This helper function converts an element from helper
    # field SqrtField back to F_{2^m}[x]/g(x)
    def b_to_x(element):
        xcoefs = element.polynomial().coefficients(sparse = False)
        xvalue = 0
        for exponent,xcoef in enumerate(xcoefs):
            if xcoef != 0:
                xvalue += x^exponent
        return xvalue

    #Using the observation from the previous cell, 
    # this function calculates the square root 
    # of an element in F_{2^m}[x]
    #by taking the square root of each coefficient c_i 
    # and each x^i separately 
    # and then multiplying them afterwards
    def sqrt_f2mx(element, Sw):
        # assert is_square_f2mx(element), "not a square"
        result = 0
        for index,coef in enumerate(list(element)):
            if coef != 0:
                #bsquare_for_x = sqrt(b^index)
                #xsquare = b_to_x(bsquare_for_x)
                coefsqrt = sqrt(coef)
                result += coefsqrt*x ^(index/2) #xsquare
        return result
    
    v = sqrt_f2mx(x + Sw^-1, Sw)
    if verbose:
        latexprint(r"\text{This is our polynomial }V(x,z)")
        latexprint(latex(v))
    return v

问题是这条线不起作用。 对于二元多项式 g,它起作用(GF(2) 中的所有系数,但 GF(2^m) 中的系数不起作用SqrtField.<b> = GF(2^t, modulus = g(b))

任何建议

感谢您的帮助!

类型Error Sage

评论


答: 暂无答案