
- Demonstrate a sufficient technology platform for upcoming experiments using Google Colab.
- Show transparency and repeatability.
- Provide a provisional proof of the project’s main premise.
Upcoming experiments will focus more on technology and less on background information.
with thanks to:

The primary goal of this project is to settle the controversy (which has been, improbably, raging for generations) about whether there are ‘Messages to the Future’ secretly embedded within the text of the First Folio of William Shakespeare.
There are. This project will provide visualizations which will demonstrate this, in a way which will be incontrovertible: that the First Folio is riddled with many diverse cipher systems, which have always been secretly lurking there since 1623 — though this is heatedly denied by some. The famous document where the secret messages have been concealed all along, was, already, the most-closely analyzed document in the history of the English Language. Yet somehow this slipped by almost completely.
This evidentiary foundation of this project consists of digital content generously provided to the public by the Bodleian Library of Oxford University, via the World Wide Web. Downloads are freely available of high resolution digital scans of their copy of the 1623 First Folio, one of the foundational documents of Anglo-American civilization.
A series of Experiments will be performed here, drawing from many online resources, but beginning with the Bodleian Library First Folio scans. Comprehensive transparency will be striven for, going forward, in order to encourage independent repetition of the experiments, and publication of results.

This strange excursion begins at a most unlikely place: the Shakespearean play, Troilus and Cressida, which is widely understood to be the least successful of the 36 plays of the First Folio. It is rarely, if ever, performed. It begins with an even more unlikable one-page ‘Prologue‘, making it only worse, a slice of nothing-pickle on top of a nothing-burger.
But we put forward the hypothesis here, that the Prologue can be understood to be the intended entranceway to a wondrous cryptographic labyrinth, one which has been hidden in plain sight for precisely 400 years.

You Are Here →

Troilus and Cressida is the only one of the 36 plays which doesn’t appear on the First Folios’s Catalogue page.
It doesn’t appear at all in the earlier press runs of the Folio. Evidence points to it being the very last of the plays included into the Folio. But why bother at all if it is so woefully lacking? Scholars seem baffled by it.
But the idea put forward here resolves the oddities:
It was always fully intended to be the worst of the 36 plays, with the Prologue being the most insufferable page of all.
The illustration below shows a digital reflection of the Bodleian Library Prologue page onto this website. It can be maximized and paged:
Please wait while flipbook is loading. For more related info, FAQs and issues please refer to DearFlip WordPress Flipbook Plugin Help documentation.

This Experiment is inextricably entangled with the brilliantly accomplished American cryptographer William F. Friedman (1891 – 1969).
Friedman was one of the founders of the US National Security Agency, and many recognize him as being the foremost Cryptographer of the 20th Century. He may have coined the term “Cryptanalysis”
As a person, Friedman was erratic, complex, and a dubious character.
In a booklet published in 1906, while he managed the Cryptography Department set up within Riverbank Laboratories of Illinois (the nation’s first privately-funded research institute) he seems to be saying that he devoted several man years to the study of secret codes within the First Folio.
Below is a page from his booklet, where he (or his workers) decoded the Prologue from Troilus and Cressida using the Biliteral Cipher of Sir Francis Bacon, which is first described as an appendix to Bacon’s classic, The Advancement of Learning (1623 edition). There, Bacon steps through the then-novel method of how to encode and decode hidden messages, providing several illustrations drawn by his own pen. Today we call it the Binary Code. It was the World’s first published description of the Binary Code.
The illustration below shows a digital reflection of the page from Friedman’s booklet. It can be maximized and paged:
Please wait while flipbook is loading. For more related info, FAQs and issues please refer to DearFlip WordPress Flipbook Plugin Help documentation.
‘The Keys for Deciphering the Greatest Work of Sir Francis Bacon‘
22 Pages, Riverbank Laboratories, Geneva, IL, 1906
On Page 9, above, Friedman steps through the method used to decode the hidden message embedded within The Prologue.
The purpose of our Experiment One is to re-create this method using modern technology, and demonstrate its validity.
Results appear to prove, at least indirectly, that Sir Francis Bacon (Francis St Albans) was, in fact, secretly one of the co-authors of the First Folio.
With each letter classified as to its a or b form, the procedure of deciphering was a simple step forward. Under each letter the original text was written the a or b designating the form to which it belonged, and the whole was then divided off into groups of five, each such group of a’s and b’s representing one letter as shown in Bacon’s cipher key (see page 4). Facing this page is a transcription of the u0022Prologueu0022 arranged in groups of five:beneath each letter is the a or b, to which form each letter belongs. Each such combination or group will be found to represent a corresponding letter in the cipher key. This is shown in order to enable the reader to follow the method of deciphering u002du002d-simple enough when the difficult preliminary step already described of assigning the letters to their respective class has been accomplished.
Friedman’s description of the decoding method on Page 9 (copied left), is very terse, so it will be expanded upon below, with illustrations.

