Quiero hacer algunos cálculos con finito de los anillos en la BRECHA. He encontrado una contradicción que no puedo explicar.
Cómo crear finito anillos en la BRECHA de uso de la estructura de las constantes se explica aquí en la página 45; también aquí. Así que para construir el ejemplo anillo de $\mathbb{Z}/2^n [X]/\langle X^2,2X \rangle$, he escrito la siguiente función en la BRECHA:
ExampleRing := function(n)
local T,O;
T := EmptySCTable(2,0); # 2 generators e,x as Z-module
O := [2^n,2]; # ord(e)=2^n and ord(x)=2
SetEntrySCTable(T,1,1,[1,1]); # e*e = 1*e
SetEntrySCTable(T,1,2,[1,2]); # e*x = 1*x
SetEntrySCTable(T,2,1,[1,2]); # x*e = 1*x
SetEntrySCTable(T,2,2,[]); # x*x = 0
return RingByStructureConstants(O,T,["e","x"]);
end;
Dentro de $\mathrm{ExampleRing}(4) = \mathbb{Z}/2^4 [X]/\langle X^2,2X \rangle$ considera que el ideal de la $\langle 2^2 - X \rangle$. El cociente del anillo es$\mathbb{Z}/2^3$, ¿verdad? Pero cuando me calcular el cociente con la BRECHA, se produce la $\mathbb{Z}/4 [X]/\langle X^2,2X \rangle$ lugar!
gap> R := ExampleRing(4);
<ring with 2 generators>
gap> AssignGeneratorVariables(R);
#I Assigned the global variables [ e, x ]
gap> Q := R / Ideal(R,[2^2 * e - x]);
<ring with 2 generators>
gap> Elements(Q);
[ 0*q1, q2, q1, q1+q2, 2*q1, 2*q1+q2, -q1, -q1+q2 ]
gap> One(Q);
q1
gap> 4*One(Q);
0*q1
gap> AssignGeneratorVariables(Q);
#I Assigned the global variables [ q1, q2 ]
gap> 2*q2;
0*q1
gap> q2^2;
0*q1
De modo que a) mi código es incorrecto, b) mi cálculo del cociente es malo, o c) la BRECHA de la implementación que está mal. Podría alguien aclarar esto?
También hay otros sistemas de álgebra computacional que puede calcular con anillos finitos de la forma $\mathbb{Z}/n [X] / \langle X^2,a+bX \rangle$?
Edit: al Parecer la BRECHA de la implementación que está mal o yo no lo uso correctamente. Aquí es un ejemplo muy simple: yo defino $\mathbb{Z}/8$ con estructura constantes y el cociente a cabo el ideal generado por a $2$. Esto debería ser $\mathbb{Z}/2$, pero la BRECHA se calcula el $\mathbb{Z}/4$:
gap> T := EmptySCTable(1,0);;
gap> SetEntrySCTable(T,1,1,[1,1]);
gap> R := RingByStructureConstants([8],T,["e"]);
<ring with 1 generators>
gap> AssignGeneratorVariables(R);
#I Assigned the global variables [ e ]
gap> Elements(R);
[ 0*e, e, 2*e, 3*e, 4*e, 5*e, 6*e, -e ]
gap> e*e;
e
gap> I := Ideal(R,[2*e]);
<two-sided ideal in <ring with 1 generators>, (1 generators)>
gap> Elements(I);
[ 0*e, 2*e, 4*e, 6*e ]
gap> Q := R/I;
<ring with 1 generators>
gap> Elements(Q);
[ 0*q1, q1, 2*q1, -q1 ]