TIA: Flussdiagramme, Maschinen und berechenbare Zahlenfunktionen (Lernziele KE1, Update 2)
Update: Einwand von Felix aufgenommen.
Update: Marion hat einen Fehler bei der Berechnung der  gefunden. Danke!
 gefunden. Danke!
Update: Eine Registermaschine kann nicht die Subtraktion, sondern nur die arithmetische Differenz.
Update: Hinweis darauf, dass das erste Register bei der Eingabecodierung  für eine Maschine belegt werden kann (wir haben keine Einschränkungen), aber nicht durch die Eingabecodierung für eine Registermaschine!
 für eine Maschine belegt werden kann (wir haben keine Einschränkungen), aber nicht durch die Eingabecodierung für eine Registermaschine!
Als ich die ersten Beiträge zur Kurseinheit 1 von Teil A der theoretischen Informatik geschrieben habe, orientierte ich mich an den Themen. Entstanden sind damit die Unterbeiträge:
- Normale und allgemeine Registermaschinen
- Einzelschritt- und Schrittzahlfunktion sowie Übergangsrelationen (Update)
- Beweis der Addition zweier Register mit einer Registermaschine
Irgendwann, gegen Ende der Kurseinheit 5 habe ich gemerkt, dass es vielleicht sinniger ist anhand der Lernziele zu gehen. Das bringt etwas mehr Struktur in die Beiträge und wirft einen roten Faden durch das Skript.
Als ich dann bei Kurseinheit 7 von Teil B angelangt war, hat sich mein Entschluss gefestigt die alten Beiträge ebenfalls zu überarbeiten. Was ich hiermit also tun möchte.
Lernziel 1
Angabe und Erläuterung der Definition des Flussdiagramms
Ich würde vorschlagen, wir definieren wieder und erklären die Definition Zeile für Zeile: das Flussdiagramm ist ein 4-Tupel 
: Markenmenge
: Datenmenge
: Startmarke
: zu jeder Marke gehört entweder eine Zuweisung
oder eine Verzweigung/Test
Beispiel gefällig?
Beispiel:  mit
 mit
 : wir haben nur vier Marken im Flussdiagramm
: wir haben nur vier Marken im Flussdiagramm
 : wir operieren auf max. zweistelligen, natürlichen Zahlen
: wir operieren auf max. zweistelligen, natürlichen Zahlen
 : die Anfangsmarke ist
: die Anfangsmarke ist 
Und nun kommt unsere Funktion, die jeder Marke eine Operation zuweist. Das macht das Flussdiagramm nämlich erst aus.
 (Zuweisung)
 (Zuweisung)
 (Verzweigung/Test)
 (Verzweigung/Test)
 (Zuweisung)
 (Zuweisung)
 (Haltemarke)
 (Haltemarke)
Und wenn wir  auf Papier bringen:
 auf Papier bringen:
Nicht so schwer, oder? Was tut das Flussdiagramm  ? Nichts besonderes: es zählt nur
? Nichts besonderes: es zählt nur  hoch bis es größer ist als
 hoch bis es größer ist als  . Nicht besonders sinnvoll, aber kurz (ich bin faul, sorry) und anschaulich.
. Nicht besonders sinnvoll, aber kurz (ich bin faul, sorry) und anschaulich.
Antwort zum Lernziel: Ein Flussdiagramm besteht aus einer Marken- und Datenmenge, einer Startmarke und einer Funktion, die jeder Marke aus der Markenmenge eine Zuweisung oder eine Verzweigung zuordnet.
Lernziel 2
Angabe und Erläuterung der Semantik des Flussdiagramms
Semantik? Bedeutung! Das Flussdiagramm  definiert nämlich nichts anderes als eine Funktion
 definiert nämlich nichts anderes als eine Funktion  , die aus den Parametern (oben waren es
, die aus den Parametern (oben waren es  und
 und  ) in einer Endkonfiguration (so denn es eine gibt) ein Ergebnis generiert. Die Semantik eines Flussdiagramms gliedert sich in folgende Begriffe:
) in einer Endkonfiguration (so denn es eine gibt) ein Ergebnis generiert. Die Semantik eines Flussdiagramms gliedert sich in folgende Begriffe:
- Konfiguration: z.B. Anfangs- und Endkonfiguration sowie Zwischenkonfigurationen
- Einzelschrittfunktion: Übergang in einem Berechnungsschritt von einer Konfiguration in eine andere
- Schrittzahlfunktion:  wenn es zu einer Eingabe keine Endkonfiguration gibt oder die Anzahl der Schritte, die zu einer Eingabe bis zur Endkonfiguration geführt haben wenn es zu einer Eingabe keine Endkonfiguration gibt oder die Anzahl der Schritte, die zu einer Eingabe bis zur Endkonfiguration geführt haben
- Gesamtschrittfunktion: Endkonfiguration zu einer Eingabe. Wenn sie existiert. Ansonsten  . .
- Semantik: Das Ergebnis
Beispiel:  (von oben)
 (von oben)
