"Source: Text/Algebra/AlgCon.text";
"Line: 462";
"Date: Thu Sep 25 14:47:46 2025";
"Main: Fri Sep 26 14:29:19 2025";
// original file: Text/Algebra/AlgCon.text, line: 462
// Example: H89E2 ()
print "Example: H89E2";
ei := GetEchoInput();
SetEchoInput(true);
quat := func<i,j,k | [<1,1,1, 1>, <i,i,1, -1>, <j,j,1, -1>, <k,k,1, -1>,
  <1,i,i, 1>, <i,1,i, 1>, <1,j,j, 1>, <j,1,j, 1>, <1,k,k, 1>, <k,1,k, 1>,
  <i,j,k, 1>, <j,i,k, -1>, <j,k,i, 1>, <k,j,i, -1>, <k,i,j, 1>, <i,k,j, -1>]>;
con := &cat[quat((n+1) mod 7 +2, (n+2) mod 7 +2, (n+4) mod 7 +2):n in [0..6]];
C := Algebra< Rationals(), 8 | Setseq(Set(con)) >;
C;
IsAssociative(C);
assert not $1;
IsAssociative( sub< C | C.1, C.2, C.3, C.5 > );
assert $1;
a := (C.1 - C.2 + C.3 - C.5) / 2;
MinimalPolynomial(a);
MinimalPolynomial(a^-1);
MinimalPolynomial(C.2+C.3); 
MinimalPolynomial((C.2+C.3)^-1);
C3 := ChangeRing( C, GF(3) );
f := MinimalPolynomial(C3.2);
f;
#C3;
assert $1 eq 6561;
time Im := [ c : c in C3 | MinimalPolynomial(c) eq f ];
#Im;
assert $1 eq 702;
C5 := ChangeRing( C, GF(5) );
f := MinimalPolynomial(C5.2);
f;
#C5;
assert $1 eq 390625;
time Im := [ c : c in C5 | MinimalPolynomial(c) eq f ];
#Im;
assert $1 eq 15750;
SetEchoInput(ei);
