Конечные поля

advertisement
ИвГУ, ф-т МиКН, курс 2
"АЛГОРИТМИЧЕСКАЯ АЛГЕБРА"
Тема 10.
Конечные поля
(продолжение)
Лектор: Н. И. Яцкин, 2014
2
3
Общие теоремы
о конечных полях
Информация (напоминание) о ключевых
фактах общей теории полей. Подробности
можно найти в учебном пособии
Молдаванский Д. И. Введение в теорию
полей. Иваново: Изд-во ИвГУ, 1991. 92 с.
4
Конкретно по конечным полям можно рекомендовать справочник
Mullen G. L., Panario D. HANDBOOK OF FINITE FIELDS.
New York: CRC Press, 2013. xxxvi + 1010p.
5
Расширение поля является линейным пространством над .
Если это пространство является конечномерным, то расширение
называется конечным; размерность над называется степенью
расширения. Применяется обозначение:
[ : ]=
( ).
Всякое поле нулевой характеристики является расширением
своего простого подполя, изоморфного полю рациональных чисел ℚ.
В цепочке расширений
ℚ⊂ℝ⊂ℂ
первое является бесконечным, а второе – конечным степени 2.
6
Всякое поле простой характеристики является
расширением своего простого подполя, изоморфного полю .
Всякое конечное поле имеет простую характеристику
и, следовательно, является расширением некоторого ,
причем, в силу конечности как множества, это расширение
является конечным, некоторой степени , т. е. является
линейным пространством над
и
( )= .
Как линейное пространство изоморфно прямой степени ( ) ,
поэтому порядок (мощность) поля является примарным числом:
=
Тем самым доказана
.
7
Теорема 1 (о примарности порядка). Порядок
(мощность) произвольного конечного поля
характеристики является -примарным
числом = , где =
( )размерность как линейного пространства
над простым полем .
8
Теорема 2 (теорема существования). Для любого
примарного числа
поле порядка .
=
существует конечное
Доказательство использует следующий вспомогательный факт.
Лемма 1. Для любого натурального
над простым полем
существует неприводимый многочлен степени .
Доказательство леммы 1 см. в учебной
литературе, например:
Акритас А. Основы компьютерной алгебры
с приложениями. 1994.
,
9
Возвращаемся к доказательству теоремы 2. Выбрав произвольный
неприводимый многочлен ( ) степени над полем
и применив
следствие 3 из теоремы 3 предыдущей темы 9, мы получим поле
=
[ ]/( ( )),
содержащее как раз
элементов. Поле коэффициентов
вложено
в поле в качестве простого подполя (состоящего из многочленов
степени не выше 0).
10
Теорема 3 (теорема единственности). Два любых
конечных поля одинакового (примарного) порядка
=
изоморфны.
Доказательство см. в учебной литературе.
11
ВЫВОД. Таким образом, существует
единственное, с точностью до изоморфизма,
конечное поле заданного примарного порядка
= .
Оно обозначается:
.
12
Информация (напоминание) о понятии мультипликативной группы
кольца или поля.
Обратимые элементы произвольного кольца образуют
мультипликативную группу этого кольца ∗. В случае поля
все ненулевые элементы обратимы; получается (коммутативная)
мультипликативная группа ∗ = ∖ { }.
Важнейший факт о конечных полях:
13
Теорема 4 (о цикличности мультипликативной группы).
∗
Мультипликативная группа
конечного поля
является циклической группой порядка − .
Доказательство см. в
учебной литературе.
14
Информация (напоминание) о порождающих элементах в конечных
циклических группах. Понятие логарифма.
Во всякой конечной циклической группе =
порядка существуют
так называемые порождающие элементы ∈ такие, что групповая
оболочка ⟨ ⟩ = . Другими словами, для любого элемента ∈ найдется
такой показатель степени ( ≤ ≤ − ), что
=
.
Этот показатель можно назвать
логарифмом элемента по основанию :
=
.
15
Замечание 1. (1) Количество порождающих элементов в группе =
равняется значению функции Эйлера ( ).
(2) Единичный элемент никогда не является порождающим; в случае
простого числа − все неединичные элементы являются
порождающими.
16
Применительно к мультипликативной группе ∗ ≅
получается: порождающими будут некоторые из классов
смежности ( ) + ( ) , а именно, - такие, что при
возведении в степень ( ( )) (где ≤ ≤ − )
[по модулю неприводимого многочлена ( ) степени ]
исчерпываются все ненулевые многочлены ( ) степени,
меньшей, чем :
( ) = ( ( )) ( ).
17
Наиболее простым (в вычислительном отношении) является
такой случай, когда в качестве порождающего элемента может
выступить многочлен ( ) = . В этом случае все элементы
могут быть представлены в удобной степенной форме:
( ) = ≤ ≤
=
( );
− ;
( ).
18
Возвращаемся к заданию 5 из темы 9.
В мультипликативной группе ∗ поля
, построенного
с помощью неприводимого многочлена ( ) =
+
+ ,
все элементы представляются как степени .
Если же в качестве неприводимого многочлена будет выбран
(также неприводимый) многочлен ( ) =
+ , то,
не смотря на то, что (в соответствии с теоремой единственности)
получится то же самое (с точностью до изоморфизма) поле
и,
следовательно, та же самая (с точностью до изоморфизма) группа ∗ ,
многочлен уже не годится в качестве порождающего.
19
ВЫВОД. Необходимо более тщательное
исследование понятия неприводимости для многочленов
над конечным полем, а также выяснение условий на
неприводимый многочлен,
обеспечивающих описанное
выше степенное представление
элементов мультипликативной
группы.
20
Теорема 5 (о неприводимых многочленах). Для всякого
нормализованного неприводимого многочлена ( )
степени над полем
имеет место делимость:
( )|
Доказательство см. в учебной
литературе.
−
.
(*)
21
Примитивные многочлены
Определение. Нормализованный многочлен ( ) степени
над полем
называется примитивным, если ( )
удовлетворяет условию делимости (*) и, кроме того,
при <
− , - следующим условиям неделимости:
( )∤
−
.
(**)
22
Замечание 2. Имеет место "накладка" с терминами.
В теории многочленов над кольцом целых чисел (и другими
факториальными кольцами; см. тему 7) уже вводилось
понятие примитивности многочлена, которая понималась
как взаимная простота коэффициентов многочлена.
Здесь термин примитивность используется в другой
ситуации (многочлены рассматриваются над полем,
причем – конечным) и термину придается другой смысл:
см. условия (*) и (**).
Так поступать нехорошо. Но – ничего не поделаешь:
традиция!
23
Замечание 3. При проверке условий (**) достаточно
рассматривать значения показателя , являющиеся делителями
числа
− . Это вытекает из следующего элементарного факта.
Упражнение 1. Над любым полем справедливо:
[
− −
⇔ [ | ].
Найдите (совершенно "школьное", хотя
и не совсем тривиальное) доказательство
этого утверждения.
24
Снова возвращаемся к заданию 5 из темы 9:
Убедитесь в том, что
неприводимый многочлен
( )=
+
+ делит
− и не делит ни один из
многочленов
− ,
− .
Следовательно, ( ) является
примитивным. Многочлен же
( )=
+ , очевидно,
делит
− , и поэтому не
является примитивным.
= ,
= .
25
Обобщением леммы 1 о существовании неприводимого
многочлена произвольной степени является следующая
Лемма 2. Для любого натурального
над простым
полем
существует неприводимый примитивный
многочлен степени .
Доказательство см. в учебной литературе.
26
Теорема 6 (о примитивных многочленах).
Для всякого неприводимого примитивного многочлена
( ) степени над полем
справедливо: многочлен
( ) = представляет порождающий элемент
мультипликативной группы
∗
={ , ,
,…,
поля
=
где
=
[ ]⁄
.
Доказательство см. в учебной литературе.
( ) ,
}
27
28
ЛЕКСИКОГРАФИЧЕСКОЕ ПЕРЕЧИСЛЕНИЕ
ЭЛЕМЕНТОВ ПОЛЯ
Всякому многочлену
( )=
+
+ ⋯+
+
(1)
степени с коэффициентами из поля
= { , ,…, − }
можно поставить в соответствие его лексикографический
номер – натуральное число =
( ), заданное
в -ичной системе счисления формулой
( )=
+
+ ⋯+
+
.
. (2)
29
30
Обратно, всякому неотрицательному целому числу
(заданному привычной десятичной записью) можно
сопоставить последовательность его цифр в -ичной записи (2):
⟼[ ,
, … , , ],
а затем используем эти цифры как коэффициенты многочлена
( ), заданного формулой (1).
=
( )
Взаимно обратные отображения =
( )и =
(при фиксированном ) задают биективное соответствие между
кольцом многочленов [ ] и
множеством неотрицательных
целых чисел.
31
Пример 1. В следующей таблице
приводятся в лексикографическом
порядке все элементы подпространства
( ) [ ], т. е. все многочлены степени не
выше 2 над полем .
Обратите внимание на желтую заливку:
нормализованные многочлены заданной
степени располагаются в начале списка
всех многочленов заданной степени.
32
Табл. 1. (
Номер
0
1
2
3
4
5
6
7
8
Троичные
цифры
[0]
[1]
[2]
[1, 0]
[1, 1]
[1, 2]
[2, 0]
[2, 1]
[2, 2]
Многочлен
0
1
2
+
+
+
+
) [ ]
Степень,
нормализ.
−∞
0
0
1
1
1
1
1
1
33
Номер
9
10
11
12
13
14
15
16
17
Троичные
цифры
[1, 0, 0]
[1, 0, 1]
[1, 0, 2]
[1, 1, 0]
[1, 1, 1]
[1, 1, 2]
[1, 2, 0]
[1, 2, 1]
[1, 2, 2]
Многочлен
+
+
+
+
+
+
+
+
+
+
+
+
Степень,
нормализ.
2
2
2
2
2
2
2
2
2
34
Номер
18
19
20
21
22
23
24
25
26
Троичные
цифры
[2, 0, 0]
[2, 0, 1]
[2, 0, 2]
[2, 1, 0]
[2, 1, 1]
[2, 1, 2]
[2, 2, 0]
[2, 2, 1]
[2, 2, 2]
Многочлен
+
+
+
+
+
+
+
+
+
+
+
+
Степень,
нормализ.
2
2
2
2
2
2
2
2
2
35
36
ПРОЦЕДУРА ВЫЧИСЛЕНИЯ НЕПРИВОДИМОГО
ПРИМИТИВНОГО МНОГОЧЛЕНА
заданной степени, с минимальным
лексикографическим номером
Вспомогательные
средства
37
1. Maple-функция конвертации неотрицательного целого числа
из одной системы счисления в другую.
> convert(9876543210,base,3);
[ 0, 0, 2, 0, 2, 0, 1, 0, 1, 0, 1, 1, 2, 2, 0, 1, 1, 1, 1, 2, 2 ]
(Здесь от десятичной записи мы
переходим к троичной;
последовательность цифр
выдается так: номер разряда
возрастает слева направо.
Если в той среде, в которой вы
работаете, нет аналогичной
процедуры, то ее следует
написать.)
38
2. Maple-функция деления с остатком в кольце многочленов над
простым полем
(модулярного деления с остатком).
> Rem(x^5+x^4+2*x^3+2*x+1,2*x^3+2*x^2+x+2,x) mod 3;
2 x 22 x1
Обратите внимание на большую букву в имени функции Rem и на синтаксис
указания модуля, немодулярная версия
этой функции имеет имя rem; в теме 3
мы разбирали "самодельную" версию
модулярного деления QUOREMMOD.
39
3. Maple-функция суммирования членов последовательности.
> a:=[2,1,1,2,1];
sum('a[k]*x^(k-1)','k'=1..nops(a));
a := [ 2, 1, 1, 2, 1 ]
2xx 22 x 3x 4
Обратите внимание на синтаксис. Берутся
в апострофы: выражение для общего члена
последовательности, а также имя переменной,
по которой производится суммирование.
(Если в вашей среде аналогичная процедура
недоступна, то ее потребуется написать
самостоятельно.)
40
ПРОЦЕДУРА ВЫЧИСЛЕНИЯ
НЕПРИВОДИМОГО ПРИМИТИВНОГО МНОГОЧЛЕНА
заданной степени,
с минимальным лексикографическим номером,
над полем
> irredprimpoly:=proc(p::prime,n::posint,x::name)
local q,i,numb,k,f,s,signal,F;
q:=p^n; F:=x^(q-1)-1;
print(evaln(q)=q,evaln(F)=F);
#
#
#
#
#
= количество многочленов степени не выше −
= количество нормализованных многочленов степени
Далее вычисляется –ичный номер numb очередного
нормализованного многочлена степени ,
а затем и сам этот многочлен .
.
41
for i from q to 2*q-1 do
print(evaln(i)=i);
numb:=convert(i,base,p);
f:=sort(
convert(
sum(
'numb[k]*x^(k-1)','k'=1..nops(numb)
),
polynom),
x);
print(evaln(f)=f);
42
# Далее для
проверяется условие делимости (*)
# и в случае его выполнения выдается: signal=true.
if not Rem(F,f,x) mod p=0 then
print(`irred`=false);
else
signal:=true;
print(`irred`=true);
43
#
#
#
#
#
#
Далее для всех показателей s,
в пределах от 2 до q-2, делящих q-1
проверяются условия неделимости (**);
в случае нарушения хотя бы одного из них
выдается signal=false и производится
выход из цикла по s.
for s from 2 to q-2 do
print(evaln(s)=s);
if irem(q-1,s)=0 and
Rem(x^(s)-1,f,x) mod p=0 then
signal:=false;
print(`prim`=false);
break;
fi;
od;
44
# Если по завершении цикла по s
# получено signal=true,
# то текущий многочлен
возвращается.
if signal then
print(`prim`=true);
RETURN(f);
fi;
fi;
od;
45
Пример 2. Покажем работу процедуры с отладочными print'ами.
> irredprimpoly(3,2,x);
q9, Fx 81
i9
i10
i11
numb[ 0, 0, 1 ]
f x 2
irred false
numb[ 1, 0, 1 ] f x 21
irred true
s2 s3 s4
prim false
numb[ 2, 0, 1 ] f x 22
irred true
46
s2
prim false
i12
numb[ 0, 1, 1 ]
f x 2x
irred false
i13
numb[ 1, 1, 1 ]
f x 2x1
irred false
i14
numb[ 2, 1, 1 ]
f x 2x2
irred true
s2 s3 s4 s5 s6 s7
prim true
2
x x2
47
48
Упражнение 2. Найдите неприводимый примитивный многочлен
степени = с наименьшим лексикографическим номером
над полем
.
Упражнение 3. Убедитесь в том, что многочлен ( ) =
является неприводимым и примитивным над полем
+
.
+
49
Замечание 4. Стандартными средствами Maple можно найти неприводимые
и примитивные многочлены заданной степени
над
по факторизациям
двучлена ( ) =
− и его аналогичных по виду делителей.
Например, следующее вычисление
> Factor(x^8-1) mod 3;Factor(x^4-1) mod 3;Factor(x^2-1) mod 3;
( x1 ) ( x 22 x2 ) ( x2 ) ( x 21 ) ( x 2x2 )
( x1 ) ( x2 ) ( x 21 )
( x1 ) ( x2 )
показывает, что многочлены
+
+ и
+ + неприводимы и
примитивны над , в то время как
+ неприводим, но не примитивен.
50
Информация. Известен алгоритм, значительно более совершенный по
сравнению с "бесхитростной" процедурой irredprimpoly, вычисляющий
так называемые полиномы Конвея, неприводимые и примитивные, заданной
степени
, над заданным
. Именно они используются (по умолчанию) для
определения конечных полей такими системами компьютерной алгебры как
Sage. Подробности о том, в чем преимущества алгоритма Конвея, а также
рабочие таблицы можно найти, например, на Frank Lübeck's Homepage:
http://www.math.rwth-aachen.de/~Frank.Luebeck/data/ConwayPol/index.html
(Скажем, для = и
наша процедура дает
= полином Конвея равен
+ + .)
+
+ , в то время как
51
ПРОЦЕДУРА, ОПРЕДЕЛЯЮЩАЯ
АРИФМЕТИКУ ПОЛЯ ГАЛУА
> GaloisField:=proc(p::prime,n::posint,x::name)
local q,i,j,numb,h,f,f0,g,s,signal,
addtable,multable,opptable,invtable,logtable;
q:=p^n; # Порядок поля.
numb:=array(0..2*q-1); # Массив –ичных номеров.
# Таблицы сложения и умножения.
addtable:=array(0..q-1,0..q-1);
multable:=array(0..q-1,0..q-1);
# Таблицы противоположных и обратных элементов.
opptable:=array(1..2,0..q-1);
invtable:=array(1..2,1..q-1);
52
# Таблица логарифмов.
logtable:=array(1..2,1..q-1);
# Заполнение массива –ичных номеров.
for i from 0 to 2*q-1 do
numb[i]:=convert(i,base,p);
od;
# Вычисление соответствующих многочленов
# степени меньшей , представляющих элементы поля.
for i from 0 to q-1 do
g[i]:=sort(
convert(
sum(
'numb[i][h]*x^(h-1)','h'=1..nops(numb[i])
),
polynom),
x);
od;
53
# Поиск неприводимого примитивного многочлена f0,
# задающего поле (модифицированная версия
# процедуры irredprimpoly).
for i from q to 2*q-1 do
f:=sort(
convert(
sum(
'numb[i][h]*x^(h-1)','h'=1..nops(numb[i])
),
polynom),
x);
if Rem(x^(q-1)-1,f,x) mod p=0 then
signal:=true;
54
for s from 2 to q-2 do
if irem(q-1,s)=0 and
Rem(x^(s)-1,f,x) mod p=0 then
signal:=false;
break;
fi;
od;
if signal then
f0:=f;
break;
fi;
fi;
od;
55
# Заполнение (квадратных) таблиц
# сложения и умножения.
for i from 0 to q-1 do
for j from 0 to q-1 do
addtable[i,j]:=Rem(g[i]+g[j],f0,x) mod p;
multable[i,j]:=Rem(g[i]*g[j],f0,x) mod p;
od;
od;
56
# Заполнение (двустрочных) таблиц
# противоположных и обратных элементов.
for i from 0 to q-1 do
opptable[1,i]:=g[i];
for j from 0 to q-1 do
if addtable[i,j]=0 then
opptable[2,i]:=g[j];
break;
fi;
od;
od;
57
for i from 1 to q-1 do
invtable[1,i]:=g[i];
for j from 1 to q-1 do
if multable[i,j]=1 then
invtable[2,i]:=g[j];
break;
fi;
od;
od;
58
# Заполнение (двустрочной) таблицы логарифмов
# по основанию x.
for i from 1 to q-1 do
logtable[1,i]:=g[i];
for j from 0 to q-2 do
if Rem(x^j-g[i],f0,x) mod p=0 then
logtable[2,i]:=j;
break;
fi;
od;
od;
59
# Возвращаются:
# - порядок поля,
# - определяющий многочлен f0,
# - все перечисленные выше таблицы.
RETURN(q,f0,addtable,multable,
opptable,invtable,logtable);
end proc;
60
Пример 3. Применим процедуру GaloisField для описания
поля из девяти элементов
. Обратите внимание, что она работает с
таблицами как с массивами (array), однако для наглядного представления
ответов удобнее возвращаемые процедурой данные конвертировать в тип
Matrix. Понадобится также настроить Maple на возможность вывода
матриц неограниченного размера (команда interface).
> gf9:=GaloisField(3,2,x);
gf9 := 9, x 2x 2, addtable , multable , opptable , invtable , logtable
Результат возвращается "недовычисленным": массивы представлены на
уровне имен. Вычислим третью компоненту ответа.
> eval(gf9[3]);
Вот в каком виде выводится двумерный массив:
61
array( 0 .. 8, 0 .. 8, [
( 0, 0 )0
( 0, 1 )1
( 0, 2 )2
( 0, 3 )x
( 0, 4 )x1
( 0, 5 )x2
( 0, 6 )2 x
( 0, 7 )2 x1
( 0, 8 )2 x2
( 1, 0 )1
( 1, 1 )2
( 1, 2 )0
( 1, 3 )x1
( 1, 4 )x2
62
( 1, 5 )x
( 1, 6 )2 x1
( 1, 7 )2 x2
( 1, 8 )2 x
( 2, 0 )2
( 2, 1 )0
( 2, 2 )1
( 2, 3 )x2
( 2, 4 )x
( 2, 5 )x1
( 2, 6 )2 x2
( 2, 7 )2 x
( 2, 8 )2 x1
( 3, 0 )x
( 3, 1 )x1
63
( 3, 2 )x2
( 3, 3 )2 x
( 3, 4 )2 x1
( 3, 5 )2 x2
( 3, 6 )0
( 3, 7 )1
( 3, 8 )2
( 4, 0 )x1
( 4, 1 )x2
( 4, 2 )x
( 4, 3 )2 x1
( 4, 4 )2 x2
( 4, 5 )2 x
( 4, 6 )1
( 4, 7 )2
64
( 4, 8 )0
( 5, 0 )x2
( 5, 1 )x
( 5, 2 )x1
( 5, 3 )2 x2
( 5, 4 )2 x
( 5, 5 )2 x 1
( 5, 6 )2
( 5, 7 )0
( 5, 8 )1
( 6, 0 )2 x
( 6, 1 )2 x1
( 6, 2 )2 x2
( 6, 3 )0
( 6, 4 )1
65
( 6, 5 )2
( 6, 6 )x
( 6, 7 )x 1
( 6, 8 )x 2
( 7, 0 )2 x1
( 7, 1 )2 x 2
( 7, 2 )2 x
( 7, 3 )1
( 7, 4 )2
( 7, 5 )0
( 7, 6 )x1
( 7, 7 )x2
( 7, 8 )x
( 8, 0 )2 x2
( 8, 1 )2 x
66
( 8, 2 )2 x 1
( 8, 3 )2
( 8, 4 )0
( 8, 5 )1
( 8, 6 )x 2
( 8, 7 )x
( 8, 8 )x 1
])
Конвертируем массив в матрицу, предварительно вызвав пакет
LinearAlgebra и настроив интерфейс вывода матриц.
> with(LinearAlgebra):
interface(rtablesize=infinity);
> addtable:=convert(gf9[3],Matrix);
67
addtable :=
 0

 1

 2
 x

 x1
 x2

 2 x
2 x1

2 x2

1
2
0
x1
x2
x
2 x1
2 x2
2x
2
0
1
x2
x
x1
2 x2
2x
2 x1
x
x1
x2
2x
2 x1
2 x2
0
1
2
x1
x2
x
2 x1
2 x2
2x
1
2
0
x2
x
x1
2 x2
2x
2 x1
2
0
1
2x
2 x1
2 x2
0
1
2
x
x1
x2
2 x1
2 x2
2x
1
2
0
x1
x2
x
2 x2

2 x 

2 x1
2 

0 

1 

x2 
x 

x1 
68
Аналогичным образом можно "визуализировать" другие компоненты ответа.
multable :=
0

0


0

0


0


0


0

0


0

0
1
2
x
x1
x2
2x
2 x1
2 x2
0
2
1
2x
2 x2
2 x1
x
x2
x1
0
x
2x
2 x1
1
x1
x2
2 x2
2
0
x1
2 x2
1
x2
2x
2
x
2 x1
0
x2
2 x1
x1
2x
2
2 x2
1
x
0
2x
x
x2
2
2 x2
2 x1
x1
1
0
2 x1
x2
2 x2
x
1
x1
2
2x
0 

2 x2

x1 
2 

2 x1

x 

1 
2 x 

x2 
69
0 1 2 x

opptable := 
0 2 1 2 x
1

invtable := 
1
2
x
2 x1
x1
x2 2 x
2 x2 2 x1 x
x1
x
2 x1 2 x2

x2
x1 
x2
2x
2 x1
2 x1 2 x2 x2
1 2 x x1 x2 2 x

logtable := 
7
6
5
0 4 1
2 x2

2x 
2 x1 2 x2

2
3 
70
ЗАЧЕМ НУЖНЫ ЛОГАРИФМЫ?
Представление элементов конечного поля
как
многочленов над полем , имеющих степень не выше − ,
позволяет легко производить сложение [без использования
деления с остатком на определяющий поле неприводимый
многочлен ( )]. Несколько сложнее производить умножение:
произведение многочленов приводится по модулю ( ).
Применение степенного представления ненулевых элементов
как степеней
позволяет легко осуществлять умножение:
при умножении показатели (логарифмы) складываются. При
этом, естественно, затрудняется сложение: сумму
+ надо
представлять в виде .
71
Download