Компьютерное нахождение четырехэлементных мультипликативно идемпотентных полуколец
Автор: Михеев Р.А., Петров А.А.
Журнал: Вестник Пермского университета. Математика. Механика. Информатика @vestnik-psu-mmi
Рубрика: Математика
Статья в выпуске: 2 (57), 2022 года.
Бесплатный доступ
Описывается компьютерная программа для поиска всех четырехэлементных мультипликативно идемпотентных полуколец. Установлено, что с точностью до изоморфизма таких полуколец ровно 381, они представлены таблицами Кэли аддитивных и мультипликативных редуктов. Приведены необходимые определения, свойства и иллюстрации.
Конечное полукольцо, идемпотентность, мультипликативно идемпотентное полукольцо, компьютерное моделирование
Короткий адрес: https://sciup.org/147245530
IDR: 147245530 | УДК: 512.558 | DOI: 10.17072/1993-0550-2022-2-46-52
Computer finding of four-element multiplicatively idempotent semirings
In this paper we describe a computer program for searching for all four-element multiplicatively idempotent semirings. We have established that up to the isomorphism of such semirings exactly 381, they are represented by Cayley tables of additive and multiplicative reducts. We give the necessary definitions, properties and illustrations.
Текст научной статьи Компьютерное нахождение четырехэлементных мультипликативно идемпотентных полуколец
Данная статья является продолжением работы [2], в которой вручную найдены все трехэлементные полукольца с идемпотентным умножением и описаны их свойства.
В работе [6] с помощью компьютера описаны все трехэлементные аддитивно идемпотентные полукольца, с точностью до изоморфизма (таких полуколец ровно 61).
Общая теория полуколец изложена в монографии Голана [4]. Мультипликативно идемпотентным полукольцам посвящены работы [1–3, 5].
Полукольцом называется алгебраическая структура ⟨S, +, ⋅⟩ с коммутативно ассоциативной операцией сложения + и ассоциативной операцией умножения, дистрибутивной относительно сложения с обеих сторон.
Полукольцо S называется:
-
- коммутативным , если S удовлетворяет тождеству xy=yx ;
Эта работа © 2022 Михеев Р. А., Петров А. А. лицензируется под CC BY 4.0. Чтобы просмот-
реть копию этой лицензии, посетите
-
- мультипликативно идемпотентным ( аддитивно идемпотентным ), если на нем тождественно хх = x (соответственно, х + x = x );
-
- идемпотентным , если S одновременно мультипликативно и аддитивно идемпотентное;
-
- моно-полукольцом , если x+y=xy для всех x , y е S ;
-
- полукольцом с константным сложением , если оно удовлетворяет тождеству x+y=u+v .
Элемент 0 произвольного полукольца S назовем поглощающим по умножению ( поглощающим по сложению ), если для всех xеS выполняется 0 x = x -0=0 (соответственно, x +0=0). Элемент да е S , поглощающий по сложению и по умножению, называется поглощающим .
Если в полукольце S существует элемент 0, нейтральный по сложению и поглощающий по умножению, то S называется полукольцом с нулем 0. Если же полукольцо S обладает элементом 1, нейтральным по умножению, то S называется полукольцом с единицей 1.
Отметим, что к любому полукольцу S можно естественным образом присоединить нулевой элемент 0 или поглощающий элемент да. Обозначим полученные полукольца S и {0} и S и { да } , соответственно.
Хорошо известно, что с точностью до изоморфизма существует ровно шесть двухэлементных мультипликативно идемпотентных полуколец:
-
• двухэлементная цепь B ={0,1};
-
• двухэлементное поле Z 2 ={0,1};
-
• двухэлементное идемпотентное монополукольцо D ={1,да} с единицей 1;
-
• двухэлементное полукольцо T ={1,∞} c единицей 1 и константным сложением ( x + у =да);
-
• двухэлементное идемпотентное полукольцо L ={ a , b }, с тождеством xy=x ;
-
• двухэлементное идемпотентное полукольцо R ={ a , b }, с тождеством xy=y .
Для любого полукольца ( S , +, ■ ) существует антиизоморфное полукольцо ( S , +, * ), в котором тождественно x ∗ y = y ⋅ x ; такое дуальное полукольцо обозначим через S*.
Полукольцо S , для которого S* ≅ S , назовем самодуальным . Ясно, что любое коммутативное полукольцо S самодуально. В работе [2] установлено, что среди трехэлементных некоммутативных мультипликативно идемпотентных полуколец самодуальных нет.
Пример 1. Положим S = LxR . Умножение на некоммутативном четырехэлементном мультипликативно идемпотентном полукольце S выполняется следующим образом:
( x , у ) ■ ( и , v ) = ( xu , yv ) = ( x , v ) для любых x , у , и , v е { a , b }.
Соответственно, сложение на полукольце S *, дуальном к S , задается так же, как на S , а умножение определяется правилом:
( x , у ) * ( и , v ) = ( и , v ) ■ ( x , у ) = ( и , у ), и, как легко видеть, S * s R*L s LxR= S , то есть S - некоммутативное самодуальное мультипликативно идемпотентное полукольцо.
Для описания всех четырехэлементных мультипликативно идемпотентных полуколец S нами составлена компьютерная программа на языке программирования С.Опишем схему создания этой программы.
Аддитивный и мультипликативный редукты полукольца задаются с помощью таблиц Кэли. Таблицы представляют собой одномерные массивы matrix длины N2 из элементов 0, ..., N-1, в которых с 0-ого по (N-1)-ую позицию занимает первая строка таблицы, с N-ного по (2N-1)-й - вторая строка таблицы и т. д. Соответственно, позиция элемента в строке i и столбце j в массиве matrix равна i*N + j.
Шаг 1. Генерация ассоциативных таблиц
//проверка таблицы на ассоциативность bool isassociative(int matrix[N*N]) { for (int i = 0; i < N; i++) { for (int j = 0; j < N; j++) { for (int k = 0; k < N; k++) { if (matrix[matrix[i*N + j]*N + k] != ma-trix[i*N + matrix[j*N + k]])
return false;
}
}
} return true;
}
//Создание аддитивной полугруппы полукольца S с учетом ее коммутативности void generate_commutative_tables(List* mult_tables) { int matrix[N*N];
generate_commutative_tables_rec(matrix, 0, 0, mult_tables);
if (isassociative(matrix)) { int* matrix_copy = copy_matrix(matrix); list_push(add_tables, matrix_copy);
} return;
} for (int i = 0; i < N; i++) { matrix[row_pos*N + col_pos] = i; matrix[col_pos*N + row_pos] = i; int new_row_pos = row_pos;
if (col_pos == N - 1) new_row_pos++;
int new_col_pos = (col_pos + 1 + new_row_pos) % N;
gener- ate_commutative_tables_rec(matrix, new_row_pos, new_col_pos, add_tables);
}
}
//Создание мультипликативно идемпотентной полугруппы void generate_idempotent_tables(List* mult_tables) { int matrix[N*N];
for (int j = 0; j < N; j++) { matrix[j*N + j] = j;
} generate_idempotent_tables_rec(matrix,
0, 1, mult_tables);
if (isassociative(matrix)) { int* matrix_copy = copy_matrix(matrix); list_push(mult_tables, matrix_copy);
} return;
} for (int i = 0; i < N; i++) { matrix[row_pos*N + col_pos] = i;
int new_col_pos = (col_pos + 1) % N;
int new_row_pos = row_pos;
if (new_col_pos == 0) new_row_pos++;
if (new_col_pos == new_row_pos) { new_col_pos = (new_col_pos + 1) % N; if (new_col_pos == 0) new_row_pos++;
} generate_idempotent_tables_rec(matrix, new_row_pos, new_col_pos, mult_tables);
}
}
Шаг 2. Проверка дистрибутивности умножения относительно сложения для построенных таблиц Кэли
//Проверка левой дистрибутивности bool isdistributive(int mult[N*N], int add[N*N]) { return isdistributive_left(mult, add) & isdistributive_right(mult, add);
} bool isdistributive_left(int mult[N*N], int add[N*N]) { for (int i = 0; i < N; i++) { for (int j = 0; j < N; j++) { for (int k = 0; k < N; k++) { if (mult[i*N + add[j*N + k]] != add[mult[i*N + j]*N + mult[i*N + k]])
return false;
}
}
} return true;
} bool isdistributive_right – правая дистрибутивность проверяется аналогично левой
// Проверка коммутативности умножения. Если умножение коммутативно, проверяем только левую дистрибутивность умножения относительно сложения.
bool iscommutative(int table[N*N]) { for (int i = 0; i < N; i++) { for (int j = i; j < N; j++) { if (table[i*N + j] != table[j*N + i]) return false;
}
} return true;
tive_left(mult_temp->value, add_temp->value)
Semiring* semiring = (Semir-ing*)malloc(sizeof(Semiring));
semiring->mult = mult_temp->value;
semiring->add = add_temp->value; list_push(semirings, semiring);
} add_temp = add_temp->next;
} mult_temp = mult_temp->next;
}
}
Шаг 3. Выбор из полученного списка неизоморфных полуколец
// Генерируем одномерные массивы – перестановки чисел 0, ..., N-1.
void generate_arrays(List* arrays) { int array[N];
generate_arrays_rec(array, 0, arrays);
} void generate_arrays_rec(int arr[N], int pos, List* arrays) { if (pos == N) { list_push(arrays, copy_array(arr));
} else { for (int i = 0; i < N; i++) { bool found = false;
for (int j = 0; j < pos; j++) { if (arr[j] == i) { found = true;
break;
}
} if (found)
continue;
arr[pos] = i;
generate_arrays_rec(arr, pos + 1, arrays);
}
}
}
//Перебираем пары полуколец, проверяя свойства f ( a⋅b ) = f ( a ) ⋅f ( b ) , f ( a+b ) = f ( a ) +f ( b ) для произвольной подстановки f на множестве {0, 1, ., N-1}. Если для некоторой пары полуколец s1 и s2 существует f с перечисленными свойствами, то s1 и s2 изоморфны.
return false;
}
} return true;
} bool areisomorphic(Semiring s1, Semiring s2, List arrays) { bool result = false;
while (temp != NULL) { if (isisomorphism(temp->value, s1, s2)) return true;
temp = temp->next;
} return false;
}
//Перебираем список полученных полуколец и исключаем изоморфные полукольца void filter_isomorphism(List* semirings, List arrays) { struct Node* temp = semirings->head;
while (temp != NULL) { struct Node* temp_inner = temp->next;
while (temp_inner != NULL) { if (areisomorphic(*((Semiring*)temp->value), *((Semiring*)temp_inner->value), arrays)) { struct Node* temp_next = temp_inner->next;
list_delete(semirings, temp_inner); temp_inner = temp_next;
} else temp_inner = temp_inner->next;
} temp = temp->next;
}
}
Шаг 4. Проверка свойств найденных мультипликативно идемпотентных полуколец
//идемпотентность bool isidempotent(int matrix[N*N]) { for (int i = 0; i < N; i++) { if (matrix[i*N + i] != i) return false;
} return true;
}
//наличие нейтрального элемента 1 относительно умножения int neutral(int matrix[N*N]) { for (int i = 0; i < N; i++) { if (isneutral(matrix, i)) { return i;
}
} return -1;
} bool isneutral(int matrix[N*N], int inx) { for (int i = 0; i < N; i++) { if (matrix[inx*N + i] != i || matrix[i*N + inx] != i) { return false;
}
} return true;
}
//наличие нейтрального элемента 0 относительно сложения int zero(int mult[N*N], int add[N*N]) { int add_neu = neutral(add);
if (add_neu == -1) { return -1;
} for (int i = 0; i < N; i++) { if (mult[add_neu*N + i] != add_neu || mult[i*N + add_neu] != add_neu) { return -1;
}
} return add_neu;
}
//наличие поглощающего элемента int infinity(int mult[N*N], int add[N*N]) { for (int i = 0; i < N; i++) { if (isinfinity(mult, add, i)) { return i;
}
} return -1;
} bool isinfinity(int mult[N*N], int add[N*N], int inx) { for (int i = 0; i < N; i++) { if ( mult[i*N + inx] != inx || mult[inx*N + i] != inx
|| add[i*N + inx] != inx || add[inx*N + i] != inx
) { return false;
}
} return true;
}
//проверка константности сложения bool isconst(int table[N*N]) { for (int i = 0; i < N*N - 1; i++) { if (table[i] != table[i + 1]) { return false;
}
} return true;
}
//проверка, является ли полукольцо моно-полукольцом bool ismono(int mult[N*N], int add[N*N]) { for (int i = 0; i < N*N; i++) { if (mult[i] != add[i]) { return false;
}
} return true;
}
Шаг 5. Переобозначение элементов полукольца
Обозначаем элементы полученных полуколец через a, b, c, d и т. д. Нулевой, единичный и поглощающий элементы обозначаем как 0, 1 и i, соответственно. Полученный результат записывается в текстовый файл (рис. 1): comm idem mono const zero one inf add mult + -- + -- + iiii iaii iiii iibi add mult + ----- + iiii iaii iiii iibi add mult + ____ _ _ aaca aaaa aaca abaa ccac aaca aaca aaad
Рис. 1
Полный исходный код описанной программы доступен по ссылке:
При N=3 получен результат из [2, теорема 1]: с точностью до изоморфизма существует ровно 43 трехэлементных мультипликативно идемпотентных полукольца, среди которых:
-
• 19 коммутативных полуколец, из них 7 идемпотентных;
-
• 23 идемпотентных полукольца, в том числе 16 некоммутативных;
-
• 14 полуколец с единицей 1, 6 полуколец с нулем 0, 4 полукольца имеют одновременно 0 и 1;
-
• 12 полуколец с поглощающим элементом ∞, 5 полуколец с 1 и ∞.
При N=4 результатом работы программы стала следующая
Теорема 1. С точностью до изоморфизма существует ровно 381 четырехэлементное мультипликативно идемпотентное полукольцо. Среди этих полуколец:
-
• 118 коммутативных, из них 33 идем-потентны;
-
• 166 идемпотентных;
-
• 46 полуколец с нулем 0;
-
• 67 полуколец с единицей 1;
-
• 17 полуколец с 0 и 1;
-
• 78 полуколец с поглощающим элементом ∞, из них 20 имеют 1;
-
• 15 полуколец с константным сложением;
-
• 5 полуколец являются монополукольцами .
Замечание 1. Время работы созданной программы для поиска всех четырехэлементных мультипликативно идемпотентных полуколец на персональном компьютере с процессором AMD FX - 4300 составляет 2,73 секунды. Следует заметить, что программа основана на большом переборе вариантов, поэтому уже при N=5 она не дает требуемый результат за разумное время.
В дальнейшем планируется усовершенствование алгоритма для сокращения времени ее работы.
Замечание 2. Мультипликативная полугруппа полукольца с коммутативным идемпотентным умножением является нижней полурешеткой, то есть частично упорядоченным множеством (a≤b⇔ab=a), для каждой пары a, b элементов которого имеется точная нижняя грань inf{a,b}=ab. С точностью до изоморфизма существует 5 четырехэлементных нижних полурешеток (рис. 2):
(1) (2) (3) (4) (5)
Рис. 2
Из 118 полуколец с коммутативным идемпотентным умножением 37 полуколец с умножением (1), 27 полуколец с умножением (2), 34 полукольца с мультипликативной полурешеткой (3) и по 10 полуколец типа (4) и (5).
Заметим, что с точностью до изоморфизма существует ровно 15 пятиэлементных нижних полурешеток. Поэтому поиск всех неизоморфных пятиэлементных коммутативных мультипликативно идемпотентных полуколец можно начинать с подбора аддитивной коммутативной полугруппы для каждой из нижних полурешеток по умножению.
Замечание 3. Присоединяя внешним образом к полученным в теореме 1 четырехэлементным полукольцам нулевой элемент 0 (поглощающий элемент ∞), получим 381 пятиэлементное мультипликативно идемпотентное полукольцо с 0 (соответственно, с ∞).
Пусть S – произвольное пятиэлементное мультипликативно идемпотентное полукольцо с нулем 0. Известно [1, теорема 4.1.1], что S представимо в виде прямой суммы некоторых булева кольца R и антикольца T (напомним, что антикольцом называется полукольцо, удовлетворяющее квазитождеству x+y =0⇒ x =0). Но любое неодноэлементное конечное булево кольцо изоморфно прямому произведению двухэлементных полей, а потому имеет четное число элементов. Значит, R ={0}, и S = T – антикольцо. Если при этом в S нет делителей нуля (то есть ab ≠0 для любых a , b ∈ S \{0}), то S \{0} будет четырехэлементным полукольцом.
Стало быть, нахождение всех пятиэлементных мультипликативно идемпотентных полуколец S с нулем сводится к случаю, когда S имеет ненулевые делители нуля.
Список литературы Компьютерное нахождение четырехэлементных мультипликативно идемпотентных полуколец
- Вечтомов Е.М., Петров А.А. Полукольца с идемпотентным умножением. Киров: Изд-во ООО "Радуга-ПРЕСС", 2015. 144 с. EDN: VXFAMX
- Вечтомов Е.М., Петров А.А. Трехэлементные мультипликативно идемпотентные полукольца // Математический вестник Вятского государственного университета. 2021. № 2 (21). С 13-23. EDN: DQSXYV
- Chaida I., Länger H., Švrček F. Multiplicatively idempotent semirings // Mathematica Bohemica. 2015. Vol. 140, № 1. P. 35-42.
- Golan J. S. Semirings and their applications. Kluwer Academic Publishers: Dordrecht-Boston-London, 1999. 380 p.
- Vechtomov Е.М., Petrov А.А. Multiplicatively Idempotent Semirings // Journal of Mathematical Sciences (New York). 2015. Vol. 206. Issue 6. P. 634-653. EDN: WQOHPF
- Zhao X., Ren M., Crvenković S., Shao Y., Dapić P. The variety generated by an aisemiring of order three // Ural Mathematical Journal. 2020. Vol. 6. Issue 2. P. 117-132. EDN: WUEYKB