[GAP Forum] free bands
James Mitchell
jdm3 at st-and.ac.uk
Thu Jul 5 11:20:53 BST 2012
Dear Joao, dear Forum,
One correction to my previous mail: the comment `i.e. the set of all
square free finite words over the ...' is nonsense since there are
infinitely many square free words over any alphabet with at least 3
letters. So, please ignore this comment.
Regards,
James
On 2 July 2012 11:24, James Mitchell <jdm3 at st-and.ac.uk> wrote:
> Dear Joao, dear forum,
>
> You can produce the elements of the free band with n generators using
> the code at the end of this email: FreeBand(4), for example will
> return the free band on 4 as lists of positive integers, i.e. the set
> of all square free finite words over the alphabet "1", "2", "3", "4".
>
> It takes about 2.5 seconds on my laptop to produce the elements of the
> free band on 4 points. Since there are 2, 751,884,514, 765, elements
> of the free band on 5 generators, it seems unlikely that these could
> be produced in any reasonable amount of time.
>
> The function U(set) below creates the list of all elements of the free
> band containing the letters in set (where set is a list of positive
> integers).
>
> To represent any such list as word in "a", "b", "c", and "d" do:
>
> gap> s:=FreeSemigroup("a", "b", "c", "d");
> <free semigroup on the generators [ a, b, c, d ]>
> gap> a:=s.1;; b:=s.2;; c:=s.3;; d:=s.4;;
>
> gap> fb:=FreeBand(3);;
> gap> EvaluateWord([a,b,c,d], Random(fb));
> a*b*c*b*a*c
>
>
> The code....
>
> U:=function(P)
> local out,u0, u1, w0, w1;
>
> if Length(P)=1 then
> return List(P, x-> [x]);
> fi;
> out:=[];
> for u0 in P do
> for w0 in U(Difference(P, [u0])) do
> for u1 in P do
> for w1 in U(Difference(P, [u1])) do
> Add(out, Collapse(w0,u0,u1,w1));
> od;
> od;
> od;
> od;
> return out;
> end;
>
> Collapse:=function(v0, u0, u1, v1)
> local i, j;
> w0:=Concatenation(v0, [u0]);
> w1:=Concatenation([u1], v1);
>
> i:=Length(w0);
>
> while w0[i]<>u1 and i>1 do
> i:=i-1;
> od;
>
> j:=0;
>
> while j<=Length(w0)-i do
> j:=j+1;
> if w1[j]<>w0[i+j-1] then
> return Concatenation(w0, w1);
> fi;
> od;
>
> return Concatenation(w0, w1{[j+1..Length(w1)]});
> end;
>
> FreeBand:=function(n)
> local out, enum, i;
> out:=[];
> enum:=EnumeratorOfCombinations([1..n]);
> for i in [2..2^n] do
> Append(out, U(enum[i]));
> od;
> return out;
> end;
>
> if not IsBound(EvaluateWord) then
> EvaluateWord:=function ( gens, w )
> local i, res;
> if Length( w ) = 0 then
> return gens[1] ^ 0;
> fi;
> res := gens[w[1]];
> for i in [ 2 .. Length( w ) ] do
> res := res * gens[w[i]];
> od;
> return res;
> end;
> fi;
>
>
>
>>> From: Joao Araujo <mjoao at classic.univ-ab.pt>
>>> Subject: [GAP Forum] free bands
>>> Date: 13 July 2009 11:56:13 GMT+01:00
>>> To: forum at gap-system.org
>>>
>>>
>>> Dear all,
>>>
>>> I would be grateful if someone could tell me how I can use GAP to get all the elements of the free band on 3 (or 4) generators.
>>>
>>> I thank in advance,
>>> Joao
>>>
>>> _______________________________________________
>>> Forum mailing list
>>> Forum at mail.gap-system.org
>>> http://mail.gap-system.org/mailman/listinfo/forum
>>
>>
>> --
>> Dr. Alexander Konovalov School of Computer Science
>> & Centre for Interdisciplinary Research in Computational Algebra
>> University of St Andrews Tel +44/0 (1334) 461633
>> http://www.cs.st-andrews.ac.uk/~alexk Fax +44/0 (1334) 463278
>> The University of St Andrews is a charity registered in Scotland:No.SC013532
>>
>>
>>
>>
>>
>>
>>
>
>
>
> --
> James Mitchell
> tinyurl.com/jdmitchell
>
> The University of St Andrews is a charity registered in Scotland : No SC013532
--
James Mitchell
tinyurl.com/jdmitchell
The University of St Andrews is a charity registered in Scotland : No SC013532
More information about the Forum
mailing list