Sagen wir, wir starten  mit
 mit  und
 und  .
.
- Anfangskonfiguration:  und Endkonfiguration: und Endkonfiguration: (Zwischenkonfigurationen lasse ich mal weg) (Zwischenkonfigurationen lasse ich mal weg)
- Einzelschrittfunktion: z.B.  . Nach einem Schritt befinden wir uns in Marke . Nach einem Schritt befinden wir uns in Marke und haben nur und haben nur gesetzt. Würden wir aber z.B. gesetzt. Würden wir aber z.B. nehmen, so müssten wir fünf Berechnungsschritte im Flussdiagramm ausführen und wären bei nehmen, so müssten wir fünf Berechnungsschritte im Flussdiagramm ausführen und wären bei

(Update: Nach Einwand von Felix korrigiert. Danke!)
- Schrittzahlfunktion:  . Nach . Nach Schritten kommen wir, ausgehend von der Anfangskonfiguration Schritten kommen wir, ausgehend von der Anfangskonfiguration in die Endkonfiguration in die Endkonfiguration . .
- Gesamtschrittfunktion:  . Die Endkonfiguration zur Anfangskonfiguration . Die Endkonfiguration zur Anfangskonfiguration ist eben ist eben und damit unsere Gesamtschrittfunktion. und damit unsere Gesamtschrittfunktion.
- Semantik:  . Das Ergebnis der harten Arbeit unseres Flussdiagrsmms. . Das Ergebnis der harten Arbeit unseres Flussdiagrsmms.
Auch nicht viel schwerer als Lernziel 1.
In einem alten Beitrag habe ich das bereits für Registermaschinen aufgegriffen.
Antwort zum Lernziel: das Flussdiagramm definiert eine Funktion  (die Semantik des Flussdiagramms) auf der Datenmenge des Flussdiagramms, welche von einer Anfangskonfiguration (Startmarke, Eingabe) nach endlich vielen Schritten zu einer Endkonfiguration (Endmarke, Ausgabe) führt. Oder auch nicht.
 (die Semantik des Flussdiagramms) auf der Datenmenge des Flussdiagramms, welche von einer Anfangskonfiguration (Startmarke, Eingabe) nach endlich vielen Schritten zu einer Endkonfiguration (Endmarke, Ausgabe) führt. Oder auch nicht.
Die Belegung der Variablen im Flussdiagramm ist das Ergebnis der Berechnung, es gilt dann  . Gibt es zu der Eingabe kein Ergebnis, so ist
. Gibt es zu der Eingabe kein Ergebnis, so ist  .
.
Lernziel 3
Angabe und Erläuterung der Definition und Semantik einer Maschine
Kommen wir nun zu den Maschinen. Warum reicht uns das Flussdiagramm von oben nicht? Weil die Datenmenge  des Flussdiagramms meistens nicht mit der Definitions- oder Bildmenge unserer durch das Flussdiagramm darzustellenden Funktion übereinstimmen wird. Wir brauchen hier also zusätzlich noch ein paar andere Dinge: eine Maschine ist ein 5-Tupel mit
 des Flussdiagramms meistens nicht mit der Definitions- oder Bildmenge unserer durch das Flussdiagramm darzustellenden Funktion übereinstimmen wird. Wir brauchen hier also zusätzlich noch ein paar andere Dinge: eine Maschine ist ein 5-Tupel mit  .
.
ist ein Flussdiagramm (siehe oben)
ist eine Eingabe- und
eine Ausgabemenge.
: Eingabecodierung. Es ist nichts weiter als eine Funktion, die aus einem Element aus
eine Eingabecodierung aus
für unser Flussdagramm ausgibt. Under Flussdiagramm nimmt nämlich keine Elemente aus
, sondern nur aus
entgegen.
: Ausgabecodierung. Ebenfalls nur eine Funktion, die hier jedoch zu einem Element aus
, der Datenmenge des Flussdiagramms ein Element aus der Ausgabemenge
zuweist.
Damit berechnet
, unsere Maschine also eine Funktion
Das letztere erschließt sich wahrscheinlich nicht sofort. Aber wie können das an einem Beispiel etwas anschaulicher gestalten.
Achtung (Update): während wir bei der Eingabecodierung bei einer Maschine es zulassen, dass wir das erste Register belegen, tun wir das keinesfalls bei einer Registermaschine! Das ist bei der Initialbelegung durch die Funktion  nicht zulässig, denn es fungiert als Ergebnisregister und ist initial immer mit
 nicht zulässig, denn es fungiert als Ergebnisregister und ist initial immer mit  belegt!
 belegt!
