BuK/IIm20/Vorlesung 8 Seidl

Aus ProgrammingWiki

Wiki-Quelltext dieser Seite.

<language>Python</language>
=== S. 4 ===
[[Bild:Fseidl_20210515_151715.jpg]]
[[Bild:Fseidl_20210515_151731.jpg]]

=== S. 11 ===
<code id="609fcbfe9c7ff">
import itertools

# A Generator
alphabet = ["a", "b", "c"]
def a(alphabet):
        for i in range(0, len(alphabet)+1):
            for word in itertools.product(alphabet, repeat=i):
                    yield word


def wort_index(buchstabe, wort):
    for i, w in enumerate(a(wort)):
        if len(w) != 1:
            continue
        if w[0] == buchstabe:
            return i

# Primzahl Generator

def primzahl_generator(n):
    while True:
        if ist_primzahl(n):
            yield n
        n += 1
 
def ist_primzahl(n):
    if n == 2:
        return True

    for i in range(2, n):
        if n % i == 0:
            return False 
    
    return True
    
# Gödelnummer

def get_goedelnummer(wort):
    elemente = []
    for i_b, buchstabe in enumerate(wort):
        primzahl = -1
        for i_p, p in enumerate(primzahl_generator(2)):
            primzahl = p
            if i_b == i_p:
                break
        xi = wort_index(buchstabe, wort)
        elemente.append(primzahl**xi)
    
    produkt = 1
    for faktor in elemente:
        produkt = faktor * produkt
    
    return produkt

# Reverse Gödelnummer (Holzhammer)

def wort_von_goedelnummer(n):
    for w in a(alphabet):
        goedelnummer = get_goedelnummer("".join(w))
        if goedelnummer == n:
            return "".join(w)
</code>

<run id="609fcbfe9c86d">
print(get_goedelnummer("aba"))
print(wort_von_goedelnummer(90))
</run>