From c80dde42575450fa7a1746f667de58417216239b Mon Sep 17 00:00:00 2001
From: R Giacomelli <54901533+iortas@users.noreply.github.com>
Date: Wed, 7 Oct 2026 16:28:18 +0100
Subject: [PATCH 1/2] freeband: add method for OnePseudoInverse
---
doc/attr.xml | 4 ++++
gap/fp/freeband.gi | 7 +++++++
tst/standard/fp/freeband.tst | 10 ++++++++++
3 files changed, 21 insertions(+)
diff --git a/doc/attr.xml b/doc/attr.xml
index 77a313b9e..4a467d87d 100644
--- a/doc/attr.xml
+++ b/doc/attr.xml
@@ -1278,6 +1278,10 @@ Error, the semigroup is not finite]]>
-
.
+ elements of a free band
+ -
+
.
+
See also .
diff --git a/gap/fp/freeband.gi b/gap/fp/freeband.gi
index 19f506be5..f5d18e73e 100644
--- a/gap/fp/freeband.gi
+++ b/gap/fp/freeband.gi
@@ -504,3 +504,10 @@ function(_, hashlen)
return rec(func := SEMIGROUPS.HashFunctionForFreeBandElements,
data := hashlen);
end);
+
+InstallMethod(OnePseudoInverseOfSemigroupElement,
+"for a free band element",
+[IsFreeBandElement],
+function(x)
+ return x;
+end);
\ No newline at end of file
diff --git a/tst/standard/fp/freeband.tst b/tst/standard/fp/freeband.tst
index 19770b6f7..c4c64c831 100644
--- a/tst/standard/fp/freeband.tst
+++ b/tst/standard/fp/freeband.tst
@@ -316,6 +316,16 @@ Error, the generator names must be distinct
gap> FreeBand(["a", "x", "y", "x", "d"]);
Error, the generator names must be distinct
+# OnePseudoInverseOfSemigroupElement
+gap> S := FreeBand(5);
+
+gap> gens := GeneratorsOfSemigroup(S);
+[ x1, x2, x3, x4, x5 ]
+gap> z := gens[1]*gens[3]*gens[2]*gens[2]*gens[5]*gens[3];
+x1x3x2x5x1x3x2x5x2x5x3
+gap> OnePseudoInverseOfSemigroupElement(z)
+x1x3x2x5x1x3x2x5x2x5x3
+
#
gap> SEMIGROUPS.StopTest();
gap> STOP_TEST("Semigroups package: standard/fp/freeband.tst");
From 8441a8ed4d5be4b2810fbec42403cab912006a12 Mon Sep 17 00:00:00 2001
From: R Giacomelli <54901533+iortas@users.noreply.github.com>
Date: Wed, 7 Oct 2026 16:28:18 +0100
Subject: [PATCH 2/2] freeband: add method for OnePseudoInverse
---
doc/attr.xml | 4 ++++
gap/fp/freeband.gi | 4 ++++
tst/standard/fp/freeband.tst | 8 ++++++++
3 files changed, 16 insertions(+)
diff --git a/doc/attr.xml b/doc/attr.xml
index 77a313b9e..4a467d87d 100644
--- a/doc/attr.xml
+++ b/doc/attr.xml
@@ -1278,6 +1278,10 @@ Error, the semigroup is not finite]]>
-
.
+ elements of a free band
+ -
+
.
+
See also .
diff --git a/gap/fp/freeband.gi b/gap/fp/freeband.gi
index 19f506be5..3f5c8390f 100644
--- a/gap/fp/freeband.gi
+++ b/gap/fp/freeband.gi
@@ -504,3 +504,7 @@ function(_, hashlen)
return rec(func := SEMIGROUPS.HashFunctionForFreeBandElements,
data := hashlen);
end);
+
+InstallMethod(OnePseudoInverseOfSemigroupElement,
+"for a free band element",
+[IsFreeBandElement], IdFunc);
\ No newline at end of file
diff --git a/tst/standard/fp/freeband.tst b/tst/standard/fp/freeband.tst
index 19770b6f7..888eedc63 100644
--- a/tst/standard/fp/freeband.tst
+++ b/tst/standard/fp/freeband.tst
@@ -316,6 +316,14 @@ Error, the generator names must be distinct
gap> FreeBand(["a", "x", "y", "x", "d"]);
Error, the generator names must be distinct
+# OnePseudoInverseOfSemigroupElement
+gap> S := FreeBand(5);
+
+gap> z := S.1 * S.3 * S.2 * S.2 * S.5 * S.3;
+x1x3x2x5x1x3x2x5x2x5x3
+gap> OnePseudoInverseOfSemigroupElement(z);
+x1x3x2x5x1x3x2x5x2x5x3
+
#
gap> SEMIGROUPS.StopTest();
gap> STOP_TEST("Semigroups package: standard/fp/freeband.tst");