F4 (алгоритм)

Материал из testwiki
Перейти к навигации Перейти к поиску

Алгоритм F4 был предложен Жан-Шарль Фожером (Jean-Charles Faugerе) в 1999 г как новый эффективный алгоритм вычисления базиса Грёбнера[1]. Этот алгоритм вычисляет базис Грёбнера идеала в кольце многочленов с помощью серии стандартной процедуры линейной алгебры: приведений матриц к ступенчатому виду. Он является одним из самых быстрых на сегодняшний день.

Алгоритм

Определения

  • Критическая пара (fi,fj) является членом

TTK[x1,...,xn]TK[x1,...,xn],Pair(fi,fj):=(HOKij,ti,fi,tj,fj)

такое, что

HOK(Pair(fi,fj))=HOKij=LT(tifi)=LT(tjfj)=HOK(fi,fj)

  • Определим степень критической пары pi,j=Pair(fi,fj),deg(pi,j) как deg(HOKi,j).
  • Определим следующие операторы: Left(pi,j):=tifi and Right(pi,j):=tjfj

Псевдокод алгоритма F4 (упрощённая версия)

Вход:

{F конечное подмножество K[X1,...,Xn]Sel функция List(Pairs)List(Pairs)такое, что Sel(I) если I

Выход: конечное подмножество K[X1,...,Xn]


G:=F,F~0+:=F:=0 и P:={Pair(f,g)|(f,g)G2 c fg}

While P do

d:=d+1

Pd:=Sel(p)

P:=PPd

Ld:=Left(Pd)Right(Pd)

F~d+:=Reduction(Ld,G)

for hF~d+ do

P:=P{Pair(h,g)|gG}G:=G{h}

return

G

Алгоритм редукции

Теперь мы можем расширить определение редукции полинома по модулю

подмножества K[X1,...,Xn], до редукции подмножества K[X1,...,Xn] по

модулю другого подмножества

K[X1,...,Xn]

:

Вход: L, G конечные подмножества

K[X1,...,Xn]

Выход: конечные подмножества K[X1,...,Xn] (Может быть пустым)


F:=SymbolicPreprocessing(L,G)

F~:=Редукция Гауса F относительно<

F~+:={fF~|LT(f)∉LT(F)}

return

F+~

Арифметическая операция не используется: это символьный препроцессинг.

Алгоритм Символьного Препроцессинга

Вход: L, G конечные подмножества

K[X1,...,Xn]

Выход: конечные подмножества K[X1,...,Xn]

F:=L

Done:=LT(F)

while T(F)Done do

mT(F)Done

Done:=Done{m}

if m приводим сверху по модулю G then

существует gG И m'T:m=m'LT(g)

F:=F{m'g}

return

F

Лемма

Для всех многочленов pLd, мы имеем pGF~+0

Теорема (без доказательства)

Алгоритм F4 вычисляет базис Гребнера G в K[X1,...,Xn]

такой что FG И Id(G)=Id(F).

Замечание

Если #Sel(I)=1 для всех I, тогда алгоритм F4 сводится к алгоритму Бухбергера. В этом случае функция Sel является эквивалентом стратегии выбора для алгоритма Бухбергера.

Функция выбора

Вход:

P

список критических пар

Выход: список критических пар

d:=min{deg(lcm(p))}

Pd:={pP|deg(lcm(p))=d}

return

Pd

Назовём эту стратегию нормальной стратегией для

F4

.

Следовательно, если входные полиномы однородны, мы получаем в степени, и d — базис Гребнера.

На следующем шаге мы выбираем все критические пары, необходимые для вычисления базиса Гребнера в степени d+1.

Оптимизация алгоритма F4

Существует несколько путей оптимизации алгоритма:

  • включение критерия Бухбергера (или критерия F5);
  • повторное использование всех строк в приведённых матрицах.

Критерии Бухбергера Алгоритм — реализация:

(Gnew,pnew):=Update(Gold,Pold,h)

Вход: {конечное подмножество Gold в K[X1,...,Xn]конечное подмножество Pold критических пар в K[X1,...,Xn]0hK[x1,...,Xn]

Выход: конечное подмножество в

K[X1,...,Xn]

обновлённый список критических пар

Пседвокод алгоритма F4 (с критерием)

Вход:

{FK[X1,...,Xn]Sel функция List(Pairs)List(Pairs)

Выход: конечное подмножество K[X1,...,Xn].

G:= И P:= И d:=0

while F do

f:=first(F);F:F{f}

(G,P):=Update(G,P,f)

while P do

d:=d+1

Pd:=Sel(P);P:=PPd

Ld:=Left(Pd)Right(Pd)

(F~d+,Fd):=Reduction(Ld,G,(Fi)d=1,...,(d1))

for PF~d+

P:=P{Pair(h,g)|gG}

(G,P):=Update(G,P,h)

return

G

F4 и его отличия от Алгоритма Бухбергера

Пусть есть некоторое конечное множество многочленов F. По этому множеству строится большая разреженная матрица, строки которой соответствуют многочленам из F, а столбцы — мономам. В матрице записаны коэффициенты многочленов при соответствующих мономах. Столбцы матрицы отсортированы согласно выбранному мономиальному упорядочению (старший моном соответствует первому столбцу). Приведение такой матрицы к ступенчатому виду позволяет узнать базис линейной оболочки многочленов из F в пространстве многочленов.

Пусть в классическом алгоритме Бухбергера требуется провести шаг редукции многочлена f относительно g, и при этом g должен быть домножен на моном M. В алгоритме F4 в матрицу будут специально помещены f и Mg. Утверждается, что можно заранее подготовить множество всех потенциальных домноженных редукторов, которые могут потребоваться, и поместить их заранее в матрицу.[2]

Обобщим алгоритм F4[3]:

пусть нам требуется отредуцировать многочлен f относительно множества F. Для этого мы

(1) добавляем f в матрицу;

(2) строим носитель многочлена f (множество мономов);

(3) если пусто, то заканчиваем процедуру;

(4) выбираем максимальный моном M в (и выкидываем его из );

(5) если M не делится ни на один старший моном элементов F, то переходим к шагу (3);

(6) иначе выбираем редуктор rF (и дополнительный множитель t): тогда M=LM tr;

(7) добавляем tr в матрицу;

(8) добавляем мономы многочлена tr (кроме старшего M) ко множеству ;

(9) переходим к шагу (3).


Эта процедура пополнения матрицы домноженными редукторами называется символьным препроцессингом. Кроме того, вместо S-полиномов можно поместить в матрицу их левые и правые части (при редукции одной строки по другой автоматически получится S-полином).

Наконец, третьим отличием от алгоритма Бухбергера является то, что в алгоритме F4 разрешается поместить в одну матрицу части сразу нескольких S-полиномов, выбранных согласно какой-либо стратегии. Так, если на каждом шаге выбирается один S-полином, то он повторяет классический алгоритм Бухбергера.

Другая крайность — когда на очередном шаге редуцируется множество всех имеющихся S-полиномов. Это тоже не очень эффективно из-за больших размеров матриц. Автор алгоритма Ж.-Ш. Фожер предложил нормальную стратегию выбора S-полиномов для редукции[4], согласно которой выбираются S-полиномы с наименьшей степенью левых и правых частей. Она даёт хорошие эмпирические результаты для упорядочения DegRevLex и её выбор является естественным для однородных идеалов.

В алгоритм можно внести несколько естественных усовершенствований. Как и в классическом алгоритме вычисления базиса Грёбнера, можно применять критерии Бухбергера для отсеивания заведомо ненужных S-полиномов.

Реализации

Реализован алгоритм F4

  1. в FGb — собственная реализация Фожера[4], которая включает интерфейсы для его использования из C/C ++ или Maple;
  2. в системе компьютерной алгебры Maple в качестве опции method = fgb функции Groebner [gbasis];
  3. в системе компьютерной алгебры Magma, в системе компьютерной алгебры SageMath.

Пример

Задача: посчитать базис Грёбнера для многочленов {f1=abcd1;f2=abc+abd+acd+bcd;f3=ab+bc+ad+cd;f4=a+b+c+d}В начале присваиваем G=f4, P1=Pair(f3,f4), L1={(1,f3),(b,f4)}

1) Символьный препроцессинг(L1,G,):

F1={f3,bf4},T(F1)={ab,ad,b2,bc,bd,cd}

ab уже готов.

2) Символьный препроцессинг(L1,G,):

F1={f3,bf4},T(F1)={ab,ad,b2,bc,bd,cd}

ad сверху сводится к f4G.

3) Символьный препроцессинг(L1,G,):

F1={f3,bf4,df4},T(F1)={ab,ad,b2,bc,bd,cd,d2}

b2 не сводится к G.

4) F1={f3,bf4,df4}.

