# outer: Outer automorphisms of the free group In RobinHankin/freegroup: The Free Group

## Description

Vectorized functionality to implement outer automorphisms of the free group

## Usage

 ```1 2 3 4 5 6``` ```permsymb_single_X(X,f) permsymb_single_f(X,f) permsymb_vec(X,f) permsymb(X,f) autosub_lowlevel(M,e,S) autosub(X,e,S,automorphism_warning=TRUE) ```

## Arguments

 `X,S` Object of class `free` `f` Permutation function `M` Single free group element, in two-row matrix form `e` Single element to substitute `automorphism_warning` Boolean, with default `TRUE` meaning to give a warning if the requested substitution is not an automorphism and `FALSE` meaning not to give the warning

## Details

In 1924, Nielsen showed that the automorphism group of the free group with basis [x_1,...,x_n] is generated by the following four elementary Nielsen transformations:

1. switch x_1 and x_2

2. Cyclically permute x_1,x_2,...,x_n to x_2,...,x_n,x_1

3. Replace x_1 with x_1^-1

4. Replace x_1 with x_1 x_2.

The functions documented here give vectorized methods to effect such outer automorphisms, using the permutations package.

Operations 1 and 2 above generate the symmetric group S_n and such automorphisms are effected by function `permsymb()`. Operation 3 is carried out by by `flip()` and operation 4 by `subsymb()`.

Functions `permsymb_single_X()`, `permsymb_single_f()`, `permsymb_vec()` and `subsymb_lowlevel()` are low-level helper functions that are not really suited for the end user; use `permsymb()`, `(flip)` and `subsymb()` instead.

## Author(s)

Robin K. S. Hankin

## References

Wikipedia contributors. (2018, October 29). “Automorphism group of a free group”. In Wikipedia, The Free Encyclopedia. Retrieved 19:58, January 10, 2019, from https://en.wikipedia.org/w/index.php?title=Automorphism_group_of_a_free_group&oldid=866270661

`flip`
 ``` 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20``` ```library("permutations") X <- rfree(10,9) permsymb(X, as.function(cyc_len(9))) f <- as.function(rperm(10,9)) permsymb(as.free('abbccc'),f) permsymb(abc(1)+abc(8),f) autosub(abc(1:6),'c',as.free('xxxyz')) S <- free(rbind(23+sample(1:3,10,TRUE),sample(c(-1,1,3),10,TRUE))) all(X==X %>% autosub('a',S) %>% autosub('a',inverse(S))) ## should be TRUE ## Possible to use slightly slicker idiom: g <- function(x){permsymb(x,f)} g(X) ```