FRACTRAN
A Simple Universal Programming Language
for Arithmetic Jens Bossaert PRIME, 24 november 2015
Definitie 2
Een FRACTRAN-programma (F , n) bestaat uit:
I een eindige lijst F = (fi)i van positieve breuken;
I een natuurlijk getal n als invoerwaarde.
Het programma loopt door n herhaaldelijk als volgt te updaten:( n 7! n · fj met j = min{i : n · fi 2 N};
return n indien j niet bestaat (8i : n · fi 62 N).
Zo definieert (F , ·) een parti¨ele functie N ! N.
Basisprogramma’s 3
Optelling F =
✓3 2
◆
2a· 3b 7! · · · 7! 3a+b
A�rekking F =
✓1 6
◆
2a· 3b 7! · · · 7! 3b a (voor a < b)
Basisprogramma’s 4
Minimum F =
✓5 6,1
2,1 3
◆
2a· 3b 7! · · · 7! 5min(a,b)
Maximum F =
✓5 6,5
2,5 3
◆
2a· 3b 7! · · · 7! 5max(a,b)
Basisprogramma’s 5
Verdubbeling F =
✓9 2
◆
2a 7! · · · 7! 32a
Halvering F =
✓3 4,1
2
◆
2a 7! · · · 7! 3ba/2c
Ingewikkeldere programma’s 6
Vermenigvuldiging F =
✓455 33,11
13, 1 11,3
7,1 2,1
3
◆
2a· 3b 7! · · · 7! 5a·b
huidige
toestand indicator condities acties volgende toestand
A (default)
v7 > 0 v7 1
v3 + 1 A !3
7
v7 = 0
v2 > 0 v2 1 B !1
2
v7 = 0 v2 = 0 v3 > 0
v3 1 A !1
3
v7 = 0 v2 = 0 v3 = 0
HALT
B v11, v13 v3 > 0
v3 1 v5 + 1 v7 + 1
B !5 · 7 · 13
3 · 11 ,11 13
v3 = 0 / A ! 1
11
Ingewikkeldere programma’s 8
Deling (met rest) F =
✓91 66,11
13, 1 33,85
11, 57 119,17
19,11 17,1
3
◆
2a· 3b· 11 7! · · · 7! 5a//b· 7a mod b
Ingewikkeldere programma’s 9
Grootste gemeenschappelijke deler F =
✓7 13,39
35,2 7,11
19,38 55, 3
11,5 6,7
2,11 3
◆
2a· 3b 7! · · · 7! 5gcd(a,b)
Ingewikkeldere “programma’s” 10 PRIMEGAME
F =
✓17 91,78
85,19 51,23
38,29 33,77
29,95 23,77
19, 1 17,11
13,13 11,15
2 ,1 7,55
1
◆
2 7! 15 7! 82 5
725 7!
7!
5 192
7!75 22
7!
425 7!390 7!330 7!2
907!
07! 77 910 17 7!
07!
1567!
1327!116 7! 3087!
364 7!68 4 7!
7! 7!30 7! 225 3712
57!10
8757!
288757! 25375 7!
673757!
79625
7!
14875
7!13 7!2 650
5507!
23407!1980
7!17407!4620 7! 4060 7! 107807!
12740
7!23807!
21847!
4087!15
27!927!380
7!
2307!
9507!
5757!23757!96257!11375 7!2125 7! 1950 7!16507!14507!38507!45507!8507!7807!6607!5807!15407!18207!3407!3127!2647!2327!6167!7287!1367!87!607!450 7!33757!185625 7!163125 7!433125 7! 380625 7!10106257!· ··
2 7! · · · 7! 227! · · · 7! 23 7! · · · 7! 257! · · · 7! 27 7! · · · 7! 211 7! · · · 7! 213 7! · · · 7! 217 7! · · ·
Machten van twee in uitvoer corresponderen juist met de priemgetallen, in oplopende volgorde!
These van Church–Turing 12
“Elke intu¨ıtief berekenbare functie is berekenbaar op een Turingmachine.”
Turingmachine Minsky register machinem
m FRACTRAN
Dus: “Elke intu¨ıtief berekenbare functie is berekenbaar via FRACTRAN”.
“Universele computer” 13
POLYGAME
F = 0 BB
@ 583 559,629
551,437 527, 82
517,615 329,371
129, 1 115,53
86,43 53,23
47,341 46 , 41
43,47 41,29
37,37 31,299
29,47 23,161
15 ,527 19 ,159
7 , 1 17, 1
13,1 3
1 CC A
“Universele computer” 14
Stelling (Conway) Definieer een parti¨ele functie fc :N ! N als volgt:
fc(n) =
(m als POLYGAME c · 22n 7! 22m; ongedefinieerd anders.
Dan komt elke berekenbare functie voor in de lijst f0, f1, f2. . .!
I “Catalogusgetallen” c voor berekenbare functies.
I Voorbeeld: c = 2268945 ) fc(n) = n +1.