说,我在GF(2)上有一个多项式p(x),在GF(4)上有一个多项式g(x)。例如,
gf2 = gf(2, 1);
gf4 = gf(2, 2);
p2 = Polrev(vector(5, i, random(gf2)));
p4 = Polrev(vector(7, i, random(gf4)));
p2 * p4
>> *** at top-level: p2*p4
>> *** ^---
>> *** _*_: inconsistent multiplication t_FFELT * t_FFELT.
pari-gp是否提供了在这种情况下继续进行的任何工作?如果不是,我该如何进行所需的嵌入?
答案 0 :(得分:2)
不幸的是,解决方案是你自己的。 PARI / GP不提供有限域嵌入的东西。 为了我的目的,我为有限域嵌入开发了以下函数:
get_gf_embedding(f: t_FFELT, g: t_FFELT) =
{
if(f.p != g.p,
error("** get_gf_embedding: fields are of different characterisitics")
);
if(f.p != g.p || poldegree(g.mod) % poldegree(f.mod) != 0,
error("** get_gf_embedding: finite fields are not embeddable")
);
my (smaller_field_min_poly = subst(f.mod, variable(f.mod), 'x));
my (larger_field_min_poly = subst(g.mod, variable(g.mod), 'y));
my (subfield_prim =
g^0 *
subst(
polrootsff(smaller_field_min_poly, f.p, larger_field_min_poly)[1].pol,
'y,
g
)
);
embedding(elt) =
subfield_prim^0 * subst((f^0 * elt).pol, variable((f^0 * elt).pol), subfield_prim)
};
有关算法详情,请参阅http://johnkerl.org/doc/ffcomp.pdf(第5.11节)。 使用上面的代码,您必须按如下方式重写代码:
embed = get_gf_embedding(gf2, gf4);
Polrev(apply(embed, Vecrev(p2))) * p4