This small package implements Artin's
In particular, it implements:
- Standard group operations, including
*
,inv
,^
andone
- Artin's free simplification
freesimplify!
- Dehornoy reduction
reduced
, allowing to implement Braid equivalence==
. - Nice
Braid
visualizations usingCompose
- 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"
andMIME"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:
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)