The freegroup
package provides functionality for working
with the free group in R. A detailed vignette is provided in the
package. Informally, the free group is the set
The group operation of juxtaposition is formally indicated by
You can install the released version of freegroup from CRAN with:
# install.packages("freegroup") # uncomment this to install the package
library("freegroup")
freegroup
package
in useFunction rfree()
generates a vector of random free group
elements, giving quick “get you going” examples:
<- rfree(10,5)
a
a#> [1] a.d^5.a^-4.b^5.e^-3 a.e^2.b^2 a^3.e^-7.b^-3
#> [4] b^7.d^4 a^2.b^-4.c^-4 a^-5.d^3.c^3
#> [7] d^-5.e^-1.d^-5.e^3 c.b^-7.c^4.b^-5 c^6.e^2
#> [10] e^-3.d^5.a^-5
<- as.free('x') b
Then we can perform various operations on these vectors:
+b
a#> [1] a.d^5.a^-4.b^5.e^-3.x a.e^2.b^2.x a^3.e^-7.b^-3.x
#> [4] b^7.d^4.x a^2.b^-4.c^-4.x a^-5.d^3.c^3.x
#> [7] d^-5.e^-1.d^-5.e^3.x c.b^-7.c^4.b^-5.x c^6.e^2.x
#> [10] e^-3.d^5.a^-5.x
-b
a#> [1] a.d^5.a^-4.b^5.e^-3.x^-1 a.e^2.b^2.x^-1 a^3.e^-7.b^-3.x^-1
#> [4] b^7.d^4.x^-1 a^2.b^-4.c^-4.x^-1 a^-5.d^3.c^3.x^-1
#> [7] d^-5.e^-1.d^-5.e^3.x^-1 c.b^-7.c^4.b^-5.x^-1 c^6.e^2.x^-1
#> [10] e^-3.d^5.a^-5.x^-1
^b
a#> [1] x^-1.a.d^5.a^-4.b^5.e^-3.x x^-1.a.e^2.b^2.x
#> [3] x^-1.a^3.e^-7.b^-3.x x^-1.b^7.d^4.x
#> [5] x^-1.a^2.b^-4.c^-4.x x^-1.a^-5.d^3.c^3.x
#> [7] x^-1.d^-5.e^-1.d^-5.e^3.x x^-1.c.b^-7.c^4.b^-5.x
#> [9] x^-1.c^6.e^2.x x^-1.e^-3.d^5.a^-5.x
There are a number of package functions that work in a vectorized way:
sum(a)
#> [1] a.d^5.a^-4.b^5.e^-3.a.e^2.b^2.a^3.e^-7.b^4.d^4.a^2.b^-4.c^-4.a^-5.d^3.c^3.d^-5.e^-1.d^-5.e^3.c.b^-7.c^4.b^-5.c^6.e^-1.d^5.a^-5
The package also supports extraction and replacement:
3:9] <- as.free('xy')
a[
a#> [1] a.d^5.a^-4.b^5.e^-3 a.e^2.b^2 x.y
#> [4] x.y x.y x.y
#> [7] x.y x.y x.y
#> [10] e^-3.d^5.a^-5
Various simple elements can be created:
alpha(1:10)
#> [1] a b c d e f g h i j
abc(1:5)
#> [1] a a.b a.b.c a.b.c.d a.b.c.d.e
For more detail, see the package vignette
vignette("freegroup")