Partial Jones and Motzkin monoids

Issue #132 resolved
Anonymous created an issue
PJonesMonoid := function( n )
    local  cup, gap, ll, i, ext;
    if n = 1 then 
        return RegularSemigroup( Monoid( 
                Bipartition( [ [ 1, -1 ] ] ),
                Bipartition( [ [ 1 ], [ -1 ] ] )
            ) );
    fi;
    cup := [  ];
    gap := [  ];
    ll := List( [ 1 .. n ], j -> [ j, -j ] );
    for i in [ 1 .. n-1 ] do 
        ext := Union(ll{[1..i-1]}, ll{[i+2..n]});
        Add( cup, Bipartition( Union( ext, [ [ i, i+1 ], [ -i, -i-1 ] ] ) ) );
        Add( gap, Bipartition( Union( ext, [ [ i ], [ -i ], [ i+1, -i-1 ] ] ) ) );
    od;
    Add( gap, Bipartition( Union( ll{[1..n-1]}, [ [ n ], [ -n ] ] ) ) );
    ll := Union( cup, gap );
    return RegularSemigroup( Monoid( ll ) );
end; 
MotzkinMonoid := function( n )
    local  cup, up, ll, i, ext;
    if n = 1 then
        return RegularSemigroup( Monoid(
                Bipartition( [ [ 1, -1 ] ] ),
                Bipartition( [ [ 1 ], [ -1 ] ] )
            ) );
    fi;
    cup := [  ];
    up := [  ];
    ll := List( [ 1 .. n ], j -> [ j, -j ] );
    for i in [ 1 .. n-1 ] do
        ext := Union(ll{[1..i-1]}, ll{[i+2..n]});
        Add( cup, Bipartition( Union( ext, [ [ i, i+1 ], [ -i, -i-1 ] ] ) ) );
        Add( up, Bipartition( Union( ext, [ [ i ], [ i+1, -i], [ -i-1 ] ] ) ) );
    od;
    ll := Union( cup, up, List( up, Star ) );
    return RegularSemigroup( Monoid( ll ) );
end;

Comments (6)

  1. James East

    PartialJonesMonoid(n) is generated by JonesMonoid(n) and the rank n-1 partial identity functions.

    MotzkinMonoid(n) is generated by JonesMonoid(n) and POI(n).

    PartialBrauerMonoid(n) is generated by BrauerMonoid(n) and any rank n-1 partial permutation (e.g., a partial identity).

  2. Nick Loughlin

    It looks like we get significant speedups when playing with these guys if we call them using RegularSemigroup.

    MotzkinMonoid := n -> RegularSemigroup( JonesMonoid(n),AsBipartitionSemigroup( POI( n ) ) );
    PartialJonesMonoid := n -> RegularSemigroup( JonesMonoid(n),AsBipartitionSemigroup( Semigroup( Idempotents( POI( n ) ) ) ) );
    
  3. James Mitchell repo owner

    Right you do get a big speed up if you put create it using RegularSemigroup. Beware that if the semigroup is not regular, then this will cause extreme weirdness!

  4. Log in to comment