BuK/IIm20/Vorlesung 4 Thomas
Aus ProgrammingWiki
Wiki-Quelltext dieser Seite.
<language>Python</language>
= Ab-, Aufzählbarkeit, Semi-Entscheidbarkeit, Entscheidbarkeit =
Ü1
$z = \pi(1,3) = \frac{(x+y)(x+y+1)}{2} + y = \frac{(1+3)(1+3+1)}{2} + 3 = 10 + 3 = 13$
<code id="607c118148df5">
import math
def cantorPaar(x, y):
return (int)(((x+y)*(x+y+1))/2) + y
def getXCantorPaar(z):
w = math.floor((math.sqrt(8*z+1)-1)/2)
t = (w * (w + 1))/2
y = z - t
return (int)(w - y)
def getYCantorPaar(z):
w = math.floor((math.sqrt(8*z+1)-1)/2)
t = (w * (w + 1))/2
return (int)(z - t)
</code>
<run id="607c118148e79">
print(cantorPaar(2, 3))
print(getXCantorPaar(cantorPaar(2, 3)))
print(getYCantorPaar(cantorPaar(2, 3)))
print(cantorPaar(1, 3))
print(getXCantorPaar(cantorPaar(1, 3)))
print(getYCantorPaar(cantorPaar(1, 3)))
</run>
= Seite 26 =
Wenn die Menge $M$ entscheidbar ist, dann ist $M$ aufzählbar.
entscheidbar: Prozedur $\chi$ gibt für jedes eingegeben Wort $w$ aus $A^*$ nach endlicher Zeit ein Ergebnis (#t/#f) aus
aufzählbar: eine total berechenbare surjektive Funktion $f: N \rightarrow M$
TODO
= Seite 27 =
Eine Menge $M$ ist entscheidbar genau dann, wenn $M$ und $A^∗ \ M$ (Komplementmenge) aufzählbare Mengen sind.
Teil 1:
Wenn $M$ eine entscheidbare Menge ist, dann sind $M$ und $A^∗ \setminus M$ aufzählbare Mengen.
$M$ entscheidbar $\rightarrow$ $M$ und $A^∗ \setminus M$ aufzählbar
entscheidbar: Prozedur $\chi$ gibt für jedes eingegeben Wort $w$ aus $A^*$ nach endlicher Zeit ein Ergebnis (#t/#f) aus
aufzählbar: eine total berechenbare surjektive Funktion $f: N \rightarrow M$
Teil 2:
$M$ entscheidbar $\leftarrow$ $M$ und $A^∗ \setminus M$ aufzählbar
= Seite 32 =
<code id="607c2a19575bf">
def M(n):
return 2*n+1
def A_M(n):
return 2*n
def menge_bis(M, n):
print([M(i) for i in range(n)])
def chi_M(n):
c=0
while True:
if M(c) == n:
return print(True)
if A_M(c) == n:
return print(False)
c+=1
</code>
<run id="607c2a195763a">
menge_bis(M, 10)
menge_bis(A_M, 10)
chi_M(50)
chi_M(51)
chi_M(9199)
</run>
= KA =
<code id="607c96c01337d">
import math
alphabet = ['a','b','c']
def cantorPaar(x, y):
return (int)(((x+y)*(x+y+1))/2) + y
def getXCantorPaar(z):
w = math.floor((math.sqrt(8*z+1)-1)/2)
t = (w * (w + 1))/2
y = z - t
return (int)(w - y)
def getYCantorPaar(z):
w = math.floor((math.sqrt(8*z+1)-1)/2)
t = (w * (w + 1))/2
return (int)(z - t)
def generate_a_star(A, count):
A_star = []
for s in A:
A_star.append(s)
for i in range(0, count):
A_star_temp = A_star.copy()
for p in A_star_temp:
for s in A:
if (p + s) not in A_star:
A_star.append(p + s)
A_star.append("")
return A_star
def g(x):
c = 1
while True:
A_Star = generate_a_star(alphabet, c)
if len(A_Star) > x:
return A_Star[x]
else:
c+=1
def chi(w):
if len(w) >= 2:
if w[0] == 'a' and w[1] == 'b':
return True
return False
def f(z):
c = 0
i = 0
while True:
x = getXCantorPaar(c)
y = getYCantorPaar(c)
w = g(x)
#print("w = g(",x,"): " , w)
if chi(w) is True:
i+=1
print(w)
c+=1
if i>=z:
return
</code>
<run id="607c96c013408">
f(500)
</run>