• Moin,

    immer mal wieder taucht irgendwo eine Doku, ein Video, ein Artikel, oder sonstiges über das Halteproblem auf (auch vor ein paar Wochen in der SB, wo ich etwas ähnliches geschrieben habe wie hier im Thread). Leider bin ich nicht in der Lage zu verstehen warum das Halteproblem ein Problem ist. Und inzwischen geht mir jede Erklärung die ich irgendwo sehe auf den Zeiger, weil ich sie einfach nicht verstehe (bzw. jede beliebige Erklärung sofort mit den unten genannten 2 Punkten widerlegen kann).

    Definition (stark vereinfacht. Aber ich gehe davon aus, dass jeder das Problem kennt):

    Das Programm H entscheidet ob Programm P mit input X (also P(X)) hält, oder nicht.

    Das Programm R mit Input H(...) hält, wenn H(...) entscheidet, dass "..." nicht hält, das Programm R geht in eine Endlosschleife, wenn H(...) entscheidet, dass "..." hält.

    H soll entscheiden ob R hält.

    R hält, wenn H entscheidet, dass R nicht hält und umgekehrt -> Problem.

    Meine Probleme damit:

    1. Instanzen. ALLES ist instanziiert. Die Aussage "R hält, wenn H entscheidet, dass R nicht hält" ist Unfug, da H für einen vollständigen Input (P(X), oder eben R(...)) entscheidet ob P(X) hält. Die Parameter mit denen H gestartet werden sind also zum Zeitpunkt wenn H gestartet wird fixiert. Also können die Parameter sich im Nachhinein nicht mehr ändern und das Ergebnis von H beeinflussen. Und selbst wenn man annimmt, dass es keine Instanzen gibt, dann werden H, R, P und X alle auf einem endlichen Computer (mit endlichem Speicherplatz) ausgeführt, sodass Punkt 2 zur Geltung kommt.

    2. Endlichkeit. ALLES ist endlich. Jedes Programm (wie auch immer es aussehen mag) hat eine endliche Anzahl innerer Zustände (alle bits die das Programm beeinflussen kann). Ein Programm H könnte jetzt jeden inneren Zustand von P(X) mitschreiben. Wenn P(X) in einen inneren Zustand eintritt den es früher schonmal hatte (weil P(X) deterministisch arbeitet), ist P(X) in einer Endlosschleife. Wenn P(X) vorheriges nicht erfüllt wird es nach endlicher Zeit seine endlichen inneren Zustände durchlaufen haben und halten. -> Problem gelöst.

    Kann es sein, dass das Halteproblem nur für "unendliche" Maschinen sinnvoll definiert ist?

    Ich bin einfach zu blöd dafür und Wikipedia hilft mir auch nicht weiter...

    Falls jemand eine "einfache" Erklärung hat wie der Hase läuft, her damit. :D

    Vielleicht habe ich auch einen Denkfehler. Auch in diesem Fall: Her damit.


    Edit: Kaum hab ich die englische Wikipedia angeschaut habe ich meinen eigenen Satz auf englisch gefunden...

    The halting problem is theoretically decidable for linear bounded automata (LBAs) or deterministic machines with finite memory. A machine with finite memory has a finite number of configurations, and thus any deterministic program on it must eventually either halt or repeat a previous configuration

    Na super... Dann bleibt nur noch die Frage übrig, warum das offensichtlich für "nicht existierende Computer" definierte Problem andauernd falsch dargestellt wird...

    lg

    M

  • Sorry, aber ich verstehe gar nichts. Was für ein Haltepunkt? Mir fehlt das innere Bild vor den Augen um was es geht.

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl

  • Sorry, aber ich verstehe gar nichts. Was für ein Haltepunkt? Mir fehlt das innere Bild vor den Augen um was es geht.

    Es geht um das Halteproblem was in gefühlt 99.9% der Fälle als theoretisch unlösbar dargestellt wird, dabei ist es nur auf Maschinen mit unendlichem Speicher theoretisch unlösbar (und selbst dagegen würde ich ein Veto einlegen. Wenn man schon "unendlich" viel Speicher ins Spiel bringt, dann ist 2^unendlich (die Menge Speicher die man brauchen würde um alle inneren Zustände von unendlich vielen Bits zu loggen) nicht weit hergeholt) dargestellt wird, obwohl es für Maschinen mit "endlichem" Speicher (N Bits) theoretisch lösbar ist (vorausgesetzt man hat 2^(N+1) Bits an Speicher um alle theoretisch möglichen Zustände der Maschine mitzuschreiben).

    Dank der englischen Wikipedia (und noch ein paar anderen Infos die ich gefunden habe) ist mein Problem damit eigentlich geklärt, habe den Thread trotzdem offengelassen (und nicht gelöscht/geschlossen), weil mich die Darstellung immer ärgert


    Anschauliches Beispiel:

    - Ein Computer (oder eine Virtual Machine) hat 32 Bit RAM (ja ich weiß, das ist sehr wenig)

    - Der Computer hat einen beliebig großen Programmspeicher.

    - Jedes beliebige Programm A das auf diesem Computer läuft (egal wie groß es ist, es liegt im Programmspeicher) kann ausschließlich die 32 Bit RAM manipulieren

    - Es gibt also 2^32 verschiedene Zustände die das RAM haben kann.

    - Ein anderes Programm B (von außerhalb) soll beurteilen ob A hält oder nicht.

    - Das andere B schreibt jeden Zustand von A in eine Logdatei (Größe der Logdatei ist maximal 2^33Bit = 8GBit)

    - Sobald A in einen Zustand verursacht der schonmal in der Logdatei vorkam -> Programm ist in einer Endlosschleife

    - Sonst: A wird eine Anzahl Innerer Zustände < 2^32 durchlaufen und dann terminieren ->

    - qed.

    Fazit:
    Um das Halteproblem für ein Programm A zu lösen muss dem Überwachungsprogramm B ein Speicher von 2^N Bits zur Verfügung stehen, wobei N die Anzahl Bits ist die A manipulieren kann.

    Für endliche Speichergrößen ist das Problem also lösbar (wenn auch unpraktikabel... Angenommen A hat 1MB RAM, dann braucht B 2*2^8388608 Bits RAM, was ziemlich viel ist), und für unendliche Speichergrößen ist es logischerweise auch lösbar, weil wenn man schon mit unendlich anfängt ist 2^(unendlich+1) auch möglich.

    M

  • Jetzt bin ich schon ein wenig schlauer. DANKE SCHÖÖÖÖN !

    Lieben Gruß,
    Alina

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Geheime Information: ;)
    OuBVU5ebLhHu5QvlnAyQB4A7SzBrvWulwL7RLl2BdH5tI6sIYspeMKeXMSXl