Isopsephical riddles in Greek Pseudo Sibylline hexameter poetry

Cumaean Sibyl

Domenichino’s Cumaean Sibyl, Musei Capitolini

Introduction

There are dozens of alphanumeric riddles in the Pseudo Sibylline books. Major part of them are simple, only referring to the first letter of the person, and the number of that letter. In Greek alphabet, letters happens to have a numerical value also. I’m calling this letter value substitution system with a name isopsephy simply because it was a name known for the Ancient Greeks. Nowadays, this literary device is maybe a bit too much mystified and known mostly by its Hebrew counterpart _gematria_. Although isopsephy was used for divination also, one should also consider it as a device used by poets and experts in different literary genres. Those people wanted to excel in the art they practiced. Isopsephy, along with the dactylic hexameter, affected to the external structure of the text. Both were concrete devices in the toolbox of the masters of the written text and rhetorics.

The most of the riddles in Sibylline Oracles are actually too simple to be solved by computer algorithms only. There are not enough parameters for processing, thus all the words meeting simple criteria are far too many for any sensical analysis. Take for example Sibyl Book I, verses 51-60:

Then a great destroyer of pious men shall come, whom seven times ten shall point out clearly. But from him a son, whom the first letter of three hundred proves, shall take the power. And after him shall be a ruler, of the initial sign of four, a life-destroyer. Then a reverend man of the number fifty. Next, succeeding him Who has the first mark of the initial sign three hundred, shall a Celtic mountaineer.

In the footnotes of “The Sibylline Oracles” by Milton S. Terry, page 41 we find that seven times ten refers to the letter O (omicron), which numerical value is 70. Ouespasianos is the person refered here, because just before the verse 51 oracle talks about the three kings Galba, Otho, and Vitelius who shortly reigned in the Roman Empire in 69AD. The next emperor in Rome was the son of the former, namely Titus, which first letter T is equal to 300 in Greek numerals. Continuation of the puzzle is made clear with the next three emperors: Domitian (_initial sign of four_ meaning simply D = 4), Nerva (_reverend man of the number fifty_, N = 50), and lastly Trajan (_initial sign three hundred_, T = 300).

Similar puzzles can be found from:

  • I : 30, 388
  • III : 28
  • V : 18, 118, 149, 253, 274, 321, 338, 351
  • VIII : 48, 88, 127, 233, 306, 321
  • XII : 21, 38, 73, 122, 313

It is interesting that we can find a solution for the ealier kingdoms and emperors in the riddles, but we have somewhat lost the context on the younger riddles from 200AD to 600AD.

From the more than 800 000 words, the words starting with any of the 24 Greek letters would yield tens of thousands of hits. I don’t have a categorization / morphology system for the words so that I could filter proper nouns. If there was a way to find out names from the words database, then task might be reasonable.

