Proseminar SS2022

Zertifizierende Algorithmen

Zertifizierend banner

Inhalt

Algorithmen sind überall. Aber wo viel programmiert wird, gibt es auch Bugs. Während Bugs mit vielen Tests oft erkannt werden können, sind diese keine Garantie für Richtigkeit. Deshalb gibt es das Konzept der zertifizierenden Algorithmen:
Neben dem Resultat geben sie einen kurzen und simplen Beweis (Zertifikat) an, dass das Ergebnis richtig ist. Die Stärke dieses Verfahrens ist, dass der Benutzer selber überprüfen kann, ob die Ausgabe korrekt ist – und das schneller als dieses oder ein anderes Programm nochmal auszuführen oder gar das ganze Programm formal zu verifizieren. So ist kein Vertrauen in die Richtigkeit des Programmes nötig.

Um kurze Zertifikate zu ermöglichen, muss man oft hilfreiche Strukturen des Problems ausnutzen. Deshalb ist das Feld der Zertifizierenden Algorithmen so interessant, nicht nur weil sie nützlich sind, sondern auch tiefe Einblicke in ein Problem födern.

Es gibt für zertifizierende Algorithmen viele Beispiele: Um den größten gemeinsamen Nenner zu bestimmten, nutzt man den Euklidischen Algorithmus. Um zu überprüfen, ob das Ergebnis wirklich der größte gemeinsame Nenner ist, müsste man die Rechnung wiederholen. Ein zertifizerender Algorithmus ist der erweiterte Euklidische Algorithmus (bekannt aus DS).

Auch in der Graphentheorie gibt es viele Beispiele: von relativ einfach bis hin zu ganz ausgefuchst. Relativ simpel sind hier, die Zusammenhangskomponenten eines Graphen herauszufinden oder zu überprüfen, ob ein Graph bipartit ist. Ausgeklügelter ist da schon der zertifizierende Algorithmus für den Planaritätscheck, also zu überprüfen, ob ein Graph auf der Ebene ohne Kantenüberkreuzungen einbettbar ist.

Ort und Zeit

Das Proseminar findet semesterbegleitend wöchentlich statt.

Der erste Vortragstermin ist am 02.05., alle weiteren Termine sind der untenstehenden Tabelle zu entnehmen.

Die Teilnahme an diesem Proseminar ist nur nach einer Anmeldung im Supra moeglich!

Material

Termine und Themen

Datum Thema Student*in
28.03.2022 Kickoff Alle
31.03.2022 Themenvergabe Alle
02.05.2022 Program result checking: A new approach
to making programs more reliable
Firas M. /
Felix B.
09.05.2022 Self-Testing/Correcting with Applications
to Numerical Problems
Andrei M.
16.05.2022 A Framework for the Verification
of Certifying Computation
Felix E.
23.05.2022 Checking the correctness of Memories Cedric D. /
Omar M.
30.05.2022 Linear-time certifying recognition algorithms and forbidden induced subgraphs Hannah B.
13.06.2022 Checking Linked Data Structures Elliot J.
20.06.2022 Reflections on the Pentium Division Bug Simon H.
27.06.2022 Program Checkers for Probability Generation Arthur B.
04.07.2022 Designing Checkers for Programs
that Run in Parallel
Franklin Z.
11.07.2022 Spot-Checkers Laura R.