// libsemigroups - C++ library for semigroups and monoids // Copyright (C) 2022 Murray T. Whyte // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // // You should have received a copy of the GNU General Public License // along with this program. If not, see <http://www.gnu.org/licenses/>. //
// This file is the first of three containing tests for the fpsemi-examples // functions. The presentations here define finite semigroups, and we use // ToddCoxeter in testing them. Exceptions and defaults are also checked in this // file.
// #define CATCH_CONFIG_ENABLE_PAIR_STRINGMAKER
#include"catch.hpp"// for REQUIRE, REQUIRE_NOTHROW, REQUIRE_THROWS_AS #include"test-main.hpp"// for LIBSEMIGROUPS_TEST_CASE
#include"libsemigroups/fpsemi-examples.hpp"// for the presentations #include"libsemigroups/report.hpp"// for ReportGuard #include"libsemigroups/todd-coxeter.hpp"// for ToddCoxeter #include"libsemigroups/types.hpp"// for word_type
using fpsemigroup::author; using fpsemigroup::make;
using fpsemigroup::alternating_group; using fpsemigroup::chinese_monoid; using fpsemigroup::cyclic_inverse_monoid; using fpsemigroup::dual_symmetric_inverse_monoid; using fpsemigroup::fibonacci_semigroup; using fpsemigroup::full_transformation_monoid; using fpsemigroup::monogenic_semigroup; using fpsemigroup::order_preserving_cyclic_inverse_monoid; using fpsemigroup::order_preserving_monoid; using fpsemigroup::orientation_preserving_monoid; using fpsemigroup::orientation_reversing_monoid; using fpsemigroup::partial_isometries_cycle_graph_monoid; using fpsemigroup::partial_transformation_monoid; using fpsemigroup::partition_monoid; using fpsemigroup::plactic_monoid; using fpsemigroup::rectangular_band; using fpsemigroup::rook_monoid; using fpsemigroup::singular_brauer_monoid; using fpsemigroup::stellar_monoid; using fpsemigroup::stylic_monoid; using fpsemigroup::symmetric_group; using fpsemigroup::symmetric_inverse_monoid; using fpsemigroup::temperley_lieb_monoid; using fpsemigroup::uniform_block_bijection_monoid;
namespace congruence {
LIBSEMIGROUPS_TEST_CASE("fpsemi-examples", "001", "full_transformation_monoid(5) Iwahori", "[fpsemi-examples][standard]") { auto rg = ReportGuard(REPORT);
size_t n = 5; auto s = full_transformation_monoid(n, author::Iwahori); auto p = make<Presentation<word_type>>(s);
p.alphabet(n + 1);
presentation::replace_word(p, word_type({}), {n});
presentation::add_identity_rules(p, n);
p.validate();
ToddCoxeter tc(congruence_kind::twosided);
tc.set_number_of_generators(n + 1); for (size_t i = 0; i < p.rules.size() - 1; i += 2) {
tc.add_pair(p.rules[i], p.rules[i + 1]);
}
REQUIRE(tc.number_of_classes() == 3125);
}
LIBSEMIGROUPS_TEST_CASE("fpsemi-examples", "004", "partial_transformation_monoid(5) Sutov", "[fpsemi-examples][standard]") { auto rg = ReportGuard(REPORT);
size_t n = 5; auto s = partial_transformation_monoid(n, author::Sutov); auto p = make<Presentation<word_type>>(s);
p.alphabet(n + 2);
presentation::replace_word(p, word_type({}), {n + 1});
presentation::add_identity_rules(p, n + 1);
p.validate();
ToddCoxeter tc(congruence_kind::twosided);
tc.set_number_of_generators(n + 2); for (size_t i = 0; i < p.rules.size() - 1; i += 2) {
tc.add_pair(p.rules[i], p.rules[i + 1]);
}
REQUIRE(tc.number_of_classes() == 7776);
}
LIBSEMIGROUPS_TEST_CASE("fpsemi-examples", "038", "partial_transformation_monoid(3) Machine", "[fpsemi-examples][quick]") { auto rg = ReportGuard(REPORT); auto s = partial_transformation_monoid(3, author::Machine); auto p = make<Presentation<word_type>>(s);
p.alphabet(5);
presentation::replace_word(p, word_type({}), {4});
presentation::add_identity_rules(p, 4);
p.validate();
ToddCoxeter tc(congruence_kind::twosided);
tc.set_number_of_generators(5); for (size_t i = 0; i < p.rules.size() - 1; i += 2) {
tc.add_pair(p.rules[i], p.rules[i + 1]);
}
REQUIRE(tc.number_of_classes() == 64);
}
LIBSEMIGROUPS_TEST_CASE("fpsemi-examples", "007", "symmetric_inverse_monoid(5)", "[fpsemi-examples][quick][no-valgrind]") { auto rg = ReportGuard(REPORT);
size_t n = 5; auto s = symmetric_inverse_monoid(n, author::Sutov); auto p = make<Presentation<word_type>>(s);
p.alphabet(n + 1);
presentation::replace_word(p, word_type({}), {n});
presentation::add_identity_rules(p, n);
p.validate();
ToddCoxeter tc(congruence_kind::twosided);
tc.set_number_of_generators(n + 1); for (size_t i = 0; i < p.rules.size() - 1; i += 2) {
tc.add_pair(p.rules[i], p.rules[i + 1]);
}
REQUIRE(tc.number_of_classes() == 1546);
}
LIBSEMIGROUPS_TEST_CASE("fpsemi-examples", "010", "symmetric_group(6) Burnside + Miller", "[fpsemi-examples][quick][no-valgrind]") { auto rg = ReportGuard(REPORT);
size_t n = 6; auto s = symmetric_group(n, author::Burnside + author::Miller); auto p = make<Presentation<word_type>>(s);
p.alphabet(n);
presentation::replace_word(p, word_type({}), {n - 1});
presentation::add_identity_rules(p, n - 1);
p.validate();
ToddCoxeter tc(congruence_kind::twosided);
tc.set_number_of_generators(n); for (size_t i = 0; i < p.rules.size() - 1; i += 2) {
tc.add_pair(p.rules[i], p.rules[i + 1]);
}
REQUIRE(tc.number_of_classes() == 720);
}
LIBSEMIGROUPS_TEST_CASE("fpsemi-examples", "031", "symmetric_group(6) Carmichael", "[fpsemi-examples][quick]") { auto rg = ReportGuard(REPORT);
size_t n = 6; auto s = symmetric_group(n, author::Carmichael); auto p = make<Presentation<word_type>>(s);
p.alphabet(n);
presentation::replace_word(p, word_type({}), {n - 1});
presentation::add_identity_rules(p, n - 1);
p.validate();
ToddCoxeter tc(congruence_kind::twosided);
tc.set_number_of_generators(n); for (size_t i = 0; i < p.rules.size() - 1; i += 2) {
tc.add_pair(p.rules[i], p.rules[i + 1]);
}
REQUIRE(tc.number_of_classes() == 720);
}
LIBSEMIGROUPS_TEST_CASE("fpsemi-examples", "032", "symmetric_group(6) Moore index 0", "[fpsemi-examples][quick]") { auto rg = ReportGuard(REPORT);
size_t n = 6; auto s = symmetric_group(n, author::Moore); auto p = make<Presentation<word_type>>(s);
p.alphabet(3);
presentation::replace_word(p, word_type({}), {2});
presentation::add_identity_rules(p, 2);
p.validate();
ToddCoxeter tc(congruence_kind::twosided);
tc.set_number_of_generators(3); for (size_t i = 0; i < p.rules.size() - 1; i += 2) {
tc.add_pair(p.rules[i], p.rules[i + 1]);
}
REQUIRE(tc.number_of_classes() == 720);
}
LIBSEMIGROUPS_TEST_CASE("fpsemi-examples", "065", "symmetric_group(7) Moore index 1", "[fpsemi-examples][quick]") { auto rg = ReportGuard(REPORT);
size_t n = 7; auto s = symmetric_group(n, author::Moore, 1); auto p = make<Presentation<word_type>>(s);
p.alphabet(n);
presentation::replace_word(p, word_type({}), {n - 1});
presentation::add_identity_rules(p, n - 1);
p.validate();
ToddCoxeter tc(congruence_kind::twosided);
tc.set_number_of_generators(n); for (size_t i = 0; i < p.rules.size() - 1; i += 2) {
tc.add_pair(p.rules[i], p.rules[i + 1]);
}
REQUIRE(tc.number_of_classes() == 5040);
}
LIBSEMIGROUPS_TEST_CASE("fpsemi-examples", "033", "symmetric_group(6) Coxeter + Moser", "[fpsemi-examples][quick]") { auto rg = ReportGuard(REPORT);
size_t n = 6; auto s = symmetric_group(n, author::Coxeter + author::Moser); auto p = make<Presentation<word_type>>(s);
p.alphabet(n);
presentation::replace_word(p, word_type({}), {n - 1});
presentation::add_identity_rules(p, n - 1);
p.validate();
ToddCoxeter tc(congruence_kind::twosided);
tc.set_number_of_generators(n); for (size_t i = 0; i < p.rules.size() - 1; i += 2) {
tc.add_pair(p.rules[i], p.rules[i + 1]);
}
REQUIRE(tc.number_of_classes() == 720);
}
LIBSEMIGROUPS_TEST_CASE("fpsemi-examples", "011", "dual_symmetric_inverse_monoid(5)", "[fpsemi-examples][quick][no-valgrind]") { auto rg = ReportGuard(REPORT);
size_t n = 5; auto s = dual_symmetric_inverse_monoid(
n, author::Easdown + author::East + author::FitzGerald); auto p = make<Presentation<word_type>>(s);
p.validate(); auto m = p.alphabet().size();
ToddCoxeter tc(congruence_kind::twosided);
tc.set_number_of_generators(m); for (size_t i = 0; i < p.rules.size() - 1; i += 2) {
tc.add_pair(p.rules[i], p.rules[i + 1]);
}
REQUIRE(tc.number_of_classes() == 6721);
}
LIBSEMIGROUPS_TEST_CASE("fpsemi-examples", "014", "uniform_block_bijection_monoid(5)", "[fpsemi-examples][quick]") { auto rg = ReportGuard(REPORT);
size_t n = 5; auto s = uniform_block_bijection_monoid(n, author::FitzGerald); auto p = make<Presentation<word_type>>(s);
p.validate(); auto m = p.alphabet().size();
ToddCoxeter tc(congruence_kind::twosided);
tc.set_number_of_generators(m); for (size_t i = 0; i < p.rules.size() - 1; i += 2) {
tc.add_pair(p.rules[i], p.rules[i + 1]);
}
REQUIRE(tc.number_of_classes() == 1496);
}
LIBSEMIGROUPS_TEST_CASE("fpsemi-examples", "017", "partition_monoid(5)", "[fpsemi-examples][standard]") { auto rg = ReportGuard(REPORT);
size_t n = 5; auto s = partition_monoid(n, author::East); auto p = make<Presentation<word_type>>(s);
p.validate(); auto m = p.alphabet().size();
ToddCoxeter tc(congruence_kind::twosided);
tc.set_number_of_generators(m); for (size_t i = 0; i < p.rules.size() - 1; i += 2) {
tc.add_pair(p.rules[i], p.rules[i + 1]);
}
REQUIRE(tc.number_of_classes() == 115975);
}
LIBSEMIGROUPS_TEST_CASE("fpsemi-examples", "018", "partition_monoid(3)", "[fpsemi-examples][standard]") { auto rg = ReportGuard(REPORT); auto s = partition_monoid(3, author::Machine); auto p = make<Presentation<word_type>>(s);
p.validate();
ToddCoxeter tc(congruence_kind::twosided); auto m = p.alphabet().size();
tc.set_number_of_generators(m); for (size_t i = 0; i < p.rules.size() - 1; i += 2) {
tc.add_pair(p.rules[i], p.rules[i + 1]);
}
REQUIRE(tc.number_of_classes() == 203);
}
LIBSEMIGROUPS_TEST_CASE("fpsemi-examples", "021", "rectangular_band(5, 9)", "[fpsemi-examples][standard]") { auto rg = ReportGuard(REPORT); auto s = rectangular_band(5, 9); auto p = make<Presentation<word_type>>(s);
p.validate(); auto m = p.alphabet().size();
p.validate();
ToddCoxeter tc(congruence_kind::twosided);
tc.set_number_of_generators(m); for (size_t i = 0; i < p.rules.size() - 1; i += 2) {
tc.add_pair(p.rules[i], p.rules[i + 1]);
}
REQUIRE(tc.number_of_classes() == 45);
}
LIBSEMIGROUPS_TEST_CASE("fpsemi-examples", "022", "monogenic_semigroup(4, 9)", "[fpsemi-examples][quick]") { auto rg = ReportGuard(REPORT); auto s = monogenic_semigroup(4, 9); auto p = make<Presentation<word_type>>(s);
p.validate(); auto m = p.alphabet().size();
p.validate();
ToddCoxeter tc(congruence_kind::twosided);
tc.set_number_of_generators(m); for (size_t i = 0; i < p.rules.size() - 1; i += 2) {
tc.add_pair(p.rules[i], p.rules[i + 1]);
}
REQUIRE(tc.number_of_classes() == 12);
}
LIBSEMIGROUPS_TEST_CASE("fpsemi-examples", "023", "fibonacci_semigroup(2, 5)", "[fpsemi-examples][quick]") { auto rg = ReportGuard(REPORT); auto s = fibonacci_semigroup(2, 5); auto p = make<Presentation<word_type>>(s);
p.validate(); auto m = p.alphabet().size();
p.validate();
ToddCoxeter tc(congruence_kind::twosided);
tc.set_number_of_generators(m); for (size_t i = 0; i < p.rules.size() - 1; i += 2) {
tc.add_pair(p.rules[i], p.rules[i + 1]);
}
REQUIRE(tc.number_of_classes() == 11);
}
LIBSEMIGROUPS_TEST_CASE("fpsemi-examples", "024", "temperley_lieb_monoid(10)", "[fpsemi-examples][quick][no-valgrind]") { auto rg = ReportGuard(REPORT);
size_t n = 10; auto s = temperley_lieb_monoid(n); auto p = make<Presentation<word_type>>(s);
p.alphabet(n);
presentation::add_identity_rules(p, n - 1);
p.validate();
ToddCoxeter tc(congruence_kind::twosided);
tc.set_number_of_generators(n); for (size_t i = 0; i < p.rules.size() - 1; i += 2) {
tc.add_pair(p.rules[i], p.rules[i + 1]);
}
REQUIRE(tc.number_of_classes() == 16796);
}
LIBSEMIGROUPS_TEST_CASE("fpsemi-examples", "025", "singular_brauer_monoid(6)", "[fpsemi-examples][quick][no-valgrind]") { auto rg = ReportGuard(REPORT);
size_t n = 6; auto s = singular_brauer_monoid(n); auto p = make<Presentation<word_type>>(s);
p.validate(); auto m = p.alphabet().size();
ToddCoxeter tc(congruence_kind::twosided);
tc.set_number_of_generators(m); for (size_t i = 0; i < p.rules.size() - 1; i += 2) {
tc.add_pair(p.rules[i], p.rules[i + 1]);
}
REQUIRE(tc.number_of_classes() == 9675);
}
LIBSEMIGROUPS_TEST_CASE("fpsemi-examples", "026", "orientation_preserving_monoid(6)", "[fpsemi-examples][quick][no-valgrind]") { auto rg = ReportGuard(REPORT);
size_t n = 6; auto s = orientation_preserving_monoid(n); auto p = make<Presentation<word_type>>(s);
p.validate(); auto m = p.alphabet().size();
ToddCoxeter tc(congruence_kind::twosided);
tc.set_number_of_generators(m); for (size_t i = 0; i < p.rules.size() - 1; i += 2) {
tc.add_pair(p.rules[i], p.rules[i + 1]);
}
REQUIRE(tc.number_of_classes() == 2742);
}
LIBSEMIGROUPS_TEST_CASE("fpsemi-examples", "027", "orientation_reversing_monoid(5)", "[fpsemi-examples][quick]") { auto rg = ReportGuard(REPORT);
size_t n = 5; auto s = orientation_reversing_monoid(n); auto p = make<Presentation<word_type>>(s);
p.validate(); auto m = p.alphabet().size();
ToddCoxeter tc(congruence_kind::twosided);
tc.set_number_of_generators(m); for (size_t i = 0; i < p.rules.size() - 1; i += 2) {
tc.add_pair(p.rules[i], p.rules[i + 1]);
}
REQUIRE(tc.number_of_classes() == 1015);
}
LIBSEMIGROUPS_TEST_CASE("fpsemi-examples", "034", "test for the rook monoid", "[fpsemi-examples][quick]") { auto rg = ReportGuard(REPORT); auto s = rook_monoid(4, 1); auto p = make<Presentation<word_type>>(s);
p.validate(); auto m = p.alphabet().size();
ToddCoxeter tc(congruence_kind::twosided);
tc.set_number_of_generators(m); for (size_t i = 0; i < p.rules.size() - 1; i += 2) {
tc.add_pair(p.rules[i], p.rules[i + 1]);
}
REQUIRE(tc.number_of_classes() == 209);
}
LIBSEMIGROUPS_TEST_CASE("fpsemi-examples", "035", "alternating_group(7) Moore", "[fpsemi-examples][quick][no-valgrind]") { auto rg = ReportGuard(REPORT);
size_t n = 7; auto s = alternating_group(n, author::Moore); auto p = make<Presentation<word_type>>(s);
p.alphabet(n - 1);
presentation::replace_word(p, word_type({}), {n - 2});
presentation::add_identity_rules(p, n - 2);
p.validate();
ToddCoxeter tc(congruence_kind::twosided);
tc.set_number_of_generators(n - 1); for (size_t i = 0; i < p.rules.size() - 1; i += 2) {
tc.add_pair(p.rules[i], p.rules[i + 1]);
}
REQUIRE(tc.number_of_classes() == 2520);
}
LIBSEMIGROUPS_TEST_CASE("fpsemi-examples", "050", "full_transformation_monoid(4) Aizenstat", "[fpsemi-examples][standard]") { auto rg = ReportGuard(REPORT);
size_t n = 4; auto s = full_transformation_monoid(n, author::Aizenstat); auto p = make<Presentation<word_type>>(s);
p.alphabet(4);
presentation::replace_word(p, word_type({}), {3});
presentation::add_identity_rules(p, 3);
p.validate();
ToddCoxeter tc(congruence_kind::twosided);
tc.set_number_of_generators(4); for (size_t i = 0; i < p.rules.size() - 1; i += 2) {
tc.add_pair(p.rules[i], p.rules[i + 1]);
}
REQUIRE(tc.number_of_classes() == 256);
}
LIBSEMIGROUPS_TEST_CASE("fpsemi-examples", "053", "order_preserving_monoid(5)", "[fpsemi-examples][quick]") { auto rg = ReportGuard(REPORT);
size_t n = 5; auto s = order_preserving_monoid(n); auto p = make<Presentation<word_type>>(s);
p.alphabet(2 * n - 1);
presentation::add_identity_rules(p, 2 * n - 2);
p.validate();
ToddCoxeter tc(congruence_kind::twosided);
tc.set_number_of_generators(2 * n - 1); for (size_t i = 0; i < p.rules.size() - 1; i += 2) {
tc.add_pair(p.rules[i], p.rules[i + 1]);
}
REQUIRE(tc.number_of_classes() == 126);
}
LIBSEMIGROUPS_TEST_CASE("fpsemi-examples", "054", "order_preserving_monoid(10)", "[fpsemi-examples][standard]") { auto rg = ReportGuard(REPORT);
size_t n = 10; auto s = order_preserving_monoid(n); auto p = make<Presentation<word_type>>(s);
p.alphabet(2 * n - 1);
presentation::add_identity_rules(p, 2 * n - 2);
p.validate();
ToddCoxeter tc(congruence_kind::twosided);
tc.set_number_of_generators(2 * n - 1); for (size_t i = 0; i < p.rules.size() - 1; i += 2) {
tc.add_pair(p.rules[i], p.rules[i + 1]);
}
REQUIRE(tc.number_of_classes() == 92'378);
}
LIBSEMIGROUPS_TEST_CASE("fpsemi-examples", "056", "cyclic_inverse_monoid(4) Fernandes 1", "[fpsemi-examples][quick]") { auto rg = ReportGuard(REPORT);
size_t n = 4; auto s = cyclic_inverse_monoid(n, author::Fernandes, 1); auto p = make<Presentation<word_type>>(s);
p.alphabet(3);
presentation::replace_word(p, word_type({}), {2});
presentation::add_identity_rules(p, 2);
p.validate();
ToddCoxeter tc(congruence_kind::twosided);
tc.set_number_of_generators(3); for (size_t i = 0; i < p.rules.size() - 1; i += 2) {
tc.add_pair(p.rules[i], p.rules[i + 1]);
}
REQUIRE(tc.number_of_classes() == 61);
}
LIBSEMIGROUPS_TEST_CASE("fpsemi-examples", "057", "cyclic_inverse_monoid(8) Fernandes index 1", "[fpsemi-examples][quick]") { auto rg = ReportGuard(REPORT);
size_t n = 8; auto s = cyclic_inverse_monoid(n, author::Fernandes, 1); auto p = make<Presentation<word_type>>(s);
p.alphabet(3);
presentation::replace_word(p, word_type({}), {2});
presentation::add_identity_rules(p, 2);
p.validate();
ToddCoxeter tc(congruence_kind::twosided);
tc.set_number_of_generators(3); for (size_t i = 0; i < p.rules.size() - 1; i += 2) {
tc.add_pair(p.rules[i], p.rules[i + 1]);
}
REQUIRE(tc.number_of_classes() == 2041);
}
LIBSEMIGROUPS_TEST_CASE("fpsemi-examples", "058", "cyclic_inverse_monoid Fernandes index 0", "[fpsemi-examples][quick][no-valgrind]") { auto rg = ReportGuard(REPORT); for (size_t n = 3; n < 10; ++n) { auto p = make<Presentation<word_type>>(
fpsemigroup::cyclic_inverse_monoid(n, author::Fernandes, 0));
REQUIRE(p.rules.size() == (n * n + 3 * n + 4));
p.alphabet(n + 2);
presentation::replace_word(p, word_type({}), {n + 1});
presentation::add_identity_rules(p, n + 1);
p.alphabet_from_rules();
p.validate();
ToddCoxeter tc(congruence_kind::twosided);
tc.set_number_of_generators(n + 2); for (size_t i = 0; i < p.rules.size() - 1; i += 2) {
tc.add_pair(p.rules[i], p.rules[i + 1]);
}
REQUIRE(tc.number_of_classes() == n * std::pow(2, n) - n + 1);
}
}
LIBSEMIGROUPS_TEST_CASE("fpsemi-examples", "059", "order_preserving_cyclic_inverse_monoid(4)", "[fpsemi-examples][quick]") { auto rg = ReportGuard(REPORT);
size_t n = 4; auto s = order_preserving_cyclic_inverse_monoid(n); auto p = make<Presentation<word_type>>(s);
p.alphabet(n + 1);
presentation::replace_word(p, word_type({}), {n});
presentation::add_identity_rules(p, n);
p.validate();
ToddCoxeter tc(congruence_kind::twosided);
tc.set_number_of_generators(n + 1); for (size_t i = 0; i < p.rules.size() - 1; i += 2) {
tc.add_pair(p.rules[i], p.rules[i + 1]);
}
REQUIRE(tc.number_of_classes() == 38);
}
LIBSEMIGROUPS_TEST_CASE("fpsemi-examples", "060", "order_preserving_cyclic_inverse_monoid(10)", "[fpsemi-examples][quick][no-valgrind]") { auto rg = ReportGuard(REPORT);
size_t n = 11; auto s = order_preserving_cyclic_inverse_monoid(n); auto p = make<Presentation<word_type>>(s);
p.alphabet(n + 1);
presentation::replace_word(p, word_type({}), {n});
presentation::add_identity_rules(p, n);
p.validate();
ToddCoxeter tc(congruence_kind::twosided);
tc.set_number_of_generators(n + 1); for (size_t i = 0; i < p.rules.size() - 1; i += 2) {
tc.add_pair(p.rules[i], p.rules[i + 1]);
}
REQUIRE(tc.number_of_classes() == 6120);
}
LIBSEMIGROUPS_TEST_CASE("fpsemi-examples", "066", "order_preserving_cyclic_inverse_monoid(10)", "[fpsemi-examples][quick][no-valgrind]") { auto rg = ReportGuard(REPORT);
size_t n = 11; auto s = order_preserving_cyclic_inverse_monoid(n); auto p = make<Presentation<word_type>>(s);
p.alphabet(n + 1);
presentation::replace_word(p, word_type({}), {n});
presentation::add_identity_rules(p, n);
p.validate();
ToddCoxeter tc(congruence_kind::twosided);
tc.set_number_of_generators(n + 1); for (size_t i = 0; i < p.rules.size() - 1; i += 2) {
tc.add_pair(p.rules[i], p.rules[i + 1]);
}
REQUIRE(tc.number_of_classes() == 6120);
}
LIBSEMIGROUPS_TEST_CASE("fpsemi-examples", "067", "partial_isometries_cycle_graph_monoid(5)", "[fpsemi-examples][quick]") { auto rg = ReportGuard(REPORT);
size_t n = 5; auto s = partial_isometries_cycle_graph_monoid(n);
REQUIRE(s.size() == 16); auto p = make<Presentation<word_type>>(s);
p.alphabet(4);
presentation::replace_word(p, word_type({}), {3});
presentation::add_identity_rules(p, 3);
p.validate();
ToddCoxeter tc(congruence_kind::twosided);
tc.set_number_of_generators(4); for (size_t i = 0; i < p.rules.size() - 1; i += 2) {
tc.add_pair(p.rules[i], p.rules[i + 1]);
}
REQUIRE(tc.number_of_classes() == 286);
}
LIBSEMIGROUPS_TEST_CASE("fpsemi-examples", "070", "partial_isometries_cycle_graph_monoid(4)", "[fpsemi-examples][quick]") { auto rg = ReportGuard(REPORT);
size_t n = 4; auto s = partial_isometries_cycle_graph_monoid(n);
REQUIRE(s.size() == 13); auto p = make<Presentation<word_type>>(s);
p.alphabet(4);
presentation::replace_word(p, word_type({}), {3});
presentation::add_identity_rules(p, 3);
p.validate();
ToddCoxeter tc(congruence_kind::twosided);
tc.set_number_of_generators(4); for (size_t i = 0; i < p.rules.size() - 1; i += 2) {
tc.add_pair(p.rules[i], p.rules[i + 1]);
}
REQUIRE(tc.number_of_classes() == 97);
}
LIBSEMIGROUPS_TEST_CASE( "fpsemi-examples", "068", "partial_isometries_cycle_graph_monoid(10)", "[fpsemi-examples][quick][no-valgrind][no-coverage]") { auto rg = ReportGuard(REPORT);
size_t n = 10; auto s = partial_isometries_cycle_graph_monoid(n);
REQUIRE(s.size() == 52); auto p = make<Presentation<word_type>>(s);
p.alphabet(4);
presentation::replace_word(p, word_type({}), {3});
presentation::add_identity_rules(p, 3);
p.validate();
ToddCoxeter tc(congruence_kind::twosided);
tc.set_number_of_generators(4); for (size_t i = 0; i < p.rules.size() - 1; i += 2) {
tc.add_pair(p.rules[i], p.rules[i + 1]);
}
REQUIRE(tc.number_of_classes() == 20'311);
}
LIBSEMIGROUPS_TEST_CASE("fpsemi-examples", "051", "not_symmetric_group(4)", "[fpsemi-examples][standard]") { auto rg = ReportGuard(REPORT);
size_t n = 4; auto s = not_symmetric_group(n,
author::Guralnick + author::Kantor
+ author::Kassabov + author::Lubotzky); auto p = make<Presentation<word_type>>(s);
p.alphabet(n);
presentation::replace_word(p, word_type({}), {n - 1});
presentation::add_identity_rules(p, n - 1);
p.validate();
ToddCoxeter tc(congruence_kind::twosided);
tc.set_number_of_generators(n); for (size_t i = 0; i < p.rules.size() - 1; i += 2) {
tc.add_pair(p.rules[i], p.rules[i + 1]);
}
REQUIRE(tc.number_of_classes() == 72);
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung ist noch experimentell.