README.md

The free group in R

CRAN_Status_Badge Codecov test
coverage

Overview

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 X of words that are objects like W=c^{-4}bb^2aa^{-1}ca, with a group operation of string juxtaposition. Usually one works only with words that are in ``reduced form’’, which has successive powers of the same symbol combined, so W would be equal to c^{-4}b^3ca; see how b appears to the third power and the a term in the middle has vanished.

The group operation of juxtaposition is formally indicated by \circ, but this is often omitted in algebraic notation; thus, for example a^2b^{-3}c^2\circ c^{-2}ba =a^2b^{-3}c^2c{^-2}ba =a^2b^{-2}ba.

Installation

You can install the released version of freegroup from CRAN with:

# install.packages("freegroup")  # uncomment this to install the package
library("freegroup")

The freegroup package in use

Function rfree() generates a vector of random free group elements, giving quick “get you going” examples:

a <- rfree(10,5)
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
b <- as.free('x')

Then we can perform various operations on these vectors:

a+b
#>  [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
a-b
#>  [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
a^b
#>  [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:

a[3:9] <- as.free('xy')
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

References

Further information

For more detail, see the package vignette

vignette("freegroup")



Try the freegroup package in your browser

Any scripts or data that you put into this service are public.

freegroup documentation built on Dec. 28, 2022, 2:14 a.m.