ИвГУ, ф-т МиКН, курс 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 22 x1 Обратите внимание на большую букву в имени функции 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 ] 2xx 22 x 3x 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); q9, Fx 81 i9 i10 i11 numb[ 0, 0, 1 ] f x 2 irred false numb[ 1, 0, 1 ] f x 21 irred true s2 s3 s4 prim false numb[ 2, 0, 1 ] f x 22 irred true 46 s2 prim false i12 numb[ 0, 1, 1 ] f x 2x irred false i13 numb[ 1, 1, 1 ] f x 2x1 irred false i14 numb[ 2, 1, 1 ] f x 2x2 irred true s2 s3 s4 s5 s6 s7 prim true 2 x x2 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; ( x1 ) ( x 22 x2 ) ( x2 ) ( x 21 ) ( x 2x2 ) ( x1 ) ( x2 ) ( x 21 ) ( x1 ) ( x2 ) показывает, что многочлены + + и + + неприводимы и примитивны над , в то время как + неприводим, но не примитивен. 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 2x 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 )x1 ( 0, 5 )x2 ( 0, 6 )2 x ( 0, 7 )2 x1 ( 0, 8 )2 x2 ( 1, 0 )1 ( 1, 1 )2 ( 1, 2 )0 ( 1, 3 )x1 ( 1, 4 )x2 62 ( 1, 5 )x ( 1, 6 )2 x1 ( 1, 7 )2 x2 ( 1, 8 )2 x ( 2, 0 )2 ( 2, 1 )0 ( 2, 2 )1 ( 2, 3 )x2 ( 2, 4 )x ( 2, 5 )x1 ( 2, 6 )2 x2 ( 2, 7 )2 x ( 2, 8 )2 x1 ( 3, 0 )x ( 3, 1 )x1 63 ( 3, 2 )x2 ( 3, 3 )2 x ( 3, 4 )2 x1 ( 3, 5 )2 x2 ( 3, 6 )0 ( 3, 7 )1 ( 3, 8 )2 ( 4, 0 )x1 ( 4, 1 )x2 ( 4, 2 )x ( 4, 3 )2 x1 ( 4, 4 )2 x2 ( 4, 5 )2 x ( 4, 6 )1 ( 4, 7 )2 64 ( 4, 8 )0 ( 5, 0 )x2 ( 5, 1 )x ( 5, 2 )x1 ( 5, 3 )2 x2 ( 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 x1 ( 6, 2 )2 x2 ( 6, 3 )0 ( 6, 4 )1 65 ( 6, 5 )2 ( 6, 6 )x ( 6, 7 )x 1 ( 6, 8 )x 2 ( 7, 0 )2 x1 ( 7, 1 )2 x 2 ( 7, 2 )2 x ( 7, 3 )1 ( 7, 4 )2 ( 7, 5 )0 ( 7, 6 )x1 ( 7, 7 )x2 ( 7, 8 )x ( 8, 0 )2 x2 ( 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 x1 x2 2 x 2 x1 2 x2 1 2 0 x1 x2 x 2 x1 2 x2 2x 2 0 1 x2 x x1 2 x2 2x 2 x1 x x1 x2 2x 2 x1 2 x2 0 1 2 x1 x2 x 2 x1 2 x2 2x 1 2 0 x2 x x1 2 x2 2x 2 x1 2 0 1 2x 2 x1 2 x2 0 1 2 x x1 x2 2 x1 2 x2 2x 1 2 0 x1 x2 x 2 x2 2 x 2 x1 2 0 1 x2 x x1 68 Аналогичным образом можно "визуализировать" другие компоненты ответа. multable := 0 0 0 0 0 0 0 0 0 0 1 2 x x1 x2 2x 2 x1 2 x2 0 2 1 2x 2 x2 2 x1 x x2 x1 0 x 2x 2 x1 1 x1 x2 2 x2 2 0 x1 2 x2 1 x2 2x 2 x 2 x1 0 x2 2 x1 x1 2x 2 2 x2 1 x 0 2x x x2 2 2 x2 2 x1 x1 1 0 2 x1 x2 2 x2 x 1 x1 2 2x 0 2 x2 x1 2 2 x1 x 1 2 x x2 69 0 1 2 x opptable := 0 2 1 2 x 1 invtable := 1 2 x 2 x1 x1 x2 2 x 2 x2 2 x1 x x1 x 2 x1 2 x2 x2 x1 x2 2x 2 x1 2 x1 2 x2 x2 1 2 x x1 x2 2 x logtable := 7 6 5 0 4 1 2 x2 2x 2 x1 2 x2 2 3 70 ЗАЧЕМ НУЖНЫ ЛОГАРИФМЫ? Представление элементов конечного поля как многочленов над полем , имеющих степень не выше − , позволяет легко производить сложение [без использования деления с остатком на определяющий поле неприводимый многочлен ( )]. Несколько сложнее производить умножение: произведение многочленов приводится по модулю ( ). Применение степенного представления ненулевых элементов как степеней позволяет легко осуществлять умножение: при умножении показатели (логарифмы) складываются. При этом, естественно, затрудняется сложение: сумму + надо представлять в виде . 71