Homophonic quotients of free groups

This file contains the GAP input needed to verify the result of the following paper:

  • Mestre, Jean-François; Schoof, René; Washington, Lawrence; Zagier, Don Quotients homophones des groupes libres. (French) [Homophonic quotients of free groups] Experiment. Math. 2 (1993), no. 3, 153--155 (http://eudml.org/doc/233741)

with respect to the English language.

That paper proves the triviality of the finitely presented group given by generators being the 26 letters of the English alphabet and relations being formed by the words which are pronounced in the same way but have different spelling.

We will validate the proof using GAP. First, we will create a free group $F$ on 26 letters:

In [1]:
F:=FreeGroup("a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z");
Out[1]:
<group with 26 generators>

Next, we will specify relations. We would like the list of relations to be human readable, and contain them in the same order as in the proof. The comment explains which of generators are eliminated by the corresponding relation.

In [2]:
pairs:=[ 
"bye=by",          # e=1
"lead=led",        # a=1
"maid=made",       # mid=md => i=1
"sow=sew",         # o=e=1
"buy=by",          # u=1
"sow=so",          # w=1
"lye=lie",         # y=1
"hour=our",        # h=1 
"knight=night",    # k=1
"damn=dam",        # n=1
"psalter=salter",  # p=1
"plumb=plum",      # b=1
"bass=base",       # s=1
"butt=but",        # t=1
"tolled=told",     # l=1
"barred=bard",     # r=1
"dammed=damned",   # m=1
"chased=chaste",   # d=1
"sign=sine",       # g=1
"daze=days",       # z=1
"cite=sight",      # c=1
"jeans=genes",     # j=1
"queue=cue",       # q=1
"tax=tacks",       # x=1
# "ruff=rough",    # f=1, we need not this relation used in the paper
"phase=faze",      # f=1
"chivvy=chivy"];   # v=1
Out[2]:
[ "bye=by", "lead=led", "maid=made", "sow=sew", "buy=by", "sow=so", "lye=lie", "hour=our", "knight=night", "damn=dam", "psalter=salter", "plumb=plum", "bass=base", "butt=but", "tolled=told", "barred=bard", "dammed=damned", "chased=chaste", "sign=sine", "daze=days", "cite=sight", "jeans=genes", "queue=cue", "tax=tacks", "phase=faze", "chivvy=chivy" ]

Next, we use ParseRelators (see GAP reference manual) to convert strings to words composed from the generators of $F$:

In [3]:
rels:=List( pairs, r -> ParseRelators(GeneratorsOfGroup(F),r)[1]);
Out[3]:
[ b*y*e*y^-1*b^-1, l*e*a*e^-1*l^-1, m*a*d*e*d^-1*i^-1*a^-1*m^-1, s*e*o^-1*s^-1, b*u*b^-1, s*o*w*o^-1*s^-1, l*i*y^-1*l^-1, h, k, d*a*m*n*m^-1*a^-1*d^-1, p, p*l*u*m*b*m^-1*u^-1*l^-1*p^-1, b*a*s*e*s^-2*a^-1*b^-1, b*u*t*u^-1*b^-1, t*o*l^2*e*l^-1*o^-1*t^-1, b*a*r^2*e*r^-1*a^-1*b^-1, d*a*m*n*m^-2*a^-1*d^-1, c*h*a*s*t*e*d^-1*e^-1*s^-1*a^-1*h^-1*c^-1, s*i*n*e*n^-1*g^-1*i^-1*s^-1, d*a*y*s*e^-1*z^-1*a^-1*d^-1, s*i*g*h*t*e^-1*t^-1*i^-1*c^-1, g*e*n*e*n^-1*a^-1*e^-1*j^-1, q*u*e*c^-1, t*a*c*k*s*x^-1*a^-1*t^-1, p*h*a*s*z^-1*a^-1*f^-1, c*h*i*v*i^-1*h^-1*c^-1 ]

Finally, we check that the group given by the specified presentation is trivial:

In [4]:
G:=F/rels;
Out[4]:
<group with 26 generators>
In [5]:
Size(G);
Out[5]:
1