On the other hand, as we can see, most of these riddles conserning persons, cities, and Gods names can be taken as solved already. Context of the riddle is revealing a name behind the puzzle. It helps that the plot of each book is more or less chronologially structured. Sometimes names are already mentioned near by the riddle, like Rome in the [Riddle 3](#Riddle-3). In these samples it is obscure, why riddles were used in first hand. It is possible that texts were edited later to add more information, fulfil predictions, correct and manipulate the original ones to prove divine inspiration.

But then there are couple of other riddles very special in nature. They contain more information about letters, syllables, vowels, consonants, and the total value of the name or the title. One of them, the Riddle 1, is regarded as unsolved yet so far. [Riddle 2](#Riddle-2) is solved, but works as a good reference and check point for the first one. Riddle 3 is here for an example as a more difficult puzzle to solve programmically, nevertheless solved by contextual analysis.

I’ll take these three riddles under the closer investigation in this study:

Riddle 1

Sibyl Book 1 lines 137 - 146:

137 εἰμὶ δ᾿ ἔγωγε ὁ ὤν, σὺ δ᾿ ἐνί φρεσὶ σῇσι νόησον· 138 οὐρανὸν ἐνδέδυμαι, περιβέβλημαι δὲ θάλασσαν, 139 γαῖα δέ μοι στήριγμα ποδῶν, περὶ σῶμα κέχυται 140 ἀὴρ ἠδ᾿ ἄστρων με χορὸς περιδέδρομε πάντη. 141 ἐννέα γράμματ᾿ ἔχω· τετρασύλλαβός εἰμι· νόει με· 142 αἱ τρεῖς αἱ πρῶται δύο γράμματ᾿ ἔχουσιν ἑκάστη, 143 ἡ λοιπὴ δὲ τὰ λοιπὰ καί εἰσιν ἄφωνα τὰ πέντε· 144 τοῦ παντὸς δ᾿ ἀριθμοῦ ἑκατοντάδες εἰσὶ δὶς ὀκτώ 145 καὶ τρεῖς, τρὶς δεκάδες σύν γ᾿ ἑπτά. γνοὺς δὲ τίς εἰμι 146 οὐκ ἀμύητος ἔσῃ τῆς παρ᾿ ἐμοὶ σοφίης.

Translation:

And I am He who is, and in thy heart Do thou discern. I clothe me with the heaven, And cast the sea around me, and for me Earth is a footstool, and the air is poured Around my body; and on every side Around me runs the chorus of the stars. Nine letters have I; of four syllables I am; discern me. The first three have each Two letters, the remaining one the rest, And five are mates; and of the entire sum The hundreds are twice eight and thrice three tens Along with seven. Now, knowing who I am, Be thou not uninitiate in my lore.

Riddle 2

Sibyl Book 1 lines 324-402:

324 δὴ τότε καὶ μεγάλοιο θεοῦ παῖς ἀνθρώποισιν 325 ἥξει σαρκοφόρος θνητοῖς ὁμοιούμενος ἐν γῇ, 326 τέσσαρα φωνήεντα φέρων, τὸ δ᾿ ἄφωνον ἐν αὐτῷ 327 δισσόν· ἐγὼ δέ κέ τοι ἀριθμόν γ᾿ ὅλον ἐξονομήνω· 328 ὀκτὼ γὰρ μονάδας, τόσσας δεκάδας δ᾿ ἐπὶ ταύταις 329 ἠδ᾿ ἑκατοντάδας ὀκτὼ ἀπιστοκόροις ἀνθρώποις 330 οὔνομα δηλώσει· σὺ δ᾿ ἐνὶ φρεσὶ σῇσι νόησον 331 ἀθανάτοιο θεοῦ Χριστὸν παῖδ᾿ ὑψίστοιο.

Translation:

Then also shall a child of the great God Come, clothed in flesh, to men, and fashioned like To mortals in the earth; and he doth hear Four vowels, and two consonants in him Are twice announced; the whole sum I will name: For eight ones, and as many tens on these, And yet eight hundred will reveal the name To men insatiate; and do thou discern In thine own understanding that the Christ Is child of the immortal God most high.

Riddle 3

Sibyl Book 8 lines 143-150:

143 ὤλετο γὰρ Ῥώμης ἀρχὴ τότε τηλεθόωσα, 144 ἀρχαίη πολέεσσι περικτιόνεσσιν ἄνασσα. 145 οὐκέτι νικήσειε πέδον Ῥώμης ἐριθήλου, 146 ὁππόταν ἐξ Ἀσίης κρατέων ἔλθῃ σὺν Ἄρηι. 147 ταῦτα δὲ πάντ᾿ ἔρξας ἥξει κρηπισθὲν ἐς ἄστυ. 148 τρὶς δὲ τριηκοσίους καὶ τεσσαράκοντα καὶ ὀκτώ 149 πληρώσεις λυκάβαντας, ὅταν σοι δύσμορος ἥξῃ 150 μοῖρα βιαζομένη τεὸν οὔνομα πληρώσασα.

Translation:

For Rome’s power perished then while in its bloom an ancient queen with cities dwelling round. No longer shall the land of fertile Rome prevail, when out of Asia one shall come to rule with Ares. And when he has wrought all these things, to the city afterwards shall he come. And three times three hundred and eight and forty shalt thou make complete, when, taking thee by force, an ill-starred fate shall come upon thee and complete thy name.

## Using Greek Text Corpora

I have used the next notebook to prepare the Greek text corpora and unique words database for the solver: [Processing Greek corpora for the isopsehical riddle solver.ipynb](Processing Greek corpora for the isopsehical riddle solver.ipynb). You need to run it once or have unique words csv file in the same directory than this notebook if you wish to run cells interactively.

Setup of the system I’m using is:

`python import sys sys.version `

‘3.5.4 | Continuum Analytics, Inc.| (default, Aug 14 2017, 13:41:13) [MSC v.1900 64 bit (AMD64)]’

Confirm unique words database is available and get the size of it:

```python from functions import get_file_size, csv_file_name

print(“Size of the unique words database: %s MB” % get_file_size(csv_file_name)) ```

Size of the unique words database: 57.14 MB

## Import database

Using Pandas library I will read and import csv file that contains all preprocessed unique greek words collected earlier. Constructed Pandas DataFrame is a nice data container to handle tabular data.

```python # read unique words stats if available try:

from pandas import read_csv df = read_csv(csv_file_name, header = None) # convert data types for columns. 0 = word # 1: how many times word occurs in texts df[1] = df[1].apply(lambda x: int(x)) # 2: percentage of all words df[2] = df[2].apply(lambda x: float(x)) # 3: how many characters in the word df[3] = df[3].apply(lambda x: int(x)) # 4: isopsephical value of the word df[4] = df[4].apply(lambda x: int(x)) # 5: word split to syllables df[5] = df[5].apply(lambda x: str(x).replace(“’”, “”).replace(“[“, “”).replace(“]”, “”).split(“, “)) # 6: how many syllables df[6] = df[6].apply(lambda x: int(x))
except Exception as e:
print(e) print(“Could not find unique words database. Please follow the procedure explained in: Processing Greek corpora for the isopsehical riddle solver.ipynb”)

```

To confirm succesful import I will show the first 20 most common words:

`python print("Total records: %s" % len(df)) # get the most repeated words by sort asc, head 20 df.sort_values(1, ascending=False).head(n=20) `

Total records: 826516
| 0 | 1 | 2 | 3 | 4 | 5 | 6 |
— | — | — | — | — | — | — | — |
38 | ΚΑΙ | 3332509 | 45.51 | 3 | 31 | [ΚΑΙ] | 1 |
25 | ΔΕ | 1355091 | 18.51 | 2 | 9 | [ΔΕ] | 1 |
309 | ΤΟ | 1297764 | 17.72 | 2 | 370 | [ΤΟ] | 1 |
46 | ΤΟΥ | 933432 | 12.75 | 3 | 770 | [ΤΟΥ] | 1 |
2 | ΤΩΝ | 918946 | 12.55 | 3 | 1150 | [ΤΩΝ] | 1 |

## Solve the riddles

### Riddle 1

Nine letters have I; of four syllables I am; discern me. The first three have each two letters, the remaining one the rest, and five are mates; and of the entire sum the hundreds are twice eight and thrice three tens along with seven.

Using the next parameters from the riddle, lets try to solve it by the brute computational force:

  • knowing the length of the word: 9
  • knowing other details of the syllables of the word
  • knowing the count of the consonants of the word: 5
  • knowing the isopsephical value: 1697
  • comparing the context of the result

#### Isopsephy and letter count filter

I will apply filters to the words database step by step narrowing the result.

So lets see first, how many words there are with the isopsephical value 1697 and letters counting nine?

```python from functions import HTML

# make a copy of the database to keep original safe a = df.copy() # filter by isopsephical value a = a[a[4] == 1697] # filter by word length a = a[a[3] == 9]

print(“Total records: %s” % len(a)) HTML(a.to_html(index=False)) ```

Total records: 15
0 | 1 | 2 | 3 | 4 | 5 | 6 |
— | — | — | — | — | — | — |
ΑΜΦΕΚΑΛΥΨ | 1 | 0.0 | 9 | 1697 | [ΑΜ, ΦΕ, ΚΑ, ΛΥΨ] | 4 |
ΑΛΕΙΦΑΤΩΝ | 2 | 0.0 | 9 | 1697 | [Α, ΛΕΙ, ΦΑ, ΤΩΝ] | 4 |
ΒΕΛΤΙΣΤΩΝ | 66 | 0.0 | 9 | 1697 | [ΒΕΛ, ΤΙ, ΣΤΩΝ] | 3 |
ΑΦΕΛΩΝΤΑΙ | 20 | 0.0 | 9 | 1697 | [Α, ΦΕ, ΛΩΝ, ΤΑΙ] | 4 |
ΠΑΡΑΧΩΡΕΙ | 130 | 0.0 | 9 | 1697 | [ΠΑ, ΡΑ, ΧΩ, ΡΕΙ] | 4 |
ΚΥΒΕΥΣΟΥΣ | 1 | 0.0 | 9 | 1697 | [ΚΥ, ΒΕΥ, ΣΟΥΣ] | 3 |
ΛΙΒΥΣΣΕΩΝ | 2 | 0.0 | 9 | 1697 | [ΛΙ, ΒΥΣ, ΣΕ, ΩΝ] | 4 |
ΙΣΤΟΡΗΣΘΩ | 9 | 0.0 | 9 | 1697 | [Ι, ΣΤΟ, ΡΗ, ΣΘΩ] | 4 |
ΣΥΝΩΚΙΣΘΗ | 19 | 0.0 | 9 | 1697 | [ΣΥ, ΝΩ, ΚΙ, ΣΘΗ] | 4 |
ΠΛΗΡΟΥΣΘΩ | 7 | 0.0 | 9 | 1697 | [ΠΛΗ, ΡΟΥ, ΣΘΩ] | 3 |
ΕΚΑΑΤΟΣΤΩ | 3 | 0.0 | 9 | 1697 | [Ε, ΚΑ, Α, ΤΟ, ΣΤΩ] | 5 |
ΛΗΛΥΘΟΤΩΝ | 3 | 0.0 | 9 | 1697 | [ΛΗ, ΛΥ, ΘΟ, ΤΩΝ] | 4 |
ΑΝΑΝΨΩΜΕΝ | 4 | 0.0 | 9 | 1697 | [Α, ΝΑΝ, ΨΩ, ΜΕΝ] | 4 |
ΑΛΕΦΩΝΤΑΙ | 2 | 0.0 | 9 | 1697 | [Α, ΛΕ, ΦΩΝ, ΤΑΙ] | 4 |
ΣΤΕΝΩΜΑΤΑ | 8 | 0.0 | 9 | 1697 | [ΣΤΕ, ΝΩ, ΜΑ, ΤΑ] | 4 |

It turns out that there are just very few words meeting the criteria of the riddle. I could already make the analysis of the words manually. But to make everything reusable for later usage, I will set up filter procedure for other criteria too.

Before that, I will however add one extension to the original search and allow the count of the letters to be between 8 and 10. That is due to double consonant and long / short vowelspecialty of the Greek language. Let’s see the result of this filter variation:

```python b = df.copy() b = b[b[4] == 1697] b = b[b[6] == 4] b = b[b[3] > 7] b = b[b[3] < 11]

print(“Total records: %s” % len(b)) HTML(b.sort_values(3, ascending=False).to_html(index=False)) ```

Total records: 31
0 | 1 | 2 | 3 | 4 | 5 | 6 |
— | — | — | — | — | — | — |
ΚΑΤΑΣΧΕΤΟΣ | 17 | 0.0 | 10 | 1697 | [ΚΑ, ΤΑ, ΣΧΕ, ΤΟΣ] | 4 |
ΝΕΒΡΟΦΟΝΩΝ | 1 | 0.0 | 10 | 1697 | [ΝΕ, ΒΡΟ, ΦΟ, ΝΩΝ] | 4 |
ΑΝΕΣΤΛΩΤΑΙ | 3 | 0.0 | 10 | 1697 | [Α, ΝΕΣΤ, ΛΩ, ΤΑΙ] | 4 |
ΕΜΦΥΣΣΑΝΤΑ | 9 | 0.0 | 10 | 1697 | [ΕΜ, ΦΥΣ, ΣΑΝ, ΤΑ] | 4 |
ΑΚΑΤΣΧΕΤΟΣ | 27 | 0.0 | 10 | 1697 | [Α, ΚΑΤ, ΣΧΕ, ΤΟΣ] | 4 |
ΕΠΤΑΠΛΑΣΩΣ | 18 | 0.0 | 10 | 1697 | [Ε, ΠΤΑ, ΠΛΑ, ΣΩΣ] | 4 |
ΠΑΡΑΙΤΣΕΩΣ | 25 | 0.0 | 10 | 1697 | [ΠΑ, ΡΑΙΤ, ΣΕ, ΩΣ] | 4 |
ΕΥΗΘΕΣΤΤΟΥ | 4 | 0.0 | 10 | 1697 | [ΕΥ, Η, ΘΕΣΤ, ΤΟΥ] | 4 |
ΥΦΙΖΝΟΥΣΙΝ | 3 | 0.0 | 10 | 1697 | [Υ, ΦΙΖ, ΝΟΥ, ΣΙΝ] | 4 |
ΚΑΤΑΨΥΞΕΙΣ | 9 | 0.0 | 10 | 1697 | [ΚΑ, ΤΑ, ΨΥ, ΞΕΙΣ] | 4 |
ΠΑΡΕΣΤΩΣΑΙ | 2 | 0.0 | 10 | 1697 | [ΠΑ, ΡΕ, ΣΤΩ, ΣΑΙ] | 4 |
ΔΙΕΣΤΗΚΤΩΝ | 92 | 0.0 | 10 | 1697 | [ΔΙ, Ε, ΣΤΗ, ΚΤΩΝ] | 4 |
ΠΑΧΥΤΕΡΑΙΣ | 8 | 0.0 | 10 | 1697 | [ΠΑ, ΧΥ, ΤΕ, ΡΑΙΣ] | 4 |
ΡΑΒΔΟΦΟΡΩΝ | 3 | 0.0 | 10 | 1697 | [ΡΑ, ΒΔΟ, ΦΟ, ΡΩΝ] | 4 |
ΛΙΒΥΣΣΕΩΝ | 2 | 0.0 | 9 | 1697 | [ΛΙ, ΒΥΣ, ΣΕ, ΩΝ] | 4 |
ΣΤΕΝΩΜΑΤΑ | 8 | 0.0 | 9 | 1697 | [ΣΤΕ, ΝΩ, ΜΑ, ΤΑ] | 4 |
ΑΛΕΦΩΝΤΑΙ | 2 | 0.0 | 9 | 1697 | [Α, ΛΕ, ΦΩΝ, ΤΑΙ] | 4 |
ΑΝΑΝΨΩΜΕΝ | 4 | 0.0 | 9 | 1697 | [Α, ΝΑΝ, ΨΩ, ΜΕΝ] | 4 |
ΛΗΛΥΘΟΤΩΝ | 3 | 0.0 | 9 | 1697 | [ΛΗ, ΛΥ, ΘΟ, ΤΩΝ] | 4 |
ΑΛΕΙΦΑΤΩΝ | 2 | 0.0 | 9 | 1697 | [Α, ΛΕΙ, ΦΑ, ΤΩΝ] | 4 |
ΑΦΕΛΩΝΤΑΙ | 20 | 0.0 | 9 | 1697 | [Α, ΦΕ, ΛΩΝ, ΤΑΙ] | 4 |
ΙΣΤΟΡΗΣΘΩ | 9 | 0.0 | 9 | 1697 | [Ι, ΣΤΟ, ΡΗ, ΣΘΩ] | 4 |
ΑΜΦΕΚΑΛΥΨ | 1 | 0.0 | 9 | 1697 | [ΑΜ, ΦΕ, ΚΑ, ΛΥΨ] | 4 |
ΣΥΝΩΚΙΣΘΗ | 19 | 0.0 | 9 | 1697 | [ΣΥ, ΝΩ, ΚΙ, ΣΘΗ] | 4 |
ΠΑΡΑΧΩΡΕΙ | 130 | 0.0 | 9 | 1697 | [ΠΑ, ΡΑ, ΧΩ, ΡΕΙ] | 4 |
ΧΩΣΑΜΕΝΑ | 1 | 0.0 | 8 | 1697 | [ΧΩ, ΣΑ, ΜΕ, ΝΑ] | 4 |
ΑΝΕΜΦΑΤΩ | 1 | 0.0 | 8 | 1697 | [Α, ΝΕΜ, ΦΑ, ΤΩ] | 4 |
ΦΟΒΗΘΗΤΩ | 5 | 0.0 | 8 | 1697 | [ΦΟ, ΒΗ, ΘΗ, ΤΩ] | 4 |
ΗΝΩΧΛΗΣΑ | 1 | 0.0 | 8 | 1697 | [Η, ΝΩ, ΧΛΗ, ΣΑ] | 4 |
ΠΥΡΕΤΩΔΗ | 6 | 0.0 | 8 | 1697 | [ΠΥ, ΡΕ, ΤΩ, ΔΗ] | 4 |
ΦΩΤΟΕΙΔΗ | 28 | 0.0 | 8 | 1697 | [ΦΩ, ΤΟ, ΕΙ, ΔΗ] | 4 |

But this was just for the experiment. I will stick on the more strict parameters in the following riddle solver.

#### Custom syllable filter

There is still two other criterias for the word filter. One of them is a bit more complicated. Poem says that there are two letters in the first three syllables. And the rest of the letters, that is three, are in the last syllable. I don’t need to specify the last syllable letter count because I already limit total letter count to nine. If the first three syllables contain two letters, that is six in total, then the last must have the rest of the three letters.

The fifth column has appropriate syllable information that I can use for this kind of filter. Let’s see the result with this and all the previous filters:

```python c = df.copy() c = c[c[4] == 1697] c = c[c[6] == 4] c = c[c[3] == 9] # the first three of the syllable contain two letters, the last one the rest i.e. three. c = c[c.apply(lambda x: len(x[5][0]) == 2 and len(x[5][1]) == 2 and len(x[5][2]) == 2, axis=1)]

print(“Total records: %s” % len(c)) HTML(c.sort_values(0).to_html(index=False)) ```

Total records: 4
0 | 1 | 2 | 3 | 4 | 5 | 6 |
— | — | — | — | — | — | — |
ΑΜΦΕΚΑΛΥΨ | 1 | 0.0 | 9 | 1697 | [ΑΜ, ΦΕ, ΚΑ, ΛΥΨ] | 4 |
ΛΗΛΥΘΟΤΩΝ | 3 | 0.0 | 9 | 1697 | [ΛΗ, ΛΥ, ΘΟ, ΤΩΝ] | 4 |
ΠΑΡΑΧΩΡΕΙ | 130 | 0.0 | 9 | 1697 | [ΠΑ, ΡΑ, ΧΩ, ΡΕΙ] | 4 |
ΣΥΝΩΚΙΣΘΗ | 19 | 0.0 | 9 | 1697 | [ΣΥ, ΝΩ, ΚΙ, ΣΘΗ] | 4 |

That is a pretty narrow result already, just handful items to analyse.

#### Consonant filter

Finally there is the rule of five consonants (mutes/males) in the word in the original riddle. That requires defining the consonants list and checking that the total count of the consonants is exactly five, no more, no less. I will do an exercise to filter all words having 4 syllables and 5 consonants.

```python d = df.copy() d = d[d[4] == 1697] d = d[d[6] == 4] d = d[d[3] == 9] d = d[d.apply(lambda x: sum(list(x[0].count(c) for c in “ΨΖΞΒΦΧΘΓΔΜΛΚΠΡΣΤ”)) == 5, axis=1)]

print(“Total records: %s” % len(d)) HTML(d.sort_values(0).to_html(index=False)) ```

Total records: 2
0 | 1 | 2 | 3 | 4 | 5 | 6 |
— | — | — | — | — | — | — |
ΑΜΦΕΚΑΛΥΨ | 1 | 0.0 | 9 | 1697 | [ΑΜ, ΦΕ, ΚΑ, ΛΥΨ] | 4 |
ΙΣΤΟΡΗΣΘΩ | 9 | 0.0 | 9 | 1697 | [Ι, ΣΤΟ, ΡΗ, ΣΘΩ] | 4 |

Let’s refactor all of this and the previous ones to the single callable function with reusable sub functions and apply it to dataframe

```python # the word should have n mutes ie consonants consonants = “ΨΖΞΒΦΧΘΓΔΜΛΚΠΡΣΤΝϹϚϠϞ” def nmutes(x, n):

word, tot = x[0], 0 for c in consonants:

tot += word.count(c) if tot > n:

return False

return tot == n

# the word should have n vowels vowels = “ϒΩΗΥΕΙΟΑ” def nvowels(x, n):

word, tot = x[0], 0 for c in vowels:

tot += word.count(c) if tot > n:

return False

return tot == n

# the word should have n syllables def nsyllables(x, n):

return x[6] == n

# the word should have two letters in the first three syllables, and the rest (3) letters in the last def has_two_letters_in_first_three_syllables(x):

return len(x[5][0]) == 2 and len(x[5][1]) == 2 and len(x[5][2]) == 2

# this makes n letters in total def nletters(x, n):

return x[3] == n

# isopsephical value def nisopsephy(x, n):

return x[4] > n[0] and x[4] < n[1] if type(n) is list else x[4] == n

# riddle 1 wrapper function def riddle1(x, isopsephy, letters = 9, mutes = 5, syllables = 4):

return nisopsephy(x, isopsephy) and nsyllables(x, syllables) and
nletters(x, letters) and nmutes(x, mutes) and has_two_letters_in_first_three_syllables(x)

```

`python # solve the riddle 1a e = df.copy() e = e[e.apply(lambda x: riddle1(x, 1697), axis=1)] HTML(e.to_html(index=False)) `

0 | 1 | 2 | 3 | 4 | 5 | 6 |
— | — | — | — | — | — | — |
ΑΜΦΕΚΑΛΥΨ | 1 | 0.0 | 9 | 1697 | [ΑΜ, ΦΕ, ΚΑ, ΛΥΨ] | 4 |
ΣΥΝΩΚΙΣΘΗ | 19 | 0.0 | 9 | 1697 | [ΣΥ, ΝΩ, ΚΙ, ΣΘΗ] | 4 |
ΛΗΛΥΘΟΤΩΝ | 3 | 0.0 | 9 | 1697 | [ΛΗ, ΛΥ, ΘΟ, ΤΩΝ] | 4 |

Thus we have found three good matches for the riddle: ΑΜΦΕΚΑΛΥΨ, ΣΥΝΩΚΙΣΘΗ, and ΛΗΛΥΘΟΤΩΝ. From these, the word especially interesting is:

# ΑΜΦΕΚΑΛΥΨ

(amphekalyps / amfecalyps) meaning “covering from both sides” or “all around covering”.

Next we should make some text and linquistic examination, how well these proposed words fits to the immediate context of the sibylline verses. Where are the exact occurrences of the word in the Greek corpora, in which context? Is it a word suitable for an epithet, does it have any religious spiritual significance, and so forth. These questions I will leave for the [further study](Study of the results of the isopsephical riddle solver.ipynb) of the words.

From the references of the riddle in the ancient greek and latin texts, there are some other interpretations of the isopsephic value given in the text. Instead of reading it 1697, it could be 1696, 1692, 1937, 1496, or even 506. Having factored procedure in a function, that takes isopsephic value as a parameter, I can make searches altering the value and see the results for comparison and inspection.

#### Variation 1696

```python # solve the riddle 1b f = df.copy() f = f[f.apply(lambda x: riddle1(x, 1696), axis=1)]

print(“Total records: %s” % len(f)) HTML(f.sort_values(0).to_html(index=False)) ```

Total records: 5
0 | 1 | 2 | 3 | 4 | 5 | 6 |
— | — | — | — | — | — | — |
ΑΜΠΕΧΟΝΩΝ | 3 | 0.0 | 9 | 1696 | [ΑΜ, ΠΕ, ΧΟ, ΝΩΝ] | 4 |
ΔΥΝΑΜΩΣΑΣ | 4 | 0.0 | 9 | 1696 | [ΔΥ, ΝΑ, ΜΩ, ΣΑΣ] | 4 |
ΚΑΤΕΡΥΚΩΝ | 1 | 0.0 | 9 | 1696 | [ΚΑ, ΤΕ, ΡΥ, ΚΩΝ] | 4 |
ΚΕΝΟΦΩΝΑΣ | 47 | 0.0 | 9 | 1696 | [ΚΕ, ΝΟ, ΦΩ, ΝΑΣ] | 4 |
ΠΕΡΙΧΑΝΩΝ | 7 | 0.0 | 9 | 1696 | [ΠΕ, ΡΙ, ΧΑ, ΝΩΝ] | 4 |

#### Variation 1692

```python # solve the riddle 1b f = df.copy() f = f[f.apply(lambda x: riddle1(x, 1692), axis=1)]

print(“Total records: %s” % len(f)) HTML(f.sort_values(0).to_html(index=False)) ```

Total records: 4
0 | 1 | 2 | 3 | 4 | 5 | 6 |
— | — | — | — | — | — | — |
ΑΝΤΩΝΥΜΑΝ | 22 | 0.0 | 9 | 1692 | [ΑΝ, ΤΩ, ΝΥ, ΜΑΝ] | 4 |
ΚΑΤΑΨΥΞΙΣ | 22 | 0.0 | 9 | 1692 | [ΚΑ, ΤΑ, ΨΥ, ΞΙΣ] | 4 |
ΠΑΡΩΞΥΝΑΣ | 9 | 0.0 | 9 | 1692 | [ΠΑ, ΡΩ, ΞΥ, ΝΑΣ] | 4 |
ΠΟΛΥΔΩΡΗΣ | 4 | 0.0 | 9 | 1692 | [ΠΟ, ΛΥ, ΔΩ, ΡΗΣ] | 4 |

#### Variation 1937

```python # solve the riddle 1b f = df.copy() f = f[f.apply(lambda x: riddle1(x, 1937), axis=1)]

print(“Total records: %s” % len(f)) HTML(f.sort_values(0).to_html(index=False)) ```

Total records: 1
0 | 1 | 2 | 3 | 4 | 5 | 6 |
— | — | — | — | — | — | — |
ΔΗΛΩΣΩΜΕΝ | 1 | 0.0 | 9 | 1937 | [ΔΗ, ΛΩ, ΣΩ, ΜΕΝ] | 4 |

#### Variation 1496

```python # solve the riddle 1c f = df.copy() f = f[f.apply(lambda x: riddle1(x, 1496), axis=1)]

print(“Total records: %s” % len(f)) HTML(f.sort_values(0).to_html(index=False)) ```

Total records: 10
0 | 1 | 2 | 3 | 4 | 5 | 6 |
— | — | — | — | — | — | — |
ΑΜΤΕΛΩΝΟΣ | 4 | 0.0 | 9 | 1496 | [ΑΜ, ΤΕ, ΛΩ, ΝΟΣ] | 4 |
ΚΕΚΩΛΥΚΑΣ | 9 | 0.0 | 9 | 1496 | [ΚΕ, ΚΩ, ΛΥ, ΚΑΣ] | 4 |
ΠΑΡΩΤΙΔΑΣ | 17 | 0.0 | 9 | 1496 | [ΠΑ, ΡΩ, ΤΙ, ΔΑΣ] | 4 |
ΠΕΝΙΩΝΤΑΣ | 3 | 0.0 | 9 | 1496 | [ΠΕ, ΝΙ, ΩΝ, ΤΑΣ] | 4 |
ΠΙΝΕΤΩΣΑΝ | 17 | 0.0 | 9 | 1496 | [ΠΙ, ΝΕ, ΤΩ, ΣΑΝ] | 4 |
ΣΥΝΕΚΟΨΑΝ | 4 | 0.0 | 9 | 1496 | [ΣΥ, ΝΕ, ΚΟ, ΨΑΝ] | 4 |
ΣΩΡΗΤΙΚΗΝ | 2 | 0.0 | 9 | 1496 | [ΣΩ, ΡΗ, ΤΙ, ΚΗΝ] | 4 |
ΤΑΠΕΝΩΣΙΝ | 108 | 0.0 | 9 | 1496 | [ΤΑ, ΠΕ, ΝΩ, ΣΙΝ] | 4 |
ΤΕΛΑΜΩΝΟΣ | 175 | 0.0 | 9 | 1496 | [ΤΕ, ΛΑ, ΜΩ, ΝΟΣ] | 4 |
ΦΑΛΑΡΙΔΩΝ | 1 | 0.0 | 9 | 1496 | [ΦΑ, ΛΑ, ΡΙ, ΔΩΝ] | 4 |

#### Variation 506

```python # solve the riddle 1b f = df.copy() f = f[f.apply(lambda x: riddle1(x, 506), axis=1)]

print(“Total records: %s” % len(f)) HTML(f.sort_values(0).to_html(index=False)) ```

Total records: 9
0 | 1 | 2 | 3 | 4 | 5 | 6 |
— | — | — | — | — | — | — |
ΑΝΤΕΛΕΞΕΝ | 2 | 0.00 | 9 | 506 | [ΑΝ, ΤΕ, ΛΕ, ΞΕΝ] | 4 |
ΑΡΣΕΝΙΚΟΝ | 528 | 0.01 | 9 | 506 | [ΑΡ, ΣΕ, ΝΙ, ΚΟΝ] | 4 |
ΑΡΤΙΓΑΛΑΞ | 3 | 0.00 | 9 | 506 | [ΑΡ, ΤΙ, ΓΑ, ΛΑΞ] | 4 |
ΕΓΓΙΖΟΣΗΣ | 9 | 0.00 | 9 | 506 | [ΕΓ, ΓΙ, ΖΟ, ΣΗΣ] | 4 |
ΕΓΓΥΘΗΚΗΝ | 1 | 0.00 | 9 | 506 | [ΕΓ, ΓΥ, ΘΗ, ΚΗΝ] | 4 |
ΘΗΡΑΤΙΚΗΝ | 2 | 0.00 | 9 | 506 | [ΘΗ, ΡΑ, ΤΙ, ΚΗΝ] | 4 |
ΜΕΤΑΒΟΛΗΝ | 2557 | 0.03 | 9 | 506 | [ΜΕ, ΤΑ, ΒΟ, ΛΗΝ] | 4 |
ΠΕΠΗΓΟΣΙΝ | 1 | 0.00 | 9 | 506 | [ΠΕ, ΠΗ, ΓΟ, ΣΙΝ] | 4 |
ΠΙΝΟΜΕΝΑΣ | 4 | 0.00 | 9 | 506 | [ΠΙ, ΝΟ, ΜΕ, ΝΑΣ] | 4 |

### Riddle 2

And he doth hear four vowels, and two consonants in him are twice announced; the whole sum I will name: for eight ones, and as many tens on these, and yet eight hundred will reveal the name to men insatiate;

The solution of this riddle has been known for isopsephists from the early centuries of Christian fathers. Iraneus and Hippothylus (see “The Greek Qabalah: Alphabetical Mysticism and Numerology in the Ancient World” by Kieren Barry, page 138) commented about the Marcusian Ogdoad (888), former Father with a very colourful language in a [heated word war](https://chs.harvard.edu/CHS/article/display/6308) between gnostic and orthodox theology. It was known that the number 888 referred to ΙΗΣΟΥΣ (Jesus).

So what I’m doing here is to check how well does the programmical approach to solving this type of riddle really work:

```python # riddle 2 wrapper function def riddle2a(x, isopsephy, mutes = 2, vowels = 4):

return nisopsephy(x, isopsephy) and
nletters(x, mutes+vowels) and nvowels(x, vowels) and nmutes(x, mutes)

# solve the riddle 2a h = df.copy() h = h[h.apply(lambda x: riddle2a(x, 888), axis=1)]

print(“Total records: %s” % len(h)) HTML(h.sort_values(0).to_html(index=False)) ```

Total records: 6
0 | 1 | 2 | 3 | 4 | 5 | 6 |
— | — | — | — | — | — | — |
ΑΞΙΩΘΗ | 18 | 0.00 | 6 | 888 | [Α, ΞΙ, Ω, ΘΗ] | 4 |
ΙΗΣΟΥΣ | 6128 | 0.08 | 6 | 888 | [Ι, Η, ΣΟΥΣ] | 3 |
ΙΗΤΡΟΥ | 80 | 0.00 | 6 | 888 | [Ι, Η, ΤΡΟΥ] | 3 |
ΙΟΥΣΗΣ | 57 | 0.00 | 6 | 888 | [Ι, ΟΥ, ΣΗΣ] | 3 |
ΟΥΣΙΗΣ | 3 | 0.00 | 6 | 888 | [ΟΥ, ΣΙ, ΗΣ] | 3 |
ΤΗΡΙΟΥ | 11 | 0.00 | 6 | 888 | [ΤΗ, ΡΙ, ΟΥ] | 3 |

__The Number of the Beast__

I can’t resist of using this solver for the most well known riddle, the infamous Number of the Beast, 666. It is just a matter of a parameter that we can put on the riddle solver and see, how many Greek word candidates there are. Worth of noting is, that in the original puzzle, where the wisdom and ability to calculate is asked, only the isopsephic value is given and that it should be the name of a human (or man in general). Revelation 13:18 (Textus Receptus):

<blockquote> ωδε η σοφια εστιν ο εχων τον νουν ψηφισατω τον αριθμον του θηριου αριθμος γαρ ανθρωπου εστιν και ο αριθμος αυτου χξς </blockquote>

Translation (King James, 1611):

<blockquote> Here is wisdom. Let him that hath understanding count the number of the beast: for it is the number of a man; and his number is Six hundred threescore and six. </blockquote>

```python # riddle 2b wrapper function def riddle2b(x, isopsephy, letters = 0):

return nisopsephy(x, isopsephy) and (nletters(x, letters) if letters else True)

# solve the riddle 2b i = df.copy() i = i[i.apply(lambda x: riddle2b(x, 666), axis=1)]

print(“Total records: %s” % len(i)) HTML(i.sort_values(0).to_html(index=False)) ```

Total records: 592
0 | 1 | 2 | 3 | 4 | 5 | 6 |
— | — | — | — | — | — | — |
ΑΒΔΗΡΙΤΙΚΑΙΣ | 2 | 0.00 | 12 | 666 | [Α, ΒΔΗ, ΡΙ, ΤΙ, ΚΑΙΣ] | 5 |
ΑΓΝΤΑΤΑΙ | 3 | 0.00 | 8 | 666 | [ΑΓΝ, ΤΑ, ΤΑΙ] | 3 |
ΑΔΜΑΝΤΟΣ | 78 | 0.00 | 8 | 666 | [ΑΔ, ΜΑΝ, ΤΟΣ] | 3 |

Apparent problem is there are too many results for easy examination. On the other hand, one can pick up interesting words from the list nevertheless like: ΑΡΣΕΝΙΚΟΙΣ, ΙΑΠΕΤΟΣ, ΛΑΤΕΙΝΟΣ, and ΤΕΙΤΑΝ of cource.

In some old papyrus and texts of early Christian fathers we find that χξς is written as 616 rather than 666. So we could see, what are the words meeting this value:

```python # solve the riddle 2c i = df.copy() i = i[i.apply(lambda x: riddle2b(x, 616), axis=1)]

print(“Total records: %s” % len(i)) ```

Total records: 611

611 words to analyze!

### Riddle 3

And three times three hundred and eight and forty shalt thou make complete.

This is also an example what happens if there are not enough parameters for the filter algorithm. In the original riddle it is interesting that the name Rome is already mentioned before and after the isopsephical hint. This might be a useful notice however, if the riddle maker didn’t want to make puzzle too hard to solve, but gave enough clues for the problem in a very near by context.

```python # riddle 3 wrapper function def riddle3(x, isopsephy):

return nisopsephy(x, isopsephy)

# solve the riddle 3a j = df.copy() j = j[j.apply(lambda x: riddle3(x, 948), axis=1)]

print(“Total records: %s” % len(j)) ```

Total records: 495

`python HTML(j.sort_values(3).head(6).to_html(index=False)) `

0 | 1 | 2 | 3 | 4 | 5 | 6 |
— | — | — | — | — | — | — |
ΡΗΜΩ | 2 | 0.00 | 4 | 948 | [ΡΗ, ΜΩ] | 2 |
ΜΗΡΩ | 296 | 0.00 | 4 | 948 | [ΜΗ, ΡΩ] | 2 |
ΩΡΜΗ | 13 | 0.00 | 4 | 948 | [ΩΡ, ΜΗ] | 2 |
ΗΜΡΩ | 31 | 0.00 | 4 | 948 | [ΗΜ, ΡΩ] | 2 |
ΡΩΜΗ | 1891 | 0.03 | 4 | 948 | [ΡΩ, ΜΗ] | 2 |
ΜΩΡΗ | 9 | 0.00 | 4 | 948 | [ΜΩ, ΡΗ] | 2 |

Thus, the word for Rome ΡΩΜΗ meets the criteria of being having isopsephic value 948. It is repeated 1891 times in the Greek corpora but would have been very difficult to spot from the 495 different words if we didn’t know what to search for.