p:=poly(X^3+5*X+1,Dom::Rational): irreducible(p); TRUE
の根の一つ を に追加して新しい体 を作ります。
k:=Dom::AlgebraicExtension(Dom::Rational, subs(p,X=a),a): 3 Dom::AlgebraicExtension(Dom::Rational, 5 a + a + 1 = 0, a)
今度は のなかで を因数分解します。
p1:=poly(p,k): S:=factor(p1); [1, poly(X - a, [X], Dom::AlgebraicExtension(Dom::Rational, 3 2 2 5 a + a + 1 = 0, a)), 1, poly(X + a X + (a + 5), [X], 3 Dom::AlgebraicExtension(Dom::Rational, 5 a + a + 1 = 0, a)), 1] q:=S[4]; // S の第4成分を取り出す。 2 2 poly(X + a X + (a + 5), [X], Dom::AlgebraicExtension(Dom::Rational, 3 5 a + a + 1 = 0, a)) irreducible(q); TRUE
最後の行でわかるように は既約なので、 上と同様の操作で の根 を に付け加えて を作ります。
L:=Dom::AlgebraicExtension(k,subs(q,X=b),b); Dom::AlgebraicExtension(Dom::AlgebraicExtension(Dom::Rational, 3 2 2 5 a + a + 1 = 0, a), a b + a + b + 5 = 0, b)
これで を 内で因数分解できるはずです。
p2:=poly(p,L): factor(p2); [1, poly(X + (a + b), [X], Dom::AlgebraicExtension( 3 Dom::AlgebraicExtension(Dom::Rational, 5 a + a + 1 = 0, a), 2 2 a b + a + b + 5 = 0, b)), 1, poly(X - a, [X], Dom::AlgebraicExtension( 3 Dom::AlgebraicExtension(Dom::Rational, 5 a + a + 1 = 0, a), 2 2 a b + a + b + 5 = 0, b)), 1, poly(X - b, [X], Dom::AlgebraicExtension( 3 Dom::AlgebraicExtension(Dom::Rational, 5 a + a + 1 = 0, a), 2 2 a b + a + b + 5 = 0, b)), 1]