...ну и еще хорошо бы сказать, какие свойства от них нужны.
Исходя из алгоритма для пункта 2) требования к редуцирующим соотношениям можно описать следующим образом. Напомню, что в алфавите у меня отсутствуют элементы, обратные образующим, в наличии только сами образующие.
Если некоторый элемент
, представимый строкой из символов
допускает представление в виде другой, более короткой строки
, то должно существовать соотношение
, где строки
и
различны, несократимы (начинаются разными символами и заканчиваются разными), имеют разную длину (
короче, чем
) и строка
является подстрокой строки
, позволяя, таким образом, эту строку
укоротить (редуцировать). При этом подстановка строки
вместо
в строке
не обязательно должно давать строку
. Эта поблажка нужна чтобы не плодить редуцирующие правила до бесконечности, а обходиться некоторым компактным (но
полным!) множеством. При этом, разумеется, тождество
является следствием групповых соотношений.
Все возможные соотношения
должны удовлетворять условию полноты. Чтобы определиться что это значит сначала надо договориться как именно эти соотношения будут применяться. Договорённость такая. Соотношения применяются лишь
одним способом: в строке
ищется подстрока
и заменяется на
. Эту договорённость можно символически обозначать стрелкой:
. Полнота множества редуцирующих соотношений означает, что с последовательным применением этих правил (не важно в каком порядке) любую строку
элемента
можно привести к строке
минимально возможной для элемента
длины.
Так же можно потребовать минимальности самих соотношений
. То есть чтобы ни
, ни
нельзя было сократить с помощью какого-либо другого правила
. В принципе, это будет следовать из требования минимальности множества
. В самом деле, если мы можем редуцировать тождество
, то мы получим правило
(возможно, поменяв местами правую и левую часть — в зависимости от того, какая строка короче), в которой длина строки
будет короче, чем
. По этой причине вновь полученное правило будет более общ
о, и, возможно, упразднит одно или несколько правил в множестве редуцирующих соотношений.
Редуцирующие правила, удовлетворяющие требованиям выше, позволяют с легкостью строить множество элементов группы в виде дерева элементов. Если мы строим дерево ярус за ярусом, то встречая строку, суффикс которой (или она сама целиком) является левой частью какого-либо редуцирующего соотношения
, то, очевидно, этот элемент уже был представлен в виде более короткой строки на одном из предыдущих ярусов дерева. Поэтому текущую строку и соответствующую ей вершину дерева надо отбросить вместе со всеми ветвями, что из неё растут.
Проблемы возникают, когда редуцирующее правило
оказывается не совсем редуцирующим: длина строк
и
одинакова. Такие "ущербные" правила тем не менее нужны в силу требования полноты множества редуцирующих соотношений. Так же необходимость в них можно проследить из способа построения группы с помощью дерева элементов. Если элемент
допускает представление в виде нескольких различных минимальных строк
, то вершины дерева, соответствующие этим строкам, встретятся на одном ярусе; при этом их все надо отбросить в пользу только одной их них. С этими равновеликими парами строк связаны ещё тонкости, но пока не будет о грустном.
Теперь, когда определились, что же из себя представляют эти редуцирующие соотношения, надо придумать как их строить. Так как редуцирующие правила являются следствием групповых соотношений и групповых аксиом, то, очевидно, надо брать эти групповые соотношения и проделывать над ними различные преобразования до самого победного конца. Поскольку этих различных преобразований может быть целая куча, а время перебора как правило является экспонентой от числа возможностей, то интуиция настоятельно советовала мне стремиться к минимализму. Поэтому над парами строк я предлагаю оперировать следующими тремя действиями.
1) Сокращение пары строк. Если две строки начинаются одной и той же последовательностью символов, её надо вычеркнуть у обоих строк. Аналогично для случая, когда строки заканчиваются одной и той же последовательностью символов. Другими словами, одинаковые префиксы и суффиксы вычёркиваются. Это действие над строками является следствием групповых аксиом. Сокращение уменьшает длину строк.
2) Редуцирование с помощью одного из имеющихся редуцирующих правил. Это я уже подробно разжевал выше. Если одну или обе строки тождества с помощью имеющихся редуцирующих соотношений можно сократить, то делаем это. По окончании этого действия, возможно, придётся поменять местами левую и правую часть, так как заранее не скажешь какая из них в результате будет короче.
3) Комбинация двух тождеств. Если имеется два тождества
и
, то к первому можно дописать в конец строку
, ко второму — спереди
. В результате получится
или просто
, то есть новое тождество. Тут важно заметить, что это действие не является коммутативным, то есть если удастся скомбинировать первую пару со второй, а так же вторую с первой, то результаты будут, как правило, разные. Исключение — когда тождество комбинируется само с собой. Ещё одно важное замечание — комбинацию тождеств иногда можно провести несколькими способами (для оного и того же порядка "слагаемых"), а иногда — ни одним. В любом случае, в моём алгоритме это действие — ключевой способ порождения новых редуцирующих соотношений.
Можно, конечно, придумать ещё какие-нибудь весьма убедительные операции над соотношениями, но тут, на мой взгляд, лучшее — враг хорошего (если не доказано обратное, разумеется). В связи с этим я сам себе выдвинул
гипотезу, которая проходит ту скудную практическую проверку, которую я могу ей предоставить. Первая часть гипотезы заключается в том, что трёх описанных выше действий достаточно для построения
полного множества редуцирующих правил (в случае конечных групп, разумеется). Вторая часть гипотезы связана с тем, как именно получаются новые редуцирующие соотношения. А именно: третье действие даёт нам некоторое тождество. Затем, мы его упрощаем с помощью первых двух действий до победного конца. Причём, в зависимости от порядка применения действий 1) и 2), а так же в зависимости от используемых в действии 2) редуцирующих правил, могут получаться разные конечные тождества. Это особенно актуально, когда множество правил далеко от полноты.
Так вот, вторая часть моей гипотезы заключается в том, что в независимости от того, в каком порядке делаются упрощения тождества, полученного с помощью действия 3), как только в качестве аргументов этого действия мы перебрали все возможные пары редуцирующих соотношений, мы получим
полное множество редуцирующих правил. На верность второй части гипотезы указывает, например, то, что в случае полного множества в результате упрощений после действия 3) будут получаться только тривиальные тождества: пустая строка равна пустой строке. Разумеется, вся гипотеза целиком за собой кроме моей интуиции ничего не имеет, но тем не менее она используется на всю катушку в программе, представленной ниже. Поэтому надо держать ухо востро.
Итак, сам алгоритм. В качестве затравки используются групповые соотношения, так как они сами являются редуцирующими правилами, пускай, возможно, и не оптимальными. Мы их помещаем в очередь. Каждая итерация алгоритма достаёт из очереди (типа FIFO) элемент и упрощает его с помощью действий 1) и 2) до победного (для данной итерации) конца. Тут возможно два варианта: либо мы получили тривиальное соотношение, что означает, что надо перейти к следующей итерации, либо результатом стало новое редуцирующее правило. В последнем случае это правило добавляется в множество редуцирующих соотношений. Затем с помощью действия 3) вновь найденное тождество комбинируется во всех порядках со всеми соотношениями множества (в том числе с самим собой). Результаты комбинации (коих может быть несколько для каждой пары или вообще ни одного) добавляются в очередь. Итерации продолжаются пока очередь не опустеет, либо пока не будет превышен один из пределов по размеру множества соотношений или по длине строк в редуцирующих правилах.
Тут важно сделать одно замечание. При добавлении в множество правил очередного соотношения, может оказаться так, что это соотношение редуцирует левую или правую строку одного или нескольких правил. Это означает, что такие редуцирующие правила упраздняются. Но чтобы перестраховаться и не потерять ценной информации, я их на всяких случай снова отправляю в очередь. Когда до них дойдёт дело, то либо они будут редуцированы до тривиального соотношения, что означает их ненужность, либо из них получится что-то полезное и снова будет добавлено в искомое множество.
Рассмотрим наглядный пример. Группа диэдра
имеет следующие соотношения:
. Комбинация первого и второго ничего не даст, а вот комбинация третьего с первым и вторым дают, соответственно,
. Эти две пары упраздняют первое и третье соотношения. В результате имеем:
. Комбинируя последние два получаем:
, а после редукции с помощью первого соотношения —
. Результирующее множество редуцирующих правил —
— является полным.
Код программы, который реализует все вышеописанные операции со строками и даже иногда выдаёт что-то вразумительное:
... а вот не влез он в лимит 20000 символов на сообщение. Опубликую позже.
Буду очень рад каким-нибудь нетривиальным примерам конечных групп с двумя образующими, желательно с указанием их размера. А то в косых произведениях (коими в частности являются диэдральные группы) размер угадывается легко. А точную структуру по таблице умножения всё равно не увидишь.
(Оффтоп)
Что-то сильно я мыслию по древу растёкся, да серым волком по земле...