Schreiben Sie Prozeduren für G (Primzahlverschlüsselung) und $G^{−1}$:$G(A^∗)→A^∗$. Erzeugen Sie auch den Stream für $A^∗$ bei gegebenem Alphabet A unter Verwendung der Primzahlverschlüsselung als Gödelisierung.
import math from itertools import chain alphabet = ['a','b','c'] def prim(n): if n == 2: return True if n % 2 == 0: return False else: for i in range(2,int(math.sqrt(n))+1): if n % i == 0: return False return True def nextPrim(n): c = n + 1 while(True): if prim(c): return c c += 1 def G(word): g = 1 p = 1 for char in word: if char not in alphabet: return "word not in alphabet" i = 0 while i < len(alphabet): if char == alphabet[i]: i += 1 break i += 1 p = nextPrim(p) g *= p**i return g def Gminus1(goedelnum): l = faktorisiere(goedelnum) l.append(0) r = [] c = 0 search = l[0] for num in l: if(search == num): c+=1 else: r.append(alphabet[c-1]) c = 1 search = num return "".join(r) def faktorisiere(n): l = [] for i in chain([2], range(3, n//2 + 1, 2)): while n % i == 0: l.append(i) n = n // i if i > n: break return l
print(G("abc")) print(Gminus1(2250)) print(G("aba")) print(Gminus1(90)) print(G("ababbabaacc")) print(Gminus1(636539951960324922510)) print(G("ba")) print(Gminus1(12)) print(Gminus1(2252))
ausführen