A few days ago, a friend of mine sent me a fascinating problem. The problem goes like this:
The homophony group (of English) is the group with 26 generators
a
,b
,c
, and so on untilz
and one relation for every pair of English words which sound the same. Prove that the group is trivial!
For example, consider the group elements knight and night. By the cancellation laws, this implies that k must be the identity element. Recall that a trivial group is one which consists solely of its identity element, so our task is to show that each letter of the English alphabet is the identity element.
Skipping all of the algebraic jargon, we want to show that if we set all homophones "equal" to one another, and do left cancellation, right cancellation, and substitution, we can show that all the English letters equal one.
This is a fun exercise to do by hand, but I'd like to do it in Haskell. I've started by compiling a list of homophones in American English, starting with this list and removing all single letters (such as j
being a homophone with jay
) and all words with apostrophes and periods, as well as some less commonly used words.
The contents of the file look like this:
ad add
add ad
arc ark
ark arc
...
Each line is a space-delimited list of words. The first word in the list sounds identical to all the remaining words in the list. This is why you see repeats - ad
sounds like add
but also add
sounds like ad
. This repetition isn't necessary, as we could do it programmatically, but is convenient.
Let's go ahead and load this list:
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4