Googology Wiki
Googology Wiki
Googology Wiki

To everyone: I would really appreciate if you check my work and point out any errors.

In this blog post I'll construct a Rayo string that returns 65536. With minor adjustments, this constructions can also be used to show that:

Rayo(835+96n) > 2↑↑n

Rayo(714+87n) > 2↑↑n

This will be done by the following steps:

1. Writing shortcuts for several simple logical expressions in Rayo's language.

2. Constructing an expression for "x is the powerset of y".

3. Constructing an expression for "x is an ordinal".

4. Constructing an expression for "z=(x,y)" where (x,y) is the ordered pair {{x},{x,y}}.

5. Using #4 to check when two sets have a one-to-one correspondence, and to construct an expression for "x and y have the same number of elements".

6. Bringing it all together, and writing the expression for "x is an ordinal which has the same number of elements as P(P(P(2)))" One last remark before we begin: In order to keep track of the number of symbols, I will use L(X) to denote the number of symbols in the expression X. This will be needed because some of our constructions will allow the use of arbitrary expressions within them.

And now, without further ado, let us begin:

Step 1: Some Simple Logical and Set Theoretic Constructs

Ref Point Shortcut Meaning String Length Use of previous ref points
r0 (Sub(e,x,q)) The expressions e where every instance of x is replaced with q ... L(e) None
r1 (ef) if e then f (¬(e∧(¬f))) L(e)+L(f)+9 None
r2 (ef) iff e then f ((ef)∧(fe)) 2L(e)+2L(f)+21 r1
r3 ∀x(e) For all x, e is true (¬∃x((¬e)) L(e)+9 None
r(π) ∃!x(e) The exists a single x such that e is true

(∃x(e)∧((Sub(e,x,q))⇒x=q))

2L(e)+19 r0,r1
r4 xy x not equal to y x=y) 6 None
r5 xy x not a member in y xy) 6 None
r6 xy x is a subset of y z(zxzy) (3+3+9)+9=24 r1,r3


Step 2: Powersets and Defining a 65536-Element Set

Ref Point Shortcut Meaning String Length Use of previous ref points
r7 x=𝒫(y) x is the powerset of y (∀z(zxzy)) (2·3+2·24+21)+9=84 r2,r3,r6
r8 x6=2 the ordinal 2

(∃x7(∃x8(((x7∈x6∧x8∈x6)∧(¬x7=x8))))∧ (¬∃x7((x7∈x6∧∃x8(∃x9((x8∈x7∧x9∈x8)))))))

59 GWiki Rayo article
r9 (ef) e and f (not a shortcut. just a reference for length calculation) L(e)+L(f)+3 None
r10 unused
r11 x4=𝒫(2) (4 elements) (x4=𝒫(x6)∧x6=2) 84+3+59=147 r7,r8,r9
r12 x3=𝒫2(2) (16 elements) (x3=𝒫(x4)∧x4=𝒫2(1)) 84+3+147=234 r7,r9,r11
r13 x2=𝒫3(2) (65536 elements) (x2=𝒫(x3)∧x3=𝒫3(1)) 84+3+234=321 r7,r9,r12



Steps 3 and 4: Ordinals and Ordered Pairs

Ref Point Shortcut Meaning String Length Use of previous ref points
r14 (Mutex(x,y)) Niether x or y is an element of the other (x∉y∧y∉x) 6+3+6=15 r1,r3,r6
r14.1 x1On x1 is an ordinal

z((zx1⇒(zx1∧(¬∃y((yx1∧(Mutex(y,z))))))))

76 r1,r3,r6
r15 (Noelex(t,x,y)) There are no elements in t except (perhaps) x and y.

z((zxzy)⇒(zt))

((6+6+3)+6+9)+9=39 r1,r3,r4,r5,r9
r16 z=(x,y) z={{x},{x,y}} t(tz⇔(xt∧(Noelex(t,x,y)))) ((3·2+(3+39+3)·2)+21)+9=126 r2,r3,r9,r15


Step 5: One-to-one Correspondences

The most natural way to proceed here, would be to begin with defining "z is a function from x to y".

However, it turns out that the full definition of a function is not necessary here. Specifically, we do not care whether z contains elements that are not members of x×y. The only thing we will require here, is that z∩(x×y) is a function from x to y. This sounds like a cumbersome choice, but the Rayo-language definition for this idea is actually simpler then the Rayo-language definition of an ordinary function from x to y.


Ref Point Shortcut Meaning String Length Use of previous ref points
r17 xZy (x,y)∈z t((t=(x,y)∧t∈z)) 3+(126+3+3)+1=136 r9,r16
r18 (func(x,y,z)) z∩(x×y) is a function from x to y ∀t((t∈x⇒(∃!u((uytZu)))))) (5+((3+136+3)·2+19))+9+9=326 r2,r3,r-π,r9,r18
r19 (cunf(x,y,z)) z∩(x×y) is a relation whose inverse is a function from y to x ∀u((u∈y⇒(∃!t((t∈x∧tZu)))))) (5+((3+136+3)·2+19))+9+9=326 r2,r3,r-π,r9,r18
r20 (biject(x,y,z)) z∩(x×y) is a bijection from x to y ((func(x,y,z))∧(cunf(x,y,z))) 326+326+3=655 r9,r17,r19



Step 6: Defining the number 65536

Ref Point Shortcut Meaning String Length Use of previous ref points
r21 Cx=Cy x and y have the same cardinality ∃z((biject(x,y,z))) 655+4=659 r20
r22 Cx1=65536 x1 has 65536 elements (Cx1=Cx2x2=𝒫3(2)) 659+321+3=983 r9,r13,r21
r23 x1=65536 x1 is the ordinal 65536 (Cx1=65536∧x1∈On) 983+76+3=1062 r14.1,r22


And the final line means that:

Rayo(1219) > 65536

Rayo(1062) > 65536 (updated after learning Rayo's precise syntax requirements, which tend to make the strings a bit shorter)

Moreover, we can repeat the powerset step any arbitrary number of times, right after step r13. Every such step adds a "price" of another 87 symbols to our string, so we can write:

Rayo(714+87n) > 2↑↑n for all n.


Further improvements based on work by others:

1. 12AbBa spotted that the powerset definition has 3 redundant double negatives, which saves a total 12 symbols per powerset operation. This lowers the symbol count by 36 for 65536, and 12(n-1) for the general case:

Rayo(1026) > 65536

Rayo(726+75n) > 2↑↑n for all n.

2. P進大好きbot found a more compact way to describe subsets: (¬∃z((z∈x∧z∉y))). Putting that in place of r6 above, we get a reduction of 5 symbols (24 to 19) for subsets and a reduction of 10 symbols for the powerset. 12AbBa's double negatives still apply (since both expressions for subsets begin with "(¬∃")), and therefore this is a net additional reduction.

This means that we can define powersets with 62 instead of 72 symbols, and Ordinals with 71 instead of 76 symbols. The total additional reduction is therefore 10x3+5=35 for 65536, plus 10 more for every n:

Rayo(991) > 65536

Rayo(731+65n) > 2↑↑n for all n.