Dans sa forme la plus simple,
GF a comme arguments un nombre premier p et un entier n>1
ou la puissance d’un nombre premier pn et un argument optionnel qui
est le nom de variable choisi pour le générateur du corps
(la variable doit être purgée au préalable).
GF crée un corps de Galois de caractéristique p et ayant pn
éléments, les éléments du corps sont alors 0 et les puissances de 0 à
pn−2 du générateur. Le corps lui-même est stocké dans une variable
libre (par défaut K, cette variable est affichée par le système, en même
temps que le nom du générateur et de la variable libre, par défaut k,
servant à représenter les élements du corps comme le quotient
ℤ/pℤ[k]/P(k) où P est un polynôme irréductible et primitif).
Par exemple :
GF(3,5)
ou GF(3^5)
crée un corps ayant 35 éléments dont le générateur
est g
(ou h
, ... si g est affectée). On peut créer un
élément du corps en prenant un polynôme en fonction de g, par
exemple g10+5g+1.
GF(2,8,a)
crée un corps ayant 28 éléments, et utilise
la variable a
pour en désigner le générateur (attention, faire
purge(a)
auparavant si nécessaire).
pmin
permet de connaitre le polynôme minimal
d’un élément du corps.
On peut ensuite créer des polynômes ou des matrices
ayant des coefficients dans le corps, et les manipuler
avec les instructions habituelles + - * / inv sqrt
,
quo, rem, quorem, diff, factor, gcd. egcd, ...
par exemple :
GF(3,5,b); A:=[[1,b],[b,1]]; inv(A)
calcule l’inverse
d’une matrice à coefficients dans le corps à 35 éléments
GF(5,3,c); p:=x^2-c-1; factor(p)
factorise le polynôme
p comme polynôme à coefficients dans le corps à 53 éléments,
on en déduit une valeur de racine carrée de c+1.
p:=randpoly(x,5,g); q:=diff(p); gcd(p,q)
génère un
polynôme à coefficients aléatoires puis calcule sa dérivée et
le PGCD ce qui permet de savoir si p
a des racines multiples.
Il y a encore quelques limitations dues à une implémentation incomplète de certains algorithmes (par exemple factorisation à plusieurs variables lorsque le polynôme n’est pas unitaire).
Dans sa forme la plus complète (mais plus difficile à manipuler et moins lisible), les éléments de ce corps et le corps lui-même sont représentés par GF(...) où ... est une séquence composée de :
Habituellement on donne un nom au corps crée (par exemple G:=GF(p,n)),
afin de construire un élément particulier du groupe à partir d’un
polynôme de ℤ/pℤ[X], on écrira par
exemple G(x^
3+x). Notez que G(x)
est un générateur du groupe multiplicatif G* lorsque
le polynôme minimal est généré par giac.
On tape :
On obtient (par exemple) :
^
8-k^
7-k^
6-k-1,k,undef)
Le corps G a 28=256 éléments et g=G(k) engendre le groupe
multiplicatif de ce corps ({ 1,g,g2,...g254 }).
On tape :
^
9)On obtient :
^
6+g^
2+1)On tape :
^
255
On obtient 1.
Comme vous pouvez le constater sur les exemples précédents, lorsque l’on
travaille avec le même corps, les réponses
contiennent des informations redondantes. C’est pourquoi la définition d’un
corps peut avoir un troisième argument : le nom du générateur
ou une liste contenant deux noms
ou trois noms de variable formelle, (le nom de l’indéterminée du polynôme
irréductible et le nom du corps de Galois que l’on doit mettre entre quote
pour que ces variables ne soient pas évaluées ainsi que le nom
du générateur). Cela permet d’obtenir un
affichage plus compact des éléments du corps.
On tape :
^
2)On obtient :
On tape :
^
3)On obtient :
Les éléments de GF(2,2) sont donc :
0,1,w,w^
2=w+1.
On peut enfin indiquer quel polynôme irréductible on souhaite utiliser, en l’indiquant en 2-ième paramètre (au lieu de n), par exemple :
G:=GF(2,w^8+w^6+w^3+w^2+1,['w','G'])
Si on donne un polynôme irréductible non primitif, Xcas l’indique et propose un remplacement par un polynôme primitif, par exemple :
G:=GF(2,w^8+w^7+w^5+w+1,['w','G'])
On obtient :
G:=GF(2,w^8-w^6-w^3-w^2-1,['w','G'],undef)