{"id":3020,"date":"2021-08-08T16:03:57","date_gmt":"2021-08-08T13:03:57","guid":{"rendered":"https:\/\/demensdeum.com\/blog\/?p=3020"},"modified":"2024-12-16T22:32:21","modified_gmt":"2024-12-16T19:32:21","slug":"turing-bombe","status":"publish","type":"post","link":"https:\/\/demensdeum.com\/blog\/de\/2021\/08\/08\/turing-bombe\/","title":{"rendered":"Turing-Bombe"},"content":{"rendered":"<p>Im Jahr 1936 beschrieb der Wissenschaftler Alan Turing in seiner Ver\u00f6ffentlichung \u201eOn Computable Numbers, With An Application to Entscheidungsproblem\u201c den Einsatz einer universellen Rechenmaschine, die dem Problem der L\u00f6sbarkeit in der Mathematik ein Ende setzen k\u00f6nnte. Daraus kommt er zu dem Schluss, dass eine solche Maschine nichts richtig l\u00f6sen k\u00f6nnte, wenn das Ergebnis ihrer Arbeit invertiert und auf sich selbst zur\u00fcckgef\u00fchrt w\u00fcrde. Es stellt sich heraus, dass es unm\u00f6glich ist, ein *ideales* Antivirenprogramm, einen *idealen* Kachelsetzer, ein Programm, das ideale Phrasen f\u00fcr Ihren Absturz vorschl\u00e4gt usw. zu erstellen. Paradox!<\/p>\n<p>Diese universelle Rechenmaschine kann jedoch zur Implementierung jedes beliebigen Algorithmus verwendet werden, den sich der britische Geheimdienst zunutze machte, indem er Turing engagierte und die Entwicklung einer \u201eBombe\u201c-Maschine zur Entschl\u00fcsselung deutscher Nachrichten w\u00e4hrend des Zweiten Weltkriegs erm\u00f6glichte.<\/p>\n<p>Das Folgende ist eine OOP-Modellierung eines Einzelbandcomputers in der Dart-Sprache, basierend auf dem Originaldokument.<\/p>\n<p>Eine Turingmaschine besteht aus einem in Abschnitte unterteilten Film, jeder Abschnitt enth\u00e4lt ein Symbol, die Symbole k\u00f6nnen gelesen oder geschrieben werden. Beispiel einer Filmklasse:<\/p>\n<div class=\"hcb_wrap\">\n<pre class=\"prism line-numbers lang-unknown\" data-lang=\"unknown\"><code>final _map = Map&lt;int, String&gt;(); \n\n  String read({required int at}) { \n    return _map[at] ?? \"\"; \n  } \n\n  void write({required String symbol, required int at}) { \n    _map[at] = symbol; \n  } \n}\n<\/code><\/pre>\n<\/div>\n<p>Es gibt auch ein \u201eScan-Quadrat\u201c, es kann sich \u00fcber den Film bewegen, Informationen lesen oder schreiben, in moderner Sprache &#8211; Magnetkopf. Beispiel einer Magnetkopfklasse:<\/p>\n<div class=\"hcb_wrap\">\n<pre class=\"prism line-numbers lang-unknown\" data-lang=\"unknown\"><code>  int _index = 0; \n  InfiniteTape _infiniteTape; \n  TapeHead(this._infiniteTape) {} \n\n  String next() { \n    _index += 1; \n    move(to: _index); \n    final output = read(); \n    return output; \n  } \n\n  String previous() { \n    _index -= 1; \n    move(to: _index); \n    final output = read(); \n    return output; \n  } \n\n  void move({required int to}) { \n    this._index = to; \n  } \n\n  String read() { \n    return _infiniteTape.read(at: this._index); \n  } \n\n  void write(String symbol) { \n    _infiniteTape.write(symbol: symbol, at: this._index); \n  } \n\n  int index() { \n    return _index; \n  } \n} \n<\/code><\/pre>\n<\/div>\n<p>Die Maschine enth\u00e4lt \u201eM-Konfigurationen\u201c, anhand derer sie entscheiden kann, was als n\u00e4chstes zu tun ist. In moderner Sprache &#8211; Staaten und Zustandsverwalter. Beispiel f\u00fcr einen Statushandler:<\/p>\n<div class=\"hcb_wrap\">\n<pre class=\"prism line-numbers lang-unknown\" data-lang=\"unknown\"><code>  FiniteStateControlDelegate? delegate = null; \n\n  void handle({required String symbol}) { \n    if (symbol == OPCODE_PRINT) { \n      final argument = delegate?.nextSymbol(); \n      print(argument);\n    } \n    else if (symbol == OPCODE_GENERATE_RANDOM_NUMBER_FROM_ZERO_TO_AND_WRITE_AFTER) { \n      final to = int.tryParse(delegate!.nextSymbol())!; \n      final value = new Random().nextInt(to); \n      delegate!.nextSymbol(); \n      delegate!.write(value.toString()); \n    } \n    else if (symbol == OPCODE_INPUT_TO_NEXT) { \n      final input = stdin.readLineSync()!; \n      delegate?.nextSymbol(); \n      delegate?.write(input); \n    } \n    else if (symbol == OPCODE_COPY_FROM_TO) { \n      final currentIndex = delegate!.index(); \n\n\u0438 \u0442.\u0434. \n<\/code><\/pre>\n<\/div>\n<p>Danach m\u00fcssen Sie \u201eKonfigurationen\u201c erstellen. In der modernen Sprache sind dies Operationscodes (Opcodes) und ihre Handler. Beispiel-Opcodes:<\/p>\n<div class=\"hcb_wrap\">\n<pre class=\"prism line-numbers lang-unknown\" data-lang=\"unknown\"><code>const OPCODE_PRINT = \"print\"; \nconst OPCODE_INCREMENT_NEXT = \"increment next\"; \nconst OPCODE_DECREMENT_NEXT = \"decrement next\"; \nconst OPCODE_IF_PREVIOUS_NOT_EQUAL = \"if previous not equal\"; \nconst OPCODE_MOVE_TO_INDEX = \"move to index\"; \nconst OPCODE_COPY_FROM_TO = \"copy from index to index\"; \nconst OPCODE_INPUT_TO_NEXT = \"input to next\"; \nconst OPCODE_GENERATE_RANDOM_NUMBER_FROM_ZERO_TO_AND_WRITE_AFTER = \"generate random number from zero to next and write after\"; \n<\/code><\/pre>\n<\/div>\n<p><strong>Vergessen Sie nicht, einen Opcode und einen Stop-Handler zu erstellen, sonst k\u00f6nnen Sie das Aufl\u00f6sungsproblem nicht beweisen oder nicht beweisen (sic!).<\/strong><\/p>\n<p>Jetzt verbinden wir mithilfe des \u201eMediator\u201c-Musters alle Klassen in der Turing-Maschine-Klasse, erstellen eine Instanz der Klasse, zeichnen das Programm mit einem Tonbandger\u00e4t auf, laden das Band und Sie k\u00f6nnen es verwenden!<\/p >\n<p><em>F\u00fcr mich pers\u00f6nlich blieb die Frage, was prim\u00e4r war, interessant &#8211; Schaffung eines Universalrechners bzw. Beweis des \u201eEntscheidungsproblems\u201c, wodurch als Nebenprodukt ein Rechner entstand.<\/em><\/p>\n<h3>Kassetten<\/h3>\n<p>Zum Spa\u00df habe ich mehrere Kassettenprogramme f\u00fcr meine Version der Maschine aufgenommen.<\/p>\n<p><strong>Hallo Welt<\/strong><\/p>\n<div class=\"hcb_wrap\">\n<pre class=\"prism line-numbers lang-unknown\" data-lang=\"unknown\"><code>hello world \nstop<\/code><\/pre>\n<p><strong>\u0421\u0447\u0438\u0442\u0430\u0435\u043c \u0434\u043e 16-\u0442\u0438<\/strong><\/p>\n<div class=\"hcb_wrap\">\n<pre class=\"prism line-numbers lang-unknown\" data-lang=\"unknown\"><code>0\nif previous not equal\n16\ncopy from index to index\n1\n8\nprint\n?\nmove to index\n0\nelse\ncopy from index to index\n1\n16\nprint\n?\nprint\nFinished!\nstop<\/code><\/pre>\n<p>\u0421\u0430\u043c\u043e\u0439 \u0438\u043d\u0442\u0435\u0440\u0435\u0441\u043d\u043e\u0439 \u0437\u0430\u0434\u0430\u0447\u0435\u0439 \u0431\u044b\u043b\u043e \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u0435 Quine \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u0435\u0447\u0430\u0442\u0430\u0435\u0442 \u0441\u0432\u043e\u0439 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434, \u0434\u043b\u044f \u043e\u0434\u043d\u043e\u043b\u0435\u043d\u0442\u043e\u0447\u043d\u043e\u0439 \u043c\u0430\u0448\u0438\u043d\u044b. \u041f\u0435\u0440\u0432\u044b\u0435 8 \u0447\u0430\u0441\u043e\u0432 \u043c\u043d\u0435 \u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u0447\u0442\u043e \u044d\u0442\u0430 \u0437\u0430\u0434\u0430\u0447\u0430 \u043d\u0435 \u0440\u0435\u0448\u0430\u0435\u043c\u0430 \u0441 \u0442\u0430\u043a\u0438\u043c \u043c\u0430\u043b\u044b\u043c \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e\u043c \u043e\u043f\u043a\u043e\u0434\u043e\u0432, \u043e\u0434\u043d\u0430\u043a\u043e \u0432\u0441\u0435\u0433\u043e \u0447\u0435\u0440\u0435\u0437 16 \u0447\u0430\u0441\u043e\u0432 \u043e\u043a\u0430\u0437\u0430\u043b\u043e\u0441\u044c \u0447\u0442\u043e \u044f \u0431\u044b\u043b \u043d\u0435 \u043f\u0440\u0430\u0432.<\/p>\n<p>\u0420\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u0438 \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u043a\u0430\u0441\u0441\u0435\u0442, \u0438\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0438 \u043d\u0438\u0436\u0435.<\/p>\n<h3>\u0421\u0441\u044b\u043b\u043a\u0438<\/h3>\n<p><a href=\"https:\/\/gitlab.com\/demensdeum\/turing-machine\" target=\"_blank\" rel=\"noopener\">https:\/\/gitlab.com\/demensdeum\/turing-machine<\/a><\/p>\n<h3>\u0418\u0441\u0442\u043e\u0447\u043d\u0438\u043a\u0438<\/h3>\n<p><a href=\"https:\/\/www.astro.puc.cl\/~rparra\/tools\/PAPERS\/turing_1936.pdf\" target=\"_blank\" rel=\"noopener\">https:\/\/www.astro.puc.cl\/~rparra\/tools\/PAPERS\/turing_1936.pdf<\/a><br \/>\n<a href=\"https:\/\/kpolyakov.spb.ru\/prog\/turing.htm\" target=\"_blank\" rel=\"noopener\">https:\/\/kpolyakov.spb.ru\/prog\/turing.htm<\/a><br \/>\n<a href=\"https:\/\/www.youtube.com\/watch?v=dNRDvLACg5Q\" target=\"_blank\" rel=\"noopener\">https:\/\/www.youtube.com\/watch?v=dNRDvLACg5Q<\/a><br \/>\n<a href=\"https:\/\/www.youtube.com\/watch?v=jP3ceURvIYc\" target=\"_blank\" rel=\"noopener\">https:\/\/www.youtube.com\/watch?v=jP3ceURvIYc<\/a><br \/>\n<a href=\"https:\/\/www.youtube.com\/watch?v=9QCJj5QzETI\" target=\"_blank\" rel=\"noopener\">https:\/\/www.youtube.com\/watch?v=9QCJj5QzETI<\/a><br \/>\n<a href=\"https:\/\/www.youtube.com\/watch?v=HeQX2HjkcNo&amp;t=0s\" target=\"_blank\" rel=\"noopener\">https:\/\/www.youtube.com\/watch?v=HeQX2HjkcNo&amp;t=0s<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Im Jahr 1936 beschrieb der Wissenschaftler Alan Turing in seiner Ver\u00f6ffentlichung \u201eOn Computable Numbers, With An Application to Entscheidungsproblem\u201c den Einsatz einer universellen Rechenmaschine, die dem Problem der L\u00f6sbarkeit in der Mathematik ein Ende setzen k\u00f6nnte. Daraus kommt er zu dem Schluss, dass eine solche Maschine nichts richtig l\u00f6sen k\u00f6nnte, wenn das Ergebnis ihrer Arbeit<a class=\"more-link\" href=\"https:\/\/demensdeum.com\/blog\/de\/2021\/08\/08\/turing-bombe\/\">Continue reading <span class=\"screen-reader-text\">&#8220;Turing-Bombe&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"_jetpack_memberships_contains_paid_content":false,"footnotes":""},"categories":[61,52],"tags":[178,175,177,176],"class_list":["post-3020","post","type-post","status-publish","format-standard","hentry","category-techie","category-tutorials","tag-abstract","tag-computer-science","tag-machine","tag-turing","entry"],"translation":{"provider":"WPGlobus","version":"3.0.2","language":"de","enabled_languages":["en","ru","zh","de","fr","ja","pt","hi"],"languages":{"en":{"title":true,"content":true,"excerpt":false},"ru":{"title":true,"content":true,"excerpt":false},"zh":{"title":true,"content":true,"excerpt":false},"de":{"title":true,"content":true,"excerpt":false},"fr":{"title":true,"content":true,"excerpt":false},"ja":{"title":true,"content":true,"excerpt":false},"pt":{"title":true,"content":true,"excerpt":false},"hi":{"title":false,"content":false,"excerpt":false}}},"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"_links":{"self":[{"href":"https:\/\/demensdeum.com\/blog\/de\/wp-json\/wp\/v2\/posts\/3020","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/demensdeum.com\/blog\/de\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/demensdeum.com\/blog\/de\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/demensdeum.com\/blog\/de\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/demensdeum.com\/blog\/de\/wp-json\/wp\/v2\/comments?post=3020"}],"version-history":[{"count":17,"href":"https:\/\/demensdeum.com\/blog\/de\/wp-json\/wp\/v2\/posts\/3020\/revisions"}],"predecessor-version":[{"id":3893,"href":"https:\/\/demensdeum.com\/blog\/de\/wp-json\/wp\/v2\/posts\/3020\/revisions\/3893"}],"wp:attachment":[{"href":"https:\/\/demensdeum.com\/blog\/de\/wp-json\/wp\/v2\/media?parent=3020"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/demensdeum.com\/blog\/de\/wp-json\/wp\/v2\/categories?post=3020"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/demensdeum.com\/blog\/de\/wp-json\/wp\/v2\/tags?post=3020"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}