Beispiel: Maschine  mit dem Flussdiagramm von oben,
 mit dem Flussdiagramm von oben,  und den zusätzlichen Mengen und Funktionen
 und den zusätzlichen Mengen und Funktionen
 : die Mengen unserer Eingabe- und Ausgabecodierungen für unsere Maschine sind nicht mehr Tupel (
: die Mengen unserer Eingabe- und Ausgabecodierungen für unsere Maschine sind nicht mehr Tupel ( ), wie sie das Flussdiagramm brauchst, sondern bestehen nur noch aus einem einzigen Element.
), wie sie das Flussdiagramm brauchst, sondern bestehen nur noch aus einem einzigen Element.
 mit
 mit  .
.
 mit
 mit 
Wir können unsere Maschine  also einfach nur mit
 also einfach nur mit  füttern und erhalten durch die Eingabefunktion
 füttern und erhalten durch die Eingabefunktion  auch unser
 auch unser  für die Eingabe in unser Flussdiagramm. Ähnliches gilt für die Ausgabecodierung: unser Flussdiagramm gibt uns
 für die Eingabe in unser Flussdiagramm. Ähnliches gilt für die Ausgabecodierung: unser Flussdiagramm gibt uns  als Ausgabe heraus, was wir mit der Funktion
 als Ausgabe heraus, was wir mit der Funktion  in
 in  umwandeln.
 umwandeln.
Setzen wir also  mal ein:
 mal ein:
 . Damit füttern wir unser Flussdiagramm und bekommen als Ausgabe des Flussdiagramms
. Damit füttern wir unser Flussdiagramm und bekommen als Ausgabe des Flussdiagramms  . Das werfen wir in unsere Ausgabecodierung
. Das werfen wir in unsere Ausgabecodierung  und haben die Ausgabe unserer Maschine
 und haben die Ausgabe unserer Maschine  .
.
Der letzte Punkt unserer Maschine mit ausgefülltem  bedeutet also:
 bedeutet also:

That's it.
Antwort zum Lernziel: eine Maschine tut für uns also nichts anderes, als es uns zu ermöglichen nicht mehr auf der Datenmenge  des Flussdiagramms operieren zu müssen. Durch die "Eingabecodierungs-Funktion"
 des Flussdiagramms operieren zu müssen. Durch die "Eingabecodierungs-Funktion"  können wir aus einer beliebigen Eingabemenge
 können wir aus einer beliebigen Eingabemenge  in die Datenmenge
 in die Datenmenge  des Flussdiagramms abbilden und so unser Flussdiagramm mit einer passenden Eingabe füttern.
 des Flussdiagramms abbilden und so unser Flussdiagramm mit einer passenden Eingabe füttern.
Mittels der "Ausgabecodierungs-Funktion"  gelingt uns auch der Rückweg aus der Ausgabe des Flussdiagramms (die ja ein Element aus
 gelingt uns auch der Rückweg aus der Ausgabe des Flussdiagramms (die ja ein Element aus  ist) in die Ausgabemenge
 ist) in die Ausgabemenge  .
.
Damit ist die Semantik einer Maschine die Funktion  , die mit Hilfe von
, die mit Hilfe von  und
 und  die Mengen
 die Mengen  und
 und  von, bzw. in die Datenmenge
 von, bzw. in die Datenmenge  für das Flussdiagramm überführt. Es gilt somit
 für das Flussdiagramm überführt. Es gilt somit  wenn wir von einer Anfangskonfiguration zu einer Endkonfiguration kommen. Ansonsten ist
 wenn wir von einer Anfangskonfiguration zu einer Endkonfiguration kommen. Ansonsten ist  .
