> < ^ Date: Wed, 30 Jul 2003 11:54:20 -0600 (MDT)
> < ^ From: Alexander Hulpke <hulpke@math.colostate.edu >
> < ^ Subject: Re: Matrice powers

Dear GAP-Forum,

Nicola Sottocornola reported some problem with inverting a matrix defined
over an algebraic extension.

This problem stems from the fact that the algebraic extension (in GAP) did
not know that it has no zero divisors. This error will be corrected in the
next release.

As a workaround until then, you can read in the attached method into GAP4.3.

Best wishes,

Alexander Hulpke

-- Colorado State University, Department of Mathematics,
Weber Building, 1874 Campus Delivery, Fort Collins, CO 80523-1874, USA
email: hulpke@math.colostate.edu, Phone: ++1-970-4914288
http://www.math.colostate.edu/~hulpke

```#############################################################################
##
#M  AlgebraicElementsFamily      generic method
##
InstallMethod(AlgebraicElementsFamily,"generic",true,
[IsField,IsUnivariatePolynomial],0,
function(f,p)
local fam,i;
if not
IsIrreducibleRingElement(PolynomialRing(f,
[IndeterminateNumberOfLaurentPolynomial(p)]),p) then
Error("<p> must be irreducible over f");
fi;
fam:=AlgebraicElementsFamilies(p);
i:=PositionProperty(fam,i->i[1]=f);
if i<>fail then
return fam[i][2];
fi;
```

fam:=NewFamily("AlgebraicElementsFamily(...)",IsAlgebraicElement,
IsAlgebraicElement and CanEasilySortElements and IsZDFRE,
IsAlgebraicElementFamily and CanEasilySortElements);

# The two types
fam!.baseType := NewType(fam,IsAlgBFRep);
fam!.extType := NewType(fam,IsAlgExtRep);

# Important trivia
fam!.baseField:=f;
fam!.baseZero:=Zero(f);
fam!.baseOne:=One(f);
fam!.poly:=p;
fam!.polCoeffs:=CoefficientsOfUnivariatePolynomial(p);
fam!.deg:=DegreeOfLaurentPolynomial(p);
i:=List([1..DegreeOfLaurentPolynomial(p)],i->fam!.baseZero);
i[2]:=fam!.baseOne;
fam!.primitiveElm:=ObjByExtRep(fam,i);

SetIsUFDFamily(fam,true);
SetCoefficientsFamily(fam,FamilyObj(One(f)));

# and set one and zero
SetZero(fam,ObjByExtRep(fam,Zero(f)));
SetOne(fam,ObjByExtRep(fam,One(f)));

StoreAlgExtFam(p,f,fam);

```  return fam;
end);
```