hilbert
Inhaltsverzeichnis |
TODO: Erläuterungen hinzufügen
Streams
Zunächst einmal einige Funktionen, um mit den Streams umgehen zu können. (Herausgenommen aus streams.ss von Prof. Wagenknecht, Programmierparadigmen). Einige davon mussten auf den vom Wiki verwendeten Interpreter angepasst werden.
Errichten des Hilbert-Hotels
Das Hilberthotel besteht, wie in der Beschreibung zu lesen ist, aus unendlich Zimmern. Die Funktion baue-hilberthotel sorgt für das Errichten der Hotels - die noch leeren Zimmer werden mit #f gekennzeichnet.
Es erfolgt nun die Anzeige der ersten 5 (noch leeren) Zimmer.
Die ersten Gäste erscheinen
Obwohl unendlich Zimmer bereitstehen, sollten seltverständlich auch Einzelbuchungen möglich sein. Die Funktion einzelbuchung ermöglicht das Setzen des Gastes an einer beliebigen Stelle in den abzählbar vielen Hotelzimmern. Ist ein Zimmer bereits belegt, so erscheint die entsprechende Fehlermeldung.
Als erster Gast zieht Otto Grundmann in das Zimmer 3 ein.
Hinweis für mich: setzegast mit letrec realisieren
Weitere Hotelgäste werden erwartet
Der zuvor eingezogene Gast hat gute Kontakte und empfiehlt unser Hotel. Es erscheint eine endliche Anzahl von Gästen - transportiert von einem Kleinbus. Da noch viele viele Zimmer leer stehen, ist es kein Problem diese endlich vielen Personen nacheinander in die freien Zimmer unterzubringen. Herr Grundmann muss nicht umziehen.
Der Hilbert-Bus
Als neue Herausforderung erscheint nun ein Hilbert-Bus, der eine abzählbar (unendliche) Menge an Gästen transportiert. Wir benötigen eine Unterbringung, die möglichst unkompliziert abläuft - auch in weiser Voraussicht, dass noch mehr Hilbert-Busse erscheinen.
Wir bitten die bereits eingecheckten Gäste so umzuziehen, dass nur die geraden Zimmer belegt werden. Wir erhalten folglich mit Garantie leere (noch keinem Gast zugeordnete) Zimmer, auch wenn sich schon unendlich viele Gäste bei uns aufhalten.
Eine Vielzahl von Hilbertbussen
Unser Erfolg hat sich herumgesprochen, am nächsten Tag steht ein Konvoi, der aus unendlich viele Hilbert-Busse besteht, zum Einchecken vor unserer Tür. Unsere Gäste lassen zwar einiges mit sich machen, aber unendlich oft umziehen, um alle Insassen der Busse unterbringen zu können, ist zu viel verlangt.
Es wird folglich ein Verfahren benötigt, das die Insassen in einer Schlange aufstellt, um das zuvor erfolgreich angewendete check-in-Verfahren anwenden zu können. Kurz gesagt, wir müssen beweisen (und umsetzen), dass die jeweils unendlich vielen Passagiere in den unendlich vielen Bussen abzählbar sind - also jedem Passagier eine eindeutige Nummer zuordbar ist. Ähnlich wie beim Beweis der Abzählbarkeit von rationalen Zahlen (siehe Übungsaufgabe) wird die Strategie des Cantorsches Diagonalisierungsverfahren verwendet.
Wie man sehen kann, befinden sich die Personen aus dem Konvoi M in den ungerade Zimmern. Wir haben die unendlich Gäste aus den unendlich Bussen unterbringen können und haben gleichzeitig wieder Platz für weitere unendlich Gäste - unter der Voraussetzung, dass unsere Gäste dazu bereit sind umzuziehen.
Die ursprüngliche Frage, wer denn in Zimmer 234 wohnt, kann nun beantwortet werden: