BraidGroup

Build Status

Compressed Braid

This small package implements Artin's $B_\infty$ Braid group and some tools.

In particular, it implements:

  • Standard group operations, including *, inv, ^ and one
  • Artin's free simplification freesimplify!
  • Dehornoy reduction reduced, allowing to implement Braid equivalence ==.
  • Nice Braid visualizations using Compose
  • Braid minimization (Alg 2.2) in Kotov et al
  • Compressed braid visualization, with parallel strand crossings. This is not the default, invoque with composed(braid, compressed=true). This has been used to produce the braid above.

It is similar in scope to Braids.jl from which it draws some inspiration. At difference with it, this package:

  • Represents the $B_\infty$ group rather than $B_n$
  • Internally represent braids as product of generators, whereas Braids stores powers of generators.
  • Implements both MIME"text/html" and MIME"text/plain" output
  • Operations are done in-place as much as possible: in particular, reduced! is almost non-allocating, and each H iteration is linear in the length of the braid.
  • On the negative side, the interesting matrix representation included in Braids.jl is not implemented.
julia> b = prod(braid(rand(1:5))^rand(-2:2) for i=1:40)

displays in MIME"text/html" (e.g. in a notebook) as:

Example Braid

and in plain text as:

σ₂⁻²σ₅⁻²σ₄²σ₅⁻¹σ₂⁻²σ₁⁵σ₄σ₂⁻²σ₃⁻⁴σ₂⁻²σ₅σ₁⁻¹σ₃²σ₄²σ₃⁻⁵σ₁⁻²σ₄²σ₁⁻²σ₂⁻²

Note that in notebooks you can choose which MIME type to display. It can be reduced to the unique simplified equivalent braid

julia> reduced(b)

Reduced Braid