Friedman makes reference to Bacon’s cipher key, which encodes one letter of the alphabet (either upper or lower case) into a quintet of binary values, here, either an ‘a’ or ‘b’. This is equivalent to binary 1’s and 0’s.

A pair of Biformed Alphabets are also used, one each for upper and lower case. At left, the upper row of letters encode a printed letter with an ‘a’ form, while the bottom line encodes a letter into the ‘b’ form.
It can be seen that in some cases the difference between the two forms is easy to see (such as lower case ‘z’ here) but in other cases, (such as the letter ‘x’), the difference is miniscule. Readers don’t notice the two forms, however, so that blocks of text can contain roughly equal numbers of ‘a’ and ‘b’ forms; readers just pass off the lack of uniformity as Sloppy Typography.
Thus, hidden text can be concealed within a larger body of outer text.

At left is a sample of Page 7 of the booklet, showing how the original First Folio text has been divided into groups of five, with each letter (and this is the hard part) being already decoded as being ‘a’ or ‘b’. Beginning with Experiment Two, automating the onerous process of classifying a letter as the ‘a’ or ‘b’ form (using AI technology) will become the major focus of this project as a whole. But as Friedman notes in the last sentence of his description (on Page 8) his booklet illustrates the classification of the Biformed Values already completed. Therefore what comes next is relatively easy.
The following shows the above booklet illustration converted into a spreadsheet file:
ThePr | olugu | eINTr | oyThe | relye | sthes | ceneF | romIl | esofG | reece | ThePr | inces | Orgil | loust |
aabab | baaaa | aaaaa | abbaa | aaaba | abaaa | baaab | baaab | baaba | aaaaa | ababa | aaaab | aaaaa | abbaa |
heirh | ighbl | oodch | afdHa | uetot | hepor | tofAt | henss | entth | eirsh | ippes | Fraug | htwit | hthem |
aaabb | aabaa | baaab | aaaba | aabaa | abbaa | aaabb | aabaa | aaabb | aabab | baaaa | abbab | ababb | baaba |
inist | ersan | dinst | rumen | tsOfe | ruell | Warre | Sixty | andni | netha | twore | Their | Crown | etsRe |
aabbb | aabaa | ababb | abaaa | aabba | aabbb | baaba | babba | aabbb | aabaa | baaaa | abbab | aabaa | baaab |
galif | romth | Athen | ianba | yPutf | ortht | oward | Phyrg | inand | their | vowis | madeT | orans | ackeT |
abbab | aabab | baaba | baaaa | abbab | babba | ababa | abbab | baabb | abaaa | abbaa | aabba | aaaaa | abbaa |
roywi | thinw | hoses | trong | emure | sTher | auish | dHele | nmene | lausQ | ueene | Withw | anton | Paris |
aaabb | baaaa | aabaa | baabb | aabaa | baaaa | abaaa | abbaa | aabba | baaba | aabbb | aabaa | baaab | aabaa |
sleep | esand | thats | theQu | arrel | lToTe | nedos | theye | omeAn | dthed | eeped | rawin | gBark | edoth |
abbaa | abbab | aaaab | ababa | aabaa | aaaaa | abbaa | aaaba | aabaa | baaab | baaba | abbab | baaaa | baaab |
eredi | sgorg | eThei | rwarl | ikefr | autag | enowo | nDard | anPla | inesT | hefre | shand | yetva | bruis |
aabbb | abaaa | aaabb | abaaa | abbaa | aabbb | abaaa | baaab | babaa | baaaa | abaaa | baaba | abaaa | abbaa |
edGre | ekesd | opite | hThei | rbrau | ePaui | llion | sPria | mssix | gated | CityD | ardan | AndTi | mbria |
aabba | baaab | aabbb | abbab | ababb | aabaa | baaaa | baaab | abaaa | ababa | ababa | abaaa | aaaaa | aaabb |
Helia | sChet | asTro | ienAn | dAnte | nonid | nswit | hmass | ieSta | plesA | ndcor | respo | nsine | andfu |
baaab | aaaaa | abbaa | aaabb | abbab | aaabb | babba | baaab | baaab | aabaa | babba | abaaa | abbaa | aaaba |
lfill | imgBo | ltsSt | irrev | ptheS | ohnes | ofTro | yNowE | xpect | ation | tickl | ingsk | ittis | hspir |
abaaa | abbba | aabbb | aabaa | baaaa | babaa | abaaa | baaba | aabbb | baaba | aabbb | aabaa | aaaaa | aabaa |
itsOa | onean | dothe | rside | Troia | nandG | reeke | Setsa | Honh | azard | Andhi | thera | mJeom | eAPro |
abbaa | aabaa | abaaa | aaabb | abbab | aabab | baaba | aabbb | aabaa | abbaa | abbab | aaaab | ababa | aabaa |
logue | armdb | utnot | incon | fiden | eeOfA | uthor | speno | rAeto | rsvoy | eebut | suite | dJuli | keeon |
baabb | abaaa | baaaa | aabba | abaaa | ababa | abbba | baaaa | abaaa | abbaa | aaaba | aabaa | abbab | aabab |
ditio | nsaso | urArg | ument | Totel | lyouf | aireB | ehold | ersth | atour | PlayL | eapes | preth | evann |
ababa | aaaaa | baaba | abaaa | abbaa | abbba | abbab | aabaa | baaba | baaab | abaaa | abbaa | baaab | aaaba |
tandf | irstl | ingso | fthos | ebroy | lesBe | ginni | ngint | hemid | dlest | artin | ghten | eeawa | yTowh |
baaaa | abaaa | aaaab | abaaa | abbaa | aabba | baaba | aabbb | aabaa | ababa | aabaa | baaba | baaba | aabaa |
atmay | bedig | ested | inaPl | ayLik | corfi | ndefa | ultdo | asyon | rplea | sures | areNo | wgood | orbad |
baaaa | baaab | baaba | abbab | aabaa | ababa | abaaa | babbb | aaaaa | aaaab | aabaa | baaba | aabbb | baaaa |
tisbu | tthee | hance | ofWar | ||||||||||
aabab | baaab | baaba | aaaaa |
The following is a simple program which reads the spreadsheet file and processes it to reveal the hidden message, exactly as documented in The Advancement of Learning. Details of the technical setup in use are given in the Colophon Page.
This kind of document (a Jupyter Notebook) shows both the source code of the program (using the Python computer language) and also the output results produced by the program.
Note that what Bacon called, “The Biliteral Cipher” is what we now call “The Binary Code”. And instead of illustrating with 1’s and 0’s (as we do currently), he used a’s and b’s.
Decoding the ‘Prologue to Troilus and Cressida’¶
notebook_filename = 'T & C Message Decode 1623_v33.ipynb'
from google.colab import drive
drive.mount('/content/drive')
import os
import csv
import pandas as pd
import shutil
import datetime
# Project Purpose:
#
# Decoding the message secretly embedded in the text of the Shakespearen play,
#'Trolious and Cressida'
# by Sir Francis Bacon, using his Biliteral Cipher (Binary Code) as described
# in his 1623 book, The Advancement of Learning.
project_name = 'T & C Prologue Decode 1623'
# Derive input and output directories:
# Root Directory for project content on Google Drive:
content_dir = '/content/drive/MyDrive'
project_dir = content_dir + '/' + project_name
data_upload_dir = project_dir + '/text data to upload - tsv/upload/'
#Input File path (1 total):
input_filename = 'v21.tsv'
data_upload_file = os.path.join(data_upload_dir, input_filename)
#Output File Directory paths (5 total):
original_text_dir = project_dir + '/original text - csv/'
biliterals_dir = project_dir + '/biliterals - csv/'
output_data_table_dir = project_dir + '/output data table - csv/'
decoded_message_dir = project_dir + '/decoded message - csv/'
notebook_dir = project_dir + '/notebook - ipynb/'
archive_dir = project_dir + '/archive - zip/'
if os.path.isfile(data_upload_file):
print(data_upload_file)
if os.path.isdir(original_text_dir):
print(original_text_dir)
if os.path.isdir(biliterals_dir):
print(biliterals_dir)
if os.path.isdir(output_data_table_dir):
print(output_data_table_dir)
if os.path.isdir(decoded_message_dir):
print(decoded_message_dir)
if os.path.isdir(notebook_dir):
print(notebook_dir)
if os.path.isdir(archive_dir):
print(archive_dir)
import datetime
now = datetime.datetime.now()
output_filename = now.strftime("%Y-%m-%d_%H-%M-%S")
#print (output_filename)
# Decode a five bit binary word into an English Alphabet letter.
# There were 22 letters in the Elizabethan English Alphabet:
# 'I' = 'J'
# 'U' = 'V'
# therefore 5 binary digits are more than enough, 2 (exp) 5 = 32
def decode_biliteral(which):
decode = {
'aaaaa': 'a',
'aaaab': 'b',
'aaaba': 'c',
'aaabb': 'd',
'aabaa': 'e',
'aabab': 'f',
'aabba': 'g',
'aabbb': 'h',
'abaaa': 'i',
'abaab': 'k',
'ababa': 'l',
'ababb': 'm',
'abbaa': 'n',
'abbab': 'o',
'abbba': 'p',
'abbbb': 'q',
'baaaa': 'r',
'baaab': 's',
'baaba': 't',
'baabb': 'v',
'babaa': 'w',
'babab': 'x',
'babba': 'y',
'babbb': 'z'
}
which_letter = decode[which]
return which_letter
# Read the input text data from the .tsv file:
print(data_upload_file)
input_data_table = pd.read_csv(data_upload_file, sep='t', header=None)
# De-interlace the original text from the book page text, and store it separately:
original_text = input_data_table.iloc[0::3, :]
ot_path = original_text_dir + output_filename + '.csv'
original_text.to_csv (ot_path, index = None, header=True)
#original_text
# De-interlace the biliterals (an 'a' or 'b' quintet) from the book page text, and store it separately:
biliterals = input_data_table.iloc[1::3, :]
blt_path = biliterals_dir + output_filename + '.csv'
biliterals.to_csv (blt_path, index = None, header=True)
#biliterals
# Make a copy of the input data frame, and write rows of decoded biliterals into it:
output_encoded_dataframe = input_data_table.copy(deep=True)
encoded_text_size = 0
original_text_letters = ''
for row in range(2,45,3):
for column in range(14):
letter = output_encoded_dataframe.loc[row - 2,column]
biliteral = output_encoded_dataframe.loc[row - 1,column]
which_letter = decode_biliteral(biliteral)
output_encoded_dataframe.loc[row,column] = which_letter
encoded_text_size += 5
original_text_letters += letter
odt_path = output_data_table_dir + output_filename + '.csv'
output_encoded_dataframe.to_csv (odt_path, index = None, header=True)
output_encoded_dataframe
decoded_message = ''
biliteral_values = ''
with open(decoded_message_dir + '.csv', 'w') as new_f:
for row in range(0,15,1):
for column in range(14):
biliteral = biliterals.iloc[row, column]
which_letter = decode_biliteral(biliteral)
decoded_message += which_letter
biliteral_values += biliteral
print('Encoded Text Size: ' + str(encoded_text_size))
print('Biliterals Text Size: ' + str (len(biliteral_values)))
print('Decoded Text Size: ' + str(len(decoded_message)))
print('n')
print('Raw Decoded Message: ' + decoded_message)
Dividing the raw decoded text string into Words using spaces:¶
francis st alban descended from the mighty heroes of troy loving and revering these noble ancestors hid in his writings homers illiads and odyssey in cipher with the aeneid of the noble virgil prince of latin poets inscribing the letters to elizabeth r
Providing basic styling to the message text:¶
Francis St. Alban,
Descended from the mighty heroes of Troy,
Loving and revering these noble ancestors,
hid in his writings
Homer’s Illiads and Odyssey, in cipher,
with the Aeneid of the noble Virgil,
Prince of Latin poets,
Inscribing the letters to:
Elizabeth, R
!jupyter nbconvert --to html '/content/drive/MyDrive/Colab Notebooks/T_&_C_Message_Decode_1623_v33.ipynb'
Finally, providing some visual styling:

Note that this exactly matches the paragraph “Deciphered Message” at the bottom of the page shown above in Friedman’s 1906 Riverbank booklet.
The Infinite Monkey Theorem

The infinite monkey theorem states that a monkey hitting keys at random on a typewriter keyboard for an infinite amount of time will almost surely type any given text, such as the complete works of William Shakespeare
What are the odds that a result like that, shown above, could have happened just by random chance? A long Wikipedia article describes a mathematical technique for quantitatively estimating this, using the The Borel–Cantelli lemma:

A bizarre echo is this: ordinarily, the Shakespearean connection is used just to point out metaphorically the absurdity of ultra-classic text being generated by random. Within this project, however, and perhaps uniquely, the applicability can be completely literal.