Матричное представление полученного F1:

A1=M(F1)=({abb2bcadbdcdd2}(df4)0001111(f3)1011010(bf4)1110100)

Редукция Гаусса полученной матрицы A1:

A1~=({abb2bcadbdcdd2}(df4)0001111(f3)1010101(bf4)0100201)

По этой матрице получаем:

F1~=[f5=ad+bd+cd+d2,f6=ab+bcbdd2,f7=b2+2bd+d2]

А так как ab,adLT(F1), то

F1+~=[f7] и тогда G={f4,f7}.

Для следующего шага мы должны рассмотреть P2={Pair(f2,f4)}

Отсюда L2={(1,f2),(bc,f4)}и={F1}.

В Символьном препроцессинге можно попытаться упростить 1f2иbcf4 используя предыдущие вычисления:

Например,LT(bcf4)=abc=LT(cf6) и поэтому вместо bcf4 можно использовать cf61) Символьный препроцессинг

F2={f2,cf6},T(F2)={abc,bc2,abd,acd,bcd,cd2}

2) Символьный препроцессинг

F2={f2,cf6},T(F2)={abc,bc2,abd,acd,bcd,cd2}

3) Символьный препроцессинг

F2={f2,cf6},T(F2)={abc,bc2,abd,acd,bcd,cd2}abd сводится к bcf4 а также к bf5