.
Lernziel 4
Angabe und Erläuterung der Definition einer Registermaschine
Kommen wir nun zu den Registermaschinen. Den eig. Stars dieser Kurseinheit. Ich hatte bereits in diesem Beitrag etwas zum Thema geschrieben. Es macht also keinen Sinn das hier noch einmal zu Wiederholen. Daher: bitte dort nachlesen und wiederkommen 😉
Update: nicht vergessen, die Eingabecodierung für eine Registermaschine belegt nicht das erste Register  !
!
Ebenso ergeht es uns mit der Ausgabecodierung: uns ist egal, was in den anderen Registern steht, wir finden nur das erste Register spannend:
Antwort zum Lernziel: die Registermaschinen bestehen aus Registern mit durch die Eingabecodierung induzierten Registerbelegungen und der "Ausgabecodierungs-Funktion", welche uns das 1. Register (Register  ) der Registermaschine als Ausgaberegister festlegt. Dadurch ist es uns nur möglich die Register
) der Registermaschine als Ausgaberegister festlegt. Dadurch ist es uns nur möglich die Register  mittels Eingabecodierung zu belegen.
 mittels Eingabecodierung zu belegen.
Die Registermaschine verfügt nur über drei Grundoperationen: Addition von  ,
, Subtraktion arithmetische Differenz und Test auf  .
.
Lernziel 5
Angabe und Erläuterung der Definition einer verallgemeinerten Registermaschine
Auch die Erläuterungen zur verallgemeinerte Registermaschine sind hier zu finden. Daher kümmern wir uns nur um das Lernziel.
Antwort zum Lernziel: Durch die verallgemeinerte Registermaschine ist es uns möglich weitaus mehr Operationen als die Grundoperationen Addition und Subtraktion von  , sowie Test auf
, sowie Test auf  durchzuführen.
 durchzuführen.
Diese Operationen werden jedoch aus den Grundoperationen zusammengesetzt und erlauben es uns Registerinhalte miteinander zu vergleichen oder Registern Werte zuzuweisen, die durch Funktionen berechnet wurden (wobei Registerinhalte der Registermaschine selbst als Parameter dieser Funktion fungieren können).
Lernziel 6
Angabe der Definition einer berechenbaren Zahlenfunktion
Ich gebe mal ganz frech die Definition aus dem Skript wieder:
Eine Funktion
heißt berechenbar wenn es eine
-stellige Registermaschine
gibt, die sie berechnet, so dass gilt:
.
Das ist eine der zentralen Definitionen im Teil A der theoretischen Informatik und findet sich auch häufig als Frage in den Protokollen der mündlichen Prüfung wieder: diese Definition sagt uns, dass wir eine Funktion dann berechenbar nennen können, wenn wir eine Registermaschine angeben, die sie berechnet und im Endeffekt auf die Grundoperationen Addition und Subtraktion von  sowie Test auf
 sowie Test auf  zurückführt.
 zurückführt.
Beispiel: 
Wollen wir also nachweisen, dass die Funktion  berechenbar ist, so müssen wir eine Registermaschine inkl. Flussdiagramm angeben, dass uns die gleiche Ausgabe in Register
 berechenbar ist, so müssen wir eine Registermaschine inkl. Flussdiagramm angeben, dass uns die gleiche Ausgabe in Register  liefert, wie die Funktion
 liefert, wie die Funktion  .
.
Für Details und den Beweis, dass die Addition zweier Register ( ) berechenbar ist, empfehle ich euch hier den alten Beitrag zum Thema.
) berechenbar ist, empfehle ich euch hier den alten Beitrag zum Thema.
Antwort zum Lernziel: Wir können eine Funktion mit  Parametern also berechenbar nennen wenn wir sie mit einer
 Parametern also berechenbar nennen wenn wir sie mit einer  -stelligen Registermaschine und der Grundoperationen innerhalb eines Flussdiagramms berechnen können., so dass gilt:
-stelligen Registermaschine und der Grundoperationen innerhalb eines Flussdiagramms berechnen können., so dass gilt:  .
.
Lernziel 7
Zeigen, dass eine Funktion berechenbar ist
Das Thema wurde ebenfalls hier detaillierter besprochen und gezeigt wie man eine Funktion (das angesprochene Beispiel mit der Addition zweier Register) als berechenbar nachweist. Ich begnüge mich also hier mit dem letzten Lernziel dieser Kurseinheit.
Antwort zum Lernziel: Um zu beweisen, dass eine Funktion berechenbar ist, muss man diese am Ende nur mit den Grundoperationen Subtraktion und Addition von  und Test auf
 und Test auf  abbilden können.
 abbilden können.
Hat man z.B. die Addition mittels dieser Grundoperationen nachgebildet und mittels vollständiger Induktion bewiesen, dass sie für alle Werte das gewünschte Ergebnis liefert, so kann man diese komplexe Operation nun in seiner verallgemeinerten Registermaschine für weitere Beweise anderer Funktionen nutzen.
Z.B. kann man ausgehend von den Grundoperationen die Addition zweier Register  beweisen und anschließend mit der Addition den Beweis der Multiplikation
 beweisen und anschließend mit der Addition den Beweis der Multiplikation  angehen. Mit der Multiplikation gelingt uns dann das Beweisverfahren für die Exponentialfunktion
 angehen. Mit der Multiplikation gelingt uns dann das Beweisverfahren für die Exponentialfunktion  , usw.
