BuK/IIm20/Vorlesung 3 Grüning
Aus ProgrammingWiki
Wiki-Quelltext dieser Seite.
<language>Python</language>
== Einfache Beispiele für $\chi_M$ ==
Seite 9
'''Beispiel 1'''
<code id="6066ffdbf35ec">
def x_m(word):
return len(word) == 3
</code>
<run id="6066ffdbf36fc">
print(x_m("a"))
</run>
'''Beispiel 2'''
<code id="6066ffdbf3673">
def x_m(word):
if not word:
return False
return word[0] == 'a'
</code>
<run id="6066ffdbf3776">
print(x_m("babababab"))
</run>
'''Seite 10'''
Wie viele berechenbare charakteristische Funktionen gibt es?
Gibt es zu jedem M mindestens ein $\chi_M$ oder auch $\chi_M$ muss nicht entscheidbar sein?
Die Menge aller Teilmengen in A* ist überabzähbar unendlich (Potenzmenge Beweis siehe Vorlesung 2). Dadurch gibt es unendlich viele Mengen M. Dann gibt es mindestens
'''Seite 15'''
Gerade Zahlen sind aufzählbar:
<code id="60671267a7107">
def even_enumerable(number):
return 2*number
</code>
Ist bijektiv (lineare Funktion ist bijektiv), total ($\forall x \in \mathbf{N}$) und berechenbar (da in Python Code)
Prim Zahlen sind aufzählbar:
<code id="60671267a716c">
import math
def is_prime(n):
def helper(t):
if t > math.sqrt(n):
return True
if n % t == 0:
return False
return helper(t + 2)
if n == 2:
return True
if n <= 1 or n % 2 == 0:
return False
return helper(3)
def next_prime(n):
n += 1
while not is_prime(n):
n += 1
return n
def prim(n):
if n == 0:
return 2
return next_prime(prim(n - 1))
</code>
<run id="60671267a71d3">
for i in range(20):
print(prim(i))
</run>
<code id="60671bbce098c">
import copy
def make_words(length, alphabet):
if length == 0:
return []
words = copy.copy(alphabet)
if length == 1:
return words
def word_append(word):
new_words = []
for letter in alphabet:
new_words.append(word + letter)
return new_words
for word in words:
for new_word in word_append(word):
if len(new_word) > length:
return words
words.append(new_word)
return words
def make_a_star(n, alphabet):
length = 1
a = []
if n == 0:
return alphabet[0]
while len(a) < n:
for words in make_words(length, alphabet):
if len(a) == n:
return a[n - 1]
else:
if words not in a:
a.append(words)
length += 1
return a[n - 1]
</code>
<run id="60671bbce0a22">
print(make_a_star(5, ["a", "b", "c"]))
</run>
Anmerkung: make_start ist nur surjektiv (das reicht ja aber auch), da 0 und 1 auf den gleichen Wert abgebildet werden.
'''Seite 16'''
Man kann ganz einfach eine Python Prozedur angeben, welche die Werte vorher zugewiesen hat. Alle anderen aus $\mathbf{N}$ die größer als $|M|$ sind werden dem gleichen Element zugewiesen.
<code id="60671ebad7767">
def finite(n):
M_finite = [...]
if n == 1:
return M_finite[1]
if n == 2:
return M_finite[2]
...
if n == len(M_finite):
return M_finite[len(M_finite)]
return M_finite[0]
</code>
Alternativ könnte man auch auch $|M|$ Restklassen bilden und diese auf die Elemente zuweisen.