{"id":515,"date":"2012-10-05T10:40:16","date_gmt":"2012-10-05T08:40:16","guid":{"rendered":"http:\/\/fernuni.digreb.net\/?p=515"},"modified":"2025-11-25T21:32:56","modified_gmt":"2025-11-25T20:32:56","slug":"ti-beweis-der-multiplikation-mit-einer-registermaschine","status":"publish","type":"post","link":"https:\/\/fernuni.digreb.net\/?p=515","title":{"rendered":"TI: Beweis der Addition zweier Register mit einer Registermaschine"},"content":{"rendered":"<p>Um zu zeigen, dass eine Zahlenfunktion berechenbar ist muss man nachweisen, dass man die Funktion mit der allgemeinen Maschine berechnen und die komplexen Funktionen und Tests der allgemeine Registermaschine dann durch eine normale Registermaschine&nbsp; ausdr\u00fccken kann (die korrekte Funktion dieser vorausgesetzt bzw. bewiesen). Auch m\u00fcssen die im Flussdiagramm vorkommenden Tests rekursiv, d.h. entscheidbar sein. Wir k\u00fcmmern uns hier um Ersteres. Der Umweg \u00fcber die allgemeine Registermaschine wird gegangen um sich die Schreibarbeit der komplexen Funktionen nur einmal machen zu m\u00fcssen. Hat man z.B. die Multiplikation als komplexe Operation mit einer normalen Registermaschine (nur mit den Operationen Addition\/Subtraktion, arithmetische Differenz und Test auf 0) bewiesen, kann man diese ab sofort in seiner allgemeinen Registermaschine nutzen.<\/p>\n<p>Formal definiert bedeutet es, dass eine Funktion \\(f : \\subseteq \\mathbb{N}^k \\rightarrow \\mathbb{N}\\) dann berechenbar ist, genau dann wenn es eine k-stellige Registermaschine gibt mit \\(f = f_M\\).Bei&nbsp; \\(f_M(Eingabe) = x\\) ist x hierbei das Ergebnis welches nach einem Durchlauf (man ist bei HALT gelandet oder wenn es kein Ende gibt bei \\(div\\)) der Registermaschine (das als Flussdiagramm dargestellt ist) in Register \\(R_0\\) steht. Informal ausgedr\u00fcckt bedeutet es, dass die Funktion \\(f\\) durch Maschine \\(M\\) berechnet werden kann und die Ergebnisse f\u00fcr jede Eingabe f\u00fcr \\(f\\) und \\(f_M\\) gleich sind: eben \\(f = f_M\\).<\/p>\n<p>Nehmen wir als Beispiel die Addition von zwei Registern \\(R_1\\) und \\(R_2\\) durch eine allgemeine Registermachine. Sie berechnet das Ergebnis und legt es dann im Ergebnisregister \\(R_0\\) ab. Hier das zugeh\u00f6rige und unglaublich komplexe Flussdiagramm dazu.<\/p>\n<p><a href=\"https:\/\/fernuni.digreb.net\/wp-content\/uploads\/2012\/10\/RGmulti.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone  wp-image-556\" style=\"margin-left: 150px; margin-right: 250px;\" title=\"RGmulti\" alt=\"\" src=\"https:\/\/fernuni.digreb.net\/wp-content\/uploads\/2012\/10\/RGmulti.png\" width=\"94\" height=\"136\"><\/a><\/p>\n<p>&nbsp;<\/p>\n<p>Da es eine komplexe Funktion ist m\u00fcssen wir sie jedoch mit einer normalen Registermaschine und den drei erlaubten Operationen (Addition und Subtraktion von\\(1\\), sowie Test auf \\(0\\)) abbilden und zeichnen uns hierzu ein passendes Flussdiagramm. Dieses ist nur unwesentlich komplexer.<\/p>\n<p>&nbsp;<\/p>\n<p><a href=\"https:\/\/fernuni.digreb.net\/wp-content\/uploads\/2012\/10\/RG21.png\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone  wp-image-569\" style=\"margin-left: 50px; margin-right: 150px;\" title=\"RG2\" alt=\"\" src=\"https:\/\/fernuni.digreb.net\/wp-content\/uploads\/2012\/10\/RG21.png\" width=\"293\" height=\"239\" srcset=\"https:\/\/fernuni.digreb.net\/wp-content\/uploads\/2012\/10\/RG21.png 488w, https:\/\/fernuni.digreb.net\/wp-content\/uploads\/2012\/10\/RG21-300x245.png 300w\" sizes=\"auto, (max-width: 293px) 100vw, 293px\" \/><\/a><\/p>\n<p>Umgangssprachlich macht die normale Registermaschine folgendes: die inkrementiert das Register \\(R_0\\) zun\u00e4chst genau \\(R_1\\) mal und dekrementiert \\(R_1\\) bei jedem Durchlauf der ersten Schleife (\\(p \\rightarrow q \\rightarrow e\\)). Anschlie\u00dfend wird es in Block \\(p\\) wieder auf 0 gepr\u00fcft. Sollte das Register \\(R_1\\) tats\u00e4chlich 0 sein, bewegen wir uns dann zum Block \\(s\\) um in der zweiten Schleife (\\(s \\rightarrow t \\rightarrow u\\)) das Selbe nochmal mit Register \\(R_2\\) zu veranstalten und \\(R_0\\) weitere \\(R_2\\) Mal zu inkrementieren. Damit wird \\(R_0\\) genau \\(R_1 + R_2\\) Mal inkrementiert und so die Addition von Register \\(R_1\\) und \\(R_2\\) bewerkstelligt. Einfach, nicht? Jetzt stellt sich nur die Frage, wie wollen wir die korrekte Funktionalit\u00e4t unserer normalen Registermaschine beweisen. Alle \\(\\mathbb{N}\\) durchtesten? Ne, lieber nicht.<\/p>\n<h2>Der Beweis<\/h2>\n<p>Der Beweis, dass die Funktion \\(f(x,y) = f_M(x,y) = x+y\\) berechenbar ist gliedert sich selbst in folgende Schritte:<\/p>\n<ol style=\"padding-left: 30px;\">\n<li>allgemeine Registermaschine als Flussdiagramm zeichnen, die die Funktion berechnet. Ggf. die korrekte Funktion auch mit vollst\u00e4ndiger Induktion beweisen. Hier verzichten wir darauf, da es f\u00fcr das kleine Flussdiagramm oben offensichtlich ist. Ebenso ist hier darauf zu achten, dass jeder vorkommende Test entscheidbar ist.<\/li>\n<li>alle komplexen Operationen der allgemeinen Registermaschine durch eine normale Registermaschine als Flussdiagramm ausdr\u00fccken, wo man nur die aus der Definition f\u00fcr normale Registermaschinen erlaubten Funktionen Addition und Subtraktion von \\(1\\), sowie Test auf \\(0\\)&nbsp;durchf\u00fchren darf. Auch hier bitte auf entscheidbare Tests achten.<\/li>\n<li>nun hat man f\u00fcr jede komplexe Operation ein Flussdiagramm, deren korrekte Funktion man mit vollst\u00e4ndiger Induktion beweisen muss.<\/li>\n<\/ol>\n<p>Das Flussdiagramm aus Schritt 2 ist oben dargestellt. Da wir nur eine komplexe Operation (die Addition) haben, haben wir nur ein Flussdiagramm f\u00fcr eine normale Registermaschine. Man \u00fcberzeuge sich, dass nur die erlaubten 3 Operationen benutzt werden. \u00dcberzeugt? Gut! Fangen wir mit dem Induktionsbeweis an.<\/p>\n<p>Wir pr\u00fcfen zun\u00e4chst de F\u00e4lle, die wir als Eingabe haben und leiten hieraus die Induktionsbehauptungen ab:<\/p>\n<p>Wir m\u00f6chten jede nat\u00fcrliche Zahl (\\(\\mathbb{N}\\)) addieren k\u00f6nnen. Im Endeffekt sind diese dann fest und wir haben nur eine unterschiedliche Anzahl an Einzelschritten, die wir durch das Programm gehen m\u00fcssen bis das Ergebnis im Register \\(R_0\\) steht. Abh\u00e4ngig von den Eingabewerten. Da wir zwei Schleifen haben, k\u00f6nnen wir f\u00fcr diese auch zwei Induktionsbehauptungen aufstellen.<\/p>\n<p>Man sieht leicht, dass wir die erste Schleife genau \\(R_1\\) Mal durchlaufen und wieder in Block \\(p\\) landen. Ist z.B. \\(R_1 := 1\\), so sind 3 Einzelschritte notwendig bis wir \\(R_1 = x\\) erneut auf 0 testen und die Schleife verlassen. Das als Registerbelegung erwartete Gesamtergebnis ist also \\((p,(i,x-i,y,0,&#8230;)\\), wobei \\(i\\) die Anzahl der Schleifendurchl\u00e4ufe und somit auch die Anzahl der Inkrementierungen von \\(R_0\\) (eben \\(i\\) im Ergebnis) und Dekrementierungen von \\(R_1\\) (eben \\(x-i\\) im Ergebnis) ist. Der Rest bleibt unangetastet (\\(y\\) und \\(0\\)) Damit ergibt sich schon die erste Induktionsannahme in Abh\u00e4ngigkeit von x:<\/p>\n\\(ES^{3i}(p,(0,x,y,0,&#8230;) = (p,(i,x-i,y,0,&#8230;)\\)\n<p>Das Ergebnis ist so wie wir gewollt haben: ist \\(x := 1\\), so haben wir nur einen Schleifendurchlauf, genau 3 Einzelschritte und am Ende die Registerbelegung \\((i,x-i,y,0,&#8230;)\\) und wir landen wieder im Block \\(p\\). Ist \\(i = 2\\), so haben wir zwei Schleifendurchl\u00e4fe, somit 6 Einzelschritte und landen wieder bei \\(p\\). Die Behauptung scheint also korrekt. Fehlt nur noch der Induktionsbeweis f\u00fcr den Dominoeffekt damit wir nicht unendlich viele F\u00e4lle durchtesten m\u00fcssten.<\/p>\n<blockquote><p>Wir f\u00fchren f\u00fcr die oben aufgestellte<\/p>\n<p>Annahme: \\(ES^{3i}(p,(0,x,y,0,&#8230;)\\) = <span style=\"color: #ff6600;\">\\((p,(i,x-i,y,0,&#8230;))\\)<\/span><\/p>\n<p>einen Induktionsbeweis \u00fcber \\(i\\) durch. Zu beweisen ist:<\/p>\n<p>Behauptung: \\(ES^{3(i+1)}(p,(0,x,y,0,&#8230;) = (p,((i+1),x-(i+1),y,0,&#8230;)\\)<\/p>\n<p>der Einfachheit halber ausrechnen:<\/p>\n\\(ES^{3i+3}(p,(0,x,y,0,&#8230;) = (p,(i+1,x-i-1,y,0,&#8230;)\\)\n<p>D.h. am Ende unseres Beweises muss <span style=\"color: #339966;\">\\((p,(i+1,x-i-1,y,0,&#8230;))\\)<\/span> rauskommen. Wir fangen also an:<\/p>\n<p>\\(ES^{3i+3}(p,(0,x,y,0,&#8230;) = ES^{3}\\)<span style=\"color: #ff6600;\">\\((p,(i,x-i,y,0,&#8230;)\\)<\/span> (wir setzen hier den rechten Teil der Annahme von oben als &#8222;Induktionsschritt&#8220; ein, mit \\(ES^3\\) haben wir unser &#8222;+1&#8220; um es mal nicht unbedingt formal korrekt auszudr\u00fccken und spielen jetzt das Flussdiagramm durch)<\/p>\n<p>= \\(ES^2(q,(i,x-i,y,0,&#8230;))\\) (nun sind wir in Block q)<\/p>\n<p>= \\(ES(r,(i+1,x-i,y,0,&#8230;))\\) (nun sind wir in Block r)<\/p>\n<p>= <span style=\"color: #339966;\">\\((p,(i+1,x-i-1,y,0,&#8230;))\\)<\/span> (am Ende sind wir in Block p)<\/p>\n<p>Und siehe da: das Ergebnis entspricht dem rechten Teil der Behauptung. Damit haben wir die Schleife bewiesen.<\/p><\/blockquote>\n<p>Fehlt uns noch die Annahme f\u00fcr die andere Schleife. Diese ist analog zur ersten Schleife herauszufinden. Wir starten bei Block \\(s\\) und haben die Eingabe \\((x,0,y,0,&#8230;)\\), da wir x bereits aus der vorhergehenden Schleife wissen, \\(R_1\\) aufgrund der Dekrementierung auf \\(0\\) ist und somit nur noch \\(R_2 = y\\) verbleibt, was wir in dieser Schleife genau \\(R_1 = y\\) Mal dekrementieren und \\(R_0 = x\\) somit um die gleiche Anzahl inkrementieren. Wir haben hier ebenfalls drei Schritte bis wir wieder in Block \\(s\\) angekommen sind. Als Ergebnis erwarten wir somit wieder in Block \\(s\\) zu sein und folgende Registerbelegung zu haben: \\((x+i, 0, y-i, 0, &#8230;)\\), da \\(i\\) genau die Anzahl ist, die wir die Schleife durchlaufen und \\(y\\) dekrementiert und \\(x\\) inkrementiert haben. Hier ist dann auch schon die Annahme: \\(ES^{3i}(s,(x,0,y,0,&#8230;) = (s,(x+i,0,y-i,0,&#8230;))\\). F\u00fcr diese f\u00fchren wir nun den Induktionsbeweis \u00fcber \\(i\\) durch:<\/p>\n<blockquote><p>Annahme: \\(ES^{3i}(s,(x,0,y,0,&#8230;) =\\) <span style=\"color: #ff6600;\">\\((s,(x+i,0,y-i,0,&#8230;))\\)<\/span><\/p>\n<p>Zu beweisen ist die Behauptung:<\/p>\n\\(ES^{3(i+1)}(s,(x,0,y,0,&#8230;) = (s,(x+(i+1),0,y-(i+1),0,&#8230;))\\)\n<p>Auch hier einfach ausrechnen:<\/p>\n\\(ES^{3i+3}(s,(x,0,y,0,&#8230;) = (s,(x+i+1,0,y-i-1,0,&#8230;))\\)\n<p>D.h. am Ende unseres Beweises muss <span style=\"color: #339966;\">\\((s,(x+i+1,0,y-i-1,0,&#8230;))\\)<\/span> rauskommen.<\/p>\n<p>Wir fangen an:<\/p>\n<p>\\(ES^{3i+3}(s,(x,0,y,0,&#8230;) = ES^{3}\\)<span style=\"color: #ff6600;\">\\((s,(x+i,0,y-i,0,&#8230;))\\)<\/span> (wieder den rechten Teil der Annahme einsetzen und ab jetzt das Diagramm durchspielen)<\/p>\n<p>\\(=ES^{2}(t,(x+i,0,y-i,0,&#8230;))\\) (nun sind wir in Block t)<br \/>\n\\(=ES(t,(x+i+1,0,y-i,0,&#8230;))\\) (nun sind wir in Block u)<br \/>\n<span style=\"color: #339966;\">\\(=(s,(x+i+1,0,y-i-1,0,&#8230;))\\)<\/span> (nun sind wir an Ende wieder in Block s)<\/p>\n<p>Und auch hier: das Ergebnis entspricht dem rechten Teil der Behauptung. Damit haben wir auch die zweite die Schleife bewiesen.<\/p><\/blockquote>\n<p>Die F\u00e4lle f\u00fcr \\(i = 0\\) (d.h. man springt im Flussdiagramm direkt durch bis zum \\(HALT\\)) habe ich ausgelassen, da sie durch einfaches Ausrechnen offensichtlich sind. Durch die drei Schritte (Flussdiagramm einer allgemeinen Maschine erstellen, Flussdiagramm einer normale Maschine f\u00fcr jede in der allgemeinen Maschine verwendete komplexe Funktion erstellen, Beweis der Korrektheit der normalen Maschinen durch vollst\u00e4ndige Induktion) haben wir bewiesen, dass unsere allgemeine Maschine \\(M\\) die Funktion \\(f(x,y) = x+y\\) berechnet. Damit gilt \\(f_M = f\\).<\/p>\n<p>Wie immer: bei Fehlern bitte Bescheid geben.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Um zu zeigen, dass eine Zahlenfunktion berechenbar ist muss man nachweisen, dass man die Funktion mit der allgemeinen Maschine berechnen und die komplexen Funktionen und Tests der allgemeine Registermaschine dann durch eine normale Registermaschine&nbsp; ausdr\u00fccken kann (die korrekte Funktion dieser vorausgesetzt bzw. bewiesen). Auch m\u00fcssen die im Flussdiagramm vorkommenden Tests rekursiv, d.h. entscheidbar sein. Wir &hellip; <\/p>\n<p class=\"link-more\"><a href=\"https:\/\/fernuni.digreb.net\/?p=515\" class=\"more-link\"><span class=\"screen-reader-text\">\u201eTI: Beweis der Addition zweier Register mit einer Registermaschine\u201c <\/span>weiterlesen<\/a><\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4],"tags":[],"class_list":["post-515","post","type-post","status-publish","format-standard","hentry","category-theoretische-informatik"],"_links":{"self":[{"href":"https:\/\/fernuni.digreb.net\/index.php?rest_route=\/wp\/v2\/posts\/515","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fernuni.digreb.net\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fernuni.digreb.net\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fernuni.digreb.net\/index.php?rest_route=\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/fernuni.digreb.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=515"}],"version-history":[{"count":47,"href":"https:\/\/fernuni.digreb.net\/index.php?rest_route=\/wp\/v2\/posts\/515\/revisions"}],"predecessor-version":[{"id":3499,"href":"https:\/\/fernuni.digreb.net\/index.php?rest_route=\/wp\/v2\/posts\/515\/revisions\/3499"}],"wp:attachment":[{"href":"https:\/\/fernuni.digreb.net\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=515"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fernuni.digreb.net\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=515"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fernuni.digreb.net\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=515"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}