Опишем упрощение

Цель: заменить любое произведение mf на произведение (uf)f, где (t,f) — ранее вычисленная строка, а uf делит моном m

В первом варианте алгоритма: некоторые строки матрицы никогда не используются (строки в матрице F~dF~d+).

Новая версия алгоритма: мы сохраняем эти строки

mfRows(F)m'f' c mm'

mfRows(F)Xkf'

SIMPLIFY пытается заменить произведение mf произведением (ut)f', где

(t,f')

уже вычисленная строка в гауссовой редукции, и u t делит моном m; Если мы нашли такое лучшее произведение, то рекурсивно вызываем функцию SIMPLIFY:

Вход:

{tT мономtK[X1,...,Xn] многочленF=(Fi)d=1,...,(d1), Где FkK[X1,...,Xn]

Выход: Результат m'*f' эквивалентно t*f

for u список делителей t do

if j(1j<d):(uf)Fj then

F~jГауссова редукцияFj Относительно<

!pF~j:LT(p)=LT(u*f)

if ut then

return Simplify(tu,p,F)

else return 1*p

return

t*f

Algorithm SYMBOLICPREPROCESSING

Вход:

{L,G конечные подмножества K[X1,...,Xn]F=(Fi)d=1,...,(d1), Где Fkконечное подмножествоK[X1,...,Xn]

Выход: конечное подмножество K[X1,...,Xn].

F:=L

Done:=LT(F)

while T(F)Done do

mT(F)Done

if m приводим сверху по модулю G then

существует gG И m'T:m=m'LT(g)

F:=F{Simplify(m',g,F)}

return

F

Теперь возвращаемся к примеру.

4) Символьный препроцессинг

F2={f2,cf6,bf5},T(F2)={abc,bc2,abd,acd,bcd,cd2,b2d,bd2}

И так далее….

5) Символьный препроцессинг

F2=[cf5,df7,bf5,f2,cf6]

A2=M(F2)=[0000111010000010002010001101010001010110000011000100100]

После редукции Гаусса:

A2~=M(F2)~=[00001110100001000201001001010110000111110100001101]

F2~=[f9=acd+bcd+c2d+cd2,f10=b2d+2bd2+d3,f11=abd+bcdbd2d3,f12=abcbcdc2d+bd2cd2+d3,f13=bc2+c2dbd2d3]

и G={f4,f7,f13}

На следующем шаге имеем:

L3={(1,f1),(bcd,f4),(c2,f7),(b,f13)}

и рекурсивно вызываем упрощение:

Simplify(bcd,f4)=Simplify(cd,f6)=Simplify(d,f12)=(d,f12)

На следующем шаге имеем:

L3={(1,f1),(bcd,f4),(c2,f7),(b,f13)} и F3=[f1,df12,c2f7,bf13,df13,df10]

После некоторых вычислений, получается, что ранг M(F3) составляет 5.

Это означает, что есть бесполезное сведение к нулю.

На следующем шаге имеем:

L3={(1,f1),(bcd,f4),(c2,f7),(b,f13)} и F3=[f1,df12,c2f7,bf13]

Символьный препроцессинг

F3=[f1,df12,c2f5,bf13,df13,df10]

F3~=[f15=c2b2c2d2+2bd3+2d4,f16=abcd1,f17=bcd2c2d2bd3d4+1,f18=c2bd+c2d2bd3d4,f19=b2d2+2bd3+d4]

Примечания

Шаблон:Примечания

Литература

  • J.-C. Faug`ere. A new efficient algorithm for computing Gr¨obner bases without reduction to zero (F5).
  • J.-C. Faug`ere A New Efficient Algorithm for Computing Gr¨obner Bases (F4). Journal of Pure and Applied Algebra, 139 (1999), 61-88.
  • Cox D., Little J., O’Shea D., Ideals, Varieties and Algorithms. An Introduction to Computational Algebraic Geometry and Commutative Algebra, New York, NY: Springer, 1998. [Имеется перевод: Кокс Д., Литтл Дж., О’Ши Д., Идеалы, многообразия и алгоритмы, М., Мир, 2000.]