Git Product home page Git Product logo

affinea.jl's Introduction

AffineA

# AffineAModule.

This package implements:

  • the type PPerm, periodic permutations of the integers.
  • the function coxeter_PPerm_group(n) (or coxPPerm(n)), the Coxeter group Ãₙ₋₁ as a group of PPerm of period n.
  • the function DualBraidMonoid for such groups.

It is based on the papers

  • [Digne, F.] "Presentations duales pour les groupes de tresses de type affine A", Comment. Math. Helv. 81 (2006) 23–47
  • [Shi] The Kazhdan-Lusztig cells in certain affine Weyl groups Springer LNM 1179 (1986)

© 2007 François Digne for the mathematics, François Digne and Jean Michel for the code.

Installing

To install this package, at the Julia command line:

  • enter package mode with ]
  • do the command
(@v1.7) pkg> add "https://github.com/jmichel7/AffineA.jl"
  • exit package mode with backspace and then do
julia> using Chevie, AffineA

and you are set up.

To update later to the latest version, do

(@v1.7) pkg> update AffineA

An example:

julia> W=coxPPerm(3) # The group Ã₂ as periodic permutations of period 3.
coxeter_PPerm_group(3)

julia> l=elements(W,3) # elements of Coxeter length 3
9-element Vector{PPerm}:
 (2,3₋₁)
 (1,2)₁(3)₋₁
 (1)₋₁(2,3)₁
 (1,3)
 (1,3)₁(2)₋₁
 (1,2₋₁)₋₁(3)₁
 (1)₁(2,3₋₁)₋₁
 (1,3₋₁)₋₁(2)₁
 (1,2₋₁)
julia> print(l[6]) # the images of 1:3 by the 6th element
PPerm(Int16[-1, 1, 6])
julia> mod1.([-1, 1, 6],3) # the image in 𝔖₃
3-element Vector{Int64}:
 2
 1
 3

julia> l[6] # printed as product of cycles with shifts -1 and 1 (sum 0). 2₋₁ is 2-3
PPerm(3): (1,2₋₁)₋₁(3)₁

julia> B=DualBraidMonoid(W) # The Coxeter element is W(1,2,3)
DualBraidMonoid(coxeter_PPerm_group(3),c=[1, 2, 3])

julia> b=prod(B.(refls(W,1:7))) # the product in B of 7 dual atoms
c.4.5.46
julia> print(b)
B(2,4,3,4,5,4,6)
julia> refls(W,2:5) # the corresponding reflections
4-element Vector{PPerm}:
 (2,3)
 (1,3₋₁)
 (1,3)
 (1,2₋₁)

source

# AffineA.PPermType.

a PPerm represents a shiftless periodic permutation f of the integers

  • periodic of period n means f(i+n)=f(i)+n
  • then permutation means all f(i) are distinct mod n.
  • no shift means sum(f.(1:n))==sum(1:n)

it is represented in field d as the Vector [f(1),…,f(n)]. The default constructor takes a vector of integers, and checks its validity if the keyword check=true is given.

source

# AffineA.PPermMethod.

PPerm(n,c₁,…,cₗ;check=true) constructs a PPerm of period n by giving its decomposition into cycles.

cycles cᵢ are given as pairs (i₁,…,iₖ)=>d representing the permutation i₁↦ i₂↦ …↦ iₖ↦ i₁+d*n. =>d can be omitted when d==0 and (i₁,)=>d can be abbreviated to i₁=>d.

An iⱼ itself may be given as a pair v=>d representing v+n*d.

The argument is tested for validity if check=true; in particular the cycles must be disjoint mod. n.

julia> PPerm([-1,1,6])
PPerm(3): (1,2₋₁)₋₁(3)₁

julia> PPerm(3,(1,2=>-1)=>-1,3=>1)
PPerm(3): (1,2₋₁)₋₁(3)₁

julia> PPerm(3,(1,-1)=>-1,3=>1)
PPerm(3): (1,2₋₁)₋₁(3)₁

source

# PermGroups.Perms.cyclesMethod.

cycles(a::PPerm)

The non-trivial cycles of a PPerm; each cycle is returned as a pair (i₁,…,iₖ)=>d and is normalized such that mod1(i₁,n) is the smallest of the mod1(iⱼ,n) and 1≤i₁≤n.

julia> cycles(PPerm([-1,1,6]))
2-element Vector{Pair{Vector{Int64}, Int64}}:
 [1, -1] => -1
     [3] => 1

source

# AffineA.coxeter_PPerm_groupFunction.

coxeter_PPerm_group(n::Integer) returns W(Ãₙ₋₁) as a group of PPerm of period n.

source

# Chevie.PermRoot.reflsMethod.

refls(W::Atilde,i::Integer)

returns the i-th reflection of W. Reflections (a,bⱼ) are enumerated by lexicographical order of (j,a,b-a) with j nonnegative; however when a>b this reflection is printed (b,a₋ⱼ). i can also be a Vector; then the corresponding list of reflections is returned.

source

# Chevie.Garside.DualBraidMonoidMethod.

DualBraidMonoid(W)

If W=coxeter_PPerm_group(n), constructs the dual braid monoid for Ãₙ₋₁ and the Coxeter element c=PPerm([1-n;3:n;2+n]). If M=DualBraidMonoid(W), used as a function, M(w) returns an element of the dual braid monoid if w belongs to the interval [1,c], and nothing otherwise.

julia> W=coxPPerm(3);l=elements(W,3)
9-element Vector{PPerm}:
 (2,3₋₁)
 (1,2)₁(3)₋₁
 (1)₋₁(2,3)₁
 (1,3)
 (1,3)₁(2)₋₁
 (1,2₋₁)₋₁(3)₁
 (1)₁(2,3₋₁)₋₁
 (1,3₋₁)₋₁(2)₁
 (1,2₋₁)

julia> B=DualBraidMonoid(W);B.(l)
9-element Vector{Union{Nothing, GarsideElt{PPerm, AffineA.AffaDualBraidMonoid{PPerm, AffineA.Atilde}}}}:
 6
 nothing
 c
 4
 nothing
 nothing
 nothing
 nothing
 5

source

affinea.jl's People

Contributors

jmichel7 avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.