, usw.
Die Lernziele von Kurseinheit 1 haben wir damit durch. Noch 6 und der Kurs ist komplett 😉 Bei Fehler wie immer: ASAP in die Kommentare damit falsches Zeug nicht so lange online bleibt!
Sie können zum Ende springen und ein Kommentar hinterlassen. Pingen ist im Augenblick nicht erlaubt.






August 14th, 2015 16:40
Hallo,
erstmal Danke für die tolle Ausarbeitung!
Ich habe eine Frage zu "Beispiel: F1=(Q,D,σ,q0) (von oben)" - kann es sein, dass sich da ein Fehler eingeschlichen hat?
Ich denke, dass man nach ES³ eigentlich schon in die Marke 4 gehen müsste, da hier y ja schon 3 ist - was ja größer als x=2 ist. Damit wäre die ES nur 7 statt 8, oder?
Habe ich das Beispiel falsch verstanden?
lg, Marion
August 24th, 2015 17:48
Nein, hast Du nicht. Danke für die Korrektur! 😉
September 24th, 2015 16:47
Servus,
Erst mal RESPEKT. Ich belege theo.Info. A dieses Semester und ich glaube ich werde hier öfter mal vorbei schauen.
Frage zu Lernziel 1. Müsste Sigma(3) nicht auf Marke 2 verweisen? Wenn Sigma(3) auf Marke 1 verweist, wird y doch wieder y=1 gesetzt und wir laufen unendlich in der Maschine, sofern x >= 1 ist oder? In der Grafik ist es ja richtig eingezeichnet nur eben in der Definition nicht.
März 27th, 2016 14:59
Hallo,
erstmal vielen Dank für die ausführliche Ausarbeitung zum Skript. Mir ist noch folgendes aufgefallen:
Wie von meinem Vorschreiber schon erwähnt müsste es sigma(3) = (y=y+1,2) heißen.
ES(4,(2,3)) ist nach Def. 2.2.3.2 nicht definiert, da sigma(4) = HALT, also ES(4,(2,3)) = div. Demnach müsstest du mit ES^6 anfangen. Es gilt dann ES^6(1,(2,0)) = (4,(2,3)). Auch ist die Definition der verallgemeinerten Registermaschine meiner Meinung nach nicht ganz richtig. Wir können nicht nur Ri != Rj testen, sondern allgemein (ai1, ..., aim) Element A testen, wobei A eine beliebige (also auch nicht-rekursive) Teilmenge von N^m ist. Dein Fall ist sicherlich ein interessanter Spezialfall davon, deckt aber bei weitem nicht alles ab. Als Beispiel führe ich hier mal den Test Ri=5*Rj+2*R(j+1) an, da ist aber der Kreativität wohl keine Grenzen gesetzt.
Noch eine Kleinigkeit, die ich allerdings als wichtig erachte (im Beitrag zur Definition der Registermaschine): "Der Unterschied zwischen den beiden ist, dass die allgemeinen Registermaschinen zusätzliche, komplexe Funktionen anbieten. Diese müssen jedoch durch normale Registermaschinen ausgedrückt werden können." Der zweite Satz ist denke ich falsch, da eine verallgemeinerte Registermaschine weder eine berechenbare Funktion g in Def. 3.2.1a bzw. eine rekursive Menge A in Def. 3.2.1b verwenden muss. Wird z.B. ein nicht berechenbares g verwendet, so gibt es keine (normale) Registermaschine, die dies ausdrückt. Anders herum ist allerdings jede Registermaschine eine verallgemeinerte Registermaschine. Was du glaube ich meinst, ist, dass jede berechenbare (!) verallgemeinerte Registermaschine durch eine (normale) Registermaschine abgelöst werden kann, sprich die gleiche Semantik besitzt (siehe 3.2.4 und auch KE2 erstes Kapitel).
März 31st, 2016 09:27
Hallo Felix,
ist korrigiert. Zum Thema Registermaschine kann ich Dir gerade nicht folgen. Bin zu lange aus dem Stoff raus, werde aber bei Gelegenheit noch einmal die Beiträge durchsehen, um zu schauen was Du meinst.
Die Definition der verall. Maschine ist in diesem Beitrag: http://fernuni.digreb.net/?p=468 - dort finde ich aber auf die Schnelle nirgends eine Einschränkung auf nur .
.
Danke Dir.